diff --git a/CHANGELOG.md b/CHANGELOG.md index b91484248bc..619096a6c3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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. diff --git a/extensions/openai/openclaw.plugin.json b/extensions/openai/openclaw.plugin.json index 2f68cc732bf..3bfb5d5ec0b 100644 --- a/extensions/openai/openclaw.plugin.json +++ b/extensions/openai/openclaw.plugin.json @@ -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", diff --git a/src/auto-reply/reply/directive-handling.model.test.ts b/src/auto-reply/reply/directive-handling.model.test.ts index 0dc2da40bb2..4d348c769c8 100644 --- a/src/auto-reply/reply/directive-handling.model.test.ts +++ b/src/auto-reply/reply/directive-handling.model.test.ts @@ -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 };