@@ -347,8 +347,8 @@ public async Task<CopilotSession> CreateSessionAsync(SessionConfig? config = nul
347347 config ? . DisabledSkills ,
348348 config ? . InfiniteSessions ) ;
349349
350- var response = await connection . Rpc . InvokeWithCancellationAsync < CreateSessionResponse > (
351- "session.create" , [ request ] , cancellationToken ) ;
350+ var response = await InvokeRpcAsync < CreateSessionResponse > (
351+ connection . Rpc , "session.create" , [ request ] , cancellationToken ) ;
352352
353353 var session = new CopilotSession ( response . SessionId , connection . Rpc , response . WorkspacePath ) ;
354354 session . RegisterTools ( config ? . Tools ?? [ ] ) ;
@@ -404,8 +404,8 @@ public async Task<CopilotSession> ResumeSessionAsync(string sessionId, ResumeSes
404404 config ? . SkillDirectories ,
405405 config ? . DisabledSkills ) ;
406406
407- var response = await connection . Rpc . InvokeWithCancellationAsync < ResumeSessionResponse > (
408- "session.resume" , [ request ] , cancellationToken ) ;
407+ var response = await InvokeRpcAsync < ResumeSessionResponse > (
408+ connection . Rpc , "session.resume" , [ request ] , cancellationToken ) ;
409409
410410 var session = new CopilotSession ( response . SessionId , connection . Rpc , response . WorkspacePath ) ;
411411 session . RegisterTools ( config ? . Tools ?? [ ] ) ;
@@ -461,8 +461,8 @@ public async Task<PingResponse> PingAsync(string? message = null, CancellationTo
461461 {
462462 var connection = await EnsureConnectedAsync ( cancellationToken ) ;
463463
464- return await connection . Rpc . InvokeWithCancellationAsync < PingResponse > (
465- "ping" , [ new PingRequest { Message = message } ] , cancellationToken ) ;
464+ return await InvokeRpcAsync < PingResponse > (
465+ connection . Rpc , "ping" , [ new PingRequest { Message = message } ] , cancellationToken ) ;
466466 }
467467
468468 /// <summary>
@@ -475,8 +475,8 @@ public async Task<GetStatusResponse> GetStatusAsync(CancellationToken cancellati
475475 {
476476 var connection = await EnsureConnectedAsync ( cancellationToken ) ;
477477
478- return await connection . Rpc . InvokeWithCancellationAsync < GetStatusResponse > (
479- "status.get" , [ ] , cancellationToken ) ;
478+ return await InvokeRpcAsync < GetStatusResponse > (
479+ connection . Rpc , "status.get" , [ ] , cancellationToken ) ;
480480 }
481481
482482 /// <summary>
@@ -489,8 +489,8 @@ public async Task<GetAuthStatusResponse> GetAuthStatusAsync(CancellationToken ca
489489 {
490490 var connection = await EnsureConnectedAsync ( cancellationToken ) ;
491491
492- return await connection . Rpc . InvokeWithCancellationAsync < GetAuthStatusResponse > (
493- "auth.getStatus" , [ ] , cancellationToken ) ;
492+ return await InvokeRpcAsync < GetAuthStatusResponse > (
493+ connection . Rpc , "auth.getStatus" , [ ] , cancellationToken ) ;
494494 }
495495
496496 /// <summary>
@@ -503,8 +503,8 @@ public async Task<List<ModelInfo>> ListModelsAsync(CancellationToken cancellatio
503503 {
504504 var connection = await EnsureConnectedAsync ( cancellationToken ) ;
505505
506- var response = await connection . Rpc . InvokeWithCancellationAsync < GetModelsResponse > (
507- "models.list" , [ ] , cancellationToken ) ;
506+ var response = await InvokeRpcAsync < GetModelsResponse > (
507+ connection . Rpc , "models.list" , [ ] , cancellationToken ) ;
508508
509509 return response . Models ;
510510 }
@@ -528,8 +528,8 @@ public async Task<List<ModelInfo>> ListModelsAsync(CancellationToken cancellatio
528528 {
529529 var connection = await EnsureConnectedAsync ( cancellationToken ) ;
530530
531- var response = await connection . Rpc . InvokeWithCancellationAsync < GetLastSessionIdResponse > (
532- "session.getLastId" , [ ] , cancellationToken ) ;
531+ var response = await InvokeRpcAsync < GetLastSessionIdResponse > (
532+ connection . Rpc , "session.getLastId" , [ ] , cancellationToken ) ;
533533
534534 return response . SessionId ;
535535 }
@@ -554,8 +554,8 @@ public async Task DeleteSessionAsync(string sessionId, CancellationToken cancell
554554 {
555555 var connection = await EnsureConnectedAsync ( cancellationToken ) ;
556556
557- var response = await connection . Rpc . InvokeWithCancellationAsync < DeleteSessionResponse > (
558- "session.delete" , [ new DeleteSessionRequest ( sessionId ) ] , cancellationToken ) ;
557+ var response = await InvokeRpcAsync < DeleteSessionResponse > (
558+ connection . Rpc , "session.delete" , [ new DeleteSessionRequest ( sessionId ) ] , cancellationToken ) ;
559559
560560 if ( ! response . Success )
561561 {
@@ -584,12 +584,24 @@ public async Task<List<SessionMetadata>> ListSessionsAsync(CancellationToken can
584584 {
585585 var connection = await EnsureConnectedAsync ( cancellationToken ) ;
586586
587- var response = await connection . Rpc . InvokeWithCancellationAsync < ListSessionsResponse > (
588- "session.list" , [ ] , cancellationToken ) ;
587+ var response = await InvokeRpcAsync < ListSessionsResponse > (
588+ connection . Rpc , "session.list" , [ ] , cancellationToken ) ;
589589
590590 return response . Sessions ;
591591 }
592592
593+ internal static async Task < T > InvokeRpcAsync < T > ( JsonRpc rpc , string method , object ? [ ] ? args , CancellationToken cancellationToken )
594+ {
595+ try
596+ {
597+ return await rpc . InvokeWithCancellationAsync < T > ( method , args , cancellationToken ) ;
598+ }
599+ catch ( StreamJsonRpc . RemoteRpcException ex )
600+ {
601+ throw new IOException ( $ "Communication error with Copilot CLI: { ex . Message } ", ex ) ;
602+ }
603+ }
604+
593605 private Task < Connection > EnsureConnectedAsync ( CancellationToken cancellationToken )
594606 {
595607 if ( _connectionTask is null && ! _options . AutoStart )
@@ -604,8 +616,8 @@ private Task<Connection> EnsureConnectedAsync(CancellationToken cancellationToke
604616 private async Task VerifyProtocolVersionAsync ( Connection connection , CancellationToken cancellationToken )
605617 {
606618 var expectedVersion = SdkProtocolVersion . GetVersion ( ) ;
607- var pingResponse = await connection . Rpc . InvokeWithCancellationAsync < PingResponse > (
608- "ping" , [ new PingRequest ( ) ] , cancellationToken ) ;
619+ var pingResponse = await InvokeRpcAsync < PingResponse > (
620+ connection . Rpc , "ping" , [ new PingRequest ( ) ] , cancellationToken ) ;
609621
610622 if ( ! pingResponse . ProtocolVersion . HasValue )
611623 {
0 commit comments