Skip to main content

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

Ce document décrit quelles fonctionnalités de Copilot CLI sont disponibles via le kit de développement logiciel (SDK) et lesquelles sont réservées à l’interface en ligne de commande.

Overview

Le SDK Copilot communique avec l’interface CLI via JSON-RPC protocole. 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 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 infinis
Déconnecter la sessiondisconnect()Libérer des ressources en mémoire
Détruire la session (déconseillée)destroy()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 reprendre rapidement
Obtenir une session de premier plangetForegroundSessionId()Coordination multisession
Définir une session de premier plansetForegroundSessionId()Coordination multisession
Messaging
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 mi-tour sans abandon
Mise en file d’attente (mode file d’attente)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 de répertoiresend({ attachments: [{ type: "directory", path }] })Attacher le contexte de répertoire
Obtenir l’historiquegetEvents()Tous les événements de session
annulerabort()Annuler la demande en cours d’exécution
Outils
Inscrire des outils personnalisésregisterTools()Prise en charge complète du schéma JSON
Contrôle d’autorisation de l’outil
onPreToolUse AccrocheAutoriser/refuser/demander
Modification des résultats de l’outil
onPostToolUse AccrocheTransformer les résultats
Outils disponibles ou exclus
availableTools, excludedTools configurationOutils de filtre
Modèles
Lister les modèleslistModels()Avec les fonctionnalités, la facturation, la 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 ConfigPour 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
Authentication
Obtenir l’état de l’authentificationgetAuthStatus()Vérifier l’état de connexion
Utiliser un jeton
gitHubToken optionAuthentification programmatique
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 ConfigCréer des processus
HTTP/SSE distant
mcpServers ConfigSe connecter aux services
Hooks
Pré-utilisation de l’outilonPreToolUseAutorisation, modification des arguments
Après utilisation de l’outil (succès)onPostToolUseModifier les résultats
Après l’utilisation de l’outil (échec)onPostToolUseFailureSurveiller les appels d’outils ayant échoué, injecter des instructions de réessai
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 ConfigDéfinir des agents spécialisés
Message système
systemMessage ConfigAjouter ou remplacer
Fournisseur personnalisé
provider ConfigPrise en charge de BYOK
Sessions infinies
infiniteSessions ConfigCompactage automatique
Gestionnaire d’autorisationsonPermissionRequestApprouver/refuser des demandes
Gestionnaire d’entrée utilisateuronUserInputRequestGérer ask_user
Compétences
skillDirectories ConfigCompétences personnalisées
Compétences désactivées
disabledSkills ConfigDésactiver des compétences spécifiques
Répertoire de configuration
configDir ConfigRemplacer l’emplacement de configuration par défaut
Nom du client
clientName ConfigIdentifier l’application dans User-Agent
Répertoire de travail
workingDirectory ConfigDéfinir la session cwd
Version expérimentale
Gestion des agentssession.rpc.agent.*Répertorier, sélectionner, désélectionner, obtenir l’agent actuel
Mode flottesession.rpc.fleet.start()Exécution de sous-agent parallèle
Compactage manuelsession.rpc.history.compact()Compactage du déclencheur à la demande
Troncation de l’historiquesession.rpc.history.truncate()Supprimer les événements à partir d’un point donné
Duplication de sessionserver.rpc.sessions.fork()Bifurquer une session à partir d’un point de l’historique

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

FonctionnalitéCommande/option en ligne de commandeReason
Exportation de session
Exporter vers le fichier
--share, /shareNon dans le protocole
Exporter vers gist
--share-gist, /share gistNon dans le protocole
Interface utilisateur interactive
Commandes slash
/help, /clear, /exit, etc.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/chronicleStandup, conseils, amélioration, réindexation
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
Mode diffusion/streamer-modeMode d’affichage TUI
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 des jetons/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'interaction
-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 la version la plus récente
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). Contournements:

  1. Collectez manuellement des événements : abonnez-vous aux événements de session et générez votre propre exportation :

    const events: SessionEvent[] = [];
    session.on((event) => events.push(event));
    // ... after conversation ...
    const messages = await session.getEvents();
    // Format as markdown yourself
    
  2. Utilisez l’interface CLI directement pour l’exportation : exécutez l’interface CLI avec --share pour les exportations ponctuelles.

Contrôle d’autorisation

Le Kit de développement logiciel (SDK) utilise un modèle d’autorisation refuser par défaut . Toutes les demandes d’autorisation (écritures de fichiers, commandes d’interpréteur de commandes, extractions d’URL, etc.) 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,
});

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

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

Direction des messages

Injectez un message dans l'itération actuelle de LLM sans l'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" });

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 :

  1. Rechercher des alternatives : de nombreuses fonctionnalités ont des équivalents sdk (voir les solutions de contournement ci-dessus)
  2. Utiliser l’interface CLI directement - Pour les opérations ponctuelles, appelez l’interface CLI
  3. Demander la fonctionnalité - Ouvrir un problème pour demander la prise en charge du protocole

Compatibilité des versions

Plage 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.

Vérifiez les versions au moment de l’exécution :

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

Voir aussi