Commit graph

371 commits

Author SHA1 Message Date
Peter Steinberger
4854ca8737
Fix session creation Codable mismatch (#500) 2025-08-03 20:03:26 +02:00
Peter Steinberger
e9ef227f8f Always show port kill button 2025-08-02 18:15:22 +02:00
Peter Steinberger
8c8e267ea6 Update macOS version to beta 16
💘 Generated with Crush
Co-Authored-By: Crush <crush@charm.land>
2025-08-02 18:01:24 +02:00
Peter Steinberger
dd4db5ab07
Fix npm package issues and update dependencies for beta 15.2 (#494) 2025-08-02 17:48:31 +02:00
Peter Steinberger
50f5de34be Bump version to 1.0.0-beta.16
- Update macOS marketing version to 1.0.0-beta.16
- Increment build number to 206
- Update web package.json version to 1.0.0-beta.16
- Prepare for next beta release
2025-08-02 02:41:05 +02:00
Peter Steinberger
c22eeb9cd8 Fix NotificationPermissionPageView initializer availability
- Remove DEBUG-only restriction on initializer
- Allows Preview code to work in all build configurations
- Fixes compilation error in release builds
2025-08-02 02:16:44 +02:00
Peter Steinberger
464d9b9923 Fix project and scheme names in build scripts
- Update all references from VibeTunnel-Mac.xcodeproj to VibeTunnel.xcodeproj
- Update scheme references from VibeTunnel-Mac to VibeTunnel
- These changes align the scripts with the actual project structure
2025-08-02 02:15:33 +02:00
Peter Steinberger
4c4af17640 Update quickstart commands: replace python3 and pnpm run dev with opencode and crush
- Replace python3 with opencode in position 3
- Replace pnpm run dev with crush in position 4
- Keep claude and gemini in positions 1-2
- Move zsh and node to positions 5-6
- Update both Mac (ConfigManager.swift) and Web (config.ts) configurations
- Maintain synchronization between platforms
2025-08-02 01:23:04 +02:00
Peter Steinberger
445f6c7449 docs: Add complete contributor list for beta.15 release
- Add Lachlan Donald (@lox) for Tailscale Serve integration (#472)
- Add Diego Petrucci (@diegopetrucci) for push notifications onboarding (#474)
- Credit Tao Xu (@hewigovens) for CJK IME input support (#447, #480)
- Update Mac about screen with new contributors
- Add thank you message to contributors section

This ensures all contributors since beta.14 are properly credited
for their valuable contributions to VibeTunnel.

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-02 01:04:46 +02:00
Peter Steinberger
84956a73d6 feat: Add Justin Williams to contributors list in About screen
- Add @jblwilliams as new contributor for removing unused ScreenCaptureKit import
- Maintains alphabetical order at end of contributor list

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-02 00:49:59 +02:00
Justin Williams
cded6b2bf9 chore: Remove unused ScreenCaptureKit import from ServerManager 2025-08-02 00:23:14 +02:00
Peter Steinberger
459cf52ef6 Ensure tailscale can be disabled when not running 2025-08-01 00:45:22 +02:00
Peter Steinberger
bed01f67c2 Rename Vibetunnel-Mac to Vibetunnel 2025-07-31 15:06:10 +02:00
Alex A. Fallah
4523a21f6c
Fix Test Notification Button to VibeTunnel Mac App (#483)
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2025-07-31 14:57:17 +02:00
Peter Steinberger
e9a1ce0555 warning fixes 2025-07-31 02:21:18 +02:00
Peter Steinberger
eab1e6c962 feat: Update bundle identifiers and add logging configuration profile
- Updated macOS test bundle IDs to use consistent naming pattern:
  - sh.vibetunnel.vibetunnelTests → sh.vibetunnel.vibetunnel.tests
  - sh.vibetunnel.vibetunnelTests.debug → sh.vibetunnel.vibetunnel.tests.debug
- Updated iOS test bundle ID:
  - sh.vibetunnel.VibeTunnelTests-Mobile → sh.vibetunnel.ios.tests
- Fixed iOS logging to use sh.vibetunnel.ios subsystem consistently
- Created logging configuration profile in apple/logging/ to enable full debug logging
- Configuration profile covers all VibeTunnel subsystems and bundle IDs
- Updated documentation to reflect new bundle identifiers and logging setup
2025-07-30 18:04:32 +02:00
Peter Steinberger
a35bd5c7e9 Playwright performance 2025-07-30 13:04:59 +02:00
Peter Steinberger
12ef75386c fix: Update Mac app to use path-based URLs for sessions
The Mac app was still using the old query parameter format (?session=id)
while the web app expects path-based URLs (/session/id). This caused
sessions not backed by windows to open with the wrong URL format.

Updated DashboardURLBuilder to generate path-based URLs matching the
web app's routing expectations.
2025-07-30 03:44:07 +02:00
Lachlan Donald
745f5090bb
feat: add Tailscale Serve integration with automatic authentication (#472)
* feat: add secure Tailscale Serve integration support

- Add --enable-tailscale-serve flag to bind server to localhost
- Implement Tailscale identity header authentication
- Add security validations for localhost origin and proxy headers
- Create TailscaleServeService to manage tailscale serve process
- Fix dev script to properly pass arguments through pnpm
- Add comprehensive auth middleware tests for all auth methods
- Ensure secure integration with Tailscale's reverse proxy

* refactor: use isFromLocalhostAddress helper for Tailscale auth

- Extract localhost checking logic into dedicated helper function
- Makes the code clearer and addresses review feedback
- Maintains the same security checks for Tailscale authentication

* feat(web): Add Tailscale Serve integration support

- Add TailscaleServeService to manage background tailscale serve process
- Add --enable-tailscale-serve and --use-tailscale-serve flags
- Force localhost binding when Tailscale Serve is enabled
- Enhance auth middleware to support Tailscale identity headers
- Add isFromLocalhostAddress helper for secure localhost validation
- Fix dev script to properly pass CLI arguments through pnpm
- Add comprehensive auth middleware tests (17 tests)
- Use 'tailscale serve reset' for thorough cleanup

The server now automatically manages the Tailscale Serve proxy process,
providing secure HTTPS access through Tailscale networks without manual
configuration.

* feat(mac): Add Tailscale Serve toggle in Remote Access settings

- Add 'Enable Tailscale Serve Integration' toggle in RemoteAccessSettingsView
- Pass --use-tailscale-serve flag from both BunServer and DevServerManager
- Show HTTPS URL when Tailscale Serve is enabled, HTTP when disabled
- Fix URL copy bug in ServerInfoSection for Tailscale addresses
- Update authentication documentation with new integration mode
- Server automatically restarts when toggle is changed

The macOS app now provides a user-friendly toggle to enable secure
Tailscale Serve integration without manual configuration.

* fix(security): Remove dangerous --allow-tailscale-auth flag

- Remove --allow-tailscale-auth flag that allowed header spoofing
- Remove --use-tailscale-serve alias for consistency
- Keep only --enable-tailscale-serve which safely manages everything
- Update all references in server.ts to use enableTailscaleServe
- Update macOS app to use --enable-tailscale-serve flag
- Update documentation to remove manual setup mode

The --allow-tailscale-auth flag was dangerous because it allowed users to
enable Tailscale header authentication while binding to network interfaces,
which would allow anyone on the network to spoof the Tailscale headers.

Now there's only one safe way to use Tailscale integration: --enable-tailscale-serve,
which forces localhost binding and manages the proxy automatically.

* fix: address PR feedback from Peter and Cursor

- Fix Promise hang bug in TailscaleServeService when process exits with code 0
- Move tailscaleServeEnabled string to AppConstants.UserDefaultsKeys
- Create TailscaleURLHelper for URL construction logic
- Add Linux support to TailscaleServeService with common Tailscale paths
- Update all references to use centralized constants
- Fix code formatting issues

* feat: Add Tailscale Serve status monitoring and error visibility

* fix: Correct pass-through argument logic for boolean flags and duplicates

- Track processed argument indices instead of checking if arg already exists in serverArgs
- Add set of known boolean flags that don't take values
- Allow duplicate arguments to be passed through
- Only treat non-dash arguments as values for non-boolean flags

This fixes issues where:
1. Boolean flags like --verbose were incorrectly consuming the next argument
2. Duplicate flags couldn't be passed through to the server

* fix: Resolve promise hanging and orphaned processes in Tailscale serve

- Add settled flag to prevent multiple promise resolutions
- Handle exit code 0 as a failure case during startup
- Properly terminate child process in cleanup method
- Add timeout for graceful shutdown before force killing

This fixes:
1. Promise hanging when tailscale serve exits with code 0
2. Orphaned processes when startup fails or cleanup is called

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2025-07-30 02:30:10 +02:00
Peter Steinberger
909a9e8249 Remove unused 'Verbose Status Check Logging' toggle
This toggle was UI-only with no actual implementation. It was intended for
controlling verbose logging of remote service health checks but was never
connected to any logging logic.
2025-07-29 10:27:10 +02:00
Peter Steinberger
dcd65b5db4 Fix notification auto-reconnection on page reload
- Add auto-resubscribe logic to web push notification service
  - Automatically restore push subscription if notifications were previously enabled
  - Sync subscription state with saved preferences on initialization
  - Handle failed resubscription by updating preferences accordingly

- Fix Mac app notification service startup check
  - Only establish SSE connection if notifications are enabled in config
  - Prevents unnecessary connection attempts when notifications are disabled
  - Ensures consistent behavior between web and native components

This fixes the issue where notification settings appeared enabled but the
SSE connection indicator was red and test button was disabled until the
user manually toggled notifications off and on.
2025-07-28 20:15:28 +02:00
Peter Steinberger
5aabd862e7 Fix test notification system
- Remove duplicate NotificationService.start() call from VibeTunnelApp
- Fix compression middleware blocking SSE events by excluding /api/events
- Add Accept-Encoding: identity header to EventSource to prevent compression
- Add comprehensive debugging to EventSource for data reception
- Fix Swift compilation errors with explicit self references
- The issue was that SSE events were being gzip compressed, preventing proper streaming
2025-07-28 19:03:21 +02:00
Peter Steinberger
dad2f3380e Add SSE connection status indicator to notification settings
- Show real-time connection status with colored indicator
- Display 'Event Stream: Connected/Disconnected' on separate row
- Add warning message when notifications enabled but connection is down
- Update connection status via NotificationCenter events
- Add debugging logs to EventSource for better troubleshooting
2025-07-28 18:06:02 +02:00
Peter Steinberger
aa5bb9eef2 Implement unified test notification system through server
- Add /api/test-notification endpoint that emits SSE events to all clients
- Include server version in test notifications for verification
- Update web client to listen for SSE test notifications
- Update Mac app to call server endpoint instead of local notification
- Add TestNotification to ServerEventType enum
- Ensure test notifications are distributed to ALL connected endpoints

This provides a complete test of the notification flow:
Web/Mac → Server → SSE → All clients (Web + Mac)
2025-07-28 16:04:07 +02:00
Peter Steinberger
8cdce956e7 remove double block 2025-07-28 15:52:52 +02:00
Peter Steinberger
0812bfd89d Standardize git status terminology to use 'New' for untracked files
- Web UI: Changed 'Added' to 'New' for untracked files
- Mac UI: Changed 'Untracked' to 'New' and removed staged file display
- Both UIs now consistently show: New (green +), Modified (yellow ~), Deleted (red -)
- Focused on working directory changes, removed staging area counts
- Backend: Changed untracked to added in git-status.ts for consistency
2025-07-28 15:16:37 +02:00
Peter Steinberger
75dd51883b Merge branch 'main' - keep notification refactoring changes 2025-07-28 15:09:31 +02:00
Peter Steinberger
7caa839027 Unify notification system to use SSE for all clients
- Remove redundant Unix socket notification path from SessionMonitor
- Fix Mac app to use correct /api/events endpoint (was missing /api prefix)
- Remove NotificationControlHandler as notifications now flow through SSE
- Clean up unused 'session-monitor' category from control protocol
- Simplify notification flow: Events → SessionMonitor → SSE → All clients

This eliminates duplicate code paths and makes the system more maintainable.
2025-07-28 15:00:08 +02:00
Peter Steinberger
a53091d04b Implement unified notification system via Unix socket
- Extended control protocol to support session-monitor events
- Modified SessionMonitor to emit events via Unix socket to Mac app
- Removed duplicate notification logic from Mac SessionMonitor
- All notifications now flow: Server → Unix Socket → Mac NotificationControlHandler
- Respects user notification preferences on Mac side
- Single source of truth for all notification events (server-side)

This eliminates the need for SSE connection from Mac app and removes
polling-based duplicate detection, simplifying the architecture.
2025-07-28 14:35:29 +02:00
Peter Steinberger
a992aaae76 Dashboard setting tweaks 2025-07-28 14:17:46 +02:00
Peter Steinberger
969fd2e327 Show server PID in settings 2025-07-28 14:13:39 +02:00
Peter Steinberger
6a918aeab6 mac settings: remove dupe section 2025-07-28 14:13:14 +02:00
Peter Steinberger
f856c49e1b Fix session cleanup on startup by using correct JSON field name 2025-07-28 13:52:56 +02:00
Peter Steinberger
414a2160e7 Rework Settings to give Notifications its own Tab 2025-07-28 13:43:44 +02:00
Peter Steinberger
a2bd642053 Fix duplicate Git worktree button in mobile view
- Move worktree toggle button inside responsive container
- Button now properly hides when compact menu is shown
- Prevents redundant display of same functionality on mobile
2025-07-28 13:24:17 +02:00
Peter Steinberger
9d7fe36699
Fix CI issues (#476) 2025-07-28 09:19:40 +02:00
Peter Steinberger
0b2f675e78 Modernize autocomplete dropdown with SwiftUI materials
- Replace NSColor.controlBackgroundColor with .regularMaterial
- Remove unused VisualEffectBackground and AutocompletePopupContent
- Simplify code by using native SwiftUI material modifiers
2025-07-27 20:06:20 +02:00
Peter Steinberger
f893e747a5 Fix mouse hover selection in autocomplete dropdown
- Pass selectedIndex binding through to AutocompleteViewWithKeyboard
- Allow mouse hover to properly update selection state
- Maintain keyboard navigation functionality
2025-07-27 20:05:12 +02:00
Peter Steinberger
b7aafa9a6d Fix autocomplete dropdown transparency using NSWindow
- Replace SwiftUI overlay with custom NSWindow implementation
- Use NSColor.controlBackgroundColor for opaque background
- Add proper click-outside-to-dismiss functionality
- Handle Swift concurrency and actor isolation correctly
- Inspired by SuggestionsDemo but simplified for our use case
2025-07-27 19:49:00 +02:00
Peter Steinberger
43e38f6b0d Fix minus button click target to match plus button using ZStack trick
- Use invisible plus symbol under minus to ensure equal button sizes
- SF Symbol 'minus' is naturally smaller than 'plus', causing unequal click targets
- Both buttons now have identical 20x20 clickable areas
2025-07-27 19:04:25 +02:00
Peter Steinberger
10ce613c6b Comment out verbose debug logs for session tracking and buffer notifications 2025-07-27 18:53:46 +02:00
Peter Steinberger
56589b8a0e move repo scan to background 2025-07-27 18:49:56 +02:00
Peter Steinberger
e02f0c555d lint 2025-07-27 18:49:40 +02:00
Peter Steinberger
5b18b6712c sync worktree view with web 2025-07-27 18:47:57 +02:00
Peter Steinberger
bf76d779ea Improve Quick Start Commands UI with native macOS table
- Replace custom List implementation with native SwiftUI Table
- Add standard macOS +/- buttons with proper click targets
- Support inline editing with double-click and Enter key
- Fix text field alignment and padding issues
- Add proper focus management for keyboard navigation
- Remove redundant labels during inline editing
- Ensure table regains focus after editing completes
2025-07-27 18:47:21 +02:00
Peter Steinberger
8ad99ab4a7 Fix Quick Start settings UI to match other settings sections
- Remove double border by restructuring to use Section with header/footer pattern
- Move "Quick Start Commands" title and description outside the content border
- Remove custom background and border from List to eliminate visual inconsistency
- Match the same visual hierarchy as Server Configuration and other settings panels
- Maintain single border around content area with consistent styling
2025-07-27 18:09:19 +02:00
Peter Steinberger
fab5987e33 Add error logging to session termination from list view
- Add consistent error logging when terminate session fails from X button
- Match error handling behavior between list view and detail view
- Helps diagnose issues with session termination
2025-07-27 18:08:44 +02:00
Peter Steinberger
cae76b6fae Add error logging to SessionRow terminate function
Previously, when session termination failed from the X button in the list view,
the error was silently swallowed. This made it difficult to diagnose why
termination might fail compared to the menu action which has proper logging.

Now both termination paths log errors consistently, making debugging easier.
2025-07-27 18:05:49 +02:00
Peter Steinberger
dfe0cfda25 Fix test failures and resolve all linting warnings
- Fix notification preference tests to match default enabled: false
- Fix PtyManager initialization in integration tests
- Fix path splitting tests for macOS URL behavior
- Add hour formatting to duration display (1h 23m 45s format)
- Fix non-optional URL nil comparison warning
- Fix force unwrapping warning in EventSource.swift
- Apply SwiftFormat formatting fixes
- Update test expectations to match actual behavior
2025-07-27 17:44:50 +02:00
Peter Steinberger
22bcdeffd4 Fix remaining compilation warnings
- Remove unnecessary nil check for non-optional URL in PathSplittingTests
- Add CodingKeys enum to ServerEvent to explicitly exclude auto-generated id property from encoding/decoding

This resolves all compilation warnings except the harmless AppIntents metadata warning.
2025-07-27 16:33:44 +02:00