fix(discord): seed progress drafts at dispatch start · openclaw/openclaw@be32491
steipete
·
2026-05-04
·
via Recent Commits to openclaw:main
File tree
extensions/discord/src/monitor
| Original file line number | Diff line number | Diff line change |
|---|
@@ -70,6 +70,7 @@ export function createDiscordDraftPreviewController(params: {
|
70 | 70 | let hasStreamedMessage = false; |
71 | 71 | let finalizedViaPreviewMessage = false; |
72 | 72 | let finalDeliveryHandled = false; |
| 73 | +let progressDraftStarted = false; |
73 | 74 | const previewToolProgressEnabled = |
74 | 75 | Boolean(draftStream) && resolveChannelStreamingPreviewToolProgress(params.discordConfig); |
75 | 76 | const suppressDefaultToolProgressMessages = |
@@ -116,6 +117,9 @@ export function createDiscordDraftPreviewController(params: {
|
116 | 117 | if (!draftStream || discordStreamMode !== "progress") { |
117 | 118 | return; |
118 | 119 | } |
| 120 | +if (progressDraftStarted) { |
| 121 | +return; |
| 122 | +} |
119 | 123 | const previewText = formatChannelProgressDraftText({ |
120 | 124 | entry: params.discordConfig, |
121 | 125 | lines: [], |
@@ -124,6 +128,7 @@ export function createDiscordDraftPreviewController(params: {
|
124 | 128 | if (!previewText || previewText === lastPartialText) { |
125 | 129 | return; |
126 | 130 | } |
| 131 | +progressDraftStarted = true; |
127 | 132 | lastPartialText = previewText; |
128 | 133 | draftText = previewText; |
129 | 134 | hasStreamedMessage = true; |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -1477,6 +1477,29 @@ describe("processDiscordMessage draft streaming", () => {
|
1477 | 1477 | }); |
1478 | 1478 | }); |
1479 | 1479 | |
| 1480 | +it("starts Discord progress drafts when accepted turns dispatch", async () => { |
| 1481 | +const draftStream = createMockDraftStreamForTest(); |
| 1482 | + |
| 1483 | +dispatchInboundMessage.mockImplementationOnce(async () => createNoQueuedDispatchResult()); |
| 1484 | + |
| 1485 | +const ctx = await createAutomaticSourceDeliveryContext({ |
| 1486 | +discordConfig: { |
| 1487 | +streaming: { |
| 1488 | +mode: "progress", |
| 1489 | +progress: { |
| 1490 | +label: "Shelling", |
| 1491 | +}, |
| 1492 | +}, |
| 1493 | +}, |
| 1494 | +}); |
| 1495 | + |
| 1496 | +await runProcessDiscordMessage(ctx); |
| 1497 | + |
| 1498 | +expect(draftStream.update).toHaveBeenCalledTimes(1); |
| 1499 | +expect(draftStream.update).toHaveBeenCalledWith("Shelling"); |
| 1500 | +expect(draftStream.flush).toHaveBeenCalledTimes(1); |
| 1501 | +}); |
| 1502 | + |
1480 | 1503 | it("keeps standalone Discord tool progress when partial preview lines are disabled", async () => { |
1481 | 1504 | createMockDraftStreamForTest(); |
1482 | 1505 | |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -618,8 +618,9 @@ export async function processDiscordMessage(
|
618 | 618 | limit: historyLimit, |
619 | 619 | }, |
620 | 620 | onPreDispatchFailure: settleDispatchBeforeStart, |
621 | | -runDispatch: () => |
622 | | -dispatchInboundMessage({ |
| 621 | +runDispatch: async () => { |
| 622 | +await draftPreview.startProgressDraft(); |
| 623 | +return await dispatchInboundMessage({ |
623 | 624 | ctx: ctxPayload, |
624 | 625 | cfg, |
625 | 626 | dispatcher, |
@@ -712,7 +713,8 @@ export async function processDiscordMessage(
|
712 | 713 | await statusReactions.setThinking(); |
713 | 714 | }, |
714 | 715 | }, |
715 | | -}), |
| 716 | +}); |
| 717 | +}, |
716 | 718 | }), |
717 | 719 | }, |
718 | 720 | }); |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。