From 857c931911aa43a8ecdaa6d0afa69afedc9965ed Mon Sep 17 00:00:00 2001 From: zhb <50901800+zhbdesign@users.noreply.github.com> Date: Sat, 20 Jun 2026 10:46:43 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E4=BB=A3=E7=A0=81=E6=89=93?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 迁移代码打包 --- src/server/services/conversationService.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/server/services/conversationService.ts b/src/server/services/conversationService.ts index d2611769..69c1bc02 100644 --- a/src/server/services/conversationService.ts +++ b/src/server/services/conversationService.ts @@ -694,11 +694,21 @@ export class ConversationService { return true } - detachSdkConnection(sessionId: string): void { + detachSdkConnection( + sessionId: string, + socket?: { send(data: string): void }, + ): void { const session = this.sessions.get(sessionId) - if (session) { - session.sdkSocket = null + if (!session) return + // Only clear sdkSocket when the closing socket is the one currently + // attached. During a restart transition the old CLI's WS close event + // can arrive AFTER the new CLI has already connected its own SDK WS — + // blindly nulling here would clobber the fresh connection and leave + // outbound messages stranded in pendingOutbound forever. + if (socket && session.sdkSocket && session.sdkSocket !== socket) { + return } + session.sdkSocket = null } handleSdkPayload(sessionId: string, rawPayload: string): void {