From 69c172e8a7c0086887b1f93ed5a162f14b6aa0c5 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 2 Sep 2026 06:28:47 +0200 Subject: [PATCH] fix(provider): handle SSE reader cancel rejections (#44944) --- packages/core/src/aisdk.ts | 2 +- packages/opencode/src/provider/provider.ts | 2 +- packages/opencode/test/server/httpapi-v2-pty.test.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/src/aisdk.ts b/packages/core/src/aisdk.ts index b604dac664..a1a973b821 100644 --- a/packages/core/src/aisdk.ts +++ b/packages/core/src/aisdk.ts @@ -35,7 +35,7 @@ function wrapSSE(res: Response, ms: number, ctl: AbortController) { const id = setTimeout(() => { const err = new Error("SSE read timed out") ctl.abort(err) - void reader.cancel(err) + reader.cancel(err).catch(() => {}) reject(err) }, ms) diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index b5980f1587..2c69d8fba9 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -46,7 +46,7 @@ function wrapSSE(res: Response, ms: number, ctl: AbortController) { const id = setTimeout(() => { const err = new ProviderError.ResponseStreamError("SSE read timed out") ctl.abort(err) - void reader.cancel(err) + reader.cancel(err).catch(() => {}) reject(err) }, ms) diff --git a/packages/opencode/test/server/httpapi-v2-pty.test.ts b/packages/opencode/test/server/httpapi-v2-pty.test.ts index ef05dfe1ea..ea4b02dc83 100644 --- a/packages/opencode/test/server/httpapi-v2-pty.test.ts +++ b/packages/opencode/test/server/httpapi-v2-pty.test.ts @@ -81,7 +81,7 @@ describe("v2 pty HttpApi", () => { expect(body.data.title).toBe("v2") // The canonical surface keeps exited sessions observable with their exit code. - const deadline = Date.now() + 5_000 + const deadline = Date.now() + 20_000 let info: { status: string; exitCode?: number } | undefined while (Date.now() < deadline) { const found = await request(`/api/pty/${body.data.id}`, tmp.path)