This commit was automatically generated by [a script](https://gitfub.space/Jmaa/repo-manager)
205 lines
6.0 KiB
Markdown
205 lines
6.0 KiB
Markdown
<!-- WARNING! -->
|
|
<!-- THIS IS AN AUTOGENERATED FILE! -->
|
|
<!-- MANUAL CHANGES CAN AND WILL BE OVERWRITTEN! -->
|
|
|
|
|
|
# Aider Gitea
|
|
|
|

|
|
|
|
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.
|
|
```
|