Skip to main content

Compatibilidade do SDK e da CLI

Este documento detalha quais recursos da CLI do Copilot estão disponíveis por meio do SDK e quais são exclusivos da CLI.

Overview

O SDK do Copilot se comunica com a CLI por meio 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 SDKNotes
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ão (preterida)destroy()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
Messaging
Enviar mensagemsend()Com anexos
Enviar e aguardarsendAndWait()Blocos 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óricogetEvents()Todos os eventos de sessão
Abortarabort()Cancelar solicitação em voo
Ferramentas
Registrar ferramentas personalizadasregisterTools()Suporte completo ao esquema JSON
Controle de permissão da ferramenta
onPreToolUse GanchoPermitir/negar/perguntar
Modificação do resultado da ferramenta
onPostToolUse GanchoTransformar 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 de 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 saúde 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
Hooks
Uso de pré-ferramentaonPreToolUsePermissão, modificar args
Após o uso da ferramenta (sucesso)onPostToolUseModificar resultados
Após o uso da ferramenta (falha)onPostToolUseFailureMonitorar chamadas de ferramentas com falha, injetar orientações para nova tentativa
Solicitação 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
Streamingstreaming: 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çãoSobrescrever 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; ver Modo de frota
Compactação manualsession.rpc.history.compact()Acionar compactação sob demanda
Truncamento de históricosession.rpc.history.truncate()Remover eventos de um ponto em diante
Bifurcação de sessãoserver.rpc.sessions.fork()Criar uma bifurcação de uma sessão a partir de um ponto do histórico

❌ 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.Somente TUI
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 profunda/researchFluxo de trabalho TUI com pesquisa na Web
Ferramentas de histórico de sessão/chronicleReunião de pé, 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 difusão avançada--plain-diffRenderização de terminal
Faixa de inicialização--bannerElemento visual
Modo de transmissão/streamer-modeModo de exibição TUI
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-allUsar 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, /renameFluxo 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 funcionalidade 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

Modo de frota

O modo de frota está disponível por meio de session.rpc.fleet.start() para aplicativos com SDK que desejam que o runtime acione subagentes em paralelo para atingir um objetivo mais amplo. Use-o quando subtarefas independentes puderem ser executadas simultaneamente e, em seguida, ser resumidas pela sessão principal. Para obter um guia completo, consulte Modo de frota.

Exportação de sessão

A --share opção não está disponível por meio do SDK. Soluções alternativas:

  1. Coletar eventos manualmente – assine eventos de sessão e crie sua própria exportação:

    const events: SessionEvent[] = [];
    session.on((event) => events.push(event));
    // ... after conversation ...
    const messages = await session.getEvents();
    // Format as markdown yourself
    
  2. Use a CLI diretamente para exportação - Execute a CLI com --share para exportações pontuais.

Controle de permissão

O SDK usa um modelo de permissões que nega por padrão. Todas as solicitações de permissão (gravações de arquivo, comandos de shell, buscas de URL etc.) 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:

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

Acompanhamento de uso de token

Em vez de /usage, assine eventos de uso:

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, configurar a compactação automática ou acioná-la manualmente:

// 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.history.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:

// 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.

// 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:

  1. Verificar se há alternativas – muitos recursos têm equivalentes do SDK (confira as soluções alternativas acima)
  2. Usar a CLI diretamente – para operações pontuais, invoque a CLI
  3. Solicitar o recurso – Abrir um problema para solicitar suporte ao protocolo

Compatibilidade entre versões

Intervalo do protocolo do SDKVersão do protocolo CLICompatibility
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.

Verifique as versões em tempo de execução:

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

Consulte também