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

Skip to main content

Configurando o SDK do Copilot para serviços de back-end

Execute SDK do GitHub Copilot em aplicativos do lado do servidor, como APIs, back-ends da Web, microsserviços e trabalhos em segundo plano.

Quem pode usar esse recurso?

SDK do GitHub Copilot está disponível com todos os Copilot planos.

Observação

SDK do Copilot está em versão prévia técnica no momento. A funcionalidade e a disponibilidade estão sujeitas a alterações.

A CLI é executada como um servidor sem cabeça ao qual o código de back-end se conecta pela rede.

          **Melhor para:** Back-ends de aplicativos web, serviços de API, ferramentas internas, integrações de CI/CD, qualquer carga de trabalho do lado do servidor.

Como funciona

Em vez do SDK gerar um processo filho da CLI, você executa a CLI de forma independente no modo de servidor sem cabeça. Seu back-end se conecta a ele por TCP usando a opção cliUrl . Para obter diagramas detalhados da arquitetura do servidor sem cabeça e como ela se compara à CLI gerenciada automaticamente padrão, consulte o github/copilot-sdkrepositório.

Principais características:

  • A CLI é executada como um processo de servidor persistente, não gerado por solicitação.
  • O SDK se conecta por TCP– a CLI e o aplicativo podem ser executados em contêineres diferentes.
  • Vários clientes do SDK podem compartilhar um servidor da CLI.
  • Funciona com qualquer método de autenticação (GitHub tokens, variáveis de ambiente, BYOK).

Etapa 1: Iniciar a CLI no modo sem cabeça

Execute a CLI como um servidor em segundo plano.

# Start with a specific port
copilot --headless --port 4321

# Or let it pick a random port (prints the URL)
copilot --headless
# Output: Listening on http://localhost:52431

Para produção, execute-o como um serviço do sistema ou em um contêiner:

# Docker
docker run -d --name copilot-cli \
    -p 4321:4321 \
    -e COPILOT_GITHUB_TOKEN="$TOKEN" \
    ghcr.io/github/copilot-cli:latest \
    --headless --port 4321
# systemd
[Service]
ExecStart=/usr/local/bin/copilot --headless --port 4321
Environment=COPILOT_GITHUB_TOKEN=YOUR-GITHUB-TOKEN
Restart=always

Etapa 2: Conectar o SDK

Node.js/TypeScript

import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient({
    cliUrl: "localhost:4321",
});

const session = await client.createSession({
    sessionId: `user-${userId}-${Date.now()}`,
    model: "gpt-4.1",
});

const response = await session.sendAndWait({ prompt: req.body.message });
res.json({ content: response?.data.content });

Python

from copilot import CopilotClient

client = CopilotClient({
    "cli_url": "localhost:4321",
})
await client.start()

session = await client.create_session({
    "session_id": f"user-{user_id}-{int(time.time())}",
    "model": "gpt-4.1",
})

response = await session.send_and_wait({"prompt": message})

Go

client := copilot.NewClient(&copilot.ClientOptions{
    CLIUrl: "localhost:4321",
})
client.Start(ctx)
defer client.Stop()

session, _ := client.CreateSession(ctx, &copilot.SessionConfig{
    SessionID: fmt.Sprintf("user-%s-%d", userID, time.Now().Unix()),
    Model:     "gpt-4.1",
})

response, _ := session.SendAndWait(ctx, copilot.MessageOptions{Prompt: message})

.NET

var client = new CopilotClient(new CopilotClientOptions
{
    CliUrl = "localhost:4321",
    UseStdio = false,
});

await using var session = await client.CreateSessionAsync(new SessionConfig
{
    SessionId = $"user-{userId}-{DateTimeOffset.UtcNow.ToUnixTimeSeconds()}",
    Model = "gpt-4.1",
});

var response = await session.SendAndWaitAsync(
    new MessageOptions { Prompt = message });

Autenticação para serviços de back-end

Tokens de variável de ambiente

A abordagem mais simples: defina um token no servidor da CLI:

# All requests use this token
export COPILOT_GITHUB_TOKEN="YOUR-SERVICE-ACCOUNT-TOKEN"
copilot --headless --port 4321

Substitua YOUR-SERVICE-ACCOUNT-TOKEN pelo seu GitHubpersonal access token token OAuth para a conta de serviço.

Tokens por usuário (OAuth)

Passe tokens de usuário individuais ao criar sessões:

// Your API receives user tokens from your auth layer
app.post("/chat", authMiddleware, async (req, res) => {
    const client = new CopilotClient({
        cliUrl: "localhost:4321",
        githubToken: req.user.githubToken,
        useLoggedInUser: false,
    });

    const session = await client.createSession({
        sessionId: `user-${req.user.id}-chat`,
        model: "gpt-4.1",
    });

    const response = await session.sendAndWait({
        prompt: req.body.message,
    });

    res.json({ content: response?.data.content });
});

BYOK (sem GitHub autenticação)

Use suas próprias chaves de API para o provedor de modelos:

const client = new CopilotClient({
    cliUrl: "localhost:4321",
});

const session = await client.createSession({
    model: "gpt-4.1",
    provider: {
        type: "openai",
        baseUrl: "https://api.openai.com/v1",
        apiKey: process.env.OPENAI_API_KEY,
    },
});

Padrões comuns de back-end

API Web com o Express

import express from "express";
import { CopilotClient } from "@github/copilot-sdk";

const app = express();
app.use(express.json());

// Single shared CLI connection
const client = new CopilotClient({
    cliUrl: process.env.CLI_URL || "localhost:4321",
});

app.post("/api/chat", async (req, res) => {
    const { sessionId, message } = req.body;

    // Create or resume session
    let session;
    try {
        session = await client.resumeSession(sessionId);
    } catch {
        session = await client.createSession({
            sessionId,
            model: "gpt-4.1",
        });
    }

    const response = await session.sendAndWait({ prompt: message });
    res.json({
        sessionId,
        content: response?.data.content,
    });
});

app.listen(3000);

Trabalhador em segundo plano

import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient({
    cliUrl: process.env.CLI_URL || "localhost:4321",
});

// Process jobs from a queue
async function processJob(job: Job) {
    const session = await client.createSession({
        sessionId: `job-${job.id}`,
        model: "gpt-4.1",
    });

    const response = await session.sendAndWait({
        prompt: job.prompt,
    });

    await saveResult(job.id, response?.data.content);
    await session.disconnect(); // Clean up after job completes
}

Implantação do Docker Compose

version: "3.8"

services:
  copilot-cli:
    image: ghcr.io/github/copilot-cli:latest
    command: ["--headless", "--port", "4321"]
    environment:
      - COPILOT_GITHUB_TOKEN=${COPILOT_GITHUB_TOKEN}
    ports:
      - "4321:4321"
    restart: always
    volumes:
      - session-data:/root/.copilot/session-state

  api:
    build: .
    environment:
      - CLI_URL=copilot-cli:4321
    depends_on:
      - copilot-cli
    ports:
      - "3000:3000"

volumes:
  session-data:

Exames de saúde

Monitore a integridade do servidor da CLI:

// Periodic health check
async function checkCLIHealth(): Promise<boolean> {
    try {
        const status = await client.getStatus();
        return status !== undefined;
    } catch {
        return false;
    }
}

Limpeza de sessão

Os serviços de back-end devem limpar ativamente as sessões para evitar vazamentos de recursos:

// Clean up expired sessions periodically
async function cleanupSessions(maxAgeMs: number) {
    const sessions = await client.listSessions();
    const now = Date.now();

    for (const session of sessions) {
        const age = now - new Date(session.createdAt).getTime();
        if (age > maxAgeMs) {
            await client.deleteSession(session.sessionId);
        }
    }
}

// Run every hour
setInterval(() => cleanupSessions(24 * 60 * 60 * 1000), 60 * 60 * 1000);

Limitações

LimitationDetalhes
Servidor único de CLI = único ponto de falhaConsidere padrões de alta disponibilidade para implantações de produção.
Nenhuma autenticação interna entre o SDK e a CLIProteja o caminho de rede (mesmo host, VPC etc.).
Estado da sessão no disco localMonte o armazenamento persistente para reinicializações de contêiner.
Tempo limite ocioso de 30 minutosAs sessões sem atividade são limpas automaticamente.

Próximas Etapas 

  • Para instalação e sua primeira mensagem, consulte Introdução ao SDK do Copilot.
  • Para obter informações sobre como retomar sessões entre reinicializações, consulte Persistência de Sessão no github/copilot-sdk repositório.
  • Para obter informações sobre como adicionar autenticação de usuário, consulte GitHub OAuth no github/copilot-sdk repositório.