@oracle-agent/oracle 0.4.2 → 0.6.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.
- package/README.md +76 -18
- package/SETUP.md +13 -0
- package/bin/oracle-data-mcp.mjs +1 -1
- package/bin/oracle.mjs +33 -0
- package/docs/cli.md +47 -0
- package/docs/connectors.md +13 -0
- package/package.json +6 -2
- package/profiles/oracle/SOUL.md +10 -4
- package/profiles/robinhood-agent/SOUL.md +5 -3
- package/protocols/templates/safe-erc20/README.md +9 -0
- package/public/agent-connect/app.js +16 -13
- package/public/oracle-splash/assets/hero/orb.avif +0 -0
- package/public/oracle-splash/assets/hero/orb.webm +0 -0
- package/public/oracle-splash/assets/llms/claude.svg +1 -0
- package/public/oracle-splash/assets/llms/codex.svg +1 -0
- package/public/oracle-splash/assets/llms/cursor.svg +17 -0
- package/public/oracle-splash/assets/llms/deepseek.svg +1 -0
- package/public/oracle-splash/assets/llms/gemini.svg +1 -0
- package/public/oracle-splash/assets/llms/grok.svg +8 -0
- package/public/oracle-splash/assets/llms/hermes.png +0 -0
- package/public/oracle-splash/assets/llms/kimi.svg +1 -0
- package/public/oracle-splash/assets/llms/manus.svg +18 -0
- package/public/oracle-splash/assets/llms/openclaw.svg +22 -0
- package/public/oracle-splash/assets/llms/perplexity.svg +1 -0
- package/public/oracle-splash/assets/llms/qwen.svg +1 -0
- package/public/oracle-splash/assets/llms/windsurf.svg +1 -0
- package/public/oracle-splash/assets/protocols/abcdex.png +0 -0
- package/public/oracle-splash/assets/protocols/across.png +0 -0
- package/public/oracle-splash/assets/protocols/aerodrome.png +0 -0
- package/public/oracle-splash/assets/protocols/balancer.png +0 -0
- package/public/oracle-splash/assets/protocols/cowswap.png +0 -0
- package/public/oracle-splash/assets/protocols/curve.png +0 -0
- package/public/oracle-splash/assets/protocols/dreamcash.png +0 -0
- package/public/oracle-splash/assets/protocols/felix.png +0 -0
- package/public/oracle-splash/assets/protocols/gmx.png +0 -0
- package/public/oracle-splash/assets/protocols/hyena.png +0 -0
- package/public/oracle-splash/assets/protocols/hyperbeat.png +0 -0
- package/public/oracle-splash/assets/protocols/hyperliquid.png +0 -0
- package/public/oracle-splash/assets/protocols/hyperswap.png +0 -0
- package/public/oracle-splash/assets/protocols/jupiter.png +0 -0
- package/public/oracle-splash/assets/protocols/kinetiq.png +0 -0
- package/public/oracle-splash/assets/protocols/lfj.png +0 -0
- package/public/oracle-splash/assets/protocols/lifi.png +0 -0
- package/public/oracle-splash/assets/protocols/magic-eden.png +0 -0
- package/public/oracle-splash/assets/protocols/morpho.png +0 -0
- package/public/oracle-splash/assets/protocols/odos.png +0 -0
- package/public/oracle-splash/assets/protocols/oneinch.png +0 -0
- package/public/oracle-splash/assets/protocols/opensea.png +0 -0
- package/public/oracle-splash/assets/protocols/pancakeswap.png +0 -0
- package/public/oracle-splash/assets/protocols/paragon.png +0 -0
- package/public/oracle-splash/assets/protocols/paraswap.png +0 -0
- package/public/oracle-splash/assets/protocols/pendle.png +0 -0
- package/public/oracle-splash/assets/protocols/polymarket.png +0 -0
- package/public/oracle-splash/assets/protocols/quickswap.png +0 -0
- package/public/oracle-splash/assets/protocols/relay.png +0 -0
- package/public/oracle-splash/assets/protocols/stargate.png +0 -0
- package/public/oracle-splash/assets/protocols/tradexyz.png +0 -0
- package/public/oracle-splash/assets/protocols/uniswap.png +0 -0
- package/public/oracle-splash/assets/protocols/velodrome.png +0 -0
- package/public/oracle-splash/assets/protocols/ventuals.png +0 -0
- package/public/oracle-splash/assets/wordmarks/across.svg +4 -0
- package/public/oracle-splash/assets/wordmarks/aerodrome.svg +23 -0
- package/public/oracle-splash/assets/wordmarks/balancer.svg +3 -0
- package/public/oracle-splash/assets/wordmarks/cowswap.svg +1 -0
- package/public/oracle-splash/assets/wordmarks/gmx.svg +13 -0
- package/public/oracle-splash/assets/wordmarks/hyena.svg +7 -0
- package/public/oracle-splash/assets/wordmarks/hyperliquid.svg +21 -0
- package/public/oracle-splash/assets/wordmarks/hyperswap.svg +13 -0
- package/public/oracle-splash/assets/wordmarks/jupiter.svg +35 -0
- package/public/oracle-splash/assets/wordmarks/lifi.png +0 -0
- package/public/oracle-splash/assets/wordmarks/magic-eden.svg +1 -0
- package/public/oracle-splash/assets/wordmarks/morpho.svg +1 -0
- package/public/oracle-splash/assets/wordmarks/odos.svg +3 -0
- package/public/oracle-splash/assets/wordmarks/oneinch.svg +6 -0
- package/public/oracle-splash/assets/wordmarks/opensea.svg +1 -0
- package/public/oracle-splash/assets/wordmarks/outcome.svg +16 -0
- package/public/oracle-splash/assets/wordmarks/pancakeswap.svg +18 -0
- package/public/oracle-splash/assets/wordmarks/paraswap.svg +16 -0
- package/public/oracle-splash/assets/wordmarks/pendle.png +0 -0
- package/public/oracle-splash/assets/wordmarks/polymarket.png +0 -0
- package/public/oracle-splash/assets/wordmarks/quickswap.png +0 -0
- package/public/oracle-splash/assets/wordmarks/relay.svg +8 -0
- package/public/oracle-splash/assets/wordmarks/stargate.svg +15 -0
- package/public/oracle-splash/assets/wordmarks/uniswap.svg +18 -0
- package/public/oracle-splash/assets/wordmarks/velodrome.svg +84 -0
- package/public/oracle-splash/assets/wordmarks/xyz.svg +12 -0
- package/public/oracle-splash/index.html +784 -498
- package/scripts/check-doc-drift.mjs +111 -0
- package/skills/oracle-chat/SKILL.md +61 -0
- package/skills/oracle-chat/chain.SKILL.md +31 -0
- package/skills/oracle-chat/setup.SKILL.md +37 -0
- package/skins/oracle.yaml +52 -0
- package/src/cli/chain-catalog.mjs +215 -0
- package/src/cli/chain-state.mjs +74 -0
- package/src/cli/commands/chain.mjs +143 -0
- package/src/cli/commands/chat.mjs +268 -0
- package/src/cli/commands/credential.mjs +9 -0
- package/src/cli/commands/data-mcp.mjs +18 -0
- package/src/cli/commands/data.mjs +73 -0
- package/src/cli/commands/doctor.mjs +131 -0
- package/src/cli/commands/help.mjs +7 -0
- package/src/cli/commands/init.mjs +27 -0
- package/src/cli/commands/mcp.mjs +142 -0
- package/src/cli/commands/model.mjs +37 -0
- package/src/cli/commands/prepare.mjs +12 -0
- package/src/cli/commands/public.mjs +20 -0
- package/src/cli/commands/route.mjs +12 -0
- package/src/cli/commands/runner.mjs +9 -0
- package/src/cli/commands/scan.mjs +12 -0
- package/src/cli/commands/setup.mjs +283 -0
- package/src/cli/commands/sign.mjs +21 -0
- package/src/cli/commands/signer.mjs +9 -0
- package/src/cli/commands/upgrade.mjs +12 -0
- package/src/cli/commands/vault.mjs +9 -0
- package/src/cli/commands/version.mjs +22 -0
- package/src/cli/first-run.mjs +23 -0
- package/src/cli/kernel.mjs +237 -0
- package/src/cli/mcp-targets/chatgpt.mjs +51 -0
- package/src/cli/mcp-targets/claude-code.mjs +39 -0
- package/src/cli/mcp-targets/claude-desktop.mjs +24 -0
- package/src/cli/mcp-targets/codex.mjs +41 -0
- package/src/cli/mcp-targets/shared.mjs +61 -0
- package/src/cli/messaging-platforms.mjs +209 -0
- package/src/cli/operator-dispatch.mjs +258 -0
- package/src/cli/oracle-harness.py +148 -0
- package/src/cli/paths.mjs +83 -0
- package/src/cli/setup-state.mjs +168 -0
- package/src/cli/spawn-child.mjs +43 -0
- package/src/public-api/connect-agent.mjs +29 -10
|
@@ -53,6 +53,18 @@ export class SecretLeakError extends Error {
|
|
|
53
53
|
const FORBIDDEN_KEY_RE =
|
|
54
54
|
/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i;
|
|
55
55
|
|
|
56
|
+
/** Short wallet-export aliases need exact normalized matching. Substring
|
|
57
|
+
* matching `wif`, for example, would incorrectly reject an unrelated key such
|
|
58
|
+
* as `swift`. Removing common separators catches snake/kebab/spaced variants
|
|
59
|
+
* without widening those short aliases into arbitrary words. */
|
|
60
|
+
const FORBIDDEN_KEY_ALIASES = Object.freeze(["privkey", "wif", "xprv", "seed"]);
|
|
61
|
+
|
|
62
|
+
function isForbiddenKeyName(key) {
|
|
63
|
+
const text = String(key);
|
|
64
|
+
const normalized = text.toLowerCase().replace(/[\s._-]+/g, "");
|
|
65
|
+
return FORBIDDEN_KEY_RE.test(text) || FORBIDDEN_KEY_ALIASES.includes(normalized);
|
|
66
|
+
}
|
|
67
|
+
|
|
56
68
|
/** String-value shapes that must never appear in any object we return. */
|
|
57
69
|
const FORBIDDEN_VALUE_RULES = Object.freeze([
|
|
58
70
|
// 32-byte hex — the shape of a raw EVM private key / session secret. Public
|
|
@@ -69,8 +81,12 @@ const FORBIDDEN_VALUE_RULES = Object.freeze([
|
|
|
69
81
|
// gets disabled. Smuggling a key inside a longer string is still caught at
|
|
70
82
|
// the serialized layer for any non-allowlisted field.
|
|
71
83
|
{ rule: "raw-32-byte-hex-bare", re: /^[0-9a-fA-F]{64}$/ },
|
|
72
|
-
//
|
|
73
|
-
|
|
84
|
+
// BIP-32 private extended keys. Public xpub/tpub/ypub/zpub identifiers are
|
|
85
|
+
// intentionally not matched; only their private-key counterparts fail.
|
|
86
|
+
{ rule: "extended-private-key", re: /\b(?:xprv|tprv|yprv|zprv)[1-9A-HJ-NP-Za-km-z]{107}\b/ },
|
|
87
|
+
// Bitcoin WIF (mainnet 5/K/L, testnet uncompressed 9 or compressed c) —
|
|
88
|
+
// base58, 51-52 chars.
|
|
89
|
+
{ rule: "bitcoin-wif", re: /\b[59KLc][1-9A-HJ-NP-Za-km-z]{50,51}\b/ },
|
|
74
90
|
// BIP-39 mnemonic: 12/15/18/21/24 lowercase words. Detect a long run of
|
|
75
91
|
// space-separated short alpha words rather than shipping the wordlist.
|
|
76
92
|
{ rule: "bip39-mnemonic", re: /\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/ },
|
|
@@ -169,12 +185,15 @@ export function assertSerializedNoSecrets(value) {
|
|
|
169
185
|
if (embedded.test(scanned)) {
|
|
170
186
|
throw new SecretLeakError("$<serialized>", "raw-32-byte-hex-embedded");
|
|
171
187
|
}
|
|
172
|
-
//
|
|
173
|
-
//
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
188
|
+
// Parse the exact serialized bytes with a reviver so escaped or toJSON-made
|
|
189
|
+
// key names receive the same normalization as real object properties. This
|
|
190
|
+
// avoids maintaining a second, inevitably drifting key-name regex.
|
|
191
|
+
JSON.parse(json, (key, item) => {
|
|
192
|
+
if (key && isForbiddenKeyName(key)) {
|
|
193
|
+
throw new SecretLeakError(`$<serialized>.${key}`, "forbidden-key-name");
|
|
194
|
+
}
|
|
195
|
+
return item;
|
|
196
|
+
});
|
|
178
197
|
return json;
|
|
179
198
|
}
|
|
180
199
|
|
|
@@ -207,7 +226,7 @@ export function assertNoSecretMaterial(value, path = "$", seen = new Set(), keyH
|
|
|
207
226
|
if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer) return value;
|
|
208
227
|
if (value instanceof Map) {
|
|
209
228
|
for (const [k, v] of value.entries()) {
|
|
210
|
-
if (typeof k === "string" &&
|
|
229
|
+
if (typeof k === "string" && isForbiddenKeyName(k)) {
|
|
211
230
|
throw new SecretLeakError(`${path}[${JSON.stringify(k)}]`, "forbidden-key-name");
|
|
212
231
|
}
|
|
213
232
|
assertNoSecretMaterial(k, `${path}[key]`, seen);
|
|
@@ -225,7 +244,7 @@ export function assertNoSecretMaterial(value, path = "$", seen = new Set(), keyH
|
|
|
225
244
|
return value;
|
|
226
245
|
}
|
|
227
246
|
for (const [k, v] of Object.entries(value)) {
|
|
228
|
-
if (
|
|
247
|
+
if (isForbiddenKeyName(k)) {
|
|
229
248
|
throw new SecretLeakError(`${path}.${k}`, "forbidden-key-name");
|
|
230
249
|
}
|
|
231
250
|
assertNoSecretMaterial(v, `${path}.${k}`, seen, k);
|