Skip to content

[Bug] Codex Desktop wait.yield_time_ms / max_tokens still rejected as 120000.0 after #2316 #2443

Description

@lidge-jun

Client or integration

Codex App

Area

Tools / MCP / web search

Summary

On current origin/dev (bf8bcfd3c8, npm @bitkyc08/opencodex@2.31.0), Grok-routed Codex Desktop still rejects the host wait tool before it runs:

failed to parse function arguments: invalid type: floating point `120000.0`, expected u64 at line 1 column 40
failed to parse function arguments: invalid type: floating point `8000.0`, expected usize at line 1 column 35

The model intended integers. Codex advertises both fields as JSON Schema number, then deserializes them as Rust u64 / usize. OpenCodex already repairs this class of argument in src/lib/tool-argument-integers.ts (#1611, #2316), but the #2316 allowlist is still only timeout_ms. The file even says Cursor/Codex yield_time_ms is declared number and is not included until a live rejection exists. This session is that rejection.

Expected: an integral float in a Codex-native integer field is rewritten to an integer, wait continues the exec cell, and Aside/long-running host work can be polled. A genuine fraction such as 1.5 must still fail.

This is not an Aside bug. Aside CLI updated and executed; the host wait poll never attached because Codex rejected the function-call arguments.

Reproduction

  1. Route Codex App / Codex Desktop through OpenCodex with default provider xAI Grok (xai/grok-4.6 in this session).

  2. Start a long-running host command through code-mode exec / exec_command so it yields with a cell id, e.g. aside exec "...".

  3. Call the Codex Desktop host tool wait with integer arguments:

    {"cell_id":"29","yield_time_ms":120000}
    {"cell_id":"30","max_tokens":8000}

    Grok serializes those fields as 120000.0 / 8000.0.

  4. Observe the parse rejections above. wait does not run. The underlying process (Aside, in this case) keeps running independently.

Live schema advertised to the model in this session (both integer-runtime fields are JSON Schema number):

{
  "name": "wait",
  "parameters": {
    "type": "object",
    "required": ["cell_id"],
    "properties": {
      "cell_id": { "type": "string" },
      "yield_time_ms": { "type": "number" },
      "max_tokens": { "type": "number" },
      "terminate": { "type": "boolean" }
    }
  }
}

Current allowlist in src/lib/tool-argument-integers.ts:

const U64_NUMBER_FIELDS = new Set(["timeout_ms"]);

Comment immediately above that set says yield_time_ms is excluded until a reproduction is captured. Add yield_time_ms and max_tokens only if they remain Codex-native integer fields (u64 / usize) with this same hard reject.

Related: #1611, #2316. #2316 fixed multi_agent_v1__wait_agent.timeout_ms; this is a different host tool (wait) with the same serializer/runtime mismatch.

Version

npm @bitkyc08/opencodex@2.31.0 / origin/dev bf8bcfd3c8a2cb1a352d4419351f634c3d3e75b4

Local checkout package.json still prints 2.27.0; that file is stale relative to the published tag. The live reject is from Codex Desktop routed through OpenCodex, not from Aside.

Operating system

macOS 27.0 (26A5378n)

Provider and model

xai / grok-4.6 (OpenCodex default provider; Codex App / Codex Desktop host tool surface)

Logs or error output

failed to parse function arguments: invalid type: floating point `120000.0`, expected u64 at line 1 column 40
failed to parse function arguments: invalid type: floating point `8000.0`, expected usize at line 1 column 35

Independent evidence that Aside itself was healthy while wait was rejected:

  • aside --update installed 1.26.810.1915
  • aside exec opened https://arca.live/b/stock/180813968?p=1 and read the page
  • process aside exec ... remained running after the wait parse failures
  • session dir ~/.aside/u/0/sessions/2026-08-23_7We16YtbYllIs0tv kept growing messages.jsonl

Checks

  • I searched existing issues and documentation.
  • I removed secrets, tokens, account details, request credentials, and personal data.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinglanded-via-maintainerOriginal PR closed after landing via a maintainer merge traintoolstool_calls, MCP, web-search / sidecar tools

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions