mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-25 00:51:20 +00:00
docs: document the dashboard Chat tab
AGENTS.md — new subsection under TUI Architecture explaining that the dashboard embeds the real hermes --tui rather than rewriting it, with pointers to the pty_bridge + WebSocket endpoint and the rule 'never add a parallel chat surface in React.' website/docs/user-guide/features/web-dashboard.md — user-facing Chat section inside the existing Web Dashboard page, covering how it works (WebSocket + PTY + xterm.js), the Sessions-page resume flow, and prerequisites (Node.js, ptyprocess, POSIX kernel / WSL on Windows).
This commit is contained in:
parent
a0701b1d5a
commit
2c2e32cc45
2 changed files with 33 additions and 0 deletions
11
AGENTS.md
11
AGENTS.md
|
|
@ -243,6 +243,17 @@ npm run fmt # prettier
|
||||||
npm test # vitest
|
npm test # vitest
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### TUI in the Dashboard (`hermes dashboard` → `/chat`)
|
||||||
|
|
||||||
|
The dashboard embeds the real `hermes --tui` — **not** a rewrite. See `hermes_cli/pty_bridge.py` + the `@app.websocket("/api/pty")` endpoint in `hermes_cli/web_server.py`.
|
||||||
|
|
||||||
|
- Browser loads `web/src/pages/ChatPage.tsx`, which mounts xterm.js's `Terminal` with the WebGL renderer, `@xterm/addon-fit` for container-driven resize, and `@xterm/addon-unicode11` for modern wide-character widths.
|
||||||
|
- `/api/pty?token=…` upgrades to a WebSocket; auth uses the same ephemeral `_SESSION_TOKEN` as REST, via query param (browsers can't set `Authorization` on WS upgrade).
|
||||||
|
- The server spawns whatever `hermes --tui` would spawn, through `ptyprocess` (POSIX PTY — WSL works, native Windows does not).
|
||||||
|
- Frames: raw PTY bytes each direction; resize via `\x1b[RESIZE:<cols>;<rows>]` intercepted on the server and applied with `TIOCSWINSZ`.
|
||||||
|
|
||||||
|
**Never add a parallel chat surface in React.** If you catch yourself re-implementing slash popover / model picker / tool cards for the dashboard, stop — the TUI already does those, and anything new you add to Ink will appear in the dashboard automatically.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Adding New Tools
|
## Adding New Tools
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,28 @@ The landing page shows a live overview of your installation:
|
||||||
|
|
||||||
The status page auto-refreshes every 5 seconds.
|
The status page auto-refreshes every 5 seconds.
|
||||||
|
|
||||||
|
### Chat
|
||||||
|
|
||||||
|
The **Chat** tab embeds the full Hermes TUI (the same interface you get from `hermes --tui`) directly in the browser. Everything you can do in the terminal TUI — slash commands, model picker, tool-call cards, markdown streaming, clarify/sudo/approval prompts, skin theming — works identically here, because the dashboard is running the real TUI binary and rendering its ANSI output through [xterm.js](https://xtermjs.org/) with its WebGL renderer for pixel-perfect cell layout.
|
||||||
|
|
||||||
|
**How it works:**
|
||||||
|
|
||||||
|
- `/api/pty` opens a WebSocket authenticated with the dashboard's session token
|
||||||
|
- The server spawns `hermes --tui` behind a POSIX pseudo-terminal
|
||||||
|
- Keystrokes travel to the PTY; ANSI output streams back to the browser
|
||||||
|
- xterm.js's WebGL renderer paints each cell to an integer-pixel grid; mouse tracking (SGR 1006), wide characters (Unicode 11), and box-drawing glyphs all render natively
|
||||||
|
- Resizing the browser window resizes the TUI via the `@xterm/addon-fit` addon
|
||||||
|
|
||||||
|
**Resume an existing session:** from the **Sessions** tab, click the play icon (▶) next to any session. That jumps to `/chat?resume=<id>` and launches the TUI with `--resume`, loading the full history.
|
||||||
|
|
||||||
|
**Prerequisites:**
|
||||||
|
|
||||||
|
- Node.js (same requirement as `hermes --tui`; the TUI bundle is built on first launch)
|
||||||
|
- `ptyprocess` — included when you `pip install hermes-agent[web]`
|
||||||
|
- POSIX kernel (Linux, macOS, or WSL). Native Windows Python is not supported — use WSL.
|
||||||
|
|
||||||
|
Close the browser tab and the PTY is reaped cleanly on the server. Re-opening spawns a fresh session.
|
||||||
|
|
||||||
### Config
|
### Config
|
||||||
|
|
||||||
A form-based editor for `config.yaml`. All 150+ configuration fields are auto-discovered from `DEFAULT_CONFIG` and organized into tabbed categories:
|
A form-based editor for `config.yaml`. All 150+ configuration fields are auto-discovered from `DEFAULT_CONFIG` and organized into tabbed categories:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue