From e6c7fa984c3fd0f2fc9082aa5655e488d4c0b677 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Thu, 12 Mar 2026 01:26:22 -0400 Subject: [PATCH] Telegram: share draft stream runtime state --- src/telegram/draft-stream.ts | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/telegram/draft-stream.ts b/src/telegram/draft-stream.ts index ddb0595312b..0b7b02b5b38 100644 --- a/src/telegram/draft-stream.ts +++ b/src/telegram/draft-stream.ts @@ -21,11 +21,23 @@ type TelegramSendMessageDraft = ( }, ) => Promise; -let nextDraftId = 0; +/** + * Keep draft-id allocation shared across bundled chunks so concurrent preview + * lanes do not accidentally reuse draft ids when code-split entries coexist. + */ +const _g = globalThis as typeof globalThis & { + __openclaw_telegram_draft_stream_state__?: { + nextDraftId: number; + }; +}; +const draftStreamState = (_g.__openclaw_telegram_draft_stream_state__ ??= { + nextDraftId: 0, +}); function allocateTelegramDraftId(): number { - nextDraftId = nextDraftId >= TELEGRAM_DRAFT_ID_MAX ? 1 : nextDraftId + 1; - return nextDraftId; + draftStreamState.nextDraftId = + draftStreamState.nextDraftId >= TELEGRAM_DRAFT_ID_MAX ? 1 : draftStreamState.nextDraftId + 1; + return draftStreamState.nextDraftId; } function resolveSendMessageDraftApi(api: Bot["api"]): TelegramSendMessageDraft | undefined { @@ -441,3 +453,9 @@ export function createTelegramDraftStream(params: { sendMayHaveLanded: () => messageSendAttempted && typeof streamMessageId !== "number", }; } + +export const __testing = { + resetTelegramDraftStreamForTests() { + draftStreamState.nextDraftId = 0; + }, +};