mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-06-18 09:51:59 +00:00
The dashboard's embedded Chat surface (/chat, /api/ws, /api/pty) was gated behind `hermes dashboard --tui` / HERMES_DASHBOARD_TUI=1. The desktop app and the dashboard's own Chat tab both drive the agent over the /api/ws + /api/pty WebSockets, so a dashboard started without the flag would pass the /api/status health check but slam the chat WebSocket shut with WS code 4403 — the app connects, reports "ready", and chat stays dead. This was the root cause behind multiple user reports of the desktop app failing to connect to a self-hosted gateway/dashboard, and it bit Docker and host installs alike. Make the embedded chat unconditional: - web_server.py: _DASHBOARD_EMBEDDED_CHAT_ENABLED defaults to True; drop the embedded_chat parameter and the runtime reassignment from start_server(). The WS gates still read the constant (now always true) so the seam — and its "rejects when disabled" contract test — stays meaningful. - main.py: remove the `--tui` argument from the dashboard subparser and the `embedded_chat = args.tui or HERMES_DASHBOARD_TUI==1` derivation. - web/: isDashboardEmbeddedChatEnabled() returns true unconditionally; drop the deprecated __HERMES_DASHBOARD_TUI__ alias and the dead LEGACY_TUI_RE scrape in the vite dev-token plugin. - apps/desktop/electron/main.cjs: drop `--tui` from the spawned dashboardArgs (it would now error with "unrecognized arguments: --tui") and the redundant HERMES_DASHBOARD_TUI env injection. - Docker: no s6 run-script change needed — the script never passed --tui; the HERMES_DASHBOARD_TUI env var is now simply a no-op, so the image works out of the box with no extra var. - Docs: remove every dashboard --tui / HERMES_DASHBOARD_TUI reference across the CLI reference, env-var reference, docker/desktop/web-dashboard guides, in-app tips, and the zh-Hans translations. The terminal `hermes --tui` / HERMES_TUI references are intentionally left untouched. Tests: 270 passing across web_server, dashboard lifecycle, host-header, auth-gate, and docker-override-scripts suites.
24 lines
906 B
TypeScript
24 lines
906 B
TypeScript
declare global {
|
|
interface Window {
|
|
/**
|
|
* Injected by the server as `true`. The embedded TUI Chat surface
|
|
* (`/chat`, `/api/ws`, `/api/pty`) is always enabled, so this is
|
|
* effectively a constant; kept on `window` for any consumer that reads
|
|
* it directly and for parity with the server's bootstrap script.
|
|
*/
|
|
__HERMES_DASHBOARD_EMBEDDED_CHAT__?: boolean;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Whether the dashboard's embedded TUI Chat surface is available.
|
|
*
|
|
* The embedded chat (`/chat` tab, `/api/ws` + `/api/pty` WebSockets) is now
|
|
* an unconditional part of the dashboard — the desktop app and the in-browser
|
|
* Chat tab both depend on it — so this always returns `true`. The function is
|
|
* retained as a stable seam so call sites don't need to change if the surface
|
|
* ever becomes conditional again.
|
|
*/
|
|
export function isDashboardEmbeddedChatEnabled(): boolean {
|
|
return true;
|
|
}
|