Skip to main content

Enlaces de sesión

Los ganchos permiten interceptar y personalizar el comportamiento de las sesiones de Copilot en momentos clave del ciclo de vida de la conversación. Usa ganchos para:

  • Controlar la ejecución de herramientas - aprobar, denegar o modificar las llamadas a herramientas
  • Transformar resultados : modificar las salidas de la herramienta antes de procesarlas
  • Adición de contexto : inserción de información adicional al inicio de la sesión
  • Control de errores : implementación del control de errores personalizado
  • Auditoría y registro : realizar un seguimiento de todas las interacciones para el cumplimiento

Enlaces disponibles

EnlaceTriggerCaso de uso
Gancho previo al uso de la herramientaAntes de que se ejecute una herramientaControl de permisos, validación de argumentos
Enlace de uso posterior a la herramientaDespués de ejecutar una herramienta (solo en caso de éxito)Transformación de resultados, registro
Enlace de uso posterior a la herramientaDespués de una ejecución de la herramienta cuyo resultado fue un errorInsertar directrices de reintento, registrar fallos
Enlace enviado de la solicitud de usuarioCuando el usuario envía un mensajeModificación rápida, filtrado
Enlaces de ciclo de vida de sesiónInicio de la sesiónAgregar contexto, configurar sesión
Enlaces de ciclo de vida de sesiónFinaliza la sesiónLimpieza, análisis
Gancho de manejo de erroresSe produce un errorControl de errores personalizado

Inicio rápido

Lenguajes de código 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." };
    },
  },
});

Contexto de invocación del enlace

Cada hook recibe un parámetro invocation con información sobre la sesión actual:

CampoTipoDescripción
sessionIdstringIdentificador de la sesión actual

Esto permite que los hooks conserven el estado o realicen lógica específica de la sesión.

Patrones comunes

Registro de todas las llamadas a herramientas

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;
    },
  },
});

Bloqueo de herramientas peligrosas

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" };
    },
  },
});

Agregar contexto de usuario

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

Guías de enlace

Consulte también