# πŸ“¦ @goodandready/dsh-gitea

ΠšΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ интСграция Gitea ΠΈ Forgejo для DeepSeek Harness

npm version license DSH Plugin Node version

ВсС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π°Π²Ρ‚ΠΎΡ€Π°

πŸ‡¬πŸ‡§ English β€’ πŸ‡·πŸ‡Ί Русский β€’ πŸ‡¨πŸ‡³ δΈ­ζ–‡θ―΄ζ˜Ž

⭐ Если Π²Π°ΠΌ нравится этот ΠΏΠ»Π°Π³ΠΈΠ½, ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΅ΠΌΡƒ Π·Π²Π΅Π·Π΄Ρƒ Π½Π° GitHub β€” это ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мСня Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ дальшС.

πŸ› Если Π²Ρ‹ нашли Π±Π°Π³ ΠΈΠ»ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», создайтС issue Π½Π° GitHub Π½Π° любом языкС β€” я Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ вашС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсий ΠΏΠ»Π°Π³ΠΈΠ½Π°.
--- ### 🌟 Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² v0.7.6 - **ВстроСнноС Π°Π²Ρ‚ΠΎΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅**: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π° прямо ΠΈΠ· ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ настроСк DSH. - **БСрвисы ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ**: ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ сСрвисы `dshGitea` (созданиС Π·Π°Π΄Π°Ρ‡) ΠΈ `giteaEvents` (ΠΏΠΎΡ‚ΠΎΠΊ событий для `@goodandready/dsh-pulse`). - **Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π³ΠΈΠ³ΠΈΠ΅Π½Π°**: Бтрогая Π·Π°Ρ‰ΠΈΡ‚Π° POST-ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² (`lib/http-guard.js`), чистый экспорт Π±Π΅Π· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² (`publish.sh`). - **ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ**: БвоСврСмСнная инвалидация кэша снимка git ΠΏΡ€ΠΈ мутациях ΠΈ дСкомпозиция `lib/tool-defs.js`. ### 🌟 Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² v0.7.5 - **ΠšΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ английский сСрвСрной ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ ΠΈ инструмСнтов Π°Π³Π΅Π½Ρ‚Π°**: ВсС ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ инструмСнтов, Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΈ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΊ стандарту `dsh-plugin-authoring` (каноничСский английский Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°Ρ… Π°Π³Π΅Π½Ρ‚Ρƒ). - **ЧистыС Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ npm-ΠΏΠ°ΠΊΠ΅Ρ‚Π°**: Π­Ρ‚Π°Π»ΠΎΠ½Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ issue-Ρ„ΠΎΡ€ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² `assets/issue-templates/`, Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (`docs/superpowers/`, `.gitea/`) ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΈΠ· состава npm-ΠΏΠ°ΠΊΠ΅Ρ‚Π°. - **АвтоматичСский Compliance Quality Gate**: ВстроСн Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ тСст Π½Π° 0 символов ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹ Π² `lib/` ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ состава Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚Π°. ## ⚑ ΠžΠ±Π·ΠΎΡ€ ΠΈ Ρ€Π΅ΡˆΠ°Π΅ΠΌΠ°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² DeepSeek Harness Π°Π³Π΅Π½Ρ‚Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ доступ ΠΊ Ρ‚Ρ€Π΅ΠΊΠ΅Ρ€Ρƒ Π·Π°Π΄Π°Ρ‡ (Issues), созданию ΠΈ Ρ€Π΅Π²ΡŒΡŽ ΠΏΡƒΠ»-рСквСстов (PR), ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ ΠΈ изоляции Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… срСд (Worktrees). Π‘Π΅Π· спСциализированного ΠΏΠ»Π°Π³ΠΈΠ½Π° Π°Π³Π΅Π½Ρ‚ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ «грязныС» ΠΏΡ€Π°Π²ΠΊΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ сторонним CLI Π±Π΅Π· контроля ΠΏΡ€Π°Π² доступа. **`@goodandready/dsh-gitea`** обСспСчиваСт Π±Π΅ΡΡˆΠΎΠ²Π½ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ DeepSeek Harness с сСрвСрами **Gitea** ΠΈ **Forgejo**. Плагин прСдоставляСт Π°Π³Π΅Π½Ρ‚Ρƒ 20+ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… инструмСнтов, добавляСт ΠΆΠΈΠ²ΠΎΠΉ **Git Status Chip** Π² ΡˆΠ°ΠΏΠΊΡƒ Π²Π΅Π±-интСрфСйса Ρ‡Π°Ρ‚Π° ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π±Π°Ρ€ΡŒΠ΅Ρ€Π°ΠΌΠΈ бСзопасности (Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ `confirm: true` для слияния ΠΈ удалСния). --- ## πŸ—οΈ АрхитСктура ```mermaid graph LR subgraph DSH ["DeepSeek Harness"] UI["Π¨Π°ΠΏΠΊΠ° Ρ‡Π°Ρ‚Π° Web UI
(Git Status Chip)"] Agent["Автономный Π°Π³Π΅Π½Ρ‚
(20+ инструмСнтов Gitea)"] Creds["Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Credentials
(Бсылка Π½Π° GITEA_TOKEN)"] end subgraph Plugin ["Плагин dsh-gitea"] ChipPoller["/git-status API
Π˜Π½ΡΠΏΠ΅ΠΊΡ‚ΠΎΡ€ Π²Π΅Ρ‚ΠΎΠΊ ΠΈ Diff"] Client["GiteaClient
(REST API v1)"] WorktreeMgr["ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Worktree
(Π˜Π·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ)"] end subgraph Server ["Π‘Π΅Ρ€Π²Π΅Ρ€ вСрсий"] Gitea["Gitea / Forgejo Server
(Π—Π°Π΄Π°Ρ‡ΠΈ, PR, ΠœΠ΅Ρ‚ΠΊΠΈ, Π’Π΅Ρ…ΠΈ)"] GitRepo["Git Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ
(Π’Π΅Ρ‚ΠΊΠΈ ΠΈ Worktrees)"] end UI -->|ΠžΠΏΡ€ΠΎΡ статуса| ChipPoller ChipPoller -->|Π§Ρ‚Π΅Π½ΠΈΠ΅ статуса| GitRepo Agent -->|Π’Ρ‹Π·ΠΎΠ² инструмСнтов| Client Agent -->|Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ| WorktreeMgr WorktreeMgr -->|git worktree| GitRepo Client -->|Авторизованный REST| Gitea Creds -.->|Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² памяти| Client ``` --- ## ✨ Π˜ΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π±ΠΎΡ€ возмоТностСй ### 1. Набор ΠΈΠ· 20+ инструмСнтов Π°Π³Π΅Π½Ρ‚Π° ВсС инструмСнты автоматичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° (`owner`) ΠΈ имя рСпозитория (`repo`) ΠΈΠ· адрСса `git remote get-url origin` Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области, Ссли Π°Π³Π΅Π½Ρ‚ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π» ΠΈΡ… явно. | Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ | ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ | НазначСниС | ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ бСзопасности | |:---|:---|:---|:---| | `gitea_labels` | ΠœΠ΅Ρ‚ΠΊΠΈ | Ѐасад управлСния ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ: `list`, `create`, `delete`, `set` | - | | `gitea_milestones` | Π’Π΅Ρ…ΠΈ | Ѐасад управлСния Π²Π΅Ρ…Π°ΠΌΠΈ: `list`, `create`, `update`, `delete` | ⚠️ Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `confirm: true` | | `gitea_releases` | Π Π΅Π»ΠΈΠ·Ρ‹ | Ѐасад управлСния Ρ€Π΅Π»ΠΈΠ·Π°ΠΌΠΈ: `list`, `create`, `update`, `delete`, `plan`, `notes` | ⚠️ Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `confirm: true` | | `gitea_ci` | CI / Actions | Ѐасад инспСкции CI: `status`, `jobs`, `rerun`, `explain` | ⚠️ ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `confirm: true` | | `gitea_branches` | Π’Π΅Ρ‚ΠΊΠΈ | Ѐасад управлСния Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ: `list`, `create`, `delete` | ⚠️ Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `confirm: true` | | `gitea_tags` | Π’Π΅Π³ΠΈ | Ѐасад управлСния Ρ‚Π΅Π³Π°ΠΌΠΈ: `list`, `create`, `delete` | ⚠️ Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `confirm: true` | | `gitea_webhooks` | Π’Π΅Π±Ρ…ΡƒΠΊΠΈ | Ѐасад управлСния Π²Π΅Π±Ρ…ΡƒΠΊΠ°ΠΌΠΈ: `list`, `create`, `delete` | ⚠️ Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `confirm: true` | | `gitea_org` | ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ | Ѐасад ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ: `list`, `repos`, `members`, `teams`, `create_repo` | - | | `gitea_wiki` | Π’ΠΈΠΊΠΈ | Ѐасад Π²ΠΈΠΊΠΈ-страниц: `list`, `get` | - | | `gitea_issue_create` | Π—Π°Π΄Π°Ρ‡ΠΈ | Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ, описаниСм, ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ ΠΈ исполнитСлями | - | | `gitea_issue_list` | Π—Π°Π΄Π°Ρ‡ΠΈ | Бписок Π·Π°Π΄Π°Ρ‡ с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ статусу (`open`/`closed`), Π²Π΅Ρ…Π°ΠΌ ΠΈ ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌ | - | | `gitea_issue_get` | Π—Π°Π΄Π°Ρ‡ΠΈ | ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π·Π°Π΄Π°Ρ‡Π΅ ΠΏΠΎ Π΅Ρ‘ Π½ΠΎΠΌΠ΅Ρ€Ρƒ | - | | `gitea_issue_comment`| Π—Π°Π΄Π°Ρ‡ΠΈ | Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² ΠΎ прогрСссС ΠΈ Ρ€Π΅Π²ΡŒΡŽ | - | | `gitea_issue_comments`| Π—Π°Π΄Π°Ρ‡ΠΈ | Бписок ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π·Π°Π΄Π°Ρ‡ΠΈ (с ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ `mine: true/false`) | - | | `gitea_issue_comment_delete`| Π—Π°Π΄Π°Ρ‡ΠΈ | Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ собствСнного коммСнтария (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ dry-run ΠΏΡ€Π΅Π²ΡŒΡŽ; ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π°) | ⚠️ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `confirm: true` | | `gitea_issue_update` | Π—Π°Π΄Π°Ρ‡ΠΈ | Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Ρ‚Π΅Π»Π° ΠΈΠ»ΠΈ статуса Π·Π°Π΄Π°Ρ‡ΠΈ | - | | `gitea_issue_close` | Π—Π°Π΄Π°Ρ‡ΠΈ | Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ | - | | `gitea_issue_search` | Π—Π°Π΄Π°Ρ‡ΠΈ | ΠŸΠΎΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²Ρ‹ΠΉ поиск ΠΏΠΎ Π·Π°Π΄Π°Ρ‡Π°ΠΌ рСпозитория/инстанса | - | | `gitea_issue_set_assignee` | Команда | НазначСниС отвСтствСнных Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΠ»ΠΈ Π°Π³Π΅Π½Ρ‚ΠΎΠ² | - | | `gitea_pr_create` | ΠŸΡƒΠ»-рСквСсты | ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ PR ΠΈΠ· Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ | - | | `gitea_pr_list` | ΠŸΡƒΠ»-рСквСсты | Бписок ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… PR | - | | `gitea_pr_get` | ΠŸΡƒΠ»-рСквСсты | ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сводки ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ€Π΅Π²ΡŒΡŽ ΠΈ статусов ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ | - | | `gitea_pr_comment` | ΠŸΡƒΠ»-рСквСсты | ΠŸΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ ΠΊΠΎΠ΄Ρƒ ΠΈ обсуТдСниС PR | - | | `gitea_pr_merge` | ΠŸΡƒΠ»-рСквСсты | БлияниС PR (merge / rebase / squash) | ⚠️ ВрСбуСтся `confirm: true` | | `gitea_worktree_list`| Worktree | Бписок Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²ΠΎΡ€ΠΊΠ΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² | - | | `gitea_worktree_add` | Worktree | Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ | - | | `gitea_worktree_use` | Worktree | ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста сСссии Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π²ΠΎΡ€ΠΊΠ΄Π΅Ρ€Π΅Π²Π° | - | | `gitea_worktree_remove` | Worktree | Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ очистка Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΠ³ΠΎ Π²ΠΎΡ€ΠΊΠ΄Π΅Ρ€Π΅Π²Π° | ⚠️ ВрСбуСтся `confirm: true` | | `gitea_issue_templates` | Π—Π°Π΄Π°Ρ‡ΠΈ | ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ валидация стандартизированных YAML-шаблонов issue ΠΈΠ· `.gitea/ISSUE_TEMPLATE` | - | | `gitea_git_graph` | Git ΠΈ Π³Ρ€Π°Ρ„ | Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ топологичСский Π³Ρ€Π°Ρ„ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹Π΅ Π΄ΠΎΡ€ΠΎΠΆΠΊΠΈ, Π²Π΅Ρ‚ΠΊΠΈ/Ρ‚Π΅Π³ΠΈ ΠΈ статусы CI | - | | `gitea_repo_search` | Поиск | Поиск Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² ΠΏΠΎ всСму инстансу Gitea | - | | `gitea_whoami` | ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ | Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎΠ± Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ ΠΈ ΠΏΡ€Π°Π²Π°Ρ… | - | | `gitea_release_assistant` | Π Π΅Π»ΠΈΠ·Ρ‹ | ΠŸΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Ρ€Π΅Π»ΠΈΠ·ΠΎΠ²: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° SemVer, многоязычныС списки ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ CI | - | | `gitea_worktree_gc` | Worktrees | БСзопасная очистка ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΊΠΎΠΏΠΈΠΉ (GC) Π² Ρ„ΠΎΠ½Π΅ ΠΈ ΠΏΠΎ запросу | ⚠️ ВрСбуСтся `confirm: true` | | `gitea_issue_to_pr` | Pull Requests | АвтоматичСскоС созданиС PR ΠΈΠ· Π·Π°Π΄Π°Ρ‡ΠΈ с шаблоном ΠΈ контСкстом | - | | `gitea_ai_review` | Pull Requests | АвтоматичСскоС ΠΊΠΎΠ΄-Ρ€Π΅Π²ΡŒΡŽ с коммСнтариями ΠΏΠΎ строкам, Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ ΠΈ suggestion-Π±Π»ΠΎΠΊΠ°ΠΌΠΈ | - | | `gitea_pr_line_comment` | Pull Requests | Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΏΠΎ строкам Π΄ΠΈΡ„Π° ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² ```suggestion для ΠΎΠ΄Π½ΠΎΠΊΠ»ΠΈΠΊΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² | - | | `gitea_task_tracker_sync` | ЭкосистСма | Двусторонняя синхронизация ΠΊΠ°Π½Π±Π°Π½-досок Task Tracker (`dsh-drives.task-provision.v1`) | - | | `gitea_memory_brain_sync` | ЭкосистСма | Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΊΡ‚ΠΎΠ², Π·Π°Π΄Π°Ρ‡ ΠΈ PR Π² Memory Brain | - | | `gitea_incident_report` | Π˜Π½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Ρ‹ | Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² ΠΎΠ± ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Π°Ρ… с маскированиСм ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² | - | | `gitea_ci_logs_analyze` | CI & Actions | Анализ ΠΏΠ΅Ρ€Π²ΠΎΠΏΡ€ΠΈΡ‡ΠΈΠ½ сбоСв (RCA) Π² Gitea Actions: локализация ΡƒΠΏΠ°Π²ΡˆΠ΅Π³ΠΎ шага, классификация ошибок ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ | - | | `gitea_action_card` | Generative UI | Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Generative UI Action Cards Π·Π°Π΄Π°Ρ‡, PR ΠΈ Π²Π΅Ρ‚ΠΎΠΊ Π² Ρ‡Π°Ρ‚Π΅ с быстрыми дСйствиями Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ | - | | `gitea_pr_stack_status` | Pull Requests | Анализ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ зависимых PR (Stacked PRs), Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ стСка ΠΈ готовности ΠΊ ΠΏΠ΅Ρ€Π΅Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ | - | | `gitea_pr_stack_rebase` | Pull Requests | АвтоматичСский каскадный rebase Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½Π½ΡƒΡŽ Π±Π°Π·Ρƒ с Π°Π²Ρ‚ΠΎ-ΠΎΡ‚ΠΊΠ°Ρ‚ΠΎΠΌ ΠΏΡ€ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°Ρ… | - | | `gitea_conflict_analyze` | Git & Conflicts | Врёхсторонний in-memory Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² слияния ΠΈ катСгоризация сСкций (ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹, зависимости, сСмантика) | - | | `gitea_pr_conflict_resolve` | Git & Conflicts | Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² PR с preview diff Π΄ΠΎ фиксации | ⚠️ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `confirm: true` | | `gitea_release_plan` | Releases | Анализатор Conventional Commits с Π°Π²Ρ‚ΠΎ-расчётом SemVer ΠΈ структурированным Ρ‡Π΅ΠΉΠ½Π΄ΠΆΠ»ΠΎΠ³ΠΎΠΌ | - | | `gitea_packages_list` | Packages | ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² Gitea Package Registry (npm, PyPI, OCI, Generic) | - | | `gitea_package_get` | Packages | ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅, вСрсии ΠΈ ассСты ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² рССстрС Gitea | - | | `gitea_package_delete` | Packages | Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ вСрсии ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠ· рССстра Gitea | ⚠️ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `confirm: true` | | `gitea_package_config` | Packages | ГСнСрация клиСнтского ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° (.npmrc, pip.conf, docker login) | - | | `gitea_suggest_reviewers` | Reviews | РСкомСндация Ρ€Π΅Π²ΡŒΡŽΠ΅Ρ€ΠΎΠ² PR Π½Π° основС ΠΏΡ€Π°Π²ΠΈΠ» CODEOWNERS ΠΈ авторства ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· git blame | - | | `gitea_branch_protection_get` | Security | ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π°Π²ΠΈΠ» Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π²Π΅Ρ‚ΠΊΠΈ, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°ΠΏΠΏΡ€ΡƒΠ²ΠΎΠ² ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‚Π° force push | - | | `gitea_branch_protection_set` | Security | Настройка ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ» Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π²Π΅Ρ‚ΠΊΠΈ с Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ просмотра | ⚠️ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `confirm: true` | | `gitea_deploy_keys` | Security | Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ deploy keys рСпозитория (просмотр, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅) | ⚠️ Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `confirm: true` | | `gitea_security_audit` | Security | ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Ρ‹ΠΉ Π°ΡƒΠ΄ΠΈΡ‚ бСзопасности рСпозитория (Π·Π°Ρ‰ΠΈΡ‚Π° Π²Π΅Ρ‚ΠΎΠΊ, ΠΊΠ»ΡŽΡ‡ΠΈ дСплоя, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΏΡƒΡˆΠ°) | - | | `gitea_mirror_sync_status` | Mirror | ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ синхронизации ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π΅Ρ€ΠΊΠ°Π» (Gitea <-> GitHub) с Ρ€ΡƒΡ‡Π½Ρ‹ΠΌ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠΌ | ⚠️ Бинхронизация Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `confirm: true` | | `gitea_webhook_sandbox` | Webhooks | ΠŸΠ΅ΡΠΎΡ‡Π½ΠΈΡ†Π° Π²Π΅Π±Ρ…ΡƒΠΊΠΎΠ²: ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ событий, маскированиС сСкрСтов ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³ΠΎΠ½ | ⚠️ ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `confirm: true` | *(ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ВсС ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° инструмСнтов, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ `gitea_label_list`, `gitea_release_now` ΠΈ Ρ‚.Π΄., Π½Π° 100% ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости).* --- ### 2. Git Status Chip ΠΈ топологичСский Π³Ρ€Π°Ρ„ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ встраиваСт динамичСский Ρ‡ΠΈΠΏ статуса Git прямо Π² Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ панСль Ρ‡Π°Ρ‚Π° DSH: * **Активный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ Π²Π΅Ρ‚ΠΊΠ°**: ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ имя Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `feature/issue-42-auth`). * **Чистота Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ**: Ρ†Π²Π΅Ρ‚Π½ΠΎΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (чистоС Π΄Π΅Ρ€Π΅Π²ΠΎ vs Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΎΠΊ) ΠΈ счётчик Ρ„Π°ΠΉΠ»ΠΎΠ². * **Π‘Ρ‡Ρ‘Ρ‚Ρ‡ΠΈΠΊ Ahead/Behind**: ΠΆΠΈΠ²Ρ‹Π΅ Π±Π΅ΠΉΠ΄ΠΆΠΈ расхоТдСния с ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ (`↑ahead`, `↓behind`). * **МодальноС ΠΎΠΊΠ½ΠΎ Π³Ρ€Π°Ρ„Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²**: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Π°Ρ визуализация Π΄ΠΎΡ€ΠΎΠΆΠ΅ΠΊ вСтвлСния ΠΈ слияний (`●`, `β—†`, `β”‚`), ссылки Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Gitea Web UI, Π±Π΅ΠΉΠ΄ΠΆΠΈ Π²Π΅Ρ‚ΠΎΠΊ/Ρ‚Π΅Π³ΠΎΠ² ΠΈ ΠΆΠΈΠ²Ρ‹Π΅ статусы сборок Gitea Actions CI (`CI βœ“`, `CI βœ—`, `CI ●`). * **ΠœΠ΅ΠΆΠ²ΠΊΠ»Π°Π΄ΠΎΡ‡Π½Π°Ρ синхронизация**: Π²Ρ‹Π±ΠΎΡ€Ρ‹ Π»ΠΈΠ΄Π΅Ρ€Π° Ρ‡Π΅Ρ€Π΅Π· `navigator.locks` ΠΈ ΠΊΠ°Π½Π°Π» `BroadcastChannel`, ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ сСтСвой ΠΏΠΎΠ»Π»ΠΈΠ½Π³ ΠΏΡ€ΠΈ мноТСствС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Π²ΠΊΠ»Π°Π΄ΠΎΠΊ. * **Π˜Π½ΡΠΏΠ΅ΠΊΡ‚ΠΎΡ€ нСсохранённых ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ**: панСль Π² 1 ΠΊΠ»ΠΈΠΊ с просмотром послСдних ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ Π΄ΠΈΡ„Ρ„Π° Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… строк. --- ### 3. Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ Worktree ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π°Π³Π΅Π½Ρ‚Π° Для бСзопасного выполнСния Π°Π³Π΅Π½Ρ‚ΠΎΠΌ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡: * **ΠΠ΅Ρ€Π°Π·Ρ€ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠ΅ Worktree**: созданиС Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΊΠΎΠΏΠΈΠΉ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ `.worktrees/issue-/` Π±Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ основной Π²Π΅Ρ‚ΠΊΠΈ. * **Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ случайных слияний**: дСструктивныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ `gitea_pr_merge` ΠΈ `gitea_worktree_remove` строго Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ явного ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° `confirm: true`. НСподтвСрТдённыС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ. * **Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ ΠΏΡ€Π°Π²ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· Git Wrapper**: запись ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ (`gitWrapper`, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ `git-deepseek-harness`), сохраняя ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΡƒΡŽ подпись Π°Π³Π΅Π½Ρ‚Π°. --- ### 4. Набор шаблонов Π·Π°Π΄Π°Ρ‡ Gitea Issue Templates Π’ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ поставки Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ шаблонов Π·Π°Π΄Π°Ρ‡ `.gitea/ISSUE_TEMPLATE/`: | Π€Π°ΠΉΠ» шаблона | НазначСниС | Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ стартовыС ΠΌΠ΅Ρ‚ΠΊΠΈ | |:---|:---|:---| | `bug.yaml` | ΠžΡ‚Ρ‡Ρ‘Ρ‚ ΠΎΠ± ошибкС (Bug report) | `type/bug`, `status/ready` | | `feature.yaml` | Запрос Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ | `type/feature`, `status/ready` | | `security.yaml` | ΠžΡ‚Ρ‡Ρ‘Ρ‚ ΠΎΠ± уязвимости бСзопасности | `type/security`, `priority/high`, `scope/security` | | `research.yaml` | АрхитСктурноС исслСдованиС / Spike | `type/research`, `status/ready` | | `tech-debt.yaml` | ВСхничСский Π΄ΠΎΠ»Π³ ΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ | `type/tech-debt`, `status/ready` | | `incident.yaml` | ΠžΡ‚Ρ‡Ρ‘Ρ‚ ΠΎΠ± ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄Π΅ | `type/incident`, `priority/critical` | | `config-change.yaml` | ИзмСнСниС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ инфраструктуры | `type/refactor`, `scope/settings`, `status/ready` | --- ### 5. Gitea Hub ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Worktree Боковая панСль Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ **Gitea Hub** Π½Π° Π±Π°Π·Π΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° `/dsh-gitea/hub`: - **НазначСнныС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ PR**: просмотр Π·Π°Π΄Π°Ρ‡, статусов сборок ΠΈ быстрыС дСйствия (Approve, Merge, Close). - **Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Worktree**: ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΊΠΎΠΏΠΈΠΉ ΠΈ бСзопасная очистка смёрТСнных Π²Π΅Ρ‚ΠΎΠΊ. - **ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Runners**: Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ состояниС доступных runner'ΠΎΠ² Gitea Actions. ### 6. Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Ρ… Π°Π³Π΅Π½Ρ‚ΠΎΠ² ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ - **Π‘Π±ΠΎΡ€ΠΊΠ° мусора Worktree (`gitea_worktree_gc`)**: бСзопасноС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ смёрТСнных Π²Π΅Ρ‚ΠΎΠΊ Ρ‡Π΅Ρ€Π΅Π· `git merge-base --is-ancestor`, Π·Π°Ρ‰ΠΈΡ‚Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ, `main` ΠΈ Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. - **АвтоматичСскоС AI-Ρ€Π΅Π²ΡŒΡŽ (`gitea_ai_review`, `gitea_pr_line_comment`)**: публикация Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π²ΡŒΡŽ с коммСнтариями ΠΏΠΎ строкам Π΄ΠΈΡ„Π°, поиск ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ сСкрСтов ΠΈ опасных ΠΏΡƒΡ‚Π΅ΠΉ, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ (```suggestion) для ΠΎΠ΄Π½ΠΎΠΊΠ»ΠΈΠΊΠΎΠ²ΠΎΠ³ΠΎ примСнСния ΠΏΡ€Π°Π²ΠΎΠΊ прямо Π² интСрфСйсС Gitea. - **ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π² PR (`gitea_issue_to_pr`)**: Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ ΠΈ PR ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ ΠΈΠ· контСкста issue. ### 7. Бинхронизация экосистСмы ΠΈ ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Ρ‹ - **Бинхронизация Task Tracker (`gitea_task_tracker_sync`)**: двусторонний мост ΠΊ ΠΊΠ°Π½Π±Π°Π½-доскС ΠΏΠΎ стандарту `dsh-drives.task-provision.v1`. - **Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ Π² Memory Brain (`gitea_memory_brain_sync`)**: сохранСниС Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ контСкста, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈ Π·Π°Π΄Π°Ρ‡ Π² Memory Brain. - **БСзопасныС ΠΎΡ‚Ρ‡Ρ‘Ρ‚Ρ‹ ΠΎΠ± ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Π°Ρ… (`gitea_incident_report`)**: созданиС ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚-Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΎΠ² с маскированиСм ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ OpenSSH/EC/RSA ΠΈ API-Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². ### 8. АссистСнт Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ события SSE - **АссистСнт Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² (`gitea_release_assistant`)**: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° шага SemVer, многоязычный changelog, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ тСстов ΠΈ готовности ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°. - **ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ события SSE (`/dsh-gitea/sse`)**: доставка событий Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ keepalive, Π°Π²Ρ‚ΠΎΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²ΠΊΠ»Π°Π΄ΠΎΠΊ. ## πŸ“¦ Установка Установка Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ DeepSeek Harness: ```bash dsh plugin --profile web add @goodandready/dsh-gitea ``` ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚Π΅ Web UI DSH ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ с очисткой кэша (`Ctrl+F5` ΠΈΠ»ΠΈ `Cmd+Shift+R`). --- ## βš™οΈ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ **Настройки -> ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ -> Gitea**: ```yaml # config.yaml dsh-gitea: baseUrl: "https://gitea.yourcompany.com" tokenEnv: "GITEA_TOKEN" gitWrapper: "" timeoutMs: 15000 ``` ### Π’Π°Π±Π»ΠΈΡ†Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠšΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° ΠΏΠ»Π°Π³ΠΈΠ½Π° Π² **Настройки -> ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ -> Gitea** ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ всС 17 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² схСмы Π² основныС ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ сСкции: | ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ | Π’ΠΈΠΏ | По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ | Π Π°Π·Π΄Π΅Π» | ОписаниС | |:---|:---|:---|:---|:---| | `baseUrl` | `string` | `""` | ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ | Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ URL вашСго инстанса Gitea ΠΈΠ»ΠΈ Forgejo (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `https://gitea.example.com`) | | `tokenEnv` | `string` | `"GITEA_TOKEN"` | ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ | Имя DSH Credential, содСрТащСго ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ доступа | | `defaultOwner` | `string` | `""` | ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ | ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ | | `defaultRepo` | `string` | `""` | ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ | Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ | | `gitWrapper` | `string` | `""` | Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (Git) | Команда-ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `git-dsh`) | | `dodReminder` | `boolean` | `false` | Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (Git) | НапоминаниС DoD, Ссли инструмСнт ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» git-Ρ„Π°ΠΉΠ»Ρ‹ Π±Π΅Π· ссылки Π½Π° Π·Π°Π΄Π°Ρ‡Ρƒ/PR | | `forceHttpsUrls` | `boolean` | `false` | Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (Git) | ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ ссылок `http://` Π² `https://` Π·Π° HTTPS reverse proxy | | `timeoutMs` | `number` | `30000` | Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (Git) | Π’Π°ΠΉΠΌΠ°ΡƒΡ‚ выполнСния HTTP-запросов (Π² миллисСкундах) | | `webhookSecretEnv` | `string` | `""` | Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (Π’Π΅Π±Ρ…ΡƒΠΊΠΈ) | Имя DSH Credential с сСкрСтом для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ подписи `X-Gitea-Signature` | | `webhookSecret` | `string` | `""` | β€” | *УстарСло*: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `webhookSecretEnv`. ΠžΡΡ‚Π°Π²Π»Π΅Π½ΠΎ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости | | `notifyWebhook` | `string` | `""` | Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (Π’Π΅Π±Ρ…ΡƒΠΊΠΈ) | Π’Π½Π΅ΡˆΠ½ΠΈΠΉ URL Π²Π΅Π±Ρ…ΡƒΠΊΠ° для ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠΉ ΠΎ Π½ΠΎΠ²Ρ‹Ρ… PR ΠΈ ΡƒΠΏΠ°Π²ΡˆΠ΅ΠΌ CI | | `bgSchedulerEnabled` | `boolean` | `false` | Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ) | Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ ΠΈ Ρ‚Ρ€ΠΈΠ°ΠΆΠ° | | `bgSchedulerIntervalMin` | `number` | `60` | Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ) | Π˜Π½Ρ‚Π΅Ρ€Π²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ (Π² ΠΌΠΈΠ½ΡƒΡ‚Π°Ρ…) | | `bgSchedulerOwner` | `string` | `""` | Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ) | Π’Π»Π°Π΄Π΅Π»Π΅Ρ† для Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ `defaultOwner`) | | `bgSchedulerRepo` | `string` | `""` | Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ) | Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ для Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ `defaultRepo`) | | `bgSchedulerWebhook` | `string` | `""` | Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ) | URL Π²Π΅Π±Ρ…ΡƒΠΊΠ° для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ дайдТСстов Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ | | `instances` | `array` | `[]` | Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (Π˜Π½ΡΡ‚Π°Π½ΡΡ‹) | Бписок Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… инстансов (`name`, `baseUrl`, `tokenEnv`) | > [!IMPORTANT] > Никогда Π½Π΅ вставляйтС сырой API-Ρ‚ΠΎΠΊΠ΅Π½ Π² ΠΏΠΎΠ»Π΅ `tokenEnv`. Π’ΠΎΠΊΠ΅Π½ сохраняСтся Π² Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π² DSH Credentials, Π° Π² настройках указываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя ссылки. --- ## πŸ› οΈ ΠΠ°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ, Π²Π΅Π±Ρ…ΡƒΠΊΠΈ ΠΈ ΠΊΡ€ΠΎΡΡΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΎ Π² `v0.4.3`: - **Доставка Π²Π΅Π±Ρ…ΡƒΠΊΠΎΠ²**: `gitea_digest_delivery` ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° push-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ HTTP POST JSON-запросы со стандартными Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ, гарантируя ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ доставку Π² Slack, Discord, Telegram ΠΈΠ»ΠΈ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π²Π΅Π±Ρ…ΡƒΠΊΠΈ. - **ΠšΡ€ΠΎΡΡΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΡƒΡ‚Π΅ΠΉ**: Полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ ΠΊΠ°ΠΊ Π² Linux/macOS (POSIX), Ρ‚Π°ΠΊ ΠΈ Π² Windows с ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ дисковых Π±ΡƒΠΊΠ². - **Вочная Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ° слияний**: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ `gitea_repo_analytics` ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ опрСдСляСт ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹Π΅ PR Π² соотвСтствии со спСцификациСй Gitea REST API (`merged: true`). - **ΠŸΠ°Ρ€ΡΠΈΠ½Π³ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ бСзопасности**: Π’ `gitea_pr_policy` исправлСна ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° списка `requiredChecks` Π² связкС с Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΌΠΈ путями рСпозитория. - **Автономная ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ инструмСнтов**: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π±Π΅Π· привязки ΠΊ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ (`gitea_repo_create_org`, `gitea_repo_bootstrap`, `gitea_digest_delivery`) Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π±Π΅Π· наличия локального git origin. --- ## πŸ§ͺ ВСстированиС ΠΈ вСрификация Запуск ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° ΡŽΠ½ΠΈΡ‚- ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… тСстов: ```bash npm test ``` --- ## πŸ“„ ЛицСнзия MIT Β© [GooDAnDReaDY](https://github.com/GooDAnDReaDY) ## БСрвисы ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ### Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ (`dshGitea`) ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ `dsh-drives.task-provision.v1` для создания ΠΈ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ поиска Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ `externalRef`. ### ΠŸΠΎΡ‚ΠΎΠΊ событий Gitea (`giteaEvents`) ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ сСрвис бСзопасной ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ событий Π²Π΅Π±Ρ…ΡƒΠΊΠΎΠ² для Ρ‚Π΅Π»Π΅ΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ (`@goodandready/dsh-pulse`): - `subscribe(listener)` ΠΈ `on("event", listener)` с Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ отписки. - ΠŸΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ бСзопасныС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ (`id`, `event`, `action`, `at`, `owner`, `repo`, `issue`, `pull`, `ref`). - Никаких Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², сСкрСтов, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², сырых Ρ‚Π΅Π» запросов ΠΈΠ»ΠΈ тСкстов ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π². - Ошибки подписчиков ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈ Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΎΡ‚Π²Π΅Ρ‚ Π²Π΅Π±Ρ…ΡƒΠΊΠ°. ### АвтообновлСниС ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠšΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° настроСк Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ встроСнный Π±Π»ΠΎΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ установки ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ (`/api/dsh-gitea/update`): - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° свСТСй вСрсии Π² npm-рССстрС ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ статуса. - БСзопасный Π²Ρ‹Π·ΠΎΠ² POST: Π·Π°Ρ‰ΠΈΡ‚Π° loopback, совпадСниС origin/host ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ `x-dsh-plugin-update: 1`. - Π‘Π΅Π· ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ°Ρ€Π°Π½Ρ‚ΠΈΠ½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² pnpm. - ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° вСрсий с ΠΏΡ€Π΅Ρ€Π΅Π»ΠΈΠ·Π½Ρ‹ΠΌΠΈ Ρ‚Π΅Π³Π°ΠΌΠΈ. --- ## πŸ›‘οΈ АутСнтификация ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² ΠΈ модСль бСзопасности прСдоставляСт HTTP-эндпоинты для опроса статуса рСпозитория, Π³Ρ€Π°Ρ„Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², управлСния настройками ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Hub. Для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ нСсанкционированного доступа ΠΈΠ· локальной сСти, мСТсайтовой ΠΏΠΎΠ΄Π΄Π΅Π»ΠΊΠΈ запросов (CSRF) ΠΈ Π°Ρ‚Π°ΠΊ DNS-rebinding: - **АутСнтификация Ρ‡Π΅Ρ€Π΅Π· DSH Connection**: ВсС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ HTTP-ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹ (`/dsh-gitea/config`, `/events`, `/git-status`, `/git-graph`, `/sse`, `/release-assistant`, `/hub`) ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ каноничСским сСрвисом DSH Host Connection (`ctx.connection.requestRejection`). Запросы ΠΈΠ· LAN/WAN Π±Π΅Π· Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ сСссии DSH ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΡΡŽΡ‚ΡΡ с ΠΊΠΎΠ΄Π°ΠΌΠΈ 401 Unauthorized ΠΈΠ»ΠΈ 403 Forbidden. - **Fail-Closed изоляция loopback**: Π’ тСстовом ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Π±Π΅Π· сСрвиса Connection Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с локального интСрфСйса loopback (`127.0.0.1`, `::1`). Π£Π΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ. - **Бтрогая Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи**: ΠœΡƒΡ‚Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ дСйствия Π² Hub Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Ρ‘Π½Π½ΠΎΠΉ сСссии ΠΈ соотвСтствия same-origin, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρƒ `baseUrl` ΠΈ ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². - **HMAC-ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²Π΅Π±Ρ…ΡƒΠΊΠΎΠ²**: ВходящиС события Gitea (`/dsh-gitea/webhook`) криптографичСски Π²Π΅Ρ€ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ подписи HMAC-SHA256 Ρ‡Π΅Ρ€Π΅Π· `webhookSecretEnv`.