ue-mcp 1.1.35 → 1.1.37
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 +7 -5
- package/dist/editor-control.d.ts +4 -1
- package/dist/editor-control.js +145 -46
- package/dist/editor-control.js.map +1 -1
- package/dist/engine-observer.d.ts +143 -0
- package/dist/engine-observer.js +426 -0
- package/dist/engine-observer.js.map +1 -0
- package/dist/feedback-cli.js +43 -7
- package/dist/feedback-cli.js.map +1 -1
- package/dist/feedback-deferred.d.ts +8 -0
- package/dist/feedback-deferred.js +2 -0
- package/dist/feedback-deferred.js.map +1 -1
- package/dist/feedback-routing.d.ts +78 -0
- package/dist/feedback-routing.js +472 -0
- package/dist/feedback-routing.js.map +1 -0
- package/dist/flow/bridge-task.js +8 -14
- package/dist/flow/bridge-task.js.map +1 -1
- package/dist/flow/flow-tool.js +10 -1
- package/dist/flow/flow-tool.js.map +1 -1
- package/dist/flow/rollback.d.ts +16 -0
- package/dist/flow/rollback.js +26 -0
- package/dist/flow/rollback.js.map +1 -0
- package/dist/flow/task-factory.js +21 -7
- package/dist/flow/task-factory.js.map +1 -1
- package/dist/github-app.d.ts +9 -0
- package/dist/github-app.js +44 -17
- package/dist/github-app.js.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +2 -2
- package/dist/instructions.js +10 -1
- package/dist/instructions.js.map +1 -1
- package/dist/plugin/manifest.d.ts +10 -10
- package/dist/plugin-freshness.d.ts +17 -0
- package/dist/plugin-freshness.js +170 -0
- package/dist/plugin-freshness.js.map +1 -0
- package/dist/registry-catalog.d.ts +64 -0
- package/dist/registry-catalog.js +125 -0
- package/dist/registry-catalog.js.map +1 -0
- package/dist/tool-counts.json +12 -12
- package/dist/tools/animation.js +9 -3
- package/dist/tools/animation.js.map +1 -1
- package/dist/tools/asset.js +15 -6
- package/dist/tools/asset.js.map +1 -1
- package/dist/tools/blueprint.js +19 -8
- package/dist/tools/blueprint.js.map +1 -1
- package/dist/tools/chooser.js +11 -0
- package/dist/tools/chooser.js.map +1 -1
- package/dist/tools/editor.js +60 -19
- package/dist/tools/editor.js.map +1 -1
- package/dist/tools/feedback.js +304 -18
- package/dist/tools/feedback.js.map +1 -1
- package/dist/tools/gameplay.js +22 -16
- package/dist/tools/gameplay.js.map +1 -1
- package/dist/tools/landscape.js +11 -2
- package/dist/tools/landscape.js.map +1 -1
- package/dist/tools/level.js +31 -16
- package/dist/tools/level.js.map +1 -1
- package/dist/tools/networking.js +8 -2
- package/dist/tools/networking.js.map +1 -1
- package/dist/tools/niagara.js +68 -5
- package/dist/tools/niagara.js.map +1 -1
- package/dist/tools/pcg.js +1 -1
- package/dist/tools/pcg.js.map +1 -1
- package/dist/tools/project.js +35 -1
- package/dist/tools/project.js.map +1 -1
- package/dist/tools/reflection.js +1 -1
- package/dist/tools/reflection.js.map +1 -1
- package/dist/ue-mcp.default.yml +126 -46
- package/package.json +3 -3
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/BridgeServer.cpp +48 -3
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/EngineStatus.cpp +386 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/EngineStatus.h +105 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/GameThreadExecutor.cpp +71 -31
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/GameThreadExecutor.h +13 -2
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers.cpp +1 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers.h +2 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_ControlRig.cpp +226 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_MotionMatching.cpp +11 -2
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_StateMachine.cpp +24 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers.cpp +453 -23
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers.h +1 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers.cpp +74 -3
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Graph.cpp +44 -8
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Properties.cpp +153 -38
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/ChooserHandlers.cpp +2 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/ChooserHandlers.h +3 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/ChooserHandlers_Nested.cpp +537 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DemoHandlers.cpp +6 -1
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DialogHandlers.cpp +101 -94
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DialogHandlers.h +9 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.cpp +148 -24
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.h +7 -2
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers_PIE.cpp +48 -82
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers_PIERuntime.cpp +831 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers.cpp +335 -27
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers.h +2 -1
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers_Input.cpp +0 -61
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers_InputRuntime.cpp +246 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LandscapeHandlers.cpp +35 -6
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LandscapeHandlers.h +4 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LandscapeHandlers_Sculpt.cpp +449 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers.cpp +188 -39
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers.h +6 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Lights.cpp +1 -1
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_WorldPartition.cpp +372 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/NiagaraHandlers.cpp +202 -9
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/PhysicsHandlers.cpp +1 -1
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/ReflectionHandlers.cpp +68 -3
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SequencerHandlers.cpp +56 -16
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SplineHandlers.cpp +1 -1
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/UE_MCP_Bridge.cpp +19 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Public/HandlerUtils.h +53 -3
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/UE_MCP_Bridge.Build.cs +4 -0
- package/skills/ue-mcp-workflow/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://github.com/db-lyon/ue-mcp/stargazers)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
|
|
8
|
-
**Unreal Engine Model Context Protocol Server** - gives AI assistants deep read/write access to the Unreal Editor through <!-- count:tools -->24<!-- /count --> category tools covering <!-- count:actions -->
|
|
8
|
+
**Unreal Engine Model Context Protocol Server** - gives AI assistants deep read/write access to the Unreal Editor through <!-- count:tools -->24<!-- /count --> category tools covering <!-- count:actions -->760+<!-- /count --> actions, plus a YAML flow engine for multi-step workflows and an npm plugin system for extending the surface.
|
|
9
9
|
|
|
10
10
|
On UE 5.8+ it also wraps Epic's entire native AI Toolset Registry - 830 official Unreal tools, called in-process and surfaced as `epic_*` actions in the matching category: Sequencer in `animation`, PCG in `pcg`, static meshes in `asset`.
|
|
11
11
|
|
|
@@ -90,7 +90,7 @@ Nothing is pre-authored. Every asset in the scene is created by the agent at run
|
|
|
90
90
|
| **Assets** | CRUD, import meshes/textures/animations, datatables, mesh bounds/collision/nav |
|
|
91
91
|
| **Animation** | Anim blueprints, montages, blendspaces, skeletons |
|
|
92
92
|
| **VFX** | Niagara systems, emitters, modules, renderers, parameters |
|
|
93
|
-
| **Landscape** | Sculpt terrain, paint layers,
|
|
93
|
+
| **Landscape** | Sculpt terrain, paint weight layers, materials, splines, proxies |
|
|
94
94
|
| **Foliage** | Painting, foliage types, instance queries |
|
|
95
95
|
| **PCG** | Author and execute Procedural Content Generation graphs |
|
|
96
96
|
| **Audio** | SoundCues, MetaSounds, attenuation, ambient audio, submixes |
|
|
@@ -137,7 +137,7 @@ flows:
|
|
|
137
137
|
flow(action="run", flowName="build_and_check")
|
|
138
138
|
```
|
|
139
139
|
|
|
140
|
-
Every one of the <!-- count:actions -->
|
|
140
|
+
Every one of the <!-- count:actions -->760+<!-- /count --> actions is also a flow task. Flows support step references, retries, rollback, custom tasks in your own `.js`/`.ts`, and shell steps. See [Flows](https://ue-mcp.com/docs/flows/).
|
|
141
141
|
|
|
142
142
|
## Plugins
|
|
143
143
|
|
|
@@ -176,10 +176,12 @@ Details: [Guards](https://ue-mcp.com/docs/plugins-guards/) and [Handler Conventi
|
|
|
176
176
|
|
|
177
177
|
| | |
|
|
178
178
|
|---|---|
|
|
179
|
-
| **Unreal Engine** | 5.4-5.8 (Windows), 5.6+ (Linux). `epic` category needs 5.8+. |
|
|
179
|
+
| **Unreal Engine** | 5.4-5.8 (Windows), 5.6+ (Linux and macOS). `epic` category needs 5.8+. |
|
|
180
180
|
| **Node.js** | 18 or newer |
|
|
181
181
|
| **UE plugins** | `PythonScriptPlugin` (ships with the engine); `init` enables the rest for you |
|
|
182
|
-
| **C++ toolchain** | Required - the bridge is a C++ plugin and compiles on first editor launch. On Windows that means Visual Studio with the C++ workload. |
|
|
182
|
+
| **C++ toolchain** | Required - the bridge is a C++ plugin and compiles on first editor launch. On Windows that means Visual Studio with the C++ workload; on macOS, Xcode command line tools. |
|
|
183
|
+
|
|
184
|
+
Editor process control (`editor(start_editor)` / `stop_editor` / `restart_editor`) works on Windows, macOS and Linux. Set `UE_EDITOR_PATH` if the engine is installed somewhere non-standard.
|
|
183
185
|
|
|
184
186
|
## Documentation
|
|
185
187
|
|
package/dist/editor-control.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { ProjectContext } from "./project.js";
|
|
2
|
-
|
|
2
|
+
import { type EngineState } from "./engine-observer.js";
|
|
3
|
+
export declare function startEditor(project: ProjectContext, timeoutSeconds?: number): Promise<{
|
|
3
4
|
success: boolean;
|
|
4
5
|
message: string;
|
|
6
|
+
state?: EngineState;
|
|
5
7
|
}>;
|
|
6
8
|
/**
|
|
7
9
|
* Stop the editor by asking it to quit ITSELF through the bridge. ue-mcp NEVER
|
|
@@ -14,6 +16,7 @@ export declare function startEditor(project: ProjectContext): Promise<{
|
|
|
14
16
|
export declare function stopEditor(force?: boolean, projectDir?: string): Promise<{
|
|
15
17
|
success: boolean;
|
|
16
18
|
message: string;
|
|
19
|
+
state?: EngineState;
|
|
17
20
|
}>;
|
|
18
21
|
export declare function restartEditor(project: ProjectContext, bridge?: {
|
|
19
22
|
connect: (timeoutMs?: number) => Promise<void>;
|
package/dist/editor-control.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
-
import { spawn
|
|
3
|
+
import { spawn } from "child_process";
|
|
4
4
|
import * as net from "net";
|
|
5
5
|
import WebSocket from "ws";
|
|
6
6
|
import { findEngineInstall } from "./deployer.js";
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
import { invalidatePluginFreshness } from "./plugin-freshness.js";
|
|
8
|
+
import { findInteractiveEditors, readEngineState } from "./engine-observer.js";
|
|
9
|
+
// Process control is cross-platform: the editor binary path and the running-
|
|
10
|
+
// process probe differ per OS, and stopping goes through the bridge (#790).
|
|
9
11
|
const IS_WINDOWS = process.platform === "win32";
|
|
10
|
-
const
|
|
12
|
+
const NO_EDITOR_BINARY_MSG = "Unreal Editor executable not found. Set UE_EDITOR_PATH to the editor binary (on macOS that is inside UnrealEditor.app/Contents/MacOS/), or install the engine to a default location.";
|
|
11
13
|
/** Read EngineAssociation from a .uproject, or null if unreadable. */
|
|
12
14
|
function readEngineAssociation(projectPath) {
|
|
13
15
|
try {
|
|
@@ -68,42 +70,56 @@ function findUEBuildTool(engineAssociation) {
|
|
|
68
70
|
}
|
|
69
71
|
return null;
|
|
70
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* #766/#790: the editor binary lives at a different path per platform. Only the
|
|
75
|
+
* Win64 path was ever checked, which is the whole reason start_editor was
|
|
76
|
+
* Windows-only - engine discovery itself (findUEBuildTool) has always worked
|
|
77
|
+
* cross-platform. On macOS the launchable binary is inside the .app bundle.
|
|
78
|
+
*/
|
|
79
|
+
function editorBinaryCandidates(engineRoot) {
|
|
80
|
+
const binaries = path.join(engineRoot, "Engine", "Binaries");
|
|
81
|
+
if (IS_WINDOWS) {
|
|
82
|
+
return [path.join(binaries, "Win64", "UnrealEditor.exe")];
|
|
83
|
+
}
|
|
84
|
+
if (process.platform === "darwin") {
|
|
85
|
+
return [
|
|
86
|
+
path.join(binaries, "Mac", "UnrealEditor.app", "Contents", "MacOS", "UnrealEditor"),
|
|
87
|
+
path.join(binaries, "Mac", "UnrealEditor"),
|
|
88
|
+
];
|
|
89
|
+
}
|
|
90
|
+
return [path.join(binaries, "Linux", "UnrealEditor")];
|
|
91
|
+
}
|
|
71
92
|
function findEditorExecutable(project) {
|
|
72
93
|
const envPath = process.env.UE_EDITOR_PATH;
|
|
73
94
|
if (envPath)
|
|
74
95
|
return envPath;
|
|
75
96
|
const associatedEngineRoot = findEngineInstall(project?.engineAssociation ?? null);
|
|
76
97
|
if (associatedEngineRoot) {
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
98
|
+
for (const candidate of editorBinaryCandidates(associatedEngineRoot)) {
|
|
99
|
+
if (fs.existsSync(candidate))
|
|
100
|
+
return candidate;
|
|
80
101
|
}
|
|
81
102
|
}
|
|
82
103
|
const buildTool = findUEBuildTool(project?.engineAssociation ?? null);
|
|
83
104
|
if (!buildTool)
|
|
84
105
|
return null;
|
|
85
106
|
const engineRoot = path.resolve(buildTool, "..", "..", "..", "..");
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
107
|
+
for (const candidate of editorBinaryCandidates(engineRoot)) {
|
|
108
|
+
if (fs.existsSync(candidate))
|
|
109
|
+
return candidate;
|
|
89
110
|
}
|
|
90
111
|
return null;
|
|
91
112
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return output.toLowerCase().includes("unrealeditor.exe");
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
113
|
+
/**
|
|
114
|
+
* #804: this used to be a `tasklist /FI "IMAGENAME eq UnrealEditor.exe"` string
|
|
115
|
+
* match, which cannot tell an interactive editor apart from a headless shard
|
|
116
|
+
* (`-server -game -nullrhi`) or from an editor holding a completely different
|
|
117
|
+
* project. Two shards on the box made start_editor refuse with "Editor is
|
|
118
|
+
* already running" while get_status reported nothing connected. The probe now
|
|
119
|
+
* matches on PID + command line and scopes to the project being asked about.
|
|
120
|
+
*/
|
|
121
|
+
async function isEditorRunning(projectPath) {
|
|
122
|
+
return (await findInteractiveEditors(projectPath ?? null)).length > 0;
|
|
107
123
|
}
|
|
108
124
|
async function isBridgeAvailable(host = process.env.UE_MCP_HOST ?? "127.0.0.1", port = 9877, timeoutMs = 1000) {
|
|
109
125
|
return new Promise((resolve) => {
|
|
@@ -134,28 +150,72 @@ async function isBridgeAvailable(host = process.env.UE_MCP_HOST ?? "127.0.0.1",
|
|
|
134
150
|
socket.connect(port, host);
|
|
135
151
|
});
|
|
136
152
|
}
|
|
137
|
-
|
|
153
|
+
// #758: the readiness probe used to poll a hardcoded 9877 while the bridge
|
|
154
|
+
// binds a per-project port and publishes it to Saved/UE_MCP_Bridge/port.json.
|
|
155
|
+
// On any project not on the default port this waited out the whole timeout and
|
|
156
|
+
// reported failure even though the editor and bridge were up - which the very
|
|
157
|
+
// next tool call would then prove by succeeding immediately. The lockfile does
|
|
158
|
+
// not exist until the bridge starts, so the port must be re-read every poll
|
|
159
|
+
// rather than resolved once up front.
|
|
160
|
+
async function waitForBridge(projectDir, maxWaitSeconds = 120, checkIntervalMs = 2000, projectPath) {
|
|
138
161
|
const startTime = Date.now();
|
|
139
162
|
const maxWaitMs = maxWaitSeconds * 1000;
|
|
163
|
+
let lastState = null;
|
|
140
164
|
while (Date.now() - startTime < maxWaitMs) {
|
|
141
|
-
if (await isBridgeAvailable()) {
|
|
142
|
-
return true;
|
|
165
|
+
if (await isBridgeAvailable(undefined, resolveBridgePort(projectDir))) {
|
|
166
|
+
return { available: true, state: lastState };
|
|
167
|
+
}
|
|
168
|
+
// The wait used to be blind: 120 seconds of sleeping, then a message that
|
|
169
|
+
// said nothing about why the bridge never appeared. The engine publishes
|
|
170
|
+
// its real state in its own log and in native windows the whole time, so
|
|
171
|
+
// read it. A prompt waiting on a human, or a crash, will never resolve by
|
|
172
|
+
// waiting - stop immediately and say what is on screen.
|
|
173
|
+
lastState = await readEngineState(projectPath ?? null);
|
|
174
|
+
if (lastState.log.phase === "crashed") {
|
|
175
|
+
return { available: false, state: lastState };
|
|
176
|
+
}
|
|
177
|
+
if (lastState.log.blocking) {
|
|
178
|
+
const withWindows = await readEngineState(projectPath ?? null, { probeWindows: true });
|
|
179
|
+
return { available: false, state: withWindows };
|
|
180
|
+
}
|
|
181
|
+
// Nothing in the process table and nothing moving in the log means the
|
|
182
|
+
// launch died rather than being slow.
|
|
183
|
+
if (!lastState.running && (lastState.log.secondsSinceWrite ?? 0) > 10 && Date.now() - startTime > 15000) {
|
|
184
|
+
return { available: false, state: lastState };
|
|
143
185
|
}
|
|
144
186
|
await new Promise((resolve) => setTimeout(resolve, checkIntervalMs));
|
|
145
187
|
}
|
|
146
|
-
|
|
188
|
+
// One last look before declaring failure: the bridge may have come up during
|
|
189
|
+
// the final sleep, and reporting "not available" for a bridge that is in fact
|
|
190
|
+
// serving sends the caller off debugging a problem that does not exist.
|
|
191
|
+
if (await isBridgeAvailable(undefined, resolveBridgePort(projectDir))) {
|
|
192
|
+
return { available: true, state: lastState };
|
|
193
|
+
}
|
|
194
|
+
return { available: false, state: await readEngineState(projectPath ?? null, { probeWindows: true }) };
|
|
147
195
|
}
|
|
148
|
-
export async function startEditor(project) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
196
|
+
export async function startEditor(project, timeoutSeconds = 120) {
|
|
197
|
+
// Fast signal first: a bridge answering on this project's port is proof its
|
|
198
|
+
// editor is up, costs a millisecond, and needs no process table at all. The
|
|
199
|
+
// process probe (seconds, on Windows) only runs when that fails, which is
|
|
200
|
+
// also the only case where its extra detail is worth anything.
|
|
201
|
+
const projectDirForPort = project.projectPath ? path.dirname(project.projectPath) : undefined;
|
|
202
|
+
if (await isBridgeAvailable(undefined, resolveBridgePort(projectDirForPort))) {
|
|
203
|
+
return { success: false, message: "Editor is already running for this project (its bridge is answering)." };
|
|
204
|
+
}
|
|
205
|
+
const alreadyRunning = await findInteractiveEditors(project.projectPath ?? null);
|
|
206
|
+
if (alreadyRunning.length > 0) {
|
|
207
|
+
const state = await readEngineState(project.projectPath ?? null, { probeWindows: true });
|
|
208
|
+
return {
|
|
209
|
+
success: false,
|
|
210
|
+
message: `Editor is already running for this project (pid ${alreadyRunning.map((p) => p.pid).join(", ")}) but its bridge is not answering yet. ${state.summary}`,
|
|
211
|
+
state,
|
|
212
|
+
};
|
|
153
213
|
}
|
|
154
214
|
const editorExe = findEditorExecutable(project);
|
|
155
215
|
if (!editorExe) {
|
|
156
216
|
return {
|
|
157
217
|
success: false,
|
|
158
|
-
message:
|
|
218
|
+
message: NO_EDITOR_BINARY_MSG,
|
|
159
219
|
};
|
|
160
220
|
}
|
|
161
221
|
if (!project.projectPath) {
|
|
@@ -168,11 +228,16 @@ export async function startEditor(project) {
|
|
|
168
228
|
});
|
|
169
229
|
editorProcess.unref();
|
|
170
230
|
// Wait for bridge to become available (editor fully started)
|
|
171
|
-
const
|
|
172
|
-
|
|
231
|
+
const projectDir = path.dirname(project.projectPath);
|
|
232
|
+
const { available, state } = await waitForBridge(projectDir, timeoutSeconds, 2000, project.projectPath);
|
|
233
|
+
if (!available) {
|
|
234
|
+
const detail = state
|
|
235
|
+
? ` ${state.summary}`
|
|
236
|
+
: "";
|
|
173
237
|
return {
|
|
174
238
|
success: false,
|
|
175
|
-
message:
|
|
239
|
+
message: `Editor launched but the bridge did not answer on port ${resolveBridgePort(projectDir)}.${detail}`,
|
|
240
|
+
...(state ? { state } : {}),
|
|
176
241
|
};
|
|
177
242
|
}
|
|
178
243
|
return { success: true, message: `Editor launched and bridge available: ${editorExe}` };
|
|
@@ -196,6 +261,22 @@ const EDITOR_SELF_QUIT_PY = [
|
|
|
196
261
|
" unreal.log_error('ue-mcp quit_editor failed: ' + str(e))",
|
|
197
262
|
"unreal.register_slate_post_tick_callback(_ue_mcp_quit)",
|
|
198
263
|
].join("\n");
|
|
264
|
+
/**
|
|
265
|
+
* The .uproject inside a project directory. The stop/restart paths are handed a
|
|
266
|
+
* directory, but the process probe matches editors by the project file they
|
|
267
|
+
* have open, so resolve one from the other.
|
|
268
|
+
*/
|
|
269
|
+
function uprojectInDir(projectDir) {
|
|
270
|
+
if (!projectDir)
|
|
271
|
+
return null;
|
|
272
|
+
try {
|
|
273
|
+
const match = fs.readdirSync(projectDir).find((f) => f.toLowerCase().endsWith(".uproject"));
|
|
274
|
+
return match ? path.join(projectDir, match) : null;
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
199
280
|
/** Read the project's live bridge port from its lockfile, else env, else 9877. */
|
|
200
281
|
function resolveBridgePort(projectDir) {
|
|
201
282
|
if (projectDir) {
|
|
@@ -244,17 +325,21 @@ function requestEditorSelfQuit(port) {
|
|
|
244
325
|
*/
|
|
245
326
|
export async function stopEditor(force = false, projectDir) {
|
|
246
327
|
void force;
|
|
247
|
-
|
|
248
|
-
return { success: false, message: WINDOWS_ONLY_MSG };
|
|
328
|
+
const projectPath = uprojectInDir(projectDir);
|
|
249
329
|
const port = resolveBridgePort(projectDir);
|
|
250
330
|
const bridgeUp = await isBridgeAvailable("127.0.0.1", port);
|
|
251
|
-
if (!bridgeUp && !isEditorRunning()) {
|
|
331
|
+
if (!bridgeUp && !(await isEditorRunning(projectPath))) {
|
|
252
332
|
return { success: false, message: "Editor is not running" };
|
|
253
333
|
}
|
|
254
334
|
if (!bridgeUp) {
|
|
335
|
+
// "Unreachable" is where the user is left guessing, so say what the engine
|
|
336
|
+
// is actually doing: a modal dialog waiting on an answer, a slow task at
|
|
337
|
+
// 60%, or a game thread that stopped ticking are all visible from outside.
|
|
338
|
+
const state = await readEngineState(projectPath, { probeWindows: true });
|
|
255
339
|
return {
|
|
256
340
|
success: false,
|
|
257
|
-
message:
|
|
341
|
+
message: `Editor is running but its bridge is unreachable, so it cannot be asked to quit cleanly. ${state.summary} Close it manually - ue-mcp never force-kills processes.`,
|
|
342
|
+
state,
|
|
258
343
|
};
|
|
259
344
|
}
|
|
260
345
|
const quitSent = await requestEditorSelfQuit(port);
|
|
@@ -278,7 +363,7 @@ export async function stopEditor(force = false, projectDir) {
|
|
|
278
363
|
}
|
|
279
364
|
export async function restartEditor(project, bridge) {
|
|
280
365
|
const stopResult = await stopEditor(false, project.projectDir ?? undefined);
|
|
281
|
-
if (!stopResult.success && isEditorRunning()) {
|
|
366
|
+
if (!stopResult.success && (await isEditorRunning(project.projectPath ?? null))) {
|
|
282
367
|
return { success: false, message: `Failed to stop editor: ${stopResult.message}` };
|
|
283
368
|
}
|
|
284
369
|
// Wait for process to fully terminate and release locks
|
|
@@ -321,16 +406,26 @@ export async function buildProject(projectPath, opts = {}) {
|
|
|
321
406
|
const projectName = path.basename(resolvedPath, ".uproject");
|
|
322
407
|
const target = `${projectName}Editor`;
|
|
323
408
|
const platform = getPlatformString();
|
|
324
|
-
|
|
409
|
+
// #740: the quotes around the project path are SHELL syntax, not part of the
|
|
410
|
+
// value. On Windows the args are joined into a single `cmd /c` string, so
|
|
411
|
+
// they are required. Off Windows the args go straight into argv with no shell
|
|
412
|
+
// to strip them, so UnrealBuildTool received a path containing literal quote
|
|
413
|
+
// characters and reported "Unable to find project file" for a file that was
|
|
414
|
+
// plainly there - while the same command pasted into a terminal worked,
|
|
415
|
+
// because the shell removed them first.
|
|
416
|
+
const commonArgs = [target, platform, "Development"];
|
|
417
|
+
const tailArgs = ["-WaitMutex", "-FromMsBuild"];
|
|
418
|
+
const windowsArgs = [...commonArgs, `-Project="${resolvedPath}"`, ...tailArgs];
|
|
419
|
+
const posixArgs = [...commonArgs, `-Project=${resolvedPath}`, ...tailArgs];
|
|
325
420
|
return new Promise((resolve) => {
|
|
326
421
|
let proc;
|
|
327
422
|
if (IS_WINDOWS) {
|
|
328
423
|
const quotedCommand = `"${buildTool}"`;
|
|
329
|
-
const fullCommand = `cmd /c "${quotedCommand} ${
|
|
424
|
+
const fullCommand = `cmd /c "${quotedCommand} ${windowsArgs.join(" ")}"`;
|
|
330
425
|
proc = spawn(fullCommand, [], { shell: true, stdio: "pipe" });
|
|
331
426
|
}
|
|
332
427
|
else {
|
|
333
|
-
proc = spawn(buildTool,
|
|
428
|
+
proc = spawn(buildTool, posixArgs, { stdio: "pipe" });
|
|
334
429
|
}
|
|
335
430
|
const forward = (data) => {
|
|
336
431
|
const text = data.toString();
|
|
@@ -344,6 +439,10 @@ export async function buildProject(projectPath, opts = {}) {
|
|
|
344
439
|
if (proc.stderr)
|
|
345
440
|
proc.stderr.on("data", forward);
|
|
346
441
|
proc.on("close", (code) => {
|
|
442
|
+
// A build is the only event that can turn a "stale plugin" verdict fresh
|
|
443
|
+
// ahead of the cache TTL, so drop the cached answer here rather than
|
|
444
|
+
// making the next get_status report a binary that no longer exists.
|
|
445
|
+
invalidatePluginFreshness();
|
|
347
446
|
resolve(code === 0
|
|
348
447
|
? { success: true, exitCode: 0, message: "Build succeeded" }
|
|
349
448
|
: { success: false, exitCode: code, message: `Build failed with exit code ${code}` });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor-control.js","sourceRoot":"","sources":["../src/editor-control.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"editor-control.js","sourceRoot":"","sources":["../src/editor-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Out-of-process observability for a running (or starting, or wedged) editor.
|
|
3
|
+
*
|
|
4
|
+
* Every other sensor in ue-mcp runs on the game thread: `ExecuteOnGameThread`
|
|
5
|
+
* gates each bridge request, so when the game thread sits inside a modal loop,
|
|
6
|
+
* a long FSlowTask, or a startup phase that predates the plugin module, the
|
|
7
|
+
* bridge can only answer "Handler execution timed out". That is the whole
|
|
8
|
+
* problem class behind #804 and its predecessors - the agent goes blind exactly
|
|
9
|
+
* when the user needs to know what the engine is doing.
|
|
10
|
+
*
|
|
11
|
+
* Nothing in this file touches the bridge. It reads state the OS and the engine
|
|
12
|
+
* publish regardless of what the game thread is doing:
|
|
13
|
+
*
|
|
14
|
+
* - the process table (PID + command line + hung/responding state)
|
|
15
|
+
* - `Saved/Logs/<Project>.log`, written from the first millisecond of startup
|
|
16
|
+
* - native top-level windows (the pre-Slate "modules are out of date" prompt
|
|
17
|
+
* is a plain Win32 message box and is readable from outside)
|
|
18
|
+
* - `Saved/UE_MCP_Bridge/status.json`, the snapshot the plugin flushes from a
|
|
19
|
+
* writer thread that keeps running while the game thread is blocked
|
|
20
|
+
*/
|
|
21
|
+
export interface EditorProcess {
|
|
22
|
+
pid: number;
|
|
23
|
+
commandLine: string;
|
|
24
|
+
/** The .uproject this process has open, absolute and normalised, if any. */
|
|
25
|
+
projectPath: string | null;
|
|
26
|
+
/**
|
|
27
|
+
* #804: a headless shard (`-server` / `-game` / `-nullrhi` / `-unattended` /
|
|
28
|
+
* a commandlet) is the same binary as an interactive editor. Matching by
|
|
29
|
+
* image name alone made two running shards look like "the editor is already
|
|
30
|
+
* running" while the bridge simultaneously reported nothing connected.
|
|
31
|
+
*/
|
|
32
|
+
headless: boolean;
|
|
33
|
+
/** false when the OS says the window is not pumping messages (wedged). */
|
|
34
|
+
responding: boolean;
|
|
35
|
+
windowTitle: string | null;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Every UnrealEditor process on this machine, with enough detail to tell an
|
|
39
|
+
* interactive editor for one project apart from a headless shard for another.
|
|
40
|
+
*/
|
|
41
|
+
export declare function listEditorProcesses(): Promise<EditorProcess[]>;
|
|
42
|
+
/**
|
|
43
|
+
* The interactive editor(s) holding `projectPath` open. Headless shards are
|
|
44
|
+
* excluded, and when a project path is known, editors for other projects are
|
|
45
|
+
* too - launching a second project while a shard or another project's editor
|
|
46
|
+
* runs is legitimate (#804).
|
|
47
|
+
*/
|
|
48
|
+
export declare function findInteractiveEditors(projectPath?: string | null): Promise<EditorProcess[]>;
|
|
49
|
+
export interface StartupPhase {
|
|
50
|
+
/** Short phase label derived from the newest matching marker. */
|
|
51
|
+
phase: string;
|
|
52
|
+
/** True when the marker means the editor is waiting on a human. */
|
|
53
|
+
blocking: boolean;
|
|
54
|
+
/** The log line the phase was derived from. */
|
|
55
|
+
evidence: string;
|
|
56
|
+
}
|
|
57
|
+
export interface LogState {
|
|
58
|
+
logPath: string | null;
|
|
59
|
+
/** Seconds since the log file was last written. High = the process is stuck. */
|
|
60
|
+
secondsSinceWrite: number | null;
|
|
61
|
+
phase: string;
|
|
62
|
+
blocking: boolean;
|
|
63
|
+
lastLine: string | null;
|
|
64
|
+
tail: string[];
|
|
65
|
+
errors: string[];
|
|
66
|
+
warnings: string[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* What the engine's own log says right now. This is the only sensor that works
|
|
70
|
+
* before the plugin module exists, which is where the "editor launched but the
|
|
71
|
+
* bridge never came up" reports have always come from.
|
|
72
|
+
*/
|
|
73
|
+
export declare function readLogState(projectPath: string | null | undefined, tailLines?: number): LogState;
|
|
74
|
+
export interface NativeWindow {
|
|
75
|
+
handle: string;
|
|
76
|
+
className: string;
|
|
77
|
+
title: string;
|
|
78
|
+
/** Static text children, which is where a message box keeps its message. */
|
|
79
|
+
text: string[];
|
|
80
|
+
hung: boolean;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Visible top-level windows belonging to the given PIDs, with their child text.
|
|
84
|
+
* Windows only; returns [] elsewhere. Compiling the interop type costs about a
|
|
85
|
+
* second, so call this on demand (a stalled wait, an explicit state query),
|
|
86
|
+
* never on a hot path.
|
|
87
|
+
*/
|
|
88
|
+
export declare function readNativeWindows(pids: number[]): Promise<NativeWindow[]>;
|
|
89
|
+
/** Windows that look like a prompt waiting on a human. */
|
|
90
|
+
export declare function dialogLikeWindows(windows: NativeWindow[]): NativeWindow[];
|
|
91
|
+
export interface EngineSnapshot {
|
|
92
|
+
writtenAt?: string;
|
|
93
|
+
ageSeconds?: number;
|
|
94
|
+
phase?: string;
|
|
95
|
+
gameThreadStalledSeconds?: number;
|
|
96
|
+
slowTask?: {
|
|
97
|
+
name: string;
|
|
98
|
+
fraction: number;
|
|
99
|
+
stack?: Array<{
|
|
100
|
+
name: string;
|
|
101
|
+
fraction: number;
|
|
102
|
+
}>;
|
|
103
|
+
} | null;
|
|
104
|
+
modal?: {
|
|
105
|
+
title: string;
|
|
106
|
+
message: string;
|
|
107
|
+
buttons: string[];
|
|
108
|
+
} | null;
|
|
109
|
+
compiling?: {
|
|
110
|
+
shaders: number;
|
|
111
|
+
assets: number;
|
|
112
|
+
};
|
|
113
|
+
handler?: {
|
|
114
|
+
method: string;
|
|
115
|
+
elapsedSeconds: number;
|
|
116
|
+
} | null;
|
|
117
|
+
[key: string]: unknown;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The snapshot the plugin flushes to disk from a dedicated writer thread. It
|
|
121
|
+
* keeps updating while the game thread is inside a modal loop or a slow task,
|
|
122
|
+
* which is precisely when a bridge request cannot be answered.
|
|
123
|
+
*/
|
|
124
|
+
export declare function readEngineSnapshot(projectPath: string | null | undefined): EngineSnapshot | null;
|
|
125
|
+
export interface EngineState {
|
|
126
|
+
running: boolean;
|
|
127
|
+
processes: EditorProcess[];
|
|
128
|
+
log: LogState;
|
|
129
|
+
snapshot: EngineSnapshot | null;
|
|
130
|
+
dialogs: NativeWindow[];
|
|
131
|
+
/** One line an agent can act on without reading any of the above. */
|
|
132
|
+
summary: string;
|
|
133
|
+
/** True when something is waiting on a human answer. */
|
|
134
|
+
blocked: boolean;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Everything that can be known about the editor without asking the game thread.
|
|
138
|
+
* `probeWindows` costs about a second on Windows, so it defaults off and should
|
|
139
|
+
* be turned on when something already looks wrong.
|
|
140
|
+
*/
|
|
141
|
+
export declare function readEngineState(projectPath: string | null | undefined, opts?: {
|
|
142
|
+
probeWindows?: boolean;
|
|
143
|
+
}): Promise<EngineState>;
|