import type { SnapshotStore } from '@deepseek-ai/dsh-client-store'; import type { SnapshotSelectorHook } from '@deepseek-ai/dsh-client-ui-slots'; import type { EarsSettings, WhisperAccelerationId } from '../config.js'; import { type FieldName } from './settings-fields.js'; import { type CloudAsrCredentialField } from '../asr/providers.js'; import type { AboutInfo, AsrBackendInfo, UpdateCheckResult } from '../remote-contract.js'; import type { EarsRemote } from '../remote.js'; import { type CloudModelsView } from './cloud-provider-controller.js'; import { type ReasoningEffortsState, type RouteState } from './polish-state-controller.js'; import { type WhisperModelView } from './whisper-model-controller.js'; export type { FieldName } from './settings-fields.js'; /** Debounce for text-like edits. Discrete controls still go through this timer unless flushed. */ export declare const SETTINGS_SAVE_DEBOUNCE_MS = 400; interface FieldState { text: string; overridden: boolean; invalid: boolean; } export interface EarsCardState { available: boolean; writable: boolean; loaded: boolean; loadFailed: boolean; recoveredSettingsFields: readonly string[]; saving: boolean; failed: boolean; dirty: boolean; invalid: boolean; asrBackend: FieldState; webSpeechLanguage: FieldState; localWhisperModel: FieldState; localWhisperAcceleration: FieldState; localWhisperLanguage: FieldState; localWhisperAccelerations: readonly WhisperAccelerationId[]; cloudAsrProvider: FieldState; cloudAsrGroqApiKey: FieldState; cloudAsrGroqApiKeyConfigured: boolean; cloudAsrGroqApiKeyClearPending: boolean; cloudAsrDeepgramApiKey: FieldState; cloudAsrDeepgramApiKeyConfigured: boolean; cloudAsrDeepgramApiKeyClearPending: boolean; cloudAsrCustomApiKey: FieldState; cloudAsrCustomApiKeyConfigured: boolean; cloudAsrCustomApiKeyClearPending: boolean; cloudAsrBailianApiKey: FieldState; cloudAsrBailianApiKeyConfigured: boolean; cloudAsrBailianApiKeyClearPending: boolean; cloudAsrTencentSecretKey: FieldState; cloudAsrTencentSecretKeyConfigured: boolean; cloudAsrTencentSecretKeyClearPending: boolean; cloudAsrMimoApiKey: FieldState; cloudAsrMimoApiKeyConfigured: boolean; cloudAsrMimoApiKeyClearPending: boolean; cloudAsrSiliconFlowApiKey: FieldState; cloudAsrSiliconFlowApiKeyConfigured: boolean; cloudAsrSiliconFlowApiKeyClearPending: boolean; cloudAsrVolcengineApiKey: FieldState; cloudAsrVolcengineApiKeyConfigured: boolean; cloudAsrVolcengineApiKeyClearPending: boolean; cloudAsrMimoService: FieldState; cloudAsrMimoCluster: FieldState; cloudAsrMimoModel: FieldState; cloudAsrMimoLanguage: FieldState; cloudAsrSiliconFlowModel: FieldState; cloudAsrSiliconFlowLanguage: FieldState; cloudAsrVolcengineService: FieldState; cloudAsrVolcengineRealtimeModel: FieldState; cloudAsrVolcengineRecordingModel: FieldState; cloudAsrVolcengineLanguage: FieldState; cloudAsrCustomEndpoint: FieldState; cloudAsrCustomModel: FieldState; cloudAsrCustomLanguage: FieldState; cloudAsrBailianHost: FieldState; cloudAsrGroqModel: FieldState; cloudAsrGroqLanguage: FieldState; cloudAsrDeepgramModel: FieldState; cloudAsrDeepgramLanguage: FieldState; cloudAsrDeepgramService: FieldState; cloudAsrBailianModel: FieldState; cloudAsrBailianLanguage: FieldState; cloudAsrTencentAppId: FieldState; cloudAsrTencentSecretId: FieldState; cloudAsrTencentEngineType: FieldState; cloudAsrTencentService: FieldState; maxRecordingSeconds: FieldState; voiceShortcutEnabled: FieldState; voiceShortcut: FieldState; voiceSoundsEnabled: FieldState; settingsDisplayName: FieldState; polishingEnabled: FieldState; polishProvider: FieldState; polishModel: FieldState; polishReasoningEffort: FieldState; polishPrompt: FieldState; } export interface BackendState { status: 'loading' | 'ready'; backends: readonly AsrBackendInfo[]; } export type { ReasoningEffortsState, RouteState } from './polish-state-controller.js'; export type { CloudModelsView } from './cloud-provider-controller.js'; export type { WhisperModelView } from './whisper-model-controller.js'; export type EarsSettingsHook = SnapshotSelectorHook; export type EarsCardHook = SnapshotSelectorHook; export type RouteHook = SnapshotSelectorHook; export type BackendHook = SnapshotSelectorHook; export type ReasoningEffortsHook = SnapshotSelectorHook; export type WhisperModelHook = SnapshotSelectorHook; export type CloudModelsHook = SnapshotSelectorHook; export { EMPTY_CLOUD_MODELS_VIEW } from './cloud-provider-controller.js'; export { EMPTY_WHISPER_STATE } from './whisper-model-controller.js'; export declare class EarsSettingsController { private readonly remote; private readonly settingsStore; private readonly cardStore; private readonly backendStore; private readonly draftsController; private readonly cloudProviderController; private readonly polishStateController; private readonly whisperModelController; private readonly drafts; private settingsView; private backendState; private saving; private saveQueued; private readonly inFlightCredentialClears; private loaded; private loadFailed; private failed; private saveTimer; private retryAttempted; private retryTimer; private disposed; private draftRevision; private settingsRequest; private backendRequest; constructor(remote: EarsRemote); getSettingsStore(): SnapshotStore; getCardStore(): SnapshotStore; getRouteStore(): SnapshotStore; getBackendStore(): SnapshotStore; getReasoningStore(): SnapshotStore; getWhisperStore(): SnapshotStore; getCloudModelsStore(): SnapshotStore; actions(): { edit: (field: FieldName, text: string) => void; setCredential: (field: CloudAsrCredentialField, text: string) => void; clearCredential: (field: CloudAsrCredentialField) => void; undoCredentialClear: (field: CloudAsrCredentialField) => void; setApiKey: (text: string) => void; clearApiKey: () => void; undoClearApiKey: () => void; setDeepgramApiKey: (text: string) => void; clearDeepgramApiKey: () => void; undoClearDeepgramApiKey: () => void; setCustomApiKey: (text: string) => void; clearCustomApiKey: () => void; undoClearCustomApiKey: () => void; setBailianApiKey: (text: string) => void; clearBailianApiKey: () => void; undoClearBailianApiKey: () => void; setTencentSecretKey: (text: string) => void; clearTencentSecretKey: () => void; undoClearTencentSecretKey: () => void; setMimoApiKey: (text: string) => void; clearMimoApiKey: () => void; undoClearMimoApiKey: () => void; setSiliconFlowApiKey: (text: string) => void; clearSiliconFlowApiKey: () => void; undoClearSiliconFlowApiKey: () => void; setVolcengineApiKey: (text: string) => void; clearVolcengineApiKey: () => void; undoClearVolcengineApiKey: () => void; save: () => undefined; flush: () => undefined; discard: () => void; refreshRoutes: () => undefined; retryCloudModels: () => undefined; downloadModel: () => undefined; cancelModel: () => undefined; deleteModel: () => undefined; loadAbout: () => Promise<{ repository: string; repositorySlug: string; version: string; license: string; dshCompatibility: string; updateCommand: string; } | null>; checkForUpdate: () => Promise<{ status: "error" | "unpublished" | "up-to-date" | "update-available"; installed: string; latest: string | null; updateCommand: string; }>; }; dispose(): void; refreshSettings(): Promise; refreshRoutes(silent?: boolean): Promise; refreshBackends(): Promise; refreshCloudModels(): Promise; refreshReasoningEfforts(): Promise; refreshWhisperState(): Promise; private downloadModel; private cancelModel; loadAbout(): Promise; checkForUpdate(): Promise; private deleteModel; private currentCloudAsrProvider; private currentCloudAsrService; private currentCloudAsrModel; private resetCloudAsrModels; private currentPolishProvider; private currentPolishModel; private currentPolishReasoningEffort; private currentPolishLookupRoute; private polishingEnabledForCard; private shouldProjectAgentDefault; private materializeProjectedPolishRoute; private rememberPolishSelection; private polishModelForProvider; private polishReasoningEffortFor; private resetPolishSelections; private polishSelectionForMemory; private currentWhisperModel; private hasPendingWhisperAcceleration; private edit; /** Stage the write-only key for clearing; auto-save commits it. */ private clearApiKey; private clearCredential; private undoCredentialClear; /** Undo a staged clear that has not been submitted yet. */ private undoClearApiKey; private clearNamedApiKey; private undoClearNamedApiKey; /** Drop every staged draft and pending clear, back to the last saved state. */ private discard; private scheduleSave; private cancelScheduledSave; private save; private hasPersistableDrafts; private publishCard; private snapshot; }