Nota:
SDK de Copilot actualmente está en versión preliminar pública. La funcionalidad y la disponibilidad están sujetas a cambios.
Habilitar el registro de depuración
Para empezar a solucionar problemas, habilite el registro detallado para obtener visibilidad de los procesos subyacentes.
import { CopilotClient } from "@github/copilot-sdk";
const client = new CopilotClient({
logLevel: "debug", // Options: "none", "error", "warning", "info", "debug", "all"
});
import { CopilotClient } from "@github/copilot-sdk";
const client = new CopilotClient({
logLevel: "debug", // Options: "none", "error", "warning", "info", "debug", "all"
});
Para obtener ejemplos en Python, Go y .NET, consulte Guía de depuración en el github/copilot-sdk repositorio. Para Java, consulte el github/copilot-sdk-java repositorio.
Directorio de logs
La CLI escribe registros en el directorio ABC de forma predeterminada. Puede especificar una ubicación diferente mediante el --log-dir argumento :
const client = new CopilotClient({
cliArgs: ["--log-dir", "/path/to/logs"],
});
const client = new CopilotClient({
cliArgs: ["--log-dir", "/path/to/logs"],
});
Para Python y Go, que actualmente no admiten pasar argumentos adicionales de la CLI, ejecute la CLI manualmente con --log-dir y conéctese mediante la cliUrl opción . Para obtener más información, vea Guía de depuración en el github/copilot-sdk repositorio.
Problemas comunes
"CLI no encontrada" o "copilot: comando no encontrado"
**Causa:**CLI de GitHub Copilot no está instalado o no en PATH.
**Solution:**
-
Instale la CLI. Para obtener más información, vea Instalación de GitHub Copilot CLI.
-
Compruebe la instalación:
Bash copilot --version
copilot --version -
O especifique la ruta de acceso completa:
TypeScript const client = new CopilotClient({ cliPath: "/usr/local/bin/copilot", });const client = new CopilotClient({ cliPath: "/usr/local/bin/copilot", });Para obtener ejemplos en Python, Go y .NET, consulte Guía de depuración en el
github/copilot-sdkrepositorio. Para Java, consulte elgithub/copilot-sdk-javarepositorio.
"No autenticado"
**Causa:** La CLI no está autenticada con GitHub.
**Solution:**
-
Autenticar la CLI:
Bash copilot auth login
copilot auth login -
O bien, proporcione un token mediante programación:
TypeScript const client = new CopilotClient({ githubToken: process.env.GITHUB_TOKEN, });const client = new CopilotClient({ githubToken: process.env.GITHUB_TOKEN, });Para obtener ejemplos en Python, Go y .NET, consulte Guía de depuración en el
github/copilot-sdkrepositorio. Para Java, consulte elgithub/copilot-sdk-javarepositorio.
"Sesión no encontrada"
**Causa:** Intentar usar una sesión que se destruyó o no existe.
**Solution:**
-
Asegúrese de que no llama a métodos después de
disconnect().TypeScript await session.disconnect(); // Don't use session after this!
await session.disconnect(); // Don't use session after this! -
Para reanudar sesiones, compruebe que el identificador de sesión existe:
TypeScript const sessions = await client.listSessions(); console.log("Available sessions:", sessions);const sessions = await client.listSessions(); console.log("Available sessions:", sessions);
"Conexión rechazada" o "ECONNREFUSED"
**Causa:** El proceso del servidor de la CLI se bloqueó o no se pudo iniciar.
**Solution:**
-
Compruebe si la CLI se ejecuta correctamente de forma independiente:
Bash copilot --server --stdio
copilot --server --stdio -
Compruebe si hay conflictos de puertos si usa el modo TCP:
TypeScript const client = new CopilotClient({ useStdio: false, port: 0, // Use random available port });const client = new CopilotClient({ useStdio: false, port: 0, // Use random available port });
Depuración del servidor MCP
Los servidores MCP (Protocolo de Contexto de Modelo) pueden resultar complicados de depurar. Para obtener instrucciones completas sobre la depuración de MCP, consulte Depuración de servidores MCP en el SDK de Copilot.
Lista de comprobación rápida de MCP
- El ejecutable del servidor MCP existe y se ejecuta de forma independiente
- La ruta de acceso del comando es correcta (utilice rutas de acceso absolutas)
- Las herramientas están habilitadas:
tools: ["*"] - El servidor responde a la
initializesolicitud correctamente - El directorio de trabajo (
cwd) se establece si es necesario.
Prueba del servidor MCP
Antes de realizar la integración con el SDK, compruebe que el servidor MCP funciona:
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | /path/to/your/mcp-server
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | /path/to/your/mcp-server
Para obtener una solución de problemas detallada, consulte Depuración de servidores MCP en el SDK de Copilot.
Problemas de conexión
Modo Stdio frente a TCP
El SDK admite dos modos de transporte:
| Modo | Descripción | Caso de uso |
|---|
**Stdio** (valor predeterminado) | La CLI se ejecuta como subproceso, se comunica a través de canalizaciones. | Desarrollo local, proceso único |
| TCP | La CLI se ejecuta por separado, se comunica a través del socket TCP. | Varios clientes, CLI remota |
**Modo Stdio (valor predeterminado):**
const client = new CopilotClient({
useStdio: true, // This is the default
});
const client = new CopilotClient({
useStdio: true, // This is the default
});
**Modo TCP:**
const client = new CopilotClient({
useStdio: false,
port: 8080, // Or 0 for random port
});
const client = new CopilotClient({
useStdio: false,
port: 8080, // Or 0 for random port
});
**Conéctese al servidor existente:**
const client = new CopilotClient({
cliUrl: "localhost:8080", // Connect to running server
});
const client = new CopilotClient({
cliUrl: "localhost:8080", // Connect to running server
});
Diagnóstico de errores de conexión
-
Compruebe el estado del cliente:
TypeScript console.log("Connection state:", client.getState()); // Should be "connected" after start()console.log("Connection state:", client.getState()); // Should be "connected" after start() -
Escuche los cambios de estado:
TypeScript client.on("stateChange", (state) => { console.log("State changed to:", state); });client.on("stateChange", (state) => { console.log("State changed to:", state); }); -
Compruebe que el proceso de la CLI se está ejecutando:
Bash # Check for copilot processes ps aux | grep copilot
# Check for copilot processes ps aux | grep copilot
Problemas de ejecución de herramientas
No se llama a la herramienta personalizada
-
Compruebe el registro de herramientas:
TypeScript const session = await client.createSession({ tools: [myTool], }); // Check registered tools console.log("Registered tools:", session.getTools?.());const session = await client.createSession({ tools: [myTool], }); // Check registered tools console.log("Registered tools:", session.getTools?.()); -
Compruebe que el esquema de la herramienta es un esquema JSON válido:
TypeScript const myTool = { name: "get_weather", description: "Get weather for a location", parameters: { type: "object", properties: { location: { type: "string", description: "City name" }, }, required: ["location"], }, handler: async (args) => { return { temperature: 72 }; }, };const myTool = { name: "get_weather", description: "Get weather for a location", parameters: { type: "object", properties: { location: { type: "string", description: "City name" }, }, required: ["location"], }, handler: async (args) => { return { temperature: 72 }; }, }; -
Asegúrese de que el controlador devuelve un resultado válido:
TypeScript handler: async (args) => { // Must return something JSON-serializable return { success: true, data: "result" }; // Don't return undefined or non-serializable objects }handler: async (args) => { // Must return something JSON-serializable return { success: true, data: "result" }; // Don't return undefined or non-serializable objects }
Errores de herramientas que no se muestran
Suscríbase a eventos de error:
session.on("tool.execution_error", (event) => {
console.error("Tool error:", event.data);
});
session.on("error", (event) => {
console.error("Session error:", event.data);
});
session.on("tool.execution_error", (event) => {
console.error("Tool error:", event.data);
});
session.on("error", (event) => {
console.error("Session error:", event.data);
});
Problemas específicos de la plataforma
Windows
-
**Separadores de ruta:** Use cadenas literales o barras diagonales. Para ejemplos específicos de .NET, consulte [Guía de depuración](https://github.com/github/copilot-sdk/blob/main/docs/troubleshooting/debugging.md) en el repositorio `github/copilot-sdk`. -
**Codificación de consola:** Asegúrese de que UTF-8 se encarga del control de JSON adecuado. Para ejemplos específicos de .NET, consulte [Guía de depuración](https://github.com/github/copilot-sdk/blob/main/docs/troubleshooting/debugging.md) en el repositorio `github/copilot-sdk`.
macOS
-
**Problemas de Gatekeeper:** Si la CLI está bloqueada:Bash xattr -d com.apple.quarantine /path/to/copilot
xattr -d com.apple.quarantine /path/to/copilot -
**Problemas de PATH en las aplicaciones de GUI:** Es posible que las aplicaciones de GUI no hereden path del shell:TypeScript const client = new CopilotClient({ cliPath: "/opt/homebrew/bin/copilot", // Full path });const client = new CopilotClient({ cliPath: "/opt/homebrew/bin/copilot", // Full path });
Linux
-
**Problemas de permisos:**Bash chmod +x /path/to/copilot
chmod +x /path/to/copilot -
**Faltan bibliotecas:** Compruebe si hay bibliotecas compartidas necesarias:Bash ldd /path/to/copilot
ldd /path/to/copilot
Obtener ayuda
Si todavía está bloqueado, recopile la siguiente información de depuración antes de abrir un problema:
- Versión del SDK
- Versión de la CLI (
copilot --version) - Sistema operativo
- Registros de depuración
- Código de reproducción mínimo
Busque problemas existentes o abra un nuevo problema en el repositorio github/copilot-sdk .