Remarque
SDK Copilot est actuellement en préversion publique. Les fonctionnalités et la disponibilité sont susceptibles de changer.
Kit de développement logiciel (SDK) GitHub Copilot communique avec CLI GitHub Copilot via le protocole JSON-RPC. Les fonctionnalités doivent être explicitement exposées via ce protocole pour être disponibles dans le Kit de développement logiciel (SDK). De nombreuses fonctionnalités cli interactives sont spécifiques au terminal et non disponibles par programme.
Comparaison des fonctionnalités
Disponible dans le Kit de développement logiciel (SDK)
| Fonctionnalité | Méthode du Kit de développement logiciel (SDK | Remarques |
|---|---|---|
| Gestion de session | ||
| Créer une session | createSession() | Prise en charge complète de la configuration |
| Reprendre la session | resumeSession() | Avec des espaces de travail de session illimités |
| Déconnecter la session | disconnect() | Libérer des ressources en mémoire |
| Détruire la session | destroy() | Utilisation de disconnect() à la place |
| Supprimer une session | deleteSession() | Supprimer du stockage |
| Répertorier les sessions | listSessions() | Toutes les sessions stockées |
| Obtenir la dernière session | getLastSessionId() | Pour un CV rapide |
| Obtenir une session de premier plan | getForegroundSessionId() | Coordination multi-sessions |
| Définir une session de premier plan | setForegroundSessionId() | Coordination multi-sessions |
| Messages | ||
| Envoyer un message | send() | Avec des pièces jointes |
| Envoyer et attendre | sendAndWait() | Bloque jusqu'à ce que ce soit terminé |
| Direction (mode immédiat) | send({ mode: "immediate" }) | Injecter au milieu du processus sans interrompre |
| Mise en file d’attente (mode d’enfilement) | send({ mode: "enqueue" }) | Mémoire tampon pour le traitement séquentiel (par défaut) |
| Pièces jointes | send({ attachments: [{ type: "file", path }] }) | Images codées automatiquement et redimensionnées |
| Pièces jointes du répertoire | send({ attachments: [{ type: "directory", path }] }) | Attacher le contexte de répertoire |
| Obtenir l’historique | getMessages() | Tous les événements de session |
| Abandon | abort() | Annuler la requête en cours |
| Outils | ||
| Inscrire des outils personnalisés | registerTools() | Prise en charge complète du schéma JSON |
| Contrôle d’autorisation de l’outil |
`onPreToolUse` crochet | Autoriser/refuser/demander |
| Modification des résultats de l’outil |
onPostToolUse crochet | Transformer les résultats |
| Outils disponibles ou exclus |
availableTools, excludedTools configuration | Outils de filtre |
| Modèles |
| |
| Lister les modèles | listModels() | Avec fonctionnalités, facturation, et politique |
| Définir le modèle (lors de la création) |
model dans la configuration de session | Par session |
| Changer de modèle (mi-session) | session.setModel() | Également via session.rpc.model.switchTo() |
| Obtenir le modèle actuel | session.rpc.model.getCurrent() | Interroger un modèle actif |
| Effort de raisonnement |
reasoningEffort configuration | Pour les modèles pris en charge |
| Agent Mode |
| |
| Obtenir le mode actuel | session.rpc.mode.get() | Retourne le mode actuel |
| Définir le mode | session.rpc.mode.set() | Basculer entre les modes |
| Gestion du plan |
| |
| Lire le plan | session.rpc.plan.read() | Obtenez le contenu et le chemin d'accès du fichier plan.md |
| Mettre à jour le plan | session.rpc.plan.update() | Écrire le contenu de plan.md |
| Suppression de programme | session.rpc.plan.delete() | Supprimer plan.md |
| Fichiers de l’espace de travail |
| |
| Répertorier les fichiers d’espace de travail | session.rpc.workspace.listFiles() | Fichiers dans l’espace de travail de session |
| Lire le fichier d’espace de travail | session.rpc.workspace.readFile() | Lire le contenu du fichier |
| Créer un fichier d’espace de travail | session.rpc.workspace.createFile() | Créer un fichier dans l’espace de travail |
| Authentification |
| |
| Obtenir le statut d’authentification | getAuthStatus() | Vérifier l’état de connexion |
| Utiliser un jeton |
githubToken option | Authentification programmée |
| Connectivité |
| |
| Ping | client.ping() | Vérification de l'état avec l’horodatage du serveur |
| Obtenir l’état du serveur | client.getStatus() | Informations sur la version du protocole et le serveur |
| Serveurs MCP |
| |
| Serveurs locaux ou stdio |
mcpServers configuration | Créer des processus |
| HTTP/SSE distant |
mcpServers configuration | Se connecter aux services |
| Hooks |
| |
| Pré-utilisation de l’outil | onPreToolUse | Permission, modifier les arguments |
| Après utilisation de l’outil | onPostToolUse | Modifier les résultats |
| Message d'invite | onUserPromptSubmitted | Modifier les invites |
| Début/fin de session |
onSessionStart, onSessionEnd | Cycle de vie avec source/raison |
| Gestion des erreurs | onErrorOccurred | Gestion personnalisée |
| Événements |
| |
| Tous les événements de session |
on(), once() | 40+ types d’événements |
| Diffusion en continu | streaming: true | Événements delta |
| Configuration de session |
| |
| Agents personnalisés |
customAgents configuration | Définir des agents spécialisés |
| Message système |
systemMessage configuration | Ajouter ou remplacer |
| Fournisseur personnalisé |
provider configuration | Prise en charge de BYOK |
| Sessions infinies |
infiniteSessions configuration | Compactage automatique |
| Gestionnaire d’autorisations | onPermissionRequest | Approuver/refuser des demandes |
| Gestionnaire d’entrée utilisateur | onUserInputRequest | Gérer ask_user |
| Compétences |
skillDirectories configuration | Compétences personnalisées |
| Compétences désactivées |
disabledSkills configuration | Désactiver des compétences spécifiques |
| Répertoire de configuration |
configDir configuration | Remplacer l’emplacement de configuration par défaut |
| Nom du client |
clientName configuration | Identifier l’application dans User-Agent |
| Répertoire de travail |
workingDirectory configuration | Définir le répertoire de travail de la session |
| Version expérimentale |
| |
| Gestion des agents | session.rpc.agent.* | Lister, sélectionner, désélectionner, obtenir l’agent actuel |
| Mode flotte | session.rpc.fleet.start() | Exécution parallèle des sous-agents |
| Compactage manuel | session.rpc.compaction.compact() | Compactage du déclencheur à la demande |
Non disponible dans le Kit de développement logiciel (CLI uniquement)
| Fonctionnalité | Commande/option CLI | Reason |
|---|---|---|
| Exportation de session | ||
| Exporter vers le fichier |
`--share`, `/share` | Non dans le protocole |
| Exporter vers un gist |
--share-gist, /share gist | Non dans le protocole |
| Interface utilisateur interactive |
| |
| Commandes slash |
/help, /clear, /exit, etc. | Interface utilisateur du terminal (TUI) uniquement |
| Boîte de dialogue de sélection d’agents | /agent | Interface utilisateur interactive |
| Boîte de dialogue mode Diff | /diff | Interface utilisateur interactive |
| Boîte de dialogue Commentaires | /feedback | Interface utilisateur interactive |
| Sélecteur de thème | /theme | Interface utilisateur du terminal |
| Sélecteur de modèles | /model | Interface utilisateur interactive (utiliser le Kit de développement logiciel (SDK setModel() ) à la place |
| Copier dans le Presse-papiers | /copy | Spécifique au terminal |
| Gestion du contexte | /context | Interface utilisateur interactive |
| Recherche & Histoire |
| |
| Recherche approfondie | /research | Flux de travail TUI avec recherche web |
| Outils d’historique des sessions | /chronicle | Réunion quotidienne, conseils, améliorer, réindexer |
| Fonctionnalités de terminal |
| |
| Sortie de couleur | --no-color | Spécifique au terminal |
| Mode lecteur d’écran | --screen-reader | Accessibilité |
| Affichage enrichi des différences | --plain-diff | Rendu du terminal |
| Bannière de démarrage | --banner | Élément visuel |
| Tampon d'écran alternatif |
--alt-screen, --no-alt-screen | Rendu du terminal |
| Prise en charge de la souris |
--mouse, --no-mouse | Entrée du terminal |
| Raccourcis de chemin d'accès/autorisation |
| |
| Autoriser tous les chemins d’accès | --allow-all-paths | Utiliser le gestionnaire d’autorisations |
| Autoriser toutes les URL | --allow-all-urls | Utiliser le gestionnaire d’autorisations |
| Autoriser toutes les autorisations |
--yolo, --allow-all, /allow-all | Utiliser le gestionnaire d’autorisations |
| Autorisations d’outil granulaires |
--allow-tool, --deny-tool | Utiliser un onPreToolUse hook |
| Contrôle d’accès d’URL |
--allow-url, --deny-url | Utiliser le gestionnaire d’autorisations |
| Réinitialiser les outils autorisés | /reset-allowed-tools | Commande TUI |
| Gestion des répertoires |
| |
| Ajouter un répertoire |
/add-dir, --add-dir | Configurer dans la session |
| Répertorier les répertoires | /list-dirs | Commande TUI |
| Modifier le répertoire | /cwd | Commande TUI |
| Gestion du plug-in/MCP |
| |
| Commandes de plug-in | /plugin | Gestion interactive |
| Gestion du serveur MCP | /mcp | Interface utilisateur interactive |
| Gestion des comptes |
| |
| Flux de connexion |
/login, copilot auth login | Flux d’appareil OAuth |
| Déconnexion |
/logout, copilot auth logout | Interface CLI directe |
| Informations de l′utilisateur | /user | Commande TUI |
| Opérations de session |
| |
| Supprimer la conversation | /clear | TUI uniquement |
| Vue en plan | /plan | TUI uniquement (utiliser le Kit de développement logiciel (SDK session.rpc.plan.* ) à la place |
| Gestion des sessions |
/session, /resume, /rename | Flux de travail TUI |
| Mode flotte (interactif) | /fleet | TUI uniquement (utiliser le Kit de développement logiciel (SDK session.rpc.fleet.start() ) à la place |
| Gestion des compétences |
| |
| Gérer les compétences | /skills | Interface utilisateur interactive |
| Gestion des tâches |
| |
| Afficher les tâches en arrière-plan | /tasks | Commande TUI |
| Statistiques d’utilisation |
| |
| Utilisation d’un jeton | /usage | S’abonner aux événements d’utilisation |
| Évaluation du code |
| |
| Examiner les modifications | /review | Commande TUI |
| Délégation |
| |
| Déléguer au service des relations publiques | /delegate | Flux de travail TUI |
| Configuration du terminal |
| |
| Intégration de Shell | /terminal-setup | Spécifique à l’interpréteur de commandes |
| Développement |
| |
| Activer/désactiver les fonctionnalités expérimentales |
/experimental, --experimental | Indicateur d’exécution |
| Gestion des instructions personnalisées | --no-custom-instructions | Indicateur CLI |
| Diagnostiquer la session | /diagnose | Commande TUI |
| Afficher/gérer les instructions | /instructions | Commande TUI |
| Collecter les journaux de débogage | /collect-debug-logs | Outil de diagnostic |
| Réindexer l’espace de travail | /reindex | Commande TUI |
| Intégration de l’IDE | /ide | Flux de travail spécifique à l’IDE |
| Mode non interactif |
| |
| Mode d’invite |
-p, --prompt | Exécution en un seul coup |
| Invite interactive |
-i, --interactive | Exécution automatique, puis interactive |
| Sortie silencieuse |
-s, --silent | Compatible avec les scripts |
| Continuer la session | --continue | Reprendre le plus récent |
| Sélection de l’agent | --agent <agent> | Indicateur CLI |
Solutions de contournement
Exportation de session
L’option --share n’est pas disponible via le Kit de développement logiciel (SDK). Pour contourner ce problème :
-
Collectez manuellement les événements : Abonnez-vous aux événements de session et générez votre propre exportation :
TypeScript const events: SessionEvent[] = []; session.on((event) => events.push(event)); // ... after conversation ... const messages = await session.getMessages(); // Format as markdown yourself
const events: SessionEvent[] = []; session.on((event) => events.push(event)); // ... after conversation ... const messages = await session.getMessages(); // Format as markdown yourself -
Utilisez l’interface CLI directement pour les exportations ponctuelles.
Contrôle d’autorisation
Le Kit de développement logiciel (SDK) utilise un modèle d'autorisation qui refuse par défaut. Toutes les demandes d’autorisation (écritures de fichiers, commandes d’interpréteur de commandes, extractions d’URL et autres) sont refusées, sauf si votre application fournit un onPermissionRequest gestionnaire.
Au lieu de --allow-all-paths ou --yolo, utilisez le gestionnaire d’autorisations :
const session = await client.createSession({
onPermissionRequest: approveAll,
});
const session = await client.createSession({
onPermissionRequest: approveAll,
});
Suivi de l’utilisation des jetons
Au lieu de/usage, abonnez-vous aux événements d’utilisation
session.on("assistant.usage", (event) => {
console.log("Tokens used:", {
input: event.data.inputTokens,
output: event.data.outputTokens,
});
});
session.on("assistant.usage", (event) => {
console.log("Tokens used:", {
input: event.data.inputTokens,
output: event.data.outputTokens,
});
});
Compactage de contexte
Au lieu de /compact, configurez le compactage automatique ou déclenchez-le manuellement :
// 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`);
// 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`);
Remarque
Les seuils sont des ratios d’utilisation du contexte (0,0-1,0), et non des nombres de jetons absolus.
Gestion du plan
Lire et écrire des plans de session programmatiquement.
// 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();
// 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();
Direction des messages
Injecter un message dans le tour actuel du LLM sans interrompre :
// 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" });
// 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" });
Limitations du protocole
Le Kit de développement logiciel (SDK) peut accéder uniquement aux fonctionnalités exposées via le protocole JSON-RPC de l’interface CLI. Si vous avez besoin d’une fonctionnalité CLI qui n’est pas disponible :
- Recherchez les alternatives : De nombreuses fonctionnalités ont des équivalents du SDK (voir Solutions de contournement ci-dessus).
- Utilisez directement l’interface CLI : Pour les opérations ponctuelles, appelez l’interface CLI.
- Demandez la fonctionnalité : Ouvrez un problème dans le dépôt github/copilot-sdk pour demander la prise en charge du protocole.
Compatibilité des versions
| Portée de protocoles SDK | Version du protocole CLI | Compatibilité |
|---|---|---|
| v2-v3 | v3 | Prise en charge complète |
| v2-v3 | v2 | Pris en charge par les adaptateurs v2 automatiques |
Le Kit de développement logiciel (SDK) négocie les versions du protocole avec l’interface CLI au démarrage. Le SDK prend en charge les versions de protocole 2 à 3. Lors de la connexion à un serveur CLI v2, le SDK adapte automatiquement les messages tool.call et permission.request au modèle d’événement v3, sans qu’aucun changement de code ne soit nécessaire.
Vous pouvez vérifier les versions au moment de l’exécution :
const status = await client.getStatus();
console.log("Protocol version:", status.protocolVersion);
const status = await client.getStatus();
console.log("Protocol version:", status.protocolVersion);