

























@@ -490,6 +490,63 @@ describe("buildReplyPayloads media filter integration", () => {
490490expect(replyPayloads).toHaveLength(0);
491491});
492492493+it("suppresses final text payloads already covered by partial preview streaming", async () => {
494+const { replyPayloads } = await buildReplyPayloads({
495+ ...baseParams,
496+previewStreamedText: "First block\n\nSecond block",
497+payloads: [{ text: "First block" }, { text: "Second block" }],
498+});
499+500+expect(replyPayloads).toHaveLength(0);
501+});
502+503+it("keeps final text that was not covered by partial preview streaming", async () => {
504+const { replyPayloads } = await buildReplyPayloads({
505+ ...baseParams,
506+previewStreamedText: "Working...",
507+payloads: [{ text: "Done." }],
508+});
509+510+expect(replyPayloads).toHaveLength(1);
511+expectFields(replyPayloads[0], { text: "Done." });
512+});
513+514+it("does not suppress short final text just because it appears inside preview text", async () => {
515+const { replyPayloads } = await buildReplyPayloads({
516+ ...baseParams,
517+previewStreamedText: "Working on item 3",
518+payloads: [{ text: "3" }],
519+});
520+521+expect(replyPayloads).toHaveLength(1);
522+expectFields(replyPayloads[0], { text: "3" });
523+});
524+525+it("preserves media while removing duplicate preview-streamed caption text", async () => {
526+const { replyPayloads } = await buildReplyPayloads({
527+ ...baseParams,
528+previewStreamedText: "Here is the chart",
529+payloads: [{ text: "Here is the chart", mediaUrl: "file:///tmp/chart.png" }],
530+});
531+532+expect(replyPayloads).toHaveLength(1);
533+expectFields(replyPayloads[0], {
534+text: undefined,
535+mediaUrl: "file:///tmp/chart.png",
536+});
537+});
538+539+it("preserves errors even when their text appears in partial preview streaming", async () => {
540+const { replyPayloads } = await buildReplyPayloads({
541+ ...baseParams,
542+previewStreamedText: "Agent couldn't generate a response. Please try again.",
543+payloads: [{ text: "Agent couldn't generate a response. Please try again.", isError: true }],
544+});
545+546+expect(replyPayloads).toHaveLength(1);
547+expectFields(replyPayloads[0], { isError: true });
548+});
549+493550it("drops all final payloads when block pipeline streamed successfully", async () => {
494551const pipeline: Parameters<typeof buildReplyPayloads>[0]["blockReplyPipeline"] = {
495552didStream: () => true,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。