




















@@ -163,7 +163,6 @@ export async function buildReplyPayloads(params: {
163163blockStreamingEnabled: boolean;
164164blockReplyPipeline: BlockReplyPipeline | null;
165165/** Payload keys sent directly (not via pipeline) during tool flush. */
166-previewStreamedText?: string;
167166directlySentBlockKeys?: Set<string>;
168167replyToMode: ReplyToMode;
169168replyToChannel?: OriginatingChannelType;
@@ -330,54 +329,6 @@ export async function buildReplyPayloads(params: {
330329 : mediaFilteredPayloads;
331330const isDirectlySentBlockPayload = (payload: ReplyPayload) =>
332331Boolean(params.directlySentBlockKeys?.has(createBlockReplyContentKey(payload)));
333-const normalizePreviewDedupeText = (value: string | undefined): string =>
334-(value ?? "").replace(/\s+/g, " ").trim();
335-const buildPreviewDedupeTextSet = (value: string | undefined): Set<string> => {
336-const dedupeText = new Set<string>();
337-const normalizedWhole = normalizePreviewDedupeText(value);
338-if (normalizedWhole) {
339-dedupeText.add(normalizedWhole);
340-}
341-for (const block of (value ?? "").split(/\n{2,}/u)) {
342-const normalizedBlock = normalizePreviewDedupeText(block);
343-if (normalizedBlock) {
344-dedupeText.add(normalizedBlock);
345-}
346-}
347-return dedupeText;
348-};
349-const previewStreamedText = buildPreviewDedupeTextSet(params.previewStreamedText);
350-const isPreviewStreamedTextPayload = (payload: ReplyPayload): boolean => {
351-if (previewStreamedText.size === 0 || payload.isError) {
352-return false;
353-}
354-const text = normalizePreviewDedupeText(payload.text);
355-return Boolean(text && previewStreamedText.has(text));
356-};
357-const preserveUnsentMediaAfterPreviewStream = (payload: ReplyPayload): ReplyPayload | null => {
358-if (!isPreviewStreamedTextPayload(payload)) {
359-return payload;
360-}
361-const reply = resolveSendableOutboundReplyParts(payload);
362-if (!reply.hasMedia) {
363-return null;
364-}
365-return copyReplyPayloadMetadata(payload, {
366- ...payload,
367-text: undefined,
368-audioAsVoice: payload.audioAsVoice || undefined,
369-});
370-};
371-const suppressPreviewStreamedPayloads = (payloads: ReplyPayload[]): ReplyPayload[] => {
372-const unsent: ReplyPayload[] = [];
373-for (const payload of payloads) {
374-const next = preserveUnsentMediaAfterPreviewStream(payload);
375-if (next) {
376-unsent.push(next);
377-}
378-}
379-return unsent;
380-};
381332const preserveUnsentMediaAfterBlockStream = (payload: ReplyPayload): ReplyPayload | null => {
382333if (payload.isError || payload.isFallbackNotice) {
383334return payload;
@@ -438,9 +389,7 @@ export async function buildReplyPayloads(params: {
438389}
439390return unsent;
440391})()
441- : previewStreamedText.size > 0
442- ? suppressPreviewStreamedPayloads(dedupedPayloads)
443- : dedupedPayloads;
392+ : dedupedPayloads;
444393const blockSentMediaUrls = params.blockStreamingEnabled
445394 ? await normalizeSentMediaUrlsForDedupe({
446395sentMediaUrls: params.blockReplyPipeline?.getSentMediaUrls() ?? [],
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。