import { describe, expect, it, vi } from "vitest"; import type { ClawdbotConfig } from "../../config/config.js"; import { buildModelAliasIndex } from "../../agents/model-selection.js"; import { applyResetModelOverride } from "./session-reset-model.js"; vi.mock("../../agents/model-catalog.js", () => ({ loadModelCatalog: vi.fn(async () => [ { provider: "minimax", id: "m2.1", name: "M2.1" }, { provider: "openai", id: "gpt-4o-mini", name: "GPT-4o mini" }, ]), })); describe("applyResetModelOverride", () => { it("selects a model hint and strips it from the body", async () => { const cfg = {} as ClawdbotConfig; const aliasIndex = buildModelAliasIndex({ cfg, defaultProvider: "openai" }); const sessionEntry = { sessionId: "s1", updatedAt: Date.now(), }; const sessionStore = { "agent:main:dm:1": sessionEntry }; const sessionCtx = { BodyStripped: "minimax summarize" }; const ctx = { ChatType: "direct" }; await applyResetModelOverride({ cfg, resetTriggered: true, bodyStripped: "minimax summarize", sessionCtx, ctx, sessionEntry, sessionStore, sessionKey: "agent:main:dm:1", defaultProvider: "openai", defaultModel: "gpt-4o-mini", aliasIndex, }); expect(sessionEntry.providerOverride).toBe("minimax"); expect(sessionEntry.modelOverride).toBe("m2.1"); expect(sessionCtx.BodyStripped).toBe("summarize"); }); it("clears auth profile overrides when reset applies a model", async () => { const cfg = {} as ClawdbotConfig; const aliasIndex = buildModelAliasIndex({ cfg, defaultProvider: "openai" }); const sessionEntry = { sessionId: "s1", updatedAt: Date.now(), authProfileOverride: "anthropic:default", authProfileOverrideSource: "user", authProfileOverrideCompactionCount: 2, }; const sessionStore = { "agent:main:dm:1": sessionEntry }; const sessionCtx = { BodyStripped: "minimax summarize" }; const ctx = { ChatType: "direct" }; await applyResetModelOverride({ cfg, resetTriggered: true, bodyStripped: "minimax summarize", sessionCtx, ctx, sessionEntry, sessionStore, sessionKey: "agent:main:dm:1", defaultProvider: "openai", defaultModel: "gpt-4o-mini", aliasIndex, }); expect(sessionEntry.authProfileOverride).toBeUndefined(); expect(sessionEntry.authProfileOverrideSource).toBeUndefined(); expect(sessionEntry.authProfileOverrideCompactionCount).toBeUndefined(); }); it("skips when resetTriggered is false", async () => { const cfg = {} as ClawdbotConfig; const aliasIndex = buildModelAliasIndex({ cfg, defaultProvider: "openai" }); const sessionEntry = { sessionId: "s1", updatedAt: Date.now(), }; const sessionStore = { "agent:main:dm:1": sessionEntry }; const sessionCtx = { BodyStripped: "minimax summarize" }; const ctx = { ChatType: "direct" }; await applyResetModelOverride({ cfg, resetTriggered: false, bodyStripped: "minimax summarize", sessionCtx, ctx, sessionEntry, sessionStore, sessionKey: "agent:main:dm:1", defaultProvider: "openai", defaultModel: "gpt-4o-mini", aliasIndex, }); expect(sessionEntry.providerOverride).toBeUndefined(); expect(sessionEntry.modelOverride).toBeUndefined(); expect(sessionCtx.BodyStripped).toBe("minimax summarize"); }); });