@oracle-agent/oracle 0.1.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.
Files changed (169) hide show
  1. package/CONTRIBUTING.md +98 -0
  2. package/LICENSE +202 -0
  3. package/README.md +384 -0
  4. package/SECURITY.md +89 -0
  5. package/SETUP.md +235 -0
  6. package/artifacts/inscription/oracle-was-here-preview.png +0 -0
  7. package/artifacts/inscription/oracle-was-here.svg +1 -0
  8. package/artifacts/specialist-packs/oracle-full-crypto.json +273 -0
  9. package/bin/desk-server.mjs +438 -0
  10. package/bin/oracle-data-mcp.mjs +603 -0
  11. package/bin/oracle-init.mjs +423 -0
  12. package/bin/oracle-public-server.mjs +36 -0
  13. package/bin/oracle-route.mjs +254 -0
  14. package/bin/oracle-scan.mjs +192 -0
  15. package/docs/adding-a-chain.md +229 -0
  16. package/docs/architecture.md +135 -0
  17. package/docs/profiles.md +132 -0
  18. package/examples/add-a-chain.mjs +65 -0
  19. package/examples/research-a-token.mjs +70 -0
  20. package/package.json +90 -0
  21. package/profiles/_template/SOUL.md +47 -0
  22. package/profiles/_template/profile.json +22 -0
  23. package/profiles/bitcoin-agent/SOUL.md +31 -0
  24. package/profiles/bitcoin-agent/profile.json +32 -0
  25. package/profiles/hyperliquid-agent/SOUL.md +34 -0
  26. package/profiles/hyperliquid-agent/profile.json +37 -0
  27. package/profiles/oracle/SOUL.md +65 -0
  28. package/profiles/oracle/profile.json +35 -0
  29. package/profiles/polymarket-agent/SOUL.md +35 -0
  30. package/profiles/polymarket-agent/profile.json +34 -0
  31. package/profiles/profile.schema.json +90 -0
  32. package/profiles/protocol-builder/SOUL.md +50 -0
  33. package/profiles/protocol-builder/profile.json +37 -0
  34. package/profiles/robinhood-agent/SOUL.md +45 -0
  35. package/profiles/robinhood-agent/profile.json +39 -0
  36. package/profiles/solana-agent/SOUL.md +37 -0
  37. package/profiles/solana-agent/profile.json +37 -0
  38. package/profiles/stable-agent/SOUL.md +43 -0
  39. package/profiles/stable-agent/profile.json +37 -0
  40. package/public/oracle-console/app.js +272 -0
  41. package/public/oracle-console/bitcoin-wallets.js +206 -0
  42. package/public/oracle-console/index.html +91 -0
  43. package/public/oracle-console/styles.css +239 -0
  44. package/public/oracle-splash/index.html +931 -0
  45. package/scripts/build-inscription.py +230 -0
  46. package/scripts/check-test-count.mjs +105 -0
  47. package/scripts/e2e-hl-markets.mjs +21 -0
  48. package/scripts/e2e-hl-perps.mjs +48 -0
  49. package/scripts/e2e-hypercore-staking.mjs +128 -0
  50. package/scripts/e2e-solana-bitcoin.mjs +183 -0
  51. package/scripts/public-api-scan.mjs +23 -0
  52. package/scripts/secret-scan.mjs +181 -0
  53. package/scripts/verify-v3-venues.mjs +192 -0
  54. package/skills/oracle-best-execution/SKILL.md +127 -0
  55. package/skills/oracle-bitcoin/SKILL.md +53 -0
  56. package/skills/oracle-chain-graphs-telegram-cards/SKILL.md +59 -0
  57. package/skills/oracle-circuit-breaker/SKILL.md +51 -0
  58. package/skills/oracle-contract-research/SKILL.md +55 -0
  59. package/skills/oracle-desk/SKILL.md +58 -0
  60. package/skills/oracle-dex-launch/SKILL.md +38 -0
  61. package/skills/oracle-grants/SKILL.md +69 -0
  62. package/skills/oracle-hypercore-staking/SKILL.md +57 -0
  63. package/skills/oracle-hyperliquid/SKILL.md +56 -0
  64. package/skills/oracle-meme-token-sniper/SKILL.md +73 -0
  65. package/skills/oracle-nft-gacha-launch/SKILL.md +48 -0
  66. package/skills/oracle-nft-mint-gas-war/SKILL.md +63 -0
  67. package/skills/oracle-polymarket/SKILL.md +60 -0
  68. package/skills/oracle-protocol-builder/SKILL.md +38 -0
  69. package/skills/oracle-protocol-security/SKILL.md +60 -0
  70. package/skills/oracle-public-product/SKILL.md +44 -0
  71. package/skills/oracle-receipts/SKILL.md +52 -0
  72. package/skills/oracle-rfq-tokenized-assets/SKILL.md +69 -0
  73. package/skills/oracle-smart-wallet-scanner/SKILL.md +49 -0
  74. package/skills/oracle-solana/SKILL.md +65 -0
  75. package/skills/oracle-solana-nft/SKILL.md +54 -0
  76. package/skills/oracle-token-research/SKILL.md +67 -0
  77. package/src/agent-auth.mjs +191 -0
  78. package/src/approval-guard.mjs +282 -0
  79. package/src/attestation-secret.mjs +88 -0
  80. package/src/audit-log.mjs +196 -0
  81. package/src/auto-slippage.mjs +378 -0
  82. package/src/capability-posture.mjs +125 -0
  83. package/src/chains.mjs +62 -0
  84. package/src/data/catalog.mjs +495 -0
  85. package/src/data/desk-data.mjs +623 -0
  86. package/src/data/http.mjs +200 -0
  87. package/src/data/provider-endpoint.mjs +94 -0
  88. package/src/data/providers/aerodrome.mjs +244 -0
  89. package/src/data/providers/balancer.mjs +208 -0
  90. package/src/data/providers/bitcoin-esplora.mjs +230 -0
  91. package/src/data/providers/bitcoin-meta.mjs +378 -0
  92. package/src/data/providers/blockscout.mjs +14 -0
  93. package/src/data/providers/bridges.mjs +241 -0
  94. package/src/data/providers/cowswap.mjs +501 -0
  95. package/src/data/providers/curve.mjs +200 -0
  96. package/src/data/providers/defillama.mjs +88 -0
  97. package/src/data/providers/dexscreener.mjs +43 -0
  98. package/src/data/providers/evm-rpc.mjs +203 -0
  99. package/src/data/providers/geckoterminal.mjs +34 -0
  100. package/src/data/providers/gmx.mjs +495 -0
  101. package/src/data/providers/hl-info.mjs +102 -0
  102. package/src/data/providers/hl-markets.mjs +210 -0
  103. package/src/data/providers/hl-perps.mjs +382 -0
  104. package/src/data/providers/hl-staking.mjs +352 -0
  105. package/src/data/providers/hl-ws.mjs +119 -0
  106. package/src/data/providers/hyperevm-dex.mjs +49 -0
  107. package/src/data/providers/jupiter.mjs +182 -0
  108. package/src/data/providers/lifi.mjs +150 -0
  109. package/src/data/providers/magiceden-sol.mjs +355 -0
  110. package/src/data/providers/morpho.mjs +173 -0
  111. package/src/data/providers/odos.mjs +155 -0
  112. package/src/data/providers/oneinch.mjs +173 -0
  113. package/src/data/providers/opensea-multichain.mjs +136 -0
  114. package/src/data/providers/opensea-nft.mjs +99 -0
  115. package/src/data/providers/paraswap.mjs +117 -0
  116. package/src/data/providers/pendle.mjs +187 -0
  117. package/src/data/providers/poly-public.mjs +96 -0
  118. package/src/data/providers/poly-ws.mjs +103 -0
  119. package/src/data/providers/rh-agent.mjs +59 -0
  120. package/src/data/providers/satflow.mjs +336 -0
  121. package/src/data/providers/solana-rpc.mjs +186 -0
  122. package/src/data/providers/uniswap-v3.mjs +303 -0
  123. package/src/data/providers/zerox.mjs +166 -0
  124. package/src/data/public-api-scan.mjs +61 -0
  125. package/src/data/quote-placeholder.mjs +31 -0
  126. package/src/exact-integer.mjs +72 -0
  127. package/src/exec-policy.mjs +444 -0
  128. package/src/flags.mjs +15 -0
  129. package/src/fresh-window.mjs +76 -0
  130. package/src/gmx-attestation.mjs +175 -0
  131. package/src/index.mjs +50 -0
  132. package/src/nft-gas-war-guard.mjs +139 -0
  133. package/src/onboarding/agent-keys.mjs +157 -0
  134. package/src/onboarding/index.mjs +18 -0
  135. package/src/onboarding/tiers.mjs +139 -0
  136. package/src/oracle-env.mjs +38 -0
  137. package/src/protocol-execution.mjs +84 -0
  138. package/src/public-api/buzz-integration.mjs +256 -0
  139. package/src/public-api/connect-agent.mjs +397 -0
  140. package/src/public-api/grants.mjs +142 -0
  141. package/src/public-api/http.mjs +374 -0
  142. package/src/public-control/aa-adapter.mjs +402 -0
  143. package/src/public-control/build-registry.mjs +227 -0
  144. package/src/public-control/bundler-client.mjs +372 -0
  145. package/src/public-control/grant-indexer.mjs +296 -0
  146. package/src/public-control/policy-render.mjs +69 -0
  147. package/src/public-control/policy-schema.mjs +318 -0
  148. package/src/public-control/runtime-config.mjs +265 -0
  149. package/src/public-control/session-key-model.mjs +374 -0
  150. package/src/public-control/session-orchestrator.mjs +412 -0
  151. package/src/route-attestation.mjs +132 -0
  152. package/src/router/best-execution.mjs +221 -0
  153. package/src/router/index.mjs +185 -0
  154. package/src/router/prepare-bridge.mjs +288 -0
  155. package/src/router/prepare-route.mjs +341 -0
  156. package/src/router/proposal.mjs +311 -0
  157. package/src/router/risk-classifier.mjs +119 -0
  158. package/src/router/route-sources.mjs +292 -0
  159. package/src/scanner/chains.config.mjs +381 -0
  160. package/src/scanner/contract.mjs +270 -0
  161. package/src/scanner/evm-scanner.mjs +394 -0
  162. package/src/scanner/index.mjs +9 -0
  163. package/src/scanner/v2-venue.mjs +335 -0
  164. package/src/scanner/v3-venue.mjs +290 -0
  165. package/src/scopes.mjs +44 -0
  166. package/src/sell-simulation.mjs +167 -0
  167. package/src/token-transfer-guard.mjs +188 -0
  168. package/src/vault-attestation.mjs +145 -0
  169. package/src/venues.mjs +206 -0
package/SECURITY.md ADDED
@@ -0,0 +1,89 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a vulnerability
4
+
5
+ **Do not open a public issue for a live exploit.**
6
+
7
+ Email **security@demi.la** with:
8
+
9
+ - what the issue is
10
+ - how to reproduce it
11
+ - the impact you believe it has
12
+ - whether funds are at risk right now
13
+
14
+ You'll get an acknowledgement within 72 hours. If funds are actively at risk,
15
+ say so in the subject line and we'll treat it as urgent.
16
+
17
+ Please give us a reasonable window to ship a fix before public disclosure. We
18
+ will credit you unless you'd rather stay anonymous.
19
+
20
+ ## Scope
21
+
22
+ In scope:
23
+
24
+ - custody-boundary escapes (public code reaching a signer or key material)
25
+ - destination-allowlist bypasses
26
+ - slippage/minimum-output guard bypasses
27
+ - grant forgery, replay, or scope escalation
28
+ - route/vault/order attestation forgery
29
+ - secret leakage through an API response or log
30
+
31
+ Out of scope:
32
+
33
+ - third-party provider outages and their rate limits
34
+ - economic risk inherent to a protocol you chose to trade
35
+ - issues that require the operator's own machine to already be compromised
36
+ - deployment hardening for an operator's separate private execution service
37
+
38
+ ## Threat model
39
+
40
+ Oracle assumes the language model can be wrong or adversarially steered. The
41
+ model is treated as an untrusted proposer.
42
+
43
+ Consequences of that assumption, which are the invariants worth attacking:
44
+
45
+ 1. **The public package never holds a key.** Signing happens in the user's
46
+ wallet. Source-only operator modules are excluded from public entrypoints and
47
+ the npm artifact.
48
+ 2. **Model output is not authorization.** A grant is authorization, and a grant
49
+ is signed by the owner, scoped, and expiring.
50
+ 3. **Destinations are allowlisted per chain and fail closed.** An empty allowlist
51
+ refuses everything. It never means "allow anything."
52
+ 4. **Model-authored metadata is not trusted for routing.** Dynamic execution
53
+ targets require an attestation minted inside the trusted boundary.
54
+ 5. **Guards are recomputed at sign and broadcast time**, not just at quote time,
55
+ because a stale minimum is not a minimum.
56
+
57
+ If you find a path where model-authored text becomes an authorized on-chain
58
+ action without an owner signature and a policy check, that is the bug we most
59
+ want to hear about.
60
+
61
+ ## Enforcement in CI
62
+
63
+ `test/custody-boundary.test.mjs` walks the public import graph, and
64
+ `test/public-release-hardening.test.mjs` inspects the packed npm artifact. The
65
+ build fails if either public surface reaches wallet key material or a house
66
+ signer. The secret scanner also checks current files and Git history. CI runs
67
+ the boundary suite on every push and pull request.
68
+
69
+ A security claim that isn't enforced by a test is just a comment.
70
+
71
+ ## Residual operator notes
72
+
73
+ These are not public-package custody holes. They are operator / release-process
74
+ constraints that still apply after the public boundary hardening:
75
+
76
+ 1. **Owner-local signer modules may exist in the git tree** (`hl-exec`,
77
+ `key-vault`, `oracle-vault`) and are excluded from public entrypoints and the
78
+ npm artifact. Do not restore them to the public package for compatibility.
79
+ Before making the repository public, keep that exclusion intentional or move
80
+ the modules to a private operator repo.
81
+ 2. **Prepare helpers that validate executable routes require an attestation
82
+ secret** (`requireSigned`) so they cannot be used as a softer pre-broadcast
83
+ gate than `enforceTxPolicy`.
84
+ 3. **Daily spend ledger locks are pid + TTL based.** A live owner holds the
85
+ lock; a dead pid or expired lock is reclaimed. Override TTL with
86
+ `ORACLE_LEDGER_LOCK_TTL_MS` only if you know you need a longer window.
87
+ 4. **GitHub branch protection, code scanning, and vulnerability alerts** are
88
+ process controls outside this package. Enable them on `main` before treating
89
+ a public release as fully hardened operations.
package/SETUP.md ADDED
@@ -0,0 +1,235 @@
1
+ # Setup
2
+
3
+ Oracle's public surface runs locally against your API accounts and never accepts
4
+ a wallet private key. Prepared actions are signed in the user's wallet.
5
+
6
+ ## Install
7
+
8
+ The npm package is intentionally unpublished while release hardening is in
9
+ progress. Install the source checkout with Node 20.19 or newer:
10
+
11
+ ```bash
12
+ git clone https://github.com/demi-hl/oracle.git
13
+ cd oracle
14
+ npm install
15
+ npm test
16
+ ```
17
+
18
+ ## The one thing to understand first
19
+
20
+ Oracle has two distribution boundaries and they are separate on purpose:
21
+
22
+ | Plane | What it does | Needs a key? |
23
+ |---|---|---|
24
+ | **Read / prepare** | Market data, quotes, and *unsigned* transactions or EIP-712 actions | No, mostly |
25
+ | **Owner-local source lane** | Optional private operator signing code, excluded from npm and public entrypoints | Yes |
26
+
27
+ A prepared object is inert. It becomes real only when something signs it. You
28
+ choose whether that something is your browser wallet or separately operated
29
+ owner-local infrastructure.
30
+
31
+ ## Public posture: always prepare-only
32
+
33
+ The public data facade rejects `hl-exec` even when a signing key exists in the
34
+ environment. The npm artifact excludes the key vault and live signer modules.
35
+ Wallet signing, submission, receipt confirmation, and revocation happen outside
36
+ that public surface.
37
+
38
+ ---
39
+
40
+ ## Source-only operator credentials
41
+
42
+ This section applies only to an owner-local source checkout. These signing
43
+ credentials are not consumed by the public package entrypoints.
44
+
45
+ ## Keys: what each one unlocks
46
+
47
+ Everything is optional. Oracle degrades to whatever you have configured.
48
+
49
+ ### Hyperliquid — perps, spot, staking
50
+
51
+ Hyperliquid does not issue API keys. You authorize with an **Ethereum private
52
+ key**, either your account key or (recommended) an **API wallet**.
53
+
54
+ Create an API wallet at <https://app.hyperliquid.xyz/API>. It can trade your
55
+ account but **cannot withdraw**, which is exactly what you want for an agent.
56
+
57
+ ```bash
58
+ export HL_PRIVATE_KEY=0xabc... # the API wallet's key
59
+ # or, better, keep it in a file:
60
+ export HL_KEY_FILE=~/.config/oracle/keys/hl.key
61
+ ```
62
+
63
+ Reads (prices, funding, order books, your positions) need **no key at all**.
64
+
65
+ ### Polymarket — prediction markets
66
+
67
+ Two different credentials, for two different things:
68
+
69
+ ```bash
70
+ # 1. L2 API credentials — read your orders, post orders to the CLOB
71
+ export POLYMARKET_API_KEY=...
72
+ export POLYMARKET_API_SECRET=...
73
+ export POLYMARKET_API_PASSPHRASE=...
74
+
75
+ # 2. The Polygon key that actually owns the funds
76
+ export POLYMARKET_PRIVATE_KEY=0x...
77
+ ```
78
+
79
+ Derive the L2 credentials from your wallet at <https://polymarket.com> under
80
+ API access, or via the CLOB `create-api-key` endpoint. Public market data,
81
+ prices, and order books need **no credentials**.
82
+
83
+ ### Everything else
84
+
85
+ | Variable | Unlocks | Without it |
86
+ |---|---|---|
87
+ | `OPENSEA_API_KEY` | NFT collections, listings, offers | Heavily rate limited |
88
+ | `MAGICEDEN_API_KEY` | Solana NFT buy/list/mint intents | Floor and listing reads still work |
89
+ | `SATFLOW_API_KEY` | Bitcoin ordinals + runes marketplace | Esplora reads still work |
90
+ | `ZEROX_API_KEY` | 0x swap routing | Other routers still quote |
91
+ | `ONEINCH_API_KEY` | 1inch routing | Other routers still quote |
92
+ | `UNISAT_API_KEY` | Ordinals/BRC-20 indexing | Tip and UTXOs still work |
93
+ | `ORACLE_ROUTE_ATTESTATION_SECRET` | HMAC-signs route and slippage guards | **Required for swap sign/broadcast.** Read/quote/prepare still work. Fresh installs: `oracle-init --apply` writes one to `~/.config/oracle/exec.env`. Unsigned guards are refused at the signer boundary. |
94
+
95
+ Chain RPCs default to public endpoints. Override any of them:
96
+
97
+ ```bash
98
+ export ETH_RPC_URL=https://...
99
+ export BASE_RPC_URL=https://...
100
+ export SOLANA_RPC_URL=https://...
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Where keys are stored
106
+
107
+ **Oracle never transmits your keys anywhere except the venue they authenticate
108
+ to.** Provider endpoints are pinned: if something redirects a provider's
109
+ `baseUrl` to another host, the credential is dropped rather than forwarded.
110
+ A plaintext `http://` downgrade also drops it.
111
+
112
+ Three options, worst to best:
113
+
114
+ ### 1. Environment variables
115
+
116
+ Fine for a laptop. Visible in `ps`, inherited by child processes, and easy to
117
+ leak into a shell history or a log.
118
+
119
+ ### 2. A key file
120
+
121
+ ```bash
122
+ mkdir -p ~/.config/oracle/keys && chmod 700 ~/.config/oracle/keys
123
+ printf '%s' "0xYOUR_KEY" > ~/.config/oracle/keys/hl.key
124
+ chmod 600 ~/.config/oracle/keys/hl.key
125
+ export HL_KEY_FILE=~/.config/oracle/keys/hl.key
126
+ ```
127
+
128
+ Keeps the secret out of the process environment.
129
+
130
+ ### 3. An encrypted vault (recommended)
131
+
132
+ ```bash
133
+ node bin/oracle-vault.mjs encrypt ~/.config/oracle/keys/hl.key
134
+ # writes hl.key.vault.json (scrypt N=2^17 + AES-256-GCM)
135
+ # moves hl.key -> hl.key.plaintext.bak
136
+
137
+ export ORACLE_VAULT_PASSPHRASE="..." # or be prompted
138
+ export HL_KEY_FILE=~/.config/oracle/keys/hl.key.vault.json
139
+
140
+ # verify it unlocks, THEN destroy the plaintext backup
141
+ node bin/oracle-vault.mjs inspect ~/.config/oracle/keys/hl.key.vault.json
142
+ shred -u ~/.config/oracle/keys/hl.key.plaintext.bak
143
+ ```
144
+
145
+ Oracle detects a vault file and decrypts it in memory. The key is never written
146
+ back to disk, never logged, and never included in any returned object — there
147
+ is a test asserting exactly that.
148
+
149
+ **What the vault does and does not protect.** It defends against a key file read
150
+ by something that is not you: a synced backup, a stolen laptop at rest, an
151
+ overly-broad `chmod`, a leaked tarball. It does **not** defend against malware
152
+ running as your user while Oracle is unlocked. Nothing file-based does. If you
153
+ need that, use a hardware wallet and the prepare-only path.
154
+
155
+ ```bash
156
+ node bin/oracle-vault.mjs rekey <vault> # rotate the passphrase
157
+ node bin/oracle-vault.mjs inspect <vault> # show KDF params, no secret
158
+ ```
159
+
160
+ ---
161
+
162
+ ## Two ways to trade
163
+
164
+ ### A. Non-custodial — Oracle never sees a key
165
+
166
+ Oracle prepares, your wallet signs:
167
+
168
+ ```js
169
+ import { data } from "./src/index.mjs";
170
+
171
+ const order = await data.call("hl-perps", "prepareOrder", {
172
+ coin: "BTC", side: "buy", type: "limit", price: "60000", size: "0.01",
173
+ });
174
+
175
+ // order.action + order.signingReady === false
176
+ // Hand order.action to the user's wallet. Oracle is done.
177
+ ```
178
+
179
+ ### B. Owner-local execution
180
+
181
+ The public `data.call()` facade refuses `hl-exec`. Private operator deployments
182
+ must wire the source-only signer behind their own authenticated execution
183
+ boundary. It is intentionally not exported or documented as a public package
184
+ API.
185
+
186
+ The public prepare path hard-caps slippage at 100 bps, bounds leverage by the
187
+ asset maximum, rounds sizes and prices to venue precision, and makes brackets
188
+ reduce-only. Any separately operated executor must enforce those controls again
189
+ at its signing and broadcast boundaries.
190
+
191
+ ---
192
+
193
+ ## Model providers: use anything, but Hermes is better here
194
+
195
+ Oracle is a library — it does not care what drives it. Point Claude, GPT,
196
+ Gemini, Grok, a local Llama, or your own script at it. The tools are plain
197
+ functions and an MCP server.
198
+
199
+ ```bash
200
+ npx oracle-data-mcp # MCP stdio server, works with any MCP client
201
+ ```
202
+
203
+ **Why [Hermes](https://claude-code.nousresearch.com/docs) is the better host: per-profile routing.**
204
+
205
+ A trading stack is not one workload, it is several with opposite requirements,
206
+ and a single model config is wrong for all of them at once:
207
+
208
+ - **Research** — wide context, cheap, tolerant of latency. A big cheap model.
209
+ - **Execution** — fast and deterministic. Latency is money; a slow model turns
210
+ a limit order into a market order.
211
+ - **Risk review** — the strongest model available, because this is the one that
212
+ says no.
213
+ - **Alerts and crons** — small and cheap, running unattended all day.
214
+
215
+ Hermes gives each of those its own **profile**: its own model, its own tools,
216
+ its own memory, its own key scope. The research profile can hold no signing key
217
+ at all. The execution profile can hold one but run a fast model. The risk
218
+ profile can be the expensive model that reviews what the others propose.
219
+
220
+ That last point is the real argument. **Different model lineages have different
221
+ blind spots.** Oracle's own pre-release audit ran four — Grok 4.5, Opus 5,
222
+ Fable 5, and GPT-5.6 — and each found a critical issue the others missed:
223
+
224
+ - a credential leak in an HTTP dedupe cache
225
+ - a `Number()` truncation that made a signing UI display a different amount
226
+ than the one being signed
227
+ - a spending guard that authorized any amount when both limit fields were
228
+ omitted
229
+ - a cap passed as a JS number above 2^53 that silently rounded **upward**
230
+
231
+ One model reviewing its own work would have shipped three of those. Per-profile
232
+ routing is what makes running several practical instead of theoretical.
233
+
234
+ Everything still works fine with a single provider. It is just better with a
235
+ router that knows which brain to use for which job.
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000" width="1000" height="1000"><defs><radialGradient id="halo" cx="50%" cy="34%" r="54%"><stop offset="0%" stop-color="#7CC4FF" stop-opacity=".20"/><stop offset="52%" stop-color="#7CC4FF" stop-opacity=".05"/><stop offset="100%" stop-color="#7CC4FF" stop-opacity="0"/></radialGradient><radialGradient id="orb" cx="50%" cy="50%" r="50%"><stop offset="0%" stop-color="#F2FAFF"/><stop offset="38%" stop-color="#A7D8FF"/><stop offset="100%" stop-color="#7CC4FF" stop-opacity=".14"/></radialGradient><linearGradient id="rule" x1="0" y1="0" x2="1" y2="0"><stop offset="0%" stop-color="#7CC4FF" stop-opacity="0"/><stop offset="50%" stop-color="#7CC4FF" stop-opacity=".6"/><stop offset="100%" stop-color="#7CC4FF" stop-opacity="0"/></linearGradient><linearGradient id="sweep" x1="0" y1="0" x2="1" y2="1"><stop offset="0%" stop-color="#7CC4FF" stop-opacity="0"/><stop offset="100%" stop-color="#EAF6FF" stop-opacity=".95"/></linearGradient></defs><rect width="1000" height="1000" fill="#0B1018"/><rect width="1000" height="1000" fill="url(#halo)"/><circle cx="500.0" cy="336.0" r="166.0" fill="none" stroke="#7CC4FF" stroke-opacity=".24" stroke-width="1.1"/><circle cx="500.0" cy="336.0" r="128.0" fill="none" stroke="#7CC4FF" stroke-opacity=".16" stroke-width="1"/><circle cx="500.0" cy="336.0" r="92.0" fill="none" stroke="#7CC4FF" stroke-opacity=".34" stroke-width="1" stroke-dasharray="1.5 7"/><path d="M482.65 170.91 A166.0 166.0 0 0 1 665.60 347.58" fill="none" stroke="url(#sweep)" stroke-width="2.2" stroke-linecap="round"/><line x1="500.00" y1="170.00" x2="500.00" y2="183.00" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="617.38" y1="218.62" x2="608.19" y2="227.81" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="666.00" y1="336.00" x2="653.00" y2="336.00" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="617.38" y1="453.38" x2="608.19" y2="444.19" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="500.00" y1="502.00" x2="500.00" y2="489.00" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="382.62" y1="453.38" x2="391.81" y2="444.19" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="334.00" y1="336.00" x2="347.00" y2="336.00" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><line x1="382.62" y1="218.62" x2="391.81" y2="227.81" stroke="#7CC4FF" stroke-opacity=".5" stroke-width="1.5"/><circle cx="590.51" cy="245.49" r="2.6" fill="#7CC4FF" opacity=".72"/><circle cx="590.51" cy="426.51" r="2.6" fill="#7CC4FF" opacity=".72"/><circle cx="409.49" cy="426.51" r="2.6" fill="#7CC4FF" opacity=".72"/><circle cx="409.49" cy="245.49" r="2.6" fill="#7CC4FF" opacity=".72"/><circle cx="500.0" cy="336.0" r="52" fill="url(#orb)" opacity=".20"/><circle cx="500.0" cy="336.0" r="16" fill="url(#orb)"/><circle cx="500.0" cy="336.0" r="16" fill="none" stroke="#F2FAFF" stroke-opacity=".55" stroke-width=".9"/><g transform="translate(452.700,122.000)" fill="#7CC4FF"><g transform="translate(0.000,0) scale(0.016000,-0.016000)"><path d="M300 -12Q236 -12 190.0 12.5Q144 37 114.0 83.0Q84 129 70.0 196.0Q56 263 56 349Q56 434 70.0 501.5Q84 569 114.0 615.0Q144 661 190.0 685.5Q236 710 300 710Q364 710 410.0 685.5Q456 661 486.0 615.0Q516 569 530.0 501.5Q544 434 544 349Q544 263 530.0 196.0Q516 129 486.0 83.0Q456 37 410.0 12.5Q364 -12 300 -12ZM300 61Q342 61 371.0 77.5Q400 94 419.0 124.0Q438 154 446.5 196.5Q455 239 455 292V406Q455 458 446.5 501.0Q438 544 419.0 574.0Q400 604 371.0 620.5Q342 637 300 637Q258 637 229.0 620.5Q200 604 181.0 574.0Q162 544 153.5 501.0Q145 458 145 406V292Q145 239 153.5 196.5Q162 154 181.0 124.0Q200 94 229.0 77.5Q258 61 300 61Z"/></g><g transform="translate(17.000,0) scale(0.016000,-0.016000)"><path d="M174 0H90V698H344Q441 698 492.0 645.0Q543 592 543 497Q543 412 499.0 361.0Q455 310 371 302L549 0H455L285 298H174ZM342 369Q395 369 424.5 395.5Q454 422 454 471V523Q454 572 424.5 598.5Q395 625 342 625H174V369Z"/></g><g transform="translate(34.000,0) scale(0.016000,-0.016000)"><path d="M481 0 422 199H177L118 0H31L245 698H356L570 0ZM304 609H295L197 272H402Z"/></g><g transform="translate(51.000,0) scale(0.016000,-0.016000)"><path d="M323 -12Q195 -12 132.5 81.0Q70 174 70 349Q70 524 132.5 617.0Q195 710 323 710Q371 710 406.0 697.0Q441 684 466.0 662.0Q491 640 508.0 612.5Q525 585 538 557L466 524Q457 547 445.0 567.5Q433 588 416.5 603.5Q400 619 377.5 628.0Q355 637 323 637Q240 637 199.5 574.0Q159 511 159 406V292Q159 187 199.5 124.0Q240 61 323 61Q355 61 377.5 70.0Q400 79 416.5 94.5Q433 110 445.0 130.5Q457 151 466 174L538 141Q525 112 508.0 85.0Q491 58 466.0 36.0Q441 14 406.0 1.0Q371 -12 323 -12Z"/></g><g transform="translate(68.000,0) scale(0.016000,-0.016000)"><path d="M120 0V698H204V73H535V0Z"/></g><g transform="translate(85.000,0) scale(0.016000,-0.016000)"><path d="M90 0V698H520V625H174V390H508V317H174V73H520V0Z"/></g></g><rect x="416.0" y="143" width="168" height="1" fill="url(#rule)"/><g transform="translate(313.367,690.000)" fill="#A7D8FF"><g transform="translate(0.000,0) scale(0.178000,-0.178000)"><path d="M154.00006103515625 -14Q106.199951171875 -14 75.2999267578125 13.800018310546875Q44.39990234375 41.60003662109375 33.199920654296875 88.60003662109375Q21.99993896484375 135.60003662109375 32.7999267578125 193Q43.99993896484375 251.60003662109375 74.79995727539062 298.10003662109375Q105.5999755859375 344.60003662109375 149.60000610351562 371.8000183105469Q193.60003662109375 399 243.40008544921875 399Q295.400146484375 399 326.8001708984375 370.70001220703125Q358.2001953125 342.4000244140625 368.40020751953125 295.5000305175781Q378.6002197265625 248.60003662109375 367.40020751953125 193Q355.2001953125 129.7999267578125 321.7001647949219 82.89993286132812Q288.20013427734375 35.99993896484375 243.80010986328125 10.999969482421875Q199.40008544921875 -14 154.00006103515625 -14ZM188.800048828125 11Q230.39990234375 11 264.6997375488281 47.300018310546875Q298.99957275390625 83.60003662109375 310.799560546875 149Q317.99957275390625 186.0001220703125 315.89959716796875 225.30014038085938Q313.79962158203125 264.60015869140625 301.9996643066406 298.6001281738281Q290.19970703125 332.60009765625 268.1997985839844 353.800048828125Q246.19989013671875 375 213.60003662109375 375Q172.000244140625 375 137.20040893554688 337.800048828125Q102.40057373046875 300.60009765625 89.40057373046875 236Q81.40057373046875 197.39990234375 84.00054931640625 157.9998779296875Q86.60052490234375 118.599853515625 99.1004638671875 85.19989013671875Q111.60040283203125 51.7999267578125 134.40029907226562 31.39996337890625Q157.2001953125 11 188.800048828125 11Z"/></g><g transform="translate(70.844,0) scale(0.178000,-0.178000)"><path d="M110.600341796875 7.2000732421875 100.600341796875 8.2000732421875Q109.0003662109375 53.2001953125 123.600341796875 105.70022583007812Q138.2003173828125 158.20025634765625 157.30026245117188 209.20022583007812Q176.40020751953125 260.2001953125 198.20016479492188 302.3001403808594Q220.0001220703125 344.40008544921875 243.20010375976562 369.7000427246094Q266.40008544921875 395 289.0001220703125 395Q302.60015869140625 395 316.0002136230469 387.6999816894531Q329.4002685546875 380.39996337890625 337.6003112792969 367.99993896484375Q345.80035400390625 355.59991455078125 342.80035400390625 340.9998779296875Q340.20037841796875 327.9998779296875 331.8003234863281 320.7997741699219Q323.4002685546875 313.59967041015625 310.8001708984375 313.59967041015625Q295.8001708984375 313.59967041015625 288.4001159667969 321.899658203125Q281.00006103515625 330.19964599609375 275.5 338.4996337890625Q269.99993896484375 346.79962158203125 259.7999267578125 346.79962158203125Q245.5999755859375 346.79962158203125 228.80001831054688 323.2996520996094Q212.00006103515625 299.7996826171875 193.90011596679688 261.5997314453125Q175.8001708984375 223.3997802734375 159.50021362304688 177.89984130859375Q143.20025634765625 132.39990234375 130.30029296875 87.39996337890625Q117.40032958984375 42.4000244140625 110.600341796875 7.2000732421875ZM79.39996337890625 -8Q65.19989013671875 -8 60.999847412109375 -6.29998779296875Q56.7998046875 -4.5999755859375 56.7998046875 -1.5999755859375Q56.7998046875 1.60003662109375 62.399810791015625 26.399993896484375Q67.99981689453125 51.199951171875 71.99981689453125 74L104.99993896484375 258.6005859375Q112.79986572265625 298.80023193359375 110.9998779296875 319.3000793457031Q109.19989013671875 339.7999267578125 102.2999267578125 347.69989013671875Q95.39996337890625 355.599853515625 86.5999755859375 355.599853515625Q72.800048828125 355.599853515625 56.7000732421875 343.9998779296875Q40.60009765625 332.39990234375 26.4000244140625 318.7998046875Q24 316.3997802734375 20.0 320.09979248046875Q16 323.7998046875 18.4000244140625 326.99981689453125Q48.0001220703125 361.199951171875 74.20016479492188 378.0999755859375Q100.40020751953125 395 126.000244140625 395Q144.00030517578125 395 153.80032348632812 383.4000244140625Q163.600341796875 371.800048828125 164.90036010742188 342.8002014160156Q166.20037841796875 313.80035400390625 156.40045166015625 261.000732421875L110.600341796875 7.2000732421875Q108.40032958984375 -8 79.39996337890625 -8Z"/></g><g transform="translate(131.364,0) scale(0.178000,-0.178000)"><path d="M80.60003662109375 -13Q48.20001220703125 -13 31.0999755859375 11.100006103515625Q13.99993896484375 35.20001220703125 21.199951171875 91Q28.99993896484375 145.199951171875 55.699951171875 199.49993896484375Q82.39996337890625 253.7999267578125 120.5 299.0999450683594Q158.60003662109375 344.39996337890625 201.7000732421875 371.6999816894531Q244.80010986328125 399 284.400146484375 399Q302.8001708984375 399 320.6002197265625 392.29998779296875Q338.4002685546875 385.5999755859375 351.1003112792969 370.2999572753906Q363.80035400390625 354.99993896484375 365.80035400390625 330.39990234375L323.40008544921875 357Q335.60015869140625 359 352.1001892089844 373.3999938964844Q368.6002197265625 387.79998779296875 373.600341796875 407Q375.600341796875 410 381.100341796875 408.79998779296875Q386.600341796875 407.5999755859375 385.600341796875 405.5999755859375L327.600341796875 89Q317.80035400390625 30.8001708984375 342.60028076171875 30.8001708984375Q354.20025634765625 30.8001708984375 371.40020751953125 43.5001220703125Q388.60015869140625 56.2000732421875 409.40008544921875 77Q412.40008544921875 80 416.40008544921875 76.0Q420.40008544921875 72 417.40008544921875 69Q384.80010986328125 32 358.10009765625 11.5Q331.40008544921875 -9 305.40008544921875 -9Q280.5999755859375 -9 273.89990234375 12.9000244140625Q267.1998291015625 34.800048828125 276.7998046875 89L300.99981689453125 229L317.9998779296875 246Q288.39996337890625 170.39990234375 248.39999389648438 111.59991455078125Q208.4000244140625 52.7999267578125 165.00003051757812 19.89996337890625Q121.60003662109375 -13 80.60003662109375 -13ZM116.6004638671875 36.0003662109375Q144.60040283203125 36.0003662109375 174.60031127929688 57.800323486328125Q204.6002197265625 79.60028076171875 232.30010986328125 115.2001953125Q260 150.80010986328125 280.4999084472656 193.49996948242188Q300.99981689453125 236.1998291015625 309.19976806640625 276.9996337890625Q317.19976806640625 313.999755859375 301.9997863769531 339.19976806640625Q286.7998046875 364.3997802734375 249.59991455078125 363.59979248046875Q215.20001220703125 362.7998046875 179.00015258789062 332.59991455078125Q142.80029296875 302.4000244140625 115.00039672851562 251.60018920898438Q87.20050048828125 200.80035400390625 77.4005126953125 136.00054931640625Q69.80047607421875 85.80035400390625 79.4005126953125 60.900360107421875Q89.00054931640625 36.0003662109375 116.6004638671875 36.0003662109375Z"/></g><g transform="translate(208.616,0) scale(0.178000,-0.178000)"><path d="M156.800048828125 -13Q114.20001220703125 -13 86.5 6.399993896484375Q58.79998779296875 25.79998779296875 44.999969482421875 57.5999755859375Q31.199951171875 89.39996337890625 28.99993896484375 127.39996337890625Q26.7999267578125 165.39996337890625 34.59991455078125 202Q47.9998779296875 265.199951171875 82.29989624023438 308.7999572753906Q116.59991455078125 352.39996337890625 161.39996337890625 375.6999816894531Q206.20001220703125 399 249.00006103515625 399Q272.800048828125 399 293.2000732421875 391.70001220703125Q313.60009765625 384.4000244140625 325.3001403808594 371.0Q337.00018310546875 357.5999755859375 335.00018310546875 339.9998779296875Q334.00018310546875 327.19976806640625 326.10009765625 317.4997253417969Q318.20001220703125 307.7996826171875 302.39990234375 307.7996826171875Q288.19970703125 307.7996826171875 279.3996887207031 316.69976806640625Q270.59967041015625 325.599853515625 265.99969482421875 339.9998779296875Q262.7996826171875 351.7999267578125 250.999755859375 364.59991455078125Q239.1998291015625 377.39990234375 213.7999267578125 377.39990234375Q181.0001220703125 377.39990234375 157.1002197265625 357.5999450683594Q133.2003173828125 337.79998779296875 118.40036010742188 305.4000244140625Q103.60040283203125 273.00006103515625 95.8004150390625 233.00006103515625Q86.00042724609375 178.00006103515625 92.50042724609375 129.60009765625Q99.00042724609375 81.20013427734375 125.10040283203125 51.400177001953125Q151.20037841796875 21.6002197265625 198.600341796875 21.6002197265625Q232.400146484375 21.6002197265625 258.3001403808594 35.900146484375Q284.20013427734375 50.2000732421875 305.00006103515625 67Q307.800048828125 69 311.800048828125 65.0Q315.800048828125 61 313.00006103515625 58Q272.0001220703125 21 232.90008544921875 4.0Q193.800048828125 -13 156.800048828125 -13Z"/></g><g transform="translate(270.026,0) scale(0.178000,-0.178000)"><path d="M90.800048828125 -9Q64.7999267578125 -9 58.19989013671875 13.200042724609375Q51.599853515625 35.40008544921875 61.1998291015625 89L160.39971923828125 619.3995361328125Q166.79974365234375 654.5997314453125 153.09976196289062 663.7997436523438Q139.3997802734375 672.999755859375 93.599853515625 650.5997924804688Q89.599853515625 648.7998046875 87.19985961914062 654.7998046875Q84.79986572265625 660.7998046875 88.79986572265625 661.7998046875L218.20025634765625 725Q222.4002685546875 727 226.4002685546875 723.0Q230.4002685546875 719 229.4002685546875 717L113.40032958984375 89Q106.600341796875 58.60003662109375 112.00033569335938 44.700103759765625Q117.40032958984375 30.8001708984375 129.4002685546875 30.8001708984375Q140.4002685546875 30.8001708984375 157.40020751953125 43.600128173828125Q174.400146484375 56.40008544921875 195.2000732421875 77Q199.2000732421875 81 203.2000732421875 77.0Q207.2000732421875 73 203.2000732421875 69Q170.60009765625 32 144.00009155273438 11.5Q117.40008544921875 -9 90.800048828125 -9Z"/></g><g transform="translate(312.212,0) scale(0.178000,-0.178000)"><path d="M155.2000732421875 -12Q102 -12 71.49996948242188 15.800018310546875Q40.99993896484375 43.60003662109375 31.49993896484375 88.60003662109375Q21.99993896484375 133.60003662109375 31.7999267578125 185Q38.199951171875 222.4000244140625 58.799957275390625 260.5000305175781Q79.39996337890625 298.60003662109375 110.19998168945312 329.9000244140625Q141 361.20001220703125 179.20004272460938 380.1000061035156Q217.40008544921875 399 260.400146484375 399Q296.6002197265625 399 314.3002624511719 384.6000061035156Q332.00030517578125 370.20001220703125 327.600341796875 345Q323.0003662109375 321.39996337890625 300.2003479003906 299.3999328613281Q277.40032958984375 277.39990234375 241.10028076171875 259.5998840332031Q204.80023193359375 241.79986572265625 160.3001708984375 229.099853515625Q115.80010986328125 216.39984130859375 68.2000732421875 210.599853515625L70.2000732421875 223.599853515625Q146.79998779296875 234.599853515625 199.19992065429688 259.29986572265625Q251.599853515625 283.9998779296875 260.99981689453125 324Q268.19976806640625 350.7999267578125 252.09988403320312 361.39996337890625Q236 372 215.60003662109375 372Q182.2001953125 372 156.90029907226562 351.1000061035156Q131.60040283203125 330.20001220703125 115.700439453125 295.20001220703125Q99.80047607421875 260.20001220703125 92.80047607421875 218Q82.4005126953125 162.2000732421875 90.60049438476562 118.20010375976562Q98.80047607421875 74.20013427734375 124.80044555664062 48.300140380859375Q150.8004150390625 22.400146484375 193.400390625 22.400146484375Q217.2003173828125 22.400146484375 243.30029296875 29.400146484375Q269.4002685546875 36.400146484375 293.80023193359375 55.0001220703125Q296.6002197265625 57.0001220703125 300.1002197265625 53.0001220703125Q303.6002197265625 49.0001220703125 300.80023193359375 46.20013427734375Q262.80023193359375 14.800048828125 226.70016479492188 1.4000244140625Q190.60009765625 -12 155.2000732421875 -12Z"/></g></g><g transform="translate(347.096,786.000)" fill="#9BB6D1" opacity=".9"><g transform="translate(0.000,0) scale(0.092000,-0.092000)"><path d="M439 1 302 303Q282 348 269.0 361.0Q256 374 237 374Q235 374 235.0 380.0Q235 386 237 386Q252 386 268.5 385.0Q285 384 299 384Q332 384 356.0 385.0Q380 386 400 386Q403 386 403.0 380.0Q403 374 400 374Q369 374 350.0 366.5Q331 359 343 335L473 50L450 22L568 311Q582 346 565.0 360.0Q548 374 492 374Q490 374 490.0 380.0Q490 386 492 386Q516 386 537.5 385.0Q559 384 593 384Q614 384 627.0 385.0Q640 386 658 386Q661 386 661.0 380.0Q661 374 658 374Q635 374 619.0 360.0Q603 346 586 305L461 1Q459 -3 450.0 -3.0Q441 -3 439 1ZM205 1 68 303Q48 348 35.0 361.0Q22 374 4 374Q1 374 1.0 380.0Q1 386 4 386Q18 386 34.5 385.0Q51 384 65 384Q96 384 120.0 385.0Q144 386 166 386Q169 386 169.0 380.0Q169 374 166 374Q133 374 116.5 366.0Q100 358 110 335L240 50L216 22L325 285L339 271L227 1Q226 -3 216.5 -3.0Q207 -3 205 1Z"/></g><g transform="translate(61.364,0) scale(0.092000,-0.092000)"><path d="M313 -6Q309 -8 305 -8Q293 -8 283.0 13.0Q273 34 273 74V267Q273 329 253.5 353.0Q234 377 205 377Q180 377 163.5 365.5Q147 354 138.5 337.0Q130 320 126 305Q124 295 119.0 281.5Q114 268 94 268Q79 268 71.5 277.0Q64 286 64 296Q64 313 82.0 330.5Q100 348 127.5 363.0Q155 378 185.0 387.0Q215 396 240 396Q281 396 300.0 369.5Q319 343 319 297V108Q319 72 327.5 55.5Q336 39 357 39Q376 39 412 54Q417 56 419.0 50.5Q421 45 416 43ZM136 -7Q99 -7 79.5 13.5Q60 34 60 61Q60 78 68.5 94.0Q77 110 98.5 125.0Q120 140 158 154L283 201L285 188L167 143Q146 135 135.0 125.5Q124 116 120.0 105.5Q116 95 116 84Q116 62 130.5 44.0Q145 26 173 26Q184 26 196.0 29.5Q208 33 225 43L292 82L294 70L219 23Q194 7 175.0 0.0Q156 -7 136 -7Z"/></g><g transform="translate(99.912,0) scale(0.092000,-0.092000)"><path d="M96 322Q96 295 109.5 276.5Q123 258 144.5 245.5Q166 233 189 221Q215 209 238.0 194.5Q261 180 276.0 160.0Q291 140 291 108Q291 76 275.0 49.0Q259 22 227.5 5.5Q196 -11 151 -11Q127 -11 104.0 -4.5Q81 2 57 20Q55 22 53.0 25.0Q51 28 51 32L49 104Q49 107 54.5 107.5Q60 108 61 105Q74 71 91.5 49.5Q109 28 131.0 18.0Q153 8 180 8Q215 8 233.5 24.5Q252 41 250 74Q249 103 235.0 121.0Q221 139 200.0 151.0Q179 163 156 174Q131 186 108.5 199.5Q86 213 71.5 234.0Q57 255 57 288Q57 326 77.0 350.5Q97 375 127.5 387.0Q158 399 191 399Q209 399 227.0 395.5Q245 392 262 384Q271 380 271 373Q271 358 270.0 341.0Q269 324 269 304Q269 302 263.0 302.0Q257 302 257 304Q257 327 240.5 344.0Q224 361 200.5 370.0Q177 379 154 379Q127 379 111.5 365.0Q96 351 96 322Z"/></g><g transform="translate(152.536,0) scale(0.092000,-0.092000)"><path d="M27 0Q24 0 24.0 6.0Q24 12 27 12Q68 12 80.0 25.0Q92 38 92 81V600Q92 636 85.0 652.5Q78 669 60 669Q44 669 12 654Q8 652 5.5 657.5Q3 663 7 665L130 725Q131 725 131.0 725.0Q131 725 132 725Q135 725 137.0 723.0Q139 721 139 718V81Q139 38 151.0 25.0Q163 12 205 12Q207 12 207.0 6.0Q207 0 205 0Q187 0 164.5 1.0Q142 2 116 2Q91 2 67.5 1.0Q44 0 27 0ZM296 0Q293 0 293.0 6.0Q293 12 296 12Q337 12 349.0 25.0Q361 38 361 81V244Q361 363 267 363Q228 363 188.5 337.5Q149 312 120 269L116 281Q163 343 206.0 369.5Q249 396 294 396Q348 396 378.0 366.5Q408 337 408 275V81Q408 38 420.0 25.0Q432 12 474 12Q476 12 476.0 6.0Q476 0 474 0Q456 0 433.5 1.0Q411 2 385 2Q360 2 336.5 1.0Q313 0 296 0Z"/></g><g transform="translate(198.168,0) scale(0.092000,-0.092000)"><path d="M215 -12Q156 -12 116.5 15.5Q77 43 57.0 87.0Q37 131 37 180Q37 241 65.0 289.5Q93 338 140.5 366.5Q188 395 244 395Q301 395 329.0 364.0Q357 333 357 281Q357 268 354.5 262.0Q352 256 345 256H298Q303 318 278.5 346.5Q254 375 212 375Q156 375 125.0 332.5Q94 290 94 216Q94 160 112.0 115.5Q130 71 165.0 45.5Q200 20 250 20Q285 20 307.5 30.5Q330 41 351 54Q353 56 356.5 51.5Q360 47 358 44Q323 14 287.5 1.0Q252 -12 215 -12ZM81 255 80 267 308 271V256Z"/></g><g transform="translate(235.428,0) scale(0.092000,-0.092000)"><path d="M139 271 135 281Q172 327 195.5 351.5Q219 376 236.0 385.5Q253 395 269 395Q290 395 310.0 384.0Q330 373 330 357Q330 347 322.5 339.0Q315 331 301 331Q289 331 280.5 338.0Q272 345 262.0 351.5Q252 358 235 358Q226 358 215.5 352.5Q205 347 187.5 328.5Q170 310 139 271ZM46 0Q43 0 43.0 6.0Q43 12 46 12Q87 12 99.0 25.0Q111 38 111 81V281Q111 315 103.0 330.5Q95 346 75 346Q65 346 51.0 342.0Q37 338 19 331Q15 330 12.5 335.0Q10 340 14 342L125 394Q127 395 130 395Q137 395 147.5 374.5Q158 354 158 315V81Q158 52 165.0 37.0Q172 22 193.5 17.0Q215 12 258 12Q261 12 261.0 6.0Q261 0 258 0Q234 0 202.0 1.0Q170 2 135 2Q110 2 86.5 1.0Q63 0 46 0Z"/></g><g transform="translate(268.548,0) scale(0.092000,-0.092000)"><path d="M215 -12Q156 -12 116.5 15.5Q77 43 57.0 87.0Q37 131 37 180Q37 241 65.0 289.5Q93 338 140.5 366.5Q188 395 244 395Q301 395 329.0 364.0Q357 333 357 281Q357 268 354.5 262.0Q352 256 345 256H298Q303 318 278.5 346.5Q254 375 212 375Q156 375 125.0 332.5Q94 290 94 216Q94 160 112.0 115.5Q130 71 165.0 45.5Q200 20 250 20Q285 20 307.5 30.5Q330 41 351 54Q353 56 356.5 51.5Q360 47 358 44Q323 14 287.5 1.0Q252 -12 215 -12ZM81 255 80 267 308 271V256Z"/></g></g><rect x="368.0" y="836" width="264" height="1" fill="url(#rule)"/><g transform="translate(368.650,880.000)" fill="#7CC4FF"><g transform="translate(0.000,0) scale(0.014500,-0.014500)"><path d="M342 625V0H258V625H25V698H575V625Z"/></g><g transform="translate(12.700,0) scale(0.014500,-0.014500)"><path d="M436 317H164V0H80V698H164V390H436V698H520V0H436Z"/></g><g transform="translate(25.400,0) scale(0.014500,-0.014500)"><path d="M90 0V698H520V625H174V390H508V317H174V73H520V0Z"/></g><g transform="translate(50.800,0) scale(0.014500,-0.014500)"><path d="M90 0V698H530V625H174V390H500V317H174V0Z"/></g><g transform="translate(63.500,0) scale(0.014500,-0.014500)"><path d="M164 698V279Q164 228 167.0 188.0Q170 148 183.0 119.5Q196 91 223.5 76.0Q251 61 300 61Q349 61 376.5 76.0Q404 91 417.0 119.5Q430 148 433.0 188.0Q436 228 436 279V698H520V299Q520 221 512.5 163.0Q505 105 481.5 66.0Q458 27 414.5 7.5Q371 -12 300 -12Q229 -12 185.5 7.5Q142 27 118.5 66.0Q95 105 87.5 163.0Q80 221 80 299V698Z"/></g><g transform="translate(76.200,0) scale(0.014500,-0.014500)"><path d="M342 625V0H258V625H25V698H575V625Z"/></g><g transform="translate(88.900,0) scale(0.014500,-0.014500)"><path d="M164 698V279Q164 228 167.0 188.0Q170 148 183.0 119.5Q196 91 223.5 76.0Q251 61 300 61Q349 61 376.5 76.0Q404 91 417.0 119.5Q430 148 433.0 188.0Q436 228 436 279V698H520V299Q520 221 512.5 163.0Q505 105 481.5 66.0Q458 27 414.5 7.5Q371 -12 300 -12Q229 -12 185.5 7.5Q142 27 118.5 66.0Q95 105 87.5 163.0Q80 221 80 299V698Z"/></g><g transform="translate(101.600,0) scale(0.014500,-0.014500)"><path d="M174 0H90V698H344Q441 698 492.0 645.0Q543 592 543 497Q543 412 499.0 361.0Q455 310 371 302L549 0H455L285 298H174ZM342 369Q395 369 424.5 395.5Q454 422 454 471V523Q454 572 424.5 598.5Q395 625 342 625H174V369Z"/></g><g transform="translate(114.300,0) scale(0.014500,-0.014500)"><path d="M90 0V698H520V625H174V390H508V317H174V73H520V0Z"/></g><g transform="translate(139.700,0) scale(0.014500,-0.014500)"><path d="M84 0V67H258V631H84V698H516V631H342V67H516V0Z"/></g><g transform="translate(152.400,0) scale(0.014500,-0.014500)"><path d="M298 -12Q204 -12 144.0 22.5Q84 57 45 111L106 161Q147 110 192.5 85.0Q238 60 301 60Q377 60 417.0 95.0Q457 130 457 193Q457 244 428.0 272.5Q399 301 327 313L249 326Q198 335 163.5 353.0Q129 371 108.0 396.5Q87 422 78.0 452.5Q69 483 69 516Q69 612 132.0 661.0Q195 710 302 710Q386 710 443.5 682.0Q501 654 536 603L477 552Q448 590 407.0 614.0Q366 638 301 638Q230 638 192.0 608.0Q154 578 154 518Q154 471 182.5 441.5Q211 412 285 399L360 386Q411 377 446.0 359.0Q481 341 502.5 316.0Q524 291 533.0 260.0Q542 229 542 195Q542 98 478.5 43.0Q415 -12 298 -12Z"/></g><g transform="translate(177.800,0) scale(0.014500,-0.014500)"><path d="M481 0 422 199H177L118 0H31L245 698H356L570 0ZM304 609H295L197 272H402Z"/></g><g transform="translate(190.500,0) scale(0.014500,-0.014500)"><path d="M444 93H439Q430 73 418.0 54.0Q406 35 387.5 20.5Q369 6 343.0 -3.0Q317 -12 281 -12Q167 -12 111.5 80.0Q56 172 56 344Q56 524 117.0 617.0Q178 710 305 710Q354 710 390.0 697.0Q426 684 451.5 662.0Q477 640 494.0 612.5Q511 585 522 557L450 524Q441 547 429.5 567.5Q418 588 401.5 603.5Q385 619 362.0 628.0Q339 637 308 637Q224 637 184.5 574.0Q145 511 145 406V298Q145 245 153.0 201.5Q161 158 179.5 126.0Q198 94 227.5 76.5Q257 59 300 59Q368 59 406.0 100.0Q444 141 444 206V278H297V345H522V0H444Z"/></g><g transform="translate(203.200,0) scale(0.014500,-0.014500)"><path d="M90 0V698H520V625H174V390H508V317H174V73H520V0Z"/></g><g transform="translate(215.900,0) scale(0.014500,-0.014500)"><path d="M163 588H156V0H80V698H199L437 110H444V698H520V0H401Z"/></g><g transform="translate(228.600,0) scale(0.014500,-0.014500)"><path d="M342 625V0H258V625H25V698H575V625Z"/></g><g transform="translate(241.300,0) scale(0.014500,-0.014500)"><path d="M84 0V67H258V631H84V698H516V631H342V67H516V0Z"/></g><g transform="translate(254.000,0) scale(0.014500,-0.014500)"><path d="M323 -12Q195 -12 132.5 81.0Q70 174 70 349Q70 524 132.5 617.0Q195 710 323 710Q371 710 406.0 697.0Q441 684 466.0 662.0Q491 640 508.0 612.5Q525 585 538 557L466 524Q457 547 445.0 567.5Q433 588 416.5 603.5Q400 619 377.5 628.0Q355 637 323 637Q240 637 199.5 574.0Q159 511 159 406V292Q159 187 199.5 124.0Q240 61 323 61Q355 61 377.5 70.0Q400 79 416.5 94.5Q433 110 445.0 130.5Q457 151 466 174L538 141Q525 112 508.0 85.0Q491 58 466.0 36.0Q441 14 406.0 1.0Q371 -12 323 -12Z"/></g></g><g transform="translate(448.700,916.000)" fill="#5B738F"><g transform="translate(0.000,0) scale(0.012000,-0.012000)"><path d="M88 698H325Q415 698 466.0 649.0Q517 600 517 518Q517 455 486.5 419.0Q456 383 408 368V365Q467 351 505.0 312.5Q543 274 543 201Q543 159 529.0 122.0Q515 85 489.5 58.0Q464 31 429.5 15.5Q395 0 355 0H88ZM330 73Q388 73 421.0 99.0Q454 125 454 179V220Q454 273 421.0 299.5Q388 326 330 326H172V73ZM316 395Q369 395 399.0 418.5Q429 442 429 490V529Q429 577 399.0 601.0Q369 625 316 625H172V395Z"/></g><g transform="translate(10.600,0) scale(0.012000,-0.012000)"><path d="M84 0V67H258V631H84V698H516V631H342V67H516V0Z"/></g><g transform="translate(21.200,0) scale(0.012000,-0.012000)"><path d="M342 625V0H258V625H25V698H575V625Z"/></g><g transform="translate(31.800,0) scale(0.012000,-0.012000)"><path d="M323 -12Q195 -12 132.5 81.0Q70 174 70 349Q70 524 132.5 617.0Q195 710 323 710Q371 710 406.0 697.0Q441 684 466.0 662.0Q491 640 508.0 612.5Q525 585 538 557L466 524Q457 547 445.0 567.5Q433 588 416.5 603.5Q400 619 377.5 628.0Q355 637 323 637Q240 637 199.5 574.0Q159 511 159 406V292Q159 187 199.5 124.0Q240 61 323 61Q355 61 377.5 70.0Q400 79 416.5 94.5Q433 110 445.0 130.5Q457 151 466 174L538 141Q525 112 508.0 85.0Q491 58 466.0 36.0Q441 14 406.0 1.0Q371 -12 323 -12Z"/></g><g transform="translate(42.400,0) scale(0.012000,-0.012000)"><path d="M300 -12Q236 -12 190.0 12.5Q144 37 114.0 83.0Q84 129 70.0 196.0Q56 263 56 349Q56 434 70.0 501.5Q84 569 114.0 615.0Q144 661 190.0 685.5Q236 710 300 710Q364 710 410.0 685.5Q456 661 486.0 615.0Q516 569 530.0 501.5Q544 434 544 349Q544 263 530.0 196.0Q516 129 486.0 83.0Q456 37 410.0 12.5Q364 -12 300 -12ZM300 61Q342 61 371.0 77.5Q400 94 419.0 124.0Q438 154 446.5 196.5Q455 239 455 292V406Q455 458 446.5 501.0Q438 544 419.0 574.0Q400 604 371.0 620.5Q342 637 300 637Q258 637 229.0 620.5Q200 604 181.0 574.0Q162 544 153.5 501.0Q145 458 145 406V292Q145 239 153.5 196.5Q162 154 181.0 124.0Q200 94 229.0 77.5Q258 61 300 61Z"/></g><g transform="translate(53.000,0) scale(0.012000,-0.012000)"><path d="M84 0V67H258V631H84V698H516V631H342V67H516V0Z"/></g><g transform="translate(63.600,0) scale(0.012000,-0.012000)"><path d="M163 588H156V0H80V698H199L437 110H444V698H520V0H401Z"/></g><g transform="translate(84.800,0) scale(0.012000,-0.012000)"><path d="M120 0V698H204V73H535V0Z"/></g><g transform="translate(95.400,0) scale(0.012000,-0.012000)"><path d="M85 0V73H285V636H278L102 472L53 525L238 698H369V73H553V0Z"/></g></g><path d="M52 76 L52 52 L76 52" fill="none" stroke="#7CC4FF" stroke-opacity=".38" stroke-width="1.3"/><path d="M948 76 L948 52 L924 52" fill="none" stroke="#7CC4FF" stroke-opacity=".38" stroke-width="1.3"/><path d="M52 924 L52 948 L76 948" fill="none" stroke="#7CC4FF" stroke-opacity=".38" stroke-width="1.3"/><path d="M948 924 L948 948 L924 948" fill="none" stroke="#7CC4FF" stroke-opacity=".38" stroke-width="1.3"/></svg>
@@ -0,0 +1,273 @@
1
+ {
2
+ "id": "oracle-full-crypto",
3
+ "name": "Oracle Full Crypto Pack",
4
+ "version": 1,
5
+ "audience": "public-users",
6
+ "description": "Default capability set for public Oracle: trader, builder, analyzer, multichain scanner, meme-token sniping, RFQ routing, tokenized-asset buys, NFT mint gas-war limits, Solana, Bitcoin inscriptions, NFT/gacha/DEX launches, and protocol build under bound grants. User signs everything.",
7
+ "posture": {
8
+ "default": "DISARMED",
9
+ "custody": "self-custodial",
10
+ "signing": "user-wallet-only",
11
+ "broadcast": "user-or-explicit-grant-only",
12
+ "never": [
13
+ "operator-hot-wallet-by-default",
14
+ "private-executor-custody",
15
+ "house-custody",
16
+ "unguarded-broadcast",
17
+ "uncapped-gas-war-mints"
18
+ ]
19
+ },
20
+ "includes_protocol_build": true,
21
+ "skill_packs": {
22
+ "research": [
23
+ "oracle-token-research",
24
+ "oracle-contract-research",
25
+ "oracle-smart-wallet-scanner",
26
+ "oracle-meme-token-sniper",
27
+ "oracle-bitcoin",
28
+ "oracle-solana",
29
+ "hyperliquid",
30
+ "polymarket",
31
+ "oracle-chain-graphs-telegram-cards",
32
+ "oracle-rfq-tokenized-assets",
33
+ "oracle-hypercore-staking"
34
+ ],
35
+ "execution_prepare": [
36
+ "self-custodial-onchain-execution",
37
+ "multichain-exec-desk",
38
+ "trade-loop-circuit-breaker",
39
+ "protocol-api-key-integration",
40
+ "oracle-bitcoin",
41
+ "oracle-best-execution",
42
+ "oracle-rfq-tokenized-assets",
43
+ "oracle-meme-token-sniper",
44
+ "oracle-nft-mint-gas-war",
45
+ "oracle-solana-nft",
46
+ "oracle-hypercore-staking"
47
+ ],
48
+ "venues": [
49
+ "oracle-solana",
50
+ "oracle-bitcoin",
51
+ "hyperliquid",
52
+ "polymarket",
53
+ "rh-token-research",
54
+ "rh-token-swap",
55
+ "rh-token-chart",
56
+ "oracle-meme-token-sniper",
57
+ "oracle-rfq-tokenized-assets",
58
+ "oracle-solana-nft",
59
+ "oracle-hypercore-staking"
60
+ ],
61
+ "protocol_build": [
62
+ "oracle-protocol-builder",
63
+ "oracle-contract-research",
64
+ "oracle-protocol-security",
65
+ "oracle-nft-gacha-launch",
66
+ "oracle-dex-launch",
67
+ "protocol-api-key-integration",
68
+ "oracle-nft-mint-gas-war"
69
+ ],
70
+ "product_law": [
71
+ "oracle-public-product",
72
+ "oracle-grants",
73
+ "oracle-receipts",
74
+ "trade-loop-circuit-breaker",
75
+ "oracle-chain-graphs-telegram-cards",
76
+ "oracle-nft-mint-gas-war"
77
+ ],
78
+ "launch_build": [
79
+ "oracle-protocol-builder",
80
+ "oracle-nft-gacha-launch",
81
+ "oracle-dex-launch",
82
+ "oracle-protocol-security",
83
+ "oracle-nft-mint-gas-war"
84
+ ],
85
+ "analysis": [
86
+ "oracle-token-research",
87
+ "oracle-contract-research",
88
+ "oracle-smart-wallet-scanner",
89
+ "oracle-meme-token-sniper",
90
+ "oracle-best-execution",
91
+ "oracle-chain-graphs-telegram-cards",
92
+ "oracle-rfq-tokenized-assets"
93
+ ]
94
+ },
95
+ "excluded_from_public": [
96
+ "private deploy ops",
97
+ "private executor ops",
98
+ "private chain ops",
99
+ "operator infrastructure access",
100
+ "any skill that requires an operator wallet or server root access"
101
+ ],
102
+ "protocol_build": {
103
+ "enabled": true,
104
+ "modes": [
105
+ "research-existing-protocol",
106
+ "scaffold-contracts",
107
+ "scaffold-nft-or-gacha",
108
+ "scaffold-dex-or-launchpad",
109
+ "write-deploy-scripts",
110
+ "prepare-unsigned-deploy-txs",
111
+ "security-checklist",
112
+ "launchpad-public-surface"
113
+ ],
114
+ "user_signs": true,
115
+ "grant_actions_example": [
116
+ "read:chain",
117
+ "simulate:tx",
118
+ "prepare:deploy",
119
+ "prepare:verify"
120
+ ],
121
+ "targets": "user-provided factory/router/implementations only unless added to destination allowlist",
122
+ "copy": "Oracle can design and prepare protocol, NFT/gacha, and DEX launches. You still sign. Grants bind chain, spend, and destinations."
123
+ },
124
+ "profiles": [
125
+ {
126
+ "id": "polymarket-agent",
127
+ "skills": [
128
+ "polymarket",
129
+ "polymarket-trade-journal",
130
+ "trade-loop-circuit-breaker",
131
+ "oracle-chain-graphs-telegram-cards"
132
+ ],
133
+ "description": "Polymarket prediction markets: public event pricing/cards plus prepared order intents when user CLOB/API keys are configured."
134
+ },
135
+ {
136
+ "id": "hyperliquid-agent",
137
+ "skills": [
138
+ "hyperliquid",
139
+ "hyperliquid-hip4-outcome-markets",
140
+ "trade-loop-circuit-breaker",
141
+ "oracle-chain-graphs-telegram-cards",
142
+ "oracle-rfq-tokenized-assets",
143
+ "oracle-hypercore-staking"
144
+ ],
145
+ "description": "Hyperliquid perps/spot, HyperEVM, HIP-3 builder dexs, HIP-4 outcome markets, and HyperCore HYPE staking/delegation prepares. API-key actions activate only with user-provided keys."
146
+ },
147
+ {
148
+ "id": "robinhood-agent",
149
+ "skills": [
150
+ "rh-public-token-research",
151
+ "rh-token-research",
152
+ "rh-token-chart",
153
+ "rh-token-swap",
154
+ "oracle-meme-token-sniper",
155
+ "oracle-chain-graphs-telegram-cards",
156
+ "oracle-rfq-tokenized-assets"
157
+ ],
158
+ "description": "Robinhood Chain tokens/NFTs plus tokenized Robinhood-style assets when chain/contract/route is verified."
159
+ },
160
+ {
161
+ "id": "solana-agent",
162
+ "skills": [
163
+ "oracle-solana",
164
+ "oracle-receipts",
165
+ "oracle-circuit-breaker",
166
+ "oracle-best-execution",
167
+ "oracle-meme-token-sniper",
168
+ "oracle-chain-graphs-telegram-cards",
169
+ "oracle-rfq-tokenized-assets",
170
+ "oracle-solana-nft"
171
+ ],
172
+ "label": "solana agent",
173
+ "description": "Solana research, SPL accounts, Jupiter quotes, live simulation, Magic Eden NFT reads plus unsigned buy/list/mint tickets, launch/meme-token scanning, and unsigned swap preparation."
174
+ },
175
+ {
176
+ "id": "bitcoin-agent",
177
+ "skills": [
178
+ "oracle-bitcoin",
179
+ "oracle-receipts",
180
+ "oracle-circuit-breaker",
181
+ "oracle-smart-wallet-scanner"
182
+ ],
183
+ "label": "bitcoin agent",
184
+ "description": "Bitcoin L1, Ordinals/runes research, Satflow PSBTs, and inscription preparation."
185
+ },
186
+ {
187
+ "id": "stable-agent",
188
+ "skills": [
189
+ "evm-contract-research",
190
+ "self-custodial-onchain-execution",
191
+ "oracle-meme-token-sniper",
192
+ "oracle-chain-graphs-telegram-cards",
193
+ "oracle-rfq-tokenized-assets"
194
+ ]
195
+ },
196
+ {
197
+ "id": "protocol-builder",
198
+ "skills": [
199
+ "oracle-protocol-builder",
200
+ "oracle-contract-research",
201
+ "oracle-protocol-security",
202
+ "oracle-nft-gacha-launch",
203
+ "oracle-dex-launch",
204
+ "oracle-receipts"
205
+ ],
206
+ "label": "protocol builder",
207
+ "description": "Scaffold, review, and prepare deploys for NFT, gacha, DEX, and protocol launches."
208
+ }
209
+ ],
210
+ "default_tools": {
211
+ "read": [
212
+ "mad_data",
213
+ "web_search",
214
+ "evm_quote",
215
+ "evm_simulate",
216
+ "btc_health",
217
+ "btc_fees",
218
+ "btc_inscription_info",
219
+ "solana_balance"
220
+ ],
221
+ "prepare": [
222
+ "evm_prepare",
223
+ "evm_protocol_prepare",
224
+ "evm_protocol_quote",
225
+ "jupiter_quote",
226
+ "jupiter_prepare",
227
+ "bitcoin_inscribe_prepare"
228
+ ],
229
+ "never_public_default": [
230
+ "evm_sign",
231
+ "evm_send",
232
+ "solana_sign",
233
+ "solana_send",
234
+ "bitcoin_sign",
235
+ "bitcoin_send",
236
+ "bitcoin_inscribe_sign_commit",
237
+ "bitcoin_inscribe_sign_reveal"
238
+ ]
239
+ },
240
+ "capabilities": [
241
+ "trader",
242
+ "builder",
243
+ "analyzer",
244
+ "solana-jupiter",
245
+ "bitcoin-inscriptions",
246
+ "nft-project-launch",
247
+ "gacha-launch",
248
+ "dex-launch",
249
+ "meme-token-sniping",
250
+ "onchain-scanner",
251
+ "smart-wallet-scanner",
252
+ "best-execution-routing",
253
+ "bridges",
254
+ "perps",
255
+ "vaults",
256
+ "prediction-markets",
257
+ "ordinals-runes",
258
+ "per-chain-graphs",
259
+ "telegram-cards",
260
+ "hip-3-builder-dex",
261
+ "hip-4-outcome-markets",
262
+ "polymarket-api-key-trading",
263
+ "cross-chain-rfq",
264
+ "rfq-best-execution",
265
+ "tokenized-robinhood-assets",
266
+ "nft-mint-gas-war-limits",
267
+ "nft-mint-bot",
268
+ "solana-nft-marketplace",
269
+ "solana-nft-mint",
270
+ "hypercore-hype-staking",
271
+ "hypercore-validator-delegation"
272
+ ]
273
+ }