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,649 +0,0 @@
1
- // Landscape tools for Unreal Engine with UE 5.6 World Partition support
2
- import { UnrealBridge } from '../unreal-bridge.js';
3
- import { AutomationBridge } from '../automation/index.js';
4
- import { ensureVector3 } from '../utils/validation.js';
5
- import { wasmIntegration } from '../wasm/index.js';
6
- import { ILandscapeTools, StandardActionResponse } from '../types/tool-interfaces.js';
7
-
8
- export class LandscapeTools implements ILandscapeTools {
9
- constructor(private bridge: UnrealBridge, private automationBridge?: AutomationBridge) { }
10
-
11
- setAutomationBridge(automationBridge?: AutomationBridge) { this.automationBridge = automationBridge; }
12
-
13
- // Create landscape with World Partition support (UE 5.6)
14
- async createLandscape(params: {
15
- name: string;
16
- location?: [number, number, number];
17
- sizeX?: number;
18
- sizeY?: number;
19
- quadsPerSection?: number;
20
- sectionsPerComponent?: number;
21
- componentCount?: number;
22
- materialPath?: string;
23
- // World Partition specific (UE 5.6)
24
- enableWorldPartition?: boolean;
25
- runtimeGrid?: string;
26
- isSpatiallyLoaded?: boolean;
27
- dataLayers?: string[];
28
- }): Promise<StandardActionResponse> {
29
- const name = params.name?.trim();
30
- if (!name) {
31
- return { success: false, error: 'Landscape name is required' };
32
- }
33
- if (typeof params.sizeX === 'number' && params.sizeX <= 0) {
34
- return {
35
- success: false,
36
- error: 'Landscape sizeX must be a positive number'
37
- };
38
- }
39
- if (typeof params.sizeY === 'number' && params.sizeY <= 0) {
40
- return {
41
- success: false,
42
- error: 'Landscape sizeY must be a positive number'
43
- };
44
- }
45
-
46
- if (!this.automationBridge) {
47
- throw new Error('Automation Bridge not available. Landscape operations require plugin support.');
48
- }
49
-
50
- const [locX, locY, locZ] = ensureVector3(params.location ?? [0, 0, 0], 'landscape location');
51
- // Use WASM vectorAdd for landscape location processing
52
- const zeroVector: [number, number, number] = [0, 0, 0];
53
- const processedLocation = wasmIntegration.vectorAdd(zeroVector, [locX, locY, locZ]);
54
- console.error('[WASM] Using vectorAdd for landscape positioning');
55
- const sectionsPerComponent = Math.max(1, Math.floor(params.sectionsPerComponent ?? 1));
56
- const quadsPerSection = Math.max(1, Math.floor(params.quadsPerSection ?? 63));
57
-
58
- try {
59
- // Map to plugin-native payload shape
60
- const componentsX = Math.max(1, Math.floor((params.componentCount ?? Math.max(1, Math.floor((params.sizeX ?? 1000) / 1000)))));
61
- const componentsY = Math.max(1, Math.floor((params.componentCount ?? Math.max(1, Math.floor((params.sizeY ?? 1000) / 1000)))));
62
- const quadsPerComponent = quadsPerSection; // Plugin uses quadsPerComponent
63
-
64
- const payload: Record<string, unknown> = {
65
- name,
66
- x: processedLocation[0],
67
- y: processedLocation[1],
68
- z: processedLocation[2],
69
- componentsX,
70
- componentsY,
71
- quadsPerComponent,
72
- sectionsPerComponent,
73
- materialPath: params.materialPath || ''
74
- };
75
-
76
- const response = await this.automationBridge.sendAutomationRequest('create_landscape', payload, {
77
- timeoutMs: 60000
78
- });
79
-
80
- if (response.success === false) {
81
- return {
82
- success: false,
83
- error: response.error || response.message || 'Failed to create landscape actor'
84
- };
85
- }
86
-
87
- const result: Record<string, unknown> = {
88
- success: true,
89
- message: response.message || 'Landscape actor created',
90
- landscapeName: response.landscapeName || name,
91
- worldPartition: response.worldPartition ?? params.enableWorldPartition ?? false
92
- };
93
-
94
- if (response.landscapeActor) {
95
- result.landscapeActor = response.landscapeActor;
96
- }
97
- if (response.warnings) {
98
- result.warnings = response.warnings;
99
- }
100
- if (response.details) {
101
- result.details = response.details;
102
- }
103
- if (params.runtimeGrid) {
104
- result.runtimeGrid = params.runtimeGrid;
105
- }
106
- if (typeof params.isSpatiallyLoaded === 'boolean') {
107
- result.spatiallyLoaded = params.isSpatiallyLoaded;
108
- }
109
-
110
- return result as StandardActionResponse;
111
- } catch (error) {
112
- return {
113
- success: false,
114
- error: `Failed to create landscape actor: ${error instanceof Error ? error.message : String(error)}`
115
- };
116
- }
117
- }
118
-
119
-
120
- // Sculpt landscape
121
- async sculptLandscape(params: {
122
- landscapeName: string;
123
- tool: string;
124
- brushSize?: number;
125
- brushFalloff?: number;
126
- strength?: number;
127
- location?: [number, number, number];
128
- radius?: number;
129
- }): Promise<StandardActionResponse> {
130
- const [x, y, z] = ensureVector3(params.location ?? [0, 0, 0], 'sculpt location');
131
-
132
- const tool = (params.tool || '').trim();
133
- const lowerTool = tool.toLowerCase();
134
- const validTools = new Set(['sculpt', 'smooth', 'flatten', 'ramp', 'erosion', 'hydro', 'noise', 'raise', 'lower']);
135
- const isValidTool = lowerTool.length > 0 && validTools.has(lowerTool);
136
-
137
- if (!isValidTool) {
138
- return {
139
- success: false,
140
- error: `Invalid sculpt tool: ${params.tool}`
141
- };
142
- }
143
-
144
- if (!this.automationBridge) {
145
- throw new Error('Automation Bridge not available. Landscape operations require plugin support.');
146
- }
147
-
148
- const payload = {
149
- landscapeName: params.landscapeName?.trim(),
150
- toolMode: tool, // Map 'tool' to 'toolMode'
151
- brushRadius: params.brushSize ?? params.radius ?? 1000,
152
- brushFalloff: params.brushFalloff ?? 0.5,
153
- strength: params.strength ?? 0.1,
154
- location: { x, y, z }
155
- };
156
-
157
- const response = await this.automationBridge.sendAutomationRequest('sculpt_landscape', payload);
158
-
159
- if (!response.success) {
160
- return {
161
- success: false,
162
- error: response.error || 'Failed to sculpt landscape'
163
- };
164
- }
165
-
166
- return {
167
- success: true,
168
- message: `Sculpting applied to ${params.landscapeName}`,
169
- details: response
170
- } as StandardActionResponse;
171
- }
172
-
173
- // Paint landscape
174
- async paintLandscape(params: {
175
- landscapeName: string;
176
- layerName: string;
177
- position: [number, number, number];
178
- brushSize?: number;
179
- strength?: number;
180
- targetValue?: number;
181
- radius?: number;
182
- density?: number;
183
- }): Promise<StandardActionResponse> {
184
- if (!this.automationBridge) {
185
- throw new Error('Automation Bridge not available.');
186
- }
187
-
188
- const [x, y] = ensureVector3(params.position, 'paint position');
189
- const radius = params.brushSize ?? params.radius ?? 1000;
190
-
191
- // Map brush to a square region for now as C++ only supports region fill
192
- const minX = Math.floor(x - radius);
193
- const maxX = Math.floor(x + radius);
194
- const minY = Math.floor(y - radius);
195
- const maxY = Math.floor(y + radius);
196
-
197
- const payload = {
198
- landscapeName: params.landscapeName?.trim(),
199
- layerName: params.layerName?.trim(),
200
- region: { minX, minY, maxX, maxY },
201
- strength: params.strength ?? 1.0
202
- };
203
-
204
- const response = await this.automationBridge.sendAutomationRequest('paint_landscape_layer', payload);
205
-
206
- if (!response.success) {
207
- return {
208
- success: false,
209
- error: response.error || 'Failed to paint landscape layer'
210
- };
211
- }
212
-
213
- return {
214
- success: true,
215
- message: `Painted layer ${params.layerName}`,
216
- details: response
217
- } as StandardActionResponse;
218
- }
219
-
220
- // Create procedural terrain using ProceduralMeshComponent
221
- async createProceduralTerrain(params: {
222
- name: string;
223
- location?: [number, number, number];
224
- sizeX?: number;
225
- sizeY?: number;
226
- subdivisions?: number;
227
- heightFunction?: string; // Expression for height calculation
228
- material?: string;
229
- settings?: Record<string, unknown>;
230
- }): Promise<StandardActionResponse> {
231
- if (!this.automationBridge) {
232
- throw new Error('Automation Bridge not available. Procedural terrain creation requires plugin support.');
233
- }
234
-
235
- try {
236
- // Combine specific params with generic settings
237
- const payload = {
238
- name: params.name,
239
- location: params.location || [0, 0, 0],
240
- sizeX: params.sizeX || 2000,
241
- sizeY: params.sizeY || 2000,
242
- subdivisions: params.subdivisions || 50,
243
- heightFunction: params.heightFunction || 'math.sin(x/100) * 50 + math.cos(y/100) * 30',
244
- material: params.material,
245
- ...params.settings
246
- };
247
-
248
- const response = await this.automationBridge.sendAutomationRequest('create_procedural_terrain', payload, {
249
- timeoutMs: 120000 // 2 minutes for mesh generation
250
- });
251
-
252
- if (response.success === false) {
253
- return {
254
- success: false,
255
- error: response.error || response.message || 'Failed to create procedural terrain',
256
- message: response.message || 'Failed to create procedural terrain'
257
- };
258
- }
259
-
260
- const result = response.result as any;
261
- return {
262
- success: true,
263
- message: response.message || `Created procedural terrain '${params.name}'`,
264
- actorName: result?.actor_name,
265
- vertices: result?.vertices,
266
- triangles: result?.triangles,
267
- size: result?.size,
268
- subdivisions: result?.subdivisions,
269
- details: result
270
- } as StandardActionResponse;
271
- } catch (error) {
272
- return {
273
- success: false,
274
- error: `Failed to create procedural terrain: ${error instanceof Error ? error.message : String(error)}`
275
- };
276
- }
277
- }
278
-
279
- // Create a LandscapeGrassType asset via AutomationBridge
280
- async createLandscapeGrassType(params: {
281
- name: string;
282
- meshPath: string; // Normalized parameter name (was path/staticMesh/meshPath)
283
- density?: number;
284
- minScale?: number;
285
- maxScale?: number;
286
- path?: string; // Legacy support
287
- staticMesh?: string; // Legacy support
288
- }): Promise<StandardActionResponse> {
289
- if (!this.automationBridge) {
290
- throw new Error('Automation Bridge not available. Landscape operations require plugin support.');
291
- }
292
-
293
- const name = typeof params.name === 'string' ? params.name.trim() : '';
294
- if (!name) {
295
- return { success: false, error: 'Grass type name is required' };
296
- }
297
-
298
- // Accept mesh path from multiple fields for compatibility
299
- const meshPathRaw = typeof params.meshPath === 'string' && params.meshPath.trim().length > 0
300
- ? params.meshPath.trim()
301
- : (typeof params.path === 'string' && params.path.trim().length > 0
302
- ? params.path.trim()
303
- : (typeof params.staticMesh === 'string' && params.staticMesh.trim().length > 0
304
- ? params.staticMesh.trim()
305
- : ''));
306
-
307
- if (!meshPathRaw) {
308
- return { success: false, error: 'meshPath is required to create a landscape grass type' };
309
- }
310
-
311
- try {
312
- const response: any = await this.automationBridge.sendAutomationRequest('create_landscape_grass_type', {
313
- name,
314
- meshPath: meshPathRaw,
315
- density: params.density || 1.0,
316
- minScale: params.minScale || 0.8,
317
- maxScale: params.maxScale || 1.2
318
- }, { timeoutMs: 90000 });
319
-
320
- if (response && response.success === false) {
321
- return {
322
- success: false,
323
- error: response.error || response.message || 'Failed to create landscape grass type'
324
- };
325
- }
326
-
327
- const result = response.result as any;
328
- return {
329
- success: true,
330
- message: response?.message || `Landscape grass type '${name}' created`,
331
- assetPath: result?.asset_path || response?.assetPath || response?.asset_path
332
- } as StandardActionResponse;
333
- } catch (error) {
334
- return {
335
- success: false,
336
- error: `Failed to create landscape grass type: ${error instanceof Error ? error.message : String(error)}`
337
- };
338
- }
339
- }
340
-
341
- // Set the material used by an existing landscape actor
342
- async setLandscapeMaterial(params: { landscapeName: string; materialPath: string }): Promise<StandardActionResponse> {
343
- const landscapeName = typeof params.landscapeName === 'string' ? params.landscapeName.trim() : '';
344
- const materialPath = typeof params.materialPath === 'string' ? params.materialPath.trim() : '';
345
-
346
- if (!landscapeName) {
347
- return { success: false, error: 'Landscape name is required' };
348
- }
349
- if (!materialPath) {
350
- return { success: false, error: 'materialPath is required' };
351
- }
352
-
353
- if (!this.automationBridge) {
354
- throw new Error('Automation Bridge not available. Landscape operations require plugin support.');
355
- }
356
-
357
- try {
358
- const response: any = await this.automationBridge.sendAutomationRequest('set_landscape_material', {
359
- landscapeName,
360
- materialPath
361
- }, { timeoutMs: 60000 });
362
-
363
- if (response && response.success === false) {
364
- return {
365
- success: false,
366
- error: response.error || response.message || 'Failed to set landscape material'
367
- };
368
- }
369
-
370
- return {
371
- success: true,
372
- message: response?.message || `Landscape material set on '${landscapeName}'`,
373
- landscapeName: response?.landscapeName || landscapeName,
374
- materialPath: response?.materialPath || materialPath
375
- } as StandardActionResponse;
376
- } catch (error) {
377
- return {
378
- success: false,
379
- error: `Failed to set landscape material: ${error instanceof Error ? error.message : String(error)}`
380
- };
381
- }
382
- }
383
-
384
- // Create landscape grass
385
- async createLandscapeGrass(params: {
386
- landscapeName: string;
387
- grassType: string;
388
- density?: number;
389
- minScale?: number;
390
- maxScale?: number;
391
- randomRotation?: boolean;
392
- }): Promise<StandardActionResponse> {
393
- const commands: string[] = [];
394
-
395
- commands.push(`CreateLandscapeGrass ${params.landscapeName} ${params.grassType}`);
396
-
397
- if (params.density !== undefined) {
398
- commands.push(`SetGrassDensity ${params.grassType} ${params.density}`);
399
- }
400
-
401
- if (params.minScale !== undefined && params.maxScale !== undefined) {
402
- commands.push(`SetGrassScale ${params.grassType} ${params.minScale} ${params.maxScale}`);
403
- }
404
-
405
- if (params.randomRotation !== undefined) {
406
- commands.push(`SetGrassRandomRotation ${params.grassType} ${params.randomRotation}`);
407
- }
408
-
409
- await this.bridge.executeConsoleCommands(commands);
410
-
411
- return { success: true, message: `Grass type ${params.grassType} created on landscape` };
412
- }
413
-
414
- // Landscape collision
415
- async updateLandscapeCollision(params: {
416
- landscapeName: string;
417
- collisionMipLevel?: number;
418
- simpleCollision?: boolean;
419
- }): Promise<StandardActionResponse> {
420
- const commands: string[] = [];
421
-
422
- if (params.collisionMipLevel !== undefined) {
423
- commands.push(`SetLandscapeCollisionMipLevel ${params.landscapeName} ${params.collisionMipLevel}`);
424
- }
425
-
426
- if (params.simpleCollision !== undefined) {
427
- commands.push(`SetLandscapeSimpleCollision ${params.landscapeName} ${params.simpleCollision}`);
428
- }
429
-
430
- commands.push(`UpdateLandscapeCollision ${params.landscapeName}`);
431
-
432
- await this.bridge.executeConsoleCommands(commands);
433
-
434
- return { success: true, message: 'Landscape collision updated' };
435
- }
436
-
437
- // Retopologize landscape
438
- async retopologizeLandscape(params: {
439
- landscapeName: string;
440
- targetTriangleCount?: number;
441
- preserveDetails?: boolean;
442
- }): Promise<StandardActionResponse> {
443
- const commands: string[] = [];
444
-
445
- if (params.targetTriangleCount !== undefined) {
446
- commands.push(`SetRetopologizeTarget ${params.targetTriangleCount}`);
447
- }
448
-
449
- if (params.preserveDetails !== undefined) {
450
- commands.push(`SetRetopologizePreserveDetails ${params.preserveDetails}`);
451
- }
452
-
453
- commands.push(`RetopologizeLandscape ${params.landscapeName}`);
454
-
455
- await this.bridge.executeConsoleCommands(commands);
456
-
457
- return { success: true, message: 'Landscape retopologized' };
458
- }
459
-
460
- // Create water body
461
- async createWaterBody(params: {
462
- type: 'Ocean' | 'Lake' | 'River' | 'Stream';
463
- name: string;
464
- location?: [number, number, number];
465
- size?: [number, number];
466
- depth?: number;
467
- }): Promise<StandardActionResponse> {
468
- const loc = params.location || [0, 0, 0];
469
- const size = params.size || [1000, 1000];
470
- const depth = params.depth || 100;
471
-
472
- const command = `CreateWaterBody ${params.type} ${params.name} ${loc.join(' ')} ${size.join(' ')} ${depth}`;
473
-
474
- return this.bridge.executeConsoleCommand(command);
475
- }
476
-
477
- // World Partition support for landscapes (UE 5.6)
478
- async configureWorldPartition(params: {
479
- landscapeName: string;
480
- enableSpatialLoading?: boolean;
481
- runtimeGrid?: string;
482
- dataLayers?: string[];
483
- streamingDistance?: number;
484
- }): Promise<StandardActionResponse> {
485
- if (!this.automationBridge) {
486
- throw new Error('Automation Bridge not available. World Partition operations require plugin support.');
487
- }
488
-
489
- try {
490
- const response = await this.automationBridge.sendAutomationRequest('configure_landscape_world_partition', {
491
- landscapeName: params.landscapeName,
492
- enableSpatialLoading: params.enableSpatialLoading,
493
- runtimeGrid: params.runtimeGrid || '',
494
- dataLayers: params.dataLayers || [],
495
- streamingDistance: params.streamingDistance
496
- }, {
497
- timeoutMs: 60000
498
- });
499
-
500
- if (response.success === false) {
501
- return {
502
- success: false,
503
- error: response.error || response.message || 'World Partition configuration failed'
504
- };
505
- }
506
-
507
- return {
508
- success: true,
509
- message: response.message || 'World Partition configured',
510
- changes: response.changes
511
- } as StandardActionResponse;
512
- } catch (err) {
513
- return { success: false, error: `Failed to configure World Partition: ${err instanceof Error ? err.message : String(err)}` };
514
- }
515
- }
516
-
517
- // Set landscape data layers (UE 5.6)
518
- async setDataLayers(params: {
519
- landscapeName: string;
520
- dataLayerNames: string[];
521
- operation: 'add' | 'remove' | 'set';
522
- }): Promise<StandardActionResponse> {
523
- try {
524
- const commands = [];
525
-
526
- // Use console commands for data layer management
527
- if (params.operation === 'set' || params.operation === 'add') {
528
- for (const layerName of params.dataLayerNames) {
529
- commands.push(`wp.Runtime.SetDataLayerRuntimeState Loaded ${layerName}`);
530
- }
531
- } else if (params.operation === 'remove') {
532
- for (const layerName of params.dataLayerNames) {
533
- commands.push(`wp.Runtime.SetDataLayerRuntimeState Unloaded ${layerName}`);
534
- }
535
- }
536
-
537
- // Execute commands
538
- await this.bridge.executeConsoleCommands(commands);
539
-
540
- return {
541
- success: true,
542
- message: `Data layers ${params.operation === 'add' ? 'added' : params.operation === 'remove' ? 'removed' : 'set'} for landscape`,
543
- layers: params.dataLayerNames
544
- } as StandardActionResponse;
545
- } catch (err) {
546
- return { success: false, error: `Failed to manage data layers: ${err}` };
547
- }
548
- }
549
-
550
- // Configure landscape streaming cells (UE 5.6 World Partition)
551
- async configureStreamingCells(params: {
552
- landscapeName: string;
553
- cellSize?: number;
554
- loadingRange?: number;
555
- enableHLOD?: boolean;
556
- }): Promise<StandardActionResponse> {
557
- const commands = [];
558
-
559
- // World Partition runtime commands
560
- if (params.loadingRange !== undefined) {
561
- commands.push(`wp.Runtime.OverrideRuntimeSpatialHashLoadingRange -grid=0 -range=${params.loadingRange}`);
562
- }
563
-
564
- if (params.enableHLOD !== undefined) {
565
- commands.push(`wp.Runtime.HLOD ${params.enableHLOD ? '1' : '0'}`);
566
- }
567
-
568
- // Debug visualization commands
569
- commands.push('wp.Runtime.ToggleDrawRuntimeHash2D'); // Show 2D grid
570
-
571
- try {
572
- await this.bridge.executeConsoleCommands(commands);
573
-
574
- return {
575
- success: true,
576
- message: 'Streaming cells configured for World Partition',
577
- settings: {
578
- cellSize: params.cellSize,
579
- loadingRange: params.loadingRange,
580
- hlod: params.enableHLOD
581
- }
582
- } as StandardActionResponse;
583
- } catch (err) {
584
- return { success: false, error: `Failed to configure streaming cells: ${err}` };
585
- }
586
- }
587
-
588
- // Modify landscape heightmap
589
- async modifyHeightmap(params: {
590
- landscapeName: string;
591
- heightData: number[];
592
- minX: number;
593
- minY: number;
594
- maxX: number;
595
- maxY: number;
596
- updateNormals?: boolean;
597
- }): Promise<StandardActionResponse> {
598
- if (!this.automationBridge) {
599
- throw new Error('Automation Bridge not available. Landscape operations require plugin support.');
600
- }
601
-
602
- const { landscapeName, heightData, minX, minY, maxX, maxY } = params;
603
-
604
- if (!landscapeName) {
605
- return { success: false, error: 'Landscape name is required' };
606
- }
607
- if (!heightData || !Array.isArray(heightData) || heightData.length === 0) {
608
- return { success: false, error: 'heightData array is required' };
609
- }
610
-
611
- const width = maxX - minX + 1;
612
- const height = maxY - minY + 1;
613
- if (heightData.length !== width * height) {
614
- return {
615
- success: false,
616
- error: `Height data length (${heightData.length}) does not match region dimensions (${width}x${height} = ${width * height})`
617
- };
618
- }
619
-
620
- try {
621
- const response = await this.automationBridge.sendAutomationRequest('modify_heightmap', {
622
- landscapeName,
623
- heightData,
624
- minX,
625
- minY,
626
- maxX,
627
- maxY,
628
- updateNormals: params.updateNormals ?? true
629
- }, {
630
- timeoutMs: 60000
631
- });
632
-
633
- if (response.success === false) {
634
- return {
635
- success: false,
636
- error: response.error || response.message || 'Failed to modify heightmap'
637
- };
638
- }
639
-
640
- return {
641
- success: true,
642
- message: response.message || 'Heightmap modified successfully'
643
- } as StandardActionResponse;
644
- } catch (err) {
645
- return { success: false, error: `Failed to modify heightmap: ${err instanceof Error ? err.message : String(err)}` };
646
- }
647
- }
648
- }
649
-