auto-commit-service/README.md

159 lines
4.1 KiB
Markdown

# 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