@oracle-agent/oracle 0.33.0 → 0.35.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.
|
@@ -34,8 +34,28 @@ ORACLE = {
|
|
|
34
34
|
"chip_ink": "#061018",
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
# Assets ship with the package, next to this
|
|
38
|
-
|
|
37
|
+
# Assets ship with the package. Search env, next to this file, then the
|
|
38
|
+
# published npm graphics tree so a copied renderer still finds lockups.
|
|
39
|
+
def _resolve_assets() -> Path:
|
|
40
|
+
env = os.environ.get("ORACLE_CARD_ASSETS")
|
|
41
|
+
if env:
|
|
42
|
+
p = Path(env)
|
|
43
|
+
if p.is_dir():
|
|
44
|
+
return p
|
|
45
|
+
here = Path(__file__).resolve().parent
|
|
46
|
+
candidates = [
|
|
47
|
+
here / "assets",
|
|
48
|
+
Path.home() / ".local/share/oracle-assets",
|
|
49
|
+
here.parent / "assets" / "graphics" / "assets",
|
|
50
|
+
here.parent / "graphics" / "assets",
|
|
51
|
+
]
|
|
52
|
+
for cand in candidates:
|
|
53
|
+
if (cand / "robinhood-lockup.png").is_file() or (cand / "oracle-globe.png").is_file():
|
|
54
|
+
return cand
|
|
55
|
+
return here / "assets"
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
_ASSETS = _resolve_assets()
|
|
39
59
|
_WM = _ASSETS
|
|
40
60
|
ORACLE_MARK = _ASSETS / "oracle-globe.png"
|
|
41
61
|
CHAINS = {
|
|
@@ -224,6 +244,16 @@ def chain_meta(venue: str) -> dict:
|
|
|
224
244
|
return CHAINS.get(key, {"label": key.upper() or "UNKNOWN", "accent": ORACLE["blue"], "logo": None, "kind": "ohlc"})
|
|
225
245
|
|
|
226
246
|
|
|
247
|
+
def _logo_wh(lockup):
|
|
248
|
+
size = getattr(lockup, "size", None)
|
|
249
|
+
if isinstance(size, (tuple, list)) and len(size) >= 2:
|
|
250
|
+
return int(size[0] or 0), int(size[1] or 0)
|
|
251
|
+
shape = getattr(lockup, "shape", None)
|
|
252
|
+
if isinstance(shape, tuple) and len(shape) >= 2:
|
|
253
|
+
return int(shape[1] or 0), int(shape[0] or 0)
|
|
254
|
+
return 180, 28
|
|
255
|
+
|
|
256
|
+
|
|
227
257
|
def _load_logo(path: Path | None):
|
|
228
258
|
if not path or not Path(path).exists():
|
|
229
259
|
return None
|
|
@@ -275,11 +305,12 @@ def _chrome(fig, *, venue: str, eyebrow: str, hero: str, hero_color: str, chip:
|
|
|
275
305
|
drew_lockup = False
|
|
276
306
|
if lockup is not None:
|
|
277
307
|
try:
|
|
278
|
-
w, h =
|
|
308
|
+
w, h = _logo_wh(lockup)
|
|
279
309
|
aspect = (w / max(h, 1)) if w and h else 6.0
|
|
280
|
-
lh = 0.
|
|
281
|
-
lw = min(lh * aspect * (6.3 / 11.2), 0.
|
|
282
|
-
lax = fig.add_axes([tag_x + 0.
|
|
310
|
+
lh = 0.062
|
|
311
|
+
lw = min(lh * aspect * (6.3 / 11.2), 0.30)
|
|
312
|
+
lax = fig.add_axes([tag_x + 0.052, 0.922 - lh / 2, lw, lh], zorder=8)
|
|
313
|
+
lax.set_facecolor("none")
|
|
283
314
|
lax.imshow(lockup)
|
|
284
315
|
lax.axis("off")
|
|
285
316
|
drew_lockup = True
|
|
@@ -97,7 +97,7 @@ does not prove npm users receive it. A locally hosted model/data/policy loop doe
|
|
|
97
97
|
a bundled signer. A merged feature is not public until the npm artifact containing it is
|
|
98
98
|
published and inspected.
|
|
99
99
|
|
|
100
|
-
**Candidate release in this source tree:** public package `@oracle-agent/oracle@0.
|
|
100
|
+
**Candidate release in this source tree:** public package `@oracle-agent/oracle@0.35.0`
|
|
101
101
|
ships the encrypted local vault + short-lived loopback signer. Hosted/keyless
|
|
102
102
|
Oracle cannot hold keys or move funds. Self-host after `oracle sign init|import` is **auto-armed**
|
|
103
103
|
for user-initiated actions. Public still charges the disclosed fee card; Administrator
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oracle-agent/oracle",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.35.0",
|
|
4
4
|
"description": "Oracle: standalone multichain agent control plane with an optional encrypted, loopback-only self-hosted signer.",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"type": "module",
|
|
@@ -96,12 +96,12 @@
|
|
|
96
96
|
"@scure/base": "^2.2.0",
|
|
97
97
|
"@scure/bip39": "^1.6.0",
|
|
98
98
|
"@scure/btc-signer": "2.3.0",
|
|
99
|
-
"@solana/addresses": "^7.
|
|
100
|
-
"@solana/transaction-messages": "7.
|
|
99
|
+
"@solana/addresses": "^7.1.0",
|
|
100
|
+
"@solana/transaction-messages": "7.1.1",
|
|
101
101
|
"ethers": "^6.16.0",
|
|
102
102
|
"sharp": "^0.35.3",
|
|
103
|
-
"sql.js": "^1.
|
|
104
|
-
"undici": "
|
|
103
|
+
"sql.js": "^1.14.2",
|
|
104
|
+
"undici": "8.10.0",
|
|
105
105
|
"viem": "^2.55.8"
|
|
106
106
|
},
|
|
107
107
|
"peerDependencies": {
|
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
const PACKAGE = "@oracle-agent/oracle";
|
|
5
5
|
const COMMAND = "npx";
|
|
6
6
|
const ARGS = ["-y", "--package", PACKAGE, "oracle-data-mcp"];
|
|
7
|
+
// Artifact-card lane. Deepen and Refresh are read paths; Prepare emits an
|
|
8
|
+
// unsigned artifact and is OFF unless the operator sets
|
|
9
|
+
// ORACLE_TELEGRAM_CARD_GRANT=1 in their own environment. The page never
|
|
10
|
+
// emits that variable, so a copied config is read-only by default.
|
|
11
|
+
const CARD_ARGS = ["-y", "--package", PACKAGE, "oracle-telegram-mcp"];
|
|
7
12
|
const INIT_COMMAND = "npx -y --package @oracle-agent/oracle oracle-init";
|
|
8
13
|
const NATIVE_COMMAND = "curl -fsSL https://oracle.demi.la/install.sh | bash && oracle setup model && oracle chat";
|
|
9
14
|
|
|
@@ -27,8 +32,32 @@
|
|
|
27
32
|
};
|
|
28
33
|
|
|
29
34
|
const server = () => ({ command: COMMAND, args: [...ARGS], env: env() });
|
|
35
|
+
const cardServer = () => ({ command: COMMAND, args: [...CARD_ARGS] });
|
|
30
36
|
|
|
31
|
-
const jsonMcp = () => ({ mcpServers: { oracle: server() } });
|
|
37
|
+
const jsonMcp = () => ({ mcpServers: { oracle: server(), "oracle-cards": cardServer() } });
|
|
38
|
+
|
|
39
|
+
const yamlBlock = (name, entry) => {
|
|
40
|
+
const lines = [` ${name}:`, ` command: ${JSON.stringify(entry.command)}`, " args:"];
|
|
41
|
+
entry.args.forEach((arg) => lines.push(` - ${JSON.stringify(arg)}`));
|
|
42
|
+
if (entry.env) {
|
|
43
|
+
lines.push(" env:");
|
|
44
|
+
Object.entries(entry.env).forEach(([key, value]) => lines.push(` ${key}: ${JSON.stringify(value)}`));
|
|
45
|
+
}
|
|
46
|
+
return lines;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const tomlBlock = (name, entry) => {
|
|
50
|
+
const lines = [
|
|
51
|
+
`[mcp_servers.${name}]`,
|
|
52
|
+
`command = ${JSON.stringify(entry.command)}`,
|
|
53
|
+
`args = [${entry.args.map((arg) => JSON.stringify(arg)).join(", ")}]`,
|
|
54
|
+
];
|
|
55
|
+
if (entry.env) {
|
|
56
|
+
lines.push("", `[mcp_servers.${name}.env]`);
|
|
57
|
+
Object.entries(entry.env).forEach(([key, value]) => lines.push(`${key} = ${JSON.stringify(value)}`));
|
|
58
|
+
}
|
|
59
|
+
return lines;
|
|
60
|
+
};
|
|
32
61
|
|
|
33
62
|
const configs = {
|
|
34
63
|
oracle: () => [
|
|
@@ -38,32 +67,18 @@
|
|
|
38
67
|
"# Optional: still expose read MCP to other tools",
|
|
39
68
|
JSON.stringify(jsonMcp(), null, 2),
|
|
40
69
|
].join("\n"),
|
|
41
|
-
hermes: () =>
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
},
|
|
70
|
+
hermes: () => [
|
|
71
|
+
"mcp_servers:",
|
|
72
|
+
...yamlBlock("oracle", server()),
|
|
73
|
+
...yamlBlock("oracle-cards", cardServer()),
|
|
74
|
+
"",
|
|
75
|
+
].join("\n"),
|
|
55
76
|
claude: () => jsonMcp(),
|
|
56
|
-
codex: () =>
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
`args = [${ARGS.map((arg) => JSON.stringify(arg)).join(", ")}]`,
|
|
62
|
-
"",
|
|
63
|
-
"[mcp_servers.oracle.env]",
|
|
64
|
-
...Object.entries(values).map(([key, value]) => `${key} = ${JSON.stringify(value)}`),
|
|
65
|
-
].join("\n");
|
|
66
|
-
},
|
|
77
|
+
codex: () => [
|
|
78
|
+
...tomlBlock("oracle", server()),
|
|
79
|
+
"",
|
|
80
|
+
...tomlBlock("oracle-cards", cardServer()),
|
|
81
|
+
].join("\n"),
|
|
67
82
|
cursor: () => jsonMcp(),
|
|
68
83
|
openclaw: () => jsonMcp(),
|
|
69
84
|
perplexity: () => jsonMcp(),
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
<p class="eyebrow">AGENT CONNECT</p>
|
|
15
15
|
<h1>Give your agent market context.<br /><span>Keep custody local.</span></h1>
|
|
16
16
|
<p class="lede">Use Oracle's native harness, or connect Oracle MCP into the agent you already run. Skills, quotes, swap cards, and prepare land in Claude or Codex. The model proposes actions; you review and authorize them through your local operator.</p>
|
|
17
|
+
<p class="lede">The config below wires two lanes: <code>oracle</code> for market reads, and <code>oracle-cards</code> for artifact cards your agent can deepen and refresh. Card Prepare emits an unsigned artifact only, is off unless you set <code>ORACLE_TELEGRAM_CARD_GRANT=1</code> yourself, and never broadcasts.</p>
|
|
17
18
|
</header>
|
|
18
19
|
|
|
19
20
|
<section class="card setup" aria-labelledby="connection-title">
|