refactor: rip out desktop-notifier from supervisor and top
Convey already surfaces these signals via the Callosum `notification`
tract (see docs/CALLOSUM.md), so the OS-level desktop-notifier
integration is redundant.
- Drop `from desktop_notifier import ...`, the `_notifier` singleton,
`AlertManager`, and the `send_notification` / `clear_notification` /
`_get_notifier` helpers from think/supervisor.py.
- Simplify `handle_runner_exits` to take only `procs`. Tempfail/real-exit
logging, restart policy, and the `supervisor.stopped` emission are
unchanged.
- Drop the same imports plus `active_notifications`, `crash_history`,
`count_recent_crashes`, and the two notification methods from
think/top.py. The `started`/`stopped` event handlers still update
service status; nothing else regresses.
- Remove `desktop-notifier` from pyproject.toml; regenerate uv.lock.
Transitively dropped: bidict, dbus-fast, rubicon-objc, winrt-* (all
desktop-notifier-only).
- Delete the two notification tests in tests/test_supervisor.py.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>