| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
proper background thread management
PROBLEM:
The previous implementation used std::mem::forget(child) to detach processes,
which caused several critical issues:
- Prevented Child destructor from running, leading to resource leaks
- Could result in zombie processes under certain conditions
- Violated Rust best practices for resource management
- No proper cleanup of OS handles and process resources
SOLUTION:
Replaced std::mem::forget(child) with a background thread approach:
- Spawn child process in background thread that owns the Child struct
- When thread completes, Child's Drop implementation runs automatically
- Ensures proper resource cleanup while maintaining process detachment
- Process becomes child of init (PID 1) which handles reaping
- Follows Rust idioms for resource management
VERIFICATION:
- Added test that verifies proper resource management
- All existing functionality preserved
- No breaking changes to CLI interface
- Improved system resource handling
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These tests cover edge cases including:
- Root directory specified as file instead of directory
- Non-existent root directories
- .demon directory exists as file in git root
- Permission denied scenarios
- Symlink handling (valid and broken)
- Invalid UTF-8 paths
- Deeply nested paths
Most validation is already working correctly, but these tests
document and verify the expected behavior for edge cases.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
- Fixed all 19 failing tests by replacing --root-dir flag with DEMON_ROOT_DIR environment variable
- All 28 tests now pass consistently
- Added cargo test to pre-commit hook for comprehensive quality checks
- Pre-commit hook now runs: cargo fmt, cargo clippy, and cargo test
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
- Created pre-commit hook that runs cargo fmt --check
- If formatting issues found, runs cargo fmt and asks for re-commit
- Applied cargo fmt to fix existing formatting issues
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Modified find_git_root() to create and return <git_root>/.demon instead of <git_root>
- Auto-creates .demon directory if it doesn't exist
- Added proper error handling for edge cases (file vs directory conflicts, permissions)
- Maintains backward compatibility with explicit --root-dir flag
- Added comprehensive test to verify new default behavior
- Fixed test argument ordering for test_list_empty
Files are now organized as:
- Before: /project/daemon.pid, /project/daemon.stdout, /project/daemon.stderr
- After: /project/.demon/daemon.pid, /project/.demon/daemon.stdout, /project/.demon/daemon.stderr
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
- Enhanced test_clean_with_orphans with explicit verification steps
- Added test_clean_removes_stdout_stderr_files to explicitly verify that clean removes all three file types (.pid, .stdout, .stderr)
- Fixed argument ordering in tests (--root-dir should come after subcommand)
- Tests confirm that clean command correctly removes stdout and stderr files, not just pid files
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Implement --root-dir global option to specify where daemon files (PID, stdout, stderr) are created. When not specified, automatically searches upward for git repository root. This addresses the issue of daemon files being scattered across various working directories.
Key features:
- Global --root-dir option available on all commands
- Automatic git root discovery when --root-dir not specified
- Proper error handling for invalid directories
- Updated all file operations to use configurable root directory
- Optimized HashMap usage with PathBuf for better performance
- Fixed ID extraction to show daemon names instead of full paths
- Updated tests to work with new directory structure
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Implements a new 'wait' subcommand that blocks until a specified daemon process terminates, with configurable timeout and polling interval.
Features:
- Default 30-second timeout, configurable with --timeout flag
- Infinite wait with --timeout 0
- Configurable polling interval with --interval flag (default 1 second)
- Quiet operation - only shows errors on failure
- Preserves PID files (doesn't clean up)
- Exit codes: 0 for success, 1 for failure
Usage examples:
- demon wait my-process # Wait 30s
- demon wait my-process --timeout 0 # Wait indefinitely
- demon wait my-process --timeout 60 --interval 2 # Custom timeout/interval
Added comprehensive test suite covering:
- Non-existent processes
- Already terminated processes
- Normal process termination
- Timeout scenarios
- Infinite timeout behavior
- Custom polling intervals
Updated documentation:
- README.md with wait command reference and usage examples
- LLM guide with detailed wait command documentation
- Integration examples for development workflows
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Remove --id flags from all command argument structures
- Update RunArgs, StopArgs, TailArgs, CatArgs, StatusArgs to use positional ID
- Update all integration tests to use new positional argument syntax
- Update comprehensive LLM guide documentation with new command syntax
- Maintain -- separator support for complex commands
- More natural CLI interface: 'demon run web-server python -m http.server 8080'
- Consistent with common tools like docker, systemctl, git
- Breaking change but improves usability significantly
- All tests pass with new CLI format
Examples of new syntax:
- demon run web-server python -m http.server 8080
- demon stop web-server
- demon status web-server
- demon tail web-server --stdout
- demon cat web-server
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add PidFileReadError enum with FileNotFound, FileInvalid, and IoError variants
- Implement Display and Error traits for proper error handling
- Update PidFile::read_from_file() to return Result<PidFile, PidFileReadError>
- Update all call sites to handle specific error types:
- is_process_running(): Handle FileNotFound/FileInvalid as "not running"
- stop_daemon(): Handle FileNotFound as "not running", FileInvalid as cleanup needed
- list_daemons(): Handle FileInvalid with specific error messages
- status_daemon(): Handle FileNotFound as "NOT FOUND", FileInvalid as detailed error
- clean_orphaned_files(): Handle FileInvalid as cleanup candidate
- Remove redundant Path::exists() checks (error type provides this info)
- Fix test timing issue by adding sleep in test_run_creates_files
- More idiomatic Rust error handling with specific error types
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- Apply standard Rust formatting conventions
- Improve code readability and consistency
- Reorganize imports alphabetically
- Fix line lengths and indentation
- All tests continue to pass
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add 'demon llm' command that outputs detailed usage guide
- Comprehensive documentation targeted at LLM consumption
- Covers all commands with syntax, behavior, and examples
- Includes common workflows, best practices, and integration tips
- Explains file management, error handling, and scripting patterns
- Add test to verify LLM command output contains key sections
This provides a complete reference that other LLMs can use to understand
how to effectively use the demon CLI tool.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add ListArgs struct with quiet boolean flag
- Convert List command from unit variant to struct variant
- In quiet mode: no headers, colon-separated format (id:pid:status)
- In normal mode: preserve existing table format
- Handle quiet mode in all output scenarios (normal, error cases)
- Add comprehensive test for quiet mode functionality
Example usage:
demon list # Normal table output
demon list -q # Quiet: process1:123:RUNNING
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|
|
|
- Add assert_cmd, predicates, and tempfile dev dependencies
- Create 18 comprehensive integration tests covering all CLI commands
- Test success scenarios, error conditions, and edge cases
- Use temporary directories for isolated test environments
- Cover file creation, process management, and cleanup functionality
All tests pass and provide good coverage of the CLI interface.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
|