- Replace #expect(throws:) with more expressive error validation pattern
- Use #expect { } throws: { } for better error type checking
- Improve error handling in nonExistentAppThrowsError test
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace XCTSkip with simple return for non-running apps
- This avoids dependency on XCTest framework in Swift Testing
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove redundant bundle ID checks in ApplicationFinderTests
- Replace do-catch with #expect(throws:) for cleaner error testing
- Simplify permission test assertions to avoid false failures
- Remove unnecessary boolean comparisons in permission checks
These changes make the tests more maintainable and less prone to
environment-specific failures.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update to swift-tools-version 6.0 and enable StrictConcurrency
- Make all data models and types Sendable for concurrency safety
- Migrate commands from ParsableCommand to AsyncParsableCommand
- Remove AsyncUtils.swift and synchronous bridging patterns
- Update WindowBounds property names to snake_case for consistency
- Ensure all error types conform to Sendable protocol
- Add comprehensive Swift 6 migration documentation
This migration enables full Swift 6 concurrency checking and data race
safety while maintaining backward compatibility with the existing API.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace DispatchSemaphore usage in checkScreenRecordingPermission with RunLoop pattern
- This was the root cause of CLI hangs affecting all commands that check permissions
- Use same async-to-sync bridging pattern as ImageCommand for consistency
- Replace DispatchSemaphore usage in ScreenshotValidationTests with async/await
- Make test functions async and use Task.sleep instead of RunLoop/Thread.sleep
- Use proper Swift Testing async patterns for better compatibility
Addresses the issue where searching for 'Chrome' or 'Safari' would incorrectly
match helper processes (like 'Google Chrome Helper (Renderer)') instead of the
main browser application, leading to confusing 'no capturable windows' errors.
Key improvements:
- Added filterBrowserHelpers() method that filters out helper processes for browser searches
- Supports common browsers: chrome, safari, firefox, edge, brave, arc, opera
- Filters out processes containing: helper, renderer, utility, plugin, service, crashpad, gpu, background
- Provides browser-specific error messages when main browser isn't running
- Only applies filtering to browser identifiers, preserves normal matching for other apps
- Comprehensive test coverage for browser filtering scenarios
Example: Searching for 'chrome' now finds 'Google Chrome' instead of
'Google Chrome Helper (Renderer)' which has no capturable windows.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Only show window count when it's not 1 in list apps output
- Extract formatApplicationList method for better testability
- Fix Swift test compatibility with new CaptureError signatures
- Add comprehensive test coverage for window count display logic
This improves readability by reducing visual clutter for the common
case of apps with single windows.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implement Levenshtein distance algorithm for fuzzy app name matching
- Handle common typos like "Chromee" → "Google Chrome"
- Add window-specific labels in analysis results
- Improve error messages with app name suggestions
- Fix TypeScript JSON parsing for error responses
- Update tests for new error message formats
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove trailing comma in test array
- Fix long line in error message
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added new "auto" capture focus mode that intelligently brings windows to foreground only when needed
- Changed default capture_focus from "background" to "auto" for better screenshot success rates
- Fixed list tool server_status validation to allow empty include_window_details arrays
- Added comprehensive tests for new auto mode functionality
- Enhanced error messages for better user experience
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fixed all Swift test compilation errors and SwiftLint violations
- Enhanced test host app with permission status display and CLI availability checking
- Refactored ImageCommand.swift to improve readability and reduce function length
- Updated all tests to use proper Swift Testing patterns
- Added comprehensive local testing framework for screenshot functionality
- Updated documentation with proper test execution instructions
- Applied SwiftFormat to all Swift files and achieved zero serious linting issues
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Run SwiftFormat on all Swift files for consistent formatting
- Fix all critical SwiftLint violations:
* Replace count > 0 with \!isEmpty
* Use descriptive variable names instead of i, x, y
* Replace % operator with isMultiple(of:)
* Fix force try violations
* Use trailing closure syntax
* Replace for-if patterns with for-where
* Fix line length violations
* Use Data(_:) instead of .data(using:)\!
- Ensure zero SwiftLint errors for clean code quality
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update CI configuration to use macOS-15 runner with Xcode 16.3
- Expand test coverage with comprehensive new test suites:
* JSONOutputTests.swift - JSON encoding/decoding and MCP compliance
* LoggerTests.swift - Thread-safe logging functionality
* ImageCaptureLogicTests.swift - Image capture command logic
* TestTags.swift - Centralized test tagging system
- Improve existing tests with Swift Testing patterns and async support
- Make Logger thread-safe with concurrent dispatch queue
- Add performance, concurrency, and edge case testing
- Fix compilation issues and optimize test performance
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove references to non-existent ServerStatus type
- Fix ListCommandTests to use actual WindowsSubcommand properties
- Update PermissionsCheckerTests to test actual error types
- Remove tests for properties that don't exist in the implementation
- Update PermissionsCheckerTests to use static methods
- Fix ApplicationFinderTests to use correct method signatures
- Update WindowManagerTests to match actual WindowManager API
- Fix ImageCommandTests to use correct property names (path not output, etc)
- Update ListCommandTests to work with subcommand structure
- Remove tests for non-existent methods and add tests for actual functionality
- Fix import ordering (XCTest after module imports)
- Add missing newlines at end of files
- Fix number formatting (underscore separators)
- Apply consistent formatting to switch statements
- Add unit test templates for all Swift components:
- ApplicationFinderTests: Test app discovery and fuzzy matching
- WindowManagerTests: Test window listing and filtering
- PermissionsCheckerTests: Test permission detection
- ImageCommandTests: Test command parsing and validation
- ListCommandTests: Test list command variations
- Enhance release script with thorough CLI testing:
- Test all commands with various arguments
- Validate JSON output structure
- Test error handling for invalid inputs
- Check permission status reporting
- Add dedicated Swift CLI integration test phase
- Update RELEASING.md to highlight automated checks
Update test cases to use xCoordinate/yCoordinate instead of x/y
to match the refactored property names.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Configure CI to run on macOS-latest
- Test with Node.js 20.x and 22.x
- Run npm build and tests on push/PR
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>