From 3bde614bd388e5e51cbc228bf2394b9a8e0b035c Mon Sep 17 00:00:00 2001 From: Joel Date: Mon, 26 Jan 2026 11:00:29 +0800 Subject: [PATCH] feat: enabel tool num --- .../plugins/tool-block/component.tsx | 1 + .../tool-block/tool-group-block-component.tsx | 56 +++++++++++++++++-- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/web/app/components/workflow/skill/editor/skill-editor/plugins/tool-block/component.tsx b/web/app/components/workflow/skill/editor/skill-editor/plugins/tool-block/component.tsx index 8263bdb3e8..56e9fa59e1 100644 --- a/web/app/components/workflow/skill/editor/skill-editor/plugins/tool-block/component.tsx +++ b/web/app/components/workflow/skill/editor/skill-editor/plugins/tool-block/component.tsx @@ -66,6 +66,7 @@ type ToolConfigMetadata = { configuration: { fields: ToolConfigField[] } + enabled?: boolean } type SkillFileMetadata = { diff --git a/web/app/components/workflow/skill/editor/skill-editor/plugins/tool-block/tool-group-block-component.tsx b/web/app/components/workflow/skill/editor/skill-editor/plugins/tool-block/tool-group-block-component.tsx index 8719e7a240..c996cacceb 100644 --- a/web/app/components/workflow/skill/editor/skill-editor/plugins/tool-block/tool-group-block-component.tsx +++ b/web/app/components/workflow/skill/editor/skill-editor/plugins/tool-block/tool-group-block-component.tsx @@ -55,6 +55,8 @@ type ToolConfigMetadata = { configuration: { fields: ToolConfigField[] } + enabled?: boolean + [key: string]: string | boolean | number | undefined | object// Add index signature to allow string keys } type SkillFileMetadata = { @@ -199,6 +201,14 @@ const ToolGroupBlockComponent: FC = ({ return metadata?.tools?.[activeToolItem.configId] }, [activeTabId, activeToolItem, fileMetadata, isUsingExternalMetadata, toolBlockContext?.metadata]) + const metadataTools = useMemo(() => { + if (isUsingExternalMetadata) + return ((toolBlockContext?.metadata as SkillFileMetadata | undefined)?.tools || {}) as Record + if (!activeTabId || activeTabId === START_TAB_ID) + return {} + return ((fileMetadata.get(activeTabId) as SkillFileMetadata | undefined)?.tools || {}) as Record + }, [activeTabId, fileMetadata, isUsingExternalMetadata, toolBlockContext?.metadata]) + const getVarKindType = (type: FormTypeEnum | string) => { if (type === FormTypeEnum.file || type === FormTypeEnum.files) return VarKindType.variable @@ -346,17 +356,23 @@ const ToolGroupBlockComponent: FC = ({ const resolvedEnabledByConfigId = useMemo(() => { const next = { ...enabledByConfigId } toolItems.forEach((item) => { + const enabledFromMetadata = metadataTools[item.configId]?.enabled + if (enabledFromMetadata !== undefined) { + next[item.configId] = enabledFromMetadata + return + } if (next[item.configId] === undefined) next[item.configId] = true }) return next - }, [enabledByConfigId, toolItems]) + }, [enabledByConfigId, metadataTools, toolItems]) const enabledCount = useMemo(() => { if (!toolItems.length) return 0 return toolItems.reduce((count, item) => count + (resolvedEnabledByConfigId[item.configId] === false ? 0 : 1), 0) }, [resolvedEnabledByConfigId, toolItems]) + const displayEnabledCount = needAuthorization ? 0 : enabledCount const handleToolValueChange = (nextValue: ToolValue) => { if (!activeToolItem || !currentProvider || !currentTool) @@ -365,6 +381,7 @@ const ToolGroupBlockComponent: FC = ({ if (isUsingExternalMetadata) { const metadata = (toolBlockContext?.metadata || {}) as SkillFileMetadata const toolType = currentProvider.type === CollectionType.mcp ? 'mcp' : 'builtin' + const currentToolMetadata = (metadata.tools || {})[activeToolItem.configId] const buildFields = (value: Record | undefined) => { if (!value) return [] @@ -386,6 +403,7 @@ const ToolGroupBlockComponent: FC = ({ [activeToolItem.configId]: { type: toolType, configuration: { fields }, + enabled: currentToolMetadata?.enabled ?? resolvedEnabledByConfigId[activeToolItem.configId] ?? true, }, }, } @@ -396,6 +414,7 @@ const ToolGroupBlockComponent: FC = ({ return const metadata = (fileMetadata.get(activeTabId) || {}) as SkillFileMetadata const toolType = currentProvider.type === CollectionType.mcp ? 'mcp' : 'builtin' + const currentToolMetadata = (metadata.tools || {})[activeToolItem.configId] const buildFields = (value: Record | undefined) => { if (!value) return [] @@ -417,6 +436,7 @@ const ToolGroupBlockComponent: FC = ({ [activeToolItem.configId]: { type: toolType, configuration: { fields }, + enabled: currentToolMetadata?.enabled ?? resolvedEnabledByConfigId[activeToolItem.configId] ?? true, }, }, } @@ -426,7 +446,35 @@ const ToolGroupBlockComponent: FC = ({ const handleToggleTool = useCallback((configId: string, nextValue: boolean) => { setEnabledByConfigId(prev => ({ ...prev, [configId]: nextValue })) - }, []) + const applyEnabled = (metadata: SkillFileMetadata | undefined) => { + const nextMetadata: SkillFileMetadata = { + ...(metadata || {}), + tools: { + ...(metadata?.tools || {}), + }, + } + const existing = nextMetadata.tools?.[configId] + const toolType = existing?.type || (currentProvider?.type === CollectionType.mcp ? 'mcp' : 'builtin') + if (!nextMetadata.tools) + nextMetadata.tools = {} + nextMetadata.tools[configId] = { + type: toolType, + configuration: existing?.configuration || { fields: [] }, + enabled: nextValue, + } + return nextMetadata + } + if (isUsingExternalMetadata) { + toolBlockContext?.onMetadataChange?.(applyEnabled(toolBlockContext?.metadata as SkillFileMetadata | undefined)) + return + } + if (!activeTabId || activeTabId === START_TAB_ID) + return + const metadata = fileMetadata.get(activeTabId) as SkillFileMetadata | undefined + const nextMetadata = applyEnabled(metadata) + storeApi.getState().setDraftMetadata(activeTabId, nextMetadata) + storeApi.getState().pinTab(activeTabId) + }, [activeTabId, currentProvider?.type, fileMetadata, isUsingExternalMetadata, storeApi, toolBlockContext]) const renderIcon = () => { if (!resolvedIcon) @@ -552,7 +600,7 @@ const ToolGroupBlockComponent: FC = ({
- {t('toolGroup.actionsEnabled', { ns: 'workflow', num: enabledCount })} + {t('toolGroup.actionsEnabled', { ns: 'workflow', num: displayEnabledCount })}
{toolItems.map(item => ( @@ -625,7 +673,7 @@ const ToolGroupBlockComponent: FC = ({ {providerLabel} - {tools.length} + {displayEnabledCount} {useModal && (