Files
LazyBearWorks/memory-bank/implementation_plan.md

214 lines
8.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. Тестирование и отладка