fix(openai): restore Codex xhigh thinking metadata (#82761)

This commit is contained in:
Peter Steinberger
2026-05-16 23:25:21 +01:00
committed by GitHub
parent 82ab8a8785
commit c1c67306fd
3 changed files with 80 additions and 0 deletions

View File

@@ -25,6 +25,7 @@ Docs: https://docs.openclaw.ai
### Fixes
- Channels/stream previews: contain rejected background draft-stream flushes so preview send failures do not surface as fatal unhandled rejections. Fixes #82712. (#82713) Thanks @coygeek.
- Providers/OpenAI Codex: include base `gpt-5.5` and `gpt-5.4` reasoning metadata in the bundled Codex catalog so `/think xhigh` remains available for those models. Fixes #82744.
- Agents/edit tool: honor `file_path` and related path aliases when resolving edit-recovery targets, so post-write errors no longer surface false edit failures after the file actually changed. Fixes #81909. Thanks @giodl73-repo.
- QQBot: treat only explicit truthy `QQBOT_DEBUG` values as enabling debug logs, so false-like values such as `0` no longer expose debug output. Fixes #82644. (#82697) Thanks @leno23.
- Gateway/diagnostics: add opt-in critical memory pressure stability snapshots with gateway logs, V8 heap, cgroup, active-resource, and redacted large session-file evidence. Fixes #82518.

View File

@@ -630,6 +630,36 @@
"baseUrl": "https://chatgpt.com/backend-api/codex",
"api": "openai-codex-responses",
"models": [
{
"id": "gpt-5.5",
"name": "gpt-5.5",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 400000,
"contextTokens": 272000,
"maxTokens": 128000,
"cost": {
"input": 5,
"output": 30,
"cacheRead": 0.5,
"cacheWrite": 0
}
},
{
"id": "gpt-5.4",
"name": "gpt-5.4",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1050000,
"contextTokens": 272000,
"maxTokens": 128000,
"cost": {
"input": 2.5,
"output": 15,
"cacheRead": 0.25,
"cacheWrite": 0
}
},
{
"id": "gpt-5.4-pro",
"name": "gpt-5.4-pro",

View File

@@ -1544,6 +1544,55 @@ describe("handleDirectiveOnly model persist behavior (fixes #1435)", () => {
expect(sessionEntry.thinkingLevel).toBe("medium");
});
it.each([
["openai", "gpt-5.5"],
["openai-codex", "gpt-5.5"],
])("accepts xhigh for %s/%s when catalog marks reasoning support", async (provider, model) => {
setDirectiveTestProviders([
{
id: provider,
label: provider,
auth: [],
resolveThinkingProfile: ({ modelId }) => ({
levels:
modelId === "gpt-5.5"
? [
{ id: "off" },
{ id: "minimal" },
{ id: "low" },
{ id: "medium" },
{ id: "high" },
{ id: "xhigh" },
]
: [{ id: "off" }],
}),
},
]);
const sessionEntry = createSessionEntry();
const sessionStore = { [sessionKey]: sessionEntry };
const catalogEntry = {
provider,
id: model,
name: model,
reasoning: true,
};
const result = await handleDirectiveOnly(
createHandleParams({
directives: parseInlineDirectives("/think xhigh"),
provider,
model,
allowedModelCatalog: [catalogEntry],
thinkingCatalog: [catalogEntry],
sessionEntry,
sessionStore,
}),
);
expect(result?.text).toContain("Thinking level set to xhigh.");
expect(sessionEntry.thinkingLevel).toBe("xhigh");
});
it("persists verbose on and off directives", async () => {
const sessionEntry = createSessionEntry();
const sessionStore = { [sessionKey]: sessionEntry };