Skip to content

feat: notification system #33

@andrewchumchal

Description

@andrewchumchal

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

  • Notification type defined in types.ts
  • uiStore has notifications, addNotification, markAllRead, clearNotifications
  • Bell icon in StatusBar shows unread count badge when notifications exist
  • Click opens notification popover anchored to the bell
  • Notifications persist for the session (not across restarts)
  • IPC stream errors and MCP disconnects fire notifications
  • Update-available check fires an info notification

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions