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

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

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

Пример:

@src/utils.ts проведи код-ревью

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

Встроенные провайдеры

Koda поставляется с набором встроенных провайдеров:

Провайдер Команда Описание
File @file Добавить файл проекта
Code @code Выделенный код из редактора
Codebase @codebase Поиск по кодовой базе
Diff @diff Изменения git
Terminal @terminal Содержимое терминала
Problems @problems Ошибки и предупреждения
Folder @folder Файлы в папке
URL @url Контент веб-страницы
Search @search Поиск по проекту

File — добавление файла

Как использовать:

  1. Введите @ в чате
  2. Начните вводить files или имя файла
  3. Выберите файл из списка нажатием ⏎ Enter или кликом мыши
  4. Допишите вопрос

Примеры:

@src/utils/auth.ts Проверь на уязвимости
@package.json Какие зависимости устарели?
@README.md Улучши документацию

К одному запросу можно добавлять множество файлов!

Например, если спросить:

@src/auth.ts @src/types.ts Как они связаны?
то модель проанализирует импорты, зависимости между этими файлами и общие типы.


Code — выделенный в редакторе код

  1. Выделите код в редакторе
  2. Нажмите Ctrl/⌘ + L — выделение добавится к запросу
  3. Перейдите в панель Koda и допишите вопрос

Codebase — поиск по кодовой базе

Как использовать:

  1. Введите @codebase
  2. Добавьте поисковый запрос
  3. Koda найдёт релевантный код и добавит в контекст
  4. Ответит на вопрос

Примеры:

@codebase Где используется аутентификация?
@codebase Как обрабатываются ошибки API?
@codebase Найди все GraphQL мутации

Индексация кодовой базы

Koda автоматически индексирует файлы проекта в фоновом режиме и при изменениях. Это индекс используется для @Codebase.

Увидеть статус индексации можно так:

  1. Открыть Настройки
  2. Перейти на вкладку Индексация

Настройка индексации

Исключения:

~/.koda/config.yaml
indexing:
  disabledDirs:
    - node_modules
    - dist
    - build
    - .git
    - vendor

Включённые типы файлов:

~/.koda/config.yaml
indexing:
  extensions:
    - .ts
    - .tsx
    - .js
    - .jsx
    - .py
    - .java

Diff Provider

Изменения git

Синтаксис:

@diff <вопрос>

Автоматическое добавление:

  1. Сделайте изменения в файлах
  2. Введите @diff в чате
  3. Текущие изменения добавятся

Примеры:

@diff Напиши сообщение для коммита
@diff Какие файлы изменились?
@diff Проверь изменения на ошибки

Когда использовать: - Анализ изменений - Генерация commit message - Код-ревью - Проверка перед коммитом


Статус изменений

Diff provider показывает: - Изменённые файлы - Добавленные строки - Удалённые строки - Несогласованности

Пример вывода:

Изменения в 3 файлах:
+ 45 строк
- 12 строк

Файлы:
- src/auth.ts (+20, -5)
- src/types.ts (+15, -3)
- src/utils.ts (+10, -4)


Terminal Provider

Содержимое терминала

Синтаксис:

@terminal <вопрос>

Автоматическое добавление:

  1. Выполните команду в терминале
  2. Введите @terminal в чате
  3. Последняя команда и вывод добавятся

Примеры:

@terminal Почему эта команда не работает?
@terminal Как исправить эту ошибку?
@terminal Что означает этот вывод?

Когда использовать: - Отладка команд - Анализ ошибок - Объяснение вывода - Поиск решения проблем


Несколько команд

Можно запросить историю команд:

@terminal history

Покажет: - Последние 10 команд - Их вывод - Статус выполнения


Problems Provider

Ошибки и предупреждения

Синтаксис:

@problems <вопрос>

Автоматическое добавление:

  1. Откройте файл с ошибками
  2. Введите @problems в чате
  3. Проблемы из редактора добавятся

Примеры:

@problems Как исправить эти ошибки TypeScript?
@problems Почему здесь предупреждение?
@problems Какие проблемы в файле?

Когда использовать: - Исправление ошибок компиляции - Анализ предупреждений линтера - Типизация кода - Рефакторинг


Типы проблем

Problems provider показывает: - Errors — ошибки компиляции - Warnings — предупреждения - Info — информационные сообщения - Hints — подсказки

Пример вывода:

Проблемы в src/auth.ts:

❌ Ошибка 2345: Тип 'string' не assignable to 'number'
⚠️ Предупреждение 6133: Переменная 'x' не используется
ℹ️ Info: Файл не отформатирован


Folder Provider

Файлы в папке

Синтаксис:

@folder <путь> <вопрос>

Как использовать:

  1. Введите @folder
  2. Укажите путь к папке
  3. Добавьте вопрос

Примеры:

@folder src/components Какие компоненты здесь есть?
@folder src/api Как организованы API вызовы?
@folder tests Какие тесты написаны?

Когда использовать: - Обзор структуры папки - Поиск файлов в директории - Анализ организации кода - Онбординг в проекте


Структура папки

Вывод:

Папка: src/components/

├── Button/
│   ├── Button.tsx
│   ├── Button.test.tsx
│   └── index.ts
├── Input/
│   ├── Input.tsx
│   └── Input.test.tsx
└── Form/
    ├── Form.tsx
    ├── Form.test.tsx
    └── types.ts

Всего: 3 компонента, 8 файлов


URL Provider

Контент веб-страниц

Синтаксис:

@url <URL> <вопрос>

Как использовать:

  1. Введите @url
  2. Добавьте URL страницы
  3. Добавьте вопрос

Примеры:

@url https://react.dev/reference/react/useEffect Как использовать useEffect?
@url https://docs.python.org/3/library/asyncio.html Объясни async/await

Когда использовать: - Вопросы по документации - Анализ статей - Извлечение информации - Ссылки на ресурсы


Ограничения

Параметр Значение
Макс. размер страницы ~1 MB
Поддержка JavaScript ❌ Нет
Требуется интернет ✅ Да

Search Provider

Поиск по проекту

Синтаксис:

@search <запрос> <вопрос>

Как использовать:

  1. Введите @search
  2. Добавьте поисковый запрос
  3. Добавьте вопрос

Примеры:

@search authenticate Где используется аутентификация?
@search useEffect Найди все хуки useEffect
@search API endpoints Найди все API endpoints

Когда использовать: - Поиск по тексту - Поиск функций/классов - Поиск паттернов - Анализ кодовой базы


Типы поиска

Полнотекстовый поиск: - Поиск по содержимому файлов - Регистрозависимый - Поддержка regex

Семантический поиск: - Поиск по смыслу - Векторные эмбеддинги - Более релевантные результаты


Комбинирование провайдеров

Несколько провайдеров в одном запросе

Можно использовать несколько провайдеров одновременно:

@file src/auth.ts @code Как улучшить эту функцию?

Примеры:

@code @diff Проверь изменения на ошибки
@folder src/components @problems Найди проблемы в компонентах

Цепочки провайдеров

Используйте провайдеры последовательно:

1. @codebase Где используется аутентификация?
2. @file src/auth.ts Покажи эту функцию
3. @code Как оптимизировать?

Преимущество: - Постепенное углубление в тему - Контекст сохраняется между запросами - Более точные ответы


Пользовательские провайдеры

Создание своего провайдера

Файл: .koda/context-providers/my-provider.ts

import { ContextProvider } from "core";

const MyProvider: ContextProvider = {
  name: "my-provider",
  description: "Мой контекст-провайдер",

  getContextItems: async (query, ide) => {
    // Логика получения контекста
    const items = await getMyContext(query);

    return items.map(item => ({
      name: item.name,
      description: item.description,
      content: item.content,
      uri: item.uri,
    }));
  },
};

export default MyProvider;

Регистрация провайдера

Файл: config.yaml

contextProviders:
  - name: "my-provider"
    params:
      apiKey: "your-api-key"
      endpoint: "https://api.example.com"

Использование:

@my-provider <запрос>


Примеры пользовательских провайдеров

1. Jira Issues

const JiraProvider: ContextProvider = {
  name: "jira",
  description: "Jira задачи",

  getContextItems: async (query, ide) => {
    const issues = await fetchJiraIssues(query);

    return issues.map(issue => ({
      name: issue.key,
      description: issue.summary,
      content: issue.description,
      uri: issue.url,
    }));
  },
};

2. Database Schema

const DatabaseProvider: ContextProvider = {
  name: "db",
  description: "Схема базы данных",

  getContextItems: async (query, ide) => {
    const tables = await fetchDatabaseSchema(query);

    return tables.map(table => ({
      name: table.name,
      description: `Таблица: ${table.name}`,
      content: table.schema,
      uri: `db://${table.name}`,
    }));
  },
};

3. API Documentation

const APIProvider: ContextProvider = {
  name: "api",
  description: "API документация",

  getContextItems: async (query, ide) => {
    const endpoints = await fetchAPIEndpoints(query);

    return endpoints.map(endpoint => ({
      name: endpoint.path,
      description: endpoint.method,
      content: endpoint.documentation,
      uri: endpoint.url,
    }));
  },
};

Настройка провайдеров

Включение/выключение

Файл: config.yaml

contextProviders:
  - name: "file"
    enabled: true
  - name: "code"
    enabled: true
  - name: "docs"
    enabled: false  # Отключить

Параметры провайдеров

Некоторые провайдеры поддерживают параметры:

contextProviders:
  - name: "docs"
    params:
      maxResults: 5
      includeExamples: true
  - name: "codebase"
    params:
      maxResults: 10
      useSemanticSearch: true

Приоритет провайдеров

Порядок в конфигурации определяет приоритет:

contextProviders:
  - name: "file"      # Высший приоритет
  - name: "code"
  - name: "docs"
  - name: "codebase"  # Низший приоритет

Решение проблем

Провайдер не работает

Причины: - Провайдер отключен - Ошибка в конфигурации - Нет доступа к ресурсам

Решения:

  1. Проверьте конфигурацию:

    contextProviders:
      - name: "file"
        enabled: true  # Должно быть true
    

  2. Перезагрузите конфигурацию:

  3. Нажмите Reload Config
  4. Или перезапустите IDE

  5. Проверьте логи:

  6. Откройте Developer Tools
  7. Ищите ошибки провайдеров

Недостаточно контекста

Причины:

  • Провайдер не нашёл данные
  • Неправильный запрос
  • Ограничения провайдера

Решения:

  1. Уточните запрос
  2. Используйте другой провайдер:

    @file src/file.ts  # Вместо @codebase
    

  3. Комбинируйте провайдеры:

    @file src/file.ts @code Как улучшить?
    


Лучшие практики

1. Используйте правильный провайдер

Хорошо:

@file src/auth.ts  # Для конкретного файла
@codebase auth     # Для поиска по проекту

Плохо:

@codebase src/auth.ts  # Медленнее чем @file
@file auth             # Не найдёт без пути

2. Комбинируйте провайдеры

Хорошо:

@file src/auth.ts @code Как улучшить эту функцию?

Плохо:

@file src/auth.ts  # Без вопроса

3. Уточняйте запросы

Хорошо: @codebase authentication JWT token

Плохо: @codebase auth


4. Следите за размером контекста

Ограничения:

  • Файлы: ~100 KB
  • Код: ~10 KB
  • Документы: ~50 KB

При больших файлах:

  • Используйте @code для участков
  • Разбейте на части
  • Суммаризуйте

Интеграция с другими функциями

С суммаризацией

Контекст учитывается при суммаризации:

@file src/auth.ts
[Диалог о файле]
/summarize  # Сохранит информацию о файле

С навыками

Навыки могут использовать контекст:

@file src/component.tsx
/react-component  # Навык использует файл

С MCP

MCP серверы могут быть контекст-провайдерами:

mcpServers:
  - name: "github"
    # Автоматически добавляет @github контекст

Регистрация провайдера

В коде:

import { registerContextProvider } from "core";

registerContextProvider(MyProvider);

В конфигурации:

contextProviders:
  - name: "my-provider"
    params:
      key: "value"