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.
This commit is contained in:
Skyuno
2026-02-13 02:36:11 +08:00
parent 5626637fbd
commit 632a2fd2f2
2 changed files with 45 additions and 50 deletions

View File

@@ -4487,7 +4487,7 @@ func (e *KiroExecutor) handleWebSearchStream(
select { select {
case <-ctx.Done(): case <-ctx.Done():
return return
case out <- cliproxyexecutor.StreamChunk{Payload: []byte(event.ToSSEString())}: case out <- cliproxyexecutor.StreamChunk{Payload: event}:
} }
} }
contentBlockIndex += 2 contentBlockIndex += 2

View File

@@ -194,46 +194,43 @@ func GenerateSearchIndicatorEvents(
toolUseID string, toolUseID string,
searchResults *WebSearchResults, searchResults *WebSearchResults,
startIndex int, startIndex int,
) []sseEvent { ) [][]byte {
events := make([]sseEvent, 0, 4) events := make([][]byte, 0, 5)
// 1. content_block_start (server_tool_use) // 1. content_block_start (server_tool_use)
events = append(events, sseEvent{ event1 := map[string]interface{}{
Event: "content_block_start", "type": "content_block_start",
Data: map[string]interface{}{ "index": startIndex,
"type": "content_block_start", "content_block": map[string]interface{}{
"index": startIndex, "id": toolUseID,
"content_block": map[string]interface{}{ "type": "server_tool_use",
"id": toolUseID, "name": "web_search",
"type": "server_tool_use", "input": map[string]interface{}{},
"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) // 2. content_block_delta (input_json_delta)
inputJSON, _ := json.Marshal(map[string]string{"query": query}) inputJSON, _ := json.Marshal(map[string]string{"query": query})
events = append(events, sseEvent{ event2 := map[string]interface{}{
Event: "content_block_delta", "type": "content_block_delta",
Data: map[string]interface{}{ "index": startIndex,
"type": "content_block_delta", "delta": map[string]interface{}{
"index": startIndex, "type": "input_json_delta",
"delta": map[string]interface{}{ "partial_json": string(inputJSON),
"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) // 3. content_block_stop (server_tool_use)
events = append(events, sseEvent{ event3 := map[string]interface{}{
Event: "content_block_stop", "type": "content_block_stop",
Data: map[string]interface{}{ "index": startIndex,
"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) // 4. content_block_start (web_search_tool_result)
searchContent := make([]map[string]interface{}, 0) searchContent := make([]map[string]interface{}, 0)
@@ -252,27 +249,25 @@ func GenerateSearchIndicatorEvents(
}) })
} }
} }
events = append(events, sseEvent{ event4 := map[string]interface{}{
Event: "content_block_start", "type": "content_block_start",
Data: map[string]interface{}{ "index": startIndex + 1,
"type": "content_block_start", "content_block": map[string]interface{}{
"index": startIndex + 1, "type": "web_search_tool_result",
"content_block": map[string]interface{}{ "tool_use_id": toolUseID,
"type": "web_search_tool_result", "content": searchContent,
"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) // 5. content_block_stop (web_search_tool_result)
events = append(events, sseEvent{ event5 := map[string]interface{}{
Event: "content_block_stop", "type": "content_block_stop",
Data: map[string]interface{}{ "index": startIndex + 1,
"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 return events
} }