Skip to main content

Sessions à distance

Les sessions à distance permettent aux utilisateurs d’accéder à leur session de Copilot à partir de GitHub web et mobile via Mission Control. Lorsqu’il est activé, le SDK connecte chaque session à Mission Control, produisant une URL qui peut être partagée en tant que lien ou code QR.

Pour exécuter des sessions sur le calcul hébergé par GitHub, consultez Sessions dans le cloud.

Prerequisites

  • L’utilisateur doit être authentifié (jeton GitHub ou utilisateur connecté)
  • Le répertoire de travail de la session doit être un référentiel GitHub

Activation des sessions à distance

Toujours activé (au niveau client)

Définir remote: true lors de la création du client. Chaque session d’un dépôt GitHub obtient automatiquement une URL distante.

TypeScript

import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient({ remote: true });
const session = await client.createSession({
  workingDirectory: "/path/to/github-repo",
  onPermissionRequest: async () => ({ allowed: true }),
});

session.on("session.info", (event) => {
  if (event.data.infoType === "remote") {
    console.log("Remote URL:", event.data.url);
  }
});

Python

from copilot import CopilotClient

client = CopilotClient(enable_remote_sessions=True)
session = await client.create_session(
    working_directory="/path/to/github-repo",
    on_permission_request=lambda req: {"allowed": True},
)

def on_event(event):
    if event.type == "session.info" and event.data.info_type == "remote":
        print(f"Remote URL: {event.data.url}")

session.on(on_event)

Allez

client, _ := copilot.NewClient(&copilot.ClientOptions{Remote: true})
session, _ := client.CreateSession(ctx, &copilot.SessionConfig{
    WorkingDirectory: "/path/to/github-repo",
    OnPermissionRequest: func(req copilot.PermissionRequest, inv copilot.PermissionInvocation) (rpc.PermissionDecision, error) {
        return &rpc.PermissionDecisionApproveOnce{}, nil
    },
})

session.On(func(event copilot.SessionEvent) {
    if event.Type == "session.info" {
        // Check infoType and extract URL
    }
})

C#

var client = new CopilotClient(new CopilotClientOptions { Remote = true });
var session = await client.CreateSessionAsync(new SessionConfig
{
    WorkingDirectory = "/path/to/github-repo",
    OnPermissionRequest = (req, inv) =>
        Task.FromResult(PermissionDecision.ApproveOnce()),
});

session.On((SessionEvent e) =>
{
    if (e is SessionInfoEvent info && info.Data.InfoType == "remote")
    {
        Console.WriteLine($"Remote URL: {info.Data.Url}");
    }
});

Rust

use github_copilot_sdk::{Client, ClientOptions, SessionConfig};
use github_copilot_sdk::handler::PermissionResult;

let client = Client::start(
    ClientOptions::new().with_enable_remote_sessions(true)
).await?;
let session = client.create_session(
    SessionConfig::new("/path/to/github-repo")
        .with_permission_handler(|_req, _inv| async {
            Ok(PermissionResult::approve_once())
        }),
).await?;

let mut events = session.subscribe();
while let Ok(event) = events.recv().await {
    if event.event_type == "session.info" {
        // Check info_type and extract URL
    }
}

À la demande (bascule par session)

Permet session.rpc.remote.enable() de démarrer l’accès à distance à mi-session et session.rpc.remote.disable() de l’arrêter. Cela équivaut aux commandes /remote on et /remote off de l’interface CLI.

TypeScript

const result = await session.rpc.remote.enable();
console.log("Remote URL:", result.url);

// Later: stop sharing
await session.rpc.remote.disable();

Python

result = await session.rpc.remote.enable()
print(f"Remote URL: {result.url}")

# Later: stop sharing
await session.rpc.remote.disable()

Allez

result, err := session.RPC.Remote.Enable(ctx)
if result.URL != nil {
    fmt.Println("Remote URL:", *result.URL)
}

// Later: stop sharing
err = session.RPC.Remote.Disable(ctx)

C#

var result = await session.Rpc.Remote.EnableAsync();
Console.WriteLine($"Remote URL: {result.Url}");

// Later: stop sharing
await session.Rpc.Remote.DisableAsync();

Rust

let result = session.rpc().remote().enable().await?;
if let Some(url) = &result.url {
    println!("Remote URL: {url}");
}

// Later: stop sharing
session.rpc().remote().disable().await?;

Génération de code QR

L’URL distante peut être affichée sous la forme d’un code QR pour un accès mobile facile. Le Kit de développement logiciel (SDK) fournit l’URL : utilisez votre bibliothèque de code QR préférée :

Remarques

  • L’option remote cliente s’applique uniquement lorsque le SDK génère le processus CLI. Il est ignoré lors de la connexion à un serveur externe via cliUrl.
  • Si le répertoire de travail n’est pas un dépôt GitHub, la configuration du dépôt distant est ignorée sans avertissement (mode always-on) ou renvoie une erreur (mode on-demand).
  • Les sessions à distance nécessitent une authentification. Assurez-vous que gitHubToken ou useLoggedInUser sont configurés.