diff --git a/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx b/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx index 80d449e5d..5fc7219b8 100644 --- a/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx +++ b/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx @@ -170,6 +170,7 @@ function createWorkflowOptionDraft( enabled: true, sortOrder: optionIndex, promptFragment: `请按选项${optionIndex + 1}执行。`, + blockedOptionKeys: [], children: [], }; } @@ -212,6 +213,27 @@ function collectWorkflowOptionKeys(options: AgentWorkflowOptionUiConfig[]): stri return flattenAgentWorkflowOptionTree(options).map(({ option }) => option.key); } +function collectWorkflowOptionRelations( + options: AgentWorkflowOptionUiConfig[], + ancestors: string[] = [] +): Array<{ + key: string; + label: string; + depth: number; +}> { + return options.flatMap((option) => { + const currentPath = [...ancestors, option.buttonName || option.key]; + return [ + { + key: option.key, + label: currentPath.join(" / "), + depth: currentPath.length, + }, + ...collectWorkflowOptionRelations(option.children || [], currentPath), + ]; + }); +} + function updateWorkflowOptionTree( options: AgentWorkflowOptionUiConfig[], optionKey: string, @@ -1212,6 +1234,20 @@ export function AgentWorkflowSettingsClient({ (left, right) => left.sortOrder - right.sortOrder ); const canAddChild = depth < AGENT_WORKFLOW_MAX_OPTION_DEPTH; + const optionRelations = collectWorkflowOptionRelations(step.options || []); + const optionLookup = new Map(optionRelations.map((item) => [item.key, item] as const)); + const blockedCandidates = optionRelations.filter((item) => item.key !== option.key); + const selectedBlockedItems = (option.blockedOptionKeys || []) + .map((blockedKey) => optionLookup.get(blockedKey)) + .filter( + ( + item + ): item is { + key: string; + label: string; + depth: number; + } => Boolean(item) + ); return (
+ 选中当前卡片后,下方指定的其它卡片会在前台变灰并不可选。 +
+