Files
APAW/archive/GITEA_INTEGRATION.md
¨NW¨ 5a77528b23 refactor: clean up root directory - move deprecated files to archive
Archive:
- docker-compose.yml, Dockerfile.playwright
- scripts/ (legacy test scripts)
- docs/, .test/ (old documentation and tests)
- IMPROVEMENT_PROPOSAL.md (superseded by .kilo/)
- BROWSER_VISIBILITY.md, README.Docker.md
- cleanup-packages.sh, fix-permissions.sh, install-apaw.sh

Keep in root:
- .kilo/ (active system)
- .claude/ (Claude Code runtime)
- AGENTS.md (agent reference)
- README.md (main documentation)
- src/ (utility code)
- package.json, tsconfig.json (project config)
2026-04-05 03:52:10 +01:00

6.3 KiB
Raw Permalink Blame History

Gitea API Integration

Интеграция с Gitea API 1.21+ для автмоатического управления issues, milestones и логирования работы агентов.

Установка

# Установите зависимости
bun install

# Или с npm
npm install

Настройка

Вариант 1: Токен через окружение

# Установите переменные окружения
export GITEA_API_URL="https://git.softuniq.eu/api/v1"
export GITEA_TOKEN=аш_токен_здесь"

Вариант 2: Получение токена из логина/пароля

# Запустите скрипт для создания токена
./scripts/create-gitea-token.sh your_username your_password

# Скрипт выведет:
# export GITEA_TOKEN=abc123...

Вариант 3: Программно через API

import { GiteaClient } from './src/kilocode/agent-manager/gitea-client.js'

// Создать токен из логина/пароля
const { token } = await GiteaClient.createToken(
  'your_username',
  'your_password',
  'Pipeline Token',
  ['all']  // или ['read:issue', 'write:issue', 'read:repository', 'write:repository']
)

// Использовать токен
const client = new GiteaClient({ token })

Использование

Создание Issues с Milestone

import { GiteaClient } from './src/kilocode/agent-manager/gitea-client.js'

const client = new GiteaClient({
  apiUrl: 'https://git.softuniq.eu/api/v1',
  token: process.env.GITEA_TOKEN
})

client.setRepository('UniqueSoft', 'APAW')

// Создать milestone
const milestone = await client.createMilestone({
  title: 'Sprint 1',
  description: 'First sprint',
  due_on: new Date(Date.now() + 14 * 24 * 60 * 60 * 1000).toISOString()
})

// Создать issue с milestone
const issue = await client.createIssue({
  title: 'Implement authentication',
  body: `## Чеклист
- [ ] Дизайн API
- [ ] Реализация
- [ ] Тесты`,
  labels: ['status: new'],
  milestone: milestone.id
})

// Добавить комментарий
await client.createComment(issue.number, {
  body: `## ✅ Прогресс
  
### Выполнено
- ✅ API спроектирован
- ✅ Начата реализация

### В процессе
- 🔄 Написание тестов`
})

// Изменить статус
await client.setStatus(issue.number, 'implementing')

Логирование производительности агентов

import { logAgentPerformance, logPipelineStep } from './src/kilocode/agent-manager/gitea-client.js'

// Логировать шаг пайплайна
await logPipelineStep(client, issueNumber, '@lead-developer', 'started', 'Implementing authentication')

// Логировать результат работы агента
await logAgentPerformance(client, issueNumber, 'lead-developer', 8, 'Clean implementation, good test coverage')

Работа с Labels

// Получить все labels репозитория
const labels = await client.getRepoLabels()

// Добавить labels к issue
await client.addLabels(issueNumber, [1, 2, 3])  // по ID
await client.addLabels(issueNumber, ['bug', 'priority:high'])  // по имени

// Заменить все labels
await client.replaceLabels(issueNumber, [1, 2])

// Удалить label
await client.removeLabel(issueNumber, 1)

// Установить статус (удаляет старые status: labels)
await client.setStatus(issueNumber, 'implementing')

API Scopes

Gitea использует гранулярные scopes вместо старых repo, issue:

Scope Описание
all Полный доступ
read:issue Чтение issues
write:issue Создание/изменение issues
read:repository Чтение репозитория
write:repository Изменение репозитория
read:milestone Чтение milestones
write:milestone Создание/изменение milestones

Скрипты тестирования

Создание токена

./scripts/create-gitea-token.sh username password

Полный тест (токен + milestone + issues + comments)

./scripts/full-gitea-test.sh username password

Тест с существующим токеном

export GITEA_TOKEN=your_token
./scripts/test-gitea.sh

Структура ответов API

Milestone

{
  "id": 42,
  "title": "Pipeline Integration Test",
  "description": "...",
  "state": "open",
  "open_issues": 3,
  "closed_issues": 0,
  "created_at": "2026-04-04T00:27:11Z",
  "due_on": "2026-04-11T00:27:03Z"
}

Issue

{
  "number": 1,
  "title": "Setup Gitea Client",
  "body": "## Чеклист\n- [x] Задача 1\n- [ ] Задача 2",
  "state": "open",
  "labels": [{ "id": 1, "name": "status: new", "color": "0052cc" }],
  "milestone": { "id": 42, "title": "..." },
  "comments": 3
}

Label

{
  "id": 1,
  "name": "status: new",
  "color": "0052cc",
  "description": "New issue",
  "exclusive": false,
  "is_archived": false
}

Интеграция с агентами

Агенты могут использовать GiteaClient для:

  1. Создание tasks: client.createIssue()
  2. Обновление статуса: client.setStatus()
  3. Логирование прогресса: client.createComment()
  4. Работа с milestone: client.createMilestone()
  5. Парсинг чеклистов: Извлечение - [x] из issue body

Pipeline Integration

// В .kilo/commands/pipeline.md
import { GiteaClient, PipelineRunner } from './src/kilocode/index.js'

const runner = await createPipelineRunner({
  giteaToken: process.env.GITEA_TOKEN
})

// Запустить пайплайн для issue
await runner.run({ issueNumber: 42 })

// Оценить производительность
await runner.logEvaluation(42, [
  { agent: 'lead-developer', score: 8, notes: 'Clean code' },
  { agent: 'code-skeptic', score: 7, notes: 'Found 2 issues' }
], 2, 1.5)