





















@@ -77,7 +77,7 @@ describe("handleChatEvent", () => {
7777expect(handleChatEvent(state, undefined)).toBe(null);
7878});
797980-it("returns null when sessionKey does not match", () => {
80+it("returns null when sessionKey does not match and no active run is in flight", () => {
8181const state = createState({ sessionKey: "main" });
8282const payload: ChatEventPayload = {
8383runId: "run-1",
@@ -87,6 +87,73 @@ describe("handleChatEvent", () => {
8787expect(handleChatEvent(state, payload)).toBe(null);
8888});
898990+it("accepts delta events for the active run when gateway emits a canonical session key", () => {
91+const state = createState({
92+sessionKey: "main",
93+chatRunId: "run-1",
94+chatStream: null,
95+});
96+const payload: ChatEventPayload = {
97+runId: "run-1",
98+sessionKey: "agent:main:main",
99+state: "delta",
100+message: {
101+role: "assistant",
102+content: [{ type: "text", text: "Live reply" }],
103+},
104+};
105+106+expect(handleChatEvent(state, payload)).toBe("delta");
107+expect(state.chatStream).toBe("Live reply");
108+expect(state.chatRunId).toBe("run-1");
109+});
110+111+it("accepts final events for the active run when gateway emits a canonical session key", () => {
112+const state = createState({
113+sessionKey: "main",
114+chatRunId: "run-1",
115+chatStream: "Live reply",
116+chatStreamStartedAt: 100,
117+});
118+const payload: ChatEventPayload = {
119+runId: "run-1",
120+sessionKey: "agent:main:main",
121+state: "final",
122+message: {
123+role: "assistant",
124+content: [{ type: "text", text: "Live reply" }],
125+},
126+};
127+128+expect(handleChatEvent(state, payload)).toBe("final");
129+expect(state.chatMessages).toEqual([payload.message]);
130+expect(state.chatRunId).toBe(null);
131+expect(state.chatStream).toBe(null);
132+expect(state.chatStreamStartedAt).toBe(null);
133+});
134+135+it("still drops events when neither session key nor active run id matches", () => {
136+const state = createState({
137+sessionKey: "main",
138+chatRunId: "run-1",
139+chatStream: "Working...",
140+});
141+const payload: ChatEventPayload = {
142+runId: "run-2",
143+sessionKey: "agent:main:main",
144+state: "delta",
145+message: {
146+role: "assistant",
147+content: [{ type: "text", text: "Wrong run" }],
148+},
149+};
150+151+expect(handleChatEvent(state, payload)).toBe(null);
152+expect(state.chatRunId).toBe("run-1");
153+expect(state.chatStream).toBe("Working...");
154+expect(state.chatMessages).toEqual([]);
155+});
156+90157it("returns null for delta from another run", () => {
91158const state = createState({
92159sessionKey: "main",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。