nodebb-plugin-integration 0.4.2 → 0.5.0

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.ru.md CHANGED
@@ -1,347 +1,199 @@
1
- # NodeBB Integration Layer
2
-
3
- AI-слой интеграции для форумов NodeBB с поддержкой MCP, семантического поиска, RAG pipeline и векторного хранилища Qdrant.
4
-
5
- ## Возможности
6
-
7
- * Интеграция с NodeBB
8
- * MCP (Model Context Protocol) сервер
9
- * Семантический поиск по содержимому форума
10
- * RAG pipeline (Retrieval Augmented Generation)
11
- * Поддержка Qdrant Vector Database
12
- * Поддержка OpenAI Embeddings
13
- * Локальный режим с fake embeddings
14
- * Работа без NodeBB для разработки
15
- * Автоматические тесты через GitHub Actions
16
-
17
- # Архитектура
18
-
19
- ```
20
- NodeBB
21
-
22
- |
23
- |
24
-
25
- Integration Layer
26
-
27
- |
28
-
29
- +------------+------------+
30
-
31
- | |
32
-
33
- MCP AI
34
-
35
- | |
36
-
37
- Tools API Embeddings
38
-
39
- |
40
-
41
- Qdrant
42
-
43
- |
44
-
45
- Knowledge Base
46
- ```
47
-
48
- # Требования
49
-
50
- Минимально:
51
-
52
- * Node.js >= 20
53
- * npm >= 10
54
-
55
- Опционально:
56
-
57
- * NodeBB
58
- * Redis
59
- * Qdrant
60
- * OpenAI API
61
-
62
- # Установка
63
-
64
- Клонирование:
65
-
66
- ```bash
67
- git clone https://github.com/Sergey-ek/nodebb-plugin-integration.git
68
-
69
- cd nodebb-plugin-integration
70
- ```
71
-
72
- Установка зависимостей:
73
-
74
- ```bash
75
- npm install
76
- ```
77
-
78
- Создание конфигурации:
79
-
80
- ```bash
81
- cp .env.example .env
82
- ```
83
-
84
- # Режим разработки
85
-
86
- По умолчанию используется локальный генератор векторов:
87
-
88
- ```
89
- AI_PROVIDER=fake
90
- ```
91
-
92
- Этот режим позволяет запускать проект без:
93
-
94
- * OpenAI API
95
- * Qdrant
96
- * NodeBB
97
-
98
- Проверка конфигурации:
99
-
100
- ```bash
101
- npm run diagnose
102
- ```
103
-
104
- Пример:
105
-
106
- ```
107
- {
108
- environment: "development",
109
-
110
- embeddings:
111
- {
112
- provider: "fake",
113
- size: 1536
114
- }
115
- }
116
- ```
117
-
118
- # Тестирование
119
-
120
- Проверка синтаксиса:
121
-
122
- ```bash
123
- npm run check
124
- ```
125
-
126
- Запуск тестов:
127
-
128
- ```bash
129
- npm test
130
- ```
131
-
132
- Ожидаемый результат:
133
-
134
- ```
135
- 8 passing
136
- ```
137
-
138
- # Интеграция с NodeBB
139
-
140
- Настройка:
141
-
142
- ```
143
- NODEBB_URL=http://localhost:4567
144
-
145
- NODEBB_API_KEY=your_token
146
- ```
147
-
148
- При работе внутри NodeBB используются оригинальные модули NodeBB.
149
-
150
- В standalone режиме используются безопасные адаптеры:
151
-
152
- ```
153
- NodeBB отсутствует
154
-
155
- |
156
-
157
- Fallback adapter
158
-
159
- |
160
-
161
- Тесты продолжают работать
162
- ```
163
-
164
- # AI Pipeline
165
-
166
- Полный поток:
167
-
168
- ```
169
- Сообщение форума
170
-
171
- |
172
-
173
- Создание embedding
174
-
175
- |
176
-
177
- Сохранение vector
178
-
179
- |
180
-
181
- Qdrant similarity search
182
-
183
- |
184
-
185
- Получение контекста
186
-
187
- |
188
-
189
- AI ответ
190
- ```
191
-
192
- # Embeddings
193
-
194
- ## Fake режим
195
-
196
- Для разработки:
197
-
198
- ```
199
- AI_PROVIDER=fake
200
- ```
201
-
202
- Плюсы:
203
-
204
- * бесплатно;
205
- * быстро;
206
- * не требует сети;
207
- * используется в тестах.
208
-
209
- ## OpenAI режим
210
-
211
- Настройка:
212
-
213
- ```
214
- AI_PROVIDER=openai
215
-
216
- OPENAI_API_KEY=your_key
217
- ```
218
-
219
- # Qdrant
220
-
221
- Конфигурация:
222
-
223
- ```
224
- QDRANT_URL=http://localhost:6333
225
-
226
- QDRANT_COLLECTION=nodebb_knowledge
227
- ```
228
-
229
- Автоматически выполняется:
230
-
231
- * проверка коллекции;
232
- * создание коллекции;
233
- * загрузка векторов;
234
- * поиск похожих документов.
235
-
236
- # MCP сервер
237
-
238
- Запуск:
239
-
240
- ```bash
241
- npm run mcp
242
- ```
243
-
244
- Доступные инструменты:
245
-
246
- ```
247
- get_forum_info
248
-
249
- get_post
250
-
251
- get_topic
252
-
253
- get_user
254
-
255
- search_knowledge
256
- ```
257
-
258
- Пример поиска:
259
-
260
- ```
261
- search_knowledge
262
-
263
- {
264
- "query": "как установить NodeBB",
265
- "limit": 5
266
- }
267
- ```
268
-
269
- # Структура проекта
270
-
271
- ```
272
- .
273
-
274
- ├── library.js
275
-
276
- ├── package.json
277
-
278
- ├── plugin.json
279
-
280
-
281
- ├── src
282
-
283
- │
284
-
285
- ├── ai
286
-
287
- │ ├── embeddings.js
288
-
289
- │ ├── openai.js
290
-
291
- │ ├── qdrant.js
292
-
293
- │ ├── indexer.js
294
-
295
- │ └── search.js
296
-
297
-
298
- │
299
-
300
- ├── mcp
301
-
302
- │ ├── server.js
303
-
304
- │ └── tools.js
305
-
306
-
307
- │
308
-
309
- ├── nodebb
310
-
311
- │ ├── meta.js
312
-
313
- │ ├── posts.js
314
-
315
- │ ├── topics.js
316
-
317
- │ └── users.js
318
-
319
-
320
- │
321
-
322
- └── config
323
-
324
- └── index.js
325
-
326
-
327
- └── test
328
-
329
- └── plugin.test.js
330
- ```
331
-
332
- # Безопасность
333
-
334
- Не добавлять в Git:
335
-
336
- ```
337
- .env
338
-
339
- OPENAI_API_KEY
340
-
341
- NODEBB_API_KEY
342
-
343
- ```
344
-
345
- # Лицензия
346
-
347
- MIT
1
+ # NodeBB Integration Layer
2
+
3
+ Плагин интеграции с форумами NodeBB, предоставляющий MCP (Model Context Protocol), семантический поиск на базе AI, RAG-поиск и хранение векторов в Qdrant.
4
+
5
+ ## Возможности
6
+
7
+ - Интеграция с NodeBB
8
+ - MCP-сервер с транспортом Streamable HTTP
9
+ - Отдельный дочерний процесс MCP под управлением NodeBB
10
+ - Аутентификация MCP-клиентов по Bearer Token
11
+ - Внутренняя аутентификация API между MCP и NodeBB
12
+ - Генерация embeddings через OpenAI
13
+ - Хранение векторов и семантический поиск в Qdrant
14
+ - RAG-поиск с проверкой прав доступа NodeBB
15
+ - Индексация каждого сообщения отдельно, включая ответы
16
+ - Настройка исключённых категорий
17
+ - Режимы AI-провайдера OpenAI и Fake
18
+ - Интерфейс настройки в ACP
19
+ - Автоматизированные тесты
20
+
21
+ ## Архитектура
22
+
23
+ NodeBB → Integration Plugin → MCP / AI
24
+
25
+ MCP: Streamable HTTP → MCP Child Process → Internal NodeBB API → NodeBB Access Control
26
+
27
+ AI: OpenAI → Embeddings → Qdrant → Vector Search → Knowledge Retrieval
28
+
29
+ ## Требования
30
+
31
+ - Node.js >= 20
32
+ - npm >= 10
33
+ - NodeBB 4.x
34
+
35
+ Для работы AI необходимы API-ключ OpenAI и сервер Qdrant. Для работы MCP необходим запущенный экземпляр NodeBB.
36
+
37
+ ## Установка
38
+
39
+ Установите плагин через интерфейс управления плагинами NodeBB или используйте обычную процедуру установки плагинов.
40
+
41
+ Установите зависимости командой npm install в каталоге плагина.
42
+
43
+ Перезапустите NodeBB и откройте настройки плагина: ACP → Plugins → NodeBB Integration.
44
+
45
+ ## Настройка
46
+
47
+ Плагин настраивается через интерфейс ACP NodeBB.
48
+
49
+ ### AI-провайдер
50
+
51
+ Доступны два режима.
52
+
53
+ **OpenAI**
54
+
55
+ Включает:
56
+ - Генерацию embeddings через OpenAI
57
+ - Хранение векторов в Qdrant
58
+ - Индексацию сообщений
59
+ - Семантический поиск
60
+ - RAG-поиск
61
+
62
+ Настраиваются API-ключ OpenAI, модель и размерность embeddings, URL Qdrant и имя коллекции.
63
+
64
+ **Fake**
65
+
66
+ Полностью отключает функциональность AI:
67
+ - API OpenAI не вызывается.
68
+ - Qdrant не используется.
69
+ - Embeddings не создаются.
70
+ - Индексация сообщений отключена.
71
+ - Семантический поиск отключён.
72
+
73
+ Интеграция с NodeBB и MCP продолжают работать.
74
+
75
+ Настройки OpenAI и Qdrant сохраняются при переключении провайдеров. Повторный выбор OpenAI снова включает AI-конвейер.
76
+
77
+ Режим Fake предназначен для разработки и тестирования интеграции NodeBB и MCP без внешних AI-сервисов.
78
+
79
+ ### Исключённые категории
80
+
81
+ Категории, выбранные в ACP, исключаются из AI-индексации и семантического поиска.
82
+
83
+ ## AI-конвейер
84
+
85
+ При включённом OpenAI обработка выполняется следующим образом:
86
+
87
+ Сообщение форума → Генерация Embeddings → Сохранение векторов в Qdrant → Семантический поиск → Проверка прав доступа NodeBB → Получение содержимого сообщений
88
+
89
+ Каждое сообщение индексируется отдельно, включая ответы.
90
+
91
+ Результаты поиска проверяются на соответствие правам NodeBB до получения содержимого сообщений. Сообщения и темы, недоступные сервисному пользователю, исключаются из результатов.
92
+
93
+ Qdrant хранит только векторы и метаданные. Текст сообщений извлекается из NodeBB после проверки прав доступа.
94
+
95
+ ## Qdrant
96
+
97
+ Через ACP задаются URL Qdrant, имя коллекции и размерность векторов.
98
+
99
+ Плагин проверяет наличие коллекции и создаёт её при необходимости.
100
+
101
+ При выборе Fake обращения к Qdrant не выполняются.
102
+
103
+ ## MCP-сервер
104
+
105
+ MCP-сервер управляется плагином NodeBB и работает в отдельном дочернем процессе.
106
+
107
+ Транспорт:
108
+ - Streamable HTTP
109
+ - Аутентификация Bearer Token
110
+
111
+ MCP-сервер взаимодействует с NodeBB через защищённый внутренний API. Для него используется отдельный секрет, управляемый плагином.
112
+
113
+ В ACP настраиваются:
114
+ - Включение и отключение MCP
115
+ - Адрес привязки
116
+ - Порт
117
+ - URL NodeBB
118
+ - Bearer Token
119
+ - UID сервисного пользователя
120
+
121
+ UID сервисного пользователя задаётся администратором. MCP-клиенты не могут его переопределять.
122
+
123
+ ### Доступные инструменты
124
+
125
+ - get_forum_info — Получение общедоступной информации о форуме.
126
+ - get_post — Получение сообщения после проверки прав доступа.
127
+ - get_topic — Получение темы после проверки прав доступа.
128
+ - get_user — Получение общедоступной информации о пользователе.
129
+ - search_knowledge — Поиск по проиндексированным данным форума.
130
+
131
+ Для search_knowledge необходим провайдер OpenAI. В режиме Fake инструмент возвращает явную ошибку о выключенном AI.
132
+
133
+ ## Безопасность
134
+
135
+ - MCP-клиенты проходят аутентификацию по Bearer Token.
136
+ - Внутренние API-запросы используют отдельный секрет.
137
+ - Секреты не возвращаются в интерфейс ACP.
138
+ - Пустые поля секретов сохраняют ранее заданные значения.
139
+ - Идентификаторам пользователей, переданным MCP-клиентами, не доверяют.
140
+ - Для проверки прав используется настроенный сервисный пользователь.
141
+ - Права на сообщения и темы проверяются до возврата содержимого.
142
+ - При ошибке проверки доступа доступ запрещается.
143
+ - Payload Qdrant содержит идентификаторы и метаданные, но не текст сообщений.
144
+
145
+ Не добавляйте API-ключи, токены и другие секреты в систему контроля версий.
146
+
147
+ ## Разработка и тестирование
148
+
149
+ Установка зависимостей: npm install
150
+
151
+ Проверка синтаксиса: npm run check
152
+
153
+ Запуск тестов: npm test
154
+
155
+
156
+ Тесты проверяют конфигурацию, аргументы MCP-инструментов и другие компоненты плагина.
157
+
158
+ ## Структура проекта
159
+
160
+ library.js
161
+ package.json
162
+ plugin.json
163
+ public/
164
+ js/admin.js
165
+ templates/admin/plugins/integration.tpl
166
+ src/
167
+ ai/
168
+ embeddings.js
169
+ indexer.js
170
+ openai.js
171
+ qdrant.js
172
+ search.js
173
+ config/
174
+ index.js
175
+ validation.js
176
+ events/
177
+ index.js
178
+ mcp/
179
+ manager.js
180
+ server.js
181
+ tools.js
182
+ nodebb/
183
+ categories.js
184
+ index.js
185
+ meta.js
186
+ posts.js
187
+ privileges.js
188
+ topics.js
189
+ users.js
190
+ routes/
191
+ api.js
192
+ index.js
193
+ test/
194
+ config-validation.test.js
195
+ mcp-tools.test.js
196
+
197
+ ## Лицензия
198
+
199
+ MIT