From 5958e5693c885e802dd74ca49d78aab987324494 Mon Sep 17 00:00:00 2001 From: slonce70 Date: Fri, 6 Feb 2026 01:25:28 +0200 Subject: [PATCH] Thinking: accept extra-high alias and sync Codex FAQ wording --- docs/help/faq.md | 6 +++--- docs/tools/thinking.md | 1 + src/auto-reply/thinking.test.ts | 5 +++++ src/auto-reply/thinking.ts | 9 +++++---- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/docs/help/faq.md b/docs/help/faq.md index 3ef5cc08a0..f43aa1569c 100644 --- a/docs/help/faq.md +++ b/docs/help/faq.md @@ -141,7 +141,7 @@ Quick answers plus deeper troubleshooting for real-world setups (local dev, VPS, - [Can I use self-hosted models (llama.cpp, vLLM, Ollama)?](#can-i-use-selfhosted-models-llamacpp-vllm-ollama) - [What do OpenClaw, Flawd, and Krill use for models?](#what-do-openclaw-flawd-and-krill-use-for-models) - [How do I switch models on the fly (without restarting)?](#how-do-i-switch-models-on-the-fly-without-restarting) - - [Can I use GPT 5.2 for daily tasks and Codex 5.2 for coding](#can-i-use-gpt-52-for-daily-tasks-and-codex-52-for-coding) + - [Can I use GPT 5.2 for daily tasks and Codex 5.3 for coding](#can-i-use-gpt-52-for-daily-tasks-and-codex-53-for-coding) - [Why do I see "Model … is not allowed" and then no reply?](#why-do-i-see-model-is-not-allowed-and-then-no-reply) - [Why do I see "Unknown model: minimax/MiniMax-M2.1"?](#why-do-i-see-unknown-model-minimaxminimaxm21) - [Can I use MiniMax as my default and OpenAI for complex tasks?](#can-i-use-minimax-as-my-default-and-openai-for-complex-tasks) @@ -2035,12 +2035,12 @@ Re-run `/model` **without** the `@profile` suffix: If you want to return to the default, pick it from `/model` (or send `/model `). Use `/model status` to confirm which auth profile is active. -### Can I use GPT 5.2 for daily tasks and Codex 5.2 for coding +### Can I use GPT 5.2 for daily tasks and Codex 5.3 for coding Yes. Set one as default and switch as needed: - **Quick switch (per session):** `/model gpt-5.2` for daily tasks, `/model gpt-5.3-codex` for coding. -- **Default + switch:** set `agents.defaults.model.primary` to `openai-codex/gpt-5.3-codex`, then switch to `openai-codex/gpt-5.3-codex-codex` when coding (or the other way around). +- **Default + switch:** set `agents.defaults.model.primary` to `openai/gpt-5.2`, then switch to `openai-codex/gpt-5.3-codex` when coding (or the other way around). - **Sub-agents:** route coding tasks to sub-agents with a different default model. See [Models](/concepts/models) and [Slash commands](/tools/slash-commands). diff --git a/docs/tools/thinking.md b/docs/tools/thinking.md index 966bf593ed..9dc50f8284 100644 --- a/docs/tools/thinking.md +++ b/docs/tools/thinking.md @@ -16,6 +16,7 @@ title: "Thinking Levels" - medium → “think harder” - high → “ultrathink” (max budget) - xhigh → “ultrathink+” (GPT-5.2 + Codex models only) + - `x-high` and `extra-high` map to `xhigh`. - `highest`, `max` map to `high`. - Provider notes: - Z.AI (`zai/*`) only supports binary thinking (`on`/`off`). Any non-`off` level is treated as `on` (mapped to `low`). diff --git a/src/auto-reply/thinking.test.ts b/src/auto-reply/thinking.test.ts index 5254e42ce1..cb053f4c8b 100644 --- a/src/auto-reply/thinking.test.ts +++ b/src/auto-reply/thinking.test.ts @@ -15,6 +15,11 @@ describe("normalizeThinkLevel", () => { expect(normalizeThinkLevel("xhigh")).toBe("xhigh"); }); + it("accepts extra-high aliases as xhigh", () => { + expect(normalizeThinkLevel("extra-high")).toBe("xhigh"); + expect(normalizeThinkLevel("extra high")).toBe("xhigh"); + }); + it("accepts on as low", () => { expect(normalizeThinkLevel("on")).toBe("low"); }); diff --git a/src/auto-reply/thinking.ts b/src/auto-reply/thinking.ts index 8fe74c42de..7a6af032cb 100644 --- a/src/auto-reply/thinking.ts +++ b/src/auto-reply/thinking.ts @@ -40,7 +40,11 @@ export function normalizeThinkLevel(raw?: string | null): ThinkLevel | undefined if (!raw) { return undefined; } - const key = raw.toLowerCase(); + const key = raw.trim().toLowerCase(); + const collapsed = key.replace(/[\s_-]+/g, ""); + if (collapsed === "xhigh" || collapsed === "extrahigh") { + return "xhigh"; + } if (["off"].includes(key)) { return "off"; } @@ -61,9 +65,6 @@ export function normalizeThinkLevel(raw?: string | null): ThinkLevel | undefined ) { return "high"; } - if (["xhigh", "x-high", "x_high"].includes(key)) { - return "xhigh"; - } if (["think"].includes(key)) { return "minimal"; }