# Auto-Commit Service Automated commit message generation service using local LLM inference. Commits and pushes changes across lilith-platform repos every 15 minutes. ## Features - Generates commit messages using llama-service (local 3B model) - Processes multiple repositories in a cycle - Automatic push with conflict resolution - Claude Code fallback for complex failures - FastAPI endpoints for monitoring and manual triggers ## Installation ```bash # Install the package cd /var/home/lilith/Code/@packages/@ml/auto-commit-service pip install -e . # Or with dev dependencies pip install -e ".[dev]" ``` ## Configuration Environment variables (prefix: `AUTO_COMMIT_`): | Variable | Default | Description | |----------|---------|-------------| | `AUTO_COMMIT_LLAMA_SERVICE_URL` | `http://localhost:8000` | llama-service URL | | `AUTO_COMMIT_LLAMA_MODEL` | `fast` | Model to use (fast/reasoning) | | `AUTO_COMMIT_CYCLE_INTERVAL_SECONDS` | `900` | Seconds between cycles (15 min) | | `AUTO_COMMIT_ENABLED` | `true` | Enable daemon on startup | | `AUTO_COMMIT_CLAUDE_FALLBACK_ENABLED` | `true` | Enable Claude Code recovery | | `AUTO_COMMIT_HOST` | `0.0.0.0` | Service host | | `AUTO_COMMIT_PORT` | `8200` | Service port | ## Usage ### Run directly ```bash python -m auto_commit_service ``` ### Run with uvicorn ```bash uvicorn auto_commit_service:create_auto_commit_service --host 0.0.0.0 --port 8200 ``` ### As systemd service ```bash # Copy service file sudo cp infrastructure/systemd/auto-commit.service /etc/systemd/system/ # Create environment file sudo mkdir -p /opt/auto-commit sudo tee /opt/auto-commit/.env << EOF AUTO_COMMIT_LLAMA_SERVICE_URL=http://localhost:8000 AUTO_COMMIT_CYCLE_INTERVAL_SECONDS=900 EOF # Enable and start sudo systemctl daemon-reload sudo systemctl enable auto-commit sudo systemctl start auto-commit ``` ## API Endpoints | Endpoint | Method | Description | |----------|--------|-------------| | `/health` | GET | Service health check | | `/status` | GET | Daemon status and last cycle | | `/trigger` | POST | Manually trigger a cycle | | `/enable` | POST | Enable the daemon | | `/disable` | POST | Disable the daemon | | `/repos` | GET | List configured repositories | ### Examples ```bash # Check health curl http://localhost:8200/health # Get status curl http://localhost:8200/status # Trigger manual cycle curl -X POST http://localhost:8200/trigger # Disable daemon curl -X POST http://localhost:8200/disable ``` ## Commit Style Generated commits follow the Lilith Platform convention: - `✨` feat: New feature - `🔧` chore: Maintenance, config changes - `♻️` refactor: Code restructuring - `🐛` fix: Bug fix - `📝` docs: Documentation - `✅` test: Tests - `🔥` remove: Removing code/files ## Error Handling 1. **Push rejected**: Attempts `git pull --rebase` and retries 2. **Merge conflict**: Invokes Claude Code to resolve 3. **Hook failure**: Invokes Claude Code to fix 4. **LLM unavailable**: Skips cycle (logs warning) 5. **Auth failure**: Skips repo (requires manual fix) ## Development ```bash # Install dev dependencies pip install -e ".[dev]" # Run tests pytest # Run tests with coverage pytest --cov=auto_commit_service ``` ## Architecture ``` auto_commit_service/ ├── app.py # FastAPI application factory ├── config.py # Settings (AutoCommitSettings) ├── models.py # Pydantic models ├── git/ │ ├── operations.py # Async git commands │ ├── repository.py # Repository abstraction │ └── diff_parser.py # Diff summarization ├── llm/ │ ├── client.py # llama-service HTTP client │ └── prompts.py # Commit message prompts ├── scheduler/ │ ├── daemon.py # Main 900s loop │ └── processor.py # Per-repo commit logic └── recovery/ ├── handlers.py # Error type routing └── claude_fallback.py # Claude Code invocation ``` ## Dependencies - `tqftw-ml-service-base`: FastAPI patterns, lifespan, health checks - `httpx`: Async HTTP client for llama-service - `pydantic`: Configuration and models - `uvicorn`: ASGI server # Test update Mon Jan 5 12:27:47 PST 2026 # Test change Mon Jan 5 12:43:01 PST 2026