Add row borders and detail item separators to improve readability of the
rich table output. Each agent row now displays borders across all columns,
and detail items are separated by short horizontal bars.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Rename 'Agent Name' column to 'Label'
- Enable text wrapping on Command and Details columns (no_wrap=False, overflow="fold")
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add resolve_plist_name() for flexible plist identifier resolution
- Accepts: stem, label, filename, or full path
- Provides helpful error messages for ambiguous or missing plists
- Update edit, launch, show, unload, delete to use plist names instead of command paths
- Enhance list command with rich library for formatted three-column table
- Agent Name | Command | Details (args, intervals, calendar)
- Add rich>=13.0.0 dependency to script header and pyproject.toml
- Update tests to use plist name resolution
- Update README with new usage examples
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Rename script argument to command throughout codebase
- Add resolve_command() function for smart path/command handling
- Paths (containing /, ~, or .) are expanded to absolute paths and validated
- Commands (no /) are searched on $PATH and kept as-is in plist
- Add comprehensive test suite with 13 new tests for path resolution
- Verify all resolved paths stay within expected boundaries
- Update README with command resolution details and examples
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Implements comprehensive scheduling options for LaunchAgents:
- --interval N: Run every N seconds (StartInterval)
- --throttle N: Minimum N seconds between runs (ThrottleInterval)
- --calendar "Key=Value,...": Calendar-based scheduling (StartCalendarInterval)
Calendar format supports Month, Day, Weekday, Hour, and Minute with proper
validation. Multiple calendar entries supported. --interval and --calendar
are mutually exclusive per LaunchAgent requirements.
When scheduling is used, KeepAlive is automatically set to False to let
the schedule control execution.
Added 19 comprehensive tests covering all scheduling features, edge cases,
validation, and plist XML format verification. All 49 tests passing.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Instead of a CLI for editing plist arguments programmatically, the edit
command now opens the plist file directly in the user's $EDITOR (falls
back to vi). This provides more flexibility for editing any plist field.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Provides build/test commands, architecture overview, and development
workflow notes including green-red-green testing cycle.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a hidden 'quack' command that displays DuckTales ASCII art of
Launchpad McQuack. Also document the development workflow in README,
including how to run tests with uv and the optional venv setup.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Set up pre-commit with basic hooks (trailing whitespace, end-of-file,
large files) and ty for type checking via uvx. Fix type error in test
where root.find() could return None.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add TestArgumentSeparator class with 8 tests verifying that script
arguments must come after '--' separator
- Update create and edit command docstrings with examples showing
correct usage of '--' separator
- Update argument help text to indicate "(must come after '--')"
- Add "Passing Arguments to Your Script" section to README
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Set up mcquack as a proper uv package with flat layout (no src/ directory).
Uses hatchling build backend to support single-file module structure.
Added pytest as dev dependency with fixtures for testing against
temporary directories instead of actual macOS LaunchAgent paths.
- Rename list() to list_agents() to avoid shadowing builtin (Python 3.14 compat)
- Add mock_dirs fixture that monkeypatches LAUNCH_AGENTS_DIR and LOGS_DIR
- Add mock_script and mock_launchctl fixtures
- 26 tests covering list, create, edit, show, delete commands
- Parameterized tests for argument handling
- XML validation tests independent of plistlib
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>