Passer au contenu principal

SessionConfig

La classe SessionConfig 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);
Pour reprendre une session, utilisez la classe 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.
Dernière modification le 13 juillet 2026