Skip to main content

Compatibilidade do SDK e da CLI

Compare quais recursos da CLI Copilot estão disponíveis por meio de SDK do Copilot, identifique os recursos exclusivos da CLI e encontre soluções alternativas programáticas.

Quem pode usar esse recurso?

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

Observação

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

SDK do GitHub Copilot comunica-se com CLI do GitHub Copilot através do protocolo JSON-RPC. Os recursos devem ser explicitamente expostos por meio desse protocolo para estarem disponíveis no SDK. Muitos recursos interativos da CLI são específicos do terminal e não estão disponíveis programaticamente.

Comparação de funcionalidades

Disponível no SDK

CaracterísticaMétodo SDKObservações
Gerenciamento de Sessão
Criar sessãocreateSession()Suporte completo à configuração
Retomar sessãoresumeSession()Com espaços de trabalho de sessão infinitos
Desconectar sessãodisconnect()Liberar recursos na memória
Destruir sessãodestroy()Use disconnect() em vez disso
Excluir sessãodeleteSession()Remover do armazenamento
Listar sessõeslistSessions()Todas as sessões armazenadas
Obter a última sessãogetLastSessionId()Para retomar rapidamente
Obter sessão em primeiro planogetForegroundSessionId()Coordenação de várias sessões
Configurar sessão em primeiro planosetForegroundSessionId()Coordenação de várias sessões
Mensagens
Enviar mensagemsend()Com anexos
Enviar e aguardarsendAndWait()Bloqueia até a conclusão
Direção (modo imediato)send({ mode: "immediate" })Injetar no meio da rotação sem anular
Fila (modo de enfileiramento)send({ mode: "enqueue" })Buffer para processamento sequencial (padrão)
Anexos de arquivosend({ attachments: [{ type: "file", path }] })Imagens codificadas automaticamente e redimensionadas
Anexos de diretóriosend({ attachments: [{ type: "directory", path }] })Anexar contexto de diretório
Obter históricogetMessages()Todos os eventos de sessão
Anularabort()Cancelar solicitação de disponibilização de versão piloto
Ferramentas
Registrar ferramentas personalizadasregisterTools()Suporte completo ao esquema JSON
Controle de permissão da ferramentaGancho onPreToolUsePermitir/negar/perguntar
Modificação do resultado da ferramentaGancho onPostToolUseTransformar resultados
Ferramentas disponíveis/excluídas
availableTools, excludedTools configuraçãoFiltrar ferramentas
Modelos
Listar modeloslistModels()Com funcionalidades, cobrança, política
Definir modelo (na criação)
model na configuração da sessãoPor sessão
Modelo de switch (durante a sessão)session.setModel()Também via session.rpc.model.switchTo()
Obter o modelo atualsession.rpc.model.getCurrent()Consultar o modelo ativo
Esforço de raciocínio
reasoningEffort ConfiguraçãoPara modelos com suporte
Modo de agente
Obter o modo atualsession.rpc.mode.get()Retorna o modo atual
Configurar modosession.rpc.mode.set()Alternar entre os modos
Gerenciamento de Planos
Plano de leiturasession.rpc.plan.read()Obter o conteúdo e o caminho de plan.md
Plano de atualizaçãosession.rpc.plan.update()Escrever conteúdo do plan.md
Excluir planosession.rpc.plan.delete()Remover plan.md
Arquivos do Workspace.
Listar arquivos do espaço de trabalhosession.rpc.workspace.listFiles()Arquivos na área de trabalho da sessão
Ler arquivo do espaço de trabalhosession.rpc.workspace.readFile()Ler o conteúdo do arquivo
Criar arquivo de workspacesession.rpc.workspace.createFile()Criar arquivo no workspace
Autenticação
Obter o status de autenticaçãogetAuthStatus()Verificar o estado de logon
Usar token
Opção githubTokenAutenticação programática
Conectividade
Pingclient.ping()Verificação de integridade com carimbo de data e hora do servidor
Obter o status do servidorclient.getStatus()Informações sobre a versão do protocolo e o servidor
Servidores MCP
Servidores locais/stdio
mcpServers ConfiguraçãoCriar processos
HTTP/SSE remoto
mcpServers ConfiguraçãoConectar-se a serviços
Ganchos
Uso de pré-ferramentaonPreToolUsePermissão, modificar args
Uso pós-ferramentaonPostToolUseModificar resultados
Prompt do usuárioonUserPromptSubmittedModificar prompts
Início/término da sessão
onSessionStart, onSessionEndCiclo de vida com origem/motivo
Tratamento de errosonErrorOccurredManipulação personalizada
Eventos
Todos os eventos de sessão
on(), once()Mais de 40 tipos de evento
Transmissão ao vivostreaming: trueEventos delta
Configuração da Sessão
Agentes personalizados
customAgents ConfiguraçãoDefinir agentes especializados
Mensagem do sistema
systemMessage ConfiguraçãoAcrescentar ou substituir
Provedor personalizado
provider ConfiguraçãoSuporte ao BYOK
Sessões infinitas
infiniteSessions ConfiguraçãoCompactação automática
Manipulador de permissõesonPermissionRequestAprovar/negar solicitações
Manipulador de entrada do usuárioonUserInputRequestManipular ask_user
Habilidades
skillDirectories ConfiguraçãoHabilidades personalizadas
Habilidades desabilitadas
disabledSkills ConfiguraçãoDesabilitar habilidades específicas
Diretório de configuração
configDir ConfiguraçãoSubstituir a localização de config padrão
Nome do cliente
clientName ConfiguraçãoIdentificar o aplicativo no User-Agent
Diretório de trabalho
workingDirectory ConfiguraçãoDefinir o cwd da sessão
Experimental
Gerenciamento de agentessession.rpc.agent.*Listar, selecionar, deselecionar, obter o agente atual
Modo de frotasession.rpc.fleet.start()Execução paralela de sub-agente
Compactação manualsession.rpc.compaction.compact()Acionar compactação sob demanda

Não disponível no SDK (somente CLI)

CaracterísticaComando/opção da CLIReason
Exportação de sessão
Exportar para arquivo
--share, /shareNão está no protocolo
Exportar como gist
--share-gist, /share gistNão está no protocolo
Interface do usuário interativa
Comandos de barra "/"
/help, /clear, /exit, etc.Apenas TUI (interface do usuário do terminal)
Caixa de diálogo seletor de agente/agentInterface do usuário interativa
Caixa de diálogo do modo Diff/diffInterface do usuário interativa
Caixa de diálogo de feedback/feedbackInterface do usuário interativa
Seletor de tema/themeInterface do usuário do terminal
Seletor de modelo/modelInterface do usuário interativa (use o SDK setModel() em vez disso)
Copiar para a área de transferência/copyEspecífico do terminal
Gerenciamento de contexto/contextInterface do usuário interativa
Pesquisa & Histórico
Pesquisa avançada/researchFluxo de trabalho TUI com pesquisa na Web
Ferramentas de histórico de sessão/chronicleReunião, dicas, melhorar, reindexar
Recursos do terminal
Saída de cor--no-colorEspecífico do terminal
Modo de leitor de tela--screen-readerAccessibility
Renderização de diff avançado--plain-diffRenderização de terminal
Faixa de inicialização--bannerElemento visual
Buffer de tela alternativo
--alt-screen, --no-alt-screenRenderização de terminal
Suporte ao mouse
--mouse, --no-mouseEntrada do terminal
Atalhos de caminho/permissão
Permitir todos os caminhos--allow-all-pathsUsar o manipulador de permissões
Permitir todas as URLs--allow-all-urlsUsar o manipulador de permissões
Permitir todas as permissões
--yolo
--allow-all
/allow-all
Usar o manipulador de permissões
Permissões granulares de ferramenta
--allow-tool, --deny-toolUsar o gancho onPreToolUse
Controle de acesso à URL
--allow-url, --deny-urlUsar o manipulador de permissões
Redefinir ferramentas permitidas/reset-allowed-toolsComando TUI
Gerenciamento de Diretório
Adicionar diretório
/add-dir, --add-dirConfigurar na sessão
Listar diretórios/list-dirsComando TUI
Alterar diretório/cwdComando TUI
Gerenciamento de Plug-in/MCP
Comandos de plugin/pluginGerenciamento interativo
Gerenciamento de servidor MCP/mcpInterface do usuário interativa
Gestão de Contas
Fluxo de logon
/login, copilot auth loginFluxo do dispositivo OAuth
Sair
/logout, copilot auth logoutCLI direta
Informações do usuário/userComando TUI
Operações de sessão
Limpar conversa/clearSomente TUI
Visão em planta/planSomente TUI (use o SDK session.rpc.plan.* em vez disso)
Gerenciamento de sessão
/session
/resume
/rename
Fluxo de trabalho TUI
Modo de gerenciamento de frota (interativo)/fleetSomente TUI (use o SDK session.rpc.fleet.start() em vez disso)
Gerenciamento de habilidades
Gerenciar habilidades/skillsInterface do usuário interativa
Gerenciamento de Tarefas
Exibir tarefas em segundo plano/tasksComando TUI
Uso e Estatísticas
Uso de token/usageAssinar eventos de uso
Revisão de código
Revisar alterações/reviewComando TUI
Delegação
Delegar ao PR/delegateFluxo de trabalho TUI
Instalação do terminal
Integração do Shell/terminal-setupEspecífico do shell
Desenvolvimento
Alternar experimental
/experimental, --experimentalSinalizador de runtime
Controle de instruções personalizadas--no-custom-instructionsSinalizador da CLI
Diagnosticar sessão/diagnoseComando TUI
Exibir/gerenciar instruções/instructionsComando TUI
Coletar logs de depuração/collect-debug-logsFerramenta de diagnóstico
Reindexar espaço de trabalho/reindexComando TUI
Integração de IDE/ideFluxo de trabalho específico do IDE
Modo não interativo
Modo de prompt
-p, --promptExecução de tiro único
Prompt interativo
-i, --interactiveExecução automática e depois interativa
Saída silenciosa
-s, --silentAmigável ao script
Continuar sessão--continueRetomar o mais recente
Seleção do agente--agent <agent>Sinalizador da CLI

Soluções alternativas

Exportação de sessão

A --share opção não está disponível por meio do SDK. Para solucionar esse problema:

  • Colete eventos manualmente: Assine eventos de sessão e crie sua própria exportação:

    TypeScript
    const events: SessionEvent[] = [];
    session.on((event) => events.push(event));
    // ... after conversation ...
    const messages = await session.getMessages();
    // Format as markdown yourself
    
  • Use a CLI diretamente para exportações pontuais.

Controle de permissão

O SDK utiliza um modelo de permissões de negação por padrão. Todas as solicitações de permissão (gravações de arquivo, comandos de shell, buscas de URL e outras) são negadas, a menos que seu aplicativo forneça um onPermissionRequest manipulador.

Em vez de --allow-all-paths ou --yolo, use o manipulador de permissões:

TypeScript
const session = await client.createSession({
  onPermissionRequest: approveAll,
});

Acompanhamento de uso de token

Em vez de /usage, assine eventos de uso:

TypeScript
session.on("assistant.usage", (event) => {
  console.log("Tokens used:", {
    input: event.data.inputTokens,
    output: event.data.outputTokens,
  });
});

Compactação de contexto

Em vez de /compact, configure a compactação automática ou acione-a manualmente:

TypeScript
// Automatic compaction via config
const session = await client.createSession({
  infiniteSessions: {
    enabled: true,
    backgroundCompactionThreshold: 0.80,  // Start background compaction at 80% context utilization
    bufferExhaustionThreshold: 0.95,      // Block and compact at 95% context utilization
  },
});

// Manual compaction (experimental)
const result = await session.rpc.compaction.compact();
console.log(`Removed ${result.tokensRemoved} tokens, ${result.messagesRemoved} messages`);

Observação

Os limites são taxas de utilização de contexto (0,0-1,0), não contagens absolutas de token.

Gerenciamento de Planos

Ler e escrever planos de sessão de forma programática:

TypeScript
// Read the current plan
const plan = await session.rpc.plan.read();
if (plan.exists) {
  console.log(plan.content);
}

// Update the plan
await session.rpc.plan.update({ content: "# My Plan\n- Step 1\n- Step 2" });

// Delete the plan
await session.rpc.plan.delete();

Direção de mensagem

Injetar uma mensagem no turno atual do LLM sem interromper:

TypeScript
// Steer the agent mid-turn
await session.send({ prompt: "Focus on error handling first", mode: "immediate" });

// Default: enqueue for next turn
await session.send({ prompt: "Next, add tests" });

Limitações de protocolo

O SDK só pode acessar recursos expostos por meio do protocolo JSON-RPC da CLI. Se você precisar de um recurso da CLI que não esteja disponível:

  • Verifique se há alternativas: Muitos recursos têm equivalentes do SDK (consulte soluções alternativas acima).
  • Use a CLI diretamente: Para operações pontuais, invoque a CLI.
  • Solicite o recurso: Abra um problema no repositório github/copilot-sdk para solicitar suporte ao protocolo.

Compatibilidade entre versões

Intervalo de protocolos do SDKVersão do protocolo CLICompatibilidade
v2-v3v3Suporte completo
v2-v3v2Suportado por adaptadores automáticos v2

O SDK negocia versões de protocolo com a CLI na inicialização. O SDK dá suporte às versões de protocolo 2 a 3. Ao se conectar a um servidor CLI v2, o SDK adapta automaticamente as mensagens tool.call e permission.request ao modelo de evento v3, sem necessidade de alterar o código.

Você pode verificar versões em runtime:

TypeScript
const status = await client.getStatus();
console.log("Protocol version:", status.protocolVersion);