Skip to content

Commit 9921825

Browse files
authored
Fix Telegram spooled buffered replay (#92281)
* fix telegram spooled buffered replay * fix telegram replay type checks * fix telegram replay lint * test telegram replay visible output retry guard * fix telegram rollback failure retry
1 parent 652e616 commit 9921825

18 files changed

Lines changed: 1473 additions & 118 deletions
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
8a2769df428906990ee0d1bf8b0423f2a099b053c64c816d092ff84d61e11633 plugin-sdk-api-baseline.json
2-
28b798973f3fb2a5b33ccbb6e3c1ac0453fa234a3a1c6cdc27935c27639bd104 plugin-sdk-api-baseline.jsonl
1+
ff7bd86cb1b243e0c94fdf9a74e7f985a7d73685b2b0cd0a8761972d145ca7a5 plugin-sdk-api-baseline.json
2+
a65283a99e28a300adffa26ed171a3e8b215d9c95e8a1656fc5ae8fd7fc011c6 plugin-sdk-api-baseline.jsonl

extensions/telegram/src/bot-core.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ import type { TelegramBotDeps } from "./bot-deps.js";
2828
import { registerTelegramHandlers } from "./bot-handlers.runtime.js";
2929
import { createTelegramMessageProcessor } from "./bot-message.js";
3030
import { registerTelegramNativeCommands } from "./bot-native-commands.js";
31+
import {
32+
getTelegramSpooledReplayDeferredParticipant,
33+
isTelegramSpooledReplayUpdate,
34+
runWithTelegramUpdateProcessingFrame,
35+
TelegramSpooledReplayProcessingError,
36+
} from "./bot-processing-outcome.js";
3137
import { createTelegramUpdateTracker } from "./bot-update-tracker.js";
3238
import type { TelegramUpdateKeyContext } from "./bot-updates.js";
3339
import { resolveDefaultAgentId } from "./bot.agent.runtime.js";
@@ -212,7 +218,29 @@ export function createTelegramBotCore(
212218
return;
213219
}
214220
try {
215-
await next();
221+
const { result } = await runWithTelegramUpdateProcessingFrame(async () => {
222+
await next();
223+
});
224+
const deferredWork = getTelegramSpooledReplayDeferredParticipant();
225+
if (deferredWork) {
226+
void deferredWork.task
227+
.then((deferredResult) => {
228+
updateTracker.finishUpdate(begin.update, {
229+
completed: deferredResult.kind !== "failed-retryable",
230+
});
231+
})
232+
.catch(() => {
233+
updateTracker.finishUpdate(begin.update, { completed: false });
234+
});
235+
return;
236+
}
237+
if (result?.kind === "failed-retryable") {
238+
if (isTelegramSpooledReplayUpdate(ctx.update)) {
239+
throw new TelegramSpooledReplayProcessingError(result.error);
240+
}
241+
updateTracker.finishUpdate(begin.update, { completed: true });
242+
return;
243+
}
216244
updateTracker.finishUpdate(begin.update, { completed: true });
217245
} catch (error) {
218246
updateTracker.finishUpdate(begin.update, { completed: false });

0 commit comments

Comments
 (0)