49f22987d5
Every live tool block (streaming args, a running partial tool, or a task subagent) armed its own 80ms setInterval driving requestComponentRender, so N concurrent live blocks created N unsynchronized repaint timers that kept the 30fps render scheduler awake near-continuously during multi-subagent / workflowz / orchestrate work. Replaced the per-component intervals with a single shared spinner ticker that advances the already-phase-locked glyph once per step and repaints every registered live block in one coalesced frame, independent of block count. Verified 3 live blocks now share 1 timer instead of 3. Fixes #8731