Problem
The Settings → Notifications tab (backed by AppNotificationService) is perpetually empty, even though plenty of OpenClaw notifications appear in the Windows Notification Center (backed by ToastService) and in the Windows action center.
Root Cause
AppNotificationService.Show() (in-app notification) and ToastService.ShowToast() (Windows Notification Center) are completely siloed:
| Notification type |
In-app Notifications tab |
Windows Notification Center |
| Exec-approval denials |
✅ (_appNotificationService.Show()) |
❌ |
| Everything else (gateway events, node activity, chat, system, pairing, etc.) |
❌ |
✅ (_toastService.ShowToast()) |
There is exactly one call to _appNotificationService.Show() in the entire codebase (App.xaml.cs:2244), and it only fires for exec-approval denials.
Affected code
src/OpenClaw.Tray.WinUI/Services/AppNotificationService.cs — the in-app notification service (works, but nobody calls it)
src/OpenClaw.Tray.WinUI/App.xaml.cs — ~30+ calls to _toastService.ShowToast(), none of which also call _appNotificationService.Show()
Expected behavior
Every notification that reaches the tray should appear in both:
- The in-app Notifications tab (via
AppNotificationService)
- The Windows Notification Center / toast popup (via
ToastService)
Suggested fix
Create a single notification dispatch method that calls both services, then route every callsite through it:
private void ShowNotification(AppNotification appNotification, ToastContentBuilder? toastBuilder = null)
{
_appNotificationService?.Show(appNotification);
if (toastBuilder is not null)
_toastService?.ShowToast(toastBuilder);
}
Problem
The Settings → Notifications tab (backed by
AppNotificationService) is perpetually empty, even though plenty of OpenClaw notifications appear in the Windows Notification Center (backed byToastService) and in the Windows action center.Root Cause
AppNotificationService.Show()(in-app notification) andToastService.ShowToast()(Windows Notification Center) are completely siloed:_appNotificationService.Show())_toastService.ShowToast())There is exactly one call to
_appNotificationService.Show()in the entire codebase (App.xaml.cs:2244), and it only fires for exec-approval denials.Affected code
src/OpenClaw.Tray.WinUI/Services/AppNotificationService.cs— the in-app notification service (works, but nobody calls it)src/OpenClaw.Tray.WinUI/App.xaml.cs— ~30+ calls to_toastService.ShowToast(), none of which also call_appNotificationService.Show()Expected behavior
Every notification that reaches the tray should appear in both:
AppNotificationService)ToastService)Suggested fix
Create a single notification dispatch method that calls both services, then route every callsite through it: