solver-sdk 2.8.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +327 -360
- package/dist/cjs/api/chat-api/index.js +23 -49
- package/dist/cjs/api/chat-api/index.js.map +1 -1
- package/dist/cjs/api/chat-api/interfaces.js +1 -0
- package/dist/cjs/api/chat-api/interfaces.js.map +1 -1
- package/dist/cjs/api/context-api.js +6 -1
- package/dist/cjs/api/context-api.js.map +1 -1
- package/dist/cjs/api/models-api.js +43 -60
- package/dist/cjs/api/models-api.js.map +1 -1
- package/dist/cjs/api/projects-api.js +67 -295
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/cjs/api/search-api.js +131 -8
- package/dist/cjs/api/search-api.js.map +1 -1
- package/dist/cjs/code-solver-sdk.js +68 -322
- package/dist/cjs/code-solver-sdk.js.map +1 -1
- package/dist/cjs/index.js +3 -19
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/utils/logger.js +4 -4
- package/dist/cjs/utils/logger.js.map +1 -1
- package/dist/esm/api/chat-api/index.js +22 -48
- package/dist/esm/api/chat-api/index.js.map +1 -1
- package/dist/esm/api/chat-api/interfaces.js +1 -0
- package/dist/esm/api/chat-api/interfaces.js.map +1 -1
- package/dist/esm/api/context-api.js +6 -1
- package/dist/esm/api/context-api.js.map +1 -1
- package/dist/esm/api/models-api.js +43 -60
- package/dist/esm/api/models-api.js.map +1 -1
- package/dist/esm/api/projects-api.js +67 -295
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/esm/api/search-api.js +131 -8
- package/dist/esm/api/search-api.js.map +1 -1
- package/dist/esm/code-solver-sdk.js +68 -322
- package/dist/esm/code-solver-sdk.js.map +1 -1
- package/dist/esm/index.js +2 -18
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/logger.js +3 -3
- package/dist/esm/utils/logger.js.map +1 -1
- package/dist/types/api/chat-api/index.d.ts +1 -13
- package/dist/types/api/chat-api/index.d.ts.map +1 -1
- package/dist/types/api/chat-api/interfaces.d.ts +6 -54
- package/dist/types/api/chat-api/interfaces.d.ts.map +1 -1
- package/dist/types/api/chat-api/models.d.ts +3 -26
- package/dist/types/api/chat-api/models.d.ts.map +1 -1
- package/dist/types/api/context-api.d.ts.map +1 -1
- package/dist/types/api/models-api.d.ts +31 -62
- package/dist/types/api/models-api.d.ts.map +1 -1
- package/dist/types/api/projects-api.d.ts +50 -127
- package/dist/types/api/projects-api.d.ts.map +1 -1
- package/dist/types/api/search-api.d.ts +147 -6
- package/dist/types/api/search-api.d.ts.map +1 -1
- package/dist/types/code-solver-sdk.d.ts +36 -86
- package/dist/types/code-solver-sdk.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -14
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/interfaces/sdk-options.d.ts +18 -66
- package/dist/types/interfaces/sdk-options.d.ts.map +1 -1
- package/dist/types/utils/logger.d.ts +3 -3
- package/dist/types/utils/logger.d.ts.map +1 -1
- package/docs/README.md +53 -37
- package/docs/VSCODE_INTEGRATION.md +208 -371
- package/docs/indexing/INDEXING.md +658 -335
- package/package.json +26 -23
- package/dist/cjs/api/agents-api.js +0 -94
- package/dist/cjs/api/agents-api.js.map +0 -1
- package/dist/cjs/api/chat-api/websocket-helpers.js +0 -211
- package/dist/cjs/api/chat-api/websocket-helpers.js.map +0 -1
- package/dist/cjs/api/dependencies-api.js +0 -286
- package/dist/cjs/api/dependencies-api.js.map +0 -1
- package/dist/cjs/constants/websocket-events.constants.js +0 -170
- package/dist/cjs/constants/websocket-events.constants.js.map +0 -1
- package/dist/cjs/constants/websocket-namespaces.constants.js +0 -22
- package/dist/cjs/constants/websocket-namespaces.constants.js.map +0 -1
- package/dist/cjs/interfaces/websocket/callbacks.interfaces.js +0 -3
- package/dist/cjs/interfaces/websocket/callbacks.interfaces.js.map +0 -1
- package/dist/cjs/interfaces/websocket/client-options.interfaces.js +0 -3
- package/dist/cjs/interfaces/websocket/client-options.interfaces.js.map +0 -1
- package/dist/cjs/interfaces/websocket/events.interfaces.js +0 -3
- package/dist/cjs/interfaces/websocket/events.interfaces.js.map +0 -1
- package/dist/cjs/interfaces/websocket/vscode-command.interfaces.js +0 -42
- package/dist/cjs/interfaces/websocket/vscode-command.interfaces.js.map +0 -1
- package/dist/cjs/simple-indexing-client.js +0 -138
- package/dist/cjs/simple-indexing-client.js.map +0 -1
- package/dist/cjs/utils/code-solver-websocket-client.js +0 -497
- package/dist/cjs/utils/code-solver-websocket-client.js.map +0 -1
- package/dist/cjs/utils/connection-state-manager.js +0 -133
- package/dist/cjs/utils/connection-state-manager.js.map +0 -1
- package/dist/cjs/utils/indexing-websocket-client.js +0 -107
- package/dist/cjs/utils/indexing-websocket-client.js.map +0 -1
- package/dist/cjs/utils/session-manager.js +0 -114
- package/dist/cjs/utils/session-manager.js.map +0 -1
- package/dist/cjs/utils/simple-connection-monitor.js +0 -52
- package/dist/cjs/utils/simple-connection-monitor.js.map +0 -1
- package/dist/cjs/utils/websocket-client.js +0 -638
- package/dist/cjs/utils/websocket-client.js.map +0 -1
- package/dist/cjs/ws/base-ws-client.js +0 -280
- package/dist/cjs/ws/base-ws-client.js.map +0 -1
- package/dist/cjs/ws/dependencies-ws-client.js +0 -11
- package/dist/cjs/ws/dependencies-ws-client.js.map +0 -1
- package/dist/cjs/ws/file-editing-ws-client.js +0 -162
- package/dist/cjs/ws/file-editing-ws-client.js.map +0 -1
- package/dist/cjs/ws/filesystem-ws-client.js +0 -305
- package/dist/cjs/ws/filesystem-ws-client.js.map +0 -1
- package/dist/cjs/ws/indexing-ws-client.js +0 -275
- package/dist/cjs/ws/indexing-ws-client.js.map +0 -1
- package/dist/cjs/ws/notifications-ws-client.js +0 -12
- package/dist/cjs/ws/notifications-ws-client.js.map +0 -1
- package/dist/esm/api/agents-api.js +0 -90
- package/dist/esm/api/agents-api.js.map +0 -1
- package/dist/esm/api/chat-api/websocket-helpers.js +0 -205
- package/dist/esm/api/chat-api/websocket-helpers.js.map +0 -1
- package/dist/esm/api/dependencies-api.js +0 -282
- package/dist/esm/api/dependencies-api.js.map +0 -1
- package/dist/esm/constants/websocket-events.constants.js +0 -167
- package/dist/esm/constants/websocket-events.constants.js.map +0 -1
- package/dist/esm/constants/websocket-namespaces.constants.js +0 -19
- package/dist/esm/constants/websocket-namespaces.constants.js.map +0 -1
- package/dist/esm/interfaces/websocket/callbacks.interfaces.js +0 -2
- package/dist/esm/interfaces/websocket/callbacks.interfaces.js.map +0 -1
- package/dist/esm/interfaces/websocket/client-options.interfaces.js +0 -2
- package/dist/esm/interfaces/websocket/client-options.interfaces.js.map +0 -1
- package/dist/esm/interfaces/websocket/events.interfaces.js +0 -2
- package/dist/esm/interfaces/websocket/events.interfaces.js.map +0 -1
- package/dist/esm/interfaces/websocket/vscode-command.interfaces.js +0 -39
- package/dist/esm/interfaces/websocket/vscode-command.interfaces.js.map +0 -1
- package/dist/esm/simple-indexing-client.js +0 -134
- package/dist/esm/simple-indexing-client.js.map +0 -1
- package/dist/esm/utils/code-solver-websocket-client.js +0 -492
- package/dist/esm/utils/code-solver-websocket-client.js.map +0 -1
- package/dist/esm/utils/connection-state-manager.js +0 -129
- package/dist/esm/utils/connection-state-manager.js.map +0 -1
- package/dist/esm/utils/indexing-websocket-client.js +0 -103
- package/dist/esm/utils/indexing-websocket-client.js.map +0 -1
- package/dist/esm/utils/session-manager.js +0 -109
- package/dist/esm/utils/session-manager.js.map +0 -1
- package/dist/esm/utils/simple-connection-monitor.js +0 -48
- package/dist/esm/utils/simple-connection-monitor.js.map +0 -1
- package/dist/esm/utils/websocket-client.js +0 -634
- package/dist/esm/utils/websocket-client.js.map +0 -1
- package/dist/esm/ws/base-ws-client.js +0 -276
- package/dist/esm/ws/base-ws-client.js.map +0 -1
- package/dist/esm/ws/dependencies-ws-client.js +0 -7
- package/dist/esm/ws/dependencies-ws-client.js.map +0 -1
- package/dist/esm/ws/file-editing-ws-client.js +0 -158
- package/dist/esm/ws/file-editing-ws-client.js.map +0 -1
- package/dist/esm/ws/filesystem-ws-client.js +0 -301
- package/dist/esm/ws/filesystem-ws-client.js.map +0 -1
- package/dist/esm/ws/indexing-ws-client.js +0 -271
- package/dist/esm/ws/indexing-ws-client.js.map +0 -1
- package/dist/esm/ws/notifications-ws-client.js +0 -8
- package/dist/esm/ws/notifications-ws-client.js.map +0 -1
- package/dist/types/api/agents-api.d.ts +0 -141
- package/dist/types/api/agents-api.d.ts.map +0 -1
- package/dist/types/api/chat-api/websocket-helpers.d.ts +0 -40
- package/dist/types/api/chat-api/websocket-helpers.d.ts.map +0 -1
- package/dist/types/api/dependencies-api.d.ts +0 -109
- package/dist/types/api/dependencies-api.d.ts.map +0 -1
- package/dist/types/constants/websocket-events.constants.d.ts +0 -144
- package/dist/types/constants/websocket-events.constants.d.ts.map +0 -1
- package/dist/types/constants/websocket-namespaces.constants.d.ts +0 -17
- package/dist/types/constants/websocket-namespaces.constants.d.ts.map +0 -1
- package/dist/types/interfaces/websocket/callbacks.interfaces.d.ts +0 -30
- package/dist/types/interfaces/websocket/callbacks.interfaces.d.ts.map +0 -1
- package/dist/types/interfaces/websocket/client-options.interfaces.d.ts +0 -51
- package/dist/types/interfaces/websocket/client-options.interfaces.d.ts.map +0 -1
- package/dist/types/interfaces/websocket/events.interfaces.d.ts +0 -165
- package/dist/types/interfaces/websocket/events.interfaces.d.ts.map +0 -1
- package/dist/types/interfaces/websocket/vscode-command.interfaces.d.ts +0 -56
- package/dist/types/interfaces/websocket/vscode-command.interfaces.d.ts.map +0 -1
- package/dist/types/simple-indexing-client.d.ts +0 -66
- package/dist/types/simple-indexing-client.d.ts.map +0 -1
- package/dist/types/utils/code-solver-websocket-client.d.ts +0 -144
- package/dist/types/utils/code-solver-websocket-client.d.ts.map +0 -1
- package/dist/types/utils/connection-state-manager.d.ts +0 -94
- package/dist/types/utils/connection-state-manager.d.ts.map +0 -1
- package/dist/types/utils/indexing-websocket-client.d.ts +0 -123
- package/dist/types/utils/indexing-websocket-client.d.ts.map +0 -1
- package/dist/types/utils/session-manager.d.ts +0 -98
- package/dist/types/utils/session-manager.d.ts.map +0 -1
- package/dist/types/utils/simple-connection-monitor.d.ts +0 -26
- package/dist/types/utils/simple-connection-monitor.d.ts.map +0 -1
- package/dist/types/utils/websocket-client.d.ts +0 -233
- package/dist/types/utils/websocket-client.d.ts.map +0 -1
- package/dist/types/ws/base-ws-client.d.ts +0 -119
- package/dist/types/ws/base-ws-client.d.ts.map +0 -1
- package/dist/types/ws/dependencies-ws-client.d.ts +0 -6
- package/dist/types/ws/dependencies-ws-client.d.ts.map +0 -1
- package/dist/types/ws/file-editing-ws-client.d.ts +0 -85
- package/dist/types/ws/file-editing-ws-client.d.ts.map +0 -1
- package/dist/types/ws/filesystem-ws-client.d.ts +0 -201
- package/dist/types/ws/filesystem-ws-client.d.ts.map +0 -1
- package/dist/types/ws/indexing-ws-client.d.ts +0 -94
- package/dist/types/ws/indexing-ws-client.d.ts.map +0 -1
- package/dist/types/ws/notifications-ws-client.d.ts +0 -5
- package/dist/types/ws/notifications-ws-client.d.ts.map +0 -1
- package/docs/ARCHITECTURE.md +0 -268
- package/docs/QUICK_START.md +0 -126
- package/docs/WEBSOCKET.md +0 -472
package/README.md
CHANGED
|
@@ -1,86 +1,20 @@
|
|
|
1
|
-
# Solver SDK
|
|
1
|
+
# Code Solver SDK v3.0
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **🚀 Версия 3.0 - полный переход на HTTP API**
|
|
4
|
+
> Убрана поддержка WebSocket, все взаимодействие происходит через REST API
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<p align="center">
|
|
8
|
-
<a href="https://www.npmjs.com/package/solver-sdk"><img src="https://img.shields.io/npm/v/solver-sdk.svg" alt="NPM Version" /></a>
|
|
9
|
-
<a href="https://www.npmjs.com/package/solver-sdk"><img src="https://img.shields.io/npm/dm/solver-sdk.svg" alt="NPM Downloads" /></a>
|
|
10
|
-
<a href="https://github.com/code-solver/browser-sdk/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/solver-sdk.svg" alt="License" /></a>
|
|
11
|
-
</p>
|
|
12
|
-
|
|
13
|
-
## ⚡ Что нового в v2.7.0
|
|
14
|
-
|
|
15
|
-
- 🚀 **VS Code интеграция:** Нативное выполнение команд через HTTP Streaming
|
|
16
|
-
- ⚡ **10x ускорение:** 45ms vs 443ms старая архитектура команд VS Code
|
|
17
|
-
- 🏗️ **Гибридная архитектура:** HTTP Streaming + WebSocket для оптимальной производительности
|
|
18
|
-
- 🎯 **Новые типы:** `VSCodeCommandEvent`, `CommandExecutionResult`, `VSCodeCommands`
|
|
19
|
-
- 🔄 **Двусторонняя связь:** Backend ←→ SDK ←→ Extension
|
|
20
|
-
- 📊 **Real-time feedback:** Мгновенные результаты выполнения команд
|
|
21
|
-
- 🛡️ **Backwards compatible:** Все существующие методы работают без изменений
|
|
22
|
-
|
|
23
|
-
## 📋 Для разработчиков
|
|
24
|
-
|
|
25
|
-
### 🎯 **VS Code Extension разработчики**
|
|
26
|
-
- 📄 **[5-минутный старт](docs/QUICK_START.md)** - минимальный код для работы
|
|
27
|
-
- 📚 **[Полное руководство](docs/VSCODE_INTEGRATION.md)** - детальные примеры и best practices
|
|
28
|
-
|
|
29
|
-
### 🔧 **Backend интеграция**
|
|
30
|
-
- 🏗️ **[Архитектура](docs/ARCHITECTURE.md)** - HTTP vs WebSocket решения
|
|
31
|
-
- 🔌 **[WebSocket API](docs/WEBSOCKET.md)** - события и namespace'ы
|
|
32
|
-
- 🔑 **[Аутентификация](docs/AUTHENTICATION.md)** - настройка API ключей
|
|
33
|
-
|
|
34
|
-
### 📖 **Остальная документация**
|
|
35
|
-
- [Основные возможности](#основные-возможности)
|
|
36
|
-
- [Установка](#установка)
|
|
37
|
-
- [Быстрый старт](#быстрый-старт)
|
|
38
|
-
- [API компоненты](#api)
|
|
39
|
-
- [Примеры использования](#примеры)
|
|
6
|
+
JavaScript/TypeScript SDK для работы с Code Solver API. Предоставляет простой интерфейс для индексации кода, поиска, работы с чатом и анализа зависимостей.
|
|
40
7
|
|
|
41
8
|
## 🎯 Основные возможности
|
|
42
9
|
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
- `new CodeSolverSDK()` - быстрая инициализация
|
|
52
|
-
- `autoConnect: false` - ручное управление WebSocket
|
|
53
|
-
- Алиасы методов для удобства (`create()`, `start()`, `stop()`)
|
|
54
|
-
|
|
55
|
-
- **🔌 Контролируемые WebSocket**:
|
|
56
|
-
- Ручное подключение только когда нужно
|
|
57
|
-
- Автоматический ping/pong механизм
|
|
58
|
-
- Интеллектуальное переподключение
|
|
59
|
-
- Мониторинг здоровья соединения
|
|
60
|
-
|
|
61
|
-
- **🧠 Потоковое мышление AI**:
|
|
62
|
-
- `streamChat()` с поддержкой Anthropic Claude thinking и VS Code команд
|
|
63
|
-
- Полная поддержка `ContentBlock[]` и `signature` блоков
|
|
64
|
-
- Сохранение криптографических подписей
|
|
65
|
-
- Обработка `signature_delta` событий
|
|
66
|
-
|
|
67
|
-
- **🎯 VS Code Extension интеграция (v2.7.0)**:
|
|
68
|
-
- Нативное выполнение команд через HTTP Streaming
|
|
69
|
-
- 10x ускорение (45ms vs 443ms старая архитектура)
|
|
70
|
-
- Поддержка всех VS Code команд (создание файлов, редактирование, поиск)
|
|
71
|
-
- Real-time feedback и error handling
|
|
72
|
-
|
|
73
|
-
- **🔍 Семантический поиск**:
|
|
74
|
-
- Инкрементальная индексация файлов
|
|
75
|
-
- Семантический поиск по коду
|
|
76
|
-
- Работа с зависимостями проектов
|
|
77
|
-
|
|
78
|
-
- **🌐 Кросс-платформенность**:
|
|
79
|
-
- ESM, CommonJS, браузер, Node.js
|
|
80
|
-
- Полная TypeScript типизация
|
|
81
|
-
- Региональные Anthropic endpoints
|
|
82
|
-
|
|
83
|
-
## Установка
|
|
10
|
+
- **💬 Chat API** - взаимодействие с AI моделями (Claude, GPT)
|
|
11
|
+
- **🔍 Code Search** - семантический поиск по коду
|
|
12
|
+
- **📊 Project Indexing** - индексация и анализ проектов
|
|
13
|
+
- **🕸️ Dependencies** - анализ зависимостей кода
|
|
14
|
+
- **📝 Context API** - получение контекста для AI
|
|
15
|
+
- **🛠️ Code Modification** - модификация кода через AI
|
|
16
|
+
|
|
17
|
+
## 📦 Установка
|
|
84
18
|
|
|
85
19
|
```bash
|
|
86
20
|
npm install solver-sdk
|
|
@@ -88,368 +22,401 @@ npm install solver-sdk
|
|
|
88
22
|
|
|
89
23
|
## 🚀 Быстрый старт
|
|
90
24
|
|
|
91
|
-
### 🎯 **VS Code Extension интеграция** (основной use case)
|
|
92
|
-
|
|
93
25
|
```javascript
|
|
94
|
-
// 📄 Полный код в docs/QUICK_START.md
|
|
95
26
|
import { CodeSolverSDK } from 'solver-sdk';
|
|
96
27
|
|
|
97
|
-
|
|
98
|
-
baseURL: 'http://localhost:3000',
|
|
99
|
-
apiKey: 'your-api-key'
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
// 45ms команды VS Code - 10x ускорение!
|
|
103
|
-
const stream = await sdk.chat.streamChat(messages, {
|
|
104
|
-
onVSCodeCommand: async (command) => {
|
|
105
|
-
return await vscode.commands.executeCommand(command.command, ...command.args);
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
**📚 [Смотрите полный 5-минутный старт](docs/QUICK_START.md)**
|
|
111
|
-
|
|
112
|
-
### ✅ Быстрая инициализация (без проверки API)
|
|
113
|
-
|
|
114
|
-
```javascript
|
|
115
|
-
const { CodeSolverSDK } = require('solver-sdk');
|
|
116
|
-
|
|
117
|
-
// Быстрое создание без валидации
|
|
28
|
+
// Создание SDK
|
|
118
29
|
const sdk = new CodeSolverSDK({
|
|
119
|
-
baseURL: '
|
|
30
|
+
baseURL: 'https://your-api-server.com',
|
|
120
31
|
apiKey: 'your-api-key',
|
|
121
|
-
|
|
32
|
+
timeout: 30000
|
|
122
33
|
});
|
|
123
34
|
|
|
124
|
-
//
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
console.log('✅ Проекты:', projects);
|
|
128
|
-
} catch (error) {
|
|
129
|
-
console.error('❌ Честная ошибка:', error.message);
|
|
130
|
-
// Нет fallback'ов - проблему нужно решать
|
|
131
|
-
}
|
|
132
|
-
```
|
|
35
|
+
// Проверка здоровья API
|
|
36
|
+
const isHealthy = await sdk.checkHealth();
|
|
37
|
+
console.log('API доступен:', isHealthy);
|
|
133
38
|
|
|
134
|
-
|
|
39
|
+
// Создание проекта
|
|
40
|
+
const project = await sdk.projects.createProject({
|
|
41
|
+
name: 'My Project',
|
|
42
|
+
path: '/path/to/project',
|
|
43
|
+
description: 'Описание проекта'
|
|
44
|
+
});
|
|
135
45
|
|
|
136
|
-
|
|
137
|
-
|
|
46
|
+
// Индексация проекта
|
|
47
|
+
const indexingResult = await sdk.indexing.indexProject(
|
|
48
|
+
'/path/to/project',
|
|
49
|
+
'My Project'
|
|
50
|
+
);
|
|
138
51
|
|
|
139
|
-
//
|
|
140
|
-
const
|
|
141
|
-
baseURL: 'https://localhost:3000',
|
|
142
|
-
apiKey: 'your-api-key'
|
|
143
|
-
});
|
|
52
|
+
// Ожидание завершения индексации
|
|
53
|
+
const finalStatus = await sdk.indexing.waitForCompletion(indexingResult.projectId);
|
|
144
54
|
|
|
145
|
-
//
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
55
|
+
// Поиск кода
|
|
56
|
+
const searchResults = await sdk.search.searchCode({
|
|
57
|
+
projectId: project.projectId,
|
|
58
|
+
query: 'function calculateSum',
|
|
59
|
+
maxResults: 10
|
|
60
|
+
});
|
|
150
61
|
|
|
151
|
-
|
|
62
|
+
// Работа с чатом
|
|
63
|
+
const response = await sdk.chat.chat([
|
|
64
|
+
{ role: 'user', content: 'Объясни этот код' }
|
|
65
|
+
], {
|
|
66
|
+
model: 'claude-3-5-sonnet-20241022',
|
|
67
|
+
maxTokens: 8192
|
|
68
|
+
});
|
|
152
69
|
```
|
|
153
70
|
|
|
154
|
-
|
|
71
|
+
## 📋 API Методы
|
|
155
72
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
73
|
+
### 📁 Projects API
|
|
74
|
+
```javascript
|
|
75
|
+
// Создание проекта
|
|
76
|
+
await sdk.projects.createProject({
|
|
77
|
+
name: 'Project Name',
|
|
78
|
+
path: '/project/path',
|
|
79
|
+
description: 'Description'
|
|
163
80
|
});
|
|
164
81
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
.then(isHealthy => console.log('Сервер доступен:', isHealthy))
|
|
168
|
-
.catch(console.error);
|
|
169
|
-
</script>
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## API
|
|
173
|
-
|
|
174
|
-
### Основные компоненты
|
|
175
|
-
|
|
176
|
-
- `CodeSolverSDK` - Основной класс SDK
|
|
177
|
-
- `ReasoningApi` - API для работы с рассуждениями
|
|
178
|
-
- `ProjectsApi` - API для работы с проектами
|
|
179
|
-
- `SearchApi` - API для поиска кода
|
|
180
|
-
- `AgentsApi` - API для работы с агентами
|
|
181
|
-
- `ContextApi` - API для работы с контекстом кода
|
|
182
|
-
- `DependenciesApi` - API для работы с зависимостями
|
|
183
|
-
- `ChatApi` - API для работы с чатом и потоковой передачей мышления
|
|
184
|
-
|
|
185
|
-
### Опции SDK
|
|
186
|
-
|
|
187
|
-
| Опция | Тип | Описание | Обязательна |
|
|
188
|
-
|-------|-----|----------|-------------|
|
|
189
|
-
| `baseURL` | string | Базовый URL API | Да |
|
|
190
|
-
| `apiKey` | string | API ключ для авторизации | Нет |
|
|
191
|
-
| `timeout` | number | Таймаут для HTTP запросов (мс) | Нет |
|
|
192
|
-
| `headers` | object | Пользовательские HTTP заголовки | Нет |
|
|
193
|
-
| `httpsAgent` | object | Опции для HTTPS агента (Node.js) | Нет |
|
|
194
|
-
| `mode` | string | Режим работы SDK ('browser', 'node', 'auto') | Нет |
|
|
195
|
-
| `websocket` | object | Настройки WebSocket (reconnect, timeout и др.) | Нет |
|
|
82
|
+
// Получение списка проектов
|
|
83
|
+
await sdk.projects.getProjects();
|
|
196
84
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
85
|
+
// Получение информации о проекте
|
|
86
|
+
await sdk.projects.getProject(projectId);
|
|
87
|
+
```
|
|
200
88
|
|
|
89
|
+
### 🔄 Projects & Indexing API
|
|
201
90
|
```javascript
|
|
202
|
-
//
|
|
203
|
-
const
|
|
204
|
-
|
|
91
|
+
// Создание/поиск проекта и запуск индексации
|
|
92
|
+
const project = await sdk.projects.findOrCreateProject('/path/to/project', 'Project Name');
|
|
93
|
+
await sdk.projects.startIndexing(project.id);
|
|
205
94
|
|
|
206
|
-
//
|
|
207
|
-
const
|
|
208
|
-
console.log('Новый проект:', newProject);
|
|
95
|
+
// Получение статуса индексации
|
|
96
|
+
const status = await sdk.projects.getProjectStatus(project.id);
|
|
209
97
|
|
|
210
|
-
//
|
|
211
|
-
|
|
98
|
+
// Ожидание завершения индексации
|
|
99
|
+
while (status.indexStatus !== 'complete') {
|
|
100
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
101
|
+
status = await sdk.projects.getProjectStatus(project.id);
|
|
102
|
+
}
|
|
212
103
|
```
|
|
213
104
|
|
|
214
|
-
###
|
|
215
|
-
|
|
105
|
+
### 🔍 Search API
|
|
216
106
|
```javascript
|
|
217
107
|
// Поиск кода
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
108
|
+
await sdk.search.searchCode({
|
|
109
|
+
projectId: 'project-id',
|
|
110
|
+
query: 'search query',
|
|
111
|
+
maxResults: 20
|
|
221
112
|
});
|
|
222
|
-
console.log('Результаты поиска:', searchResults);
|
|
223
|
-
|
|
224
|
-
// Семантический поиск кода
|
|
225
|
-
const semanticResults = await sdk.search.semanticSearch(projectId, {
|
|
226
|
-
query: 'функция для обработки HTTP запросов',
|
|
227
|
-
limit: 10
|
|
228
|
-
});
|
|
229
|
-
console.log('Семантические результаты:', semanticResults);
|
|
230
113
|
```
|
|
231
114
|
|
|
232
|
-
###
|
|
233
|
-
|
|
115
|
+
### 💬 Chat API
|
|
234
116
|
```javascript
|
|
235
|
-
//
|
|
236
|
-
const
|
|
237
|
-
|
|
238
|
-
|
|
117
|
+
// Обычный чат
|
|
118
|
+
const response = await sdk.chat.chat([
|
|
119
|
+
{ role: 'user', content: 'Объясни этот код' }
|
|
120
|
+
], {
|
|
121
|
+
model: 'claude-3-5-sonnet-20241022',
|
|
122
|
+
maxTokens: 8192
|
|
239
123
|
});
|
|
240
124
|
|
|
241
|
-
//
|
|
242
|
-
const
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
wsClient.enablePingPong(30000, 3);
|
|
247
|
-
|
|
248
|
-
// Обработка событий мышления
|
|
249
|
-
wsClient.on('content_block_delta', (data) => {
|
|
250
|
-
if (data.delta?.type === 'thinking_delta') {
|
|
251
|
-
console.log('Фрагмент размышления:', data.delta.thinking);
|
|
252
|
-
} else if (data.delta?.type === 'text_delta') {
|
|
253
|
-
console.log('Фрагмент ответа:', data.delta.text);
|
|
254
|
-
}
|
|
255
|
-
});
|
|
125
|
+
// Потоковый чат
|
|
126
|
+
for await (const chunk of sdk.chat.streamChat(messages, options)) {
|
|
127
|
+
console.log(chunk.text);
|
|
128
|
+
}
|
|
129
|
+
```
|
|
256
130
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
wsClient.disablePingPong();
|
|
262
|
-
wsClient.disconnectAll();
|
|
263
|
-
});
|
|
131
|
+
### 🕸️ Dependencies API
|
|
132
|
+
```javascript
|
|
133
|
+
// Граф зависимостей
|
|
134
|
+
await sdk.dependencies.getDependencyGraph(projectId);
|
|
264
135
|
|
|
265
|
-
//
|
|
266
|
-
|
|
267
|
-
console.log(`Состояние соединения:`, diagnostics);
|
|
136
|
+
// Статистика зависимостей
|
|
137
|
+
await sdk.dependencies.getDependencyStatistics(projectId);
|
|
268
138
|
```
|
|
269
139
|
|
|
270
|
-
|
|
140
|
+
## ⚙️ Конфигурация
|
|
271
141
|
|
|
272
142
|
```javascript
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
143
|
+
const sdk = new CodeSolverSDK({
|
|
144
|
+
baseURL: 'https://api.example.com', // Обязательный
|
|
145
|
+
apiKey: 'your-api-key', // Рекомендуется
|
|
146
|
+
timeout: 30000, // Таймаут запросов
|
|
147
|
+
headers: { // Дополнительные заголовки
|
|
148
|
+
'Custom-Header': 'value'
|
|
149
|
+
},
|
|
150
|
+
http: { // HTTP настройки
|
|
151
|
+
timeout: 45000,
|
|
152
|
+
retries: 3,
|
|
153
|
+
retryDelay: 1000
|
|
154
|
+
},
|
|
155
|
+
debug: true // Отладочная информация
|
|
276
156
|
});
|
|
157
|
+
```
|
|
277
158
|
|
|
278
|
-
|
|
279
|
-
console.log('Импортируется в:', fileDependencies.importedBy);
|
|
159
|
+
## 🧪 Тестирование
|
|
280
160
|
|
|
281
|
-
|
|
282
|
-
|
|
161
|
+
```bash
|
|
162
|
+
# Все тесты
|
|
163
|
+
npm test
|
|
283
164
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
console.log('Циклические зависимости:', analysis.cycles);
|
|
165
|
+
# Только HTTP тесты
|
|
166
|
+
npm test -- --testNamePattern="HTTP"
|
|
287
167
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
168
|
+
# Интеграционные тесты
|
|
169
|
+
npm run test:integration
|
|
170
|
+
|
|
171
|
+
# Тесты индексации
|
|
172
|
+
npm test -- --testPathPattern="indexing"
|
|
293
173
|
```
|
|
294
174
|
|
|
295
|
-
|
|
175
|
+
## 📚 Примеры использования
|
|
296
176
|
|
|
297
|
-
|
|
177
|
+
### Полный цикл работы с проектом
|
|
298
178
|
|
|
299
179
|
```javascript
|
|
300
|
-
|
|
180
|
+
import { CodeSolverSDK } from 'solver-sdk';
|
|
301
181
|
|
|
302
|
-
async function
|
|
182
|
+
async function fullWorkflow() {
|
|
303
183
|
const sdk = new CodeSolverSDK({
|
|
304
|
-
baseURL: '
|
|
305
|
-
apiKey: '
|
|
184
|
+
baseURL: 'http://localhost:3001',
|
|
185
|
+
apiKey: 'your-api-key'
|
|
306
186
|
});
|
|
307
187
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
model: 'claude-3-7-sonnet-20240229',
|
|
316
|
-
temperature: 0.7,
|
|
317
|
-
thinking: true,
|
|
318
|
-
authToken: 'your-auth-token' // Унифицированный параметр для аутентификации WebSocket
|
|
319
|
-
};
|
|
188
|
+
try {
|
|
189
|
+
// 1. Создаем проект
|
|
190
|
+
const project = await sdk.projects.createProject({
|
|
191
|
+
name: 'My React App',
|
|
192
|
+
path: '/path/to/react-app',
|
|
193
|
+
description: 'React приложение для анализа'
|
|
194
|
+
});
|
|
320
195
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
if (data.delta && data.delta.type === 'thinking_delta') {
|
|
332
|
-
process.stdout.write(data.delta.thinking); // Потоковый вывод размышлений
|
|
333
|
-
} else if (data.delta && data.delta.type === 'text_delta') {
|
|
334
|
-
process.stdout.write(data.delta.text); // Потоковый вывод итогового текста
|
|
335
|
-
}
|
|
336
|
-
break;
|
|
337
|
-
|
|
338
|
-
case 'error':
|
|
339
|
-
console.error('Ошибка:', data.message);
|
|
340
|
-
|
|
341
|
-
// Обработка ошибки географических ограничений
|
|
342
|
-
if (data.type === 'geo_restriction') {
|
|
343
|
-
console.error('Необходимо включить VPN для доступа к API Anthropic из вашего региона');
|
|
344
|
-
}
|
|
345
|
-
break;
|
|
196
|
+
// 2. Запускаем индексацию
|
|
197
|
+
console.log('Запуск индексации...');
|
|
198
|
+
await sdk.projects.startIndexing(project.id);
|
|
199
|
+
|
|
200
|
+
// 3. Ждем завершения индексации
|
|
201
|
+
console.log('Ожидание завершения индексации...');
|
|
202
|
+
while (true) {
|
|
203
|
+
const status = await sdk.projects.getProjectStatus(project.id);
|
|
204
|
+
if (status.indexStatus === 'complete') break;
|
|
205
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
346
206
|
}
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
207
|
+
|
|
208
|
+
// 4. Ищем React компоненты
|
|
209
|
+
const components = await sdk.search.searchCode({
|
|
210
|
+
projectId: project.id,
|
|
211
|
+
query: 'React.Component class',
|
|
212
|
+
maxResults: 10
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// 5. Анализируем зависимости
|
|
216
|
+
const dependencies = await sdk.dependencies.getDependencyGraph(project.id);
|
|
217
|
+
|
|
218
|
+
// 6. Задаем вопрос AI о коде
|
|
219
|
+
const aiResponse = await sdk.chat.chat([
|
|
220
|
+
{
|
|
221
|
+
role: 'user',
|
|
222
|
+
content: `Проанализируй найденные React компоненты: ${JSON.stringify(components)}`
|
|
223
|
+
}
|
|
224
|
+
], {
|
|
225
|
+
model: 'claude-3-5-sonnet-20241022',
|
|
226
|
+
maxTokens: 8192
|
|
227
|
+
});
|
|
356
228
|
|
|
357
|
-
console.log(
|
|
229
|
+
console.log('✅ Анализ завершен');
|
|
230
|
+
console.log('📊 Компоненты:', components.length);
|
|
231
|
+
console.log('🕸️ Зависимости:', dependencies);
|
|
232
|
+
console.log('🤖 AI анализ:', aiResponse.content[0].text);
|
|
233
|
+
|
|
358
234
|
} catch (error) {
|
|
359
|
-
console.error('Ошибка:', error);
|
|
360
|
-
|
|
361
|
-
// Проверка наличия ошибки географических ограничений
|
|
362
|
-
if (error.type === 'geo_restriction') {
|
|
363
|
-
console.error('Необходимо включить VPN для доступа к API Anthropic из вашего региона');
|
|
235
|
+
console.error('❌ Ошибка:', error.message);
|
|
364
236
|
}
|
|
365
237
|
}
|
|
366
|
-
}
|
|
367
238
|
|
|
368
|
-
|
|
239
|
+
fullWorkflow();
|
|
369
240
|
```
|
|
370
241
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
- `message_start` - начало сообщения от модели
|
|
374
|
-
- `content_block_start` - начало блока контента (текст или thinking)
|
|
375
|
-
- `content_block_delta` - дельта блока контента со следующими типами:
|
|
376
|
-
- `delta.type === 'thinking_delta'` - фрагмент размышления модели
|
|
377
|
-
- `delta.type === 'text_delta'` - фрагмент текстового ответа
|
|
378
|
-
- `delta.type === 'input_json_delta'` - фрагмент JSON для инструментов
|
|
379
|
-
- `delta.type === 'signature_delta'` - подпись блока мышления
|
|
380
|
-
- `content_block_stop` - завершение блока контента
|
|
381
|
-
- `message_delta` - дельта сообщения
|
|
382
|
-
- `message_stop` - завершение сообщения
|
|
242
|
+
## 🔧 Устранение неполадок
|
|
383
243
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
# Проверка подключения к API
|
|
390
|
-
npm run example:check-api
|
|
391
|
-
|
|
392
|
-
# Индексация проектов
|
|
393
|
-
npm run example:indexing
|
|
244
|
+
### Проблемы с подключением
|
|
245
|
+
```javascript
|
|
246
|
+
// Диагностика API
|
|
247
|
+
const diagnosis = await sdk.diagnoseAPI();
|
|
248
|
+
console.log('Диагностика:', diagnosis);
|
|
394
249
|
|
|
395
|
-
|
|
396
|
-
|
|
250
|
+
// Проверка здоровья конкретных эндпоинтов
|
|
251
|
+
if (!diagnosis.healthy) {
|
|
252
|
+
console.log('Проблемные эндпоинты:', diagnosis.errors);
|
|
253
|
+
}
|
|
397
254
|
```
|
|
398
255
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
256
|
+
### Таймауты и повторы
|
|
257
|
+
```javascript
|
|
258
|
+
// Увеличение таймаутов для больших проектов
|
|
259
|
+
const sdk = new CodeSolverSDK({
|
|
260
|
+
baseURL: 'https://api.example.com',
|
|
261
|
+
timeout: 120000, // 2 минуты
|
|
262
|
+
http: {
|
|
263
|
+
timeout: 90000,
|
|
264
|
+
retries: 5,
|
|
265
|
+
retryDelay: 2000
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
```
|
|
402
269
|
|
|
403
|
-
|
|
404
|
-
- **Node.js**: Версии 14.x и выше (как CommonJS, так и ESM)
|
|
405
|
-
- **VS Code**: Desktop и Web версии
|
|
270
|
+
## 📝 Changelog v3.0
|
|
406
271
|
|
|
407
|
-
|
|
272
|
+
### ✅ Добавлено
|
|
273
|
+
- Полная поддержка HTTP-only API
|
|
274
|
+
- Новый `IndexingClient` для простой индексации
|
|
275
|
+
- Улучшенная обработка ошибок
|
|
276
|
+
- Подробная диагностика API
|
|
277
|
+
- Потоковый чат через HTTP
|
|
408
278
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
279
|
+
### ❌ Удалено
|
|
280
|
+
- Поддержка WebSocket (полностью удалена)
|
|
281
|
+
- `socket.io-client` зависимость
|
|
282
|
+
- WebSocket события и обработчики
|
|
283
|
+
- Сложные WebSocket конфигурации
|
|
412
284
|
|
|
413
|
-
|
|
414
|
-
|
|
285
|
+
### 🔄 Изменено
|
|
286
|
+
- Все API методы теперь работают через HTTP
|
|
287
|
+
- Упрощенная конфигурация SDK
|
|
288
|
+
- Более быстрая инициализация
|
|
289
|
+
- Лучшая совместимость с разными средами
|
|
415
290
|
|
|
416
|
-
|
|
417
|
-
npm test
|
|
291
|
+
## 📄 Лицензия
|
|
418
292
|
|
|
419
|
-
|
|
420
|
-
npm run test:reasoning:all
|
|
293
|
+
MIT License
|
|
421
294
|
|
|
422
|
-
|
|
423
|
-
|
|
295
|
+
**Q: Пустые результаты поиска**
|
|
296
|
+
```javascript
|
|
297
|
+
// Убедитесь что проект проиндексирован
|
|
298
|
+
const readyProjects = await sdk.projects.getReadyProjects();
|
|
299
|
+
console.log('Готовые проекты:', readyProjects);
|
|
424
300
|
```
|
|
425
301
|
|
|
426
|
-
|
|
302
|
+
## 🔧 Индексация: полный workflow
|
|
427
303
|
|
|
428
304
|
```javascript
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
305
|
+
async function indexProject(projectPath, projectName) {
|
|
306
|
+
const sdk = await CodeSolverSDK.create({
|
|
307
|
+
baseURL: 'http://localhost:3000'
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
// 1. Создать/найти проект
|
|
311
|
+
const project = await sdk.projects.findOrCreateProject(projectPath, projectName);
|
|
312
|
+
|
|
313
|
+
// 2. Запустить индексацию
|
|
314
|
+
await sdk.projects.startIndexing(project.id);
|
|
315
|
+
|
|
316
|
+
// 3. Мониторинг прогресса
|
|
317
|
+
while (true) {
|
|
318
|
+
const status = await sdk.projects.getProjectStatus(project.id);
|
|
319
|
+
|
|
320
|
+
if (status.status === 'ready') {
|
|
321
|
+
console.log('✅ Индексация завершена!');
|
|
322
|
+
break;
|
|
323
|
+
} else if (status.status === 'error') {
|
|
324
|
+
console.log('❌ Ошибка:', status.error);
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
console.log(`📊 Прогресс: ${status.progress || 0}%`);
|
|
329
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
438
330
|
}
|
|
439
|
-
|
|
331
|
+
|
|
332
|
+
return project;
|
|
333
|
+
}
|
|
440
334
|
```
|
|
441
335
|
|
|
442
|
-
##
|
|
336
|
+
## 🔌 VS Code Extension (готовый код)
|
|
443
337
|
|
|
444
|
-
|
|
338
|
+
```typescript
|
|
339
|
+
import { CodeSolverSDK } from 'solver-sdk';
|
|
340
|
+
import * as vscode from 'vscode';
|
|
445
341
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
342
|
+
let sdk: CodeSolverSDK;
|
|
343
|
+
|
|
344
|
+
export async function activate(context: vscode.ExtensionContext) {
|
|
345
|
+
sdk = await CodeSolverSDK.create({
|
|
346
|
+
baseURL: 'http://localhost:3000'
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
// Команда индексации
|
|
350
|
+
const indexCmd = vscode.commands.registerCommand('extension.indexProject', async () => {
|
|
351
|
+
const folder = vscode.workspace.workspaceFolders?.[0];
|
|
352
|
+
if (!folder) return;
|
|
353
|
+
|
|
354
|
+
return vscode.window.withProgress({
|
|
355
|
+
location: vscode.ProgressLocation.Notification,
|
|
356
|
+
title: 'Индексация проекта',
|
|
357
|
+
cancellable: false
|
|
358
|
+
}, async (progress) => {
|
|
359
|
+
const project = await sdk.projects.findOrCreateProject(folder.uri.fsPath, folder.name);
|
|
360
|
+
await sdk.projects.startIndexing(project.id);
|
|
361
|
+
|
|
362
|
+
while (true) {
|
|
363
|
+
const status = await sdk.projects.getProjectStatus(project.id);
|
|
364
|
+
if (status.status === 'ready') break;
|
|
365
|
+
progress.report({ message: `${status.progress || 0}%` });
|
|
366
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
vscode.window.showInformationMessage('✅ Проект проиндексирован!');
|
|
370
|
+
});
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
// Команда поиска функций
|
|
374
|
+
const searchCmd = vscode.commands.registerCommand('extension.searchFunctions', async () => {
|
|
375
|
+
const query = await vscode.window.showInputBox({ prompt: 'Поиск функций' });
|
|
376
|
+
if (!query) return;
|
|
377
|
+
|
|
378
|
+
const projects = await sdk.projects.getReadyProjects();
|
|
379
|
+
if (projects.length === 0) return;
|
|
380
|
+
|
|
381
|
+
const results = await sdk.search.searchFunctions(projects[0].id, { query, limit: 20 });
|
|
382
|
+
|
|
383
|
+
const items = results.results.map(fn => ({
|
|
384
|
+
label: fn.name,
|
|
385
|
+
description: fn.signature,
|
|
386
|
+
detail: `${fn.filePath}:${fn.startLine}`,
|
|
387
|
+
function: fn
|
|
388
|
+
}));
|
|
389
|
+
|
|
390
|
+
const selected = await vscode.window.showQuickPick(items);
|
|
391
|
+
if (selected) {
|
|
392
|
+
const doc = await vscode.workspace.openTextDocument(selected.function.filePath);
|
|
393
|
+
const editor = await vscode.window.showTextDocument(doc);
|
|
394
|
+
|
|
395
|
+
const range = new vscode.Range(
|
|
396
|
+
selected.function.startLine - 1, 0,
|
|
397
|
+
selected.function.endLine - 1, 0
|
|
398
|
+
);
|
|
399
|
+
|
|
400
|
+
editor.selection = new vscode.Selection(range.start, range.end);
|
|
401
|
+
editor.revealRange(range, vscode.TextEditorRevealType.InCenter);
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
|
|
405
|
+
context.subscriptions.push(indexCmd, searchCmd);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// package.json для VS Code Extension
|
|
409
|
+
{
|
|
410
|
+
"contributes": {
|
|
411
|
+
"commands": [
|
|
412
|
+
{ "command": "extension.indexProject", "title": "📊 Индексировать проект" },
|
|
413
|
+
{ "command": "extension.searchFunctions", "title": "🔍 Поиск функций" }
|
|
414
|
+
]
|
|
415
|
+
},
|
|
416
|
+
"dependencies": { "solver-sdk": "^3.1.0" }
|
|
417
|
+
}
|
|
418
|
+
```
|
|
452
419
|
|
|
453
|
-
|
|
420
|
+
---
|
|
454
421
|
|
|
455
|
-
|
|
422
|
+
**🎉 Один файл = полная документация!**
|