fix(ui): clarify inherited thinking off label (#85223)

Control UI thinking selectors now show inherited disabled reasoning as Inherited: Off while keeping explicit Off distinct.
This commit is contained in:
Alex Knight
2026-05-22 15:14:30 +10:00
committed by GitHub
parent b010852dc6
commit b7356e4e58
4 changed files with 4 additions and 6 deletions
+1
View File
@@ -51,6 +51,7 @@ Docs: https://docs.openclaw.ai
- Agents/Codex: promote a completed final assistant response when a prompt timeout races Codex app-server completion instead of returning an empty timeout envelope. Refs #84516.
- Agents: cap heartbeat model bleed context hints by the stored session window when runtime model metadata is unavailable, so overflow recovery advice does not suggest a larger window than the active session actually has.
- Control UI/Web Push: use `https://openclaw.ai` as the generated default VAPID subject instead of the old localhost mailbox so iOS PWA push setup uses an Apple-acceptable subject when `OPENCLAW_VAPID_SUBJECT` is unset. Fixes #83134. (#83317) Thanks @IWhatsskill.
- Control UI: distinguish inherited thinking-off settings from explicit Off selections so the thinking selector no longer shows two identical Off rows. (#85223) Thanks @amknight.
- Agents/Pi: keep embedded session transcript writes from tripping false takeover detection after packaged npm onboarding agent turns.
- Codex/TUI: surface Codex-native post-turn compaction failures instead of continuing uncompacted, and keep successful native compaction serialized before local idle/next-turn handling. Fixes #84305. (#85160) Thanks @joshavant.
- Memory/search: stop recall tracking from writing dreaming side-effect artifacts when `dreaming.enabled=false`, while preserving normal search results. Fixes #84436. (#84444) Thanks @NianJiuZst.
+2 -2
View File
@@ -124,8 +124,8 @@ Malformed local-model reasoning tags are handled conservatively. Closed `<think>
- The web chat thinking selector mirrors the session's stored level from the inbound session store/config when the page loads.
- Picking another level writes the session override immediately via `sessions.patch`; it does not wait for the next send and it is not a one-shot `thinkingOnce` override.
- The first option is always the clear-override choice. It shows `Inherited: <resolved level>` when the session is inheriting a non-off effective default, or `Off` when inherited thinking is disabled.
- Explicit picker choices are labeled as overrides, while preserving provider labels when present (for example `Override: maximum` for a provider-labeled `max` option).
- The first option is always the clear-override choice. It shows `Inherited: <resolved level>`, including `Inherited: Off` when inherited thinking is disabled.
- Explicit picker choices use their direct level labels while preserving provider labels when present (for example `Maximum` for a provider-labeled `max` option).
- The picker uses `thinkingLevels` returned by the gateway session row/defaults, with `thinkingOptions` kept as a legacy label list. The browser UI does not keep its own provider regex list; plugins own model-specific level sets.
- `/think:<level>` still works and updates the same stored session level, so chat directives and the picker stay in sync.
-3
View File
@@ -7,9 +7,6 @@ export function normalizeThinkingOptionValue(raw: string): string {
export function formatInheritedThinkingLabel(effectiveLevel: string | null | undefined): string {
const normalized = effectiveLevel ? normalizeThinkingOptionValue(effectiveLevel) : "off";
if (!normalized || normalized === "off") {
return "Off";
}
return `Inherited: ${formatThinkingLevelDisplayLabel(normalized)}`;
}
+1 -1
View File
@@ -1407,7 +1407,7 @@ describe("chat session controls", () => {
]);
expect(
[...(thinkingSelect?.options ?? [])].map((option) => option.textContent?.trim()),
).toEqual(["Off", "Off", "Adaptive", "Extra high", "Maximum"]);
).toEqual(["Inherited: Off", "Off", "Adaptive", "Extra high", "Maximum"]);
});
it("labels chat thinking default from the active session row", () => {