feat(opencode-web-terminal): complete OpenCode web terminal implementation

- Update OpenCode compose template with web server on port 3000
- Add default_port=3000 and interfaces=[terminal, web] to OpenCode seed data
- Remove hardcoded 8080 fallback in tunnel creation
- Fail gracefully when tool type has no default_port configured
- Update frontend ToolType API to include default_port, category, interfaces
- Add port, category, and interfaces fields to tool type creation form
- Display port and interfaces in tool type cards
- Create migration 0012 to make default_port non-nullable
- Set default_port values for existing built-in tool types
- Quality gates: typecheck ✓, build ✓, Python syntax ✓
This commit is contained in:
Fusion
2026-05-20 17:17:50 +02:00
parent 6ec35988cc
commit ac6bd3304d
14 changed files with 531 additions and 10 deletions
@@ -0,0 +1,39 @@
## ADDED Requirements
### Requirement: OpenCode runs a web server
The system SHALL configure OpenCode containers to run a web server accessible on port 3000.
#### Scenario: OpenCode container starts
- **GIVEN** an OpenCode tool instance
- **WHEN** the container starts
- **THEN** a web server is running on port 3000 inside the container
- **AND** the server serves a web terminal interface
### Requirement: OpenCode exposes web interface
The system SHALL mark OpenCode as having both terminal and web interfaces.
#### Scenario: OpenCode instance created
- **GIVEN** a new OpenCode instance
- **WHEN** the instance list is displayed
- **THEN** both "Open" and "Terminal" buttons are shown
### Requirement: OpenCode web terminal uses correct port
The system SHALL use port 3000 when creating tunnels for OpenCode instances.
#### Scenario: Tunnel created for OpenCode
- **GIVEN** an OpenCode instance with `default_port: 3000`
- **WHEN** the instance starts and creates a tunnel
- **THEN** the tunnel targets `http://container-name:3000`
### Requirement: OpenCode web terminal displays properly
The system SHALL serve a functional web terminal interface for OpenCode.
#### Scenario: User opens OpenCode web UI
- **GIVEN** a running OpenCode instance
- **WHEN** the user clicks the "Open" button
- **THEN** a new tab opens with the OpenCode web interface
- **AND** the interface shows a terminal connected to the OpenCode process