export interface KoneckConfig { provider?: string; model?: string; baseURL?: string; requireApproval?: boolean; /** Run future top-level CLI tasks in an isolated Git worktree. */ useWorktree?: boolean; maxTurns?: number; effort?: string; personality?: string; budget?: number; maxWidth?: number; altScreen?: boolean; /** Whether the working animation runs. Off leaves a still screen; see /animation. */ animate?: boolean; /** Install a newer version in the background, without being asked. On unless set false. */ autoUpdate?: boolean; /** Clear the screen when KONECK opens. `'screen'` keeps the scrollback. On unless false. */ clearOnStart?: boolean | 'screen'; /** Continue an unfinished plan when a session is resumed. On unless set false. */ resumeContinues?: boolean; autoCopy?: boolean; /** Whether the live changes panel is shown beside the interactive conversation. */ diffPanel?: boolean; contextTokens?: number; turnTimeout?: number; agentConcurrency?: number; /** * Endpoints by provider name. * * An endpoint belongs to one provider, so a single `baseURL` could only ever be right for one * of them: setting a remote Ollama address broke OmniRoute, and naming a provider again threw * the Ollama address away. `baseURL` is still read for configs written before this existed. */ endpoints?: Record; /** * Models by provider name. * * qwen3-coder:30b means nothing to Anthropic and claude-sonnet-4.5 means nothing to Ollama, so * one shared `model` could not be right for two providers. `model` is still read for configs * written before this existed. */ models?: Record; /** Send every tool regardless of whether the window can hold their descriptions. */ leanTools?: boolean; /** How long the browser waits for a page: 'quick', 'balanced' or 'thorough'. */ browserWait?: string; browserWindow?: string; /** Let the wheel scroll the transcript, at the cost of selecting text with the mouse. */ mouse?: boolean; /** * What to do when the model in use stops being usable — credit gone, upstream failing, rate * limited. A record rather than a flag, because every part of it is a separate decision and none * of them should be guessed: see FailoverPolicy. */ failover?: Record; /** * Whether this machine sends an anonymous diagnostic report when a run ends. * * Off unless the person turns it on, and it never carries anything of the work — the same file * `/report` writes, which contains no prompt, no reply, no path and no credential. It exists so * whoever maintains KONECK can see crash rates and performance across machines without ever * seeing what anyone is building. Reading somebody's files to find that out is a different thing * entirely, and not one this does. */ telemetry?: boolean; /** Where an enabled report is sent. No default: nothing is sent until both this and telemetry are set. */ telemetryUrl?: string; } /** * Every key `/config ` will accept. * * Exported so the settings pane can be held to it: nine of these were once settable here and * absent from the pane, including the one that switches the working animation off. */ export declare const ALLOWED_KEYS: (keyof KoneckConfig)[]; export declare function loadKoneckConfig(home?: string): Promise; export declare function saveKoneckConfig(cfg: KoneckConfig, home?: string): Promise; export declare function setConfigKey(key: string, value: string): Promise<{ ok: boolean; error?: string; }>; export declare function unsetConfigKey(key: string): Promise; export declare function configKeyDescriptions(): Record; /** * The config file's path, for saying where a setting went. * * Kept as a constant export because that is what it is used for — printing a path in a * confirmation — and a message about where something was saved is always about the real home. * Anything that reads or writes takes the state home instead. */ export declare const CONFIG_FILE: string; /** * How each setting is edited. * * `/config` could only print, so changing anything meant retyping the whole command with a value * remembered from the listing. An editor needs to know more than the key's name: whether it * toggles, cycles through a fixed set, or takes free text — and whether clearing it is meaningful. */ export type ConfigKind = { kind: 'boolean'; } | { kind: 'choice'; choices: readonly string[]; } | { kind: 'number'; min?: number; max?: number; } | { kind: 'text'; }; export interface ConfigField { key: keyof KoneckConfig; label: string; description: string; type: ConfigKind; /** Whether leaving it unset is a valid state, so the editor can offer to clear it. */ clearable: boolean; } export declare const CONFIG_SCHEMA: readonly ConfigField[]; /** The field for a key, or undefined if it is not editable. */ export declare function configField(key: string): ConfigField | undefined; /** * The next value when a setting is stepped. * * Booleans flip and choices advance, wrapping at the end. A clearable choice includes "unset" in * the cycle, so a value can be removed with the same key that set it rather than needing a * separate gesture nobody discovers. */ export declare function stepValue(field: ConfigField, current: unknown, direction: 1 | -1): unknown; /** How a value reads in the editor. Unset is named rather than shown as an empty gap. */ export declare function displayValue(value: unknown): string; /** * Which settings rows to draw, when there are more of them than the terminal has room for. * * The pane listed all seventeen unconditionally. With the tabs, the heading, the footer and the * border that is past twenty-four rows before the composer is reached, so on an ordinary * terminal the top simply scrolled away and what was left looked like a four-row panel with its * lid cut off — reported as "/config is bad, just messy and minimal". It was neither minimal nor * messy by design; it was a fragment. * * A window around the selected row, with the selection kept inside it, is what makes a long list * usable in a short space. Height matters for a second reason here: this pane is drawn in the * repainting region, and a region as tall as the window is what makes Ink wipe the whole terminal * on every render. */ export declare function settingsWindow(total: number, selected: number, capacity: number): { start: number; end: number; }; //# sourceMappingURL=config-store.d.ts.map