Hook di sessione
Conhooks puoi inserire logica in ciascuna fase del ciclo di vita di una sessione Copilot.
Puoi aggiungere controllo dell’esecuzione degli strumenti, log di audit, arricchimento del prompt, gestione degli errori e altro senza modificare l’implementazione core.
Flusso degli hook
Uso di base
Hook disponibili
Restituendo
null prosegue il comportamento predefinito.
Casi d’uso tipici
1) Permission control (controllo esecuzione)
- Usa
onPreToolUseper applicare una allow-list di strumenti - Le operazioni distruttive richiedono approvazione umana con
permissionDecision: 'ask' - Motiva il rifiuto con
permissionDecisionReason - Consulta l’elenco di Tools per i possibili
toolName(es.view,glob,bash)
2) Auditing / compliance
- Combina gli hook del ciclo di vita per raccogliere eventi di audit
- Persisti i dati raccolti per singolo ID sessione
3) Prompt enrichment (arricchimento input)
- In
onSessionStartaggiungi le informazioni del progetto (linguaggio, framework, convenzioni) inadditionalContext - In
onUserPromptSubmittedespandi shortcut (/fix,/test)
4) Result filtering (formattazione dei risultati)
- In
onPostToolUsemaschera API key / token / password ecc. - Sintetizza i risultati troppo lunghi e restituisci i dettagli solo se necessario
5) Error recovery (ripristino)
- In
onErrorOccurredeseguiretrysolo quandomodel_callerecoverable=true - Per errori non recuperabili notifica in modo conciso l’utente tramite
userNotification
6) Session metrics (misurazione)
- In
onSessionStartregistra l’orario di inizio - In
onPreToolUse/onUserPromptSubmittedaggiorna i contatori - In
onSessionEndemetti durata, numero di strumenti e motivo di terminazione
Tipi di input / output degli hook
Input comune (BaseHookInput)
PreToolUseHookInput
PreToolUseHookOutput
PostToolUseHookInput
PostToolUseHookOutput
UserPromptSubmittedHookInput
UserPromptSubmittedHookOutput
SessionStartHookInput
SessionStartHookOutput
SessionEndHookInput
SessionEndHookOutput
ErrorOccurredHookInput
ErrorOccurredHookOutput
ToolResultObject
Oggetto standard per il risultato di uno strumento.Best practice
- Non eseguire troppi processi sincroni pesanti direttamente negli hook. Se necessario, rendili asincroni.
- Quando non sono necessarie modifiche, restituisci
nulle lascia il comportamento predefinito. - Rendi esplicito
permissionDecisionquando possibile. - Non sopprimere eccessivamente gli errori critici: prevedi percorsi di log/notifica.
- Gestisci lo stato per sessione basandoti sull’ID e ripulisci in
onSessionEnd.
Per le informazioni più recenti fai riferimento al repository GitHub.