From 33773ff17eb7dcdb3a020b0d0a1c27ac0df86125 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sat, 28 Mar 2026 16:13:52 -0700 Subject: [PATCH] Harden Claude stream exit handling (#1504) --- .../src/provider/Layers/ClaudeAdapter.ts | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/apps/server/src/provider/Layers/ClaudeAdapter.ts b/apps/server/src/provider/Layers/ClaudeAdapter.ts index b0f080118e8d0525321bb21f7d87f0195ede6460..6b50bd4fbbabdcdcde2b1fdda2da18b078df81c3 100644 --- a/apps/server/src/provider/Layers/ClaudeAdapter.ts +++ b/apps/server/src/provider/Layers/ClaudeAdapter.ts @@ -2817,16 +2817,25 @@ const makeClaudeAdapter = Effect.fn("makeClaudeAdapter")(function* ( providerRefs: {}, }); - const streamFiber = runFork(runSdkStream(context)); + let streamFiber: Fiber.Fiber; + streamFiber = runFork( + Effect.exit(runSdkStream(context)).pipe( + Effect.flatMap((exit) => { + if (context.stopped) { + return Effect.void; + } + if (context.streamFiber === streamFiber) { + context.streamFiber = undefined; + } + return handleStreamExit(context, exit); + }), + ), + ); context.streamFiber = streamFiber; - streamFiber.addObserver((exit) => { - if (context.stopped) { - return; - } + streamFiber.addObserver(() => { if (context.streamFiber === streamFiber) { context.streamFiber = undefined; } - runFork(handleStreamExit(context, exit)); }); return { -- 2.54.0