
























@@ -10,6 +10,7 @@ import {
1010resolveImplicitCurrentMessageReplyAllowance,
1111} from "./reply-threading.js";
121213+/** Adds the BTW question banner for channels that only accept plain text bodies. */
1314export function formatBtwTextForExternalDelivery(payload: ReplyPayload): string | undefined {
1415const text = normalizeOptionalString(payload.text);
1516if (!text) {
@@ -48,6 +49,7 @@ function resolveReplyThreadingForPayload(params: {
4849replyToId: implicitReplyToId,
4950});
505152+// Inline reply tags override implicit threading without losing payload metadata.
5153if (typeof resolved.text === "string" && resolved.text.includes("[[")) {
5254const { cleaned, replyToId, replyToCurrent, hasTag } = extractReplyToTag(
5355resolved.text,
@@ -72,21 +74,25 @@ function resolveReplyThreadingForPayload(params: {
7274return resolved;
7375}
747677+/** Applies inline reply tags to a single payload. */
7578export function applyReplyTagsToPayload(
7679payload: ReplyPayload,
7780currentMessageId?: string,
7881): ReplyPayload {
7982return resolveReplyThreadingForPayload({ payload, currentMessageId });
8083}
818485+/** True when a payload has visible or playable content for delivery. */
8286export function isRenderablePayload(payload: ReplyPayload): boolean {
8387return hasReplyPayloadContent(payload, { extraContent: payload.audioAsVoice });
8488}
858990+/** True when a payload should stay internal as reasoning-only output. */
8691export function shouldSuppressReasoningPayload(payload: ReplyPayload): boolean {
8792return payload.isReasoning === true;
8893}
899495+/** Applies threading policy and filters empty payloads before channel delivery. */
9096export function applyReplyThreading(params: {
9197payloads: ReplyPayload[];
9298replyToMode: ReplyToMode;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。