























@@ -1377,6 +1377,170 @@ describe("switchChatSession", () => {
13771377agentId: undefined,
13781378});
13791379});
1380+1381+it("restores visible messages when switching back before history reloads", () => {
1382+const mainMessages = [{ role: "assistant", content: [{ type: "text", text: "main report" }] }];
1383+const otherMessages = [{ role: "assistant", content: [{ type: "text", text: "other reply" }] }];
1384+const settings = createSettings();
1385+const state = {
1386+sessionKey: "main",
1387+chatMessage: "",
1388+chatAttachments: [],
1389+chatMessages: mainMessages,
1390+chatToolMessages: [],
1391+chatStreamSegments: [],
1392+chatThinkingLevel: null,
1393+chatStream: null,
1394+chatSideResult: null,
1395+lastError: null,
1396+compactionStatus: null,
1397+fallbackStatus: null,
1398+chatAvatarUrl: null,
1399+chatQueue: [],
1400+chatQueueBySession: {},
1401+chatMessagesBySession: new Map(),
1402+chatRunId: null,
1403+sessionsShowArchived: false,
1404+chatSideResultTerminalRuns: new Set<string>(),
1405+chatStreamStartedAt: null,
1406+ settings,
1407+announceSessionSwitch: vi.fn(),
1408+applySettings(next: typeof settings) {
1409+state.settings = next;
1410+},
1411+loadAssistantIdentity: vi.fn(),
1412+resetToolStream: vi.fn(),
1413+resetChatScroll: vi.fn(),
1414+resetChatInputHistoryNavigation: vi.fn(),
1415+} as unknown as AppViewState;
1416+1417+refreshChatAvatarMock.mockResolvedValue(undefined);
1418+refreshSlashCommandsMock.mockResolvedValue(undefined);
1419+loadChatHistoryMock.mockResolvedValue(undefined);
1420+loadSessionsMock.mockResolvedValue(undefined);
1421+1422+switchChatSession(state, "agent:main:other");
1423+state.chatMessages = otherMessages;
1424+1425+switchChatSession(state, "main");
1426+1427+expect(state.chatMessages).toEqual(mainMessages);
1428+expect(state.chatMessagesBySession.get("agent:main:other")).toEqual(otherMessages);
1429+});
1430+1431+it("restores configured main aliases without crossing agent scopes", () => {
1432+const opsMessages = [{ role: "assistant", content: [{ type: "text", text: "ops report" }] }];
1433+const mainMessages = [{ role: "assistant", content: [{ type: "text", text: "main report" }] }];
1434+const settings = createSettings();
1435+const state = {
1436+sessionKey: "home",
1437+chatMessage: "",
1438+chatAttachments: [],
1439+chatMessages: opsMessages,
1440+chatToolMessages: [],
1441+chatStreamSegments: [],
1442+chatThinkingLevel: null,
1443+chatStream: null,
1444+chatSideResult: null,
1445+lastError: null,
1446+compactionStatus: null,
1447+fallbackStatus: null,
1448+chatAvatarUrl: null,
1449+chatQueue: [],
1450+chatQueueBySession: {},
1451+chatMessagesBySession: new Map(),
1452+chatRunId: null,
1453+sessionsShowArchived: false,
1454+chatSideResultTerminalRuns: new Set<string>(),
1455+chatStreamStartedAt: null,
1456+ settings,
1457+announceSessionSwitch: vi.fn(),
1458+applySettings(next: typeof settings) {
1459+state.settings = next;
1460+},
1461+loadAssistantIdentity: vi.fn(),
1462+resetToolStream: vi.fn(),
1463+resetChatScroll: vi.fn(),
1464+resetChatInputHistoryNavigation: vi.fn(),
1465+hello: {
1466+snapshot: {
1467+sessionDefaults: {
1468+defaultAgentId: "ops",
1469+mainKey: "home",
1470+},
1471+},
1472+},
1473+} as unknown as AppViewState;
1474+1475+refreshChatAvatarMock.mockResolvedValue(undefined);
1476+refreshSlashCommandsMock.mockResolvedValue(undefined);
1477+loadChatHistoryMock.mockResolvedValue(undefined);
1478+loadSessionsMock.mockResolvedValue(undefined);
1479+1480+switchChatSession(state, "agent:main:home");
1481+1482+expect(state.chatMessages).toEqual([]);
1483+state.chatMessages = mainMessages;
1484+switchChatSession(state, "agent:ops:home");
1485+1486+expect(state.chatMessages).toEqual(opsMessages);
1487+expect(state.chatMessagesBySession.get("agent:ops:main")).toEqual(opsMessages);
1488+expect(state.chatMessagesBySession.get("agent:main:main")).toEqual(mainMessages);
1489+expect(state.chatMessagesBySession.size).toBe(2);
1490+});
1491+1492+it("restores visible messages across plain and canonical non-main keys", () => {
1493+const projectMessages = [
1494+{ role: "assistant", content: [{ type: "text", text: "project report" }] },
1495+];
1496+const mainMessages = [{ role: "assistant", content: [{ type: "text", text: "main reply" }] }];
1497+const settings = createSettings();
1498+const state = {
1499+sessionKey: "project",
1500+chatMessage: "",
1501+chatAttachments: [],
1502+chatMessages: projectMessages,
1503+chatToolMessages: [],
1504+chatStreamSegments: [],
1505+chatThinkingLevel: null,
1506+chatStream: null,
1507+chatSideResult: null,
1508+lastError: null,
1509+compactionStatus: null,
1510+fallbackStatus: null,
1511+chatAvatarUrl: null,
1512+chatQueue: [],
1513+chatQueueBySession: {},
1514+chatMessagesBySession: new Map(),
1515+chatRunId: null,
1516+sessionsShowArchived: false,
1517+chatSideResultTerminalRuns: new Set<string>(),
1518+chatStreamStartedAt: null,
1519+ settings,
1520+announceSessionSwitch: vi.fn(),
1521+applySettings(next: typeof settings) {
1522+state.settings = next;
1523+},
1524+loadAssistantIdentity: vi.fn(),
1525+resetToolStream: vi.fn(),
1526+resetChatScroll: vi.fn(),
1527+resetChatInputHistoryNavigation: vi.fn(),
1528+} as unknown as AppViewState;
1529+1530+refreshChatAvatarMock.mockResolvedValue(undefined);
1531+refreshSlashCommandsMock.mockResolvedValue(undefined);
1532+loadChatHistoryMock.mockResolvedValue(undefined);
1533+loadSessionsMock.mockResolvedValue(undefined);
1534+1535+switchChatSession(state, "main");
1536+state.chatMessages = mainMessages;
1537+1538+switchChatSession(state, "agent:main:project");
1539+1540+expect(state.chatMessages).toEqual(projectMessages);
1541+expect(state.chatMessagesBySession.get("agent:main:project")).toEqual(projectMessages);
1542+expect(state.chatMessagesBySession.size).toBe(2);
1543+});
13801544});
1381154513821546describe("dismissChatError", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。