blockmine 1.19.1 → 1.21.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 (72) hide show
  1. package/.claude/settings.local.json +23 -0
  2. package/CHANGELOG.md +23 -0
  3. package/backend/src/core/BotManager.js +34 -4
  4. package/backend/src/core/BotProcess.js +8 -0
  5. package/backend/src/core/BreakLoopSignal.js +8 -0
  6. package/backend/src/core/EventGraphManager.js +5 -0
  7. package/backend/src/core/GraphExecutionEngine.js +37 -629
  8. package/backend/src/core/NodeRegistry.js +146 -2
  9. package/backend/src/core/nodes/action_bot_look_at.js +36 -0
  10. package/backend/src/core/nodes/action_bot_set_variable.js +32 -0
  11. package/backend/src/core/nodes/action_http_request.js +98 -0
  12. package/backend/src/core/nodes/action_send_log.js +23 -0
  13. package/backend/src/core/nodes/action_send_message.js +32 -0
  14. package/backend/src/core/nodes/array_add_element.js +23 -0
  15. package/backend/src/core/nodes/array_contains.js +40 -0
  16. package/backend/src/core/nodes/array_find_index.js +23 -0
  17. package/backend/src/core/nodes/array_get_by_index.js +23 -0
  18. package/backend/src/core/nodes/array_get_random_element.js +32 -0
  19. package/backend/src/core/nodes/array_remove_by_index.js +30 -0
  20. package/backend/src/core/nodes/bot_get_position.js +20 -0
  21. package/backend/src/core/nodes/data_array_literal.js +31 -0
  22. package/backend/src/core/nodes/data_boolean_literal.js +21 -0
  23. package/backend/src/core/nodes/data_cast.js +34 -0
  24. package/backend/src/core/nodes/data_get_argument.js +23 -0
  25. package/backend/src/core/nodes/data_get_bot_look.js +14 -0
  26. package/backend/src/core/nodes/data_get_entity_field.js +18 -0
  27. package/backend/src/core/nodes/data_get_server_players.js +18 -0
  28. package/backend/src/core/nodes/data_get_user_field.js +40 -0
  29. package/backend/src/core/nodes/data_get_variable.js +23 -0
  30. package/backend/src/core/nodes/data_length.js +25 -0
  31. package/backend/src/core/nodes/data_make_object.js +31 -0
  32. package/backend/src/core/nodes/data_number_literal.js +21 -0
  33. package/backend/src/core/nodes/data_string_literal.js +34 -0
  34. package/backend/src/core/nodes/debug_log.js +16 -0
  35. package/backend/src/core/nodes/flow_branch.js +15 -0
  36. package/backend/src/core/nodes/flow_break.js +14 -0
  37. package/backend/src/core/nodes/flow_for_each.js +39 -0
  38. package/backend/src/core/nodes/flow_sequence.js +16 -0
  39. package/backend/src/core/nodes/flow_switch.js +47 -0
  40. package/backend/src/core/nodes/flow_while.js +64 -0
  41. package/backend/src/core/nodes/logic_compare.js +33 -0
  42. package/backend/src/core/nodes/logic_operation.js +35 -0
  43. package/backend/src/core/nodes/math_operation.js +31 -0
  44. package/backend/src/core/nodes/math_random_number.js +43 -0
  45. package/backend/src/core/nodes/object_create.js +40 -0
  46. package/backend/src/core/nodes/object_delete.js +26 -0
  47. package/backend/src/core/nodes/object_get.js +23 -0
  48. package/backend/src/core/nodes/object_has_key.js +30 -0
  49. package/backend/src/core/nodes/object_set.js +27 -0
  50. package/backend/src/core/nodes/string_concat.js +27 -0
  51. package/backend/src/core/nodes/string_contains.js +41 -0
  52. package/backend/src/core/nodes/string_ends_with.js +43 -0
  53. package/backend/src/core/nodes/string_equals.js +36 -0
  54. package/backend/src/core/nodes/string_length.js +36 -0
  55. package/backend/src/core/nodes/string_matches.js +39 -0
  56. package/backend/src/core/nodes/string_split.js +37 -0
  57. package/backend/src/core/nodes/string_starts_with.js +43 -0
  58. package/backend/src/core/nodes/user_check_blacklist.js +37 -0
  59. package/backend/src/core/nodes/user_get_groups.js +36 -0
  60. package/backend/src/core/nodes/user_get_permissions.js +36 -0
  61. package/backend/src/core/nodes/user_set_blacklist.js +37 -0
  62. package/frontend/dist/assets/index-B9GedHEa.js +8352 -0
  63. package/frontend/dist/assets/index-zLiy9MDx.css +1 -0
  64. package/frontend/dist/index.html +2 -2
  65. package/frontend/package.json +1 -0
  66. package/nul +0 -0
  67. package/package.json +1 -1
  68. package/.kiro/steering/product.md +0 -27
  69. package/.kiro/steering/structure.md +0 -89
  70. package/.kiro/steering/tech.md +0 -94
  71. package/frontend/dist/assets/index-BFd7YoAj.css +0 -1
  72. package/frontend/dist/assets/index-DxdxTe6I.js +0 -8352
@@ -0,0 +1,23 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(netstat:*)",
5
+ "Bash(findstr:*)",
6
+ "WebSearch",
7
+ "Bash(git checkout:*)",
8
+ "mcp__chrome-devtools__list_console_messages",
9
+ "mcp__chrome-devtools__take_screenshot",
10
+ "mcp__chrome-devtools__take_snapshot",
11
+ "mcp__chrome-devtools__evaluate_script",
12
+ "mcp__chrome-devtools__navigate_page",
13
+ "mcp__chrome-devtools__wait_for",
14
+ "mcp__chrome-devtools__get_console_message",
15
+ "Bash(timeout /t 2 /nobreak)",
16
+ "mcp__chrome-devtools__list_network_requests",
17
+ "WebFetch(domain:localhost)",
18
+ "WebFetch(domain:github.com)"
19
+ ],
20
+ "deny": [],
21
+ "ask": []
22
+ }
23
+ }
package/CHANGELOG.md CHANGED
@@ -1,6 +1,29 @@
1
1
  # История версий
2
2
 
3
3
 
4
+ ## [1.21.0](https://github.com/blockmineJS/blockmine/compare/v1.20.0...v1.21.0) (2025-10-26)
5
+
6
+
7
+ ### 🛠 Рефакторинг
8
+
9
+ * [graph-system] все ноды отрефакторены и перенесены. [@claude](https://github.com/claude) author ([55db1b8](https://github.com/blockmineJS/blockmine/commit/55db1b89dbe470691db129a72c7efe55030acfa6))
10
+
11
+
12
+ ### ✨ Новые возможности
13
+
14
+ * [graph-system] пкм. по названию переменной можно найти - Получить/Установить переменную ([83b822f](https://github.com/blockmineJS/blockmine/commit/83b822ff1d278dfb9e280909c81ab32fd0e58bc3))
15
+ * [graph-system] конвертация нод при подключения не к тем типам ([03deac8](https://github.com/blockmineJS/blockmine/commit/03deac83c9468199a8f6ae2b2480248c52a39e57))
16
+ * добавление виртуализации для списков плагинов и ботов ([ea7746f](https://github.com/blockmineJS/blockmine/commit/ea7746f5c7f05ed74e6893bb27774d8541e0c57f))
17
+ * новая нода для http запросов ([3565d06](https://github.com/blockmineJS/blockmine/commit/3565d06bff419c2d2665eba719a4c94696db00ae))
18
+
19
+ ## [1.20.0](https://github.com/blockmineJS/blockmine/compare/v1.19.1...v1.20.0) (2025-10-23)
20
+
21
+
22
+ ### ✨ Новые возможности
23
+
24
+ * если бот падает 5 раз с критической ошибкой, то перезапуск отменяется ([2ba022f](https://github.com/blockmineJS/blockmine/commit/2ba022fff038cc83bb1edfa04d3edf97fc76c255))
25
+ * action:send_message to support dynamic variables. example. Сообщение: привет, {username} ([457639d](https://github.com/blockmineJS/blockmine/commit/457639d70e7a8933f0508d93196a2be6951f1a0a))
26
+
4
27
  ### [1.19.1](https://github.com/blockmineJS/blockmine/compare/v1.19.0...v1.19.1) (2025-10-01)
5
28
 
6
29
 
@@ -52,6 +52,7 @@ class BotManager {
52
52
  this.playerListCache = new Map();
53
53
  this.eventGraphManager = null;
54
54
  this.uiSubscriptions = new Map();
55
+ this.crashCounters = new Map();
55
56
 
56
57
  getInstanceId();
57
58
  setInterval(() => this.updateAllResourceUsage(), 5000);
@@ -393,7 +394,13 @@ class BotManager {
393
394
 
394
395
  const fullBotConfig = { ...decryptedConfig, plugins: sortedPlugins };
395
396
  const botProcessPath = path.resolve(__dirname, 'BotProcess.js');
396
- const child = fork(botProcessPath, [], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] });
397
+ const child = fork(botProcessPath, [], {
398
+ stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
399
+ env: {
400
+ ...process.env,
401
+ NODE_PATH: path.resolve(__dirname, '../../../node_modules')
402
+ }
403
+ });
397
404
 
398
405
  child.botConfig = botConfig;
399
406
 
@@ -440,6 +447,7 @@ class BotManager {
440
447
  break;
441
448
  case 'bot_ready':
442
449
  this.emitStatusUpdate(botId, 'running', 'Бот успешно подключился к серверу.');
450
+ this.crashCounters.delete(botId);
443
451
  break;
444
452
  case 'validate_and_run_command':
445
453
  await this.handleCommandValidation(botConfig, message);
@@ -527,13 +535,35 @@ class BotManager {
527
535
  this.bots.delete(botId);
528
536
  this.resourceUsage.delete(botId);
529
537
  this.botConfigs.delete(botId);
530
-
538
+
531
539
  this.emitStatusUpdate(botId, 'stopped', `Процесс завершился с кодом ${code} (сигнал: ${signal || 'none'}).`);
532
540
  this.updateAllResourceUsage();
533
541
 
534
542
  if (code === 1) {
535
- console.log(`[BotManager] Обнаружена ошибка с кодом 1 для бота ${botId}. Попытка перезапуска через 5 секунд...`);
536
- this.appendLog(botId, `[SYSTEM] Обнаружена критическая ошибка, перезапуск через 5 секунд...`);
543
+ const MAX_RESTART_ATTEMPTS = 5;
544
+ const RESTART_COOLDOWN = 60000;
545
+
546
+ const counter = this.crashCounters.get(botId) || { count: 0, firstCrash: Date.now() };
547
+ const timeSinceFirstCrash = Date.now() - counter.firstCrash;
548
+
549
+ if (timeSinceFirstCrash > RESTART_COOLDOWN) {
550
+ counter.count = 0;
551
+ counter.firstCrash = Date.now();
552
+ }
553
+
554
+ counter.count++;
555
+ this.crashCounters.set(botId, counter);
556
+
557
+ if (counter.count >= MAX_RESTART_ATTEMPTS) {
558
+ console.log(`[BotManager] Бот ${botId} упал ${counter.count} раз подряд. Автоперезапуск остановлен.`);
559
+ this.appendLog(botId, `[SYSTEM] Обнаружено ${counter.count} критических ошибок подряд.`);
560
+ this.appendLog(botId, `[SYSTEM] Исправьте проблему и запустите бота вручную.`);
561
+ this.crashCounters.delete(botId);
562
+ return;
563
+ }
564
+
565
+ console.log(`[BotManager] Обнаружена ошибка с кодом 1 для бота ${botId}. Попытка ${counter.count}/${MAX_RESTART_ATTEMPTS}. Перезапуск через 5 секунд...`);
566
+ this.appendLog(botId, `[SYSTEM] Обнаружена критическая ошибка, перезапуск через 5 секунд... (попытка ${counter.count}/${MAX_RESTART_ATTEMPTS})`);
537
567
  setTimeout(() => {
538
568
  console.log(`[BotManager] Перезапуск бота ${botId}...`);
539
569
  this.startBot(botConfig);
@@ -606,6 +606,14 @@ process.on('message', async (message) => {
606
606
  sendEvent('botDied', { user: { username: bot.username } });
607
607
  });
608
608
 
609
+ bot.on('health', () => {
610
+ sendEvent('health', {
611
+ health: bot.health,
612
+ food: bot.food,
613
+ saturation: bot.foodSaturation
614
+ });
615
+ });
616
+
609
617
  bot.on('kicked', (reason) => {
610
618
  let reasonText;
611
619
  try { reasonText = JSON.parse(reason).text || reason; } catch (e) { reasonText = reason; }
@@ -0,0 +1,8 @@
1
+ class BreakLoopSignal extends Error {
2
+ constructor() {
3
+ super("Loop break signal");
4
+ this.name = "BreakLoopSignal";
5
+ }
6
+ }
7
+
8
+ module.exports = BreakLoopSignal;
@@ -173,6 +173,11 @@ class EventGraphManager {
173
173
  case 'botDied':
174
174
  context.user = args.user;
175
175
  break;
176
+ case 'health':
177
+ context.health = args.health;
178
+ context.food = args.food;
179
+ context.saturation = args.saturation;
180
+ break;
176
181
  case 'tick':
177
182
  break;
178
183
  case 'entitySpawn':