(feat) improve agent mode, fix minor issues, adapt multi server management#32
(feat) improve agent mode, fix minor issues, adapt multi server management#32
Conversation
|
Commit 64c3f6b
When we click any of the default spreads thats already assigned to the entry_price, it returned error refreshing position step
|
|
Commit 4595024
|
|
@rapcmia the portfolio was reduced only to show the balances |
|
Commit 867dfc2
Test Gemini CLI session
|
|
Commit 766a52d
Steps to reproduce:
|
|
@david-hummingbot we will need to adapt the CI now we are moving to uv |
|
Commit ba2600a
T1 User Registration & Access Control ❌
T2 Server Management ❌
T3 API keys ✅
T4 gateway using latest/development images ❌
T5 portfolio ❌
T6 CEX Trading on kucoin and binance perpetual ✅
T7 DEX Swaps
T8 DEX Liquidity
I relayed the remaining test T9 onwards to @nikspz to speed up
|
nikspz
left a comment
There was a problem hiding this comment.
- commit b12bb26
- set up with hummingbot API
- Test performed:
- local setup test
- git clone -b feat/add_tui https://github.com/hummingbot/condor.git condor
- cd condor
- docker build -t hummingbot/condor:latest -f Dockerfile .
- make setup
- make deploy
- docker compose up -d
- Container condor-bot Started
- no hummingbot-api ran
- set up hummingbot-api
- git clone https://github.com/hummingbot/hummingbot-api.git
- cd hummingbot-api
- make setup
- make deploy
- cd condor
- review in condor UI
- /start
- review not all commands listed in the welcome message
-
- set up server localhost. review issue on commands:
- 409 Conflict
2026-03-05 17:14:44,112 - httpx - INFO - HTTP Request: POST https://api.telegram.org/bot8TELEGRAM_TOKEN/getUpdates "HTTP/1.1 409 Conflict"
2026-03-05 17:14:44,114 - main - ERROR - Exception while handling an update:
Traceback (most recent call last):
File "/app/.venv/lib/python3.12/site-packages/telegram/ext/_utils/networkloop.py", line 161, in network_retry_loop
await do_action()
File "/app/.venv/lib/python3.12/site-packages/telegram/ext/_utils/networkloop.py", line 154, in do_action
action_cb_task.result()
File "/app/.venv/lib/python3.12/site-packages/telegram/ext/_updater.py", line 340, in polling_action_cb
updates = await self.bot.get_updates(
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/telegram/ext/_extbot.py", line 671, in get_updates
updates = await super().get_updates(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/telegram/_bot.py", line 4860, in get_updates
await self._post(
File "/app/.venv/lib/python3.12/site-packages/telegram/_bot.py", line 703, in _post
return await self._do_post(
^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/telegram/ext/_extbot.py", line 369, in _do_post
return await super()._do_post(
^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/telegram/_bot.py", line 732, in _do_post
result = await request.post(
^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/telegram/request/_baserequest.py", line 198, in post
result = await self._request_wrapper(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/telegram/request/_baserequest.py", line 375, in _request_wrapper
raise exception
telegram.error.Conflict: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running - restarted condor with
- docker compose down
- docker compose up -d
- 409 Conflict
- T3 API keys
- removed old API key ✅
- add new ✅
- spot
- hyperliquid spot ✅
- added successfully ✅
- checked balance: reviewed USDC balance showed and HYPE and other tokens not showing (since rate oracle is binance) ❌
- hyperliquid_perpetual
- added successfully
- hyperliquid spot ✅
- T9 /trade
- bot using jupiter solana-mainnet-beta even if not connected
- hummingbot-api logs showing
- 2026-03-05 18:09:02,599 - hummingbot.connector.time_synchronizer - WARNING - Could not refresh server time. Check network connection.
2026-03-05 18:09:02,884 - hummingbot.core.rate_oracle.sources.rate_source_base - ERROR - Unexpected error while retrieving rates from Binance. Check the log file for more info.
Traceback (most recent call last):
File "/opt/conda/envs/hummingbot-api/lib/python3.12/site-packages/hummingbot/core/rate_oracle/sources/binance_rate_source.py", line 54, in _get_binance_prices
pairs_prices = await exchange.get_all_pairs_prices()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/conda/envs/hummingbot-api/lib/python3.12/site-packages/hummingbot/connector/exchange/binance/binance_exchange.py", line 118, in get_all_pairs_prices
pairs_prices = await self._api_get(path_url=CONSTANTS.TICKER_BOOK_PATH_URL)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/conda/envs/hummingbot-api/lib/python3.12/site-packages/hummingbot/connector/exchange_py_base.py", line 894, in _api_get
return await self._api_request(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/conda/envs/hummingbot-api/lib/python3.12/site-packages/hummingbot/connector/exchange_py_base.py", line 937, in _api_request
request_result = await rest_assistant.execute_request(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/conda/envs/hummingbot-api/lib/python3.12/site-packages/hummingbot/core/web_assistant/rest_assistant.py", line 48, in execute_request
response = await self.execute_request_and_get_response(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/conda/envs/hummingbot-api/lib/python3.12/site-packages/hummingbot/core/web_assistant/rest_assistant.py", line 101, in execute_request_and_get_response
raise IOError(f"Error executing request {method.name} {url}. HTTP status is {response.status}. "
OSError: Error executing request GET https://api.binance.com/api/v3/ticker/bookTicker. HTTP status is 451. Error: {
"code": 0,
"msg": "Service unavailable from a restricted location according to 'b. Eligibility' in https://www.binance.com/en/terms. Please contact customer service if you believe you received this message in error."
- 2026-03-05 18:09:02,599 - hummingbot.connector.time_synchronizer - WARNING - Could not refresh server time. Check network connection.
- git clone -b feat/add_tui https://github.com/hummingbot/condor.git condor
- Created new bot on TG (for remote server) ✅
- condor
- cloned repo
- git clone -b feat/add_tui https://github.com/hummingbot/condor.git condor
- cd condor
- make setup
- docker build -t hummingbot/condor:latest -f Dockerfile .
- make deploy
- docker compose up -d
- cloned repo
- hummingbot-api
- git clone https://github.com/hummingbot/hummingbot-api.git
- cd hummingbot-api
- make setup # Creates .env (prompts for passwords)
- make deploy # Starts all services
- set up cloud IP in condor
- review new bot now responsive and server is set up
- portfolio
- added hyperliquid_perpetual successfully
- checked portfolio from admin account successfully
- T1. User Registration & Access Control
- Use /start > Admin Panel to approve or reject.
- there’s no Admin panel on start command ❌
- it’s under /admin command
- Block user: no option to block user ❌ only reject
- there’s no Admin panel on start command ❌
- Approve request
-
request approved ✅
-
check from approved account if it could check portfolio → No ❌
- Hummingbot API server is not reachable ❌
- /servers is not configured (let’s try)
- a server name hummingbot already exists
- however server is not available in servers list from another user ❌
- added same IP under another name (for the same bot), used same Username password
- /portfolio after added same IP server with another server name ✅ successfully checked
- after added server with another name it added to admin servers also
- so now I have hummingbot and another server with same IP
-
T1 User Registration & Access Control
# Test Steps Actual 1.1 New user registration New Telegram user sends /startUser registered as Pending, admin notified ✅ 1.2 Pending user access Pending user tries /portfolioBlocked with "awaiting approval" message ✅ 1.3 Admin approves user Admin opens /admin-> Pending -> ApproveUser role becomes User, user gets Telegram notification ✅ 1.4 Admin rejects user Admin -> Pending -> Reject User removed, access denied on next command ✅ 1.5 Admin blocks user Admin -> All Users -> select user -> Block Block user: no option to block user ❌ only reject 1.6 Admin unblocks user Admin -> Blocked user -> Unblock Block user: no option to block user ❌ only reject 1.7 Audit log Perform approve/block actions Events appear in Admin -> Audit Log ✅ -
T2. Server Management
# Test Steps Actual 2.1 Add server /servers-> Add -> enter host, port, user, passServer added, connectivity test passes ✅ 2.2 Edit server Select server -> Edit -> change host Updated config saved ✅ 2.3 Delete server Select server -> Delete -> Confirm Server removed from config ✅ 2.4 Share server (Trader) Owner shares server with another user at Trader level Recipient can trade on that server ❌ no trader / viewer status 2.5 Share server (Viewer) Share at Viewer level Recipient can view but NOT trade ❌ no trader / viewer status 2.6 Revoke access Owner revokes shared access Recipient loses server access: could remove server 2.7 Auto-default User with 1 server Auto-set as default without prompt 2.8 Server offline Server goes offline @hummingbot_api_requiredshows error before handler runs -
T3
- Add, update and delete API keys: ok
-
T4
- gateway
- deploy from condor
- set up passphrase: ok
- Deploying gateway
-
Please wait, this may take a moment.
-
❌ Deployment Failed
- 2026-03-05 20:20:08,319 - handlers.config.gateway._shared - ERROR - Error deploying gateway:
Traceback (most recent call last):
File "/app/.venv/lib/python3.12/site-packages/aiohttp/client_reqrep.py", line 539, in start
message, payload = await protocol.read() # type: ignore[union-attr]
^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/aiohttp/streams.py", line 703, in read
await self._waiter
asyncio.exceptions.CancelledError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/app/handlers/config/gateway/deployment.py", line 158, in execute_gateway_deploy
response = await client.gateway.start(config)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/hummingbot_api_client/routers/gateway.py", line 26, in start
return await self._post("/gateway/start", json=config)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/hummingbot_api_client/routers/base.py", line 63, in _post
async with self.session.post(url, json=json, params=params) as response:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/aiohttp/client.py", line 1510, in aenter
self._resp: _RetType = await self._coro
^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/aiohttp/client.py", line 779, in _request
resp = await handler(req)
^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/aiohttp/client.py", line 757, in _connect_and_send_request
await resp.start(conn)
File "/app/.venv/lib/python3.12/site-packages/aiohttp/client_reqrep.py", line 534, in start
with self._timer:
^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/aiohttp/helpers.py", line 713, in exit
raise asyncio.TimeoutError from exc_val
TimeoutError -
- check /gateway command again
- review deployed successfully ✅
- add wallet: ok ✅
- configure nodeURL: ok ✅
-
T9
- /trade
- since gateway added and nodeURL changed now showing balance for SOL ✅
- changed order amount SOL-USDC ✅
- BUY: successfully ✅
- SELL: successfully ✅
- history: ok ✅
- quote: ok ✅
- changed connector to hyperliquid_perpetual: ok
- changed
- /trade
-
- Use /start > Admin Panel to approve or reject.
- condor
- local setup test
- Test performed:
- set up with hummingbot API
|
Commit b12bb26
T9 Unified trade ❌
T10 Bot management ❌
Test in progress for T11, T12 and T13 |
|
Commit 86b37b0
T11 Executors
T12 Routines
T13 AI Agent Sessions
|
nikspz
left a comment
There was a problem hiding this comment.
- commit a43a2c3
- condor
- cloned repo
- git clone -b feat/add_tui https://github.com/hummingbot/condor.git condor
- cd condor
- make setup
- docker build -t hummingbot/condor:latest -f Dockerfile .
- make deploy
- cloned repo
- hummingbot-api
- git clone https://github.com/hummingbot/hummingbot-api.git
- cd hummingbot-api
- make setup # Creates .env (prompts for passwords)
- make deploy # Starts all services
- added server to admin account successfully
- added account ✅
- could see for admin account successsfully ✅
- New user registration: ok ✅
- user need permission to check portfolio ✅
- /start send reuqest to admin ✅
- approved request - User could see portfolio now ✅
- Role: User
- Blocked user from Admin panel
- Access denied for user now ✅
- Grid executor fix ✅
- condor
|
Commit a43a2c3
T2 Server managementT8 DEX Liquidity
T10 bot management
T13 AI Agent Session
|















































Condor Bot - Feature Summary & QA Test Plan
What Was Built
Condor is a Telegram bot for monitoring and trading with Hummingbot via the Backend API. It provides portfolio tracking, bot monitoring, CEX/DEX trading, and configuration management through an interactive Telegram interface.
Feature Summary
1. User Registration & Access Control
/start/admin2. Server Management (
/servers)3. API Keys (
/keys)4. Gateway Deployment & Config (
/gateway)5. Portfolio Dashboard (
/portfolio)6. CEX Trading (
/trade)7. DEX Swaps (
/swap)8. DEX Liquidity (
/lp)9. Unified Trade (
/trade)10. Bot Management (
/bots,/new_bot)11. Executors (
/executors)12. Routines (
/routines)routines/folderwhile Trueloop, runs as asyncio task until stoppedkey=valuemessages)hello_world.py- Greeting (one-shot, for testing)arb_check.py- CEX/DEX arbitrage checker (one-shot)price_monitor.py- Live price alerts (continuous)lp_monitor.py- LP out-of-range alerts with rebalance suggestions (continuous)lp_tpsl.py- LP take-profit/stop-loss with runtime editing (continuous)13. AI Agent Sessions (
/agent)14. MCP Integration
15. Infrastructure
QA Test Plan
T1. User Registration & Access Control
/start/portfolio/admin-> Pending -> ApproveT2. Server Management
/servers-> Add -> enter host, port, user, pass@hummingbot_api_requiredshows error before handler runsT3. API Keys
/keys-> select connector -> enter key + secretT4. Gateway
/gateway-> Start -> enter passphrase/swapwithout Gateway running@gateway_requiredshows errorT5. Portfolio
/portfolioT6. CEX Trading
/trade-> select CEX -> pair -> BUY -> MARKET -> amount -> confirmT7. DEX Swaps
/swap-> select network -> pair -> amountT8. DEX Liquidity (LP)
/lp-> PositionsT9. Unified Trade
/trade(new user)/tradeagainT10. Bot Management
/bots/new_bot-> Grid Strike -> follow steps/new_bot-> PMM Mister or V1 -> follow stepsT11. Executors
/executors-> Grid -> follow wizardT12. Routines
/routinestrading_pair=ETH-USDTwhile editingnonexistent_key=valueT13. AI Agent Sessions
/agent-> Claude Code/agent-> GeminiT14. Cross-Cutting Concerns
/trade, then/portfolio, then/botsclear_all_input_states).,-,(,))format_error_message().bakfile if neededuv run pytesttests/test_data_manager.pypassPriority for QA
P0 - Critical Path (test first)
P1 - Core Features
P2 - Supporting Features