Skip to content

Commit 40da4a3

Browse files
committed
fix(reply): preserve direct block emission order
1 parent ea7e5ee commit 40da4a3

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

src/auto-reply/reply/reply-delivery.test.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,4 +423,33 @@ describe("createBlockReplyDeliveryHandler", () => {
423423
assistantMessageIndex: 7,
424424
});
425425
});
426+
427+
it("records concurrent direct block deliveries in emission order", async () => {
428+
const resolvers: Array<() => void> = [];
429+
const directlySentBlockPayloads: Array<ReplyPayload | undefined> = [];
430+
const handler = createBlockReplyDeliveryHandler({
431+
onBlockReply: () =>
432+
new Promise<void>((resolve) => {
433+
resolvers.push(resolve);
434+
}),
435+
normalizeStreamingText: (payload) => ({ text: payload.text, skip: false }),
436+
applyReplyToMode: (payload) => payload,
437+
typingSignals: {
438+
signalTextDelta: vi.fn(async () => {}),
439+
} as unknown as TypingSignaler,
440+
blockStreamingEnabled: true,
441+
blockReplyPipeline: null,
442+
directlySentBlockKeys: new Set(),
443+
directlySentBlockPayloads,
444+
});
445+
446+
const first = handler({ text: "first" });
447+
const second = handler({ text: "second" });
448+
resolvers[1]?.();
449+
await second;
450+
resolvers[0]?.();
451+
await first;
452+
453+
expect(directlySentBlockPayloads.map((payload) => payload?.text)).toEqual(["first", "second"]);
454+
});
426455
});

0 commit comments

Comments
 (0)