diff --git a/frontend/components/gemini/GeminiChat.tsx b/frontend/components/gemini/GeminiChat.tsx index f238f86..e20c561 100644 --- a/frontend/components/gemini/GeminiChat.tsx +++ b/frontend/components/gemini/GeminiChat.tsx @@ -332,6 +332,23 @@ export function GeminiChat() { }) ); + } else if (event.type === "status") { + // status 事件:确保 assistant 消息占位符已存在(trace 面板早于 token 出现) + setConversations((prev) => + prev.map((c) => { + if (c.id !== streamConvId) return c; + const exists = c.messages.some((m) => m.id === aiMsgId); + if (exists) return c; + return { + ...c, + messages: [ + ...c.messages, + { id: aiMsgId, role: "assistant" as const, content: "", timestamp: new Date(), traceItems: [] }, + ], + }; + }) + ); + } else if (event.type === "tool_start" && event.tool) { const item: TraceItem = { id: event.call_id ?? `${event.tool}-${event.ts ?? Date.now()}`, @@ -447,6 +464,23 @@ export function GeminiChat() { }; }) ); + } else if (event.type === "status") { + // status 事件:确保 assistant 消息占位符已存在(trace 面板早于 token 出现) + setConversations((prev) => + prev.map((c) => { + if (c.id !== regenConvId) return c; + const exists = c.messages.some((m) => m.id === newAiMsgId); + if (exists) return c; + return { + ...c, + messages: [ + ...c.messages, + { id: newAiMsgId, role: "assistant" as const, content: "", timestamp: new Date(), traceItems: [] }, + ], + }; + }) + ); + } else if (event.type === "tool_start" && event.tool) { const item: TraceItem = { id: event.call_id ?? `${event.tool}-${event.ts ?? Date.now()}`,