solver-sdk
Version:
SDK for WorkAI API - AI-powered code analysis with WorkCoins billing system
138 lines • 5.47 kB
JavaScript
;
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