- Добавить GlobalKeyboardService — выделенный поток с блокирующим Console.ReadKey, единственный источник клавишных событий для TUI - Убрать FocusManager из App.razor: перехватывал Tab до компонентов - Удалить @onkeydown с <Select>: RazorConsole не пробрасывает Tab/стрелки через этот механизм - Использовать FocusedValue вместо Value в Select для корректной подсветки - Обновить CLAUDE.md и AGENTS.md: архитектура TUI, RazorConsole gotchas - Добавить docs/tui_log.md: разбор проблемы и справочник по RazorConsole Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
22 lines
850 B
Plaintext
22 lines
850 B
Plaintext
@using LazyBear.MCP.Services.ToolRegistry
|
|
@inject ToolRegistryService Registry
|
|
|
|
@foreach (var (tool, idx) in Module.ToolNames.Select((t, i) => (t, i)))
|
|
{
|
|
var toolEnabled = Registry.IsToolEnabled(Module.ModuleName, tool);
|
|
var toolName = tool;
|
|
var moduleName = Module.ModuleName;
|
|
var fo = StartFocusIdx + idx;
|
|
|
|
<TextButton Content="@(toolEnabled ? $"✓ {toolName}" : $"✗ {toolName}")"
|
|
OnClick="@(() => Registry.ToggleTool(moduleName, toolName))"
|
|
BackgroundColor="@(toolEnabled ? Spectre.Console.Color.DarkGreen : Spectre.Console.Color.Grey11)"
|
|
FocusedColor="@Spectre.Console.Color.Yellow"
|
|
FocusOrder="@fo" />
|
|
}
|
|
|
|
@code {
|
|
[Parameter, EditorRequired] public IToolModule Module { get; set; } = null!;
|
|
[Parameter] public int StartFocusIdx { get; set; } = 100;
|
|
}
|