From f07a58965e1213f3a004f37e536b3efc1f873756 Mon Sep 17 00:00:00 2001 From: Robby Date: Thu, 22 Jan 2026 20:31:06 +0000 Subject: [PATCH] fix: only show model switch success when persist succeeds (fixes #1435) Previously, the /model command would display 'Model set to X' even when the session state wasn't actually persisted (when sessionEntry, sessionStore, or sessionKey were missing). This caused confusion as users saw success messages but the model didn't actually change. This fix: - Tracks whether the model override was actually persisted - Only shows success message when persist happened - Shows a clear error message when persist fails AI-assisted: Claude Opus 4.5 via Clawdbot Testing: lightly tested (code review, no runtime test) --- src/auto-reply/reply/directive-handling.impl.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/auto-reply/reply/directive-handling.impl.ts b/src/auto-reply/reply/directive-handling.impl.ts index 7f056e6cd..63b1baa8c 100644 --- a/src/auto-reply/reply/directive-handling.impl.ts +++ b/src/auto-reply/reply/directive-handling.impl.ts @@ -288,6 +288,7 @@ export async function handleDirectiveOnly(params: { nextThinkLevel === "xhigh" && !supportsXHighThinking(resolvedProvider, resolvedModel); + let didPersistModel = false; if (sessionEntry && sessionStore && sessionKey) { const prevElevatedLevel = currentElevatedLevel ?? @@ -346,6 +347,7 @@ export async function handleDirectiveOnly(params: { selection: modelSelection, profileOverride, }); + didPersistModel = true; } if (directives.hasQueueDirective && directives.queueReset) { delete sessionEntry.queueMode; @@ -447,7 +449,7 @@ export async function handleDirectiveOnly(params: { `Thinking level set to high (xhigh not supported for ${resolvedProvider}/${resolvedModel}).`, ); } - if (modelSelection) { + if (modelSelection && didPersistModel) { const label = `${modelSelection.provider}/${modelSelection.model}`; const labelWithAlias = modelSelection.alias ? `${modelSelection.alias} (${label})` : label; parts.push( @@ -458,6 +460,8 @@ export async function handleDirectiveOnly(params: { if (profileOverride) { parts.push(`Auth profile set to ${profileOverride}.`); } + } else if (modelSelection && !didPersistModel) { + parts.push(`Model switch to ${modelSelection.provider}/${modelSelection.model} failed (session state unavailable).`); } if (directives.hasQueueDirective && directives.queueMode) { parts.push(formatDirectiveAck(`Queue mode set to ${directives.queueMode}.`));