From 8a61de15fa1c0647c8f6668b5d0136e37355944d Mon Sep 17 00:00:00 2001 From: Harivansh Rathi Date: Fri, 6 Mar 2026 01:25:22 -0800 Subject: [PATCH] Add reasoning events and abort-aware finish reason to chat endpoint Map thinking_start/delta/end to Vercel AI SDK reasoning-start/delta/end chunk types. Derive finish reason from enqueueMessage result - aborted sessions get a clean finish with reason "error" instead of an error chunk. --- .../coding-agent/src/core/gateway-runtime.ts | 7 ++++++- .../coding-agent/src/core/vercel-ai-stream.ts | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/coding-agent/src/core/gateway-runtime.ts b/packages/coding-agent/src/core/gateway-runtime.ts index 71d919c4..84cd28bc 100644 --- a/packages/coding-agent/src/core/gateway-runtime.ts +++ b/packages/coding-agent/src/core/gateway-runtime.ts @@ -638,7 +638,12 @@ export class GatewayRuntime { if (result.ok) { finishVercelStream(response, "stop"); } else { - errorVercelStream(response, result.error ?? "Unknown error"); + const isAbort = result.error?.includes("aborted"); + if (isAbort) { + finishVercelStream(response, "error"); + } else { + errorVercelStream(response, result.error ?? "Unknown error"); + } } } } catch (error) { diff --git a/packages/coding-agent/src/core/vercel-ai-stream.ts b/packages/coding-agent/src/core/vercel-ai-stream.ts index 728b5eb7..5ff7dd01 100644 --- a/packages/coding-agent/src/core/vercel-ai-stream.ts +++ b/packages/coding-agent/src/core/vercel-ai-stream.ts @@ -125,6 +125,25 @@ export function createVercelStreamListener( input: inner.toolCall.arguments, }); return; + case "thinking_start": + writeChunk(response, { + type: "reasoning-start", + id: `reasoning_${inner.contentIndex}`, + }); + return; + case "thinking_delta": + writeChunk(response, { + type: "reasoning-delta", + id: `reasoning_${inner.contentIndex}`, + delta: inner.delta, + }); + return; + case "thinking_end": + writeChunk(response, { + type: "reasoning-end", + id: `reasoning_${inner.contentIndex}`, + }); + return; } return; }