/** * [WHO]: Provides ModelSelectorComponent — model picker UI with scope/filter/add-OpenRouter affordances * [FROM]: Depends on @catui/ai, @catui/tui, model-registry types, theme, * DynamicBorder, keybinding hints * [TO]: Consumed by modes/interactive/interactive-mode.ts and components/index.ts; emits selected * models only, while provider configuration is owned by the caller * [HERE]: modes/interactive/components/model-selector.ts — presentation component for model selection */ import type { Model } from "@catui/ai/types"; import { Container, type Focusable, Input, type TUI } from "@catui/tui"; import type { ModelRegistry } from "../../../core/model-registry.js"; interface ScopedModelItem { model: Model; thinkingLevel: string; } export declare class ModelSelectorComponent extends Container implements Focusable { private searchInput; private _focused; private listContainer; private allModels; private scopedModelItems; private activeModels; private filteredModels; private selectedIndex; private currentModel?; private modelRegistry; private onSelectCallback; private onCancelCallback; private errorMessage?; private tui; private scopedModels; private scope; private scopeText?; private scopeHintText?; private filterByProvider?; /** When set, Ctrl+N runs this (parent closes selector and prompts for OpenRouter model id). */ private onAddOpenRouterModel?; /** When set, Ctrl+K runs this (parent closes selector and prompts for API key). */ private onConfigureApiKey?; get focused(): boolean; set focused(value: boolean); constructor(tui: TUI, currentModel: Model | undefined, modelRegistry: ModelRegistry, scopedModels: ReadonlyArray, onSelect: (model: Model) => void, onCancel: () => void, initialSearchInput?: string, filterByProvider?: string, onAddOpenRouterModel?: () => void, onConfigureApiKey?: () => void); private loadModels; private sortModels; private getScopeText; private getScopeHintText; private setScope; private filterModels; private updateList; handleInput(keyData: string): void; /** * Trigger remote model discovery and reload the model list. * Shows a brief status message while refreshing. */ private refreshDiscovery; private handleSelect; getSearchInput(): Input; } export {};