From e51090e6a11d57a596a8b9da1738f8042a612e1d Mon Sep 17 00:00:00 2001 From: Kelaw - Keshav's Agent Date: Wed, 6 May 2026 11:26:58 +0530 Subject: [PATCH] Preserve suppressed item progress without tool callbacks --- .../reply/agent-runner-execution.test.ts | 48 +++++++++++++++++++ .../reply/agent-runner-execution.ts | 6 ++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/auto-reply/reply/agent-runner-execution.test.ts b/src/auto-reply/reply/agent-runner-execution.test.ts index a27012c2a77..fbbac755612 100644 --- a/src/auto-reply/reply/agent-runner-execution.test.ts +++ b/src/auto-reply/reply/agent-runner-execution.test.ts @@ -1194,6 +1194,54 @@ describe("runAgentTurnWithFallback", () => { }); }); + it("preserves suppressed item progress when no tool-start callback is registered", async () => { + const onItemEvent = vi.fn(); + state.runEmbeddedPiAgentMock.mockImplementationOnce(async (params: EmbeddedAgentParams) => { + await params.onAgentEvent?.({ + stream: "item", + data: { + itemId: "cmd-1", + kind: "command", + title: "Command", + name: "bash", + phase: "start", + status: "running", + suppressChannelProgress: true, + }, + }); + await params.onAgentEvent?.({ + stream: "tool", + data: { + itemId: "cmd-1", + toolCallId: "cmd-1", + name: "bash", + phase: "start", + args: { command: "pnpm test" }, + }, + }); + return { payloads: [{ text: "final" }], meta: {} }; + }); + + const runAgentTurnWithFallback = await getRunAgentTurnWithFallback(); + const result = await runAgentTurnWithFallback({ + ...createMinimalRunAgentTurnParams({ + opts: { + onItemEvent, + } satisfies GetReplyOptions, + }), + }); + + expect(result.kind).toBe("success"); + expect(onItemEvent).toHaveBeenCalledWith({ + itemId: "cmd-1", + kind: "command", + title: "Command", + name: "bash", + phase: "start", + status: "running", + }); + }); + it("forwards raw tool progress detail mode to tool-start reply options", async () => { const onToolStart = vi.fn(); state.runEmbeddedPiAgentMock.mockImplementationOnce(async (params: EmbeddedAgentParams) => { diff --git a/src/auto-reply/reply/agent-runner-execution.ts b/src/auto-reply/reply/agent-runner-execution.ts index 18eb88929c9..99b7e961e96 100644 --- a/src/auto-reply/reply/agent-runner-execution.ts +++ b/src/auto-reply/reply/agent-runner-execution.ts @@ -1675,7 +1675,11 @@ export async function runAgentTurnWithFallback(params: { ]); } } - if (evt.stream === "item" && evt.data.suppressChannelProgress !== true) { + const suppressItemChannelProgress = + evt.stream === "item" && + evt.data.suppressChannelProgress === true && + Boolean(params.opts?.onToolStart); + if (evt.stream === "item" && !suppressItemChannelProgress) { await params.opts?.onItemEvent?.({ itemId: readStringValue(evt.data.itemId), kind: readStringValue(evt.data.kind),