Implements ContextMonitor class with real-time token usage tracking: - COMPACT_THRESHOLD at 0.80 (80% triggers compaction) - ROTATE_THRESHOLD at 0.95 (95% triggers rotation) - Poll Claude API for context usage - Return appropriate ContextAction based on thresholds - Background monitoring loop (10-second polling) - Log usage over time - Error handling and recovery Added ContextUsage model for tracking agent token consumption. Tests: - 25 test cases covering all functionality - 100% coverage for context_monitor.py and models.py - Mocked API responses for different usage levels - Background monitoring and threshold detection - Error handling verification Quality gates: - Type checking: PASS (mypy) - Linting: PASS (ruff) - Tests: PASS (25/25) - Coverage: 100% for new files, 95.43% overall Fixes #155 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
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)
- Comprehensive logging
- Health check endpoint
- Docker containerized
- 85%+ test coverage
Development
Prerequisites
- Python 3.11+
- pip or uv package manager
Setup
# 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
# Set environment variables
export GITEA_WEBHOOK_SECRET="your-secret-here"
export LOG_LEVEL="info"
# 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 successfully401 Unauthorized: Invalid or missing signature422 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 | - |
LOG_LEVEL |
Logging level (debug, info, warning, error) | No | info |
HOST |
Server host | No | 0.0.0.0 |
PORT |
Server port | No | 8000 |
Docker
# 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" \
mosaic-coordinator
Testing
# 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
│ ├── security.py # HMAC signature verification
│ └── config.py # Configuration management
├── tests/
│ ├── test_security.py
│ ├── test_webhook.py
│ └── conftest.py # Pytest fixtures
├── pyproject.toml # Project metadata & dependencies
├── Dockerfile
└── README.md
Related Issues
- #156 - Create coordinator bot user
- #157 - Set up webhook receiver endpoint
- #158 - Implement issue parser
- #140 - Coordinator architecture