diff --git a/src/telegram/bot-message-dispatch.ts b/src/telegram/bot-message-dispatch.ts index 42640546e24..111e5991a72 100644 --- a/src/telegram/bot-message-dispatch.ts +++ b/src/telegram/bot-message-dispatch.ts @@ -190,15 +190,15 @@ export const dispatchTelegramMessage = async ({ const draftReplyToMessageId = replyToMode !== "off" && typeof msg.message_id === "number" ? msg.message_id : undefined; const draftMinInitialChars = DRAFT_MIN_INITIAL_CHARS; + // Use message transport (sendMessage + editMessageText) for all lanes in + // DMs so that streamMessageId is tracked. Draft transport doesn't track a + // messageId, causing resolvePreviewTarget() to miss the preview on final + // delivery — which sends a duplicate message. (Fixes #33453) + const useMessagePreviewTransportForDm = threadSpec?.scope === "dm" && canStreamAnswerDraft; const mediaLocalRoots = getAgentScopedMediaLocalRoots(cfg, route.agentId); const archivedAnswerPreviews: ArchivedPreview[] = []; const archivedReasoningPreviewIds: number[] = []; const createDraftLane = (laneName: LaneName, enabled: boolean): DraftLaneState => { - // Use message transport (sendMessage + editMessageText) for all lanes in - // DMs so that streamMessageId is tracked. Draft transport doesn't track a - // messageId, causing resolvePreviewTarget() to miss the preview on final - // delivery — which sends a duplicate message. (Fixes #33453) - const useMessagePreviewTransportForDm = threadSpec?.scope === "dm" && canStreamAnswerDraft; const stream = enabled ? createTelegramDraftStream({ api: bot.api,