From 85c0f2c096dfdc1d60dadfb113558b3f00ae5b6b Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 23 Apr 2026 13:29:47 +0800 Subject: [PATCH] fix: allow large workflow exclusion lists --- app/api/site-settings/route.ts | 6 +++++- lib/agents/workflow-ui-config.ts | 9 +++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/api/site-settings/route.ts b/app/api/site-settings/route.ts index 0cf8ca868..f3fb3e021 100644 --- a/app/api/site-settings/route.ts +++ b/app/api/site-settings/route.ts @@ -31,6 +31,7 @@ import { normalizeAgentSecondaryTypeConfig, } from "@/lib/agents/secondary-type-config"; import { + AGENT_WORKFLOW_BLOCKED_OPTION_KEYS_MAX, AGENT_WORKFLOW_UI_CONFIG_KEY, AGENT_WORKFLOW_PROMPT_FRAGMENT_MAX_LENGTH, defaultAgentWorkflowUiConfig, @@ -922,7 +923,10 @@ const agentWorkflowOptionSchema: z.ZodTypeAny = z.lazy(() => .max(AGENT_WORKFLOW_PROMPT_FRAGMENT_MAX_LENGTH) .nullable() .optional(), - blockedOptionKeys: z.array(z.string().trim().min(1).max(64)).max(100).optional(), + blockedOptionKeys: z + .array(z.string().trim().min(1).max(64)) + .max(AGENT_WORKFLOW_BLOCKED_OPTION_KEYS_MAX) + .optional(), specialModuleEnabled: z.boolean().optional(), specialModuleExclusionEnabled: z.boolean().optional(), specialModuleAllowedOptionKeys: z diff --git a/lib/agents/workflow-ui-config.ts b/lib/agents/workflow-ui-config.ts index a1b6efebe..6ccabefcb 100644 --- a/lib/agents/workflow-ui-config.ts +++ b/lib/agents/workflow-ui-config.ts @@ -16,6 +16,7 @@ export const AGENT_WORKFLOW_UI_CONFIG_KEY = "agent_workflow_ui_config"; export const AGENT_WORKFLOW_MAX_TREE_DEPTH = 8; export const AGENT_WORKFLOW_MAX_OPTION_DEPTH = 100; export const AGENT_WORKFLOW_PROMPT_FRAGMENT_MAX_LENGTH = 20_000; +export const AGENT_WORKFLOW_BLOCKED_OPTION_KEYS_MAX = 5000; const AGENT_WORKFLOW_SPECIAL_MODULE_ALLOWED_KEYS_MAX = 5000; export const defaultAgentWorkflowCategoryLabels: AgentWorkflowCategoryLabels = { firstCategory: "品牌", @@ -56,7 +57,7 @@ function cloneOption( promptFragment: option.promptFragment || "", blockedOptionKeys: Array.from(new Set((option.blockedOptionKeys || []).filter(Boolean))).slice( 0, - 100 + AGENT_WORKFLOW_BLOCKED_OPTION_KEYS_MAX ), specialModuleEnabled: Boolean(option.specialModuleEnabled), specialModuleExclusionEnabled: Boolean(option.specialModuleExclusionEnabled), @@ -547,7 +548,7 @@ function sanitizeBlockedOptionTree( (blockedKey) => blockedKey !== option.key && validKeys.has(blockedKey) ) ) - ).slice(0, 100), + ).slice(0, AGENT_WORKFLOW_BLOCKED_OPTION_KEYS_MAX), children: sanitizeBlockedOptionTree(option.children || [], validKeys), })); } @@ -967,8 +968,8 @@ export function normalizeAgentWorkflowUiConfig(value: unknown): AgentWorkflowUiC ), promptFragment, blockedOptionKeys: hasRawBlockedOptionKeys - ? normalizeKeyList(optionRecord.blockedOptionKeys, 100) - : normalizeKeyList(defaultOption?.blockedOptionKeys, 100), + ? normalizeKeyList(optionRecord.blockedOptionKeys, AGENT_WORKFLOW_BLOCKED_OPTION_KEYS_MAX) + : normalizeKeyList(defaultOption?.blockedOptionKeys, AGENT_WORKFLOW_BLOCKED_OPTION_KEYS_MAX), specialModuleEnabled: normalizeBoolean( optionRecord.specialModuleEnabled, defaultOption?.specialModuleEnabled ?? false