Необходимые условия
- Пользователь должен быть аутентифицирован (токеном GitHub или вошедшим в систему)
- Рабочий каталог сессии должен быть репозиторием GitHub
Включение удалённых сессий
Всегда-онлайн (на уровне клиента)
Устанавливайте remote: true при создании клиента. Каждая сессия в репозитории GitHub автоматически получает удалённый URL.
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
}
}
Облачные сессии
Настройте опцию создания сессии cloud для создания удалённой сессии в облаке вместо локальной. Вы можете включить метаданные репозитория, чтобы связать облачную сессию с репозиторием 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",
)
),
)
Go
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"
}
}
});
Rust
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?;
Переключатель по запросу (переключатель на сессию)
Используйте session.rpc.remote.enable() для запуска удалённого доступа во время сессии и session.rpc.remote.disable() остановки его. Это эквивалентно CLI /remote on и /remote off командам.
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?;
Генерация QR-кодов
Удалённый URL можно отобразить в виде QR-кода для удобного мобильного доступа. SDK предоставляет URL — используйте предпочитаемую библиотеку QR-кодов:
Notes
- Опция клиента
remoteприменяется только тогда, когда SDK запускает процесс CLI. Он игнорируется при подключении к внешнему серверу черезcliUrl. - Опция
cloudсессии применяется только к новым сессиям, созданным сsession.createпомощью ; она не используется при возобновлении существующей сессии. - Если рабочая папка не является репозиторием GitHub, удалённая настройка тихо пропускается (режим всегда включено) или возвращается ошибка (режим по запросу).
- Удалённые сессии требуют аутентификации. Убедитесь,
gitHubTokenчто это настроеноuseLoggedInUser.