Files
LazyBearWorks/memory-bank/systemPatterns.md

10 KiB
Raw Permalink Blame History

System Patterns — Архитектура и паттерны

🏗️ Система архитектуры

┌─────────────────────────────────────────────────────────┐
│              HTTP Transport Layer                        │
│         ModelContextProtocol 1.2.0 HTTP                 │
└─────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────┐
│              Application Layer (TUI + MCP)               │
│  ┌───────────────┐  ┌───────────────┐  ┌──────────────┐│
│  │   RazorConsole │  │   McpWeb      │  │  ToolRegistry││
│  │     App.razor  │  │    Hosted     │  │      Service ││
│  └───────────────┘  └───────────────┘  └──────────────┘│
└─────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────┐
│              Services Layer (IToolModule)                │
│  ┌──────────┐ ┌───────────────┐ ┌────────────────────┐ ┌─────┐│
│  │JiraTools │ │ConfluenceTools│ │KubernetesTools     │ │Qdrant││
│  └──────────┘ └───────────────┘ └────────────────────┘ └─────┘│
│  └────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────┐
│              External API Layer                          │
│  ┌──────────┐ ┌───────────────┐ ┌────────────────────┐ ┌────┐│
│  │ Jira API │ │Confluence API │ │ K8s API            │ │Qdr│  │
│  └──────────┘ └───────────────┘ └────────────────────┘ └───┘  │
└─────────────────────────────────────────────────────────┘

Ключевые архитектурные компоненты

1. HTTP Transport Layer

File: LazyBear.MCP/Program.cs

var host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        // MCP-провайдеры
        services.AddSingleton<K8sClientProvider>();
        services.AddSingleton<JiraClientProvider>();
        services.AddSingleton<ConfluenceClientProvider>();
        
        // Модули инструментов
        services.AddSingleton<IToolModule, JiraToolModule>();
        services.AddSingleton<IToolModule, KubernetesToolModule>();
        services.AddSingleton<IToolModule, ConfluenceToolModule>();
        
        // HTTP MCP endpoint в фоне
        services.AddHostedService<McpWebHostedService>();
    })
    .Build();

Ответственность: Регистрация HTTP MCP transport и инструментов

2. TUI Layer (RazorConsole)

File: LazyBear.MCP/Program.cs (RazorConsole конфиг)

.host.UseRazorConsole<App>(hostBuilder =>
{
    hostBuilder.ConfigureServices(services =>
    {
        services.AddSingleton<TUI.Components.GlobalKeyboardService>();
        services.AddSingleton<LocalizationService>();
        // ... TUI сервисы
    });
});

Ответственность: Консольный интерфейс мониторинга K8s

3. Tool Registry Pattern

File: LazyBear.MCP/Services/ToolRegistryService.cs (предположительно)

public class ToolRegistryService
{
    public void RegisterModule(IToolModule module)
    {
        // Регистрация модуля инструментов
        // Модуль появляется в TUI и MCP tools
    }
}

Ответственность: Централизованная регистрация инструментов

Register в Program.cs:

var registry = host.Services.GetRequiredService<ToolRegistryService>();
foreach (var module in host.Services.GetServices<IToolModule>())
{
    registry.RegisterModule(module);
}

4. Client Provider Pattern

Files:

  • LazyBear.MCP/Services/Kubernetes/K8sClientProvider.cs
  • LazyBear.MCP/Services/Jira/JiraClientProvider.cs
  • LazyBear.MCP/Services/Confluence/ConfluenceClientProvider.cs
public class K8sClientProvider
{
    private readonly IConfiguration _config;
    
    public KubernetesClientFactory GetClientFactory()
    {
        // Fallback: explicit kubeconfig → default → in-cluster
        var kubeconfigPath = _config["Kubernetes:KubeconfigPath"]
            ?? Environment.GetEnvironmentVariable("KUBECONFIG")
            ?? string.Empty;
        
        return new KubernetesClientFactory(kubeconfigPath);
    }
}

Ответственность: Создание клиентов внешних API с fallback стратегией

Паттерны взаимодействия

Pattern 1: Initialize Flow

Клиент MCP
    ↓ [RPC: initialize]
MCP Transport
    ↓
Application (ToolRegistry)
    ↓
Tool Module (Jira/K8s/Confluence)
    ↓
External API (Jira API / K8s API)
    ↓
Ответ через MCP transport

Pattern 2: Tools Flow

Клиент MCP
    ↓ [RPC: tool/name]
ToolRegistry.FindTool()
    ↓
ToolModule.Execute()
    ↓
External API
    ↓
Результат → MCP response

Pattern 3: Health Check Flow

HTTP /health
    ↓
McpWebHostedService
    ↓
Лiveness probe статус
    ↓
JSON response

DI Container Setup

services.AddSingleton<...>(...)
    
HostedService (McpWeb)
    
RazorConsole (TUI)
    
RunAsync()

Примечание: TUI запускается первым и владеет консолью, HTTP host работает параллельно в фоне.

Критические пути реализации

Путь 1: Создание Jira задачи

jiraTools/createIssue(params)
    ↓
JiraToolModule.Execute()
    ↓
JiraClientProvider.GetClient()
    ↓
Jira API REST
    ↓
Ответ с issue key

Путь 2: Создание K8s Deployment

k8sDeploymentTools/createDeployment(params)
    ↓
KubernetesToolModule.Execute()
    ↓
K8sClientProvider.GetClientFactory().CreateClient()
    ↓
K8s API V1/Deployments
    ↓
Ответ с deployment name

Путь 3: Мониторинг через TUI

RazorConsole Render()
    ↓
GetDeployments() → GetPods() → GetEvents()
    ↓
App.razor (RazorConsole)
    ↓
Console.Output

Компонентные контракты

IToolModule

public interface IToolModule
{
    string Name { get; }
    Task<object> ExecuteAsync(IToolContext context, string toolName, object? arguments);
}

Ответственность: Определение одного модуля инструментов (Jira/Confluence/K8s)

IToolContext

Контекст выполнения инструмента:

  • MCP connection info
  • Tool registry
  • DI services
  • Logging provider

K8sClientFactory

public class KubernetesClientFactory
{
    public KubernetesClient CreateClient(string? kubeconfigPath);
}

Fallback порядок:

  1. Explicit kubeconfig path
  2. Environment variable KUBECONFIG
  3. In-cluster config (если внутри кластера)

Logging Architecture

InMemoryLoggerProvider
    ↓
InMemoryLogSink
    ↓
Console.WriteLine

Конфиг:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "ModelContextProtocol": "Debug"
    }
  }
}

Qdrant Client Provider Pattern

File: LazyBear.MCP/Services/Qdrant/QdrantClientProvider.cs

public class QdrantClientProvider
{
    private readonly IConfiguration _config;
    
    public QdrantClient GetClient()
    {
        // Конфиг из appsettings.json
        var url = _config["Qdrant:Url"];
        var apiKey = _config["Qdrant:ApiKey"] ?? string.Empty;
        
        return new QdrantClient(url, apiKey);
    }
}

Fallback порядок:

  1. Explicit URL из конфига
  2. Environment variable QDRANT_URL
  3. Localhost default

Ответственность: Создание клиентов Qdrant с поддержкой API ключа (опционально)


Файл описывает систему архитектуры, ключевые компоненты и потоки данных. Обновлять при введении новых архитектурных решений.