SessionEvent
Alle berichten van Copilot zijn instanties van de klasseRevolution\Copilot\Types\SessionEvent.
Omdat deze klasse het meest wordt gebruikt, zijn er handige Laravel-achtige functies aan toegevoegd.
content()
Haalt het belangrijkste antwoordbericht van de AI op.
__toString() retourneert de inhoud van het bericht.
Het eventtype bepalen
Je kuntisAssistantMessage(), isUserMessage(), isIdle() en isAssistantMessageDelta() gebruiken.
Voor veelgebruikte eventtypes kunnen er nog meer helpers worden toegevoegd.
Met is() kun je op elk willekeurig EventType controleren.
type() retourneert de stringwaarde van de SessionEventType-enum.
session.autopilot_stopped
SessionEventType::SESSION_AUTOPILOT_STOPPED (session.autopilot_stopped) wordt geactiveerd wanneer Autopilot stopt met het voortzetten van een specifieke request.
Gebruik $event->data['requestId'] om de ID van het doelbericht op te halen en $event->data['reason'] om de reden van het stoppen op te halen.
Dit event betekent niet dat de hele sessie idle is geworden.
failed() / successful()
Wanneer het eventtype SESSION_ERROR is, geeft failed() true terug.
successful() is het omgekeerde daarvan.
Om aan te sluiten bij de Laravel-naamgeving is deze hernoemd van isError().
throw()
Net als bij de HTTP API en Process API van Laravel worden fouten bewaard en kun je met throw() een exception gooien.
Als er geen fout is, gebeurt er niets, dus je kunt dit zo schrijven:
SESSION_ERROR wordt een Revolution\Copilot\Exceptions\SessionErrorException gegooid.
Bij een timeout wordt een Revolution\Copilot\Exceptions\SessionTimeoutException gegooid.
Bij JSON-RPC-fouten wordt een Revolution\Copilot\Exceptions\JsonRpcException gegooid.
Conditionable
Je kuntwhen() en unless() gebruiken.
Dumpable
Je kuntdump() en dd() gebruiken.
Tappable
Je kunttap() gebruiken.
InteractsWithData
Deze functionaliteit geldt alleen voor de property$data van SessionEvent.
Je kunt vertrouwde helpers gebruiken zoals all(), has(), only() en collect().
Zie InteractsWithData voor details.
Omdat de structuur van $data van SessionEvent per EventType verschilt, is dit handig om per event waarden op te vragen.
content() gebruikt intern ook InteractsWithData.
toArray() / toJson()
Je kunt de hele SessionEvent omzetten naar een array of JSON.
collect()-methode voor het hele event.
$data heeft namelijk al de collect() van InteractsWithData.
Wil je het hele event als collectie bewerken, gebruik dan de collect()-helper van Laravel.
broadcast() / broadcastNow()
Je kunt broadcasten met dezelfde interface als het StreamEvent van de Laravel AI SDK.
In de AI SDK gebruik je dit bij streaming, maar bij SessionEvent kan het bij elk EventType.
broadcastNow() broadcast direct, zonder via een queue te gaan.
Eventmetadata
Vanaf Copilot CLI 1.0.99 bevatten sommige events extra metadata. De SDK bewaart deze waarden ongewijzigd in$data, zodat je ze kunt opvragen via $event->data of de InteractsWithData-helpers.
Compaction-events
data.compactionAttemptId in session.compaction_start en session.compaction_complete is een ID dat het start-event aan het voltooiings-event koppelt.
Als er een modelwissel bij komt kijken, is ook switchTargetModel aanwezig.
Als het doelmodel een ander prompt-tokenbudget heeft, is ook targetPromptTokenLimit aanwezig.
Het voltooiings-event kan onder meer initialModel, model, outcome, outcomeReason, failureReason en tokenAccountingBasis bevatten.
outcome en de redenvelden zijn strings waaraan in de toekomst nieuwe waarden kunnen worden toegevoegd.
Behandel ze niet als een vaste Enum en bewaar onbekende waarden ongewijzigd.
Een ontbrekend veld betekent dat de waarde niet is opgegeven. Leid geen standaardwaarde af.
Gebruik bij tooluitvoering
data.toolUsage in tool.execution_complete is het door de provider gerapporteerde gebruik voor tooloperaties die eigendom zijn van de runtime.
Dit staat los van assistant.usage van het conversatiemodel.
Ook als de tooluitvoering mislukt, kan het al gerapporteerde gebruik aanwezig zijn.
toolUsage.model is het model dat door de tooloperatie is aangevraagd, niet het conversatiemodel.
Tokenaantallen en factureringsinformatie kunnen slechts gedeeltelijk worden aangeleverd.
Een ontbrekend veld betekent dat de waarde niet beschikbaar is, niet 0 tokens.
inputTokensDetails en outputTokensDetails zijn uitsplitsingen die in de betreffende totalen zijn inbegrepen. Tel ze niet op bij de totalen.
toolUsage.requestId is een ID dat de runtime gebruikt om dubbele aflevering en replays te ontdubbelen. Het is geen upstream factureringsidentificatie.
Ook data.toolUsageRequestIds in session.usage_checkpoint en session.shutdown is runtime-interne ontdubbelingsmetadata die de tooloperaties in de boekhoudsnapshot identificeert.
Behandel dit niet als upstream facturerings-ID’s.
Fusion-resolved-events
data.selectedRuleId in session.fusion_resolved identificeert de serverregel wanneer de routering aan de serverkant een andere workflow kiest dan de lokale regel.
Het veld wordt weggelaten als er geen vervanging is.
Events voor het laden van MCP-servertools
SessionEventType::SESSION_MCP_SERVER_TOOLS_LOADED (session.mcp_server_tools_loaded) wordt geactiveerd wanneer de toollijst van een MCP-server beschikbaar wordt.
Het is een vluchtig event dat één keer per verbinding wordt geactiveerd en niet wordt opgeslagen.
Het bevat data.serverName en data.toolCount.
Dat een MCP-server connected is, betekent niet dat het laden van de tools is voltooid.
Nadat de server de verbonden status heeft verlaten, behandel je hem als ladend totdat je dit event opnieuw ontvangt.
Bij gebruik van gecachte tools kan dit event vóór connected binnenkomen.
Events voor het bijwerken van instructies
SessionEventType::INSTRUCTION_UPDATE (instruction.update) wordt geactiveerd wanneer de runtime gezaghebbende ontwikkelaarsinstructies bijwerkt. Het is toegevoegd in Copilot CLI 1.0.103.
persistent-updates blijven in eventvolgorde behouden en worden hersteld na replay, hervatten, terugspoelen, fork en compaction.
turn-updates zijn tijdelijk en voor deze updates is ephemeral gelijk aan true.
Waarden worden als generieke arrays bewaard, zodat onbekende enumwaarden ongewijzigd worden doorgegeven.
Raadpleeg de GitHub-repository voor de meest actuele informatie.