Area
Streaming
What are you trying to accomplish?
Get the same reasoning-display parity for anthropic/kiro signed extended thinking that PR #4301 established for raw reasoning: visible-mode thinking should not present itself to Codex as if it were an OpenAI-authored reasoning summary.
What prevents this today?
PR #4301 moved raw reasoning (reasoning_raw_delta: openai-chat reasoning_content, Kiro tags) onto the Responses content channel, because the Codex desktop thinking band renders the summary channel and routed providers have no real summary — the band scrolled raw CoT instead.
The signed path was deliberately left out to keep that PR scoped. src/bridge.ts still routes visible-mode thinking_delta (Anthropic extended thinking with thinking_signature, Kiro signed blocks) through response.reasoning_summary_text.delta with a final summary: [{type: "summary_text", text}] item. The text there is Anthropic's raw extended-thinking output, not a summary, so the same band behaviour the PR fixes still applies to Claude/Kiro routes in visible mode. The signature/env round-trip makes this larger than a channel rename: the final item must keep encrypted_content round-tripping for replay, and hidden mode already has its own envelope contract.
What should OpenCodex do?
Visible-mode signed thinking streams response.reasoning_text.delta and closes with content: [{type: "reasoning_text", text}] plus an empty summary — the same native shape as gpt-oss and as #4301 — while the signature envelope and hideThinkingSummary behaviour stay unchanged.
Example usage or interface
Before (routed Claude, visible mode):
event: response.reasoning_summary_text.delta
data: {"type":"response.reasoning_summary_text.delta","summary_index":0,"delta":"<raw extended thinking>"}
After:
event: response.reasoning_text.delta
data: {"type":"response.reasoning_text.delta","content_index":0,"delta":"<raw extended thinking>"}
Alternatives or workarounds
Keep the current summary-channel wiring for signed thinking (status quo), or store only the signature and drop the visible text. Both are worse: the first keeps the flicker, the second loses an opt-in trace the CLI can show behind show_raw_agent_reasoning.
Additional context
Checks
Area
Streaming
What are you trying to accomplish?
Get the same reasoning-display parity for
anthropic/kirosigned extended thinking that PR #4301 established for raw reasoning: visible-mode thinking should not present itself to Codex as if it were an OpenAI-authored reasoning summary.What prevents this today?
PR #4301 moved raw reasoning (
reasoning_raw_delta: openai-chatreasoning_content, Kiro tags) onto the Responses content channel, because the Codex desktop thinking band renders the summary channel and routed providers have no real summary — the band scrolled raw CoT instead.The signed path was deliberately left out to keep that PR scoped.
src/bridge.tsstill routes visible-modethinking_delta(Anthropic extended thinking withthinking_signature, Kiro signed blocks) throughresponse.reasoning_summary_text.deltawith a finalsummary: [{type: "summary_text", text}]item. The text there is Anthropic's raw extended-thinking output, not a summary, so the same band behaviour the PR fixes still applies to Claude/Kiro routes in visible mode. The signature/env round-trip makes this larger than a channel rename: the final item must keepencrypted_contentround-tripping for replay, and hidden mode already has its own envelope contract.What should OpenCodex do?
Visible-mode signed thinking streams
response.reasoning_text.deltaand closes withcontent: [{type: "reasoning_text", text}]plus an emptysummary— the same native shape as gpt-oss and as #4301 — while the signature envelope andhideThinkingSummarybehaviour stay unchanged.Example usage or interface
Before (routed Claude, visible mode):
After:
Alternatives or workarounds
Keep the current summary-channel wiring for signed thinking (status quo), or store only the signature and drop the visible text. Both are worse: the first keeps the flicker, the second loses an opt-in trace the CLI can show behind
show_raw_agent_reasoning.Additional context
Checks