160 lines
4.2 KiB
Markdown
160 lines
4.2 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
|
|
# Test change Mon Jan 5 12:43:01 PST 2026
|