## Why

Currently, tool types support multiple interfaces (e.g., `web` and `terminal` simultaneously), but in practice each tool serves a single purpose and should have one clear interface type. Additionally, terminal tools don't need ports or tunneling capabilities, yet the UI always shows port configuration. This creates confusion and allows invalid configurations.

## What Changes

- **BREAKING**: Change `interfaces` from an array (`["web"]`) to a single string (`"web"` or `"terminal"`) in the ToolType model, API, and frontend
- Add `requires_port` boolean field to ToolType model — `true` for web tools, `false` for terminal tools
- Update frontend UI to use a dropdown for interface type selection (single choice)
- Conditionally show/hide port-related fields based on `requires_port`
- Add database migration to convert existing `interfaces` arrays to single values and set `requires_port`
- Update built-in tool types (code-server, jupyter-notebook) to use new schema
- Update tool workshop page to reflect the single-type dropdown and conditional port visibility

## Capabilities

### New Capabilities
- `tool-type-single-interface`: Enforce single interface type per tool with dropdown selection
- `tool-type-port-visibility`: Conditionally show port/tunnel config based on tool interface type

### Modified Capabilities
- `tool-types-definition`: Update model and API to replace `interfaces` array with single `interface_type` string and add `requires_port`
- `frontend-foundation`: Update tool workshop UI for single interface dropdown and conditional port fields

## Impact

- Database: Migration to change `interfaces` JSON column to `interface_type` string + add `requires_port` boolean
- Backend API: Update Pydantic schemas, SQLAlchemy model, validation logic
- Frontend: Update TypeScript types, tool workshop form, API client
- Existing tool configs: No direct impact, but port_override field becomes irrelevant for terminal tools
- Tests: Update test data and assertions for new schema
