/** * Ken's model selection — pure decision logic. * * Ken (chat mentor + autopilot reviewer) historically always adopted GG * Coder's model. Now each project can pin Ken to his OWN model: * * - No override set → Ken follows GG Coder's model (including live switches). * - Override set → Ken uses it; GG Coder model switches no longer touch him. * * The sidecar persists the override per project (gg-app.json `kenModels`) and * wires the live sessions; this module owns validation + resolution so both * are unit-testable without booting the sidecar. */ import type { Provider } from "@kenkaiiii/gg-ai"; /** A pinned Ken model choice: provider + model id. */ export interface KenModelPref { provider: Provider; model: string; } /** * Validate a persisted (or requested) override before applying it. A stale * entry — model gone from the registry, or its provider no longer connected — * silently resolves to null so Ken falls back to following GG Coder instead * of erroring on every turn. */ export declare function validateKenModelPref(pref: KenModelPref | null | undefined, opts: { modelExists: (id: string) => boolean; providerConnected: (p: Provider) => boolean; }): KenModelPref | null; /** What the footer needs to render `Ken `: the model Ken will actually * use next turn, plus whether that's a pin or just following GG Coder. */ export interface EffectiveKenModel { kenProvider: Provider; kenModel: string; /** True when a user-set override is active (not following GG Coder). */ kenModelOverride: boolean; } /** * Resolve the model Ken uses right now: the override when set, otherwise the * build session's current model. */ export declare function effectiveKenModel(override: KenModelPref | null, build: { provider: Provider; model: string; }): EffectiveKenModel; //# sourceMappingURL=ken-model.d.ts.map