{"meta":{"title":"Sessions à distance","intro":"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.","product":"GitHub Copilot","breadcrumbs":[{"href":"/fr/copilot","title":"GitHub Copilot"},{"href":"/fr/copilot/how-tos","title":"Procédures"},{"href":"/fr/copilot/how-tos/copilot-sdk","title":"Kit de développement logiciel (SDK) Copilot"},{"href":"/fr/copilot/how-tos/copilot-sdk/features","title":"Fonctionnalités"},{"href":"/fr/copilot/how-tos/copilot-sdk/features/remote-sessions","title":"Sessions distantes"}],"documentType":"article"},"body":"# Sessions à distance\n\nLes 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.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\nPour exécuter des sessions sur le calcul hébergé par GitHub, consultez [Sessions dans le cloud](/fr/copilot/how-tos/copilot-sdk/features/cloud-sessions).\n\n## Prerequisites\n\n* L’utilisateur doit être authentifié (jeton GitHub ou utilisateur connecté)\n* Le répertoire de travail de la session doit être un référentiel GitHub\n\n## Activation des sessions à distance\n\n### Toujours activé (au niveau client)\n\nDéfinir `enableRemoteSessions: true` lors de la création du client. Chaque session d’un dépôt GitHub obtient automatiquement une URL distante.\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#### Allez\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### À la demande (bascule par session)\n\nPermet `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.\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#### Allez\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## Génération de code QR\n\nL’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 :\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## Remarques\n\n* L’option `enableRemoteSessions` client s’applique lorsque le SDK démarre le runtime, soit en tant que processus enfant, soit en tant qu’hôte in-process. Il est ignoré lors de la connexion à un runtime déjà en cours d’exécution.\n* 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).\n* Les sessions à distance nécessitent une authentification. Assurez-vous que `gitHubToken` ou `useLoggedInUser` sont configurés."}