feat(gitea): add Gitea/Forgejo as a git provider

Full parity with the existing GitLab provider:
- Server module packages/web/server/lib/gitea (auth/client/repo/routes + docs + tests)
  with Gitea REST v1 API, PAT + base URL auth, multi-account storage
- Shared GiteaAPI types and web API client
- Provider detection generalized with user-configurable custom domains
  per provider (github/gitlab/gitea), additive with built-in defaults
  (github.com, gitlab.com) and connected-account hosts; precedence
  github -> gitlab -> gitea
- Gitea PR view, issues section, pickers, integration dialog, branch
  PR status helper, settings UI (PAT + base URL + custom domains)
- Magic prompts (gitea.pr.review, gitea.issue.review) and full 11-locale
  i18n parity
This commit is contained in:
2026-08-16 16:27:49 +00:00
parent be13272eb1
commit ca91fd7e2d
65 changed files with 10667 additions and 101 deletions
@@ -227,6 +227,7 @@ export const settingsDict = {
"settings.magicPrompts.sidebar.group.git": "Git",
"settings.magicPrompts.sidebar.group.github": "GitHub",
"settings.magicPrompts.sidebar.group.gitlab": "GitLab",
"settings.magicPrompts.sidebar.group.gitea": "Gitea",
"settings.magicPrompts.sidebar.group.planning": "Планування",
"settings.magicPrompts.sidebar.group.session": "Сесія",
"settings.magicPrompts.sidebar.item.gitCommitGenerate": "Генерація комітів",
@@ -240,6 +241,8 @@ export const settingsDict = {
"settings.magicPrompts.sidebar.item.githubSinglePrCommentReview": "Огляд єдиного PR коментаря",
"settings.magicPrompts.sidebar.item.gitlabPrReview": "MR огляд",
"settings.magicPrompts.sidebar.item.gitlabIssueReview": "Огляд issue",
"settings.magicPrompts.sidebar.item.giteaPrReview": "Огляд PR",
"settings.magicPrompts.sidebar.item.giteaIssueReview": "Огляд issue",
"settings.magicPrompts.sidebar.item.planTodo": "Планування Todo",
"settings.magicPrompts.sidebar.item.planImprove": "Поліпшити план",
"settings.magicPrompts.sidebar.item.planImplement": "Реалізувати план",
@@ -1675,6 +1678,9 @@ export const settingsDict = {
"settings.github.page.toast.ghCliEnabled": "Резервний варіант gh CLI увімкнено",
"settings.github.page.toast.ghCliDisabled": "Резервний варіант gh CLI вимкнено",
"settings.github.page.toast.ghCliUpdateFailed": "Не вдалося оновити налаштування gh CLI",
"settings.github.page.customDomains.label": "Власні домени",
"settings.github.page.customDomains.description": "Репозиторії, розміщені на цих доменах, вважатимуться GitHub.",
"settings.github.page.customDomains.placeholder": "github.example.com, git.mycompany.com",
"settings.gitlab.page.title": "Персональний токен доступу GitLab",
"settings.gitlab.page.description": "Вставте персональний токен доступу GitLab, щоб підключитися. Вкажіть базову URL-адресу, якщо використовуєте самостійно розміщену інстанцію GitLab.",
"settings.gitlab.page.tooltip.connectAccount": "Підключіть обліковий запис GitLab для роботи з issues та merge requests в застосунку.",
@@ -1682,6 +1688,9 @@ export const settingsDict = {
"settings.gitlab.page.accessToken.placeholder": "Вставте ваш персональний токен доступу GitLab",
"settings.gitlab.page.baseUrl.label": "Базова URL-адреса (необов'язково)",
"settings.gitlab.page.baseUrl.placeholder": "https://gitlab.com",
"settings.gitlab.page.customDomains.label": "Власні домени",
"settings.gitlab.page.customDomains.description": "Репозиторії, розміщені на цих доменах, вважатимуться GitLab.",
"settings.gitlab.page.customDomains.placeholder": "gitlab.example.com, git.company.com",
"settings.gitlab.page.actions.connect": "Підключити GitLab",
"settings.gitlab.page.actions.disconnect": "Відключити",
"settings.gitlab.page.actions.switch": "Перемкнути на",
@@ -1698,6 +1707,32 @@ export const settingsDict = {
"settings.gitlab.page.toast.disconnectFailed": "Не вдалося відключити GitLab",
"settings.gitlab.page.toast.accountSwitched": "Обліковий запис GitLab перемкнено",
"settings.gitlab.page.toast.accountSwitchFailed": "Не вдалося перемкнути обліковий запис GitLab",
"settings.gitea.page.title": "Персональний токен доступу Gitea / Forgejo",
"settings.gitea.page.description": "Вставте персональний токен доступу Gitea або Forgejo, щоб підключитися. Вкажіть базову URL-адресу, якщо використовуєте самостійно розміщену інстанцію Gitea або Forgejo.",
"settings.gitea.page.tooltip.connectAccount": "Підключіть обліковий запис Gitea або Forgejo для роботи з issues та PR в застосунку.",
"settings.gitea.page.accessToken.label": "Персональний токен доступу",
"settings.gitea.page.accessToken.placeholder": "Вставте ваш персональний токен доступу Gitea",
"settings.gitea.page.baseUrl.label": "Базова URL-адреса (необов'язково)",
"settings.gitea.page.baseUrl.placeholder": "https://gitea.example.com",
"settings.gitea.page.actions.connect": "Підключити Gitea",
"settings.gitea.page.actions.disconnect": "Відключити",
"settings.gitea.page.actions.switch": "Перемкнути на",
"settings.gitea.page.status.notConnected": "Не підключено",
"settings.gitea.page.label.unknownUser": "невідомо",
"settings.gitea.page.label.otherAccounts": "Інші облікові записи",
"settings.gitea.page.avatarAlt.withLogin": "Аватар {login}",
"settings.gitea.page.avatarAlt.fallback": "Аватар Gitea",
"settings.gitea.page.connectedAs": "Підключено як",
"settings.gitea.page.errors.invalidToken": "Введіть дійсний персональний токен доступу Gitea",
"settings.gitea.page.errors.failed": "Не вдалося підключити Gitea",
"settings.gitea.page.toast.connected": "Gitea підключено",
"settings.gitea.page.toast.disconnected": "Gitea відключено",
"settings.gitea.page.toast.disconnectFailed": "Не вдалося відключити Gitea",
"settings.gitea.page.toast.accountSwitched": "Обліковий запис Gitea перемкнено",
"settings.gitea.page.toast.accountSwitchFailed": "Не вдалося перемкнути обліковий запис Gitea",
"settings.gitea.page.customDomains.label": "Власні домени",
"settings.gitea.page.customDomains.description": "Репозиторії, розміщені на цих доменах, вважатимуться Gitea або Forgejo.",
"settings.gitea.page.customDomains.placeholder": "gitea.example.com, git.company.com",
"settings.notifications.page.delivery.title": "Доставка сповіщень",
"settings.notifications.page.delivery.enableAria": "Увімкнути сповіщення",
"settings.notifications.page.delivery.enableLabel": "Увімкнути сповіщення",
@@ -2083,6 +2118,10 @@ export const settingsDict = {
"settings.magicPrompts.page.group.gitlabPrReview.description": "Промпти, які використовуються для GitLab MR-огляду: видиме повідомлення користувача + приховані інструкції.",
"settings.magicPrompts.page.group.gitlabIssueReview.title": "Огляд issue",
"settings.magicPrompts.page.group.gitlabIssueReview.description": "Промпти, які використовуються для GitLab issue-огляду: видиме повідомлення користувача + приховані інструкції.",
"settings.magicPrompts.page.group.giteaPrReview.title": "Огляд PR",
"settings.magicPrompts.page.group.giteaPrReview.description": "Промпти, які використовуються для Gitea PR-огляду: видиме повідомлення користувача + приховані інструкції.",
"settings.magicPrompts.page.group.giteaIssueReview.title": "Огляд issue",
"settings.magicPrompts.page.group.giteaIssueReview.description": "Промпти, які використовуються для Gitea issue-огляду: видиме повідомлення користувача + приховані інструкції.",
"settings.magicPrompts.page.group.gitConflictResolve.title": "Вирішення конфліктів злиття/перебазування",
"settings.magicPrompts.page.group.gitConflictResolve.description": "Промпти, які використовуються під час вирішення конфліктів злиття/перебазування з AI.",
"settings.magicPrompts.page.group.gitCherrypickConflictResolve.title": "Вирішення конфліктів",