Terminal: a shell on the agent chat's computer, before the first message too
ci / check (push) Failing after 2s
ci / start (push) Failing after 2s

The Terminal panel opens a shell on the device an agent chat works on, in its
folder: for a new agent chat as soon as the device and folder are chosen (the
server's /api/v2/devices/{device}/terminal/ws?directory=, which the chat's first
message takes over -- the same socket carries on), and for an open agent chat
from the header (/api/v2/chats/{chat}/terminal/ws, the web page's shell).
Offered where GET /devices says the device opens a terminal.

The socket is Rust's (src-tauri/src/terminal.rs, tungstenite on the rustls
ureq already brings): the bearer token goes in the handshake and never reaches
the page, which gets the frames as `terminal` events and sends keys, sizes and
close through commands. 4401 signs the app out as a 401 does.

xterm and its fit addon are the server's vendored build, pinned through
fetch-vendor.sh like CodeMirror and loaded on the first open. Send to chat puts
the selection, the last marked command and its output, or the screen into the
composer, never sent. The terminal and the activity panel take turns in the
panel column. Continue in a terminal stays in the chat's menu.

tests/ui: seven B3 cases with a mocked socket, at 1280 and 390 px.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
HomerandClaude Opus 5.5 committed 2026-11-10 09:06:01 +00:00
1 parent ec32bca644
commit ac0d4ce623
21 files changed
+1989 -24

No files matched your search

+10
View File
@@ -24,6 +24,16 @@ All notable changes to LLeMbas Desktop. The format follows
### Added
- **Terminal.** An agent chat has a Terminal panel: a shell on the computer the chat works on, in
its folder, beside the chat (over it in a narrow window). A new agent chat offers it as soon as
the folder is chosen, before the first message -- and the chat that message makes carries on in
the same shell. An open agent chat opens its own from the header, the same shell the web
interface shows. **Send to chat** puts the selection, or the last command and its output, into
the message box to read before sending; the panel copies them too, and steps between commands
where the shell marks them. The terminal and the activity panel take turns beside the chat;
closing either keeps the shell. Offered where the computer allows a terminal (needs the server's
2.0.0-beta.8). The app opens the connection itself, with its sign-in: the page never holds it.
"Continue in a terminal" is now in the chat's menu only.
- `tests/ui/`: the page under a headless browser against a stand-in for the app's bridge, with
the server's answers as a table (`node tests/ui/run.mjs`, needs Playwright and a Chromium).