Skip to main content

Сессионные хуки

Крючки позволяют перехватывать и настраивать поведение сессий Copilot в ключевые моменты жизненного цикла разговора. Используйте крючки, чтобы:

  • Выполнение инструментов управления — одобрение, отклонение или изменение вызовов инструментов
  • Преобразование результатов — модифицировать выходы инструментов до их обработки
  • Добавить контекст — ввести дополнительную информацию при начале сессии
  • Обработка ошибок — реализация пользовательской обработки ошибок
  • Аудит и журнал — отслеживайте все взаимодействия для соответствия требованиям

Доступные крючки

ХукТриггерВариант использования
Крючок для использования до использования инструментаДо запуска инструментаКонтроль разрешений, проверка аргументов
Крючок после использования инструментаПосле запуска инструмента (только успех)Преобразование результата, логирование
Крючок после использования инструментаПосле выполнения инструмента, результат которого оказался неудачнымИнжекция повторных инструкций, сбои журнала
Хук, присланный пользовательским запросомКогда пользователь отправляет сообщениеИзменение подсказок, фильтрация
Крючки жизненного цикла сессииНачало сессииДобавьте контекст, настройте сессию
Крючки жизненного цикла сессииСессия завершенаОчистка, аналитика
Крюк для обработки ошибокОшибка возникаетОбработка пользовательских ошибок

Быстрый старт

Языки кода 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." };
    },
  },
});

Контекст вызова крюка

Каждый крюк получает invocation параметр с контекстом текущей сессии:

ПолеТипDescription
sessionIdstringID текущей сессии

Это позволяет хукам сохранять состояние или выполнять логику, специфичную для сессии.

Распространенные шаблоны

Логирование всех вызовов инструментов

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

Блокировка опасных инструментов

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

Добавление пользовательского контекста

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

Гайды по крючкам

См. также