mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-02 16:47:14 +00:00
fix: clean telegram draft preview on dispatch errors
This commit is contained in:
@@ -687,6 +687,20 @@ describe("dispatchTelegramMessage draft streaming", () => {
|
||||
expect(draftStream.clear).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it("clears preview when dispatcher throws before fallback phase", async () => {
|
||||
const draftStream = createDraftStream(999);
|
||||
createTelegramDraftStream.mockReturnValue(draftStream);
|
||||
dispatchReplyWithBufferedBlockDispatcher.mockRejectedValue(new Error("dispatcher exploded"));
|
||||
|
||||
await expect(dispatchWithContext({ context: createContext() })).rejects.toThrow(
|
||||
"dispatcher exploded",
|
||||
);
|
||||
|
||||
expect(draftStream.stop).toHaveBeenCalledTimes(1);
|
||||
expect(draftStream.clear).toHaveBeenCalledTimes(1);
|
||||
expect(deliverReplies).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("supports concurrent dispatches with independent previews", async () => {
|
||||
const draftA = createDraftStream(11);
|
||||
const draftB = createDraftStream(22);
|
||||
|
||||
@@ -312,6 +312,7 @@ export const dispatchTelegramMessage = async ({
|
||||
};
|
||||
|
||||
let queuedFinal = false;
|
||||
let dispatchError: unknown;
|
||||
try {
|
||||
({ queuedFinal } = await dispatchReplyWithBufferedBlockDispatcher({
|
||||
ctx: ctxPayload,
|
||||
@@ -487,12 +488,15 @@ export const dispatchTelegramMessage = async ({
|
||||
onModelSelected,
|
||||
},
|
||||
}));
|
||||
} catch (err) {
|
||||
dispatchError = err;
|
||||
} finally {
|
||||
await draftStream?.stop();
|
||||
}
|
||||
let sentFallback = false;
|
||||
try {
|
||||
if (
|
||||
!dispatchError &&
|
||||
!deliveryState.delivered &&
|
||||
(deliveryState.skippedNonSilent > 0 || deliveryState.failedDeliveries > 0)
|
||||
) {
|
||||
@@ -505,6 +509,9 @@ export const dispatchTelegramMessage = async ({
|
||||
} finally {
|
||||
await clearDraftPreviewIfNeeded();
|
||||
}
|
||||
if (dispatchError) {
|
||||
throw dispatchError;
|
||||
}
|
||||
|
||||
const hasFinalResponse = queuedFinal || sentFallback;
|
||||
if (!hasFinalResponse) {
|
||||
|
||||
Reference in New Issue
Block a user