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