Skip to content

v1.1.2-upstream8.0.7

Choose a tag to compare

@github-actions github-actions released this 03 Oct 07:05
· 43 commits to main since this release
ceccde5

v1.1.2-upstream8.0.7 - 2026-10-03

Summary

  • Keep Codex integer tool arguments usable without changing patch text, code, commands, or ordinary Responses clients.
  • Make complete function arguments consistent across item-done, argument-done, terminal snapshots, and non-stream responses.
  • Direct SDK callers that need the Codex workaround must explicitly enable it on their request context.

Upstream alignment

  • Upstream release: v8.0.7
  • Previous baseline: v8.0.7
  • Intake record: absorbed.md
  • Ported: none (fork-only release). This release retains the existing upstream baseline.
  • Skipped: no new upstream release was assessed or absorbed in this release.

Breaking changes

  • No API signatures or configuration keys changed. Direct SDK consumers previously receiving implicit Responses normalization must now call translator.WithCodexToolArgumentNormalization(ctx, true) to retain that workaround.

Added

  • A request-scoped SDK helper to explicitly enable or disable Codex tool argument normalization.

Changed

  • HTTP and downstream WebSocket request contexts select the workaround using the existing Codex User-Agent matcher. Other clients, including requests with no User-Agent, retain their original numeric representation.
  • Initial items, argument deltas, malformed or incomplete JSON, exponent numbers, and non-integral fractions remain unchanged.

Fixed

  • Custom tool inputs are preserved as opaque content, including JSON-looking text and apply_patch lines containing values such as 2500.0.
  • Complete function arguments use the same exact lexical rewrite in argument-done, item-done, and completed/incomplete/failed response snapshots. Large integer digits remain exact without a float64 conversion.
  • Native downstream Codex WebSocket output now applies the same request-scoped policy in direct, buffered, and duplex streams.
  • Multiple SSE events in one translator output are handled without changing their envelope or CRLF bytes.
  • Example plugin modules now use the v8 module path and pass the plugin build check (fork PR #16, merged before this repair).

Security

  • None.

Validation

  • Go 1.26.4 focused translator and handler tests, server build, and the complete ops/upstream-intake/verify-absorb.sh gate passed, including maintenance tooling, formatting, vet, the full test suite, and race-sensitive packages.
  • Real Codex CLI 0.160.0 connected over both HTTP/SSE and native WebSocket to an isolated server built from this branch. A deterministic local upstream fixture emitted decimal integer arguments and a custom patch. The CLI executed the command successfully and wrote exactly timeout = 2500.0 to a scratch file.
  • Against pre-fix base be01c2f1, the HTTP fixture wrote timeout = 2500 and the native WebSocket fixture rejected 2500.0 as a floating-point value where u64 was required. The candidate executed the command and preserved 2500.0 on both transports.
  • The acceptance fixture used test-only model metadata to expose the command and freeform patch tools. It exercised the actual client and server, without a remote model, production credentials, or an installed-service change.
  • Request-context tests cover both Responses endpoint paths, Codex/curl/missing User-Agent, HTTP and WebSocket upgrade headers, and explicit SDK policies. Network WebSocket regression tests cover direct, buffered, and duplex output with the policy enabled and disabled. The real CLI replay also verified the native WebSocket transport without an HTTP fallback.
  • The local gate ran on macOS arm64; release CI builds the platform archives. Client acceptance covers the targeted fixture rather than all providers, model output patterns, or Codex versions.

Known issues

  • The workaround intentionally leaves streamed fragments unchanged and does not assemble argument JSON across chunks. It handles complete raw JSON events and complete JSON SSE data lines; multiline or fragmented SSE payloads remain outside this targeted repair.
  • Exponent notation such as 2500.0e2 is intentionally preserved.

Release assets

  • CLIProxyAPI_<version>_linux_<arch>.tar.gz is the default Linux build. It supports dynamic library plugins and targets a GLIBC 2.17 baseline.
  • CLIProxyAPI_<version>_linux_<arch>_no-plugin.tar.gz is the portable Linux build for musl-based or older systems such as OpenWrt. It does not support dynamic library plugins.
  • CLIProxyAPI_<version>_freebsd_aarch64_no-plugin.tar.gz is the FreeBSD arm64 build. It is built without CGO and does not support dynamic library plugins.

Full changelog

Compare v1.1.1-upstream8.0.7...v1.1.2-upstream8.0.7