
























@@ -240,7 +240,7 @@ describe("createAcpDispatchDeliveryCoordinator", () => {
240240expect(coordinator.getRoutedCounts().block).toBe(0);
241241});
242242243-it("waits for direct block dispatcher delivery before resolving block delivery", async () => {
243+it("does not wait for direct block dispatcher delivery before resolving block delivery", async () => {
244244const delivered: unknown[] = [];
245245let releaseDelivery: (() => void) | undefined;
246246let markDeliveryStarted: (() => void) | undefined;
@@ -276,13 +276,68 @@ describe("createAcpDispatchDeliveryCoordinator", () => {
276276});
277277278278await deliveryStarted;
279+await Promise.resolve();
279280280281expect(delivered).toEqual([{ text: "hello" }]);
281-expect(deliverySettled).toBe(false);
282+expect(deliverySettled).toBe(true);
282283283284releaseDelivery?.();
284285await expect(deliveryPromise).resolves.toBe(true);
285286expect(deliverySettled).toBe(true);
287+await dispatcher.waitForIdle();
288+});
289+290+it("waits for pending direct block delivery before resolving tool delivery", async () => {
291+const delivered: unknown[] = [];
292+let releaseDelivery: (() => void) | undefined;
293+let markDeliveryStarted: (() => void) | undefined;
294+const deliveryStarted = new Promise<void>((resolve) => {
295+markDeliveryStarted = resolve;
296+});
297+const deliveryGate = new Promise<void>((resolve) => {
298+releaseDelivery = resolve;
299+});
300+const dispatcher = createReplyDispatcher({
301+deliver: async (payload) => {
302+delivered.push(payload);
303+markDeliveryStarted?.();
304+await deliveryGate;
305+},
306+});
307+const coordinator = createAcpDispatchDeliveryCoordinator({
308+cfg: createAcpTestConfig(),
309+ctx: buildTestCtx({
310+Provider: "visiblechat",
311+Surface: "visiblechat",
312+SessionKey: "agent:codex-acp:session-1",
313+}),
314+ dispatcher,
315+inboundAudio: false,
316+shouldRouteToOriginating: false,
317+});
318+319+await expect(coordinator.deliver("block", { text: "hello" }, { skipTts: true })).resolves.toBe(
320+true,
321+);
322+await deliveryStarted;
323+324+let toolDeliverySettled = false;
325+const toolDeliveryPromise = coordinator
326+.deliver("tool", { text: "tool result" }, { skipTts: true })
327+.then((result) => {
328+toolDeliverySettled = true;
329+return result;
330+});
331+332+await Promise.resolve();
333+334+expect(delivered).toEqual([{ text: "hello" }]);
335+expect(toolDeliverySettled).toBe(false);
336+337+releaseDelivery?.();
338+await expect(toolDeliveryPromise).resolves.toBe(true);
339+expect(toolDeliverySettled).toBe(true);
340+expect(delivered).toEqual([{ text: "hello" }, { text: "tool result" }]);
286341});
287342288343it("stops waiting for direct block delivery when the ACP dispatch aborts", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。