Skip to main content

Использование крючков с агентами GitHub Copilot

Узнайте, как расширять и настраивать поведение агента GitHub Copilot, выполняя пользовательские команды shell в ключевых точках выполнения агента.

Крючки позволяют расширять и настраивать поведение агентов GitHub Copilot, выполняя пользовательские команды shell в ключевых точках во время выполнения агента. Для концептуального обзора крючков см. О крючках.

Создание крючка в репозитории на GitHub

  1. Создайте новый hooks.json файл с выбранным именем в .github/hooks/ папке вашего репозитория. Конфигурационный файл hooks должен находиться на стандартной ветке вашего репозитория, чтобы использовать Агент кодирования Copilot. Для GitHub Copilot CLI хуки загружаются из текущей рабочей директории.

  2. В вашем текстовом редакторе скопируйте и вставьте следующий шаблон крючка. Уберите все крючки, которые не планируете использовать, из массива hooks .

    JSON
    {
      "version": 1,
      "hooks": {
        "sessionStart": [...],
        "sessionEnd": [...],
        "userPromptSubmitted": [...],
        "preToolUse": [...],
        "postToolUse": [...],
        "errorOccurred": [...]
      }
    }
    
  3. Настройте синтаксис хука под bash клавишами или powershell напрямую ссылайтесь на созданные вами скрипт-файлы.

    • В этом примере запускается скрипт, который выводит дату начала сессии в файл журнала с помощью хука sessionStart :

      JSON
      "sessionStart": [
        {
          "type": "command",
          "bash": "echo \"Session started: $(date)\" >> logs/session.log",
          "powershell": "Add-Content -Path logs/session.log -Value \"Session started: $(Get-Date)\"",
          "cwd": ".",
          "timeoutSec": 10
        }
      ],
      
    • Этот пример вызывает внешний log-prompt скрипт:

      JSON
      "userPromptSubmitted": [
        {
          "type": "command",
          "bash": "./scripts/log-prompt.sh",
          "powershell": "./scripts/log-prompt.ps1",
          "cwd": "scripts",
          "env": {
            "LOG_LEVEL": "INFO"
          }
        }
      ],
      

      Для полной информации о входном JSON из сессий агентов вместе с примерами скриптов см. Конфигурация крючков.

  4. Зафиксируйте файл в репозитории и объедините его в ветвь по умолчанию. Теперь ваши крючки будут работать во время сессий агентов.

Устранение неполадок

Если возникнут проблемы с крючками, используйте следующую таблицу для устранения неполадок.

ПроблемаДействие
Крючки не выполняются
  • Проверьте, что JSON-файл находится в .github/hooks/ каталоге.
  • Проверьте правильный синтаксис JSON (например, jq . hooks.json).
  • Убедитесь version: 1 , что указано в вашем hooks.json деле.
  • Проверьте, что скрипт, который вы вызываете с вашего хука, исполняемый (chmod +x script.sh)
  • Проверьте, есть ли у скрипта правильный shebang (например, #!/bin/bash)
Зацепки заканчиваются
  • По умолчанию время ожидания составляет 30 секунд. При необходимости увеличивайте timeoutSec конфигурацию.
  • Оптимизируйте производительность скриптов, избегая ненужных операций.
Некорректный вывод JSON
  • Убедитесь, что выход находится на одной линии.
  • В Unix используйте jq -c для компакта и валидации JSON-вывода.
  • В Windows ConvertTo-Json -Compress используйте команду в PowerShell, чтобы сделать то же самое.

Отладка

Вы можете отладить хуки следующими методами:

  •         **Включите подробное логирование** скрипта для проверки входных данных и трассировки выполнения скрипта.
    
    Shell
    #!/bin/bash
    set -x  # Enable bash debug mode
    INPUT=$(cat)
    echo "DEBUG: Received input" >&2
    echo "$INPUT" >&2
    # ... rest of script
    
  •         **Тестируйте хуки локально** , проводя тестовый вход в ваш хук для проверки его поведения:
    
    Shell
    # Create test input
    echo '{"timestamp":1704614400000,"cwd":"/tmp","toolName":"bash","toolArgs":"{\"command\":\"ls\"}"}' | ./my-hook.sh
    
    # Check exit code
    echo $?
    
    # Validate output is valid JSON
    ./my-hook.sh | jq .
    

Дополнительные материалы