unreal-engine-mcp-server 0.5.4 → 0.5.5

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 (468) hide show
  1. package/dist/automation/bridge.d.ts.map +1 -0
  2. package/dist/automation/bridge.js.map +1 -0
  3. package/dist/automation/connection-manager.d.ts.map +1 -0
  4. package/dist/automation/connection-manager.js.map +1 -0
  5. package/dist/automation/handshake.d.ts.map +1 -0
  6. package/dist/automation/handshake.js.map +1 -0
  7. package/dist/automation/index.d.ts.map +1 -0
  8. package/dist/automation/index.js.map +1 -0
  9. package/dist/automation/message-handler.d.ts.map +1 -0
  10. package/dist/automation/message-handler.js.map +1 -0
  11. package/dist/automation/request-tracker.d.ts.map +1 -0
  12. package/dist/automation/request-tracker.js.map +1 -0
  13. package/dist/automation/types.d.ts.map +1 -0
  14. package/dist/automation/types.js.map +1 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +4 -3
  17. package/dist/cli.js.map +1 -0
  18. package/dist/config/class-aliases.d.ts.map +1 -0
  19. package/dist/config/class-aliases.js.map +1 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/constants.d.ts.map +1 -0
  23. package/dist/constants.js.map +1 -0
  24. package/dist/graphql/loaders.d.ts.map +1 -0
  25. package/dist/graphql/loaders.js.map +1 -0
  26. package/dist/graphql/resolvers.d.ts.map +1 -0
  27. package/dist/graphql/resolvers.js +29 -29
  28. package/dist/graphql/resolvers.js.map +1 -0
  29. package/dist/graphql/schema.d.ts.map +1 -0
  30. package/dist/graphql/schema.js.map +1 -0
  31. package/dist/graphql/server.d.ts.map +1 -0
  32. package/dist/graphql/server.js.map +1 -0
  33. package/dist/graphql/types.d.ts.map +1 -0
  34. package/dist/graphql/types.js.map +1 -0
  35. package/dist/handlers/resource-handlers.d.ts.map +1 -0
  36. package/dist/handlers/resource-handlers.js.map +1 -0
  37. package/dist/index.d.ts +1 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +64 -7
  40. package/dist/index.js.map +1 -0
  41. package/dist/resources/actors.d.ts.map +1 -0
  42. package/dist/resources/actors.js.map +1 -0
  43. package/dist/resources/assets.d.ts.map +1 -0
  44. package/dist/resources/assets.js +6 -4
  45. package/dist/resources/assets.js.map +1 -0
  46. package/dist/resources/levels.d.ts.map +1 -0
  47. package/dist/resources/levels.js.map +1 -0
  48. package/dist/server/resource-registry.d.ts.map +1 -0
  49. package/dist/server/resource-registry.js.map +1 -0
  50. package/dist/server/tool-registry.d.ts.map +1 -0
  51. package/dist/server/tool-registry.js.map +1 -0
  52. package/dist/server-setup.d.ts.map +1 -0
  53. package/dist/server-setup.js.map +1 -0
  54. package/dist/services/health-monitor.d.ts.map +1 -0
  55. package/dist/services/health-monitor.js.map +1 -0
  56. package/dist/services/metrics-server.d.ts.map +1 -0
  57. package/dist/services/metrics-server.js.map +1 -0
  58. package/dist/tools/actors.d.ts.map +1 -0
  59. package/dist/tools/actors.js +3 -1
  60. package/dist/tools/actors.js.map +1 -0
  61. package/dist/tools/animation.d.ts.map +1 -0
  62. package/dist/tools/animation.js +2 -2
  63. package/dist/tools/animation.js.map +1 -0
  64. package/dist/tools/assets.d.ts.map +1 -0
  65. package/dist/tools/assets.js.map +1 -0
  66. package/dist/tools/audio.d.ts.map +1 -0
  67. package/dist/tools/audio.js.map +1 -0
  68. package/dist/tools/base-tool.d.ts.map +1 -0
  69. package/dist/tools/base-tool.js.map +1 -0
  70. package/dist/tools/behavior-tree.d.ts.map +1 -0
  71. package/dist/tools/behavior-tree.js.map +1 -0
  72. package/dist/tools/blueprint.d.ts.map +1 -0
  73. package/dist/tools/blueprint.js +4 -2
  74. package/dist/tools/blueprint.js.map +1 -0
  75. package/dist/tools/consolidated-tool-definitions.d.ts.map +1 -0
  76. package/dist/tools/consolidated-tool-definitions.js.map +1 -0
  77. package/dist/tools/consolidated-tool-handlers.d.ts.map +1 -0
  78. package/dist/tools/consolidated-tool-handlers.js.map +1 -0
  79. package/dist/tools/debug.d.ts.map +1 -0
  80. package/dist/tools/debug.js +3 -1
  81. package/dist/tools/debug.js.map +1 -0
  82. package/dist/tools/dynamic-handler-registry.d.ts.map +1 -0
  83. package/dist/tools/dynamic-handler-registry.js +3 -1
  84. package/dist/tools/dynamic-handler-registry.js.map +1 -0
  85. package/dist/tools/editor.d.ts.map +1 -0
  86. package/dist/tools/editor.js +1 -1
  87. package/dist/tools/editor.js.map +1 -0
  88. package/dist/tools/engine.d.ts.map +1 -0
  89. package/dist/tools/engine.js.map +1 -0
  90. package/dist/tools/environment.d.ts.map +1 -0
  91. package/dist/tools/environment.js +2 -2
  92. package/dist/tools/environment.js.map +1 -0
  93. package/dist/tools/foliage.d.ts.map +1 -0
  94. package/dist/tools/foliage.js.map +1 -0
  95. package/dist/tools/handlers/actor-handlers.d.ts +1 -1
  96. package/dist/tools/handlers/actor-handlers.d.ts.map +1 -0
  97. package/dist/tools/handlers/actor-handlers.js +6 -5
  98. package/dist/tools/handlers/actor-handlers.js.map +1 -0
  99. package/dist/tools/handlers/animation-handlers.d.ts.map +1 -0
  100. package/dist/tools/handlers/animation-handlers.js.map +1 -0
  101. package/dist/tools/handlers/argument-helper.d.ts.map +1 -0
  102. package/dist/tools/handlers/argument-helper.js.map +1 -0
  103. package/dist/tools/handlers/asset-handlers.d.ts.map +1 -0
  104. package/dist/tools/handlers/asset-handlers.js +5 -1
  105. package/dist/tools/handlers/asset-handlers.js.map +1 -0
  106. package/dist/tools/handlers/audio-handlers.d.ts.map +1 -0
  107. package/dist/tools/handlers/audio-handlers.js.map +1 -0
  108. package/dist/tools/handlers/blueprint-handlers.d.ts.map +1 -0
  109. package/dist/tools/handlers/blueprint-handlers.js +2 -1
  110. package/dist/tools/handlers/blueprint-handlers.js.map +1 -0
  111. package/dist/tools/handlers/common-handlers.d.ts.map +1 -0
  112. package/dist/tools/handlers/common-handlers.js.map +1 -0
  113. package/dist/tools/handlers/editor-handlers.d.ts.map +1 -0
  114. package/dist/tools/handlers/editor-handlers.js +12 -2
  115. package/dist/tools/handlers/editor-handlers.js.map +1 -0
  116. package/dist/tools/handlers/effect-handlers.d.ts.map +1 -0
  117. package/dist/tools/handlers/effect-handlers.js.map +1 -0
  118. package/dist/tools/handlers/environment-handlers.d.ts.map +1 -0
  119. package/dist/tools/handlers/environment-handlers.js.map +1 -0
  120. package/dist/tools/handlers/graph-handlers.d.ts.map +1 -0
  121. package/dist/tools/handlers/graph-handlers.js +61 -1
  122. package/dist/tools/handlers/graph-handlers.js.map +1 -0
  123. package/dist/tools/handlers/input-handlers.d.ts.map +1 -0
  124. package/dist/tools/handlers/input-handlers.js.map +1 -0
  125. package/dist/tools/handlers/inspect-handlers.d.ts.map +1 -0
  126. package/dist/tools/handlers/inspect-handlers.js.map +1 -0
  127. package/dist/tools/handlers/level-handlers.d.ts.map +1 -0
  128. package/dist/tools/handlers/level-handlers.js.map +1 -0
  129. package/dist/tools/handlers/lighting-handlers.d.ts.map +1 -0
  130. package/dist/tools/handlers/lighting-handlers.js +23 -1
  131. package/dist/tools/handlers/lighting-handlers.js.map +1 -0
  132. package/dist/tools/handlers/performance-handlers.d.ts.map +1 -0
  133. package/dist/tools/handlers/performance-handlers.js +15 -2
  134. package/dist/tools/handlers/performance-handlers.js.map +1 -0
  135. package/dist/tools/handlers/pipeline-handlers.d.ts.map +1 -0
  136. package/dist/tools/handlers/pipeline-handlers.js.map +1 -0
  137. package/dist/tools/handlers/sequence-handlers.d.ts.map +1 -0
  138. package/dist/tools/handlers/sequence-handlers.js.map +1 -0
  139. package/dist/tools/handlers/system-handlers.d.ts.map +1 -0
  140. package/dist/tools/handlers/system-handlers.js +16 -1
  141. package/dist/tools/handlers/system-handlers.js.map +1 -0
  142. package/dist/tools/input.d.ts.map +1 -0
  143. package/dist/tools/input.js +3 -1
  144. package/dist/tools/input.js.map +1 -0
  145. package/dist/tools/introspection.d.ts.map +1 -0
  146. package/dist/tools/introspection.js.map +1 -0
  147. package/dist/tools/landscape.d.ts.map +1 -0
  148. package/dist/tools/landscape.js +3 -1
  149. package/dist/tools/landscape.js.map +1 -0
  150. package/dist/tools/level.d.ts.map +1 -0
  151. package/dist/tools/level.js.map +1 -0
  152. package/dist/tools/lighting.d.ts.map +1 -0
  153. package/dist/tools/lighting.js +3 -1
  154. package/dist/tools/lighting.js.map +1 -0
  155. package/dist/tools/logs.d.ts.map +1 -0
  156. package/dist/tools/logs.js.map +1 -0
  157. package/dist/tools/materials.d.ts.map +1 -0
  158. package/dist/tools/materials.js +3 -1
  159. package/dist/tools/materials.js.map +1 -0
  160. package/dist/tools/niagara.d.ts.map +1 -0
  161. package/dist/tools/niagara.js +7 -5
  162. package/dist/tools/niagara.js.map +1 -0
  163. package/dist/tools/performance.d.ts.map +1 -0
  164. package/dist/tools/performance.js.map +1 -0
  165. package/dist/tools/physics.d.ts.map +1 -0
  166. package/dist/tools/physics.js +9 -7
  167. package/dist/tools/physics.js.map +1 -0
  168. package/dist/tools/property-dictionary.d.ts.map +1 -0
  169. package/dist/tools/property-dictionary.js.map +1 -0
  170. package/dist/tools/sequence.d.ts.map +1 -0
  171. package/dist/tools/sequence.js +3 -1
  172. package/dist/tools/sequence.js.map +1 -0
  173. package/dist/tools/tool-definition-utils.d.ts.map +1 -0
  174. package/dist/tools/tool-definition-utils.js.map +1 -0
  175. package/dist/tools/ui.d.ts.map +1 -0
  176. package/dist/tools/ui.js +3 -1
  177. package/dist/tools/ui.js.map +1 -0
  178. package/dist/types/automation-responses.d.ts.map +1 -0
  179. package/dist/types/automation-responses.js.map +1 -0
  180. package/dist/types/env.d.ts.map +1 -0
  181. package/dist/types/env.js.map +1 -0
  182. package/dist/types/handler-types.d.ts.map +1 -0
  183. package/dist/types/handler-types.js.map +1 -0
  184. package/dist/types/tool-interfaces.d.ts.map +1 -0
  185. package/dist/types/tool-interfaces.js.map +1 -0
  186. package/dist/types/tool-types.d.ts.map +1 -0
  187. package/dist/types/tool-types.js.map +1 -0
  188. package/dist/unreal-bridge.d.ts +1 -0
  189. package/dist/unreal-bridge.d.ts.map +1 -0
  190. package/dist/unreal-bridge.js +8 -0
  191. package/dist/unreal-bridge.js.map +1 -0
  192. package/dist/utils/command-validator.d.ts.map +1 -0
  193. package/dist/utils/command-validator.js.map +1 -0
  194. package/dist/utils/elicitation.d.ts.map +1 -0
  195. package/dist/utils/elicitation.js.map +1 -0
  196. package/dist/utils/error-handler.d.ts.map +1 -0
  197. package/dist/utils/error-handler.js.map +1 -0
  198. package/dist/utils/ini-reader.d.ts.map +1 -0
  199. package/dist/utils/ini-reader.js.map +1 -0
  200. package/dist/utils/logger.d.ts.map +1 -0
  201. package/dist/utils/logger.js.map +1 -0
  202. package/dist/utils/normalize.d.ts.map +1 -0
  203. package/dist/utils/normalize.js.map +1 -0
  204. package/dist/utils/path-security.d.ts.map +1 -0
  205. package/dist/utils/path-security.js.map +1 -0
  206. package/dist/utils/response-factory.d.ts.map +1 -0
  207. package/dist/utils/response-factory.js +3 -1
  208. package/dist/utils/response-factory.js.map +1 -0
  209. package/dist/utils/response-validator.d.ts.map +1 -0
  210. package/dist/utils/response-validator.js.map +1 -0
  211. package/dist/utils/result-helpers.d.ts.map +1 -0
  212. package/dist/utils/result-helpers.js.map +1 -0
  213. package/dist/utils/safe-json.d.ts.map +1 -0
  214. package/dist/utils/safe-json.js.map +1 -0
  215. package/dist/utils/unreal-command-queue.d.ts.map +1 -0
  216. package/dist/utils/unreal-command-queue.js.map +1 -0
  217. package/dist/utils/validation.d.ts.map +1 -0
  218. package/dist/utils/validation.js.map +1 -0
  219. package/dist/wasm/index.d.ts.map +1 -0
  220. package/dist/wasm/index.js.map +1 -0
  221. package/package.json +12 -34
  222. package/server.json +2 -2
  223. package/.dockerignore +0 -57
  224. package/.env.example +0 -26
  225. package/.env.production +0 -61
  226. package/.eslintrc.json +0 -0
  227. package/.eslintrc.override.json +0 -8
  228. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -94
  229. package/.github/ISSUE_TEMPLATE/config.yml +0 -8
  230. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -56
  231. package/.github/copilot-instructions.md +0 -478
  232. package/.github/dependabot.yml +0 -19
  233. package/.github/labeler.yml +0 -24
  234. package/.github/labels.yml +0 -70
  235. package/.github/pull_request_template.md +0 -42
  236. package/.github/release-drafter-config.yml +0 -51
  237. package/.github/workflows/auto-merge.yml +0 -38
  238. package/.github/workflows/ci.yml +0 -38
  239. package/.github/workflows/dependency-review.yml +0 -17
  240. package/.github/workflows/gemini-issue-triage.yml +0 -172
  241. package/.github/workflows/greetings.yml +0 -27
  242. package/.github/workflows/labeler.yml +0 -17
  243. package/.github/workflows/links.yml +0 -80
  244. package/.github/workflows/pr-size-labeler.yml +0 -137
  245. package/.github/workflows/publish-mcp.yml +0 -79
  246. package/.github/workflows/release-drafter.yml +0 -24
  247. package/.github/workflows/release.yml +0 -112
  248. package/.github/workflows/semantic-pull-request.yml +0 -35
  249. package/.github/workflows/smoke-test.yml +0 -36
  250. package/.github/workflows/stale.yml +0 -28
  251. package/CONTRIBUTING.md +0 -140
  252. package/Dockerfile +0 -37
  253. package/GEMINI.md +0 -115
  254. package/Public/Plugin_setup_guide.mp4 +0 -0
  255. package/Public/icon.png +0 -0
  256. package/claude_desktop_config_example.json +0 -15
  257. package/dist/types/responses.d.ts +0 -249
  258. package/dist/types/responses.js +0 -2
  259. package/docs/GraphQL-API.md +0 -888
  260. package/docs/Migration-Guide-v0.5.0.md +0 -684
  261. package/docs/Roadmap.md +0 -53
  262. package/docs/WebAssembly-Integration.md +0 -628
  263. package/docs/editor-plugin-extension.md +0 -370
  264. package/docs/handler-mapping.md +0 -249
  265. package/docs/native-automation-progress.md +0 -128
  266. package/docs/testing-guide.md +0 -423
  267. package/eslint.config.mjs +0 -68
  268. package/mcp-config-example.json +0 -14
  269. package/plugins/McpAutomationBridge/Config/FilterPlugin.ini +0 -8
  270. package/plugins/McpAutomationBridge/McpAutomationBridge.uplugin +0 -64
  271. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/McpAutomationBridge.Build.cs +0 -189
  272. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.cpp +0 -22
  273. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.h +0 -30
  274. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeHelpers.h +0 -1983
  275. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeModule.cpp +0 -72
  276. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSettings.cpp +0 -46
  277. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSubsystem.cpp +0 -846
  278. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AnimationHandlers.cpp +0 -2393
  279. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetQueryHandlers.cpp +0 -300
  280. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetWorkflowHandlers.cpp +0 -2807
  281. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AudioHandlers.cpp +0 -1087
  282. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BehaviorTreeHandlers.cpp +0 -488
  283. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.cpp +0 -643
  284. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.h +0 -31
  285. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintGraphHandlers.cpp +0 -1094
  286. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers.cpp +0 -5750
  287. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers_List.cpp +0 -152
  288. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ControlHandlers.cpp +0 -2614
  289. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_DebugHandlers.cpp +0 -42
  290. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EditorFunctionHandlers.cpp +0 -1237
  291. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EffectHandlers.cpp +0 -1725
  292. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EnvironmentHandlers.cpp +0 -2265
  293. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_FoliageHandlers.cpp +0 -954
  294. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InputHandlers.cpp +0 -209
  295. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InsightsHandlers.cpp +0 -41
  296. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LandscapeHandlers.cpp +0 -1164
  297. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LevelHandlers.cpp +0 -762
  298. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LightingHandlers.cpp +0 -663
  299. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LogHandlers.cpp +0 -136
  300. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_MaterialGraphHandlers.cpp +0 -494
  301. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraGraphHandlers.cpp +0 -278
  302. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraHandlers.cpp +0 -625
  303. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PerformanceHandlers.cpp +0 -401
  304. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PipelineHandlers.cpp +0 -67
  305. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ProcessRequest.cpp +0 -472
  306. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PropertyHandlers.cpp +0 -2634
  307. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_RenderHandlers.cpp +0 -189
  308. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.cpp +0 -917
  309. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.h +0 -39
  310. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequenceHandlers.cpp +0 -2706
  311. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequencerHandlers.cpp +0 -519
  312. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_TestHandlers.cpp +0 -38
  313. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_UiHandlers.cpp +0 -668
  314. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_WorldPartitionHandlers.cpp +0 -346
  315. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.cpp +0 -1345
  316. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.h +0 -149
  317. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpConnectionManager.cpp +0 -782
  318. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSettings.h +0 -115
  319. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSubsystem.h +0 -796
  320. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpConnectionManager.h +0 -117
  321. package/scripts/check-unreal-connection.mjs +0 -19
  322. package/scripts/clean-tmp.js +0 -23
  323. package/scripts/patch-wasm.js +0 -26
  324. package/scripts/run-all-tests.mjs +0 -136
  325. package/scripts/smoke-test.ts +0 -94
  326. package/scripts/sync-mcp-plugin.js +0 -143
  327. package/scripts/test-no-plugin-alternates.mjs +0 -113
  328. package/scripts/validate-server.js +0 -46
  329. package/scripts/verify-automation-bridge.js +0 -200
  330. package/src/automation/bridge.ts +0 -630
  331. package/src/automation/connection-manager.ts +0 -148
  332. package/src/automation/handshake.ts +0 -99
  333. package/src/automation/index.ts +0 -2
  334. package/src/automation/message-handler.ts +0 -192
  335. package/src/automation/request-tracker.ts +0 -155
  336. package/src/automation/types.ts +0 -108
  337. package/src/cli.ts +0 -34
  338. package/src/config/class-aliases.ts +0 -65
  339. package/src/config.ts +0 -73
  340. package/src/constants.ts +0 -29
  341. package/src/graphql/loaders.ts +0 -244
  342. package/src/graphql/resolvers.ts +0 -1008
  343. package/src/graphql/schema.ts +0 -452
  344. package/src/graphql/server.ts +0 -156
  345. package/src/graphql/types.ts +0 -10
  346. package/src/handlers/resource-handlers.ts +0 -186
  347. package/src/index.ts +0 -243
  348. package/src/resources/actors.ts +0 -127
  349. package/src/resources/assets.ts +0 -286
  350. package/src/resources/levels.ts +0 -68
  351. package/src/server/resource-registry.ts +0 -47
  352. package/src/server/tool-registry.ts +0 -354
  353. package/src/server-setup.ts +0 -114
  354. package/src/services/health-monitor.ts +0 -132
  355. package/src/services/metrics-server.ts +0 -176
  356. package/src/tools/actors.ts +0 -564
  357. package/src/tools/animation.ts +0 -941
  358. package/src/tools/assets.ts +0 -394
  359. package/src/tools/audio.ts +0 -499
  360. package/src/tools/base-tool.ts +0 -52
  361. package/src/tools/behavior-tree.ts +0 -45
  362. package/src/tools/blueprint.ts +0 -940
  363. package/src/tools/consolidated-tool-definitions.ts +0 -1256
  364. package/src/tools/consolidated-tool-handlers.ts +0 -302
  365. package/src/tools/debug.ts +0 -622
  366. package/src/tools/dynamic-handler-registry.ts +0 -33
  367. package/src/tools/editor.ts +0 -435
  368. package/src/tools/engine.ts +0 -43
  369. package/src/tools/environment.ts +0 -281
  370. package/src/tools/foliage.ts +0 -596
  371. package/src/tools/handlers/actor-handlers.ts +0 -244
  372. package/src/tools/handlers/animation-handlers.ts +0 -237
  373. package/src/tools/handlers/argument-helper.ts +0 -142
  374. package/src/tools/handlers/asset-handlers.ts +0 -550
  375. package/src/tools/handlers/audio-handlers.ts +0 -194
  376. package/src/tools/handlers/blueprint-handlers.ts +0 -380
  377. package/src/tools/handlers/common-handlers.ts +0 -108
  378. package/src/tools/handlers/editor-handlers.ts +0 -124
  379. package/src/tools/handlers/effect-handlers.ts +0 -224
  380. package/src/tools/handlers/environment-handlers.ts +0 -183
  381. package/src/tools/handlers/graph-handlers.ts +0 -117
  382. package/src/tools/handlers/input-handlers.ts +0 -28
  383. package/src/tools/handlers/inspect-handlers.ts +0 -450
  384. package/src/tools/handlers/level-handlers.ts +0 -253
  385. package/src/tools/handlers/lighting-handlers.ts +0 -151
  386. package/src/tools/handlers/performance-handlers.ts +0 -132
  387. package/src/tools/handlers/pipeline-handlers.ts +0 -194
  388. package/src/tools/handlers/sequence-handlers.ts +0 -438
  389. package/src/tools/handlers/system-handlers.ts +0 -564
  390. package/src/tools/input.ts +0 -160
  391. package/src/tools/introspection.ts +0 -689
  392. package/src/tools/landscape.ts +0 -649
  393. package/src/tools/level.ts +0 -989
  394. package/src/tools/lighting.ts +0 -1052
  395. package/src/tools/logs.ts +0 -219
  396. package/src/tools/materials.ts +0 -295
  397. package/src/tools/niagara.ts +0 -485
  398. package/src/tools/performance.ts +0 -661
  399. package/src/tools/physics.ts +0 -679
  400. package/src/tools/property-dictionary.ts +0 -98
  401. package/src/tools/sequence.ts +0 -385
  402. package/src/tools/tool-definition-utils.ts +0 -35
  403. package/src/tools/ui.ts +0 -452
  404. package/src/types/automation-responses.ts +0 -119
  405. package/src/types/env.ts +0 -17
  406. package/src/types/handler-types.ts +0 -442
  407. package/src/types/responses.ts +0 -355
  408. package/src/types/tool-interfaces.ts +0 -250
  409. package/src/types/tool-types.ts +0 -575
  410. package/src/unreal-bridge.ts +0 -693
  411. package/src/utils/command-validator.ts +0 -139
  412. package/src/utils/elicitation.ts +0 -132
  413. package/src/utils/error-handler.ts +0 -287
  414. package/src/utils/ini-reader.ts +0 -86
  415. package/src/utils/logger.ts +0 -35
  416. package/src/utils/normalize.test.ts +0 -162
  417. package/src/utils/normalize.ts +0 -146
  418. package/src/utils/path-security.ts +0 -43
  419. package/src/utils/response-factory.ts +0 -44
  420. package/src/utils/response-validator.ts +0 -395
  421. package/src/utils/result-helpers.ts +0 -195
  422. package/src/utils/safe-json.test.ts +0 -90
  423. package/src/utils/safe-json.ts +0 -70
  424. package/src/utils/unreal-command-queue.ts +0 -166
  425. package/src/utils/validation.test.ts +0 -184
  426. package/src/utils/validation.ts +0 -312
  427. package/src/wasm/index.ts +0 -838
  428. package/test-server.mjs +0 -100
  429. package/tests/test-animation.mjs +0 -369
  430. package/tests/test-asset-advanced.mjs +0 -82
  431. package/tests/test-asset-graph.mjs +0 -311
  432. package/tests/test-audio.mjs +0 -417
  433. package/tests/test-automation-timeouts.mjs +0 -98
  434. package/tests/test-behavior-tree.mjs +0 -444
  435. package/tests/test-blueprint-graph.mjs +0 -410
  436. package/tests/test-blueprint.mjs +0 -577
  437. package/tests/test-client-mode.mjs +0 -86
  438. package/tests/test-console-command.mjs +0 -56
  439. package/tests/test-control-actor.mjs +0 -425
  440. package/tests/test-control-editor.mjs +0 -112
  441. package/tests/test-graphql.mjs +0 -372
  442. package/tests/test-input.mjs +0 -349
  443. package/tests/test-inspect.mjs +0 -302
  444. package/tests/test-landscape.mjs +0 -316
  445. package/tests/test-lighting.mjs +0 -428
  446. package/tests/test-manage-asset.mjs +0 -438
  447. package/tests/test-manage-level.mjs +0 -89
  448. package/tests/test-materials.mjs +0 -356
  449. package/tests/test-niagara.mjs +0 -185
  450. package/tests/test-no-inline-python.mjs +0 -122
  451. package/tests/test-performance.mjs +0 -539
  452. package/tests/test-plugin-handshake.mjs +0 -82
  453. package/tests/test-runner.mjs +0 -993
  454. package/tests/test-sequence.mjs +0 -104
  455. package/tests/test-system.mjs +0 -96
  456. package/tests/test-wasm.mjs +0 -283
  457. package/tests/test-world-partition.mjs +0 -215
  458. package/tsconfig.json +0 -56
  459. package/vitest.config.ts +0 -35
  460. package/wasm/Cargo.lock +0 -363
  461. package/wasm/Cargo.toml +0 -42
  462. package/wasm/LICENSE +0 -21
  463. package/wasm/README.md +0 -253
  464. package/wasm/src/dependency_resolver.rs +0 -377
  465. package/wasm/src/lib.rs +0 -153
  466. package/wasm/src/property_parser.rs +0 -271
  467. package/wasm/src/transform_math.rs +0 -396
  468. package/wasm/tests/integration.rs +0 -109
@@ -1,661 +0,0 @@
1
- // Performance tools for Unreal Engine
2
- import { UnrealBridge } from '../unreal-bridge.js';
3
- import { AutomationBridge } from '../automation/index.js';
4
- import { Logger } from '../utils/logger.js';
5
-
6
- export class PerformanceTools {
7
- private log = new Logger('PerformanceTools');
8
- private automationBridge?: AutomationBridge;
9
-
10
- constructor(private bridge: UnrealBridge, automationBridge?: AutomationBridge) {
11
- this.automationBridge = automationBridge;
12
- }
13
-
14
- setAutomationBridge(automationBridge?: AutomationBridge) {
15
- this.automationBridge = automationBridge;
16
- }
17
-
18
- // Start profiling
19
- async startProfiling(params: {
20
- type: 'CPU' | 'GPU' | 'Memory' | 'RenderThread' | 'GameThread' | 'All';
21
- duration?: number;
22
- }) {
23
- if (this.automationBridge) {
24
- try {
25
- const response = await this.automationBridge.sendAutomationRequest('start_profiling', {
26
- type: params.type,
27
- duration: params.duration
28
- });
29
- if (response.success) return { success: true, message: `${params.type} profiling started (bridge)` };
30
- } catch (_e) {
31
- // Fallback
32
- }
33
- }
34
-
35
- const commands: string[] = [];
36
-
37
- switch (params.type) {
38
- case 'CPU':
39
- commands.push('stat startfile');
40
- break;
41
- case 'GPU':
42
- commands.push('profilegpu');
43
- break;
44
- case 'Memory':
45
- commands.push('stat memory');
46
- break;
47
- case 'RenderThread':
48
- commands.push('stat renderthread');
49
- break;
50
- case 'GameThread':
51
- commands.push('stat game');
52
- break;
53
- case 'All':
54
- commands.push('stat startfile');
55
- commands.push('profilegpu');
56
- commands.push('stat memory');
57
- break;
58
- }
59
-
60
- if (params.duration) {
61
- commands.push(`stat stopfile ${params.duration}`);
62
- }
63
-
64
- await this.bridge.executeConsoleCommands(commands);
65
-
66
- return { success: true, message: `${params.type} profiling started` };
67
- }
68
-
69
- // Stop profiling
70
- async stopProfiling() {
71
- if (this.automationBridge) {
72
- try {
73
- const response = await this.automationBridge.sendAutomationRequest('stop_profiling', {});
74
- if (response.success) return { success: true, message: 'Profiling stopped (bridge)' };
75
- } catch (_e) {
76
- // Fallback
77
- }
78
- }
79
-
80
- const commands = [
81
- 'stat stopfile',
82
- 'stat none'
83
- ];
84
-
85
- await this.bridge.executeConsoleCommands(commands);
86
-
87
- return { success: true, message: 'Profiling stopped' };
88
- }
89
-
90
- // Show FPS
91
- async showFPS(params: {
92
- enabled: boolean;
93
- verbose?: boolean;
94
- }) {
95
- const startTime = Date.now();
96
- this.log.debug('Starting showFPS with params:', params);
97
-
98
- if (this.automationBridge) {
99
- try {
100
- const response = await this.automationBridge.sendAutomationRequest('show_fps', {
101
- enabled: params.enabled,
102
- verbose: params.verbose
103
- });
104
- if (response.success) return {
105
- success: true,
106
- message: params.enabled ? 'FPS display enabled (bridge)' : 'FPS display disabled (bridge)',
107
- fpsVisible: params.enabled
108
- };
109
- } catch (_e) {
110
- // Fallback
111
- }
112
- }
113
-
114
- try {
115
- // Use stat fps as requested - shows FPS counter
116
- // For more detailed timing info, use 'stat unit' instead
117
- const command = params.enabled
118
- ? (params.verbose ? 'stat unit' : 'stat fps')
119
- : 'stat none';
120
-
121
- this.log.debug(`Executing command: ${command}`);
122
- await this.bridge.executeConsoleCommand(command);
123
- this.log.debug(`Command completed in ${Date.now() - startTime}ms`);
124
- return {
125
- success: true,
126
- message: params.enabled ? 'FPS display enabled' : 'FPS display disabled',
127
- fpsVisible: params.enabled,
128
- command: command
129
- };
130
- } catch (error) {
131
- return {
132
- success: false,
133
- error: `Failed to ${params.enabled ? 'enable' : 'disable'} FPS display: ${error}`,
134
- fpsVisible: false
135
- };
136
- }
137
- }
138
-
139
- // Show performance stats
140
- async showStats(params: {
141
- category: 'Unit' | 'FPS' | 'Memory' | 'Game' | 'Slate' | 'Engine' | 'RHI' | 'Streaming' | 'SceneRendering' | 'Physics' | 'Navigation' | 'Particles' | 'Audio';
142
- enabled: boolean;
143
- }) {
144
- if (this.automationBridge) {
145
- try {
146
- const response = await this.automationBridge.sendAutomationRequest('show_stats', {
147
- category: params.category,
148
- enabled: params.enabled
149
- });
150
- if (response.success) return { success: true, message: `Stat '${params.category}' configured (bridge)` };
151
- } catch (_e) {
152
- // Fallback
153
- }
154
- }
155
-
156
- const command = params.enabled
157
- ? `stat ${params.category.toLowerCase()}`
158
- : 'stat none';
159
-
160
- return this.bridge.executeConsoleCommand(command);
161
- }
162
-
163
- // Set scalability settings using console commands
164
- async setScalability(params: {
165
- category: 'ViewDistance' | 'AntiAliasing' | 'PostProcessing' | 'PostProcess' | 'Shadows' | 'GlobalIllumination' | 'Reflections' | 'Textures' | 'Effects' | 'Foliage' | 'Shading';
166
- level: 0 | 1 | 2 | 3 | 4; // 0=Low, 1=Medium, 2=High, 3=Epic, 4=Cinematic
167
- }) {
168
- if (this.automationBridge) {
169
- try {
170
- const response = await this.automationBridge.sendAutomationRequest('set_scalability', {
171
- category: params.category,
172
- level: params.level
173
- });
174
- if (response.success) return { success: true, message: `${params.category} quality set to level ${params.level} (bridge)` };
175
- } catch (_e) {
176
- // Fallback
177
- }
178
- }
179
-
180
- // Map incoming category to the base name expected by "sg.<Base>Quality"
181
- // Note: Several CVars use singular form (Shadow/Texture/Reflection)
182
- const categoryBaseMap: Record<string, string> = {
183
- ViewDistance: 'ViewDistance',
184
- AntiAliasing: 'AntiAliasing',
185
- PostProcessing: 'PostProcess',
186
- PostProcess: 'PostProcess',
187
- Shadows: 'Shadow',
188
- GlobalIllumination: 'GlobalIllumination',
189
- Reflections: 'Reflection',
190
- Textures: 'Texture',
191
- Effects: 'Effects',
192
- Foliage: 'Foliage',
193
- Shading: 'Shading',
194
- };
195
- const requestedLevel = Number(params.level);
196
- if (!Number.isInteger(requestedLevel) || requestedLevel < 0 || requestedLevel > 4) {
197
- return {
198
- success: false,
199
- error: 'Invalid scalability level. Expected integer between 0 and 4.'
200
- };
201
- }
202
-
203
- const base = categoryBaseMap[params.category] || params.category;
204
-
205
- // Use direct console command to set with highest priority (SetByConsole)
206
- // This avoids conflicts with the scalability system
207
- const setCommand = `sg.${base}Quality ${requestedLevel}`;
208
-
209
- // Apply the console command directly
210
- await this.bridge.executeConsoleCommand(setCommand);
211
-
212
- return {
213
- success: true,
214
- message: `${params.category} quality set to level ${requestedLevel}`,
215
- method: 'Console'
216
- };
217
- }
218
-
219
- // Set resolution scale
220
- async setResolutionScale(params: {
221
- scale: number; // Accepts both percentage (10-200) and multiplier (0.1-2.0)
222
- }) {
223
- // Validate input
224
- if (params.scale === undefined || params.scale === null || isNaN(params.scale)) {
225
- return { success: false, error: 'Invalid scale parameter' };
226
- }
227
-
228
- // Intelligently detect if scale is a percentage (10-200) or multiplier (0.1-2.0)
229
- // If scale >= 10, assume it's already a percentage value
230
- let percentage: number;
231
- if (params.scale >= 10) {
232
- // User passed percentage directly (e.g., 100 for 100%)
233
- percentage = Math.round(params.scale);
234
- } else {
235
- // User passed multiplier (e.g., 1.0 for 100%)
236
- percentage = Math.round(params.scale * 100);
237
- }
238
-
239
- // Clamp to Unreal's valid range (10-200%)
240
- const finalPercentage = Math.max(10, Math.min(200, percentage));
241
-
242
- if (this.automationBridge) {
243
- try {
244
- const response = await this.automationBridge.sendAutomationRequest('set_resolution_scale', { scale: finalPercentage });
245
-
246
- if (response.success) return { success: true, message: `Resolution scale set to ${finalPercentage}% (bridge)`, actualScale: finalPercentage / 100 };
247
- } catch (_e) {
248
- // Fallback
249
- }
250
- }
251
-
252
- const command = `r.ScreenPercentage ${finalPercentage}`;
253
-
254
- try {
255
- await this.bridge.executeConsoleCommand(command);
256
- return {
257
- success: true,
258
- message: `Resolution scale set to ${finalPercentage}%`,
259
- actualScale: finalPercentage / 100
260
- };
261
- } catch (e) {
262
- return { success: false, error: `Failed to set resolution scale: ${e}` };
263
- }
264
- }
265
-
266
- // Enable/disable vsync
267
- async setVSync(params: {
268
- enabled: boolean;
269
- }) {
270
- if (this.automationBridge) {
271
- try {
272
- const response = await this.automationBridge.sendAutomationRequest('set_vsync', { enabled: params.enabled });
273
- if (response.success) return { success: true, message: 'VSync configured (bridge)' };
274
- } catch (_e) {
275
- // Fallback
276
- }
277
- }
278
- const command = `r.VSync ${params.enabled ? 1 : 0}`;
279
- return this.bridge.executeConsoleCommand(command);
280
- }
281
-
282
- // Set frame rate limit
283
- async setFrameRateLimit(params: {
284
- maxFPS: number; // 0 for unlimited
285
- }) {
286
- if (this.automationBridge) {
287
- try {
288
- const response = await this.automationBridge.sendAutomationRequest('set_frame_rate_limit', { maxFPS: params.maxFPS });
289
- if (response.success) return { success: true, message: 'Max FPS set (bridge)' };
290
- } catch (_e) {
291
- // Fallback
292
- }
293
- }
294
- const command = `t.MaxFPS ${params.maxFPS}`;
295
- return this.bridge.executeConsoleCommand(command);
296
- }
297
-
298
- // Enable GPU timing
299
- async enableGPUTiming(params: {
300
- enabled: boolean;
301
- }) {
302
- // Note: C++ handler doesn't seem to have explicit 'enable_gpu_timing' in the list I saw earlier?
303
- // Checking McpAutomationBridge_PerformanceHandlers.cpp content provided:
304
- // It has: generate_memory_report, start/stop_profiling, show_fps, show_stats, set_scalability, set_resolution_scale, set_vsync, set_frame_rate_limit, configure_nanite, configure_lod.
305
- // IT DOES NOT HAVE enable_gpu_timing.
306
- // So we stick to console command for this one, or add it to C++ later.
307
- // I will NOT add bridge call here to avoid failure since I know it's missing.
308
-
309
- const command = `r.GPUStatsEnabled ${params.enabled ? 1 : 0}`;
310
- return this.bridge.executeConsoleCommand(command);
311
- }
312
-
313
- // Memory report
314
- async generateMemoryReport(params: {
315
- detailed?: boolean;
316
- outputPath?: string;
317
- }) {
318
- // If output path is specified, use Automation Bridge for file writing
319
- if (this.automationBridge) {
320
- try {
321
- const response = await this.automationBridge.sendAutomationRequest('generate_memory_report', {
322
- detailed: params.detailed ?? false,
323
- outputPath: params.outputPath
324
- });
325
-
326
- // Even if no output path, bridge can run the report
327
- if (response.success) {
328
- return { success: true, message: response.message || 'Memory report generated' };
329
- }
330
- } catch (error) {
331
- // Fallback only if no output path (since console can't save to file reliably)
332
- if (params.outputPath) {
333
- return { success: false, error: `Failed to generate memory report: ${error instanceof Error ? error.message : String(error)}` };
334
- }
335
- }
336
- }
337
-
338
- const commands: string[] = [];
339
-
340
- if (params.detailed) {
341
- commands.push('memreport -full');
342
- } else {
343
- commands.push('memreport');
344
- }
345
-
346
- // Writing reports to disk via console is not supported
347
- if (params.outputPath) {
348
- throw new Error('Saving memreport to a file requires Automation Bridge support');
349
- }
350
-
351
- await this.bridge.executeConsoleCommands(commands);
352
-
353
- return { success: true, message: 'Memory report generated' };
354
- }
355
-
356
- // Texture streaming
357
- async configureTextureStreaming(params: {
358
- enabled: boolean;
359
- poolSize?: number; // MB
360
- boostPlayerLocation?: boolean;
361
- }) {
362
- if (this.automationBridge) {
363
- try {
364
- const response = await this.automationBridge.sendAutomationRequest('configure_texture_streaming', {
365
- enabled: params.enabled,
366
- poolSize: params.poolSize,
367
- boostPlayerLocation: params.boostPlayerLocation
368
- });
369
-
370
- if (response.success) return { success: true, message: response.message || 'Texture streaming configured (bridge)' };
371
- } catch (_error) {
372
- // Fallback
373
- }
374
- }
375
-
376
- if (params.boostPlayerLocation && !this.automationBridge) {
377
- throw new Error('Boosting player location for streaming requires Automation Bridge support');
378
- }
379
-
380
- const commands: string[] = [];
381
-
382
- commands.push(`r.TextureStreaming ${params.enabled ? 1 : 0}`);
383
-
384
- if (params.poolSize !== undefined) {
385
- commands.push(`r.Streaming.PoolSize ${params.poolSize}`);
386
- }
387
-
388
- await this.bridge.executeConsoleCommands(commands);
389
-
390
- return { success: true, message: 'Texture streaming configured' };
391
- }
392
-
393
- // LOD settings
394
- async configureLOD(params: {
395
- forceLOD?: number;
396
- lodBias?: number; // skeletal LOD bias (int)
397
- distanceScale?: number; // distance scale (float) applied to both static and skeletal
398
- }) {
399
- if (this.automationBridge) {
400
- try {
401
- const response = await this.automationBridge.sendAutomationRequest('configure_lod', {
402
- forceLOD: params.forceLOD,
403
- lodBias: params.lodBias
404
- // Note: C++ handler doesn't seem to have explicit 'distanceScale'.
405
- // We will stick to console for proper implementation of distanceScale
406
- });
407
-
408
- // If we have distanceScale, we still need to apply it via console as C++ seems to miss it
409
- if (params.distanceScale !== undefined) {
410
- await this.bridge.executeConsoleCommand(`r.StaticMeshLODDistanceScale ${params.distanceScale}`);
411
- await this.bridge.executeConsoleCommand(`r.SkeletalMeshLODDistanceScale ${params.distanceScale}`);
412
- }
413
-
414
- if (response.success) return { success: true, message: 'LOD settings configured' };
415
- } catch (_e) {
416
- // Fallback
417
- }
418
- }
419
-
420
- const commands: string[] = [];
421
-
422
- if (params.forceLOD !== undefined) {
423
- commands.push(`r.ForceLOD ${params.forceLOD}`);
424
- }
425
-
426
- if (params.lodBias !== undefined) {
427
- // Skeletal mesh LOD bias is an integer bias value
428
- commands.push(`r.SkeletalMeshLODBias ${params.lodBias}`);
429
- }
430
-
431
- if (params.distanceScale !== undefined) {
432
- // Apply distance scale to both static and skeletal meshes
433
- commands.push(`r.StaticMeshLODDistanceScale ${params.distanceScale}`);
434
- commands.push(`r.SkeletalMeshLODDistanceScale ${params.distanceScale}`);
435
- }
436
-
437
- await this.bridge.executeConsoleCommands(commands);
438
-
439
- return { success: true, message: 'LOD settings configured' };
440
- }
441
-
442
- // Apply a baseline performance profile (explicit CVar enforcement)
443
- async applyBaselinePerformanceSettings(params?: {
444
- distanceScale?: number; // default 1.0
445
- skeletalBias?: number; // default 0
446
- vsync?: boolean; // default false
447
- maxFPS?: number; // default 60
448
- hzb?: boolean; // default true
449
- }) {
450
- // This is a composite helper, stick to console or individual bridge calls.
451
- // Console is efficient enough for batch cvar setting.
452
- const p = {
453
- distanceScale: params?.distanceScale ?? 1.0,
454
- skeletalBias: params?.skeletalBias ?? 0,
455
- vsync: params?.vsync ?? false,
456
- maxFPS: params?.maxFPS ?? 60,
457
- hzb: params?.hzb ?? true,
458
- };
459
-
460
- const commands = [
461
- `r.StaticMeshLODDistanceScale ${p.distanceScale}`,
462
- `r.SkeletalMeshLODDistanceScale ${p.distanceScale}`,
463
- `r.SkeletalMeshLODBias ${p.skeletalBias}`,
464
- `r.HZBOcclusion ${p.hzb ? 1 : 0}`,
465
- `r.VSync ${p.vsync ? 1 : 0}`,
466
- `t.MaxFPS ${p.maxFPS}`,
467
- ];
468
-
469
- await this.bridge.executeConsoleCommands(commands);
470
-
471
- return { success: true, message: 'Baseline performance settings applied', params: p };
472
- }
473
-
474
- // Draw call optimization
475
- async optimizeDrawCalls(params: {
476
- enableInstancing?: boolean;
477
-
478
- mergeActors?: boolean;
479
- actors?: string[];
480
- }) {
481
- // If merging actors, bridge is required and actors must be provided
482
- if (params.mergeActors) {
483
- if (this.automationBridge) {
484
- try {
485
- const actors = Array.isArray(params.actors)
486
- ? params.actors.filter((name): name is string => typeof name === 'string' && name.length > 0)
487
- : undefined;
488
-
489
- if (!actors || actors.length < 2) {
490
- return {
491
- success: false,
492
- error: 'Merge actors requires an "actors" array with at least 2 valid actor names.'
493
- };
494
- }
495
-
496
- const payload: any = {
497
- enableInstancing: params.enableInstancing,
498
- mergeActors: params.mergeActors,
499
- actors: actors
500
- };
501
-
502
- const response = await this.automationBridge.sendAutomationRequest('merge_actors', payload);
503
-
504
- return response.success
505
- ? { success: true, message: response.message || 'Actors merged for optimization' }
506
- : { success: false, error: response.message || response.error || 'Failed to merge actors' };
507
- } catch (error) {
508
- return { success: false, error: `Failed to merge actors: ${error instanceof Error ? error.message : String(error)}` };
509
- }
510
- }
511
- throw new Error('Actor merging requires Automation Bridge support');
512
- }
513
-
514
- const commands: string[] = [];
515
-
516
- if (params.enableInstancing !== undefined) {
517
- commands.push(`r.MeshDrawCommands.DynamicInstancing ${params.enableInstancing ? 1 : 0}`);
518
- }
519
-
520
- // Avoid using r.RHICmdBypass; it's a low-level debug toggle and not suitable for general batching control
521
-
522
- await this.bridge.executeConsoleCommands(commands);
523
-
524
- return { success: true, message: 'Draw call optimization configured' };
525
- }
526
-
527
- // Occlusion culling
528
- async configureOcclusionCulling(params: {
529
- enabled: boolean;
530
- method?: 'Hardware' | 'Software' | 'Hierarchical';
531
- freezeRendering?: boolean;
532
- }) {
533
- const commands: string[] = [];
534
-
535
- // Enable/disable HZB occlusion (boolean)
536
- commands.push(`r.HZBOcclusion ${params.enabled ? 1 : 0}`);
537
-
538
- // Optional freeze rendering toggle
539
- if (params.freezeRendering !== undefined) {
540
- commands.push(`FreezeRendering ${params.freezeRendering ? 1 : 0}`);
541
- }
542
-
543
- await this.bridge.executeConsoleCommands(commands);
544
-
545
- return { success: true, message: 'Occlusion culling configured' };
546
- }
547
-
548
- // Shader compilation
549
- async optimizeShaders(params: {
550
- compileOnDemand?: boolean;
551
- cacheShaders?: boolean;
552
- reducePermutations?: boolean;
553
- }) {
554
- const commands: string[] = [];
555
-
556
- if (params.compileOnDemand !== undefined) {
557
- commands.push(`r.ShaderDevelopmentMode ${params.compileOnDemand ? 1 : 0}`);
558
- }
559
-
560
- if (params.cacheShaders !== undefined) {
561
- commands.push(`r.ShaderPipelineCache.Enabled ${params.cacheShaders ? 1 : 0}`);
562
- }
563
-
564
- if (params.reducePermutations) {
565
- commands.push('RecompileShaders changed');
566
- }
567
-
568
- await this.bridge.executeConsoleCommands(commands);
569
-
570
- return { success: true, message: 'Shader optimization configured' };
571
- }
572
-
573
- // Nanite settings
574
- async configureNanite(params: {
575
- enabled: boolean;
576
- maxPixelsPerEdge?: number;
577
- streamingPoolSize?: number;
578
- }) {
579
- if (this.automationBridge) {
580
- try {
581
- const response = await this.automationBridge.sendAutomationRequest('configure_nanite', {
582
- enabled: params.enabled,
583
- maxPixelsPerEdge: params.maxPixelsPerEdge,
584
- streamingPoolSize: params.streamingPoolSize
585
- });
586
- // C++ handler snippet only showed `r.Nanite`.
587
- // Checking snippet: `if (CVar) CVar->Set(bEnabled ? 1 : 0);`
588
- // It missed maxPixelsPerEdge and streamingPoolSize in the snippet I read.
589
- // Let's rely on fallback or partial console commands for the extras.
590
- if (params.maxPixelsPerEdge !== undefined) {
591
- await this.bridge.executeConsoleCommand(`r.Nanite.MaxPixelsPerEdge ${params.maxPixelsPerEdge}`);
592
- }
593
- if (params.streamingPoolSize !== undefined) {
594
- await this.bridge.executeConsoleCommand(`r.Nanite.StreamingPoolSize ${params.streamingPoolSize}`);
595
- }
596
-
597
- if (response.success) return { success: true, message: 'Nanite configured' };
598
- } catch (_e) {
599
- // Fallback
600
- }
601
- }
602
-
603
- const commands: string[] = [];
604
-
605
- commands.push(`r.Nanite ${params.enabled ? 1 : 0}`);
606
-
607
- if (params.maxPixelsPerEdge !== undefined) {
608
- commands.push(`r.Nanite.MaxPixelsPerEdge ${params.maxPixelsPerEdge}`);
609
- }
610
-
611
- if (params.streamingPoolSize !== undefined) {
612
- commands.push(`r.Nanite.StreamingPoolSize ${params.streamingPoolSize}`);
613
- }
614
-
615
- await this.bridge.executeConsoleCommands(commands);
616
-
617
- return { success: true, message: 'Nanite configured' };
618
- }
619
-
620
- // World Partition streaming
621
- async configureWorldPartition(params: {
622
- enabled: boolean;
623
- streamingDistance?: number;
624
- cellSize?: number;
625
- }) {
626
- const commands: string[] = [];
627
-
628
- commands.push(`wp.Runtime.EnableStreaming ${params.enabled ? 1 : 0}`);
629
-
630
- if (params.streamingDistance !== undefined) {
631
- commands.push(`wp.Runtime.StreamingDistance ${params.streamingDistance}`);
632
- }
633
-
634
- if (params.cellSize !== undefined) {
635
- commands.push(`wp.Runtime.CellSize ${params.cellSize}`);
636
- }
637
-
638
- await this.bridge.executeConsoleCommands(commands);
639
-
640
- return { success: true, message: 'World Partition configured' };
641
- }
642
-
643
- // Benchmark
644
- async runBenchmark(params: {
645
- duration?: number;
646
- outputPath?: string;
647
- }) {
648
- const duration = params.duration || 60;
649
-
650
- // Start recording and GPU profiling
651
- await this.bridge.executeConsoleCommands(['stat startfile', 'profilegpu']);
652
-
653
- // Wait for the requested duration
654
- await new Promise(resolve => setTimeout(resolve, duration * 1000));
655
-
656
- // Stop recording and clear stats
657
- await this.bridge.executeConsoleCommands(['stat stopfile', 'stat none']);
658
-
659
- return { success: true, message: `Benchmark completed for ${duration} seconds` };
660
- }
661
- }