diff --git a/open-sse/executors/codex.js b/open-sse/executors/codex.js index 03779b4a..e19b0787 100644 --- a/open-sse/executors/codex.js +++ b/open-sse/executors/codex.js @@ -32,7 +32,8 @@ const CODEX_PASSTHROUGH_TOOL_TYPES = new Set(["custom"]); // Allowlist of fields accepted by Codex Responses API — anything else is stripped const RESPONSES_API_ALLOWLIST = new Set([ "model", "input", "instructions", "tools", "tool_choice", "stream", "store", - "reasoning", "service_tier", "include", "prompt_cache_key", "client_metadata" + "reasoning", "service_tier", "include", "prompt_cache_key", "client_metadata", + "text" ]); // Convert role=system → role=developer in body.input (keeps content in cacheable prefix) diff --git a/tests/unit/codex-tool-normalization.test.js b/tests/unit/codex-tool-normalization.test.js index 1f3c6f94..d1b5901e 100644 --- a/tests/unit/codex-tool-normalization.test.js +++ b/tests/unit/codex-tool-normalization.test.js @@ -20,6 +20,47 @@ function normalizeTools(tools) { } describe("CodexExecutor tool normalization", () => { + it("preserves Responses text.format for structured outputs", () => { + const executor = new CodexExecutor(); + const schema = { + type: "object", + additionalProperties: false, + properties: { + title: { type: "string" }, + }, + required: ["title"], + }; + const body = { + model: "gpt-5.4-mini", + input: [{ type: "message", role: "user", content: [{ type: "input_text", text: "test for session title" }] }], + stream: true, + metadata: { unsupported: true }, + text: { + format: { + type: "json_schema", + name: "codex_output_schema", + strict: true, + schema, + }, + }, + }; + + executor.transformRequest("gpt-5.4-mini", body, true, { + connectionId: "test-codex-structured-output", + providerSpecificData: {}, + }); + + expect(body.text).toEqual({ + format: { + type: "json_schema", + name: "codex_output_schema", + strict: true, + schema, + }, + }); + expect(body.metadata).toBeUndefined(); + }); + it("preserves Responses-native tool_search tools", () => { const tools = normalizeTools([ {