Skip to content

v1.1.0-upstream8.0.7

Choose a tag to compare

@github-actions github-actions released this 01 Oct 12:22
· 47 commits to main since this release

v1.1.0-upstream8.0.7 - 2026-10-01

Summary

  • Absorbs upstream v8.0.7 (all five commits) on top of the previous v8.0.5
    baseline, including the negotiated-ALPN uTLS transport fix and three Codex
    tool-schema / stream-disconnect fixes.
  • Adds a flatten mode to the Responses tools local-refs schema handling, so
    self-referencing $defs from clients such as Codex desktop and OpenCode Go no
    longer fail with 400 Recursive JSON schemas are not currently supported.
  • Canonicalizes integral float literals in Responses tool-call arguments and
    custom tool-call inputs, so strict Codex clients no longer reject
    2500.0 where an integer is expected.
  • Fixes several Gemini / Vertex / AI Studio streaming paths on the Responses
    surface that returned 502, dropped usage, or reported a truncated answer as
    completed.
  • No configuration migration is required: the new flatten mode is opt-in and
    the default local-refs: "preserve" behavior is unchanged.

Upstream alignment

  • Upstream release: v8.0.7
  • Previous baseline: v8.0.5
  • Intake record: absorbed.md
  • Ported: the complete v8.0.5..v8.0.7 range, cherry-picked individually with
    -x: negotiated ALPN support in the uTLS client (router-for-me#6223), skipping tool
    parameter integer normalization for Codex executor targets (router-for-me#6244),
    determining that normalization by target executor identity (router-for-me#6244), handling
    an upstream Codex stream disconnect before the first payload as a bad gateway
    with credential failover (router-for-me#6247), and passing the target executor to
    compatibility translation and token counting (router-for-me#6244).
  • Skipped: none. Every commit in the range was ported; 67cb32b6 and
    97f244b8 revise a8ffd5a8, so all three were taken together.

Breaking changes

  • None.

Added

  • A new local-refs: "flatten" value for the Responses tools
    responses-tools.routes[].schema block (config.example.yaml, documented in
    docs/responses-tools.md). It replaces only cycle-closing $refs with an
    unconstrained schema and keeps acyclic $defs intact, so recursive tool
    schemas are accepted by upstreams that reject recursion. preserve and
    inline keep their current behavior, and preserve remains the default.
  • Support for negotiated TLS ALPN protocols in the uTLS client: HTTP/2 and
    HTTP/1.1 transports are selected from the handshake, empty-ALPN and HTTP/1.1
    requests reuse the handshaken connection over a dedicated non-pooled
    transport, and uTLS connections are closed cleanly when a response completes
    or fails.

Changed

  • Codex token counting and xAI compatibility translation now receive the target
    executor identity, so tool parameter schemas keep their number type for
    non-Codex targets while Codex targets keep their reserved schemas strictly
    validated.
  • HTTP 408 Request Timeout from an upstream is mapped to server_error in the
    base error response handlers.

Fixed

  • Responses tool-call arguments and custom tool-call inputs emitted towards
    Responses clients now rewrite integral float literals (2500.0 -> 2500).
    The rewrite is value-preserving, covers every tool and parameter rather than a
    fixed whitelist, and leaves tool schemas untouched. Delta events are
    deliberately unchanged because Codex clients parse arguments from the
    complete item.
  • A Codex upstream stream that closes before emitting any payload now returns
    502 Bad Gateway and fails over to the next credential instead of surfacing
    a truncated success.
  • AI Studio relayed streams now synthesize the terminal event on stream end, so
    a normally finished Gemini stream no longer answers 502 upstream stream closed before a terminal event on the Responses surface.
  • Gemini and Vertex streaming no longer emit a synthetic completion when the
    upstream read fails or the request is cancelled; the terminal event is
    synthesized only on a clean end of stream.
  • Gemini usage is preserved when the finish reason and usageMetadata arrive
    in separate chunks; cumulative counts are replaced per field rather than
    summed.
  • Gemini MAX_TOKENS termination is now reported as incomplete on both the
    streaming and non-streaming Responses paths, while already finalized messages
    and complete function calls stay completed. Only STOP and MAX_TOKENS
    are mapped.

Security

  • None.

Validation

  • ops/upstream-intake/verify-absorb.sh was run on this release candidate with
    GOTOOLCHAIN=go1.26.4, matching the version both CI workflows pin. It covers
    the maintenance tooling tests, gofmt over tracked sources, go vet ./...,
    the Responses-tools package tests, the full go test ./... -count=1 suite,
    -race runs of the concurrency-sensitive packages, and a server build.
  • Client replay coverage: not performed. No live Codex, Gemini, Vertex or
    AI Studio client turn was replayed against this build, so the gate result
    covers the automated checks only and does not establish live streaming
    behavior.
  • Cross-platform behavior is covered only by the release workflow's asset build
    and checksum verification; no artifact was exercised on a non-macOS platform.

Known issues

  • The upstream fix for tool-parameter integer normalization is scoped to Codex
    executor targets. The Meta executor still calls the unscope-aware path and
    normalizes unconditionally, so a Meta-hosted Muse request can still produce an
    integral float literal in a schema-bound position. The response-side
    canonicalizer in this release covers the clients that consume those
    arguments; the upstream gap is tracked as
    router-for-me/CLIProxyAPI#6255.
  • Gemini FinishReason values other than STOP and MAX_TOKENS are not yet
    mapped to a Responses terminal status.

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.0.1-upstream8.0.5...v1.1.0-upstream8.0.7