From 22b4eec4187e4628524b4956ea0e985a5b77d62d Mon Sep 17 00:00:00 2001 From: Fermin Quant Date: Sun, 24 May 2026 22:06:37 -0400 Subject: [PATCH] fix(codex): preserve source reply mode for active runs --- .../codex/src/app-server/run-attempt.test.ts | 38 +++++++++++++++++++ .../codex/src/app-server/run-attempt.ts | 1 + 2 files changed, 39 insertions(+) diff --git a/extensions/codex/src/app-server/run-attempt.test.ts b/extensions/codex/src/app-server/run-attempt.test.ts index 373041dcc4a..d8682c98c62 100644 --- a/extensions/codex/src/app-server/run-attempt.test.ts +++ b/extensions/codex/src/app-server/run-attempt.test.ts @@ -7884,6 +7884,44 @@ describe("runCodexAppServerAttempt", () => { expect(interrupt?.params).toEqual({ threadId: "thread-1", turnId: "turn-1" }); }); + it("accepts message-tool-only steering for active Codex app-server source replies", async () => { + const { requests, waitForMethod, completeTurn } = createStartedThreadHarness(); + const params = createParams( + path.join(tempDir, "session.jsonl"), + path.join(tempDir, "workspace"), + ); + params.sourceReplyDeliveryMode = "message_tool_only"; + + const run = runCodexAppServerAttempt(params); + await waitForMethod("turn/start"); + + expect( + queueActiveRunMessageForTest("session-1", "subagent complete", { + debounceMs: 1, + steeringMode: "all", + sourceReplyDeliveryMode: "message_tool_only", + }), + ).toBe(true); + + await vi.waitFor( + () => + expect(requests.filter((entry) => entry.method === "turn/steer")).toEqual([ + { + method: "turn/steer", + params: { + threadId: "thread-1", + expectedTurnId: "turn-1", + input: [{ type: "text", text: "subagent complete", text_elements: [] }], + }, + }, + ]), + { interval: 1 }, + ); + + await completeTurn({ threadId: "thread-1", turnId: "turn-1" }); + await run; + }); + it("batches default queued steering before sending turn/steer", async () => { const { requests, waitForMethod, completeTurn } = createStartedThreadHarness(); diff --git a/extensions/codex/src/app-server/run-attempt.ts b/extensions/codex/src/app-server/run-attempt.ts index 91ff86735c0..9dff72eae26 100644 --- a/extensions/codex/src/app-server/run-attempt.ts +++ b/extensions/codex/src/app-server/run-attempt.ts @@ -2929,6 +2929,7 @@ export async function runCodexAppServerAttempt( activeSteeringQueue.queue(text, options), isStreaming: () => !completed, isCompacting: () => projector?.isCompacting() ?? false, + sourceReplyDeliveryMode: params.sourceReplyDeliveryMode, cancel: () => runAbortController.abort("cancelled"), abort: () => runAbortController.abort("aborted"), };