Skip to main content

Compatibilidad del SDK y la CLI

Compare las Copilot características de la CLI disponibles a través de SDK de Copilot, identifique las características exclusivas de la CLI y busque alternativas programáticas.

¿Quién puede utilizar esta característica?

SDK de GitHub Copilot está disponible con todos los Copilot planes.

Nota:

SDK de Copilot actualmente está en versión preliminar pública. La funcionalidad y la disponibilidad están sujetas a cambios.

SDK de GitHub Copilot se comunica con CLI de GitHub Copilot a través del protocolo JSON-RPC. Las características deben exponerse explícitamente a través de este protocolo para que estén disponibles en el SDK. Muchas características interactivas de la CLI son específicas del terminal y no están disponibles mediante programación.

Comparación de características

Disponible en el SDK

FeatureMétodo del SDKNotas
Gestión de sesiones
Crear sesióncreateSession()Soporte completo de configuración
Reanudar sesiónresumeSession()Con áreas de trabajo de sesión infinitas
Desconectar sesióndisconnect()Liberar recursos en memoria
Destruir sesióndestroy()Use disconnect() en su lugar
Eliminar sesióndeleteSession()Quitar del almacenamiento
Enumerar las sesioneslistSessions()Todas las sesiones almacenadas
Obtención de la última sesióngetLastSessionId()Para un currículum rápido
Obtener sesión en primer planogetForegroundSessionId()Coordinación de varias sesiones
Establecer sesión en primer planosetForegroundSessionId()Coordinación de varias sesiones
Mensajería
Enviar mensajesend()Con datos adjuntos
Enviar y esperarsendAndWait()Bloques hasta completarse
Dirección (modo inmediato)send({ mode: "immediate" })Inyectar a mitad de giro sin abortar
Puesta en cola (modo de puesta en cola)send({ mode: "enqueue" })Búfer para el procesamiento secuencial (valor predeterminado)
Archivos adjuntossend({ attachments: [{ type: "file", path }] })Imágenes codificadas automáticamente y cambiadas de tamaño
Datos adjuntos de directoriosend({ attachments: [{ type: "directory", path }] })Adjuntar contexto de directorio
Obtener historialgetMessages()Todos los eventos de sesión
Abortabort()Cancelar solicitud en curso
Herramientas
Registro de herramientas personalizadasregisterTools()Compatibilidad completa con el esquema JSON
Control de permisos de herramientas
onPreToolUse enlacePermitir/denegar/preguntar
Modificación del resultado de la herramienta
onPostToolUse enlaceTransformación de los resultados
Herramientas disponibles o excluidas
availableTools, excludedTools configuraciónHerramientas de filtro
Modelos
Enumeración de modeloslistModels()Con funcionalidades, facturación y políticas
Establecer modelo (en la creación)
model en la configuración de sesiónPor sesión
Modelo de conmutador (mediados de sesión)session.setModel()También a través de session.rpc.model.switchTo()
Obtención del modelo actualsession.rpc.model.getCurrent()Consulta del modelo activo
Esfuerzo de razonamiento
reasoningEffort configuraciónPara los modelos admitidos
Modo de agente
Obtener el modo actualsession.rpc.mode.get()Devuelve el modo actual.
Establecer modosession.rpc.mode.set()Cambiar entre modos
Administración de planes
Leer plansession.rpc.plan.read()Obtén el contenido y la ruta de acceso de plan.md
Actualizar plansession.rpc.plan.update()Escribir el contenido del archivo plan.md
Eliminar el plansession.rpc.plan.delete()Eliminar plan.md
Archivos del área de trabajo.
Enumerar archivos del área de trabajosession.rpc.workspace.listFiles()Archivos en el área de trabajo de sesión
Leer el archivo del área de trabajosession.rpc.workspace.readFile()Leer el contenido de archivos
Crear archivo de área de trabajosession.rpc.workspace.createFile()Creación de un archivo en el área de trabajo
Autenticación
Obtención del estado de autenticacióngetAuthStatus()Comprobación del estado de inicio de sesión
Uso del token
Opción githubTokenAutenticación mediante programación
Conectividad
Pingclient.ping()Verificación de salud con marca de tiempo del servidor
Obtención del estado del servidorclient.getStatus()Información del servidor y la versión del protocolo
Servidores MCP
Servidores locales/stdio
mcpServers configuraciónGenerar procesos
HTTP/SSE remoto
mcpServers configuraciónConexión a los servicios
Hooks
Uso previo a la herramientaonPreToolUsePermisos para modificar argumentos
Uso de la herramienta de publicaciónonPostToolUseModificación de los resultados
Indicador de usuarioonUserPromptSubmittedModificación de avisos
Inicio y finalización de la sesión
onSessionStart, onSessionEndCiclo de vida con origen o motivo
Gestión de erroresonErrorOccurredControl personalizado
Eventos
Todos los eventos de sesión
on(), once()Más de 40 tipos de eventos
Transmisión en líneastreaming: trueEventos delta
Configuración de sesión
Agentes personalizados
customAgents configuraciónDefinición de agentes especializados
Mensaje del sistema
systemMessage configuraciónAnexar o reemplazar
Proveedor personalizado
provider configuraciónCompatibilidad con BYOK
Sesiones infinitas
infiniteSessions configuraciónCompactación automática
Controlador de permisosonPermissionRequestAprobar o denegar solicitudes
Controlador de entrada de usuarioonUserInputRequestGestionar ask_user
Habilidades
skillDirectories configuraciónAptitudes personalizadas
Aptitudes deshabilitadas
disabledSkills configuraciónDeshabilitar habilidades específicas
Directorio de configuración
configDir configuraciónInvalidar la ubicación de configuración predeterminada
Nombre de cliente
clientName configuraciónIdentificación de la aplicación en User-Agent
Directorio de trabajo
workingDirectory configuraciónEstablecer el cwd de la sesión
Experimental
Administración de agentessession.rpc.agent.*Lista, seleccionar, deseleccionar, obtener agente actual
Modo flotasession.rpc.fleet.start()Ejecución paralela de subagentes
Compactación manualsession.rpc.compaction.compact()Active la compactación bajo demanda

No disponible en el SDK (solo la CLI)

FeatureComando o opción de la CLIMotivo
Exportación de sesión
Exportar a archivo
--share, /shareNo en el protocolo
Exportar a gist de GitHub
--share-gist, /share gistNo en el protocolo
Interfaz de usuario interactiva
Comandos de barra diagonal
/help, /clear, /exit, etc.Interfaz de usuario de terminal (TUI) únicamente
Cuadro de diálogo selector de agente/agentInterfaz de usuario interactiva
Cuadro de diálogo de modo diff/diffInterfaz de usuario interactiva
Cuadro de diálogo de comentarios/feedbackInterfaz de usuario interactiva
Selector de temas/themeInterfaz de usuario del terminal
Selector de modelos/modelInterfaz de usuario interactiva (use el SDK setModel() en su lugar)
Copiar al Portapapeles/copyEspecífico del terminal
Administración de contexto/contextInterfaz de usuario interactiva
Investigación e historia
Investigación profunda/researchFlujo de trabajo de TUI con búsqueda web
Herramientas de historial de sesiones/chronicleStandup, consejos, mejorar, reindexar
Características del terminal
Salida de color--no-colorEspecífico del terminal
Modo de lector de pantalla--screen-readerAccesibilidad
Representación de diferencias enriquecidas--plain-diffRepresentación del terminal
Banner de inicio--bannerElemento Visual
Búfer de pantalla alternativo
--alt-screen, --no-alt-screenRepresentación del terminal
Compatibilidad con el mouse
--mouse, --no-mouseEntrada del terminal
Accesos directos de rutas y permisos
Permitir todas las rutas de acceso--allow-all-pathsUso del controlador de permisos
Permitir todas las direcciones URL--allow-all-urlsUso del controlador de permisos
Permitir todos los permisos
--yolo, , --allow-all, /allow-allUso del controlador de permisos
Permisos de herramientas granulares
--allow-tool, --deny-toolUso del onPreToolUse gancho
Control de acceso URL
--allow-url, --deny-urlUso del controlador de permisos
Restablecimiento de las herramientas permitidas/reset-allowed-toolsComando TUI
Administración de directorios
Agregar directorio
/add-dir, --add-dirConfigurar durante la sesión
Enumerar directorios/list-dirsComando TUI
Cambiar directorio/cwdComando TUI
Plugin/MCP Management
Comandos de complementos/pluginAdministración interactiva
Administración del servidor MCP/mcpInterfaz de usuario interactiva
Administración de cuentas
Flujo de inicio de sesión
/login, copilot auth loginFlujo de dispositivo OAuth
Cerrar sesión
/logout, copilot auth logoutCLI directo
Información del usuario/userComando TUI
Operaciones de sesión
Borrar conversación/clearSolo TUI
Vista en planta/planSolo TUI (use el SDK session.rpc.plan.* en su lugar)
Administración de sesiones
/session, , /resume, /renameFlujo de trabajo de TUI
Modo de flota (interactivo)/fleetSolo TUI (use el SDK session.rpc.fleet.start() en su lugar)
Administración de aptitudes
Administrar habilidades/skillsInterfaz de usuario interactiva
Administración de tareas
Ver tareas en segundo plano/tasksComando TUI
Uso y estadísticas
Uso de tokens/usageSuscribirse a eventos de uso
Revisión del código
Revisión de los cambios/reviewComando TUI
Delegación
Delegado a Relaciones Públicas/delegateFlujo de trabajo de TUI
Configuración del terminal
Integración de Shell/terminal-setupEspecífico del shell
Desarrollo
Alternar el modo experimental
/experimental, --experimentalBandera en tiempo de ejecución
Control de instrucciones personalizadas--no-custom-instructionsMarca de la CLI
Diagnóstico de la sesión/diagnoseComando TUI
Ver o administrar instrucciones/instructionsComando TUI
Recopilación de registros de depuración/collect-debug-logsHerramienta de diagnóstico
Volver a indexar el área de trabajo/reindexComando TUI
Integración del IDE/ideFlujo de trabajo específico del IDE
Modo no interactivo
Modo de aviso
-p, --promptEjecución de un solo intento
Aviso interactivo
-i, --interactiveEjecución automática y, a continuación, interactiva
Salida silenciosa
-s, --silentCompatible con scripts
Continuar sesión--continueContinuar desde el último punto más reciente
Selección del agente--agent <agent>Marca de la CLI

Soluciones alternativas

Exportación de sesión

La --share opción no está disponible a través del SDK. Para solucionar este problema:

  • Recopilar eventos manualmente: Suscríbase a eventos de sesión y cree su propia exportación:

    TypeScript
    const events: SessionEvent[] = [];
    session.on((event) => events.push(event));
    // ... after conversation ...
    const messages = await session.getMessages();
    // Format as markdown yourself
    
  • Use la CLI directamente para las exportaciones puntuales.

Control de permisos

El SDK usa un modelo de permisos de denegación por defecto. Se deniegan todas las solicitudes de permiso (escrituras de archivos, comandos de shell, capturas de direcciones URL y otras), a menos que la aplicación proporcione un onPermissionRequest controlador.

En lugar de --allow-all-paths o --yolo, use el manejador de permisos.

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

Seguimiento del uso de tokens

En lugar de suscribirse a eventos de uso /usage,

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

Compactación de contexto

En lugar de /compact, configure la compactación automática o desencadene 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`);

Nota:

Los umbrales son relaciones de uso de contexto (0,0-1,0), no recuentos absolutos de tokens.

Administración de planes

Leer y escribir planes de sesión mediante programación:

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();

Encaminamiento de mensajes

Inserte un mensaje en el turno LLM actual sin interrumpir:

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" });

Limitaciones del protocolo

El SDK solo puede acceder a las características expuestas a través del protocolo JSON-RPC de la CLI. Si necesita una característica de la CLI que no esté disponible:

  • Buscar alternativas: Muchas características tienen equivalentes de SDK (consulte Soluciones alternativas anteriores).
  • Use la CLI directamente: Para las operaciones puntuales, invoque la CLI.
  • Solicite la característica: Abra un problema en el repositorio github/copilot-sdk para solicitar compatibilidad con el protocolo.

Compatibilidad de versiones

Intervalo de protocolos del SDKVersión del protocolo de la CLICompatibility
v2-v3v3Soporte completo
v2-v3v2Compatible con adaptadores v2 automáticos

El SDK negocia las versiones de protocolo con la CLI al iniciarse. El SDK admite las versiones de protocolo de 2 a 3. Al conectarse a un servidor de CLI v2, el SDK adapta automáticamente los mensajes entre tool.call y permission.request al modelo de eventos v3, sin necesidad de realizar cambios en el código.

Puede comprobar las versiones en tiempo de ejecución:

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