From 05df7749f0ce462916cd0db807033df2606be20f Mon Sep 17 00:00:00 2001 From: pash-openai Date: Fri, 21 Aug 2026 09:10:17 -0700 Subject: [PATCH] fix(codex): accept newer desktop app-server versions (#126450) (#127269) (cherry picked from commit 841f25eae629668639e880c26c14ab6fa0f09a56) Co-authored-by: Josh Lehman --- .../codex/src/app-server/client.test.ts | 24 +++++++++---------- extensions/codex/src/app-server/client.ts | 14 ++++++++++- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/extensions/codex/src/app-server/client.test.ts b/extensions/codex/src/app-server/client.test.ts index 7bea523a3b4f..25837dc21e58 100644 --- a/extensions/codex/src/app-server/client.test.ts +++ b/extensions/codex/src/app-server/client.test.ts @@ -431,19 +431,19 @@ describe("CodexAppServerClient", () => { expect(harness.writes).toHaveLength(1); }); - it("blocks stable Codex app-server versions newer than generated schemas", async () => { - const newerVersion = "0.146.1"; - const { harness, initializing, outbound } = startInitialize(); - harness.send({ - id: outbound.id, - result: { userAgent: `openclaw/${newerVersion} (macOS; test)` }, - }); + it.each(["0.146.1", "0.149.0"])( + "accepts newer stable Codex app-server version %s", + async (newerVersion) => { + const { harness, initializing, outbound } = startInitialize(); + harness.send({ + id: outbound.id, + result: { userAgent: `openclaw/${newerVersion} (macOS; test)` }, + }); - await expect(initializing).rejects.toThrow( - `Codex app-server ${CODEX_APP_SERVER_VERSION} is required`, - ); - expect(harness.writes).toHaveLength(1); - }); + await expect(initializing).resolves.toBeUndefined(); + expect(harness.writes).toHaveLength(2); + }, + ); it("blocks app-server initialize responses without a version", async () => { const { harness, initializing, outbound } = startInitialize(); diff --git a/extensions/codex/src/app-server/client.ts b/extensions/codex/src/app-server/client.ts index 2c83958f0f1d..ada0f96b6fe3 100644 --- a/extensions/codex/src/app-server/client.ts +++ b/extensions/codex/src/app-server/client.ts @@ -1047,9 +1047,21 @@ class CodexAppServerVersionError extends Error { function assertSupportedCodexAppServerVersion(response: CodexInitializeResponse): string { const detectedVersion = readCodexVersionFromUserAgent(response.userAgent); - if (detectedVersion !== CODEX_APP_SERVER_VERSION) { + // External app-servers may advance independently of OpenClaw's bundled runtime. + // Keep the reviewed stable release as a compatibility floor, not an exact pin. + if ( + !detectedVersion || + !/^\d+\.\d+\.\d+$/.test(detectedVersion) || + detectedVersion.localeCompare(CODEX_APP_SERVER_VERSION, "en", { numeric: true }) < 0 + ) { throw new CodexAppServerVersionError(detectedVersion); } + if (detectedVersion !== CODEX_APP_SERVER_VERSION) { + embeddedAgentLog.warn( + "codex app-server is newer than OpenClaw's managed runtime; continuing with normal startup validation", + { detectedVersion, validatedVersion: CODEX_APP_SERVER_VERSION }, + ); + } return detectedVersion; }