Table des matières
- Activer la journalisation du débogage
- Problèmes courants
- Débogage du serveur MCP
- Problèmes de connexion
- Problèmes d’exécution des outils
- Problèmes spécifiques à la plateforme
Activer la journalisation du débogage
La première étape du débogage consiste à activer la journalisation détaillée pour voir ce qui se passe sous le capot.
import { CopilotClient } from "@github/copilot-sdk";
const client = new CopilotClient({
logLevel: "debug", // Options: "none", "error", "warning", "info", "debug", "all"
});
from copilot import CopilotClient
client = CopilotClient(log_level="debug")
package main
import copilot "github.com/github/copilot-sdk/go"
func main() {
client := copilot.NewClient(&copilot.ClientOptions{
LogLevel: "debug",
})
_ = client
}
import copilot "github.com/github/copilot-sdk/go"
client := copilot.NewClient(&copilot.ClientOptions{
LogLevel: "debug",
})
using GitHub.Copilot;
using Microsoft.Extensions.Logging;
// Using ILogger
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.SetMinimumLevel(LogLevel.Debug);
builder.AddConsole();
});
var client = new CopilotClient(new CopilotClientOptions
{
LogLevel = "debug",
Logger = loggerFactory.CreateLogger<CopilotClient>()
});
import com.github.copilot.sdk.CopilotClient;
import com.github.copilot.sdk.json.*;
var client = new CopilotClient(new CopilotClientOptions()
.setLogLevel("debug")
);
Répertoire de journaux
L’interface CLI écrit des journaux dans un répertoire. Vous pouvez spécifier un emplacement personnalisé :
const client = new CopilotClient({
cliArgs: ["--log-dir", "/path/to/logs"],
});
# The Python SDK does not currently support passing extra CLI arguments.
# Logs are written to the default location or can be configured via
# the CLI when running in server mode.
Remarque
La configuration de journalisation du SDK Python est limitée. Pour la journalisation avancée, exécutez l’interface CLI manuellement avec --log-dir et connectez-vous via RuntimeConnection.for_uri(...).
package main
import copilot "github.com/github/copilot-sdk/go"
func main() {
client := copilot.NewClient(&copilot.ClientOptions{
Connection: copilot.StdioConnection{
Args: []string{"--log-dir", "/path/to/logs"},
},
})
_ = client
}
client := copilot.NewClient(&copilot.ClientOptions{
Connection: copilot.StdioConnection{
Args: []string{"--log-dir", "/path/to/logs"},
},
})
var client = new CopilotClient(new CopilotClientOptions
{
Connection = RuntimeConnection.ForStdio(args: new[] { "--log-dir", "/path/to/logs" })
});
// The Java SDK does not currently support passing extra CLI arguments.
// For custom log directories, run the CLI manually with --log-dir
// and connect via cliUrl.
Problèmes courants
« CLI introuvable » / « Copilot : commande introuvable »
Cause : L’interface CLI Copilot n’est pas installée ou non dans PATH.
Solution:
-
Installer l’interface CLI : Guide d’installation
-
Vérifiez l’installation :
copilot --version -
Ou spécifiez le chemin d’accès complet :
const client = new CopilotClient({
cliPath: "/usr/local/bin/copilot",
});
client = CopilotClient({"cli_path": "/usr/local/bin/copilot"})
client := copilot.NewClient(&copilot.ClientOptions{
Connection: copilot.StdioConnection{Path: "/usr/local/bin/copilot"},
})
var client = new CopilotClient(new CopilotClientOptions
{
CliPath = "/usr/local/bin/copilot"
});
var client = new CopilotClient(new CopilotClientOptions()
.setCliPath("/usr/local/bin/copilot")
);
« Non authentifié »
Cause : L’interface CLI n’est pas authentifiée avec GitHub.
Solution:
-
Authentifiez l’interface CLI :
copilot auth login -
Ou fournissez un jeton de manière programmatique :
const client = new CopilotClient({
gitHubToken: process.env.GITHUB_TOKEN,
});
import os
client = CopilotClient({"github_token": os.environ.get("GITHUB_TOKEN")})
client := copilot.NewClient(&copilot.ClientOptions{
GithubToken: os.Getenv("GITHUB_TOKEN"),
})
var client = new CopilotClient(new CopilotClientOptions
{
GithubToken = Environment.GetEnvironmentVariable("GITHUB_TOKEN")
});
var client = new CopilotClient(new CopilotClientOptions()
.setGitHubToken(System.getenv("GITHUB_TOKEN"))
);
« Session introuvable »
Cause : Tentative d’utilisation d’une session qui a été détruite ou qui n’existe pas.
Solution:
-
Vérifiez que vous n’appelez pas les méthodes après
disconnect():await session.disconnect(); // Don't use session after this! -
Pour reprendre des sessions, vérifiez que l’ID de session existe :
const sessions = await client.listSessions(); console.log("Available sessions:", sessions);
« Connexion refusée » / « ECONNREFUSED »
Cause : Le processus du serveur CLI a échoué ou n’a pas pu démarrer.
Solution:
-
Vérifiez si l’interface CLI s’exécute correctement autonome :
copilot --server --stdio -
Vérifiez les conflits de ports si vous utilisez le mode TCP :
const client = new CopilotClient({ useStdio: false, port: 0, // Use random available port });
Débogage du serveur MCP
Les serveurs MCP (Model Context Protocol) peuvent être difficiles à déboguer. Pour obtenir des conseils complets sur le débogage MCP, consultez l’AUTOTITLE dédié.
Liste de contrôle MCP rapide
- Le fichier exécutable du serveur MCP existe et s’exécute indépendamment
- Chemin de commande correct (utiliser des chemins absolus)
- Les outils sont activés :
tools: ["*"] - Le serveur répond correctement à la
initializedemande - Répertoire de travail (
cwd) est défini si nécessaire
Tester votre serveur MCP
Avant d’intégrer le Kit de développement logiciel (SDK), vérifiez que votre serveur MCP fonctionne :
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
Consultez MCP server debugging guide pour obtenir une résolution des problèmes détaillée.
Problèmes de connexion
stdio vs mode TCP
Le Kit de développement logiciel (SDK) prend en charge deux modes de transport :
| Mode | Description | Cas d’usage |
|---|---|---|
| Stdio (par défaut) | L’interface CLI s’exécute en tant que sous-processus, communique via des canaux | Développement local, processus unique |
| TCP | L’interface CLI s’exécute séparément, communique via le socket TCP | Plusieurs clients, interface CLI distante |
Mode Stdio (par défaut) :
const client = new CopilotClient({
useStdio: true, // This is the default
});
Mode TCP :
const client = new CopilotClient({
useStdio: false,
port: 8080, // Or 0 for random port
});
Connectez-vous au serveur existant :
const client = new CopilotClient({
cliUrl: "localhost:8080", // Connect to running server
});
Diagnostic des échecs de connexion
-
Vérifiez l’état du client :
console.log("Connection state:", client.getState()); // Should be "connected" after start() -
Écoutez les modifications d’état :
client.on("stateChange", (state) => { console.log("State changed to:", state); }); -
Vérifiez que le processus CLI est en cours d’exécution :
# Check for copilot processes ps aux | grep copilot
Problèmes d’exécution des outils
Outil personnalisé n’est pas appelé
-
Vérifier l’inscription de l’outil :
const session = await client.createSession({ tools: [myTool], }); // Check registered tools console.log("Registered tools:", session.getTools?.()); -
Le schéma de l’outil de vérification est un schéma JSON valide :
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 }; }, }; -
Vérifiez que le gestionnaire retourne un résultat valide :
handler: async (args) => { // Must return something JSON-serializable return { success: true, data: "result" }; // Don't return undefined or non-serializable objects }
Erreurs d’outil non affichées
S’abonner aux événements d’erreur :
session.on("tool.execution_error", (event) => {
console.error("Tool error:", event.data);
});
session.on("error", (event) => {
console.error("Session error:", event.data);
});
Problèmes spécifiques à la plateforme
Windows
-
Séparateurs de chemin : Utilisez des chaînes brutes ou des barres obliques :
CliPath = @"C:\Program Files\GitHub\copilot.exe" // or CliPath = "C:/Program Files/GitHub/copilot.exe" -
Résolution PATHEXT : Le Kit de développement logiciel (SDK) gère cette opération automatiquement, mais si les problèmes persistent :
// Explicitly specify .exe Command = "myserver.exe" // Not just "myserver" -
Encodage de la console : Vérifiez UTF-8 pour une gestion JSON appropriée :
Console.OutputEncoding = System.Text.Encoding.UTF8;
macOS
-
Problèmes liés à Gatekeeper : Si l’interface CLI est bloquée :
xattr -d com.apple.quarantine /path/to/copilot -
Problèmes PATH dans les applications GUI : Les applications GUI peuvent ne pas hériter du chemin d’accès de l’interpréteur de commandes :
const client = new CopilotClient({ cliPath: "/opt/homebrew/bin/copilot", // Full path });
Linux
-
Problèmes d’autorisation :
chmod +x /path/to/copilot -
Bibliothèques manquantes : Recherchez les bibliothèques partagées requises :
ldd /path/to/copilot
Obtention d’aide
Si vous êtes toujours bloqué :
-
Collectez les informations de débogage :
- Version du SDK
- Version de l’interface CLI (
copilot --version) - Système d'exploitation
- Journaux de débogage
- Code de reproduction minimal
-
problèmes existants Search :GitHub Problèmes
-
Ouvrir un nouveau problème avec les informations collectées
Voir aussi
- Créez votre première application avec Copilot
- Using MCP servers with the GitHub Copilot SDK - Configuration et installation de MCP
- MCP server debugging guide - Résolution détaillée des problèmes MCP
- Référence sur l’API