import { defaultAgentWorkflowUiConfig } from "@/lib/agents/workflow-ui-config"; import type { AgentWorkflowComposerContext, AgentWorkflowStepKey, AgentWorkflowUiConfig, } from "@/types/agent"; export interface AgentWorkflowInputsValue { primarySku: string; secondarySku: string; brand: string; store: string; } export function buildAgentWorkflowComposerContext(params: { config?: AgentWorkflowUiConfig | null; inputs: AgentWorkflowInputsValue; selections: Partial>; }): AgentWorkflowComposerContext | null { const config = params.config || defaultAgentWorkflowUiConfig; const steps = Array.isArray(config.steps) ? config.steps : []; const selections = steps .filter((step) => step.enabled !== false) .map((step) => { const selectedKey = params.selections[step.key]; if (!selectedKey) return null; const option = (step.options || []).find( (item) => item.key === selectedKey && item.enabled !== false ); if (!option) return null; return { stepKey: step.key, stepTitle: step.title, optionKey: option.key, optionName: option.buttonName, promptFragment: option.promptFragment || option.buttonName, }; }) .filter(Boolean) as AgentWorkflowComposerContext["selections"]; const summaryParts: string[] = []; if (params.inputs.primarySku.trim()) { summaryParts.push(`主SKU:${params.inputs.primarySku.trim()}`); } if (params.inputs.secondarySku.trim()) { summaryParts.push(`搭配SKU:${params.inputs.secondarySku.trim()}`); } if (params.inputs.brand.trim()) { summaryParts.push(`品牌:${params.inputs.brand.trim()}`); } if (params.inputs.store.trim()) { summaryParts.push(`店铺:${params.inputs.store.trim()}`); } selections.forEach((item) => { summaryParts.push(`${item.stepTitle}:${item.optionName}`); }); if (summaryParts.length === 0) { return null; } const promptLines: string[] = []; if (params.inputs.primarySku.trim()) { promptLines.push(`主SKU:${params.inputs.primarySku.trim()}`); } if (params.inputs.secondarySku.trim()) { promptLines.push(`搭配SKU:${params.inputs.secondarySku.trim()}`); } if (params.inputs.brand.trim()) { promptLines.push(`品牌:${params.inputs.brand.trim()}`); } if (params.inputs.store.trim()) { promptLines.push(`店铺:${params.inputs.store.trim()}`); } selections.forEach((item) => { promptLines.push(`${item.stepTitle}:${item.promptFragment || item.optionName}`); }); return { primarySku: params.inputs.primarySku.trim() || undefined, secondarySku: params.inputs.secondarySku.trim() || undefined, brand: params.inputs.brand.trim() || undefined, store: params.inputs.store.trim() || undefined, selections, summaryText: summaryParts.join(" / "), promptText: promptLines.join("\n"), }; } export function getAgentWorkflowProgress(params: { config?: AgentWorkflowUiConfig | null; selections: Partial>; }) { const config = params.config || defaultAgentWorkflowUiConfig; const enabledSteps = (config.steps || []).filter((step) => step.enabled !== false); const completedSteps = enabledSteps.filter((step) => { const value = params.selections[step.key]; return Boolean(String(value || "").trim()); }); return { total: enabledSteps.length, completed: completedSteps.length, isComplete: enabledSteps.length > 0 && completedSteps.length === enabledSteps.length, }; }