From b24f4e3d2c879ba1bfc6c0600c274f891f50055a Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Thu, 16 Oct 2025 17:47:41 -0500 Subject: [PATCH] fix: timeout option (#3229) --- packages/opencode/src/provider/provider.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index b4e87efc..6e78ccbc 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -413,8 +413,21 @@ export namespace Provider { const mod = await import(modPath) if (options["timeout"] !== undefined) { // Only override fetch if user explicitly sets timeout - options["fetch"] = async (input: any, init?: any) => { - return await fetch(input, { ...init, timeout: options["timeout"] }) + options["fetch"] = async (input: any, init?: BunFetchRequestInit) => { + const { signal, ...rest } = init ?? {} + + const signals: AbortSignal[] = [] + if (signal) signals.push(signal) + signals.push(AbortSignal.timeout(options["timeout"])) + + const combined = signals.length > 1 ? AbortSignal.any(signals) : signals[0] + + return fetch(input, { + ...rest, + signal: combined, + // @ts-ignore see here: https://github.com/oven-sh/bun/issues/16682 + timeout: false, + }) } } const fn = mod[Object.keys(mod).find((key) => key.startsWith("create"))!]