@oracle-agent/oracle 0.14.0 → 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 -168
- 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 -241
- 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 -257
- 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
package/src/cli/chain-state.mjs
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { findWorkingChain } from "./chain-catalog.mjs";
|
|
4
|
-
import { homeDir, ensureDir, oracleConfigDir } from "./paths.mjs";
|
|
5
|
-
|
|
6
|
-
export function activeChainPath() {
|
|
7
|
-
return path.join(oracleConfigDir(), "active-chain.json");
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export function readActiveChain() {
|
|
11
|
-
const p = activeChainPath();
|
|
12
|
-
if (!fs.existsSync(p)) return null;
|
|
13
|
-
try {
|
|
14
|
-
const raw = JSON.parse(fs.readFileSync(p, "utf8"));
|
|
15
|
-
if (!raw || typeof raw !== "object" || !raw.key) return null;
|
|
16
|
-
const chain = findWorkingChain(raw.key);
|
|
17
|
-
if (!chain) return null;
|
|
18
|
-
return {
|
|
19
|
-
key: chain.key,
|
|
20
|
-
chainId: chain.chainId,
|
|
21
|
-
name: chain.name,
|
|
22
|
-
agent: chain.agent,
|
|
23
|
-
selectedAt: raw.selectedAt || null,
|
|
24
|
-
};
|
|
25
|
-
} catch {
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function writeActiveChain(query) {
|
|
31
|
-
const chain = findWorkingChain(query);
|
|
32
|
-
if (!chain) {
|
|
33
|
-
const err = new Error(`unknown chain '${query}'`);
|
|
34
|
-
err.code = "UNKNOWN_CHAIN";
|
|
35
|
-
throw err;
|
|
36
|
-
}
|
|
37
|
-
ensureDir(oracleConfigDir());
|
|
38
|
-
const payload = {
|
|
39
|
-
key: chain.key,
|
|
40
|
-
chainId: chain.chainId,
|
|
41
|
-
name: chain.name,
|
|
42
|
-
agent: chain.agent,
|
|
43
|
-
selectedAt: new Date().toISOString(),
|
|
44
|
-
};
|
|
45
|
-
fs.writeFileSync(activeChainPath(), JSON.stringify(payload, null, 2) + "\n", {
|
|
46
|
-
mode: 0o600,
|
|
47
|
-
});
|
|
48
|
-
return payload;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function clearActiveChain() {
|
|
52
|
-
const p = activeChainPath();
|
|
53
|
-
if (fs.existsSync(p)) fs.unlinkSync(p);
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export function activeChainEnv(extra = {}) {
|
|
58
|
-
const active = readActiveChain();
|
|
59
|
-
const env = { ...process.env, ...extra };
|
|
60
|
-
if (!active) return env;
|
|
61
|
-
env.ORACLE_ACTIVE_CHAIN = active.key;
|
|
62
|
-
env.ORACLE_ACTIVE_CHAIN_ID = String(active.chainId);
|
|
63
|
-
env.ORACLE_ACTIVE_AGENT = active.agent || "oracle";
|
|
64
|
-
return env;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export default {
|
|
68
|
-
activeChainPath,
|
|
69
|
-
readActiveChain,
|
|
70
|
-
writeActiveChain,
|
|
71
|
-
clearActiveChain,
|
|
72
|
-
activeChainEnv,
|
|
73
|
-
homeDir,
|
|
74
|
-
};
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
import { writeModelConfig } from "../model-config.mjs";
|
|
2
|
-
import {
|
|
3
|
-
getOAuthStore,
|
|
4
|
-
loginOAuth,
|
|
5
|
-
oauthProviderConfig,
|
|
6
|
-
oauthProviderId,
|
|
7
|
-
} from "../../auth/oauth.mjs";
|
|
8
|
-
|
|
9
|
-
const API_PROVIDERS = Object.freeze({
|
|
10
|
-
openrouter: { model: "openrouter/auto" },
|
|
11
|
-
openai: { model: "gpt-4.1-mini" },
|
|
12
|
-
xai: { model: "grok-4.5" },
|
|
13
|
-
deepseek: { model: "deepseek-chat" },
|
|
14
|
-
gemini: { model: "gemini-2.5-flash" },
|
|
15
|
-
custom: { model: "" },
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
function option(args, name) {
|
|
19
|
-
const index = args.indexOf(name);
|
|
20
|
-
return index >= 0 && args[index + 1] ? args[index + 1] : "";
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
async function readAllStdin() {
|
|
24
|
-
let value = "";
|
|
25
|
-
for await (const chunk of process.stdin) value += chunk;
|
|
26
|
-
return value.trim();
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function readHidden(prompt = "API key: ") {
|
|
30
|
-
if (!process.stdin.isTTY || !process.stdin.setRawMode) {
|
|
31
|
-
throw new Error("non-interactive API-key input requires --stdin");
|
|
32
|
-
}
|
|
33
|
-
process.stdout.write(prompt);
|
|
34
|
-
return new Promise((resolve, reject) => {
|
|
35
|
-
let value = "";
|
|
36
|
-
const cleanup = () => {
|
|
37
|
-
process.stdin.off("data", onData);
|
|
38
|
-
process.stdin.setRawMode(false);
|
|
39
|
-
process.stdin.pause();
|
|
40
|
-
process.stdout.write("\n");
|
|
41
|
-
};
|
|
42
|
-
const onData = (chunk) => {
|
|
43
|
-
const text = String(chunk);
|
|
44
|
-
for (const character of text) {
|
|
45
|
-
if (character === "\r" || character === "\n") {
|
|
46
|
-
cleanup();
|
|
47
|
-
resolve(value.trim());
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
if (character === "\u0003") {
|
|
51
|
-
cleanup();
|
|
52
|
-
reject(new Error("cancelled"));
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
if (character === "\u007f" || character === "\b") value = value.slice(0, -1);
|
|
56
|
-
else value += character;
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
process.stdin.setRawMode(true);
|
|
60
|
-
process.stdin.resume();
|
|
61
|
-
process.stdin.on("data", onData);
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function selection(provider, model, { baseUrl = "" } = {}) {
|
|
66
|
-
if (!model) throw new Error(`${provider} provider requires --model`);
|
|
67
|
-
const config = { backend: "standalone", provider, model };
|
|
68
|
-
if (provider === "custom") {
|
|
69
|
-
if (!baseUrl) throw new Error("custom provider requires --base-url");
|
|
70
|
-
config.baseUrl = baseUrl;
|
|
71
|
-
}
|
|
72
|
-
return config;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function saveSelection(provider, model, options = {}) {
|
|
76
|
-
return writeModelConfig(selection(provider, model, options));
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function printStatus(status) {
|
|
80
|
-
process.stdout.write(`storage: ${status.storage}\n`);
|
|
81
|
-
const oauth = Object.entries(status.providers || {});
|
|
82
|
-
const apiKeys = Object.entries(status.apiKeys || {});
|
|
83
|
-
if (!oauth.length && !apiKeys.length) {
|
|
84
|
-
process.stdout.write("no credentials configured\n");
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
for (const [provider, value] of oauth) {
|
|
88
|
-
const expiry = value.expiresAt ? new Date(value.expiresAt).toISOString() : "unknown";
|
|
89
|
-
process.stdout.write(`${provider}: ${value.loggedIn ? "logged in" : "missing"}, expires ${expiry}\n`);
|
|
90
|
-
}
|
|
91
|
-
for (const [provider, value] of apiKeys) {
|
|
92
|
-
process.stdout.write(`${provider}: API key ${value.configured ? "configured" : "missing"}\n`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function usage() {
|
|
97
|
-
return [
|
|
98
|
-
"oracle auth, configure OAuth or API-key authentication",
|
|
99
|
-
"",
|
|
100
|
-
" oracle auth login claude|codex|grok [--model MODEL] [--no-browser]",
|
|
101
|
-
" oracle auth api-key PROVIDER [--model MODEL] [--base-url URL]",
|
|
102
|
-
" printf '%s\\n' \"$KEY\" | oracle auth api-key PROVIDER --stdin",
|
|
103
|
-
" oracle auth status [--json]",
|
|
104
|
-
" oracle auth logout PROVIDER",
|
|
105
|
-
"",
|
|
106
|
-
"OAuth and API keys are additive. Select any compatible model with oracle model --provider PROVIDER --model MODEL.",
|
|
107
|
-
].join("\n");
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export default {
|
|
111
|
-
name: "auth",
|
|
112
|
-
summary: "login with Claude, Codex, or Grok OAuth; store provider API keys",
|
|
113
|
-
group: "read",
|
|
114
|
-
usage: usage(),
|
|
115
|
-
async run(ctx) {
|
|
116
|
-
const args = [...ctx.argv];
|
|
117
|
-
const action = args.shift() || "status";
|
|
118
|
-
const store = getOAuthStore();
|
|
119
|
-
try {
|
|
120
|
-
if (action === "status") {
|
|
121
|
-
const status = store.status();
|
|
122
|
-
if (args.includes("--json")) process.stdout.write(`${JSON.stringify(status, null, 2)}\n`);
|
|
123
|
-
else printStatus(status);
|
|
124
|
-
return 0;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
if (action === "login") {
|
|
128
|
-
const requested = args.find((value) => !value.startsWith("-"));
|
|
129
|
-
if (!requested) throw new Error("usage: oracle auth login claude|codex|grok");
|
|
130
|
-
const config = oauthProviderConfig(requested);
|
|
131
|
-
const model = option(args, "--model") || config.model;
|
|
132
|
-
selection(config.id, model);
|
|
133
|
-
const credential = await loginOAuth(config.id, {
|
|
134
|
-
openFn: args.includes("--no-browser") ? () => false : undefined,
|
|
135
|
-
});
|
|
136
|
-
await store.withLock(async () => {
|
|
137
|
-
const previous = store.get(config.id);
|
|
138
|
-
store.set(config.id, credential);
|
|
139
|
-
try {
|
|
140
|
-
saveSelection(config.id, model);
|
|
141
|
-
} catch (error) {
|
|
142
|
-
if (previous) store.set(config.id, previous);
|
|
143
|
-
else store.remove(config.id);
|
|
144
|
-
throw error;
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
process.stdout.write(`${config.id}: logged in, stored in ${store.storage}\n`);
|
|
148
|
-
return 0;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
if (action === "api-key") {
|
|
152
|
-
const provider = String(args.find((value) => !value.startsWith("-")) || "").trim().toLowerCase();
|
|
153
|
-
if (!provider) throw new Error("usage: oracle auth api-key PROVIDER [--stdin]");
|
|
154
|
-
if (!Object.hasOwn(API_PROVIDERS, provider)) throw new Error(`unsupported API-key provider: ${provider}`);
|
|
155
|
-
const model = option(args, "--model") || API_PROVIDERS[provider].model;
|
|
156
|
-
const baseUrl = option(args, "--base-url");
|
|
157
|
-
selection(provider, model, { baseUrl });
|
|
158
|
-
const apiKey = args.includes("--stdin") ? await readAllStdin() : await readHidden();
|
|
159
|
-
await store.withLock(async () => {
|
|
160
|
-
const previous = store.getApiKey(provider);
|
|
161
|
-
store.setApiKey(provider, apiKey);
|
|
162
|
-
try {
|
|
163
|
-
saveSelection(provider, model, { baseUrl });
|
|
164
|
-
} catch (error) {
|
|
165
|
-
if (previous) store.setApiKey(provider, previous);
|
|
166
|
-
else store.removeApiKey(provider);
|
|
167
|
-
throw error;
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
process.stdout.write(`${provider}: API key configured in ${store.storage}\n`);
|
|
171
|
-
return 0;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
if (action === "logout") {
|
|
175
|
-
const requested = String(args.find((value) => !value.startsWith("-")) || "").trim().toLowerCase();
|
|
176
|
-
if (!requested) throw new Error("usage: oracle auth logout PROVIDER");
|
|
177
|
-
let removedOAuth = false;
|
|
178
|
-
try {
|
|
179
|
-
removedOAuth = store.remove(oauthProviderId(requested));
|
|
180
|
-
} catch {}
|
|
181
|
-
const removedApiKey = store.removeApiKey(requested);
|
|
182
|
-
if (!removedOAuth && !removedApiKey) throw new Error(`${requested}: no local credential found`);
|
|
183
|
-
process.stdout.write(`${requested}: local credential removed\n`);
|
|
184
|
-
return 0;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
throw new Error(`unknown auth action: ${action}`);
|
|
188
|
-
} catch (error) {
|
|
189
|
-
process.stderr.write(`oracle auth: ${error.message}\n`);
|
|
190
|
-
return 1;
|
|
191
|
-
}
|
|
192
|
-
},
|
|
193
|
-
};
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
HERMES_PYPI,
|
|
3
|
-
installManagedHermes,
|
|
4
|
-
runtimeStatus,
|
|
5
|
-
runtimeVenvDir,
|
|
6
|
-
} from "../runtime.mjs";
|
|
7
|
-
|
|
8
|
-
function usage() {
|
|
9
|
-
return [
|
|
10
|
-
"oracle bootstrap - optionally install an isolated Hermes compatibility runtime",
|
|
11
|
-
"",
|
|
12
|
-
" oracle bootstrap install into ~/.config/oracle/runtime/venv",
|
|
13
|
-
" oracle bootstrap --upgrade upgrade the managed runtime",
|
|
14
|
-
" oracle bootstrap --status show what runtime oracle would use",
|
|
15
|
-
" oracle bootstrap --json machine-readable status",
|
|
16
|
-
"",
|
|
17
|
-
"notes:",
|
|
18
|
-
" a hermes on PATH always wins; bootstrap never touches system python",
|
|
19
|
-
" read/prepare commands (chain, scan, route, data) never need this",
|
|
20
|
-
].join("\n");
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export default {
|
|
24
|
-
name: "bootstrap",
|
|
25
|
-
summary: "optionally install a Hermes compatibility runtime",
|
|
26
|
-
group: "read",
|
|
27
|
-
usage: usage(),
|
|
28
|
-
async run(ctx) {
|
|
29
|
-
const args = ctx.argv;
|
|
30
|
-
if (args.includes("-h") || args.includes("--help")) {
|
|
31
|
-
process.stdout.write(usage() + "\n");
|
|
32
|
-
return 0;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const json = args.includes("--json");
|
|
36
|
-
const status = runtimeStatus();
|
|
37
|
-
|
|
38
|
-
if (args.includes("--status") || json) {
|
|
39
|
-
if (json) {
|
|
40
|
-
process.stdout.write(JSON.stringify(status, null, 2) + "\n");
|
|
41
|
-
return 0;
|
|
42
|
-
}
|
|
43
|
-
process.stdout.write(
|
|
44
|
-
[
|
|
45
|
-
`hermes: ${status.hermes.ok ? `${status.hermes.bin} (${status.hermes.source})` : "not installed"}`,
|
|
46
|
-
`managed venv: ${status.managedVenv}`,
|
|
47
|
-
`managed built: ${status.managedInstalled ? "yes" : "no"}`,
|
|
48
|
-
`host python: ${status.hostPython ? `${status.hostPython.bin} (${status.hostPython.version})` : "none supported (need 3.11-3.13)"}`,
|
|
49
|
-
`uv: ${status.uv || "not installed (oracle will install it locally)"}`,
|
|
50
|
-
"",
|
|
51
|
-
].join("\n"),
|
|
52
|
-
);
|
|
53
|
-
return 0;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const upgrade = args.includes("--upgrade");
|
|
57
|
-
|
|
58
|
-
if (status.hermes.ok && status.hermes.source === "path" && !upgrade) {
|
|
59
|
-
process.stdout.write(
|
|
60
|
-
`hermes already on PATH: ${status.hermes.bin}\nnothing to do. run: oracle\n`,
|
|
61
|
-
);
|
|
62
|
-
return 0;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
process.stdout.write(
|
|
66
|
-
`installing ${HERMES_PYPI} into ${runtimeVenvDir()}\n` +
|
|
67
|
-
(status.hostPython
|
|
68
|
-
? `using python ${status.hostPython.version} (${status.hostPython.bin})\n`
|
|
69
|
-
: "provisioning an isolated python 3.13 with uv\n") +
|
|
70
|
-
"this takes a few minutes on first run\n\n",
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
const r = installManagedHermes({ upgrade });
|
|
74
|
-
if (!r.ok) {
|
|
75
|
-
process.stderr.write(`oracle bootstrap failed: ${r.reason}\n`);
|
|
76
|
-
if (r.stderr) process.stderr.write(`${r.stderr}\n`);
|
|
77
|
-
return 1;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
process.stdout.write(
|
|
81
|
-
r.reused
|
|
82
|
-
? `runtime already present: ${r.bin}\n`
|
|
83
|
-
: `\nruntime ready: ${r.bin}\nrun: oracle\n`,
|
|
84
|
-
);
|
|
85
|
-
return 0;
|
|
86
|
-
},
|
|
87
|
-
};
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import readline from "node:readline/promises";
|
|
2
|
-
import { stdin as input, stdout as output } from "node:process";
|
|
3
|
-
import {
|
|
4
|
-
findWorkingChain,
|
|
5
|
-
listWorkingChains,
|
|
6
|
-
renderChainList,
|
|
7
|
-
} from "../chain-catalog.mjs";
|
|
8
|
-
import {
|
|
9
|
-
clearActiveChain,
|
|
10
|
-
readActiveChain,
|
|
11
|
-
writeActiveChain,
|
|
12
|
-
} from "../chain-state.mjs";
|
|
13
|
-
|
|
14
|
-
function usage() {
|
|
15
|
-
return [
|
|
16
|
-
"oracle chain — pick the build/trade surface",
|
|
17
|
-
"",
|
|
18
|
-
" oracle chain list working chains",
|
|
19
|
-
" oracle chain list same",
|
|
20
|
-
" oracle chain show show active chain",
|
|
21
|
-
" oracle chain use <name> select (hyperliquid, base, solana, ...)",
|
|
22
|
-
" oracle chain clear unset",
|
|
23
|
-
" oracle chain --json machine output",
|
|
24
|
-
"",
|
|
25
|
-
"chat:",
|
|
26
|
-
" /chain",
|
|
27
|
-
" /chain hyperliquid",
|
|
28
|
-
" /chain show",
|
|
29
|
-
].join("\n");
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function printList(json) {
|
|
33
|
-
const active = readActiveChain();
|
|
34
|
-
if (json) {
|
|
35
|
-
process.stdout.write(
|
|
36
|
-
JSON.stringify(
|
|
37
|
-
{
|
|
38
|
-
active,
|
|
39
|
-
chains: listWorkingChains(),
|
|
40
|
-
},
|
|
41
|
-
null,
|
|
42
|
-
2,
|
|
43
|
-
) + "\n",
|
|
44
|
-
);
|
|
45
|
-
return 0;
|
|
46
|
-
}
|
|
47
|
-
process.stdout.write(
|
|
48
|
-
renderChainList({ selectedKey: active?.key || null }),
|
|
49
|
-
);
|
|
50
|
-
return 0;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function printShow(json) {
|
|
54
|
-
const active = readActiveChain();
|
|
55
|
-
if (json) {
|
|
56
|
-
process.stdout.write(JSON.stringify({ active }, null, 2) + "\n");
|
|
57
|
-
return active ? 0 : 1;
|
|
58
|
-
}
|
|
59
|
-
if (!active) {
|
|
60
|
-
process.stdout.write("active: none\nrun: oracle chain use hyperliquid\n");
|
|
61
|
-
return 1;
|
|
62
|
-
}
|
|
63
|
-
process.stdout.write(
|
|
64
|
-
`active: ${active.key} id=${active.chainId} agent=${active.agent}\n`,
|
|
65
|
-
);
|
|
66
|
-
return 0;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function useChain(query, json) {
|
|
70
|
-
try {
|
|
71
|
-
const active = writeActiveChain(query);
|
|
72
|
-
if (json) {
|
|
73
|
-
process.stdout.write(JSON.stringify({ ok: true, active }, null, 2) + "\n");
|
|
74
|
-
} else {
|
|
75
|
-
process.stdout.write(
|
|
76
|
-
`selected ${active.key} (${active.chainId}) · agent ${active.agent}\n` +
|
|
77
|
-
`build/trade context pinned for this machine\n`,
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
return 0;
|
|
81
|
-
} catch (err) {
|
|
82
|
-
if (err?.code === "UNKNOWN_CHAIN") {
|
|
83
|
-
process.stderr.write(`oracle chain: unknown '${query}'\n`);
|
|
84
|
-
process.stderr.write("try: oracle chain list\n");
|
|
85
|
-
return 1;
|
|
86
|
-
}
|
|
87
|
-
throw err;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export default {
|
|
92
|
-
name: "chain",
|
|
93
|
-
summary: "list/select working chains (hyperliquid, base, solana, ...)",
|
|
94
|
-
group: "read",
|
|
95
|
-
usage: usage(),
|
|
96
|
-
async run(ctx) {
|
|
97
|
-
const args = [...ctx.argv];
|
|
98
|
-
const json = args.includes("--json");
|
|
99
|
-
const clean = args.filter((a) => a !== "--json");
|
|
100
|
-
const verb = (clean[0] || "list").toLowerCase();
|
|
101
|
-
const rest = clean.slice(1);
|
|
102
|
-
|
|
103
|
-
if (["-h", "--help", "help"].includes(verb)) {
|
|
104
|
-
process.stdout.write(usage() + "\n");
|
|
105
|
-
return 0;
|
|
106
|
-
}
|
|
107
|
-
if (["list", "ls"].includes(verb)) return printList(json);
|
|
108
|
-
if (["show", "status", "current"].includes(verb)) return printShow(json);
|
|
109
|
-
if (["clear", "unset", "none"].includes(verb)) {
|
|
110
|
-
clearActiveChain();
|
|
111
|
-
process.stdout.write(json ? "{\"ok\":true,\"active\":null}\n" : "active chain cleared\n");
|
|
112
|
-
return 0;
|
|
113
|
-
}
|
|
114
|
-
if (["use", "set", "select", "pick"].includes(verb)) {
|
|
115
|
-
const q = rest.join(" ").trim();
|
|
116
|
-
if (!q) {
|
|
117
|
-
process.stderr.write("usage: oracle chain use <name>\n");
|
|
118
|
-
return 1;
|
|
119
|
-
}
|
|
120
|
-
return useChain(q, json);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// bare token: oracle chain hyperliquid
|
|
124
|
-
if (findWorkingChain(verb)) return useChain(verb, json);
|
|
125
|
-
|
|
126
|
-
// interactive pick when tty and no args beyond list default already handled
|
|
127
|
-
if (!clean.length && process.stdin.isTTY) {
|
|
128
|
-
const chains = listWorkingChains();
|
|
129
|
-
process.stdout.write(renderChainList({ selectedKey: readActiveChain()?.key }));
|
|
130
|
-
const rl = readline.createInterface({ input, output });
|
|
131
|
-
try {
|
|
132
|
-
const answer = (await rl.question("chain> ")).trim();
|
|
133
|
-
if (!answer) return 0;
|
|
134
|
-
return useChain(answer, false);
|
|
135
|
-
} finally {
|
|
136
|
-
rl.close();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
process.stderr.write(`oracle chain: unknown verb '${verb}'\n${usage()}\n`);
|
|
141
|
-
return 1;
|
|
142
|
-
},
|
|
143
|
-
};
|