From 83071e1be87d1caf8beaf92f8453edb5cba77472 Mon Sep 17 00:00:00 2001 From: "paseo-bot[bot]" <266920839+paseo-bot[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2026 18:12:28 +0000 Subject: [PATCH] fix(codex): await patch notifications before approval Approval requests bypass the session's notification conversion queue. Drain earlier notifications before reading the patch preview so an approval in the same stdout batch receives its matching file and diff. Co-authored-by: Okan YILDIRIM <63511519+ragokan@users.noreply.github.com> --- .../src/server/agent/providers/codex-app-server-agent.test.ts | 4 +--- .../src/server/agent/providers/codex-app-server-agent.ts | 3 ++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/server/src/server/agent/providers/codex-app-server-agent.test.ts b/packages/server/src/server/agent/providers/codex-app-server-agent.test.ts index b56999c4fb..54bf967cac 100644 --- a/packages/server/src/server/agent/providers/codex-app-server-agent.test.ts +++ b/packages/server/src/server/agent/providers/codex-app-server-agent.test.ts @@ -228,7 +228,7 @@ function deferred() { } describe("Codex file-change approvals", () => { - test("file-change approval includes the matching started patch", async () => { + test("file-change approval includes the matching patch when notifications are still queued", async () => { const appServer = createFakeCodexAppServer(); const { session } = await startPublicSteeringSession(appServer); try { @@ -236,7 +236,6 @@ describe("Codex file-change approvals", () => { ["file-alpha", "/workspace/project/alpha.txt", "@@ -1 +1 @@\n-blue\n+green\n"], ["file-beta", "/workspace/project/beta.txt", "@@ -1 +1 @@\n-small\n+large\n"], ]) { - const started = waitForTimelineToolCall(session, id); appServer.child.stdout.write( `${JSON.stringify({ method: "item/started", @@ -252,7 +251,6 @@ describe("Codex file-change approvals", () => { }, })}\n`, ); - await started; } const permission = waitForNextPermission(session); appServer.requestFileChangeApproval({ diff --git a/packages/server/src/server/agent/providers/codex-app-server-agent.ts b/packages/server/src/server/agent/providers/codex-app-server-agent.ts index 473a38738e..a3e87087bb 100644 --- a/packages/server/src/server/agent/providers/codex-app-server-agent.ts +++ b/packages/server/src/server/agent/providers/codex-app-server-agent.ts @@ -7262,7 +7262,8 @@ export class CodexAppServerAgentSession implements AgentSession { }); } - private handleFileChangeApprovalRequest(params: unknown): Promise { + private async handleFileChangeApprovalRequest(params: unknown): Promise { + await this.pendingNotifications; const parsed = z .object({ itemId: z.string(),