import { createEmptyAgentGenerationProjectPersistedState, normalizeAgentGenerationProjectPersistedState, } from "@/lib/agents/generation-project-state"; import type { canvasProject } from "@/lib/db/schema"; function getCanvasDataRecord(value: unknown) { return value && typeof value === "object" && !Array.isArray(value) ? (value as Record) : {}; } function hasLegacyWorkflowState(value: unknown) { if (!value || typeof value !== "object" || Array.isArray(value)) { return false; } const raw = value as Record; return ( "inputs" in raw || "materials" in raw || "selectedAgentPresetId" in raw || "currentStage" in raw || "agentModeState" in raw ); } export function isLegacyAgentProjectCanvasData(value: unknown) { const raw = getCanvasDataRecord(value); return ( hasLegacyWorkflowState(raw.workflowState) || hasLegacyWorkflowState(raw.agentProjectState) || hasLegacyWorkflowState(raw.projectState) || Array.isArray(raw.resultImageUrls) || (raw.resultCollections && typeof raw.resultCollections === "object") || (raw.deletedResultCollections && typeof raw.deletedResultCollections === "object") || (raw.workspaceState && typeof raw.workspaceState === "object") ); } export function isAgentProjectRow(row: typeof canvasProject.$inferSelect) { return row.workspaceType === "agent" || isLegacyAgentProjectCanvasData(row.canvasData); } export function extractAgentProjectStateFromCanvasData(value: unknown) { const raw = getCanvasDataRecord(value); const explicitStateCandidate = raw.agentProjectState && typeof raw.agentProjectState === "object" ? raw.agentProjectState : raw.projectState && typeof raw.projectState === "object" ? raw.projectState : null; if (explicitStateCandidate) { return normalizeAgentGenerationProjectPersistedState(explicitStateCandidate); } if (isLegacyAgentProjectCanvasData(raw)) { return normalizeAgentGenerationProjectPersistedState({ workflowState: raw.workflowState, workspaceState: raw.workspaceState, resultImageUrls: raw.resultImageUrls, resultCollections: raw.resultCollections, deletedResultCollections: raw.deletedResultCollections, }); } return createEmptyAgentGenerationProjectPersistedState(); }