Skip to main content

Introdução Rápida para Hooks

Comece a usar ganchos em SDK do Copilot para controlar a execução da ferramenta, transformar resultados, adicionar contexto, manipular erros e auditar interações.

Quem pode usar esse recurso?

SDK do GitHub Copilot está disponível com todos os Copilot planos.

Observação

SDK do Copilot está atualmente em versão prévia técnica. A funcionalidade e a disponibilidade estão sujeitas a alterações.

Os ganchos permitem interceptar e personalizar o comportamento das SDK do Copilot sessões em momentos-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 log** – acompanhar todas as interações para garantir conformidade
    

Ganchos disponíveis

GanchoGatilhoCaso de uso
onPreToolUseAntes que uma ferramenta seja executadaControle de permissão, validação de argumento
onPostToolUseApós a execução de uma ferramentaTransformação de resultados, registro em log
onUserPromptSubmittedQuando o usuário envia uma mensagemModificação de prompt, filtragem
onSessionStartA sessão começaAdicionar contexto, configurar sessão
onSessionEndTérmino da sessãoLimpeza, análise
onErrorOccurredErro ocorreTratamento de erros personalizados

Início rápido

O exemplo a seguir demonstra como registrar ganchos ao criar uma sessão em Node.js/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.",
      };
    },
  },
});

Para obter exemplos em Python, Go e .NET, consulte o github/copilot-sdk repositório.

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

Próximas Etapas 

  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/pre-tool-use)
    
  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/post-tool-use)
    
  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/user-prompt-submitted)
    
  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/session-lifecycle)
    
  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/error-handling)