# Sessions Hub - Design

## Architecture

```
Sessions Hub
├── Navigation
│   └── "Sessions" tab (between Dashboard and Projects)
│       └── Badge with active session count
├── SessionsPage
│   ├── Last Session Section
│   │   └── Quick access card with resume button
│   ├── Active Sessions Section
│   │   └── Grid of active session cards
│   ├── Recent Sessions Section
│   │   └── List of recent sessions
│   └── Create Session Section
│       └── Project selector + tool type selector
└── User Config
    └── last_session_id field
```

## Component Design

### SessionsPage

**Sections:**
1. **Last Session** (if exists)
   - Large card showing last session details
   - "Resume" button to open the workspace
   - Shows project, repository, tool type

2. **Active Sessions**
   - Grid of cards for running instances
   - Each card: name, type, status badge, action buttons
   - Actions: Open, Stop, Restart, Delete

3. **Recent Sessions**
   - List of last 5 sessions (any status)
   - Compact list view with status indicators
   - Click to navigate to workspace

4. **Create New Session**
   - Project dropdown (all user's projects)
   - Repository dropdown (filtered by project)
   - Tool type dropdown
   - Display name input
   - "Create" button

### AppShell Updates

**Navigation:**
```
Dashboard | Sessions (3) | Projects | SSH Keys | Tool Types | Settings
```

**Badge:**
- Shows count of active (running) sessions
- Updates via existing sessions polling

### User Config Extension

**New field:**
```typescript
interface UserConfig {
  // existing fields...
  last_session_id: string | null;
}
```

**Update timing:**
- Set when creating a new session
- Set when opening/resuming a session

## Data Flow

### Loading Sessions Page
1. Fetch user config (for last_session_id)
2. Fetch all user sessions via `/users/me/sessions`
3. Filter into active vs recent
4. Display last session if available

### Creating Session
1. User selects project, repo, tool type
2. POST to `/projects/{id}/repositories/{id}/instances`
3. On success: update user config with last_session_id
4. Refresh sessions list

### Resuming Session
1. User clicks "Resume" on last session
2. Navigate to workspace with session active
3. Update user config (reinforce as last)

## API Changes

### GET /users/me/sessions
Already exists - returns all sessions for user.

### PATCH /users/me/config
Already exists - add `last_session_id` to config schema.

## Technical Details

**Frontend:**
- New page: `pages/sessions.tsx`
- Update: `app-shell.tsx` for navigation
- Update: `api/settings.ts` for config type
- Update: `state/sessions.tsx` for badge count

**Backend:**
- Update: `models/user_config.py` schema
- Update: `api/user_config.py` to accept last_session_id

**No new backend endpoints needed** - reuse existing APIs.

## Error Handling

- No sessions: Show empty state with "Create your first session" CTA
- Failed to load: Show error with retry button
- Create failed: Show error message, keep form open
