blockmine 1.22.0 → 1.23.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.
Files changed (102) hide show
  1. package/.claude/settings.json +5 -1
  2. package/.claude/settings.local.json +10 -1
  3. package/CHANGELOG.md +27 -3
  4. package/CLAUDE.md +284 -0
  5. package/README.md +302 -152
  6. package/backend/package-lock.json +681 -9
  7. package/backend/package.json +8 -0
  8. package/backend/prisma/migrations/20251116111851_add_execution_trace/migration.sql +22 -0
  9. package/backend/prisma/migrations/20251120154914_add_panel_api_keys/migration.sql +21 -0
  10. package/backend/prisma/migrations/20251121110241_add_proxy_table/migration.sql +45 -0
  11. package/backend/prisma/migrations/migration_lock.toml +2 -2
  12. package/backend/prisma/schema.prisma +70 -1
  13. package/backend/src/__tests__/services/BotLifecycleService.test.js +9 -4
  14. package/backend/src/ai/plugin-assistant-system-prompt.md +788 -0
  15. package/backend/src/api/middleware/auth.js +27 -0
  16. package/backend/src/api/middleware/botAccess.js +7 -3
  17. package/backend/src/api/middleware/panelApiAuth.js +135 -0
  18. package/backend/src/api/routes/aiAssistant.js +995 -0
  19. package/backend/src/api/routes/auth.js +669 -633
  20. package/backend/src/api/routes/botCommands.js +107 -0
  21. package/backend/src/api/routes/botGroups.js +165 -0
  22. package/backend/src/api/routes/botHistory.js +108 -0
  23. package/backend/src/api/routes/botPermissions.js +99 -0
  24. package/backend/src/api/routes/botStatus.js +36 -0
  25. package/backend/src/api/routes/botUsers.js +162 -0
  26. package/backend/src/api/routes/bots.js +2451 -2402
  27. package/backend/src/api/routes/eventGraphs.js +4 -1
  28. package/backend/src/api/routes/logs.js +13 -3
  29. package/backend/src/api/routes/panel.js +66 -66
  30. package/backend/src/api/routes/panelApiKeys.js +179 -0
  31. package/backend/src/api/routes/pluginIde.js +1715 -135
  32. package/backend/src/api/routes/plugins.js +376 -219
  33. package/backend/src/api/routes/proxies.js +130 -0
  34. package/backend/src/api/routes/search.js +4 -0
  35. package/backend/src/api/routes/servers.js +20 -3
  36. package/backend/src/api/routes/settings.js +5 -0
  37. package/backend/src/api/routes/system.js +174 -174
  38. package/backend/src/api/routes/traces.js +131 -0
  39. package/backend/src/config/debug.config.js +36 -0
  40. package/backend/src/core/BotHistoryStore.js +180 -0
  41. package/backend/src/core/BotManager.js +14 -4
  42. package/backend/src/core/BotProcess.js +1517 -1092
  43. package/backend/src/core/EventGraphManager.js +37 -123
  44. package/backend/src/core/GraphExecutionEngine.js +977 -321
  45. package/backend/src/core/MessageQueue.js +12 -6
  46. package/backend/src/core/PluginLoader.js +99 -5
  47. package/backend/src/core/PluginManager.js +74 -13
  48. package/backend/src/core/TaskScheduler.js +1 -1
  49. package/backend/src/core/commands/whois.js +1 -1
  50. package/backend/src/core/node-registries/actions.js +70 -0
  51. package/backend/src/core/node-registries/arrays.js +18 -0
  52. package/backend/src/core/node-registries/data.js +1 -1
  53. package/backend/src/core/node-registries/events.js +14 -0
  54. package/backend/src/core/node-registries/logic.js +17 -0
  55. package/backend/src/core/node-registries/strings.js +34 -0
  56. package/backend/src/core/node-registries/type.js +25 -0
  57. package/backend/src/core/nodes/actions/bot_look_at.js +1 -1
  58. package/backend/src/core/nodes/actions/create_command.js +189 -0
  59. package/backend/src/core/nodes/actions/delete_command.js +92 -0
  60. package/backend/src/core/nodes/actions/update_command.js +133 -0
  61. package/backend/src/core/nodes/arrays/join.js +28 -0
  62. package/backend/src/core/nodes/data/cast.js +2 -1
  63. package/backend/src/core/nodes/logic/not.js +22 -0
  64. package/backend/src/core/nodes/strings/starts_with.js +1 -1
  65. package/backend/src/core/nodes/strings/to_lower.js +22 -0
  66. package/backend/src/core/nodes/strings/to_upper.js +22 -0
  67. package/backend/src/core/nodes/type/to_string.js +32 -0
  68. package/backend/src/core/services/BotLifecycleService.js +255 -16
  69. package/backend/src/core/services/CommandExecutionService.js +430 -351
  70. package/backend/src/core/services/DebugSessionManager.js +347 -0
  71. package/backend/src/core/services/GraphCollaborationManager.js +501 -0
  72. package/backend/src/core/services/MinecraftBotManager.js +259 -0
  73. package/backend/src/core/services/MinecraftViewerService.js +216 -0
  74. package/backend/src/core/services/TraceCollectorService.js +545 -0
  75. package/backend/src/core/system/RuntimeCommandRegistry.js +116 -0
  76. package/backend/src/core/system/Transport.js +0 -4
  77. package/backend/src/core/validation/nodeSchemas.js +6 -6
  78. package/backend/src/real-time/botApi/handlers/graphHandlers.js +2 -2
  79. package/backend/src/real-time/botApi/handlers/graphWebSocketHandlers.js +1 -1
  80. package/backend/src/real-time/botApi/utils.js +11 -0
  81. package/backend/src/real-time/panelNamespace.js +387 -0
  82. package/backend/src/real-time/presence.js +7 -2
  83. package/backend/src/real-time/socketHandler.js +395 -4
  84. package/backend/src/server.js +18 -0
  85. package/frontend/dist/assets/index-B1serztM.js +11210 -0
  86. package/frontend/dist/assets/index-t6K1u4OV.css +32 -0
  87. package/frontend/dist/index.html +2 -2
  88. package/frontend/package-lock.json +9437 -0
  89. package/frontend/package.json +8 -0
  90. package/package.json +2 -2
  91. package/screen/console.png +0 -0
  92. package/screen/dashboard.png +0 -0
  93. package/screen/graph_collabe.png +0 -0
  94. package/screen/graph_live_debug.png +0 -0
  95. package/screen/management_command.png +0 -0
  96. package/screen/node_debug_trace.png +0 -0
  97. package/screen/plugin_/320/276/320/261/320/267/320/276/321/200.png +0 -0
  98. package/screen/websocket.png +0 -0
  99. package/screen//320/275/320/260/321/201/321/202/321/200/320/276/320/271/320/272/320/270_/320/276/321/202/320/264/320/265/320/273/321/214/320/275/321/213/321/205_/320/272/320/276/320/274/320/260/320/275/320/264_/320/272/320/260/320/266/320/264/321/203_/320/272/320/276/320/274/320/260/320/275/320/273/320/264/321/203_/320/274/320/276/320/266/320/275/320/276_/320/275/320/260/321/201/321/202/321/200/320/260/320/270/320/262/320/260/321/202/321/214.png +0 -0
  100. package/screen//320/277/320/273/320/260/320/275/320/270/321/200/320/276/320/262/321/211/320/270/320/272_/320/274/320/276/320/266/320/275/320/276_/320/267/320/260/320/264/320/260/320/262/320/260/321/202/321/214_/320/264/320/265/320/271/321/201/321/202/320/262/320/270/321/217_/320/277/320/276_/320/262/321/200/320/265/320/274/320/265/320/275/320/270.png +0 -0
  101. package/frontend/dist/assets/index-CfTo92bP.css +0 -1
  102. package/frontend/dist/assets/index-CiFD5X9Z.js +0 -8344
@@ -1,5 +1,9 @@
1
1
  {
2
2
  "enableAllProjectMcpServers": true,
3
+ "env": {
4
+ "ANTHROPIC_BASE_URL": "https://api.ohmygpt.com",
5
+ "ANTHROPIC_API_KEY": "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"
6
+ },
3
7
  "enabledMcpjsonServers": [
4
8
  "mysql",
5
9
  "sequential-thinking",
@@ -12,7 +16,7 @@
12
16
  "MultiEdit:*",
13
17
  "NotebookEdit:*",
14
18
  "Bash:*"
15
- ],
19
+ ],
16
20
  "defaultMode": "acceptEdits"
17
21
  },
18
22
  "hooks": {
@@ -28,7 +28,16 @@
28
28
  "Bash(\"D:\\webstormproject\\blockmind\\frontend\\src\\components\\visual-editor\\nodes\\flow\\flowDelay.js\")",
29
29
  "Bash(python:*)",
30
30
  "Bash(do sed -i \"s/description: ''[^'']*'',$//\" \"$f\" 2)",
31
- "Bash(done)"
31
+ "Bash(done)",
32
+ "Bash(\"D:\\webstormproject\\blockmine\\frontend\\src\\components\\ide\\AIAssistant\\utils\\constants.js\")",
33
+ "Bash(\"D:\\webstormproject\\blockmine\\frontend\\src\\components\\ide\\AIAssistant\\hooks\\useAISettings.js\")",
34
+ "Bash(\"D:\\webstormproject\\blockmine\\frontend\\src\\components\\ide\\AIAssistant\\hooks\\useToolCalls.js\")",
35
+ "Bash(\"D:\\webstormproject\\blockmine\\frontend\\src\\components\\ide\\AIAssistant\\hooks\\useSSEStream.js\")",
36
+ "Bash(\"D:\\webstormproject\\blockmine\\frontend\\src\\components\\ide\\AIAssistant\\hooks\\useAIChat.js\")",
37
+ "Bash(\"D:\\webstormproject\\blockmine\\frontend\\src\\components\\ide\\AIAssistant\\components\\ToolCallCard.jsx\")",
38
+ "Bash(\"D:\\webstormproject\\blockmine\\frontend\\src\\components\\ide\\AIAssistant\\components\\SettingsPanel.jsx\")",
39
+ "Bash(\"D:\\webstormproject\\blockmine\\frontend\\src\\components\\ide\\AIAssistant\\components\\ChatMessages.jsx\")",
40
+ "Bash(\"D:\\webstormproject\\blockmine\\frontend\\src\\components\\ide\\AIAssistant\\components\\DiffViewer.jsx\")"
32
41
  ],
33
42
  "deny": [],
34
43
  "ask": []
package/CHANGELOG.md CHANGED
@@ -1,6 +1,30 @@
1
- # История версий
2
-
3
-
1
+ # История версий
2
+
3
+
4
+ ## [1.23.0](https://github.com/blockmineJS/blockmine/compare/v1.22.0...v1.23.0) (2025-11-25)
5
+
6
+
7
+ ### 🐛 Исправления
8
+
9
+ * нода установить переменную. селект Хранить в бд ничего не отображал ([adf4a85](https://github.com/blockmineJS/blockmine/commit/adf4a85929b47d3cb0d0771d7ae205ac5650809f))
10
+ * теперь для изменения владельца в боте, не надо перезапускать бэкенд ([0c0d675](https://github.com/blockmineJS/blockmine/commit/0c0d675cfa67db6af752726c5fc23d3e26cffcb5))
11
+ * cmd. Первая проверка тип чата, а потом аргументы ([2acdff1](https://github.com/blockmineJS/blockmine/commit/2acdff1db27ad1675cb9168748ff0d8a65271fe9))
12
+ * exec пины теперь коннектятся только к exec ([a57f643](https://github.com/blockmineJS/blockmine/commit/a57f643e104bd94c23046493444709bb8de6ed13))
13
+
14
+
15
+ ### ✨ Новые возможности
16
+
17
+ * дебаг режим для графов ([ffc910b](https://github.com/blockmineJS/blockmine/commit/ffc910b772bccf9b64ca828eb55debddb11715d7))
18
+ * добавлен ai помощник в blockmine ide ([d7c5f7e](https://github.com/blockmineJS/blockmine/commit/d7c5f7e555beacf614b6cdc94706339880aac55c))
19
+ * добавлен diff для просмотра изменений кода от ии ([d0159f0](https://github.com/blockmineJS/blockmine/commit/d0159f0884863ec10136f4bf32ea7daf0702d476))
20
+ * новая вкладка - прокси ([3094b8b](https://github.com/blockmineJS/blockmine/commit/3094b8b5f1b9a59dd6494ff54c721f1e720b28f6))
21
+ * новая ивент нода - При запуске бота ([5189a02](https://github.com/blockmineJS/blockmine/commit/5189a024c5e57fe8cb28f557b946247644367491))
22
+ * новые ноды ([610b501](https://github.com/blockmineJS/blockmine/commit/610b501d89cb744ca9ea7a9e35adc7ae1ec3766b))
23
+ * новый ide редактор ([2d7b302](https://github.com/blockmineJS/blockmine/commit/2d7b3026882b56a226760ba38c52cba0815a0720))
24
+ * подсветки при соединении нод ([dd06cdd](https://github.com/blockmineJS/blockmine/commit/dd06cdd4fca871713688382c9b73d0eaa4d1b8bd))
25
+ * теперь за бота можно ходить прямо в браузере! ([42f9257](https://github.com/blockmineJS/blockmine/commit/42f9257ee3ce166fda648e9a2ca6947c630a21e2))
26
+ * фиксы и для нод копирование вставка графов ([aa1308d](https://github.com/blockmineJS/blockmine/commit/aa1308d19122ebc762ec1ebd3f523e12c2fb5aa2))
27
+
4
28
  ## [1.22.0](https://github.com/blockmineJS/blockmine/compare/v1.21.0...v1.22.0) (2025-11-16)
5
29
 
6
30
 
package/CLAUDE.md ADDED
@@ -0,0 +1,284 @@
1
+ # Документация для разработки BlockMine
2
+
3
+
4
+ НИКОГДА НЕ ДОБАВЛЯЙ КОММЕНТАРИИ К ПОНЯТНОМУ КОДУ. router.use понятно что роутер подключает
5
+ Старайся дополнять CLAUDE.md чем то новым и новыми функциями которые могут понадобится агентам
6
+
7
+ Этот документ содержит инструкции для AI-ассистентов и разработчиков по работе с кодовой базой BlockMine.
8
+
9
+ ## Содержание
10
+
11
+ - [Добавление новых нод в визуальный редактор](#добавление-новых-нод-в-визуальный-редактор)
12
+
13
+ ---
14
+
15
+ ## Добавление новых нод в визуальный редактор
16
+
17
+ Ноды в BlockMine состоят из двух частей: frontend (React/TypeScript) и backend (Node.js). Для добавления новой ноды необходимо внести изменения в оба места.
18
+
19
+ ### 1. Frontend: Создание определения ноды
20
+
21
+ Ноды организованы по категориям в директории `frontend/src/components/visual-editor/nodes/`.
22
+
23
+ #### Пример: Нода события "При запуске бота"
24
+
25
+ **Шаг 1: Создайте файл определения ноды**
26
+
27
+ Создайте файл в соответствующей категории, например:
28
+ ```
29
+ frontend/src/components/visual-editor/nodes/event/eventBotStartup.js
30
+ ```
31
+
32
+ ```javascript
33
+ import { NodeDefinition } from '../../core/registry';
34
+
35
+ /**
36
+ * Определение ноды event:botStartup
37
+ * Срабатывает один раз при запуске бота
38
+ */
39
+ export const eventBotStartupDefinition = new NodeDefinition({
40
+ type: 'event:botStartup', // Уникальный тип ноды (формат: category:name)
41
+ category: 'event', // Категория для группировки в UI
42
+ label: '🚀 При запуске бота', // Отображаемое название
43
+ description: 'Срабатывает один раз при запуске бота',
44
+
45
+ computeInputs: (data) => [], // Входные пины (можно вычислять динамически)
46
+
47
+ computeOutputs: (data) => [ // Выходные пины
48
+ { id: 'exec', name: 'Выполнить', type: 'Exec' },
49
+ ],
50
+
51
+ theme: { // Цветовая схема ноды
52
+ headerColor: '#8b5cf6',
53
+ accentColor: '#a78bfa',
54
+ },
55
+ });
56
+
57
+ export default eventBotStartupDefinition;
58
+ ```
59
+
60
+ **Шаг 2: Экспортируйте из index.js категории**
61
+
62
+ В файле `frontend/src/components/visual-editor/nodes/event/index.js`:
63
+
64
+ ```javascript
65
+ export { eventBotStartupDefinition } from './eventBotStartup';
66
+ ```
67
+
68
+ **Шаг 3: Зарегистрируйте ноду в главном реестре**
69
+
70
+ В файле `frontend/src/components/visual-editor/nodes/index.js`:
71
+
72
+ 1. Добавьте импорт:
73
+ ```javascript
74
+ import {
75
+ eventCommandDefinition,
76
+ eventBotStartupDefinition, // Добавить
77
+ // ...
78
+ } from './event';
79
+ ```
80
+
81
+ 2. Зарегистрируйте в функции `registerAllNodes()`:
82
+ ```javascript
83
+ export function registerAllNodes() {
84
+ // ...
85
+ // Event category
86
+ NodeRegistry.register(eventCommandDefinition);
87
+ NodeRegistry.register(eventBotStartupDefinition); // Добавить
88
+ // ...
89
+ }
90
+ ```
91
+
92
+ ### 2. Backend: Регистрация типа ноды
93
+
94
+ **Шаг 1: Зарегистрируйте ноду в соответствующем registry файле**
95
+
96
+ Найдите или создайте файл реестра для категории в `backend/src/core/node-registries/`.
97
+
98
+ Для событий это файл `backend/src/core/node-registries/events.js`:
99
+
100
+ ```javascript
101
+ function registerNodes(registry) {
102
+ // ... существующие ноды
103
+
104
+ registry.registerNodeType({
105
+ type: 'event:botStartup',
106
+ label: '🚀 При запуске бота',
107
+ category: 'События',
108
+ description: 'Срабатывает один раз при запуске бота.',
109
+ graphType: GRAPH_TYPES.EVENT,
110
+ pins: {
111
+ inputs: [],
112
+ outputs: [
113
+ { id: 'exec', name: 'Выполнить', type: 'Exec' },
114
+ ]
115
+ }
116
+ });
117
+ }
118
+ ```
119
+
120
+ ### 3. Backend: Добавление логики выполнения (для нод действий)
121
+
122
+ Если нода выполняет какое-то действие (не события), необходимо создать обработчик в `backend/src/core/node-handlers/`.
123
+
124
+ **Пример структуры обработчика:**
125
+
126
+ ```javascript
127
+ module.exports = async (nodeId, inputData, context) => {
128
+ const { botManager, botId, state } = context;
129
+
130
+ // Ваша логика здесь
131
+
132
+ return {
133
+ outputs: {
134
+ result: 'значение',
135
+ // ...
136
+ }
137
+ };
138
+ };
139
+ ```
140
+
141
+ ### 4. Backend: Триггеры событий (для event нод)
142
+
143
+ Если вы создаете event ноду, нужно добавить вызов события в соответствующем месте кода.
144
+
145
+ **Пример: Событие запуска бота**
146
+
147
+ В файле `backend/src/core/services/BotLifecycleService.js`, метод `_handleBotReady()`:
148
+
149
+ ```javascript
150
+ _handleBotReady(botId) {
151
+ this.emitStatusUpdate(botId, 'running', 'Бот успешно подключился к серверу.');
152
+ this.crashCounters.delete(botId);
153
+
154
+ // ... Socket.IO код
155
+
156
+ // Триггерим событие запуска бота
157
+ if (this.eventGraphManager) {
158
+ this.eventGraphManager.handleEvent(botId, 'botStartup', {});
159
+ }
160
+ }
161
+ ```
162
+
163
+ ### 5. Структура типов нод
164
+
165
+ #### Типы пинов
166
+
167
+ - **Exec** - пин выполнения (flow control)
168
+ - **String** - строка
169
+ - **Number** - число
170
+ - **Boolean** - булево значение
171
+ - **Object** - объект
172
+ - **Array** - массив
173
+ - **User** - объект пользователя
174
+ - **Wildcard** - любой тип (динамический)
175
+
176
+ #### Категории нод
177
+
178
+ - **event** - События (триггеры графов)
179
+ - **action** - Действия (отправка сообщений, HTTP запросы)
180
+ - **flow** - Управление потоком (ветвления, циклы)
181
+ - **data** - Данные (литералы, переменные)
182
+ - **logic** - Логические операции
183
+ - **math** - Математические операции
184
+ - **string** - Операции со строками
185
+ - **array** - Операции с массивами
186
+ - **object** - Операции с объектами
187
+ - **time** - Работа с датой/временем
188
+ - **user** - Работа с пользователями
189
+ - **bot** - Информация о боте
190
+ - **debug** - Отладка
191
+
192
+ ### 6. Ноды с настройками (Settings Component)
193
+
194
+ Если нода требует UI для настроек, создайте компонент настроек:
195
+
196
+ **Пример: StringLiteralSettings.jsx**
197
+
198
+ ```javascript
199
+ import React from 'react';
200
+ import { AutosizeInput } from '@/components/ui/AutosizeInput';
201
+
202
+ const StringLiteralSettings = ({ nodeId, data, updateNodeData }) => {
203
+ return (
204
+ <div className="p-2 w-full">
205
+ <AutosizeInput
206
+ className="nodrag bg-slate-900 border-slate-500 rounded-md py-1 px-2 text-sm resize-none overflow-hidden w-full"
207
+ value={data.value ?? ''}
208
+ onChange={(e) => updateNodeData(nodeId, { value: e.target.value })}
209
+ placeholder="Привет, {username}!"
210
+ />
211
+ </div>
212
+ );
213
+ };
214
+
215
+ export default StringLiteralSettings;
216
+ ```
217
+
218
+ Затем подключите его в определении ноды:
219
+
220
+ ```javascript
221
+ import StringLiteralSettings from './StringLiteralSettings';
222
+
223
+ export const stringLiteralDefinition = new NodeDefinition({
224
+ // ...
225
+ SettingsComponent: StringLiteralSettings,
226
+ // ...
227
+ });
228
+ ```
229
+
230
+ ### 7. Динамические пины (computeInputs/computeOutputs)
231
+
232
+ Ноды могут иметь динамическое количество пинов в зависимости от данных:
233
+
234
+ ```javascript
235
+ computeInputs: (data) => {
236
+ const inputs = [
237
+ { id: 'value', name: 'Текст', type: 'String', required: false, inlineField: true }
238
+ ];
239
+
240
+ // Динамически добавляем пины для переменных
241
+ const text = data.value || '';
242
+ const variablePattern = /\{([a-zA-Z_][a-zA-Z0-9_]*)\}/g;
243
+ const matches = [...text.matchAll(variablePattern)];
244
+ const uniqueVars = [...new Set(matches.map(m => m[1]))];
245
+
246
+ uniqueVars.forEach(varName => {
247
+ inputs.push({
248
+ id: `var_${varName}`,
249
+ name: varName,
250
+ type: 'Wildcard',
251
+ });
252
+ });
253
+
254
+ return inputs;
255
+ },
256
+ ```
257
+
258
+ ### 8. Проверка работоспособности
259
+
260
+ После добавления ноды:
261
+
262
+ 1. Перезапустите frontend (если используете HMR, изменения применятся автоматически)
263
+ 2. Перезапустите backend
264
+ 3. Откройте визуальный редактор
265
+ 4. Проверьте, что нода появилась в списке доступных нод
266
+ 5. Создайте граф с новой нодой и протестируйте её работу
267
+
268
+ ### 9. Автоматическое распознавание событий
269
+
270
+ Система автоматически распознаёт event ноды при сохранении графа:
271
+
272
+ - В файле `backend/src/api/routes/eventGraphs.js` код автоматически извлекает все ноды типа `event:*` из графа
273
+ - Создаются соответствующие триггеры в таблице `EventGraphTrigger`
274
+ - При загрузке графов для бота (`EventGraphManager.loadGraphsForBot`), графы группируются по типам событий
275
+
276
+ Это означает, что для новых event нод не требуется дополнительная регистрация триггеров - достаточно правильно назвать тип ноды (формат: `event:название_события`).
277
+
278
+ ---
279
+
280
+ ## Дополнительные ресурсы
281
+
282
+ - Примеры нод: `frontend/src/components/visual-editor/nodes/`
283
+ - Обработчики нод: `backend/src/core/node-handlers/`
284
+ - Регистрация нод: `backend/src/core/node-registries/`