UNPKG

solver-sdk

Version:

SDK для интеграции с Code Solver Backend API

231 lines (177 loc) 9.09 kB
# Индексация проектов Это руководство описывает, как использовать SDK для индексации проектов и отдельных файлов. ## Инициализация SDK Прежде чем использовать функции индексации, необходимо инициализировать SDK с указанием API ключа: ```typescript import { CodeSolverSDK } from 'solver-sdk'; const sdk = new CodeSolverSDK({ baseURL: 'https://api.example.com', apiKey: 'ваш_api_ключ', // API ключ обязателен для авторизации WebSocket соединений }); ``` ## Индексация проекта ### Запуск индексации Для запуска индексации проекта используйте метод `indexProject` или его псевдоним `startIndexing`: ```typescript // Полная индексация проекта await sdk.projects.indexProject('идентификатор_проекта', { indexingMode: 'full' }); // Инкрементальная индексация (только изменившиеся файлы) await sdk.projects.indexProject('идентификатор_проекта', { indexingMode: 'incremental' }); // Автоматический выбор режима индексации (рекомендуется) await sdk.projects.indexProject('идентификатор_проекта', { indexingMode: 'auto' }); // Псевдоним startIndexing (работает аналогично indexProject) await sdk.projects.startIndexing('идентификатор_проекта', { indexingMode: 'auto' }); ``` ### Режимы индексации SDK поддерживает следующие режимы индексации: - **full** - полная переиндексация всех файлов проекта - **incremental** - индексация только изменившихся файлов (более быстрая) - **auto** - автоматический выбор режима на основе метаданных проекта Вы также можете использовать флаг `forceFull` для принудительной полной индексации: ```typescript await sdk.projects.indexProject('идентификатор_проекта', { forceFull: true }); ``` ### Фильтрация файлов Можно указать шаблоны включения и исключения файлов: ```typescript await sdk.projects.indexProject('идентификатор_проекта', { indexingMode: 'auto', includePatterns: ['**/*.js', '**/*.ts', '**/*.jsx', '**/*.tsx'], excludePatterns: ['**/node_modules/**', '**/dist/**', '**/build/**'] }); ``` ## Обновление индекса отдельных файлов Для индексации одного файла используйте метод `updateFileIndex`: ```typescript // Индексация файла с чтением его содержимого с диска await sdk.projects.updateFileIndex( 'идентификатор_проекта', 'путь/к/файлу.js' ); // Индексация с передачей содержимого файла await sdk.projects.updateFileIndex( 'идентификатор_проекта', 'путь/к/файлу.js', { content: 'содержимое файла', force: true // Принудительная индексация, даже если файл не изменился } ); // С дополнительными опциями await sdk.projects.updateFileIndex( 'идентификатор_проекта', 'путь/к/файлу.ts', { content: 'содержимое файла', language: 'typescript', // Явное указание языка updateDependencies: true // Обновление зависимостей после индексации } ); ``` ## Работа с новыми проектами ### Создание и индексация проекта ```typescript // Создание проекта и немедленная индексация const result = await sdk.projects.createAndIndexProject('/путь/к/проекту', { name: 'Название проекта', indexingMode: 'full', excludePatterns: ['**/node_modules/**', '**/dist/**'] }); console.log(`Проект создан с ID: ${result.projectId}`); console.log(`Статус индексации: ${result.indexingStatus}`); ``` ### Поиск или создание проекта ```typescript // Найти существующий проект или создать новый const project = await sdk.projects.getOrCreateProject('/путь/к/проекту', 'Название проекта'); console.log(`ID проекта: ${project.id}`); // После получения проекта можно запустить индексацию await sdk.projects.indexProject(project.id, { indexingMode: 'auto' }); ``` ## Управление индексацией ### Проверка статуса индексации ```typescript // Получение текущего статуса индексации const status = await sdk.projects.getIndexingStatus('идентификатор_проекта'); console.log(`Статус: ${status.status}`); console.log(`Количество файлов: ${status.fileCount}`); console.log(`Статистика по языкам:`, status.languageStats); ``` ### Отмена индексации ```typescript // Отмена текущей индексации await sdk.projects.cancelIndexing('идентификатор_проекта'); ``` ### Очистка ошибок индексации ```typescript // Очистка ошибки, если индексация завершилась с ошибкой await sdk.projects.clearIndexingError('идентификатор_проекта'); ``` ## Отслеживание индексации через WebSocket SDK поддерживает отслеживание процесса индексации в реальном времени через WebSocket: ```typescript // Подключение к WebSocket await sdk.projects.connectWebSocket(); // Подписка на события индексации отдельных файлов sdk.projects.on('file_indexed', (data) => { console.log(`Файл индексирован: ${data.file.path}`); console.log(`Язык: ${data.file.language}`); console.log(`Тип изменения: ${data.file.changeType}`); }); // Подписка на событие завершения индексации sdk.projects.on('indexing_complete', (data) => { console.log(`Индексация завершена для проекта ${data.projectId}`); console.log(`Всего файлов: ${data.stats.totalFiles}`); console.log(`Проиндексировано: ${data.stats.indexed}`); console.log(`Ошибок: ${data.stats.failed}`); console.log(`Время индексации: ${data.stats.time}мс`); }); // Отключение от WebSocket после завершения работы await sdk.projects.disconnectWebSocket(); ``` ## Обработка ошибок ```typescript try { await sdk.projects.indexProject('идентификатор_проекта', { indexingMode: 'full' }); } catch (error) { if (error.message.includes('не найден')) { console.error('Проект не найден'); } else if (error.message.includes('forbidden')) { console.error('Ошибка авторизации. Проверьте API ключ'); } else { console.error(`Ошибка индексации: ${error.message}`); } } ``` ## Авторизация WebSocket Начиная с версии 1.7.7, SDK автоматически добавляет API ключ в качестве параметра `authToken` при подключении WebSocket, что обеспечивает корректную авторизацию для всех операций через WebSocket (индексация, рассуждения и т.д.). Для корректной работы WebSocket соединений: 1. **Обязательно указывайте `apiKey` при инициализации SDK** 2. Подключайтесь к WebSocket перед использованием событий 3. Отключайтесь от WebSocket после завершения работы ```typescript // Корректная инициализация с apiKey const sdk = new CodeSolverSDK({ baseURL: 'https://api.example.com', apiKey: 'ваш_api_ключ' // Обязательно для WebSocket авторизации }); // Подключение await sdk.projects.connectWebSocket(); // Использование WebSocket... // Отключение await sdk.projects.disconnectWebSocket(); ```