

























@@ -1047,6 +1047,42 @@ describe("dispatchPreparedSlackMessage preview fallback", () => {
10471047expect(draftStream.clear).not.toHaveBeenCalled();
10481048});
104910491050+it("does not clear a finalized Slack draft when a later tool warning is delivered", async () => {
1051+const draftStream = {
1052+ ...createDraftStreamStub(),
1053+flush: vi.fn(noopAsync),
1054+clear: vi.fn(noopAsync),
1055+discardPending: vi.fn(noopAsync),
1056+seal: vi.fn(noopAsync),
1057+};
1058+createSlackDraftStreamMock.mockReturnValueOnce(draftStream);
1059+finalizeSlackPreviewEditMock.mockResolvedValueOnce(undefined);
1060+mockedDispatchSequence = [
1061+{ kind: "final", payload: { text: "answer" } },
1062+{ kind: "final", payload: { text: "⚠️ Apply Patch failed", isError: true } },
1063+];
1064+1065+await dispatchPreparedSlackMessage(
1066+createPreparedSlackMessage({
1067+accountConfig: { streaming: { mode: "partial", preview: { toolProgress: false } } },
1068+}),
1069+);
1070+1071+expect(finalizeSlackPreviewEditMock).toHaveBeenCalledTimes(1);
1072+expectMockCallArgFields(finalizeSlackPreviewEditMock, 0, "preview edit params", {
1073+channelId: "C123",
1074+messageId: "171234.567",
1075+text: "answer",
1076+});
1077+const delivered = requireRecord(
1078+requireMockCall(deliverRepliesMock, 0, "deliver replies")[0],
1079+"deliver replies params",
1080+);
1081+expect(delivered.replies).toEqual([{ text: "⚠️ Apply Patch failed", isError: true }]);
1082+expect(draftStream.seal).toHaveBeenCalledTimes(1);
1083+expect(draftStream.clear).not.toHaveBeenCalled();
1084+});
1085+10501086it("suppresses block streaming when Slack draft preview streaming is active", async () => {
10511087mockedBlockStreamingEnabled = true;
10521088此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。