import type { ObservedResultListener } from "../app-server/query/observed-result"; import type { HookItem, ModelMetadata } from "../domain/catalog/metadata"; import type { Thread } from "../domain/threads/model"; export interface SettingsHookCatalog { hooks: readonly HookItem[]; warnings: readonly string[]; errors: readonly string[]; status: string; } export interface SettingsDynamicDataAccess { modelsSnapshot(): readonly ModelMetadata[] | null; observeModelsResult(listener: ObservedResultListener, options?: { emitCurrent?: boolean }): () => void; fetchModels(): Promise; refreshModels(): Promise; archivedThreadsSnapshot(): readonly Thread[] | null; observeArchivedThreadsResult(listener: ObservedResultListener, options?: { emitCurrent?: boolean }): () => void; refreshArchivedThreads(): Promise; refreshHooks(): Promise; trustHook(hook: HookItem): Promise; setHookEnabled(hook: HookItem, enabled: boolean): Promise; restoreArchivedThread(threadId: string): Promise; deleteArchivedThread(threadId: string): Promise; } export class StaleSettingsDynamicDataContextError extends Error { constructor() { super("Settings dynamic data context changed while loading Codex details."); this.name = "StaleSettingsDynamicDataContextError"; } } export function isStaleSettingsDynamicDataContextError(error: unknown): error is StaleSettingsDynamicDataContextError { return error instanceof StaleSettingsDynamicDataContextError; }