Files
LazyBearWorks/LazyBear.MCP/Program.cs
Shahovalov MIkhail 01565b32d9 feat: добавить локализацию TUI (en/ru) с переключением клавишей L
- Добавлены TuiResources (sealed record), Locale, LocalizationService
- Все строки интерфейса вынесены из .razor-файлов в TuiResources
- App.razor: клавиша L циклически переключает локаль, заголовок показывает [EN]/[RU]
- Дочерние компоненты получают Loc как параметр (stateless)
- Создан AGENT.tui.md с правилами работы с TUI для агентов
- Обновлены AGENTS.md и CLAUDE.md со ссылками на AGENT.tui.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 23:53:59 +03:00

93 lines
3.5 KiB
C#

using LazyBear.MCP.Services.Confluence;
using LazyBear.MCP.Services.Jira;
using LazyBear.MCP.Services.Kubernetes;
using LazyBear.MCP.Services.Logging;
using LazyBear.MCP.Services.Mcp;
using LazyBear.MCP.Services.ToolRegistry;
using LazyBear.MCP.TUI;
using LazyBear.MCP.TUI.Components;
using LazyBear.MCP.TUI.Localization;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using RazorConsole.Core;
// ── Общий логгер и один DI-контейнер для TUI + MCP ──────────────────────────
var logSink = new InMemoryLogSink();
var host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddSingleton(logSink);
services.AddSingleton<ToolRegistryService>();
// MCP-провайдеры
services.AddSingleton<K8sClientProvider>();
services.AddSingleton<JiraClientProvider>();
services.AddSingleton<ConfluenceClientProvider>();
// Модули инструментов (добавь новый IToolModule — он появится в TUI)
services.AddSingleton<IToolModule, JiraToolModule>();
services.AddSingleton<IToolModule, KubernetesToolModule>();
services.AddSingleton<IToolModule, ConfluenceToolModule>();
// HTTP MCP endpoint запускаем в фоне, чтобы TUI оставался владельцем консоли
services.AddHostedService<McpWebHostedService>();
// Глобальный читатель клавиш — единственный источник клавишных событий для TUI
services.AddSingleton<GlobalKeyboardService>();
services.AddHostedService(sp => sp.GetRequiredService<GlobalKeyboardService>());
// Локализация TUI (en/ru, переключение клавишей L)
services.AddSingleton<LocalizationService>();
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddProvider(new InMemoryLoggerProvider(logSink));
})
.UseRazorConsole<App>(hostBuilder =>
{
hostBuilder.ConfigureServices(services =>
{
services.Configure<ConsoleAppOptions>(options =>
{
options.AutoClearConsole = true;
options.EnableTerminalResizing = true;
options.AfterRenderAsync = (_, _, _) =>
{
try
{
Console.CursorVisible = false;
}
catch
{
// Ignore terminals that do not support CursorVisible.
}
try
{
Console.Write("\u001b[?25l");
Console.Out.Flush();
}
catch
{
// Ignore terminals that do not support ANSI cursor control.
}
return Task.CompletedTask;
};
});
});
})
.Build();
// ── Регистрируем модули один раз до старта TUI и web host ───────────────────
var registry = host.Services.GetRequiredService<ToolRegistryService>();
foreach (var module in host.Services.GetServices<IToolModule>())
{
registry.RegisterModule(module);
}
await host.RunAsync();