




















@@ -376,8 +376,9 @@ describe("handleGatewayEvent session.message", () => {
376376expect(loadChatHistoryMock).toHaveBeenCalledWith(host);
377377});
378378379-it("skips history reload while a chat run is active", () => {
379+it("refreshes sessions instead of reloading history while a chat run is active", async () => {
380380loadChatHistoryMock.mockReset();
381+loadSessionsMock.mockReset().mockResolvedValue(undefined);
381382const host = createHost();
382383host.sessionKey = "agent:qa:main";
383384host.chatRunId = "run-123";
@@ -390,10 +391,73 @@ describe("handleGatewayEvent session.message", () => {
390391});
391392392393expect(loadChatHistoryMock).not.toHaveBeenCalled();
394+expect(loadSessionsMock).toHaveBeenCalledWith(host, {
395+activeMinutes: 10,
396+agentId: "qa",
397+limit: 25,
398+});
399+await Promise.resolve();
400+expect(loadChatHistoryMock).not.toHaveBeenCalled();
401+});
402+403+it("replays deferred history reload after session refresh clears a stale active run", async () => {
404+loadChatHistoryMock.mockReset();
405+loadSessionsMock.mockReset().mockImplementation(async (state) => {
406+state.chatRunId = null;
407+});
408+const host = createHost();
409+host.sessionKey = "agent:qa:main";
410+host.chatRunId = "run-stale";
411+412+handleGatewayEvent(host, {
413+type: "event",
414+event: "session.message",
415+payload: { sessionKey: "agent:qa:main" },
416+seq: 1,
417+});
418+419+await Promise.resolve();
420+await Promise.resolve();
421+422+expect(host.chatRunId).toBeNull();
423+expect(loadChatHistoryMock).toHaveBeenCalledTimes(1);
424+expect(loadChatHistoryMock).toHaveBeenCalledWith(host);
425+});
426+427+it("waits for an in-flight sessions refresh before replaying deferred history", async () => {
428+vi.useFakeTimers();
429+try {
430+loadChatHistoryMock.mockReset();
431+loadSessionsMock.mockReset().mockResolvedValue(undefined);
432+const host = createHost();
433+host.sessionKey = "agent:qa:main";
434+host.chatRunId = "run-stale";
435+host.sessionsLoading = true;
436+437+handleGatewayEvent(host, {
438+type: "event",
439+event: "session.message",
440+payload: { sessionKey: "agent:qa:main" },
441+seq: 1,
442+});
443+444+await Promise.resolve();
445+expect(loadChatHistoryMock).not.toHaveBeenCalled();
446+447+host.chatRunId = null;
448+host.sessionsLoading = false;
449+await vi.advanceTimersByTimeAsync(250);
450+451+expect(loadChatHistoryMock).toHaveBeenCalledTimes(1);
452+expect(loadChatHistoryMock).toHaveBeenCalledWith(host);
453+} finally {
454+vi.useRealTimers();
455+}
393456});
394457395458it("ignores transcript updates for other sessions", () => {
396459loadChatHistoryMock.mockReset();
460+loadSessionsMock.mockReset();
397461const host = createHost();
398462host.sessionKey = "agent:qa:main";
399463此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。