/** * Model selection for the interactive mode (/model, /models, cycle keys). * * Owns the single-model picker, the scoped-models (enable set) picker, model * cycling, exact-match lookup for slash-command arguments, the footer's * available-provider count, and the Anthropic subscription-auth warning. * Extracted from interactive-mode.ts behind a narrow ModelControllerDeps * interface. */ import type { Model } from "@kolisachint/hoocode-ai"; import type { Component, TUI } from "@kolisachint/hoocode-tui"; import type { AgentSession } from "../../core/agent-session.js"; import type { AppKeybinding } from "../../core/keybindings.js"; /** The slice of the interactive mode the model flows need. */ export interface ModelControllerDeps { ui: TUI; /** The active session (read at call time; the session can be swapped). */ get session(): AgentSession; showSelector(create: (done: () => void) => { component: Component; focus: Component; }): void; showStatus(message: string): void; /** A glimpse on the band above the prompt; gone in a few seconds. */ notify(message: string, note?: string): void; /** Report a dial step, naming its reverse key the first time. */ showDialStep(backward: AppKeybinding, message: string): void; showError(errorMessage: string): void; showWarning(warningMessage: string): void; /** A filled notice, for warnings that cost money if ignored. */ showNotice(title: string, body: string[]): void; updateEditorBorderColor(): void; invalidateFooter(): void; setAvailableProviderCount(count: number): void; } export declare class ModelController { private readonly deps; private anthropicSubscriptionWarningShown; constructor(deps: ModelControllerDeps); private get session(); findExactModelMatch(searchTerm: string): Promise | undefined>; private getModelCandidates; /** Update the footer's available provider count from current model candidates */ updateAvailableProviderCount(): Promise; private usesAnthropicSubscriptionAuth; /** * Resolving the auth type can hit the keychain, so every caller fires this * without awaiting it; the once-per-session latch is what keeps the notice * from repeating, not the call site. */ maybeWarnAboutAnthropicSubscriptionAuth(model?: Model | undefined): Promise; cycleModel(direction: "forward" | "backward"): Promise; showModelSelector(initialSearchInput?: string): void; showModelsSelector(): Promise; } //# sourceMappingURL=model-controller.d.ts.map