fix(telegram): preserve final overflow state · openclaw/openclaw@bda924b
obviyus
·
2026-05-28
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -505,6 +505,25 @@ describe("createTelegramDraftStream", () => {
|
505 | 505 | ); |
506 | 506 | }); |
507 | 507 | |
| 508 | +it("continues finalizing more than two overflow chunks after a clamped preview", async () => { |
| 509 | +const api = createMockDraftApi(); |
| 510 | +api.sendMessage |
| 511 | +.mockResolvedValueOnce({ message_id: 17 }) |
| 512 | +.mockResolvedValueOnce({ message_id: 42 }) |
| 513 | +.mockResolvedValueOnce({ message_id: 43 }); |
| 514 | +const stream = createDraftStream(api, { maxChars: 10 }); |
| 515 | + |
| 516 | +stream.update("1234567890ABCDEFGHIJKLMNOPQRST"); |
| 517 | +await stream.flush(); |
| 518 | +await stream.stop(); |
| 519 | + |
| 520 | +expect(api.sendMessage).toHaveBeenCalledTimes(3); |
| 521 | +expect(api.sendMessage).toHaveBeenNthCalledWith(1, 123, "1234567890", undefined); |
| 522 | +expect(api.sendMessage).toHaveBeenNthCalledWith(2, 123, "ABCDEFGHIJ", undefined); |
| 523 | +expect(api.sendMessage).toHaveBeenNthCalledWith(3, 123, "KLMNOPQRST", undefined); |
| 524 | +expect(stream.lastDeliveredText?.()).toBe("1234567890ABCDEFGHIJKLMNOPQRST"); |
| 525 | +}); |
| 526 | + |
508 | 527 | it("retains final overflow preview pages", async () => { |
509 | 528 | const api = createMockDraftApi(); |
510 | 529 | api.sendMessage |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -117,7 +117,11 @@ export function createTelegramDraftStream(params: {
|
117 | 117 | let previewRevision = 0; |
118 | 118 | let generation = 0; |
119 | 119 | let deliveredTextOffset = 0; |
120 | | -let resetStreamToNewMessage: (options?: { keepPending?: boolean; resetOffset?: boolean }) => void; |
| 120 | +let resetStreamToNewMessage: (options?: { |
| 121 | +keepFinal?: boolean; |
| 122 | +keepPending?: boolean; |
| 123 | +resetOffset?: boolean; |
| 124 | +}) => void; |
121 | 125 | type PreviewSendParams = { |
122 | 126 | renderedText: string; |
123 | 127 | renderedParseMode: "HTML" | undefined; |
@@ -227,7 +231,7 @@ export function createTelegramDraftStream(params: {
|
227 | 231 | const supersededParseMode = lastSentParseMode; |
228 | 232 | const supersededVisibleSinceMs = streamVisibleSinceMs; |
229 | 233 | deliveredTextOffset = lastDeliveredText.length; |
230 | | -resetStreamToNewMessage({ keepPending: true, resetOffset: false }); |
| 234 | +resetStreamToNewMessage({ keepFinal: true, keepPending: true, resetOffset: false }); |
231 | 235 | if (typeof supersededMessageId === "number") { |
232 | 236 | params.onSupersededPreview?.({ |
233 | 237 | messageId: supersededMessageId, |
@@ -314,7 +318,7 @@ export function createTelegramDraftStream(params: {
|
314 | 318 | |
315 | 319 | resetStreamToNewMessage = (options) => { |
316 | 320 | streamState.stopped = false; |
317 | | -streamState.final = false; |
| 321 | +streamState.final = options?.keepFinal === true; |
318 | 322 | generation += 1; |
319 | 323 | messageSendAttempted = false; |
320 | 324 | streamMessageId = undefined; |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。