



















@@ -1326,6 +1326,44 @@ describe("agent event handler", () => {
13261326expect(agentRunSeq.has("run-chat-send")).toBe(false);
13271327});
132813281329+it("emits lifecycle chat errors for active chat.send runs with a chat run link", () => {
1330+vi.useFakeTimers();
1331+const { broadcast, chatRunState, clearAgentRunContext, agentRunSeq, handler } = createHarness({
1332+resolveSessionKeyForRun: () => "session-chat-send",
1333+lifecycleErrorRetryGraceMs: 100,
1334+isChatSendRunActive: (runId) => runId === "run-chat-send",
1335+});
1336+chatRunState.registry.add("run-chat-send", {
1337+sessionKey: "session-chat-send",
1338+clientRunId: "run-chat-send",
1339+});
1340+registerAgentRunContext("run-chat-send", { sessionKey: "session-chat-send" });
1341+1342+handler({
1343+runId: "run-chat-send",
1344+seq: 1,
1345+stream: "lifecycle",
1346+ts: Date.now(),
1347+data: { phase: "error", error: "chat.send failed" },
1348+});
1349+1350+vi.advanceTimersByTime(100);
1351+1352+const chatErrors = chatBroadcastCalls(broadcast).filter(
1353+([, payload]) => (payload as { state?: string }).state === "error",
1354+);
1355+expect(chatErrors).toHaveLength(1);
1356+expect(chatErrors[0]?.[1]).toMatchObject({
1357+runId: "run-chat-send",
1358+sessionKey: "session-chat-send",
1359+state: "error",
1360+errorMessage: "chat.send failed",
1361+});
1362+expect(chatRunState.registry.peek("run-chat-send")).toBeUndefined();
1363+expect(clearAgentRunContext).toHaveBeenCalledWith("run-chat-send");
1364+expect(agentRunSeq.has("run-chat-send")).toBe(false);
1365+});
1366+13291367it("suppresses chat and node session events for non-control-UI-visible runs", () => {
13301368const { broadcast, nodeSendToSession, handler } = createHarness({
13311369resolveSessionKeyForRun: () => "session-hidden",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。