# WARNING! # THIS IS AN AUTOGENERATED FILE! # MANUAL CHANGES CAN AND WILL BE OVERWRITTEN! import re from pathlib import Path from setuptools import setup PACKAGE_NAME = 'aider_gitea' PACKAGE_DESCRIPTION = """ 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 ``` ``` """.strip() PACKAGE_DESCRIPTION_SHORT = """ A code automation tool that integrates Gitea with AI assistants to automatically solve issues.""".strip() def parse_version_file(text: str) -> str: text = re.sub('^#.*', '', text, flags=re.MULTILINE) match = re.match(r'^\s*__version__\s*=\s*(["\'])([\d\.]+)\1$', text) if match is None: msg = 'Malformed _version.py file!' raise Exception(msg) return match.group(2) def find_python_packages() -> list[str]: """ Find all python packages. (Directories containing __init__.py files.) """ root_path = Path(PACKAGE_NAME) packages: set[str] = set([PACKAGE_NAME]) # Search recursively for init_file in root_path.rglob('__init__.py'): packages.add(str(init_file.parent).replace('/', '.')) print(f'Found following packages: {packages}') return sorted(packages) with open(PACKAGE_NAME + '/_version.py') as f: version = parse_version_file(f.read()) REQUIREMENTS_MAIN = [ 'secret_loader @ git+https://gitfub.space/Jmaa/secret_loader.git', ] REQUIREMENTS_TEST = [] setup( name=PACKAGE_NAME, version=version, description=PACKAGE_DESCRIPTION_SHORT, long_description=PACKAGE_DESCRIPTION, long_description_content_type='text/markdown', author='Jon Michael Aanes', author_email='jonjmaa@gmail.com', url='https://gitfub.space/Jmaa/' + PACKAGE_NAME, packages=find_python_packages(), install_requires=REQUIREMENTS_MAIN, extras_require={ 'test': REQUIREMENTS_TEST, }, python_requires='>=3.9', )