Files
headquarter/openspec/changes/mobile-terminal-ux/specs/tool-terminal/spec.md
T
Fusion b6bda3d692 feat: implement mobile terminal UX
- Add mobile viewport detection hook
- Add virtual keyboard detection with fallback
- Add auto-hide hook for header/keys strip
- Add special keys mapping hook
- Create MobileTerminalHeader, SpecialKeysStrip, SpecialKeysPanel components
- Create MobileTerminalWrapper component
- Update TerminalComponent with mobile support, font scaling, copy/paste, reconnection
- Update AppShell to hide chrome on mobile terminal pages
- Update TerminalPage to use MobileTerminalWrapper
- Add comprehensive mobile terminal styles
- TypeScript check passes
- Build succeeds
2026-05-24 11:30:04 +02:00

4.5 KiB

MODIFIED Requirements

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
  • AND on mobile devices, the resize is debounced by 250ms

Scenario: Mobile keyboard resize

  • GIVEN an active terminal session on a mobile device
  • WHEN the virtual keyboard appears or disappears
  • THEN the terminal container height adjusts to fit the visible viewport
  • AND the terminal is refitted with new dimensions

Requirement: WebSocket Terminal

The system SHALL provide terminal sessions via WebSocket.

Scenario: Mobile reconnection

  • GIVEN a terminal session on a mobile device
  • WHEN the WebSocket disconnects due to network change or backgrounding
  • THEN the terminal shows a "Reconnecting..." status
  • AND attempts to reconnect automatically
  • AND if reconnection fails after 3 attempts, shows an error with a manual reconnect option

ADDED Requirements

Requirement: Mobile Terminal Layout

The system SHALL provide a fullscreen terminal experience on mobile devices.

Scenario: Mobile terminal page

  • WHEN a user navigates to an instance terminal page on a mobile device (viewport width < 768px)
  • THEN the AppShell chrome is collapsed to a minimal header
  • AND the terminal occupies the full viewport below the header
  • AND the header auto-hides after 3 seconds of inactivity
  • AND tapping the terminal area toggles header visibility

Scenario: Collapsed AppShell header

  • WHEN the terminal is in mobile mode
  • THEN the header displays:
    • A back button
    • A hamburger menu toggle (reveals navigation)
    • The instance name
    • A close button
  • AND the sidebar navigation is hidden by default

Requirement: Special Keys Toolbar

The system SHALL provide access to special terminal keys on mobile devices.

Scenario: Special keys strip

  • WHEN a user is on a mobile terminal
  • THEN a strip of special keys is available at the bottom of the screen
  • AND the strip contains: Esc, Tab, Ctrl, Alt, Up, Down, Left, Right
  • AND the strip auto-hides after 3 seconds of inactivity
  • AND swiping up from the bottom reveals the strip
  • AND tapping the terminal area hides the strip

Scenario: Expanded special keys panel

  • WHEN a user taps the "More" button on the special keys strip
  • THEN an expanded panel appears with additional keys:
    • Home, End, Page Up, Page Down
    • Ctrl+C, Ctrl+D, Ctrl+Z
    • F1 through F12
  • AND tapping outside the panel closes it

Scenario: Sending special keys

  • WHEN a user taps a special key
  • THEN the corresponding escape sequence is sent via WebSocket
  • AND the key press is visually acknowledged (brief highlight)

Requirement: Touch Gestures

The system SHALL support touch interactions in the terminal.

Scenario: Disable browser zoom

  • WHEN a user is on a mobile terminal page
  • THEN browser zoom is disabled via meta viewport tag with user-scalable=no
  • AND pinch gestures do not zoom the page

Scenario: Terminal scroll

  • WHEN a user performs a two-finger swipe in the terminal
  • THEN the terminal scrollback buffer scrolls
  • AND the browser page does not scroll

Scenario: Text selection

  • WHEN a user long-presses in the terminal
  • THEN xterm.js native selection behavior is used
  • AND browser native text selection UI is suppressed

Requirement: Copy and Paste

The system SHALL provide copy and paste functionality on mobile devices.

Scenario: Copy button

  • WHEN a user selects text in the terminal
  • THEN a "Copy" button appears in the header
  • AND tapping it copies the selection to clipboard

Scenario: Paste button

  • WHEN a user taps a "Paste" button in the header or special keys panel
  • THEN the system attempts to read from the clipboard
  • AND pastes the content into the terminal

Requirement: Font Scaling

The system SHALL provide readable font sizes on mobile devices.

Scenario: Mobile font size

  • WHEN the terminal is displayed on a mobile device
  • THEN the font size is at least 16px
  • AND the font size scales proportionally with viewport width (min 16px, max 24px)

Scenario: Font size preference

  • WHEN a user changes the font size
  • THEN the preference is persisted in localStorage
  • AND applied on subsequent terminal sessions