From b2b166972af605f888eb6c46a713913bc2abe97c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AC=E6=98=8E?= <83812544+Ed1s0nZ@users.noreply.github.com> Date: Tue, 28 Apr 2026 00:33:29 +0800 Subject: [PATCH] Add files via upload --- internal/attackchain/builder.go | 2 +- internal/einomcp/mcp_tools.go | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/attackchain/builder.go b/internal/attackchain/builder.go index de1a7d52..94d6a9c5 100644 --- a/internal/attackchain/builder.go +++ b/internal/attackchain/builder.go @@ -320,7 +320,7 @@ func (b *Builder) formatProcessDetailsForAttackChain(details []database.ProcessD } // 1) 编排器的工具调用/结果:保留(这是“主 agent 调了什么工具”) - if (d.EventType == "tool_call" || d.EventType == "tool_result" || d.EventType == "tool_calls_detected" || d.EventType == "iteration" || d.EventType == "eino_recovery") && einoRole == "orchestrator" { + if (d.EventType == "tool_call" || d.EventType == "tool_result" || d.EventType == "tool_calls_detected" || d.EventType == "iteration") && einoRole == "orchestrator" { sb.WriteString("[") sb.WriteString(d.EventType) sb.WriteString("] ") diff --git a/internal/einomcp/mcp_tools.go b/internal/einomcp/mcp_tools.go index 72228a34..8361e5be 100644 --- a/internal/einomcp/mcp_tools.go +++ b/internal/einomcp/mcp_tools.go @@ -160,17 +160,17 @@ func runMCPToolInvocation( } // UnknownToolReminderHandler 供 compose.ToolsNodeConfig.UnknownToolsHandler 使用: -// 模型请求了未注册的工具名时,返回一个「可恢复」的错误,让上层 runner 触发重试与纠错提示, -// 同时避免 UI 永远停留在“执行中”(runner 会在 recoverable 分支 flush 掉 pending 的 tool_call)。 +// 模型请求了未注册的工具名时,返回一个「软错误」工具结果(nil error), +// 让模型在同一轮继续自我修正,避免触发 run-loop 级别的 full rerun。 // 不进行名称猜测或映射,避免误执行。 func UnknownToolReminderHandler() func(ctx context.Context, name, input string) (string, error) { return func(ctx context.Context, name, input string) (string, error) { _ = ctx _ = input requested := strings.TrimSpace(name) - // Return a recoverable error that still carries a friendly, bilingual hint. - // This will be caught by multiagent runner as "tool not found" and trigger a retry. - return "", fmt.Errorf("tool %q not found: %s", requested, unknownToolReminderText(requested)) + // Return a soft tool-result error so the graph keeps running and the LLM + // can correct tool name/arguments within the same run. + return ToolErrorPrefix + unknownToolReminderText(requested), nil } }