flockbay 0.10.15
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 +56 -0
- package/bin/flockbay-mcp.mjs +56 -0
- package/bin/flockbay.mjs +78 -0
- package/dist/codex/flockbayMcpStdioBridge.cjs +383 -0
- package/dist/codex/flockbayMcpStdioBridge.d.cts +2 -0
- package/dist/codex/flockbayMcpStdioBridge.d.mts +2 -0
- package/dist/codex/flockbayMcpStdioBridge.mjs +381 -0
- package/dist/flockbayScreenshotGate-DJX3Is5d.mjs +136 -0
- package/dist/flockbayScreenshotGate-DkxU24cR.cjs +138 -0
- package/dist/index--o4BPz5o.cjs +10311 -0
- package/dist/index-CUp3juDS.mjs +10268 -0
- package/dist/index.cjs +43 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.mjs +40 -0
- package/dist/lib.cjs +33 -0
- package/dist/lib.d.cts +957 -0
- package/dist/lib.d.mts +957 -0
- package/dist/lib.mjs +23 -0
- package/dist/runCodex-D3eT-TvB.cjs +3449 -0
- package/dist/runCodex-o6PCbHQ7.mjs +3446 -0
- package/dist/runGemini-Bt0oEj_g.mjs +3183 -0
- package/dist/runGemini-CBxZp6I7.cjs +3185 -0
- package/dist/types-C-jnUdn_.cjs +4498 -0
- package/dist/types-DGd6ea2Z.mjs +4450 -0
- package/kits/kit.open_world/kit.json +59 -0
- package/package.json +130 -0
- package/scripts/claude_local_launcher.cjs +73 -0
- package/scripts/claude_remote_launcher.cjs +16 -0
- package/scripts/claude_version_utils.cjs +391 -0
- package/scripts/ripgrep_launcher.cjs +33 -0
- package/scripts/session_hook_forwarder.cjs +49 -0
- package/scripts/test-codex-abort-history.mjs +77 -0
- package/scripts/unpack-tools.cjs +222 -0
- package/tools/licenses/difftastic-LICENSE +21 -0
- package/tools/licenses/ripgrep-LICENSE +3 -0
- package/tools/unreal-mcp/UPSTREAM_VERSION.md +8 -0
- package/tools/unreal-mcp/upstream/Docs/README.md +8 -0
- package/tools/unreal-mcp/upstream/Docs/Tools/README.md +7 -0
- package/tools/unreal-mcp/upstream/Docs/Tools/actor_tools.md +184 -0
- package/tools/unreal-mcp/upstream/Docs/Tools/blueprint_tools.md +268 -0
- package/tools/unreal-mcp/upstream/Docs/Tools/editor_tools.md +104 -0
- package/tools/unreal-mcp/upstream/Docs/Tools/node_tools.md +274 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Config/FilterPlugin.ini +8 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/Commands/UnrealMCPBlueprintCommands.cpp +1160 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/Commands/UnrealMCPBlueprintNodeCommands.cpp +924 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/Commands/UnrealMCPCommonUtils.cpp +709 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/Commands/UnrealMCPEditorCommands.cpp +896 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/Commands/UnrealMCPProjectCommands.cpp +72 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/Commands/UnrealMCPUMGCommands.cpp +544 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/MCPServerRunnable.cpp +321 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/UnrealMCPBridge.cpp +419 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Private/UnrealMCPModule.cpp +21 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Public/Commands/UnrealMCPBlueprintCommands.h +34 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Public/Commands/UnrealMCPBlueprintNodeCommands.h +27 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Public/Commands/UnrealMCPCommonUtils.h +59 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Public/Commands/UnrealMCPEditorCommands.h +40 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Public/Commands/UnrealMCPProjectCommands.h +20 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Public/Commands/UnrealMCPUMGCommands.h +82 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Public/MCPServerRunnable.h +34 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Public/UnrealMCPBridge.h +64 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/Public/UnrealMCPModule.h +22 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/Source/UnrealMCP/UnrealMCP.Build.cs +78 -0
- package/tools/unreal-mcp/upstream/MCPGameProject/Plugins/UnrealMCP/UnrealMCP.uplugin +36 -0
- package/tools/unreal-mcp/upstream/Python/README.md +40 -0
- package/tools/unreal-mcp/upstream/Python/pyproject.toml +22 -0
- package/tools/unreal-mcp/upstream/Python/scripts/actors/test_cube.py +203 -0
- package/tools/unreal-mcp/upstream/Python/scripts/blueprints/test_create_and_spawn_blueprints_with_different_components.py +497 -0
- package/tools/unreal-mcp/upstream/Python/scripts/blueprints/test_create_and_spawn_cube_blueprint.py +194 -0
- package/tools/unreal-mcp/upstream/Python/scripts/node/test_component_reference.py +267 -0
- package/tools/unreal-mcp/upstream/Python/scripts/node/test_create_bird_blueprint_with_input_and_camera.py +618 -0
- package/tools/unreal-mcp/upstream/Python/scripts/node/test_input_mapping.py +366 -0
- package/tools/unreal-mcp/upstream/Python/scripts/node/test_physics_variables.py +390 -0
- package/tools/unreal-mcp/upstream/Python/tools/blueprint_tools.py +420 -0
- package/tools/unreal-mcp/upstream/Python/tools/editor_tools.py +369 -0
- package/tools/unreal-mcp/upstream/Python/tools/node_tools.py +430 -0
- package/tools/unreal-mcp/upstream/Python/tools/project_tools.py +64 -0
- package/tools/unreal-mcp/upstream/Python/tools/umg_tools.py +333 -0
- package/tools/unreal-mcp/upstream/Python/unreal_mcp_server.py +398 -0
- package/tools/unreal-mcp/upstream/Python/uv.lock +521 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""
|
|
3
|
+
Test script for component reference in blueprints via MCP.
|
|
4
|
+
This tests the fix for the component reference node issue.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import sys
|
|
8
|
+
import os
|
|
9
|
+
import time
|
|
10
|
+
import socket
|
|
11
|
+
import json
|
|
12
|
+
import logging
|
|
13
|
+
from typing import Dict, Any, Optional
|
|
14
|
+
|
|
15
|
+
# Add the parent directory to the path so we can import the server module
|
|
16
|
+
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
|
|
17
|
+
|
|
18
|
+
# Set up logging
|
|
19
|
+
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
20
|
+
logger = logging.getLogger("TestComponentReference")
|
|
21
|
+
|
|
22
|
+
def send_command(sock: socket.socket, command: str, params: Dict[str, Any]) -> Optional[Dict[str, Any]]:
|
|
23
|
+
"""Send a command to the Unreal MCP server and get the response."""
|
|
24
|
+
try:
|
|
25
|
+
# Create command object
|
|
26
|
+
command_obj = {
|
|
27
|
+
"type": command,
|
|
28
|
+
"params": params
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# Convert to JSON and send
|
|
32
|
+
command_json = json.dumps(command_obj)
|
|
33
|
+
logger.info(f"Sending command: {command_json}")
|
|
34
|
+
sock.sendall(command_json.encode('utf-8'))
|
|
35
|
+
|
|
36
|
+
# Receive response
|
|
37
|
+
chunks = []
|
|
38
|
+
while True:
|
|
39
|
+
chunk = sock.recv(4096)
|
|
40
|
+
if not chunk:
|
|
41
|
+
break
|
|
42
|
+
chunks.append(chunk)
|
|
43
|
+
|
|
44
|
+
# Try parsing to see if we have a complete response
|
|
45
|
+
try:
|
|
46
|
+
data = b''.join(chunks)
|
|
47
|
+
json.loads(data.decode('utf-8'))
|
|
48
|
+
# If we can parse it, we have the complete response
|
|
49
|
+
break
|
|
50
|
+
except json.JSONDecodeError:
|
|
51
|
+
# Not a complete JSON object yet, continue receiving
|
|
52
|
+
continue
|
|
53
|
+
|
|
54
|
+
# Parse response
|
|
55
|
+
data = b''.join(chunks)
|
|
56
|
+
response = json.loads(data.decode('utf-8'))
|
|
57
|
+
logger.info(f"Received response: {response}")
|
|
58
|
+
return response
|
|
59
|
+
|
|
60
|
+
except Exception as e:
|
|
61
|
+
logger.error(f"Error sending command: {e}")
|
|
62
|
+
return None
|
|
63
|
+
|
|
64
|
+
def main():
|
|
65
|
+
"""Test component reference node creation and connection."""
|
|
66
|
+
try:
|
|
67
|
+
# Connect to the server
|
|
68
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
69
|
+
sock.connect(("127.0.0.1", 55557))
|
|
70
|
+
|
|
71
|
+
# Step 1: Create a blueprint
|
|
72
|
+
bp_params = {
|
|
73
|
+
"name": "TestCompRefBP",
|
|
74
|
+
"parent_class": "Actor"
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
response = send_command(sock, "create_blueprint", bp_params)
|
|
78
|
+
if not response or response.get("status") != "success":
|
|
79
|
+
logger.error(f"Failed to create blueprint: {response}")
|
|
80
|
+
return
|
|
81
|
+
|
|
82
|
+
logger.info("Blueprint created successfully!")
|
|
83
|
+
|
|
84
|
+
# Step 2: Add a static mesh component
|
|
85
|
+
component_params = {
|
|
86
|
+
"blueprint_name": "TestCompRefBP",
|
|
87
|
+
"component_type": "StaticMesh",
|
|
88
|
+
"component_name": "TestMesh",
|
|
89
|
+
"location": [0.0, 0.0, 0.0],
|
|
90
|
+
"rotation": [0.0, 0.0, 0.0],
|
|
91
|
+
"scale": [1.0, 1.0, 1.0]
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
sock.close()
|
|
95
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
96
|
+
sock.connect(("127.0.0.1", 55557))
|
|
97
|
+
|
|
98
|
+
response = send_command(sock, "add_component_to_blueprint", component_params)
|
|
99
|
+
if not response or response.get("status") != "success":
|
|
100
|
+
logger.error(f"Failed to add component: {response}")
|
|
101
|
+
return
|
|
102
|
+
|
|
103
|
+
logger.info("Static mesh component added successfully!")
|
|
104
|
+
|
|
105
|
+
# Step 3: Add an event (BeginPlay)
|
|
106
|
+
sock.close()
|
|
107
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
108
|
+
sock.connect(("127.0.0.1", 55557))
|
|
109
|
+
|
|
110
|
+
begin_play_params = {
|
|
111
|
+
"blueprint_name": "TestCompRefBP",
|
|
112
|
+
"event_type": "BeginPlay",
|
|
113
|
+
"node_position": [0, 0]
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
response = send_command(sock, "add_blueprint_event_node", begin_play_params)
|
|
117
|
+
if not response or response.get("status") != "success":
|
|
118
|
+
logger.error(f"Failed to add BeginPlay event: {response}")
|
|
119
|
+
return
|
|
120
|
+
|
|
121
|
+
begin_play_node_id = response.get("result", {}).get("node_id")
|
|
122
|
+
logger.info(f"BeginPlay event node added successfully with ID: {begin_play_node_id}")
|
|
123
|
+
|
|
124
|
+
# Step 4: Create component reference node
|
|
125
|
+
sock.close()
|
|
126
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
127
|
+
sock.connect(("127.0.0.1", 55557))
|
|
128
|
+
|
|
129
|
+
get_component_params = {
|
|
130
|
+
"blueprint_name": "TestCompRefBP",
|
|
131
|
+
"component_name": "TestMesh",
|
|
132
|
+
"node_position": [200, 0]
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
response = send_command(sock, "add_blueprint_get_self_component_reference", get_component_params)
|
|
136
|
+
if not response or response.get("status") != "success":
|
|
137
|
+
logger.error(f"Failed to add component reference node: {response}")
|
|
138
|
+
return
|
|
139
|
+
|
|
140
|
+
comp_ref_node_id = response.get("result", {}).get("node_id")
|
|
141
|
+
logger.info(f"Component reference node added successfully with ID: {comp_ref_node_id}")
|
|
142
|
+
|
|
143
|
+
# Step 5: Add AddForce function node
|
|
144
|
+
sock.close()
|
|
145
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
146
|
+
sock.connect(("127.0.0.1", 55557))
|
|
147
|
+
|
|
148
|
+
function_params = {
|
|
149
|
+
"blueprint_name": "TestCompRefBP",
|
|
150
|
+
"function_name": "AddForce",
|
|
151
|
+
"params": {
|
|
152
|
+
"Force": [0, 0, 1000]
|
|
153
|
+
},
|
|
154
|
+
"node_position": [400, 0]
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
response = send_command(sock, "add_blueprint_function_node", function_params)
|
|
158
|
+
if not response or response.get("status") != "success":
|
|
159
|
+
logger.error(f"Failed to add AddForce function node: {response}")
|
|
160
|
+
return
|
|
161
|
+
|
|
162
|
+
function_node_id = response.get("result", {}).get("node_id")
|
|
163
|
+
logger.info(f"AddForce function node added successfully with ID: {function_node_id}")
|
|
164
|
+
|
|
165
|
+
# Step 6: Connect BeginPlay to AddForce (execution)
|
|
166
|
+
sock.close()
|
|
167
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
168
|
+
sock.connect(("127.0.0.1", 55557))
|
|
169
|
+
|
|
170
|
+
connect_exec_params = {
|
|
171
|
+
"blueprint_name": "TestCompRefBP",
|
|
172
|
+
"source_node_id": begin_play_node_id,
|
|
173
|
+
"source_pin": "Then", # Execution pin on BeginPlay
|
|
174
|
+
"target_node_id": function_node_id,
|
|
175
|
+
"target_pin": "Execute" # Execution pin on function
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
response = send_command(sock, "connect_blueprint_nodes", connect_exec_params)
|
|
179
|
+
if not response or response.get("status") != "success":
|
|
180
|
+
logger.error(f"Failed to connect execution pins: {response}")
|
|
181
|
+
return
|
|
182
|
+
|
|
183
|
+
logger.info("Connected BeginPlay to AddForce execution pins!")
|
|
184
|
+
|
|
185
|
+
# Step 7: Connect component reference to AddForce target
|
|
186
|
+
sock.close()
|
|
187
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
188
|
+
sock.connect(("127.0.0.1", 55557))
|
|
189
|
+
|
|
190
|
+
# In UE5.5, the output pin of a component reference is named after the component itself
|
|
191
|
+
component_name = "TestMesh" # Use the same name as defined in the component
|
|
192
|
+
connect_target_params = {
|
|
193
|
+
"blueprint_name": "TestCompRefBP",
|
|
194
|
+
"source_node_id": comp_ref_node_id,
|
|
195
|
+
"source_pin": component_name, # Use component name as pin name
|
|
196
|
+
"target_node_id": function_node_id,
|
|
197
|
+
"target_pin": "Target" # Target pin on AddForce
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
response = send_command(sock, "connect_blueprint_nodes", connect_target_params)
|
|
201
|
+
logger.warning(f"Pin connection response: {response}")
|
|
202
|
+
if not response or response.get("status") != "success" or not response.get("result", {}).get("success", False):
|
|
203
|
+
logger.error(f"Failed to connect component reference: {response}")
|
|
204
|
+
# Try alternate pin names if needed
|
|
205
|
+
fallback_pin_names = ["Value", "ReturnValue"]
|
|
206
|
+
for pin_name in fallback_pin_names:
|
|
207
|
+
logger.info(f"Trying with alternative pin name: '{pin_name}'")
|
|
208
|
+
connect_target_params["source_pin"] = pin_name
|
|
209
|
+
|
|
210
|
+
sock.close()
|
|
211
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
212
|
+
sock.connect(("127.0.0.1", 55557))
|
|
213
|
+
|
|
214
|
+
response = send_command(sock, "connect_blueprint_nodes", connect_target_params)
|
|
215
|
+
if response and response.get("status") == "success" and response.get("result", {}).get("success", False):
|
|
216
|
+
logger.info(f"Successfully connected using pin name: '{pin_name}'")
|
|
217
|
+
break
|
|
218
|
+
else:
|
|
219
|
+
logger.error("Failed to connect with all pin name options")
|
|
220
|
+
return
|
|
221
|
+
|
|
222
|
+
logger.info("Connected component reference to AddForce target!")
|
|
223
|
+
|
|
224
|
+
# Step 8: Compile Blueprint
|
|
225
|
+
sock.close()
|
|
226
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
227
|
+
sock.connect(("127.0.0.1", 55557))
|
|
228
|
+
|
|
229
|
+
compile_params = {
|
|
230
|
+
"blueprint_name": "TestCompRefBP"
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
response = send_command(sock, "compile_blueprint", compile_params)
|
|
234
|
+
if not response or response.get("status") != "success":
|
|
235
|
+
logger.error(f"Failed to compile blueprint: {response}")
|
|
236
|
+
return
|
|
237
|
+
|
|
238
|
+
logger.info("Blueprint compiled successfully!")
|
|
239
|
+
|
|
240
|
+
# Step 9: Spawn the actor
|
|
241
|
+
sock.close()
|
|
242
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
243
|
+
sock.connect(("127.0.0.1", 55557))
|
|
244
|
+
|
|
245
|
+
spawn_params = {
|
|
246
|
+
"blueprint_name": "TestCompRefBP",
|
|
247
|
+
"actor_name": "TestCompRefActor",
|
|
248
|
+
"location": [0.0, 0.0, 100.0],
|
|
249
|
+
"rotation": [0.0, 0.0, 0.0],
|
|
250
|
+
"scale": [1.0, 1.0, 1.0]
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
response = send_command(sock, "spawn_blueprint_actor", spawn_params)
|
|
254
|
+
if not response or response.get("status") != "success":
|
|
255
|
+
logger.error(f"Failed to spawn actor: {response}")
|
|
256
|
+
return
|
|
257
|
+
|
|
258
|
+
logger.info("Actor spawned successfully! The mesh should move up on BeginPlay.")
|
|
259
|
+
|
|
260
|
+
sock.close()
|
|
261
|
+
|
|
262
|
+
except Exception as e:
|
|
263
|
+
logger.error(f"Error: {e}")
|
|
264
|
+
sys.exit(1)
|
|
265
|
+
|
|
266
|
+
if __name__ == "__main__":
|
|
267
|
+
main()
|