blockmine 1.25.0 → 1.27.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/CHANGELOG.md +46 -1
- package/backend/cli.js +1 -1
- package/backend/package.json +2 -2
- package/backend/prisma/migrations/20260328173000_add_plugin_source_ref/migration.sql +2 -0
- package/backend/prisma/migrations/migration_lock.toml +2 -2
- package/backend/prisma/schema.prisma +2 -0
- package/backend/src/api/routes/apiKeys.js +8 -0
- package/backend/src/api/routes/bots.js +258 -9
- package/backend/src/api/routes/eventGraphs.js +151 -1
- package/backend/src/api/routes/health.js +38 -0
- package/backend/src/api/routes/nodeRegistry.js +63 -0
- package/backend/src/api/routes/plugins.js +254 -29
- package/backend/src/container.js +11 -8
- package/backend/src/core/BotCommandLoader.js +161 -0
- package/backend/src/core/BotConnection.js +125 -0
- package/backend/src/core/BotEventHandlers.js +234 -0
- package/backend/src/core/BotIPCHandler.js +445 -0
- package/backend/src/core/BotManager.js +15 -7
- package/backend/src/core/BotProcess.js +75 -142
- package/backend/src/core/EventGraphManager.js +7 -3
- package/backend/src/core/GraphDebugHandler.js +229 -0
- package/backend/src/core/GraphDebugIPC.js +117 -0
- package/backend/src/core/GraphExecutionEngine.js +545 -978
- package/backend/src/core/GraphTraversal.js +80 -0
- package/backend/src/core/GraphValidation.js +73 -0
- package/backend/src/core/NodeDefinition.js +138 -0
- package/backend/src/core/NodeRegistry.js +153 -141
- package/backend/src/core/PluginManager.js +272 -31
- package/backend/src/core/RewindSignal.js +9 -0
- package/backend/src/core/config/ConfigValidator.js +72 -0
- package/backend/src/core/config/FeatureFlags.js +52 -0
- package/backend/src/core/config/__tests__/ConfigValidator.test.js +232 -0
- package/backend/src/core/domain/entities/Bot.js +39 -0
- package/backend/src/core/domain/entities/Command.js +41 -0
- package/backend/src/core/domain/entities/EventGraph.js +39 -0
- package/backend/src/core/domain/entities/Plugin.js +45 -0
- package/backend/src/core/domain/entities/User.js +40 -0
- package/backend/src/core/domain/services/DependencyResolver.js +168 -0
- package/backend/src/core/domain/services/GraphValidator.js +117 -0
- package/backend/src/core/domain/services/PermissionChecker.js +34 -0
- package/backend/src/core/domain/services/__tests__/DependencyResolver.test.js +126 -0
- package/backend/src/core/domain/valueObjects/BotConfig.js +27 -0
- package/backend/src/core/domain/valueObjects/DependencyGraph.js +86 -0
- package/backend/src/core/domain/valueObjects/PluginManifest.js +36 -0
- package/backend/src/core/errors/BaseError.js +29 -0
- package/backend/src/core/errors/ErrorHandler.js +81 -0
- package/backend/src/core/errors/__tests__/ErrorHandler.test.js +188 -0
- package/backend/src/core/errors/index.js +68 -0
- package/backend/src/core/infrastructure/BatchingUtility.js +66 -0
- package/backend/src/core/infrastructure/CircuitBreaker.js +103 -0
- package/backend/src/core/infrastructure/ConnectionPool.js +81 -0
- package/backend/src/core/infrastructure/RateLimiter.js +64 -0
- package/backend/src/core/infrastructure/__tests__/BatchingUtility.test.js +86 -0
- package/backend/src/core/infrastructure/__tests__/CircuitBreaker.test.js +156 -0
- package/backend/src/core/infrastructure/__tests__/ConnectionPool.test.js +146 -0
- package/backend/src/core/infrastructure/__tests__/RateLimiter.test.js +171 -0
- package/backend/src/core/ipc/botApiFactory.js +72 -0
- package/backend/src/core/ipc/ipcMessageTypes.js +115 -0
- package/backend/src/core/logging/AuditLogger.js +61 -0
- package/backend/src/core/logging/StructuredLogger.js +80 -0
- package/backend/src/core/logging/__tests__/StructuredLogger.test.js +213 -0
- package/backend/src/core/logging/index.js +7 -0
- package/backend/src/core/metrics/MetricsCollector.js +104 -0
- package/backend/src/core/metrics/__tests__/MetricsCollector.test.js +131 -0
- package/backend/src/core/node-registries/actionsNodes.js +191 -0
- package/backend/src/core/node-registries/arraysNodes.js +152 -0
- package/backend/src/core/node-registries/botNodes.js +48 -0
- package/backend/src/core/node-registries/containerNodes.js +141 -0
- package/backend/src/core/node-registries/dataNodes.js +284 -0
- package/backend/src/core/node-registries/debugNodes.js +23 -0
- package/backend/src/core/node-registries/eventsNodes.js +223 -0
- package/backend/src/core/node-registries/flowNodes.js +151 -0
- package/backend/src/core/node-registries/furnaceNodes.js +123 -0
- package/backend/src/core/node-registries/index.js +108 -0
- package/backend/src/core/node-registries/inventory.js +102 -106
- package/backend/src/core/node-registries/logicNodes.js +54 -0
- package/backend/src/core/node-registries/mathNodes.js +38 -0
- package/backend/src/core/node-registries/navigationNodes.js +109 -0
- package/backend/src/core/node-registries/objectsNodes.js +90 -0
- package/backend/src/core/node-registries/stringsNodes.js +165 -0
- package/backend/src/core/node-registries/timeNodes.js +105 -0
- package/backend/src/core/node-registries/typeNodes.js +22 -0
- package/backend/src/core/node-registries/usersNodes.js +126 -0
- package/backend/src/core/nodes/arrays/shuffle.js +14 -0
- package/backend/src/core/nodes/bot/get_name.js +8 -0
- package/backend/src/core/nodes/bot/stop_bot.js +5 -0
- package/backend/src/core/nodes/container/open.js +101 -111
- package/backend/src/core/nodes/data/store_read.js +26 -0
- package/backend/src/core/nodes/data/store_write.js +23 -0
- package/backend/src/core/nodes/event/call_event.js +31 -0
- package/backend/src/core/nodes/event/custom_event.js +8 -0
- package/backend/src/core/nodes/flow/timer.js +35 -0
- package/backend/src/core/nodes/inventory/drop.js +73 -65
- package/backend/src/core/nodes/inventory/equip.js +54 -45
- package/backend/src/core/nodes/inventory/select_slot.js +48 -46
- package/backend/src/core/nodes/navigation/follow.js +54 -51
- package/backend/src/core/nodes/navigation/go_to.js +41 -53
- package/backend/src/core/nodes/navigation/go_to_entity.js +65 -69
- package/backend/src/core/nodes/navigation/go_to_player.js +65 -70
- package/backend/src/core/nodes/navigation/stop.js +17 -26
- package/backend/src/core/nodes/users/add_to_group.js +24 -0
- package/backend/src/core/nodes/users/check_permission.js +26 -0
- package/backend/src/core/nodes/users/remove_from_group.js +24 -0
- package/backend/src/core/services/BotIPCMessageRouter.js +337 -0
- package/backend/src/core/services/BotLifecycleService.js +41 -632
- package/backend/src/core/services/CacheManager.js +83 -23
- package/backend/src/core/services/CrashRestartManager.js +42 -0
- package/backend/src/core/services/DebugSessionManager.js +114 -12
- package/backend/src/core/services/EventGraphService.js +69 -0
- package/backend/src/core/services/MinecraftBotManager.js +9 -1
- package/backend/src/core/services/PluginManagementService.js +84 -0
- package/backend/src/core/services/TestModeContext.js +65 -0
- package/backend/src/core/services/__tests__/CacheManager.test.js +168 -0
- package/backend/src/core/services.js +1 -11
- package/backend/src/core/validation/InputValidator.js +167 -0
- package/backend/src/core/validation/__tests__/InputValidator.test.js +296 -0
- package/backend/src/real-time/botApi/index.js +1 -1
- package/backend/src/real-time/socketHandler.js +26 -0
- package/backend/src/server.js +10 -5
- package/frontend/dist/assets/{browser-ponyfill-DN7pwmHT.js → browser-ponyfill-D8y0Ty7C.js} +1 -1
- package/frontend/dist/assets/index-CFJLS0dk.css +32 -0
- package/frontend/dist/assets/{index-LSy71uwm.js → index-D91UGNMG.js} +1880 -1881
- package/frontend/dist/index.html +2 -2
- package/frontend/dist/locales/en/bots.json +4 -1
- package/frontend/dist/locales/en/common.json +7 -1
- package/frontend/dist/locales/en/login.json +2 -0
- package/frontend/dist/locales/en/management.json +79 -1
- package/frontend/dist/locales/en/nodes.json +59 -4
- package/frontend/dist/locales/en/plugin-detail.json +24 -4
- package/frontend/dist/locales/en/plugins.json +226 -7
- package/frontend/dist/locales/en/setup.json +2 -0
- package/frontend/dist/locales/en/sidebar.json +171 -3
- package/frontend/dist/locales/en/visual-editor.json +230 -31
- package/frontend/dist/locales/ru/bots.json +4 -1
- package/frontend/dist/locales/ru/login.json +2 -0
- package/frontend/dist/locales/ru/management.json +79 -1
- package/frontend/dist/locales/ru/minecraft-viewer.json +3 -0
- package/frontend/dist/locales/ru/nodes.json +105 -51
- package/frontend/dist/locales/ru/plugins.json +103 -4
- package/frontend/dist/locales/ru/setup.json +2 -0
- package/frontend/dist/locales/ru/sidebar.json +171 -3
- package/frontend/dist/locales/ru/visual-editor.json +232 -33
- package/frontend/package.json +2 -0
- package/nul +12 -0
- package/package.json +3 -3
- package/scripts/postinstall.js +38 -0
- package/backend/package-lock.json +0 -6801
- package/backend/src/core/node-registries/actions.js +0 -202
- package/backend/src/core/node-registries/arrays.js +0 -155
- package/backend/src/core/node-registries/bot.js +0 -23
- package/backend/src/core/node-registries/container.js +0 -162
- package/backend/src/core/node-registries/data.js +0 -290
- package/backend/src/core/node-registries/debug.js +0 -26
- package/backend/src/core/node-registries/events.js +0 -201
- package/backend/src/core/node-registries/flow.js +0 -139
- package/backend/src/core/node-registries/furnace.js +0 -143
- package/backend/src/core/node-registries/logic.js +0 -62
- package/backend/src/core/node-registries/math.js +0 -42
- package/backend/src/core/node-registries/navigation.js +0 -111
- package/backend/src/core/node-registries/objects.js +0 -98
- package/backend/src/core/node-registries/strings.js +0 -187
- package/backend/src/core/node-registries/time.js +0 -113
- package/backend/src/core/node-registries/type.js +0 -25
- package/backend/src/core/node-registries/users.js +0 -79
- package/frontend/dist/assets/index-SfhKxI4-.css +0 -32
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dashboard": "Dashboard",
|
|
3
3
|
"scheduler": "Scheduler",
|
|
4
|
-
"graphStore": "Graph Store",
|
|
5
4
|
"apiKeys": "API Keys",
|
|
6
5
|
"proxy": "Proxy",
|
|
7
|
-
"changelog": "Version History",
|
|
8
6
|
"bots": "Bots",
|
|
9
7
|
"admin": "Administration",
|
|
10
8
|
"servers": "Servers",
|
|
@@ -14,8 +12,178 @@
|
|
|
14
12
|
"createBotDescription": "Fill in the information below to add a new bot to the panel.",
|
|
15
13
|
"importBot": "Import Bot",
|
|
16
14
|
"logout": "Logout",
|
|
17
|
-
"
|
|
15
|
+
"brandToggle": {
|
|
16
|
+
"hide": "Hide logo",
|
|
17
|
+
"show": "Show logo"
|
|
18
|
+
},
|
|
19
|
+
"logoutDialog": {
|
|
20
|
+
"title": "Log out of your account?",
|
|
21
|
+
"description": "Your current session will end and you will need to enter your password again to sign in.",
|
|
22
|
+
"cancel": "Cancel",
|
|
23
|
+
"confirm": "Log out"
|
|
24
|
+
},
|
|
18
25
|
"openMenu": "Open Menu",
|
|
26
|
+
"whatsNew": "What's New?",
|
|
27
|
+
"askQuestion": "Ask Question",
|
|
28
|
+
"theme": {
|
|
29
|
+
"label": "Theme",
|
|
30
|
+
"light": "Light",
|
|
31
|
+
"dark": "Dark",
|
|
32
|
+
"system": "System",
|
|
33
|
+
"custom": "Custom",
|
|
34
|
+
"editor": {
|
|
35
|
+
"title": "Custom theme",
|
|
36
|
+
"description": "Adjust the core panel colors without touching status accents or plugin-specific success colors.",
|
|
37
|
+
"sections": {
|
|
38
|
+
"surface": {
|
|
39
|
+
"title": "Surface",
|
|
40
|
+
"description": "These colors define the page background, cards, popovers, and the main readable text."
|
|
41
|
+
},
|
|
42
|
+
"brand": {
|
|
43
|
+
"title": "Brand",
|
|
44
|
+
"description": "These colors control the main accent, active buttons, focus rings, and highlighted actions."
|
|
45
|
+
},
|
|
46
|
+
"ui": {
|
|
47
|
+
"title": "Interface",
|
|
48
|
+
"description": "Tune supporting blocks, muted text, borders, form inputs, and secondary surfaces."
|
|
49
|
+
},
|
|
50
|
+
"graphEditor": {
|
|
51
|
+
"title": "Graph editor",
|
|
52
|
+
"description": "These colors control visual editor node headers, node bodies, and the draggable node palette on the left."
|
|
53
|
+
},
|
|
54
|
+
"scrollbar": {
|
|
55
|
+
"title": "Scrollbars",
|
|
56
|
+
"description": "Fine-tune scrollbar thumb and button colors to keep the panel consistent."
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"preview": {
|
|
60
|
+
"title": "Live preview",
|
|
61
|
+
"description": "Changes are applied instantly while custom theme mode is active.",
|
|
62
|
+
"active": "Custom active",
|
|
63
|
+
"inactive": "Preview only",
|
|
64
|
+
"cardTitle": "Interface card",
|
|
65
|
+
"cardDescription": "A quick look at how your main UI tokens work together.",
|
|
66
|
+
"primaryBadge": "Primary",
|
|
67
|
+
"secondary": "Secondary",
|
|
68
|
+
"muted": "Muted",
|
|
69
|
+
"accent": "Accent"
|
|
70
|
+
},
|
|
71
|
+
"baseTheme": {
|
|
72
|
+
"title": "Base mode",
|
|
73
|
+
"description": "Choose whether custom theme should inherit light or dark structural styles. Use the presets below if you want to replace the whole palette."
|
|
74
|
+
},
|
|
75
|
+
"actions": {
|
|
76
|
+
"resetCurrent": "Reset current palette",
|
|
77
|
+
"useDarkPreset": "Use dark preset",
|
|
78
|
+
"useLightPreset": "Use light preset"
|
|
79
|
+
},
|
|
80
|
+
"note": {
|
|
81
|
+
"title": "What changes here",
|
|
82
|
+
"description": "This editor affects the main panel palette, visual editor node colors, buttons, borders, inputs, muted blocks, and scrollbars. Feature-specific colors like installed plugin green stay untouched."
|
|
83
|
+
},
|
|
84
|
+
"picker": {
|
|
85
|
+
"title": "Color picker",
|
|
86
|
+
"description": "Use quick swatches or fine-tune the color with HSL sliders.",
|
|
87
|
+
"hue": "Hue",
|
|
88
|
+
"saturation": "Saturation",
|
|
89
|
+
"lightness": "Lightness"
|
|
90
|
+
},
|
|
91
|
+
"colors": {
|
|
92
|
+
"background": {
|
|
93
|
+
"label": "Background",
|
|
94
|
+
"description": "Main application backdrop."
|
|
95
|
+
},
|
|
96
|
+
"foreground": {
|
|
97
|
+
"label": "Main text",
|
|
98
|
+
"description": "Primary readable text color."
|
|
99
|
+
},
|
|
100
|
+
"card": {
|
|
101
|
+
"label": "Card background",
|
|
102
|
+
"description": "Cards, blocks, and panels."
|
|
103
|
+
},
|
|
104
|
+
"cardForeground": {
|
|
105
|
+
"label": "Card text",
|
|
106
|
+
"description": "Readable text placed on cards."
|
|
107
|
+
},
|
|
108
|
+
"popover": {
|
|
109
|
+
"label": "Popup background",
|
|
110
|
+
"description": "Dropdowns, menus, and overlays."
|
|
111
|
+
},
|
|
112
|
+
"popoverForeground": {
|
|
113
|
+
"label": "Popup text",
|
|
114
|
+
"description": "Readable text inside dropdowns and popovers."
|
|
115
|
+
},
|
|
116
|
+
"primary": {
|
|
117
|
+
"label": "Primary accent",
|
|
118
|
+
"description": "Main brand button and selected state."
|
|
119
|
+
},
|
|
120
|
+
"primaryForeground": {
|
|
121
|
+
"label": "Primary text",
|
|
122
|
+
"description": "Text placed on primary buttons."
|
|
123
|
+
},
|
|
124
|
+
"secondary": {
|
|
125
|
+
"label": "Secondary surface",
|
|
126
|
+
"description": "Supporting buttons and softer blocks."
|
|
127
|
+
},
|
|
128
|
+
"secondaryForeground": {
|
|
129
|
+
"label": "Secondary text",
|
|
130
|
+
"description": "Text placed on secondary surfaces."
|
|
131
|
+
},
|
|
132
|
+
"muted": {
|
|
133
|
+
"label": "Muted surface",
|
|
134
|
+
"description": "Subtle containers and supporting backgrounds."
|
|
135
|
+
},
|
|
136
|
+
"mutedForeground": {
|
|
137
|
+
"label": "Muted text",
|
|
138
|
+
"description": "Secondary descriptions and helper text."
|
|
139
|
+
},
|
|
140
|
+
"accent": {
|
|
141
|
+
"label": "Accent surface",
|
|
142
|
+
"description": "Hover states and highlighted UI zones."
|
|
143
|
+
},
|
|
144
|
+
"accentForeground": {
|
|
145
|
+
"label": "Accent text",
|
|
146
|
+
"description": "Text placed on accent surfaces."
|
|
147
|
+
},
|
|
148
|
+
"border": {
|
|
149
|
+
"label": "Border",
|
|
150
|
+
"description": "Card outlines and separators."
|
|
151
|
+
},
|
|
152
|
+
"input": {
|
|
153
|
+
"label": "Input border",
|
|
154
|
+
"description": "Text fields, selects, and control outlines."
|
|
155
|
+
},
|
|
156
|
+
"ring": {
|
|
157
|
+
"label": "Focus ring",
|
|
158
|
+
"description": "Keyboard focus and active input outline."
|
|
159
|
+
},
|
|
160
|
+
"graphHeader": {
|
|
161
|
+
"label": "Node header",
|
|
162
|
+
"description": "Header color for graph nodes and the draggable node tiles in the left palette."
|
|
163
|
+
},
|
|
164
|
+
"graphSurface": {
|
|
165
|
+
"label": "Node body",
|
|
166
|
+
"description": "Main body color of graph nodes inside the visual editor."
|
|
167
|
+
},
|
|
168
|
+
"graphInput": {
|
|
169
|
+
"label": "Node input",
|
|
170
|
+
"description": "Input and select field color inside graph nodes and their settings."
|
|
171
|
+
},
|
|
172
|
+
"scrollbarThumb": {
|
|
173
|
+
"label": "Scrollbar thumb",
|
|
174
|
+
"description": "Main draggable scrollbar element."
|
|
175
|
+
},
|
|
176
|
+
"scrollbarThumbHover": {
|
|
177
|
+
"label": "Scrollbar hover",
|
|
178
|
+
"description": "Scrollbar color on hover."
|
|
179
|
+
},
|
|
180
|
+
"scrollbarButtonBg": {
|
|
181
|
+
"label": "Scrollbar button",
|
|
182
|
+
"description": "Arrow button background on classic scrollbars."
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
},
|
|
19
187
|
"botImported": "Bot \"{{name}}\" imported successfully.",
|
|
20
188
|
"botOrderError": "Failed to update bot order",
|
|
21
189
|
"contribute": {
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
"loading": "Loading editor...",
|
|
3
3
|
"loadingSettings": "Loading settings...",
|
|
4
4
|
"editor": {
|
|
5
|
-
"title": "Editor"
|
|
5
|
+
"title": "Editor",
|
|
6
|
+
"botFallback": "Bot {{id}}"
|
|
6
7
|
},
|
|
7
8
|
"createGraph": {
|
|
8
9
|
"title": "Create new event graph",
|
|
@@ -103,40 +104,96 @@
|
|
|
103
104
|
"advanced": "Advanced",
|
|
104
105
|
"operator": "Operator:",
|
|
105
106
|
"addPin": "Add pin",
|
|
106
|
-
"httpMethod": "HTTP Method:"
|
|
107
|
+
"httpMethod": "HTTP Method:",
|
|
108
|
+
"value": "Value:",
|
|
109
|
+
"number": "Number:",
|
|
110
|
+
"targetType": "Target type:",
|
|
111
|
+
"selectType": "Select type...",
|
|
112
|
+
"checkType": "Check type:",
|
|
113
|
+
"add": "Add",
|
|
114
|
+
"remove": "Remove",
|
|
115
|
+
"addField": "Add field",
|
|
116
|
+
"removeField": "Remove field",
|
|
117
|
+
"cases": "Cases:",
|
|
118
|
+
"comparePlaceholder": "Comparison value",
|
|
119
|
+
"autoCompareHint": "Automatically detects comparison type: numbers, strings, arrays, objects",
|
|
120
|
+
"selectIn3dViewer": "Pick in 3D Viewer",
|
|
121
|
+
"selectContainerIn3dViewer": "Pick container in 3D Viewer",
|
|
122
|
+
"selectFurnaceIn3dViewer": "Pick furnace in 3D Viewer",
|
|
123
|
+
"jsonObject": "JSON object:",
|
|
124
|
+
"minimumDefault": "Minimum (default)",
|
|
125
|
+
"maximumDefault": "Maximum (default)",
|
|
126
|
+
"usedWhenPinDisconnected": "Used when pin {{pin}} is not connected",
|
|
127
|
+
"selectOperation": "Select operation...",
|
|
128
|
+
"booleanTrue": "True",
|
|
129
|
+
"booleanFalse": "False",
|
|
130
|
+
"castString": "String (Text)",
|
|
131
|
+
"castNumber": "Number",
|
|
132
|
+
"castBoolean": "Boolean",
|
|
133
|
+
"typeString": "String",
|
|
134
|
+
"typeNumber": "Number",
|
|
135
|
+
"typeNumericString": "Numeric string (\"100\")",
|
|
136
|
+
"typeBoolean": "Boolean",
|
|
137
|
+
"typeArray": "Array",
|
|
138
|
+
"typeObject": "Object",
|
|
139
|
+
"typeNull": "Null / Undefined",
|
|
140
|
+
"compareEquals": "Equals (==)",
|
|
141
|
+
"compareNotEquals": "Not equals (!=)",
|
|
142
|
+
"compareGreater": "Greater than (>)",
|
|
143
|
+
"compareLess": "Less than (<)",
|
|
144
|
+
"compareGreaterOrEqual": "Greater or equal (>=)",
|
|
145
|
+
"compareLessOrEqual": "Less or equal (<=)",
|
|
146
|
+
"logicAnd": "AND",
|
|
147
|
+
"logicOr": "OR",
|
|
148
|
+
"logicNot": "NOT",
|
|
149
|
+
"mathAdd": "Addition (+)",
|
|
150
|
+
"mathSubtract": "Subtraction (-)",
|
|
151
|
+
"mathMultiply": "Multiplication (*)",
|
|
152
|
+
"mathDivide": "Division (/)",
|
|
153
|
+
"timeBefore": "Before (<)",
|
|
154
|
+
"timeAfter": "After (>)",
|
|
155
|
+
"timeEqual": "Equal (=)",
|
|
156
|
+
"timeBeforeOrEqual": "Before or equal (≤)",
|
|
157
|
+
"timeAfterOrEqual": "After or equal (≥)",
|
|
158
|
+
"stringLiteralPlaceholder": "Hello, {username}!"
|
|
107
159
|
},
|
|
108
160
|
"contextMenu": {
|
|
109
161
|
"searchPlaceholder": "Type a command or search...",
|
|
110
162
|
"noResults": "No results found.",
|
|
111
|
-
"variablesGroup": "
|
|
112
|
-
"argumentsGroup": "
|
|
113
|
-
"getVariable": "
|
|
114
|
-
"setVariable": "
|
|
115
|
-
"getArgument": "
|
|
163
|
+
"variablesGroup": "Variables",
|
|
164
|
+
"argumentsGroup": "Arguments",
|
|
165
|
+
"getVariable": "Get variable {{name}}",
|
|
166
|
+
"setVariable": "Set variable {{name}}",
|
|
167
|
+
"getArgument": "Get argument {{name}}"
|
|
116
168
|
},
|
|
117
169
|
"nodePanel": {
|
|
118
170
|
"title": "Add node",
|
|
119
171
|
"categories": {
|
|
120
|
-
"data": "
|
|
121
|
-
"flow": "
|
|
122
|
-
"math": "
|
|
123
|
-
"logic": "
|
|
124
|
-
"string": "
|
|
125
|
-
"array": "
|
|
126
|
-
"object": "
|
|
127
|
-
"action": "
|
|
128
|
-
"time": "
|
|
129
|
-
"user": "
|
|
130
|
-
"type": "
|
|
131
|
-
"bot": "
|
|
132
|
-
"debug": "
|
|
133
|
-
"inventory": "
|
|
134
|
-
"navigation": "
|
|
135
|
-
"container": "
|
|
136
|
-
"furnace": "
|
|
137
|
-
"event": "
|
|
172
|
+
"data": "Data",
|
|
173
|
+
"flow": "Flow Control",
|
|
174
|
+
"math": "Math",
|
|
175
|
+
"logic": "Logic",
|
|
176
|
+
"string": "Strings",
|
|
177
|
+
"array": "Arrays",
|
|
178
|
+
"object": "Objects",
|
|
179
|
+
"action": "Actions",
|
|
180
|
+
"time": "Time",
|
|
181
|
+
"user": "Users",
|
|
182
|
+
"type": "Types",
|
|
183
|
+
"bot": "Bot",
|
|
184
|
+
"debug": "Debug",
|
|
185
|
+
"inventory": "Inventory",
|
|
186
|
+
"navigation": "Navigation",
|
|
187
|
+
"container": "Containers",
|
|
188
|
+
"furnace": "Furnace",
|
|
189
|
+
"event": "Events",
|
|
190
|
+
"websocket": "WebSocket API"
|
|
138
191
|
}
|
|
139
192
|
},
|
|
193
|
+
"collaboration": {
|
|
194
|
+
"online": "Online ({{count}})",
|
|
195
|
+
"editing": "Editing"
|
|
196
|
+
},
|
|
140
197
|
"debugControls": {
|
|
141
198
|
"paused": "Paused",
|
|
142
199
|
"continue": "Continue (F5)",
|
|
@@ -168,7 +225,12 @@
|
|
|
168
225
|
"normalModeDesc": "Graph editing. Enable <strong>Live mode</strong> for real-time debugging with breakpoints.",
|
|
169
226
|
"traceModeTitle": "Trace mode:",
|
|
170
227
|
"traceModeDesc": "View execution traces after commands complete. Switch to <strong>Live mode</strong> for real-time debugging with breakpoints.",
|
|
171
|
-
"editValue": "Edit value"
|
|
228
|
+
"editValue": "Edit value",
|
|
229
|
+
"connection": "Connection",
|
|
230
|
+
"status": "Status:",
|
|
231
|
+
"usersLabel": "Users:",
|
|
232
|
+
"tipTitle": "Tip",
|
|
233
|
+
"liveModeTip": "Start a test run or wait for a breakpoint to hit. On pause, a panel with input values and step controls will appear."
|
|
172
234
|
},
|
|
173
235
|
"traceViewer": {
|
|
174
236
|
"completed": "Completed",
|
|
@@ -180,18 +242,87 @@
|
|
|
180
242
|
"inputs": "Inputs:",
|
|
181
243
|
"outputs": "Outputs:"
|
|
182
244
|
},
|
|
245
|
+
"traceStepInfo": {
|
|
246
|
+
"title": "Step details",
|
|
247
|
+
"empty": "Select a step to view details",
|
|
248
|
+
"stepOf": "Step {{step}} of {{total}}",
|
|
249
|
+
"node": "Node",
|
|
250
|
+
"name": "Name:",
|
|
251
|
+
"type": "Type:",
|
|
252
|
+
"id": "ID:",
|
|
253
|
+
"unknown": "Unknown",
|
|
254
|
+
"status": "Status",
|
|
255
|
+
"result": "Result:",
|
|
256
|
+
"success": "Success",
|
|
257
|
+
"error": "Error",
|
|
258
|
+
"time": "Time:",
|
|
259
|
+
"inputs": "Input data",
|
|
260
|
+
"outputs": "Output data",
|
|
261
|
+
"path": "Execution path"
|
|
262
|
+
},
|
|
263
|
+
"valueEditor": {
|
|
264
|
+
"title": "Edit value",
|
|
265
|
+
"jsonObjectArray": "JSON object / array",
|
|
266
|
+
"jsonHint": "Use valid JSON format",
|
|
267
|
+
"value": "Value",
|
|
268
|
+
"placeholder": "Enter a value",
|
|
269
|
+
"scalarHint": "Supported: strings, numbers, true/false, null",
|
|
270
|
+
"currentValue": "Current value:",
|
|
271
|
+
"empty": "(empty)",
|
|
272
|
+
"cancel": "Cancel",
|
|
273
|
+
"save": "Save",
|
|
274
|
+
"invalidJson": "Invalid JSON: {{message}}"
|
|
275
|
+
},
|
|
276
|
+
"nodeHelp": {
|
|
277
|
+
"flowBreak": {
|
|
278
|
+
"intro": "The Break node interrupts loop execution.",
|
|
279
|
+
"item1": "Used inside For Each and While loops",
|
|
280
|
+
"item2": "Interrupts the loop immediately when executed",
|
|
281
|
+
"item3": "Control continues from the loop's Completed output",
|
|
282
|
+
"note": "Note: this node has no output pins because execution continues from the parent loop Completed output."
|
|
283
|
+
},
|
|
284
|
+
"flowDelay": {
|
|
285
|
+
"label": "Delay in milliseconds (default)",
|
|
286
|
+
"intro": "The Delay node pauses graph execution.",
|
|
287
|
+
"item1": "1000 ms = 1 second",
|
|
288
|
+
"item2": "You can set the delay via the pin or in settings",
|
|
289
|
+
"item3": "If the value is negative or invalid, the delay becomes 0 ms",
|
|
290
|
+
"note": "Note: delay is asynchronous and does not block other application processes."
|
|
291
|
+
},
|
|
292
|
+
"flowForEach": {
|
|
293
|
+
"intro": "The For Each loop iterates over every array element.",
|
|
294
|
+
"item1": "Connect an array to the Array input",
|
|
295
|
+
"item2": "Use the Element output to get the current element",
|
|
296
|
+
"item3": "Use the Index output to get the current index",
|
|
297
|
+
"item4": "The loop body runs for each element",
|
|
298
|
+
"item5": "The Completed output fires after the loop finishes",
|
|
299
|
+
"note": "Note: you can interrupt the loop with the Break node."
|
|
300
|
+
},
|
|
301
|
+
"flowWhile": {
|
|
302
|
+
"intro": "The While loop runs while its condition is true.",
|
|
303
|
+
"item1": "Connect a boolean value to the Condition input",
|
|
304
|
+
"item2": "Use the Iteration output to get the current iteration number",
|
|
305
|
+
"item3": "The loop body runs on each iteration",
|
|
306
|
+
"item4": "The Completed output fires after the loop finishes",
|
|
307
|
+
"warning": "Important: the maximum iteration count is 1000. Make sure the condition can become false, otherwise the loop will be interrupted.",
|
|
308
|
+
"note": "Note: you can stop the loop early with the Break node."
|
|
309
|
+
},
|
|
310
|
+
"mathRandom": {
|
|
311
|
+
"note": "Note: if min or max contains a dot or comma, a floating-point number will be generated; otherwise it will be an integer."
|
|
312
|
+
}
|
|
313
|
+
},
|
|
183
314
|
"whatIfEditor": {
|
|
184
315
|
"title": "Execution paused",
|
|
185
316
|
"node": "Node:",
|
|
186
317
|
"editHint": "Edit values directly on nodes - click on the green badges with data",
|
|
187
318
|
"syncHint": "All changes are synchronized in real-time between users",
|
|
188
|
-
"graphVariables": "
|
|
319
|
+
"graphVariables": "Graph variables",
|
|
189
320
|
"continue": "Continue (F5)",
|
|
190
321
|
"stop": "Stop",
|
|
191
322
|
"modified": "Modified",
|
|
192
323
|
"empty": "(empty)",
|
|
193
|
-
"changesWarning_one": "
|
|
194
|
-
"changesWarning_other": "
|
|
324
|
+
"changesWarning_one": "You modified {{count}} value. Click \"Continue\" to apply changes.",
|
|
325
|
+
"changesWarning_other": "You modified {{count}} values. Click \"Continue\" to apply changes."
|
|
195
326
|
},
|
|
196
327
|
"breakpointDialog": {
|
|
197
328
|
"editTitle": "Edit breakpoint",
|
|
@@ -201,12 +332,12 @@
|
|
|
201
332
|
"conditionPlaceholder": "user.username === 'admin'",
|
|
202
333
|
"conditionHelp": "JavaScript expression. Leave empty for unconditional stop.",
|
|
203
334
|
"availableVars": "Available variables:",
|
|
204
|
-
"howItWorksTitle": "
|
|
335
|
+
"howItWorksTitle": "How conditions work:",
|
|
205
336
|
"howItWorks1": "Execution will stop only if condition returns <code class=\"text-green-400\">true</code>",
|
|
206
337
|
"howItWorks2": "Use <code class=\"text-blue-400\">user</code> to check user (username, id)",
|
|
207
338
|
"howItWorks3": "Use <code class=\"text-blue-400\">args</code> to check command arguments",
|
|
208
339
|
"howItWorks4": "Use <code class=\"text-blue-400\">variables</code> to check graph variables",
|
|
209
|
-
"examplesTitle": "
|
|
340
|
+
"examplesTitle": "Example conditions:",
|
|
210
341
|
"exampleAdmin": "Stop only for admin:",
|
|
211
342
|
"exampleCount": "Stop if number is greater than 10:",
|
|
212
343
|
"exampleDebug": "Stop in debug mode:",
|
|
@@ -215,5 +346,73 @@
|
|
|
215
346
|
"update": "Update",
|
|
216
347
|
"add": "Add",
|
|
217
348
|
"breakpoint": "breakpoint"
|
|
349
|
+
},
|
|
350
|
+
"debugStepInfo": {
|
|
351
|
+
"title": "Debug",
|
|
352
|
+
"empty": "Start the graph or enable test mode — current step data will appear here.",
|
|
353
|
+
"stepNumber": "Step {{n}}",
|
|
354
|
+
"testStepNumber": "Test step {{n}}",
|
|
355
|
+
"paused": "Paused",
|
|
356
|
+
"controls": "Controls",
|
|
357
|
+
"whatIf": "What-if (override values)",
|
|
358
|
+
"historyDepth": "History depth:",
|
|
359
|
+
"unknown": "Unknown"
|
|
360
|
+
},
|
|
361
|
+
"eventNodes": {
|
|
362
|
+
"addPin": "Add pin",
|
|
363
|
+
"pinName": "Name:",
|
|
364
|
+
"pinNamePlaceholder": "Pin name",
|
|
365
|
+
"pinType": "Type:",
|
|
366
|
+
"confirmPin": "Add",
|
|
367
|
+
"cancelPin": "Cancel",
|
|
368
|
+
"deletePin": "Delete",
|
|
369
|
+
"eventName": "Event name:",
|
|
370
|
+
"eventNamePlaceholder": "My event",
|
|
371
|
+
"selectEvent": "Select event:",
|
|
372
|
+
"noEvents": "No events available",
|
|
373
|
+
"selectEventPlaceholder": "Select event..."
|
|
374
|
+
},
|
|
375
|
+
"testMode": {
|
|
376
|
+
"title": "Test Mode",
|
|
377
|
+
"description": "Run the graph step by step with an emulated event. You can edit values and rewind.",
|
|
378
|
+
"startButton": "Start test",
|
|
379
|
+
"exitButton": "Exit test",
|
|
380
|
+
"running": "running",
|
|
381
|
+
"idle": "idle",
|
|
382
|
+
"startTitle": "Start test run",
|
|
383
|
+
"startRun": "Start",
|
|
384
|
+
"cancel": "Cancel",
|
|
385
|
+
"close": "Close",
|
|
386
|
+
"eventTypeLabel": "Event type",
|
|
387
|
+
"noFields": "No additional data required",
|
|
388
|
+
"stepBack": "Back",
|
|
389
|
+
"stepBackTitle": "Rewind by one step",
|
|
390
|
+
"step": "step {{n}}",
|
|
391
|
+
"runNodeTitle": "Run node in isolation",
|
|
392
|
+
"runSelectedNode": "Run this node ({{type}})",
|
|
393
|
+
"runIsolated": "Run",
|
|
394
|
+
"noInputPins": "This node has no data input pins",
|
|
395
|
+
"valueOrJson": "value or JSON",
|
|
396
|
+
"executed": "Executed",
|
|
397
|
+
"error": "Error",
|
|
398
|
+
"outputs": "Outputs:",
|
|
399
|
+
"fields": {
|
|
400
|
+
"username": "Username",
|
|
401
|
+
"message": "Message",
|
|
402
|
+
"health": "Health (0-20)",
|
|
403
|
+
"food": "Food (0-20)",
|
|
404
|
+
"commandArgsJson": "Command arguments (JSON)"
|
|
405
|
+
},
|
|
406
|
+
"events": {
|
|
407
|
+
"chat": "Chat message",
|
|
408
|
+
"playerJoined": "Player joined",
|
|
409
|
+
"playerLeft": "Player left",
|
|
410
|
+
"health": "Health changed",
|
|
411
|
+
"botDied": "Bot died",
|
|
412
|
+
"entitySpawn": "Entity spawn",
|
|
413
|
+
"entityGone": "Entity gone",
|
|
414
|
+
"botStartup": "Bot startup",
|
|
415
|
+
"command": "Command"
|
|
416
|
+
}
|
|
218
417
|
}
|
|
219
418
|
}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
"description": "Введите ваши учетные данные для доступа к панели.",
|
|
4
4
|
"username": "Имя пользователя",
|
|
5
5
|
"password": "Пароль",
|
|
6
|
+
"showPassword": "Показать пароль",
|
|
7
|
+
"hidePassword": "Скрыть пароль",
|
|
6
8
|
"submit": "Войти",
|
|
7
9
|
"forgotPassword": "Забыли пароль?",
|
|
8
10
|
"loginError": "Не удалось войти.",
|
|
@@ -12,7 +12,85 @@
|
|
|
12
12
|
"error": "Ошибка",
|
|
13
13
|
"commandCreated": "Команда \"{{name}}\" успешно создана.",
|
|
14
14
|
"commandCreateError": "Не удалось создать команду",
|
|
15
|
-
"loadError": "Не удалось загрузить данные управления."
|
|
15
|
+
"loadError": "Не удалось загрузить данные управления.",
|
|
16
|
+
"criticalError": "Критическая ошибка"
|
|
17
|
+
},
|
|
18
|
+
"dynamicInput": {
|
|
19
|
+
"placeholder": "Добавить элемент...",
|
|
20
|
+
"add": "Добавить"
|
|
21
|
+
},
|
|
22
|
+
"users": {
|
|
23
|
+
"title": "Пользователи",
|
|
24
|
+
"description": "Список всех пользователей, которые взаимодействовали с ботом.",
|
|
25
|
+
"searchPlaceholder": "Поиск по никнейму...",
|
|
26
|
+
"blacklisted": "В черном списке",
|
|
27
|
+
"table": {
|
|
28
|
+
"username": "Никнейм",
|
|
29
|
+
"groups": "Группы",
|
|
30
|
+
"status": "Статус",
|
|
31
|
+
"actions": "Действия",
|
|
32
|
+
"loading": "Загрузка..."
|
|
33
|
+
},
|
|
34
|
+
"pagination": {
|
|
35
|
+
"showing": "Показано {{from}} - {{to}} из {{total}} пользователей",
|
|
36
|
+
"previous": "Назад",
|
|
37
|
+
"next": "Вперед",
|
|
38
|
+
"page": "Страница {{page}} из {{totalPages}}"
|
|
39
|
+
},
|
|
40
|
+
"toast": {
|
|
41
|
+
"updated": "Данные пользователя {{name}} обновлены."
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"groups": {
|
|
45
|
+
"title": "Группы",
|
|
46
|
+
"description": "Список всех групп и их прав для этого бота.",
|
|
47
|
+
"create": "Создать группу",
|
|
48
|
+
"table": {
|
|
49
|
+
"name": "Название",
|
|
50
|
+
"permissions": "Права",
|
|
51
|
+
"actions": "Действия",
|
|
52
|
+
"loading": "Загрузка..."
|
|
53
|
+
},
|
|
54
|
+
"toast": {
|
|
55
|
+
"saved": "Группа успешно {{action}}.",
|
|
56
|
+
"deleted": "Группа удалена."
|
|
57
|
+
},
|
|
58
|
+
"actions": {
|
|
59
|
+
"created": "создана",
|
|
60
|
+
"updated": "обновлена"
|
|
61
|
+
},
|
|
62
|
+
"errors": {
|
|
63
|
+
"missingBotId": "Не удалось определить ID бота.",
|
|
64
|
+
"deleteSource": "Нельзя удалить группу с источником \"{{owner}}\"."
|
|
65
|
+
},
|
|
66
|
+
"deleteDialog": {
|
|
67
|
+
"title": "Удалить группу \"{{name}}\"?",
|
|
68
|
+
"description": "Это действие нельзя будет отменить. Пользователи, состоявшие в этой группе, потеряют соответствующие права.",
|
|
69
|
+
"confirm": "Да, удалить группу"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"permissionsSection": {
|
|
73
|
+
"title": "Права",
|
|
74
|
+
"description": "Полный список всех прав, зарегистрированных для этого бота.",
|
|
75
|
+
"create": "Создать право",
|
|
76
|
+
"table": {
|
|
77
|
+
"permission": "Право",
|
|
78
|
+
"description": "Описание",
|
|
79
|
+
"source": "Источник",
|
|
80
|
+
"loading": "Загрузка..."
|
|
81
|
+
},
|
|
82
|
+
"toast": {
|
|
83
|
+
"created": "Новое право успешно создано."
|
|
84
|
+
},
|
|
85
|
+
"createDialog": {
|
|
86
|
+
"title": "Создать новое право",
|
|
87
|
+
"description": "Права используются для тонкой настройки доступа к командам.",
|
|
88
|
+
"nameLabel": "Название права (например, plugin.name.action)",
|
|
89
|
+
"descriptionLabel": "Описание",
|
|
90
|
+
"cancel": "Отмена",
|
|
91
|
+
"create": "Создать",
|
|
92
|
+
"creating": "Создание..."
|
|
93
|
+
}
|
|
16
94
|
},
|
|
17
95
|
"commandEdit": {
|
|
18
96
|
"title": "Редактировать команду: {{name}}",
|