























@@ -44,38 +44,63 @@ function createOps(params: {
4444broadcast: ReturnType<typeof vi.fn>;
4545nodeSendToSession: ReturnType<typeof vi.fn>;
4646removeChatRun: ReturnType<typeof vi.fn>;
47+clearedState: {
48+chatDeltaSentAt: Map<string, number>;
49+chatDeltaLastBroadcastLen: Map<string, number>;
50+chatDeltaLastBroadcastText: Map<string, string>;
51+agentDeltaSentAt: Map<string, number>;
52+bufferedAgentEvents: Map<string, unknown>;
53+};
4754} {
4855const { runId, entry, buffer } = params;
4956const broadcast = vi.fn();
5057const nodeSendToSession = vi.fn();
5158const removeChatRun = vi.fn();
59+const chatRunBuffers = new Map(buffer !== undefined ? [[runId, buffer]] : []);
60+const chatDeltaSentAt = new Map([[runId, Date.now()]]);
61+const chatDeltaLastBroadcastLen = new Map([[runId, buffer?.length ?? 0]]);
62+const chatDeltaLastBroadcastText = new Map(buffer !== undefined ? [[runId, buffer]] : []);
63+const agentDeltaSentAt = new Map([[`${runId}:assistant`, Date.now()]]);
64+const bufferedAgentEvents = new Map<string, unknown>([
65+[
66+`${runId}:assistant`,
67+{
68+payload: {
69+ runId,
70+seq: 1,
71+stream: "assistant",
72+ts: Date.now(),
73+data: { text: "buffer", delta: "buffer" },
74+},
75+},
76+],
77+]);
52785379return {
5480chatAbortControllers: new Map([[runId, entry]]),
55-chatRunBuffers: new Map(buffer !== undefined ? [[runId, buffer]] : []),
56-chatDeltaSentAt: new Map([[runId, Date.now()]]),
57-chatDeltaLastBroadcastLen: new Map([[runId, buffer?.length ?? 0]]),
58-chatDeltaLastBroadcastText: new Map(buffer !== undefined ? [[runId, buffer]] : []),
59-agentDeltaSentAt: new Map([[`${runId}:assistant`, Date.now()]]),
60-bufferedAgentEvents: new Map([
61-[
62-`${runId}:assistant`,
63-{
64-payload: {
65- runId,
66-seq: 1,
67-stream: "assistant",
68-ts: Date.now(),
69-data: { text: "buffer", delta: "buffer" },
70-},
71-},
72-],
73-]),
81+ chatRunBuffers,
7482chatAbortedRuns: new Map(),
83+clearChatRunState: (id: string) => {
84+chatRunBuffers.delete(id);
85+chatDeltaSentAt.delete(id);
86+chatDeltaLastBroadcastLen.delete(id);
87+chatDeltaLastBroadcastText.delete(id);
88+for (const key of [id, `${id}:assistant`, `${id}:thinking`]) {
89+agentDeltaSentAt.delete(key);
90+bufferedAgentEvents.delete(key);
91+}
92+},
7593 removeChatRun,
7694agentRunSeq: new Map(),
7795 broadcast,
7896 nodeSendToSession,
97+clearedState: {
98+ chatDeltaSentAt,
99+ chatDeltaLastBroadcastLen,
100+ chatDeltaLastBroadcastText,
101+ agentDeltaSentAt,
102+ bufferedAgentEvents,
103+},
79104};
80105}
81106@@ -126,11 +151,11 @@ describe("abortChatRunById", () => {
126151expect(entry.controller.signal.aborted).toBe(true);
127152expect(ops.chatAbortControllers.has(runId)).toBe(false);
128153expect(ops.chatRunBuffers.has(runId)).toBe(false);
129-expect(ops.chatDeltaSentAt.has(runId)).toBe(false);
130-expect(ops.chatDeltaLastBroadcastLen.has(runId)).toBe(false);
131-expect(ops.chatDeltaLastBroadcastText.has(runId)).toBe(false);
132-expect(ops.agentDeltaSentAt?.has(`${runId}:assistant`)).toBe(false);
133-expect(ops.bufferedAgentEvents?.has(`${runId}:assistant`)).toBe(false);
154+expect(ops.clearedState.chatDeltaSentAt.has(runId)).toBe(false);
155+expect(ops.clearedState.chatDeltaLastBroadcastLen.has(runId)).toBe(false);
156+expect(ops.clearedState.chatDeltaLastBroadcastText.has(runId)).toBe(false);
157+expect(ops.clearedState.agentDeltaSentAt.has(`${runId}:assistant`)).toBe(false);
158+expect(ops.clearedState.bufferedAgentEvents.has(`${runId}:assistant`)).toBe(false);
134159expect(ops.removeChatRun).toHaveBeenCalledWith(runId, runId, sessionKey);
135160expect(ops.agentRunSeq.has(runId)).toBe(false);
136161expect(ops.agentRunSeq.has("client-run-1")).toBe(false);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。