From 5dc936a9a45b459eb6a2a950492f24a5b4f39f0f Mon Sep 17 00:00:00 2001 From: Skyuno Date: Wed, 28 Jan 2026 23:49:02 +0800 Subject: [PATCH] fix: filter out web_search/websearch tools unsupported by Kiro API --- .../translator/kiro/claude/kiro_claude_request.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/translator/kiro/claude/kiro_claude_request.go b/internal/translator/kiro/claude/kiro_claude_request.go index f92be9d5..6edbd3d0 100644 --- a/internal/translator/kiro/claude/kiro_claude_request.go +++ b/internal/translator/kiro/claude/kiro_claude_request.go @@ -17,7 +17,6 @@ import ( "github.com/tidwall/gjson" ) - // Kiro API request structs - field order determines JSON key order // KiroPayload is the top-level request structure for Kiro API @@ -34,7 +33,6 @@ type KiroInferenceConfig struct { TopP float64 `json:"topP,omitempty"` } - // KiroConversationState holds the conversation context type KiroConversationState struct { ChatTriggerType string `json:"chatTriggerType"` // Required: "MANUAL" - must be first field @@ -378,7 +376,6 @@ func hasThinkingTagInBody(body []byte) bool { return strings.Contains(bodyStr, "") || strings.Contains(bodyStr, "") } - // IsThinkingEnabledFromHeader checks if thinking mode is enabled via Anthropic-Beta header. // Claude CLI uses "Anthropic-Beta: interleaved-thinking-2025-05-14" to enable thinking. func IsThinkingEnabledFromHeader(headers http.Header) bool { @@ -518,6 +515,15 @@ func convertClaudeToolsToKiro(tools gjson.Result) []KiroToolWrapper { for _, tool := range tools.Array() { name := tool.Get("name").String() + + // Filter out web_search/websearch tools (Kiro API doesn't support them) + // This matches the behavior in AIClient-2-API/claude-kiro.js + nameLower := strings.ToLower(name) + if nameLower == "web_search" || nameLower == "websearch" { + log.Debugf("kiro: skipping unsupported tool: %s", name) + continue + } + description := tool.Get("description").String() inputSchemaResult := tool.Get("input_schema") var inputSchema interface{}