SessionConfig
La classeSessionConfig permet un large éventail de réglages.
Elle s’utilise ainsi : Copilot::run(prompt: '...', config: $config) ou Copilot::start(function (CopilotSession $session) { ... }, config: $config).
Lorsque vous voulez juste indiquer un modèle sans passer par la classe SessionConfig, un tableau suffit : 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(
// Modèle à utiliser
model: 'auto',
// ID de session fixe pour une nouvelle session
sessionId: 'session-123',
clientName: 'my-app',
// Niveau de raisonnement. Configurable uniquement pour les modèles compatibles.
reasoningEffort: ReasoningEffort::HIGH,
// Surcharge des capacités du modèle. Fusion profonde avec les valeurs par défaut du runtime.
// modelCapabilities: new ModelCapabilitiesOverride(
// supports: new ModelCapabilitiesOverrideSupports(vision: true, reasoningEffort: true),
// limits: new ModelCapabilitiesOverrideLimits(max_prompt_tokens: 200000),
// ),
// Peut aussi être spécifié sous forme de tableau
// modelCapabilities: ['supports' => ['vision' => true]],
// Surcharge du répertoire de configuration
configDirectory: '',
// Active l'auto-détection des configurations MCP et des skillDirectories
// Détecte automatiquement .mcp.json et .vscode/mcp.json depuis le workingDirectory
// et les fusionne avec les mcpServers / skillDirectories spécifiés (en cas de conflit de nom, l'explicite l'emporte)
enableConfigDiscovery: true,
// Outils personnalisés
tools: [...],
// Message système
systemMessage: new SystemMessageConfig(
content: 'You are a helpful assistant for Laravel developers.',
),
// Message système : mode replace (remplace intégralement le prompt système)
// systemMessage: new SystemMessageConfig(
// mode: 'replace',
// content: 'Prompt système personnalisé complet',
// ),
// Message système : mode customize (surcharge par section)
// 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: 'Contenu additionnel similaire au mode append (optionnel)',
// ),
// Fournisseur personnalisé
provider: new ProviderConfig(),
// Token GitHub par session (compatible multi-locataire)
// Distinct du github_token de niveau client, on peut spécifier un token par session
gitHubToken: $user->github_token,
// Mode de fonctionnement des sessions distantes
// 'off' - local seulement (défaut)
// 'export' - exporte les événements de session vers GitHub (sans steering distant)
// 'on' - active à la fois l'export et le steering distant
remoteSession: \Revolution\Copilot\Enums\RemoteSessionMode::Export,
// Cloud sessions (crée la session dans le cloud plutôt qu'en local)
// Vous pouvez associer optionnellement des informations de dépôt
cloud: new \Revolution\Copilot\Types\CloudSessionOptions(
repository: new \Revolution\Copilot\Types\CloudSessionRepository(
owner: 'myorg',
name: 'myrepo',
branch: 'main',
),
),
onPermissionRequest: function (array $request) {
// Traiter les demandes de permission
},
onUserInputRequest: function (UserInputRequest $request) {
// Traiter les demandes d'entrée utilisateur. ask_user
},
// Gestionnaire des requêtes d'elicitation
// Configuré, il reçoit les requêtes de dialogue UI (basé sur formulaire) émises par l'agent
onElicitationRequest: function (ElicitationContext $context) {
// Traiter la requête d'elicitation
return ['action' => 'accept', 'content' => ['field' => 'value']];
},
// Gestionnaire de sortie du Plan Mode
// Configuré, il reçoit la requête émise quand l'agent sort du plan mode
onExitPlanModeRequest: function (ExitPlanModeRequest $request) {
// Consulter le plan et l'approuver ou le refuser
return new ExitPlanModeResult(approved: true, selectedAction: $request->recommendedAction);
},
// Gestionnaire des requêtes de bascule vers le mode auto
// Permet, en cas de limite de débit atteinte, d'autoriser le passage en mode auto
onAutoModeSwitchRequest: function (AutoModeSwitchRequest $request) {
// Renvoyer "yes", "yes_always" ou "no"
return 'yes';
},
// Hooks de session
hooks: [],
// Répertoire de travail
workingDirectory: '',
// Activer le streaming
streaming: true,
// Inclure les événements de streaming des sous-agents dans le flux principal (par défaut : true)
includeSubAgentStreamingEvents: true,
// Outils intégrés disponibles
availableTools: ['read_file', 'write_file'],
// Ou outils à exclure
excludedTools: ['shell'],
// Configuration des serveurs MCP
mcpServers: [
'github' => [
'type' => 'http',
'url' => 'https://api.githubcopilot.com/mcp/',
],
],
// Agents personnalisés
customAgents: [
[
'name' => 'reviewer',
'displayName' => 'Code Reviewer',
'description' => 'Reviews code for best practices',
'prompt' => 'You are an expert code reviewer.',
],
],
// Configuration de l'agent par défaut. Utilisé lorsqu'aucun agent personnalisé n'est sélectionné.
// excludedTools : liste d'outils à exclure de l'agent par défaut.
// Ils restent disponibles pour les sous-agents personnalisés.
defaultAgent: ['excludedTools' => ['tool_name']],
// Agent à activer au démarrage de la session. Doit correspondre à un name de customAgents.
agent: 'reviewer',
// Répertoires de skills
skillDirectories: [],
// Skills désactivés
disabledSkills: [],
// Configuration des sessions infinies. Activée par défaut.
infiniteSessions: new InfiniteSessionConfig(
enabled: true,
backgroundCompactionThreshold: 0.80, // Démarre la compaction à 80 % d'utilisation du contexte
bufferExhaustionThreshold: 0.95, // Bloque à 95 % jusqu'à la fin de la compaction
),
// Désactiver les sessions infinies
// infiniteSessions: new InfiniteSessionConfig(enabled: false),
// Enregistre un gestionnaire d'événements avant le RPC de création de session.
// Sert à ne pas rater des événements précoces comme session.start.
// Équivalent à appeler $session->on($handler) plus tard, mais enregistré plus tôt dans le cycle de vie.
onEvent: function (SessionEvent $event) {
// Reçoit tous les événements de session
},
);
$response = Copilot::run('...', config: $config);
ResumeSessionConfig. Elle ressemble beaucoup à SessionConfig avec quelques différences. ResumeSessionConfig ne spécifie que les champs à changer ; les autres sont hérités de la configuration initiale.
Pour l’exécution dans le cloud, voir Cloud Sessions ; pour les Plugin Directories, voir Plugin Directories.
Pour les dernières informations, consultez le dépôt GitHub.