hermes-agent/tui_gateway
Brooklyn Nicholson 7ad9ace2cc fix(agent): the desktop's tools reach it on remote and cloud backends too
The pane, in-app browser, and reaction tools were gated on HERMES_DESKTOP=1 —
an env var set only on backends Electron spawns itself (local and SSH). A
desktop client connected to a plain URL gateway or Hermes Cloud lost all six:
they were stripped from the schema before the model saw them, on the same
backend whose platform hint was telling it "you are chatting inside the Hermes
desktop app". open_preview, read_preview, read_terminal, close_terminal,
focus_pane, and react_to_message were all silently absent.

The client is not the host. Capability now resolves from the session's own
source, which session.create already carries:

- The six tools move into a `desktop_ui` toolset, off _HERMES_CORE_TOOLS so no
  other platform pays their schema.
- _gui_surface_toolsets(platform) folds `desktop_ui` (and the existing
  `project` tools) into the GUI gateway's resolution when the session's
  platform is the desktop app — the same answer on every topology.
- check_fn drops the env probe. It kept the one thing that is genuinely a
  per-process/user fact: react_to_message's display.message_reactions opt-in,
  which the desktop mirrors onto whichever gateway it is connected to.

react_to_message was doubly broken: it read that toggle behind the env gate, so
even a local-backend user's Settings toggle could not reach a remote session.

The embedded terminal pane keeps working correctly the other way round: it runs
`hermes --tui` against a desktop-spawned backend, and a tui-sourced session
gets no GUI tools even though HERMES_DESKTOP=1 is set on that process.
2026-08-06 19:35:47 -06:00
..
__init__.py
_stdin_recovery.py
compute_host.py docs: note atexit re-finalization interaction in shutdown() docstring 2026-08-03 09:59:58 +05:30
entry.py perf(gateway): prewarm /model picker cache on TUI startup 2026-08-04 12:28:05 +05:30
event_publisher.py
git_probe.py
host_supervisor.py
loop_noise.py
method_ctx.py refactor(tui): split @method handlers into methods_* modules (mechanical move, registry set-equality verified) 2026-07-29 11:46:31 -07:00
methods_complete.py feat(tui): rank the slash menu by the skills you actually use 2026-08-01 01:17:41 -05:00
methods_config.py fix(tui): rebind extracted config handler to shared indicator constants 2026-07-31 22:33:16 -07:00
methods_prompt.py Hermes can read the in-app browser (#79482) 2026-08-05 16:35:00 +00:00
methods_session.py fix(delegation): bind steering to session generation 2026-08-06 09:40:27 -07:00
methods_tools.py fix(secrets): scope tier-3 credential reads (teams_pipeline, deepinfra models, FAL/XAI/VERCEL/DAYTONA/GITHUB presence, HERMES_API_KEY display) 2026-08-02 10:04:48 -07:00
project_tree.py feat(gateway): group unplaced sessions into a Home bucket in the project tree 2026-07-27 16:04:57 -05:00
render.py
server.py fix(agent): the desktop's tools reach it on remote and cloud backends too 2026-08-06 19:35:47 -06:00
slash_worker.py polish(mem): readonly config read, debug-level trim logs, loud frame test 2026-08-02 22:44:38 +05:30
synthetic_turn.py
transport.py
turn_marker.py feat(desktop): crash-survivable in-flight turn journal 2026-07-24 23:31:55 -05:00
ws.py perf(cold-start): mitigate ~14s GIL stall during backend init (#60800) 2026-08-03 21:16:09 +05:30