Skip to main content

SDK- und CLI-Kompatibilität

Dieses Dokument beschreibt, welche Copilot-CLI-Funktionen über das SDK verfügbar sind und welche ausschließlich in der CLI verfügbar sind.

Übersicht

Das Copilot SDK kommuniziert über JSON-RPC Protokoll mit der CLI. 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
Zerstören der Sitzung (veraltet)destroy()Verwenden Sie stattdessen disconnect().
Sitzung löschendeleteSession()Aus Speicher entfernen
Sitzungen auflistenlistSessions()Alle gespeicherten Sitzungen
Letzte Sitzung abrufengetLastSessionId()Schnelles Wiederaufnehmen
Vordergrundsitzung abrufengetForegroundSessionId()Koordination mehrerer Sitzungen
Aktuelle Sitzung in den Vordergrund setzensetForegroundSessionId()Koordination mehrerer Sitzungen
Messaging
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 abrufengetEvents()Alle Sitzungsereignisse
Abbrechenabort()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 KonfigFilterwerkzeuge
Modelle
Modelle auflistenlistModels()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 Tool-Einsatz (Erfolg)onPostToolUseErgebnisse ändern
Verwendung nach dem Einsatz des Tools (Fehler)onPostToolUseFailureBeobachte fehlgeschlagene Toolaufrufe und füge Hinweise für einen erneuten Versuch ein
BenutzeraufforderungonUserPromptSubmittedÄndern von Eingabeaufforderungen
Sitzungsstart/-ende
onSessionStart, onSessionEndLebenszyklus mit Quelle/Grund
FehlerbehandlungonErrorOccurredBenutzerdefinierte Behandlung
Ereignisse
Alle Sitzungsereignisse
on(), once()40+ Ereignistypen
Streamingstreaming: 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 Fähigkeiten
Deaktivierte Fähigkeiten
disabledSkills KonfigurationDeaktivieren bestimmter Fähigkeiten
Konfigurationsverzeichnis
configDir KonfigurationStandardkonfigurationsspeicherort außer Kraft setzen
Client-Name
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.history.compact()Auslösen der Komprimierung bei Bedarf
Verlaufskürzungsession.rpc.history.truncate()Ereignisse ab einem bestimmten Punkt entfernen
Sitzungsaufspaltungserver.rpc.sessions.fork()Eine Sitzung zu einem bestimmten Zeitpunkt in der Historie abspalten

❌ 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 TUI
Dialogfeld "Agentauswahl"/agentInteraktive Benutzeroberfläche
Diff-Modus-Dialog/diffInteraktive Benutzeroberfläche
Feedback-Dialog/feedbackInteraktive Benutzeroberfläche
Theme-Auswahl/themeTerminal-UI
Modellauswahlwerkzeug/modelInteraktive Benutzeroberfläche (verwenden Sie stattdessen SDK setModel() )
In Zwischenablage kopieren/copyTerminalspezifisch
Context-Management/contextInteraktive Benutzeroberfläche
Forschung & Geschichte
Tiefe Forschung/researchTUI-Workflow mit Websuche
Sitzungsverlaufstools/chronicleStandup, Tipps, verbessern, neuindizieren
Terminalfunktionen
Farbausgabe--no-colorTerminalspezifisch
Bildschirmlesemodus--screen-readerAccessibility
Detailliertes Diff-Rendering--plain-diffTerminal-Rendering
Startbanner--bannerVisuelles Element
Streamer-Modus/streamer-modeTUI-Anzeigemodus
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
Tokenverwendung/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, --promptEinzellaufausführung
Interaktive Eingabeaufforderung
-i, --interactiveAutomatisch ausführen, dann interaktiv
Stille Ausgabe
-s, --silentSkriptfreundlich
Sitzung fortsetzen--continueLetzte Fortsetzung
Agentauswahl--agent <agent>CLI-Kennzeichnung

Behelfslösungen

Sitzungsexport

Die --share Option ist über das SDK nicht verfügbar. Problemumgehungen

  1. Manuelles Sammeln von Ereignissen – Abonnieren Sie Sitzungsereignisse, und erstellen Sie Ihren eigenen Export:

    const events: SessionEvent[] = [];
    session.on((event) => events.push(event));
    // ... after conversation ...
    const messages = await session.getEvents();
    // Format as markdown yourself
    
  2. Verwenden Sie die CLI direkt zum Exportieren – Führen Sie die CLI mit --share für einmalige Exporte aus.

Berechtigungsverwaltung

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

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

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

Tokenverwendungsnachverfolgung

Statt /usage abonnieren Sie Nutzungsereignisse:

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:

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

Hinweis

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

Planverwaltung

Programmgesteuertes Lesen und Schreiben von Sitzungsplänen:

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

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

  1. Auf Alternativen überprüfen – Viele Features verfügen über SDK-Entsprechungen (siehe oben beschriebene Problemumgehungen)
  2. Verwenden Sie die CLI direkt – Rufen Sie für einmalige Vorgänge die CLI auf.
  3. Anfordern des Features – Öffnen eines Problems zum Anfordern der Protokollunterstützung

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.

Versionen zur Laufzeit prüfen:

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

Siehe auch