export const CANVAS_LOCAL_EDIT_CONFIG_KEY = "canvas_local_edit_config"; export type CanvasLocalEditConfig = { modelId: string; scaleAdjustModelId: string; }; export type CanvasLocalEditModelIdentity = { id: string; modelId: string; }; export function defaultCanvasLocalEditConfig(): CanvasLocalEditConfig { return { modelId: "", scaleAdjustModelId: "", }; } function normalizeModelRef(value: unknown) { return String(value || "").trim().slice(0, 128); } export function resolveCanvasLocalEditModelRef< T extends CanvasLocalEditModelIdentity, >(models: T[], value: unknown): T | null { const modelRef = normalizeModelRef(value); if (!modelRef) return null; // New settings persist the database UUID so identically named runtime // models from different providers cannot be confused. Keep modelId lookup // as a compatibility path for settings saved before UUID persistence. return ( models.find((model) => model.id === modelRef) || models.find((model) => model.modelId === modelRef) || null ); } export function normalizeCanvasLocalEditConfig( value: unknown ): CanvasLocalEditConfig { const defaults = defaultCanvasLocalEditConfig(); if (!value || typeof value !== "object" || Array.isArray(value)) { return defaults; } const raw = value as Record; return { modelId: normalizeModelRef(raw.modelId), scaleAdjustModelId: normalizeModelRef(raw.scaleAdjustModelId), }; }