From 5a2cf0d53c4ee858f6a3e4d211454cf023eb5dca Mon Sep 17 00:00:00 2001 From: Darley Date: Thu, 12 Feb 2026 01:53:40 +0800 Subject: [PATCH] fix: prevent merging assistant messages with tool_calls Adjacent assistant messages where any message contains tool_calls were being merged by MergeAdjacentMessages, causing tool_calls to be silently dropped. This led to orphaned tool results that could not match any toolUse in history, resulting in Kiro API returning 'Improperly formed request.' Now assistant messages with tool_calls are kept separate during merge, preserving the tool call chain integrity. --- internal/translator/kiro/common/message_merge.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/internal/translator/kiro/common/message_merge.go b/internal/translator/kiro/common/message_merge.go index 56d5663c..d58205e0 100644 --- a/internal/translator/kiro/common/message_merge.go +++ b/internal/translator/kiro/common/message_merge.go @@ -33,6 +33,13 @@ func MergeAdjacentMessages(messages []gjson.Result) []gjson.Result { continue } + // Don't merge assistant messages that have tool_calls - these must stay separate + // so that subsequent tool results can match their tool_call IDs + if currentRole == "assistant" && (msg.Get("tool_calls").Exists() || lastMsg.Get("tool_calls").Exists()) { + merged = append(merged, msg) + continue + } + if currentRole == lastRole { // Merge content from current message into last message mergedContent := mergeMessageContent(lastMsg, msg)