Live panel showing subagents fanned out from within js_eval calls.
When the agent writes code that calls the top-level task() global, each
dispatch runs as a subagent inside a single js_eval tool call which is
invisible to the normal message stream. The QuickJS task bridge emits
lifecycle events on the custom stream. This widget consumes them and renders
a docked, live-updating fan-out panel.
Trust note: description/subagent_type and error strings originate
from LLM-authored JavaScript executed in the sandbox, so they are untrusted.
We route every rendered string through sanitize_control_chars which strips
control/escape/bidi characters and only ever render via Content.styled /
markup=False Static updates, so embedded Textual markup and terminal
escapes cannot influence rendering or panel state.