Skip to content

feat(gateway): development image default + Keys and Wallets page - #199

Open
fengtality wants to merge 8 commits into
mainfrom
feat/gateway-development-default
Open

feat(gateway): development image default + Keys and Wallets page#199
fengtality wants to merge 8 commits into
mainfrom
feat/gateway-development-default

Conversation

@fengtality

@fengtality fengtality commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Default the Gateway docker image to hummingbot/gateway:development in the web API models (GatewayStartRequest, GatewayPullRequest), the MCP manage_gateway schema docs/example, and the Telegram gateway deploy menu (now listed first as recommended).
  • Meteora DAMM v2 (/gateway/amm/*, used by the meteora_launch_lp agent's manage_amm tool from feat(amm): manage_amm tool + Meteora Launch LP agent #192) only ships in the development Gateway image — the published latest image has no meteora AMM routes, so deploying Gateway with the old defaults produced an instance that cannot serve DAMM v2 agents.
  • Keys and Wallets page: renames the API Keys settings tab and adds Gateway wallet management to the web dashboard:
    • Wallets section listing Gateway wallets (chain, address, default badge, confirm-to-delete), with a muted note when Gateway is unreachable.
    • Add Wallet → a Solana | Ethereum/EVM tabbed import page (Solana first); the Add Wallet button is disabled with a tooltip while Gateway is not running. Browser wallets (Phantom, MetaMask, Rabby) never expose private keys to web pages, so the flow shows per-wallet export instructions and a paste field; the key is imported into Gateway through the API and stored encrypted there. Ethereum keys are address-previewed client-side with viem before import.
    • New backend routes GET/POST /settings/gateway/wallets and DELETE /settings/gateway/wallets/{chain}/{address} proxying to the API's accounts gateway-wallet endpoints, with the same access checks as credentials.
  • Companion PRs: feat(gateway): default Gateway image to hummingbot/gateway:development hummingbot-api#216 (API-side /gateway/start default), ci: build docker images on push to main/development gateway#677 (build :development on every push to development).

Test plan

  • Restarted Gateway via POST /gateway/starthummingbot/gateway:development, meteora reports ['clmm', 'amm'].
  • End-to-end with hummingbot-api-client 1.5.7: gateway_amm.get_pool_info() on a live Meteora DAMM v2 pool returns price/reserves.
  • Wallet flow clicked through in the browser: imported a throwaway Solana keypair, Gateway returned the matching derived address, wallet listed with default badge, then deleted via the UI. Empty-state after deleting the last wallet verified (Gateway returns a chain group with an empty address list).
  • npm run build (tsc + vite) and eslint pass.

🤖 Generated with Claude Code

Meteora Launch LP agent polish (follow-up to #192)

  • Units fix (100×): the Meteora DAMM v2 API's fee_tvl_ratio is already a percent per window (verified fees.24h/tvl == fee_tvl_ratio.24h); both scanners displayed it ×100. Yields now shown as raw window percent, with an annualization units note (× 365 only) added to both strategies.
  • Visuals: damm_v2_scanner and easya_graduation_monitor now 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).
  • Custom-strategy flow validated (strategy file intentionally NOT shipped — it is the live-demo artifact): a fee_decay_harvester variant was created on the same agent/routines via manage_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.
  • Agent verified end-to-end via consult: real two-way quote_swap through Gateway (impact ≈ pool fee), safety routine FAIL on 72% holder concentration, disciplined SKIP verdict.

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-apps

greptile-apps Bot commented Aug 10, 2026

Copy link
Copy Markdown

Greptile Summary

The 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.

  • Adds authenticated wallet list, import, default-selection, and removal flows.
  • Adds Meteora fee-yield corrections, Plotly charts, and saved reports.
  • Recommends hummingbot/gateway:development consistently across web, MCP, and Telegram deployment interfaces.

Confidence Score: 5/5

The PR appears safe to merge because no blocking failure remains in the eligible follow-up review scope.

No blocking failure remains.

Important Files Changed

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
Loading

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>
@fengtality fengtality changed the title feat(gateway): default Gateway image to hummingbot/gateway:development feat(gateway): development image default + Keys and Wallets page Aug 10, 2026
fengtality and others added 6 commits August 10, 2026 15:01
…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>
@fengtality
fengtality requested a review from rapcmia August 11, 2026 20:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant