diff --git a/CHANGELOG.md b/CHANGELOG.md index f6b4e140b..972f692bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Docs: https://docs.clawd.bot ### Fixes - BlueBubbles: stop typing indicator on idle/no-reply. (#1439) Thanks @Nicell. +- Auto-reply: only report a model switch when session state is available. (#1465) Thanks @robbyczgw-cla. ## 2026.1.21-2 diff --git a/src/auto-reply/reply/directive-handling.impl.model-persist.test.ts b/src/auto-reply/reply/directive-handling.impl.model-persist.test.ts index 8ac0f12fb..b8a70b4a8 100644 --- a/src/auto-reply/reply/directive-handling.impl.model-persist.test.ts +++ b/src/auto-reply/reply/directive-handling.impl.model-persist.test.ts @@ -138,6 +138,39 @@ describe("handleDirectiveOnly model persist behavior (fixes #1435)", () => { expect(result?.text).toContain("session state unavailable"); }); + it("shows error message when sessionKey is missing", async () => { + const directives = parseInlineDirectives("/model openai/gpt-4o"); + const sessionEntry: SessionEntry = { + sessionId: "s1", + updatedAt: Date.now(), + }; + const sessionStore = { "agent:main:dm:1": sessionEntry }; + + const result = await handleDirectiveOnly({ + cfg: baseConfig(), + directives, + sessionEntry, + sessionStore, + sessionKey: undefined, // Missing! + storePath: "/tmp/sessions.json", + elevatedEnabled: false, + elevatedAllowed: false, + defaultProvider: "anthropic", + defaultModel: "claude-opus-4-5", + aliasIndex: baseAliasIndex(), + allowedModelKeys, + allowedModelCatalog, + resetModelOverride: false, + provider: "anthropic", + model: "claude-opus-4-5", + initialModelLabel: "anthropic/claude-opus-4-5", + formatModelSwitchEvent: (label) => `Switched to ${label}`, + }); + + expect(result?.text).toContain("failed"); + expect(result?.text).toContain("session state unavailable"); + }); + it("shows no model message when no /model directive", async () => { const directives = parseInlineDirectives("hello world"); const sessionEntry: SessionEntry = {