@oracle-agent/oracle 0.17.0 → 0.18.0

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.
@@ -1,12 +1,17 @@
1
- import{parseArgs as w}from"node:util";import{spawn as v}from"node:child_process";var m=["SIGINT","SIGTERM","SIGHUP"];function h(r,t=[],a={},l=r){return new Promise(o=>{let e=v(r,t,a),n=!1,p=null,u=new Map(m.map(s=>[s,()=>{p||=s,e.exitCode===null&&e.signalCode===null&&e.kill(s)}]));for(let[s,c]of u)process.on(s,c);let f=()=>{for(let[s,c]of u)process.off(s,c)};e.once("error",s=>{n||(n=!0,f(),process.stderr.write(`oracle: could not start ${l}: ${s.message}
2
- `),o(1))}),e.once("exit",(s,c)=>{if(n)return;n=!0,f();let g=p||c;if(g){process.kill(process.pid,g);return}o(s??1)})})}var S="http://127.0.0.1:8787";function i(){process.stderr.write(`usage: oracle data <serve|call|catalog|health> [args]
1
+ import{parseArgs as k}from"node:util";import{spawn as m}from"node:child_process";var v=["SIGINT","SIGTERM","SIGHUP"];function h(t,a=[],r={},n=t){return new Promise(s=>{let e=m(t,a,r),o=!1,c=null,i=new Map(v.map(l=>[l,()=>{c||=l,e.exitCode===null&&e.signalCode===null&&e.kill(l)}]));for(let[l,p]of i)process.on(l,p);let u=()=>{for(let[l,p]of i)process.off(l,p)};e.once("error",l=>{o||(o=!0,u(),process.stderr.write(`oracle: could not start ${n}: ${l.message}
2
+ `),s(1))}),e.once("exit",(l,p)=>{if(o)return;o=!0,u();let f=c||p;if(f){process.kill(process.pid,f);return}s(l??1)})})}var w="http://127.0.0.1:8787";function g(){process.stderr.write(`usage: oracle data <serve|call|catalog|health> [args]
3
3
  oracle data serve [--port N]
4
- oracle data call <provider> <op> [--args '<json>']
4
+ oracle data call <provider> <op> [key=value ...] [--key value ...] [--args '<json>']
5
5
  oracle data catalog
6
6
  oracle data health
7
- `)}async function d(r,{method:t="GET",body:a}={}){let o=(process.env.ORACLE_DATA_URL||S).replace(/\/$/,"")+r;try{let e=await fetch(o,{method:t,headers:a?{"content-type":"application/json"}:void 0,body:a?JSON.stringify(a):void 0}),n=await e.text();return process.stdout.write(n.endsWith(`
8
- `)?n:n+`
7
+
8
+ examples:
9
+ oracle data call bitcoin-esplora tipHeight
10
+ oracle data call poly-public markets slug=will-oscar-piastri-be-the-2026-f1-drivers-champion
11
+ oracle data call hl-markets coin coin=HYPE
12
+ `)}function y(t){let a=t[0],r=t[1];if(!a||!r)return{ok:!1,error:"provider and op are required"};let n={};for(let s=2;s<t.length;s+=1){let e=t[s];if(e==="--args"){try{Object.assign(n,JSON.parse(t[++s]||"{}"))}catch(c){return{ok:!1,error:`invalid --args JSON: ${c.message}`}}continue}if(e.startsWith("--")){let c=e.slice(2),i=t[s+1];if(i==null||i.startsWith("--")){n[c]=!0;continue}n[c]=i,s+=1;continue}let o=e.indexOf("=");if(o>0){n[e.slice(0,o)]=e.slice(o+1);continue}return{ok:!1,error:`unexpected positional argument '${e}'. Pass parameters as key=value (e.g. slug=${e}), as --key value, or as --args '{"slug":"${e}"}'.`}}return{ok:!0,provider:a,op:r,args:n}}async function d(t,{method:a="GET",body:r}={}){let s=(process.env.ORACLE_DATA_URL||w).replace(/\/$/,"")+t;try{let e=await fetch(s,{method:a,headers:r?{"content-type":"application/json"}:void 0,body:r?JSON.stringify(r):void 0}),o=await e.text();return process.stdout.write(o.endsWith(`
13
+ `)?o:o+`
9
14
  `),e.ok?0:1}catch(e){return e&&(e.code==="ECONNREFUSED"||/fetch failed|ECONNREFUSED/i.test(String(e)))?(process.stderr.write(`oracle: data server not running \u2014 start it with 'oracle data serve'
10
15
  `),4):(process.stderr.write(`oracle data: ${e.message||e}
11
- `),1)}}var R={name:"data",summary:"desk data plane",group:"read",usage:"oracle data serve|call|catalog|health",async run(r){let t=r.argv[0];if(!t||t==="--help"||t==="-h")return i(),t?0:1;if(t==="serve"){let a=null;try{let{values:e}=w({args:r.argv.slice(1),options:{port:{type:"string"}},allowPositionals:!0,strict:!1});a=e.port||null}catch{}let l={...process.env};a&&(l.ORACLE_DATA_PORT=String(a));let o=r.bin("desk-server.mjs");return h(process.execPath,[o],{stdio:"inherit",env:l},"desk-server")}if(t==="health")return d("/health");if(t==="catalog")return d("/data/catalog");if(t==="call"){let a=r.argv[1],l=r.argv[2];if(!a||!l)return i(),1;let o={},e=r.argv.indexOf("--args");if(e>=0)try{o=JSON.parse(r.argv[e+1]||"{}")}catch(n){return process.stderr.write(`oracle data call: invalid --args JSON: ${n.message}
12
- `),1}return d("/data/call",{method:"POST",body:{provider:a,op:l,args:o}})}return i(),1}};export{R as default};
16
+ `),1)}}var N={name:"data",summary:"desk data plane",group:"read",usage:"oracle data serve|call|catalog|health",async run(t){let a=t.argv[0];if(!a||a==="--help"||a==="-h")return g(),a?0:1;if(a==="serve"){let r=null;try{let{values:e}=k({args:t.argv.slice(1),options:{port:{type:"string"}},allowPositionals:!0,strict:!1});r=e.port||null}catch{}let n={...process.env};r&&(n.ORACLE_DATA_PORT=String(r));let s=t.bin("desk-server.mjs");return h(process.execPath,[s],{stdio:"inherit",env:n},"desk-server")}if(a==="health")return d("/health");if(a==="catalog")return d("/data/catalog");if(a==="call"){let r=y(t.argv.slice(1));return r.ok?d("/data/call",{method:"POST",body:{provider:r.provider,op:r.op,args:r.args}}):(process.stderr.write(`oracle data call: ${r.error}
17
+ `),1)}return g(),1}};export{N as default,y as parseDataCallArgs};
@@ -1,15 +1,9 @@
1
- import l from"node:fs";import i from"node:path";var E=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"},xai:{key:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",model:"grok-4-latest"},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"}}),h=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"}});var u=Object.freeze([{name:"oracle",bin:"oracle",label:"Oracle Native (default)",kind:"oracle"},{name:"hermes",bin:"hermes",label:"Hermes Agent",kind:"hermes"},{name:"opencode",bin:"opencode",label:"OpenCode",kind:"mcp"},{name:"claude",bin:"claude",label:"Claude Code",kind:"mcp"},{name:"codex",bin:"codex",label:"OpenAI Codex CLI",kind:"mcp"},{name:"cursor",bin:"cursor",label:"Cursor IDE",kind:"mcp"},{name:"windsurf",bin:"windsurf",label:"Windsurf",kind:"mcp"},{name:"aider",bin:"aider",label:"Aider",kind:"mcp"},{name:"continue",bin:"continue",label:"Continue",kind:"mcp"}]);function d(n){for(let t of(process.env.PATH||"").split(i.delimiter)){let e=i.join(t,n);try{if(l.existsSync(e))return e}catch{}}return null}function c(){let n=[];for(let t of u){if(t.name==="oracle"){n.push({...t,path:process.argv[1]||"oracle"});continue}let e=d(t.bin);e&&n.push({...t,path:e})}return n}function s(){return["oracle harness \u2014 detect installed agent harnesses",""," oracle harness detect scan PATH for Agent Plugins-compatible clients","","Oracle runs natively. If you prefer a different harness,","set ORACLE_CHAT_BACKEND=<name>.","","Detected: opencode, claude, codex, cursor, windsurf, aider, continue, hermes"].join(`
2
- `)}var b={name:"harness",summary:"detect installed agent harnesses",usage:s,async run(n,t){let e=n[0];if(e==="help"||e==="--help"||e==="-h")return process.stdout.write(s()+`
1
+ import u from"node:fs";import c from"node:path";var g=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"},xai:{key:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",model:"grok-4-latest"},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"}}),O=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"}});var d=Object.freeze([{name:"oracle",bin:"oracle",label:"Oracle Native (default)",kind:"oracle"},{name:"hermes",bin:"hermes",label:"Hermes Agent",kind:"hermes"},{name:"opencode",bin:"opencode",label:"OpenCode",kind:"mcp"},{name:"claude",bin:"claude",label:"Claude Code",kind:"mcp"},{name:"codex",bin:"codex",label:"OpenAI Codex CLI",kind:"mcp"},{name:"cursor",bin:"cursor",label:"Cursor IDE",kind:"mcp"},{name:"windsurf",bin:"windsurf",label:"Windsurf",kind:"mcp"},{name:"aider",bin:"aider",label:"Aider",kind:"mcp"},{name:"continue",bin:"continue",label:"Continue",kind:"mcp"}]);function p(n){for(let o of(process.env.PATH||"").split(c.delimiter)){let e=c.join(o,n);try{if(u.existsSync(e))return e}catch{}}return null}function l(){let n=[];for(let o of d){if(o.name==="oracle"){n.push({...o,path:process.argv[1]||"oracle"});continue}let e=p(o.bin);e&&n.push({...o,path:e})}return n}var m=Object.freeze({claude:"claude-code",codex:"codex",cursor:"cursor",windsurf:"vscode",continue:"vscode",opencode:"generic",aider:"generic"});function h(n){if(n.kind==="oracle")return{...n,direction:"native",integrate:null,backendEnv:null,note:"Oracle's own agent loop. This is the default and needs no wiring."};let e=`oracle mcp install ${m[n.name]||"generic"}`;return n.kind==="hermes"?{...n,direction:"both",integrate:e,backendEnv:`ORACLE_CHAT_BACKEND=${n.name}`,note:"Legacy: this hands Oracle's native model loop to Hermes. Prefer the inbound MCP wiring above."}:{...n,direction:"inbound",integrate:e,backendEnv:null,note:"Calls Oracle as an MCP server. Oracle's native model loop stays in charge."}}function f(n){let o=n.map(h),e=o.find(r=>r.direction==="native"),a=o.filter(r=>r.direction==="inbound"||r.direction==="both"),i=o.filter(r=>r.backendEnv),t=[];if(t.push(""),t.push(`Oracle native chat: default${e?` (${e.path})`:""}`),t.push("Oracle runs its own agent loop, memory, skills, and scheduler."),t.push(""),t.push("Integrate Oracle INTO these clients (recommended \u2014 native loop stays):"),a.length===0)t.push(" (none detected \u2014 Oracle runs standalone, nothing else required)");else for(let r of a)t.push(` ${r.label.padEnd(22)} ${r.path}`),t.push(` ${" ".repeat(22)} ${r.integrate}`);if(t.push(""),i.length>0){t.push("Delegate Oracle's model loop to another harness (legacy, not recommended):");for(let r of i)t.push(` ${r.label.padEnd(22)} ${r.backendEnv}`),t.push(` ${" ".repeat(22)} ${r.note}`);t.push("")}return t.push("Detection is capability discovery only. It never changes the backend."),t.join(`
2
+ `)}function s(){return["oracle harness \u2014 detect installed agent harnesses",""," oracle harness detect scan PATH for Agent Plugins-compatible clients","","Two directions, do not confuse them:"," inbound \u2014 the client calls Oracle as an MCP server (oracle mcp install <target>)."," Oracle's native model loop stays in charge. This is integration."," outbound \u2014 Oracle hands its model loop to that harness (ORACLE_CHAT_BACKEND=<name>)."," This surrenders the native harness and is legacy only.","","Detected: opencode, claude, codex, cursor, windsurf, aider, continue, hermes"].join(`
3
+ `)}var C={name:"harness",summary:"detect installed agent harnesses",usage:s,async run(n,o){let e=n[0];if(e==="help"||e==="--help"||e==="-h")return process.stdout.write(s()+`
3
4
  `),0;if(e&&e!=="detect"&&e!=="list")return process.stderr.write(`oracle harness: unknown subcommand '${e}'
4
5
  `),process.stderr.write(s()+`
5
- `),1;let o=c();if(o.length===0)return process.stderr.write(`No agent harnesses detected on PATH.
6
+ `),1;let a=l();return a.length===0?(process.stderr.write(`No agent harnesses detected on PATH.
6
7
  `),process.stderr.write(`Oracle runs natively \u2014 no external agent required.
7
- `),0;let p=o.find(r=>r.kind==="oracle"),a=o.filter(r=>r.kind!=="oracle");process.stdout.write(`
8
- Oracle native chat: default
9
-
10
- `),process.stdout.write(`Installed harnesses:
11
- `);for(let r of a)process.stdout.write(` ${r.label.padEnd(22)} ${r.path}
12
- `);return a.length===0&&process.stdout.write(` (none \u2014 Oracle runs standalone)
13
- `),process.stdout.write(`
14
- Set ORACLE_CHAT_BACKEND=<name> to use a different harness.
15
- `),0}};export{b as default};
8
+ `),0):(process.stdout.write(f(a)+`
9
+ `),0)}};export{h as classifyHarness,C as default,f as renderHarnessReport};