70 lines
2.3 KiB
TypeScript
70 lines
2.3 KiB
TypeScript
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<string, unknown>)
|
|
: {};
|
|
}
|
|
|
|
function hasLegacyWorkflowState(value: unknown) {
|
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
return false;
|
|
}
|
|
|
|
const raw = value as Record<string, unknown>;
|
|
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();
|
|
}
|