Saltar al contenido principal

SessionConfig

Con la clase SessionConfig puedes configurar múltiples opciones. Se usa como Copilot::run(prompt: '...', config: $config) o Copilot::start(function (CopilotSession $session) { ... }, config: $config). Cuando solo quieres indicar el modelo y no vale la pena usar la clase SessionConfig, puedes pasarla como array: 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(
    // Modelo que se va a usar
    model: 'auto',

    // Indica un session ID fijo al crear una sesión nueva
    sessionId: 'session-123',

    clientName: 'my-app',

    // Nivel de razonamiento. Solo se puede configurar en modelos que lo soporten.
    reasoningEffort: ReasoningEffort::HIGH,

    // Sobreescribe las capabilities del modelo. Se aplica deep-merge sobre los valores por defecto del runtime.
    // modelCapabilities: new ModelCapabilitiesOverride(
    //     supports: new ModelCapabilitiesOverrideSupports(vision: true, reasoningEffort: true),
    //     limits: new ModelCapabilitiesOverrideLimits(max_prompt_tokens: 200000),
    // ),
    // También se puede indicar como array
    // modelCapabilities: ['supports' => ['vision' => true]],

    // Sobreescribe el directorio de configuración
    configDirectory: '',

    // Activa el descubrimiento automático de configuración MCP y directorios de skills
    // Detecta automáticamente `.mcp.json` o `.vscode/mcp.json` en el working directory y
    // los combina con los `mcpServers` o `skillDirectories` indicados explícitamente (si hay conflicto de nombres, gana lo indicado explícitamente)
    enableConfigDiscovery: true,

    // Herramientas personalizadas
    tools: [...],

    // Mensaje de sistema
    systemMessage: new SystemMessageConfig(
        content: 'You are a helpful assistant for Laravel developers.',
    ),

    // Mensaje de sistema: modo replace (sustituye totalmente el system prompt)
    // systemMessage: new SystemMessageConfig(
    //     mode: 'replace',
    //     content: 'カスタムシステムプロンプト全体',
    // ),

    // Mensaje de sistema: modo customize (sobreescritura por secciones)
    // 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モード同様の追加コンテンツ(オプション)',
    // ),

    // Proveedor personalizado
    provider: new ProviderConfig(),

    // Token de GitHub por sesión (soporte multi-tenant)
    // Aparte del github_token a nivel de cliente, puedes indicar un token por sesión
    gitHubToken: $user->github_token,

    // Modo de funcionamiento de la sesión remota
    // 'off' - solo local (por defecto)
    // 'export' - exporta los eventos de la sesión a GitHub (sin remote steering)
    // 'on' - habilita tanto la exportación como el remote steering
    remoteSession: \Revolution\Copilot\Enums\RemoteSessionMode::Export,

    // Cloud session (crea la sesión en la nube en lugar de en local)
    // Opcionalmente puedes asociar información del repositorio
    cloud: new \Revolution\Copilot\Types\CloudSessionOptions(
        repository: new \Revolution\Copilot\Types\CloudSessionRepository(
            owner: 'myorg',
            name: 'myrepo',
            branch: 'main',
        ),
    ),

    onPermissionRequest: function (array $request) {
        // Procesa la solicitud de permiso
    },

    onUserInputRequest: function (UserInputRequest $request) {
        // Procesa la solicitud de entrada del usuario. ask_user
    },

    // Handler de solicitudes de elicitation
    // Al configurarlo, recibes las solicitudes de diálogo con UI basada en formulario que envía el agente
    onElicitationRequest: function (ElicitationContext $context) {
        // Procesa la solicitud de elicitation
        return ['action' => 'accept', 'content' => ['field' => 'value']];
    },

    // Handler de solicitudes de salida del modo plan
    // Al configurarlo, recibes la solicitud del agente cuando termina el modo plan
    onExitPlanModeRequest: function (ExitPlanModeRequest $request) {
        // Revisa el contenido del plan y aprueba o rechaza
        return new ExitPlanModeResult(approved: true, selectedAction: $request->recommendedAction);
    },

    // Handler de solicitudes de cambio automático de modo
    // Cuando se alcanza el rate limit, puedes decidir si aceptar el cambio al modo auto
    onAutoModeSwitchRequest: function (AutoModeSwitchRequest $request) {
        // Devuelve "yes", "yes_always" o "no"
        return 'yes';
    },

    // Hooks de sesión
    hooks: [],

    // Directorio de trabajo
    workingDirectory: '',

    // Habilita el streaming
    streaming: true,

    // Incluir los eventos de streaming de subagentes en el stream principal (por defecto: true)
    includeSubAgentStreamingEvents: true,

    // Herramientas integradas disponibles
    availableTools: ['read_file', 'write_file'],

    // O las que se excluyen
    excludedTools: ['shell'],

    // Configuración de servidores MCP
    mcpServers: [
        'github' => [
            'type' => 'http',
            'url' => 'https://api.githubcopilot.com/mcp/',
        ],
    ],

    // Agentes personalizados
    customAgents: [
        [
            'name' => 'reviewer',
            'displayName' => 'Code Reviewer',
            'description' => 'Reviews code for best practices',
            'prompt' => 'You are an expert code reviewer.',
        ],
    ],

    // Configuración del agente por defecto. Configuración del agente integrado que se usa cuando no hay un agente personalizado seleccionado.
    // excludedTools: lista de herramientas que se excluyen del agente por defecto.
    // Sigue estando disponible para los subagentes personalizados.
    defaultAgent: ['excludedTools' => ['tool_name']],

    // Indica el agente que se activará al inicio de la sesión. Debe coincidir con el name de customAgents.
    agent: 'reviewer',

    // Directorios de skills
    skillDirectories: [],

    // Skills deshabilitadas
    disabledSkills: [],

    // Configuración de infinite sessions. Habilitada por defecto.
    infiniteSessions: new InfiniteSessionConfig(
        enabled: true,
        backgroundCompactionThreshold: 0.80, // empieza la compactación al 80 % del uso de contexto
        bufferExhaustionThreshold: 0.95,     // bloquea al 95 % hasta que termine la compactación
    ),

    // Deshabilitar infinite sessions
    // infiniteSessions: new InfiniteSessionConfig(enabled: false),

    // Registra el handler de eventos antes de la RPC de creación de sesión.
    // Se usa para no perder eventos tempranos como session.start.
    // Equivale a llamar después a $session->on($handler), pero se registra en una fase del ciclo de vida más temprana.
    onEvent: function (SessionEvent $event) {
        // Recibe todos los eventos de sesión
    },
);

$response = Copilot::run('...', config: $config);
Al reanudar sesión se usa la clase ResumeSessionConfig. Es casi igual a SessionConfig, con pequeñas diferencias. En ResumeSessionConfig indicas solo las opciones que quieres cambiar; el resto hereda la configuración del inicio de la sesión. Para ejecución en cloud consulta Cloud Sessions; para Plugin Directory consulta Plugin Directories.
Consulta la información más reciente en el repositorio de GitHub.
Última modificación el 13 de julio de 2026