Skip to main content

Ganchos de sessão

Os ganchos permitem interceptar e personalizar o comportamento de sessões de Copilot em pontos-chave no ciclo de vida da conversa. Use ganchos para:

  • Controlar a execução da ferramenta – aprovar, negar ou modificar chamadas de ferramenta
  • Transformar resultados – modificar saídas de ferramenta antes de serem processadas
  • Adicionar contexto – injetar informações adicionais no início da sessão
  • Manipular erros – implementar o tratamento de erros personalizados
  • Auditoria e registro - acompanhe todas as interações para fins de conformidade

Ganchos disponíveis

GanchoGatilhoCaso de uso
Gancho de uso de pré-ferramentaAntes que uma ferramenta seja executadaControle de permissão, validação de argumento
Gancho de uso pós-ferramentaApós a execução de uma ferramenta (apenas em caso de sucesso)Transformação de resultados, registro em log
Gancho de uso pós-ferramentaApós uma execução de ferramenta cujo resultado foi uma falhaInserir orientações para nova tentativa, registrar falhas
Gancho enviado pelo prompt do usuárioQuando o usuário envia uma mensagemModificação de prompt, filtragem
Ganchos de ciclo de vida de sessãoA sessão começaAdicionar contexto, configurar sessão
Ganchos de ciclo de vida de sessãoTérmino da sessãoLimpeza, análise
Gancho de tratamento de errosErro ocorreTratamento de erros personalizados

Início rápido

Idiomas 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 invocação do gancho

Cada gancho recebe um invocation parâmetro com contexto sobre a sessão atual:

CampoTipoDescrição
sessionIdcadeiaO ID da sessão atual

Isso permite que os ganchos mantenham o estado ou executem uma lógica específica da sessão.

Padrões comuns

Registrando todas as chamadas de ferramenta

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

Bloquear ferramentas perigosas

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

Adicionar contexto do usuário

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

Guias de gancho

Consulte também