import type { Provider, ThinkingLevel } from "@kenkaiiii/gg-ai"; import type { KenModelPref } from "../core/ken-model.js"; export declare const ALL_PROVIDERS: Provider[]; /** Per-project model + thinking preferences. Persisted so each window (one * project cwd) restores its OWN model across app restarts — instead of every * window reading the same single global slot that the last writer clobbered. */ export interface ProjectModelPrefs { provider: Provider; model: string; thinkingEnabled?: boolean; thinkingLevel?: ThinkingLevel; } export interface AppSettings { /** Folder new projects are created inside. Defaults to ~/gg-projects. */ projectsRoot: string; /** Model + thinking prefs keyed by normalized project cwd. A window restores * its own entry on boot; absent → global settings.json → provider default. */ projectModels?: Record; /** Autopilot (auto-review) on/off keyed by normalized project cwd. Per-window * (one window = one cwd); absent/false → off. Restored on boot. */ autopilot?: Record; /** Ken's model override keyed by normalized project cwd. Absent → Ken follows * GG Coder's model (the historical behavior). Set → Ken (chat + autopilot) * uses this model regardless of GG Coder's. */ kenModels?: Record; /** Extra folders scanned for projects alongside `projectsRoot`. */ projectRoots?: string[]; /** Project paths dismissed from the picker, as normalized cwds. */ hiddenProjects?: string[]; } export declare function stringArray(value: unknown): string[] | undefined; export declare function appSettingsFile(): string; export declare function defaultProjectsRoot(): string; /** Normalize a project cwd to a stable settings key so trailing slashes / * relative segments collapse — the same project always maps to one entry. */ export declare function projectModelKey(cwd: string): string; export declare function loadAppSettings(): Promise; export declare function saveAppSettings(settings: AppSettings): Promise; /** * Read-modify-write gg-app.json under the shared file lock, so two windows * saving at once (or a local-endpoint save racing a model save) can't lose * each other's change. Every settings write in the sidecar goes through here. */ export declare function updateAppSettings(mutate: (settings: AppSettings) => T | Promise): Promise; /** Read this project's persisted model/thinking prefs, if any. */ export declare function loadProjectModelPrefs(cwd: string): Promise; /** Persist this project's model/thinking prefs via read-modify-write so the rest * of the settings file (projectsRoot, other projects' entries) is preserved. */ export declare function saveProjectModelPrefs(cwd: string, prefs: ProjectModelPrefs): Promise; /** Read this project's persisted Ken model override, if any. */ export declare function loadKenModelPref(cwd: string): Promise; /** Persist (or with null, clear) this project's Ken model override via * read-modify-write so the rest of the settings file is preserved. */ export declare function saveKenModelPref(cwd: string, pref: KenModelPref | null): Promise; /** Read this project's persisted autopilot flag (default off). */ export declare function loadAutopilot(cwd: string): Promise; /** Persist this project's autopilot flag via read-modify-write so the rest of * the settings file (projectsRoot, model map, other projects) is preserved. */ export declare function saveAutopilot(cwd: string, enabled: boolean): Promise; /** * Persist the active model selection to ~/.gg/settings.json so it survives app * restarts. Mirrors the CLI's handleModelSelect persistence (App.tsx). */ export declare function persistModelSelection(settingsFile: string, provider: Provider, model: string): Promise; /** * Persist the thinking level to ~/.gg/settings.json so it survives app restarts. * Mirrors the CLI's handleToggleThinking persistence (App.tsx). */ export declare function persistThinkingLevel(settingsFile: string, level: ThinkingLevel | undefined): Promise;