SessionConfig
Con la claseSessionConfig 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);
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.