SessionConfig
Met de klasseSessionConfig zijn allerlei instellingen mogelijk.
Je gebruikt deze als Copilot::run(prompt: '...', config: $config) of Copilot::start(function (CopilotSession $session) { ... }, config: $config).
Wanneer je bijvoorbeeld alleen een model wilt opgeven en de klasse SessionConfig overbodig is, kun je ook een array gebruiken: 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(
// Het te gebruiken model opgeven
model: 'auto',
// Een vaste session-ID opgeven bij het aanmaken van een nieuwe session
sessionId: 'session-123',
clientName: 'my-app',
// Redeneerniveau. Alleen instelbaar bij modellen die dit ondersteunen.
reasoningEffort: ReasoningEffort::HIGH,
// De capabilities van het model overschrijven. Wordt deep-merged met de standaardwaarden van de runtime.
// modelCapabilities: new ModelCapabilitiesOverride(
// supports: new ModelCapabilitiesOverrideSupports(vision: true, reasoningEffort: true),
// limits: new ModelCapabilitiesOverrideLimits(max_prompt_tokens: 200000),
// ),
// Kan ook als array worden opgegeven
// modelCapabilities: ['supports' => ['vision' => true]],
// De config-directory overschrijven
configDirectory: '',
// Automatische detectie van MCP-configuratie en skill-directories inschakelen
// Detecteert .mcp.json en .vscode/mcp.json automatisch vanuit de werkdirectory
// en merget deze met expliciet opgegeven mcpServers en skillDirectories (bij naamconflicten heeft de expliciete opgave voorrang)
enableConfigDiscovery: true,
// Custom tools
tools: [...],
// Systeembericht
systemMessage: new SystemMessageConfig(
content: 'You are a helpful assistant for Laravel developers.',
),
// Systeembericht: replace-modus (vervangt de systeemprompt volledig)
// systemMessage: new SystemMessageConfig(
// mode: 'replace',
// content: 'De volledige custom systeemprompt',
// ),
// Systeembericht: customize-modus (per sectie overschrijven)
// 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: 'Aanvullende content zoals in de append-modus (optioneel)',
// ),
// Custom provider
provider: new ProviderConfig(),
// GitHub-token per session (voor multi-tenant scenario's)
// Los van het github_token op clientniveau kun je per session een token opgeven
gitHubToken: $user->github_token,
// Werkingsmodus van remote sessions
// 'off' - alleen lokaal (standaard)
// 'export' - session-events naar GitHub exporteren (zonder remote steering)
// 'on' - zowel export als remote steering inschakelen
remoteSession: \Revolution\Copilot\Enums\RemoteSessionMode::Export,
// Cloud sessions (de session in de cloud aanmaken in plaats van lokaal)
// Optioneel kun je repository-informatie koppelen
cloud: new \Revolution\Copilot\Types\CloudSessionOptions(
repository: new \Revolution\Copilot\Types\CloudSessionRepository(
owner: 'myorg',
name: 'myrepo',
branch: 'main',
),
),
onPermissionRequest: function (array $request) {
// Permission requests verwerken
},
onUserInputRequest: function (UserInputRequest $request) {
// User input requests verwerken. ask_user
},
// Handler voor elicitatierequests
// Als deze is ingesteld, kun je formuliergebaseerde UI-dialoogrequests van de agent ontvangen
onElicitationRequest: function (ElicitationContext $context) {
// Elicitatierequests verwerken
return ['action' => 'accept', 'content' => ['field' => 'value']];
},
// Handler voor requests om de plan-modus te verlaten
// Als deze is ingesteld, ontvang je de request wanneer de agent de plan-modus wil verlaten
onExitPlanModeRequest: function (ExitPlanModeRequest $request) {
// De planinhoud controleren en goedkeuren of afwijzen
return new ExitPlanModeResult(approved: true, selectedAction: $request->recommendedAction);
},
// Handler voor requests voor automatische moduswissel
// Je kunt kiezen of het overschakelen naar de auto-modus is toegestaan bij het bereiken van een rate limit
onAutoModeSwitchRequest: function (AutoModeSwitchRequest $request) {
// Retourneer "yes", "yes_always" of "no"
return 'yes';
},
// Session hooks
hooks: [],
// Werkdirectory
workingDirectory: '',
// Streaming inschakelen
streaming: true,
// Of streaming-events van subagents in de hoofdstream worden opgenomen (standaard: true)
includeSubAgentStreamingEvents: true,
// Beschikbare ingebouwde tools
availableTools: ['read_file', 'write_file'],
// Of juist uit te sluiten tools
excludedTools: ['shell'],
// MCP-serverconfiguratie
mcpServers: [
'github' => [
'type' => 'http',
'url' => 'https://api.githubcopilot.com/mcp/',
],
],
// Custom agents
customAgents: [
[
'name' => 'reviewer',
'displayName' => 'Code Reviewer',
'description' => 'Reviews code for best practices',
'prompt' => 'You are an expert code reviewer.',
],
],
// Configuratie van de default agent. Configuratie van de ingebouwde agent die wordt gebruikt als er geen custom agent is geselecteerd.
// excludedTools: lijst met tools die van de default agent worden uitgesloten.
// Blijft wel beschikbaar voor custom subagents.
defaultAgent: ['excludedTools' => ['tool_name']],
// De agent die bij de start van de session actief wordt. Moet overeenkomen met een name in customAgents.
agent: 'reviewer',
// Skill-directories
skillDirectories: [],
// Uitgeschakelde skills
disabledSkills: [],
// Configuratie van infinite sessions. Standaard ingeschakeld.
infiniteSessions: new InfiniteSessionConfig(
enabled: true,
backgroundCompactionThreshold: 0.80, // Start compaction bij 80% contextgebruik
bufferExhaustionThreshold: 0.95, // Blokkeer op 95% totdat de compaction is voltooid
),
// Infinite sessions uitschakelen
// infiniteSessions: new InfiniteSessionConfig(enabled: false),
// Registreer een event-handler vóór de session-create-RPC.
// Gebruik dit om vroege events zoals session.start niet te missen.
// Gelijk aan het later aanroepen van $session->on($handler), maar de registratie vindt eerder in de lifecycle plaats.
onEvent: function (SessionEvent $event) {
// Ontvangt alle session-events
},
);
$response = Copilot::run('...', config: $config);
ResumeSessionConfig. Deze is grotendeels gelijk aan SessionConfig, maar wijkt op enkele punten af. In ResumeSessionConfig geef je alleen de instellingen op die je wilt wijzigen. De rest wordt overgenomen van de configuratie bij het starten van de nieuwe session.
Zie Cloud sessions voor uitvoering in de cloud en Plugin directories voor plugin directories.
Raadpleeg de GitHub-repository voor de meest actuele informatie.