From e5f31afebdf5057675a35347d3eda0f6bd94b249 Mon Sep 17 00:00:00 2001 From: claude-code-best Date: Sat, 16 May 2026 08:47:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20ExecuteExtraTool=20=E5=A7=94=E6=89=98?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=89=8D=E5=A2=9E=E5=8A=A0=20validateInput?= =?UTF-8?q?=20=E6=A0=A1=E9=AA=8C=EF=BC=8C=E4=BC=98=E5=8C=96=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E6=98=BE=E7=A4=BA=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 call() 中 checkPermissions 之前调用目标工具的 validateInput(),防止模型传入不完整参数导致崩溃(如 TeamCreate 缺少 team_name → sanitizeName(undefined).replace() TypeError) - renderToolUseMessage 从 "Executing TeamCreate..." 简化为 "TeamCreate",与其他工具样式一致 Co-Authored-By: glm-5-turbo --- .../src/tools/ExecuteTool/ExecuteTool.ts | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/builtin-tools/src/tools/ExecuteTool/ExecuteTool.ts b/packages/builtin-tools/src/tools/ExecuteTool/ExecuteTool.ts index 1ba030e98..d731713a6 100644 --- a/packages/builtin-tools/src/tools/ExecuteTool/ExecuteTool.ts +++ b/packages/builtin-tools/src/tools/ExecuteTool/ExecuteTool.ts @@ -121,6 +121,29 @@ export const ExecuteTool = buildTool({ } } + // Validate input before delegating — prevents crashes when the model + // omits required params (e.g. TeamCreate without team_name → + // sanitizeName(undefined).replace() TypeError). + if (targetTool.validateInput) { + const validation = await targetTool.validateInput( + input.params as Record, + context, + ) + if (!validation.result) { + return { + data: { + result: null, + tool_name: input.tool_name, + }, + newMessages: [ + createUserMessage({ + content: `Invalid parameters for tool "${input.tool_name}": ${validation.message}`, + }), + ], + } + } + } + // Check permissions on the target tool const permResult = await targetTool.checkPermissions?.( input.params as Record, @@ -164,7 +187,7 @@ export const ExecuteTool = buildTool({ } }, renderToolUseMessage(input) { - return `Executing ${input.tool_name}...` + return `${input.tool_name}` }, userFacingName() { return 'ExecuteExtraTool'