ai-chatbot/lib/agents/agent-project-compat.ts
Your Name 01748fe501
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
fix: harden psd text workflow compatibility
2026-04-02 00:08:53 +08:00

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();
}