Реклама
Перетяжка // Коробка 3.0

Copilot в приложении и CLI перестал читать исключённые файлы

В VS Code режимы Edit и Agent исключения пока не поддерживают, а симлинки и удалённые файловые системы не покрыты.

Обложка: Copilot в приложении и CLI перестал читать исключённые файлы

GitHub 2 сентября объявила, что политики content exclusion, то есть списки файлов, которые Copilot не имеет права читать, теперь в общем доступе для приложения Copilot и для Copilot CLI. Настраивают их администраторы репозитория, владельцы организации или enterprise; доступно на планах Copilot Business и Enterprise. Исключённые файлы не должны использоваться агентом как контекст, попадать в ответы и проверяться Copilot code review.

Для команд, которые пускают агента в репозиторий с .env, приватными схемами и внутренними документами, это способ формально закрыть ему доступ. Но по документации GitHub у механизма есть заметные дыры: в VS Code режимы Edit и Agent исключения пока не поддерживают, симлинки и репозитории на удалённых файловых системах не покрываются, а семантическая информация из IDE (типы, определения по наведению, свойства сборки) может просочиться в контекст даже для исключённого файла.

Ключевые выводы
  • Content exclusions стали GA для Copilot app и Copilot CLI; сайт GitHub и GitHub Mobile остаются в public preview.
  • Политику настраивают администраторы репозитория, владельцы организации и enterprise; планы Copilot Business и Enterprise.
  • Исключённые файлы не участвуют в inline-подсказках, не влияют на подсказки в других файлах, не попадают в ответы чата и не проверяются Copilot code review.
  • Не покрыты: режимы Edit и Agent в VS Code, симлинки, репозитории на удалённых файловых системах; возможна утечка через семантику IDE.
  • Клиент передаёт GitHub URL текущего репозитория, чтобы получить политику; GitHub заявляет, что эти URL не логируются.

Как работает исключение и что оно гарантирует

Механизм описан в документации GitHub: администратор задаёт пути и маски файлов на уровне репозитория, организации или enterprise. Клиент Copilot при запуске отправляет на GitHub URL текущего репозитория и получает применимую политику; по заявлению GitHub, эти URL не логируются. Дальше клиент обязан не показывать содержимое исключённых файлов модели: ни для автодополнения внутри них, ни как контекст для подсказок в соседних файлах, ни в ответах чата, ни в автоматическом ревью.

Слово «обязан» здесь важно. Это политика на стороне клиента, а не криптографическая изоляция: GA-статус означает, что GitHub заявляет поддержку в приложении и CLI и берёт на себя ответственность за её работу. До 2 сентября правила действовали в части IDE-сценариев и в code review, а для app и CLI были в предварительном статусе.

Где исключения не срабатывают

  • VS Code: режимы Edit и Agent пока не поддерживают content exclusion. Именно в агентном режиме модель читает файлы активнее всего.
  • Симлинки: если исключённый файл доступен по символической ссылке под другим путём, политика его не закроет.
  • Удалённые файловые системы: репозитории на сетевых дисках и в remote-окружениях не покрываются.
  • Семантика IDE: языковой сервер может отдать типы, hover-определения и свойства сборки из исключённого файла, и они попадут в контекст.

Практический вывод: исключение файлов снижает риск случайной утечки секрета в подсказку, но не заменяет хранение секретов вне репозитория. Файл .env с ключами в Git был плохой идеей и до Copilot; агент лишь делает цену ошибки заметнее. Как это выглядит на практике, показал недавний инцидент METR с украденным API-ключом.

Что настроить сегодня

  1. В настройках репозитория, организации или enterprise добавить в исключения .env*, каталоги с ключами и сертификатами, приватные схемы данных и внутренние документы.
  2. Проверить каждую поверхность отдельно: Copilot app, CLI, IDE, code review. Для VS Code помнить, что Edit и Agent исключения игнорируют.
  3. Найти симлинки на чувствительные файлы (find . -type l) и репозитории на сетевых дисках: там политика не действует.
  4. Убедиться, что тариф Business или Enterprise: на индивидуальных планах content exclusion недоступен.

Доступность оплаты планов Business и Enterprise из России GitHub в changelog не обсуждает. В тот же день GitHub выпустила и другое изменение для администраторов: managed settings теперь позволяют назначать командам любую модель Copilot по умолчанию с возможностью переопределения. Про то, что Copilot научился ставить approve на pull request, мы писали накануне; в связке с исключениями это означает, что ревьюер-агент может не видеть части файлов, которые одобряет.

Источники: GitHub Changelog: Content exclusions generally available in Copilot app and CLI, GitHub Docs: Content exclusion for GitHub Copilot

Изображение на обложке: GitHub

Рекомендуем