@@ -1017,6 +1017,74 @@ async function run(name, fn) {
10171017 assertEqual ( rows [ 1 ] . querySelector ( '.session-title' ) . textContent , 'Beta' , 'second row title' ) ;
10181018 } ) ;
10191019
1020+ await run ( 'renderSidebar trusts server conversation message count over loaded client rows' , ( ) => {
1021+ const sessions = [
1022+ { id : 'a' , title : 'Alpha' , created : 2000 , pinned : false , archived : false , lastMessageAt : 2000 , messageCount : 2 , messages : [
1023+ { id : 'u1' , role : 'user' , content : 'run tools' } ,
1024+ { id : 't1' , role : 'tool' , name : 'grep' } ,
1025+ { id : 't2' , role : 'tool' , name : 'read_file' } ,
1026+ { id : 't3' , role : 'tool' , name : 'shell' } ,
1027+ { id : 't4' , role : 'tool' , name : 'edit_file' } ,
1028+ { id : 'a1' , role : 'assistant' , content : 'done' } ,
1029+ ] } ,
1030+ ] ;
1031+ const { app } = createHarness ( { visibleSessions : ( ) => sessions } ) ;
1032+
1033+ app . renderSidebar ( ) ;
1034+
1035+ const metaEl = app . elements . sessionGroups . querySelector ( '.session-meta' ) ;
1036+ assert ( metaEl . textContent . startsWith ( '2 messages' ) , 'meta uses server conversation count' ) ;
1037+ } ) ;
1038+
1039+ await run ( 'renderSidebar counts only user and assistant messages for unsynced local sessions' , ( ) => {
1040+ const sessions = [
1041+ { id : 'a' , title : 'Alpha' , created : 2000 , pinned : false , archived : false , lastMessageAt : 2000 , messages : [
1042+ { id : 'u1' , role : 'user' , content : 'run tools' } ,
1043+ { id : 't1' , role : 'tool' , name : 'grep' } ,
1044+ { id : 'tg1' , role : 'tool-group' , tools : [ { id : 't2' } , { id : 't3' } , { id : 't4' } ] } ,
1045+ { id : 'a1' , role : 'assistant' , content : 'done' } ,
1046+ ] } ,
1047+ ] ;
1048+ const { app } = createHarness ( { visibleSessions : ( ) => sessions } ) ;
1049+
1050+ app . renderSidebar ( ) ;
1051+
1052+ const metaEl = app . elements . sessionGroups . querySelector ( '.session-meta' ) ;
1053+ assert ( metaEl . textContent . startsWith ( '2 messages' ) , 'meta counts user/assistant only' ) ;
1054+ assert ( ! metaEl . textContent . includes ( '/' ) , 'meta does not show raw/tool count' ) ;
1055+ } ) ;
1056+
1057+ await run ( 'renderSidebar trusts explicit zero server conversation message count' , ( ) => {
1058+ const sessions = [
1059+ { id : 'a' , title : 'Alpha' , created : 2000 , pinned : false , archived : false , lastMessageAt : 2000 , messageCount : 0 , messages : [
1060+ { id : 'u1' , role : 'user' , content : 'locally loaded but server says zero' } ,
1061+ { id : 'a1' , role : 'assistant' , content : 'locally loaded but server says zero' } ,
1062+ ] } ,
1063+ ] ;
1064+ const { app } = createHarness ( { visibleSessions : ( ) => sessions } ) ;
1065+
1066+ app . renderSidebar ( ) ;
1067+
1068+ const metaEl = app . elements . sessionGroups . querySelector ( '.session-meta' ) ;
1069+ assert ( metaEl . textContent . startsWith ( '0 messages' ) , 'explicit server zero is authoritative' ) ;
1070+ } ) ;
1071+
1072+ await run ( 'renderSidebar falls back to local count when server count is absent' , ( ) => {
1073+ const sessions = [
1074+ { id : 'a' , title : 'Alpha' , created : 2000 , pinned : false , archived : false , lastMessageAt : 2000 , messageCount : null , messages : [
1075+ { id : 'u1' , role : 'user' , content : 'run tools' } ,
1076+ { id : 'tg1' , role : 'tool-group' , tools : [ { id : 't1' } , { id : 't2' } , { id : 't3' } , { id : 't4' } ] } ,
1077+ { id : 'a1' , role : 'assistant' , content : 'done' } ,
1078+ ] } ,
1079+ ] ;
1080+ const { app } = createHarness ( { visibleSessions : ( ) => sessions } ) ;
1081+
1082+ app . renderSidebar ( ) ;
1083+
1084+ const metaEl = app . elements . sessionGroups . querySelector ( '.session-meta' ) ;
1085+ assert ( metaEl . textContent . startsWith ( '2 messages' ) , 'null server count falls back to local conversation count' ) ;
1086+ } ) ;
1087+
10201088 await run ( 'renderSidebar skips re-render when nothing changed' , ( ) => {
10211089 const session = { id : 'a' , title : 'Alpha' , created : 1000 , messages : [ ] , pinned : false , archived : false , messageCount : 2 , lastMessageAt : 1000 } ;
10221090 const { app } = createHarness ( { visibleSessions : ( ) => [ session ] } ) ;
0 commit comments