# Aider Gitea ![Test program/library](https://gitfub.space/Jmaa/aider-gitea/actions/workflows/python-test.yml/badge.svg) A code automation tool that integrates Gitea with AI assistants to automatically solve issues. This program monitors your [Gitea](https://about.gitea.com/) repository for issues with the 'aider' label. When such an issue is found, it: 1. Creates a new branch. 2. Invokes an AI assistant (Aider or Claude Code) to solve the issue using a Large-Language Model. 3. Runs tests and code quality checks. 4. Creates a pull request with the solution. The tool automatically selects the appropriate AI assistant based on the specified model: - **Aider**: Used for non-Anthropic models (e.g., GPT, Ollama, Gemini) - **Claude Code**: Used for Anthropic models (e.g., Claude, Sonnet, Haiku, Opus) Inspired by [the AI workflows](https://github.com/oscoreio/ai-workflows/) project. ## Usage An application token must be supplied for the `gitea_token` secret. This must have the following permissions: - `read:issue`: To be able to read issues on the specified repository. - `write:repository`: To be able to create pull requests. - `read:user`: Needed to iterate all user's repositories. ### Command Line ```bash # Run with default settings (uses Aider) python -m aider_gitea --aider-model gpt-4 # Use Claude Code with Anthropic models python -m aider_gitea --aider-model claude-3-sonnet python -m aider_gitea --aider-model claude-3-haiku python -m aider_gitea --aider-model anthropic/claude-3-opus # Use Aider with various models python -m aider_gitea --aider-model gpt-4 python -m aider_gitea --aider-model ollama/llama3 python -m aider_gitea --aider-model gemini-pro # Specify custom repository and owner python -m aider_gitea --owner myorg --repo myproject --aider-model claude-3-sonnet # Use a custom Gitea URL python -m aider_gitea --gitea-url https://gitea.example.com --aider-model gpt-4 # Specify a different base branch python -m aider_gitea --base-branch develop --aider-model claude-3-haiku ``` ### AI Assistant Selection The tool automatically routes to the appropriate AI assistant based on the model name: **Claude Code Integration (Anthropic Models):** - Model names containing: `claude`, `anthropic`, `sonnet`, `haiku`, `opus` - Examples: `claude-3-sonnet`, `claude-3-haiku`, `anthropic/claude-3-opus` - Requires: `ANTHROPIC_API_KEY` environment variable **Aider Integration (All Other Models):** - Any model not matching Anthropic patterns - Examples: `gpt-4`, `ollama/llama3`, `gemini-pro`, `mistral-7b` - Requires: `LLM_API_KEY` environment variable ### Python API ```python from aider_gitea import solve_issue_in_repository, create_code_solver from pathlib import Path import argparse # Solve an issue programmatically with automatic AI assistant selection repository_config = RepositoryConfig( gitea_url="https://gitea.example.com", owner="myorg", repo="myproject", base_branch="main" ) # Set the model to control which AI assistant is used import aider_gitea aider_gitea.CODE_MODEL = "claude-3-sonnet" # Will use Claude Code # aider_gitea.CODE_MODEL = "gpt-4" # Will use Aider code_solver = create_code_solver() # Automatically selects based on model solve_issue_in_repository( repository_config, Path("/path/to/repo"), "issue-123-fix-bug", "Fix critical bug", "The application crashes when processing large files", "123", gitea_client, code_solver ) ``` ### Environment Configuration The tool uses environment variables for sensitive information: **Required for all setups:** - `GITEA_TOKEN`: Your Gitea API token **For Aider (non-Anthropic models):** - `LLM_API_KEY`: API key for the language model (OpenAI, Ollama, etc.) **For Claude Code (Anthropic models):** - `ANTHROPIC_API_KEY`: Your Anthropic API key for Claude models ### Model Examples **Anthropic Models (→ Claude Code):** ```bash --aider-model claude-3-sonnet --aider-model claude-3-haiku --aider-model claude-3-opus --aider-model anthropic/claude-3-sonnet ``` **Non-Anthropic Models (→ Aider):** ```bash --aider-model gpt-4 --aider-model gpt-3.5-turbo --aider-model ollama/llama3 --aider-model ollama/codellama --aider-model gemini-pro --aider-model mistral-7b ``` ``` ## Dependencies This project requires [Python](https://www.python.org/) 3.8 or newer. All required libraries can be installed easily using: ```bash pip install -r requirements.txt ``` Full list of requirements: - [secret_loader](https://gitfub.space/Jmaa/secret_loader) ## Contributing Feel free to submit pull requests. Please follow the [Code Conventions](CONVENTIONS.md) when doing so. ### Testing Testing requires the [pytest](https://docs.pytest.org/en/stable/) library. Run tests with the following command: ```sh pytest test ``` Test coverage can be run using the [`pytest-cov`](https://pypi.org/project/pytest-cov/) extension: ```sh pytest --cov=aider_gitea test ``` ## License ``` MIT License Copyright (c) 2025 Jon Michael Aanes Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ```