{"meta":{"title":"Sessões remotas","intro":"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.","product":"GitHub Copilot","breadcrumbs":[{"href":"/pt/copilot","title":"GitHub Copilot"},{"href":"/pt/copilot/how-tos","title":"Instruções"},{"href":"/pt/copilot/how-tos/copilot-sdk","title":"SDK do Copilot"},{"href":"/pt/copilot/how-tos/copilot-sdk/features","title":"Features"},{"href":"/pt/copilot/how-tos/copilot-sdk/features/remote-sessions","title":"Sessões remotas"}],"documentType":"article"},"body":"# Sessões remotas\n\nAs 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.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\nPara executar sessões na computação hospedada pelo GitHub, consulte [Sessões de nuvem](/pt/copilot/how-tos/copilot-sdk/features/cloud-sessions).\n\n## Pré-requisitos\n\n* O usuário deve ser autenticado (GitHub token ou usuário conectado)\n* O diretório de trabalho da sessão deve ser um repositório GitHub\n\n## Habilitando sessões remotas\n\n### Sempre ativo (nível do cliente)\n\nDefinir `enableRemoteSessions: true` ao criar o cliente. Cada sessão em um repositório GitHub obtém automaticamente uma URL remota.\n\n<!-- tabs:start -->\n\n#### TypeScript\n\n<!-- docs-validate: skip -->\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nconst client = new CopilotClient({ enableRemoteSessions: true });\nconst session = await client.createSession({\n  workingDirectory: \"/path/to/github-repo\",\n  onPermissionRequest: async () => ({ allowed: true }),\n});\n\nsession.on(\"session.info\", (event) => {\n  if (event.data.infoType === \"remote\") {\n    console.log(\"Remote URL:\", event.data.url);\n  }\n});\n```\n\n#### Python\n\n<!-- docs-validate: skip -->\n\n```python\nfrom copilot import CopilotClient\n\nclient = CopilotClient(enable_remote_sessions=True)\nsession = await client.create_session(\n    working_directory=\"/path/to/github-repo\",\n    on_permission_request=lambda req: {\"allowed\": True},\n)\n\ndef on_event(event):\n    if event.type == \"session.info\" and event.data.info_type == \"remote\":\n        print(f\"Remote URL: {event.data.url}\")\n\nsession.on(on_event)\n```\n\n#### Go\n\n<!-- docs-validate: skip -->\n\n```golang\nclient := copilot.NewClient(&copilot.ClientOptions{EnableRemoteSessions: true})\nsession, _ := client.CreateSession(ctx, &copilot.SessionConfig{\n    WorkingDirectory: \"/path/to/github-repo\",\n    OnPermissionRequest: func(req copilot.PermissionRequest, inv copilot.PermissionInvocation) (rpc.PermissionDecision, error) {\n        return &rpc.PermissionDecisionApproveOnce{}, nil\n    },\n})\n\nsession.On(func(event copilot.SessionEvent) {\n    if event.Type == \"session.info\" {\n        // Check infoType and extract URL\n    }\n})\n```\n\n#### C\\#\n\n<!-- docs-validate: skip -->\n\n```csharp\nvar client = new CopilotClient(new CopilotClientOptions { EnableRemoteSessions = true });\nvar session = await client.CreateSessionAsync(new SessionConfig\n{\n    WorkingDirectory = \"/path/to/github-repo\",\n    OnPermissionRequest = (req, inv) =>\n        Task.FromResult(PermissionDecision.ApproveOnce()),\n});\n\nsession.On((SessionEvent e) =>\n{\n    if (e is SessionInfoEvent info && info.Data.InfoType == \"remote\")\n    {\n        Console.WriteLine($\"Remote URL: {info.Data.Url}\");\n    }\n});\n```\n\n#### Rust\n\n<!-- docs-validate: skip -->\n\n```rust\nuse github_copilot_sdk::{Client, ClientOptions, SessionConfig};\nuse github_copilot_sdk::handler::PermissionResult;\n\nlet client = Client::start(\n    ClientOptions::new().with_enable_remote_sessions(true)\n).await?;\nlet session = client.create_session(\n    SessionConfig::new(\"/path/to/github-repo\")\n        .with_permission_handler(|_req, _inv| async {\n            Ok(PermissionResult::approve_once())\n        }),\n).await?;\n\nlet mut events = session.subscribe();\nwhile let Ok(event) = events.recv().await {\n    if event.event_type == \"session.info\" {\n        // Check info_type and extract URL\n    }\n}\n```\n\n<!-- tabs:end -->\n\n### Sob demanda (alternância por sessão)\n\nUse `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.\n\n<!-- tabs:start -->\n\n#### TypeScript\n\n<!-- docs-validate: skip -->\n\n```typescript\nconst result = await session.rpc.remote.enable();\nconsole.log(\"Remote URL:\", result.url);\n\n// Later: stop sharing\nawait session.rpc.remote.disable();\n```\n\n#### Python\n\n<!-- docs-validate: skip -->\n\n```python\nresult = await session.rpc.remote.enable()\nprint(f\"Remote URL: {result.url}\")\n\n# Later: stop sharing\nawait session.rpc.remote.disable()\n```\n\n#### Go\n\n<!-- docs-validate: skip -->\n\n```golang\nresult, err := session.RPC.Remote.Enable(ctx)\nif result.URL != nil {\n    fmt.Println(\"Remote URL:\", *result.URL)\n}\n\n// Later: stop sharing\nerr = session.RPC.Remote.Disable(ctx)\n```\n\n#### C\\#\n\n<!-- docs-validate: skip -->\n\n```csharp\nvar result = await session.Rpc.Remote.EnableAsync();\nConsole.WriteLine($\"Remote URL: {result.Url}\");\n\n// Later: stop sharing\nawait session.Rpc.Remote.DisableAsync();\n```\n\n#### Rust\n\n<!-- docs-validate: skip -->\n\n```rust\nlet result = session.rpc().remote().enable().await?;\nif let Some(url) = &result.url {\n    println!(\"Remote URL: {url}\");\n}\n\n// Later: stop sharing\nsession.rpc().remote().disable().await?;\n```\n\n<!-- tabs:end -->\n\n## Geração de código QR\n\nA 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:\n\n* **TypeScript**: [qrcode](https://www.npmjs.com/package/qrcode)\n* **Python**: [qrcode](https://pypi.org/project/qrcode/)\n* **Go**: [go-qrcode](https://github.com/skip2/go-qrcode)\n* **C#**: [QRCoder](https://www.nuget.org/packages/QRCoder)\n* **Rust**: [qrcode](https://crates.io/crates/qrcode)\n\n## Notes\n\n* A `enableRemoteSessions` opção cliente se aplica quando o SDK inicia o runtime, seja como um processo filho ou como um host em processo. Ele é ignorado ao se conectar a um runtime já em execução.\n* 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).\n* Sessões remotas exigem autenticação. Verifique `gitHubToken` ou `useLoggedInUser` está configurado."}