7f0773a5d5
The notification dispatch primitives (`Method`, `notify_done`, `humanize_duration`, OSC 9 / OSC 99 / OSC 777 formatters) already live in `tui/notifications.rs`. The five composition helpers that decided *when* and *what* to notify still lived in ui.rs: * `notification_settings` → `notifications::settings` * `completed_turn_notification_message` → `notifications::completed_turn_message` * `subagent_completion_notification_message` → `notifications::subagent_completion_message` * `latest_assistant_notification_text` → `notifications::latest_assistant_text` * `notification_text_summary` → `notifications::text_summary` Move them so the whole notification stack lives in one file. The lone streaming sanitizer they share, `sanitize_stream_chunk`, stays in ui.rs (it has three other call sites in the streaming render path) but is now `pub(super)` so notifications.rs can reuse it via `super::ui::`. ui.rs drops to ~9290 lines (down ~735 from the pre-refactor baseline of 10025). All 954 tui:: tests still pass.