chore(codex): bump app-server to 0.143.0

This commit is contained in:
Vincent Koc 2026-07-08 16:19:37 -07:00
parent 1cc0a95b14
commit 366258dee6
No known key found for this signature in database
16 changed files with 301 additions and 124 deletions

View file

@ -8,16 +8,16 @@
"name": "@openclaw/codex",
"version": "2026.7.1-beta.3",
"dependencies": {
"@openai/codex": "0.142.5",
"@openai/codex": "0.143.0",
"typebox": "1.3.3",
"ws": "8.21.0",
"zod": "4.4.3"
}
},
"node_modules/@openai/codex": {
"version": "0.142.5",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.142.5.tgz",
"integrity": "sha512-WQEpD7l3k68eIAP0aq28EdR18ENBAf8DyprzFhzNwCOQJSv4nHzpwT8Fl30IJacprko2ZCmUBZjM2u941l2yLw==",
"version": "0.143.0",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.143.0.tgz",
"integrity": "sha512-6h53sNtESIYncWVwU7zEjdVajwcad/0H94MOrgGqhwBMa9RRUDVG6DU9E9euC7yRdtrsKDAkJkz/m5moZ6MU3A==",
"license": "Apache-2.0",
"bin": {
"codex": "bin/codex.js"
@ -26,19 +26,19 @@
"node": ">=16"
},
"optionalDependencies": {
"@openai/codex-darwin-arm64": "npm:@openai/codex@0.142.5-darwin-arm64",
"@openai/codex-darwin-x64": "npm:@openai/codex@0.142.5-darwin-x64",
"@openai/codex-linux-arm64": "npm:@openai/codex@0.142.5-linux-arm64",
"@openai/codex-linux-x64": "npm:@openai/codex@0.142.5-linux-x64",
"@openai/codex-win32-arm64": "npm:@openai/codex@0.142.5-win32-arm64",
"@openai/codex-win32-x64": "npm:@openai/codex@0.142.5-win32-x64"
"@openai/codex-darwin-arm64": "npm:@openai/codex@0.143.0-darwin-arm64",
"@openai/codex-darwin-x64": "npm:@openai/codex@0.143.0-darwin-x64",
"@openai/codex-linux-arm64": "npm:@openai/codex@0.143.0-linux-arm64",
"@openai/codex-linux-x64": "npm:@openai/codex@0.143.0-linux-x64",
"@openai/codex-win32-arm64": "npm:@openai/codex@0.143.0-win32-arm64",
"@openai/codex-win32-x64": "npm:@openai/codex@0.143.0-win32-x64"
}
},
"node_modules/@openai/codex-darwin-arm64": {
"name": "@openai/codex",
"version": "0.142.5-darwin-arm64",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.142.5-darwin-arm64.tgz",
"integrity": "sha512-l43p8xv+Z/2/b6fCUc7/FmcQZsaPB7RFizLponGwHAnFOWe3i9Vky69p+up3BUam9AetoQQUv7Mo+2KdaFEqhA==",
"version": "0.143.0-darwin-arm64",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.143.0-darwin-arm64.tgz",
"integrity": "sha512-hs9bPkE1c0+EtbHxxVfhaaGl1u6/LVdhEtOX5t9N+ri54yjMUkzKJLc7MOBa1DYRMDTWT+lPEfeB+8Fv9coTKg==",
"cpu": [
"arm64"
],
@ -53,9 +53,9 @@
},
"node_modules/@openai/codex-darwin-x64": {
"name": "@openai/codex",
"version": "0.142.5-darwin-x64",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.142.5-darwin-x64.tgz",
"integrity": "sha512-yk6A06/VmW7NFsa48OVPaj//g/zeSpd79wjuqfXZwW8ZKRYQm3+wCd3hWjPl79F3QnXvDvM2j3JMIBL3m3GXXg==",
"version": "0.143.0-darwin-x64",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.143.0-darwin-x64.tgz",
"integrity": "sha512-xHbrb/Qkj+ZZqYkAuio3mcFxpqlg/NNpBDz5iMKlGa7XfK3miUu6R50c9cRW1ZPQVRfRnFhs4l7OhI5u5r+HvA==",
"cpu": [
"x64"
],
@ -70,9 +70,9 @@
},
"node_modules/@openai/codex-linux-arm64": {
"name": "@openai/codex",
"version": "0.142.5-linux-arm64",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.142.5-linux-arm64.tgz",
"integrity": "sha512-77ka5PSnm5HdxdBT99IwntCasmbqevlS0eiC0AtEb6ZXCLkim2gm0AWm+jNYy0EhbssvNK+KghayWo34HMgXeA==",
"version": "0.143.0-linux-arm64",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.143.0-linux-arm64.tgz",
"integrity": "sha512-1TMx1a/YBEY0SBhPGn8z9HjOpaDssw+WJiIi/+r0CB5uZf6qnALN02TrZTZl2PSUI8olnBf/VccjnwVCrzR38w==",
"cpu": [
"arm64"
],
@ -87,9 +87,9 @@
},
"node_modules/@openai/codex-linux-x64": {
"name": "@openai/codex",
"version": "0.142.5-linux-x64",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.142.5-linux-x64.tgz",
"integrity": "sha512-pxY+d3NgNE57Y/MApD3/TZUAygxJN6I9h3ZeDUwe67mxWjUxsuapxMRFTKSznCalYbRAeZp752+AAXmUbmguEg==",
"version": "0.143.0-linux-x64",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.143.0-linux-x64.tgz",
"integrity": "sha512-B6v6oUgBbjt1bL7yBbRp7e0vLiVOjRdz9Wykotve52Aq2H2TeiCqxM5BSOaFkmNO6VxE0seW7hTi2UZF9x8LLA==",
"cpu": [
"x64"
],
@ -104,9 +104,9 @@
},
"node_modules/@openai/codex-win32-arm64": {
"name": "@openai/codex",
"version": "0.142.5-win32-arm64",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.142.5-win32-arm64.tgz",
"integrity": "sha512-65BEqGbUZ7r0ayunIHdBjo5crwgbwKX/6puOcO+VCswUw/dXvDsN2IGcbXB52+bS9U5+FxP783cUHfTT6m40DQ==",
"version": "0.143.0-win32-arm64",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.143.0-win32-arm64.tgz",
"integrity": "sha512-8ntYPI3IQWZuayL214tYanuYhom23RxHUWRkmay45hGymEW4TwwFqzppKXEzcBXrCF5uSWlOMMG+B2elN6kWuQ==",
"cpu": [
"arm64"
],
@ -121,9 +121,9 @@
},
"node_modules/@openai/codex-win32-x64": {
"name": "@openai/codex",
"version": "0.142.5-win32-x64",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.142.5-win32-x64.tgz",
"integrity": "sha512-a+wI4PEx9a2fg6V5ueTTDkOkr1XpEvA5RFXIbo/L2hOfzMmGtyRnbG24bCGu5Q2RSgVxSQV0aLkdb3vdYMNH9A==",
"version": "0.143.0-win32-x64",
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.143.0-win32-x64.tgz",
"integrity": "sha512-d60HLkzSQ7rdL35xPxH1x3g8DuJjEbhEx1UOK5ivA1PBD9eWvP46rtdHkSvCZyqHUhaHFr5We2SugE9+Y8HhVA==",
"cpu": [
"x64"
],

View file

@ -8,7 +8,7 @@
},
"type": "module",
"dependencies": {
"@openai/codex": "0.142.5",
"@openai/codex": "0.143.0",
"typebox": "1.3.3",
"ws": "8.21.0",
"zod": "4.4.3"

View file

@ -141,7 +141,7 @@ async function answerInitialize(harness: ClientHarness): Promise<void> {
timeout: HARNESS_REQUEST_TIMEOUT_MS,
});
const initialize = JSON.parse(harness.writes[0] ?? "{}") as { id?: number };
harness.send({ id: initialize.id, result: { userAgent: "openclaw/0.142.0 (macOS; test)" } });
harness.send({ id: initialize.id, result: { userAgent: "openclaw/0.143.0 (macOS; test)" } });
}
async function waitForRequest(

View file

@ -224,7 +224,7 @@ describe("CodexAppServerClient", () => {
const { harness, initializing, outbound } = startInitialize();
harness.send({
id: outbound.id,
result: { userAgent: "openclaw/0.142.0 (macOS; test)" },
result: { userAgent: "openclaw/0.143.0 (macOS; test)" },
});
await expect(initializing).resolves.toBeUndefined();
@ -263,11 +263,11 @@ describe("CodexAppServerClient", () => {
const { harness, initializing, outbound } = startInitialize();
harness.send({
id: outbound.id,
result: { userAgent: "openclaw/0.142.0-alpha.2 (macOS; test)" },
result: { userAgent: "openclaw/0.143.0-alpha.2 (macOS; test)" },
});
await expect(initializing).rejects.toThrow(
`Codex app-server ${MIN_CODEX_APP_SERVER_VERSION} or newer is required, but detected 0.142.0-alpha.2`,
`Codex app-server ${MIN_CODEX_APP_SERVER_VERSION} or newer is required, but detected 0.143.0-alpha.2`,
);
expect(harness.writes).toHaveLength(1);
});
@ -276,11 +276,11 @@ describe("CodexAppServerClient", () => {
const { harness, initializing, outbound } = startInitialize();
harness.send({
id: outbound.id,
result: { userAgent: "openclaw/0.142.0+alpha.2 (macOS; test)" },
result: { userAgent: "openclaw/0.143.0+alpha.2 (macOS; test)" },
});
await expect(initializing).rejects.toThrow(
`Codex app-server ${MIN_CODEX_APP_SERVER_VERSION} or newer is required, but detected 0.142.0+alpha.2`,
`Codex app-server ${MIN_CODEX_APP_SERVER_VERSION} or newer is required, but detected 0.143.0+alpha.2`,
);
expect(harness.writes).toHaveLength(1);
});
@ -289,7 +289,7 @@ describe("CodexAppServerClient", () => {
const { harness, initializing, outbound } = startInitialize();
harness.send({
id: outbound.id,
result: { userAgent: "openclaw/0.143.0-alpha.1 (macOS; test)" },
result: { userAgent: "openclaw/0.144.0-alpha.1 (macOS; test)" },
});
await expect(initializing).resolves.toBeUndefined();
@ -300,7 +300,7 @@ describe("CodexAppServerClient", () => {
const { harness, initializing, outbound } = startInitialize();
harness.send({
id: outbound.id,
result: { userAgent: "openclaw/0.143.0+custom (macOS; test)" },
result: { userAgent: "openclaw/0.144.0+custom (macOS; test)" },
});
await expect(initializing).resolves.toBeUndefined();
@ -488,7 +488,7 @@ describe("CodexAppServerClient", () => {
it("reads the Codex version from the app-server user agent", () => {
expect(readCodexVersionFromUserAgent("Codex Desktop/0.125.0")).toBe("0.125.0");
expect(readCodexVersionFromUserAgent("openclaw/0.142.0 (macOS; test)")).toBe("0.142.0");
expect(readCodexVersionFromUserAgent("openclaw/0.143.0 (macOS; test)")).toBe("0.143.0");
expect(readCodexVersionFromUserAgent("codex_cli_rs/0.125.0-dev (linux; test)")).toBe(
"0.125.0-dev",
);

View file

@ -70,7 +70,7 @@ describe("listCodexAppServerModels", () => {
const initialize = JSON.parse(harness.writes[0] ?? "{}") as { id?: number };
harness.send({
id: initialize.id,
result: { userAgent: "openclaw/0.142.0 (macOS; test)" },
result: { userAgent: "openclaw/0.143.0 (macOS; test)" },
});
await vi.waitFor(() => expect(harness.writes.length).toBeGreaterThanOrEqual(3));
const list = JSON.parse(harness.writes[2] ?? "{}") as { id?: number; method?: string };
@ -132,7 +132,7 @@ describe("listCodexAppServerModels", () => {
const initialize = JSON.parse(harness.writes[0] ?? "{}") as { id?: number };
harness.send({
id: initialize.id,
result: { userAgent: "openclaw/0.142.0 (macOS; test)" },
result: { userAgent: "openclaw/0.143.0 (macOS; test)" },
});
await vi.waitFor(() => expect(harness.writes.length).toBeGreaterThanOrEqual(3));
const firstList = JSON.parse(harness.writes[2] ?? "{}") as {
@ -212,7 +212,7 @@ describe("listCodexAppServerModels", () => {
const initialize = JSON.parse(harness.writes[0] ?? "{}") as { id?: number };
harness.send({
id: initialize.id,
result: { userAgent: "openclaw/0.142.0 (macOS; test)" },
result: { userAgent: "openclaw/0.143.0 (macOS; test)" },
});
await vi.waitFor(() => expect(harness.writes.length).toBeGreaterThanOrEqual(3));
const firstList = JSON.parse(harness.writes[2] ?? "{}") as { id?: number };

View file

@ -124,6 +124,7 @@
{
"enum": [
"contextWindowExceeded",
"sessionBudgetExceeded",
"usageLimitExceeded",
"serverOverloaded",
"cyberPolicy",

View file

@ -79,7 +79,6 @@
{
"enum": [
"untrusted",
"on-failure",
"on-request",
"never"
],
@ -229,6 +228,7 @@
{
"enum": [
"contextWindowExceeded",
"sessionBudgetExceeded",
"usageLimitExceeded",
"serverOverloaded",
"cyberPolicy",
@ -541,6 +541,18 @@
},
"McpToolCallAppContext": {
"properties": {
"actionName": {
"type": [
"string",
"null"
]
},
"appName": {
"type": [
"string",
"null"
]
},
"connectorId": {
"type": "string"
},
@ -555,6 +567,12 @@
"string",
"null"
]
},
"templateId": {
"type": [
"string",
"null"
]
}
},
"required": [
@ -663,13 +681,29 @@
]
},
"MultiAgentMode": {
"description": "Controls whether the model receives multi-agent delegation instructions and, when it does, whether it should only spawn sub-agents after an explicit user request or may delegate proactively when doing so would help. `none` leaves the multi-agent tools available without injecting delegation instructions.",
"enum": [
"none",
"explicitRequestOnly",
"proactive"
],
"type": "string"
"description": "Controls the effective multi-agent delegation instructions for a turn. `custom` means the configured mode hint defines the policy instead of a built-in policy.",
"oneOf": [
{
"additionalProperties": false,
"properties": {
"custom": {
"type": "string"
}
},
"required": [
"custom"
],
"title": "CustomMultiAgentMode",
"type": "object"
},
{
"enum": [
"explicitRequestOnly",
"proactive"
],
"type": "string"
}
]
},
"NetworkAccess": {
"enum": [
@ -1040,6 +1074,17 @@
"description": "Whether the thread is ephemeral and should not be materialized on disk.",
"type": "boolean"
},
"extra": {
"anyOf": [
{
"$ref": "#/definitions/ThreadExtra"
},
{
"type": "null"
}
],
"description": "Optional implementation-specific thread data."
},
"forkedFromId": {
"description": "Source thread id when this thread was created by forking another thread.",
"type": [
@ -1058,7 +1103,17 @@
],
"description": "Optional Git metadata captured when the thread was created."
},
"historyMode": {
"allOf": [
{
"$ref": "#/definitions/ThreadHistoryMode"
}
],
"default": "legacy",
"description": "Persisted thread history contract selected when this thread was created."
},
"id": {
"description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.",
"type": "string"
},
"modelProvider": {
@ -1165,6 +1220,17 @@
],
"type": "string"
},
"ThreadExtra": {
"description": "Extra app-server data for a thread.",
"type": "object"
},
"ThreadHistoryMode": {
"enum": [
"legacy",
"paginated"
],
"type": "string"
},
"ThreadId": {
"type": "string"
},
@ -1751,7 +1817,7 @@
"type": "string"
},
"path": {
"$ref": "#/definitions/AbsolutePathBuf"
"$ref": "#/definitions/LegacyAppPathString"
},
"type": {
"enum": [
@ -2017,6 +2083,7 @@
"description": "Only populated when the Turn's status is failed."
},
"id": {
"description": "Identifier for this turn. Codex-generated turn IDs are UUIDv7.",
"type": "string"
},
"items": {

View file

@ -79,7 +79,6 @@
{
"enum": [
"untrusted",
"on-failure",
"on-request",
"never"
],
@ -229,6 +228,7 @@
{
"enum": [
"contextWindowExceeded",
"sessionBudgetExceeded",
"usageLimitExceeded",
"serverOverloaded",
"cyberPolicy",
@ -541,6 +541,18 @@
},
"McpToolCallAppContext": {
"properties": {
"actionName": {
"type": [
"string",
"null"
]
},
"appName": {
"type": [
"string",
"null"
]
},
"connectorId": {
"type": "string"
},
@ -555,6 +567,12 @@
"string",
"null"
]
},
"templateId": {
"type": [
"string",
"null"
]
}
},
"required": [
@ -663,13 +681,29 @@
]
},
"MultiAgentMode": {
"description": "Controls whether the model receives multi-agent delegation instructions and, when it does, whether it should only spawn sub-agents after an explicit user request or may delegate proactively when doing so would help. `none` leaves the multi-agent tools available without injecting delegation instructions.",
"enum": [
"none",
"explicitRequestOnly",
"proactive"
],
"type": "string"
"description": "Controls the effective multi-agent delegation instructions for a turn. `custom` means the configured mode hint defines the policy instead of a built-in policy.",
"oneOf": [
{
"additionalProperties": false,
"properties": {
"custom": {
"type": "string"
}
},
"required": [
"custom"
],
"title": "CustomMultiAgentMode",
"type": "object"
},
{
"enum": [
"explicitRequestOnly",
"proactive"
],
"type": "string"
}
]
},
"NetworkAccess": {
"enum": [
@ -1040,6 +1074,17 @@
"description": "Whether the thread is ephemeral and should not be materialized on disk.",
"type": "boolean"
},
"extra": {
"anyOf": [
{
"$ref": "#/definitions/ThreadExtra"
},
{
"type": "null"
}
],
"description": "Optional implementation-specific thread data."
},
"forkedFromId": {
"description": "Source thread id when this thread was created by forking another thread.",
"type": [
@ -1058,7 +1103,17 @@
],
"description": "Optional Git metadata captured when the thread was created."
},
"historyMode": {
"allOf": [
{
"$ref": "#/definitions/ThreadHistoryMode"
}
],
"default": "legacy",
"description": "Persisted thread history contract selected when this thread was created."
},
"id": {
"description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.",
"type": "string"
},
"modelProvider": {
@ -1165,6 +1220,17 @@
],
"type": "string"
},
"ThreadExtra": {
"description": "Extra app-server data for a thread.",
"type": "object"
},
"ThreadHistoryMode": {
"enum": [
"legacy",
"paginated"
],
"type": "string"
},
"ThreadId": {
"type": "string"
},
@ -1751,7 +1817,7 @@
"type": "string"
},
"path": {
"$ref": "#/definitions/AbsolutePathBuf"
"$ref": "#/definitions/LegacyAppPathString"
},
"type": {
"enum": [
@ -2017,6 +2083,7 @@
"description": "Only populated when the Turn's status is failed."
},
"id": {
"description": "Identifier for this turn. Codex-generated turn IDs are UUIDv7.",
"type": "string"
},
"items": {

View file

@ -147,6 +147,7 @@
{
"enum": [
"contextWindowExceeded",
"sessionBudgetExceeded",
"usageLimitExceeded",
"serverOverloaded",
"cyberPolicy",
@ -436,6 +437,18 @@
},
"McpToolCallAppContext": {
"properties": {
"actionName": {
"type": [
"string",
"null"
]
},
"appName": {
"type": [
"string",
"null"
]
},
"connectorId": {
"type": "string"
},
@ -450,6 +463,12 @@
"string",
"null"
]
},
"templateId": {
"type": [
"string",
"null"
]
}
},
"required": [
@ -1250,7 +1269,7 @@
"type": "string"
},
"path": {
"$ref": "#/definitions/AbsolutePathBuf"
"$ref": "#/definitions/LegacyAppPathString"
},
"type": {
"enum": [
@ -1438,6 +1457,7 @@
"description": "Only populated when the Turn's status is failed."
},
"id": {
"description": "Identifier for this turn. Codex-generated turn IDs are UUIDv7.",
"type": "string"
},
"items": {

View file

@ -147,6 +147,7 @@
{
"enum": [
"contextWindowExceeded",
"sessionBudgetExceeded",
"usageLimitExceeded",
"serverOverloaded",
"cyberPolicy",
@ -436,6 +437,18 @@
},
"McpToolCallAppContext": {
"properties": {
"actionName": {
"type": [
"string",
"null"
]
},
"appName": {
"type": [
"string",
"null"
]
},
"connectorId": {
"type": "string"
},
@ -450,6 +463,12 @@
"string",
"null"
]
},
"templateId": {
"type": [
"string",
"null"
]
}
},
"required": [
@ -1250,7 +1269,7 @@
"type": "string"
},
"path": {
"$ref": "#/definitions/AbsolutePathBuf"
"$ref": "#/definitions/LegacyAppPathString"
},
"type": {
"enum": [
@ -1438,6 +1457,7 @@
"description": "Only populated when the Turn's status is failed."
},
"id": {
"description": "Identifier for this turn. Codex-generated turn IDs are UUIDv7.",
"type": "string"
},
"items": {

View file

@ -38,7 +38,7 @@ function makeMinimalResponse(threadOverrides: Record<string, unknown> = {}) {
}
describe("Codex thread response validators", () => {
// The 0.142 floor guarantees both thread ids; pre-0.131 servers without
// The 0.143 floor guarantees both thread ids; pre-0.131 servers without
// sessionId must fail loudly instead of being silently normalized.
it("rejects thread responses missing sessionId", () => {
for (const assertResponse of [
@ -58,6 +58,7 @@ describe("assertCodexThreadStartResponse", () => {
const result = assertCodexThreadStartResponse(response);
expect(result.thread.id).toBe("thread-1");
expect(result.thread.sessionId).toBe("session-1");
expect(result.thread.historyMode).toBe("legacy");
});
it("throws on invalid response", () => {

View file

@ -4,7 +4,6 @@ export type JsonObject = { [key: string]: JsonValue };
export type CodexServiceTier = string;
export type CodexApprovalPolicy =
| "untrusted"
| "on-failure"
| "on-request"
| {
granular: {
@ -287,6 +286,8 @@ export type CodexTurn = {
export type CodexThread = {
id: string;
sessionId?: string;
historyMode?: "legacy" | "paginated";
extra?: JsonObject | null;
name?: string | null;
preview?: string | null;
createdAt?: number | null;

View file

@ -202,7 +202,7 @@ describe("shared Codex app-server client", () => {
const listPromise = listCodexAppServerModels({ timeoutMs: 1000 });
await sendInitializeResult(desktop, "openclaw/0.124.9 (macOS; test)");
await sendInitializeResult(pluginLocal, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(pluginLocal, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(pluginLocal);
await expect(listPromise).resolves.toEqual({ models: [] });
@ -235,7 +235,7 @@ describe("shared Codex app-server client", () => {
expect(first.process.stdin.destroyed).toBe(true);
const secondList = listCodexAppServerModels({ timeoutMs: 1000 });
await sendInitializeResult(second, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(second, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(second);
await expect(secondList).resolves.toEqual({ models: [] });
@ -257,7 +257,7 @@ describe("shared Codex app-server client", () => {
abandonController.abort();
expect(harness.process.stdin.destroyed).toBe(false);
await sendInitializeResult(harness, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(harness, "openclaw/0.143.0 (macOS; test)");
await expect(abandonedAcquire).resolves.toBe(harness.client);
await expect(activeAcquire).resolves.toBe(harness.client);
@ -282,7 +282,7 @@ describe("shared Codex app-server client", () => {
timeoutMs: 1000,
authProfileId: "openai:work",
});
await sendInitializeResult(harness, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(harness, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(harness);
await expect(listPromise).resolves.toEqual({ models: [] });
@ -309,7 +309,7 @@ describe("shared Codex app-server client", () => {
timeoutMs: 1000,
authProfileStore,
});
await sendInitializeResult(harness, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(harness, "openclaw/0.143.0 (macOS; test)");
await expect(clientPromise).resolves.toBe(harness.client);
expect(mocks.resolveCodexAppServerAuthProfileStore).toHaveBeenCalledWith({
@ -355,7 +355,7 @@ describe("shared Codex app-server client", () => {
authProfileId: "openai:persisted",
agentDir: "/tmp/openclaw-persisted-agent",
});
await sendInitializeResult(harness, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(harness, "openclaw/0.143.0 (macOS; test)");
await expect(clientPromise).resolves.toBe(harness.client);
const priorWriteCount = harness.writes.length;
@ -392,7 +392,7 @@ describe("shared Codex app-server client", () => {
agentDir: "/tmp/openclaw-target-agent",
config,
});
await sendInitializeResult(harness, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(harness, "openclaw/0.143.0 (macOS; test)");
await expect(clientPromise).resolves.toBe(harness.client);
expect(mocks.resolveCodexAppServerAuthProfileIdForAgent).not.toHaveBeenCalled();
@ -421,7 +421,7 @@ describe("shared Codex app-server client", () => {
headers: {},
},
});
await sendInitializeResult(harness, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(harness, "openclaw/0.143.0 (macOS; test)");
await expect(clientPromise).resolves.toBe(harness.client);
expect(mocks.resolveCodexAppServerAuthProfileIdForAgent).not.toHaveBeenCalled();
@ -439,7 +439,7 @@ describe("shared Codex app-server client", () => {
timeoutMs: 1000,
config,
});
await sendInitializeResult(harness, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(harness, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(harness);
await expect(listPromise).resolves.toEqual({ models: [] });
@ -466,7 +466,7 @@ describe("shared Codex app-server client", () => {
authProfileId: "openai:work",
agentDir: "/tmp/openclaw-agent-nova",
});
await sendInitializeResult(harness, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(harness, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(harness);
await expect(listPromise).resolves.toEqual({ models: [] });
@ -490,7 +490,7 @@ describe("shared Codex app-server client", () => {
timeoutMs: 1000,
agentDir: "/tmp/openclaw-agent-one",
});
await sendInitializeResult(first, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(first, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(first);
await expect(firstList).resolves.toEqual({ models: [] });
@ -498,7 +498,7 @@ describe("shared Codex app-server client", () => {
timeoutMs: 1000,
agentDir: "/tmp/openclaw-agent-two",
});
await sendInitializeResult(second, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(second, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(second);
await expect(secondList).resolves.toEqual({ models: [] });
@ -517,7 +517,7 @@ describe("shared Codex app-server client", () => {
}));
const listPromise = listCodexAppServerModels({ timeoutMs: 1000 });
await sendInitializeResult(harness, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(harness, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(harness);
await expect(listPromise).resolves.toEqual({ models: [] });
@ -551,7 +551,7 @@ describe("shared Codex app-server client", () => {
headers: {},
},
});
await sendInitializeResult(first, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(first, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(first);
await expect(firstList).resolves.toEqual({ models: [] });
@ -566,7 +566,7 @@ describe("shared Codex app-server client", () => {
headers: {},
},
});
await sendInitializeResult(second, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(second, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(second);
await expect(secondList).resolves.toEqual({ models: [] });
@ -586,12 +586,12 @@ describe("shared Codex app-server client", () => {
.mockReturnValueOnce("api-key:second");
const firstList = listCodexAppServerModels({ timeoutMs: 1000 });
await sendInitializeResult(first, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(first, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(first);
await expect(firstList).resolves.toEqual({ models: [] });
const secondList = listCodexAppServerModels({ timeoutMs: 1000 });
await sendInitializeResult(second, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(second, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(second);
await expect(secondList).resolves.toEqual({ models: [] });
@ -634,7 +634,7 @@ describe("shared Codex app-server client", () => {
});
await vi.waitFor(() => expect(second.writes.length).toBeGreaterThanOrEqual(1));
await sendInitializeResult(second, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(second, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(second);
await expect(secondList).resolves.toEqual({ models: [] });
@ -652,7 +652,7 @@ describe("shared Codex app-server client", () => {
.mockReturnValueOnce(second.client);
const firstList = listCodexAppServerModels({ timeoutMs: 1000 });
await sendInitializeResult(first, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(first, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(first);
await expect(firstList).resolves.toEqual({ models: [] });
@ -660,7 +660,7 @@ describe("shared Codex app-server client", () => {
expect(first.process.stdin.destroyed).toBe(true);
const secondList = listCodexAppServerModels({ timeoutMs: 1000 });
await sendInitializeResult(second, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(second, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(second);
await expect(secondList).resolves.toEqual({ models: [] });
@ -678,7 +678,7 @@ describe("shared Codex app-server client", () => {
.mockReturnValueOnce(second.client);
const firstList = listCodexAppServerModels({ timeoutMs: 1000 });
await sendInitializeResult(first, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(first, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(first);
await expect(firstList).resolves.toEqual({ models: [] });
@ -686,7 +686,7 @@ describe("shared Codex app-server client", () => {
expect(first.process.stdin.destroyed).toBe(false);
const secondList = listCodexAppServerModels({ timeoutMs: 1000 });
await sendInitializeResult(second, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(second, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(second);
await expect(secondList).resolves.toEqual({ models: [] });
@ -707,7 +707,7 @@ describe("shared Codex app-server client", () => {
.mockReturnValueOnce(second.client);
const firstList = listCodexAppServerModels({ timeoutMs: 1000 });
await sendInitializeResult(first, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(first, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(first);
await expect(firstList).resolves.toEqual({ models: [] });
@ -722,7 +722,7 @@ describe("shared Codex app-server client", () => {
expect(first.process.stdin.destroyed).toBe(false);
const secondList = listCodexAppServerModels({ timeoutMs: 1000 });
await sendInitializeResult(second, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(second, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(second);
await expect(secondList).resolves.toEqual({ models: [] });
@ -744,7 +744,7 @@ describe("shared Codex app-server client", () => {
const firstLease = getLeasedSharedCodexAppServerClient({ timeoutMs: 1000 });
const secondLease = getLeasedSharedCodexAppServerClient({ timeoutMs: 1000 });
await sendInitializeResult(first, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(first, "openclaw/0.143.0 (macOS; test)");
await expect(firstLease).resolves.toBe(first.client);
await expect(secondLease).resolves.toBe(first.client);
@ -778,7 +778,7 @@ describe("shared Codex app-server client", () => {
timeoutMs: 1000,
agentDir: "/tmp/openclaw-agent-one",
});
await sendInitializeResult(first, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(first, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(first);
await expect(firstList).resolves.toEqual({ models: [] });
@ -786,7 +786,7 @@ describe("shared Codex app-server client", () => {
timeoutMs: 1000,
agentDir: "/tmp/openclaw-agent-two",
});
await sendInitializeResult(second, "openclaw/0.142.0 (macOS; test)");
await sendInitializeResult(second, "openclaw/0.143.0 (macOS; test)");
await sendEmptyModelList(second);
await expect(secondList).resolves.toEqual({ models: [] });
@ -812,7 +812,7 @@ describe("shared Codex app-server client", () => {
const message = JSON.parse(rawDataToText(data)) as { id?: number; method?: string };
if (message.method === "initialize") {
socket.send(
JSON.stringify({ id: message.id, result: { userAgent: "openclaw/0.142.0" } }),
JSON.stringify({ id: message.id, result: { userAgent: "openclaw/0.143.0" } }),
);
return;
}

View file

@ -32,7 +32,7 @@ describe("Codex app-server websocket transport", () => {
const message = JSON.parse(rawDataToText(data)) as { id?: number; method?: string };
if (message.method === "initialize") {
socket.send(
JSON.stringify({ id: message.id, result: { userAgent: "openclaw/0.142.0" } }),
JSON.stringify({ id: message.id, result: { userAgent: "openclaw/0.143.0" } }),
);
return;
}

View file

@ -3,11 +3,11 @@
*/
// The floor tracks the managed package train. Every protocol shape OpenClaw
// sends or reads assumes this floor; range-compat normalizers were removed
// with the 0.142 bump, so lowering it requires reintroducing them.
// with the 0.143 bump, so lowering it requires reintroducing them.
/** Minimum Codex app-server version supported by the OpenClaw Codex bridge. */
export const MIN_CODEX_APP_SERVER_VERSION = "0.142.0";
export const MIN_CODEX_APP_SERVER_VERSION = "0.143.0";
/** npm package name for the managed Codex app-server binary. */
export const MANAGED_CODEX_APP_SERVER_PACKAGE = "@openai/codex";
// Keep this in sync with the Codex CLI live-test package pin.
/** Managed Codex app-server package version installed by OpenClaw. */
export const MANAGED_CODEX_APP_SERVER_PACKAGE_VERSION = "0.142.5";
export const MANAGED_CODEX_APP_SERVER_PACKAGE_VERSION = "0.143.0";

58
pnpm-lock.yaml generated
View file

@ -531,8 +531,8 @@ importers:
extensions/codex:
dependencies:
'@openai/codex':
specifier: 0.142.5
version: 0.142.5
specifier: 0.143.0
version: 0.143.0
typebox:
specifier: 1.3.3
version: 1.3.3
@ -3150,43 +3150,43 @@ packages:
resolution: {integrity: sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==}
engines: {node: ^20.17.0 || >=22.9.0}
'@openai/codex@0.142.5':
resolution: {integrity: sha512-WQEpD7l3k68eIAP0aq28EdR18ENBAf8DyprzFhzNwCOQJSv4nHzpwT8Fl30IJacprko2ZCmUBZjM2u941l2yLw==}
'@openai/codex@0.143.0':
resolution: {integrity: sha512-6h53sNtESIYncWVwU7zEjdVajwcad/0H94MOrgGqhwBMa9RRUDVG6DU9E9euC7yRdtrsKDAkJkz/m5moZ6MU3A==}
engines: {node: '>=16'}
hasBin: true
'@openai/codex@0.142.5-darwin-arm64':
resolution: {integrity: sha512-l43p8xv+Z/2/b6fCUc7/FmcQZsaPB7RFizLponGwHAnFOWe3i9Vky69p+up3BUam9AetoQQUv7Mo+2KdaFEqhA==}
'@openai/codex@0.143.0-darwin-arm64':
resolution: {integrity: sha512-hs9bPkE1c0+EtbHxxVfhaaGl1u6/LVdhEtOX5t9N+ri54yjMUkzKJLc7MOBa1DYRMDTWT+lPEfeB+8Fv9coTKg==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
'@openai/codex@0.142.5-darwin-x64':
resolution: {integrity: sha512-yk6A06/VmW7NFsa48OVPaj//g/zeSpd79wjuqfXZwW8ZKRYQm3+wCd3hWjPl79F3QnXvDvM2j3JMIBL3m3GXXg==}
'@openai/codex@0.143.0-darwin-x64':
resolution: {integrity: sha512-xHbrb/Qkj+ZZqYkAuio3mcFxpqlg/NNpBDz5iMKlGa7XfK3miUu6R50c9cRW1ZPQVRfRnFhs4l7OhI5u5r+HvA==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
'@openai/codex@0.142.5-linux-arm64':
resolution: {integrity: sha512-77ka5PSnm5HdxdBT99IwntCasmbqevlS0eiC0AtEb6ZXCLkim2gm0AWm+jNYy0EhbssvNK+KghayWo34HMgXeA==}
'@openai/codex@0.143.0-linux-arm64':
resolution: {integrity: sha512-1TMx1a/YBEY0SBhPGn8z9HjOpaDssw+WJiIi/+r0CB5uZf6qnALN02TrZTZl2PSUI8olnBf/VccjnwVCrzR38w==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
'@openai/codex@0.142.5-linux-x64':
resolution: {integrity: sha512-pxY+d3NgNE57Y/MApD3/TZUAygxJN6I9h3ZeDUwe67mxWjUxsuapxMRFTKSznCalYbRAeZp752+AAXmUbmguEg==}
'@openai/codex@0.143.0-linux-x64':
resolution: {integrity: sha512-B6v6oUgBbjt1bL7yBbRp7e0vLiVOjRdz9Wykotve52Aq2H2TeiCqxM5BSOaFkmNO6VxE0seW7hTi2UZF9x8LLA==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
'@openai/codex@0.142.5-win32-arm64':
resolution: {integrity: sha512-65BEqGbUZ7r0ayunIHdBjo5crwgbwKX/6puOcO+VCswUw/dXvDsN2IGcbXB52+bS9U5+FxP783cUHfTT6m40DQ==}
'@openai/codex@0.143.0-win32-arm64':
resolution: {integrity: sha512-8ntYPI3IQWZuayL214tYanuYhom23RxHUWRkmay45hGymEW4TwwFqzppKXEzcBXrCF5uSWlOMMG+B2elN6kWuQ==}
engines: {node: '>=16'}
cpu: [arm64]
os: [win32]
'@openai/codex@0.142.5-win32-x64':
resolution: {integrity: sha512-a+wI4PEx9a2fg6V5ueTTDkOkr1XpEvA5RFXIbo/L2hOfzMmGtyRnbG24bCGu5Q2RSgVxSQV0aLkdb3vdYMNH9A==}
'@openai/codex@0.143.0-win32-x64':
resolution: {integrity: sha512-d60HLkzSQ7rdL35xPxH1x3g8DuJjEbhEx1UOK5ivA1PBD9eWvP46rtdHkSvCZyqHUhaHFr5We2SugE9+Y8HhVA==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
@ -8942,31 +8942,31 @@ snapshots:
'@npmcli/redact@4.0.0': {}
'@openai/codex@0.142.5':
'@openai/codex@0.143.0':
optionalDependencies:
'@openai/codex-darwin-arm64': '@openai/codex@0.142.5-darwin-arm64'
'@openai/codex-darwin-x64': '@openai/codex@0.142.5-darwin-x64'
'@openai/codex-linux-arm64': '@openai/codex@0.142.5-linux-arm64'
'@openai/codex-linux-x64': '@openai/codex@0.142.5-linux-x64'
'@openai/codex-win32-arm64': '@openai/codex@0.142.5-win32-arm64'
'@openai/codex-win32-x64': '@openai/codex@0.142.5-win32-x64'
'@openai/codex-darwin-arm64': '@openai/codex@0.143.0-darwin-arm64'
'@openai/codex-darwin-x64': '@openai/codex@0.143.0-darwin-x64'
'@openai/codex-linux-arm64': '@openai/codex@0.143.0-linux-arm64'
'@openai/codex-linux-x64': '@openai/codex@0.143.0-linux-x64'
'@openai/codex-win32-arm64': '@openai/codex@0.143.0-win32-arm64'
'@openai/codex-win32-x64': '@openai/codex@0.143.0-win32-x64'
'@openai/codex@0.142.5-darwin-arm64':
'@openai/codex@0.143.0-darwin-arm64':
optional: true
'@openai/codex@0.142.5-darwin-x64':
'@openai/codex@0.143.0-darwin-x64':
optional: true
'@openai/codex@0.142.5-linux-arm64':
'@openai/codex@0.143.0-linux-arm64':
optional: true
'@openai/codex@0.142.5-linux-x64':
'@openai/codex@0.143.0-linux-x64':
optional: true
'@openai/codex@0.142.5-win32-arm64':
'@openai/codex@0.143.0-win32-arm64':
optional: true
'@openai/codex@0.142.5-win32-x64':
'@openai/codex@0.143.0-win32-x64':
optional: true
'@openclaw/crabline@0.1.9':