/** * `models-roles` setup wizard section (T11726 · M3). * * Sits immediately after the `llm` section in the canonical order. Where `llm` * lands a credential in the pool, this section binds WHAT to use: * * 1. **default model** — pick the global default model (`cleo llm use` * equivalent → `llm.default.model`), sourcing choices from the live * models.dev catalog for the default provider. * 2. **per-role profiles** — optionally pin each role in the canonical * {@link WHOAMI_ROLE_IDS} set to a provider/model (`cleo llm profile` * equivalent → `llm.roles.`). * * ## Non-interactive contract (AC3) * * Driveable entirely from {@link WizardOptions}: * - `options.defaultModel` → write the global default model. * - `options.roleBindings[role]` → write `llm.roles.` for each entry. * Missing inputs short-circuit cleanly with `changed: false` (never a throw, * never a half-written binding). * * ## Idempotency (AC4) * * `isConfigured()` returns `true` when a default model OR any role binding is * already present in the global config, so the wizard skips the section unless * `--reset` is passed. * * @module setup/sections/models-roles * @task T11726 * @epic T11671 (E6-ONBOARDING-FRONT-DOOR) */ import type { LocalModelFitEnvelope } from '../../llm/local-model-fit.js'; import type { WizardIO, WizardSectionRunner } from '../wizard.js'; /** * Build the `models-roles` section runner (T11726). * * @returns A {@link WizardSectionRunner} for the models/roles section. * @task T11726 */ export declare function createModelsRolesSection(): WizardSectionRunner; /** * Injectable dependency for the Ollama model picker — lets tests stub out * `rankLocalModelFit` without reaching into the real OS/network layer. * * @internal */ export type LocalModelFitRanker = () => Promise; /** * Interactive Ollama model picker driven by fit-gated recommendations (T11983). * * Behaviour: * - Calls `rankLocalModelFit` to detect hardware + Ollama state. * - Below the 4 GB floor → informs the user (cloud-only guidance) and returns * `null` (caller skips the binding). * - Above the floor with recommendations → presents a ranked pick list of * 2–3 candidates (never auto-selects, never auto-pulls — RECOMMEND-NEVER-KILL). * - Already-pulled models are surfaced first with a `[pulled]` tag. * - Free-text fallback offered as the last option so the user can type any tag. * - Returns the chosen model tag, or `null` if the user skipped. * * The ranker is injectable so tests can supply a stub envelope without * hitting the OS or network. * * @param io - Wizard I/O surface. * @param ranker - Override the fit ranker for tests (defaults to the real one). * @returns The chosen Ollama model tag, or `null` when the user skipped / below floor. * * @task T11983 */ export declare function _pickOllamaModelInteractive(io: WizardIO, ranker?: LocalModelFitRanker): Promise; //# sourceMappingURL=models-roles.d.ts.map