feat(gateway): development image default + Keys and Wallets page - #199
Open
fengtality wants to merge 8 commits into
Open
feat(gateway): development image default + Keys and Wallets page#199fengtality wants to merge 8 commits into
fengtality wants to merge 8 commits into
Conversation
Meteora DAMM v2 (AMM router) support only ships in the development Gateway image; the published latest image has no /amm routes for meteora, which breaks the meteora_launch_lp agent's manage_amm tool. Update web API defaults, MCP schema docs, and the Telegram deploy menu recommendation to match. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Greptile SummaryThe PR defaults Gateway deployment and pull operations to the development image, adds Gateway wallet management to the Keys and Wallets dashboard, and enhances Meteora monitoring reports.
Confidence Score: 5/5The PR appears safe to merge because no blocking failure remains in the eligible follow-up review scope. No blocking failure remains.
|
| Filename | Overview |
|---|---|
| condor/web/routes/settings.py | Adds access-controlled Gateway wallet list, import, default-restoration, and removal proxy routes. |
| frontend/src/components/settings/ApiKeysSettings.tsx | Extends the settings workflow with Gateway status-aware wallet listing, import navigation, and confirmed deletion. |
| frontend/src/components/settings/ImportGatewayWallet.tsx | Implements Solana and EVM private-key import UI with format validation and client-side EVM address preview. |
| agents/meteora_launch_lp/routines/damm_v2_scanner.py | Corrects fee-yield units and adds annualized APR visualization, Telegram image delivery, and report persistence. |
| agents/meteora_launch_lp/routines/easya_graduation_monitor.py | Corrects fee-yield display and adds GeckoTerminal-backed post-graduation OHLCV charts with a Meteora fallback. |
| condor/web/models.py | Changes Gateway image defaults to the development tag and introduces the wallet-import request model. |
Sequence Diagram
sequenceDiagram
actor User
participant UI as Keys and Wallets UI
participant Web as Condor Web API
participant SDK as Hummingbot API Client
participant Gateway
User->>UI: Open wallet management
UI->>Web: GET /settings/gateway/wallets
Web->>SDK: list_gateway_wallets()
SDK->>Gateway: List wallets
Gateway-->>UI: Wallet groups
User->>UI: Paste private key and import
UI->>Web: POST /settings/gateway/wallets
Web->>SDK: add_gateway_wallet(chain, private_key)
SDK->>Gateway: Store encrypted wallet
opt Preserve existing default
Web->>SDK: set_default_gateway_wallet(previous address)
end
Gateway-->>UI: Imported address
User->>UI: Confirm removal
UI->>Web: "DELETE /settings/gateway/wallets/{chain}/{address}"
Web->>SDK: remove_gateway_wallet(chain, address)
SDK->>Gateway: Remove wallet
Reviews (8): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile
Rename the API Keys settings tab to Keys and Wallets, list Gateway wallets (chain, address, default badge, confirm-to-delete), and add an Add Wallet flow with Connect Solana / Connect Ethereum pages. Browser wallets (Phantom, MetaMask, Rabby) never expose private keys to web pages, so the flow guides a manual export + paste; the key is imported into Gateway via the API and stored encrypted there. Ethereum keys are address-previewed client-side with viem before import. Backend: /settings/gateway/wallets GET/POST + DELETE proxying to the API's accounts gateway-wallet endpoints. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…status Replace the Solana/Ethereum chain-picker cards with a Solana | Ethereum/EVM tab bar (Solana first) directly on the Add Wallet page, and disable the Add Wallet button with a tooltip when Gateway is not running (status shared via the gateway-status query cache). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Every added Gateway wallet silently became the chain default (the API's set_default defaults to true), so a 2nd wallet would steal the default. Add a "Set as default wallet for this chain" checkbox (checked by default). The SDK client doesn't expose set_default, so when unchecked the backend captures the previous default before adding and restores it after. Also drop the dedicated-trading-wallet note. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…, add Fee Decay Harvester strategy - Units fix: the Meteora DAMM v2 API's fee_tvl_ratio is ALREADY a percent per window (verified fees.24h/tvl == fee_tvl_ratio.24h), so the x100 display in both scanners overstated yields 100x. Display raw percent and add a units warning to both strategies (annualize by x365 only). - Visuals: both scanners now emit a plotly chart (PNG to Telegram via send_photo, interactive in a saved ReportBuilder report with KPI cards and table). easya_graduation_monitor renders a candlestick+volume panel of the pool's full post-graduation life via GeckoTerminal OHLCV (Meteora's native OHLCV caps at ~10 bars; kept as fallback with an adaptive timeframe). - New strategy fee_decay_harvester: customization demo on the same agent + routines — enters established verified pools on a dual-window (24h+4h) fee-APR persistence screen instead of fresh graduations, and manages liquidity with tranche-based exits (50% scale-out on APR decay past half, 100% on APR floor, symmetric IL/price deviation, volume collapse, 7-day max hold). Dry-run tick verified: rejected one-candle yield spikes, gated and sized a would-be entry with zero writes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… repo Kept out of the repo intentionally — it is the live-demo artifact for "customize your own strategy on the same agent"; shipping it pre-made would defeat the demo. The dry-run-validated playbook lives in the PR description and the operator's local copy. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
With only a Solana/Ethereum Gateway wallet added (no CEX credentials), the portfolio page still showed the Connect Keys overlay — useCredentials gated on exchange credentials alone. A Gateway wallet now unlocks the app the same way a CEX key does (Gateway-unreachable errors count as no wallets). Overlay copy updated to mention wallets. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
hummingbot/gateway:developmentin the web API models (GatewayStartRequest,GatewayPullRequest), the MCPmanage_gatewayschema docs/example, and the Telegram gateway deploy menu (now listed first as recommended)./gateway/amm/*, used by themeteora_launch_lpagent'smanage_ammtool from feat(amm): manage_amm tool + Meteora Launch LP agent #192) only ships in thedevelopmentGateway image — the publishedlatestimage has no meteora AMM routes, so deploying Gateway with the old defaults produced an instance that cannot serve DAMM v2 agents.GET/POST /settings/gateway/walletsandDELETE /settings/gateway/wallets/{chain}/{address}proxying to the API's accounts gateway-wallet endpoints, with the same access checks as credentials./gateway/startdefault), ci: build docker images on push to main/development gateway#677 (build:developmenton every push to development).Test plan
POST /gateway/start→hummingbot/gateway:development, meteora reports['clmm', 'amm'].gateway_amm.get_pool_info()on a live Meteora DAMM v2 pool returns price/reserves.npm run build(tsc + vite) and eslint pass.🤖 Generated with Claude Code
Meteora Launch LP agent polish (follow-up to #192)
fee_tvl_ratiois already a percent per window (verifiedfees.24h/tvl == fee_tvl_ratio.24h); both scanners displayed it ×100. Yields now shown as raw window percent, with an annualization units note (× 365only) added to both strategies.damm_v2_scannerandeasya_graduation_monitornow emit plotly charts (PNG to Telegram, interactive in saved ReportBuilder reports with KPI cards + tables). The graduation monitor renders a candlestick + volume panel of the pool's full post-graduation life via GeckoTerminal OHLCV (Meteora's native OHLCV caps at ~10 bars; kept as an adaptive-timeframe fallback).fee_decay_harvestervariant was created on the same agent/routines viamanage_trading_agent(create_strategy)— established verified pools, dual-window (24h + 4h) fee-APR persistence screen, tranche-based exits (50% scale-out on APR decay past half; 100% on APR floor, symmetric IL/price deviation, volume collapse, 7-day max hold). Its dry-run tick worked end-to-end: rejected one-candle yield spikes (CPX, XFEE), gated DOGE-1-SOL, described a would-be entry with zero writes.consult: real two-wayquote_swapthrough Gateway (impact ≈ pool fee), safety routine FAIL on 72% holder concentration, disciplined SKIP verdict.