Skip to main content

Compatibilité du Kit de développement logiciel (SDK) et de l’interface

Comparez les Copilot fonctionnalités CLI disponibles via SDK Copilot, identifiez les fonctionnalités CLI uniquement et recherchez des solutions de contournement par programmation.

Qui peut utiliser cette fonctionnalité ?

Kit de développement logiciel (SDK) GitHub Copilot est disponible dans tous les forfaits Copilot.

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 (SDKRemarques
Gestion de session
Créer une sessioncreateSession()Prise en charge complète de la configuration
Reprendre la sessionresumeSession()Avec des espaces de travail de session illimités
Déconnecter la sessiondisconnect()Libérer des ressources en mémoire
Détruire la sessiondestroy()Utilisation de disconnect() à la place
Supprimer une sessiondeleteSession()Supprimer du stockage
Répertorier les sessionslistSessions()Toutes les sessions stockées
Obtenir la dernière sessiongetLastSessionId()Pour un CV rapide
Obtenir une session de premier plangetForegroundSessionId()Coordination multi-sessions
Définir une session de premier plansetForegroundSessionId()Coordination multi-sessions
Messages
Envoyer un messagesend()Avec des pièces jointes
Envoyer et attendresendAndWait()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 jointessend({ attachments: [{ type: "file", path }] })Images codées automatiquement et redimensionnées
Pièces jointes du répertoiresend({ attachments: [{ type: "directory", path }] })Attacher le contexte de répertoire
Obtenir l’historiquegetMessages()Tous les événements de session
Abandonabort()Annuler la requête en cours
Outils
Inscrire des outils personnalisésregisterTools()Prise en charge complète du schéma JSON
Contrôle d’autorisation de l’outil
onPreToolUse crochetAutoriser/refuser/demander
Modification des résultats de l’outil
onPostToolUse crochetTransformer les résultats
Outils disponibles ou exclus
availableTools, excludedTools configurationOutils de filtre
Modèles
Lister les modèleslistModels()Avec fonctionnalités, facturation, et politique
Définir le modèle (lors de la création)
model dans la configuration de sessionPar session
Changer de modèle (mi-session)session.setModel()Également via session.rpc.model.switchTo()
Obtenir le modèle actuelsession.rpc.model.getCurrent()Interroger un modèle actif
Effort de raisonnement
reasoningEffort configurationPour les modèles pris en charge
Agent Mode
Obtenir le mode actuelsession.rpc.mode.get()Retourne le mode actuel
Définir le modesession.rpc.mode.set()Basculer entre les modes
Gestion du plan
Lire le plansession.rpc.plan.read()Obtenez le contenu et le chemin d'accès du fichier plan.md
Mettre à jour le plansession.rpc.plan.update()Écrire le contenu de plan.md
Suppression de programmesession.rpc.plan.delete()Supprimer plan.md
Fichiers de l’espace de travail
Répertorier les fichiers d’espace de travailsession.rpc.workspace.listFiles()Fichiers dans l’espace de travail de session
Lire le fichier d’espace de travailsession.rpc.workspace.readFile()Lire le contenu du fichier
Créer un fichier d’espace de travailsession.rpc.workspace.createFile()Créer un fichier dans l’espace de travail
Authentification
Obtenir le statut d’authentificationgetAuthStatus()Vérifier l’état de connexion
Utiliser un jeton
githubToken optionAuthentification programmée
Connectivité
Pingclient.ping()Vérification de l'état avec l’horodatage du serveur
Obtenir l’état du serveurclient.getStatus()Informations sur la version du protocole et le serveur
Serveurs MCP
Serveurs locaux ou stdio
mcpServers configurationCréer des processus
HTTP/SSE distant
mcpServers configurationSe connecter aux services
Hooks
Pré-utilisation de l’outilonPreToolUsePermission, modifier les arguments
Après utilisation de l’outilonPostToolUseModifier les résultats
Message d'inviteonUserPromptSubmittedModifier les invites
Début/fin de session
onSessionStart, onSessionEndCycle de vie avec source/raison
Gestion des erreursonErrorOccurredGestion personnalisée
Événements
Tous les événements de session
on(), once()40+ types d’événements
Diffusion en continustreaming: trueÉvénements delta
Configuration de session
Agents personnalisés
customAgents configurationDéfinir des agents spécialisés
Message système
systemMessage configurationAjouter ou remplacer
Fournisseur personnalisé
provider configurationPrise en charge de BYOK
Sessions infinies
infiniteSessions configurationCompactage automatique
Gestionnaire d’autorisationsonPermissionRequestApprouver/refuser des demandes
Gestionnaire d’entrée utilisateuronUserInputRequestGérer ask_user
Compétences
skillDirectories configurationCompétences personnalisées
Compétences désactivées
disabledSkills configurationDésactiver des compétences spécifiques
Répertoire de configuration
configDir configurationRemplacer l’emplacement de configuration par défaut
Nom du client
clientName configurationIdentifier l’application dans User-Agent
Répertoire de travail
workingDirectory configurationDéfinir le répertoire de travail de la session
Version expérimentale
Gestion des agentssession.rpc.agent.*Lister, sélectionner, désélectionner, obtenir l’agent actuel
Mode flottesession.rpc.fleet.start()Exécution parallèle des sous-agents
Compactage manuelsession.rpc.compaction.compact()Compactage du déclencheur à la demande

Non disponible dans le Kit de développement logiciel (CLI uniquement)

FonctionnalitéCommande/option CLIReason
Exportation de session
Exporter vers le fichier
--share, /shareNon dans le protocole
Exporter vers un gist
--share-gist, /share gistNon 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/agentInterface utilisateur interactive
Boîte de dialogue mode Diff/diffInterface utilisateur interactive
Boîte de dialogue Commentaires/feedbackInterface utilisateur interactive
Sélecteur de thème/themeInterface utilisateur du terminal
Sélecteur de modèles/modelInterface utilisateur interactive (utiliser le Kit de développement logiciel (SDK setModel() ) à la place
Copier dans le Presse-papiers/copySpécifique au terminal
Gestion du contexte/contextInterface utilisateur interactive
Recherche & Histoire
Recherche approfondie/researchFlux de travail TUI avec recherche web
Outils d’historique des sessions/chronicleRéunion quotidienne, conseils, améliorer, réindexer
Fonctionnalités de terminal
Sortie de couleur--no-colorSpécifique au terminal
Mode lecteur d’écran--screen-readerAccessibilité
Affichage enrichi des différences--plain-diffRendu du terminal
Bannière de démarrage--bannerÉlément visuel
Tampon d'écran alternatif
--alt-screen, --no-alt-screenRendu du terminal
Prise en charge de la souris
--mouse, --no-mouseEntrée du terminal
Raccourcis de chemin d'accès/autorisation
Autoriser tous les chemins d’accès--allow-all-pathsUtiliser le gestionnaire d’autorisations
Autoriser toutes les URL--allow-all-urlsUtiliser le gestionnaire d’autorisations
Autoriser toutes les autorisations
--yolo, --allow-all, /allow-allUtiliser le gestionnaire d’autorisations
Autorisations d’outil granulaires
--allow-tool, --deny-toolUtiliser un onPreToolUse hook
Contrôle d’accès d’URL
--allow-url, --deny-urlUtiliser le gestionnaire d’autorisations
Réinitialiser les outils autorisés/reset-allowed-toolsCommande TUI
Gestion des répertoires
Ajouter un répertoire
/add-dir, --add-dirConfigurer dans la session
Répertorier les répertoires/list-dirsCommande TUI
Modifier le répertoire/cwdCommande TUI
Gestion du plug-in/MCP
Commandes de plug-in/pluginGestion interactive
Gestion du serveur MCP/mcpInterface utilisateur interactive
Gestion des comptes
Flux de connexion
/login, copilot auth loginFlux d’appareil OAuth
Déconnexion
/logout, copilot auth logoutInterface CLI directe
Informations de l′utilisateur/userCommande TUI
Opérations de session
Supprimer la conversation/clearTUI uniquement
Vue en plan/planTUI uniquement (utiliser le Kit de développement logiciel (SDK session.rpc.plan.* ) à la place
Gestion des sessions
/session, /resume, /renameFlux de travail TUI
Mode flotte (interactif)/fleetTUI uniquement (utiliser le Kit de développement logiciel (SDK session.rpc.fleet.start() ) à la place
Gestion des compétences
Gérer les compétences/skillsInterface utilisateur interactive
Gestion des tâches
Afficher les tâches en arrière-plan/tasksCommande TUI
Statistiques d’utilisation
Utilisation d’un jeton/usageS’abonner aux événements d’utilisation
Évaluation du code
Examiner les modifications/reviewCommande TUI
Délégation
Déléguer au service des relations publiques/delegateFlux de travail TUI
Configuration du terminal
Intégration de Shell/terminal-setupSpécifique à l’interpréteur de commandes
Développement
Activer/désactiver les fonctionnalités expérimentales
/experimental, --experimentalIndicateur d’exécution
Gestion des instructions personnalisées--no-custom-instructionsIndicateur CLI
Diagnostiquer la session/diagnoseCommande TUI
Afficher/gérer les instructions/instructionsCommande TUI
Collecter les journaux de débogage/collect-debug-logsOutil de diagnostic
Réindexer l’espace de travail/reindexCommande TUI
Intégration de l’IDE/ideFlux de travail spécifique à l’IDE
Mode non interactif
Mode d’invite
-p, --promptExécution en un seul coup
Invite interactive
-i, --interactiveExécution automatique, puis interactive
Sortie silencieuse
-s, --silentCompatible avec les scripts
Continuer la session--continueReprendre 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
    
  • 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 :

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

Suivi de l’utilisation des jetons

Au lieu de/usage, abonnez-vous aux événements d’utilisation

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

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

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.

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

Direction des messages

Injecter un message dans le tour actuel du LLM sans interrompre :

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

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 SDKVersion du protocole CLICompatibilité
v2-v3v3Prise en charge complète
v2-v3v2Pris 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 :

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