@@ -142,6 +142,7 @@ public void ClientToServer_TypeConstants_AreCorrect()
142142 Assert . Equal ( "get_sessions" , BridgeMessageTypes . GetSessions ) ;
143143 Assert . Equal ( "get_history" , BridgeMessageTypes . GetHistory ) ;
144144 Assert . Equal ( "get_persisted_sessions" , BridgeMessageTypes . GetPersistedSessions ) ;
145+ Assert . Equal ( "get_cca_sessions" , BridgeMessageTypes . GetCcaSessions ) ;
145146 Assert . Equal ( "send_message" , BridgeMessageTypes . SendMessage ) ;
146147 Assert . Equal ( "create_session" , BridgeMessageTypes . CreateSession ) ;
147148 Assert . Equal ( "resume_session" , BridgeMessageTypes . ResumeSession ) ;
@@ -152,6 +153,12 @@ public void ClientToServer_TypeConstants_AreCorrect()
152153 Assert . Equal ( "list_directories" , BridgeMessageTypes . ListDirectories ) ;
153154 }
154155
156+ [ Fact ]
157+ public void CcaSessionsList_TypeConstant_IsCorrect ( )
158+ {
159+ Assert . Equal ( "cca_sessions" , BridgeMessageTypes . CcaSessionsList ) ;
160+ }
161+
155162 [ Fact ]
156163 public void DirectoriesList_TypeConstant_IsCorrect ( )
157164 {
@@ -436,4 +443,86 @@ public void AttentionNeededPayload_AllReasons_RoundTrip(AttentionReason reason)
436443
437444 Assert . Equal ( reason , restored ! . Reason ) ;
438445 }
446+
447+ [ Fact ]
448+ public void CcaSessionsPayload_RoundTrip ( )
449+ {
450+ var payload = new CcaSessionsPayload
451+ {
452+ Sessions = new List < CcaSessionSummary >
453+ {
454+ new ( )
455+ {
456+ SessionId = "cca-guid-1" ,
457+ Summary = "Fix login bug" ,
458+ StartTime = new DateTime ( 2025 , 6 , 15 , 10 , 0 , 0 , DateTimeKind . Utc ) ,
459+ ModifiedTime = new DateTime ( 2025 , 6 , 15 , 11 , 0 , 0 , DateTimeKind . Utc ) ,
460+ Repository = "owner/repo" ,
461+ Branch = "copilot/fix-123" ,
462+ WorkingDirectory = "/home/runner/work/repo"
463+ } ,
464+ new ( )
465+ {
466+ SessionId = "cca-guid-2" ,
467+ Summary = "Add tests for API" ,
468+ StartTime = new DateTime ( 2025 , 6 , 15 , 12 , 0 , 0 , DateTimeKind . Utc ) ,
469+ ModifiedTime = new DateTime ( 2025 , 6 , 15 , 13 , 0 , 0 , DateTimeKind . Utc ) ,
470+ Repository = "owner/other-repo" ,
471+ Branch = "copilot/add-tests" ,
472+ }
473+ }
474+ } ;
475+ var msg = BridgeMessage . Create ( BridgeMessageTypes . CcaSessionsList , payload ) ;
476+ var json = msg . Serialize ( ) ;
477+ var restored = BridgeMessage . Deserialize ( json ) ! . GetPayload < CcaSessionsPayload > ( ) ;
478+
479+ Assert . NotNull ( restored ) ;
480+ Assert . Equal ( 2 , restored ! . Sessions . Count ) ;
481+ Assert . Equal ( "cca-guid-1" , restored . Sessions [ 0 ] . SessionId ) ;
482+ Assert . Equal ( "Fix login bug" , restored . Sessions [ 0 ] . Summary ) ;
483+ Assert . Equal ( "owner/repo" , restored . Sessions [ 0 ] . Repository ) ;
484+ Assert . Equal ( "copilot/fix-123" , restored . Sessions [ 0 ] . Branch ) ;
485+ Assert . Equal ( "/home/runner/work/repo" , restored . Sessions [ 0 ] . WorkingDirectory ) ;
486+ Assert . Equal ( "cca-guid-2" , restored . Sessions [ 1 ] . SessionId ) ;
487+ Assert . Equal ( "Add tests for API" , restored . Sessions [ 1 ] . Summary ) ;
488+ Assert . Null ( restored . Sessions [ 1 ] . WorkingDirectory ) ;
489+ }
490+
491+ [ Fact ]
492+ public void CcaSessionSummary_NullOptionalFields_RoundTrip ( )
493+ {
494+ var payload = new CcaSessionsPayload
495+ {
496+ Sessions = new List < CcaSessionSummary >
497+ {
498+ new ( )
499+ {
500+ SessionId = "cca-minimal" ,
501+ StartTime = DateTime . UtcNow ,
502+ ModifiedTime = DateTime . UtcNow
503+ }
504+ }
505+ } ;
506+ var msg = BridgeMessage . Create ( BridgeMessageTypes . CcaSessionsList , payload ) ;
507+ var json = msg . Serialize ( ) ;
508+ var restored = BridgeMessage . Deserialize ( json ) ! . GetPayload < CcaSessionsPayload > ( ) ;
509+
510+ Assert . Single ( restored ! . Sessions ) ;
511+ Assert . Equal ( "cca-minimal" , restored . Sessions [ 0 ] . SessionId ) ;
512+ Assert . Null ( restored . Sessions [ 0 ] . Summary ) ;
513+ Assert . Null ( restored . Sessions [ 0 ] . Repository ) ;
514+ Assert . Null ( restored . Sessions [ 0 ] . Branch ) ;
515+ Assert . Null ( restored . Sessions [ 0 ] . WorkingDirectory ) ;
516+ }
517+
518+ [ Fact ]
519+ public void CcaSessionsPayload_EmptyList_RoundTrip ( )
520+ {
521+ var payload = new CcaSessionsPayload { Sessions = new List < CcaSessionSummary > ( ) } ;
522+ var msg = BridgeMessage . Create ( BridgeMessageTypes . CcaSessionsList , payload ) ;
523+ var restored = BridgeMessage . Deserialize ( msg . Serialize ( ) ) ! . GetPayload < CcaSessionsPayload > ( ) ;
524+
525+ Assert . NotNull ( restored ) ;
526+ Assert . Empty ( restored ! . Sessions ) ;
527+ }
439528}
0 commit comments