- Create ServerListViewModelProtocol for abstraction
- Rename ServerProfilesViewModel to ServerListViewModel for 1:1 view-viewmodel naming
- Implement proper dependency injection with ConnectionManager singleton
- Move all business logic from View to ViewModel
- Add auto-login and credential management in ViewModel
- Establish protocol-based architecture for testability
- Add static shared instance with private initializer
- Ensures single source of truth for connection state
- Prevents multiple instance conflicts in MVVM architecture
- All components now use ConnectionManager.shared
- Add AuthenticationError enum for proper error handling in authentication domain
- Add attemptAutoLogin(profile:) method to AuthenticationService that:
- Checks for valid existing tokens first
- Retrieves stored credentials from Keychain using profile ID
- Attempts authentication with stored username/password
- Throws AuthenticationError for graceful fallback to manual login
- Update ServerProfilesViewModel.connectToProfile() to:
- Remove early return that immediately showed login modal
- Attempt auto-login first when authentication required
- Only show login modal when auto-login fails (graceful fallback)
- Maintain existing connection flow for no-auth servers
- Enhance server setup UI to capture username during profile creation:
- Add username field to ConnectionViewModel
- Add username input to ServerConfigForm
- Update profile creation to store actual username instead of hardcoded "admin"
- Default to "admin" if username field is empty for backward compatibility
- Update EnhancedConnectionView to pass username binding to form
- Build verification: All changes compile successfully
This implements a "Terminus-like experience" where users configure credentials once during server setup and enjoy automatic authentication thereafter, with graceful fallback to manual login when needed.
fix: prevent file browser flashing and reduce log verbosity
- Split visibility and session change handling to avoid redundant directory loads
- Only reload directory when component becomes visible or session changes while visible
- Change directory browse success log from info to debug level to reduce noise
- Fixes issue where file browser would flash/reload unnecessarily on prop changes
```
- Add focus management check in lifecycle keyboard handler
- Skip keyboard capture when overlays/modals are displayed
- Add debug logging for session name change events
- Prevents keyboard conflicts with form inputs in overlays
* fix: remove hardcoded team ID from project, use xcconfig inheritance
- Remove hardcoded DEVELOPMENT_TEAM from project.pbxproj to prevent conflicts
- Fix xcconfig hierarchy so Local.xcconfig properly overrides defaults
- Set Y5PE65HELJ as fallback for CI when Local.xcconfig doesn't exist
- Local developers can now use their own team ID without project file changes
* fix: revert to using $(inherited) for team ID instead of hardcoding
The original setup was correct - using $(inherited) allows the team ID to be
set from Local.xcconfig while falling back to project settings when needed.
Hardcoding the team ID was unnecessary and went against the established pattern.
* fix: restore Local.xcconfig to membershipExceptions
Local.xcconfig must remain in membershipExceptions to prevent Xcode from
incorrectly treating it as a compilable source file. Configuration files
should be excluded from compilation and referenced via baseConfigurationReference.
Without this exception, Xcode attempts to compile Local.xcconfig as source code,
causing build errors and warnings, especially problematic for git-ignored files.
---------
Co-authored-by: David Collado <davidcollado@MacBook-Pro-de-David.local>
- Add titleInjectionInProgress flag to prevent concurrent injections
- Update lastWriteTimestamp immediately before enqueueing to prevent quiet period violations
- Clear pendingTitleToInject only after successful write completion
- Compare titles before clearing to avoid losing newer updates
- Stop injection timer only when no pending titles remain
- Use try-finally to ensure in-progress flag is always cleared
This prevents both lost title updates and quiet period violations that could
occur when titles were cleared prematurely or timestamps updated too late.
- Remove all uses of deprecated highlight() method in CustomMenuWindow
- Consistently use state property for NSStatusBarButton management
- Update StatusBarMenuManager to reset button state when menu state is .none
- Fix concurrency issues in CustomMenuWindow frame observer
- Ensure button state is properly managed throughout menu lifecycle
This fixes the issue where the button could display inconsistent visual states
or get stuck due to conflicting approaches between highlight() and state.
- Modified initLogger() to return early if already initialized
- Removed explicit false parameter in server.ts to preserve debug mode from CLI
- Fixes test failure where log file was being deleted after first write
- Change periodic activity update interval from 500ms to 1000ms
- Ensure all title updates go through debouncer (including session name changes)
- Prevents excessive terminal updates while maintaining responsiveness
- Fix menu bar button highlighting using state instead of highlight()
- Extract process name from command path for cleaner display
- Show session name next to command with dash separator
- Fix corner radius on new session dialog
- Make Create button darker green for better visibility
- Update editing to properly handle session names
- Create custom SideRoundedRectangle shape with flat top/bottom borders
- Apply custom shape to both SwiftUI background and NSWindow mask layer
- Update CustomMenuContainer to use the new shape for consistent styling
- Maintain rounded corners only on left and right sides as requested
This gives the menu bar dropdown a more integrated appearance with the
menu bar while keeping the modern rounded aesthetic on the sides.
Updates CLIInstaller to check for the VT command-line tool in both:
- /usr/local/bin/vt (default/Intel Macs)
- /opt/homebrew/bin/vt (Apple Silicon Homebrew)
This ensures users who have installed VT via Homebrew on M1/M2 Macs
will see it as already installed in the welcome flow.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implement modern color scheme with cyan/teal primary colors
- Redesign sidebar with card-based sessions and enhanced status indicators
- Create unified header design with gradient backgrounds
- Add JetBrains Mono font and improve typography throughout
- Implement smooth micro-interactions and animations
- Enhance terminal area with better focus states and loading overlays
- Update all buttons and inputs with consistent hover/focus effects
- Remove stdin handler cleanup that was contradicting the comment
- Remove unused stdinHandler and stdinDataListener from PtySession interface
- Stdin is handled via IPC socket, not process.stdin listeners
- Add stdin cleanup handlers for process.stdin listeners
- Implement event listener tracking to prevent memory leaks
- Add lazy watcher initialization for session.json monitoring
- Add explicit isExternalTerminal flag for better terminal detection
- Optimize activity file writing to only write on state changes
- Track last written activity state to avoid unnecessary disk I/O
- Fix timer management in setupSessionJsonWatcher to properly assign timer before setTimeout
- Improve IPC socket error handling to throw error instead of silently returning
- Socket path length validation now fails fast with clear error message
- Remove debug print statement from MenuBarView
- Fix SessionDetailView to display 'N/A' instead of '0' for nil PIDs
- Prevents confusion with actual PID 0 system process
- Display activity status (e.g., 'Browsing', 'Considering') below each session
- Show status inline with working directory path, separated by dot
- Match visual style from web frontend with orange status text
- Add compact path display with ~ for home directory
- Remove unused imports to clean up test files
- Use shorter session IDs to avoid path length issues
- Adjust timing in tests for better reliability
- Improve test descriptions and assertions
- Add debug logging for session fetching and status
- Display 'No sessions' text when session list is empty
- Add initial delay for auth token setup on app start
- Improve user feedback in menu bar interface