fix: disable native touch panning on mobile terminal and archive specs

- Change mobile terminal CSS to use touch-action: none and
  overscroll-behavior: none so the custom touch handler owns swipes
- Archive completed/partial OpenSpec specs to
  openspec/changes/archive/2026-06-14-completed-specs-archive/
- Regenerate project maps

Quality gates: npm run typecheck, npm run lint (apps/web)
This commit is contained in:
Developer
2026-06-14 18:07:01 +00:00
parent 896674195c
commit c8db6ce933
580 changed files with 4678 additions and 4333 deletions
@@ -0,0 +1,19 @@
# 2026-06-14-completed-specs-archive/tool-terminal (index)
dir: 2026-06-14-completed-specs-archive/tool-terminal
## role
Defines requirements for a browser-based WebSocket terminal interface that enables secure, session-managed access to running Docker containers with bidirectional I/O streaming.
## parent
index: 2026-06-14-completed-specs-archive/.pi-map.index.md
map: 2026-06-14-completed-specs-archive/.pi-map.md
## children
-
## files
- spec.md
## links
index: 2026-06-14-completed-specs-archive/tool-terminal/.pi-map.index.md
map: 2026-06-14-completed-specs-archive/tool-terminal/.pi-map.md
## workflows
-
## dirty
-
@@ -0,0 +1,19 @@
# 2026-06-14-completed-specs-archive/tool-terminal
dir: 2026-06-14-completed-specs-archive/tool-terminal
index: 2026-06-14-completed-specs-archive/tool-terminal/.pi-map.index.md
## role
Defines requirements for a browser-based WebSocket terminal interface that enables secure, session-managed access to running Docker containers with bidirectional I/O streaming.
## files
- spec.md | Specifies requirements for a browser-based WebSocket terminal system for accessing running Docker containers with session management, I/O streaming, and access control. | dep: tool-instances, auth-oauth, xterm.js, ptyprocess
## arch
Event-driven WebSocket architecture with session-based multiplexing, container-attach abstraction layer, and token-based access control for real-time bidirectional streaming between browser clients and Docker container TTY/stdout/stderr interfaces.
## tags
spec, specifies, requirements, browser, websocket, terminal, system, accessing
## symbols
-
## workflows
-
## dirty
-
@@ -0,0 +1,95 @@
# Web Terminal Specification
## Purpose
Provide browser-based terminal access to running tool containers.
## Requirements
### Requirement: WebSocket Terminal
The system SHALL provide terminal sessions via WebSocket.
#### Scenario: Open terminal
- GIVEN a running tool instance
- WHEN the user opens the terminal
- THEN a WebSocket connection is established
- AND a shell is spawned in the container via `docker exec`
#### Scenario: Open terminal with startup command
- GIVEN a running tool instance with a tool type that has `startup_command` set
- WHEN the user opens the terminal
- THEN a WebSocket connection is established
- AND the startup command is executed before the interactive shell
- AND the shell is spawned in the container via `docker exec`
#### Scenario: Open terminal without startup command
- GIVEN a running tool instance with a tool type that has no `startup_command`
- WHEN the user opens the terminal
- THEN a WebSocket connection is established
- AND the shell spawns directly without any startup execution
### Requirement: Terminal I/O
The system SHALL stream terminal I/O via WebSocket.
#### Scenario: Command execution
- GIVEN an active terminal session
- WHEN the user types a command
- THEN stdin is forwarded to the container shell
- AND stdout/stderr is streamed back to the browser
### Requirement: Terminal Resize
The system SHALL support terminal resize events.
#### Scenario: Resize terminal
- GIVEN an active terminal session
- WHEN the browser window is resized
- THEN the terminal dimensions (COLS, ROWS) are updated
- AND the shell receives the new size
### Requirement: Session Management
The system SHALL manage terminal sessions.
#### Scenario: Multiple sessions
- GIVEN a running tool instance
- WHEN multiple terminals are opened
- THEN each has an independent session
#### Scenario: Cleanup
- GIVEN an active terminal session
- WHEN the user disconnects
- THEN the session is cleaned up
- AND the shell process is terminated
#### Scenario: Reset terminal session runs startup command
- GIVEN an active terminal session
- WHEN the user resets the session
- THEN a new shell is spawned
- AND the startup command executes before the new interactive shell
### Requirement: Access Control
The system SHALL restrict terminal access.
#### Scenario: Unauthorized access
- GIVEN a tool instance owned by user A
- WHEN user B tries to access the terminal
- THEN the connection is rejected with 403
## Dependencies
- tool-instances (running containers)
- auth-oauth (authentication)
- xterm.js frontend library
- ptyprocess for pseudo-TTY
## Quality Gates
- `pytest` must pass
- `mypy .` must pass
- `ruff check .` must pass
- `npm run typecheck` must pass
- `npm run lint` must pass