SessionConfig
Die KlasseSessionConfig ermöglicht vielfältige Einstellungen.
Sie wird wie folgt verwendet: Copilot::run(prompt: '...', config: $config) oder Copilot::start(function (CopilotSession $session) { ... }, config: $config).
Wenn Sie – etwa nur ein Modell setzen wollen – die Klasse SessionConfig gar nicht benötigen, ist auch die Angabe als Array möglich: Copilot::run(prompt: '...', config: ['model' => 'auto']).
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Types\SystemMessageConfig;
use Revolution\Copilot\Types\InfiniteSessionConfig;
use Revolution\Copilot\Types\UserInputRequest;
use Revolution\Copilot\Types\Rpc\ModelCapabilitiesOverride;
use Revolution\Copilot\Types\Rpc\ModelCapabilitiesOverrideSupports;
use Revolution\Copilot\Types\Rpc\ModelCapabilitiesOverrideLimits;
use Revolution\Copilot\Enums\ReasoningEffort;
$config = new SessionConfig(
// Zu verwendendes Modell
model: 'auto',
// Feste Session-ID beim Erstellen einer neuen Session
sessionId: 'session-123',
clientName: 'my-app',
// Reasoning-Level. Nur bei unterstützten Modellen einstellbar.
reasoningEffort: ReasoningEffort::HIGH,
// Override der Modell-Capabilities. Wird deep-merged in die Runtime-Standardwerte.
// modelCapabilities: new ModelCapabilitiesOverride(
// supports: new ModelCapabilitiesOverrideSupports(vision: true, reasoningEffort: true),
// limits: new ModelCapabilitiesOverrideLimits(max_prompt_tokens: 200000),
// ),
// Auch als Array angebbar
// modelCapabilities: ['supports' => ['vision' => true]],
// config-Verzeichnis überschreiben
configDirectory: '',
// Automatische Erkennung von MCP-Konfigurationen und Skill-Verzeichnissen aktivieren
// Findet .mcp.json oder .vscode/mcp.json automatisch im Arbeitsverzeichnis
// und merged sie mit explizit angegebenen mcpServers und skillDirectories
// (bei Namenskonflikt hat die explizite Angabe Vorrang)
enableConfigDiscovery: true,
// Benutzerdefinierte Tools
tools: [...],
// System-Nachricht
systemMessage: new SystemMessageConfig(
content: 'You are a helpful assistant for Laravel developers.',
),
// System-Nachricht: replace-Modus (System-Prompt vollständig ersetzen)
// systemMessage: new SystemMessageConfig(
// mode: 'replace',
// content: 'カスタムシステムプロンプト全体',
// ),
// System-Nachricht: customize-Modus (abschnittsweise überschreiben)
// systemMessage: new SystemMessageConfig(
// mode: 'customize',
// sections: [
// 'tone' => new SectionOverride(action: SectionOverrideAction::REPLACE, content: 'Always respond in Japanese.'),
// 'safety' => new SectionOverride(action: SectionOverrideAction::REMOVE),
// 'custom_instructions' => new SectionOverride(action: SectionOverrideAction::APPEND, content: 'Additional instructions here.'),
// ],
// content: 'appendモード同様の追加コンテンツ(オプション)',
// ),
// Benutzerdefinierter Provider
provider: new ProviderConfig(),
// GitHub-Token pro Session (Multi-Tenant)
// Unabhängig vom github_token auf Client-Ebene lässt sich das Token pro Session festlegen
gitHubToken: $user->github_token,
// Betriebsmodus der Remote-Session
// 'off' - nur lokal (Standard)
// 'export' - Session-Events an GitHub exportieren (ohne Remote-Steering)
// 'on' - Export und Remote-Steering aktiviert
remoteSession: \Revolution\Copilot\Enums\RemoteSessionMode::Export,
// Cloud-Session (Session in der Cloud statt lokal erzeugen)
// Optional Repository-Informationen verknüpfen
cloud: new \Revolution\Copilot\Types\CloudSessionOptions(
repository: new \Revolution\Copilot\Types\CloudSessionRepository(
owner: 'myorg',
name: 'myrepo',
branch: 'main',
),
),
onPermissionRequest: function (array $request) {
// Berechtigungsanfrage verarbeiten
},
onUserInputRequest: function (UserInputRequest $request) {
// Benutzereingabe-Anfrage verarbeiten (ask_user)
},
// Handler für Elicitation-Requests
// Wenn gesetzt, können formularbasierte UI-Dialog-Requests des Agenten empfangen werden
onElicitationRequest: function (ElicitationContext $context) {
// Elicitation-Request verarbeiten
return ['action' => 'accept', 'content' => ['field' => 'value']];
},
// Handler für den Plan-Mode-Beendigungs-Request
// Wenn gesetzt, wird der Request empfangen, wenn der Agent den Plan-Mode verlassen möchte
onExitPlanModeRequest: function (ExitPlanModeRequest $request) {
// Planinhalt prüfen und genehmigen/ablehnen
return new ExitPlanModeResult(approved: true, selectedAction: $request->recommendedAction);
},
// Handler für Auto-Mode-Umschaltanfragen
// Ermöglicht, bei Erreichen der Rate-Limits das Umschalten in den Auto-Modus zu erlauben
onAutoModeSwitchRequest: function (AutoModeSwitchRequest $request) {
// Einen von "yes", "yes_always", "no" zurückgeben
return 'yes';
},
// Session-Hooks
hooks: [],
// Arbeitsverzeichnis
workingDirectory: '',
// Streaming aktivieren
streaming: true,
// Ob Streaming-Events der Sub-Agenten in den Hauptstream einbezogen werden (Standard: true)
includeSubAgentStreamingEvents: true,
// Verfügbare Built-in-Tools
availableTools: ['read_file', 'write_file'],
// Alternativ: auszuschließende Tools
excludedTools: ['shell'],
// MCP-Server-Konfiguration
mcpServers: [
'github' => [
'type' => 'http',
'url' => 'https://api.githubcopilot.com/mcp/',
],
],
// Benutzerdefinierte Agenten
customAgents: [
[
'name' => 'reviewer',
'displayName' => 'Code Reviewer',
'description' => 'Reviews code for best practices',
'prompt' => 'You are an expert code reviewer.',
],
],
// Konfiguration des Standard-Agenten. Wird verwendet, wenn kein Custom-Agent gewählt ist.
// excludedTools: Liste der Tools, die dem Standard-Agenten entzogen werden.
// Für Custom-Sub-Agenten bleiben sie verfügbar.
defaultAgent: ['excludedTools' => ['tool_name']],
// Beim Session-Start zu aktivierender Agent. Muss mit dem name eines customAgents übereinstimmen.
agent: 'reviewer',
// Skill-Verzeichnisse
skillDirectories: [],
// Deaktivierte Skills
disabledSkills: [],
// Konfiguration für Infinite Sessions. Standardmäßig aktiviert.
infiniteSessions: new InfiniteSessionConfig(
enabled: true,
backgroundCompactionThreshold: 0.80, // Kompaktierung startet bei 80 % Kontextauslastung
bufferExhaustionThreshold: 0.95, // Blockiert bei 95 %, bis die Kompaktierung abgeschlossen ist
),
// Infinite Sessions deaktivieren
// infiniteSessions: new InfiniteSessionConfig(enabled: false),
// Event-Handler vor dem Session-Erzeugungs-RPC registrieren.
// Wird verwendet, damit frühe Events wie session.start nicht verloren gehen.
// Entspricht einem späteren Aufruf von $session->on($handler), wird jedoch früher im Lebenszyklus registriert.
onEvent: function (SessionEvent $event) {
// Alle Session-Events empfangen
},
);
$response = Copilot::run('...', config: $config);
ResumeSessionConfig. Sie ist fast identisch mit SessionConfig, weist aber geringfügige Unterschiede auf. In ResumeSessionConfig geben Sie nur die Optionen an, die Sie ändern möchten. Alle übrigen Einstellungen der ursprünglich gestarteten Session werden übernommen.
Details zur Cloud-Ausführung finden Sie unter Cloud Sessions, zu Plugin Directories unter Plugin Directories.
Aktuelle Informationen finden Sie im GitHub-Repository.