Zum Hauptinhalt springen

SessionConfig

Die Klasse SessionConfig 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);
Beim Fortsetzen einer Session verwenden Sie die Klasse 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.
Zuletzt geändert am 13. Juli 2026