1d32e5d98c
display.thinking_progress is documented as independent of tool_progress — users can keep tool progress quiet while opting into mid-turn assistant scratch-text bubbles. But two gates were keyed on tool_progress_enabled alone, so with tool_progress:off the _thinking relay was silently dead even when thinking_progress:true: 1. agent.tool_progress_callback was set to None unless tool_progress_enabled, so the callback that queues _thinking text never fired. 2. The send_progress_messages drain task was only started when tool_progress_enabled, so even queued messages had no consumer. Both now gate on needs_progress_queue (tool_progress OR thinking_progress) — the same condition that already decides whether to create the progress queue at all. No effect when both are off (queue is None) or when tool_progress is on (unchanged). Tests: _thinking relays with thinking_progress:on/tool_progress:off, and is suppressed when thinking_progress:off. Full progress-topics suite: 35 pass.