From b84c17e0e2ab6f3d940d0f7935338139c39e5de9 Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Wed, 14 Jan 2026 01:03:26 +0200 Subject: [PATCH] feat: add notification mode settings and enhance notification handling --- CHANGELOG.md | 7 ++++ .../chat/message/parts/ToolPart.tsx | 3 +- .../openchamber/NotificationSettings.tsx | 35 ++++++++++++++----- .../openchamber/OpenChamberSidebar.tsx | 9 ++++- packages/ui/src/hooks/useEventStream.ts | 26 ++++++++------ packages/ui/src/stores/useUIStore.ts | 8 +++++ 6 files changed, 66 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76dd1461..ff3290a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +- Settings: consolidated Git settings and added opencode zen model selection for commit generation (thanks to @nelsonpires). +- Web Notifications: added configurable native web notifications for assistant completion (thanks to @vio1ator). +- Chat: sidebar sessions are now automatically sorted by last updated date (thanks to @vio1ator). +- UI: todo lists and status indicators now hide automatically when all tasks are completed (thanks to @vio1ator). +- Reliability: improved project state preservation on validation failures (thanks to @vio1ator) and refined server health monitoring. +- Stability: added graceful shutdown handling for the server process (thanks to @vio1ator). + ## [1.4.7] - 2026-01-10 - Skills: added ClawdHub integration as built-in market for skills. diff --git a/packages/ui/src/components/chat/message/parts/ToolPart.tsx b/packages/ui/src/components/chat/message/parts/ToolPart.tsx index fda1d5c7..ac94bd5d 100644 --- a/packages/ui/src/components/chat/message/parts/ToolPart.tsx +++ b/packages/ui/src/components/chat/message/parts/ToolPart.tsx @@ -23,7 +23,6 @@ import { formatEditOutput, detectLanguageFromOutput, formatInputForDisplay, - hasLspDiagnostics, } from '../toolRenderers'; type ToolStateWithMetadata = ToolStateUnion & { metadata?: Record; input?: Record; output?: string; error?: string; time?: { start: number; end?: number } }; @@ -756,7 +755,7 @@ const ToolExpandedContent: React.FC = ({ ); } - if ((part.tool === 'edit' || part.tool === 'multiedit') && ((!hasStringOutput && diffContent) || (outputString.trim().length === 0 || hasLspDiagnostics(outputString))) && diffContent) { + if ((part.tool === 'edit' || part.tool === 'multiedit') && diffContent) { return renderScrollableBlock( , { className: 'p-1' } diff --git a/packages/ui/src/components/sections/openchamber/NotificationSettings.tsx b/packages/ui/src/components/sections/openchamber/NotificationSettings.tsx index c74a01e2..2b47152b 100644 --- a/packages/ui/src/components/sections/openchamber/NotificationSettings.tsx +++ b/packages/ui/src/components/sections/openchamber/NotificationSettings.tsx @@ -1,11 +1,14 @@ import React from 'react'; import { useUIStore } from '@/stores/useUIStore'; import { isWebRuntime } from '@/lib/desktop'; +import { Switch } from '@/components/ui/switch'; import { toast } from 'sonner'; export const NotificationSettings: React.FC = () => { const nativeNotificationsEnabled = useUIStore(state => state.nativeNotificationsEnabled); const setNativeNotificationsEnabled = useUIStore(state => state.setNativeNotificationsEnabled); + const notificationMode = useUIStore(state => state.notificationMode); + const setNotificationMode = useUIStore(state => state.setNotificationMode); const [notificationPermission, setNotificationPermission] = React.useState('default'); @@ -59,17 +62,31 @@ export const NotificationSettings: React.FC = () => { Enable native notifications -