_CodexCompletionsAdapter._build_responses_kwargs (title generation, compression,
MoA aggregation) built its own chat->Responses tool list: raw names, no
``strict: False``. On api.perplexity.ai and opencode.ai routes the main loop
already aliased reserved names (hermes_<name>), so every auxiliary call 400ed
while chat looked healthy and MoA silently fell back.
- tools go through codex_responses_adapter._responses_tools (strict: False) and
agent/transports/codex.py::_alias_wire_tools — one reserved-name table for
both paths (OpenCode, Perplexity, xAI)
- replayed history tool_calls are renamed to the alias this request declares
- the alias map rides on the request payload (``_wire_aliases``), popped in
create() and mapped back onto the parsed tool_calls before dispatch; never
instance state (aux adapters are cached and shared)
Ported from #114457's auxiliary half; design per the #114260 report.
Co-authored-by: Tyler Lyon <lyonrt@icloud.com>