@oracle-agent/oracle 0.14.1 → 0.15.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 (447) hide show
  1. package/README.md +2 -2
  2. package/SETUP.md +4 -4
  3. package/dist/action-receipts.mjs +1 -0
  4. package/dist/action-semantics.mjs +1 -0
  5. package/dist/address-book.mjs +2 -0
  6. package/dist/bin/desk-server.mjs +59 -0
  7. package/dist/bin/oracle-data-mcp.mjs +8 -0
  8. package/dist/bin/oracle-equities.mjs +20 -0
  9. package/dist/bin/oracle-init.mjs +24 -0
  10. package/dist/bin/oracle-public-server.mjs +5 -0
  11. package/dist/bin/oracle-route.mjs +22 -0
  12. package/dist/bin/oracle-scan.mjs +18 -0
  13. package/dist/bin/oracle-upgrade.mjs +21 -0
  14. package/dist/bin/oracle.mjs +61 -0
  15. package/dist/chains.mjs +1 -0
  16. package/dist/cli/commands/auth.mjs +16 -0
  17. package/dist/cli/commands/bootstrap.mjs +18 -0
  18. package/dist/cli/commands/chain.mjs +21 -0
  19. package/dist/cli/commands/chat.mjs +45 -0
  20. package/dist/cli/commands/credential.mjs +1 -0
  21. package/dist/cli/commands/data-mcp.mjs +2 -0
  22. package/dist/cli/commands/data.mjs +12 -0
  23. package/dist/cli/commands/doctor.mjs +5 -0
  24. package/dist/cli/commands/equities.mjs +15 -0
  25. package/dist/cli/commands/farm.mjs +59 -0
  26. package/dist/cli/commands/fees.mjs +10 -0
  27. package/dist/cli/commands/follow.mjs +28 -0
  28. package/dist/cli/commands/harness.mjs +15 -0
  29. package/dist/cli/commands/help.mjs +1 -0
  30. package/dist/cli/commands/init.mjs +3 -0
  31. package/dist/cli/commands/mcp.mjs +36 -0
  32. package/dist/cli/commands/model.mjs +54 -0
  33. package/dist/cli/commands/plugins.mjs +43 -0
  34. package/dist/cli/commands/prepare.mjs +2 -0
  35. package/dist/cli/commands/public.mjs +3 -0
  36. package/dist/cli/commands/resolve.mjs +23 -0
  37. package/dist/cli/commands/route.mjs +2 -0
  38. package/dist/cli/commands/runner.mjs +1 -0
  39. package/dist/cli/commands/scan.mjs +2 -0
  40. package/dist/cli/commands/setup.mjs +34 -0
  41. package/dist/cli/commands/sign.mjs +4 -0
  42. package/dist/cli/commands/signer.mjs +1 -0
  43. package/dist/cli/commands/swap.mjs +36 -0
  44. package/dist/cli/commands/upgrade.mjs +2 -0
  45. package/dist/cli/commands/vault.mjs +1 -0
  46. package/dist/cli/commands/version.mjs +2 -0
  47. package/dist/data/desk-data.mjs +55 -0
  48. package/dist/data/names.mjs +2 -0
  49. package/dist/data/providers/farming.mjs +2 -0
  50. package/dist/equities/index.mjs +1 -0
  51. package/dist/index.mjs +60 -0
  52. package/dist/nft-gas-war-guard.mjs +1 -0
  53. package/dist/onboarding/harness-configs.mjs +4 -0
  54. package/dist/portfolio-risk.mjs +1 -0
  55. package/dist/prepare-envelope.mjs +1 -0
  56. package/dist/public-api/agent-grants.mjs +3 -0
  57. package/dist/public-control/policy-schema.mjs +1 -0
  58. package/dist/router/index.mjs +2 -0
  59. package/dist/scanner/index.mjs +4 -0
  60. package/dist/signals/index.mjs +1 -0
  61. package/dist/watch-preferences.mjs +1 -0
  62. package/package.json +32 -78
  63. package/public/oracle-splash/_variants/ice.html +5 -18
  64. package/public/oracle-splash/_variants/ivory.html +5 -18
  65. package/public/oracle-splash/index.html +114 -34
  66. package/CONTRIBUTING.md +0 -99
  67. package/bin/desk-server.mjs +0 -473
  68. package/bin/oracle-data-mcp.mjs +0 -1252
  69. package/bin/oracle-equities.mjs +0 -168
  70. package/bin/oracle-init.mjs +0 -525
  71. package/bin/oracle-public-server.mjs +0 -36
  72. package/bin/oracle-route.mjs +0 -254
  73. package/bin/oracle-scan.mjs +0 -192
  74. package/bin/oracle-upgrade.mjs +0 -42
  75. package/bin/oracle.mjs +0 -34
  76. package/docs/adding-a-chain.md +0 -229
  77. package/docs/architecture.md +0 -139
  78. package/docs/buzz-integration.md +0 -115
  79. package/docs/cli.md +0 -143
  80. package/docs/connectors.md +0 -13
  81. package/docs/hyperliquid-builder-code.md +0 -50
  82. package/docs/locals-only-fee-waiver.md +0 -34
  83. package/docs/oracle-pack-standard.md +0 -29
  84. package/docs/profiles.md +0 -151
  85. package/docs/public-surface.md +0 -206
  86. package/examples/add-a-chain.mjs +0 -65
  87. package/examples/oracle-pack-template.mjs +0 -38
  88. package/examples/research-a-token.mjs +0 -70
  89. package/plugins/oracle-owner-gate/__init__.py +0 -288
  90. package/plugins/oracle-owner-gate/plugin.yaml +0 -9
  91. package/protocols/templates/safe-erc20/SECURITY.md +0 -16
  92. package/protocols/templates/safe-erc20/foundry.toml +0 -12
  93. package/protocols/templates/safe-erc20/remappings.txt +0 -2
  94. package/protocols/templates/safe-erc20/src/SafeERC20.sol +0 -53
  95. package/protocols/templates/safe-erc20/test/SafeERC20.t.sol +0 -72
  96. package/scripts/adversarial-bench.mjs +0 -114
  97. package/scripts/build-dist.mjs +0 -119
  98. package/scripts/build-inscription.py +0 -230
  99. package/scripts/check-doc-drift.mjs +0 -123
  100. package/scripts/check-test-count.mjs +0 -105
  101. package/scripts/e2e-hl-markets.mjs +0 -21
  102. package/scripts/e2e-hl-perps.mjs +0 -48
  103. package/scripts/e2e-hypercore-staking.mjs +0 -128
  104. package/scripts/e2e-solana-bitcoin.mjs +0 -183
  105. package/scripts/guard-publish.mjs +0 -22
  106. package/scripts/protocol-template-gate.mjs +0 -15
  107. package/scripts/public-api-scan.mjs +0 -23
  108. package/scripts/publish-dist.mjs +0 -67
  109. package/scripts/record-hero-cli.sh +0 -80
  110. package/scripts/secret-scan.mjs +0 -169
  111. package/scripts/smoke-dist-bins.mjs +0 -89
  112. package/scripts/verify-dist.mjs +0 -29
  113. package/scripts/verify-v3-venues.mjs +0 -233
  114. package/skins/oracle.yaml +0 -56
  115. package/src/action-receipts.mjs +0 -265
  116. package/src/action-semantics.mjs +0 -62
  117. package/src/address-book.mjs +0 -208
  118. package/src/agent-auth.mjs +0 -206
  119. package/src/approval-guard.mjs +0 -282
  120. package/src/attestation-secret.mjs +0 -94
  121. package/src/audit-log.mjs +0 -196
  122. package/src/auth/oauth.mjs +0 -672
  123. package/src/auto-slippage.mjs +0 -378
  124. package/src/capability-posture.mjs +0 -125
  125. package/src/cards.mjs +0 -422
  126. package/src/chains.mjs +0 -62
  127. package/src/cli/chain-catalog.mjs +0 -215
  128. package/src/cli/chain-state.mjs +0 -74
  129. package/src/cli/commands/auth.mjs +0 -193
  130. package/src/cli/commands/bootstrap.mjs +0 -87
  131. package/src/cli/commands/chain.mjs +0 -143
  132. package/src/cli/commands/chat.mjs +0 -465
  133. package/src/cli/commands/credential.mjs +0 -9
  134. package/src/cli/commands/data-mcp.mjs +0 -18
  135. package/src/cli/commands/data.mjs +0 -75
  136. package/src/cli/commands/doctor.mjs +0 -136
  137. package/src/cli/commands/equities.mjs +0 -41
  138. package/src/cli/commands/farm.mjs +0 -129
  139. package/src/cli/commands/fees.mjs +0 -109
  140. package/src/cli/commands/follow.mjs +0 -130
  141. package/src/cli/commands/harness.mjs +0 -63
  142. package/src/cli/commands/help.mjs +0 -7
  143. package/src/cli/commands/init.mjs +0 -27
  144. package/src/cli/commands/mcp.mjs +0 -154
  145. package/src/cli/commands/model.mjs +0 -106
  146. package/src/cli/commands/plugins.mjs +0 -275
  147. package/src/cli/commands/prepare.mjs +0 -12
  148. package/src/cli/commands/public.mjs +0 -20
  149. package/src/cli/commands/resolve.mjs +0 -64
  150. package/src/cli/commands/route.mjs +0 -12
  151. package/src/cli/commands/runner.mjs +0 -9
  152. package/src/cli/commands/scan.mjs +0 -12
  153. package/src/cli/commands/setup.mjs +0 -294
  154. package/src/cli/commands/sign.mjs +0 -21
  155. package/src/cli/commands/signer.mjs +0 -9
  156. package/src/cli/commands/swap.mjs +0 -102
  157. package/src/cli/commands/upgrade.mjs +0 -12
  158. package/src/cli/commands/vault.mjs +0 -9
  159. package/src/cli/commands/version.mjs +0 -22
  160. package/src/cli/first-run.mjs +0 -23
  161. package/src/cli/kernel.mjs +0 -262
  162. package/src/cli/mcp-targets/chatgpt.mjs +0 -51
  163. package/src/cli/mcp-targets/claude-code.mjs +0 -39
  164. package/src/cli/mcp-targets/claude-desktop.mjs +0 -24
  165. package/src/cli/mcp-targets/codex.mjs +0 -41
  166. package/src/cli/mcp-targets/cursor.mjs +0 -32
  167. package/src/cli/mcp-targets/shared.mjs +0 -71
  168. package/src/cli/mcp-targets/vscode.mjs +0 -39
  169. package/src/cli/messaging-platforms.mjs +0 -217
  170. package/src/cli/model-config.mjs +0 -78
  171. package/src/cli/operator-dispatch.mjs +0 -194
  172. package/src/cli/oracle-harness.py +0 -415
  173. package/src/cli/paths.mjs +0 -107
  174. package/src/cli/runtime.mjs +0 -351
  175. package/src/cli/setup-state.mjs +0 -168
  176. package/src/cli/spawn-child.mjs +0 -43
  177. package/src/data/catalog.mjs +0 -858
  178. package/src/data/desk-data.mjs +0 -877
  179. package/src/data/http.mjs +0 -253
  180. package/src/data/names.mjs +0 -188
  181. package/src/data/provider-endpoint.mjs +0 -94
  182. package/src/data/providers/aave-v3.mjs +0 -139
  183. package/src/data/providers/across-bridge.mjs +0 -41
  184. package/src/data/providers/aerodrome.mjs +0 -245
  185. package/src/data/providers/aevo.mjs +0 -33
  186. package/src/data/providers/approval-indexer.mjs +0 -133
  187. package/src/data/providers/approvals.mjs +0 -594
  188. package/src/data/providers/babylon-staking.mjs +0 -149
  189. package/src/data/providers/balancer.mjs +0 -209
  190. package/src/data/providers/beefy-yields.mjs +0 -45
  191. package/src/data/providers/birdeye-tokens.mjs +0 -33
  192. package/src/data/providers/bisq-markets.mjs +0 -145
  193. package/src/data/providers/bitcoin-esplora.mjs +0 -216
  194. package/src/data/providers/bitcoin-meta.mjs +0 -378
  195. package/src/data/providers/blockscout.mjs +0 -14
  196. package/src/data/providers/bob-rootstock.mjs +0 -198
  197. package/src/data/providers/braiins-insights.mjs +0 -103
  198. package/src/data/providers/bridge-aggregator.mjs +0 -259
  199. package/src/data/providers/bridges.mjs +0 -242
  200. package/src/data/providers/bungee.mjs +0 -29
  201. package/src/data/providers/celestia-da.mjs +0 -38
  202. package/src/data/providers/changenow.mjs +0 -135
  203. package/src/data/providers/compound.mjs +0 -32
  204. package/src/data/providers/connext.mjs +0 -28
  205. package/src/data/providers/convex.mjs +0 -30
  206. package/src/data/providers/cow-protocol.mjs +0 -110
  207. package/src/data/providers/cowswap.mjs +0 -415
  208. package/src/data/providers/curve.mjs +0 -201
  209. package/src/data/providers/das-assets.mjs +0 -59
  210. package/src/data/providers/debridge.mjs +0 -109
  211. package/src/data/providers/defillama.mjs +0 -88
  212. package/src/data/providers/dexscreener.mjs +0 -43
  213. package/src/data/providers/drift.mjs +0 -32
  214. package/src/data/providers/dydx.mjs +0 -41
  215. package/src/data/providers/evm-rpc.mjs +0 -225
  216. package/src/data/providers/farming.mjs +0 -291
  217. package/src/data/providers/geckoterminal.mjs +0 -34
  218. package/src/data/providers/gmx.mjs +0 -496
  219. package/src/data/providers/hiro-stacks.mjs +0 -150
  220. package/src/data/providers/hl-assets.mjs +0 -165
  221. package/src/data/providers/hl-info.mjs +0 -108
  222. package/src/data/providers/hl-markets.mjs +0 -210
  223. package/src/data/providers/hl-outcome.mjs +0 -61
  224. package/src/data/providers/hl-perps.mjs +0 -419
  225. package/src/data/providers/hl-staking.mjs +0 -353
  226. package/src/data/providers/hl-ws.mjs +0 -119
  227. package/src/data/providers/hyperevm-dex.mjs +0 -49
  228. package/src/data/providers/jito-mev.mjs +0 -117
  229. package/src/data/providers/jupiter-venues.mjs +0 -119
  230. package/src/data/providers/jupiter.mjs +0 -315
  231. package/src/data/providers/kamino-strategies.mjs +0 -143
  232. package/src/data/providers/l2beat-tvl.mjs +0 -42
  233. package/src/data/providers/lifi.mjs +0 -166
  234. package/src/data/providers/liquid-esplora.mjs +0 -152
  235. package/src/data/providers/magiceden-ordinals.mjs +0 -141
  236. package/src/data/providers/magiceden-sol.mjs +0 -406
  237. package/src/data/providers/mempool-lightning.mjs +0 -144
  238. package/src/data/providers/mempool-mining.mjs +0 -142
  239. package/src/data/providers/meteora-dlmm.mjs +0 -168
  240. package/src/data/providers/morpho.mjs +0 -177
  241. package/src/data/providers/nft-gallery.mjs +0 -163
  242. package/src/data/providers/nft-portfolio.mjs +0 -494
  243. package/src/data/providers/odos.mjs +0 -156
  244. package/src/data/providers/ondo.mjs +0 -31
  245. package/src/data/providers/oneinch.mjs +0 -174
  246. package/src/data/providers/opensea-multichain.mjs +0 -136
  247. package/src/data/providers/opensea-nft.mjs +0 -371
  248. package/src/data/providers/orca.mjs +0 -29
  249. package/src/data/providers/ordinals-runes.mjs +0 -180
  250. package/src/data/providers/pancakeswap.mjs +0 -28
  251. package/src/data/providers/paraswap.mjs +0 -125
  252. package/src/data/providers/pendle.mjs +0 -188
  253. package/src/data/providers/poly-clob.mjs +0 -283
  254. package/src/data/providers/poly-public.mjs +0 -96
  255. package/src/data/providers/poly-ws.mjs +0 -103
  256. package/src/data/providers/polygon-staking.mjs +0 -227
  257. package/src/data/providers/portfolio-history.mjs +0 -394
  258. package/src/data/providers/portfolio.mjs +0 -600
  259. package/src/data/providers/pyth-price-feeds.mjs +0 -172
  260. package/src/data/providers/raydium.mjs +0 -35
  261. package/src/data/providers/relayscan-mev.mjs +0 -72
  262. package/src/data/providers/rfq.mjs +0 -15
  263. package/src/data/providers/rh-agent.mjs +0 -59
  264. package/src/data/providers/sanctum-lst.mjs +0 -180
  265. package/src/data/providers/satflow.mjs +0 -341
  266. package/src/data/providers/signed-material-guard.mjs +0 -108
  267. package/src/data/providers/solana-rpc.mjs +0 -197
  268. package/src/data/providers/solend-lending.mjs +0 -166
  269. package/src/data/providers/spark-lend.mjs +0 -42
  270. package/src/data/providers/squid-router.mjs +0 -29
  271. package/src/data/providers/stargate.mjs +0 -29
  272. package/src/data/providers/sushiswap.mjs +0 -30
  273. package/src/data/providers/symbiotic-restaking.mjs +0 -41
  274. package/src/data/providers/thorchain.mjs +0 -36
  275. package/src/data/providers/traderjoe.mjs +0 -28
  276. package/src/data/providers/twap.mjs +0 -152
  277. package/src/data/providers/uniswap-v3.mjs +0 -457
  278. package/src/data/providers/uniswap-v4.mjs +0 -414
  279. package/src/data/providers/vertex.mjs +0 -41
  280. package/src/data/providers/wallet-watch.mjs +0 -264
  281. package/src/data/providers/wormhole.mjs +0 -28
  282. package/src/data/providers/yearn.mjs +0 -31
  283. package/src/data/providers/zerox.mjs +0 -167
  284. package/src/data/public-api-scan.mjs +0 -61
  285. package/src/data/quote-placeholder.mjs +0 -31
  286. package/src/desk/swap-prepare.mjs +0 -194
  287. package/src/equities/bridge.mjs +0 -388
  288. package/src/equities/fixtures/bridge_routes.json +0 -159
  289. package/src/equities/fixtures/dst_transitions.json +0 -29
  290. package/src/equities/fixtures/equity_dex_pools.json +0 -154
  291. package/src/equities/fixtures/hip3_l2books.json +0 -2711
  292. package/src/equities/fixtures/nyse_holidays.json +0 -1
  293. package/src/equities/fixtures/oracles.json +0 -100
  294. package/src/equities/fixtures/rh_pool_state.json +0 -244
  295. package/src/equities/fixtures/solana_xstocks.json +0 -704
  296. package/src/equities/fixtures/ton_xstocks.json +0 -35
  297. package/src/equities/fixtures/universe.json +0 -411
  298. package/src/equities/fixtures/venues.json +0 -3542
  299. package/src/equities/fixtures.mjs +0 -405
  300. package/src/equities/funding.mjs +0 -142
  301. package/src/equities/index.mjs +0 -166
  302. package/src/equities/liveness.mjs +0 -148
  303. package/src/equities/marketHours.mjs +0 -249
  304. package/src/equities/normalize.mjs +0 -295
  305. package/src/equities/num.mjs +0 -146
  306. package/src/equities/prepare.mjs +0 -95
  307. package/src/equities/rank.mjs +0 -260
  308. package/src/equities/sourceNum.mjs +0 -69
  309. package/src/equities/types.mjs +0 -220
  310. package/src/equities/venues/arcus-perp.mjs +0 -84
  311. package/src/equities/venues/arcus-spot.mjs +0 -105
  312. package/src/equities/venues/hyperliquid-hip3.mjs +0 -224
  313. package/src/equities/venues/rh-uniswap.mjs +0 -216
  314. package/src/equities/venues/solana-xstocks.mjs +0 -139
  315. package/src/equities/venues/ton-stonfi.mjs +0 -139
  316. package/src/exact-integer.mjs +0 -72
  317. package/src/exec-policy.mjs +0 -419
  318. package/src/flags.mjs +0 -15
  319. package/src/fresh-window.mjs +0 -76
  320. package/src/gmx-attestation.mjs +0 -176
  321. package/src/index.mjs +0 -107
  322. package/src/licensing/locals-only.mjs +0 -25
  323. package/src/nft-gas-war-guard.mjs +0 -139
  324. package/src/onboarding/agent-keys.mjs +0 -161
  325. package/src/onboarding/harness-configs.mjs +0 -102
  326. package/src/onboarding/index.mjs +0 -18
  327. package/src/onboarding/tiers.mjs +0 -139
  328. package/src/oracle-env.mjs +0 -55
  329. package/src/package-manifest.mjs +0 -42
  330. package/src/plugins/agent-plugin-loader.mjs +0 -225
  331. package/src/portfolio-risk.mjs +0 -170
  332. package/src/prepare-envelope.mjs +0 -204
  333. package/src/profile-upgrade.mjs +0 -277
  334. package/src/protocol-execution.mjs +0 -84
  335. package/src/protocol-templates/gate.mjs +0 -179
  336. package/src/protocol-templates/prepare-deploy.mjs +0 -81
  337. package/src/public-api/agent-grants.mjs +0 -57
  338. package/src/public-api/buzz-integration.mjs +0 -267
  339. package/src/public-api/connect-agent.mjs +0 -424
  340. package/src/public-api/grants.mjs +0 -142
  341. package/src/public-api/http.mjs +0 -707
  342. package/src/public-api/metering.mjs +0 -111
  343. package/src/public-control/aa-adapter.mjs +0 -402
  344. package/src/public-control/build-registry.mjs +0 -227
  345. package/src/public-control/bundler-client.mjs +0 -357
  346. package/src/public-control/grant-indexer.mjs +0 -296
  347. package/src/public-control/policy-render.mjs +0 -69
  348. package/src/public-control/policy-schema.mjs +0 -322
  349. package/src/public-control/runtime-config.mjs +0 -275
  350. package/src/public-control/session-key-model.mjs +0 -379
  351. package/src/public-control/session-orchestrator.mjs +0 -418
  352. package/src/rfq/intent.mjs +0 -180
  353. package/src/rfq/sources.mjs +0 -181
  354. package/src/route-attestation.mjs +0 -132
  355. package/src/router/best-execution.mjs +0 -326
  356. package/src/router/index.mjs +0 -250
  357. package/src/router/integrator-fee.mjs +0 -135
  358. package/src/router/prepare-bridge.mjs +0 -293
  359. package/src/router/prepare-route.mjs +0 -398
  360. package/src/router/proposal.mjs +0 -311
  361. package/src/router/risk-classifier.mjs +0 -119
  362. package/src/router/route-sources.mjs +0 -364
  363. package/src/scanner/chains.config.mjs +0 -543
  364. package/src/scanner/contract.mjs +0 -270
  365. package/src/scanner/evm-scanner.mjs +0 -394
  366. package/src/scanner/index.mjs +0 -9
  367. package/src/scanner/v2-venue.mjs +0 -351
  368. package/src/scanner/v3-venue.mjs +0 -308
  369. package/src/scopes.mjs +0 -44
  370. package/src/sell-simulation.mjs +0 -167
  371. package/src/signals/engine.mjs +0 -146
  372. package/src/signals/index.mjs +0 -1
  373. package/src/token-transfer-guard.mjs +0 -188
  374. package/src/tui/app.mjs +0 -438
  375. package/src/tui/backend.mjs +0 -215
  376. package/src/tui/format.mjs +0 -272
  377. package/src/tui/gateway-client.mjs +0 -177
  378. package/src/tui/input.mjs +0 -501
  379. package/src/tui/memory.mjs +0 -105
  380. package/src/tui/meta-learn.mjs +0 -85
  381. package/src/tui/renderer.mjs +0 -443
  382. package/src/tui/scheduler.mjs +0 -205
  383. package/src/tui/skills-loader.mjs +0 -140
  384. package/src/tui/standalone-client.mjs +0 -752
  385. package/src/tui/theme.mjs +0 -81
  386. package/src/vault-attestation.mjs +0 -146
  387. package/src/venues.mjs +0 -206
  388. package/src/watch-preferences.mjs +0 -85
  389. /package/{profiles → dist/assets/profiles}/_template/SOUL.md +0 -0
  390. /package/{profiles → dist/assets/profiles}/_template/profile.json +0 -0
  391. /package/{profiles → dist/assets/profiles}/bitcoin-agent/SOUL.md +0 -0
  392. /package/{profiles → dist/assets/profiles}/bitcoin-agent/profile.json +0 -0
  393. /package/{profiles → dist/assets/profiles}/hyperliquid-agent/SOUL.md +0 -0
  394. /package/{profiles → dist/assets/profiles}/hyperliquid-agent/profile.json +0 -0
  395. /package/{profiles → dist/assets/profiles}/oracle/SOUL.md +0 -0
  396. /package/{profiles → dist/assets/profiles}/oracle/profile.json +0 -0
  397. /package/{profiles → dist/assets/profiles}/polymarket-agent/SOUL.md +0 -0
  398. /package/{profiles → dist/assets/profiles}/polymarket-agent/profile.json +0 -0
  399. /package/{profiles → dist/assets/profiles}/profile.schema.json +0 -0
  400. /package/{profiles → dist/assets/profiles}/protocol-builder/SOUL.md +0 -0
  401. /package/{profiles → dist/assets/profiles}/protocol-builder/profile.json +0 -0
  402. /package/{profiles → dist/assets/profiles}/robinhood-agent/SOUL.md +0 -0
  403. /package/{profiles → dist/assets/profiles}/robinhood-agent/profile.json +0 -0
  404. /package/{profiles → dist/assets/profiles}/solana-agent/SOUL.md +0 -0
  405. /package/{profiles → dist/assets/profiles}/solana-agent/profile.json +0 -0
  406. /package/{profiles → dist/assets/profiles}/stable-agent/SOUL.md +0 -0
  407. /package/{profiles → dist/assets/profiles}/stable-agent/profile.json +0 -0
  408. /package/{skills → dist/assets/skills}/balance/SKILL.md +0 -0
  409. /package/{skills → dist/assets/skills}/bitcoin-l1.md +0 -0
  410. /package/{skills → dist/assets/skills}/chain-defi-ecosystem-profiling.md +0 -0
  411. /package/{skills → dist/assets/skills}/evm-contract-research.md +0 -0
  412. /package/{skills → dist/assets/skills}/hyperliquid.md +0 -0
  413. /package/{skills → dist/assets/skills}/multichain-exec-desk.md +0 -0
  414. /package/{skills → dist/assets/skills}/oracle-action-semantics/SKILL.md +0 -0
  415. /package/{skills → dist/assets/skills}/oracle-best-execution/SKILL.md +0 -0
  416. /package/{skills → dist/assets/skills}/oracle-best-execution.md +0 -0
  417. /package/{skills → dist/assets/skills}/oracle-bitcoin/SKILL.md +0 -0
  418. /package/{skills → dist/assets/skills}/oracle-chain-graphs-telegram-cards/SKILL.md +0 -0
  419. /package/{skills → dist/assets/skills}/oracle-chat/SKILL.md +0 -0
  420. /package/{skills → dist/assets/skills}/oracle-chat/chain.SKILL.md +0 -0
  421. /package/{skills → dist/assets/skills}/oracle-chat/setup.SKILL.md +0 -0
  422. /package/{skills → dist/assets/skills}/oracle-circuit-breaker/SKILL.md +0 -0
  423. /package/{skills → dist/assets/skills}/oracle-contract-research/SKILL.md +0 -0
  424. /package/{skills → dist/assets/skills}/oracle-desk/SKILL.md +0 -0
  425. /package/{skills → dist/assets/skills}/oracle-desk.md +0 -0
  426. /package/{skills → dist/assets/skills}/oracle-dex-launch/SKILL.md +0 -0
  427. /package/{skills → dist/assets/skills}/oracle-equities/SKILL.md +0 -0
  428. /package/{skills → dist/assets/skills}/oracle-grants/SKILL.md +0 -0
  429. /package/{skills → dist/assets/skills}/oracle-hypercore-staking/SKILL.md +0 -0
  430. /package/{skills → dist/assets/skills}/oracle-hyperliquid/SKILL.md +0 -0
  431. /package/{skills → dist/assets/skills}/oracle-meme-token-sniper/SKILL.md +0 -0
  432. /package/{skills → dist/assets/skills}/oracle-multichain-nft-launch/SKILL.md +0 -0
  433. /package/{skills → dist/assets/skills}/oracle-multichain-token-launch/SKILL.md +0 -0
  434. /package/{skills → dist/assets/skills}/oracle-nft-gacha-launch/SKILL.md +0 -0
  435. /package/{skills → dist/assets/skills}/oracle-nft-mint-gas-war/SKILL.md +0 -0
  436. /package/{skills → dist/assets/skills}/oracle-polymarket/SKILL.md +0 -0
  437. /package/{skills → dist/assets/skills}/oracle-protocol-builder/SKILL.md +0 -0
  438. /package/{skills → dist/assets/skills}/oracle-protocol-security/SKILL.md +0 -0
  439. /package/{skills → dist/assets/skills}/oracle-public-product/SKILL.md +0 -0
  440. /package/{skills → dist/assets/skills}/oracle-receipts/SKILL.md +0 -0
  441. /package/{skills → dist/assets/skills}/oracle-receipts.md +0 -0
  442. /package/{skills → dist/assets/skills}/oracle-rfq-tokenized-assets/SKILL.md +0 -0
  443. /package/{skills → dist/assets/skills}/oracle-smart-wallet-scanner/SKILL.md +0 -0
  444. /package/{skills → dist/assets/skills}/oracle-solana/SKILL.md +0 -0
  445. /package/{skills → dist/assets/skills}/oracle-solana-nft/SKILL.md +0 -0
  446. /package/{skills → dist/assets/skills}/oracle-token-research/SKILL.md +0 -0
  447. /package/{skills → dist/assets/skills}/solana.md +0 -0
@@ -958,7 +958,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
958
958
  <a class="enter-cta primary" href="/downloads/">Download beta</a>
959
959
  <a class="enter-cta ghost" href="#cli">See the CLI</a>
960
960
  </div>
961
- <p class="hero-note-line">macOS · Windows · Linux &nbsp;/&nbsp; public CLI and desktop beta</p>
961
+ <p class="hero-note-line">macOS · Windows · Linux &nbsp;/&nbsp; desktop app or public CLI</p>
962
962
  </div>
963
963
 
964
964
  <figure class="hero-product">
@@ -997,10 +997,10 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
997
997
  <p class="section-label rv">Oracle CLI</p>
998
998
  <h2 class="section-title rv">One surface. <em>Every chain.</em></h2>
999
999
  <div class="cli-install rv">
1000
- <div class="cli-install-cmd"><code>npm i -g @oracle-agent/oracle</code></div>
1001
- <p class="cli-install-gate"><b>Locals Only</b> holders get 0% Oracle integrator fees. Everyone gets the same public CLI, desktop, source, and prepare-only product access.</p>
1000
+ <div class="cli-install-cmd"><code>npm install -g @oracle-agent/oracle</code></div>
1002
1001
  </div>
1003
- <p class="section-lede rv">The real Oracle shell, isolated from desktop chrome. Pin the active surface with <code style="color:var(--blue2)">/chain hyperliquid</code>, switch models with <code style="color:var(--blue2)">/model</code>, then ask naturally.</p>
1002
+ <p class="section-lede rv">The real Oracle shell, isolated from desktop chrome. No accounts, no servers. The CLI runs on your machine and reads straight from public RPCs.</p>
1003
+ <p class="section-lede rv">Pin the active surface with <code style="color:var(--blue2)">/chain hyperliquid</code>, switch models, ask naturally. Oracle reads, prices, and prepares — you sign.</p>
1004
1004
  <div class="convert-grid rv">
1005
1005
  <div>
1006
1006
  <figure class="cli-frame cli-proof">
@@ -1421,19 +1421,6 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1421
1421
  </div>
1422
1422
  </section>
1423
1423
 
1424
- <section class="section" id="custody" style="padding-top:clamp(48px,8vh,80px)">
1425
- <div class="strip-inner rv" style="border:1px solid var(--line);border-radius:16px;padding:22px 24px;display:flex;flex-wrap:wrap;gap:18px 28px;align-items:center;justify-content:space-between;background:linear-gradient(180deg, rgba(184,240,255,.05), transparent)">
1426
- <div class="strip-left">
1427
- <strong style="font-family:var(--display);font-weight:400;font-size:26px;display:block;margin-bottom:6px">You keep custody.</strong>
1428
- <span style="font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--mute)">oracle never holds your keys</span>
1429
- </div>
1430
- <div class="strip-right" style="display:flex;flex-wrap:wrap;gap:10px">
1431
- <span class="pill on" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid rgba(184,240,255,.35);border-radius:999px;padding:9px 12px;color:var(--blue)">Multi-wallet</span>
1432
- <span class="pill on" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid rgba(184,240,255,.35);border-radius:999px;padding:9px 12px;color:var(--blue)">Per-wallet limits</span>
1433
- <span class="pill" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid var(--line);border-radius:999px;padding:9px 12px;color:var(--cool)">Revoke anytime</span>
1434
- </div>
1435
- </div>
1436
- </section>
1437
1424
  </main>
1438
1425
 
1439
1426
  <div class="mega-oracle rv" aria-hidden="true">oracle</div>
@@ -1464,6 +1451,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1464
1451
 
1465
1452
  var ICON = "https://icons.llamao.fi/icons/";
1466
1453
  var CHAINS = [
1454
+ { name: "Hyperliquid", id: "999", logo: "chains/rsz_hyperliquid", note: "hyperliquid agent", badge: "read" },
1467
1455
  { name: "Ethereum", id: "1", logo: "chains/rsz_ethereum", note: "evm / bridge agent", badge: "route" },
1468
1456
  { name: "Base", id: "8453", logo: "chains/rsz_base", note: "evm / bridge agent", badge: "route" },
1469
1457
  { name: "Arbitrum", id: "42161", logo: "chains/rsz_arbitrum", note: "evm / bridge agent", badge: "route" },
@@ -1472,7 +1460,6 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1472
1460
  { name: "Avalanche", id: "43114", logo: "chains/rsz_avalanche", note: "evm / bridge agent", badge: "route" },
1473
1461
  { name: "Polygon", id: "137", logo: "chains/rsz_polygon", note: "evm / bridge agent", badge: "route" },
1474
1462
  { name: "Robinhood", id: "4663", logo: "chains/rsz_robinhood", note: "robinhood agent", badge: "route" },
1475
- { name: "Hyperliquid", id: "999", logo: "chains/rsz_hyperliquid", note: "hyperliquid agent", badge: "read" },
1476
1463
  { name: "Abstract", id: "2741", logo: "chains/rsz_abstract", note: "open / add agent", badge: "read" },
1477
1464
  { name: "Stable", id: "988", logo: "chains/rsz_stable", note: "stable agent", badge: "read" },
1478
1465
  { name: "Solana", id: "SOL", logo: "chains/rsz_solana", note: "solana agent", badge: "route" },
@@ -960,7 +960,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
960
960
  <a class="enter-cta primary" href="/downloads/">Download beta</a>
961
961
  <a class="enter-cta ghost" href="#cli">See the CLI</a>
962
962
  </div>
963
- <p class="hero-note-line">macOS · Windows · Linux &nbsp;/&nbsp; public CLI and desktop beta</p>
963
+ <p class="hero-note-line">macOS · Windows · Linux &nbsp;/&nbsp; desktop app or public CLI</p>
964
964
  </div>
965
965
 
966
966
  <figure class="hero-product">
@@ -999,10 +999,10 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
999
999
  <p class="section-label rv">Oracle CLI</p>
1000
1000
  <h2 class="section-title rv">One surface. <em>Every chain.</em></h2>
1001
1001
  <div class="cli-install rv">
1002
- <div class="cli-install-cmd"><code>npm i -g @oracle-agent/oracle</code></div>
1003
- <p class="cli-install-gate"><b>Locals Only</b> holders get 0% Oracle integrator fees. Everyone gets the same public CLI, desktop, source, and prepare-only product access.</p>
1002
+ <div class="cli-install-cmd"><code>npm install -g @oracle-agent/oracle</code></div>
1004
1003
  </div>
1005
- <p class="section-lede rv">The real Oracle shell, isolated from desktop chrome. Pin the active surface with <code style="color:var(--blue2)">/chain hyperliquid</code>, switch models with <code style="color:var(--blue2)">/model</code>, then ask naturally.</p>
1004
+ <p class="section-lede rv">The real Oracle shell, isolated from desktop chrome. No accounts, no servers. The CLI runs on your machine and reads straight from public RPCs.</p>
1005
+ <p class="section-lede rv">Pin the active surface with <code style="color:var(--blue2)">/chain hyperliquid</code>, switch models, ask naturally. Oracle reads, prices, and prepares — you sign.</p>
1006
1006
  <div class="convert-grid rv">
1007
1007
  <div>
1008
1008
  <figure class="cli-frame cli-proof">
@@ -1423,19 +1423,6 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1423
1423
  </div>
1424
1424
  </section>
1425
1425
 
1426
- <section class="section" id="custody" style="padding-top:clamp(48px,8vh,80px)">
1427
- <div class="strip-inner rv" style="border:1px solid var(--line);border-radius:16px;padding:22px 24px;display:flex;flex-wrap:wrap;gap:18px 28px;align-items:center;justify-content:space-between;background:linear-gradient(180deg, rgba(140,106,63,.05), transparent)">
1428
- <div class="strip-left">
1429
- <strong style="font-family:var(--display);font-weight:400;font-size:26px;display:block;margin-bottom:6px">You keep custody.</strong>
1430
- <span style="font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--mute)">oracle never holds your keys</span>
1431
- </div>
1432
- <div class="strip-right" style="display:flex;flex-wrap:wrap;gap:10px">
1433
- <span class="pill on" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid rgba(140,106,63,.35);border-radius:999px;padding:9px 12px;color:var(--blue)">Multi-wallet</span>
1434
- <span class="pill on" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid rgba(140,106,63,.35);border-radius:999px;padding:9px 12px;color:var(--blue)">Per-wallet limits</span>
1435
- <span class="pill" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid var(--line);border-radius:999px;padding:9px 12px;color:var(--cool)">Revoke anytime</span>
1436
- </div>
1437
- </div>
1438
- </section>
1439
1426
  </main>
1440
1427
 
1441
1428
  <div class="mega-oracle rv" aria-hidden="true">oracle</div>
@@ -1466,6 +1453,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1466
1453
 
1467
1454
  var ICON = "https://icons.llamao.fi/icons/";
1468
1455
  var CHAINS = [
1456
+ { name: "Hyperliquid", id: "999", logo: "chains/rsz_hyperliquid", note: "hyperliquid agent", badge: "read" },
1469
1457
  { name: "Ethereum", id: "1", logo: "chains/rsz_ethereum", note: "evm / bridge agent", badge: "route" },
1470
1458
  { name: "Base", id: "8453", logo: "chains/rsz_base", note: "evm / bridge agent", badge: "route" },
1471
1459
  { name: "Arbitrum", id: "42161", logo: "chains/rsz_arbitrum", note: "evm / bridge agent", badge: "route" },
@@ -1474,7 +1462,6 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1474
1462
  { name: "Avalanche", id: "43114", logo: "chains/rsz_avalanche", note: "evm / bridge agent", badge: "route" },
1475
1463
  { name: "Polygon", id: "137", logo: "chains/rsz_polygon", note: "evm / bridge agent", badge: "route" },
1476
1464
  { name: "Robinhood", id: "4663", logo: "chains/rsz_robinhood", note: "robinhood agent", badge: "route" },
1477
- { name: "Hyperliquid", id: "999", logo: "chains/rsz_hyperliquid", note: "hyperliquid agent", badge: "read" },
1478
1465
  { name: "Abstract", id: "2741", logo: "chains/rsz_abstract", note: "open / add agent", badge: "read" },
1479
1466
  { name: "Stable", id: "988", logo: "chains/rsz_stable", note: "stable agent", badge: "read" },
1480
1467
  { name: "Solana", id: "SOL", logo: "chains/rsz_solana", note: "solana agent", badge: "route" },
@@ -6,9 +6,21 @@
6
6
  <title>ORACLE</title>
7
7
  <link rel="icon" href="/favicon.svg" type="image/svg+xml">
8
8
  <link rel="shortcut icon" href="/favicon.ico">
9
- <meta name="description" content="ORACLE is a self-custodial agent control plane for wallets, markets, and protocol routes.">
9
+ <meta name="description" content="Self-custody trading agent. Prepare every trade — Hyperliquid, EVM, Solana, Bitcoin. You sign.">
10
10
  <meta name="theme-color" content="#0B1018" />
11
11
  <meta name="robots" content="index,follow" />
12
+ <meta property="og:title" content="ORACLE — Self-custody trading agent">
13
+ <meta property="og:description" content="Prepare every trade — Hyperliquid, EVM, Solana, Bitcoin. You sign.">
14
+ <meta property="og:image" content="https://oracle.demi.la/assets/hero/orb-poster.jpg">
15
+ <meta property="og:image:width" content="900">
16
+ <meta property="og:image:height" content="900">
17
+ <meta property="og:url" content="https://oracle.demi.la/">
18
+ <meta property="og:type" content="website">
19
+ <meta name="twitter:card" content="summary_large_image">
20
+ <meta name="twitter:title" content="ORACLE — Self-custody trading agent">
21
+ <meta name="twitter:description" content="Prepare every trade — Hyperliquid, EVM, Solana, Bitcoin. You sign.">
22
+ <meta name="twitter:image" content="https://oracle.demi.la/assets/hero/orb-poster.jpg">
23
+ <meta name="robots" content="noindex,nofollow" />
12
24
  <link rel="preconnect" href="https://fonts.googleapis.com" />
13
25
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
14
26
  <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&family=IBM+Plex+Mono:wght@400;500;600&family=Outfit:wght@300;400;500;600;700&family=UnifrakturCook:wght@700&display=swap" rel="stylesheet" />
@@ -1128,7 +1140,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1128
1140
  <div class="grain" aria-hidden="true"></div>
1129
1141
  <div class="progress" id="progress" aria-hidden="true"></div>
1130
1142
 
1131
- <div class="loader" id="loader" aria-hidden="true">
1143
+ <div class="loader out" id="loader" aria-hidden="true" style="display:none">
1132
1144
  <div class="loader-inner">
1133
1145
  <div class="loader-mark orbital" aria-hidden="true">
1134
1146
  <svg viewBox="0 0 100 100">
@@ -1176,7 +1188,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1176
1188
  <a class="enter-cta primary" href="/downloads/">Download</a>
1177
1189
  <a class="enter-cta ghost" href="#cli">See the CLI</a>
1178
1190
  </div>
1179
- <p class="hero-note-line">macOS · Windows · Linux &nbsp;/&nbsp; public CLI and desktop beta</p>
1191
+ <p class="hero-note-line">macOS · Windows · Linux &nbsp;/&nbsp; desktop app or public CLI</p>
1180
1192
  </div>
1181
1193
 
1182
1194
  <figure class="hero-product">
@@ -1469,8 +1481,8 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1469
1481
  </article>
1470
1482
  <article class="moat-card">
1471
1483
  <div class="n">evidence</div>
1472
- <h3>Decoded before you sign, receipted after</h3>
1473
- <p>minOut, impact, spender, and decoded calldata before approval; tx hash, receipt status, balance delta, and allowance state after. Unsigned artifacts export to hardware wallets. No “looks filled.”</p>
1484
+ <h3>See it before you approve. Prove it after.</h3>
1485
+ <p>Before you approve, Oracle shows what you will receive, the expected cost, and which app gets permission to move your tokens. Afterward, it shows whether the transaction succeeded, what changed in your wallet, and whether any permission is still active. You can review unsigned transactions on a hardware wallet. Nothing is marked complete without proof.</p>
1474
1486
  </article>
1475
1487
  <article class="moat-card">
1476
1488
  <div class="n">fail closed</div>
@@ -1536,7 +1548,8 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1536
1548
  <noscript><p class="agent-ask">move 5k usdc into weth, cheapest route</p></noscript>
1537
1549
  </figure>
1538
1550
  </div>
1539
- <p class="agent-caption rv">Same tool from the terminal, the desktop app, or any MCP client. Prepare-only everywhere: Oracle never holds your keys.</p>
1551
+ <p class="agent-caption rv">Same tool from the terminal, the desktop app, any MCP client, or your agent on Telegram, Discord, WhatsApp and Signal. Buzz integration shipped. Prepare-only everywhere: Oracle never holds your keys.</p>
1552
+ <div class="agent-icons rv" style="display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:14px"><span style="display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;font-family:var(--mono);font-size:10px;color:var(--cool);letter-spacing:.08em"><svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm4.64 6.8c-.15 1.58-.8 5.42-1.13 7.19-.14.75-.42 1-.68 1.03-.58.05-1.02-.38-1.58-.75-.88-.58-1.38-.94-2.23-1.5-.99-.65-.35-1.01.22-1.59.15-.15 2.71-2.48 2.76-2.69.01-.03.01-.14-.07-.2-.08-.06-.19-.04-.27-.02-.12.03-1.96 1.25-5.54 3.66-.52.36-1 .53-1.42.52-.47-.01-1.37-.26-2.03-.48-.82-.27-1.47-.42-1.41-.87.03-.24.36-.49.99-.74 3.87-1.69 6.45-2.8 7.74-3.34 3.69-1.53 4.45-1.8 4.95-1.81.11 0 .36.03.52.17.14.12.18.28.2.4.02.11.04.37.01.56z" fill="#229ED9"/></svg>Telegram</span><span style="display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;font-family:var(--mono);font-size:10px;color:var(--cool);letter-spacing:.08em"><svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path d="M19.27 5.33C17.94 4.71 14.48 3.26 10.68 4.77a27.98 27.98 0 0 0-6.02 3.13c-.87.51-1.3.9-1.23 1.44.07.46.57.73 1.42 1.12l.33.15c.85.38 1.28.57 1.43 1.01.08.23.07.6-.08 1.1-.15.51-.5 1.15-1.02 2.02-.34.57-.5.85-.37.99.14.15.48.11 1.09-.26 1.76-1.07 3.18-1.93 4.23-2.59 3.22-2.06 5.08-2.82 5.55-2.28.18.21.06.84-.34 1.85-.39 1.01-1.05 2.32-1.51 3.13-.24.43-.37.64-.45.74-.11.14-.2.16-.3.15-.3-.03-.73-.45-1.41-1.3-.5-.62-.94-1.08-1.26-1.25-.64-.34-1.08-.13-1.14.26-.05.29.14.61.56 1.02.43.41 1.15 1.06 1.56 1.5.53.58.82.98.85 1.28.02.24-.04.47-.46.75-.42.27-.86.41-1.34.41-.41 0-.86-.1-1.35-.29-1.7-.68-3.25-1.94-4.64-3.79a18.7 18.7 0 0 1-3.13-5.08c-.38-.79-.16-1.31.41-1.63.47-.27 1.12-.22 1.96.14a10.26 10.26 0 0 1 3.74 2.28c.36.35.68.52.96.52.21 0 .44-.07.69-.22.37-.22.65-.6.86-1.13.21-.53.34-1.14.34-1.57 0-.5-.15-.88-.45-1.12-.52-.42-1.44-.52-2.76-.3-1.71.28-3.62 1.03-5.72 2.24l-.86.49a6.72 6.72 0 0 1-1.02.51c-.37.14-.64.17-.81.09-.18-.1-.24-.29-.2-.58.04-.3.16-.56.36-.76z" fill="#5865F2"/></svg>Discord</span><span style="display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;font-family:var(--mono);font-size:10px;color:var(--cool);letter-spacing:.08em"><svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403-.008-.005h.008l.005-.002h-.005V19.5c0-.248.009-.498.005-.746l.003-.003c.009 0 .018.001.027.002h-.02l-.011.008-.004.024zm-.006-.225h-.003l-.008.003.003.011.003-.005a.018.018 0 0 1 .005-.009zm-.004.17h.003l-.005-.002.002.001v.001zm.02-.003.003.003-.002-.002-.001-.001zM12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0z" fill="#25D366"/></svg>WhatsApp</span><span style="display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;font-family:var(--mono);font-size:10px;color:var(--cool);letter-spacing:.08em"><svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM7.64 15.52c-.38-.66-.6-1.41-.6-2.2 0-2.63 2.14-4.77 4.77-4.77 1.27 0 2.47.5 3.37 1.4.9.9 1.4 2.1 1.4 3.37 0 2.63-2.14 4.77-4.77 4.77-.79 0-1.54-.22-2.2-.6L7.5 18l.14-2.48z" fill="#3B82F6"/></svg>Signal</span><span style="display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;font-family:var(--mono);font-size:10px;color:var(--cool);letter-spacing:.08em"><svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" stroke="#7C4DFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Buzz</span></div>
1540
1553
  <div class="venues rv">
1541
1554
  <div class="venues-head"><span>models // harnesses</span><span><b>bring your own model</b> · oracle is the control plane</span></div>
1542
1555
  <div class="marquee"><div class="track" id="llm-track"></div></div>
@@ -1627,7 +1640,9 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1627
1640
  <figure class="route-proof rv" style="margin-top:18px">
1628
1641
  <svg viewBox="0 0 868 456" preserveAspectRatio="xMidYMid meet" class="route-tree" aria-label="Oracle routing tree">
1629
1642
  <style>
1630
- .route-tree line { stroke-dasharray: 20 8; animation: flow-down 3s linear infinite; opacity:1; }
1643
+ .route-tree text { fill:#f4f8fc; font-size:15px; font-weight:600; letter-spacing:.02em; paint-order:stroke; stroke:#080d15; stroke-width:2px; stroke-linejoin:round; }
1644
+ .route-tree rect { fill:#111d2b; stroke:rgba(124,196,255,.72); }
1645
+ .route-tree line { stroke:#8bd2ff; stroke-dasharray:20 8; animation:flow-down 3s linear infinite; opacity:.92; }
1631
1646
  @keyframes flow-down { to { stroke-dashoffset: -56; } }
1632
1647
  </style>
1633
1648
  <defs>
@@ -1724,12 +1739,16 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1724
1739
  <h4>Custom alerts + shadow trading</h4>
1725
1740
  <p>Follow favorite chains, wallets, funds and deployer addresses, then get notified when one opens, rotates or exits. Run the playbook in shadow mode against live prices before you arm it for live execution.</p>
1726
1741
  </article>
1742
+ <article class="strategy-card">
1743
+ <div class="mode">shadow · simulate · execute</div>
1744
+ <h4>Paper-trade until you go live</h4>
1745
+ <p>Simulate every strategy against live venue data without committing capital. Track P&L, slippage, and fill quality in shadow mode — then arm it with one flag when you're ready. No gas, no exposure, no regret trades.</p>
1746
+ </article>
1727
1747
 
1728
1748
  </div>
1729
1749
  <div class="strategy-posture"><b>Public posture:</b> research, simulation and unsigned preparation. MEV and flash-loan broadcast stays off; supported staking, LP, yield and farming actions require the user wallet to sign. Farm discovery reads live third-party yield data. Custom alerts and shadow loops notify or simulate first; live execution still requires arming and a user signature.</div>
1730
1750
 
1731
1751
  </div>
1732
- </div>
1733
1752
 
1734
1753
  <section class="section" id="chains">
1735
1754
  <p class="section-label rv">Chains</p>
@@ -1752,8 +1771,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1752
1771
  <p class="section-label rv">Oracle CLI</p>
1753
1772
  <h2 class="section-title rv">One surface. <em>Every chain.</em></h2>
1754
1773
  <div class="cli-install rv">
1755
- <div class="cli-install-cmd"><code>npm i -g @oracle-agent/oracle</code> <span class="cli-install-hint">public npm package · Node 20.19+</span></div>
1756
- <p class="cli-install-gate"><b>Locals Only</b> holders get 0% Oracle integrator fees. Everyone gets the same public CLI, desktop, source, and prepare-only product access.</p>
1774
+ <div class="cli-install-cmd"><code>oracle</code> <span class="cli-install-hint">npm install -g @oracle-agent/oracle</span></div>
1757
1775
  </div>
1758
1776
  <p class="section-lede rv">The real Oracle shell, isolated from desktop chrome. No accounts, no servers. The CLI runs on your machine and reads straight from public RPCs.</p>
1759
1777
  <p class="section-lede rv">Pin the active surface with <code style="color:var(--blue2)">/chain hyperliquid</code>, switch models, ask naturally. Oracle reads, prices, and prepares — you sign.</p>
@@ -1771,7 +1789,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1771
1789
  <span>multichain routing</span>
1772
1790
  <span>self-custody</span>
1773
1791
  </div>
1774
- <h2 class="section-title app-shot-title">Oracle Desktop App</h2>
1792
+ <h2 class="section-title app-shot-title">Oracle Desktop App <sup style="font-size:14px;color:var(--blue);font-weight:400">beta</sup></h2>
1775
1793
  <figure class="app-shot">
1776
1794
  <img src="assets/desktop-app.jpg" width="1736" height="959" loading="lazy" decoding="async" alt="Oracle desktop app showing the specialist mesh, with Portfolio, Approvals, Prepare, CLI, Farming Methods, Agent Connect, Receipts, Campaigns and Routes panes.">
1777
1795
  <figcaption>Portfolio, approvals, prepare, farming, receipts and routes in one pane.</figcaption>
@@ -1781,19 +1799,34 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1781
1799
  </div>
1782
1800
  </section>
1783
1801
 
1784
- <section class="section" id="custody" style="padding-top:clamp(48px,8vh,80px)">
1785
- <div class="strip-inner rv" style="border:1px solid var(--line);border-radius:16px;padding:22px 24px;display:flex;flex-wrap:wrap;gap:18px 28px;align-items:center;justify-content:space-between;background:linear-gradient(180deg, rgba(124,196,255,.05), transparent)">
1786
- <div class="strip-left">
1787
- <strong style="font-family:var(--display);font-weight:400;font-size:26px;display:block;margin-bottom:6px">You keep custody.</strong>
1788
- <span style="font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--mute)">oracle never holds your keys</span>
1789
- </div>
1790
- <div class="strip-right" style="display:flex;flex-wrap:wrap;gap:10px">
1791
- <span class="pill on" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid rgba(124,196,255,.35);border-radius:999px;padding:9px 12px;color:var(--blue)">Multi-wallet</span>
1792
- <span class="pill on" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid rgba(124,196,255,.35);border-radius:999px;padding:9px 12px;color:var(--blue)">Per-wallet limits</span>
1793
- <span class="pill" style="font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;border:1px solid var(--line);border-radius:999px;padding:9px 12px;color:var(--cool)">Revoke anytime</span>
1794
- </div>
1795
- </div>
1796
- </section>
1802
+ <section class="section" id="fees">
1803
+ <p class="section-label rv">Fees</p>
1804
+ <h2 class="section-title rv">5 bps. <em>Holders zero.</em></h2>
1805
+ <p class="section-lede rv">Oracle charges 5 basis points (0.05%) on swaps it routes. Eligible Hyperliquid orders can separately include a 1–2 bps builder fee after wallet approval. Both are shown before you sign.</p>
1806
+ <div class="moat-grid rv" style="margin-top:28px">
1807
+ <article class="moat-card">
1808
+ <div class="n">swap fee</div>
1809
+ <h3>5 bps per routed swap</h3>
1810
+ <p>Calculated on the output amount, deducted from the route before the quote reaches you. Oracle never touches your input — it prices the net you receive after the fee.</p>
1811
+ </article>
1812
+ <article class="moat-card">
1813
+ <div class="n">locals only</div>
1814
+ <h3>0% for NFT holders</h3>
1815
+ <p>Hold a Locals Only NFT in the wallet Oracle reads and eligible routed swaps and Hyperliquid builder orders carry zero Oracle fees. No claim, dashboard, or manual toggle.</p>
1816
+ </article>
1817
+ <article class="moat-card">
1818
+ <div class="n">operator seat</div>
1819
+ <h3>Run your own instance</h3>
1820
+ <p>The public package is free to install. Every read, route, and prepare runs on your machine. The routing fee only applies when your agent uses Oracle's aggregation.</p>
1821
+ </article>
1822
+ <article class="moat-card">
1823
+ <div class="n">builder codes</div>
1824
+ <h3>Hyperliquid builder fees</h3>
1825
+ <p>Core perps use 2 bps. HIP-3 and HIP-4 use 1 bps. Spot is set to 1 bps but remains inactive until Oracle ships spot-order preparation. Your wallet approves a 2 bps maximum before Oracle can include any builder fee. This is separate from the 5 bps routed-swap fee.</p>
1826
+ </article>
1827
+
1828
+ </div>
1829
+ </section>
1797
1830
 
1798
1831
  <div class="mega-oracle rv" aria-hidden="true">oracle</div>
1799
1832
  <footer>
@@ -1813,16 +1846,38 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1813
1846
  </div>
1814
1847
  </footer>
1815
1848
 
1816
- <script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/gsap.min.js"></script>
1817
- <script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/ScrollTrigger.min.js"></script>
1818
- <script src="https://cdn.jsdelivr.net/npm/lenis@1.3.11/dist/lenis.min.js"></script>
1819
1849
  <script>
1850
+ // Load optional animation libraries in background — page works without them
1851
+ (function loadExtras(){
1852
+ var s1 = document.createElement("script");
1853
+ s1.src = "https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/gsap.min.js";
1854
+ var s2 = document.createElement("script");
1855
+ s2.src = "https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/ScrollTrigger.min.js";
1856
+ var s3 = document.createElement("script");
1857
+ s3.src = "https://cdn.jsdelivr.net/npm/lenis@1.3.11/dist/lenis.min.js";
1858
+ var loaded = 0;
1859
+ function onLoad(){
1860
+ loaded++;
1861
+ if (loaded === 3) {
1862
+ window.__oracleMotionReady = true;
1863
+ window.dispatchEvent(new Event("oracle:motion-ready"));
1864
+ }
1865
+ }
1866
+ s1.onload = onLoad; s1.onerror = function(){ loaded++; };
1867
+ s2.onload = onLoad; s2.onerror = function(){ loaded++; };
1868
+ s3.onload = onLoad; s3.onerror = function(){ loaded++; };
1869
+ document.head.appendChild(s1);
1870
+ document.head.appendChild(s2);
1871
+ document.head.appendChild(s3);
1872
+ })();
1873
+
1820
1874
  (function () {
1821
1875
  "use strict";
1822
1876
  document.documentElement.classList.add("js");
1823
1877
 
1824
1878
  var ICON = "https://icons.llamao.fi/icons/";
1825
1879
  var CHAINS = [
1880
+ { name: "Hyperliquid", id: "999", logo: "chains/rsz_hyperliquid", note: "hyperliquid agent", badge: "route" },
1826
1881
  { name: "Ethereum", id: "1", logo: "chains/rsz_ethereum", note: "evm / bridge agent", badge: "route" },
1827
1882
  { name: "Base", id: "8453", logo: "chains/rsz_base", note: "evm / bridge agent", badge: "route" },
1828
1883
  { name: "Arbitrum", id: "42161", logo: "chains/rsz_arbitrum", note: "evm / bridge agent", badge: "route" },
@@ -1831,7 +1886,6 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1831
1886
  { name: "Avalanche", id: "43114", logo: "chains/rsz_avalanche", note: "evm / bridge agent", badge: "route" },
1832
1887
  { name: "Polygon", id: "137", logo: "chains/rsz_polygon", note: "evm / bridge agent", badge: "route" },
1833
1888
  { name: "Robinhood", id: "4663", logo: "chains/rsz_robinhood", note: "robinhood agent", badge: "route" },
1834
- { name: "Hyperliquid", id: "999", logo: "chains/rsz_hyperliquid", note: "hyperliquid agent", badge: "route" },
1835
1889
  { name: "Abstract", id: "2741", logo: "chains/rsz_abstract", note: "open / add agent", badge: "route" },
1836
1890
  { name: "Stable", id: "988", logo: "chains/rsz_stable", note: "stable agent", badge: "route" },
1837
1891
  { name: "Solana", id: "SOL", logo: "chains/rsz_solana", note: "solana agent", badge: "route" },
@@ -1874,9 +1928,14 @@ var BRAND = "brand/";
1874
1928
  { n: "Derive V2", img: "derive", cap: "read", u: "https://app.derive.xyz" },
1875
1929
  { n: "PancakeSwap AMM", img: "pancakeswap", cap: "read + quote", u: "https://pancakeswap.finance/" },
1876
1930
  { n: "Lista Lending", img: "lista", cap: "read + quote", u: "https://lista.org/lending" },
1931
+ { n: "Silhouette", cap: "read", u: "https://silhouette.exchange/" },
1932
+ { n: "Nest Exchange", cap: "read", u: "https://nestdex.org/" },
1877
1933
  { n: "Lista CDP", img: "lista", cap: "read", u: "https://lista.org/" },
1878
1934
  { n: "Benqi Lending", img: "benqi", cap: "read", u: "https://benqi.fi" },
1879
1935
  { n: "Pharaoh V3", img: "pharaoh", cap: "read + quote", u: "https://www.phar.gg/" },
1936
+ { n: "Trade XYZ", cap: "read", u: "https://trade.xyz/" },
1937
+ { n: "Markets by Kinetiq", cap: "read", u: "https://markets.xyz/" },
1938
+ { n: "Outcome", cap: "read", u: "https://outcome.xyz/" },
1880
1939
  { n: "Polymarket", wm: "polymarket.png", cap: "read", u: "https://polymarket.com/" },
1881
1940
  { n: "XSY", img: "xsy", cap: "read", u: "https://xsy.fi" },
1882
1941
  { n: "Balancer V2", wm: "balancer.svg", cap: "read + quote", u: "https://balancer.fi/" },
@@ -1902,7 +1961,9 @@ var BRAND = "brand/";
1902
1961
  { n: "Relay", wm: "relay.svg", cap: "route source", u: "https://relay.link/" },
1903
1962
  { n: "Odos", wm: "odos.svg", cap: "read + route source", u: "https://app.odos.xyz" },
1904
1963
  { n: "Jupiter", wm: "jupiter.svg", cap: "solana route source", u: "https://jup.ag/" },
1905
- { n: "Stargate", wm: "stargate.svg", cap: "read + bridge route", u: "https://stargate.finance/" }
1964
+ { n: "Stargate", wm: "stargate.svg", cap: "read + bridge route", u: "https://stargate.finance/" },
1965
+ { n: "Motion", cap: "read", u: "https://opensea.io/token/hyperevm/0xb94bbecf4050383a9f1ecd71ac8114ac930d2446" },
1966
+ { n: "LiquidLaunch", cap: "read", u: "https://liquidlaunch.app/" },
1906
1967
  ];
1907
1968
  var PROTOS_B = [
1908
1969
  { n: "Uniswap V3 LP", img: "uniswap", cap: "preview + mint/collect prepare", u: "https://app.uniswap.org/" },
@@ -1998,6 +2059,11 @@ var PROTOS_B = [
1998
2059
  function protocolName(name) {
1999
2060
  var label = name.replace(/\s+(?:DEX\s+)?V\d+(?:\s+LP)?\b/gi, "").trim();
2000
2061
  var aliases = [
2062
+ [/^Outcome\b/i, "Outcome"],
2063
+ [/^Markets by Kinetiq\b/i, "Markets by Kinetiq"],
2064
+ [/^Trade XYZ\b/i, "Trade XYZ"],
2065
+ [/^Nest Exchange\b/i, "Nest Exchange"],
2066
+ [/^Silhouette\b/i, "Silhouette"],
2001
2067
  [/^Aerodrome\b/i, "Aerodrome"],
2002
2068
  [/^Pancake(?:Swap)?\b/i, "PancakeSwap"],
2003
2069
  [/^LFJ\b/i, "LFJ"],
@@ -2023,6 +2089,9 @@ var PROTOS_B = [
2023
2089
  [/^Sky\b/i, "Sky"],
2024
2090
  [/^Binance\b/i, "Binance"],
2025
2091
  [/^Avant\b/i, "Avant"],
2092
+ [/^Motion\b/i, "Motion"],
2093
+ [/^LiquidLaunch\b/i, "LiquidLaunch"],
2094
+ [/^Felix\b/i, "Felix"],
2026
2095
  [/^Aster\b/i, "Aster"],
2027
2096
  [/^Lighter\b/i, "Lighter"],
2028
2097
  [/^stHYPE \+ wstHYPE$/i, "Valantis"]
@@ -2142,10 +2211,19 @@ renderProtocolAtlas();
2142
2211
  marqueeResizeTimer = setTimeout(syncMarqueeVelocity, 120);
2143
2212
  });
2144
2213
 
2145
- var loader = document.getElementById("loader");
2146
- window.addEventListener("load", function () {
2147
- setTimeout(function () { loader.classList.add("out"); }, 650);
2148
- });
2214
+ // Dismiss loader on DOM ready — doesn't wait for external scripts
2215
+ if (document.readyState === "loading") {
2216
+ document.addEventListener("DOMContentLoaded", function () {
2217
+ setTimeout(function () { document.getElementById("loader").classList.add("out"); }, 650);
2218
+ });
2219
+ } else {
2220
+ setTimeout(function () { document.getElementById("loader").classList.add("out"); }, 50);
2221
+ }
2222
+ // Belt-and-suspenders: if all else fails, dismiss after 4s
2223
+ setTimeout(function () {
2224
+ var l = document.getElementById("loader");
2225
+ if (l && !l.classList.contains("out")) l.classList.add("out");
2226
+ }, 4000);
2149
2227
 
2150
2228
  var reduced = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
2151
2229
  var coarse = window.matchMedia("(pointer: coarse)").matches;
@@ -2262,7 +2340,9 @@ var activeLenis = null;
2262
2340
  }
2263
2341
  document.documentElement.classList.add("premium-motion");
2264
2342
  }
2265
- initPremiumMotion();
2343
+ window.addEventListener("oracle:motion-ready", initPremiumMotion);
2344
+ if (window.__oracleMotionReady) initPremiumMotion();
2345
+
2266
2346
 
2267
2347
  function scrollToHash(hash) {
2268
2348
  var target = document.getElementById(hash.slice(1));
package/CONTRIBUTING.md DELETED
@@ -1,99 +0,0 @@
1
- # Contributing to Oracle
2
-
3
- Thanks for looking. Oracle is a control plane for money movement, so the review
4
- bar is about safety and honesty more than style.
5
-
6
- ## Before you start
7
-
8
- Run the suite:
9
-
10
- ```bash
11
- npm install
12
- npm test
13
- ```
14
-
15
- `test-baseline.json` records the current suite count and `npm run test:count`
16
- prevents silent test loss. A failure on a clean checkout is a bug; report it
17
- with the exact command output.
18
-
19
- ## The one rule that matters
20
-
21
- **The public plane may never reach a private key or a house signer.**
22
-
23
- Oracle ships the data plane, the policy plane, and the control plane. It does not
24
- ship the executor. A PR that imports signer or keystore code into public modules
25
- will fail `test/custody-boundary.test.mjs`, and the fix is not to edit the
26
- forbidden list.
27
-
28
- If your feature seems to need a key, restructure it: build an unsigned
29
- transaction or a typed-data intent and hand it back to the caller to sign.
30
-
31
- ## What we want
32
-
33
- - **Real bugs, fixed at the class level.** Reproduce it, point at the line, fix
34
- every sibling call path — not just the one that was reported.
35
- - **New chains and providers.** This is the most useful contribution. See below.
36
- - **Honest capability tiers.** If a provider can only quote, mark it
37
- `quote-only`. Do not mark it `prepare` because a prepare function exists but
38
- was never validated against a live route.
39
- - **Tests that assert invariants**, not snapshots. `assert` that a minimum output
40
- is enforced; don't freeze today's provider list into an equality check.
41
- - **Guards recomputed before signing.** A quote-time check that isn't re-verified
42
- at broadcast is decoration.
43
-
44
- ## What gets rejected
45
-
46
- - A signer, private key, or house-custody path in the public tree.
47
- - A destination allowlist that defaults to permissive, or an empty allowlist read
48
- as "allow all."
49
- - Slippage widened past the 100 bps cap to make a trade go through. Block,
50
- requote, or split instead.
51
- - A claim of execution support with no live prepare/simulate evidence.
52
- - Secrets in code, tests, fixtures, or docs — including a real wallet address as
53
- a default `from` for quotes. Use `src/data/quote-placeholder.mjs`.
54
- - "It worked when I ran it" with no test.
55
-
56
- ## Adding a provider
57
-
58
- 1. Create `src/data/providers/<name>.mjs`.
59
- 2. Export a `health()` plus the ops you actually implement.
60
- 3. Register it in `src/data/catalog.mjs` with truthful `chainIds`, `auth`, `ops`,
61
- and `execution` tier.
62
- 4. Add a test with a mocked transport. Do not require a live network for CI.
63
- 5. If it needs a key, the health check must report
64
- `{ ok: false, configured: false }` rather than throwing.
65
-
66
- ## Adding a chain
67
-
68
- 1. Add an entry to `CHAINS` in `src/chains.mjs` with its `rpcEnv` names.
69
- 2. Verify every router/venue address on-chain (`eth_getCode` must return real
70
- bytecode) before adding it to `src/venues.mjs`.
71
- 3. Comment each venue addition with how you verified it and when.
72
- 4. An unverified chain stays fail-closed. That is a safe state, not a gap.
73
-
74
- Never allowlist a router you found only in a blog post or a model's answer. The
75
- destination allowlist is the highest-leverage control in the system.
76
-
77
- ## Commits and PRs
78
-
79
- Conventional prefixes: `fix:`, `feat:`, `refactor:`, `docs:`, `test:`, `chore:`.
80
-
81
- In the PR body, state:
82
-
83
- - what broke or what's new
84
- - how you verified it (paste the real command output)
85
- - whether anything touches the custody boundary
86
-
87
- Small, reviewable PRs get merged. A 3000-line PR mixing a refactor with a policy
88
- change will sit.
89
-
90
- ## Style
91
-
92
- - ES modules, Node 20+, no build step.
93
- - No new runtime dependency without a reason in the PR description.
94
- - Comments explain *why*, not *what*. If a line encodes a hard-won fact — a
95
- provider's unit quirk, a revert cause — say so, and say how it was learned.
96
-
97
- ## License
98
-
99
- Contributions are accepted under the repository's then-current outbound license in [LICENSE](LICENSE). Current source is BUSL-1.1; npm releases `0.1.0` through `0.11.0` remain Apache-2.0.