From 81f298c2ea0b63d1bd87ca2bfca7e5c9a486cd8d Mon Sep 17 00:00:00 2001 From: makoMako <48956204+zhu-jl18@users.noreply.github.com> Date: Thu, 8 Jan 2026 14:52:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(parser):=20=E4=BF=AE=E5=A4=8D=20Gemini=20in?= =?UTF-8?q?it=20=E4=BA=8B=E4=BB=B6=20session=5Fid=20=E6=9C=AA=E6=8F=90?= =?UTF-8?q?=E5=8F=96=E7=9A=84=E9=97=AE=E9=A2=98=20(#111)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gemini CLI 的 session_id 出现在 init 事件中,但 parser 的 isGemini 判定条件只检查 role/delta/status 字段,导致 init 事件被当作 "Unknown event" 忽略,session_id 无法提取。 修复方案:在 isGemini 条件中增加对 init 事件的识别。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude --- codeagent-wrapper/main_test.go | 10 ++++++++++ codeagent-wrapper/parser.go | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/codeagent-wrapper/main_test.go b/codeagent-wrapper/main_test.go index 5774068..d80801f 100644 --- a/codeagent-wrapper/main_test.go +++ b/codeagent-wrapper/main_test.go @@ -2096,6 +2096,16 @@ func TestBackendParseJSONStream_GeminiEvents(t *testing.T) { } } +func TestBackendParseJSONStream_GeminiInitEventSessionID(t *testing.T) { + input := `{"type":"init","session_id":"gemini-abc123"}` + + _, threadID := parseJSONStream(strings.NewReader(input)) + + if threadID != "gemini-abc123" { + t.Fatalf("threadID=%q, want %q", threadID, "gemini-abc123") + } +} + func TestBackendParseJSONStream_GeminiEvents_DeltaFalseStillDetected(t *testing.T) { input := `{"type":"init","session_id":"xyz789"} {"type":"message","content":"Hi","delta":false,"session_id":"xyz789"} diff --git a/codeagent-wrapper/parser.go b/codeagent-wrapper/parser.go index 165b0b2..60b2142 100644 --- a/codeagent-wrapper/parser.go +++ b/codeagent-wrapper/parser.go @@ -171,7 +171,7 @@ func parseJSONStreamInternal(r io.Reader, warnFn func(string), infoFn func(strin if !isClaude && event.Type == "result" && event.SessionID != "" && event.Status == "" { isClaude = true } - isGemini := event.Role != "" || event.Delta != nil || event.Status != "" + isGemini := (event.Type == "init" && event.SessionID != "") || event.Role != "" || event.Delta != nil || event.Status != "" // Handle Codex events if isCodex {