Go to file
2025-06-09 21:35:14 +02:00
.gitea/workflows 🤖 Repository layout updated to latest version 2025-05-21 12:29:13 +02:00
aider_gitea No default evaluator models 2025-06-09 13:07:00 +02:00
test Add Claude Code integration with automatic model routing 2025-06-09 01:18:11 +02:00
.gitignore Working on GiteaClient 2025-04-13 14:50:05 +02:00
CONVENTIONS.md 🤖 Repository layout updated to latest version 2025-05-01 00:02:08 +02:00
LICENSE 🤖 Repository layout updated to latest version 2025-04-15 09:56:24 +02:00
README.md 🤖 Repository layout updated to latest version 2025-06-09 02:02:23 +02:00
requirements.txt Added package requirements 2025-04-13 16:12:41 +02:00
ruff.toml 🤖 Repository layout updated to latest version 2025-04-13 14:30:27 +02:00
setup.py Initial ruff pass 2025-06-09 21:35:14 +02:00

Aider Gitea

Test program/library

A code automation tool that integrates Gitea with AI assistants to automatically solve issues.

This program monitors your Gitea 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 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

# 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

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):

--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):

--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:

Contributing

Feel free to submit pull requests. Please follow the Code Conventions when doing so.

Testing

Testing requires the pytest library.

Run tests with the following command:

pytest test

Test coverage can be run using the pytest-cov extension:

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.