Saltar al contenido principal

Reanudar sesión

Cómo reanudar sesiones anteriores.

Uso interactivo tipo chat en un comando Artisan

// Obtén la lista de sesiones anteriores con listSessions
$sessions = Copilot::client()->listSessions();

// Elige con Laravel\Prompts\select (u otro) el ID de la sesión a reanudar
$sessions = collect(Copilot::client()->listSessions())
    ->mapWithKeys(function (SessionMetadata $session) {
        return [$session->sessionId => $session->summary ?? ''];
    })
    ->toArray();

$session_id = select(
    label: 'What session do you want to resume?',
    options: $sessions,
);

// Reanuda la sesión con el ID seleccionado
$session = Copilot::client()->resumeSession($session_id);

// Recupera los mensajes anteriores
$messages = $session->getMessages();

Usar un ID de sesión fijo

Si el uso no es interactivo, no se puede seleccionar, así que indica desde el principio un ID fijo. Prepara un ID basado en el ID de usuario o algún tipo de contexto.
Por ejemplo, si vas a usarlo con múltiples usuarios en un servicio web, este método —preparar el ID de antemano— es el adecuado.
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;

$config = new SessionConfig(
    sessionId: 'user-123-conversation',
);

Copilot::start(function (CopilotSession $session) {
    dump('Starting Copilot session: '.$session->id());

    $response = $session->sendAndWait(prompt: 'Tell me something about Laravel.');
}, config: $config);
Con Copilot::start también puedes indicar el modo de reanudación mediante el argumento resume.
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\ResumeSessionConfig;

// En ResumeSessionConfig no se puede indicar sessionId
$config = new ResumeSessionConfig();

Copilot::start(function (CopilotSession $session) {
    dump('Starting Copilot session: '.$session->id());

    $response = $session->sendAndWait(prompt: 'Tell me something about Laravel.');
}, config: $config, resume: 'user-123-conversation');
Dentro de la clausura de Copilot::start también puedes descartar la sesión actual y reanudar una nueva:
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;

Copilot::start(function (CopilotSession $session) {
    dump('Starting Copilot session: '.$session->id());

    $session->disconnect();

    $session = Copilot::client()->resumeSession(sessionId: 'user-123-conversation');

    $response = $session->sendAndWait(prompt: 'Tell me something about Laravel.');
});

Reanudar la última sesión

Si no existe una sesión, getLastSessionId() devuelve null y se inicia automáticamente como sesión nueva. También puedes cambiar el SessionConfig.
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Types\ResumeSessionConfig;
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;

$session_id = Copilot::client()->getLastSessionId();

if (empty($session_id)) {
    $config = new SessionConfig();
} else {
    $config = new ResumeSessionConfig();
}

Copilot::start(function (CopilotSession $session) {
    dump('Starting Copilot session: '.$session->id());

    $response = $session->sendAndWait(prompt: 'Tell me something about Laravel.');
}, config: $config, resume: $session_id);

Usar SessionMetadata

getSessionMetadata() también devuelve null si la sesión no existe, por lo que se inicia igualmente como nueva. Puedes obtener también la fecha de creación y de actualización de la sesión.
use Revolution\Copilot\Types\SessionMetadata;
use Revolution\Copilot\Facades\Copilot;

$meta = Copilot::client()->getSessionMetadata('user-123-conversation');
Consulta la información más reciente en el repositorio de GitHub.
Última modificación el 13 de julio de 2026