// model
$session->rpc()->model()->getCurrent();
$session->rpc()->model()->switchTo(new ModelSwitchToRequest(modelId: 'gpt-4'));
// Con reasoningEffort (solo modelos compatibles)
$session->rpc()->model()->switchTo(new ModelSwitchToRequest(modelId: 'claude-opus-4.7', reasoningEffort: ReasoningEffort::HIGH));
// Sobreescribir modelCapabilities
$session->rpc()->model()->switchTo(new ModelSwitchToRequest(
modelId: 'gpt-4',
modelCapabilities: new ModelCapabilitiesOverride(
supports: new ModelCapabilitiesOverrideSupports(vision: true),
),
));
// Con el helper setModel() también puedes indicar reasoningEffort o modelCapabilities
$session->setModel('claude-opus-4.7', ReasoningEffort::HIGH);
$session->setModel('claude-opus-4.7', 'high'); // String is also supported
$session->setModel('gpt-4', modelCapabilities: ['supports' => ['vision' => true]]); // También como array
// mode
$session->rpc()->mode()->get();
$session->rpc()->mode()->set(new ModeSetRequest(mode: 'plan'));
// name
$session->rpc()->name()->get();
$session->rpc()->name()->set(new NameSetRequest(name: 'My Session'));
// plan
$session->rpc()->plan()->read();
$session->rpc()->plan()->update(new PlanUpdateRequest(content: '...'));
$session->rpc()->plan()->delete();
// workspaces
$session->rpc()->workspaces()->getWorkspace();
$session->rpc()->workspaces()->listFiles();
$session->rpc()->workspaces()->readFile(new WorkspacesReadFileRequest(path: 'file.txt'));
$session->rpc()->workspaces()->createFile(new WorkspacesCreateFileRequest(path: 'file.txt', content: '...'));
// instructions (obtiene las fuentes de instrucciones de la sesión)
$result = $session->rpc()->instructions()->getSources();
// $result->sources - array de InstructionsSources
// fleet
$session->rpc()->fleet()->start(new FleetStartRequest(prompt: '...'));
// Para más detalles, consulta Fleet Mode
// agent
$session->rpc()->agent()->list();
$session->rpc()->agent()->getCurrent();
$session->rpc()->agent()->select(new AgentSelectRequest(agentId: '...'));
$session->rpc()->agent()->deselect();
$session->rpc()->agent()->reload();
// skills (experimental: gestión de skills)
$session->rpc()->skills()->list();
$session->rpc()->skills()->enable(new SkillsEnableRequest(name: 'skill-name'));
$session->rpc()->skills()->disable(new SkillsDisableRequest(name: 'skill-name'));
$session->rpc()->skills()->reload();
// mcp (experimental: gestión de servidores MCP)
$session->rpc()->mcp()->list();
$session->rpc()->mcp()->enable(new McpEnableRequest(serverName: 'server-name'));
$session->rpc()->mcp()->disable(new McpDisableRequest(serverName: 'server-name'));
$session->rpc()->mcp()->reload();
// Login OAuth de MCP (para servidores MCP que requieren autenticación)
$result = $session->rpc()->mcp()->login(new McpOauthLoginRequest(serverName: 'my-server'));
// $result->authorizationUrl - URL del flujo OAuth (si se requiere autenticación)
// plugins (experimental: lista de plugins)
$session->rpc()->plugins()->list();
// extensions (experimental: gestión de extensiones)
$session->rpc()->extensions()->list();
$session->rpc()->extensions()->enable(new ExtensionsEnableRequest(id: 'project:my-ext'));
$session->rpc()->extensions()->disable(new ExtensionsDisableRequest(id: 'project:my-ext'));
$session->rpc()->extensions()->reload();
// compaction → renombrado a history
$session->rpc()->history()->compact();
// Trunca el historial a partir de un evento concreto
$session->rpc()->history()->truncate(new HistoryTruncateRequest(
eventId: 'evt-123', // este evento y todos los posteriores se eliminan
));
// tools (protocolo v3+: respuesta al evento external_tool.requested)
$session->rpc()->tools()->handlePendingToolCall(new ToolsHandlePendingToolCallRequest(
requestId: '...',
result: 'resultado de la ejecución de la herramienta',
));
// permissions (protocolo v3+: respuesta al evento permission.requested)
$session->rpc()->permissions()->handlePendingPermissionRequest(new PermissionDecisionRequest(
requestId: '...',
result: PermissionRequestResultKind::approveOnce(),
));
// Aprueba automáticamente todas las solicitudes de permiso de la sesión
$session->rpc()->permissions()->setApproveAll(new PermissionsSetApproveAllRequest(enabled: true));
// Restablece las aprobaciones de permisos con ámbito de sesión
$session->rpc()->permissions()->resetSessionApprovals();
// commands: respuesta al evento de invocación de comando
$session->rpc()->commands()->handlePendingCommand(new CommandsHandlePendingCommandRequest(
requestId: '...',
));
// ui: respuesta a solicitudes de elicitation de UI
$session->rpc()->ui()->elicitation(new UIElicitationRequest(
message: 'ユーザーへの質問',
requestedSchema: ['type' => 'object', 'properties' => [...]],
));
// ui: respuesta a una solicitud de elicitation pendiente (vía evento elicitation.requested)
$session->rpc()->ui()->handlePendingElicitation(new UIHandlePendingElicitationRequest(
requestId: '...',
result: ['action' => 'accept', 'content' => ['name' => 'John']],
));
// log: registrar mensajes en la timeline de la sesión
$session->rpc()->log()->log(new LogRequest(message: '処理を開始しました'));
$session->rpc()->log()->log(new LogRequest(message: 'ディスク使用量が多い', level: LogLevel::WARNING));
$session->rpc()->log()->log(new LogRequest(message: 'エラーが発生しました', level: LogLevel::ERROR));
$session->rpc()->log()->log(new LogRequest(message: 'デバッグ情報', ephemeral: true));
// shell: ejecutar comandos de shell dentro de la sesión
$result = $session->rpc()->shell()->exec(new ShellExecRequest(command: 'ls -la'));
// Obtén el process ID con $result->processId para hacer kill o seguir la salida
$session->rpc()->shell()->exec(new ShellExecRequest(
command: 'npm test',
cwd: '/path/to/project',
timeout: 60000, // milisegundos
));
// Detener un proceso de shell en ejecución
$session->rpc()->shell()->kill(new ShellKillRequest(
processId: $result->processId,
signal: 'SIGTERM', // SIGTERM (por defecto), SIGKILL, SIGINT
));
// usage (experimental: métricas de uso de la sesión)
$metrics = $session->rpc()->usage()->getMetrics();
// $metrics->totalPremiumRequestCost - coste total de peticiones premium
// $metrics->totalUserRequests - total de peticiones de usuario
// $metrics->codeChanges - métricas de cambios de código (líneas añadidas, eliminadas, ficheros modificados)
// $metrics->modelMetrics - uso de tokens y peticiones por modelo
// $metrics->currentModel - identificador del modelo actual
// auth: obtener el estado de autenticación de la sesión
$status = $session->rpc()->auth()->getStatus();
// $status->isAuthenticated - si está autenticado
// $status->authType - tipo de autenticación (enum AuthInfoType: gh-cli, token, env, etc.)
// $status->login - nombre de login de GitHub
// $status->host - host de GitHub
// $status->copilotPlan - plan de Copilot (individual, business, etc.)
// $status->statusMessage - mensaje sobre el estado de autenticación