diff --git a/src/auto-reply/reply/directive-handling.model.test.ts b/src/auto-reply/reply/directive-handling.model.test.ts index 0c389337e89..a67073ae8e9 100644 --- a/src/auto-reply/reply/directive-handling.model.test.ts +++ b/src/auto-reply/reply/directive-handling.model.test.ts @@ -760,6 +760,30 @@ describe("handleDirectiveOnly model persist behavior (fixes #1435)", () => { expect(sessionEntry.liveModelSwitchPending).toBe(true); }); + it("persists /model only on the targeted session entry", async () => { + const targetEntry = createSessionEntry(); + const otherEntry = createSessionEntry(); + const sessionStore = { + [sessionKey]: targetEntry, + "agent:main:dm:other": otherEntry, + }; + + await handleDirectiveOnly( + createHandleParams({ + directives: parseInlineDirectives("/model openai/gpt-4o"), + sessionEntry: targetEntry, + sessionStore, + }), + ); + + expect(targetEntry.providerOverride).toBe("openai"); + expect(targetEntry.modelOverride).toBe("gpt-4o"); + expect(targetEntry.modelOverrideSource).toBe("user"); + expect(otherEntry.providerOverride).toBeUndefined(); + expect(otherEntry.modelOverride).toBeUndefined(); + expect(otherEntry.modelOverrideSource).toBeUndefined(); + }); + it("remaps unsupported stored thinking levels when persisting a model switch", async () => { const sessionEntry = createSessionEntry({ thinkingLevel: "adaptive" }); const { persisted } = await persistModelDirectiveForTest({ diff --git a/src/cron/isolated-agent.model-formatting.test.ts b/src/cron/isolated-agent.model-formatting.test.ts index 2408074b955..df14ad6c648 100644 --- a/src/cron/isolated-agent.model-formatting.test.ts +++ b/src/cron/isolated-agent.model-formatting.test.ts @@ -320,6 +320,30 @@ describe("cron model formatting and precedence edge cases", () => { it("falls through to default when no override is present", async () => { await expectDefaultSelectedModel(); }); + + it("does not treat another chat session /model override as a global cron default", async () => { + const chatSessionAfterModelDirective = { + providerOverride: "openai", + modelOverride: "gpt-4.1-mini", + }; + + await expectSelectedModel( + { sessionEntry: chatSessionAfterModelDirective }, + { provider: "openai", model: "gpt-4.1-mini" }, + ); + await expectDefaultSelectedModel({ sessionEntry: {} }); + await expectSelectedModel( + { + sessionEntry: {}, + payload: { + kind: "agentTurn", + message: DEFAULT_MESSAGE, + model: "anthropic/claude-sonnet-4-6", + }, + }, + { provider: "anthropic", model: "claude-sonnet-4-6" }, + ); + }); }); describe("sequential model switches (CI failure regression)", () => {