vibetunnel/web
Helmut Januschka 9aaac17150
Add Shift+Tab support for Claude Code planning mode (GitHub #100) (#105)
* Add Shift+Tab support for Claude Code planning mode (GitHub #100)

Added proper Shift+Tab key sequence handling to enable Claude Code mode switching.

Changes:
- Added 'shift_tab' to SpecialKey type definition
- Updated input-manager.ts to detect Shift+Tab combination (e.shiftKey)
- Updated direct-keyboard-manager.ts for mobile Shift+Tab support
- Added shift_tab mapping to PTY manager (sends \x1b[Z escape sequence)

This allows users to press Shift+Tab in VibeTunnel to switch between Claude Code
modes (autoaccept, planning, regular) as expected.

Technical Details:
- Shift+Tab sends the standard terminal escape sequence \x1b[Z (CSI Z)
- Both desktop and mobile input handlers now support the key combination
- Maintains backward compatibility with regular Tab functionality

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix Shift+Tab not being sent as special key

Added 'shift_tab' to the special keys list in input-manager.ts so it gets
sent as {"key": "shift_tab"} instead of {"text": "shift_tab"}.

This was the missing piece - the frontend was correctly detecting Shift+Tab
but then sending it as text instead of a special key, so the server couldn't
map it to the \x1b[Z escape sequence.

Now Shift+Tab will properly send {"key": "shift_tab"} in the API request.

* Fix failing CI test in session-list.test.ts

Updated test expectation to check for 'compactMode' instead of
non-existent 'showCreateModal' property. This was a stale test
that was unrelated to the Shift+Tab changes but was blocking CI.

All tests now pass.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-06-27 21:00:09 +02:00
..
.claude Implement comprehensive user authentication with SSH key management (#43) 2025-06-24 00:31:13 +02:00
docs debug log 2025-06-25 02:11:51 +02:00
scripts Migrate to Microsoft node-pty v1.1.0-beta34 (#87) 2025-06-26 23:10:05 +02:00
src Add Shift+Tab support for Claude Code planning mode (GitHub #100) (#105) 2025-06-27 21:00:09 +02:00
.gitignore Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
.npmrc Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
.prettierignore lint web 2025-06-17 01:03:37 +02:00
.prettierrc.json ocx compiler for prettier for 3x speed 2025-06-25 12:22:13 +02:00
biome.json Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
build-custom-node.js Migrate to Microsoft node-pty v1.1.0-beta34 (#87) 2025-06-26 23:10:05 +02:00
build-native-clean.sh add script that filters build warnings 2025-06-25 04:21:34 +02:00
build-native.js Migrate to Microsoft node-pty v1.1.0-beta34 (#87) 2025-06-26 23:10:05 +02:00
CLAUDE.md Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
coverage-results.json Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
coverage-summary-formatted.json fix: handle non-finite values in terminal resize calculations 2025-06-25 02:11:18 +02:00
coverage.json fix: resolve remaining test failures in frontend components 2025-06-25 02:11:18 +02:00
custom-node.md improve custom node docs 2025-06-22 14:46:34 +02:00
FRONTEND_LOGGING_UPDATE_PROMPT.md feat: Add unified logging infrastructure with web viewer 2025-06-23 00:05:43 +02:00
fwd-test.ts Migrate to Microsoft node-pty v1.1.0-beta34 (#87) 2025-06-26 23:10:05 +02:00
LOGGING_STYLE_GUIDE.md feat: Add structured logging system with unified style 2025-06-22 22:40:00 +02:00
package.json add postinstall step to patch native libs 2025-06-27 00:18:20 +02:00
pnpm-lock.yaml Migrate to Microsoft node-pty v1.1.0-beta34 (#87) 2025-06-26 23:10:05 +02:00
postcss.config.js Add complete web frontend for terminal multiplexer 2025-06-16 00:29:33 +02:00
README.md Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
SECURITY.md Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
spec.md Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
tailwind.config.js add missing background 2025-06-24 03:25:50 +02:00
test-results.json Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
tsconfig.base.json Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
tsconfig.client.json Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
tsconfig.json Unfuck tsconfigs + VS Code + eslint + tsc, fix type errors 2025-06-24 01:51:46 +02:00
tsconfig.server.json Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
tsconfig.sw.json Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
tsconfig.test.json Unfuck tsconfigs + VS Code + eslint + tsc, fix type errors 2025-06-24 01:51:46 +02:00
vitest.config.ts Fix URL link detection for wrapped URLs on mobile terminals (#85) 2025-06-26 22:37:49 +02:00

VibeTunnel Web

Web terminal interface and server for VibeTunnel.

Quick Start

Production users: Use the pre-built VibeTunnel executable from the main app.

Development

pnpm install
pnpm run dev        # Watch mode: server + client
pnpm run dev:client # Watch mode: client only (for debugging server)

Open http://localhost:3000

Build Commands

pnpm run clean      # Remove build artifacts
pnpm run build      # Build everything (including native executable)
pnpm run lint       # Check code style
pnpm run lint:fix   # Fix code style
pnpm run typecheck  # Type checking
pnpm run test       # Run all tests (unit + e2e)
pnpm run format     # Format code

Production Build

pnpm run build          # Creates Node.js SEA executable
./native/vibetunnel    # Run standalone executable (no Node.js required)

Architecture

See spec.md for detailed architecture documentation.

Key Features

  • Terminal sessions via node-pty
  • Real-time streaming (SSE + WebSocket)
  • Binary-optimized buffer updates
  • Multi-session support
  • File browser integration