@oracle-agent/oracle 0.11.0 → 0.12.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 (308) hide show
  1. package/LICENSE +115 -201
  2. package/README.md +66 -84
  3. package/SECURITY.md +37 -12
  4. package/SETUP.md +207 -272
  5. package/dist/action-receipts.mjs +1 -0
  6. package/dist/action-semantics.mjs +1 -0
  7. package/dist/address-book.mjs +2 -0
  8. package/dist/bin/desk-server.mjs +14 -0
  9. package/dist/bin/oracle-data-mcp.mjs +8 -0
  10. package/dist/bin/oracle-init.mjs +24 -0
  11. package/dist/bin/oracle-public-server.mjs +5 -0
  12. package/dist/bin/oracle-route.mjs +22 -0
  13. package/dist/bin/oracle-scan.mjs +18 -0
  14. package/dist/bin/oracle-upgrade.mjs +21 -0
  15. package/dist/bin/oracle.mjs +68 -0
  16. package/dist/chains.mjs +1 -0
  17. package/dist/cli/commands/auth.mjs +16 -0
  18. package/dist/cli/commands/bootstrap.mjs +18 -0
  19. package/dist/cli/commands/chain.mjs +21 -0
  20. package/dist/cli/commands/chat.mjs +35 -0
  21. package/dist/cli/commands/credential.mjs +1 -0
  22. package/dist/cli/commands/data-mcp.mjs +2 -0
  23. package/dist/cli/commands/data.mjs +12 -0
  24. package/dist/cli/commands/doctor.mjs +5 -0
  25. package/dist/cli/commands/gate.mjs +13 -0
  26. package/dist/cli/commands/help.mjs +1 -0
  27. package/dist/cli/commands/init.mjs +3 -0
  28. package/dist/cli/commands/mcp.mjs +33 -0
  29. package/dist/cli/commands/model.mjs +44 -0
  30. package/dist/cli/commands/prepare.mjs +2 -0
  31. package/dist/cli/commands/public.mjs +3 -0
  32. package/dist/cli/commands/route.mjs +2 -0
  33. package/dist/cli/commands/runner.mjs +1 -0
  34. package/dist/cli/commands/scan.mjs +2 -0
  35. package/dist/cli/commands/setup.mjs +34 -0
  36. package/dist/cli/commands/sign.mjs +4 -0
  37. package/dist/cli/commands/signer.mjs +1 -0
  38. package/dist/cli/commands/upgrade.mjs +2 -0
  39. package/dist/cli/commands/vault.mjs +1 -0
  40. package/dist/cli/commands/version.mjs +2 -0
  41. package/dist/data/desk-data.mjs +12 -0
  42. package/dist/index.mjs +17 -0
  43. package/dist/nft-gas-war-guard.mjs +1 -0
  44. package/dist/onboarding/harness-configs.mjs +4 -0
  45. package/dist/portfolio-risk.mjs +1 -0
  46. package/dist/prepare-envelope.mjs +1 -0
  47. package/dist/public-control/policy-schema.mjs +1 -0
  48. package/dist/router/index.mjs +2 -0
  49. package/dist/scanner/index.mjs +4 -0
  50. package/dist/signals/index.mjs +1 -0
  51. package/dist/watch-preferences.mjs +1 -0
  52. package/package.json +27 -65
  53. package/public/oracle-splash/index.html +11 -1
  54. package/CONTRIBUTING.md +0 -98
  55. package/bin/desk-server.mjs +0 -440
  56. package/bin/oracle-data-mcp.mjs +0 -1019
  57. package/bin/oracle-init.mjs +0 -496
  58. package/bin/oracle-public-server.mjs +0 -36
  59. package/bin/oracle-route.mjs +0 -254
  60. package/bin/oracle-scan.mjs +0 -192
  61. package/bin/oracle-upgrade.mjs +0 -42
  62. package/bin/oracle.mjs +0 -33
  63. package/docs/adding-a-chain.md +0 -229
  64. package/docs/architecture.md +0 -138
  65. package/docs/cli.md +0 -47
  66. package/docs/connectors.md +0 -13
  67. package/docs/oracle-pack-standard.md +0 -29
  68. package/docs/profiles.md +0 -151
  69. package/docs/public-surface.md +0 -133
  70. package/examples/add-a-chain.mjs +0 -65
  71. package/examples/oracle-pack-template.mjs +0 -38
  72. package/examples/research-a-token.mjs +0 -70
  73. package/plugins/oracle-owner-gate/__init__.py +0 -227
  74. package/plugins/oracle-owner-gate/plugin.yaml +0 -9
  75. package/profiles/_template/SOUL.md +0 -54
  76. package/profiles/_template/profile.json +0 -22
  77. package/profiles/bitcoin-agent/SOUL.md +0 -31
  78. package/profiles/bitcoin-agent/profile.json +0 -32
  79. package/profiles/hyperliquid-agent/SOUL.md +0 -34
  80. package/profiles/hyperliquid-agent/profile.json +0 -37
  81. package/profiles/oracle/SOUL.md +0 -107
  82. package/profiles/oracle/profile.json +0 -39
  83. package/profiles/polymarket-agent/SOUL.md +0 -35
  84. package/profiles/polymarket-agent/profile.json +0 -34
  85. package/profiles/profile.schema.json +0 -90
  86. package/profiles/protocol-builder/SOUL.md +0 -57
  87. package/profiles/protocol-builder/profile.json +0 -39
  88. package/profiles/robinhood-agent/SOUL.md +0 -53
  89. package/profiles/robinhood-agent/profile.json +0 -40
  90. package/profiles/solana-agent/SOUL.md +0 -37
  91. package/profiles/solana-agent/profile.json +0 -37
  92. package/profiles/stable-agent/SOUL.md +0 -43
  93. package/profiles/stable-agent/profile.json +0 -37
  94. package/protocols/templates/safe-erc20/SECURITY.md +0 -16
  95. package/protocols/templates/safe-erc20/foundry.toml +0 -12
  96. package/protocols/templates/safe-erc20/remappings.txt +0 -2
  97. package/protocols/templates/safe-erc20/src/SafeERC20.sol +0 -53
  98. package/protocols/templates/safe-erc20/test/SafeERC20.t.sol +0 -72
  99. package/scripts/adversarial-bench.mjs +0 -114
  100. package/scripts/build-inscription.py +0 -230
  101. package/scripts/check-doc-drift.mjs +0 -123
  102. package/scripts/check-test-count.mjs +0 -105
  103. package/scripts/e2e-hl-markets.mjs +0 -21
  104. package/scripts/e2e-hl-perps.mjs +0 -48
  105. package/scripts/e2e-hypercore-staking.mjs +0 -128
  106. package/scripts/e2e-solana-bitcoin.mjs +0 -183
  107. package/scripts/protocol-template-gate.mjs +0 -15
  108. package/scripts/public-api-scan.mjs +0 -23
  109. package/scripts/secret-scan.mjs +0 -181
  110. package/scripts/verify-v3-venues.mjs +0 -192
  111. package/skills/balance/SKILL.md +0 -176
  112. package/skills/oracle-action-semantics/SKILL.md +0 -40
  113. package/skills/oracle-best-execution/SKILL.md +0 -127
  114. package/skills/oracle-bitcoin/SKILL.md +0 -53
  115. package/skills/oracle-chain-graphs-telegram-cards/SKILL.md +0 -59
  116. package/skills/oracle-chat/SKILL.md +0 -61
  117. package/skills/oracle-chat/chain.SKILL.md +0 -31
  118. package/skills/oracle-chat/setup.SKILL.md +0 -37
  119. package/skills/oracle-circuit-breaker/SKILL.md +0 -51
  120. package/skills/oracle-contract-research/SKILL.md +0 -55
  121. package/skills/oracle-desk/SKILL.md +0 -58
  122. package/skills/oracle-dex-launch/SKILL.md +0 -38
  123. package/skills/oracle-grants/SKILL.md +0 -69
  124. package/skills/oracle-hypercore-staking/SKILL.md +0 -57
  125. package/skills/oracle-hyperliquid/SKILL.md +0 -56
  126. package/skills/oracle-meme-token-sniper/SKILL.md +0 -73
  127. package/skills/oracle-multichain-nft-launch/SKILL.md +0 -338
  128. package/skills/oracle-multichain-token-launch/SKILL.md +0 -300
  129. package/skills/oracle-nft-gacha-launch/SKILL.md +0 -48
  130. package/skills/oracle-nft-mint-gas-war/SKILL.md +0 -63
  131. package/skills/oracle-polymarket/SKILL.md +0 -60
  132. package/skills/oracle-protocol-builder/SKILL.md +0 -59
  133. package/skills/oracle-protocol-security/SKILL.md +0 -60
  134. package/skills/oracle-public-product/SKILL.md +0 -44
  135. package/skills/oracle-receipts/SKILL.md +0 -52
  136. package/skills/oracle-rfq-tokenized-assets/SKILL.md +0 -69
  137. package/skills/oracle-smart-wallet-scanner/SKILL.md +0 -49
  138. package/skills/oracle-solana/SKILL.md +0 -65
  139. package/skills/oracle-solana-nft/SKILL.md +0 -54
  140. package/skills/oracle-token-research/SKILL.md +0 -67
  141. package/skins/oracle.yaml +0 -56
  142. package/src/action-receipts.mjs +0 -265
  143. package/src/action-semantics.mjs +0 -62
  144. package/src/address-book.mjs +0 -208
  145. package/src/agent-auth.mjs +0 -206
  146. package/src/approval-guard.mjs +0 -282
  147. package/src/attestation-secret.mjs +0 -88
  148. package/src/audit-log.mjs +0 -196
  149. package/src/auth/oauth.mjs +0 -672
  150. package/src/auto-slippage.mjs +0 -378
  151. package/src/capability-posture.mjs +0 -125
  152. package/src/chains.mjs +0 -62
  153. package/src/cli/chain-catalog.mjs +0 -215
  154. package/src/cli/chain-state.mjs +0 -74
  155. package/src/cli/commands/auth.mjs +0 -193
  156. package/src/cli/commands/bootstrap.mjs +0 -87
  157. package/src/cli/commands/chain.mjs +0 -143
  158. package/src/cli/commands/chat.mjs +0 -434
  159. package/src/cli/commands/credential.mjs +0 -9
  160. package/src/cli/commands/data-mcp.mjs +0 -18
  161. package/src/cli/commands/data.mjs +0 -75
  162. package/src/cli/commands/doctor.mjs +0 -136
  163. package/src/cli/commands/help.mjs +0 -7
  164. package/src/cli/commands/init.mjs +0 -27
  165. package/src/cli/commands/mcp.mjs +0 -142
  166. package/src/cli/commands/model.mjs +0 -99
  167. package/src/cli/commands/prepare.mjs +0 -12
  168. package/src/cli/commands/public.mjs +0 -20
  169. package/src/cli/commands/route.mjs +0 -12
  170. package/src/cli/commands/runner.mjs +0 -9
  171. package/src/cli/commands/scan.mjs +0 -12
  172. package/src/cli/commands/setup.mjs +0 -275
  173. package/src/cli/commands/sign.mjs +0 -21
  174. package/src/cli/commands/signer.mjs +0 -9
  175. package/src/cli/commands/upgrade.mjs +0 -12
  176. package/src/cli/commands/vault.mjs +0 -9
  177. package/src/cli/commands/version.mjs +0 -22
  178. package/src/cli/first-run.mjs +0 -23
  179. package/src/cli/kernel.mjs +0 -239
  180. package/src/cli/mcp-targets/chatgpt.mjs +0 -51
  181. package/src/cli/mcp-targets/claude-code.mjs +0 -39
  182. package/src/cli/mcp-targets/claude-desktop.mjs +0 -24
  183. package/src/cli/mcp-targets/codex.mjs +0 -41
  184. package/src/cli/mcp-targets/shared.mjs +0 -61
  185. package/src/cli/messaging-platforms.mjs +0 -209
  186. package/src/cli/model-config.mjs +0 -70
  187. package/src/cli/operator-dispatch.mjs +0 -258
  188. package/src/cli/oracle-harness.py +0 -415
  189. package/src/cli/paths.mjs +0 -83
  190. package/src/cli/runtime.mjs +0 -351
  191. package/src/cli/setup-state.mjs +0 -168
  192. package/src/cli/spawn-child.mjs +0 -43
  193. package/src/data/catalog.mjs +0 -585
  194. package/src/data/desk-data.mjs +0 -695
  195. package/src/data/http.mjs +0 -253
  196. package/src/data/provider-endpoint.mjs +0 -94
  197. package/src/data/providers/aerodrome.mjs +0 -245
  198. package/src/data/providers/balancer.mjs +0 -209
  199. package/src/data/providers/bitcoin-esplora.mjs +0 -216
  200. package/src/data/providers/bitcoin-meta.mjs +0 -378
  201. package/src/data/providers/blockscout.mjs +0 -14
  202. package/src/data/providers/bridges.mjs +0 -242
  203. package/src/data/providers/cowswap.mjs +0 -415
  204. package/src/data/providers/curve.mjs +0 -201
  205. package/src/data/providers/defillama.mjs +0 -88
  206. package/src/data/providers/dexscreener.mjs +0 -43
  207. package/src/data/providers/evm-rpc.mjs +0 -225
  208. package/src/data/providers/geckoterminal.mjs +0 -34
  209. package/src/data/providers/gmx.mjs +0 -496
  210. package/src/data/providers/hl-assets.mjs +0 -165
  211. package/src/data/providers/hl-info.mjs +0 -108
  212. package/src/data/providers/hl-markets.mjs +0 -210
  213. package/src/data/providers/hl-outcome.mjs +0 -61
  214. package/src/data/providers/hl-perps.mjs +0 -387
  215. package/src/data/providers/hl-staking.mjs +0 -353
  216. package/src/data/providers/hl-ws.mjs +0 -119
  217. package/src/data/providers/hyperevm-dex.mjs +0 -49
  218. package/src/data/providers/jupiter-venues.mjs +0 -119
  219. package/src/data/providers/jupiter.mjs +0 -315
  220. package/src/data/providers/lifi.mjs +0 -151
  221. package/src/data/providers/magiceden-sol.mjs +0 -406
  222. package/src/data/providers/morpho.mjs +0 -177
  223. package/src/data/providers/nft-gallery.mjs +0 -163
  224. package/src/data/providers/nft-portfolio.mjs +0 -494
  225. package/src/data/providers/odos.mjs +0 -156
  226. package/src/data/providers/oneinch.mjs +0 -174
  227. package/src/data/providers/opensea-multichain.mjs +0 -136
  228. package/src/data/providers/opensea-nft.mjs +0 -371
  229. package/src/data/providers/paraswap.mjs +0 -118
  230. package/src/data/providers/pendle.mjs +0 -188
  231. package/src/data/providers/poly-clob.mjs +0 -283
  232. package/src/data/providers/poly-public.mjs +0 -96
  233. package/src/data/providers/poly-ws.mjs +0 -103
  234. package/src/data/providers/portfolio-history.mjs +0 -394
  235. package/src/data/providers/portfolio.mjs +0 -594
  236. package/src/data/providers/rfq.mjs +0 -15
  237. package/src/data/providers/rh-agent.mjs +0 -59
  238. package/src/data/providers/satflow.mjs +0 -341
  239. package/src/data/providers/signed-material-guard.mjs +0 -108
  240. package/src/data/providers/solana-rpc.mjs +0 -197
  241. package/src/data/providers/uniswap-v3.mjs +0 -349
  242. package/src/data/providers/uniswap-v4.mjs +0 -414
  243. package/src/data/providers/zerox.mjs +0 -167
  244. package/src/data/public-api-scan.mjs +0 -61
  245. package/src/data/quote-placeholder.mjs +0 -31
  246. package/src/exact-integer.mjs +0 -72
  247. package/src/exec-policy.mjs +0 -455
  248. package/src/flags.mjs +0 -15
  249. package/src/fresh-window.mjs +0 -76
  250. package/src/gmx-attestation.mjs +0 -176
  251. package/src/index.mjs +0 -100
  252. package/src/nft-gas-war-guard.mjs +0 -139
  253. package/src/onboarding/agent-keys.mjs +0 -161
  254. package/src/onboarding/harness-configs.mjs +0 -102
  255. package/src/onboarding/index.mjs +0 -18
  256. package/src/onboarding/tiers.mjs +0 -139
  257. package/src/oracle-env.mjs +0 -47
  258. package/src/portfolio-risk.mjs +0 -170
  259. package/src/prepare-envelope.mjs +0 -204
  260. package/src/profile-upgrade.mjs +0 -277
  261. package/src/protocol-execution.mjs +0 -84
  262. package/src/protocol-templates/gate.mjs +0 -179
  263. package/src/protocol-templates/prepare-deploy.mjs +0 -81
  264. package/src/public-api/buzz-integration.mjs +0 -256
  265. package/src/public-api/connect-agent.mjs +0 -416
  266. package/src/public-api/grants.mjs +0 -142
  267. package/src/public-api/http.mjs +0 -389
  268. package/src/public-control/aa-adapter.mjs +0 -402
  269. package/src/public-control/build-registry.mjs +0 -227
  270. package/src/public-control/bundler-client.mjs +0 -357
  271. package/src/public-control/grant-indexer.mjs +0 -296
  272. package/src/public-control/policy-render.mjs +0 -69
  273. package/src/public-control/policy-schema.mjs +0 -318
  274. package/src/public-control/runtime-config.mjs +0 -275
  275. package/src/public-control/session-key-model.mjs +0 -374
  276. package/src/public-control/session-orchestrator.mjs +0 -412
  277. package/src/rfq/intent.mjs +0 -180
  278. package/src/rfq/sources.mjs +0 -181
  279. package/src/route-attestation.mjs +0 -132
  280. package/src/router/best-execution.mjs +0 -326
  281. package/src/router/index.mjs +0 -226
  282. package/src/router/prepare-bridge.mjs +0 -289
  283. package/src/router/prepare-route.mjs +0 -398
  284. package/src/router/proposal.mjs +0 -311
  285. package/src/router/risk-classifier.mjs +0 -119
  286. package/src/router/route-sources.mjs +0 -364
  287. package/src/scanner/chains.config.mjs +0 -430
  288. package/src/scanner/contract.mjs +0 -270
  289. package/src/scanner/evm-scanner.mjs +0 -394
  290. package/src/scanner/index.mjs +0 -9
  291. package/src/scanner/v2-venue.mjs +0 -335
  292. package/src/scanner/v3-venue.mjs +0 -290
  293. package/src/scopes.mjs +0 -44
  294. package/src/sell-simulation.mjs +0 -167
  295. package/src/signals/engine.mjs +0 -146
  296. package/src/signals/index.mjs +0 -1
  297. package/src/token-transfer-guard.mjs +0 -188
  298. package/src/tui/app.mjs +0 -438
  299. package/src/tui/backend.mjs +0 -145
  300. package/src/tui/format.mjs +0 -272
  301. package/src/tui/gateway-client.mjs +0 -177
  302. package/src/tui/input.mjs +0 -501
  303. package/src/tui/renderer.mjs +0 -443
  304. package/src/tui/standalone-client.mjs +0 -666
  305. package/src/tui/theme.mjs +0 -81
  306. package/src/vault-attestation.mjs +0 -146
  307. package/src/venues.mjs +0 -206
  308. package/src/watch-preferences.mjs +0 -85
@@ -1,585 +0,0 @@
1
- // Provider catalog — DATA plane registry. Wallet keys never live here.
2
-
3
- import { UNI_V3_CHAINS } from "./providers/uniswap-v3.mjs";
4
- import { UNI_V4_CHAINS } from "./providers/uniswap-v4.mjs";
5
-
6
- /** @typedef {{ id: string, venue: string, chainIds: number[], auth: 'none'|'apiKey'|'agentKey', ops: string[], baseEnv?: string[], description?: string }} ProviderMeta */
7
-
8
- const REGISTRY = new Map();
9
- const UNI_V3_CHAIN_IDS = Object.keys(UNI_V3_CHAINS).map(Number);
10
- const UNI_V4_CHAIN_IDS = Object.keys(UNI_V4_CHAINS).map(Number);
11
- const BUILTIN_PROVIDER_IDS = new Set();
12
- let BUILTINS_LOCKED = false;
13
-
14
- export function registerProvider(meta) {
15
- if (!meta?.id) throw new Error("registerProvider requires id");
16
- if (!meta.venue) throw new Error("registerProvider requires venue");
17
- if (!Array.isArray(meta.ops)) throw new Error("registerProvider requires ops[]");
18
- const id = String(meta.id);
19
- if (BUILTINS_LOCKED && BUILTIN_PROVIDER_IDS.has(id)) {
20
- throw new Error(`registerProvider refuses to overwrite built-in provider: ${id}`);
21
- }
22
- REGISTRY.set(id, {
23
- chainIds: meta.chainIds || [],
24
- auth: meta.auth || "none",
25
- description: meta.description || "",
26
- baseEnv: meta.baseEnv || [],
27
- ...meta,
28
- id,
29
- });
30
- return REGISTRY.get(id);
31
- }
32
-
33
- export function getProvider(id) {
34
- return REGISTRY.get(id) || null;
35
- }
36
-
37
- export function listProviders({ venue, op } = {}) {
38
- let all = [...REGISTRY.values()];
39
- if (venue) all = all.filter((p) => p.venue === venue);
40
- if (op) all = all.filter((p) => p.ops.includes(op));
41
- return all;
42
- }
43
-
44
- export function clearProvidersForTest() {
45
- REGISTRY.clear();
46
- }
47
-
48
- function lockBuiltinProviders() {
49
- BUILTIN_PROVIDER_IDS.clear();
50
- for (const id of REGISTRY.keys()) BUILTIN_PROVIDER_IDS.add(id);
51
- BUILTINS_LOCKED = true;
52
- }
53
-
54
- // ── Built-in providers ──────────────────────────────────────────────────────
55
-
56
- registerProvider({
57
- id: "hl-info",
58
- venue: "hl",
59
- chainIds: [],
60
- auth: "none",
61
- ops: [
62
- "health",
63
- "allMids",
64
- "l2Book",
65
- "outcomeMeta",
66
- "clearinghouse",
67
- "userFills",
68
- "meta",
69
- "metaAndAssetCtxs",
70
- "candleSnapshot",
71
- "openOrders",
72
- "frontendOpenOrders",
73
- "userState",
74
- "spotMeta",
75
- ],
76
- baseEnv: ["HL_INFO_URL", "HL_API_URL"],
77
- description: "Hyperliquid public /info",
78
- });
79
-
80
- registerProvider({
81
- id: "protocol-templates",
82
- venue: "protocol-builder",
83
- chainIds: [],
84
- auth: "none",
85
- ops: ["health", "list", "gate", "prepareDeploy"],
86
- description: "Gated Safe* Solidity templates: forge test required before unsigned deploy prepare. NOT a firm audit.",
87
- });
88
-
89
- registerProvider({
90
- id: "poly-public",
91
- venue: "poly",
92
- chainIds: [137],
93
- auth: "none",
94
- ops: ["health", "time", "markets", "book", "midpoint", "spread", "price", "events"],
95
- baseEnv: ["POLY_CLOB_URL", "POLY_GAMMA_URL"],
96
- description: "Polymarket CLOB + Gamma public REST",
97
- });
98
-
99
- registerProvider({
100
- id: "rh-agent",
101
- venue: "rh",
102
- chainIds: [4663, 1],
103
- auth: "none",
104
- ops: [
105
- "health",
106
- "policy",
107
- "chainConfig",
108
- "chainGas",
109
- "swapsConfig",
110
- "swapsPresets",
111
- "tradingStatus",
112
- "nftDrops",
113
- "feeEstimate",
114
- ],
115
- baseEnv: ["RH_AGENT_BASE_URL", "RH_AGENT_URL"],
116
- description: "RH agent local HTTP (unauthenticated read routes)",
117
- });
118
-
119
- registerProvider({
120
- id: "portfolio",
121
- venue: "multichain-wallet",
122
- chainIds: [1, 10, 56, 137, 988, 999, 2741, 4663, 8453, 42161, 43114],
123
- auth: "none",
124
- ops: ["health", "balances", "snapshot", "history", "valueGraph"],
125
- execution: "read-only",
126
- description:
127
- "Read-only balance aggregation across configured EVM chains, Solana, Bitcoin, and Hyperliquid, plus profile-local observation snapshots, history, and value graphs with explicit partial coverage.",
128
- });
129
-
130
- registerProvider({
131
- id: "nft-portfolio",
132
- venue: "multichain-nft-wallet",
133
- chainIds: [1, 10, 137, 988, 999, 2741, 4663, 8453, 42161, 43114],
134
- auth: "optionalApiKey",
135
- ops: ["health", "inventory", "gallery", "pnl", "prepareList"],
136
- execution: "prepare",
137
- baseEnv: ["OPENSEA_API_KEY", "MAGICEDEN_API_KEY", "SATFLOW_API_KEY"],
138
- description:
139
- "Normalized EVM, Solana, and Bitcoin NFT inventory, static contact-sheet galleries, explicit PnL coverage, and user-confirmed unsigned listing preparation.",
140
- });
141
-
142
- registerProvider({
143
- id: "evm-rpc",
144
- venue: "evm",
145
- chainIds: [1, 137, 42161, 8453, 10, 4663, 999],
146
- auth: "none",
147
- ops: ["health", "healthAll", "blockNumber", "chainId", "getBalance", "call", "erc20Allowance", "erc20Balance", "transactionReceipt"],
148
- baseEnv: ["ETH_RPC_URL", "POLYGON_RPC_URL", "RH_CHAIN_RPC", "BASE_RPC_URL", "ARBITRUM_RPC_URL"],
149
- description: "EVM JSON-RPC multi-chain (env RPC or public fallbacks)",
150
- });
151
-
152
- registerProvider({
153
- id: "solana-rpc",
154
- venue: "solana",
155
- chainIds: [],
156
- auth: "none",
157
- ops: ["health", "latestBlockhash", "getBalance", "tokenAccounts", "simulate"],
158
- baseEnv: ["SOLANA_RPC_URL"],
159
- description: "Solana mainnet JSON-RPC read/prepare surface (no key, no signing, no broadcast)",
160
- });
161
-
162
- registerProvider({
163
- id: "bitcoin-esplora",
164
- venue: "bitcoin",
165
- chainIds: [],
166
- auth: "none",
167
- ops: ["health", "tipHeight", "fees", "address", "utxos", "tx", "decode"],
168
- execution: "read-only",
169
- baseEnv: ["BTC_ESPLORA_URL", "BTC_NETWORK"],
170
- description:
171
- "Bitcoin L1 via Esplora (mempool.space/Blockstream). Reads only on data plane. User-signed broadcast is bitcoin_send on exec MCP. No Core RPC, no house keys. Wallets: Xverse/UniSat/Leather/OKX/Phantom",
172
- });
173
-
174
- registerProvider({
175
- id: "bitcoin-meta",
176
- venue: "bitcoin-metaprotocol",
177
- chainIds: [],
178
- auth: "optionalApiKey",
179
- ops: [
180
- "health",
181
- "runeBalances",
182
- "inscriptions",
183
- "inscriptionInfo",
184
- "inscriptionChildren",
185
- "ordBlockInfo",
186
- ],
187
- execution: "read-only",
188
- baseEnv: ["BTC_META_API_URL", "UNISAT_API_KEY", "BESTINSLOT_API_KEY"],
189
- description:
190
- "Bitcoin ordinals/runes reads. Keyless tier via ordinals.com recursive (inscriptionInfo/children/blockInfo); address-indexed ops (inscriptions, runeBalances) need a keyed indexer. Hiro is deprecated (410) and Magic Eden BTC is dead — use satflow for market.",
191
- });
192
-
193
- registerProvider({
194
- id: "satflow",
195
- venue: "bitcoin-marketplace",
196
- chainIds: [],
197
- auth: "apiKey",
198
- ops: [
199
- "health",
200
- "collectionFloors",
201
- "collectionStats",
202
- "item",
203
- "walletContents",
204
- "floorListings",
205
- "preparePurchase",
206
- "prepareList",
207
- ],
208
- execution: "prepare",
209
- baseEnv: ["SATFLOW_API_KEY", "SATFLOW_API_URL"],
210
- description:
211
- "Satflow ordinals+runes marketplace (api.satflow.com). Primary BTC NFT market after Magic Eden BTC sunset. PSBT intents for buy/list; key via x-api-key.",
212
- });
213
-
214
- registerProvider({
215
- id: "jupiter",
216
- venue: "solana-dex",
217
- chainIds: [],
218
- auth: "none",
219
- ops: ["health", "venues", "quote", "prepare"],
220
- execution: "prepare",
221
- baseEnv: ["JUPITER_SWAP_API_URL", "SOLANA_RPC_URL"],
222
- description: "Jupiter Swap API v1 quote + unsigned user-signature swap transaction preparation",
223
- });
224
-
225
- registerProvider({
226
- id: "hl-perps",
227
- venue: "hyperliquid",
228
- chainIds: [],
229
- auth: "none",
230
- ops: ["health", "assetInfo", "prepareOrder", "prepareCancel", "prepareLeverage", "prepareIsolatedMargin", "prepareBracket"],
231
- notes: "Hyperliquid perp orders/leverage. PREPARE-ONLY: returns signable actions, never submits.",
232
- });
233
-
234
- registerProvider({
235
- id: "hl-markets",
236
- venue: "hyperliquid",
237
- chainIds: [],
238
- auth: "none",
239
- ops: ["health", "markets", "leaderboards", "coin", "spot"],
240
- notes: "Joined Hyperliquid market datapoints for the Hyperliquid agent. Read-only.",
241
- });
242
-
243
- registerProvider({
244
- id: "hl-staking",
245
- venue: "hypercore-staking",
246
- chainIds: [],
247
- auth: "none",
248
- ops: [
249
- "health",
250
- "validators",
251
- "delegatorSummary",
252
- "delegations",
253
- "rewards",
254
- "history",
255
- "preflight",
256
- "prepareStakeDeposit",
257
- "prepareStakeWithdraw",
258
- "prepareDelegate",
259
- ],
260
- execution: "prepare",
261
- baseEnv: ["HL_INFO_URL", "HL_EXCHANGE_URL", "HL_TESTNET"],
262
- description:
263
- "Hyperliquid HyperCore HYPE staking. Public reads (validators, delegations, rewards) plus EIP-712 prepare for cDeposit / cWithdraw / tokenDelegate. Prepare-only: the user's wallet signs and submits, Oracle never posts to /exchange.",
264
- });
265
-
266
- registerProvider({
267
- id: "magiceden-sol",
268
- venue: "solana-nft",
269
- chainIds: [],
270
- auth: "optionalApiKey",
271
- ops: ["health", "stats", "listings", "tokenListings", "prepareBuy", "prepareList", "prepareMint"],
272
- execution: "prepare",
273
- baseEnv: ["MAGICEDEN_API_KEY", "MAGICEDEN_API_URL"],
274
- description:
275
- "Magic Eden Solana NFT market. Reads (stats/listings) are keyless; buy/list/mint instruction builders need MAGICEDEN_API_KEY and return an unsigned base64 transaction for the user's Solana wallet. Never signs or broadcasts.",
276
- });
277
-
278
- registerProvider({
279
- id: "defillama",
280
- venue: "prices",
281
- chainIds: [],
282
- auth: "none",
283
- ops: ["health", "prices", "pricesBySymbol", "protocols", "yields", "stablecoins", "dexVolumes"],
284
- baseEnv: ["DEFILLAMA_COINS_URL", "DEFILLAMA_API_URL"],
285
- description: "DeFiLlama public prices + protocols TVL",
286
- });
287
-
288
- registerProvider({
289
- id: "lifi",
290
- venue: "dex",
291
- chainIds: [1, 10, 56, 137, 988, 999, 2741, 4663, 8453, 42161, 43114],
292
- auth: "none",
293
- ops: ["health", "quote", "prepare", "chains"],
294
- execution: "prepare",
295
- baseEnv: ["LIFI_API_URL"],
296
- description: "LI.FI public cross-chain / DEX aggregator quotes (no key)",
297
- });
298
-
299
- registerProvider({
300
- id: "dexscreener",
301
- venue: "dex",
302
- chainIds: [],
303
- auth: "none",
304
- ops: ["health", "token", "search", "pair"],
305
- baseEnv: ["DEXSCREENER_API_URL"],
306
- description: "DexScreener public token/pair discovery",
307
- });
308
-
309
- registerProvider({
310
- id: "uniswap-v3",
311
- venue: "dex",
312
- chainIds: UNI_V3_CHAIN_IDS,
313
- auth: "none",
314
- ops: ["health", "quote", "prepare", "quotePath", "ethUsdc", "chains"],
315
- execution: "prepare",
316
- baseEnv: [
317
- "ETH_RPC_URL",
318
- "BASE_RPC_URL",
319
- "ARBITRUM_RPC_URL",
320
- "OPTIMISM_RPC_URL",
321
- "BSC_RPC_URL",
322
- "POLYGON_RPC_URL",
323
- "AVALANCHE_RPC_URL",
324
- "RH_CHAIN_RPC",
325
- ],
326
- description: "Uniswap V3 QuoterV2 exact-in quotes via eth_call across official deployments plus Robinhood Chain, no key",
327
- });
328
-
329
- registerProvider({
330
- id: "uniswap-v4",
331
- venue: "dex",
332
- chainIds: UNI_V4_CHAIN_IDS,
333
- auth: "none",
334
- ops: ["health", "quote", "chains"],
335
- execution: "read-only",
336
- baseEnv: [
337
- "ETH_RPC_URL",
338
- "BASE_RPC_URL",
339
- "ARBITRUM_RPC_URL",
340
- "OPTIMISM_RPC_URL",
341
- "BSC_RPC_URL",
342
- "POLYGON_RPC_URL",
343
- "AVALANCHE_RPC_URL",
344
- "RH_CHAIN_RPC",
345
- ],
346
- description:
347
- "Uniswap V4 Quoter exact-in quotes via eth_call across official deployments plus Robinhood Chain. Quote-only until Universal Router prepare is classified.",
348
- });
349
-
350
- registerProvider({
351
- id: "aerodrome",
352
- venue: "dex",
353
- chainIds: [8453],
354
- auth: "none",
355
- ops: ["health", "quote", "prepare", "chains"],
356
- execution: "prepare",
357
- baseEnv: ["BASE_RPC_URL"],
358
- description:
359
- "Aerodrome Slipstream CL on Base — QuoterV2 + SwapRouter exact-input via eth_call (tickSpacing, no key)",
360
- });
361
-
362
- registerProvider({
363
- id: "zerox",
364
- venue: "dex",
365
- chainIds: [1, 10, 137, 8453, 42161],
366
- auth: "apiKey",
367
- ops: ["health", "price", "quote", "prepare"],
368
- execution: "prepare",
369
- baseEnv: ["ZEROX_API_KEY", "ZEROX_API_URL"],
370
- description:
371
- "0x Swap API v2 price/quote/prepare — requires ZEROX_API_KEY (unconfigured without key; no Oracle key shipped)",
372
- });
373
-
374
- registerProvider({
375
- id: "across",
376
- venue: "bridge",
377
- chainIds: [1, 10, 137, 42161, 8453],
378
- auth: "none",
379
- ops: ["health", "suggestedFees"],
380
- baseEnv: ["ACROSS_API_URL"],
381
- description: "Across bridge suggested-fees (public)",
382
- });
383
-
384
- registerProvider({
385
- id: "hop",
386
- venue: "bridge",
387
- chainIds: [1, 10, 137, 42161],
388
- auth: "none",
389
- ops: ["health", "quote"],
390
- baseEnv: ["HOP_API_URL"],
391
- description: "Hop Protocol bridge quotes (public)",
392
- });
393
-
394
- registerProvider({
395
- id: "relay",
396
- venue: "bridge",
397
- chainIds: [1, 10, 137, 8453, 42161],
398
- auth: "none",
399
- ops: ["health", "quote", "prepare"],
400
- execution: "prepare",
401
- baseEnv: ["RELAY_API_URL"],
402
- description: "Relay.link bridge/swap quotes (public)",
403
- });
404
-
405
- registerProvider({
406
- id: "cowswap",
407
- venue: "dex",
408
- chainIds: [1, 100, 42161, 8453],
409
- auth: "none",
410
- ops: ["health", "quote", "prepareOrder", "order", "status", "chains"],
411
- execution: "intent",
412
- baseEnv: [],
413
- description: "CowSwap batch auction quotes + guarded EIP-712 order intents (public)",
414
- });
415
-
416
- registerProvider({
417
- id: "oneinch",
418
- venue: "dex",
419
- chainIds: [1, 10, 137, 8453, 42161],
420
- auth: "apiKey",
421
- ops: ["health", "quote", "prepare", "approveSpender"],
422
- execution: "prepare",
423
- baseEnv: ["ONEINCH_API_KEY", "ONEINCH_API_URL"],
424
- description:
425
- "1inch Swap API v6 quote/prepare — requires ONEINCH_API_KEY (unconfigured without key; no Oracle key shipped)",
426
- });
427
-
428
- registerProvider({
429
- id: "hl-ws",
430
- venue: "hl",
431
- chainIds: [],
432
- auth: "none",
433
- ops: ["health", "allMids", "l2Book", "snapshot"],
434
- baseEnv: ["HL_WS_URL"],
435
- description: "Hyperliquid short-lived WS snapshots (allMids/l2Book)",
436
- });
437
-
438
- registerProvider({
439
- id: "poly-ws",
440
- venue: "poly",
441
- chainIds: [137],
442
- auth: "none",
443
- ops: ["health", "book", "snapshot"],
444
- baseEnv: ["POLY_WS_URL"],
445
- description: "Polymarket CLOB short-lived WS market snapshots",
446
- });
447
-
448
- registerProvider({
449
- id: "opensea-nft",
450
- venue: "nft",
451
- chainIds: [1, 10, 137, 988, 999, 2741, 4663, 8453, 42161, 43114],
452
- auth: "apiKey",
453
- ops: ["health", "collection", "floor", "accountNfts", "accountPnl", "prepareList"],
454
- execution: "prepare",
455
- baseEnv: ["OPENSEA_API_KEY", "OPENSEA_ENV_FILE"],
456
- description: "OpenSea multichain NFT inventory, estimated values, indexed account PnL, collection floors, and unsigned listing actions",
457
- });
458
-
459
- registerProvider({
460
- id: "hyperevm-dex",
461
- venue: "hyperevm",
462
- chainIds: [999],
463
- auth: "none",
464
- ops: ["health", "search", "token"],
465
- baseEnv: ["HYPEREVM_RPC_URL"],
466
- description: "HyperEVM pair discovery via DexScreener + optional RPC",
467
- });
468
-
469
- registerProvider({
470
- id: "geckoterminal",
471
- venue: "dex-data",
472
- chainIds: [],
473
- auth: "none",
474
- ops: ["health", "networks", "pool", "token", "ohlcv"],
475
- baseEnv: ["GECKOTERMINAL_API_URL"],
476
- description: "GeckoTerminal public networks, pools, tokens, and OHLCV",
477
- });
478
-
479
- registerProvider({
480
- id: "curve",
481
- venue: "dex",
482
- chainIds: [1, 10, 56, 137, 988, 999, 4663, 8453, 42161, 43114],
483
- auth: "none",
484
- ops: ["health", "openapi", "pools", "quote", "prepare"],
485
- execution: "prepare",
486
- baseEnv: ["CURVE_API_URL"],
487
- description: "Curve public pool registry API + RouterNG validated single-hop prepare",
488
- });
489
-
490
- registerProvider({
491
- id: "gmx",
492
- venue: "perps-data",
493
- chainIds: [42161, 43114],
494
- auth: "none",
495
- ops: ["health", "tickers", "markets", "marketsInfo", "tokens", "prepareOrder", "positions", "orderStatus", "verifyOrder"],
496
- execution: "intent",
497
- baseEnv: [],
498
- description: "GMX v2 public oracle/markets plus guarded async order intents on Arbitrum and Avalanche",
499
- });
500
-
501
- registerProvider({
502
- id: "morpho",
503
- venue: "lending-data",
504
- chainIds: [1, 10, 137, 2741, 8453, 42161, 4663, 999, 988],
505
- auth: "none",
506
- ops: ["health", "markets", "vaults", "prepareVault"],
507
- execution: "intent",
508
- baseEnv: ["MORPHO_API_URL"],
509
- description: "Morpho public GraphQL markets/vaults + guarded ERC-4626 vault intents",
510
- });
511
-
512
- registerProvider({
513
- id: "balancer",
514
- venue: "dex",
515
- chainIds: [1, 10, 137, 42161, 43114, 8453],
516
- auth: "none",
517
- ops: ["health", "pools", "quote", "prepare"],
518
- execution: "prepare",
519
- baseEnv: ["BALANCER_API_URL"],
520
- description: "Balancer public GraphQL pool data + v3 Router exact-input prepare (Polygon read-only)",
521
- });
522
-
523
- registerProvider({
524
- id: "pendle",
525
- venue: "yield",
526
- chainIds: [1, 10, 56, 8453, 42161, 999],
527
- auth: "none",
528
- ops: ["health", "markets", "quote", "prepare"],
529
- execution: "prepare",
530
- baseEnv: ["PENDLE_API_URL"],
531
- description: "Pendle public yield-market API + Hosted SDK direct Convert prepare",
532
- });
533
-
534
- registerProvider({
535
- id: "odos",
536
- venue: "dex",
537
- chainIds: [1, 10, 56, 137, 8453, 42161, 43114, 4663],
538
- auth: "none",
539
- ops: ["health", "chains", "quote", "prepare"],
540
- // Tier is the honest signal here: the API returns HTTP 410 Gone as of
541
- // 2026-07-30, so it can no longer read or prepare anything. Leaving it as
542
- // "prepare" would advertise a capability that is provably dead.
543
- execution: "unavailable",
544
- deprecated: {
545
- since: "2026-07-30",
546
- reason: "Odos sunset the public SOR API; /sor/quote/v2 and v3 both return 410 Gone",
547
- evidence: "sunset: Thu, 30 Jul 2026 12:00:00 GMT response header",
548
- },
549
- baseEnv: ["ODOS_API_URL"],
550
- description: "Odos public SOR (DEPRECATED upstream 2026-07-30 -- endpoint returns 410)",
551
- });
552
-
553
- registerProvider({
554
- id: "blockscout",
555
- venue: "explorer",
556
- chainIds: [1, 10, 137, 8453, 42161],
557
- auth: "none",
558
- ops: ["health", "stats", "address", "token"],
559
- baseEnv: [],
560
- description: "Verified public Blockscout REST v2 instances",
561
- });
562
-
563
- registerProvider({
564
- id: "paraswap",
565
- venue: "dex",
566
- chainIds: [1, 10, 56, 137, 8453, 42161, 43114, 4663],
567
- auth: "none",
568
- ops: ["health", "tokens", "price", "quote", "prepare"],
569
- execution: "prepare",
570
- baseEnv: ["PARASWAP_API_URL"],
571
- description: "ParaSwap/Velora public price routes + validated transaction builder",
572
- });
573
-
574
- registerProvider({
575
- id: "rfq",
576
- venue: "intent-rfq",
577
- chainIds: [1, 10, 56, 137, 8453, 42161, 43114, 4663],
578
- auth: "none",
579
- ops: ["health", "intent", "quote"],
580
- execution: "prepare",
581
- baseEnv: ["ZEROX_API_KEY", "ONEINCH_API_KEY"],
582
- description: "Cross-chain RFQ intent normalizer and firm-quote fanout over reviewed venues. Prepares artifacts only, never signs or broadcasts.",
583
- });
584
-
585
- lockBuiltinProviders();