mirror of
https://github.com/Dvorinka/Containr.git
synced 2026-10-28 15:51:26 +00:00
feat: interactive terminal — WS-bridged docker exec PTY
GET /services/:id/terminal upgrades to a WebSocket attached to a `docker exec` PTY in the service's running replica. JSON frames both ways: stdin/resize out, stdout/exit/error in. Shell probe tries each candidate (bash→sh) since `command -v` needs a shell to run; distroless images get a clean "no shell" error instead of an OCI failure dump. - docker.Client gains ExecAttach + ExecResize wrappers - Frontend: xterm.js replaces the one-off console section — live PTY, fit-addon resizes forwarded over the socket - CLI: `containr shell <id>` bridges the local TTY (raw mode, SIGWINCH resize forwarding); `containr exec` keeps the one-off command path - Access mirrors service logs: project manage scope required Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
5eac4a382b
commit
a634e6960c
13 files changed
+570
-75
No files matched your search
+6
-3
@@ -307,9 +307,12 @@ and wired refs, one click or one CLI call.
|
||||
UI at `/operations` (Operate nav) with live refetch; `containr
|
||||
operations` CLI + `containr_operations_get` MCP. Remaining: agent
|
||||
commands once node fleet lands; flush/stuck-job tools.
|
||||
- [ ] **Interactive terminal** — upgrade exec to WS PTY (`xterm.js`);
|
||||
`nodes/:id/terminal` via agent (dflow's wetty without the extra
|
||||
container).
|
||||
- [x] **Interactive terminal** — `GET /services/:id/terminal` upgrades
|
||||
to a WebSocket bridged to a `docker exec` PTY (bash→sh fallback,
|
||||
`TERM=xterm-256color`, resize frames). xterm.js Console section on the
|
||||
service page; `containr shell <id>` bridges a local TTY; distroless
|
||||
images get a clean "no shell" error. Remaining: `nodes/:id/terminal`
|
||||
via agent.
|
||||
- [x] **Team invites** — `POST /admin/invites` returns a one-time
|
||||
link (sha256-hashed token at rest, optional email binding, TTL);
|
||||
public `GET /auth/invites/:token` validates and
|
||||
|
||||
Reference in new issue
Block a user