From 847b74ffb8622025fb814f3ab3d888b72f6304ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AD=A6=E9=98=B3?= Date: Thu, 7 May 2026 17:25:30 +0800 Subject: [PATCH] Keep backend runs alive on client disconnect --- frontend/app/app/api/chat/route.ts | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/frontend/app/app/api/chat/route.ts b/frontend/app/app/api/chat/route.ts index 3a60e04..4d239c5 100644 --- a/frontend/app/app/api/chat/route.ts +++ b/frontend/app/app/api/chat/route.ts @@ -110,10 +110,6 @@ export async function POST(req: Request) { writer.write({ type: "start-step" }); try { - const cancelOnAbort = () => { - void cancelClawRun(account.id, sessionId, streamState.runId); - }; - req.signal.addEventListener("abort", cancelOnAbort, { once: true }); const startedAt = Date.now(); writer.write({ type: "reasoning-start", id: "reasoning-1" }); writer.write({ @@ -129,9 +125,7 @@ export async function POST(req: Request) { resumeId, writer, streamState, - req.signal, ); - req.signal.removeEventListener("abort", cancelOnAbort); const elapsedMs = payload.elapsed_ms ?? Date.now() - startedAt; const text = formatClawResponse(payload); @@ -351,13 +345,11 @@ async function callClawBackendStream( resumeSessionId?: string, writer?: UIMessageStreamWriter, streamState?: StreamState, - signal?: AbortSignal, ): Promise { try { const response = await fetch(`${CLAW_API_URL}/api/chat/stream`, { method: "POST", headers: { "content-type": "application/json" }, - signal, body: JSON.stringify({ prompt, runtime_context: runtimeContext, @@ -390,26 +382,6 @@ async function callClawBackendStream( } } -async function cancelClawRun( - accountId: string, - sessionId: string, - runId?: string, -) { - try { - await fetch(`${CLAW_API_URL}/api/runs/cancel`, { - method: "POST", - headers: { "content-type": "application/json" }, - body: JSON.stringify({ - account_id: accountId, - session_id: sessionId, - ...(runId ? { run_id: runId } : {}), - }), - }); - } catch { - // 浏览器关闭或网络中断时,取消请求本身也可能失败;后端流断开仍会结束本次响应。 - } -} - async function consumeClawStream( body: ReadableStream, writer?: UIMessageStreamWriter,