ИИ

Чат репозитория

Некоторые вопросы быстрее задать, чем искать на них ответ. Где на самом деле обновляется токен? Что изменил этот коммит, одной фразой? Зачем существует этот файл? Чат репозитория отвечает по открытому репозиторию и показывает строки, на которые опирался.

Он делит правую колонку с Подробностями: вкладки сверху переключают между ними, поэтому граф не теряет выделение, когда вы что-то спрашиваете.

Чат репозитория с закреплённым контекстом

Что он читает

Каждый ответ строится в два прохода. Первый выбирает небольшой набор путей и буквальных поисковых строк из списка отслеживаемых файлов самого репозитория. Второй отвечает только по принесённым фрагментам и может ссылаться только на них: выдуманный файл или строка — ошибка валидации, а не правдоподобный ответ.

Второй взгляд. Первый проход вынужден угадывать по одним лишь именам, какие файлы важны, — ровно та догадка, которая проваливается на вопросе «откуда это вызывается». Поэтому ответу разрешено переспросить вместо того, чтобы гадать: он может назвать ещё пути, ещё дословные строки поиска или хеши коммитов из недавней истории, и вопрос задаётся снова вместе с тем, что они принесли. Так бывает не больше двух раз — каждый круг это ещё один вызов модели, которого вы ждёте, — а на последнем ответ обязан быть дан по тому, что уже есть. Вы не увидите ничего, кроме чуть более долгого ожидания и более точного ответа.

Включено Исключено
Отслеживаемые файлы в том виде, что в рабочем каталоге Неотслеживаемые файлы
Проиндексированные и непроиндексированные диффы отслеживаемых файлов Всё, что попадает под правило игнорирования, даже отслеживаемое
Ветка, впереди/позади и список изменённых путей Файлы, похожие на секреты, бинарные файлы, сгенерированные пути

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

Один нюанс: со включёнными предложениями действий в состояние репозитория попадают имена неотслеживаемых файлов — «проиндексируй новый файл» без них не обойдётся, — но их содержимое по-прежнему никогда не читается.

Закрепление контекста

Что читать, решает модель. Закрепление — способ это переопределить: закреплённое читается первым и забирает большую долю бюджета контекста.

Четыре способа, все ведут в один ряд фишек над полем сообщения:

Сделайте так Получите
Нажмите предложенную фишку Файл, открытый в просмотрщике, или коммит, выбранный в графе
Перетащите строку из вкладки Файлы Этот файл
Перетащите строку из графа коммитов Этот коммит — его сообщение и дифф по фрагментам
+ → Выбрать файл… или перетаскивание из Finder/Проводника Любой файл на диске, в том числе вне репозитория

Фишки остаются закреплёнными для следующих вопросов; × убирает одну, очистка беседы — все. Предел — восемь.

Закреплённый коммит даёт своё сообщение и до двенадцати фрагментов диффа. Фрагменты по исключённым путям выпадают из этого диффа, а не весь коммит.

Настройки

Настройки → ИИ → Чат репозитория:

Настройка Что делает
Задавайте вопросы о репозитории Выключено убирает вкладку, кнопку панели и цель сочетания клавиш. Остальной ИИ работает
Модель чата Модель только для чата. Пусто — модель профиля: вопрос дешевле ревью, меньшей часто достаточно
Только закоммиченное Отвечает по последнему коммиту, а не по рабочему каталогу: незакоммиченные правки не покидают машину
Предлагать действия с файлами и Git Выключено снова делает чат только для чтения: ни карточек действий, ни списка одобрения
Режим файлов только для чтения Включённый режим блокирует создание, изменение, замену и удаление файлов, но оставляет доступными действия Git. Включён по умолчанию
Как выполняются предложенные действия Режим одобрения — см. Режимы одобрения. Разрушительные действия подтверждаются в любом случае
Разрешить чату предлагать удалённые действия По умолчанию выключено. Включение добавляет fetch, pull, push, открытие пулл-реквеста и отправку стека

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

Модель чата переключается и в заголовке самой панели, рядом с названием провайдера, — это та же настройка, без открытия настроек.

Кнопка с волшебной палочкой рядом с заголовком панели открывает мастер настройки ИИ — пошаговый сценарий, который генерирует файлы конфигурации ассистента (инструкции, агенты, хуки) для этого репозитория. См. Функции ИИ.

Настройки чата репозитория

Работа с сообщениями

Сообщения — обычный текст. Выделите любую часть и скопируйте её или щёлкните по пузырю правой кнопкой: Копировать берёт выделение, Копировать сообщение — всё сообщение (ответ копируется как его исходный Markdown), а если щелчок пришёлся на ссылку, Копировать ссылку — её адрес.

Ссылки открываются в браузере по умолчанию, никогда внутри Gitcito — как Markdown-ссылки в ответах, так и обычные адреса https:// в ваших сообщениях.

Когда сообщение упоминает изображение — путь в репозитории вроде docs/logo.png или URL с расширением изображения — наведение на упоминание показывает небольшой предпросмотр. Пути репозитория читаются из рабочего дерева; упоминание, не ведущее к читаемому изображению, просто ничего не показывает.

Предпросмотр изображения при наведении

Запуск действий из чата

Попросите об изменении, а не о факте — проиндексируй markdown-файлы, закоммить это как фикс, добавь артефакты сборки в игнорируемые — и ответ придёт с карточкой действий. Пустая беседа предлагает под вступлением несколько примеров запросов в виде фишек; нажатие на одну заполняет поле ввода, так что запрос можно отредактировать перед отправкой. Карточка перечисляет конкретные шаги, которые хочет сделать ассистент, по строке на действие, с кнопками Выполнить и Отклонить. Ничего из карточки ещё не произошло; модель может только предлагать, и каждое предложение сверяется с рабочим каталогом до того, как вы его увидите, — действие с несуществующим файлом отклоняется, а не отображается.

Пустой чат с примерами запросов

Предложенные действия в чате

Чат репозитория может предлагать точечные правки, создание или полную замену файлов и их удаление, а затем действия Git: правила игнорирования, индексацию, снятие с индекса, коммит, стеш, сброс изменений, ветку, переключение, тег и — поскольку ему показывают список веток и недавние коммиты — merge, rebase, revert и cherry-pick. Раскрываемый diff Gitcito считает локально. Существующие файлы должны происходить из прочитанных свидетельств; небезопасные, секретные, игнорируемые, генерируемые, бинарные, устаревшие, слишком большие и достижимые по симлинку цели отклоняются. Reset, перезапись истории, удаление веток и любые принудительные операции остаются только в своём интерфейсе.

Merge или rebase может остановиться на конфликте. Тогда выполнение останавливается там же, карточка помечает строку как неудавшуюся и сохраняет счёт уже выполненного, а баннер конфликта берёт управление ровно так же, как для той же операции, запущенной с панели.

Весь пакет повторно проверяется до первой записи и откатывается при сбое шага. Перед коммитом Gitcito также проверяет наличие изменений в индексе. Карточка отмечает выполненные, неудачные и пропущенные действия и сохраняет частичный результат. Затем отдельный вызов без действий суммирует фактический итог.

Он умеет и писать .gitcito.json. Чату передают форму собственного файла настроек репозитория, поэтому добавь ссылки на задачи вида JIRA-1234 или защити release-ветки превращается в файловое действие, написанное по настоящей схеме, а не в правдоподобные ключи, которые загрузчик отвергнет. Нужны включённые файловые действия — тот же переключатель режима «только чтение» для файлов.

Строки, которым нужна картинка, её получают. Однострочного описания хватает для «проиндексируй два файла» и совершенно не хватает для «открой четыре пулл-реквеста по стеку», поэтому строки, описывающие форму, её и рисуют: ветку, которую публикует push, и насколько она впереди; две ссылки merge или rebase; коммиты, которые повторил бы revert или cherry-pick, с их темами; пулл-реквест таким, каким он получится; и стек в виде лестницы — с базой каждого уровня и тем, что отправка с ним сделает: откроет, перенацелит или оставит как есть.

Действия, выходящие за пределы машины

Fetch, pull, push, открытие пулл-реквеста и отправка стека по умолчанию выключены — за переключателем Разрешить чату предлагать удалённые действия. Публикация работы заслуживает осознанного решения, а при выключенной настройке модели даже не сообщают, что такие действия есть: она не может предложить одно из них и получить отказ — именно этот сценарий приучает людей включать настройки не читая.

Когда включено:

Действие Что делает
Получить / Забрать Те же fetch и pull, что и на панели; режим pull (merge, только fast-forward, rebase) входит в предложение
Отправить Публикует одну ветку в один remote. Никогда с force: принудительной отправки нет в словаре предложения, поэтому предложить её невозможно
Открыть PR Открывает один пулл-реквест, черновик или нет, в origin репозитория. Карточка сохраняет ссылку
Отправить стек Полная отправка стека PR: push каждого уровня, открытие или перенацеливание по одному пулл-реквесту, запись навигационного раздела, регистрация стека в GitHub

План чата, который публикует ветку и открывает пулл-реквест

Предложенный push сначала проходит те же проверки, что и push с панели: подтверждение для защищённой ветки, предупреждение о публикации файлов, похожих на учётные данные, и собственный чек-лист репозитория перед отправкой. Это диалоги, поэтому на них отвечают до старта плана, а не изнутри него.

Отмена плана

План утверждается целиком — значит, и отменяется целиком. Перед первым действием, способным что-то изменить, Gitcito запоминает, где стояла ветка, и делает снимок рабочего дерева; завершённая карточка после этого предлагает Отменить план. Ветка возвращается к тому коммиту, дерево — к снимку, а всё созданное планом отбрасывается, поэтому сначала спрашивают подтверждение и называют коммит возврата. Открытые пулл-реквесты остаются открытыми: локальный снимок не отзывает то, что уже ушло на сервер.

Режимы одобрения

Выпадающий список со щитом под полем ввода (он же в Настройки → ИИ → Чат репозитория) решает, как выполняется карточка:

Режим Выполняет
Всегда спрашивать Ничего, пока вы не нажмёте Выполнить на карточке
Автоматически выполнять безопасные действия Предложения только из обратимой рутины — индексация, снятие с индекса, игнорирование, ветка, тег — выполняются по прибытии; остальное ждёт кнопки
Автоматически выполнять все действия Каждое предложение выполняется по прибытии, кроме разрушительных

Предложение, которое отменило бы незакоммиченные правки, всегда сначала спрашивает — в любом режиме, и подтверждение перечисляет файлы, которые были бы потеряны. Карточка сообщает, что произошло на самом деле, — сколько действий выполнено или какая ошибка их остановила, — а ассистент узнаёт итог, поэтому следующий вопрос знает, был ли его план выполнен или отклонён.

Исправление ошибок с ассистентом

Когда git-операция терпит неудачу и чат ИИ доступен, у уведомления об ошибке появляется кнопка с искоркой: она открывает чат с текстом сбоя, вставленным в поле ввода, — «почему это не сработало и что делать» становится одним щелчком. Черновик можно редактировать — ничего не отправится, пока вы не нажмёте «Отправить».

В чём он отказывает

  • Файлы, похожие на секреты, не читаются никогда, закреплены они или нет: фишка возвращается помеченной как пропущенная, с причиной. Закрепление не обходит маскирование секретов.
  • Бинарные файлы и файлы больше 512 КБ извне репозитория пропускаются так же. Внутри действуют обычные правила.
  • Он никогда не пишет сам. У модели нет инструментов, только текст: изменение приходит карточкой предложения, выполняется лишь по вашим правилам одобрения, а разрушительный шаг всегда подтверждается. С выключенным Предлагать git-действия в чате он даже не предлагает.
  • Беседы живут только в памяти. У каждого репозитория своя нить; выход из Gitcito их удаляет.

Как открыть

Клавиши Что делают
Кнопка с облачком речи на панели инструментов Переключает вкладку «Чат»
⌘⌥B / Ctrl+Alt+B Переключает всю правую панель
Enter Отправляет сообщение
Shift+Enter Вставляет новую строку

Остальное, включая переназначение переключателей панелей, — в разделе Клавиатура и сочетания.

См. также: Функции ИИ · Безопасность и секреты · Вики репозитория

Улучшить этот перевод на GitHub