From 460c626acd9e3de8fdffc27bde99bb5f070bb70f Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Mon, 12 Oct 2026 23:12:44 -0500 Subject: [PATCH] fix(core): disable Bun's fetch idle timeout for provider requests (#55007) --- packages/core/src/effect/app-node-platform.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/core/src/effect/app-node-platform.ts b/packages/core/src/effect/app-node-platform.ts index 2f0070cfb31..5b5aee62f6c 100644 --- a/packages/core/src/effect/app-node-platform.ts +++ b/packages/core/src/effect/app-node-platform.ts @@ -1,12 +1,26 @@ import { LLMClient, RequestExecutor } from "@opencode/ai/route" +import { Effect, Layer } from "effect" +import { FetchHttpClient, HttpClient } from "effect/http" import { Socket } from "effect/socket" import { makeGlobalNode } from "@opencode/util/effect/app-node" import { httpClient } from "@opencode/util/effect/app-node-platform" import { WebSocketConstructor } from "./websocket-constructor.js" +// Bun's fetch ends a request after five quiet minutes, before provider routes' own header and chunk timeouts. +const withoutBunTimeout = Layer.effect( + HttpClient.HttpClient, + Effect.gen(function* () { + const client = yield* HttpClient.HttpClient + return HttpClient.transformResponse( + client, + Effect.provideService(FetchHttpClient.RequestInit, { timeout: false } as BunFetchRequestInit), + ) + }), +) + export const requestExecutor = makeGlobalNode({ service: RequestExecutor.Service, - layer: RequestExecutor.layer, + layer: RequestExecutor.layer.pipe(Layer.provide(withoutBunTimeout)), deps: [httpClient], })