From 010cbd0a73bd6024610bcf6af7b4a2980f9e9305 Mon Sep 17 00:00:00 2001 From: Joel Date: Mon, 26 Jan 2026 14:21:34 +0800 Subject: [PATCH] chore: remove useless meata config when save file --- .../skill/hooks/use-skill-save-manager.tsx | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/web/app/components/workflow/skill/hooks/use-skill-save-manager.tsx b/web/app/components/workflow/skill/hooks/use-skill-save-manager.tsx index 9f7a6217e3..b93617f43c 100644 --- a/web/app/components/workflow/skill/hooks/use-skill-save-manager.tsx +++ b/web/app/components/workflow/skill/hooks/use-skill-save-manager.tsx @@ -52,6 +52,22 @@ type SkillSaveProviderProps = { const SkillSaveContext = React.createContext(null) +const TOOL_TOKEN_REGEX = /§\[tool\]\.\[[\w-]+(?:\/[\w-]+)*\]\.\[[\w-]+\]\.\[([a-fA-F0-9-]{36})\]§/g + +const extractToolConfigIds = (content: string) => { + const ids = new Set() + if (!content) + return ids + TOOL_TOKEN_REGEX.lastIndex = 0 + let match = TOOL_TOKEN_REGEX.exec(content) + while (match) { + if (match[1]) + ids.add(match[1]) + match = TOOL_TOKEN_REGEX.exec(content) + } + return ids +} + export const SkillSaveProvider = ({ appId, children, @@ -102,12 +118,32 @@ export const SkillSaveProvider = ({ return null const registryEntry = fallbackRegistryRef.current.get(fileId) - const metadata = state.fileMetadata.get(fileId) ?? fallbackMetadata ?? registryEntry?.metadata + const rawMetadata = state.fileMetadata.get(fileId) ?? fallbackMetadata ?? registryEntry?.metadata const content = draftContent ?? getCachedContent(fileId) ?? fallbackContent ?? registryEntry?.content if (content === undefined) return null + let metadata = rawMetadata + if (rawMetadata && typeof rawMetadata === 'object' && 'tools' in rawMetadata) { + const toolIds = extractToolConfigIds(content) + const rawTools = (rawMetadata as Record).tools + if (rawTools && typeof rawTools === 'object') { + const entries = Object.entries(rawTools as Record) + const nextTools = entries.reduce>((acc, [id, value]) => { + if (toolIds.has(id)) + acc[id] = value + return acc + }, {}) + const nextMetadata = { ...(rawMetadata as Record) } + if (Object.keys(nextTools).length > 0) + nextMetadata.tools = nextTools + else + delete nextMetadata.tools + metadata = nextMetadata + } + } + return { content, metadata,