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. Тестирование и отладка
|
||||
Reference in New Issue
Block a user