fix(telegram): land #38906 from @gambletan

Landed from contributor PR #38906 by @gambletan.

Co-authored-by: gambletan <ethanchang32@gmail.com>
This commit is contained in:
Peter Steinberger
2026-03-08 00:54:49 +00:00
parent 4869e24915
commit a505be78ab
3 changed files with 11 additions and 5 deletions

View File

@@ -1171,7 +1171,7 @@ describe("dispatchTelegramMessage draft streaming", () => {
},
);
it("uses message preview transport for DM reasoning lane when answer preview lane is active", async () => {
it("uses message preview transport for all DM lanes when streaming is active", async () => {
setupDraftStreams({ answerMessageId: 999, reasoningMessageId: 111 });
dispatchReplyWithBufferedBlockDispatcher.mockImplementation(
async ({ dispatcherOptions, replyOptions }) => {
@@ -1187,10 +1187,12 @@ describe("dispatchTelegramMessage draft streaming", () => {
await dispatchWithContext({ context: createReasoningStreamContext(), streamMode: "partial" });
expect(createTelegramDraftStream).toHaveBeenCalledTimes(2);
// Both answer (call[0]) and reasoning (call[1]) lanes should use message
// transport in DMs to prevent duplicate messages. (Fixes #33453)
expect(createTelegramDraftStream.mock.calls[0]?.[0]).toEqual(
expect.objectContaining({
thread: { id: 777, scope: "dm" },
previewTransport: "auto",
previewTransport: "message",
}),
);
expect(createTelegramDraftStream.mock.calls[1]?.[0]).toEqual(

View File

@@ -194,15 +194,18 @@ export const dispatchTelegramMessage = async ({
const archivedAnswerPreviews: ArchivedPreview[] = [];
const archivedReasoningPreviewIds: number[] = [];
const createDraftLane = (laneName: LaneName, enabled: boolean): DraftLaneState => {
const useMessagePreviewTransportForDmReasoning =
laneName === "reasoning" && threadSpec?.scope === "dm" && canStreamAnswerDraft;
// 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,
chatId,
maxChars: draftMaxChars,
thread: threadSpec,
previewTransport: useMessagePreviewTransportForDmReasoning ? "message" : "auto",
previewTransport: useMessagePreviewTransportForDm ? "message" : "auto",
replyToMessageId: draftReplyToMessageId,
minInitialChars: draftMinInitialChars,
renderText: renderDraftPreview,