vibetunnel/web
Peter Steinberger b515d70de7 fix: Properly track session.json debounce timer for cleanup
- Update session.sessionJsonDebounceTimer when creating new timers
- Clear timer reference after callback execution
- Remove incorrect initial null assignment
- Fixes memory leak where timers continued after session cleanup

The bug occurred because the timer ID was only stored in a local variable,
preventing proper cleanup during session termination.
2025-07-01 13:41:09 +01:00
..
.claude Add precommit command for web app 2025-07-01 12:19:13 +01:00
docs Display Claude status in Mac menubar (#160) 2025-07-01 11:21:28 +01:00
scripts Fix port argument passthrough for web dev (#163) 2025-07-01 06:50:20 +01:00
src fix: Properly track session.json debounce timer for cleanup 2025-07-01 13:41:09 +01:00
.gitignore feat: Add image upload functionality with camera/gallery picker (#140) 2025-07-01 06:47:08 +01:00
.npmrc Add Playwright E2E test framework (#120) 2025-06-30 02:51:21 +01: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 /cp and c+p as shorthands for commit and push 2025-06-28 15:22:05 +02:00
custom-node.md improve custom node docs 2025-06-22 14:46:34 +02:00
DEVELOPMENT.md Fix race condition risks in code quality tools 2025-06-28 15:22:05 +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 Clean-up of web/, updated spec.md 2025-06-27 21:13:55 +02:00
package.json feat: Add vt title command for dynamic session naming 2025-07-01 13:41:09 +01:00
playwright.config.ts feat: optimize Playwright tests for sequential execution (#149) 2025-07-01 04:42:38 +01:00
pnpm-lock.yaml feat: Add vt title command for dynamic session naming 2025-07-01 13:41:09 +01:00
postcss.config.js Add complete web frontend for terminal multiplexer 2025-06-16 00:29:33 +02:00
README.md Add husky pre-commit hooks for code quality enforcement (#157) 2025-07-01 03:49:00 +01:00
SECURITY.md Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
spec.md feat: add asciinema stream pruning for clear sequences (#155) 2025-07-01 05:01:59 +01:00
tailwind.config.js add missing background 2025-06-24 03:25:50 +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

Pre-commit Hooks

This project uses husky and lint-staged to enforce code quality standards. After running pnpm install, pre-commit hooks will automatically:

  • Format code with Biome
  • Check for linting errors
  • Run TypeScript type checking for all configs

If your commit fails due to linting or type errors, fix the issues and try again. Many formatting issues will be auto-fixed.

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

Terminal Resizing Behavior

VibeTunnel intelligently handles terminal width based on how the session was created:

Tunneled Sessions (via vt command)

  • Sessions created by running vt in a native terminal window
  • Terminal width is automatically limited to the native terminal's width to prevent text overflow
  • Prevents flickering and display issues in the native terminal
  • Shows "≤120" (or actual width) in the width selector when limited
  • Users can manually override this limit using the width selector

Frontend-Created Sessions

  • Sessions created directly from the web interface (using the "New Session" button)
  • No width restrictions by default - uses full browser width
  • Perfect for web-only workflows where no native terminal is involved
  • Shows "∞" in the width selector for unlimited width

Manual Width Control

  • Click the width indicator in the session header to open the width selector
  • Choose from common terminal widths (80, 120, 132, etc.) or unlimited
  • Width preferences are saved per session and persist across reloads
  • Selecting any width manually overrides automatic limitations