@@ -28,10 +28,9 @@ import { IsAuxiliaryWindowContext } from '../../../../workbench/common/contextke
2828import { ChatSessionProviderIdContext , IsNewChatSessionContext , SessionsWelcomeVisibleContext } from '../../../common/contextkeys.js' ;
2929import { ISessionsProvidersService } from '../../../services/sessions/browser/sessionsProvidersService.js' ;
3030import { SessionStatus } from '../../../services/sessions/common/session.js' ;
31+ import { ISessionsListModelService } from './views/sessionsListModelService.js' ;
3132import { SHOW_SESSIONS_PICKER_COMMAND_ID } from './sessionsActions.js' ;
3233import { IsSessionArchivedContext , IsSessionPinnedContext , IsSessionReadContext , SessionItemContextMenuId } from './views/sessionsList.js' ;
33- import { SessionsView , SessionsViewId } from './views/sessionsView.js' ;
34- import { IViewsService } from '../../../../workbench/services/views/common/viewsService.js' ;
3534import { basename } from '../../../../base/common/resources.js' ;
3635import { ISessionsManagementService } from '../../../services/sessions/common/sessionsManagement.js' ;
3736
@@ -65,12 +64,12 @@ export class SessionsTitleBarWidget extends BaseActionViewItem {
6564 options : IBaseActionViewItemOptions | undefined ,
6665 @IHoverService private readonly hoverService : IHoverService ,
6766 @ISessionsManagementService private readonly sessionsManagementService : ISessionsManagementService ,
67+ @ISessionsListModelService private readonly sessionsListModelService : ISessionsListModelService ,
6868 @IContextMenuService private readonly contextMenuService : IContextMenuService ,
6969 @IMenuService private readonly menuService : IMenuService ,
7070 @IContextKeyService private readonly contextKeyService : IContextKeyService ,
7171 @ISessionsProvidersService private readonly sessionsProvidersService : ISessionsProvidersService ,
7272 @ICommandService private readonly commandService : ICommandService ,
73- @IViewsService private readonly viewsService : IViewsService ,
7473 ) {
7574 super ( undefined , action , options ) ;
7675
@@ -302,11 +301,13 @@ export class SessionsTitleBarWidget extends BaseActionViewItem {
302301 return ;
303302 }
304303
305- const isPinned = this . viewsService . getViewWithId < SessionsView > ( SessionsViewId ) ?. sessionsControl ?. isSessionPinned ( sessionData ) ?? false ;
304+ const isPinned = this . sessionsListModelService . isSessionPinned ( sessionData ) ;
305+ const isArchived = sessionData . isArchived . get ( ) ;
306+ const isRead = this . sessionsListModelService . isSessionRead ( sessionData ) ;
306307 const contextOverlay : [ string , boolean | string ] [ ] = [
307308 [ IsSessionPinnedContext . key , isPinned ] ,
308- [ IsSessionArchivedContext . key , sessionData . isArchived . get ( ) ] ,
309- [ IsSessionReadContext . key , sessionData . isRead . get ( ) ] ,
309+ [ IsSessionArchivedContext . key , isArchived ] ,
310+ [ IsSessionReadContext . key , isRead ] ,
310311 [ 'chatSessionType' , sessionData . sessionType ] ,
311312 [ ChatSessionProviderIdContext . key , sessionData . providerId ] ,
312313 ] ;
@@ -339,6 +340,7 @@ class SidebarToggleActionViewItem extends ActionViewItem {
339340 action : IAction ,
340341 options : IBaseActionViewItemOptions | undefined ,
341342 @ISessionsManagementService private readonly sessionsManagementService : ISessionsManagementService ,
343+ @ISessionsListModelService private readonly sessionsListModelService : ISessionsListModelService ,
342344 @IWorkbenchLayoutService private readonly layoutService : IWorkbenchLayoutService ,
343345 ) {
344346 super ( context , action , { ...options , icon : true , label : false } ) ;
@@ -354,23 +356,21 @@ class SidebarToggleActionViewItem extends ActionViewItem {
354356 this . _countBadge . setAttribute ( 'aria-hidden' , 'true' ) ;
355357 this . _updateBadge ( ) ;
356358
357- // Single autorun that tracks all badge-relevant state:
358- // - session list changes (add/remove) via observableSignalFromEvent
359- // - individual session observable state (status, isRead, isArchived)
360- // - sidebar visibility changes
359+ // Track session list changes, status changes, and sidebar visibility
361360 const sessionsChanged = observableSignalFromEvent ( this , this . sessionsManagementService . onDidChangeSessions ) ;
361+ const listModelChanged = observableSignalFromEvent ( this , this . sessionsListModelService . onDidChange ) ;
362362 const sidebarVisibilityChanged = observableSignalFromEvent ( this , handler => this . layoutService . onDidChangePartVisibility ( e => {
363363 if ( e . partId === Parts . SIDEBAR_PART ) {
364364 handler ( e ) ;
365365 }
366366 } ) ) ;
367367 this . _register ( autorun ( reader => {
368368 sessionsChanged . read ( reader ) ;
369+ listModelChanged . read ( reader ) ;
369370 sidebarVisibilityChanged . read ( reader ) ;
370371 for ( const session of this . sessionsManagementService . getSessions ( ) ) {
371372 session . isArchived . read ( reader ) ;
372373 session . status . read ( reader ) ;
373- session . isRead . read ( reader ) ;
374374 }
375375 this . updateClass ( ) ;
376376 this . _updateBadge ( ) ;
@@ -412,7 +412,7 @@ class SidebarToggleActionViewItem extends ActionViewItem {
412412 private _countUnreadSessions ( ) : number {
413413 let unread = 0 ;
414414 for ( const session of this . sessionsManagementService . getSessions ( ) ) {
415- if ( ! session . isArchived . get ( ) && session . status . get ( ) === SessionStatus . Completed && ! session . isRead . get ( ) ) {
415+ if ( ! session . isArchived . get ( ) && session . status . get ( ) === SessionStatus . Completed && ! this . sessionsListModelService . isSessionRead ( session ) ) {
416416 unread ++ ;
417417 }
418418 }
0 commit comments