214 lines
8.8 KiB
Markdown
214 lines
8.8 KiB
Markdown
# 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. Тестирование и отладка |