fix(discord): seed progress drafts at dispatch start

This commit is contained in:
Peter Steinberger
2026-05-03 22:19:12 +01:00
parent 257c5a517f
commit be324914cb
3 changed files with 33 additions and 3 deletions

View File

@@ -70,6 +70,7 @@ export function createDiscordDraftPreviewController(params: {
let hasStreamedMessage = false;
let finalizedViaPreviewMessage = false;
let finalDeliveryHandled = false;
let progressDraftStarted = false;
const previewToolProgressEnabled =
Boolean(draftStream) && resolveChannelStreamingPreviewToolProgress(params.discordConfig);
const suppressDefaultToolProgressMessages =
@@ -116,6 +117,9 @@ export function createDiscordDraftPreviewController(params: {
if (!draftStream || discordStreamMode !== "progress") {
return;
}
if (progressDraftStarted) {
return;
}
const previewText = formatChannelProgressDraftText({
entry: params.discordConfig,
lines: [],
@@ -124,6 +128,7 @@ export function createDiscordDraftPreviewController(params: {
if (!previewText || previewText === lastPartialText) {
return;
}
progressDraftStarted = true;
lastPartialText = previewText;
draftText = previewText;
hasStreamedMessage = true;

View File

@@ -1477,6 +1477,29 @@ describe("processDiscordMessage draft streaming", () => {
});
});
it("starts Discord progress drafts when accepted turns dispatch", async () => {
const draftStream = createMockDraftStreamForTest();
dispatchInboundMessage.mockImplementationOnce(async () => createNoQueuedDispatchResult());
const ctx = await createAutomaticSourceDeliveryContext({
discordConfig: {
streaming: {
mode: "progress",
progress: {
label: "Shelling",
},
},
},
});
await runProcessDiscordMessage(ctx);
expect(draftStream.update).toHaveBeenCalledTimes(1);
expect(draftStream.update).toHaveBeenCalledWith("Shelling");
expect(draftStream.flush).toHaveBeenCalledTimes(1);
});
it("keeps standalone Discord tool progress when partial preview lines are disabled", async () => {
createMockDraftStreamForTest();

View File

@@ -618,8 +618,9 @@ export async function processDiscordMessage(
limit: historyLimit,
},
onPreDispatchFailure: settleDispatchBeforeStart,
runDispatch: () =>
dispatchInboundMessage({
runDispatch: async () => {
await draftPreview.startProgressDraft();
return await dispatchInboundMessage({
ctx: ctxPayload,
cfg,
dispatcher,
@@ -712,7 +713,8 @@ export async function processDiscordMessage(
await statusReactions.setThinking();
},
},
}),
});
},
}),
},
});