Thanks to visit codestin.com
Credit goes to docs.github.com

Skip to main content

Sessões remotas

As sessões remotas permitem que os usuários acessem sua sessão do Copilot pela Web e pelo aplicativo móvel do GitHub por meio do Mission Control. Quando habilitado, o SDK conecta cada sessão ao Controle de Missão, produzindo uma URL que pode ser compartilhada como um link ou código QR.

Para executar sessões na computação hospedada pelo GitHub, consulte Sessões de nuvem.

Pré-requisitos

  • O usuário deve ser autenticado (GitHub token ou usuário conectado)
  • O diretório de trabalho da sessão deve ser um repositório GitHub

Habilitando sessões remotas

Sempre ativo (nível do cliente)

Definir remote: true ao criar o cliente. Cada sessão em um repositório GitHub obtém automaticamente uma 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)

Go

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

Sob demanda (alternância por sessão)

Use session.rpc.remote.enable() para iniciar o acesso remoto no meio da sessão e session.rpc.remote.disable() para pará-lo. Isso é equivalente aos comandos /remote on e /remote off da 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()

Go

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

Geração de código QR

A URL remota pode ser renderizada como um código QR para facilitar o acesso móvel. O SDK fornece a URL – use sua biblioteca de código QR preferida:

Notes

  • A remote opção cliente só se aplica quando o SDK gera o processo da CLI. Ele é ignorado ao se conectar a um servidor externo por meio de cliUrl.
  • Se o diretório de trabalho não for um GitHub repositório, a instalação remota será ignorada silenciosamente (modo always-on) ou retornará um erro (modo sob demanda).
  • Sessões remotas exigem autenticação. Verifique gitHubToken ou useLoggedInUser está configurado.