The server now waits for tty-fwd to fully register the session before
returning the response. This prevents the frontend from querying for a
session that doesn't exist yet in the session list.
Also removed the problematic frontend fallback that would select the
"most recent" session when the exact ID wasn't found, which was causing
it to open the previous session.
- Migrate GitHub Actions to Blacksmith runners for faster CI
- Update ubuntu-latest to blacksmith-4vcpu-ubuntu-2404
- Update actions/setup-node@v4 to useblacksmith/setup-node@v5
- Update Swatinem/rust-cache@v2 to useblacksmith/rust-cache@v3
- Fix all linting warnings across all platforms
- TypeScript: Fix any type warnings with proper type annotations
- Rust: All clippy warnings resolved
- Swift: Fix SwiftLint violations and format code
- Update all dependencies to latest versions
- npm: Major updates including Express 5 compatibility fixes
- Rust: Update 7 crates to latest compatible versions
- Swift: Dependencies already up-to-date
- Add comprehensive test suite using Vitest
- API endpoint tests for session CRUD operations
- WebSocket connection and streaming tests
- Session management lifecycle tests
- Frontend component tests (terminal, session-list)
- Critical functionality tests covering core features
- Test infrastructure with proper mocking and utilities
- All tests passing, ready for production use
- Removed info logs for Accessibility permission status checks
- Removed info logs for AppleScript permission status checks
- These were being logged repeatedly and cluttering the console
Swift 6 has issues with NotificationCenter's AsyncSequence returning
non-Sendable types. Use traditional selector-based observer to avoid
concurrency issues.
- Use .values on NotificationCenter notifications AsyncSequence
- Replace openApplication with open to avoid non-Sendable return type
- Properly handle async operations within MainActor context
- Relocated "The Story" section with blog post link to appear right after "Why VibeTunnel?"
- Makes the full story more discoverable for readers interested in the project's background
- Also includes Swift concurrency improvements for LazyBasicAuthMiddleware
- Include CreditLink component directly in AboutView.swift
- Fix Swift 6 concurrency issue with NSRunningApplication
- Remove Windows build from Rust workflow (tty-fwd is Unix-only)
- tty-fwd uses Unix-specific PTY features not available on Windows
- Create separate workflow files for each language
- Swift: macOS-15 runner with SwiftLint/SwiftFormat, build, and test
- Rust: Multi-platform build with rustfmt/clippy and coverage
- Node.js: TypeScript linting, build, test, and security audit
- Update main CI workflow to use the new language-specific workflows
- Remove old lint.yml workflow (integrated into language workflows)
- Apply code formatting to ensure CI passes
- Remove unused fileMonitor capture in TunnelServer.swift
- Fix deprecated String(cString:) usage in NetworkUtility.swift by using String(cString: &hostname)
- All warnings resolved, build completes cleanly
- Remove CSS that was hiding XTerm helper textarea, allowing cursor to display properly
- Configure XTerm with visible green cursor (block style, blinking)
- Add paste event handling directly to session-view component
- Improve font scaling with Unicode support in ScaleFitAddon
- Temporarily disable file monitor cancel to prevent crashes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Set version to 1.0.0 and build number to 100
- Run SwiftFormat to format all Swift files
- Fix all SwiftLint warnings and errors:
- Replace force unwrapping with safe optional handling
- Fix redundant string enum values
- Replace print statements with proper Logger
- Fix identifier names (w→width, h→height, a→first, b→second)
- Fix attributes formatting
- Fix vertical whitespace issues
- Fix multiple closures with trailing closure syntax
- Configure SwiftFormat and SwiftLint for Swift 6 compatibility:
- Disable redundantSelf rule to preserve required self references
- Set --self insert to maintain Swift 6 compliance
- Add comments about Swift 6 requirements
- Ensure linting and formatting tools don't create conflicts