@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.
- package/README.md +2 -2
- package/SETUP.md +4 -4
- package/dist/action-receipts.mjs +1 -0
- package/dist/action-semantics.mjs +1 -0
- package/dist/address-book.mjs +2 -0
- package/dist/bin/desk-server.mjs +59 -0
- package/dist/bin/oracle-data-mcp.mjs +8 -0
- package/dist/bin/oracle-equities.mjs +20 -0
- package/dist/bin/oracle-init.mjs +24 -0
- package/dist/bin/oracle-public-server.mjs +5 -0
- package/dist/bin/oracle-route.mjs +22 -0
- package/dist/bin/oracle-scan.mjs +18 -0
- package/dist/bin/oracle-upgrade.mjs +21 -0
- package/dist/bin/oracle.mjs +61 -0
- package/dist/chains.mjs +1 -0
- package/dist/cli/commands/auth.mjs +16 -0
- package/dist/cli/commands/bootstrap.mjs +18 -0
- package/dist/cli/commands/chain.mjs +21 -0
- package/dist/cli/commands/chat.mjs +45 -0
- package/dist/cli/commands/credential.mjs +1 -0
- package/dist/cli/commands/data-mcp.mjs +2 -0
- package/dist/cli/commands/data.mjs +12 -0
- package/dist/cli/commands/doctor.mjs +5 -0
- package/dist/cli/commands/equities.mjs +15 -0
- package/dist/cli/commands/farm.mjs +59 -0
- package/dist/cli/commands/fees.mjs +10 -0
- package/dist/cli/commands/follow.mjs +28 -0
- package/dist/cli/commands/harness.mjs +15 -0
- package/dist/cli/commands/help.mjs +1 -0
- package/dist/cli/commands/init.mjs +3 -0
- package/dist/cli/commands/mcp.mjs +36 -0
- package/dist/cli/commands/model.mjs +54 -0
- package/dist/cli/commands/plugins.mjs +43 -0
- package/dist/cli/commands/prepare.mjs +2 -0
- package/dist/cli/commands/public.mjs +3 -0
- package/dist/cli/commands/resolve.mjs +23 -0
- package/dist/cli/commands/route.mjs +2 -0
- package/dist/cli/commands/runner.mjs +1 -0
- package/dist/cli/commands/scan.mjs +2 -0
- package/dist/cli/commands/setup.mjs +34 -0
- package/dist/cli/commands/sign.mjs +4 -0
- package/dist/cli/commands/signer.mjs +1 -0
- package/dist/cli/commands/swap.mjs +36 -0
- package/dist/cli/commands/upgrade.mjs +2 -0
- package/dist/cli/commands/vault.mjs +1 -0
- package/dist/cli/commands/version.mjs +2 -0
- package/dist/data/desk-data.mjs +55 -0
- package/dist/data/names.mjs +2 -0
- package/dist/data/providers/farming.mjs +2 -0
- package/dist/equities/index.mjs +1 -0
- package/dist/index.mjs +60 -0
- package/dist/nft-gas-war-guard.mjs +1 -0
- package/dist/onboarding/harness-configs.mjs +4 -0
- package/dist/portfolio-risk.mjs +1 -0
- package/dist/prepare-envelope.mjs +1 -0
- package/dist/public-api/agent-grants.mjs +3 -0
- package/dist/public-control/policy-schema.mjs +1 -0
- package/dist/router/index.mjs +2 -0
- package/dist/scanner/index.mjs +4 -0
- package/dist/signals/index.mjs +1 -0
- package/dist/watch-preferences.mjs +1 -0
- package/package.json +32 -78
- package/public/oracle-splash/_variants/ice.html +5 -18
- package/public/oracle-splash/_variants/ivory.html +5 -18
- package/public/oracle-splash/index.html +114 -34
- package/CONTRIBUTING.md +0 -99
- package/bin/desk-server.mjs +0 -473
- package/bin/oracle-data-mcp.mjs +0 -1252
- package/bin/oracle-equities.mjs +0 -168
- package/bin/oracle-init.mjs +0 -525
- package/bin/oracle-public-server.mjs +0 -36
- package/bin/oracle-route.mjs +0 -254
- package/bin/oracle-scan.mjs +0 -192
- package/bin/oracle-upgrade.mjs +0 -42
- package/bin/oracle.mjs +0 -34
- package/docs/adding-a-chain.md +0 -229
- package/docs/architecture.md +0 -139
- package/docs/buzz-integration.md +0 -115
- package/docs/cli.md +0 -143
- package/docs/connectors.md +0 -13
- package/docs/hyperliquid-builder-code.md +0 -50
- package/docs/locals-only-fee-waiver.md +0 -34
- package/docs/oracle-pack-standard.md +0 -29
- package/docs/profiles.md +0 -151
- package/docs/public-surface.md +0 -206
- package/examples/add-a-chain.mjs +0 -65
- package/examples/oracle-pack-template.mjs +0 -38
- package/examples/research-a-token.mjs +0 -70
- package/plugins/oracle-owner-gate/__init__.py +0 -288
- package/plugins/oracle-owner-gate/plugin.yaml +0 -9
- package/protocols/templates/safe-erc20/SECURITY.md +0 -16
- package/protocols/templates/safe-erc20/foundry.toml +0 -12
- package/protocols/templates/safe-erc20/remappings.txt +0 -2
- package/protocols/templates/safe-erc20/src/SafeERC20.sol +0 -53
- package/protocols/templates/safe-erc20/test/SafeERC20.t.sol +0 -72
- package/scripts/adversarial-bench.mjs +0 -114
- package/scripts/build-dist.mjs +0 -119
- package/scripts/build-inscription.py +0 -230
- package/scripts/check-doc-drift.mjs +0 -123
- package/scripts/check-test-count.mjs +0 -105
- package/scripts/e2e-hl-markets.mjs +0 -21
- package/scripts/e2e-hl-perps.mjs +0 -48
- package/scripts/e2e-hypercore-staking.mjs +0 -128
- package/scripts/e2e-solana-bitcoin.mjs +0 -183
- package/scripts/guard-publish.mjs +0 -22
- package/scripts/protocol-template-gate.mjs +0 -15
- package/scripts/public-api-scan.mjs +0 -23
- package/scripts/publish-dist.mjs +0 -67
- package/scripts/record-hero-cli.sh +0 -80
- package/scripts/secret-scan.mjs +0 -169
- package/scripts/smoke-dist-bins.mjs +0 -89
- package/scripts/verify-dist.mjs +0 -29
- package/scripts/verify-v3-venues.mjs +0 -233
- package/skins/oracle.yaml +0 -56
- package/src/action-receipts.mjs +0 -265
- package/src/action-semantics.mjs +0 -62
- package/src/address-book.mjs +0 -208
- package/src/agent-auth.mjs +0 -206
- package/src/approval-guard.mjs +0 -282
- package/src/attestation-secret.mjs +0 -94
- package/src/audit-log.mjs +0 -196
- package/src/auth/oauth.mjs +0 -672
- package/src/auto-slippage.mjs +0 -378
- package/src/capability-posture.mjs +0 -125
- package/src/cards.mjs +0 -422
- package/src/chains.mjs +0 -62
- package/src/cli/chain-catalog.mjs +0 -215
- package/src/cli/chain-state.mjs +0 -74
- package/src/cli/commands/auth.mjs +0 -193
- package/src/cli/commands/bootstrap.mjs +0 -87
- package/src/cli/commands/chain.mjs +0 -143
- package/src/cli/commands/chat.mjs +0 -465
- package/src/cli/commands/credential.mjs +0 -9
- package/src/cli/commands/data-mcp.mjs +0 -18
- package/src/cli/commands/data.mjs +0 -75
- package/src/cli/commands/doctor.mjs +0 -136
- package/src/cli/commands/equities.mjs +0 -41
- package/src/cli/commands/farm.mjs +0 -129
- package/src/cli/commands/fees.mjs +0 -109
- package/src/cli/commands/follow.mjs +0 -130
- package/src/cli/commands/harness.mjs +0 -63
- package/src/cli/commands/help.mjs +0 -7
- package/src/cli/commands/init.mjs +0 -27
- package/src/cli/commands/mcp.mjs +0 -154
- package/src/cli/commands/model.mjs +0 -106
- package/src/cli/commands/plugins.mjs +0 -275
- package/src/cli/commands/prepare.mjs +0 -12
- package/src/cli/commands/public.mjs +0 -20
- package/src/cli/commands/resolve.mjs +0 -64
- package/src/cli/commands/route.mjs +0 -12
- package/src/cli/commands/runner.mjs +0 -9
- package/src/cli/commands/scan.mjs +0 -12
- package/src/cli/commands/setup.mjs +0 -294
- package/src/cli/commands/sign.mjs +0 -21
- package/src/cli/commands/signer.mjs +0 -9
- package/src/cli/commands/swap.mjs +0 -102
- package/src/cli/commands/upgrade.mjs +0 -12
- package/src/cli/commands/vault.mjs +0 -9
- package/src/cli/commands/version.mjs +0 -22
- package/src/cli/first-run.mjs +0 -23
- package/src/cli/kernel.mjs +0 -262
- package/src/cli/mcp-targets/chatgpt.mjs +0 -51
- package/src/cli/mcp-targets/claude-code.mjs +0 -39
- package/src/cli/mcp-targets/claude-desktop.mjs +0 -24
- package/src/cli/mcp-targets/codex.mjs +0 -41
- package/src/cli/mcp-targets/cursor.mjs +0 -32
- package/src/cli/mcp-targets/shared.mjs +0 -71
- package/src/cli/mcp-targets/vscode.mjs +0 -39
- package/src/cli/messaging-platforms.mjs +0 -217
- package/src/cli/model-config.mjs +0 -78
- package/src/cli/operator-dispatch.mjs +0 -194
- package/src/cli/oracle-harness.py +0 -415
- package/src/cli/paths.mjs +0 -107
- package/src/cli/runtime.mjs +0 -351
- package/src/cli/setup-state.mjs +0 -168
- package/src/cli/spawn-child.mjs +0 -43
- package/src/data/catalog.mjs +0 -858
- package/src/data/desk-data.mjs +0 -877
- package/src/data/http.mjs +0 -253
- package/src/data/names.mjs +0 -188
- package/src/data/provider-endpoint.mjs +0 -94
- package/src/data/providers/aave-v3.mjs +0 -139
- package/src/data/providers/across-bridge.mjs +0 -41
- package/src/data/providers/aerodrome.mjs +0 -245
- package/src/data/providers/aevo.mjs +0 -33
- package/src/data/providers/approval-indexer.mjs +0 -133
- package/src/data/providers/approvals.mjs +0 -594
- package/src/data/providers/babylon-staking.mjs +0 -149
- package/src/data/providers/balancer.mjs +0 -209
- package/src/data/providers/beefy-yields.mjs +0 -45
- package/src/data/providers/birdeye-tokens.mjs +0 -33
- package/src/data/providers/bisq-markets.mjs +0 -145
- package/src/data/providers/bitcoin-esplora.mjs +0 -216
- package/src/data/providers/bitcoin-meta.mjs +0 -378
- package/src/data/providers/blockscout.mjs +0 -14
- package/src/data/providers/bob-rootstock.mjs +0 -198
- package/src/data/providers/braiins-insights.mjs +0 -103
- package/src/data/providers/bridge-aggregator.mjs +0 -259
- package/src/data/providers/bridges.mjs +0 -242
- package/src/data/providers/bungee.mjs +0 -29
- package/src/data/providers/celestia-da.mjs +0 -38
- package/src/data/providers/changenow.mjs +0 -135
- package/src/data/providers/compound.mjs +0 -32
- package/src/data/providers/connext.mjs +0 -28
- package/src/data/providers/convex.mjs +0 -30
- package/src/data/providers/cow-protocol.mjs +0 -110
- package/src/data/providers/cowswap.mjs +0 -415
- package/src/data/providers/curve.mjs +0 -201
- package/src/data/providers/das-assets.mjs +0 -59
- package/src/data/providers/debridge.mjs +0 -109
- package/src/data/providers/defillama.mjs +0 -88
- package/src/data/providers/dexscreener.mjs +0 -43
- package/src/data/providers/drift.mjs +0 -32
- package/src/data/providers/dydx.mjs +0 -41
- package/src/data/providers/evm-rpc.mjs +0 -225
- package/src/data/providers/farming.mjs +0 -291
- package/src/data/providers/geckoterminal.mjs +0 -34
- package/src/data/providers/gmx.mjs +0 -496
- package/src/data/providers/hiro-stacks.mjs +0 -150
- package/src/data/providers/hl-assets.mjs +0 -165
- package/src/data/providers/hl-info.mjs +0 -108
- package/src/data/providers/hl-markets.mjs +0 -210
- package/src/data/providers/hl-outcome.mjs +0 -61
- package/src/data/providers/hl-perps.mjs +0 -419
- package/src/data/providers/hl-staking.mjs +0 -353
- package/src/data/providers/hl-ws.mjs +0 -119
- package/src/data/providers/hyperevm-dex.mjs +0 -49
- package/src/data/providers/jito-mev.mjs +0 -117
- package/src/data/providers/jupiter-venues.mjs +0 -119
- package/src/data/providers/jupiter.mjs +0 -315
- package/src/data/providers/kamino-strategies.mjs +0 -143
- package/src/data/providers/l2beat-tvl.mjs +0 -42
- package/src/data/providers/lifi.mjs +0 -166
- package/src/data/providers/liquid-esplora.mjs +0 -152
- package/src/data/providers/magiceden-ordinals.mjs +0 -141
- package/src/data/providers/magiceden-sol.mjs +0 -406
- package/src/data/providers/mempool-lightning.mjs +0 -144
- package/src/data/providers/mempool-mining.mjs +0 -142
- package/src/data/providers/meteora-dlmm.mjs +0 -168
- package/src/data/providers/morpho.mjs +0 -177
- package/src/data/providers/nft-gallery.mjs +0 -163
- package/src/data/providers/nft-portfolio.mjs +0 -494
- package/src/data/providers/odos.mjs +0 -156
- package/src/data/providers/ondo.mjs +0 -31
- package/src/data/providers/oneinch.mjs +0 -174
- package/src/data/providers/opensea-multichain.mjs +0 -136
- package/src/data/providers/opensea-nft.mjs +0 -371
- package/src/data/providers/orca.mjs +0 -29
- package/src/data/providers/ordinals-runes.mjs +0 -180
- package/src/data/providers/pancakeswap.mjs +0 -28
- package/src/data/providers/paraswap.mjs +0 -125
- package/src/data/providers/pendle.mjs +0 -188
- package/src/data/providers/poly-clob.mjs +0 -283
- package/src/data/providers/poly-public.mjs +0 -96
- package/src/data/providers/poly-ws.mjs +0 -103
- package/src/data/providers/polygon-staking.mjs +0 -227
- package/src/data/providers/portfolio-history.mjs +0 -394
- package/src/data/providers/portfolio.mjs +0 -600
- package/src/data/providers/pyth-price-feeds.mjs +0 -172
- package/src/data/providers/raydium.mjs +0 -35
- package/src/data/providers/relayscan-mev.mjs +0 -72
- package/src/data/providers/rfq.mjs +0 -15
- package/src/data/providers/rh-agent.mjs +0 -59
- package/src/data/providers/sanctum-lst.mjs +0 -180
- package/src/data/providers/satflow.mjs +0 -341
- package/src/data/providers/signed-material-guard.mjs +0 -108
- package/src/data/providers/solana-rpc.mjs +0 -197
- package/src/data/providers/solend-lending.mjs +0 -166
- package/src/data/providers/spark-lend.mjs +0 -42
- package/src/data/providers/squid-router.mjs +0 -29
- package/src/data/providers/stargate.mjs +0 -29
- package/src/data/providers/sushiswap.mjs +0 -30
- package/src/data/providers/symbiotic-restaking.mjs +0 -41
- package/src/data/providers/thorchain.mjs +0 -36
- package/src/data/providers/traderjoe.mjs +0 -28
- package/src/data/providers/twap.mjs +0 -152
- package/src/data/providers/uniswap-v3.mjs +0 -457
- package/src/data/providers/uniswap-v4.mjs +0 -414
- package/src/data/providers/vertex.mjs +0 -41
- package/src/data/providers/wallet-watch.mjs +0 -264
- package/src/data/providers/wormhole.mjs +0 -28
- package/src/data/providers/yearn.mjs +0 -31
- package/src/data/providers/zerox.mjs +0 -167
- package/src/data/public-api-scan.mjs +0 -61
- package/src/data/quote-placeholder.mjs +0 -31
- package/src/desk/swap-prepare.mjs +0 -194
- package/src/equities/bridge.mjs +0 -388
- package/src/equities/fixtures/bridge_routes.json +0 -159
- package/src/equities/fixtures/dst_transitions.json +0 -29
- package/src/equities/fixtures/equity_dex_pools.json +0 -154
- package/src/equities/fixtures/hip3_l2books.json +0 -2711
- package/src/equities/fixtures/nyse_holidays.json +0 -1
- package/src/equities/fixtures/oracles.json +0 -100
- package/src/equities/fixtures/rh_pool_state.json +0 -244
- package/src/equities/fixtures/solana_xstocks.json +0 -704
- package/src/equities/fixtures/ton_xstocks.json +0 -35
- package/src/equities/fixtures/universe.json +0 -411
- package/src/equities/fixtures/venues.json +0 -3542
- package/src/equities/fixtures.mjs +0 -405
- package/src/equities/funding.mjs +0 -142
- package/src/equities/index.mjs +0 -166
- package/src/equities/liveness.mjs +0 -148
- package/src/equities/marketHours.mjs +0 -249
- package/src/equities/normalize.mjs +0 -295
- package/src/equities/num.mjs +0 -146
- package/src/equities/prepare.mjs +0 -95
- package/src/equities/rank.mjs +0 -260
- package/src/equities/sourceNum.mjs +0 -69
- package/src/equities/types.mjs +0 -220
- package/src/equities/venues/arcus-perp.mjs +0 -84
- package/src/equities/venues/arcus-spot.mjs +0 -105
- package/src/equities/venues/hyperliquid-hip3.mjs +0 -224
- package/src/equities/venues/rh-uniswap.mjs +0 -216
- package/src/equities/venues/solana-xstocks.mjs +0 -139
- package/src/equities/venues/ton-stonfi.mjs +0 -139
- package/src/exact-integer.mjs +0 -72
- package/src/exec-policy.mjs +0 -419
- package/src/flags.mjs +0 -15
- package/src/fresh-window.mjs +0 -76
- package/src/gmx-attestation.mjs +0 -176
- package/src/index.mjs +0 -107
- package/src/licensing/locals-only.mjs +0 -25
- package/src/nft-gas-war-guard.mjs +0 -139
- package/src/onboarding/agent-keys.mjs +0 -161
- package/src/onboarding/harness-configs.mjs +0 -102
- package/src/onboarding/index.mjs +0 -18
- package/src/onboarding/tiers.mjs +0 -139
- package/src/oracle-env.mjs +0 -55
- package/src/package-manifest.mjs +0 -42
- package/src/plugins/agent-plugin-loader.mjs +0 -225
- package/src/portfolio-risk.mjs +0 -170
- package/src/prepare-envelope.mjs +0 -204
- package/src/profile-upgrade.mjs +0 -277
- package/src/protocol-execution.mjs +0 -84
- package/src/protocol-templates/gate.mjs +0 -179
- package/src/protocol-templates/prepare-deploy.mjs +0 -81
- package/src/public-api/agent-grants.mjs +0 -57
- package/src/public-api/buzz-integration.mjs +0 -267
- package/src/public-api/connect-agent.mjs +0 -424
- package/src/public-api/grants.mjs +0 -142
- package/src/public-api/http.mjs +0 -707
- package/src/public-api/metering.mjs +0 -111
- package/src/public-control/aa-adapter.mjs +0 -402
- package/src/public-control/build-registry.mjs +0 -227
- package/src/public-control/bundler-client.mjs +0 -357
- package/src/public-control/grant-indexer.mjs +0 -296
- package/src/public-control/policy-render.mjs +0 -69
- package/src/public-control/policy-schema.mjs +0 -322
- package/src/public-control/runtime-config.mjs +0 -275
- package/src/public-control/session-key-model.mjs +0 -379
- package/src/public-control/session-orchestrator.mjs +0 -418
- package/src/rfq/intent.mjs +0 -180
- package/src/rfq/sources.mjs +0 -181
- package/src/route-attestation.mjs +0 -132
- package/src/router/best-execution.mjs +0 -326
- package/src/router/index.mjs +0 -250
- package/src/router/integrator-fee.mjs +0 -135
- package/src/router/prepare-bridge.mjs +0 -293
- package/src/router/prepare-route.mjs +0 -398
- package/src/router/proposal.mjs +0 -311
- package/src/router/risk-classifier.mjs +0 -119
- package/src/router/route-sources.mjs +0 -364
- package/src/scanner/chains.config.mjs +0 -543
- package/src/scanner/contract.mjs +0 -270
- package/src/scanner/evm-scanner.mjs +0 -394
- package/src/scanner/index.mjs +0 -9
- package/src/scanner/v2-venue.mjs +0 -351
- package/src/scanner/v3-venue.mjs +0 -308
- package/src/scopes.mjs +0 -44
- package/src/sell-simulation.mjs +0 -167
- package/src/signals/engine.mjs +0 -146
- package/src/signals/index.mjs +0 -1
- package/src/token-transfer-guard.mjs +0 -188
- package/src/tui/app.mjs +0 -438
- package/src/tui/backend.mjs +0 -215
- package/src/tui/format.mjs +0 -272
- package/src/tui/gateway-client.mjs +0 -177
- package/src/tui/input.mjs +0 -501
- package/src/tui/memory.mjs +0 -105
- package/src/tui/meta-learn.mjs +0 -85
- package/src/tui/renderer.mjs +0 -443
- package/src/tui/scheduler.mjs +0 -205
- package/src/tui/skills-loader.mjs +0 -140
- package/src/tui/standalone-client.mjs +0 -752
- package/src/tui/theme.mjs +0 -81
- package/src/vault-attestation.mjs +0 -146
- package/src/venues.mjs +0 -206
- package/src/watch-preferences.mjs +0 -85
- /package/{profiles → dist/assets/profiles}/_template/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/_template/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/bitcoin-agent/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/bitcoin-agent/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/hyperliquid-agent/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/hyperliquid-agent/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/oracle/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/oracle/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/polymarket-agent/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/polymarket-agent/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/profile.schema.json +0 -0
- /package/{profiles → dist/assets/profiles}/protocol-builder/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/protocol-builder/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/robinhood-agent/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/robinhood-agent/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/solana-agent/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/solana-agent/profile.json +0 -0
- /package/{profiles → dist/assets/profiles}/stable-agent/SOUL.md +0 -0
- /package/{profiles → dist/assets/profiles}/stable-agent/profile.json +0 -0
- /package/{skills → dist/assets/skills}/balance/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/bitcoin-l1.md +0 -0
- /package/{skills → dist/assets/skills}/chain-defi-ecosystem-profiling.md +0 -0
- /package/{skills → dist/assets/skills}/evm-contract-research.md +0 -0
- /package/{skills → dist/assets/skills}/hyperliquid.md +0 -0
- /package/{skills → dist/assets/skills}/multichain-exec-desk.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-action-semantics/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-best-execution/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-best-execution.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-bitcoin/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-chain-graphs-telegram-cards/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-chat/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-chat/chain.SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-chat/setup.SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-circuit-breaker/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-contract-research/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-desk/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-desk.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-dex-launch/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-equities/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-grants/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-hypercore-staking/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-hyperliquid/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-meme-token-sniper/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-multichain-nft-launch/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-multichain-token-launch/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-nft-gacha-launch/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-nft-mint-gas-war/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-polymarket/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-protocol-builder/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-protocol-security/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-public-product/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-receipts/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-receipts.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-rfq-tokenized-assets/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-smart-wallet-scanner/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-solana/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-solana-nft/SKILL.md +0 -0
- /package/{skills → dist/assets/skills}/oracle-token-research/SKILL.md +0 -0
- /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 /
|
|
961
|
+
<p class="hero-note-line">macOS · Windows · Linux / 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
|
|
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.
|
|
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 /
|
|
963
|
+
<p class="hero-note-line">macOS · Windows · Linux / 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
|
|
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.
|
|
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="
|
|
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 /
|
|
1191
|
+
<p class="hero-note-line">macOS · Windows · Linux / 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>
|
|
1473
|
-
<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
|
-
|
|
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
|
|
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>
|
|
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="
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
<div class="
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
</div>
|
|
1796
|
-
</
|
|
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
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
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.
|