



















@@ -2340,6 +2340,81 @@ describe("chat session controls", () => {
23402340expect(rerendered.value).toBe("openai/gpt-5-mini");
23412341});
234223422343+it("keeps the selected model visible after switching away and back to a session", async () => {
2344+const sessionA = "agent:main:session-a";
2345+const sessionB = "agent:main:session-b";
2346+const catalog = createModelCatalog(...DEFAULT_CHAT_MODEL_CATALOG, {
2347+id: "claude-opus-4.5",
2348+name: "Claude Opus 4.5",
2349+provider: "bedrock",
2350+});
2351+const { state } = createChatHeaderState({ models: catalog });
2352+let rows: GatewaySessionRow[] = [
2353+{ key: sessionA, kind: "direct", label: "Session A", updatedAt: 2 },
2354+{ key: sessionB, kind: "direct", label: "Session B", updatedAt: 1 },
2355+];
2356+const request = vi.fn(async (method: string, params: Record<string, unknown> = {}) => {
2357+if (method === "sessions.patch") {
2358+const key = typeof params.key === "string" ? params.key : "";
2359+const nextModel = typeof params.model === "string" ? params.model.trim() : "";
2360+rows = rows.map((row) => {
2361+if (row.key !== key) {
2362+return row;
2363+}
2364+const nextRow: GatewaySessionRow = { ...row };
2365+if (!nextModel) {
2366+delete nextRow.model;
2367+delete nextRow.modelProvider;
2368+return nextRow;
2369+}
2370+const slashIndex = nextModel.indexOf("/");
2371+if (slashIndex > 0) {
2372+nextRow.modelProvider = nextModel.slice(0, slashIndex);
2373+} else {
2374+delete nextRow.modelProvider;
2375+}
2376+nextRow.model = slashIndex > 0 ? nextModel.slice(slashIndex + 1) : nextModel;
2377+return nextRow;
2378+});
2379+return { ok: true, key };
2380+}
2381+if (method === "sessions.list") {
2382+return createSessionsResultFromRows(rows);
2383+}
2384+if (method === "chat.history") {
2385+return { messages: [] };
2386+}
2387+if (method === "tools.effective") {
2388+return { agentId: "main", profile: "coding", groups: [] };
2389+}
2390+throw new Error(`Unexpected request: ${method}`);
2391+});
2392+state.client = { request } as unknown as GatewayBrowserClient;
2393+state.sessionKey = sessionA;
2394+state.settings.sessionKey = sessionA;
2395+state.sessionsResult = createSessionsResultFromRows(rows);
2396+const container = document.createElement("div");
2397+render(renderChatSessionSelect(state), container);
2398+2399+const modelSelect = getChatModelSelect(container);
2400+expect(modelSelect.value).toBe("");
2401+2402+modelSelect.value = "bedrock/claude-opus-4.5";
2403+modelSelect.dispatchEvent(new Event("change", { bubbles: true }));
2404+await flushTasks();
2405+2406+state.sessionKey = sessionB;
2407+state.settings.sessionKey = sessionB;
2408+render(renderChatSessionSelect(state), container);
2409+expect(getChatModelSelect(container).value).toBe("");
2410+2411+state.sessionKey = sessionA;
2412+state.settings.sessionKey = sessionA;
2413+render(renderChatSessionSelect(state), container);
2414+2415+expect(getChatModelSelect(container).value).toBe("bedrock/claude-opus-4.5");
2416+});
2417+23432418it("uses default thinking options when the active session is absent", () => {
23442419const { state } = createChatHeaderState({ omitSessionFromList: true });
23452420state.sessionsResult = createSessionsListResult({
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。