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 erstellen | createSession() | Vollständige Konfigurationsunterstützung | | Sitzung fortsetzen | resumeSession() | Mit unendlichen Sitzungsarbeitsbereichen | | Sitzung trennen | disconnect() | Freigeben von In-Memory-Ressourcen | | Sitzung zerstören | destroy() | Verwenden Sie stattdessen disconnect(). | | Sitzung löschen | deleteSession() | Aus Speicher entfernen | | Sitzungen auflisten | listSessions() | Alle gespeicherten Sitzungen | | Letzte Sitzung abrufen | getLastSessionId() | Schnelles Wiederaufnehmen | | Vordergrundsitzung abrufen | getForegroundSessionId() | Koordination mehrerer Sitzungen | | Aktuelle Sitzung in den Vordergrund setzen | setForegroundSessionId() | Koordination mehrerer Sitzungen | | Nachrichtenübermittlung | | | | Nachricht senden | send() | Mit Anlagen | | Senden und Warten | sendAndWait() | 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) | | Dateianlagen | send({ attachments: [{ type: "file", path }] }) | Bilder automatisch codiert und verkleinert | | Verzeichnis-Anhänge | send({ attachments: [{ type: "directory", path }] }) | Anfügen des Verzeichniskontexts | | Verlauf abrufen | getMessages() | Alle Sitzungsereignisse | | Abbrechen | abort() | In-Flight-Anforderung stornieren | | Werkzeuge | | | | Registrieren von benutzerdefinierten Tools | registerTools() | Vollständige JSON-Schemaunterstützung | | Berechtigungssteuerung für Tools | onPreToolUse Haken | Zulassen/Verweigern/Fragen | | Änderung des Werkzeugergebnisses | onPostToolUse Haken | Transformieren von Ergebnissen | | Verfügbare/ausgeschlossene Tools | availableTools, excludedTools Konfig | Filterwerkzeuge | | Modelle | | | | Auflisten von Modellen | listModels() | Mit Funktionen, Abrechnung, Richtlinien | | Festlegen des Modells (beim Erstellen) | model in Sitzungskonfiguration | Pro Sitzung | | Switch-Modell (Zwischensitzung) | session.setModel() | Auch über session.rpc.model.switchTo() | | Aktuelles Modell abrufen | session.rpc.model.getCurrent() | Aktives Modell abfragen | | Begründungsaufwand | reasoningEffort Konfiguration | Für unterstützte Modelle | | Agentmodus | | | | Aktuellen Modus abrufen | session.rpc.mode.get() | Gibt den aktuellen Modus zurück. | | Modus festlegen | session.rpc.mode.set() | Wechseln zwischen Modi | | Planverwaltung | | | | Plan lesen | session.rpc.plan.read() | Abrufen des plan.md-Inhalts und des Pfads | | Plan aktualisieren | session.rpc.plan.update() | Schreiben Sie den Inhalt von plan.md | | Plan löschen | session.rpc.plan.delete() | Plan.md entfernen | | Arbeitsbereichsdateien | | | | Arbeitsbereichsdateien auflisten | session.rpc.workspace.listFiles() | Dateien im Sitzungsarbeitsbereich | | Arbeitsbereichsdatei lesen | session.rpc.workspace.readFile() | Dateiinhalt lesen | | Arbeitsbereichsdatei erstellen | session.rpc.workspace.createFile() | Datei im Arbeitsbereich erstellen | | Authentifizierung | | | | Abrufen des Authentifizierungsstatus | getAuthStatus() | Überprüfen des Anmeldestatus | | Token verwenden | Option githubToken | Programmgesteuerte Authentifizierung | | Konnektivität | | | | Pingen | client.ping() | Gesundheitsprüfung mit Serverzeitstempel | | Serverstatus abrufen | client.getStatus() | Protokollversions- und Serverinformationen | | MCP-Server | | | | Lokale/Stdio-Server | mcpServers Konfiguration | Spawn-Prozesse | | Remote-HTTP/SSE | mcpServers Konfiguration | Verbinden mit Diensten | | Hooks | | | | Vor der Werkzeugverwendung | onPreToolUse | Berechtigungen, Argumente ändern | | Nutzung nach dem Tool | onPostToolUse | Ergebnisse ändern | | Benutzeraufforderung | onUserPromptSubmitted | Ändern von Eingabeaufforderungen | | Sitzungsstart/-ende | onSessionStart, onSessionEnd | Lebenszyklus mit Quelle/Grund | | Fehlerbehandlung | onErrorOccurred | Benutzerdefinierte Behandlung | | Ereignisse | | | | Alle Sitzungsereignisse | on(), once() | 40+ Ereignistypen | | Streamen | streaming: true | Delta-Ereignisse | | Sitzungskonfiguration | | | | Benutzerdefinierte Agents | customAgents Konfiguration | Definieren von spezialisierten Agents | | Systemmeldung | systemMessage Konfiguration | Anfügen oder Ersetzen | | Benutzerdefinierter Anbieter | provider Konfiguration | BYOK-Unterstützung | | Unendliche Sitzungen | infiniteSessions Konfiguration | Automatische Komprimierung | | Berechtigungshandler | onPermissionRequest | Genehmigen/Ablehnen von Anforderungen | | Benutzereingabehandler | onUserInputRequest | Verarbeitung von ask_user | | Fähigkeiten | skillDirectories Konfiguration | Benutzerdefinierte Qualifikationen | | Deaktivierte Fähigkeiten | disabledSkills Konfiguration | Deaktivieren bestimmter Fähigkeiten | | Konfigurationsverzeichnis | configDir Konfiguration | Standardkonfigurationsspeicherort außer Kraft setzen | | Client-Name | clientName Konfiguration | App im User-Agent identifizieren | | Arbeitsverzeichnis | workingDirectory Konfiguration | Sitzungscwd festlegen | | Experimentell | | | | Agentverwaltung | session.rpc.agent.* | Auflisten, Auswählen, Abwählen, Abrufen des aktuellen Agents | | Flottenmodus | session.rpc.fleet.start() | Parallele Ausführung von Subagenten | | Manuelle Komprimierung | session.rpc.compaction.compact() | Auslösen der Komprimierung bei Bedarf |

Im SDK nicht verfügbar (nur CLI)

FunktionCLI-Befehl/-OptionGrund
          **Sitzungsexport** |

| | | Exportieren als Datei | --share, /share | Nicht im Protokoll | | In gist exportieren | --share-gist, /share gist | Nicht im Protokoll | | Interaktive Benutzeroberfläche | | | | Slash-Befehle | /help, /clear, /exit, usw. | Terminal UI (TUI) nur | | Dialogfeld "Agentauswahl" | /agent | Interaktive Benutzeroberfläche | | Diff-Modus-Dialog | /diff | Interaktive Benutzeroberfläche | | Feedback-Dialog | /feedback | Interaktive Benutzeroberfläche | | Theme-Auswahl | /theme | Terminal-UI | | Modellauswahlwerkzeug | /model | Interaktive Benutzeroberfläche (verwenden Sie stattdessen SDK setModel() ) | | In Zwischenablage kopieren | /copy | Terminalspezifisch | | Context-Management | /context | Interaktive Benutzeroberfläche | | Forschung & Geschichte | | | | Tiefenrecherche | /research | TUI-Workflow mit Websuche | | Sitzungsverlaufstools | /chronicle | Standup, Tipps, verbessern, neuindizieren | | Terminalfunktionen | | | | Farbausgabe | --no-color | Terminalspezifisch | | Bildschirmlesemodus | --screen-reader | Zugänglichkeit | | Detailliertes Diff-Rendering | --plain-diff | Terminal-Rendering | | Startbanner | --banner | Visuelles Element | | Streamer-Modus | /streamer-mode | TUI-Anzeigemodus | | Alternativer Bildschirmpuffer | --alt-screen, --no-alt-screen | Terminal-Rendering | | Mausunterstützung | --mouse, --no-mouse | Terminaleingabe | | Pfad-/Berechtigungsverknüpfungen | | | | Alle Pfade zulassen | --allow-all-paths | Berechtigungshandler verwenden | | Alle URLs zulassen | --allow-all-urls | Berechtigungshandler verwenden | | Alle Berechtigungen zulassen | --yolo, --allow-all``/allow-all | Berechtigungshandler verwenden | | Granulare Toolberechtigungen | --allow-tool, --deny-tool | Verwenden Sie den onPreToolUse-Hook | | URL-Zugriffssteuerung | --allow-url, --deny-url | Berechtigungshandler verwenden | | Zulässige Tools zurücksetzen | /reset-allowed-tools | TUI-Befehl | | Verzeichnisverwaltung | | | | Verzeichnis hinzufügen | /add-dir, --add-dir | In der Sitzung konfigurieren | | Verzeichnisse auflisten | /list-dirs | TUI-Befehl | | Verzeichnis ändern | /cwd | TUI-Befehl | | Plug-In-/MCP-Verwaltung | | | | Plug-In-Befehle | /plugin | Interaktive Verwaltung | | MCP-Serververwaltung | /mcp | Interaktive Benutzeroberfläche | | Kontoverwaltung | | | | Anmeldefluss | /login, copilot auth login | OAuth-Gerätefluss | | Abmelden | /logout, copilot auth logout | Direct CLI | | Benutzerinformationen | /user | TUI-Befehl | | Sitzungsvorgänge | | | | Konversation leeren | /clear | NUR TUI | | Planansicht | /plan | TUI-only (stattdessen SDK session.rpc.plan.* verwenden) | | Sitzungsverwaltung | /session, /resume``/rename | TUI Workflow | | Flottenmodus (interaktiv) | /fleet | TUI-only (stattdessen SDK session.rpc.fleet.start() verwenden) | | Kompetenzmanagement | | | | Qualifikationen verwalten | /skills | Interaktive Benutzeroberfläche | | Aufgabenverwaltung | | | | Anzeigen von Hintergrundaufgaben | /tasks | TUI-Befehl | | Nutzungs- und Statistiken | | | | Verwendung von Token | /usage | Abonnieren von Verwendungsereignissen | | Codeprüfung | | | | Änderungen überprüfen | /review | TUI-Befehl | | Delegierung | | | | An PR delegieren | /delegate | TUI Workflow | | Terminaleinrichtung | | | | Shell-Integration | /terminal-setup | Shell-spezifisch | | Entwicklung | | | | Experimentelle Funktion umschalten | /experimental, --experimental | Laufzeitkennzeichnung | | Verwaltung benutzerdefinierter Anweisungen | --no-custom-instructions | CLI-Kennzeichnung | | Diagnosesitzung | /diagnose | TUI-Befehl | | Anzeigen/Verwalten von Anweisungen | /instructions | TUI-Befehl | | Sammeln von Debugprotokollen | /collect-debug-logs | Diagnosetool | | Arbeitsbereich neu indizieren | /reindex | TUI-Befehl | | IDE-Integration | /ide | IDE-spezifischer Workflow | | Nicht interaktiver Modus | | | | Prompt-Modus | -p, --prompt | Einzellaufausführung | | Interaktive Eingabeaufforderung | -i, --interactive | Automatisch ausführen, dann interaktiv | | Stille Ausgabe | -s, --silent | Skriptfreundlich | | Sitzung fortsetzen | --continue | Letzte Fortsetzung | | 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](#workarounds) ).
    
  •         **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](https://github.com/github/copilot-sdk/issues) , 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);