@@ -216,6 +216,148 @@ internal class SwitchToRequest
216216 public string ModelId { get ; set ; } = string . Empty ;
217217}
218218
219+ public class SessionModeGetResult
220+ {
221+ /// <summary>The current agent mode.</summary>
222+ [ JsonPropertyName ( "mode" ) ]
223+ public SessionModeGetResultMode Mode { get ; set ; }
224+ }
225+
226+ internal class GetRequest
227+ {
228+ [ JsonPropertyName ( "sessionId" ) ]
229+ public string SessionId { get ; set ; } = string . Empty ;
230+ }
231+
232+ public class SessionModeSetResult
233+ {
234+ /// <summary>The agent mode after switching.</summary>
235+ [ JsonPropertyName ( "mode" ) ]
236+ public SessionModeGetResultMode Mode { get ; set ; }
237+ }
238+
239+ internal class SetRequest
240+ {
241+ [ JsonPropertyName ( "sessionId" ) ]
242+ public string SessionId { get ; set ; } = string . Empty ;
243+
244+ [ JsonPropertyName ( "mode" ) ]
245+ public SessionModeGetResultMode Mode { get ; set ; }
246+ }
247+
248+ public class SessionPlanReadResult
249+ {
250+ /// <summary>Whether plan.md exists in the workspace</summary>
251+ [ JsonPropertyName ( "exists" ) ]
252+ public bool Exists { get ; set ; }
253+
254+ /// <summary>The content of plan.md, or null if it does not exist</summary>
255+ [ JsonPropertyName ( "content" ) ]
256+ public string ? Content { get ; set ; }
257+ }
258+
259+ internal class ReadRequest
260+ {
261+ [ JsonPropertyName ( "sessionId" ) ]
262+ public string SessionId { get ; set ; } = string . Empty ;
263+ }
264+
265+ public class SessionPlanUpdateResult
266+ {
267+ }
268+
269+ internal class UpdateRequest
270+ {
271+ [ JsonPropertyName ( "sessionId" ) ]
272+ public string SessionId { get ; set ; } = string . Empty ;
273+
274+ [ JsonPropertyName ( "content" ) ]
275+ public string Content { get ; set ; } = string . Empty ;
276+ }
277+
278+ public class SessionPlanDeleteResult
279+ {
280+ }
281+
282+ internal class DeleteRequest
283+ {
284+ [ JsonPropertyName ( "sessionId" ) ]
285+ public string SessionId { get ; set ; } = string . Empty ;
286+ }
287+
288+ public class SessionWorkspaceListFilesResult
289+ {
290+ /// <summary>Relative file paths in the workspace files directory</summary>
291+ [ JsonPropertyName ( "files" ) ]
292+ public List < string > Files { get ; set ; } = new ( ) ;
293+ }
294+
295+ internal class ListFilesRequest
296+ {
297+ [ JsonPropertyName ( "sessionId" ) ]
298+ public string SessionId { get ; set ; } = string . Empty ;
299+ }
300+
301+ public class SessionWorkspaceReadFileResult
302+ {
303+ /// <summary>File content as a UTF-8 string</summary>
304+ [ JsonPropertyName ( "content" ) ]
305+ public string Content { get ; set ; } = string . Empty ;
306+ }
307+
308+ internal class ReadFileRequest
309+ {
310+ [ JsonPropertyName ( "sessionId" ) ]
311+ public string SessionId { get ; set ; } = string . Empty ;
312+
313+ [ JsonPropertyName ( "path" ) ]
314+ public string Path { get ; set ; } = string . Empty ;
315+ }
316+
317+ public class SessionWorkspaceCreateFileResult
318+ {
319+ }
320+
321+ internal class CreateFileRequest
322+ {
323+ [ JsonPropertyName ( "sessionId" ) ]
324+ public string SessionId { get ; set ; } = string . Empty ;
325+
326+ [ JsonPropertyName ( "path" ) ]
327+ public string Path { get ; set ; } = string . Empty ;
328+
329+ [ JsonPropertyName ( "content" ) ]
330+ public string Content { get ; set ; } = string . Empty ;
331+ }
332+
333+ public class SessionFleetStartResult
334+ {
335+ /// <summary>Whether fleet mode was successfully activated</summary>
336+ [ JsonPropertyName ( "started" ) ]
337+ public bool Started { get ; set ; }
338+ }
339+
340+ internal class StartRequest
341+ {
342+ [ JsonPropertyName ( "sessionId" ) ]
343+ public string SessionId { get ; set ; } = string . Empty ;
344+
345+ [ JsonPropertyName ( "prompt" ) ]
346+ public string ? Prompt { get ; set ; }
347+ }
348+
349+ [ JsonConverter ( typeof ( JsonStringEnumConverter < SessionModeGetResultMode > ) ) ]
350+ public enum SessionModeGetResultMode
351+ {
352+ [ JsonStringEnumMemberName ( "interactive" ) ]
353+ Interactive ,
354+ [ JsonStringEnumMemberName ( "plan" ) ]
355+ Plan ,
356+ [ JsonStringEnumMemberName ( "autopilot" ) ]
357+ Autopilot ,
358+ }
359+
360+
219361/// <summary>Typed server-scoped RPC methods (no session required).</summary>
220362public class ServerRpc
221363{
@@ -309,9 +451,21 @@ internal SessionRpc(JsonRpc rpc, string sessionId)
309451 _rpc = rpc ;
310452 _sessionId = sessionId ;
311453 Model = new ModelApi ( rpc , sessionId ) ;
454+ Mode = new ModeApi ( rpc , sessionId ) ;
455+ Plan = new PlanApi ( rpc , sessionId ) ;
456+ Workspace = new WorkspaceApi ( rpc , sessionId ) ;
457+ Fleet = new FleetApi ( rpc , sessionId ) ;
312458 }
313459
314460 public ModelApi Model { get ; }
461+
462+ public ModeApi Mode { get ; }
463+
464+ public PlanApi Plan { get ; }
465+
466+ public WorkspaceApi Workspace { get ; }
467+
468+ public FleetApi Fleet { get ; }
315469}
316470
317471public class ModelApi
@@ -340,13 +494,128 @@ public async Task<SessionModelSwitchToResult> SwitchToAsync(string modelId, Canc
340494 }
341495}
342496
497+ public class ModeApi
498+ {
499+ private readonly JsonRpc _rpc ;
500+ private readonly string _sessionId ;
501+
502+ internal ModeApi ( JsonRpc rpc , string sessionId )
503+ {
504+ _rpc = rpc ;
505+ _sessionId = sessionId ;
506+ }
507+
508+ /// <summary>Calls "session.mode.get".</summary>
509+ public async Task < SessionModeGetResult > GetAsync ( CancellationToken cancellationToken = default )
510+ {
511+ var request = new GetRequest { SessionId = _sessionId } ;
512+ return await CopilotClient . InvokeRpcAsync < SessionModeGetResult > ( _rpc , "session.mode.get" , [ request ] , cancellationToken ) ;
513+ }
514+
515+ /// <summary>Calls "session.mode.set".</summary>
516+ public async Task < SessionModeSetResult > SetAsync ( SessionModeGetResultMode mode , CancellationToken cancellationToken = default )
517+ {
518+ var request = new SetRequest { SessionId = _sessionId , Mode = mode } ;
519+ return await CopilotClient . InvokeRpcAsync < SessionModeSetResult > ( _rpc , "session.mode.set" , [ request ] , cancellationToken ) ;
520+ }
521+ }
522+
523+ public class PlanApi
524+ {
525+ private readonly JsonRpc _rpc ;
526+ private readonly string _sessionId ;
527+
528+ internal PlanApi ( JsonRpc rpc , string sessionId )
529+ {
530+ _rpc = rpc ;
531+ _sessionId = sessionId ;
532+ }
533+
534+ /// <summary>Calls "session.plan.read".</summary>
535+ public async Task < SessionPlanReadResult > ReadAsync ( CancellationToken cancellationToken = default )
536+ {
537+ var request = new ReadRequest { SessionId = _sessionId } ;
538+ return await CopilotClient . InvokeRpcAsync < SessionPlanReadResult > ( _rpc , "session.plan.read" , [ request ] , cancellationToken ) ;
539+ }
540+
541+ /// <summary>Calls "session.plan.update".</summary>
542+ public async Task < SessionPlanUpdateResult > UpdateAsync ( string content , CancellationToken cancellationToken = default )
543+ {
544+ var request = new UpdateRequest { SessionId = _sessionId , Content = content } ;
545+ return await CopilotClient . InvokeRpcAsync < SessionPlanUpdateResult > ( _rpc , "session.plan.update" , [ request ] , cancellationToken ) ;
546+ }
547+
548+ /// <summary>Calls "session.plan.delete".</summary>
549+ public async Task < SessionPlanDeleteResult > DeleteAsync ( CancellationToken cancellationToken = default )
550+ {
551+ var request = new DeleteRequest { SessionId = _sessionId } ;
552+ return await CopilotClient . InvokeRpcAsync < SessionPlanDeleteResult > ( _rpc , "session.plan.delete" , [ request ] , cancellationToken ) ;
553+ }
554+ }
555+
556+ public class WorkspaceApi
557+ {
558+ private readonly JsonRpc _rpc ;
559+ private readonly string _sessionId ;
560+
561+ internal WorkspaceApi ( JsonRpc rpc , string sessionId )
562+ {
563+ _rpc = rpc ;
564+ _sessionId = sessionId ;
565+ }
566+
567+ /// <summary>Calls "session.workspace.listFiles".</summary>
568+ public async Task < SessionWorkspaceListFilesResult > ListFilesAsync ( CancellationToken cancellationToken = default )
569+ {
570+ var request = new ListFilesRequest { SessionId = _sessionId } ;
571+ return await CopilotClient . InvokeRpcAsync < SessionWorkspaceListFilesResult > ( _rpc , "session.workspace.listFiles" , [ request ] , cancellationToken ) ;
572+ }
573+
574+ /// <summary>Calls "session.workspace.readFile".</summary>
575+ public async Task < SessionWorkspaceReadFileResult > ReadFileAsync ( string path , CancellationToken cancellationToken = default )
576+ {
577+ var request = new ReadFileRequest { SessionId = _sessionId , Path = path } ;
578+ return await CopilotClient . InvokeRpcAsync < SessionWorkspaceReadFileResult > ( _rpc , "session.workspace.readFile" , [ request ] , cancellationToken ) ;
579+ }
580+
581+ /// <summary>Calls "session.workspace.createFile".</summary>
582+ public async Task < SessionWorkspaceCreateFileResult > CreateFileAsync ( string path , string content , CancellationToken cancellationToken = default )
583+ {
584+ var request = new CreateFileRequest { SessionId = _sessionId , Path = path , Content = content } ;
585+ return await CopilotClient . InvokeRpcAsync < SessionWorkspaceCreateFileResult > ( _rpc , "session.workspace.createFile" , [ request ] , cancellationToken ) ;
586+ }
587+ }
588+
589+ public class FleetApi
590+ {
591+ private readonly JsonRpc _rpc ;
592+ private readonly string _sessionId ;
593+
594+ internal FleetApi ( JsonRpc rpc , string sessionId )
595+ {
596+ _rpc = rpc ;
597+ _sessionId = sessionId ;
598+ }
599+
600+ /// <summary>Calls "session.fleet.start".</summary>
601+ public async Task < SessionFleetStartResult > StartAsync ( string ? prompt , CancellationToken cancellationToken = default )
602+ {
603+ var request = new StartRequest { SessionId = _sessionId , Prompt = prompt } ;
604+ return await CopilotClient . InvokeRpcAsync < SessionFleetStartResult > ( _rpc , "session.fleet.start" , [ request ] , cancellationToken ) ;
605+ }
606+ }
607+
343608[ JsonSourceGenerationOptions (
344609 JsonSerializerDefaults . Web ,
345610 AllowOutOfOrderMetadataProperties = true ,
346611 DefaultIgnoreCondition = JsonIgnoreCondition . WhenWritingNull ) ]
347612[ JsonSerializable ( typeof ( AccountGetQuotaResult ) ) ]
348613[ JsonSerializable ( typeof ( AccountGetQuotaResultQuotaSnapshotsValue ) ) ]
614+ [ JsonSerializable ( typeof ( CreateFileRequest ) ) ]
615+ [ JsonSerializable ( typeof ( DeleteRequest ) ) ]
349616[ JsonSerializable ( typeof ( GetCurrentRequest ) ) ]
617+ [ JsonSerializable ( typeof ( GetRequest ) ) ]
618+ [ JsonSerializable ( typeof ( ListFilesRequest ) ) ]
350619[ JsonSerializable ( typeof ( ListRequest ) ) ]
351620[ JsonSerializable ( typeof ( Model ) ) ]
352621[ JsonSerializable ( typeof ( ModelBilling ) ) ]
@@ -357,9 +626,23 @@ public async Task<SessionModelSwitchToResult> SwitchToAsync(string modelId, Canc
357626[ JsonSerializable ( typeof ( ModelsListResult ) ) ]
358627[ JsonSerializable ( typeof ( PingRequest ) ) ]
359628[ JsonSerializable ( typeof ( PingResult ) ) ]
629+ [ JsonSerializable ( typeof ( ReadFileRequest ) ) ]
630+ [ JsonSerializable ( typeof ( ReadRequest ) ) ]
631+ [ JsonSerializable ( typeof ( SessionFleetStartResult ) ) ]
632+ [ JsonSerializable ( typeof ( SessionModeGetResult ) ) ]
633+ [ JsonSerializable ( typeof ( SessionModeSetResult ) ) ]
360634[ JsonSerializable ( typeof ( SessionModelGetCurrentResult ) ) ]
361635[ JsonSerializable ( typeof ( SessionModelSwitchToResult ) ) ]
636+ [ JsonSerializable ( typeof ( SessionPlanDeleteResult ) ) ]
637+ [ JsonSerializable ( typeof ( SessionPlanReadResult ) ) ]
638+ [ JsonSerializable ( typeof ( SessionPlanUpdateResult ) ) ]
639+ [ JsonSerializable ( typeof ( SessionWorkspaceCreateFileResult ) ) ]
640+ [ JsonSerializable ( typeof ( SessionWorkspaceListFilesResult ) ) ]
641+ [ JsonSerializable ( typeof ( SessionWorkspaceReadFileResult ) ) ]
642+ [ JsonSerializable ( typeof ( SetRequest ) ) ]
643+ [ JsonSerializable ( typeof ( StartRequest ) ) ]
362644[ JsonSerializable ( typeof ( SwitchToRequest ) ) ]
363645[ JsonSerializable ( typeof ( Tool ) ) ]
364646[ JsonSerializable ( typeof ( ToolsListResult ) ) ]
647+ [ JsonSerializable ( typeof ( UpdateRequest ) ) ]
365648internal partial class RpcJsonContext : JsonSerializerContext ;
0 commit comments