ai-chatbot/lib/agents/workflow-showcase-config.ts
Your Name 52add30784
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
feat: refine workflow showcase particle banner
2026-03-21 12:55:09 +08:00

62 lines
2.2 KiB
TypeScript

import type { AgentWorkflowShowcaseConfig } from "@/types/agent";
export const AGENT_WORKFLOW_SHOWCASE_CONFIG_KEY = "agent_workflow_showcase_config";
const LEGACY_AGENT_WORKFLOW_SHOWCASE_SUBTITLE = "第一步:风格选择第二步:生图模式";
const DEFAULT_AGENT_WORKFLOW_SHOWCASE_SUBTITLE =
"选择生图模式、查询商品图、完成风格配置并实时查看结果";
export const defaultAgentWorkflowShowcaseConfig: AgentWorkflowShowcaseConfig = {
enabled: true,
title: "三倍速出片,电影级质感",
subtitle: DEFAULT_AGENT_WORKFLOW_SHOWCASE_SUBTITLE,
actionText: "我要创作",
videoUrl: "",
posterUrl: "",
overlayText: "让每一步选择,都能直达高质感成片",
footerText: "用户作品",
};
function sanitizeText(value: unknown, maxLength: number) {
return String(value || "").trim().slice(0, maxLength);
}
function normalizeShowcaseSubtitle(value: string) {
const normalized = String(value || "").trim();
if (!normalized) {
return defaultAgentWorkflowShowcaseConfig.subtitle;
}
const compact = normalized.replace(/\s+/g, "");
if (compact === LEGACY_AGENT_WORKFLOW_SHOWCASE_SUBTITLE) {
return DEFAULT_AGENT_WORKFLOW_SHOWCASE_SUBTITLE;
}
return normalized;
}
export function normalizeAgentWorkflowShowcaseConfig(
value: unknown
): AgentWorkflowShowcaseConfig {
if (!value || typeof value !== "object" || Array.isArray(value)) {
return defaultAgentWorkflowShowcaseConfig;
}
const raw = value as Record<string, unknown>;
return {
enabled:
typeof raw.enabled === "boolean"
? raw.enabled
: defaultAgentWorkflowShowcaseConfig.enabled,
title:
sanitizeText(raw.title, 200) || defaultAgentWorkflowShowcaseConfig.title,
subtitle: normalizeShowcaseSubtitle(sanitizeText(raw.subtitle, 300)),
actionText:
sanitizeText(raw.actionText, 48) || defaultAgentWorkflowShowcaseConfig.actionText,
videoUrl: sanitizeText(raw.videoUrl, 2000),
posterUrl: sanitizeText(raw.posterUrl, 2000) || null,
overlayText:
sanitizeText(raw.overlayText, 200) || defaultAgentWorkflowShowcaseConfig.overlayText,
footerText:
sanitizeText(raw.footerText, 64) || defaultAgentWorkflowShowcaseConfig.footerText,
};
}