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
@@ -260,6 +260,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': 'Commit 生成',
@@ -273,6 +274,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': '計画の実装',
@@ -1708,6 +1711,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 パーソナルアクセストークンを貼り付けて接続します。セルフホストの GitLab インスタンスを使用する場合はベース URL を設定してください。',
'settings.gitlab.page.tooltip.connectAccount': 'アプリ内の Issue とマージリクエストのワークフロー用に GitLab アカウントを接続します。',
@@ -1715,6 +1721,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': '切り替え',
@@ -1731,6 +1740,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 のパーソナルアクセストークンを貼り付けて接続します。セルフホストの Gitea または Forgejo インスタンスを使用する場合はベース URL を設定してください。',
'settings.gitea.page.tooltip.connectAccount': 'アプリ内の Issue とプルリクエストのワークフロー用に Gitea または Forgejo アカウントを接続します。',
'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': '通知を有効化',
@@ -2116,6 +2151,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': 'Merge/Rebase 競合解決',
'settings.magicPrompts.page.group.gitConflictResolve.description': 'AI で Merge/Rebase 競合を解決する際に使用するプロンプト。',
'settings.magicPrompts.page.group.gitCherrypickConflictResolve.title': 'Cherry-pick 競合解決',