From dbd8259ddf4e601cc67231730a571ff38d9e8758 Mon Sep 17 00:00:00 2001 From: moose-lab Date: Sat, 30 May 2026 23:05:44 +0800 Subject: [PATCH] fix: defer provider user stream event --- src/core/__tests__/api-session-runtime.test.ts | 4 ++-- src/core/api-session-runtime.ts | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/__tests__/api-session-runtime.test.ts b/src/core/__tests__/api-session-runtime.test.ts index 2b45fae..3e1c168 100644 --- a/src/core/__tests__/api-session-runtime.test.ts +++ b/src/core/__tests__/api-session-runtime.test.ts @@ -87,7 +87,7 @@ test("runProviderSessionTurn executes API mode without a Local CLI process", asy ); assert.deepEqual( events.map((event) => event.type), - ["message", "status", "text_delta", "message", "turn_end", "status"], + ["status", "message", "text_delta", "message", "turn_end", "status"], ); }); @@ -193,6 +193,6 @@ test("runProviderSessionTurn removes the pending user message after the session ); assert.deepEqual( events.map((event) => event.type), - ["message", "status"], + ["status"], ); }); diff --git a/src/core/api-session-runtime.ts b/src/core/api-session-runtime.ts index ac5a4c5..78fa97d 100644 --- a/src/core/api-session-runtime.ts +++ b/src/core/api-session-runtime.ts @@ -94,7 +94,6 @@ export async function runProviderSessionTurn({ const insertedUser = db.prepare( "INSERT INTO session_messages (session_id, role, content) VALUES (?, 'user', ?)", ).run(sessionId, message); - emit(sessionId, { type: "message", role: "user", content: message }); db.prepare("UPDATE sessions SET status = 'running' WHERE id = ?").run( sessionId, @@ -116,6 +115,8 @@ export async function runProviderSessionTurn({ }; } + emit(sessionId, { type: "message", role: "user", content: message }); + if (!result.ok) { db.prepare( "UPDATE sessions SET status = 'failed', ended_at = datetime('now') WHERE id = ?",