[Bug]: Website citations in assistant responses render as garbled text#30979

opened7d agobyAAman-vijay

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/desktop

Steps to reproduce

  1. Open T3 Code and start a conversation with a provider/model that supports web search.
  2. Send a prompt such as: “Search the web for the latest Node.js release and cite the official website in your answer.”
  3. Wait for the assistant to fetch the web results and display its response.
  4. Inspect the website citations and the text displayed alongside their links.

Expected behavior

Website citations in the assistant’s response should render as readable, clickable references. The website links and surrounding text should display correctly without garbled characters or raw citation markup.

Actual behavior

When the assistant fetches web results and includes website citations in its response, the text displayed with the website links renders incorrectly and appears garbled or malformed.

This occurs in the assistant’s generated response, without copying or pasting any citations.

Impact

Major degradation or frequent failure

Version or commit

No response

Environment

macos

Logs or stack traces

shell
1

Screenshots, recordings, or supporting files

Screenshot 2026-11-04 at 9.59.55 PM.png

Workaround

No response

Synced from GitHub

Reproduced on T3 Code desktop 0.1.7 (stable), Linux arm64 (Omarchy/Arch on a MacBook Air M1), local server, Codex provider. This is a fresh install.

Diagnosis: after a web search, Codex's final answer (item/completed, agentMessage, phase: "final_answer") has its private-use citation markers inline in item.text:

1…called **"prox."** citeturn262013search1
2…including switching when one hits its usage limit. citeturn262013search1turn262013search2

0.1.7 doesn't strip or interpret these: CodexAdapterV2.ts passes item.text through unchanged, and nothing in apps/ or packages/ handles U+E200–U+E202. The private-use characters render invisibly, so the chat shows citeturn262013search1turn262013search2 at the end of the sentence.

Repro: in the desktop app, use Codex and ask a question that makes it search the web (e.g. "search the web for X and tell me what you find"). The final answer ends with cite…turnNsearchM… text.

This confirms the issue is on Linux too, not just macOS. PR #31053 looks like it addresses exactly these markers.

Triage by Claude Code (Claude Opus 5.5) via t3 triage.

Synced from GitHub

Also reproduced on T3 Code desktop 0.1.7 (stable), macOS arm64, local server, Codex provider (gpt-6.1-sol).

The final answer showed citeturn692298search8turn692298search6 inline. The raw item/completed agentMessage (phase: "final_answer") has U+E200 cite U+E202 turn692298search8 U+E202 turn692298search6 U+E201 in item.text. memoryCitation is null, and nothing else in the payload carries citation data.

Two details that may help:

  • The search did not show up as a webSearch item. It ran as an mcpToolCall on the codex_apps server, tool search_service.web_run. A fix that keys off web-search items would miss this path. #31053 strips the markers from the text, so it covers it.
  • Codex was using a custom model_provider (an OpenAI-compatible proxy with wire_api = "responses"), not the default OpenAI provider. The markers come from the model either way. This isn't specific to one backend.

#31053's WEB_CITATION_MARKER regex matches the multi-id form above (cite + two turn…searchN ids), so it should fix this case.

Triage by Claude Code (Claude Opus 5.5) via t3 triage.