alex
7ce2af18c9
fix: restore dev features lost in main→dev merge
...
Merge b6f89f9 ('integrate main restructuring into dev') took main's
smaller refactored versions and overwrote dev-specific features.
Restored from dev commit 51a399c and ancestors:
Backend terminal (c754984 , 37134b8 ):
- terminal_session.py: asyncio.add_reader event-driven I/O, flow control
(64KB pause/32KB resume), 2ms output batching, binary WebSocket frames,
EOF detection, circular replay buffer
- terminal_manager.py: named sessions, MaxSessionsExceededError,
TerminalSessionModel persistence, idle timeout cleanup
- terminal.py: dual WebSocket routes (/terminal and /terminal/{session_id}),
SessionRef mutable reference for session resets
SSH key mounting (c6b804b ):
- instance_lifecycle.py: _mount_ssh_keys helper that prepares multiple
SSH keys with unique filenames (id_ed25519_<name>), writes combined
SSH config, mounts single ~/.ssh directory
- tool_instance.py: ssh_key_ids JSON column
- schemas/tool_instance.py: ssh_key_ids field in CreateInstanceRequest
- tool_instances.py: pass ssh_key_ids through create endpoint and response
Quality gates: py_compile passed, ruff passed on all edited files
2026-06-03 14:06:04 +02:00
alex
6c8cfe9157
feat: responsive web terminal with auto-reconnect, heartbeat, and local echo
...
Implements a resilient, responsive web terminal that survives network blips,
provides instant typing feedback, and restores scrollback on reconnect.
Backend changes:
- Add heartbeat tracking (15s ping interval, 60s idle timeout)
- Add message batching (16ms flush window) for efficient I/O
- Add termios echo detection and set_echo_state control messages
- Add graceful session_ended notification before close
- Add ping/pong protocol support
Frontend changes:
- Rewrite TerminalComponent with status bar, connection indicator,
session-ended overlay, reconnect banner, and ResizeObserver
- Add useTerminalConnection hook with:
- Exponential backoff auto-reconnect (1s → 30s max, 10 attempts)
- Heartbeat/ping-pong with latency tracking
- Local echo for printable ASCII with server deduplication
- Resize debounce (200ms) + throttle (500ms)
- Scrollback serialization via xterm-addon-serialize
- Ctrl+Shift+R manual reconnect shortcut
- Add WebSocket protocol types and encoding utilities
- Add xterm-addon-serialize dependency
Tests:
- 16 backend unit tests (TerminalSession + TerminalManager)
- 13 frontend hook tests (connection lifecycle, reconnect, resize,
scrollback, callbacks)
Quality gates:
- Frontend typecheck: clean
- Frontend lint: clean
- Frontend tests: 48 passed
- Backend unit tests: 101 passed
- Backend ruff: clean
SDD artifacts: openspec/changes/responsive-terminal/
2026-05-27 21:27:49 +02:00
Fusion
56b54e269a
fix(terminal): create PTY for proper interactive shell
...
- Use Python pty module to create pseudo-terminal
- Pass slave fd to docker exec for real TTY allocation
- Fixes ioctl errors and job control warnings
- Supports terminal resizing via TIOCSWINSZ
Quality gates: local testing
2026-05-21 12:03:36 +02:00
Fusion
6e597b9e21
fix(terminal): allocate proper TTY for docker exec
...
- Change docker exec -i to -it for real TTY allocation
- Fixes ioctl errors and job control warnings in terminal
- Gives bash a proper terminal for interactive use
Quality gates: manually tested
2026-05-21 11:39:14 +02:00
Fusion
a2c3d6877e
fix(terminal): remove TTY allocation, use interactive bash with TERM env var
2026-05-21 11:21:51 +02:00
Fusion
76266fc3d0
fix(terminal): allocate pseudo-TTY for interactive docker exec session
2026-05-21 11:09:08 +02:00
Fusion
e344e961d6
feat: implement web terminal for tool instances
...
- Add TerminalSession backend service for docker exec subprocess management
- Add TerminalManager for WebSocket session lifecycle management
- Create WebSocket endpoint at /ws/tool-instances/{id}/terminal
- Add session cookie authentication and instance ownership verification
- Install xterm.js with fit and web-links addons
- Create TerminalComponent with xterm.js integration
- Create TerminalPage with full-screen terminal view
- Add terminal route at /instances/:id/terminal
- Add terminal button to InstanceList for running instances
- Add terminal and arrow-left icons to icon registry
- Add comprehensive terminal CSS styles (dark theme, responsive)
Quality gates: typecheck ✓, lint ✓, build ✓, Python syntax ✓
2026-05-19 21:11:29 +02:00