Skip to main content

Hooks de session

Les hooks vous permettent d’intercepter et de personnaliser le comportement des sessions Copilot aux points clés du cycle de vie de la conversation. Utilisez des crochets pour :

  • Exécution de l’outil de contrôle : approuver, refuser ou modifier des appels d’outil
  • Transformer les résultats - modifier les sorties de l’outil avant qu’elles ne soient traitées
  • Ajouter un contexte - injecter des informations supplémentaires au début de la session
  • Gérer les erreurs - Implémenter la gestion des erreurs personnalisée
  • Audit et journal - suivre toutes les interactions pour la conformité

Crochets disponibles

HookDéclencheurCas d’usage
Hook exécuté avant l’utilisation d’un outilAvant qu'un outil ne s'exécuteContrôle d’autorisation, validation des arguments
Hook exécuté après l’utilisation d’un outilUne fois qu’un outil s’exécute (réussite uniquement)Transformation des résultats, journalisation
Hook exécuté après l’utilisation d’un outilAprès une exécution d’outil dont le résultat était un échecAjouter des instructions de nouvelle tentative, journaliser les échecs
Hook déclenché à la soumission d’un prompt utilisateurLorsque l’utilisateur envoie un messageModification de l’invitation, filtrage
Hooks du cycle de vie de la sessionLa session commenceAjouter un contexte, configurer une session
Hooks du cycle de vie de la sessionFin de sessionNettoyage, analyse
Hook de gestion des erreursUne erreur se produitGestion des erreurs personnalisée

Démarrage rapide

Langages de code navigation

TypeScript
import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient();

const session = await client.createSession({
  hooks: {
    onPreToolUse: async (input) => {
      console.log(`Tool called: ${input.toolName}`);
      // Allow all tools
      return { permissionDecision: "allow" };
    },
    onPostToolUse: async (input) => {
      console.log(`Tool result: ${JSON.stringify(input.toolResult)}`);
      return null; // No modifications
    },
    onSessionStart: async (input) => {
      return { additionalContext: "User prefers concise answers." };
    },
  },
});

Contexte d’appel de hook

Chaque hook reçoit un invocation paramètre avec le contexte de la session active :

ChampCatégorieDescription
sessionIdstringID de la session active

Cela permet aux hooks de maintenir l’état ou d’effectuer une logique spécifique à la session.

Modèles courants

Journalisation de tous les appels d’outils

const session = await client.createSession({
  hooks: {
    onPreToolUse: async (input) => {
      console.log(`[${new Date().toISOString()}] Tool: ${input.toolName}, Args: ${JSON.stringify(input.toolArgs)}`);
      return { permissionDecision: "allow" };
    },
    onPostToolUse: async (input) => {
      console.log(`[${new Date().toISOString()}] Result: ${JSON.stringify(input.toolResult)}`);
      return null;
    },
  },
});

Blocage des outils dangereux

const BLOCKED_TOOLS = ["shell", "bash", "exec"];

const session = await client.createSession({
  hooks: {
    onPreToolUse: async (input) => {
      if (BLOCKED_TOOLS.includes(input.toolName)) {
        return {
          permissionDecision: "deny",
          permissionDecisionReason: "Shell access is not permitted",
        };
      }
      return { permissionDecision: "allow" };
    },
  },
});

Ajout d’un contexte utilisateur

const session = await client.createSession({
  hooks: {
    onSessionStart: async () => {
      const userPrefs = await loadUserPreferences();
      return {
        additionalContext: `User preferences: ${JSON.stringify(userPrefs)}`,
      };
    },
  },
});

Guides de fixation

Voir aussi