Skip to main content

Sesiones remotas

Las sesiones remotas permiten a los usuarios acceder a su sesión de Copilot desde GitHub web y móvil a través de Mission Control. Cuando se habilita, el SDK conecta cada sesión a Mission Control, lo que genera una dirección URL que se puede compartir como un vínculo o código QR.

Prerequisites

  • El usuario debe autenticarse (GitHub token o usuario que ha iniciado sesión).
  • El directorio de trabajo de la sesión debe ser un repositorio de GitHub

Habilitación de sesiones remotas

Siempre activado (a nivel de cliente)

Establezca remote: true al crear el cliente. Cada sesión de un repositorio de GitHub obtiene automáticamente una dirección URL remota.

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)

Ir

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}");
    }
});

Óxido

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
    }
}

Sesiones en la nube

Establezca la opción create-session cloud para crear una sesión remota en la nube en lugar de una sesión local. Puede incluir metadatos del repositorio para asociar la sesión en la nube a un repositorio de GitHub.

TypeScript

const session = await client.createSession({
  onPermissionRequest: async () => ({ allowed: true }),
  cloud: {
    repository: { owner: "github", name: "copilot-sdk", branch: "main" },
  },
});

Python

from copilot import CloudSessionOptions, CloudSessionRepository

session = await client.create_session(
    on_permission_request=PermissionHandler.approve_all,
    cloud=CloudSessionOptions(
        repository=CloudSessionRepository(
            owner="github",
            name="copilot-sdk",
            branch="main",
        )
    ),
)

Ir

session, err := client.CreateSession(ctx, &copilot.SessionConfig{
    Cloud: &copilot.CloudSessionOptions{
        Repository: &copilot.CloudSessionRepository{
            Owner:  "github",
            Name:   "copilot-sdk",
            Branch: "main",
        },
    },
})

C#

var session = await client.CreateSessionAsync(new SessionConfig
{
    Cloud = new CloudSessionOptions
    {
        Repository = new CloudSessionRepository
        {
            Owner = "github",
            Name = "copilot-sdk",
            Branch = "main"
        }
    }
});

Óxido

use github_copilot_sdk::{CloudSessionOptions, CloudSessionRepository, SessionConfig};

let session = client.create_session(
    SessionConfig::default().with_cloud(
        CloudSessionOptions::with_repository(
            CloudSessionRepository::new("github", "copilot-sdk").with_branch("main"),
        ),
    ),
).await?;

Alternancia a petición (alternancia por sesión)

Use session.rpc.remote.enable() para iniciar el acceso remoto a mitad de sesión y session.rpc.remote.disable() para detenerlo. Esto equivale a los comandos /remote on y /remote off de la 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()

Ir

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();

Óxido

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?;

Generación de código QR

La dirección URL remota se puede representar como un código QR para facilitar el acceso móvil. El SDK proporciona la dirección URL: use la biblioteca de código QR preferida:

Notas

  • La remote opción de cliente solo se aplica cuando el SDK genera el proceso de la CLI. Se omite al conectarse a un servidor externo a través de cliUrl.
  • La cloud opción de sesión solo se aplica a las nuevas sesiones creadas con session.create; no se usa al reanudar una sesión existente.
  • Si el directorio de trabajo no es un repositorio de GitHub, la configuración remota se omite silenciosamente (modo siempre activado) o devuelve un error (modo a petición).
  • Las sesiones remotas requieren autenticación. Asegúrese de que gitHubToken o useLoggedInUser esté configurado.