From 632a2fd2f2c9bb0439356dafb63e07e52841d06f Mon Sep 17 00:00:00 2001 From: Skyuno Date: Fri, 13 Feb 2026 02:36:11 +0800 Subject: [PATCH] refactor: align GenerateSearchIndicatorEvents return type with other event builders Change GenerateSearchIndicatorEvents to return [][]byte instead of []sseEvent for consistency with BuildFallbackTextEvents and other event building functions. Benefits: - Consistent API across all event generation functions - Eliminates intermediate sseEvent type conversion in caller - Simplifies usage by returning ready-to-send SSE byte slices This addresses the code quality feedback from PR #226 review. --- internal/runtime/executor/kiro_executor.go | 2 +- .../kiro/claude/kiro_claude_stream.go | 93 +++++++++---------- 2 files changed, 45 insertions(+), 50 deletions(-) diff --git a/internal/runtime/executor/kiro_executor.go b/internal/runtime/executor/kiro_executor.go index 9d197769..41a5830c 100644 --- a/internal/runtime/executor/kiro_executor.go +++ b/internal/runtime/executor/kiro_executor.go @@ -4487,7 +4487,7 @@ func (e *KiroExecutor) handleWebSearchStream( select { case <-ctx.Done(): return - case out <- cliproxyexecutor.StreamChunk{Payload: []byte(event.ToSSEString())}: + case out <- cliproxyexecutor.StreamChunk{Payload: event}: } } contentBlockIndex += 2 diff --git a/internal/translator/kiro/claude/kiro_claude_stream.go b/internal/translator/kiro/claude/kiro_claude_stream.go index ab6f0fce..c86b6e02 100644 --- a/internal/translator/kiro/claude/kiro_claude_stream.go +++ b/internal/translator/kiro/claude/kiro_claude_stream.go @@ -194,46 +194,43 @@ func GenerateSearchIndicatorEvents( toolUseID string, searchResults *WebSearchResults, startIndex int, -) []sseEvent { - events := make([]sseEvent, 0, 4) +) [][]byte { + events := make([][]byte, 0, 5) // 1. content_block_start (server_tool_use) - events = append(events, sseEvent{ - Event: "content_block_start", - Data: map[string]interface{}{ - "type": "content_block_start", - "index": startIndex, - "content_block": map[string]interface{}{ - "id": toolUseID, - "type": "server_tool_use", - "name": "web_search", - "input": map[string]interface{}{}, - }, + event1 := map[string]interface{}{ + "type": "content_block_start", + "index": startIndex, + "content_block": map[string]interface{}{ + "id": toolUseID, + "type": "server_tool_use", + "name": "web_search", + "input": map[string]interface{}{}, }, - }) + } + data1, _ := json.Marshal(event1) + events = append(events, []byte("event: content_block_start\ndata: "+string(data1)+"\n\n")) // 2. content_block_delta (input_json_delta) inputJSON, _ := json.Marshal(map[string]string{"query": query}) - events = append(events, sseEvent{ - Event: "content_block_delta", - Data: map[string]interface{}{ - "type": "content_block_delta", - "index": startIndex, - "delta": map[string]interface{}{ - "type": "input_json_delta", - "partial_json": string(inputJSON), - }, + event2 := map[string]interface{}{ + "type": "content_block_delta", + "index": startIndex, + "delta": map[string]interface{}{ + "type": "input_json_delta", + "partial_json": string(inputJSON), }, - }) + } + data2, _ := json.Marshal(event2) + events = append(events, []byte("event: content_block_delta\ndata: "+string(data2)+"\n\n")) // 3. content_block_stop (server_tool_use) - events = append(events, sseEvent{ - Event: "content_block_stop", - Data: map[string]interface{}{ - "type": "content_block_stop", - "index": startIndex, - }, - }) + event3 := map[string]interface{}{ + "type": "content_block_stop", + "index": startIndex, + } + data3, _ := json.Marshal(event3) + events = append(events, []byte("event: content_block_stop\ndata: "+string(data3)+"\n\n")) // 4. content_block_start (web_search_tool_result) searchContent := make([]map[string]interface{}, 0) @@ -252,27 +249,25 @@ func GenerateSearchIndicatorEvents( }) } } - events = append(events, sseEvent{ - Event: "content_block_start", - Data: map[string]interface{}{ - "type": "content_block_start", - "index": startIndex + 1, - "content_block": map[string]interface{}{ - "type": "web_search_tool_result", - "tool_use_id": toolUseID, - "content": searchContent, - }, + event4 := map[string]interface{}{ + "type": "content_block_start", + "index": startIndex + 1, + "content_block": map[string]interface{}{ + "type": "web_search_tool_result", + "tool_use_id": toolUseID, + "content": searchContent, }, - }) + } + data4, _ := json.Marshal(event4) + events = append(events, []byte("event: content_block_start\ndata: "+string(data4)+"\n\n")) // 5. content_block_stop (web_search_tool_result) - events = append(events, sseEvent{ - Event: "content_block_stop", - Data: map[string]interface{}{ - "type": "content_block_stop", - "index": startIndex + 1, - }, - }) + event5 := map[string]interface{}{ + "type": "content_block_stop", + "index": startIndex + 1, + } + data5, _ := json.Marshal(event5) + events = append(events, []byte("event: content_block_stop\ndata: "+string(data5)+"\n\n")) return events }