Commit graph

351 commits

Author SHA1 Message Date
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
Peter Steinberger
cfdfe70083 Fix remaining macOS test failures
- Fix path splitting tests to match actual macOS URL behavior for root paths
- Add hour formatting to ServerEvent.formattedDuration for durations >= 1 hour
- Update Claude notification tests to check ConfigManager instead of UserDefaults

All tests now pass successfully (241 passed, 0 failed, 6 skipped).
2025-07-27 16:27:35 +02:00
Peter Steinberger
b3c13748f9 fix: Add missing EventSource implementation for NotificationService
- Implement EventSource class for Server-Sent Events (SSE) support
- Add localAuthToken computed property to ServerManager
- Fix actor isolation issues in NotificationService
- Fix warning about unnecessary nil coalescing in SessionMonitor
- Remove unused duration variable in handleCommandError
2025-07-27 16:05:28 +02:00
Peter Steinberger
69a3ff0714 Fix notification preferences to match web defaults
- Set notificationsEnabled to false by default in ConfigManager (matching TypeScript)
- Update NotificationService to check master notifications switch
- Update SessionMonitor to use ConfigManager instead of UserDefaults
- Fix notification tests to handle existing config files
- Add documentation about expected default values
2025-07-27 15:53:33 +02:00
Peter Steinberger
a5d43e8274 Fix remaining test compilation issues
- Add attachedViaVT parameter to test initializations
- Remove unnecessary nil coalescing operators for non-optional name property
2025-07-27 15:50:33 +02:00
Peter Steinberger
609c57d0bb Document proper macOS test execution requirements
- Add critical note that macOS tests must use XcodeBuildMCP
- Warn against using swift test which causes crashes
- Explain UserNotifications framework requires Xcode environment
- Add examples of correct test commands
2025-07-27 15:49:06 +02:00
Peter Steinberger
ee89f85866 Fix remaining macOS test compilation issues
- Update SessionMonitorTests to use all required ServerSessionInfo fields
- Add @MainActor annotations to NotificationServiceClaudeTurnTests
- Fix NotificationServiceTests to work with MainActor isolation
- Remove invalid save() method calls on NotificationPreferences
2025-07-27 15:49:06 +02:00
Peter Steinberger
7ee567a4b4 Fix macOS test compilation errors
- Add @MainActor annotations to fix actor isolation issues
- Convert GeneralSettingsViewTests from class to struct for Sendable conformance
- Fix missing test function declaration in SystemControlHandlerTests
- Remove unnecessary nil coalescing operator warning in NotificationService
2025-07-27 15:49:06 +02:00
Peter Steinberger
d75e2ffd76 Restore attachedViaVT property to distinguish VibeTunnel sessions
- Add attachedViaVT to SessionInfo interface to identify nested sessions
- Set attachedViaVT=true when VIBETUNNEL_SESSION_ID env var is present
- Add property to Swift ServerSessionInfo for API compatibility
- Allows distinguishing between direct terminal sessions and those spawned from within VibeTunnel
2025-07-27 15:48:44 +02:00
Peter Steinberger
03c5638f21 Migrate remaining XCTest files to Swift Testing framework
- Migrate PathSplittingTests.swift from XCTest to Swift Testing
  - Convert from XCTestCase class to struct with @Suite attribute
  - Replace XCTAssert* calls with #expect macros
  - Add descriptive test names using @Test attribute
  - Use parameterized testing for pathComponents test
  - Replace XCTUnwrap with try #require

- Migrate GeneralSettingsViewTests.swift from XCTest to Swift Testing
  - Convert from XCTestCase to final class with @Suite attribute
  - Replace setUp() with init() for test setup
  - Replace XCTAssert* calls with #expect macros
  - Add descriptive test names using @Test attribute

Both test files now follow Swift Testing conventions while maintaining their original test logic and coverage.
2025-07-27 15:48:44 +02:00
Peter Steinberger
a90f37e4cb
feat: Add comprehensive notification system with Codable models and modern Swift concurrency (#475) 2025-07-27 13:23:37 +00:00
Peter Steinberger
c6a299ac5f
Add push notifications onboarding screen (#474)
Co-authored-by: Diego Petrucci <baulei@icloud.com>
2025-07-27 12:12:30 +00:00
Peter Steinberger
5128142b1b claude tweaks 2025-07-27 14:10:59 +02:00
Peter Steinberger
3f86ed365c Optimize GitRepositoryMonitor to reduce redundant checks
- Implement repository deduplication in SessionMonitor to check each unique directory only once
- Add smart parent directory detection for common development paths (Projects, Development, etc.)
- Extend cache duration for common parent directories from 30s to 5 minutes
- Add negative caching for non-Git directories (10 minute cache)
- Group sessions by repository before Git checks to avoid duplicate lookups

This reduces Git repository checks from ~100/minute to significantly fewer by:
1. Deduplicating checks across multiple sessions in the same repository
2. Caching parent directory results longer
3. Remembering non-Git paths to avoid repeated filesystem traversals
2025-07-27 14:00:22 +02:00
Peter Steinberger
d4b7962800
Refactor notification preferences system (#469)
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Alex Fallah <alexfallah7@gmail.com>
2025-07-27 13:32:11 +02:00
Peter Steinberger
f3a98ee058
feat: add comprehensive Git worktree management with follow mode and enhanced UI (#452) 2025-07-26 15:06:18 +02:00
Peter Steinberger
4c897f139b
Remove screen recording permission requirement (#451) 2025-07-22 01:43:00 +02:00
Peter Steinberger
e5e6142a6d
Fix authenticate-pam module missing in npm package (#450) 2025-07-22 00:21:44 +02:00
Peter Steinberger
102f6c5e33
Improve Quick Start editor UI consistency across web and macOS (#448) 2025-07-21 17:11:49 +02:00
Peter Steinberger
2b6df96689
refactor: split StatusBarController into smaller components (#445) 2025-07-21 14:53:32 +02:00
Peter Steinberger
958973c7b7
refactor: extract all magic strings to centralized constants (#444) 2025-07-21 14:22:45 +02:00