solver-sdk
Version:
SDK для интеграции с Code Solver Backend API
231 lines (177 loc) • 9.09 kB
Markdown
# Индексация проектов
Это руководство описывает, как использовать 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();
```