@oracle-agent/oracle 0.22.6 → 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.
@@ -1,4 +1,5 @@
1
- var y="@oracle-agent/oracle";var m=["-y","--package",y,"oracle-data-mcp"],E=/(?:^|_)(?:PRIVATE_KEY|SECRET|TOKEN|PASSWORD|PASSPHRASE|MNEMONIC|SEED)(?:_|$)/i;function l(e,t){if(typeof e!="string"||!e.trim())throw new TypeError(`${t} must be a non-empty string`);if(/\r|\n|\0/.test(e))throw new TypeError(`${t} must be a single-line string`);return e.trim()}function f(e){let t=l(e,"url"),r;try{r=new URL(t)}catch{throw new TypeError("url must be a valid http(s) URL")}if(!/^https?:$/.test(r.protocol)||r.username||r.password)throw new TypeError("url must be a credential-free http(s) URL");for(let n of r.searchParams.keys())if(E.test(n)||/^(?:key|api[_-]?key|auth)$/i.test(n))throw new TypeError(`url must not contain secret-shaped query parameter: ${n}`);return r.href}function g(e){let t=l(e,"key");if(/^[A-Z][A-Z0-9_]*\s*=/.test(t)||/-----BEGIN [A-Z ]*PRIVATE KEY-----/.test(t))throw new TypeError("key must be an Oracle agent key, not an environment assignment or private key");if(/^(?:0x)?[0-9a-f]{64}$/i.test(t)||t.trim().split(/\s+/).length>=12)throw new TypeError("key looks like private signing material");return t}function d(e){let t=l(e,"label");if(!/^[a-z0-9][a-z0-9_-]{0,62}$/i.test(t))throw new TypeError("label must contain only letters, digits, underscores, and hyphens");if(E.test(t))throw new TypeError("label must not be a secret-shaped environment name");return t}function p(e){return`${JSON.stringify(e,null,2)}
2
- `}function a(e){return JSON.stringify(e)}function s(e){return JSON.stringify(e)}function h({url:e,key:t,label:r="oracle-data"}={}){let n=f(e),i=g(t),o=d(r),u={command:"npx",args:[...m],env:{ORACLE_DATA_URL:n,ORACLE_AGENT_KEY:i}},c={mcpServers:{[o]:u}};return{hermes:["mcp_servers:",` ${o}:`,` command: ${a("npx")}`," args:",...m.map(A=>` - ${a(A)}`)," env:",` ORACLE_DATA_URL: ${a(n)}`,` ORACLE_AGENT_KEY: ${a(i)}`,""].join(`
3
- `),claudeCode:p(c),codex:[`[mcp_servers.${s(o)}]`,`command = ${s("npx")}`,`args = [${m.map(s).join(", ")}]`,"",`[mcp_servers.${s(o)}.env]`,`ORACLE_DATA_URL = ${s(n)}`,`ORACLE_AGENT_KEY = ${s(i)}`,""].join(`
4
- `),cursor:p(c),genericMcp:p(c)}}var _=h;export{_ as createHarnessConfigs,h as emitHarnessConfigs};
1
+ var g=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 f(){return g.filter(e=>e.website)}var T="@oracle-agent/oracle",h="npx",E=["-y","--package",T,"oracle-data-mcp"],y=/(?:^|_)(?:PRIVATE_KEY|SECRET|TOKEN|PASSWORD|PASSPHRASE|MNEMONIC|SEED)(?:_|$)/i;function u(e,t){if(typeof e!="string"||!e.trim())throw new TypeError(`${t} must be a non-empty string`);if(/\r|\n|\0/.test(e))throw new TypeError(`${t} must be a single-line string`);return e.trim()}function x(e){let t=u(e,"url"),n;try{n=new URL(t)}catch{throw new TypeError("url must be a valid http(s) URL")}if(!/^https?:$/.test(n.protocol)||n.username||n.password)throw new TypeError("url must be a credential-free http(s) URL");for(let c of n.searchParams.keys())if(y.test(c)||/^(?:key|api[_-]?key|auth)$/i.test(c))throw new TypeError(`url must not contain secret-shaped query parameter: ${c}`);return n.href}function K(e){let t=u(e,"key");if(/^[A-Z][A-Z0-9_]*\s*=/.test(t)||/-----BEGIN [A-Z ]*PRIVATE KEY-----/.test(t))throw new TypeError("key must be an Oracle agent key, not an environment assignment or private key");if(/^(?:0x)?[0-9a-f]{64}$/i.test(t)||t.trim().split(/\s+/).length>=12)throw new TypeError("key looks like private signing material");return t}function A(e){let t=u(e,"label");if(!/^[a-z0-9][a-z0-9_-]{0,62}$/i.test(t))throw new TypeError("label must contain only letters, digits, underscores, and hyphens");if(y.test(t))throw new TypeError("label must not be a secret-shaped environment name");return t}function i(e){return`${JSON.stringify(e,null,2)}
2
+ `}function d(e){return JSON.stringify(e)}function o(e){return JSON.stringify(e)}function b(e,t){return["mcp_servers:",` ${e}:`,` command: ${d(t.command)}`," args:",...t.args.map(n=>` - ${d(n)}`)," env:",...Object.entries(t.env).map(([n,c])=>` ${n}: ${d(c)}`),""].join(`
3
+ `)}function C(e,t){return[`[mcp_servers.${o(e)}]`,`command = ${o(t.command)}`,`args = [${t.args.map(o).join(", ")}]`,"",`[mcp_servers.${o(e)}.env]`,...Object.entries(t.env).map(([n,c])=>`${n} = ${o(c)}`),""].join(`
4
+ `)}function S(){return["# Oracle native harness (default)","npm i -g @oracle-agent/oracle","oracle setup model","oracle chat",""].join(`
5
+ `)}function w({url:e,key:t,label:n="oracle-data"}={}){let c=x(e),k=K(t),a=A(n),s={command:h,args:[...E],env:{ORACLE_DATA_URL:c,ORACLE_AGENT_KEY:k}},r={mcpServers:{[a]:s}},l={hermes:b(a,s),claudeCode:i(r),codex:C(a,s),cursor:i(r),genericMcp:i(r),oracleNative:S(),chatgpt:i(r),claudeDesktop:i(r),windsurf:i(r),vscode:i(r),openclaw:i(r),perplexity:i(r),manus:i(r),prime:b(a,s),opencode:i(r)};for(let p of f()){if(p.kind==="oracle")continue;let m=p.configKey||p.id;l[m]||(l[m]=i(r))}return l}function $(){return Object.keys(w({url:"https://example.invalid/mcp",key:"mad_agent_placeholder_key"}))}var R=w;export{g as HARNESS_ROSTER,R as createHarnessConfigs,w as emitHarnessConfigs,$ as listHarnessConfigKeys,f as websiteHarnesses};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oracle-agent/oracle",
3
- "version": "0.22.6",
3
+ "version": "0.22.7",
4
4
  "description": "Oracle: standalone prepare-only multichain agent control plane. Runs its own agent loop, or plugs into any MCP-compatible harness. Policy-bounded intents for a user-signed wallet; the public package never takes your key.",
5
5
  "license": "BUSL-1.1",
6
6
  "type": "module",
@@ -5,6 +5,7 @@
5
5
  const COMMAND = "npx";
6
6
  const ARGS = ["-y", "--package", PACKAGE, "oracle-data-mcp"];
7
7
  const INIT_COMMAND = "npx -y --package @oracle-agent/oracle oracle-init";
8
+ const NATIVE_COMMAND = "npm i -g @oracle-agent/oracle && oracle setup model && oracle chat";
8
9
 
9
10
  const apiUrl = document.querySelector("#api-url");
10
11
  const apiKey = document.querySelector("#api-key");
@@ -13,7 +14,7 @@
13
14
  const label = document.querySelector("#config-label");
14
15
  const status = document.querySelector("#copy-status");
15
16
  const tabs = [...document.querySelectorAll("[data-harness]")];
16
- let selected = "hermes";
17
+ let selected = "oracle";
17
18
 
18
19
  const cleanUrl = () => apiUrl.value.trim().replace(/\/+$/, "");
19
20
  const env = () => {
@@ -27,39 +28,67 @@
27
28
 
28
29
  const server = () => ({ command: COMMAND, args: [...ARGS], env: env() });
29
30
 
31
+ const jsonMcp = () => ({ mcpServers: { oracle: server() } });
32
+
30
33
  const configs = {
31
- hermes: () => ({
32
- mcpServers: { oracle: server() }
33
- }),
34
- claude: () => ({
35
- mcpServers: { oracle: server() }
36
- }),
34
+ oracle: () => [
35
+ "# Oracle native harness (default)",
36
+ NATIVE_COMMAND,
37
+ "",
38
+ "# Optional: still expose read MCP to other tools",
39
+ JSON.stringify(jsonMcp(), null, 2),
40
+ ].join("\n"),
41
+ hermes: () => {
42
+ const s = server();
43
+ const values = env();
44
+ return [
45
+ "mcp_servers:",
46
+ " oracle:",
47
+ ` command: ${JSON.stringify(s.command)}`,
48
+ " args:",
49
+ ...s.args.map((a) => ` - ${JSON.stringify(a)}`),
50
+ " env:",
51
+ ...Object.entries(values).map(([k, v]) => ` ${k}: ${JSON.stringify(v)}`),
52
+ "",
53
+ ].join("\n");
54
+ },
55
+ claude: () => jsonMcp(),
37
56
  codex: () => {
38
57
  const values = env();
39
- const lines = [
58
+ return [
40
59
  "[mcp_servers.oracle]",
41
60
  `command = ${JSON.stringify(COMMAND)}`,
42
61
  `args = [${ARGS.map((arg) => JSON.stringify(arg)).join(", ")}]`,
43
62
  "",
44
63
  "[mcp_servers.oracle.env]",
45
- ...Object.entries(values).map(([key, value]) => `${key} = ${JSON.stringify(value)}`)
46
- ];
47
- return lines.join("\n");
64
+ ...Object.entries(values).map(([key, value]) => `${key} = ${JSON.stringify(value)}`),
65
+ ].join("\n");
48
66
  },
49
- cursor: () => ({
50
- mcpServers: { oracle: server() }
51
- }),
52
- mcp: () => ({
53
- mcpServers: { oracle: server() }
54
- })
67
+ cursor: () => jsonMcp(),
68
+ openclaw: () => jsonMcp(),
69
+ perplexity: () => jsonMcp(),
70
+ manus: () => jsonMcp(),
71
+ windsurf: () => jsonMcp(),
72
+ mcp: () => jsonMcp(),
55
73
  };
56
74
 
57
- const names = { hermes: "Hermes", claude: "Claude Code", codex: "Codex", cursor: "Cursor", mcp: "Generic MCP" };
75
+ const names = {
76
+ oracle: "Oracle Native",
77
+ hermes: "Hermes",
78
+ claude: "Claude Code",
79
+ codex: "Codex",
80
+ cursor: "Cursor",
81
+ openclaw: "OpenClaw",
82
+ perplexity: "Perplexity",
83
+ manus: "Manus",
84
+ windsurf: "Windsurf",
85
+ mcp: "Generic MCP",
86
+ };
58
87
 
59
88
  function render() {
60
- const config = configs[selected]();
89
+ const config = configs[selected] ? configs[selected]() : configs.mcp();
61
90
  output.textContent = typeof config === "string" ? config : JSON.stringify(config, null, 2);
62
- label.textContent = `${names[selected]} config`;
91
+ label.textContent = `${names[selected] || selected} config`;
63
92
  status.textContent = "";
64
93
  }
65
94
 
@@ -78,7 +107,10 @@
78
107
  render();
79
108
  }));
80
109
  [apiUrl, apiKey, walletAddress].forEach((input) => input.addEventListener("input", render));
81
- document.querySelector("#copy-button").addEventListener("click", () => copy(output.textContent, `${names[selected]} config copied.`));
82
- document.querySelector("#copy-install").addEventListener("click", () => copy(INIT_COMMAND, "Local operator install command copied."));
110
+ document.querySelector("#copy-button").addEventListener("click", () => copy(output.textContent, `${names[selected] || selected} config copied.`));
111
+ document.querySelector("#copy-install")?.addEventListener("click", () => {
112
+ const cmd = selected === "oracle" ? NATIVE_COMMAND : INIT_COMMAND;
113
+ copy(cmd, "Install command copied.");
114
+ });
83
115
  render();
84
116
  })();
@@ -13,7 +13,7 @@
13
13
  <a class="wordmark" href="/">ORACLE</a>
14
14
  <p class="eyebrow">AGENT CONNECT</p>
15
15
  <h1>Give your agent market context.<br /><span>Keep custody local.</span></h1>
16
- <p class="lede">Connect a read-only Oracle API to your preferred harness. The model proposes actions; you review and authorize them through your local operator.</p>
16
+ <p class="lede">Use Oracle's native harness, or connect a read-only Oracle MCP into the agent you already run. The model proposes actions; you review and authorize them through your local operator.</p>
17
17
  </header>
18
18
 
19
19
  <section class="card setup" aria-labelledby="connection-title">
@@ -48,15 +48,20 @@
48
48
  </div>
49
49
  </div>
50
50
  <div class="tabs" role="tablist" aria-label="Agent harness">
51
- <button role="tab" aria-selected="true" data-harness="hermes">Hermes</button>
51
+ <button role="tab" aria-selected="true" data-harness="oracle">Oracle Native</button>
52
+ <button role="tab" aria-selected="false" data-harness="hermes">Hermes</button>
52
53
  <button role="tab" aria-selected="false" data-harness="claude">Claude Code</button>
53
54
  <button role="tab" aria-selected="false" data-harness="codex">Codex</button>
54
55
  <button role="tab" aria-selected="false" data-harness="cursor">Cursor</button>
56
+ <button role="tab" aria-selected="false" data-harness="openclaw">OpenClaw</button>
57
+ <button role="tab" aria-selected="false" data-harness="perplexity">Perplexity</button>
58
+ <button role="tab" aria-selected="false" data-harness="manus">Manus</button>
59
+ <button role="tab" aria-selected="false" data-harness="windsurf">Windsurf</button>
55
60
  <button role="tab" aria-selected="false" data-harness="mcp">Generic MCP</button>
56
61
  </div>
57
62
  <div class="code-wrap">
58
63
  <div class="code-bar">
59
- <span id="config-label">Hermes config</span>
64
+ <span id="config-label">Oracle Native config</span>
60
65
  <button id="copy-button" class="copy" type="button">Copy config</button>
61
66
  </div>
62
67
  <pre><code id="config-output"></code></pre>
@@ -1497,11 +1497,16 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1497
1497
  <div class="agent-install rv">
1498
1498
  <span>Add Oracle to your agent:</span>
1499
1499
  <div class="install-cmds">
1500
+ <button class="btn" onclick="navigator.clipboard.writeText('oracle chat');var b=this;b.textContent='Copied ✓';setTimeout(function(){b.textContent='Oracle'},1500)">Oracle</button>
1500
1501
  <button class="btn btn-claude" onclick="navigator.clipboard.writeText('oracle mcp install claude-code');var b=this;b.textContent='Copied ✓';setTimeout(function(){b.textContent='Claude'},1500)">Claude</button>
1501
1502
  <button class="btn btn-chatgpt" onclick="navigator.clipboard.writeText('oracle mcp install chatgpt');var b=this;b.textContent='Copied ✓';setTimeout(function(){b.textContent='ChatGPT'},1500)">ChatGPT</button>
1502
1503
  <button class="btn btn-cursor" onclick="navigator.clipboard.writeText('oracle mcp install cursor');var b=this;b.textContent='Copied ✓';setTimeout(function(){b.textContent='Cursor'},1500)">Cursor</button>
1503
1504
  <button class="btn btn-vscode" onclick="navigator.clipboard.writeText('oracle mcp install claude-desktop');var b=this;b.textContent='Copied ✓';setTimeout(function(){b.textContent='Claude Desktop'},1500)">Claude Desktop</button>
1504
1505
  <button class="btn btn-copilot" onclick="navigator.clipboard.writeText('oracle mcp install codex');var b=this;b.textContent='Copied ✓';setTimeout(function(){b.textContent='Codex'},1500)">Codex</button>
1506
+ <button class="btn" onclick="navigator.clipboard.writeText('oracle mcp install generic');var b=this;b.textContent='Copied ✓';setTimeout(function(){b.textContent='Hermes'},1500)">Hermes</button>
1507
+ <button class="btn" onclick="navigator.clipboard.writeText('oracle mcp install generic');var b=this;b.textContent='Copied ✓';setTimeout(function(){b.textContent='OpenClaw'},1500)">OpenClaw</button>
1508
+ <button class="btn" onclick="navigator.clipboard.writeText('oracle mcp install generic');var b=this;b.textContent='Copied ✓';setTimeout(function(){b.textContent='Perplexity'},1500)">Perplexity</button>
1509
+ <button class="btn" onclick="navigator.clipboard.writeText('oracle mcp install generic');var b=this;b.textContent='Copied ✓';setTimeout(function(){b.textContent='Manus'},1500)">Manus</button>
1505
1510
  </div>
1506
1511
  <p class="cmd-hint">Click copies the install command — paste it in your terminal</p>
1507
1512
  </div>