Summary
Add an in-app notification system surfaced via the bell icon in the status bar.
Motivation
Users need ambient awareness of background events (streaming errors, MCP tool failures, update availability, routing overrides) without interrupting their flow. A notification centre in the status bar provides a non-intrusive way to surface these.
Proposed behaviour
Bell icon (status bar, far right)
- Unread count badge appears when there are unread notifications
- Click opens a notification popover/panel anchored to the bell
- Badge clears when the panel is opened
Notification types
| Type |
Trigger |
Example |
info |
General informational |
"Update v1.3.0 available" |
success |
Background task completed |
"Conversation exported" |
warning |
Soft failure / degraded |
"Routing fell back to default model" |
error |
Hard failure |
"MCP server disconnected", "Stream error" |
Notification centre panel
- List of recent notifications (newest first), max ~50
- Each entry: icon + title + optional description + relative timestamp
- "Clear all" button
- Individual dismiss (×)
uiStore changes
notifications: Notification[]
addNotification(n: Omit<Notification, 'id' | 'timestamp' | 'read'>): void
markAllRead(): void
clearNotifications(): void
Notification type (new in types.ts)
export interface Notification {
id: string;
type: 'info' | 'success' | 'warning' | 'error';
title: string;
description?: string;
timestamp: number;
read: boolean;
}
Integration points
- IPC stream errors →
error notification
- MCP disconnect →
error notification
- Update available (from Cloudflare Worker) →
info notification
- Routing fallback →
warning notification
Acceptance criteria
Summary
Add an in-app notification system surfaced via the bell icon in the status bar.
Motivation
Users need ambient awareness of background events (streaming errors, MCP tool failures, update availability, routing overrides) without interrupting their flow. A notification centre in the status bar provides a non-intrusive way to surface these.
Proposed behaviour
Bell icon (status bar, far right)
Notification types
infosuccesswarningerrorNotification centre panel
uiStorechangesnotifications: Notification[]addNotification(n: Omit<Notification, 'id' | 'timestamp' | 'read'>): voidmarkAllRead(): voidclearNotifications(): voidNotificationtype (new intypes.ts)Integration points
errornotificationerrornotificationinfonotificationwarningnotificationAcceptance criteria
Notificationtype defined intypes.tsuiStorehasnotifications,addNotification,markAllRead,clearNotificationsStatusBarshows unread count badge when notifications existinfonotification