Package Exports
- solver-sdk
Readme
Code Solver SDK v3.1.2
JavaScript/TypeScript SDK для VS Code Extensions
Подключение к AI бэкенду для индексации, поиска и работы с кодом
JavaScript/TypeScript SDK для работы с Code Solver API. Предоставляет простой интерфейс для индексации кода, семантического поиска функций и работы с AI чатом.
🎯 Основные возможности
- 💬 Chat API - взаимодействие с AI моделями (Claude, GPT)
- 🔍 Code Search - семантический поиск по коду и функциям
- 📊 Project Indexing - индексация и анализ проектов
- 📝 Context API - получение контекста для AI
- 🛠️ Code Modification - модификация кода через AI
📦 Установка
npm install solver-sdk🚀 Быстрый старт
import { CodeSolverSDK } from 'solver-sdk';
// Создание SDK
const sdk = await CodeSolverSDK.create({
baseURL: 'http://localhost:3000'
});
// Создание и индексация проекта
const project = await sdk.projects.findOrCreateProject(
'/path/to/project',
'My Project'
);
await sdk.projects.startIndexing(project.id);
// Поиск кода
const searchResults = await sdk.search.searchCode(project.id, {
query: 'function calculateSum',
limit: 10
});
// Поиск функций
const functions = await sdk.search.searchFunctions(project.id, {
query: 'FileIndexingService',
limit: 5
});
// Работа с чатом
const response = await sdk.chat.chat([
{ role: 'user', content: 'Объясни этот код' }
], { projectId: project.id });📋 API Методы
📁 Projects API
// Создание проекта
await sdk.projects.createProject({
name: 'Project Name',
path: '/project/path',
description: 'Description'
});
// Получение списка проектов
await sdk.projects.getProjects();
// Получение информации о проекте
await sdk.projects.getProject(projectId);🔄 Projects & Indexing API
// Создание/поиск проекта и запуск индексации
const project = await sdk.projects.findOrCreateProject('/path/to/project', 'Project Name');
await sdk.projects.startIndexing(project.id);
// Получение статуса индексации
const status = await sdk.projects.getProjectStatus(project.id);
// Ожидание завершения индексации
while (true) {
const status = await sdk.projects.getProjectStatus(project.id);
if (status.status === 'ready') break;
if (status.status === 'error') throw new Error('Ошибка индексации');
await new Promise(resolve => setTimeout(resolve, 2000));
}🔍 Search API
// Поиск кода
await sdk.search.searchCode(projectId, {
query: 'search query',
limit: 20
});💬 Chat API
// Обычный чат (projectId ОБЯЗАТЕЛЕН!)
const response = await sdk.chat.chat([
{ role: 'user', content: 'Объясни этот код' }
], { projectId: 'your-project-id' });
// Потоковый чат
for await (const chunk of sdk.chat.streamChat(messages, { projectId: 'your-project-id' })) {
console.log(chunk.text);
}⚙️ Конфигурация
const sdk = await CodeSolverSDK.create({
baseURL: 'http://localhost:3000', // Обязательный
apiKey: 'your-api-key', // Рекомендуется
timeout: 30000, // Таймаут запросов
debug: false // Отладка
});⚠️ Важно: Для Chat API обязательно нужен projectId:
// ❌ НЕ РАБОТАЕТ
const response = await sdk.chat.chat(messages);
// ✅ ПРАВИЛЬНО
const response = await sdk.chat.chat(messages, { projectId: 'your-project-id' });
// 💡 Получить projectId можно так:
const projects = await sdk.projects.getReadyProjects();
const projectId = projects[0].id;🧪 Тестирование
# Все тесты
npm test
# Только HTTP тесты
npm test -- --testNamePattern="HTTP"
# Интеграционные тесты
npm run test:integration
# Тесты индексации
npm test -- --testPathPattern="indexing"📚 Примеры использования
Полный цикл работы с проектом
import { CodeSolverSDK } from 'solver-sdk';
async function fullWorkflow() {
const sdk = await CodeSolverSDK.create({
baseURL: 'http://localhost:3000'
});
try {
// 1. Создаем проект
const project = await sdk.projects.findOrCreateProject(
'/path/to/react-app',
'My React App'
);
// 2. Запускаем индексацию
console.log('Запуск индексации...');
await sdk.projects.startIndexing(project.id);
// 3. Ждем завершения индексации
console.log('Ожидание завершения индексации...');
while (true) {
const status = await sdk.projects.getProjectStatus(project.id);
if (status.status === 'ready') break;
if (status.status === 'error') throw new Error('Ошибка индексации');
await new Promise(resolve => setTimeout(resolve, 2000));
}
// 4. Ищем React компоненты
const components = await sdk.search.searchCode(project.id, {
query: 'React.Component class',
limit: 10
});
// 5. Задаем вопрос AI о коду
const aiResponse = await sdk.chat.chat([
{
role: 'user',
content: `Проанализируй найденные React компоненты: ${JSON.stringify(components)}`
}
], { projectId: project.id });
console.log('✅ Анализ завершен');
console.log('📊 Компоненты:', components.length);
console.log('🤖 AI анализ:', aiResponse.content);
} catch (error) {
console.error('❌ Ошибка:', error.message);
}
}
fullWorkflow();🔧 Устранение неполадок
Проблемы с подключением
// Проверка здоровья API
const isHealthy = await sdk.checkHealth();
console.log('API доступен:', isHealthy);Таймауты и повторы
// Увеличение таймаутов для больших проектов
const sdk = await CodeSolverSDK.create({
baseURL: 'http://localhost:3000',
timeout: 120000 // 2 минуты
});📝 Changelog v3.1.2
✅ Добавлено
- Поиск функций через
/search/functionsAPI - Методы
searchFunctions()иsearchFunctionsGet() - Статистика функций
getFunctionStats() - Автоматический выбор модели и токенов на бэкенде
- Упрощенные Chat API без параметров модели
❌ Удалено
AgentsApi- больше не используетсяDependenciesApi- работает внутреннеsimple-indexing-client.ts- дублировал ProjectsApi- Все устаревшие методы и примеры
- Ручной выбор модели и лимитов токенов клиентом
🔄 Изменено
- Обновлены все примеры кода на актуальный синтаксис
- Упрощена документация в один файл
- Исправлены пути API с префиксом
/api/v1 - Улучшена обработка ошибок индексации
- Chat API упрощен - модель выбирается автоматически
- Полная синхронизация документации с реальным кодом
📄 Лицензия
MIT License
Q: Пустые результаты поиска
// Убедитесь что проект проиндексирован
const readyProjects = await sdk.projects.getReadyProjects();
console.log('Готовые проекты:', readyProjects);🔧 Индексация: полный workflow
async function indexProject(projectPath, projectName) {
const sdk = await CodeSolverSDK.create({
baseURL: 'http://localhost:3000'
});
// 1. Создать/найти проект
const project = await sdk.projects.findOrCreateProject(projectPath, projectName);
// 2. Запустить индексацию
await sdk.projects.startIndexing(project.id);
// 3. Мониторинг прогресса
while (true) {
const status = await sdk.projects.getProjectStatus(project.id);
if (status.status === 'ready') {
console.log('✅ Индексация завершена!');
break;
} else if (status.status === 'error') {
console.log('❌ Ошибка:', status.error);
break;
}
console.log(`📊 Прогресс: ${status.progress || 0}%`);
await new Promise(resolve => setTimeout(resolve, 2000));
}
return project;
}🔌 VS Code Extension (готовый код)
import { CodeSolverSDK } from 'solver-sdk';
import * as vscode from 'vscode';
let sdk: CodeSolverSDK;
export async function activate(context: vscode.ExtensionContext) {
sdk = await CodeSolverSDK.create({
baseURL: 'http://localhost:3000'
});
// Команда индексации
const indexCmd = vscode.commands.registerCommand('extension.indexProject', async () => {
const folder = vscode.workspace.workspaceFolders?.[0];
if (!folder) return;
return vscode.window.withProgress({
location: vscode.ProgressLocation.Notification,
title: 'Индексация проекта',
cancellable: false
}, async (progress) => {
const project = await sdk.projects.findOrCreateProject(folder.uri.fsPath, folder.name);
await sdk.projects.startIndexing(project.id);
while (true) {
const status = await sdk.projects.getProjectStatus(project.id);
if (status.status === 'ready') break;
progress.report({ message: `${status.progress || 0}%` });
await new Promise(resolve => setTimeout(resolve, 2000));
}
vscode.window.showInformationMessage('✅ Проект проиндексирован!');
});
});
// Команда поиска функций
const searchCmd = vscode.commands.registerCommand('extension.searchFunctions', async () => {
const query = await vscode.window.showInputBox({ prompt: 'Поиск функций' });
if (!query) return;
const projects = await sdk.projects.getReadyProjects();
if (projects.length === 0) return;
const response = await sdk.search.searchFunctions(projects[0].id, { query, limit: 20 });
if (!response.success || response.results.length === 0) {
vscode.window.showInformationMessage('Функции не найдены');
return;
}
const items = response.results.map(fn => ({
label: fn.name,
description: fn.signature,
detail: `${fn.filePath}:${fn.startLine}`,
function: fn
}));
const selected = await vscode.window.showQuickPick(items);
if (selected) {
const doc = await vscode.workspace.openTextDocument(selected.function.filePath);
const editor = await vscode.window.showTextDocument(doc);
const range = new vscode.Range(
selected.function.startLine - 1, 0,
selected.function.endLine - 1, 0
);
editor.selection = new vscode.Selection(range.start, range.end);
editor.revealRange(range, vscode.TextEditorRevealType.InCenter);
}
});
context.subscriptions.push(indexCmd, searchCmd);
}
// package.json для VS Code Extension
{
"contributes": {
"commands": [
{ "command": "extension.indexProject", "title": "📊 Индексировать проект" },
{ "command": "extension.searchFunctions", "title": "🔍 Поиск функций" }
]
},
"dependencies": { "solver-sdk": "^3.1.2" }
}🎉 Один файл = полная документация!