From b8b526ef7f3d658d554f935fd3ca579e76d92ab7 Mon Sep 17 00:00:00 2001 From: shirishpothi Date: Fri, 25 Sep 2026 21:23:31 +0800 Subject: [PATCH 1/2] fix(opencode): accept v2 serve ready line when spawning server OpenCode v2 prints 'server listening on ' instead of 'opencode server listening on '. The exact-prefix match never fired, so managed spawn always hit the 30s startup timeout. Match either line (case-insensitive) and keep extracting the URL. --- apps/server/src/provider/opencodeRuntime.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/server/src/provider/opencodeRuntime.ts b/apps/server/src/provider/opencodeRuntime.ts index e87f758e0e3d..df217d3cb2ed 100644 --- a/apps/server/src/provider/opencodeRuntime.ts +++ b/apps/server/src/provider/opencodeRuntime.ts @@ -78,7 +78,6 @@ export function resolveOpenCodeServerPassword( : input.environment.OPENCODE_SERVER_PASSWORD; } -const OPENCODE_SERVER_READY_PREFIX = "opencode server listening"; const DEFAULT_OPENCODE_SERVER_TIMEOUT_MS = 30_000; const DEFAULT_HOSTNAME = "127.0.0.1"; const OPENCODE_SERVER_STARTUP_MAX_OUTPUT_CHARS = 64 * 1024; @@ -289,7 +288,9 @@ export interface OpenCodeRuntimeShape { function parseServerUrlFromOutput(output: string): string | null { for (const line of output.split("\n")) { - if (!line.startsWith(OPENCODE_SERVER_READY_PREFIX)) { + // OpenCode v1 prints "opencode server listening on "; + // v2 prints "server listening on ". Match either. + if (!line.toLowerCase().includes("server listening")) { continue; } const match = line.match(/on\s+(https?:\/\/[^\s]+)/); From 7ed1560303efee5d952874f1053c86b432628554 Mon Sep 17 00:00:00 2001 From: shirishpothi Date: Fri, 25 Sep 2026 21:27:22 +0800 Subject: [PATCH 2/2] fix(opencode): single-regex ready-line match for v1/v2 serve output --- apps/server/src/provider/opencodeRuntime.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/apps/server/src/provider/opencodeRuntime.ts b/apps/server/src/provider/opencodeRuntime.ts index df217d3cb2ed..d8319bc44a71 100644 --- a/apps/server/src/provider/opencodeRuntime.ts +++ b/apps/server/src/provider/opencodeRuntime.ts @@ -288,13 +288,8 @@ export interface OpenCodeRuntimeShape { function parseServerUrlFromOutput(output: string): string | null { for (const line of output.split("\n")) { - // OpenCode v1 prints "opencode server listening on "; - // v2 prints "server listening on ". Match either. - if (!line.toLowerCase().includes("server listening")) { - continue; - } - const match = line.match(/on\s+(https?:\/\/[^\s]+)/); - return match?.[1] ?? null; + const match = line.match(/server listening on\s+(https?:\/\/[^\s]+)/i); + if (match?.[1]) return match[1]; } return null; }