# Tool Terminal - Tasks

## Phase 1: Backend Setup

- [x] **Task 1.1**: Install backend dependencies
  - Add `asyncio-subprocess` handling
  - Verify FastAPI WebSocket support

- [x] **Task 1.2**: Create TerminalSession class
  - Create `src/services/terminal_session.py`
  - Manage docker exec subprocess
  - Stream I/O between WebSocket and PTY
  - Handle resize signals
  - Cleanup on disconnect

- [x] **Task 1.3**: Create TerminalManager
  - Create `src/services/terminal_manager.py`
  - Manage active sessions dictionary
  - Create/close session methods
  - Handle resize forwarding
  - Session cleanup on disconnect

## Phase 2: WebSocket Endpoint

- [x] **Task 2.1**: Create WebSocket endpoint
  - Add `GET /ws/tool-instances/{instance_id}/terminal`
  - Authenticate via session cookie
  - Verify instance ownership
  - Establish bidirectional WebSocket
  - Handle connection lifecycle

- [x] **Task 2.2**: Add WebSocket to main app
  - Register WebSocket router in `main.py`
  - Configure WebSocket middleware
  - Handle CORS for WebSocket connections

## Phase 3: Frontend Dependencies

- [x] **Task 3.1**: Install xterm.js
  - `npm install xterm xterm-addon-fit xterm-addon-web-links`
  - Add to package.json

## Phase 4: Frontend Components

- [x] **Task 4.1**: Create TerminalComponent
  - Create `components/terminal.tsx`
  - Initialize xterm.js terminal
  - Manage WebSocket connection
  - Handle terminal resize with xterm-addon-fit
  - Connection status indicator
  - Auto-reconnect on disconnect

- [x] **Task 4.2**: Create TerminalPage
  - Create `pages/terminal.tsx`
  - Full-page terminal layout
  - Instance name in header
  - Back button
  - Connection status badge

## Phase 5: Integration

- [x] **Task 5.1**: Add terminal route
  - Add `/instances/:instanceId/terminal` to router
  - Link from InstanceList component
  - Show terminal button for running instances

- [x] **Task 5.2**: Add terminal button to InstanceList
  - Add terminal icon button to running instances
  - Disable for stopped instances
  - Navigate to terminal page

## Phase 6: Styling

- [x] **Task 6.1**: Add terminal CSS
  - Dark terminal theme matching app
  - Full-height container
  - Proper padding and borders
  - Connection status colors

## Phase 7: Quality Gates

- [x] **Task 7.1**: Backend tests
  - ruff check
  - mypy
  - pytest

- [x] **Task 7.2**: Frontend tests
  - typecheck
  - lint
  - build

- [x] **Task 7.3**: Manual testing
  - Open terminal for running instance
  - Execute commands
  - Test resize
  - Verify access control
