UNPKG

solver-sdk

Version:

SDK for WorkAI API - AI-powered code analysis with WorkCoins billing system

138 lines 5.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SearchApi = void 0; /** * API для поиска кода с использованием векторных эмбеддингов */ class SearchApi { constructor(httpClient) { this.httpClient = httpClient; } /** * Поиск кода в проекте * Поддерживает гибкую сигнатуру: projectId отдельно или в параметрах */ async searchCode(projectIdOrParams, params) { let finalParams; let projectId; // Гибкая сигнатура if (typeof projectIdOrParams === 'string') { projectId = projectIdOrParams; finalParams = params || { query: '' }; } else { finalParams = projectIdOrParams; projectId = finalParams.projectId || ''; } // Валидация обязательных параметров if (!projectId || projectId.trim().length === 0) { throw new Error('Project ID is required'); } if (!finalParams.query || finalParams.query.trim().length === 0) { throw new Error('Search query is required'); } const limit = finalParams.limit || finalParams.maxResults || 10; try { const response = await this.httpClient.post(`/api/v1/projects/${projectId}/search`, { query: finalParams.query, limit: limit }); if (!response.data) { return []; } // Преобразуем результаты в единый формат return response.data.map((result) => ({ id: result.id || `${result.filePath}_${Math.random()}`, score: result.score || 0, filePath: result.filePath || result.file || 'unknown', fileName: result.fileName || result.file?.split('/').pop() || 'unknown', language: result.language || 'unknown', size: result.size || 0, indexedAt: result.indexedAt, // Поля для совместимости content: result.content || '', file: result.filePath || result.file, line: result.line || 1 })); } catch (error) { console.error('Search API error:', error); throw error; // Пробрасываем ошибку для корректной обработки в тестах } } /** * Поиск функций в проекте * Поддерживает гибкую сигнатуру: projectId отдельно или в параметрах */ async searchFunctions(projectIdOrParams, params) { let finalParams; let projectId; // Гибкая сигнатура if (typeof projectIdOrParams === 'string') { projectId = projectIdOrParams; finalParams = params || { query: '' }; } else { finalParams = projectIdOrParams; projectId = finalParams.projectId || ''; } const limit = finalParams.limit || 10; const minScore = finalParams.minScore || 0.3; try { const response = await this.httpClient.post(`/api/v1/projects/${projectId}/search`, { query: finalParams.query, limit: limit, minScore: minScore }); return { success: true, resultsCount: response.data?.length || 0, searchType: 'functions', results: response.data || [] }; } catch (error) { console.error('Function search API error:', error); return { success: false, resultsCount: 0, searchType: 'functions', results: [] }; } } /** * Получение статистики функций в проекте * Пока используем поиск с большим лимитом для подсчета */ async getFunctionStats(projectId) { try { // Используем поиск по функциям для получения статистики const response = await this.httpClient.post(`/api/v1/projects/${projectId}/search`, { query: 'function class method', limit: 1000 }); return { stats: { totalFunctions: response.data?.length || 0 } }; } catch (error) { console.error('Function stats API error:', error); throw error; // Пробрасываем ошибку для корректной обработки в тестах } } /** * Семантический поиск кода в проекте * Псевдоним для searchCode с флагом semantic */ async semanticSearch(projectId, params) { return this.searchCode(projectId, { ...params, semantic: true // Добавляем флаг семантического поиска }); } } exports.SearchApi = SearchApi; //# sourceMappingURL=search-api.js.map