diff --git a/open-sse/translator/response/openai-responses.ts b/open-sse/translator/response/openai-responses.ts index 96aa862424..b22b9f5f46 100644 --- a/open-sse/translator/response/openai-responses.ts +++ b/open-sse/translator/response/openai-responses.ts @@ -464,6 +464,9 @@ export function openaiResponsesToOpenAIResponse(chunk, state) { } // Function call arguments delta + // NOTE: Do NOT include `id` or `type` here - only first chunk (response.output_item.added) + // should have them. Including `id` on every chunk causes openai-to-claude.ts to emit + // a new content_block_start for each delta, breaking Claude Code ACP sessions. if (eventType === "response.function_call_arguments.delta") { const argsDelta = data.delta || ""; if (!argsDelta) return null; @@ -480,8 +483,6 @@ export function openaiResponsesToOpenAIResponse(chunk, state) { tool_calls: [ { index: state.toolCallIndex, - id: state.currentToolCallId, - type: "function", function: { arguments: argsDelta }, }, ],