

























@@ -107,6 +107,39 @@ describe("channel message flows dev runner", () => {
107107expect(result).toEqual({ finalMessageId: "99", previewUpdates: 3 });
108108});
109109110+it("clears thinking previews when streaming fails before the final answer", async () => {
111+const stream = {
112+update: vi.fn(() => {}),
113+flush: vi.fn(async () => {
114+throw new Error("flush failed");
115+}),
116+clear: vi.fn(async () => {}),
117+stop: vi.fn(async () => {}),
118+messageId: vi.fn(() => 17),
119+forceNewMessage: vi.fn(),
120+};
121+const sendFinal = vi.fn(async () => ({ messageId: "99", chatId: "123" }));
122+123+await expect(
124+runTelegramThinkingFinalFlow(
125+{
126+cfg: {} as OpenClawConfig,
127+delayMs: 0,
128+target: "123",
129+thinkingUpdates: ["Checking the request."],
130+},
131+{
132+createDraftStream: vi.fn(() => stream),
133+ sendFinal,
134+sleep: vi.fn(async () => {}),
135+},
136+),
137+).rejects.toThrow("flush failed");
138+139+expect(stream.clear).toHaveBeenCalledOnce();
140+expect(sendFinal).not.toHaveBeenCalled();
141+});
142+110143it("streams working updates through native message drafts before the final answer", async () => {
111144const draft = {
112145update: vi.fn(async () => true),
@@ -151,6 +184,35 @@ describe("channel message flows dev runner", () => {
151184expect(result).toEqual({ finalMessageId: "100", previewUpdates: 6 });
152185});
153186187+it("stops native working drafts when progress updates fail before the final answer", async () => {
188+const draft = {
189+update: vi.fn(async () => {
190+throw new Error("draft update failed");
191+}),
192+stop: vi.fn(async () => {}),
193+};
194+const sendFinal = vi.fn(async () => ({ messageId: "100", chatId: "123" }));
195+196+await expect(
197+runTelegramWorkingFinalFlow(
198+{
199+cfg: {} as OpenClawConfig,
200+delayMs: 0,
201+durationMs: 12_000,
202+target: "123",
203+},
204+{
205+createNativeToolProgressDraft: vi.fn(() => draft),
206+ sendFinal,
207+sleep: vi.fn(async () => {}),
208+},
209+),
210+).rejects.toThrow("draft update failed");
211+212+expect(draft.stop).toHaveBeenCalledOnce();
213+expect(sendFinal).not.toHaveBeenCalled();
214+});
215+154216it("uses two second progress update cadence by default", async () => {
155217const draft = {
156218update: vi.fn(async () => true),
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。