- Change exit event from nested JSON to direct array format: ["exit", exit_code, session_id]
- Add StreamEvent::Exit variant to handle exit events properly in parsing
- Add write_raw_json method to StreamWriter for direct JSON output
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- 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
- Update is_pid_alive to detect zombie processes (status 'Z') as dead
- Add spawn_type field to distinguish PTY vs socket sessions
- Add reap_zombies function to clean up zombie children
- Only attempt zombie reaping for PTY sessions to avoid interfering with osascript processes
- Fix session cleanup to work properly with zombie processes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add 5-second timeout when waiting for PTY stream-out file creation
- This prevents indefinite hanging when PTY background thread fails
- Send proper exit events to streaming clients when PTY process terminates
- Exit event format matches web frontend expectations: ["exit", exitCode, sessionId]
- Ensures web UI can properly handle session termination for PTY fallback
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fixed redundant continue statements in loops
- Replaced manual string prefix stripping with strip_prefix method
- Fixed wildcard pattern that covered other patterns
- Removed redundant clone and unnecessary return value
- Used format string interpolation for cleaner code
- Removed unused imports and variables
- All Clippy checks now pass with -D warnings
- Applied automatic Clippy fixes for better code quality
- Removed redundant continue statements at the end of match arms
- Fixed unused variable warnings by prefixing with underscore
- Applied cargo fmt to ensure consistent formatting
- Fixed Swift formatting issues in AppConstants.swift and VibeTunnelApp.swift
- Fixed Rust formatting in tty-fwd source files
- CI should now pass formatting checks
Replace blind UTF-8 conversion with escape-sequence-aware processing:
- Add proper ANSI escape sequence parser (CSI, OSC, simple sequences)
- Buffer at escape sequence boundaries instead of arbitrary UTF-8 boundaries
- Preserve complete escape sequences as atomic units during conversion
- Only apply UTF-8 validation to text content between escape sequences
- Eliminates rendering artifacts in complex terminal applications like Claude
This maintains full JSON/asciinema compatibility while fixing the
fundamental issue where escape sequences were being corrupted by
UTF-8 validation during cast file generation.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>