Commit graph

654 commits

Author SHA1 Message Date
Peter Steinberger
192fd7e941
Improve asciicast clear offset caching (#333)
Co-authored-by: Claude <noreply@anthropic.com>
2025-07-15 03:24:15 +02:00
Marek Šuppa
e8191181c9
feat(web): Add repository discovery to web client (#301)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2025-07-15 03:23:28 +02:00
Tao Xu
e89abc9dc6
Fix SSH key manager modal layout and test compatibility (#325)
Co-authored-by: Claude <noreply@anthropic.com>
2025-07-15 02:52:49 +02:00
Peter Steinberger
68e6456aef
docs: Add Linux setup instructions and authentication documentation (#344)
Co-authored-by: Claude <noreply@anthropic.com>
2025-07-15 02:47:25 +02:00
Peter Steinberger
34b596a010
Enable keyboard navigation on session grid (#322) 2025-07-12 23:23:28 +02:00
Peter Steinberger
00933690a8
Fix Safari clipboard paste (#336)
Co-authored-by: Claude <noreply@anthropic.com>
2025-07-12 23:13:35 +02:00
Peter Steinberger
29f938dcc1
Terminal theme improvements (#332)
Co-authored-by: Claude <noreply@anthropic.com>
2025-07-12 22:11:30 +02:00
Peter Steinberger
d019559f2b feat(web): add terminal theme preference 2025-07-12 19:45:27 +02:00
Peter Steinberger
93ba0064bd feat: add compression, security headers, and caching optimizations
Implement several performance and security improvements for Express 5:

Performance:
- Add compression middleware with Brotli support for all responses
- Enable WebSocket compression (perMessageDeflate) for terminal data
- Exclude compression for SSE streams (/api/sessions/:id/stream) to prevent asciicast issues
- Add intelligent caching headers for static assets:
  - Immutable assets (JS, CSS, fonts, images): 1 year cache
  - HTML files: 1 hour cache
  - Enable ETags and Last-Modified headers

Security:
- Add Helmet middleware for security headers
- Disable CSP and COEP to maintain compatibility with terminal features

Additional improvements:
- Remove obsolete @ts-expect-error directives (Express 5 properly types res.flush)
- Balanced compression level (6) for optimal performance

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12 19:42:54 +02:00
Peter Steinberger
c2d9039e45 chore: update all dependencies to latest versions (except Tailwind)
Update all project dependencies to their latest versions while keeping
Tailwind CSS at v3.4.17 to avoid breaking changes.

Notable updates:
- Express: 4.19.2 → 5.1.0 (major version upgrade)
- Chalk: 4.1.2 → 5.4.1 (major version upgrade to ESM)
- CodeMirror packages: Updated to latest v6 versions
- TypeScript types: Updated to latest versions
- Development tools: Biome, Playwright, Puppeteer, etc.

All code quality checks pass successfully after the updates.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12 19:30:47 +02:00
Peter Steinberger
cd2378c665 fix: add user ID for no-auth mode and improve TypeScript imports
Extract improvements from PR #318:

1. Set default user ID in no-auth mode for auth middleware
   - Ensures consistent behavior when authentication is disabled
   - Prevents potential issues with undefined user IDs

2. Convert to type-only imports in push notification service
   - Use TypeScript type imports for better tree shaking
   - Remove .js extensions from imports for consistency
   - Minor logging improvement for service worker registration

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12 19:21:29 +02:00
Peter Steinberger
1052354394 feat: add keyboard navigation to session grid
- Enable arrow key navigation (up/down/left/right) through sessions
- Press Enter to open selected session
- Add visual feedback for keyboard-selected sessions
- Fix global event listener conflict by scoping to component
- Make session-list focusable with proper focus indicators
- Pass selected state to session-card for visual highlighting

Adopts PR #322 with improvements based on review feedback
2025-07-12 12:48:22 +02:00
Peter Steinberger
e3d0d9655b
Add professional light mode with theme toggle (#314) 2025-07-12 01:42:42 +02:00
Peter Steinberger
2dc37db0bb
Extract mobile detection to shared utility and reduce mobile font size (#310) 2025-07-11 10:24:06 +02:00
Peter Steinberger
0c617aed8d
Fix mobile terminal resize loop (#305) 2025-07-11 08:23:47 +02:00
Peter Steinberger
b16035b9f8
Remove activity indicator to prevent title jumping (#309) 2025-07-11 08:22:54 +02:00
Peter Steinberger
83fa3a22b8
Replace Microsoft node-pty with vendored fork to fix crashes (#304) 2025-07-11 07:19:32 +02:00
Peter Steinberger
25c8322b04
Fix mobile header overflow with dropdown menu (#295) 2025-07-10 07:50:34 +02:00
Jeff Hurray
d0e5bdacf2
Consolidate Z Index Logic (#291)
Co-authored-by: Claude <noreply@anthropic.com>
2025-07-10 06:34:50 +02:00
Peter Steinberger
76e16e94c6
refactor: extract preventAndStopEvent helper + support alt+nav on mobile (#290) 2025-07-09 21:07:20 +02:00
Jeff Hurray
ca3b1519d5 Revert "fix playwright tests"
This reverts commit d02b410c14678fe7d556ea0e70f21f85ba65f2be.
2025-07-09 16:38:49 +02:00
Jeff Hurray
8cab4e6caa fix playwright tests
This was an unrelated issue on main

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 16:38:49 +02:00
Jeff Hurray
14f5315ab0 Fix lint errors in file browser test
- Remove non-null assertion in favor of proper null check
- Add z-index comments for clarity in modal overlays
- Remove unused Z_INDEX imports after switching to comments

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 16:38:49 +02:00
Jeff Hurray
913cce61d2 lint fix 2025-07-09 16:38:49 +02:00
Jeff Hurray
274d9aeceb Add debugging and stopPropagation to file browser button
- Add stopPropagation to Browse button click handler in session-create-form
- Add debug logging to track state changes
- Match the pattern used in session-header for consistency
2025-07-09 16:38:49 +02:00
hewigovens
bf32367fee add alt+delete/left/right support 2025-07-09 16:33:04 +02:00
Peter Steinberger
43c98cac4b bump to b9 2025-07-09 09:18:08 +02:00
Peter Steinberger
dc0676b0a0 change server cleanup logic to only kill zombies 2025-07-08 22:05:01 +02:00
Peter Steinberger
6b93fdbf41
Fix Homebrew library dependencies in release builds (#269) 2025-07-08 09:55:52 +01:00
Jeff Hurray
32caa7ac4f Make file picker a distinct route 2025-07-08 08:15:20 +01:00
Jeff Hurray
10987e6290 Remove modal wrapper bc it breaks things 2025-07-08 08:09:12 +01:00
Peter Steinberger
b7b5aa2004
feat: add magic wand button to web frontend for AI sessions (#262)
Co-authored-by: Claude <noreply@anthropic.com>
2025-07-08 02:13:34 +01:00
Peter Steinberger
e65843064c Remove unnecessary Fish shell expansion comment 2025-07-08 00:47:11 +01:00
Raghav Sethi
966c671755
feat: add fish shell expansion support (#228) (#242)
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: raghav-latte <131696988+raghav-latte@users.noreply.github.com>
2025-07-08 00:44:31 +01:00
Peter Steinberger
ea3c22fba1 Remove remaining animations and fix file browser issues
- Swap file picker and settings buttons in session header (settings now at the end)
- Disable all button transitions in session view with body.in-session-view
- Disable modal backdrop fade-in animation (0.3s) in session view
- Fix file browser briefly showing then going dark by preventing event bubbling
- Add stopPropagation to file browser button click to prevent duplicate modals

The session detail page should now have zero animations when toggling sidebar
or opening modals.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-08 00:43:51 +01:00
Peter Steinberger
d7a8b565d2 Fix 1-2 second animation delay when reopening session sidebar
- Remove animate-fade-in class from compact mode session list items
- Prevent sessions-showing/hiding animation classes when in session detail view
- Disable View Transitions API for navigating back from session detail view
- Add body.in-session-view class to disable all animations in session view
- Remove transition-all duration-200 from compact session list items
- Disable grid transitions when in session view

This eliminates all staggered animations and transitions that were causing
the perceived 1-2 second delay when toggling the sidebar in session detail view.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-08 00:43:51 +01:00
Peter Steinberger
35e523f051 Fix touch device UI issues and remove session view animations
- Make inline-edit pencil always visible on touch devices with CSS media query
- Remove terminal resize animation (transition: all 0.3s ease-out)
- Remove magic wand AI button that was confusing users
- Reorganize touch device layout: close button left of time
- Disable View Transitions API for session navigation
- Add CSS overrides to disable all button transitions in session view
- Fix TypeScript errors by adding missing handleDeleteSession method

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-08 00:43:51 +01:00
Peter Steinberger
24b0e9b2be Disable create session modal animation in session detail view
- Add check for session detail view in handleCreateSession()
- Add check for session detail view in handleCreateModalClose()
- Modal now appears/disappears instantly in session detail view
- Animation preserved in grid view where it works properly

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-08 00:43:51 +01:00
Peter Steinberger
5f408753b3 Reorganize UI buttons and move settings to session detail view
- Remove duplicate screen share button from sidebar
- Remove file browser button from sidebar
- Remove file picker/upload button from session header
- Move settings/notification icon from sidebar to session header (next to file browser)
- Disable sidebar slide animations to prevent terminal resize issues
- Simplify sidebar to only show Create Session button and User menu
- Settings button is now in session detail view for better context

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-08 00:43:51 +01:00
Peter Steinberger
f39e8dedd5 Remove iPad-specific keyboard layout, use same layout for all mobile devices
- Remove tablet-specific renderTabletLayout() method
- Remove deviceType property from terminal-quick-keys component
- Remove tablet-specific CSS classes (.tablet-layout, .compact)
- Simplify code to use the same 3-row keyboard for all mobile devices
- Provides consistent experience across iPhone and iPad

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-08 00:43:51 +01:00
Peter Steinberger
e31554981a Add universal touch device detection for keyboard mode
- Replace user agent detection with capability-based detection
- Support any touch device (iPad, Android, Surface, etc.)
- Add smart detection for hybrid devices (touch + trackpad)
- Add user preference support (auto/always/never)
- Add keyboard mode toggle button in mobile controls
- Fix landscape mode detection on all touch devices
- Use hardware capabilities instead of brittle UA strings

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-08 00:43:51 +01:00
Peter Steinberger
2815f77b0a fix: Ensure tablets receive all mobile features
- Pass isMobile instead of isPhone to setupMobileFeatures and setupEventListeners
- Tablets need VirtualKeyboard API, Visual Viewport API, and touch event listeners
- Only the keyboard layout should differ between phones and tablets, not core mobile features
2025-07-08 00:43:51 +01:00
Peter Steinberger
ef0f928a89 feat: Add compact keyboard layout for iPads
- Detect device type (phone vs tablet) based on screen size
- Show custom keyboard on iPads with optimized compact layout
- Portrait mode: 2 rows with essential terminal keys
- Landscape mode: Single row with most important keys
- Properly handle device rotation and window resizing
- Add TypeScript declarations for window.__deviceType

Fixes #223
2025-07-08 00:43:51 +01:00
Peter Steinberger
56db25efe2 Fix: Make magic wand prompt more forceful to prevent direct title injection
The magic wand feature now uses emphatic language to ensure AI assistants
use the 'vt title' command instead of injecting terminal escape sequences.
This prevents Claude from being "too smart" and bypassing our title filtering.

Fixes #248
2025-07-08 00:43:33 +01:00
Peter Steinberger
85d9f3d17a
Unified control protocol and deferred screen recording permissions (#239) 2025-07-08 00:42:13 +01:00
Peter Steinberger
7e697d6774
Delete old sessions when VibeTunnel version changes (#254) 2025-07-07 00:05:26 +01:00
Peter Steinberger
9db8fd284b Fix shell configuration files not being loaded
- Ensure bash, zsh, and fish spawn as login shells to read config files
- Add -i and -l flags for bash/zsh, --interactive and --login for fish
- Avoid duplicate flags if already present
- Add user feedback when starting shells in login mode

Fixes #251
2025-07-06 23:30:41 +01:00
Peter Steinberger
7f7b4b682b
Fix terminal flow control to prevent xterm.js buffer overflow (#223) 2025-07-06 12:45:31 +01:00
Armin Ronacher
36337cfd7a Fix linter 2025-07-06 11:25:27 +01:00
Armin Ronacher
6fd74b6282 Move screencap out of /api to fix auth issues 2025-07-06 11:25:27 +01:00