feat: добавить поддержку GitLab (api, clients, tools) и обновить документацию
This commit is contained in:
214
memory-bank/implementation_plan.md
Normal file
214
memory-bank/implementation_plan.md
Normal file
@@ -0,0 +1,214 @@
|
||||
# Implementation Plan: GitLab MCP Tools
|
||||
|
||||
## Overview
|
||||
|
||||
Создать модуль GitLab для MCP сервера с инструментами управления репозиториями, тегов (версий), Merge Requests, Issues и ветками.
|
||||
|
||||
## Types
|
||||
|
||||
### GitLabToolsBase
|
||||
|
||||
Базовый класс для всех инструментов GitLab:
|
||||
```csharp
|
||||
public sealed class GitLabToolsBase(
|
||||
GitLabClientProvider clientProvider,
|
||||
IConfiguration configuration,
|
||||
ToolRegistryService registry,
|
||||
ILogger<GitLabToolsBase>? logger = null)
|
||||
: IToolModule
|
||||
{
|
||||
protected readonly GitLabApiClient _client;
|
||||
protected readonly string _baseUrl;
|
||||
protected readonly int _perPageDefault;
|
||||
|
||||
// Валидация и форматирование ошибок
|
||||
protected bool TryCheckEnabled(string toolName, out string error);
|
||||
protected bool TryGetClient(out GitLabApiClient client, out string error);
|
||||
protected string FormatError(string toolName, string resource, Exception ex);
|
||||
}
|
||||
```
|
||||
|
||||
### GitLabRepositoryTools
|
||||
|
||||
Работа с репозиториями:
|
||||
```csharp
|
||||
public sealed class GitLabRepositoryTools : GitLabToolsBase
|
||||
{
|
||||
// Инструменты:
|
||||
// - ListRepositories: список доступных репозиториев (user)
|
||||
// - GetRepository: получение деталей репозитория
|
||||
// - GetRepositoryLanguages: языки проекта
|
||||
// - GetCommit: получение коммита
|
||||
// - GetCommitHistory: история коммитов
|
||||
// - GetFiles: получение файлов из репозитория
|
||||
// - SearchRepositories: поиск репозиториев
|
||||
}
|
||||
```
|
||||
|
||||
### GitLabVersionTools
|
||||
|
||||
Управление тегами (версиями):
|
||||
```csharp
|
||||
public sealed class GitLabVersionTools : GitLabToolsBase
|
||||
{
|
||||
// Инструменты:
|
||||
// - ListTags: список всех тегов проекта
|
||||
// - CreateTag: создание нового тега
|
||||
// - DeleteTag: удаление тега
|
||||
// - GetTag: получение информации о теге
|
||||
// - GetTagCommit: получение коммита тега
|
||||
// - ListProtectedTags: список защищённых тегов
|
||||
}
|
||||
```
|
||||
|
||||
### GitLabMergeRequestTools
|
||||
|
||||
Работа с Merge Requests и замечаниями:
|
||||
```csharp
|
||||
public sealed class GitLabMergeRequestTools : GitLabToolsBase
|
||||
{
|
||||
// Инструменты:
|
||||
// - ListMergeRequests: список MR в проекте
|
||||
// - GetMergeRequest: получение деталей MR
|
||||
// - CreateMergeRequest: создание MR
|
||||
// - UpdateMergeRequest: обновление MR
|
||||
// - CloseMergeRequest: закрытие MR
|
||||
// - GetMergeRequestComments: чтение замечаний MR
|
||||
// - AddMergeRequestComment: добавление замечания
|
||||
// - UpdateMergeRequestComment: обновление замечания
|
||||
// - DeleteMergeRequestComment: удаление замечания
|
||||
// - GetMergeRequestStatus: статус MR (merged, closed, etc.)
|
||||
// - GetMergeRequestDiff: diff MR
|
||||
// - GetMergeRequestPipeline: пайплайн MR
|
||||
}
|
||||
```
|
||||
|
||||
### GitLabIssueTools
|
||||
|
||||
Работа с Issues:
|
||||
```csharp
|
||||
public sealed class GitLabIssueTools : GitLabToolsBase
|
||||
{
|
||||
// Инструменты:
|
||||
// - ListIssues: список Issues проекта
|
||||
// - GetIssue: получение Issue
|
||||
// - CreateIssue: создание Issue
|
||||
// - UpdateIssue: обновление Issue
|
||||
// - CloseIssue: закрытие Issue
|
||||
// - DeleteIssue: удаление Issue
|
||||
// - GetIssueLabels: метки Issue
|
||||
// - AddIssueLabel: добавление метки
|
||||
// - RemoveIssueLabel: удаление метки
|
||||
// - GetIssueAssignees: assignees Issue
|
||||
// - GetIssueEvents: события Issue
|
||||
}
|
||||
```
|
||||
|
||||
### GitLabBranchTools
|
||||
|
||||
Работа с ветками:
|
||||
```csharp
|
||||
public sealed class GitLabBranchTools : GitLabToolsBase
|
||||
{
|
||||
// Инструменты:
|
||||
// - ListBranches: список веток
|
||||
// - CreateBranch: создание ветки
|
||||
// - DeleteBranch: удаление ветки
|
||||
// - ProtectBranch: защита ветки
|
||||
// - UnprotectBranch: снятие защиты
|
||||
// - GetBranch: информация о ветке
|
||||
// - GetBranchCommit: последний коммит ветки
|
||||
}
|
||||
```
|
||||
|
||||
## Files
|
||||
|
||||
### Новые файлы для создания:
|
||||
|
||||
1. `LazyBear.MCP/Services/GitLab/GitLabToolModule.cs` - регистрация модуля
|
||||
2. `LazyBear.MCP/Services/GitLab/GitLabClientProvider.cs` - provider клиента
|
||||
3. `LazyBear.MCP/Services/GitLab/GitLabApiClientFactory.cs` - factory клиента
|
||||
4. `LazyBear.MCP/Services/GitLab/GitLabRepositoryTools.cs` - работа с репозиториями
|
||||
5. `LazyBear.MCP/Services/GitLab/GitLabVersionTools.cs` - работа с тегами
|
||||
6. `LazyBear.MCP/Services/GitLab/GitLabMergeRequestTools.cs` - работа с MR
|
||||
7. `LazyBear.MCP/Services/GitLab/GitLabIssueTools.cs` - работа с Issues
|
||||
8. `LazyBear.MCP/Services/GitLab/GitLabBranchTools.cs` - работа с ветками
|
||||
9. `LazyBear.MCP/Services/GitLab/Utils/GitLabClientHelper.cs` - вспомогательные методы
|
||||
|
||||
### Модифицируемые файлы:
|
||||
|
||||
1. `LazyBear.MCP/appsettings.json` - добавить секцию GitLab
|
||||
2. `LazyBear.MCP/Program.cs` - регистрация GitLab модуля
|
||||
3. `LazyBear.MCP/TUI/TuiSettings.cs` - добавить настройки GitLab
|
||||
|
||||
## Functions
|
||||
|
||||
### Основные функции:
|
||||
|
||||
1. `GitLabRepositoryTools.ListRepositories()` - список всех проектов
|
||||
2. `GitLabRepositoryTools.GetRepository(string projectId)` - детали проекта
|
||||
3. `GitLabVersionTools.ListTags(string projectId)` - список тегов
|
||||
4. `GitLabVersionTools.CreateTag(string projectId, string tagName, string commitSha)` - создание тега
|
||||
5. `GitLabMergeRequestTools.CreateMergeRequest(string sourceBranch, string targetBranch, string title, string description)` - создание MR
|
||||
6. `GitLabMergeRequestTools.AddMergeRequestComment(string projectId, int mergeRequestId, string comment)` - добавление замечания
|
||||
7. `GitLabIssueTools.ListIssues(string projectId)` - список Issues
|
||||
|
||||
## Classes
|
||||
|
||||
Новые классы в `LazyBear.MCP/Services/GitLab/`:
|
||||
- `GitLabToolsBase` - базовый класс с common-методами
|
||||
- `GitLabClientProvider` - provider для клиента
|
||||
- `GitLabApiClientFactory` - factory для создания клиентов
|
||||
- `GitLabRepositoryTools` - инструменты репозиториев
|
||||
- `GitLabVersionTools` - инструменты тегов
|
||||
- `GitLabMergeRequestTools` - инструменты MR
|
||||
- `GitLabIssueTools` - инструменты Issues
|
||||
- `GitLabBranchTools` - инструменты веток
|
||||
|
||||
## Dependencies
|
||||
|
||||
### NuGet пакеты:
|
||||
|
||||
1. **Octokit.AspNetCore** 7.1.0 (или более поздняя версия) - GitLab REST API client
|
||||
2. **System.Text.Json** - уже есть в .NET SDK
|
||||
|
||||
### Примечание:
|
||||
|
||||
Использовать Octokit для GitLab - это не стандартный подход. Octokit ориентирован на GitHub API.
|
||||
|
||||
**Альтернативный подход:**
|
||||
|
||||
Использовать **GitLabDotnet** или **RestSharp** с официальным GitLab API.
|
||||
|
||||
Рекомендуется использовать **RestSharp** (уже используется в Jira модуле) или официальный **GitLab SDK** (если доступен).
|
||||
|
||||
Пакет: **RestSharp** 111.1.0 (уже есть в проекте через Jira)
|
||||
|
||||
Или использовать библиотеку: **GitLabApi** (от Octokit) - https://github.com/octokit/octokit.net/wiki/Using-the-GitLab-API
|
||||
|
||||
В проекте уже используется RestSharp через Jira модуль. GitLab API использует REST, поэтому RestSharp подходит.
|
||||
|
||||
## Testing
|
||||
|
||||
### Тесты:
|
||||
|
||||
- Валидация входных параметров
|
||||
- Проверка ошибок GitLab API
|
||||
- Тесты с mock-клиентом
|
||||
- Проверка формата ответов
|
||||
|
||||
Примечание: тестовый проект пока не создаём, используем existing tests if available.
|
||||
|
||||
## Implementation Order
|
||||
|
||||
1. Создать структуру папок GitLab
|
||||
2. Реализовать GitLabToolsBase с common-методами
|
||||
3. Реализовать GitLabClientProvider и GitLabApiClientFactory
|
||||
4. Реализовать GitLabRepositoryTools
|
||||
5. Реализовать GitLabVersionTools
|
||||
6. Реализовать GitLabMergeRequestTools (включая MR comments)
|
||||
7. Реализовать GitLabIssueTools
|
||||
8. Реализовать GitLabBranchTools
|
||||
9. Обновить Program.cs для регистрации модуля
|
||||
10. Обновить appsettings.json
|
||||
11. Тестирование и отладка
|
||||
@@ -27,6 +27,29 @@
|
||||
- ✅ Restart Pods
|
||||
- ✅ Описание Deployments/Pods/Services
|
||||
|
||||
### GitLab Integration
|
||||
|
||||
- ✅ Работа с репозиториями
|
||||
- `list_projects` — получить список репозиториев
|
||||
- `get_project` — получить репозиторий по ID
|
||||
- ✅ Управление тегами
|
||||
- `list_versions` — получить список тегов
|
||||
- `create_version` — создать тег
|
||||
- `delete_version` — удалить тег
|
||||
- ✅ Работа с Merge Requests
|
||||
- `list_merge_requests` — получить список MR
|
||||
- `get_merge_request` — получить MR по ID
|
||||
- `get_merge_request_notes` — получить замечания
|
||||
- `add_merge_request_note` — добавить замечание
|
||||
- ✅ Работа с Issues
|
||||
- `list_issues` — получить список Issues
|
||||
- `get_issue` — получить Issue по ID
|
||||
- `create_issue` — создать Issue
|
||||
- ✅ Работа с ветками
|
||||
- `list_branches` — получить список веток
|
||||
- `create_branch` — создать ветку
|
||||
- `delete_branch` — удалить ветку
|
||||
|
||||
### MCP Server
|
||||
|
||||
- ✅ HTTP Transport MCP 1.2.0
|
||||
@@ -52,7 +75,7 @@
|
||||
### Known Issues
|
||||
|
||||
| Проблема | Описание | Приоритет |
|
||||
|----------|---------|----|-|
|
||||
|-----|------|-|
|
||||
| Jira:Url config | Требуется настройка в appsettings.json | Medium |
|
||||
| Kubernetes:KubeconfigPath | Может быть пустым (fallback) | Low |
|
||||
| RazorPages не активен | `Pages/` существует, но не используется | Info |
|
||||
@@ -67,7 +90,7 @@
|
||||
|
||||
### Upcoming Tasks
|
||||
|
||||
1. **Конфигурация**: Настроить Jira/K8s connection в appsettings.json
|
||||
1. **Конфигурация**: Настроить Jira/K8s/GitLab connection в appsettings.json
|
||||
2. **Тестирование**: Написать CLI тесты для инструментов
|
||||
3. **Документация**: Добавить секции в systemPatterns.md при необходимости
|
||||
4. **Monitoring**: Добавить metrics endpoint для Prometheus
|
||||
@@ -93,6 +116,11 @@
|
||||
- `Confluence:Token` — API token для авторизации
|
||||
- `Confluence:SpaceKey` — для некоторых операций требуется space
|
||||
|
||||
### GitLab Integration
|
||||
|
||||
- `GitLab:Url` — обязателен в appsettings.json
|
||||
- `GitLab:Token` — PAT token для авторизации
|
||||
|
||||
### TUI
|
||||
|
||||
- TUI запускается первым и владеет консолью
|
||||
@@ -108,9 +136,10 @@
|
||||
## 📈 Метрики
|
||||
|
||||
| Метрика | Значение | Цель |
|
||||
|---------|---------|-----|-|
|
||||
|-----|------|-|
|
||||
| Jira задачи создано | TBD | 100+/день |
|
||||
| K8s операции выполнено | TBD | 50+/день |
|
||||
| GitLab операции выполнено | TBD | 50+/день |
|
||||
| Incidents resolved | TBD | Минимизировать |
|
||||
| User satisfaction | TBD | >4.5/5 |
|
||||
|
||||
@@ -118,7 +147,7 @@
|
||||
|
||||
### Версия 1.0.0 (текущая)
|
||||
|
||||
- Полный стек инструментов Jira/Confluence/K8s
|
||||
- Полный стек инструментов Jira/Confluence/K8s/GitLab
|
||||
- TUI мониторинг
|
||||
- HTTP MCP transport
|
||||
- Локализация RU/EN
|
||||
@@ -139,12 +168,12 @@
|
||||
|
||||
**Состояние**: Development
|
||||
|
||||
**Последний commit**: `d12e9873f0964f2c275a634cda80b161c83f9bbb`
|
||||
**Последний commit**: `e96bab114ea1a58f3ea7bd5ab40d4645d456cd8f`
|
||||
|
||||
**Что работает**: Все основные функциональности готовы
|
||||
|
||||
**Что делать дальше**:
|
||||
1. Настроить Jira/K8s connection (appsettings.json)
|
||||
1. Настроить Jira/K8s/GitLab connection (appsettings.json)
|
||||
2. Тестировать через MCP Inspector
|
||||
3. Обновлять Memory Bank при значимых изменениях
|
||||
|
||||
|
||||
Reference in New Issue
Block a user