# 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 │ │ │ └──────────┘ └───────────────┘ └────────────────────┘ │ └─────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────┐ │ External API Layer │ │ ┌──────────┐ ┌───────────────┐ ┌────────────────────┐ │ │ │ Jira API │ │Confluence API │ │ K8s API │ │ │ └──────────┘ └───────────────┘ └────────────────────┘ │ └─────────────────────────────────────────────────────────┘ ``` ## Ключевые архитектурные компоненты ### 1. HTTP Transport Layer **File**: `LazyBear.MCP/Program.cs` ```csharp var host = Host.CreateDefaultBuilder(args) .ConfigureServices(services => { // MCP-провайдеры services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); // Модули инструментов services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); // HTTP MCP endpoint в фоне services.AddHostedService(); }) .Build(); ``` **Ответственность**: Регистрация HTTP MCP transport и инструментов ### 2. TUI Layer (RazorConsole) **File**: `LazyBear.MCP/Program.cs` (RazorConsole конфиг) ```csharp .host.UseRazorConsole(hostBuilder => { hostBuilder.ConfigureServices(services => { services.AddSingleton(); services.AddSingleton(); // ... TUI сервисы }); }); ``` **Ответственность**: Консольный интерфейс мониторинга K8s ### 3. Tool Registry Pattern **File**: `LazyBear.MCP/Services/ToolRegistryService.cs` (предположительно) ```csharp public class ToolRegistryService { public void RegisterModule(IToolModule module) { // Регистрация модуля инструментов // Модуль появляется в TUI и MCP tools } } ``` **Ответственность**: Централизованная регистрация инструментов **Register в Program.cs**: ```csharp var registry = host.Services.GetRequiredService(); foreach (var module in host.Services.GetServices()) { 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` ```csharp 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 ```csharp 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 ```csharp public interface IToolModule { string Name { get; } Task ExecuteAsync(IToolContext context, string toolName, object? arguments); } ``` **Ответственность**: Определение одного модуля инструментов (Jira/Confluence/K8s) ### IToolContext Контекст выполнения инструмента: - MCP connection info - Tool registry - DI services - Logging provider ### K8sClientFactory ```csharp 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 ``` **Конфиг**: ```json { "Logging": { "LogLevel": { "Default": "Information", "ModelContextProtocol": "Debug" } } } ``` --- *Файл описывает систему архитектуры, ключевые компоненты и потоки данных. Обновлять при введении новых архитектурных решений.*