Skip to content

Feat / general upgrade and GitHub actions#102

Merged
cardosofede merged 69 commits into
mainfrom
feat/general_upgrade_and_github_actions
May 27, 2026
Merged

Feat / general upgrade and GitHub actions#102
cardosofede merged 69 commits into
mainfrom
feat/general_upgrade_and_github_actions

Conversation

@cardosofede

Copy link
Copy Markdown
Contributor

PR Summary: General Upgrade & GitHub Actions

What changed

Rate Oracle & Currency Display

  • New rate oracle routes (/market/rates) for fetching exchange rates
  • Currency selector component — users can switch display currency
  • useRates and useDisplayCurrency hooks + unified formatters.ts for consistent currency formatting across Portfolio, Bots, and Executors pages

Agent Sessions — Per-Server Management

  • Agent chat sessions are now scoped by server (not global)
  • Fixed agent config handling and session lifecycle
  • Improved agent frontend: session reviewer, controls, and detail page reworked

Routines & Reports

  • Reports surfaced as base routines
  • Report browser UI significantly expanded (full-screen viz support)
  • Routine source code now viewable from the UI
  • Schedule dropdown and instance management improvements

Arb Check Routine

  • Upgraded to support CEX-CEX arbitrage (was DEX only)
  • Major refactor (~464 lines changed)

MCP Server Improvements

  • Server switching/management via MCP tools
  • Improved skill descriptions
  • Hummingbot API client updated, logging moved to warnings

Frontend Polish

  • Chat panel and input reworked (WebSocket hook refactored)
  • Executors page simplified
  • Portfolio page enhanced with currency support
  • Gateway settings cleanup

What to test

  • Switch display currency on Portfolio/Bots/Executors — values should convert correctly
  • /routines — run a report, view it full-screen, check source code tab
  • Agent sessions: switch servers and verify sessions are isolated per server
  • Arb check routine: run with CEX-CEX pairs
  • MCP: change server via MCP tool, confirm it sticks
  • Chat panel on web dashboard — send messages, verify WebSocket reconnects
  • Schedule a one-shot routine, verify it persists across restart

@rapcmia rapcmia changed the title Feat/general upgrade and GitHub actions Feat / general upgrade and GitHub actions May 14, 2026
@rapcmia

rapcmia commented May 14, 2026

Copy link
Copy Markdown
Contributor

Commit 8a9e08e

  • Use make install and Y on hummingbot-api setup
  • Hummingbot-api successfully started docker

Test a missing-rate case and confirm the UI shows the warning marker instead of pretending the conversion succeeded. ❗

  • Test while viewing a small USDT balance of 0.55
  • On Portfolio page ❌
    image
    • Observed these values during the check: ETH -> 0, EUR -> 0.47, BRL -> 0.55.
    • This did not verify the missing-rate fallback behavior because the Portfolio balance table is not using the warning-marker conversion path?
  • On Executors page ✅
    image
    • With display currency set to BRL, the UI showed the warning marker and the values did not change.
    • With display currency set to EUR, no markets were available for this check.
    • With display currency set to BTC and ETH, the values displayed as 0.

Create web agent sessions on two different servers and verify the sessions stay isolated by server. ❗

  • Created separate web agent session tabs for local and remote servers.
  • Session tabs showed different server badges, so the UI appears to keep per-tab server metadata.
  • In the remote-server tab, asking what server are you using? returned I’m currently connected to local.
  • The same response said the visible context had active_server: local.
  • This does not match the remote server badge on that tab ❌
    • Local ✅
      image
    • Remote server ❌
      image

Chat panel on web dashboard — send messages, verify WebSocket reconnects ✅

image image
  • The chat panel opened successfully and accepted messages from the web dashboard.
  • The chat WebSocket connection was accepted by the condor during the session.
  • Sending messages from the chat panel successfully started agent sessions and returned responses.
  • During normal chat use, the agent window stayed responsive and responses were ok.
  • No clear WebSocket disconnection was observed in the agent session.
  • A DevTools offline attempt did not clearly interrupt the chat socket ❗
  • Automatic reconnect behavior was not fully verified ❗
  • After i hard relaunch condor, all session cleared which i think is expected ❗

Start a long chat response, use prompt cancel, and confirm the session returns to idle cleanly ✅

  • Started a long web chat response.
  • Pressed the stop button while the response was streaming.
  • The agent stopped responding.
  • The session returned to idle cleanly.
  • The same session accepted a new message after the cancel.
    image

Run a report-producing routine, check that it appears in the report browser, opens full-screen, and shows the expected source file. ✅

  • Ran the market_scanner routine
  • The routine generated a report.
  • The report opened in full-screen view.
  • The source tab showed the expected market_scanner routine source.

  • Run arb_check (AVAX and SOL pairs) with at least two supported exchanges (binance and kucoin) and compare the text summary against the generated table/chart. ✅
  • The routine generated a report/dashboard with charts and data.
  • The report content included top levels for both Binance and KuCoin, spreads, max mid-price difference, and buy/sell route comparisons.
  • The report could be viewed in a larger full-screen layout by collapsing the right-side panel.
  • The source tab showed the expected arb_check code.

Other things i observed while testing this PR:

  • Agent suddently does not response to any of my queries and getting Network error (will try): Timed out
    image

@nikspz nikspz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • commit 1626543
    • Switch display currency on Portfolio/Bots/Executors — values convert correctly ✅
    • /routines — run a routines, view it full-screen, source code tab ✅
    • Agent sessions ✅
    • Arb check routine: run with CEX-CEX pairs, matched with exchange ✅
    • Chat panel on web dashboard — send messages, verify WebSocket reconnects ✅
    • Scheduled a one-shot routine, verify it persists across restart ✅

@rapcmia

rapcmia commented May 19, 2026

Copy link
Copy Markdown
Contributor

Commit b9b1cb9

  • Test with hummingbot-api (main)
  • Setup a trading agent and let it trade while testing the PR
  • Test Portfolio display currency conversion ✅
  • Test Portfolio background refresh replacing stale cached values ✅
  • Test Executors display currency conversion ✅
  • Test Trade bottom pane conversion, sorting, and tooltip behavior ✅
    • Changed display currency to EUR and BRL
    • PnL and volume converted correctly
    • A warning/icon appears when no conversion is available
    • Sorting for Status, PnL, PnL%, Volume, and Age appeared to work correctly
    • Terminated executors did not interfere with the active sorting behavior
    • Hovering an executor row showed a tooltip with entry, range, and status
    • The tooltip disappeared again when the cursor moved away
  • Test per-server agent session context, especially remote not falling back to local ✅
    image
    • Connected the remote server successfully
    • Opened two agent windows at the same time: local using codex and remote using claude code
    • Asked both windows which server they were using
      • The local window identified localhost
      • The remote window identified the remote IP address
      • Switched immediately between the two windows while sending chats, for example local -> remote
      • Both sessions continued to use the correct server context during the quick switching check
  • Test chat panel WebSocket reconnect behavior ✅
    • Switched DevTools to Offline (chrome)
    • Observed a WebSocket connection error in the browser console
    • Switched back to No throttling
    • Condor logs showed a new accepted WebSocket connection and connection open
      INFO:     100.98.125.6:53317 - "WebSocket /api/v1/ws/chat?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxNDc0NDA4NjA0IiwidXNlcm5hbWUiOiJyYXBjbWlhIiwiZmlyc3RfbmFtZSI6IlJhbHBoIiwicm9sZSI6ImFkbWluIiwiZXhwIjoxNzc5MjYxMzM1fQ.l2Dqek1Md0_fkG_nmWCwsVP7nQARvqD53fxOK8QsPuk" [accepted]
      INFO:     connection open
      
      • Sent a new message after the reconnect and responded normally after the connection recovered along with its history chats
  • Test arb_check report flow again ✅
    • The report showed the two exchanges and the AVAX-USDT market
    • Order book depth respected the configured values, including 10 and 15 levels
    • The report data remained consistent with the earlier arb_check test result
  • Test one other report-producing routine again ✅
    • a reported successfully generated using perpetual connectors (binance, bybit)
  • Test price_monitor live report behavior for kucoin, HYPE-USDT ✅
  • Test setup flow when port 8000 already has a running Hummingbot API ✅
    • Started with a Hummingbot API instance already running on port 8000
    • Ran make install of Condor
    • Setup detected that an API instance was already running
    • The setup asked whether to override it and i select No
      image
      • The existing API was preserved
      • On .env file, DEPLOY_HUMMINGBOT_API=false
  • Test MCP server switching persistence via web dashboard using agent window and telegram ✅

Commit b9b1cb9

  • Test prompt cancel during streaming and observe behavior after cancel in the same chat ✅
    image

I tested this hummingbot/hummingbot-api#163 with this PR and will add updates on it

@rapcmia

rapcmia commented May 21, 2026

Copy link
Copy Markdown
Contributor

Commit 9b0c3b5

image
#### make run

> frontend@0.0.0 build
> tsc -b && vite build

src/components/bots/ControllerBrowser.tsx:20:36 - error TS2307: Cannot find module '@/components/bots/ControllerPnlChart' or its corresponding type declarations.

20 import { ControllerPnlChart } from "@/components/bots/ControllerPnlChart";
                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

src/pages/Bots.tsx:9:10 - error TS2307: Cannot find module '@/pages/tabs/BotRunsTab' or its corresponding type declarations.

9   import("@/pages/tabs/BotRunsTab").then((m) => ({ default: m.BotRunsTab })),
           ~~~~~~~~~~~~~~~~~~~~~~~~~

src/pages/tabs/ActiveBotsTab.tsx:20:30 - error TS2307: Cannot find module '@/components/bots/PnlSparkline' or its corresponding type declarations.

20 import { PnlSparkline } from "@/components/bots/PnlSparkline";
                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Found 3 errors.

make: *** [Makefile:44: build-frontend] Error 2

@rapcmia

rapcmia commented May 21, 2026

Copy link
Copy Markdown
Contributor

Commit 3089a29

  • Able to start condor successfully ✅
    image

Test in progress

@rapcmia

rapcmia commented May 25, 2026

Copy link
Copy Markdown
Contributor

Commit 0d696ce

  • Test with hummingbot-api main branch commit 6930252ccef9ce986a875c4fc57ea817f8631eb7 via docker
  • Test using hummingbot:latest docker image on deployed bots
  • Bot page has added new tab run
    image
  • On active bot page, there is available data chart ✅
    image

Tried to delete some archived bots but does not work i think due to 405 Method Not Allowed

image
#### hummingbot-logs 
INFO:     172.19.0.1:34422 - "DELETE /bot-orchestration/bot-runs/bot_20260525074353-20260525-074407 HTTP/1.1" 405 Method Not Allowed
  • Delete prompted normally in the Runs tab
  • Confirming delete sent DELETE /bot-orchestration/bot-runs/<bot_name>
  • However hummingbot-api returned 405 Method Not Allowed with allow: GET ❌
  • Observed that this route is not available in the current API route list (using latest)
    image

Change one controller setting and save it. Make sure the bot uses the new setting, and make sure nothing else changed by mistake ❗

  • Confirmed it saves the config ok on the active bot ✅
    image

    • Refresh page and changes are still intact
    • Checked base controller config, no changes made
  • However it also introduced another unexpected error
    image
    image

    2026-05-25 08:15:18,156 - 17 - hummingbot.core.clock - ERROR - Unexpected error running clock tick.
    Traceback (most recent call last):
      File "hummingbot/core/clock.pyx", line 119, in hummingbot.core.clock.Clock.run_til
        child_iterator.c_tick(self._current_tick)
      File "hummingbot/strategy/strategy_py_base.pyx", line 41, in hummingbot.strategy.strategy_py_base.StrategyPyBase.c_tick
        self.tick(timestamp)
      File "/home/hummingbot/hummingbot/strategy/strategy_v2_base.py", line 310, in tick
        self.on_tick()
        ~~~~~~~~~~~~^^
      File "/home/hummingbot/scripts/v2_with_controllers.py", line 42, in on_tick
        super().on_tick()
        ~~~~~~~~~~~~~~~^^
      File "/home/hummingbot/hummingbot/strategy/strategy_v2_base.py", line 319, in on_tick
        self.update_controllers_configs()
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
      File "/home/hummingbot/hummingbot/strategy/strategy_v2_base.py", line 684, in update_controllers_configs
        controllers_configs = self.config.load_controller_configs()
      File "/home/hummingbot/hummingbot/strategy/strategy_v2_base.py", line 122, in load_controller_configs
        loaded_configs.append(config_class(**config_data))
                              ~~~~~~~~~~~~^^^^^^^^^^^^^^^
      File "/opt/conda/envs/hummingbot/lib/python3.13/site-packages/pydantic/main.py", line 263, in __init__
        validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
    pydantic_core._pydantic_core.ValidationError: 1 validation error for PMMisterConfig
    _config_name
      Extra inputs are not permitted [type=extra_forbidden, input_value='test01', input_type=str]
        For further information visit https://errors.pydantic.dev/2.13/v/extra_forbidden
    
    • Updating a live bot controller config from Condor can write _config_name into the bot’s controller YAML, for example _config_name: test01.
      image
      • After the update succeeds, the next config reload tick fails with ValidationError: Extra inputs are not permitted for PMMisterConfig, because _config_name is not a valid controller field.
      • This appears to happen because the bot config fetch response includes _config_name ❌

Pausing a controller from Condor can switch the UI button from Pause to Start, but the controller may continue running and placing orders. ❌

image
#### hummingbot-api logs 

08:27:56.818 POST /controllers/bots/bot_20260525081052-20260525-081057/test01/config
INFO:     172.19.0.1:59642 - "POST /controllers/bots/bot_20260525081052-20260525-081057/test01/config HTTP/1.1" 200 OK
08:27:56.831 GET /bot-orchestration/bot-runs ? offset='0' & limit='100'
08:27:56.832 GET /bot-orchestration/controller-performance-latest
08:27:56.833 GET /controllers/bots/bot_20260525081052-20260525-081057/configs
INFO:     172.19.0.1:59650 - "GET /controllers/bots/bot_20260525081052-20260525-081057/configs HTTP/1.1" 200 OK
INFO:     172.19.0.1:59646 - "GET /bot-orchestration/controller-performance-latest HTTP/1.1" 200 OK
INFO:     172.19.0.1:59642 - "GET /bot-orchestration/bot-runs?limit=100&offset=0 HTTP/1.1" 200 OK
  • Same as earlier tests, the active controller YAML was updated with both manual_kill_switch: true and _config_name: test01.
    image
  • This strongly suggests the pause request is saved successfully, but the next controller config reload fails because _config_name is not a valid field for PMMisterConfig.

incase needed please see attached archived bots: 25052026.zip

@rapcmia

rapcmia commented May 26, 2026

Copy link
Copy Markdown
Contributor

Commit 63bc451

Tried to delete some archived bots but does not work i think due to 405 Method Not Allowed ❌

  • Still exist, attached logs
    #### Condor logs 
    2026-05-26 19:21:16,208 - condor.web.routes.controller_performance - WARNING - Failed to delete bot run 'bot_20260525080328-20260525-080332' from 'local': 405, message='Method Not Allowed', url='http://localhost:8000/bot-orchestration/bot-runs/bot_20260525080328-20260525-080332'
    
    #### Hummingbot logs 
    INFO:     172.19.0.1:56152 - "DELETE /bot-orchestration/bot-runs/bot_20260525080328-20260525-080332 HTTP/1.1" 405 Method Not Allowed
    11:21:30.809 GET /bot-orchestration/controller-performance-latest
    

Updating a live bot controller config from Condor can write _config_name into the bot’s controller YAML, for example _config_name: test01.

  • Bots page, Config panel: Update and save works but still same Unexpected error running clock tick ❌
    image
    image

    2026-05-26 11:25:17,002 - 17 - hummingbot.core.clock - ERROR - Unexpected error running clock tick.
    Traceback (most recent call last):
      File "hummingbot/core/clock.pyx", line 119, in hummingbot.core.clock.Clock.run_til
        child_iterator.c_tick(self._current_tick)
      File "hummingbot/strategy/strategy_py_base.pyx", line 41, in hummingbot.strategy.strategy_py_base.StrategyPyBase.c_tick
        self.tick(timestamp)
      File "/home/hummingbot/hummingbot/strategy/strategy_v2_base.py", line 310, in tick
        self.on_tick()
        ~~~~~~~~~~~~^^
      File "/home/hummingbot/scripts/v2_with_controllers.py", line 42, in on_tick
        super().on_tick()
        ~~~~~~~~~~~~~~~^^
      File "/home/hummingbot/hummingbot/strategy/strategy_v2_base.py", line 319, in on_tick
        self.update_controllers_configs()
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
      File "/home/hummingbot/hummingbot/strategy/strategy_v2_base.py", line 684, in update_controllers_configs
        controllers_configs = self.config.load_controller_configs()
      File "/home/hummingbot/hummingbot/strategy/strategy_v2_base.py", line 122, in load_controller_configs
        loaded_configs.append(config_class(**config_data))
                              ~~~~~~~~~~~~^^^^^^^^^^^^^^^
      File "/opt/conda/envs/hummingbot/lib/python3.13/site-packages/pydantic/main.py", line 263, in __init__
        validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
    pydantic_core._pydantic_core.ValidationError: 1 validation error for PMMisterConfig
    _config_name
      Extra inputs are not permitted [type=extra_forbidden, input_value='test01', input_type=str]
        For further information visit https://errors.pydantic.dev/2.13/v/extra_forbidden
    
    • After updating the active bot’s controller configuration, the pause and resume actions no longer respond correctly.

Attached bot config and logs incase needed: 26052026.zip


Bots page, Config panel: Pause button works as expected ✅

image
  • Pause button from config panel and bot page dashboards works as expected
  • Observed manual cashout for controller <controller_name> ok
  • Click start button again resumes the controller from pause status
    image

@rapcmia rapcmia left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Commit b9b1cb9 :
    • Portfolio display currency conversion, Portfolio background refresh, Executors display currency conversion, and Trade bottom pane conversion all passed with EUR and BRL.
    • Trade bottom pane checks passed: PnL and volume converted correctly, warning/icon appeared when no conversion was available, sorting worked for Status, PnL, PnL%, Volume, and Age, terminated executors did not interfere, and row tooltips appeared/disappeared correctly.
    • Per-server agent session context was checked again, and chat panel WebSocket reconnect recovered successfully after a new accepted WebSocket connection was observed in the logs.
    • Report flows passed again: arb_check, one other report-producing routine, and price_monitor live report behavior for KuCoin HYPE-USDT all worked.
    • Setup flow still passed when port 8000 already had a running Hummingbot API, and MCP server switching persistence worked through both the web dashboard agent window and Telegram.
    • Prompt cancel during streaming was tested in the same chat and accepted as current expected behavior/feature limitation rather than a failing issue.
  • Commit 0d696ce: Bot page now includes the new Runs tab, and the Active Bot page shows the available data chart.
  • Commit 63bc451: Bots page Config panel Pause button works as expected.
  • Latest commit:
    • the _config_name issue fixed, the controller config updates now use a YAML text field, and updating parameters successfully reflected on the active bot config.
    • Manual inspection of the instance folder also confirmed the saved YAML no longer contains the invalid field.

@cardosofede cardosofede merged commit 52fe491 into main May 27, 2026
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.

4 participants