Skip to main content

SDK- und CLI-Kompatibilität

Vergleichen Sie, welche Copilot CLI-Features durch Copilot SDK verfügbar sind, identifizieren Sie exklusive CLI-Features, und finden Sie programmgesteuerte Lösungsmöglichkeiten.

Wer kann dieses Feature verwenden?

GitHub Copilot SDK ist mit allen Copilot Tarifen verfügbar.

Hinweis

Copilot SDK ist zurzeit in Öffentliche Vorschau. Funktionalität und Verfügbarkeit können geändert werden.

GitHub Copilot SDK kommuniziert mit GitHub Copilot-CLI über das JSON-RPC-Protokoll. Features müssen explizit über dieses Protokoll verfügbar gemacht werden, damit sie im SDK verfügbar sind. Viele interaktive CLI-Features sind terminalspezifisch und nicht programmgesteuert verfügbar.

Funktionsvergleich

Verfügbar im SDK

FunktionSDK-MethodeHinweise
Sitzungsverwaltung
Sitzung erstellencreateSession()Vollständige Konfigurationsunterstützung
Sitzung fortsetzenresumeSession()Mit unendlichen Sitzungsarbeitsbereichen
Sitzung trennendisconnect()Freigeben von In-Memory-Ressourcen
Sitzung zerstörendestroy()Verwenden Sie stattdessen disconnect().
Sitzung löschendeleteSession()Aus Speicher entfernen
Sitzungen auflistenlistSessions()Alle gespeicherten Sitzungen
Letzte Sitzung abrufengetLastSessionId()Für einen schnellen Überblick
Vordergrundsitzung abrufengetForegroundSessionId()Koordination mehrerer Sitzungen
Aktuelle Sitzung in den Vordergrund setzensetForegroundSessionId()Koordination mehrerer Sitzungen
Nachrichtenübermittlung
Nachricht sendensend()Mit Anlagen
Senden und WartensendAndWait()Blockiert bis zum Abschluss
Lenkung (Sofortiger Modus)send({ mode: "immediate" })Während des Vorgangs ohne Abbruch injizieren.
Warteschlangen (Enqueue-Modus)send({ mode: "enqueue" })Puffer für sequenzielle Verarbeitung (Standard)
Dateianlagensend({ attachments: [{ type: "file", path }] })Bilder automatisch codiert und verkleinert
Verzeichnis-Anhängesend({ attachments: [{ type: "directory", path }] })Anfügen des Verzeichniskontexts
Verlauf abrufengetMessages()Alle Sitzungsereignisse
Abbruchabort()In-Flight-Anforderung stornieren
Werkzeuge
Registrieren von benutzerdefinierten ToolsregisterTools()Vollständige JSON-Schemaunterstützung
Berechtigungssteuerung für Tools
onPreToolUse HakenZulassen/Verweigern/Fragen
Änderung des Werkzeugergebnisses
onPostToolUse HakenTransformieren von Ergebnissen
Verfügbare/ausgeschlossene Tools
availableTools, excludedTools KonfigurationFilterwerkzeuge
Modelle
Auflisten von ModellenlistModels()Mit Funktionen, Abrechnung, Richtlinien
Festlegen des Modells (beim Erstellen)
model in SitzungskonfigurationPro Sitzung
Switch-Modell (Zwischensitzung)session.setModel()Auch über session.rpc.model.switchTo()
Aktuelles Modell abrufensession.rpc.model.getCurrent()Aktives Modell abfragen
Begründungsaufwand
reasoningEffort KonfigurationFür unterstützte Modelle
Agentmodus
Aktuellen Modus abrufensession.rpc.mode.get()Gibt den aktuellen Modus zurück.
Modus festlegensession.rpc.mode.set()Wechseln zwischen Modi
Planverwaltung
Plan lesensession.rpc.plan.read()Abrufen des plan.md-Inhalts und des Pfads
Plan aktualisierensession.rpc.plan.update()Schreiben Sie den Inhalt von plan.md
Plan löschensession.rpc.plan.delete()Plan.md entfernen
Arbeitsbereichsdateien
Arbeitsbereichsdateien auflistensession.rpc.workspace.listFiles()Dateien im Sitzungsarbeitsbereich
Arbeitsbereichsdatei lesensession.rpc.workspace.readFile()Dateiinhalt lesen
Arbeitsbereichsdatei erstellensession.rpc.workspace.createFile()Datei im Arbeitsbereich erstellen
Authentifizierung
Abrufen des AuthentifizierungsstatusgetAuthStatus()Überprüfen des Anmeldestatus
Token verwenden
Option githubTokenProgrammgesteuerte Authentifizierung
Konnektivität
Pingenclient.ping()Gesundheitsprüfung mit Serverzeitstempel
Serverstatus abrufenclient.getStatus()Protokollversions- und Serverinformationen
MCP-Server
Lokale/Stdio-Server
mcpServers KonfigurationSpawn-Prozesse
Remote-HTTP/SSE
mcpServers KonfigurationVerbinden mit Diensten
Hooks
Vor der WerkzeugverwendungonPreToolUseBerechtigungen, Argumente ändern
Nutzung nach dem ToolonPostToolUseErgebnisse ändern
BenutzeraufforderungonUserPromptSubmittedÄndern von Eingabeaufforderungen
Sitzungsstart/-ende
onSessionStart, onSessionEndLebenszyklus mit Quelle/Grund
FehlerbehandlungonErrorOccurredBenutzerdefinierte Behandlung
Ereignisse
Alle Sitzungsereignisse
on(), once()40+ Ereignistypen
Streamenstreaming: trueDelta-Ereignisse
Sitzungskonfiguration
Benutzerdefinierte Agents
customAgents KonfigurationDefinieren von spezialisierten Agents
Systemmeldung
systemMessage KonfigurationAnfügen oder Ersetzen
Benutzerdefinierter Anbieter
provider KonfigurationBYOK-Unterstützung
Unendliche Sitzungen
infiniteSessions KonfigurationAutomatische Komprimierung
BerechtigungshandleronPermissionRequestGenehmigen/Ablehnen von Anforderungen
BenutzereingabehandleronUserInputRequestVerarbeitung von ask_user
Fähigkeiten
skillDirectories KonfigurationBenutzerdefinierte Qualifikationen
Deaktivierte Fähigkeiten
disabledSkills KonfigurationDeaktivieren bestimmter Fähigkeiten
Konfigurationsverzeichnis
configDir KonfigurationStandardkonfigurationsspeicherort außer Kraft setzen
Clientname
clientName KonfigurationApp im User-Agent identifizieren
Arbeitsverzeichnis
workingDirectory KonfigurationSitzungscwd festlegen
Experimentell
Agentverwaltungsession.rpc.agent.*Auflisten, Auswählen, Abwählen, Abrufen des aktuellen Agents
Flottenmodussession.rpc.fleet.start()Parallele Ausführung von Subagenten
Manuelle Komprimierungsession.rpc.compaction.compact()Auslösen der Komprimierung bei Bedarf

Im SDK nicht verfügbar (nur CLI)

FunktionCLI-Befehl/-OptionGrund
Sitzungsexport
Exportieren als Datei
--share, /shareNicht im Protokoll
In „gist” exportieren
--share-gist, /share gistNicht im Protokoll
Interaktive Benutzeroberfläche
Slash-Befehle
/help, /clear, /exit, usw.Nur Terminal-Benutzeroberfläche (TUI)
Dialogfeld "Agentauswahl"/agentInteraktive Benutzeroberfläche
Diff-Modus-Dialog/diffInteraktive Benutzeroberfläche
Feedback-Dialog/feedbackInteraktive Benutzeroberfläche
Theme-Auswahl/themeTerminal-Benutzeroberfläche
Modellauswahl/modelInteraktive Benutzeroberfläche (verwenden Sie stattdessen SDK setModel() )
In Zwischenablage kopieren/copyTerminalspezifisch
Context-Management/contextInteraktive Benutzeroberfläche
Forschung & Geschichte
Tiefenrecherche/researchTUI-Workflow mit Websuche
Sitzungsverlaufstools/chronicleStandup, Tipps, verbessern, neuindizieren
Terminalfunktionen
Farbausgabe--no-colorTerminalspezifisch
Bildschirmlesemodus--screen-readerZugänglichkeit
Detailliertes Diff-Rendering--plain-diffTerminal-Rendering
Startbanner--bannerVisuelles Element
Alternativer Bildschirmpuffer
--alt-screen, --no-alt-screenTerminal-Rendering
Mausunterstützung
--mouse, --no-mouseTerminaleingabe
Pfad-/Berechtigungsverknüpfungen
Alle Pfade zulassen--allow-all-pathsBerechtigungshandler verwenden
Alle URLs zulassen--allow-all-urlsBerechtigungshandler verwenden
Alle Berechtigungen zulassen
--yolo, --allow-all``/allow-allBerechtigungshandler verwenden
Granulare Toolberechtigungen
--allow-tool, --deny-toolVerwenden Sie den onPreToolUse-Hook
URL-Zugriffssteuerung
--allow-url, --deny-urlBerechtigungshandler verwenden
Zulässige Tools zurücksetzen/reset-allowed-toolsTUI-Befehl
Verzeichnisverwaltung
Verzeichnis hinzufügen
/add-dir, --add-dirIn der Sitzung konfigurieren
Verzeichnisse auflisten/list-dirsTUI-Befehl
Verzeichnis ändern/cwdTUI-Befehl
Plug-In-/MCP-Verwaltung
Plug-In-Befehle/pluginInteraktive Verwaltung
MCP-Serververwaltung/mcpInteraktive Benutzeroberfläche
Kontoverwaltung
Anmeldefluss
/login, copilot auth loginOAuth-Gerätefluss
Abmelden
/logout, copilot auth logoutDirect CLI
Benutzerinformationen/userTUI-Befehl
Sitzungsvorgänge
Konversation leeren/clearNUR TUI
Planansicht/planTUI-only (stattdessen SDK session.rpc.plan.* verwenden)
Sitzungsverwaltung
/session, /resume``/renameTUI Workflow
Flottenmodus (interaktiv)/fleetTUI-only (stattdessen SDK session.rpc.fleet.start() verwenden)
Kompetenzmanagement
Qualifikationen verwalten/skillsInteraktive Benutzeroberfläche
Aufgabenverwaltung
Anzeigen von Hintergrundaufgaben/tasksTUI-Befehl
Nutzungs- und Statistiken
Verwendung von Token/usageAbonnieren von Verwendungsereignissen
Codeprüfung
Änderungen überprüfen/reviewTUI-Befehl
Delegierung
An PR delegieren/delegateTUI Workflow
Terminaleinrichtung
Shell-Integration/terminal-setupShell-spezifisch
Entwicklung
Experimentelle Funktion umschalten
/experimental, --experimentalLaufzeitkennzeichnung
Verwaltung benutzerdefinierter Anweisungen--no-custom-instructionsCLI-Kennzeichnung
Diagnosesitzung/diagnoseTUI-Befehl
Anzeigen/Verwalten von Anweisungen/instructionsTUI-Befehl
Sammeln von Debugprotokollen/collect-debug-logsDiagnosetool
Arbeitsbereich neu indizieren/reindexTUI-Befehl
IDE-Integration/ideIDE-spezifischer Workflow
Nicht interaktiver Modus
Prompt-Modus
-p, --promptEinmalige Ausführung
Interaktive Eingabeaufforderung
-i, --interactiveAutomatisch ausführen, dann interaktiv
Stille Ausgabe
-s, --silentSkriptfreundlich
Sitzung fortsetzen--continueZuletzt aktualisiert
Agentauswahl--agent <agent>CLI-Kennzeichnung

Problemumgehungen

Sitzungsexport

Die --share Option ist über das SDK nicht verfügbar. Dieses Problem können Sie folgendermaßen umgehen:

  • Manuelles Sammeln von Ereignissen: Abonnieren Sie Sitzungsereignisse, und erstellen Sie Ihren eigenen Export:

    TypeScript
    const events: SessionEvent[] = [];
    session.on((event) => events.push(event));
    // ... after conversation ...
    const messages = await session.getMessages();
    // Format as markdown yourself
    
  • Verwenden Sie die CLI direkt für einmalige Exporte.

Berechtigungsverwaltung

Das SDK verwendet ein Berechtigungsmodell, das standardmäßig verweigert. Alle Berechtigungsanforderungen (Dateischreibvorgänge, Shellbefehle, URL-Abrufe und andere) werden verweigert, es sei denn, Ihre App stellt einen onPermissionRequest Handler bereit.

Verwenden Sie anstelle von --allow-all-paths oder --yolo den Berechtigungshandler:

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

Tokenverwendungsnachverfolgung

Statt /usage abonnieren Sie Nutzungsereignisse:

TypeScript
session.on("assistant.usage", (event) => {
  console.log("Tokens used:", {
    input: event.data.inputTokens,
    output: event.data.outputTokens,
  });
});

Kontextkomprimierung

Anstelle von /compact automatische Komprimierung zu konfigurieren oder manuell auszulösen:

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

Hinweis

Schwellenwerte sind Kontextauslastungsverhältnisse (0,0-1,0), keine absolute Tokenanzahl.

Planverwaltung

Programmgesteuertes Lesen und Schreiben von Sitzungsplänen:

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

Nachrichtensteuerung

Fügen Sie eine Nachricht in die aktuelle LLM-Runde ein, ohne abzubrechen.

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

Protokollbeschränkungen

Das SDK kann nur auf Features zugreifen, die über das JSON-RPC-Protokoll der CLI verfügbar gemacht werden. Wenn Sie ein CLI-Feature benötigen, das nicht verfügbar ist:

  • Suchen Sie nach Alternativen: Viele Features verfügen über SDK-Entsprechungen (siehe oben beschriebene Problemumgehungen ).
  • Verwenden Sie die CLI direkt: Rufen Sie bei einmaligen Vorgängen die CLI auf.
  • Fordern Sie das Feature an: Öffnen Sie ein Problem im Github/copilot-sdk-Repository , um die Protokollunterstützung anzufordern.

Versionskompatibilität

SDK-ProtokollbereichCLI-ProtokollversionCompatibility
v2-v3v3Vollständiger Support
v2-v3v2Unterstützt durch automatische v2-Adapter

Das SDK verhandelt Protokollversionen mit der CLI beim Start. Das SDK unterstützt Protokollversionen 2 bis 3. Beim Herstellen einer Verbindung mit einem v2 CLI-Server passt das SDK automatisch tool.call- und permission.request-Nachrichten an das v3-Ereignismodell an – es sind keine Codeänderungen erforderlich.

Sie können Versionen zur Laufzeit überprüfen:

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