diff --git a/src/backend/codex-stdio.ts b/src/backend/codex-stdio.ts index e9d6475..d4bbe50 100644 --- a/src/backend/codex-stdio.ts +++ b/src/backend/codex-stdio.ts @@ -449,6 +449,12 @@ async function runCodexStdioTurnWithSession(options: CodexStdioTurnOptions, sess const emitEvents = (nextEvents: BackendEvent[]): void => { for (const event of nextEvents) emitEvent(event); }; + const appendResultEvent = (event: BackendEvent): void => { + events.push({ ...event, payload: redactJson(event.payload) }); + }; + const appendResultEvents = (nextEvents: BackendEvent[]): void => { + for (const event of nextEvents) appendResultEvent(event); + }; if (options.abortSignal?.aborted) { const cancelled = { status: "cancelled" as const, failureKind: "cancelled" as const, message: "cancel requested" }; events.push({ type: "backend_status", payload: { phase: "turn-cancelled", failureKind: "cancelled" } }); @@ -822,14 +828,14 @@ async function runCodexStdioTurnWithSession(options: CodexStdioTurnOptions, sess if (!terminal) terminal = { status: "failed", failureKind: "backend-response-invalid", message: "codex app-server finished without terminal status" }; const pendingInterrupt: Promise | null = interruptInFlight as Promise | null; if (pendingInterrupt) await pendingInterrupt.catch(() => undefined); - if (terminal.status !== "completed") emitEvents(await session.close()); - emitEvents(flushAssistantDeltaProgress(assistantDeltaProgress)); + if (terminal.status !== "completed") appendResultEvents(await session.close()); + appendResultEvents(flushAssistantDeltaProgress(assistantDeltaProgress)); const finalAssistant = terminal.status === "completed" ? finalAssistantMessageForTurn(completedAssistantMessages, assistantText) : null; - if (finalAssistant) emitEvent(assistantFinalResponseEvent(finalAssistant)); - else if (completedAssistantMessages.length === 0) emitEvents(assistantMessageEventsForTurn(assistantText, false)); - emitEvents(suppressedNotificationEvents(suppressedNotifications)); - emitEvents(deferredTerminalEvents); - emitEvent({ type: "terminal_status", payload: { terminalStatus: terminal.status, failureKind: terminal.failureKind, message: terminal.message } }); + if (finalAssistant) appendResultEvent(assistantFinalResponseEvent(finalAssistant)); + else if (completedAssistantMessages.length === 0) appendResultEvents(assistantMessageEventsForTurn(assistantText, false)); + appendResultEvents(suppressedNotificationEvents(suppressedNotifications)); + appendResultEvents(deferredTerminalEvents); + appendResultEvent({ type: "terminal_status", payload: { terminalStatus: terminal.status, failureKind: terminal.failureKind, message: terminal.message } }); await liveEventWrite; return { terminalStatus: terminal.status, failureKind: terminal.failureKind, failureMessage: terminal.message, events: events.map((event) => ({ ...event, payload: redactJson(event.payload) })), ...(threadId ? { threadId } : {}), ...(turnId ? { turnId } : {}) }; }