godot-mcp-runtime 1.1.1 → 2.1.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.md +72 -64
- package/dist/index.js +71 -10
- package/dist/index.js.map +1 -1
- package/dist/scripts/mcp_bridge.gd +7 -0
- package/dist/tools/node-tools.d.ts +121 -1
- package/dist/tools/node-tools.d.ts.map +1 -1
- package/dist/tools/node-tools.js +437 -277
- package/dist/tools/node-tools.js.map +1 -1
- package/dist/tools/project-tools.d.ts +85 -1
- package/dist/tools/project-tools.d.ts.map +1 -1
- package/dist/tools/project-tools.js +292 -199
- package/dist/tools/project-tools.js.map +1 -1
- package/dist/tools/scene-tools.d.ts +61 -1
- package/dist/tools/scene-tools.d.ts.map +1 -1
- package/dist/tools/scene-tools.js +246 -210
- package/dist/tools/scene-tools.js.map +1 -1
- package/dist/utils/godot-runner.d.ts +14 -1
- package/dist/utils/godot-runner.d.ts.map +1 -1
- package/dist/utils/godot-runner.js +42 -3
- package/dist/utils/godot-runner.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
# Godot MCP
|
|
1
|
+
# Godot MCP Runtime
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/godot-mcp-runtime)
|
|
4
|
-
[](https://www.npmjs.com/package/godot-mcp-runtime)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
[](https://nodejs.org/)
|
|
7
7
|
|
|
8
8
|
An [MCP](https://modelcontextprotocol.io/) server that gives AI assistants direct access to a running Godot 4.x game. Not just file editing, not just scene manipulation. Actual runtime control: input simulation, screenshots, UI discovery, and live GDScript execution while the game is running.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
When you run a project through this server, it injects a lightweight UDP bridge as an autoload, and suddenly the AI can interact with your game the same way a player would: press keys, click buttons, read what's on screen, and run arbitrary code against the live scene tree.
|
|
11
11
|
|
|
12
12
|
**The distinction matters: the AI doesn't just write your game, it can check its work.**
|
|
13
13
|
|
|
14
|
+
**No addon required.** Most Godot MCP servers that offer runtime support ship as a Godot addon — something you install into your project, commit to version control, and manage as a dependency. This server does none of that. The bridge script is injected on `run_project` and removed on `stop_project`. Your project files are left exactly as they were. All you need is Node.js and a Godot executable — no addon installation, no project modifications, no cleanup.
|
|
15
|
+
|
|
14
16
|
<a href="https://glama.ai/mcp/servers/@Erodenn/godot-runtime-mcp">
|
|
15
17
|
<img width="380" height="200" src="https://glama.ai/mcp/servers/@Erodenn/godot-runtime-mcp/badge" alt="godot-runtime-mcp MCP server" />
|
|
16
18
|
</a>
|
|
@@ -19,7 +21,7 @@ Think of it as [Playwright MCP](https://github.com/microsoft/playwright-mcp), bu
|
|
|
19
21
|
|
|
20
22
|
This is not a playtesting replacement. It doesn't catch the subtle feel issues that only a human notices, and it won't tell you if your game is fun. What it does is let an agent confirm that a scene loads, a button responds, a value updated, a script ran without errors. That's a fundamentally different development workflow, and it's what this server is built for.
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
Every operation is its own tool with only its relevant parameters — no operation discriminators, no conditional schemas. Each tool teaches agents how to use it through its description and response messages: what to call next, when to wait, and how to recover from errors.
|
|
23
25
|
|
|
24
26
|
## What It Does
|
|
25
27
|
|
|
@@ -32,6 +34,8 @@ This server is built around a small set of composable, wide-reaching tools rathe
|
|
|
32
34
|
- **UI discovery:** Walk the live scene tree and collect every visible Control node with its position, type, text content, and disabled state
|
|
33
35
|
- **Live script execution:** Compile and run arbitrary GDScript with full SceneTree access while the game is running
|
|
34
36
|
|
|
37
|
+
**Background mode.** Pass `background: true` to `run_project` and the Godot window moves off-screen with physical input blocked — borderless, unfocusable, mouse-passthrough. Programmatic input, screenshots, and all runtime tools work exactly the same. Useful for automated agent-driven testing where the window shouldn't be visible or interactive.
|
|
38
|
+
|
|
35
39
|
The bridge cleans itself up automatically when `stop_project` is called. No leftover autoloads, no modified project files.
|
|
36
40
|
|
|
37
41
|
## Quick Start
|
|
@@ -41,26 +45,33 @@ The bridge cleans itself up automatically when `stop_project` is called. No left
|
|
|
41
45
|
- [Node.js](https://nodejs.org/) v18+
|
|
42
46
|
- [Godot 4.x](https://godotengine.org/)
|
|
43
47
|
|
|
44
|
-
|
|
48
|
+
That's it. No Godot addon, no project modifications.
|
|
45
49
|
|
|
46
|
-
|
|
47
|
-
npm install -g godot-mcp-runtime
|
|
48
|
-
```
|
|
50
|
+
### Configure Your MCP Client
|
|
49
51
|
|
|
50
|
-
|
|
52
|
+
Add the following to your MCP client config. Works with Claude Code, Claude Desktop, Cursor, or any MCP-compatible client.
|
|
51
53
|
|
|
52
|
-
|
|
53
|
-
git clone https://github.com/Erodenn/godot-mcp-runtime.git
|
|
54
|
-
cd godot-mcp-runtime
|
|
55
|
-
npm install
|
|
56
|
-
npm run build
|
|
57
|
-
```
|
|
54
|
+
**Zero-install via npx (recommended):**
|
|
58
55
|
|
|
59
|
-
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"mcpServers": {
|
|
59
|
+
"godot": {
|
|
60
|
+
"command": "npx",
|
|
61
|
+
"args": ["-y", "godot-mcp-runtime"],
|
|
62
|
+
"env": {
|
|
63
|
+
"GODOT_PATH": "<path-to-godot-executable>"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
60
69
|
|
|
61
|
-
|
|
70
|
+
**Or install globally:**
|
|
62
71
|
|
|
63
|
-
|
|
72
|
+
```bash
|
|
73
|
+
npm install -g godot-mcp-runtime
|
|
74
|
+
```
|
|
64
75
|
|
|
65
76
|
```json
|
|
66
77
|
{
|
|
@@ -75,7 +86,14 @@ Add the following to your MCP client config. Works with Claude Code, Claude Desk
|
|
|
75
86
|
}
|
|
76
87
|
```
|
|
77
88
|
|
|
78
|
-
**
|
|
89
|
+
**Or clone from source:**
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
git clone https://github.com/Erodenn/godot-mcp-runtime.git
|
|
93
|
+
cd godot-mcp-runtime
|
|
94
|
+
npm install
|
|
95
|
+
npm run build
|
|
96
|
+
```
|
|
79
97
|
|
|
80
98
|
```json
|
|
81
99
|
{
|
|
@@ -99,14 +117,12 @@ Ask your AI assistant to call `get_project_info`. If it returns a Godot version
|
|
|
99
117
|
|
|
100
118
|
## Tools
|
|
101
119
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
### Project
|
|
120
|
+
### Project Management
|
|
105
121
|
|
|
106
122
|
| Tool | Description |
|
|
107
123
|
|------|-------------|
|
|
108
124
|
| `launch_editor` | Open the Godot editor GUI for a project |
|
|
109
|
-
| `run_project` | Run a project in debug mode and inject the MCP bridge |
|
|
125
|
+
| `run_project` | Run a project in debug mode and inject the MCP bridge. Pass `background: true` to hide the window |
|
|
110
126
|
| `stop_project` | Stop the running project and remove the bridge |
|
|
111
127
|
| `get_debug_output` | Read stdout/stderr from the running project |
|
|
112
128
|
| `list_projects` | Find Godot projects in a directory |
|
|
@@ -119,67 +135,59 @@ After calling `run_project`, wait 2-3 seconds for the bridge to initialize befor
|
|
|
119
135
|
| Tool | Description |
|
|
120
136
|
|------|-------------|
|
|
121
137
|
| `take_screenshot` | Capture a PNG of the running viewport |
|
|
122
|
-
| `simulate_input` | Send batched input: key,
|
|
138
|
+
| `simulate_input` | Send batched input: key, mouse, click_element, action, wait |
|
|
123
139
|
| `get_ui_elements` | Get all visible Control nodes with positions, types, and text |
|
|
124
140
|
| `run_script` | Execute arbitrary GDScript at runtime with full SceneTree access |
|
|
125
141
|
|
|
126
|
-
### Scene
|
|
142
|
+
### Scene Editing (headless)
|
|
127
143
|
|
|
128
|
-
All mutation operations save automatically. Use `
|
|
144
|
+
All mutation operations save automatically. Use `save_scene` only for save-as (`newPath`) or to re-canonicalize a `.tscn` file.
|
|
129
145
|
|
|
130
|
-
|
|
|
131
|
-
|
|
132
|
-
| `
|
|
133
|
-
| `add_node` | Add a node to an existing scene |
|
|
146
|
+
| Tool | Description |
|
|
147
|
+
|------|-------------|
|
|
148
|
+
| `create_scene` | Create a new scene file |
|
|
149
|
+
| `add_node` | Add a node to an existing scene (supports promoted spatial params) |
|
|
134
150
|
| `load_sprite` | Set a texture on a Sprite2D, Sprite3D, or TextureRect |
|
|
135
|
-
| `
|
|
151
|
+
| `save_scene` | Re-pack and save the scene, or save-as with `newPath` |
|
|
136
152
|
| `export_mesh_library` | Export scenes as a MeshLibrary for GridMap |
|
|
137
|
-
| `
|
|
153
|
+
| `batch_scene_operations` | Run multiple add_node/load_sprite/save ops in a single Godot process |
|
|
138
154
|
|
|
139
|
-
### Node
|
|
155
|
+
### Node Editing (headless)
|
|
140
156
|
|
|
141
157
|
All mutation operations save automatically.
|
|
142
158
|
|
|
143
|
-
|
|
|
144
|
-
|
|
145
|
-
| `
|
|
146
|
-
| `
|
|
147
|
-
| `
|
|
148
|
-
| `
|
|
159
|
+
| Tool | Description |
|
|
160
|
+
|------|-------------|
|
|
161
|
+
| `get_scene_tree` | Get the full scene tree hierarchy (use `maxDepth: 1` for shallow listing) |
|
|
162
|
+
| `get_node_properties` | Read properties from a node |
|
|
163
|
+
| `batch_get_node_properties` | Read properties from multiple nodes in one process |
|
|
164
|
+
| `set_node_property` | Set a property on a node |
|
|
165
|
+
| `batch_set_node_properties` | Set multiple properties in one process |
|
|
149
166
|
| `attach_script` | Attach a GDScript to a node |
|
|
150
|
-
| `
|
|
151
|
-
| `
|
|
152
|
-
| `
|
|
167
|
+
| `duplicate_node` | Duplicate a node within the scene |
|
|
168
|
+
| `delete_node` | Remove a node from the scene |
|
|
169
|
+
| `get_node_signals` | List all signals on a node with their connections |
|
|
153
170
|
| `connect_signal` | Connect a signal to a method on another node |
|
|
154
171
|
| `disconnect_signal` | Disconnect a signal connection |
|
|
155
172
|
|
|
156
|
-
### Project
|
|
173
|
+
### Project Config (no Godot process required)
|
|
157
174
|
|
|
158
|
-
|
|
175
|
+
These tools edit `project.godot` directly or read the filesystem. Safe to use even when autoloads are broken.
|
|
159
176
|
|
|
160
|
-
|
|
|
161
|
-
|
|
177
|
+
| Tool | Description |
|
|
178
|
+
|------|-------------|
|
|
162
179
|
| `list_autoloads` | List all registered autoloads with paths and singleton status |
|
|
163
180
|
| `add_autoload` | Register a new autoload |
|
|
164
181
|
| `remove_autoload` | Unregister an autoload by name |
|
|
165
182
|
| `update_autoload` | Modify an existing autoload's path or singleton flag |
|
|
166
183
|
| `get_project_settings` | Read settings from `project.godot` by section and key |
|
|
167
|
-
| `
|
|
168
|
-
| `
|
|
184
|
+
| `get_project_files` | Get the project file tree with types and extensions |
|
|
185
|
+
| `search_project` | Search for a string across project source files |
|
|
169
186
|
| `get_scene_dependencies` | List all resources a scene depends on |
|
|
170
187
|
|
|
171
|
-
###
|
|
172
|
-
|
|
173
|
-
Validate before attaching or running. Catches syntax errors and missing resource references before they cause headless crashes or runtime failures.
|
|
174
|
-
|
|
175
|
-
| Input | Description |
|
|
176
|
-
|-------|-------------|
|
|
177
|
-
| `scriptPath` | Validate an existing `.gd` file in the project |
|
|
178
|
-
| `source` | Validate inline GDScript written to a temp file |
|
|
179
|
-
| `scenePath` | Validate a `.tscn` file and check that all `ext_resource` references resolve |
|
|
180
|
-
| `targets` | Array of the above — validate multiple scripts or scenes in a single Godot process |
|
|
188
|
+
### Validation: `validate`
|
|
181
189
|
|
|
182
|
-
|
|
190
|
+
Validate before attaching or running. Catches syntax errors and missing resource references before they cause headless crashes or runtime failures. Supports `scriptPath`, `source` (inline GDScript), `scenePath`, or a `targets` array for batch validation.
|
|
183
191
|
|
|
184
192
|
### UIDs: `manage_uids` (Godot 4.4+)
|
|
185
193
|
|
|
@@ -194,15 +202,15 @@ Returns `{ valid, errors: [{ line?, message }] }` per target. Fix reported error
|
|
|
194
202
|
src/
|
|
195
203
|
├── index.ts # MCP server entry point, routes tool calls
|
|
196
204
|
├── tools/
|
|
197
|
-
│ ├── project-tools.ts # Project
|
|
198
|
-
│ ├── scene-tools.ts # Scene
|
|
199
|
-
│ ├── node-tools.ts # Node
|
|
205
|
+
│ ├── project-tools.ts # Project, runtime, autoload, filesystem, search, settings
|
|
206
|
+
│ ├── scene-tools.ts # Scene creation, node addition, sprite loading, batch ops, UIDs
|
|
207
|
+
│ ├── node-tools.ts # Node properties, scripts, tree, duplication, signals
|
|
200
208
|
│ └── validate-tools.ts # GDScript and scene validation
|
|
201
209
|
├── scripts/
|
|
202
210
|
│ ├── godot_operations.gd # Headless GDScript operations
|
|
203
211
|
│ └── mcp_bridge.gd # UDP autoload for runtime communication
|
|
204
212
|
└── utils/
|
|
205
|
-
└── godot-runner.ts # Process spawning, output parsing
|
|
213
|
+
└── godot-runner.ts # Process spawning, output parsing, shared validation helpers
|
|
206
214
|
```
|
|
207
215
|
|
|
208
216
|
Headless operations spawn Godot with `--headless --script godot_operations.gd`, perform the operation, and return JSON. Runtime operations communicate over UDP with the injected `McpBridge` autoload.
|
|
@@ -221,7 +229,7 @@ Files generated during runtime (screenshots, executed scripts) are stored in `.m
|
|
|
221
229
|
|
|
222
230
|
## Broken Autoloads
|
|
223
231
|
|
|
224
|
-
If any registered autoload fails to initialize (syntax error, missing resource, display dependency), Godot's headless process will crash before any operation runs. Use `
|
|
232
|
+
If any registered autoload fails to initialize (syntax error, missing resource, display dependency), Godot's headless process will crash before any operation runs. Use `list_autoloads` and `remove_autoload` to inspect and remove the failing autoload. These tools edit `project.godot` directly, with no Godot process involved.
|
|
225
233
|
|
|
226
234
|
## Acknowledgments
|
|
227
235
|
|
package/dist/index.js
CHANGED
|
@@ -11,11 +11,11 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
11
11
|
import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from '@modelcontextprotocol/sdk/types.js';
|
|
12
12
|
import { GodotRunner } from './utils/godot-runner.js';
|
|
13
13
|
// Project tools
|
|
14
|
-
import { projectToolDefinitions, handleLaunchEditor, handleRunProject, handleGetDebugOutput, handleStopProject, handleListProjects, handleGetProjectInfo, handleTakeScreenshot, handleSimulateInput, handleGetUiElements, handleRunScript,
|
|
14
|
+
import { projectToolDefinitions, handleLaunchEditor, handleRunProject, handleGetDebugOutput, handleStopProject, handleListProjects, handleGetProjectInfo, handleTakeScreenshot, handleSimulateInput, handleGetUiElements, handleRunScript, handleListAutoloads, handleAddAutoload, handleRemoveAutoload, handleUpdateAutoload, handleGetProjectFiles, handleSearchProject, handleGetSceneDependencies, handleGetProjectSettings, } from './tools/project-tools.js';
|
|
15
15
|
// Scene tools
|
|
16
|
-
import { sceneToolDefinitions,
|
|
16
|
+
import { sceneToolDefinitions, handleCreateScene, handleAddNode, handleLoadSprite, handleSaveScene, handleExportMeshLibrary, handleBatchSceneOperations, handleManageUids, } from './tools/scene-tools.js';
|
|
17
17
|
// Node tools
|
|
18
|
-
import { nodeToolDefinitions,
|
|
18
|
+
import { nodeToolDefinitions, handleDeleteNode, handleSetNodeProperty, handleBatchSetNodeProperties, handleGetNodeProperties, handleBatchGetNodeProperties, handleAttachScript, handleGetSceneTree, handleDuplicateNode, handleGetNodeSignals, handleConnectSignal, handleDisconnectSignal, } from './tools/node-tools.js';
|
|
19
19
|
// Validate tools
|
|
20
20
|
import { validateToolDefinitions, handleValidate, } from './tools/validate-tools.js';
|
|
21
21
|
class GodotMcpServer {
|
|
@@ -25,11 +25,28 @@ class GodotMcpServer {
|
|
|
25
25
|
this.runner = new GodotRunner(config);
|
|
26
26
|
this.server = new Server({
|
|
27
27
|
name: 'godot-mcp',
|
|
28
|
-
version: '
|
|
28
|
+
version: '2.1.0',
|
|
29
29
|
}, {
|
|
30
30
|
capabilities: {
|
|
31
31
|
tools: {},
|
|
32
32
|
},
|
|
33
|
+
instructions: `Godot MCP Server — AI-driven Godot 4.x project manipulation.
|
|
34
|
+
|
|
35
|
+
Tool categories:
|
|
36
|
+
- Project management: launch_editor, run_project, stop_project, get_debug_output, list_projects, get_project_info
|
|
37
|
+
- Scene editing (headless): create_scene, add_node, load_sprite, save_scene, export_mesh_library, batch_scene_operations
|
|
38
|
+
- Node editing (headless): delete_node, set_node_property, batch_set_node_properties, get_node_properties, batch_get_node_properties, attach_script, get_scene_tree, duplicate_node, get_node_signals, connect_signal, disconnect_signal
|
|
39
|
+
- Runtime (requires run_project): take_screenshot, simulate_input, get_ui_elements, run_script
|
|
40
|
+
- Project config (no Godot process): list_autoloads, add_autoload, remove_autoload, update_autoload, get_project_files, search_project, get_scene_dependencies, get_project_settings
|
|
41
|
+
- Validation: validate
|
|
42
|
+
- UIDs (Godot 4.4+): manage_uids
|
|
43
|
+
|
|
44
|
+
Key behaviors:
|
|
45
|
+
- All mutation operations (add_node, set_node_property, delete_node, etc.) save the scene automatically. Only use save_scene for save-as (newPath) or re-canonicalization.
|
|
46
|
+
- Headless Godot initializes ALL registered autoloads. If any autoload is broken, headless operations will fail. Use list_autoloads / remove_autoload to diagnose.
|
|
47
|
+
- After run_project, wait 2-3 seconds before using runtime tools (take_screenshot, simulate_input, get_ui_elements, run_script). The MCP bridge needs time to initialize.
|
|
48
|
+
- click_element in simulate_input resolves by node path or node name (BFS search), NOT by visible text. Use get_ui_elements to discover valid element identifiers.
|
|
49
|
+
- run_script expects GDScript with "extends RefCounted" and "func execute(scene_tree: SceneTree) -> Variant".`,
|
|
33
50
|
});
|
|
34
51
|
this.setupToolHandlers();
|
|
35
52
|
this.server.onerror = (error) => console.error('[MCP Error]', error);
|
|
@@ -84,16 +101,60 @@ class GodotMcpServer {
|
|
|
84
101
|
return await handleGetUiElements(this.runner, args);
|
|
85
102
|
case 'run_script':
|
|
86
103
|
return await handleRunScript(this.runner, args);
|
|
87
|
-
case '
|
|
88
|
-
return await
|
|
104
|
+
case 'list_autoloads':
|
|
105
|
+
return await handleListAutoloads(args);
|
|
106
|
+
case 'add_autoload':
|
|
107
|
+
return await handleAddAutoload(args);
|
|
108
|
+
case 'remove_autoload':
|
|
109
|
+
return await handleRemoveAutoload(args);
|
|
110
|
+
case 'update_autoload':
|
|
111
|
+
return await handleUpdateAutoload(args);
|
|
112
|
+
case 'get_project_files':
|
|
113
|
+
return await handleGetProjectFiles(args);
|
|
114
|
+
case 'search_project':
|
|
115
|
+
return await handleSearchProject(args);
|
|
116
|
+
case 'get_scene_dependencies':
|
|
117
|
+
return await handleGetSceneDependencies(args);
|
|
118
|
+
case 'get_project_settings':
|
|
119
|
+
return await handleGetProjectSettings(args);
|
|
89
120
|
// Scene tools
|
|
90
|
-
case '
|
|
91
|
-
return await
|
|
121
|
+
case 'create_scene':
|
|
122
|
+
return await handleCreateScene(this.runner, args);
|
|
123
|
+
case 'add_node':
|
|
124
|
+
return await handleAddNode(this.runner, args);
|
|
125
|
+
case 'load_sprite':
|
|
126
|
+
return await handleLoadSprite(this.runner, args);
|
|
127
|
+
case 'save_scene':
|
|
128
|
+
return await handleSaveScene(this.runner, args);
|
|
129
|
+
case 'export_mesh_library':
|
|
130
|
+
return await handleExportMeshLibrary(this.runner, args);
|
|
131
|
+
case 'batch_scene_operations':
|
|
132
|
+
return await handleBatchSceneOperations(this.runner, args);
|
|
92
133
|
case 'manage_uids':
|
|
93
134
|
return await handleManageUids(this.runner, args);
|
|
94
135
|
// Node tools
|
|
95
|
-
case '
|
|
96
|
-
return await
|
|
136
|
+
case 'delete_node':
|
|
137
|
+
return await handleDeleteNode(this.runner, args);
|
|
138
|
+
case 'set_node_property':
|
|
139
|
+
return await handleSetNodeProperty(this.runner, args);
|
|
140
|
+
case 'batch_set_node_properties':
|
|
141
|
+
return await handleBatchSetNodeProperties(this.runner, args);
|
|
142
|
+
case 'get_node_properties':
|
|
143
|
+
return await handleGetNodeProperties(this.runner, args);
|
|
144
|
+
case 'batch_get_node_properties':
|
|
145
|
+
return await handleBatchGetNodeProperties(this.runner, args);
|
|
146
|
+
case 'attach_script':
|
|
147
|
+
return await handleAttachScript(this.runner, args);
|
|
148
|
+
case 'get_scene_tree':
|
|
149
|
+
return await handleGetSceneTree(this.runner, args);
|
|
150
|
+
case 'duplicate_node':
|
|
151
|
+
return await handleDuplicateNode(this.runner, args);
|
|
152
|
+
case 'get_node_signals':
|
|
153
|
+
return await handleGetNodeSignals(this.runner, args);
|
|
154
|
+
case 'connect_signal':
|
|
155
|
+
return await handleConnectSignal(this.runner, args);
|
|
156
|
+
case 'disconnect_signal':
|
|
157
|
+
return await handleDisconnectSignal(this.runner, args);
|
|
97
158
|
// Validate tools
|
|
98
159
|
case 'validate':
|
|
99
160
|
return await handleValidate(this.runner, args);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,sBAAsB,EACtB,QAAQ,GACT,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAqB,MAAM,yBAAyB,CAAC;AAEzE,gBAAgB;AAChB,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,sBAAsB,EACtB,QAAQ,GACT,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAqB,MAAM,yBAAyB,CAAC;AAEzE,gBAAgB;AAChB,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAElC,cAAc;AACd,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,aAAa;AACb,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAE/B,iBAAiB;AACjB,OAAO,EACL,uBAAuB,EACvB,cAAc,GACf,MAAM,2BAA2B,CAAC;AAEnC,MAAM,cAAc;IACV,MAAM,CAAS;IACf,MAAM,CAAc;IAE5B,YAAY,MAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QAEtC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CACtB;YACE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO;SACjB,EACD;YACE,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE;aACV;YACD,YAAY,EAAE;;;;;;;;;;;;;;;;8GAgBwF;SACvG,CACF,CAAC;QAEF,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAErE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAEO,iBAAiB;QACvB,+BAA+B;QAC/B,MAAM,QAAQ,GAAG;YACf,GAAG,sBAAsB;YACzB,GAAG,oBAAoB;YACvB,GAAG,mBAAmB;YACtB,GAAG,uBAAuB;SAC3B,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACjE,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YACrC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;YAE5C,OAAO,CAAC,KAAK,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;YAE7D,QAAQ,QAAQ,EAAE,CAAC;gBACjB,gBAAgB;gBAChB,KAAK,eAAe;oBAClB,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACrD,KAAK,aAAa;oBAChB,OAAO,MAAM,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnD,KAAK,kBAAkB;oBACrB,OAAO,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACjD,KAAK,cAAc;oBACjB,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxC,KAAK,eAAe;oBAClB,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBACxC,KAAK,kBAAkB;oBACrB,OAAO,MAAM,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACvD,KAAK,iBAAiB;oBACpB,OAAO,MAAM,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACvD,KAAK,gBAAgB;oBACnB,OAAO,MAAM,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACtD,KAAK,iBAAiB;oBACpB,OAAO,MAAM,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACtD,KAAK,YAAY;oBACf,OAAO,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClD,KAAK,gBAAgB;oBACnB,OAAO,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBACzC,KAAK,cAAc;oBACjB,OAAO,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACvC,KAAK,iBAAiB;oBACpB,OAAO,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC1C,KAAK,iBAAiB;oBACpB,OAAO,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC1C,KAAK,mBAAmB;oBACtB,OAAO,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBAC3C,KAAK,gBAAgB;oBACnB,OAAO,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBACzC,KAAK,wBAAwB;oBAC3B,OAAO,MAAM,0BAA0B,CAAC,IAAI,CAAC,CAAC;gBAChD,KAAK,sBAAsB;oBACzB,OAAO,MAAM,wBAAwB,CAAC,IAAI,CAAC,CAAC;gBAE9C,cAAc;gBACd,KAAK,cAAc;oBACjB,OAAO,MAAM,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACpD,KAAK,UAAU;oBACb,OAAO,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAChD,KAAK,aAAa;oBAChB,OAAO,MAAM,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnD,KAAK,YAAY;oBACf,OAAO,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClD,KAAK,qBAAqB;oBACxB,OAAO,MAAM,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC1D,KAAK,wBAAwB;oBAC3B,OAAO,MAAM,0BAA0B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC7D,KAAK,aAAa;oBAChB,OAAO,MAAM,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAEnD,aAAa;gBACb,KAAK,aAAa;oBAChB,OAAO,MAAM,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnD,KAAK,mBAAmB;oBACtB,OAAO,MAAM,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxD,KAAK,2BAA2B;oBAC9B,OAAO,MAAM,4BAA4B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC/D,KAAK,qBAAqB;oBACxB,OAAO,MAAM,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC1D,KAAK,2BAA2B;oBAC9B,OAAO,MAAM,4BAA4B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC/D,KAAK,eAAe;oBAClB,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACrD,KAAK,gBAAgB;oBACnB,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACrD,KAAK,gBAAgB;oBACnB,OAAO,MAAM,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACtD,KAAK,kBAAkB;oBACrB,OAAO,MAAM,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACvD,KAAK,gBAAgB;oBACnB,OAAO,MAAM,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACtD,KAAK,mBAAmB;oBACtB,OAAO,MAAM,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAEzD,iBAAiB;gBACjB,KAAK,UAAU;oBACb,OAAO,MAAM,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAEjD;oBACE,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,cAAc,EACxB,iBAAiB,QAAQ,EAAE,CAC5B,CAAC;YACN,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG;QACP,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,qFAAqF,CAAC,CAAC;YACvG,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;YACzD,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;YAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC9E,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF;AAED,4BAA4B;AAC5B,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;AACpC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACpC,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;IAC9E,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,YAAY,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -12,6 +12,13 @@ func _ready() -> void:
|
|
|
12
12
|
else:
|
|
13
13
|
print("McpBridge: Listening on UDP port %d" % port)
|
|
14
14
|
|
|
15
|
+
if OS.get_environment("MCP_BACKGROUND") == "1":
|
|
16
|
+
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_NO_FOCUS, true)
|
|
17
|
+
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_MOUSE_PASSTHROUGH, true)
|
|
18
|
+
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, true)
|
|
19
|
+
DisplayServer.window_set_position(Vector2i(-9999, -9999))
|
|
20
|
+
print("McpBridge: Background mode active - window hidden, physical input blocked")
|
|
21
|
+
|
|
15
22
|
func _process(_delta: float) -> void:
|
|
16
23
|
udp_server.poll()
|
|
17
24
|
if udp_server.is_connection_available():
|
|
@@ -1,6 +1,126 @@
|
|
|
1
1
|
import { GodotRunner, OperationParams, ToolDefinition } from '../utils/godot-runner.js';
|
|
2
2
|
export declare const nodeToolDefinitions: ToolDefinition[];
|
|
3
|
-
export declare function
|
|
3
|
+
export declare function handleDeleteNode(runner: GodotRunner, args: OperationParams): Promise<{
|
|
4
|
+
content: Array<{
|
|
5
|
+
type: "text";
|
|
6
|
+
text: string;
|
|
7
|
+
}>;
|
|
8
|
+
isError: boolean;
|
|
9
|
+
} | {
|
|
10
|
+
content: {
|
|
11
|
+
type: string;
|
|
12
|
+
text: string;
|
|
13
|
+
}[];
|
|
14
|
+
}>;
|
|
15
|
+
export declare function handleSetNodeProperty(runner: GodotRunner, args: OperationParams): Promise<{
|
|
16
|
+
content: Array<{
|
|
17
|
+
type: "text";
|
|
18
|
+
text: string;
|
|
19
|
+
}>;
|
|
20
|
+
isError: boolean;
|
|
21
|
+
} | {
|
|
22
|
+
content: {
|
|
23
|
+
type: string;
|
|
24
|
+
text: string;
|
|
25
|
+
}[];
|
|
26
|
+
}>;
|
|
27
|
+
export declare function handleBatchSetNodeProperties(runner: GodotRunner, args: OperationParams): Promise<{
|
|
28
|
+
content: Array<{
|
|
29
|
+
type: "text";
|
|
30
|
+
text: string;
|
|
31
|
+
}>;
|
|
32
|
+
isError: boolean;
|
|
33
|
+
} | {
|
|
34
|
+
content: {
|
|
35
|
+
type: string;
|
|
36
|
+
text: string;
|
|
37
|
+
}[];
|
|
38
|
+
}>;
|
|
39
|
+
export declare function handleGetNodeProperties(runner: GodotRunner, args: OperationParams): Promise<{
|
|
40
|
+
content: Array<{
|
|
41
|
+
type: "text";
|
|
42
|
+
text: string;
|
|
43
|
+
}>;
|
|
44
|
+
isError: boolean;
|
|
45
|
+
} | {
|
|
46
|
+
content: {
|
|
47
|
+
type: string;
|
|
48
|
+
text: string;
|
|
49
|
+
}[];
|
|
50
|
+
}>;
|
|
51
|
+
export declare function handleBatchGetNodeProperties(runner: GodotRunner, args: OperationParams): Promise<{
|
|
52
|
+
content: Array<{
|
|
53
|
+
type: "text";
|
|
54
|
+
text: string;
|
|
55
|
+
}>;
|
|
56
|
+
isError: boolean;
|
|
57
|
+
} | {
|
|
58
|
+
content: {
|
|
59
|
+
type: string;
|
|
60
|
+
text: string;
|
|
61
|
+
}[];
|
|
62
|
+
}>;
|
|
63
|
+
export declare function handleAttachScript(runner: GodotRunner, args: OperationParams): Promise<{
|
|
64
|
+
content: Array<{
|
|
65
|
+
type: "text";
|
|
66
|
+
text: string;
|
|
67
|
+
}>;
|
|
68
|
+
isError: boolean;
|
|
69
|
+
} | {
|
|
70
|
+
content: {
|
|
71
|
+
type: string;
|
|
72
|
+
text: string;
|
|
73
|
+
}[];
|
|
74
|
+
}>;
|
|
75
|
+
export declare function handleGetSceneTree(runner: GodotRunner, args: OperationParams): Promise<{
|
|
76
|
+
content: Array<{
|
|
77
|
+
type: "text";
|
|
78
|
+
text: string;
|
|
79
|
+
}>;
|
|
80
|
+
isError: boolean;
|
|
81
|
+
} | {
|
|
82
|
+
content: {
|
|
83
|
+
type: string;
|
|
84
|
+
text: string;
|
|
85
|
+
}[];
|
|
86
|
+
}>;
|
|
87
|
+
export declare function handleDuplicateNode(runner: GodotRunner, args: OperationParams): Promise<{
|
|
88
|
+
content: Array<{
|
|
89
|
+
type: "text";
|
|
90
|
+
text: string;
|
|
91
|
+
}>;
|
|
92
|
+
isError: boolean;
|
|
93
|
+
} | {
|
|
94
|
+
content: {
|
|
95
|
+
type: string;
|
|
96
|
+
text: string;
|
|
97
|
+
}[];
|
|
98
|
+
}>;
|
|
99
|
+
export declare function handleGetNodeSignals(runner: GodotRunner, args: OperationParams): Promise<{
|
|
100
|
+
content: Array<{
|
|
101
|
+
type: "text";
|
|
102
|
+
text: string;
|
|
103
|
+
}>;
|
|
104
|
+
isError: boolean;
|
|
105
|
+
} | {
|
|
106
|
+
content: {
|
|
107
|
+
type: string;
|
|
108
|
+
text: string;
|
|
109
|
+
}[];
|
|
110
|
+
}>;
|
|
111
|
+
export declare function handleConnectSignal(runner: GodotRunner, args: OperationParams): Promise<{
|
|
112
|
+
content: Array<{
|
|
113
|
+
type: "text";
|
|
114
|
+
text: string;
|
|
115
|
+
}>;
|
|
116
|
+
isError: boolean;
|
|
117
|
+
} | {
|
|
118
|
+
content: {
|
|
119
|
+
type: string;
|
|
120
|
+
text: string;
|
|
121
|
+
}[];
|
|
122
|
+
}>;
|
|
123
|
+
export declare function handleDisconnectSignal(runner: GodotRunner, args: OperationParams): Promise<{
|
|
4
124
|
content: Array<{
|
|
5
125
|
type: "text";
|
|
6
126
|
text: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-tools.d.ts","sourceRoot":"","sources":["../../src/tools/node-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,
|
|
1
|
+
{"version":3,"file":"node-tools.d.ts","sourceRoot":"","sources":["../../src/tools/node-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EAOX,eAAe,EACf,cAAc,EACf,MAAM,0BAA0B,CAAC;AAIlC,eAAO,MAAM,mBAAmB,EAAE,cAAc,EAqL/C,CAAC;AAIF,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe;;;;;;;;;;;GAoBhF;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe;;;;;;;;;;;GA4BrF;AAED,wBAAsB,4BAA4B,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe;;;;;;;;;;;GA2B5F;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe;;;;;;;;;;;GAqBvF;AAED,wBAAsB,4BAA4B,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe;;;;;;;;;;;GAuB5F;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe;;;;;;;;;;;GA+BlF;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe;;;;;;;;;;;GAsBlF;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe;;;;;;;;;;;GAyBnF;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe;;;;;;;;;;;GAoBpF;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe;;;;;;;;;;;GAgCnF;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe;;;;;;;;;;;GAgCtF"}
|