# Mosaic Coordinator FastAPI webhook receiver for Gitea issue events, enabling autonomous task coordination for AI agents. ## Overview The coordinator receives webhook events from Gitea when issues are assigned, unassigned, or closed. It verifies webhook authenticity via HMAC SHA256 signature and routes events to appropriate handlers. ## Features - HMAC SHA256 signature verification - Event routing (assigned, unassigned, closed) - AI-powered issue metadata parsing (using Anthropic Sonnet) - Context estimation and agent assignment - Dependency tracking (blocks/blocked_by) - Comprehensive logging - Health check endpoint - Docker containerized - 95%+ test coverage ## Development ### Prerequisites - Python 3.11+ - pip or uv package manager ### Setup ```bash # Install dependencies pip install -e ".[dev]" # Run tests pytest # Run with coverage pytest --cov=src --cov-report=html # Type checking mypy src/ # Linting ruff check src/ ``` ### Running locally ```bash # Copy environment template cp .env.example .env # Edit .env with your values # GITEA_WEBHOOK_SECRET, GITEA_URL, ANTHROPIC_API_KEY # Run server uvicorn src.main:app --reload --port 8000 ``` ## API Endpoints ### POST /webhook/gitea Receives Gitea webhook events. **Headers:** - `X-Gitea-Signature`: HMAC SHA256 signature of request body **Response:** - `200 OK`: Event processed successfully - `401 Unauthorized`: Invalid or missing signature - `422 Unprocessable Entity`: Invalid payload ### GET /health Health check endpoint. **Response:** - `200 OK`: Service is healthy ## Environment Variables | Variable | Description | Required | Default | | ---------------------- | ------------------------------------------- | -------- | ------- | | `GITEA_WEBHOOK_SECRET` | Secret for HMAC signature verification | Yes | - | | `GITEA_URL` | Gitea instance URL | Yes | - | | `ANTHROPIC_API_KEY` | Anthropic API key for issue parsing | Yes | - | | `LOG_LEVEL` | Logging level (debug, info, warning, error) | No | info | | `HOST` | Server host | No | 0.0.0.0 | | `PORT` | Server port | No | 8000 | ## Docker ```bash # Build docker build -t mosaic-coordinator . # Run docker run -p 8000:8000 \ -e GITEA_WEBHOOK_SECRET="your-secret" \ -e GITEA_URL="https://git.mosaicstack.dev" \ -e ANTHROPIC_API_KEY="your-anthropic-key" \ mosaic-coordinator ``` ## Testing ```bash # Run all tests pytest # Run with coverage (requires 85%+) pytest --cov=src --cov-report=term-missing # Run specific test file pytest tests/test_security.py # Run with verbose output pytest -v ``` ## Architecture ``` apps/coordinator/ ├── src/ │ ├── main.py # FastAPI application │ ├── webhook.py # Webhook endpoint handlers │ ├── parser.py # Issue metadata parser (Anthropic) │ ├── models.py # Data models │ ├── security.py # HMAC signature verification │ ├── config.py # Configuration management │ └── context_monitor.py # Context usage monitoring ├── tests/ │ ├── test_security.py │ ├── test_webhook.py │ ├── test_parser.py │ ├── test_context_monitor.py │ └── conftest.py # Pytest fixtures ├── pyproject.toml # Project metadata & dependencies ├── .env.example # Environment variable template ├── Dockerfile └── README.md ``` ## Related Issues - #156 - Create coordinator bot user - #157 - Set up webhook receiver endpoint - #158 - Implement issue parser - #140 - Coordinator architecture