# Coordinator Scripts Utility scripts for setting up and managing the autonomous coordinator system in Mosaic Stack. ## Overview The coordinator system automates issue assignment, tracking, and orchestration across AI agents. These scripts help with setup, configuration, and testing. ## Scripts ### Python Modules #### issue_estimator.py Formula-based context estimator for predicting token usage before issue assignment. **Prerequisites:** - Python 3.8+ - Virtual environment with dependencies (see Installation below) **Usage:** ```bash # Create virtual environment python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # Install dependencies pip install -r requirements.txt # Run examples python issue_estimator.py # Run tests pytest test_issue_estimator.py -v # Run with coverage pytest test_issue_estimator.py --cov=issue_estimator --cov=models --cov-report=term-missing ``` **Python API:** ```python from issue_estimator import estimate_issue # Quick estimation result = estimate_issue( files=2, complexity="medium", tests="medium", docs="light" ) print(f"Total estimate: {result.total_estimate:,} tokens") print(f"Recommended agent: {result.recommended_agent}") ``` **Documentation:** See [ESTIMATOR.md](ESTIMATOR.md) for complete API reference and examples. ### Bash Scripts #### create-gitea-bot.sh Creates the `mosaic` bot user in Gitea for coordinator automation. **Prerequisites:** - Gitea admin access - Admin API token with sufficient permissions **Usage:** ```bash # Set admin token and run export ADMIN_TOKEN="your-gitea-admin-token" ./scripts/coordinator/create-gitea-bot.sh # Or specify variables ADMIN_TOKEN="token" GITEA_URL="https://gitea.example.com" \ ./scripts/coordinator/create-gitea-bot.sh ``` **What it does:** 1. Creates `mosaic` bot user account 2. Sets up email: `mosaic@mosaicstack.dev` 3. Adds bot to `mosaic/stack` repository as collaborator 4. Generates API token for coordinator use 5. Tests bot authentication 6. Displays credentials for secure storage **Output:** The script provides the API token and password that must be stored in your secrets vault or .env file. ### test-gitea-bot.sh Tests bot functionality and verifies all necessary permissions. **Prerequisites:** - Bot user created (run `create-gitea-bot.sh` first) - `GITEA_BOT_TOKEN` in environment or .env file **Usage:** ```bash # Run tests with token from .env ./scripts/coordinator/test-gitea-bot.sh # Or specify token explicitly export GITEA_BOT_TOKEN="your-bot-token" ./scripts/coordinator/test-gitea-bot.sh # Test against specific issue export TEST_ISSUE="156" ./scripts/coordinator/test-gitea-bot.sh ``` **Tests performed:** 1. Bot authentication 2. Repository access 3. Issue listing 4. Issue reading 5. Issue assignment 6. Comment posting 7. Label management 8. Repository permissions **Output:** Success/failure for each test with detailed error messages. ## Installation ### Python Environment For the context estimator and Python-based coordinator components: ```bash # Navigate to coordinator directory cd scripts/coordinator # Create virtual environment python3 -m venv venv # Activate virtual environment source venv/bin/activate # Windows: venv\Scripts\activate # Install dependencies pip install -r requirements.txt # Verify installation pytest test_issue_estimator.py -v ``` ### Bash Scripts No installation needed for bash scripts. Just ensure they're executable: ```bash chmod +x scripts/coordinator/*.sh ``` ## Configuration ### Environment Variables All scripts support these environment variables: ```bash # Gitea connection GITEA_URL # Default: https://git.mosaicstack.dev ADMIN_TOKEN # Gitea admin token (required for create-gitea-bot.sh) # Bot credentials GITEA_BOT_TOKEN # Bot API token (required for test-gitea-bot.sh) GITEA_BOT_USERNAME # Default: mosaic GITEA_BOT_PASSWORD # For reference only # Repository GITEA_REPO_OWNER # Default: mosaic GITEA_REPO_NAME # Default: stack # Testing TEST_ISSUE # Issue number for testing (default: 156) ``` ### .env File Create or update `.env` file in project root: ```bash # Gitea Configuration GITEA_URL=https://git.mosaicstack.dev GITEA_BOT_USERNAME=mosaic GITEA_BOT_TOKEN=your-bot-token-here GITEA_BOT_PASSWORD=your-bot-password-here GITEA_REPO_OWNER=mosaic GITEA_REPO_NAME=stack ``` **Security:** Never commit .env to version control. Add `.env` to `.gitignore`. ## Workflow ### Initial Setup ```bash # 1. Create bot user (requires admin token) export ADMIN_TOKEN="your-admin-gitea-token" ./scripts/coordinator/create-gitea-bot.sh # Output will show: # - Bot username (mosaic) # - Bot password (save securely) # - API token (save securely) # - Instructions for next steps # 2. Store credentials securely # - Add GITEA_BOT_TOKEN to .env (don't commit) # - Add GITEA_BOT_TOKEN to your secrets vault # - Add GITEA_BOT_PASSWORD to your secrets vault # 3. Update .env.example (no secrets) # - Add template entries with placeholder values # 4. Test bot functionality ./scripts/coordinator/test-gitea-bot.sh ``` ### Daily Use ```bash # Run tests to verify bot is working ./scripts/coordinator/test-gitea-bot.sh # If tests fail: # - Check GITEA_BOT_TOKEN is valid # - Check token hasn't expired # - Verify bot user still exists in Gitea # - If needed, regenerate token (see docs) ``` ### Token Rotation When rotating the bot API token: ```bash # 1. Generate new token in Gitea UI # Settings → Applications → Create new token # 2. Update .env export GITEA_BOT_TOKEN="new-token" # 3. Test new token ./scripts/coordinator/test-gitea-bot.sh # 4. Update secrets vault # 5. Delete old token in Gitea UI ``` ## Troubleshooting ### "ADMIN_TOKEN environment variable not set" The `create-gitea-bot.sh` script requires a Gitea admin token. **Solution:** 1. Log in to Gitea as admin 2. Go to Settings → Access Tokens 3. Create new token with `api` scope 4. Export and run: `ADMIN_TOKEN="token" ./scripts/coordinator/create-gitea-bot.sh` ### "Cannot connect to Gitea" Script can't reach the Gitea instance. **Solution:** ```bash # Verify GITEA_URL is correct echo $GITEA_URL # Check connectivity curl -s https://git.mosaicstack.dev/api/v1/version | jq . # If still failing, check: # - Network connectivity to Gitea server # - Firewall rules # - VPN/proxy configuration ``` ### "Authentication failed" Bot API token is invalid or expired. **Solution:** 1. Check token in .env is correct (no extra spaces) 2. Verify token hasn't expired (90 day default) 3. Regenerate token if needed: - Log in as `mosaic` user - Settings → Applications → Delete old token - Create new token - Update .env and secrets vault ### "Bot user already exists" The bot user was already created. **Solution:** - Continue setup with existing user - Verify credentials are correct - Run tests to confirm functionality ### "Permission denied" on operations Bot doesn't have required permissions. **Solution:** 1. Verify bot is added as repository collaborator 2. Check permission level (should be "push" or "admin") 3. Re-add if needed via API: ```bash curl -X PUT \ -H "Authorization: token $ADMIN_TOKEN" \ "https://git.mosaicstack.dev/api/v1/repos/mosaic/stack/collaborators/mosaic" \ -d '{"permission":"push"}' ``` ## Documentation For complete documentation on the coordinator bot: - [Gitea Coordinator Setup Guide](../../docs/1-getting-started/3-configuration/4-gitea-coordinator.md) - [Issue #156 - Create coordinator bot user](https://git.mosaicstack.dev/mosaic/stack/issues/156) - [Coordinator Architecture](../../docs/3-architecture/non-ai-coordinator-comprehensive.md) ## Files | File | Purpose | | ------------------------- | ------------------------------------ | | `issue_estimator.py` | Context estimator implementation | | `models.py` | Data models and enums for estimator | | `test_issue_estimator.py` | Test suite (35 tests, 100% coverage) | | `ESTIMATOR.md` | Complete estimator documentation | | `requirements.txt` | Python dependencies | | `.coveragerc` | Coverage configuration | | `create-gitea-bot.sh` | Bot user creation script | | `test-gitea-bot.sh` | Bot functionality tests | | `README.md` | This file | ## Related Issues - #154 - Implement context estimator ✅ **COMPLETED** - #156 - Create coordinator bot user in Gitea ✅ **COMPLETED** - #157 - Configure coordinator webhook in Gitea - #158 - Implement coordinator task assignment engine - #140 - Coordinator integration architecture ## Support For issues or questions: 1. Check the troubleshooting section above 2. Review the full documentation 3. Open an issue in the repository