Перейти к содержанию

Контекст-провайдеры

Контекст-провайдеры добавляют к вашему сообщению данные из проекта, IDE и внешних сервисов: файлы, фрагменты кода, изменения git, вывод терминала, ошибки и другое. Чтобы выбрать провайдер, введите @ в поле ввода.

@auth.ts @diff Проверь, не сломали ли мои изменения авторизацию

Важно писать их вручную и выбирать из выпадающего меню!

Например, если вы скопируете @diff в поле ввода, то он не отработает и отправится текстом как есть. Нужно написать @, чтобы Koda стала предлагать варианты для добавления в сообщение. Продолжайте набирать текст, чтобы подсказки были точнее.

Для добавления выбранного элемента в контекст, нажмите Enter.

Провайдеры и инструменты агента

Добавить содержимое файла в контекст модели можно двумя способами: упомянуть его через @ или попросить агента прочитать файл инструментом read_file. Результат похож, но принцип работы разный.

Контекст-провайдер Инструмент агента
Кто решает Вы — выбираете провайдер через @ Модель — сама решает, какой инструмент вызвать
Когда собираются данные Один раз, при отправке сообщения, до ответа модели В процессе работы, столько раз, сколько нужно модели
Что видит модель Готовые данные прямо в вашем сообщении Результат каждого вызова, после которого она решает, что делать дальше
Подтверждение Не требуется: провайдеры только читают данные Зависит от политики инструмента
В каких режимах работает Во всех режимах: чате, агенте и планировании В чате — только читающие, в планировании — читающие и терминал, в агенте — все
Где настраивается Секция context файла config.yaml Настройки инструментов в интерфейсе

Главное отличие: провайдер — это снимок данных на момент отправки. Он сохраняется в истории диалога и не обновляется сам. Если вы исправили файл или снова запустили тесты, упомяните провайдер ещё раз в новом сообщении.

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

Многие провайдеры имеют близкий по смыслу инструмент:

Провайдер Инструмент В чём разница
@file read_file Провайдер добавляет файл целиком, инструмент может читать его по частям
@codebase codebase_tool Провайдер ищет по тексту всего сообщения, модель формулирует запрос сама
@search grep_search Провайдер ищет по вашему запросу, модель может искать многократно
@tree ls, file_glob_search Провайдер добавляет всё дерево сразу, модель смотрит только нужные папки
@terminal run_terminal_command Провайдер берёт вывод уже выполненной вами команды, инструмент запускает новую
@url fetch_url_content Провайдер загружает страницу до отправки, модель — по ходу работы

Когда что выбирать

Используйте провайдеры, когда вы точно знаете, какие данные нужны: конкретный файл, текущие изменения, вывод упавшей команды. Так модель сразу получает нужное и не тратит шаги на поиск.

Если неясно, где искать, опишите задачу словами и дайте агенту найти нужное самостоятельно. О том, как выбирать объём контекста, — на странице «Управление контекстом».

Как добавить контекст

  1. Введите @ в поле ввода — откроется список провайдеров и недавних файлов.
  2. Начните вводить название, чтобы отфильтровать список.
  3. Выберите пункт клавишей Enter или мышью.
  4. Допишите сообщение и отправьте его.

Провайдеры различаются способом выбора данных:

  • сразу — например, @diff или @terminal: данные собираются при отправке без дополнительных шагов;
  • из списка — например, @folder: после выбора провайдера открывается подменю, в котором нужно выбрать папку, функцию или другой объект;
  • по запросу — например, @search: после выбора провайдера нужно ввести текст запроса.

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

Кроме @, есть быстрые способы добавить контекст:

  • Alt + Enter (на macOS — ⌥⏎) отправляет сообщение вместе с файлом, активным в редакторе;
  • ⌘⏎ на macOS отправляет сообщение вместе с результатами @codebase;
  • Ctrl/⌘ + L добавляет к сообщению код, выделенный в редакторе.

Ошибки провайдеров

Если провайдер не смог получить данные, Koda покажет уведомление, а сообщение будет отправлено без этих данных.

Провайдеры по умолчанию

При первом запуске Koda создаёт файл config.yaml с набором провайдеров, который зависит от IDE. Провайдеры @file и @codebase доступны всегда, даже если их нет в файле.

Провайдер VS Code JetBrains JetBrains
@file
@codebase
@code —
@folder
@diff
@terminal —
@problems —

В JetBrains JetBrains провайдеры @terminal и @problems работают, но их нужно добавить в конфигурацию вручную.

Файл

Добавляет содержимое выбранного файла целиком.

В списке после @ сразу видны недавно открытые файлы. Чтобы найти другой файл, начните вводить его имя. Файлы, исключённые через .gitignore и .kodaignore, в списке не показываются.

@auth.service.ts @auth.types.ts Как связаны эти файлы?

Если файл не помещается в окно контекста выбранной модели, Koda покажет предупреждение и не добавит его. В этом случае выделите нужный фрагмент и нажмите Ctrl/⌘ + L или попросите агента найти нужное место в файле.

Кодовая база

@codebase ищет в индексе проекта фрагменты кода, которые относятся к вашему сообщению, и добавляет найденное. Запросом служит весь текст сообщения, поэтому формулируйте его конкретно: упоминайте названия функций, модулей и термины из кода.

@codebase Где проверяется срок действия JWT-токена?

Для работы провайдера нужна индексация кодовой базы. По умолчанию она выключена: включите её в настройках плагина. Без индекса @codebase находит только фрагменты недавно изменённых файлов. Статус индексации отображается на вкладке Индексация в настройках. Какие файлы попадают в индекс, задаётся файлами .gitignore и .kodaignore.

Количество фрагментов в результате задаётся параметром nFinal. Тонкая настройка индексации описана в разделе indexingOptions, а решение проблем — на странице «Проблемы с индексацией».

Инструмент codebase_tool

В режимах агента и планирования модель может искать по тому же индексу сама с помощью инструмента codebase_tool, подбирая запросы по ходу работы.

Код

@code добавляет код конкретной функции, класса или метода. После выбора провайдера начните вводить имя — в подменю появятся подходящие объявления из проекта.

@code validateToken Почему эта функция пропускает просроченные токены?

Список объявлений строится по индексу кодовой базы, поэтому без индексации он пустой.

Провайдер доступен только в VS Code.

Папка

@folder ищет фрагменты кода, которые относятся к вашему сообщению, только внутри выбранной папки. Он работает так же, как @codebase, но с ограничением по папке. Учтите, что в контекст попадают не все файлы папки, а только найденные фрагменты.

@folder api Как здесь обрабатываются ошибки запросов?

Как и @codebase, провайдер полноценно работает только при включённой индексации. Чтобы показать модели структуру папки, используйте @tree или попросите агента изучить её.

Изменения git

@diff добавляет текущие изменения git во всех репозиториях рабочей области. Новые файлы, ещё не добавленные в git, в результат не попадают.

@diff Проверь мои изменения перед коммитом

По умолчанию в VS Code провайдер добавляет и подготовленные к коммиту, и неподготовленные изменения, а в JetBrains JetBrains — только неподготовленные. Чтобы видеть только подготовленные изменения, установите параметр includeUnstaged в false.

Сообщение коммита

Если вы часто генерируете сообщения коммитов, создайте пользовательскую слеш-команду с переменной {{diff}}.

Терминал

@terminal добавляет последнюю команду, выполненную в терминале IDE, и её вывод.

@terminal Почему упали тесты?

В VS Code используется активный терминал, а в JetBrains JetBrains — выбранная вкладка встроенного терминала. Если терминалов нет, контекст будет пустым.

Провайдер видит только уже выполненную команду. Если нужно запустить команду и разобрать результат, поручите это агенту: он выполнит её инструментом run_terminal_command.

Проблемы

@problems добавляет диагностику активного в редакторе файла: текст каждой ошибки или предупреждения и фрагмент кода вокруг неё.

@problems Исправь эти ошибки TypeScript

В VS Code учитываются все сообщения панели Problems для этого файла, в JetBrains JetBrains — только ошибки и предупреждения. Если проблем нет, модель получит сообщение об их отсутствии.

Другие провайдеры

Остальные провайдеры по умолчанию выключены. Чтобы включить провайдер, добавьте его в секцию context файла config.yaml, сохранив уже перечисленные:

~/.koda/config.yaml
context:
  - provider: code
  - provider: diff
  - provider: terminal
  - provider: problems
  - provider: folder
  - provider: codebase
  # новые провайдеры
  - provider: open
  - provider: tree
  - provider: url
  - provider: search

Провайдеры для работы с проектом и IDE:

  • currentFile — активный в редакторе файл;
  • open — все открытые файлы;
  • tree — дерево файлов рабочей области;
  • repo-map — карта проекта: файлы и сигнатуры функций и классов;
  • search — текстовый поиск по проекту;
  • commit — коммиты git вместе с изменениями;
  • os — операционная система и архитектура процессора;
  • clipboard — недавно скопированный в редакторе текст (только VS Code);
  • debugger — переменные и стек вызовов при отладке (только VS Code).

Провайдеры для внешних источников:

  • url — содержимое веб-страницы;
  • http — данные от вашего HTTP-сервера;
  • google — результаты поиска Google;
  • issue — задачи GitHub;
  • gitlab-mr — merge request GitLab для текущей ветки;
  • jira — задачи Jira;
  • postgres и database — структура таблиц баз данных;
  • discord — сообщения из канала Discord.

Подробное описание и параметры каждого провайдера — в разделе provider справочника конфигурации.

Ресурсы MCP-серверов

Если подключённый MCP-сервер предоставляет ресурсы, они появляются в меню @ отдельным пунктом с именем сервера. Добавлять такой провайдер в секцию context не нужно.

Если провайдер не работает

Провайдера нет в меню

  • Проверьте, что провайдер перечислен в секции context файла config.yaml или проектного .kodarc.json.
  • Проверьте, что провайдер поддерживается вашей IDE: например, @code, @debugger и @clipboard работают только в VS Code.
  • Проверьте написание значения provider: провайдеры с неизвестным именем не загружаются.

Провайдер ничего не находит

  • Для @codebase, @folder и @code включите индексацию и дождитесь её завершения.
  • Если индекс устарел, запустите переиндексацию на вкладке Индексация или командой Koda: Codebase Force Re-Index.
  • Для @codebase уточните сообщение: добавьте названия функций, классов и модулей.
  • Для @terminal проверьте, что команда выполнялась в терминале IDE, а не во внешнем окне.
  • Для @problems откройте нужный файл в редакторе и сделайте его активным.

Слишком много контекста

Данные провайдеров занимают место в окне контекста модели и остаются в истории диалога. Большие файлы, @tree или @open в крупном проекте могут вытеснить важную информацию. Добавляйте только то, что действительно нужно для задачи, а в длинных диалогах полагайтесь на сжатие контекста.