Skip to main content

SessionEvent

Tutti i messaggi provenienti da Copilot sono istanze di Revolution\Copilot\Types\SessionEvent. Poiché questa classe è la più utilizzata, sono state aggiunte funzionalità comode in stile Laravel.

content()

Recupera il messaggio di risposta più importante dell’AI.
Anche la conversione implicita tramite __toString() restituisce il contenuto del messaggio.

Verifica del tipo di evento

Sono disponibili isAssistantMessage(), isUserMessage(), isIdle(), isAssistantMessageDelta(). Per i tipi di evento più usati potrebbero essere aggiunti ulteriori helper. Con is() puoi verificare qualsiasi EventType.
type() restituisce il valore stringa dell’enum SessionEventType.

failed() / successful()

failed() è true quando il tipo di evento è SESSION_ERROR. successful() è l’opposto. Per allinearsi alle convenzioni di naming di Laravel, è stato rinominato da isError().

throw()

Come nelle API HTTP e Process di Laravel, gli errori sono conservati e puoi sollevarli come eccezione con throw(). Se non ci sono errori non fa nulla, quindi puoi scrivere così.
Se il tipo di evento è SESSION_ERROR, viene sollevata Revolution\Copilot\Exceptions\SessionErrorException. In caso di timeout viene sollevata Revolution\Copilot\Exceptions\SessionTimeoutException. Per errori JSON-RPC viene sollevata Revolution\Copilot\Exceptions\JsonRpcException.

Conditionable

Sono disponibili when() e unless().

Dumpable

Sono disponibili dump() e dd().

Tappable

È disponibile tap().

InteractsWithData

Questa funzionalità si applica solo alla proprietà $data di SessionEvent. Puoi usare helper familiari come all(), has(), only(), collect(). Per i dettagli consulta InteractsWithData. Poiché $data di SessionEvent ha struttura diversa per EventType, è comodo per l’accesso ai valori dei singoli eventi. Anche content() usa internamente InteractsWithData.

toArray() / toJson()

Puoi convertire l’intero SessionEvent in array o JSON.
Non esiste un metodo collect() per l’intero evento. Il motivo è che $data dispone del collect() di InteractsWithData. Se vuoi operare sull’intero evento come collezione, usa l’helper collect() di Laravel.

broadcast() / broadcastNow()

Puoi effettuare il broadcast con la stessa interfaccia di StreamEvent di Laravel AI SDK. Nell’AI SDK si usa durante lo streaming, mentre in SessionEvent è utilizzabile per qualsiasi EventType.
broadcastNow() effettua il broadcast immediato senza passare per la coda.
Esempio d’uso in streaming:

Metadati degli eventi

A partire da Copilot CLI 1.0.99, alcuni eventi includono metadati aggiuntivi. L’SDK conserva questi valori così come sono in $data, quindi puoi accedervi tramite $event->data o gli helper di InteractsWithData.

Eventi di compaction

data.compactionAttemptId in session.compaction_start e session.compaction_complete è un ID che collega l’evento di inizio a quello di completamento. Se la compaction comporta un cambio di modello, è incluso anche switchTargetModel. Se il modello di destinazione ha un budget di token del prompt diverso, è incluso anche targetPromptTokenLimit. L’evento di completamento può includere initialModel, model, outcome, outcomeReason, failureReason, tokenAccountingBasis e altro. outcome e i campi di motivazione sono stringhe a cui in futuro potranno essere aggiunti nuovi valori. Non trattarli come un Enum fisso e conserva i valori sconosciuti così come sono. L’assenza di un campo indica che il valore non è stato fornito. Non dedurre un valore predefinito.

Utilizzo dell’esecuzione degli strumenti

data.toolUsage in tool.execution_complete è l’utilizzo riportato dal provider per le operazioni degli strumenti gestite dal runtime. È separato da assistant.usage del modello di conversazione. Può contenere l’utilizzo già riportato anche quando l’esecuzione dello strumento non riesce. toolUsage.model è il modello richiesto dall’operazione dello strumento, non il modello di conversazione. I conteggi dei token e le informazioni di fatturazione possono essere forniti solo in parte. L’assenza di un campo indica che il dato non è disponibile, non 0 token.
I conteggi dei token per modalità in inputTokensDetails e outputTokensDetails sono suddivisioni incluse nei rispettivi totali. Non sommarli ai totali. toolUsage.requestId è un ID che il runtime usa per eliminare consegne duplicate e replay. Non è un identificativo di fatturazione upstream. Anche data.toolUsageRequestIds in session.usage_checkpoint e session.shutdown sono metadati di deduplicazione interni al runtime che identificano le operazioni degli strumenti incluse nello snapshot contabile. Non trattarli come ID di fatturazione upstream.

Eventi di risoluzione Fusion

data.selectedRuleId in session.fusion_resolved identifica la regola del server quando il routing lato server sceglie un workflow diverso dalla regola locale. Viene omesso se non c’è alcuna sostituzione.

Eventi di caricamento degli strumenti del server MCP

SessionEventType::SESSION_MCP_SERVER_TOOLS_LOADED (session.mcp_server_tools_loaded) viene emesso quando l’elenco degli strumenti di un server MCP diventa disponibile. È un evento effimero emesso una sola volta per connessione e non viene persistito. Contiene data.serverName e data.toolCount. Il fatto che un server MCP sia connected non significa che il caricamento degli strumenti sia completato. Dopo che il server lascia lo stato connesso, consideralo in caricamento finché non ricevi di nuovo questo evento. Quando si usano strumenti in cache, questo evento può arrivare prima di connected.
Per le informazioni più recenti fai riferimento al repository GitHub.
Ultima modifica il 19 ottobre 2026