Codex Desktop automation + DeepSeek Responses: standalone automation_update output lacks call_id (HTTP 400)
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
Codex Desktop automation + DeepSeek Responses: standalone automation_update output lacks call_id (HTTP 400)
Summary
Codex Desktop automations configured with a third-party provider using the DeepSeek Responses API fail immediately on the first model request when the app-server injects a standalone function_call_output for codex_app__automation_update.
The injected item has id, name, namespace, and output, but no call_id. DeepSeek's /responses deserializer rejects the request with:
Failed to deserialize the JSON body into the target type:
input: missing field `call_id` at line 1 column 81274
The same request works with an OpenAI model because the OpenAI Responses endpoint accepts this named standalone output form, but strict third-party implementations may require a call_id.
Environment
- Windows
- Codex Desktop app build:
26.825.51511 - Embedded app-server / command runner:
0.151.0-alpha.7.2 - Model provider: DeepSeek official Responses API
- Config:
model_provider = "deepseek"base_url = "https://api.deepseek.com/"wire_api = "responses"model = "deepseek-v4-flash-vision-exp"
Evidence
Failures happen in the first turn of a cron automation with the name openviking 去旧上传续跑.
Session rollouts contain:
{
"type": "function_call_output",
"id": "fco_01a052c0-99ea-7633-b588-3c2651e9b332",
"name": "automation_update",
"namespace": "codex_app",
"output": "Automation: openviking 去旧上传续跑\nAutomation ID: openviking\n..."
}
No call_id is present.
Failed session IDs:
01a052bf-96a8-7931-b67a-30860fab650601a052c0-973a-7781-bd29-f906210589d401a052d7-c75e-7440-a514-6c2d7eb67084
task_complete records:
Failed to deserialize the JSON body into the target type:
input: missing field `call_id` at line 1 column 81274
Minimal reproduction
Send a request to https://api.deepseek.com/responses with a function_call_output item that has no call_id:
{
"model": "deepseek-v4-flash-vision-exp",
"input": [
{
"type": "function_call_output",
"id": "fco_orphan",
"name": "automation_update",
"namespace": "codex_app",
"output": "test result"
}
]
}
DeepSeek returns:
400
missing field `call_id`
Related issue
This is related to the root-oneOf tool schema problem for codex_app__automation_update, reported in:
- openai/codex#37786
- openai/codex#30523
The schema issue can also fail independently on DeepSeek:
Invalid schema for function 'codex_app__automation_update':
schema must be a JSON Schema of 'type: "object"', got 'type: null'.
Expected behavior
- App-server should either synthesize a
call_idfor standalone namedfunction_call_outputitems before sending them to third-party Responses providers, or normalize them into a message item that the provider accepts. - Alternatively, expose a provider capability/feature flag so strict Responses providers receive compatible tool output shape.
- The
automation_updatetool schema should be emitted with a valid object root for third-party providers.
Workaround verified locally
A local reverse proxy that listens on 127.0.0.1 normalizes the request before forwarding to DeepSeek:
- converts the standalone output into a
developermessage when nocall_idexists; - flattens the root
oneOftool schema; - reorders
function_call_outputimmediately after its matchingfunction_call.
After the workaround, a real Codex Desktop automation run completed without an error and produced no repeated uploads.
Note
This report intentionally contains no API key or other credentials.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the request against DeepSeek's /responses endpoint and trace the app-server handling of standalone function_call_output items for automation_update. Done means third-party Responses requests use a provider-compatible output shape with call_id handling and a valid object-root tool schema.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100