ue-mcp 1.3.4 → 1.3.6-beta.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.
Files changed (48) hide show
  1. package/README.md +2 -0
  2. package/dist/context-cli.js +1 -1
  3. package/dist/context-cli.js.map +1 -1
  4. package/dist/deployer.d.ts +35 -0
  5. package/dist/deployer.js +88 -13
  6. package/dist/deployer.js.map +1 -1
  7. package/dist/editor-control.d.ts +26 -1
  8. package/dist/editor-control.js +71 -2
  9. package/dist/editor-control.js.map +1 -1
  10. package/dist/flow/guard-schema.d.ts +204 -0
  11. package/dist/flow/guard-schema.js +60 -0
  12. package/dist/flow/guard-schema.js.map +1 -0
  13. package/dist/flow/guard.d.ts +20 -0
  14. package/dist/flow/guard.js +32 -0
  15. package/dist/flow/guard.js.map +1 -1
  16. package/dist/flow/guards.d.ts +43 -0
  17. package/dist/flow/guards.js +139 -0
  18. package/dist/flow/guards.js.map +1 -0
  19. package/dist/flow/loader.js +13 -0
  20. package/dist/flow/loader.js.map +1 -1
  21. package/dist/flow/schema.d.ts +99 -0
  22. package/dist/flow/schema.js +2 -0
  23. package/dist/flow/schema.js.map +1 -1
  24. package/dist/flow/write-methods.d.ts +16 -0
  25. package/dist/flow/write-methods.js +18 -3
  26. package/dist/flow/write-methods.js.map +1 -1
  27. package/dist/index.js +40 -13
  28. package/dist/index.js.map +1 -1
  29. package/dist/plugin/loader.d.ts +12 -0
  30. package/dist/plugin/loader.js +8 -0
  31. package/dist/plugin/loader.js.map +1 -1
  32. package/dist/plugin/manifest.d.ts +99 -0
  33. package/dist/plugin/manifest.js +2 -0
  34. package/dist/plugin/manifest.js.map +1 -1
  35. package/dist/session.js +1 -1
  36. package/dist/session.js.map +1 -1
  37. package/dist/tool-counts.json +2 -2
  38. package/dist/tools/level.js +2 -0
  39. package/dist/tools/level.js.map +1 -1
  40. package/package.json +7 -4
  41. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/HandlerJsonProperty.h +4 -2
  42. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers.cpp +8 -5
  43. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/BridgeProtocolTests.cpp +1 -1
  44. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Public/HandlerUtils.h +6 -5
  45. package/plugin/ue_mcp_bridge/UE_MCP_Bridge.uplugin +1 -1
  46. package/dist/flow/task-guards.d.ts +0 -13
  47. package/dist/flow/task-guards.js +0 -96
  48. package/dist/flow/task-guards.js.map +0 -1
package/README.md CHANGED
@@ -52,6 +52,8 @@ Then talk to your AI in plain English:
52
52
  npx ue-mcp doctor
53
53
  ```
54
54
 
55
+ Documentation lives at **https://ue-mcp.com/docs/**, one page per file in `docs/`, published automatically on release. Link there rather than to a file in this repository.
56
+
55
57
  Most first-run failures are one of three things: the editor hasn't been restarted since `init`, the bridge plugin failed to compile (check the editor's Output Log for `UE_MCP_Bridge`), or the editor is open on a different project than the one configured. See [Troubleshooting](https://ue-mcp.com/docs/troubleshooting/).
56
58
 
57
59
  ### Manual Configuration
@@ -120,7 +120,7 @@ function main() {
120
120
  console.log("");
121
121
  console.log(` ${BOLD}${CYAN}Context strategy${RESET}: ${color}${before}${RESET}`);
122
122
  console.log(` ${DIM}${configPath}${RESET}`);
123
- console.log(` ${DIM}Options: full (default) | lean | micro -> ue-mcp context <tier>${RESET}`);
123
+ console.log(` ${DIM}Options: full (default) | lean | micro -> ue-mcp context <strategy>${RESET}`);
124
124
  console.log("");
125
125
  return;
126
126
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context-cli.js","sourceRoot":"","sources":["../src/context-cli.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAErE;;;;;;;GAOG;AAEH,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,GAAG,GAAG,SAAS,CAAC;AACtB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,MAAM,MAAM,GAAG,UAAU,CAAC;AAE1B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE7D,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;IACV,IAAI,GAAG,IAAI,iBAAiB,KAAK;;IAEjC,IAAI,SAAS,KAAK;;;;;;;;;;;CAWrB,CAAC,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IACD,0EAA0E;IAC1E,2EAA2E;IAC3E,mEAAmE;IACnE,IAAI,MAAgD,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC;IACZ,GAAG,GAAG,CAAC,YAAY,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK;CACrE,CAAC,CAAC;QACC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,IAAI,MAA0B,CAAC;IAC/B,IAAI,UAAU,GAAuB,MAAM,CAAC,WAAW,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAAE,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;aACjE,IAAI,CAAC,UAAU;YAAE,UAAU,GAAG,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,cAAc,CAAC,UAAmB;IACzC,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;IAC3E,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACrD,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,UAAkB;IAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,IAAI,CAAC;QACH,OAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAA6B,IAAI,EAAE,CAAC;IAC5F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,8DAA8D,KAAK,EAAE,CAAC,CAAC;QAC9F,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAAiC;IACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAoD,CAAC;IACpF,MAAM,CAAC,GAAG,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC;IACnC,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAClE,CAAC;AAED,SAAS,IAAI;IACX,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC;IACjD,IAAI,IAAI,EAAE,CAAC;QACT,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,sBAAsB,KAAK,oDAAoD,CAAC,CAAC;QACvG,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,kBAAkB,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,oBAAoB,KAAK,IAAI,CAAC,CAAC;QAC5G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC;IAEpB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI,mBAAmB,KAAK,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,UAAU,GAAG,KAAK,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,oEAAoE,KAAK,EAAE,CAAC,CAAC;QACjG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAI,QAAQ,CAAC,QAAQ,CAA6B,IAAI,EAAE,CAAC;IACpE,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;IACzD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACxC,KAAK,CAAC,OAAO,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,+DAA+D;QAC/D,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,QAAQ,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC3B,IAAI,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC;QAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;IAChD,IAAI,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC;QAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;IAChD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAE1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,4BAA4B,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,IAAI,qBAAqB,MAAM,OAAO,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,UAAU,GAAG,KAAK,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,0DAA0D,KAAK,EAAE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"context-cli.js","sourceRoot":"","sources":["../src/context-cli.ts"],"names":[],"mappings":"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"}
@@ -48,4 +48,39 @@ export declare function deploySummary(r: DeployResult): string;
48
48
  */
49
49
  export declare function attach(context: ProjectContext): AttachResult;
50
50
  export declare function attachSummary(r: AttachResult): string;
51
+ /**
52
+ * Which entries in the deployed tree are stale, given what the source has.
53
+ *
54
+ * Exported so the mirror rule can be tested as the rule rather than as a copy
55
+ * of it. "Never hand-copy a file into the test project" is a property of this
56
+ * function: anything the source does not name, and that is not a build
57
+ * artifact directory, is removed on the next deploy, so a hand-placed file
58
+ * never survives to be compiled.
59
+ *
60
+ * Name comparison follows the filesystem. On Windows and macOS `Handlers.cpp`
61
+ * and `handlers.cpp` are one file, and treating them as two deletes the file
62
+ * that was just copied in.
63
+ */
64
+ export declare function staleDeployedEntries(destNames: string[], sourceNames: Set<string>, artifactDirs: Set<string>, caseInsensitiveFs?: boolean): string[];
65
+ /**
66
+ * Copy the authored plugin tree over the deployed one, and leave the deployed
67
+ * tree in a state UnrealBuildTool will compile correctly.
68
+ *
69
+ * Exported with both directories as arguments so the whole step, including the
70
+ * Build.cs touch that a new source file depends on, can be driven against real
71
+ * directories. deployCppPlugin resolves the authored tree relative to this
72
+ * module, which no test can redirect.
73
+ */
74
+ export declare function deployPluginTree(sourcePluginDir: string, targetPluginDir: string): boolean;
75
+ /**
76
+ * Make UnrealBuildTool rescan a module whose file list just changed.
77
+ *
78
+ * UBT caches the source list per module and rebuilds it only when the module's
79
+ * Build.cs is newer than that cache. A new .cpp therefore deploys, compiles
80
+ * into nothing, and every action in it answers "Unknown method" at runtime,
81
+ * from a build that reported success. Touching every Build.cs under the
82
+ * deployed plugin costs nothing on a build where no file was added, because
83
+ * this only runs when one was.
84
+ */
85
+ export declare function touchBuildRules(pluginDir: string, because?: string[]): string[];
51
86
  export declare function findEngineInstall(engineAssociation: string | null): string | null;
package/dist/deployer.js CHANGED
@@ -153,16 +153,40 @@ function ensurePythonPlugin(uprojectPath) {
153
153
  /* ------------------------------------------------------------------ */
154
154
  /* C++ Plugin deployment */
155
155
  /* ------------------------------------------------------------------ */
156
- function deployCppPlugin(uprojectPath) {
157
- const projectDir = path.dirname(uprojectPath);
158
- const pluginsDir = path.join(projectDir, "Plugins");
159
- const sourcePluginDir = path.resolve(selfDir(), "..", "plugin", "ue_mcp_bridge");
156
+ /**
157
+ * Which entries in the deployed tree are stale, given what the source has.
158
+ *
159
+ * Exported so the mirror rule can be tested as the rule rather than as a copy
160
+ * of it. "Never hand-copy a file into the test project" is a property of this
161
+ * function: anything the source does not name, and that is not a build
162
+ * artifact directory, is removed on the next deploy, so a hand-placed file
163
+ * never survives to be compiled.
164
+ *
165
+ * Name comparison follows the filesystem. On Windows and macOS `Handlers.cpp`
166
+ * and `handlers.cpp` are one file, and treating them as two deletes the file
167
+ * that was just copied in.
168
+ */
169
+ export function staleDeployedEntries(destNames, sourceNames, artifactDirs, caseInsensitiveFs = process.platform === "win32" || process.platform === "darwin") {
170
+ const key = (name) => (caseInsensitiveFs ? name.toLowerCase() : name);
171
+ return destNames.filter((name) => !artifactDirs.has(name) && !sourceNames.has(key(name)));
172
+ }
173
+ /**
174
+ * Copy the authored plugin tree over the deployed one, and leave the deployed
175
+ * tree in a state UnrealBuildTool will compile correctly.
176
+ *
177
+ * Exported with both directories as arguments so the whole step, including the
178
+ * Build.cs touch that a new source file depends on, can be driven against real
179
+ * directories. deployCppPlugin resolves the authored tree relative to this
180
+ * module, which no test can redirect.
181
+ */
182
+ export function deployPluginTree(sourcePluginDir, targetPluginDir) {
160
183
  if (!fs.existsSync(sourcePluginDir)) {
161
184
  console.error(`[ue-mcp] C++ plugin source not found at ${sourcePluginDir}`);
162
185
  return false;
163
186
  }
164
- const targetPluginDir = path.join(pluginsDir, "UE_MCP_Bridge");
165
187
  let anyDeployed = false;
188
+ /** Sources that did not exist in the deployed tree before this run. */
189
+ const newSourceFiles = [];
166
190
  // Build outputs live in the deployed tree, not the source tree, so they are
167
191
  // never copied and never pruned.
168
192
  const artifactDirs = new Set(["Binaries", "Intermediate", "Saved"]);
@@ -190,8 +214,9 @@ function deployCppPlugin(uprojectPath) {
190
214
  }
191
215
  else {
192
216
  const srcBytes = fs.readFileSync(srcPath);
217
+ const existed = fs.existsSync(destPath);
193
218
  let shouldWrite = true;
194
- if (fs.existsSync(destPath)) {
219
+ if (existed) {
195
220
  const destBytes = fs.readFileSync(destPath);
196
221
  shouldWrite = !srcBytes.equals(destBytes);
197
222
  }
@@ -199,6 +224,15 @@ function deployCppPlugin(uprojectPath) {
199
224
  fs.writeFileSync(destPath, srcBytes);
200
225
  anyDeployed = true;
201
226
  }
227
+ // A .cpp that was not here before needs UnrealBuildTool to look again.
228
+ // UBT caches the source list per module and only rebuilds that list
229
+ // when the module's Build.cs is newer than the cache, so a brand new
230
+ // handler file deploys, compiles into nothing, and every action in it
231
+ // answers "Unknown method" at runtime with a build that reported
232
+ // success. Touching Build.cs is what makes the next build see it.
233
+ if (!existed && /\.(cpp|h)$/i.test(entry.name)) {
234
+ newSourceFiles.push(entry.name);
235
+ }
202
236
  }
203
237
  }
204
238
  // Mirror, do not merge. A copy-only sync leaves a file that was deleted or
@@ -207,13 +241,10 @@ function deployCppPlugin(uprojectPath) {
207
241
  // for symbols defined twice, once from the new module and once from the
208
242
  // stale copy. Also drop the intermediate objects for anything pruned, since
209
243
  // UBT links whatever .obj files it finds from an earlier build.
210
- for (const entry of fs.readdirSync(dest, { withFileTypes: true })) {
211
- if (artifactDirs.has(entry.name) || sourceNames.has(nameKey(entry.name))) {
212
- continue;
213
- }
214
- const stalePath = path.join(dest, entry.name);
215
- fs.rmSync(stalePath, { recursive: true, force: true });
216
- pruneIntermediates(entry.name);
244
+ const stale = staleDeployedEntries(fs.readdirSync(dest).map((n) => n), sourceNames, artifactDirs, caseInsensitiveFs);
245
+ for (const name of stale) {
246
+ fs.rmSync(path.join(dest, name), { recursive: true, force: true });
247
+ pruneIntermediates(name);
217
248
  anyDeployed = true;
218
249
  }
219
250
  }
@@ -236,8 +267,52 @@ function deployCppPlugin(uprojectPath) {
236
267
  walk(intermediateRoot);
237
268
  }
238
269
  copyRecursive(sourcePluginDir, targetPluginDir);
270
+ if (newSourceFiles.length > 0) {
271
+ touchBuildRules(targetPluginDir, newSourceFiles);
272
+ }
239
273
  return anyDeployed;
240
274
  }
275
+ function deployCppPlugin(uprojectPath) {
276
+ const projectDir = path.dirname(uprojectPath);
277
+ return deployPluginTree(path.resolve(selfDir(), "..", "plugin", "ue_mcp_bridge"), path.join(projectDir, "Plugins", "UE_MCP_Bridge"));
278
+ }
279
+ /**
280
+ * Make UnrealBuildTool rescan a module whose file list just changed.
281
+ *
282
+ * UBT caches the source list per module and rebuilds it only when the module's
283
+ * Build.cs is newer than that cache. A new .cpp therefore deploys, compiles
284
+ * into nothing, and every action in it answers "Unknown method" at runtime,
285
+ * from a build that reported success. Touching every Build.cs under the
286
+ * deployed plugin costs nothing on a build where no file was added, because
287
+ * this only runs when one was.
288
+ */
289
+ export function touchBuildRules(pluginDir, because = []) {
290
+ const touched = [];
291
+ const now = new Date();
292
+ const walk = (dir) => {
293
+ if (!fs.existsSync(dir))
294
+ return;
295
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
296
+ const full = path.join(dir, entry.name);
297
+ if (entry.isDirectory()) {
298
+ if (entry.name === "Binaries" || entry.name === "Intermediate")
299
+ continue;
300
+ walk(full);
301
+ }
302
+ else if (entry.name.endsWith(".Build.cs")) {
303
+ fs.utimesSync(full, now, now);
304
+ touched.push(full);
305
+ }
306
+ }
307
+ };
308
+ walk(pluginDir);
309
+ if (touched.length > 0 && because.length > 0) {
310
+ console.error(`[ue-mcp] ${because.length} new source file(s) deployed `
311
+ + `(${because.slice(0, 3).join(", ")}${because.length > 3 ? ", ..." : ""}); `
312
+ + "touched Build.cs so UnrealBuildTool rescans the module.");
313
+ }
314
+ return touched;
315
+ }
241
316
  function ensureCppPluginEnabled(uprojectPath) {
242
317
  const raw = fs.readFileSync(uprojectPath, "utf-8");
243
318
  const root = JSON.parse(raw);
@@ -1 +1 @@
1
- {"version":3,"file":"deployer.js","sourceRoot":"","sources":["../src/deployer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deployer.js","sourceRoot":"","sources":["../src/deployer.ts"],"names":[],"mappings":"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"}
@@ -116,7 +116,7 @@ export declare function startEditor(project: ProjectContext, timeoutSeconds?: nu
116
116
  * run when the editor was LAUNCHED with it: it is read at startup, so
117
117
  * turning it on over the socket afterwards is too late, exactly like the
118
118
  * dialog policy above. Without it those cases skip and say why, which
119
- * leaves the sharpest part of the tier unexercised by default.
119
+ * leaves the sharpest part of the suite unexercised by default.
120
120
  */
121
121
  paramEcho?: boolean;
122
122
  /**
@@ -401,6 +401,7 @@ export interface RestartEditorResult {
401
401
  }
402
402
  /**
403
403
  * Stop the editor by asking it to quit ITSELF through the bridge. ue-mcp NEVER
404
+ * lint-prose-allow: no-kill this comment states what the code refuses to do
404
405
  * issues an OS kill: `taskkill /IM UnrealEditor.exe` matches by image name and
405
406
  * would also close the user's other editors (e.g. their real project).
406
407
  * Success is confirmed by the project's own bridge port going quiet, so it is
@@ -464,6 +465,30 @@ export interface BuildResult {
464
465
  message: string;
465
466
  exitCode: number | null;
466
467
  }
468
+ /**
469
+ * How many compiles this machine can run at once without running out of room.
470
+ *
471
+ * UnrealBuildTool defaults to one process per physical core. Each one maps the
472
+ * Unreal precompiled header, which costs several GB, so on a machine with less
473
+ * memory than cores x PCH the compiler does not queue: it fails outright with
474
+ * C3859 ("failed to create virtual memory for PCH") or C1076, and the build
475
+ * dies after several minutes of work. The failure names a paging file, so it
476
+ * reads as a misconfigured machine rather than a parallelism default that does
477
+ * not fit the hardware.
478
+ *
479
+ * This is not a knob anybody should have to find. The number is computed from
480
+ * the machine and passed to every build, and the cap is only applied when it
481
+ * is below what UnrealBuildTool would have chosen, so a machine with headroom
482
+ * builds exactly as it did before.
483
+ *
484
+ * `UE_MCP_MAX_PARALLEL_ACTIONS` overrides it, for a machine whose real ceiling
485
+ * this estimate gets wrong in either direction.
486
+ */
487
+ export declare function safeParallelActions(totalMemBytes?: number, cores?: number): number;
488
+ /** Whether a build died for want of memory rather than for anything in the code. */
489
+ export declare function ranOutOfMemory(output: string): boolean;
490
+ /** What to tell somebody whose build ran out of room, in the terms they hit it in. */
491
+ export declare function describeMemoryFailure(parallel: number, totalMemBytes?: number): string;
467
492
  export interface BuildOptions {
468
493
  onOutput?: (line: string) => void;
469
494
  /** Development (default), DebugGame, Shipping, Test. */
@@ -2,6 +2,7 @@ import * as fs from "node:fs";
2
2
  import * as path from "node:path";
3
3
  import { spawn } from "child_process";
4
4
  import * as net from "net";
5
+ import * as os from "node:os";
5
6
  import WebSocket from "ws";
6
7
  import { readUeMcpConfig } from "./project.js";
7
8
  import { EngineResolutionError, selectEngine, trySelectEngine } from "./engine-root.js";
@@ -1117,6 +1118,7 @@ function unsavedWorkRefusal(dirty, answeredByUser, unconfirmedPress) {
1117
1118
  }
1118
1119
  /**
1119
1120
  * Stop the editor by asking it to quit ITSELF through the bridge. ue-mcp NEVER
1121
+ * lint-prose-allow: no-kill this comment states what the code refuses to do
1120
1122
  * issues an OS kill: `taskkill /IM UnrealEditor.exe` matches by image name and
1121
1123
  * would also close the user's other editors (e.g. their real project).
1122
1124
  * Success is confirmed by the project's own bridge port going quiet, so it is
@@ -1533,6 +1535,56 @@ function getPlatformString() {
1533
1535
  return "Mac";
1534
1536
  return "Linux";
1535
1537
  }
1538
+ /**
1539
+ * How many compiles this machine can run at once without running out of room.
1540
+ *
1541
+ * UnrealBuildTool defaults to one process per physical core. Each one maps the
1542
+ * Unreal precompiled header, which costs several GB, so on a machine with less
1543
+ * memory than cores x PCH the compiler does not queue: it fails outright with
1544
+ * C3859 ("failed to create virtual memory for PCH") or C1076, and the build
1545
+ * dies after several minutes of work. The failure names a paging file, so it
1546
+ * reads as a misconfigured machine rather than a parallelism default that does
1547
+ * not fit the hardware.
1548
+ *
1549
+ * This is not a knob anybody should have to find. The number is computed from
1550
+ * the machine and passed to every build, and the cap is only applied when it
1551
+ * is below what UnrealBuildTool would have chosen, so a machine with headroom
1552
+ * builds exactly as it did before.
1553
+ *
1554
+ * `UE_MCP_MAX_PARALLEL_ACTIONS` overrides it, for a machine whose real ceiling
1555
+ * this estimate gets wrong in either direction.
1556
+ */
1557
+ export function safeParallelActions(totalMemBytes = os.totalmem(), cores = os.cpus().length) {
1558
+ const override = Number(process.env.UE_MCP_MAX_PARALLEL_ACTIONS);
1559
+ if (Number.isInteger(override) && override > 0)
1560
+ return override;
1561
+ // Measured against Unreal 5.8 on Windows: a PCH compile peaks around 5 GB,
1562
+ // and the OS plus the build server want a few GB that the compiles cannot
1563
+ // have. Both are deliberately pessimistic, because being one process under
1564
+ // costs a little wall clock and being one process over costs the whole build.
1565
+ const GB = 1024 ** 3;
1566
+ const PER_COMPILE_GB = 5;
1567
+ const RESERVED_GB = 4;
1568
+ const usableGB = totalMemBytes / GB - RESERVED_GB;
1569
+ const fits = Math.floor(usableGB / PER_COMPILE_GB);
1570
+ return Math.max(1, Math.min(cores, fits));
1571
+ }
1572
+ /** Whether a build died for want of memory rather than for anything in the code. */
1573
+ export function ranOutOfMemory(output) {
1574
+ return (output.includes("C3859")
1575
+ || output.includes("C1076")
1576
+ || output.includes("paging file is too small")
1577
+ || output.includes("internal heap limit reached"));
1578
+ }
1579
+ /** What to tell somebody whose build ran out of room, in the terms they hit it in. */
1580
+ export function describeMemoryFailure(parallel, totalMemBytes = os.totalmem()) {
1581
+ const gb = Math.round(totalMemBytes / 1024 ** 3);
1582
+ return (`The build ran out of memory rather than hitting anything wrong in the code. This machine has `
1583
+ + `${gb} GB of RAM and the compile was already limited to ${parallel} parallel `
1584
+ + `${parallel === 1 ? "process" : "processes"}, each of which needs several GB for Unreal's `
1585
+ + "precompiled header. Lower it further with UE_MCP_MAX_PARALLEL_ACTIONS, or give Windows a "
1586
+ + "larger paging file, and run the build again.");
1587
+ }
1536
1588
  /**
1537
1589
  * Compile a project's C++ out of process, with UnrealBuildTool.
1538
1590
  *
@@ -1574,7 +1626,12 @@ export async function buildProject(projectPath, opts = {}) {
1574
1626
  // plainly there - while the same command pasted into a terminal worked,
1575
1627
  // because the shell removed them first.
1576
1628
  const commonArgs = [target, platform, configuration];
1577
- const tailArgs = ["-WaitMutex", "-FromMsBuild", ...(opts.clean ? ["-Clean"] : [])];
1629
+ // Only when it is below what UnrealBuildTool would have picked, so a machine
1630
+ // with headroom builds exactly as it did before and nobody has to know this
1631
+ // exists.
1632
+ const parallel = safeParallelActions();
1633
+ const parallelArgs = parallel < os.cpus().length ? [`-MaxParallelActions=${parallel}`] : [];
1634
+ const tailArgs = ["-WaitMutex", "-FromMsBuild", ...parallelArgs, ...(opts.clean ? ["-Clean"] : [])];
1578
1635
  const windowsArgs = [...commonArgs, `-Project="${resolvedPath}"`, ...tailArgs];
1579
1636
  const posixArgs = [...commonArgs, `-Project=${resolvedPath}`, ...tailArgs];
1580
1637
  return new Promise((resolve) => {
@@ -1587,8 +1644,14 @@ export async function buildProject(projectPath, opts = {}) {
1587
1644
  else {
1588
1645
  proc = spawn(buildTool, posixArgs, { stdio: "pipe" });
1589
1646
  }
1647
+ // Kept so a failure can be read afterwards. The compiler reports running
1648
+ // out of room as a paging-file problem, which sends people to their
1649
+ // virtual memory settings for what is really a parallelism default that
1650
+ // does not fit the machine.
1651
+ let transcript = "";
1590
1652
  const forward = (data) => {
1591
1653
  const text = data.toString();
1654
+ transcript += text;
1592
1655
  if (opts.onOutput)
1593
1656
  opts.onOutput(text);
1594
1657
  else
@@ -1606,7 +1669,13 @@ export async function buildProject(projectPath, opts = {}) {
1606
1669
  invalidatePluginFreshness(resolvedPath);
1607
1670
  resolve(code === 0
1608
1671
  ? { success: true, exitCode: 0, message: `Build succeeded (${target} ${platform} ${configuration})` }
1609
- : { success: false, exitCode: code, message: `Build failed with exit code ${code}` });
1672
+ : {
1673
+ success: false,
1674
+ exitCode: code,
1675
+ message: ranOutOfMemory(transcript)
1676
+ ? describeMemoryFailure(parallel)
1677
+ : `Build failed with exit code ${code}`,
1678
+ });
1610
1679
  });
1611
1680
  proc.on("error", (err) => {
1612
1681
  resolve({ success: false, exitCode: null, message: `Build error: ${err.message}` });