dc2433a8b5
After `ThinkingComplete` the finalized thinking entry sits in `app.active_cell` with `streaming = false` until the active cell flushes to history at end-of-turn. During that window the transcript rendered the "thinking collapsed; press Ctrl+O for full text" affordance from `render_thinking`, but `open_thinking_pager` only searched `app.history` — so the handler surfaced "No thinking blocks to expand" while pointing at the affordance. The affordance was truthful; the handler was lying. Routed the lookup through `cell_at_virtual_index` / `virtual_cell_count`, the existing virtual-index API that `open_tool_details_pager` already uses for the same active-cell window. The selection-based path resolves through the virtual index too, so dragging into an in-flight thinking block and pressing Ctrl+O now works as well. Regression guard: `open_thinking_pager_finds_thinking_in_active_cell` drives the entry into active_cell, finalizes it so the "collapsed" affordance is what render_thinking emits, then asserts Ctrl+O pushes the Pager view instead of surfacing the "No thinking blocks" status.