Phase 21: container terminal (web exec), local + agent (0.27.0)
Interactive shell into a compose-managed container over WebSocket + xterm.js,
opened from the container card on the stack Overview tab. Admin-only (non-admin
handshake rejected with 4403); only containers with the compose project label
are reachable.
- backend services/exec_service.py: create/start/resize exec + a shared
bidirectional pump_exec (recv/sendall on sock._sock, executor thread,
resize control frames, exit-code frame).
- routers/ws.py: _authorize_admin + /ws/exec/{container_id} and the
/ws/agent-exec/{agent_id}/{container_id} proxy (forwards BOTH directions).
- agent_app.py: /agent/ws/exec/{container_id}.
- frontend: @xterm/xterm + @xterm/addon-fit; ContainerTerminal modal (shell
picker, fit/resize, exit/error handling) + a Terminal button on ContainerCard.
Live-verified (TestClient): local happy/exit/guard/4403/4401, agent happy/4401,
proxy bidirectional round-trip.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
b44a5b9f86
commit
be3568274f
+9
-1
@@ -12,7 +12,15 @@ is most design-ambiguous, left last).
|
||||
|
||||
---
|
||||
|
||||
## Phase 21 — Container terminal (web exec) ☐ NOT STARTED → target 0.27.0
|
||||
## Phase 21 — Container terminal (web exec) ☑ DONE — shipped 0.27.0
|
||||
|
||||
**Result:** All backend paths live-verified via TestClient against real
|
||||
containers — local exec (echo round-trip, exit code 0, unmanaged-guard,
|
||||
non-admin→4403, no-token→4401), agent exec (echo, bad-token→4401), and the
|
||||
central proxy (bidirectional: keystrokes browser→proxy→agent→container, output
|
||||
back). docker-py 7.1.0 socket is `socket.SocketIO` with the real fd at
|
||||
`._sock` (as predicted). Frontend `tsc -b && vite build` green with xterm.
|
||||
Not click-tested in a real browser (the WS/exec plumbing is what's verified).
|
||||
|
||||
Interactive shell into a running, compose-managed container over WebSocket +
|
||||
xterm.js, like Portainer's Console. Local + agent. **Admin-only** (exec is
|
||||
|
||||
Reference in New Issue
Block a user