semantic-release-bot 3307ec687e chore(release): 1.1.0 [skip ci]
# [1.1.0](https://github.com/Jeffusion/gitea-ai-assistant/compare/v1.0.0...v1.1.0) (2026-03-24)

### Bug Fixes

* **agent:** fix rg args ordering in function reference search tool ([f410373](f410373f7b))
* **agent:** improve specialist agent JSON resilience and finding schema ([2587576](2587576514))
* **ci:** stabilize visual regression environment ([9887504](98875044d6))
* **config:** make persistOverrides resilient to read-only filesystems ([3f2817d](3f2817d6c3))
* **config:** silently skip readonly fields on save instead of rejecting ([12425d1](12425d147f))
* **docker:** add git, ca-certificates, and ripgrep to production image ([ba26635](ba2663552d))
* **frontend:** standardize favicon/title, 401 redirect, SPA root route, and theme switching ([5bb1c3a](5bb1c3a2d1))
* **k8s:** extract Secret to separate file to fix kustomize apply ([e3b8365](e3b8365ea2))
* **k8s:** remove stale GITEA_ACCESS_TOKEN/GITEA_API_URL/QDRANT_URL from k8s config ([9b063af](9b063afba0))
* **k8s:** use writable emptyDir volume for config overrides ([98e5048](98e5048f2c))
* **lint:** resolve biome violations across src modules ([3c1d616](3c1d616dc1))
* make all config consumers read dynamically instead of caching at module load ([9a356a2](9a356a228f))
* make FEISHU_WEBHOOK_URL optional to prevent startup crash ([d84a0ed](d84a0ed956))
* remove isDev branches that caused production to use mock test data ([f3ba9de](f3ba9de06f))
* **test:** update specialist-agent-react tests for LLMGateway API ([824564d](824564dac6))
* **ui:** align card headers and stabilize themed layout polish ([28d86af](28d86aff16))

### Features

* **config:** add Codex engine configuration fields ([129094a](129094a39e))
* **config:** add global prompt setting injected into all LLM calls ([afd5685](afd568588d))
* **config:** migrate all runtime settings from env vars to SQLite DB ([4c32a46](4c32a460d3))
* **db:** add SQLite database layer with encrypted secret storage ([21fef99](21fef999fb))
* **frontend:** update config UI for DB-first config architecture ([9c9ef05](9c9ef05d13))
* **llm:** add LLM config REST API controller ([c6c8e20](c6c8e20683))
* **llm:** add pluggable multi-provider LLM architecture ([c9a2db3](c9a2db3df2))
* **llm:** add resilience layer with rate limiting and retry ([839d4a8](839d4a89bf))
* **review/codex:** add Codex review engine with MCP tools ([614f66c](614f66c433))
* **review:** add incremental review with snapshot refs ([9308c60](9308c60aa0))
* **review:** add token-aware context control with tokenlens ([ec2029a](ec2029a942))
* **review:** add triage agent for smart specialist routing ([86480de](86480dec07))
* **review:** add workspace cleanup on PR close and scheduled stale cleanup ([792ed7f](792ed7faa2))
* **review:** remove legacy mode and harden agent/codex pipeline ([1c0c9af](1c0c9afd17))
* **ui:** add frontend test infrastructure with vitest ([bc7616d](bc7616df42))
* **ui:** add LLM provider management frontend ([c45cb34](c45cb34a35))
* **ui:** add review config page with engine selector ([ae0dfce](ae0dfceba1))
* **ui:** replace hardcoded model lists with dynamic tokenlens API ([71bd310](71bd310459))
2026-03-24 04:30:56 +00:00
2026-03-24 04:30:56 +00:00

Gitea AI Assistant

License: MIT

AI-powered code review assistant for Gitea. Automatically reviews Pull Requests and commits using pluggable LLM providers (OpenAI Compatible, OpenAI Responses API, Anthropic, Google Gemini), providing intelligent code quality analysis with both summary comments and line-level feedback.

中文文档

Features

  • 🤖 AI Code Review - Automatic review of PRs and commits using pluggable LLM providers
  • 📝 Line-Level Comments - Precise feedback on specific code changes
  • 🔄 Task-Based Review Engines - Agent staged review (skip/light/full) plus optional Codex CLI execution mode
  • 🔔 Feishu Notifications - Integrated notification system for PR events
  • 🎛️ Admin Dashboard - Web UI for managing repository webhooks and LLM provider configuration
  • 🔐 Secure Webhooks - HMAC-SHA256 signature verification

Architecture

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│   Gitea Server  │────▶│ Gitea Assistant  │────▶│   LLM Gateway   │
│   (Webhooks)    │     │  (Hono + Bun)    │     │  (Multi-Provider)│
└─────────────────┘     └──────────────────┘     └─────────────────┘
                               │                        │
                               ▼                        ├─ OpenAI Compatible
                        ┌──────────────────┐            ├─ OpenAI Responses API
                        │  Admin Dashboard │            ├─ Anthropic
                        │   (React SPA)    │            └─ Google Gemini
                        └──────────────────┘

Review Engines

Engine Description Use Case
agent Task-based staged review (skip / light / full) with scoped specialist routing and optional reflection/debate escalation Deep reviews with token-aware execution
codex Codex CLI review execution with independent configuration External Codex-driven review pipeline

Quick Start

Prerequisites

  • Bun >= 1.2.5
  • Gitea instance with API access
  • At least one LLM provider API key (OpenAI, Anthropic, Google Gemini, or any OpenAI-compatible endpoint)

Installation

git clone https://github.com/user/gitea-ai-assistant.git
cd gitea-ai-assistant
bun install

Configuration

Create a .env file with only infrastructure-level settings:

# Server port
PORT=3000

# REQUIRED: encryption key for API key storage (generate with: openssl rand -hex 32)
ENCRYPTION_KEY=

# Optional: custom database path (default shown)
# DATABASE_PATH=./data/assistant.db

All other configuration (Gitea connection, webhook secret, admin password, review engine, Feishu, memory settings, etc.) is managed through the Admin Dashboard Web UI at http://your-server:3000. On first boot, all settings are seeded with secure defaults automatically.

See Configuration Reference for all options.

Running

bun run dev    # Development mode
bun run start  # Production mode

Setting Up Webhooks

Option 1: Admin Dashboard (Recommended)

  1. Access http://your-server:3000
  2. Log in with the admin password (default: password — change it in the dashboard)
  3. Click "Enable" on repositories to auto-configure webhooks

Option 2: Manual Configuration

In Gitea repository settings, add a webhook:

  • URL: http://your-server:3000/webhook/gitea
  • Content Type: application/json
  • Secret: Same as the Webhook Secret configured in the dashboard
  • Events: "Pull Request" and "Status"

Configuration Reference

Environment Variables (Minimal)

Only infrastructure-level settings that must be known before the database is initialized:

Variable Description Default
PORT Server port 5174
DATABASE_PATH SQLite database file path ./data/assistant.db
ENCRYPTION_KEY Required. AES-256-GCM encryption key for API key storage (64 hex chars). Generate with openssl rand -hex 32

Web UI Configuration (Admin Dashboard)

All runtime configuration is managed through the Admin Dashboard at http://your-server:PORT. Changes take effect immediately without restart.

On first boot with an empty database, all settings are seeded with secure defaults:

  • JWT_SECRET and WEBHOOK_SECRET are auto-generated (64-char hex via crypto.randomBytes)
  • ADMIN_PASSWORD defaults to passwordchange this immediately

Gitea

Setting Description
Gitea API URL Gitea API endpoint (e.g. https://gitea.example.com/api/v1)
Access Token Token for code review (read + comment permissions)
Admin Token Token for webhook management (optional)

Security

Setting Description Default
Webhook Secret HMAC-SHA256 webhook signature secret Auto-generated
Admin Password Dashboard login password password
JWT Secret JWT signing secret Auto-generated

LLM Provider Configuration

LLM providers and models are configured exclusively through the Admin Dashboard Web UI:

  1. Navigate to LLM 配置 (LLM Configuration)
  2. Add your LLM providers (OpenAI Compatible, OpenAI Responses API, Anthropic, Google Gemini)
  3. Assign models to review roles (planner, specialist, judge, embedding)

API keys are stored encrypted (AES-256-GCM) in the local SQLite database.

Feishu Integration

Setting Description
Feishu Webhook URL Feishu bot webhook URL
Feishu Webhook Secret Feishu webhook secret (optional)

Agent Review Engine

Setting Description Default
Review Engine Engine mode (agent or codex) agent
Enable Triage Enable planner triage for task routing true
Small Max Files Upper file-count bound for small review size 3
Small Max Changed Lines Upper changed-lines bound for small review size 80
Medium Max Files Upper file-count bound for medium review size 10
Medium Max Changed Lines Upper changed-lines bound for medium review size 400
Token Budget Small Token budget cap for small staged tasks 12000
Token Budget Medium Token budget cap for medium staged tasks 45000
Token Budget Large Token budget cap for large staged tasks 120000
Review Work Directory Working directory for repo clones /tmp/gitea-assistant
Max Parallel Runs Max concurrent review tasks 2
Max Files per Run Max files analyzed per review 200
Auto-publish Min Confidence Min confidence score for auto-publish 0.8
Enable Human Gate Require human approval before publishing true

Agent review execution model (current):

  • skip: docs/assets/rename-only style changes can bypass specialist review.
  • light: low-risk code changes run minimal scoped specialist checks.
  • full: sensitive or larger changes run full specialist tasks, with optional reflection/debate escalation.
  • Triage outputs task scopes (paths, riskTags, mode, tokenBudget) and orchestrator dispatches specialists by task scope instead of broad fan-out.

Memory & Learning (Experimental)

Setting Description Default
Qdrant URL Qdrant vector database URL -
Enable Memory Enable memory system false
Enable Reflection Enable self-critique false
Enable Debate Enable multi-agent debate false

Deployment

Docker

docker build -t gitea-assistant .
docker run -d -p 3000:3000 -v ./data:/app/data -e PORT=3000 gitea-assistant

Docker Compose

docker-compose up -d

Kubernetes

Kubernetes manifests are located in the k8s/ directory.

1. Create the encryption secret

# Generate a key and create the secret
kubectl apply -f k8s/namespace.yaml
ENCRYPTION_KEY=$(openssl rand -hex 32)
kubectl -n gitea-assistant create secret generic gitea-assistant-secret \
  --from-literal=ENCRYPTION_KEY=$ENCRYPTION_KEY
# Save this key! You'll need it if you ever redeploy.
echo "Your ENCRYPTION_KEY: $ENCRYPTION_KEY"

2. Deploy

kubectl apply -k k8s/

Or apply individually:

kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/qdrant.yaml
kubectl apply -f k8s/gitea-assistant.yaml

4. Verify

kubectl -n gitea-assistant get pods
kubectl -n gitea-assistant get svc

5. Expose the Service (optional)

By default, services use ClusterIP. To expose externally, use an Ingress or change the Service type:

kubectl -n gitea-assistant patch svc gitea-assistant -p '{"spec":{"type":"NodePort"}}'

License

MIT License

Description
Gitea功能增强助手,基于Bun和TypeScript开发,提供AI驱动的代码审查等增强功能。本工具通过Webhook与Gitea集成,自动对Pull Request和提交进行代码审查,并提供智能化的代码质量分析。 ⚠️ ARCHIVED: Original GitHub repository no longer exists. Preserved as backup on 2026-03-27T15:06:50.991Z
Readme 7.2 MiB
Languages
TypeScript 96.3%
CSS 1.7%
Shell 1.4%
JavaScript 0.4%
Dockerfile 0.2%