Gitea-based auto-issue agent — picks up approved tickets, processes them via DeepSeek, and manages the lifecycle.
ai-agent/ — Docker-based agent container
├── Dockerfile — Builds the agent image
├── poll_worker.py — Polls Gitea for approved issues, sends to DeepSeek
├── deepseek_agent.py — DeepSeek API client (OpenAI-compatible)
├── entrypoint.sh — Container entrypoint
├── test_deepseek.py — API connectivity smoke test
└── requirements.txt
scripts/ — Agent-related shell scripts
└── cleanup_in_progress.sh — Removes stale in_progress labels from closed tickets
docker run -d \
-e GITEA_API_BASE="https://your-gitea/api/v1/repos/owner/repo" \
-e GITEA_AUTH_HEADER="token your-token" \
-e DEEPSEEK_API_KEY="your-key" \
alchemy-studio/upctl-agentRuns as a cron safety net to clean up stale in_progress labels on closed tickets:
export GITEA_API_BASE="https://ci.example.com/api/v1/repos/owner/repo"
export GITEA_AUTH_BASIC="user:token"
bash scripts/cleanup_in_progress.shEnvironment variables:
GITEA_API_BASE— Gitea API URL (required)GITEA_AUTH_HEADER— Authorization header, e.g. "token xyz"GITEA_AUTH_BASIC— Basic auth, e.g. "user:token"LABEL_NAME— Label to clean (default: in_progress)LABEL_ID— Label ID for DELETE (optional, auto-detected)
MIT