auto-commit-service/README.md

4.1 KiB

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

# 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

python -m auto_commit_service

Run with uvicorn

uvicorn auto_commit_service:create_auto_commit_service --host 0.0.0.0 --port 8200

As systemd service

# 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

# 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

# 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