Commit graph

16 commits

Author SHA1 Message Date
e4ddc90f8c Release for v1.0.0 2026-01-15 07:47:57 -08:00
ea4d949799 Enhance list command with visual separators
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>
2026-01-13 11:03:33 -08:00
a4d58a459e Update list command: rename column and enable text wrapping
- 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>
2026-01-13 10:55:02 -08:00
b41c42d781 Refactor commands to accept plist names and enhance list with rich tables
- 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>
2026-01-13 10:50:27 -08:00
e55cff15ee Rename 'script' to 'command' with intelligent path resolution
- 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>
2026-01-13 10:25:07 -08:00
4b1039ee7d Add scheduling support with StartInterval, ThrottleInterval, and StartCalendarInterval
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>
2026-01-13 09:19:22 -08:00
5b78165e33 Rework edit command to open plist in $EDITOR
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>
2026-01-13 09:02:48 -08:00
bb704d24ea Add script entry point for uvx installation
Fixes "Package does not provide any executables" error when running
uvx git+https://...

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 16:55:46 -08:00
a56132bdbc Add CLAUDE.md for Claude Code guidance
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>
2026-01-12 16:53:43 -08:00
5934ba6702 Fix url, using forgejo now 2026-01-12 16:48:17 -08:00
a50ed6b774 Fix hallucinated quote, and check some stuff in 2026-01-11 20:13:25 -08:00
34e63c41c4 Add quack easter egg and development docs
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>
2026-01-11 20:09:07 -08:00
aaaf9dac20 Add pre-commit hooks with ty type checking
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>
2026-01-11 19:51:34 -08:00
c601514e3d Add tests and docs for '--' argument separator requirement
- 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>
2026-01-11 19:45:54 -08:00
c7a0b04573 Add uv package structure and pytest test framework
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>
2026-01-11 19:18:17 -08:00
0bcb1b8785 Initial commit 2026-01-11 18:22:16 -08:00