From 7be27f2d928ef127c4901e8488aaecd873cdfd2b Mon Sep 17 00:00:00 2001 From: Zhang Rui Date: Fri, 27 Feb 2026 16:12:59 +0800 Subject: [PATCH] fix: enhance message handling by refining tool message sanitization and updating WeCom message sending method --- pkg/agent/context.go | 15 +++++++++++++-- pkg/agent/loop.go | 3 +-- pkg/channels/wecom_app.go | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/pkg/agent/context.go b/pkg/agent/context.go index a9db5afdd..7bd55d4ab 100644 --- a/pkg/agent/context.go +++ b/pkg/agent/context.go @@ -229,8 +229,19 @@ func sanitizeHistoryForProvider(history []providers.Message) []providers.Message logger.DebugCF("agent", "Dropping orphaned leading tool message", map[string]any{}) continue } - last := sanitized[len(sanitized)-1] - if last.Role != "assistant" || len(last.ToolCalls) == 0 { + // Walk backwards to find the nearest assistant message, + // skipping over any preceding tool messages (multi-tool-call case). + foundAssistant := false + for i := len(sanitized) - 1; i >= 0; i-- { + if sanitized[i].Role == "tool" { + continue + } + if sanitized[i].Role == "assistant" && len(sanitized[i].ToolCalls) > 0 { + foundAssistant = true + } + break + } + if !foundAssistant { logger.DebugCF("agent", "Dropping orphaned tool message", map[string]any{}) continue } diff --git a/pkg/agent/loop.go b/pkg/agent/loop.go index ac88e8b7d..c77271098 100644 --- a/pkg/agent/loop.go +++ b/pkg/agent/loop.go @@ -463,8 +463,7 @@ func (al *AgentLoop) runAgentLoop(ctx context.Context, agent *AgentInstance, opt } // 9. Log response - responsePreview := utils.Truncate(finalContent, 120) - logger.InfoCF("agent", fmt.Sprintf("Response: %s", responsePreview), + logger.InfoCF("agent", fmt.Sprintf("Response: [%s]", finalContent), map[string]any{ "agent_id": agent.ID, "session_key": opts.SessionKey, diff --git a/pkg/channels/wecom_app.go b/pkg/channels/wecom_app.go index cfcfbbb95..fd169879a 100644 --- a/pkg/channels/wecom_app.go +++ b/pkg/channels/wecom_app.go @@ -231,7 +231,7 @@ func (c *WeComAppChannel) Send(ctx context.Context, msg bus.OutboundMessage) err "preview": utils.Truncate(msg.Content, 100), }) - return c.sendTextMessage(ctx, accessToken, msg.ChatID, msg.Content) + return c.sendMarkdownMessage(ctx, accessToken, msg.ChatID, msg.Content) } // handleWebhook handles incoming webhook requests from WeCom