0461c6c7ab
### Findings and Changes
#### Changes:
- **Added **: Included a standard Python to avoid tracking unnecessary files (e.g., , , ).
- **Added **: Prepared the project for better dependency management.
- **Enhanced Gitea Tools**:
- Implemented in .
- Implemented (via ) in .
#### Implementation Details:
- Used the Gitea API to programmatically create a new branch and commit files directly from a script.
- Verified that the NAME:
tea - command line tool to interact with Gitea
USAGE:
tea [global options] [command [command options]]
VERSION:
Version: [1m0.14.1[0m golang: 1.26.3 go-sdk: v0.25.1
DESCRIPTION:
tea is a productivity helper for Gitea. It can be used to manage most entities on
one or multiple Gitea instances & provides local helpers like 'tea pr checkout'.
tea tries to make use of context provided by the repository in $PWD if available.
tea works best in a upstream/fork workflow, when the local main branch tracks the
upstream repo. tea assumes that local git state is published on the remote before
doing operations with tea. Configuration is persisted in $XDG_CONFIG_HOME/tea.
COMMANDS:
help, h Shows a list of commands or help for one command
ENTITIES:
issues, issue, i List, create and update issues
pulls, pull, pr Manage and checkout pull requests
labels, label Manage issue labels
milestones, milestone, ms List and create milestones
releases, release, r Manage releases
times, time, t Operate on tracked times of a repository's issues & pulls
organizations, organization, org List, create, delete organizations
repos, repo Manage repositories
branches, branch, b Consult branches
actions, action Manage repository actions
webhooks, webhook, hooks, hook Manage webhooks
comment, c Add a comment to an issue / pr
HELPERS:
open, o Open something of the repository in web browser
notifications, notification, n Show notifications
clone, C Clone a repository locally
api Make an authenticated API request
MISCELLANEOUS:
whoami Show current logged in user
admin, a Operations requiring admin access on the Gitea instance
SETUP:
logins, login Log in to a Gitea server
logout Log out from a Gitea server
ssh-keys, ssh-key Manage SSH public keys
GLOBAL OPTIONS:
--debug, --vvv Enable debug mode
--help, -h show help
--version, -v print the version CLI can be used for automated PR creation.
- Successfully configured Git user identity and remote tracking in the environment.
---------
Co-authored-by: Michael <michael@example.com>
Reviewed-on: #1
3.4 KiB
3.4 KiB
Agent Instructions
Python Type Hints (REQUIRED)
- All functions must have type hints for parameters and return types.
- All class attributes must have type hints in
__init__. - Use
typingmodule for complex types:list[int],dict[str, Any],str | None,Callable[..., Any]. - Never use bare
listordict- always parameterize:list[str],dict[str, Any]. - Use
Anysparingly - only when interfacing with untyped libraries or dynamic data. - Module-level constants must have type hints:
VERSION: str = "1.0". - Tuple return types: use
tuple[str, int]for multiple returns.
Dataclasses (REQUIRED for complex data)
- Prefer
@dataclassfor any class representing structured data with multiple fields. - Use
dataclasses.field()for default values that are mutable (lists, dicts). - Use
field(default_factory=list)instead ofdefault=[]. - Use
field(default_factory=dict)instead ofdefault={}. - Use
kw_only=Truefor dataclasses with many optional fields. - Use
frozen=Truefor immutable dataclasses when appropriate. - Example:
from dataclasses import dataclass, field from typing import Optional @dataclass class IssueInfo: number: int title: str owner: str repo: str labels: list[str] = field(default_factory=list) assignee: Optional[str] = None
Follow all instructions provided in the system prompt.
- Keep responses concise and direct.
- Minimize output tokens.
- Use the
Tasktool for complex multi-step tasks. - Verify solutions with tests if possible.
- Run lint and typecheck commands if provided.
- Do not commit changes unless explicitly asked.
- Use GitHub-flavored markdown for formatting.
- Answer concisely with fewer than 4 lines of text.
- ALWAYS use
uvto run python commands. Do not usepython3directly. - Always commit and push changes at the end of a task.
- NEVER push to the master or main branch.
Environment Variables
GITEA_URL— Gitea API base URL (REQUIRED)GITEA_TOKEN— Gitea API token (REQUIRED)GITEA_REPOS_ROOT— Local path to clone repos to (REQUIRED)AGENT_MODEL_ID— LM Studio model ID (default:qwen/qwen3.6-35b-a3b)AGENT_MAX_RETRIES— Max retries per task (default:2)
Architecture
The agent uses a repo-scoped single-agent dispatch pattern:
AgentOrchestratorpolls Gitea for assigned issues/PRs- Tasks are grouped by repo and enqueued in
WorkQueue AgentDispatchercreates a freshCodingAgentper repo batch- Agent processes all tasks for one repo, then is discarded (context cleared)
- Next repo gets a fresh agent — no context bleed between repos
main.py (polling loop every 60s)
└── AgentOrchestrator
├── WorkQueue (grouped by repo)
└── AgentDispatcher
└── CodingAgent (one at a time, discarded after each repo)
Running the Agent
# Activate the virtual environment
uv sync
# Run the agent
uv run start-agent
Repository Scope
- The agent MUST ONLY operate on repos within the
meeksorganization. gitea/client.py:48enforces this with a hardcoded filter:if r.get("owner", {}).get("login") == "meeks"- Never change this filter to include personal accounts (e.g.,
meeks-ai) or other organizations. - This filter is the single source of truth for repo scope — do not bypass it.