unreal-engine-mcp-server 0.4.7 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/.env.example +26 -0
  2. package/.env.production +38 -7
  3. package/.eslintrc.json +0 -54
  4. package/.eslintrc.override.json +8 -0
  5. package/.github/ISSUE_TEMPLATE/bug_report.yml +94 -0
  6. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  7. package/.github/ISSUE_TEMPLATE/feature_request.yml +56 -0
  8. package/.github/copilot-instructions.md +478 -45
  9. package/.github/dependabot.yml +19 -0
  10. package/.github/labeler.yml +24 -0
  11. package/.github/labels.yml +70 -0
  12. package/.github/pull_request_template.md +42 -0
  13. package/.github/release-drafter-config.yml +51 -0
  14. package/.github/workflows/auto-merge.yml +38 -0
  15. package/.github/workflows/ci.yml +38 -0
  16. package/.github/workflows/dependency-review.yml +17 -0
  17. package/.github/workflows/gemini-issue-triage.yml +172 -0
  18. package/.github/workflows/greetings.yml +27 -0
  19. package/.github/workflows/labeler.yml +17 -0
  20. package/.github/workflows/links.yml +80 -0
  21. package/.github/workflows/pr-size-labeler.yml +137 -0
  22. package/.github/workflows/publish-mcp.yml +13 -7
  23. package/.github/workflows/release-drafter.yml +23 -0
  24. package/.github/workflows/release.yml +112 -0
  25. package/.github/workflows/semantic-pull-request.yml +35 -0
  26. package/.github/workflows/smoke-test.yml +36 -0
  27. package/.github/workflows/stale.yml +28 -0
  28. package/CHANGELOG.md +338 -31
  29. package/CONTRIBUTING.md +140 -0
  30. package/GEMINI.md +115 -0
  31. package/Public/Plugin_setup_guide.mp4 +0 -0
  32. package/README.md +189 -128
  33. package/claude_desktop_config_example.json +7 -6
  34. package/dist/automation/bridge.d.ts +50 -0
  35. package/dist/automation/bridge.js +452 -0
  36. package/dist/automation/connection-manager.d.ts +23 -0
  37. package/dist/automation/connection-manager.js +107 -0
  38. package/dist/automation/handshake.d.ts +11 -0
  39. package/dist/automation/handshake.js +89 -0
  40. package/dist/automation/index.d.ts +3 -0
  41. package/dist/automation/index.js +3 -0
  42. package/dist/automation/message-handler.d.ts +12 -0
  43. package/dist/automation/message-handler.js +149 -0
  44. package/dist/automation/request-tracker.d.ts +25 -0
  45. package/dist/automation/request-tracker.js +98 -0
  46. package/dist/automation/types.d.ts +130 -0
  47. package/dist/automation/types.js +2 -0
  48. package/dist/cli.js +32 -5
  49. package/dist/config.d.ts +26 -0
  50. package/dist/config.js +59 -0
  51. package/dist/constants.d.ts +16 -0
  52. package/dist/constants.js +16 -0
  53. package/dist/graphql/loaders.d.ts +64 -0
  54. package/dist/graphql/loaders.js +117 -0
  55. package/dist/graphql/resolvers.d.ts +268 -0
  56. package/dist/graphql/resolvers.js +746 -0
  57. package/dist/graphql/schema.d.ts +5 -0
  58. package/dist/graphql/schema.js +437 -0
  59. package/dist/graphql/server.d.ts +26 -0
  60. package/dist/graphql/server.js +117 -0
  61. package/dist/graphql/types.d.ts +9 -0
  62. package/dist/graphql/types.js +2 -0
  63. package/dist/handlers/resource-handlers.d.ts +20 -0
  64. package/dist/handlers/resource-handlers.js +180 -0
  65. package/dist/index.d.ts +33 -18
  66. package/dist/index.js +130 -619
  67. package/dist/resources/actors.d.ts +17 -12
  68. package/dist/resources/actors.js +56 -76
  69. package/dist/resources/assets.d.ts +6 -14
  70. package/dist/resources/assets.js +115 -147
  71. package/dist/resources/levels.d.ts +13 -13
  72. package/dist/resources/levels.js +25 -34
  73. package/dist/server/resource-registry.d.ts +20 -0
  74. package/dist/server/resource-registry.js +37 -0
  75. package/dist/server/tool-registry.d.ts +23 -0
  76. package/dist/server/tool-registry.js +322 -0
  77. package/dist/server-setup.d.ts +20 -0
  78. package/dist/server-setup.js +71 -0
  79. package/dist/services/health-monitor.d.ts +34 -0
  80. package/dist/services/health-monitor.js +105 -0
  81. package/dist/services/metrics-server.d.ts +11 -0
  82. package/dist/services/metrics-server.js +105 -0
  83. package/dist/tools/actors.d.ts +163 -9
  84. package/dist/tools/actors.js +356 -311
  85. package/dist/tools/animation.d.ts +135 -4
  86. package/dist/tools/animation.js +510 -411
  87. package/dist/tools/assets.d.ts +75 -29
  88. package/dist/tools/assets.js +265 -284
  89. package/dist/tools/audio.d.ts +102 -42
  90. package/dist/tools/audio.js +272 -685
  91. package/dist/tools/base-tool.d.ts +17 -0
  92. package/dist/tools/base-tool.js +46 -0
  93. package/dist/tools/behavior-tree.d.ts +94 -0
  94. package/dist/tools/behavior-tree.js +39 -0
  95. package/dist/tools/blueprint.d.ts +208 -126
  96. package/dist/tools/blueprint.js +685 -832
  97. package/dist/tools/consolidated-tool-definitions.d.ts +5462 -1781
  98. package/dist/tools/consolidated-tool-definitions.js +829 -496
  99. package/dist/tools/consolidated-tool-handlers.d.ts +2 -1
  100. package/dist/tools/consolidated-tool-handlers.js +198 -1027
  101. package/dist/tools/debug.d.ts +143 -85
  102. package/dist/tools/debug.js +234 -180
  103. package/dist/tools/dynamic-handler-registry.d.ts +13 -0
  104. package/dist/tools/dynamic-handler-registry.js +23 -0
  105. package/dist/tools/editor.d.ts +30 -83
  106. package/dist/tools/editor.js +247 -244
  107. package/dist/tools/engine.d.ts +10 -4
  108. package/dist/tools/engine.js +13 -5
  109. package/dist/tools/environment.d.ts +30 -0
  110. package/dist/tools/environment.js +267 -0
  111. package/dist/tools/foliage.d.ts +65 -99
  112. package/dist/tools/foliage.js +221 -331
  113. package/dist/tools/handlers/actor-handlers.d.ts +3 -0
  114. package/dist/tools/handlers/actor-handlers.js +227 -0
  115. package/dist/tools/handlers/animation-handlers.d.ts +3 -0
  116. package/dist/tools/handlers/animation-handlers.js +185 -0
  117. package/dist/tools/handlers/argument-helper.d.ts +16 -0
  118. package/dist/tools/handlers/argument-helper.js +80 -0
  119. package/dist/tools/handlers/asset-handlers.d.ts +3 -0
  120. package/dist/tools/handlers/asset-handlers.js +496 -0
  121. package/dist/tools/handlers/audio-handlers.d.ts +3 -0
  122. package/dist/tools/handlers/audio-handlers.js +166 -0
  123. package/dist/tools/handlers/blueprint-handlers.d.ts +4 -0
  124. package/dist/tools/handlers/blueprint-handlers.js +358 -0
  125. package/dist/tools/handlers/common-handlers.d.ts +14 -0
  126. package/dist/tools/handlers/common-handlers.js +56 -0
  127. package/dist/tools/handlers/editor-handlers.d.ts +3 -0
  128. package/dist/tools/handlers/editor-handlers.js +119 -0
  129. package/dist/tools/handlers/effect-handlers.d.ts +3 -0
  130. package/dist/tools/handlers/effect-handlers.js +171 -0
  131. package/dist/tools/handlers/environment-handlers.d.ts +3 -0
  132. package/dist/tools/handlers/environment-handlers.js +170 -0
  133. package/dist/tools/handlers/graph-handlers.d.ts +3 -0
  134. package/dist/tools/handlers/graph-handlers.js +90 -0
  135. package/dist/tools/handlers/input-handlers.d.ts +3 -0
  136. package/dist/tools/handlers/input-handlers.js +21 -0
  137. package/dist/tools/handlers/inspect-handlers.d.ts +3 -0
  138. package/dist/tools/handlers/inspect-handlers.js +383 -0
  139. package/dist/tools/handlers/level-handlers.d.ts +3 -0
  140. package/dist/tools/handlers/level-handlers.js +237 -0
  141. package/dist/tools/handlers/lighting-handlers.d.ts +3 -0
  142. package/dist/tools/handlers/lighting-handlers.js +144 -0
  143. package/dist/tools/handlers/performance-handlers.d.ts +3 -0
  144. package/dist/tools/handlers/performance-handlers.js +130 -0
  145. package/dist/tools/handlers/pipeline-handlers.d.ts +3 -0
  146. package/dist/tools/handlers/pipeline-handlers.js +110 -0
  147. package/dist/tools/handlers/sequence-handlers.d.ts +3 -0
  148. package/dist/tools/handlers/sequence-handlers.js +376 -0
  149. package/dist/tools/handlers/system-handlers.d.ts +4 -0
  150. package/dist/tools/handlers/system-handlers.js +506 -0
  151. package/dist/tools/input.d.ts +19 -0
  152. package/dist/tools/input.js +89 -0
  153. package/dist/tools/introspection.d.ts +103 -40
  154. package/dist/tools/introspection.js +425 -568
  155. package/dist/tools/landscape.d.ts +54 -93
  156. package/dist/tools/landscape.js +284 -409
  157. package/dist/tools/level.d.ts +66 -27
  158. package/dist/tools/level.js +647 -675
  159. package/dist/tools/lighting.d.ts +77 -38
  160. package/dist/tools/lighting.js +445 -943
  161. package/dist/tools/logs.d.ts +3 -3
  162. package/dist/tools/logs.js +5 -57
  163. package/dist/tools/materials.d.ts +91 -24
  164. package/dist/tools/materials.js +194 -118
  165. package/dist/tools/niagara.d.ts +149 -39
  166. package/dist/tools/niagara.js +267 -182
  167. package/dist/tools/performance.d.ts +27 -13
  168. package/dist/tools/performance.js +203 -122
  169. package/dist/tools/physics.d.ts +32 -77
  170. package/dist/tools/physics.js +175 -582
  171. package/dist/tools/property-dictionary.d.ts +13 -0
  172. package/dist/tools/property-dictionary.js +82 -0
  173. package/dist/tools/sequence.d.ts +85 -60
  174. package/dist/tools/sequence.js +208 -747
  175. package/dist/tools/tool-definition-utils.d.ts +59 -0
  176. package/dist/tools/tool-definition-utils.js +35 -0
  177. package/dist/tools/ui.d.ts +64 -34
  178. package/dist/tools/ui.js +134 -214
  179. package/dist/types/automation-responses.d.ts +115 -0
  180. package/dist/types/automation-responses.js +2 -0
  181. package/dist/types/env.d.ts +0 -3
  182. package/dist/types/env.js +0 -7
  183. package/dist/types/responses.d.ts +249 -0
  184. package/dist/types/responses.js +2 -0
  185. package/dist/types/tool-interfaces.d.ts +898 -0
  186. package/dist/types/tool-interfaces.js +2 -0
  187. package/dist/types/tool-types.d.ts +183 -19
  188. package/dist/types/tool-types.js +0 -4
  189. package/dist/unreal-bridge.d.ts +24 -131
  190. package/dist/unreal-bridge.js +364 -1506
  191. package/dist/utils/command-validator.d.ts +9 -0
  192. package/dist/utils/command-validator.js +68 -0
  193. package/dist/utils/elicitation.d.ts +1 -1
  194. package/dist/utils/elicitation.js +12 -15
  195. package/dist/utils/error-handler.d.ts +2 -51
  196. package/dist/utils/error-handler.js +11 -87
  197. package/dist/utils/ini-reader.d.ts +3 -0
  198. package/dist/utils/ini-reader.js +69 -0
  199. package/dist/utils/logger.js +9 -6
  200. package/dist/utils/normalize.d.ts +3 -0
  201. package/dist/utils/normalize.js +56 -0
  202. package/dist/utils/path-security.d.ts +2 -0
  203. package/dist/utils/path-security.js +24 -0
  204. package/dist/utils/response-factory.d.ts +7 -0
  205. package/dist/utils/response-factory.js +27 -0
  206. package/dist/utils/response-validator.d.ts +3 -24
  207. package/dist/utils/response-validator.js +130 -81
  208. package/dist/utils/result-helpers.d.ts +4 -5
  209. package/dist/utils/result-helpers.js +15 -16
  210. package/dist/utils/safe-json.js +5 -11
  211. package/dist/utils/unreal-command-queue.d.ts +24 -0
  212. package/dist/utils/unreal-command-queue.js +120 -0
  213. package/dist/utils/validation.d.ts +0 -40
  214. package/dist/utils/validation.js +1 -78
  215. package/dist/wasm/index.d.ts +70 -0
  216. package/dist/wasm/index.js +535 -0
  217. package/docs/GraphQL-API.md +888 -0
  218. package/docs/Migration-Guide-v0.5.0.md +684 -0
  219. package/docs/Roadmap.md +53 -0
  220. package/docs/WebAssembly-Integration.md +628 -0
  221. package/docs/editor-plugin-extension.md +370 -0
  222. package/docs/handler-mapping.md +242 -0
  223. package/docs/native-automation-progress.md +128 -0
  224. package/docs/testing-guide.md +423 -0
  225. package/mcp-config-example.json +6 -6
  226. package/package.json +67 -28
  227. package/plugins/McpAutomationBridge/Config/FilterPlugin.ini +8 -0
  228. package/plugins/McpAutomationBridge/McpAutomationBridge.uplugin +64 -0
  229. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/McpAutomationBridge.Build.cs +189 -0
  230. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.cpp +22 -0
  231. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.h +30 -0
  232. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeHelpers.h +1983 -0
  233. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeModule.cpp +72 -0
  234. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSettings.cpp +46 -0
  235. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSubsystem.cpp +581 -0
  236. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AnimationHandlers.cpp +2394 -0
  237. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetQueryHandlers.cpp +300 -0
  238. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetWorkflowHandlers.cpp +2807 -0
  239. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AudioHandlers.cpp +1087 -0
  240. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BehaviorTreeHandlers.cpp +488 -0
  241. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.cpp +643 -0
  242. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.h +31 -0
  243. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintGraphHandlers.cpp +1184 -0
  244. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers.cpp +5652 -0
  245. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers_List.cpp +152 -0
  246. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ControlHandlers.cpp +2614 -0
  247. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_DebugHandlers.cpp +42 -0
  248. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EditorFunctionHandlers.cpp +1237 -0
  249. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EffectHandlers.cpp +1701 -0
  250. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EnvironmentHandlers.cpp +2145 -0
  251. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_FoliageHandlers.cpp +954 -0
  252. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InputHandlers.cpp +209 -0
  253. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InsightsHandlers.cpp +41 -0
  254. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LandscapeHandlers.cpp +1164 -0
  255. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LevelHandlers.cpp +762 -0
  256. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LightingHandlers.cpp +634 -0
  257. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LogHandlers.cpp +136 -0
  258. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_MaterialGraphHandlers.cpp +494 -0
  259. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraGraphHandlers.cpp +278 -0
  260. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraHandlers.cpp +625 -0
  261. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PerformanceHandlers.cpp +401 -0
  262. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PipelineHandlers.cpp +67 -0
  263. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ProcessRequest.cpp +735 -0
  264. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PropertyHandlers.cpp +2634 -0
  265. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_RenderHandlers.cpp +189 -0
  266. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.cpp +917 -0
  267. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.h +39 -0
  268. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequenceHandlers.cpp +2670 -0
  269. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequencerHandlers.cpp +519 -0
  270. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_TestHandlers.cpp +38 -0
  271. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_UiHandlers.cpp +668 -0
  272. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_WorldPartitionHandlers.cpp +346 -0
  273. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.cpp +1330 -0
  274. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.h +149 -0
  275. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpConnectionManager.cpp +783 -0
  276. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSettings.h +115 -0
  277. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSubsystem.h +796 -0
  278. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpConnectionManager.h +117 -0
  279. package/scripts/check-unreal-connection.mjs +19 -0
  280. package/scripts/clean-tmp.js +23 -0
  281. package/scripts/patch-wasm.js +26 -0
  282. package/scripts/run-all-tests.mjs +136 -0
  283. package/scripts/smoke-test.ts +94 -0
  284. package/scripts/sync-mcp-plugin.js +143 -0
  285. package/scripts/test-no-plugin-alternates.mjs +113 -0
  286. package/scripts/validate-server.js +46 -0
  287. package/scripts/verify-automation-bridge.js +200 -0
  288. package/server.json +58 -21
  289. package/src/automation/bridge.ts +558 -0
  290. package/src/automation/connection-manager.ts +130 -0
  291. package/src/automation/handshake.ts +99 -0
  292. package/src/automation/index.ts +2 -0
  293. package/src/automation/message-handler.ts +167 -0
  294. package/src/automation/request-tracker.ts +123 -0
  295. package/src/automation/types.ts +107 -0
  296. package/src/cli.ts +33 -6
  297. package/src/config.ts +73 -0
  298. package/src/constants.ts +19 -0
  299. package/src/graphql/loaders.ts +244 -0
  300. package/src/graphql/resolvers.ts +1008 -0
  301. package/src/graphql/schema.ts +452 -0
  302. package/src/graphql/server.ts +156 -0
  303. package/src/graphql/types.ts +10 -0
  304. package/src/handlers/resource-handlers.ts +186 -0
  305. package/src/index.ts +166 -664
  306. package/src/resources/actors.ts +58 -76
  307. package/src/resources/assets.ts +148 -134
  308. package/src/resources/levels.ts +28 -33
  309. package/src/server/resource-registry.ts +47 -0
  310. package/src/server/tool-registry.ts +354 -0
  311. package/src/server-setup.ts +114 -0
  312. package/src/services/health-monitor.ts +132 -0
  313. package/src/services/metrics-server.ts +142 -0
  314. package/src/tools/actors.ts +426 -323
  315. package/src/tools/animation.ts +672 -461
  316. package/src/tools/assets.ts +364 -289
  317. package/src/tools/audio.ts +323 -766
  318. package/src/tools/base-tool.ts +52 -0
  319. package/src/tools/behavior-tree.ts +45 -0
  320. package/src/tools/blueprint.ts +792 -970
  321. package/src/tools/consolidated-tool-definitions.ts +993 -515
  322. package/src/tools/consolidated-tool-handlers.ts +258 -1146
  323. package/src/tools/debug.ts +292 -187
  324. package/src/tools/dynamic-handler-registry.ts +33 -0
  325. package/src/tools/editor.ts +329 -253
  326. package/src/tools/engine.ts +14 -3
  327. package/src/tools/environment.ts +281 -0
  328. package/src/tools/foliage.ts +330 -392
  329. package/src/tools/handlers/actor-handlers.ts +265 -0
  330. package/src/tools/handlers/animation-handlers.ts +237 -0
  331. package/src/tools/handlers/argument-helper.ts +142 -0
  332. package/src/tools/handlers/asset-handlers.ts +532 -0
  333. package/src/tools/handlers/audio-handlers.ts +194 -0
  334. package/src/tools/handlers/blueprint-handlers.ts +380 -0
  335. package/src/tools/handlers/common-handlers.ts +87 -0
  336. package/src/tools/handlers/editor-handlers.ts +123 -0
  337. package/src/tools/handlers/effect-handlers.ts +220 -0
  338. package/src/tools/handlers/environment-handlers.ts +183 -0
  339. package/src/tools/handlers/graph-handlers.ts +116 -0
  340. package/src/tools/handlers/input-handlers.ts +28 -0
  341. package/src/tools/handlers/inspect-handlers.ts +450 -0
  342. package/src/tools/handlers/level-handlers.ts +252 -0
  343. package/src/tools/handlers/lighting-handlers.ts +147 -0
  344. package/src/tools/handlers/performance-handlers.ts +132 -0
  345. package/src/tools/handlers/pipeline-handlers.ts +127 -0
  346. package/src/tools/handlers/sequence-handlers.ts +415 -0
  347. package/src/tools/handlers/system-handlers.ts +564 -0
  348. package/src/tools/input.ts +101 -0
  349. package/src/tools/introspection.ts +493 -584
  350. package/src/tools/landscape.ts +418 -507
  351. package/src/tools/level.ts +786 -708
  352. package/src/tools/lighting.ts +588 -984
  353. package/src/tools/logs.ts +9 -57
  354. package/src/tools/materials.ts +237 -121
  355. package/src/tools/niagara.ts +335 -168
  356. package/src/tools/performance.ts +320 -169
  357. package/src/tools/physics.ts +274 -613
  358. package/src/tools/property-dictionary.ts +98 -0
  359. package/src/tools/sequence.ts +276 -820
  360. package/src/tools/tool-definition-utils.ts +35 -0
  361. package/src/tools/ui.ts +205 -283
  362. package/src/types/automation-responses.ts +119 -0
  363. package/src/types/env.ts +0 -10
  364. package/src/types/responses.ts +355 -0
  365. package/src/types/tool-interfaces.ts +250 -0
  366. package/src/types/tool-types.ts +243 -21
  367. package/src/unreal-bridge.ts +460 -1550
  368. package/src/utils/command-validator.ts +76 -0
  369. package/src/utils/elicitation.ts +10 -7
  370. package/src/utils/error-handler.ts +14 -90
  371. package/src/utils/ini-reader.ts +86 -0
  372. package/src/utils/logger.ts +8 -3
  373. package/src/utils/normalize.test.ts +162 -0
  374. package/src/utils/normalize.ts +60 -0
  375. package/src/utils/path-security.ts +43 -0
  376. package/src/utils/response-factory.ts +44 -0
  377. package/src/utils/response-validator.ts +176 -56
  378. package/src/utils/result-helpers.ts +21 -19
  379. package/src/utils/safe-json.test.ts +90 -0
  380. package/src/utils/safe-json.ts +14 -11
  381. package/src/utils/unreal-command-queue.ts +152 -0
  382. package/src/utils/validation.test.ts +184 -0
  383. package/src/utils/validation.ts +4 -1
  384. package/src/wasm/index.ts +838 -0
  385. package/test-server.mjs +100 -0
  386. package/tests/run-unreal-tool-tests.mjs +242 -14
  387. package/tests/test-animation.mjs +369 -0
  388. package/tests/test-asset-advanced.mjs +82 -0
  389. package/tests/test-asset-errors.mjs +35 -0
  390. package/tests/test-asset-graph.mjs +311 -0
  391. package/tests/test-audio.mjs +417 -0
  392. package/tests/test-automation-timeouts.mjs +98 -0
  393. package/tests/test-behavior-tree.mjs +444 -0
  394. package/tests/test-blueprint-graph.mjs +410 -0
  395. package/tests/test-blueprint.mjs +577 -0
  396. package/tests/test-client-mode.mjs +86 -0
  397. package/tests/test-console-command.mjs +56 -0
  398. package/tests/test-control-actor.mjs +425 -0
  399. package/tests/test-control-editor.mjs +112 -0
  400. package/tests/test-graphql.mjs +372 -0
  401. package/tests/test-input.mjs +349 -0
  402. package/tests/test-inspect.mjs +302 -0
  403. package/tests/test-landscape.mjs +316 -0
  404. package/tests/test-lighting.mjs +428 -0
  405. package/tests/test-manage-asset.mjs +438 -0
  406. package/tests/test-manage-level.mjs +89 -0
  407. package/tests/test-materials.mjs +356 -0
  408. package/tests/test-niagara.mjs +185 -0
  409. package/tests/test-no-inline-python.mjs +122 -0
  410. package/tests/test-performance.mjs +539 -0
  411. package/tests/test-plugin-handshake.mjs +82 -0
  412. package/tests/test-runner.mjs +933 -0
  413. package/tests/test-sequence.mjs +104 -0
  414. package/tests/test-system.mjs +96 -0
  415. package/tests/test-wasm.mjs +283 -0
  416. package/tests/test-world-partition.mjs +215 -0
  417. package/tsconfig.json +3 -3
  418. package/vitest.config.ts +35 -0
  419. package/wasm/Cargo.lock +363 -0
  420. package/wasm/Cargo.toml +42 -0
  421. package/wasm/LICENSE +21 -0
  422. package/wasm/README.md +253 -0
  423. package/wasm/src/dependency_resolver.rs +377 -0
  424. package/wasm/src/lib.rs +153 -0
  425. package/wasm/src/property_parser.rs +271 -0
  426. package/wasm/src/transform_math.rs +396 -0
  427. package/wasm/tests/integration.rs +109 -0
  428. package/.github/workflows/smithery-build.yml +0 -29
  429. package/dist/prompts/index.d.ts +0 -21
  430. package/dist/prompts/index.js +0 -217
  431. package/dist/tools/build_environment_advanced.d.ts +0 -65
  432. package/dist/tools/build_environment_advanced.js +0 -633
  433. package/dist/tools/rc.d.ts +0 -110
  434. package/dist/tools/rc.js +0 -437
  435. package/dist/tools/visual.d.ts +0 -40
  436. package/dist/tools/visual.js +0 -282
  437. package/dist/utils/http.d.ts +0 -6
  438. package/dist/utils/http.js +0 -151
  439. package/dist/utils/python-output.d.ts +0 -18
  440. package/dist/utils/python-output.js +0 -290
  441. package/dist/utils/python.d.ts +0 -2
  442. package/dist/utils/python.js +0 -4
  443. package/dist/utils/stdio-redirect.d.ts +0 -2
  444. package/dist/utils/stdio-redirect.js +0 -20
  445. package/docs/unreal-tool-test-cases.md +0 -574
  446. package/smithery.yaml +0 -29
  447. package/src/prompts/index.ts +0 -249
  448. package/src/tools/build_environment_advanced.ts +0 -732
  449. package/src/tools/rc.ts +0 -515
  450. package/src/tools/visual.ts +0 -281
  451. package/src/utils/http.ts +0 -187
  452. package/src/utils/python-output.ts +0 -351
  453. package/src/utils/python.ts +0 -3
  454. package/src/utils/stdio-redirect.ts +0 -18
@@ -0,0 +1,64 @@
1
+ import DataLoader from 'dataloader';
2
+ import type { AutomationBridge } from '../automation/index.js';
3
+ export interface Actor {
4
+ name: string;
5
+ label?: string;
6
+ class?: string;
7
+ path?: string;
8
+ location?: {
9
+ x: number;
10
+ y: number;
11
+ z: number;
12
+ };
13
+ rotation?: {
14
+ pitch: number;
15
+ yaw: number;
16
+ roll: number;
17
+ };
18
+ scale?: {
19
+ x: number;
20
+ y: number;
21
+ z: number;
22
+ };
23
+ tags?: string[];
24
+ }
25
+ export interface Asset {
26
+ name: string;
27
+ path: string;
28
+ class?: string;
29
+ packagePath?: string;
30
+ size?: number;
31
+ }
32
+ export interface Blueprint {
33
+ name: string;
34
+ path: string;
35
+ parentClass?: string;
36
+ variables?: Array<{
37
+ name: string;
38
+ type: string;
39
+ defaultValue?: unknown;
40
+ }>;
41
+ functions?: Array<{
42
+ name: string;
43
+ parameters?: Array<{
44
+ name: string;
45
+ type: string;
46
+ }>;
47
+ }>;
48
+ components?: Array<{
49
+ name: string;
50
+ type: string;
51
+ }>;
52
+ }
53
+ export interface GraphQLLoaders {
54
+ actorLoader: DataLoader<string, Actor | null>;
55
+ assetLoader: DataLoader<string, Asset | null>;
56
+ blueprintLoader: DataLoader<string, Blueprint | null>;
57
+ actorComponentsLoader: DataLoader<string, Array<{
58
+ name: string;
59
+ type: string;
60
+ }> | null>;
61
+ }
62
+ export declare function createLoaders(automationBridge: AutomationBridge): GraphQLLoaders;
63
+ export declare function clearLoaders(loaders: GraphQLLoaders): void;
64
+ //# sourceMappingURL=loaders.d.ts.map
@@ -0,0 +1,117 @@
1
+ import DataLoader from 'dataloader';
2
+ import { Logger } from '../utils/logger.js';
3
+ const log = new Logger('GraphQL:Loaders');
4
+ export function createLoaders(automationBridge) {
5
+ return {
6
+ actorLoader: new DataLoader(async (names) => {
7
+ log.debug(`Batching actor fetch for ${names.length} actors`);
8
+ try {
9
+ const result = await automationBridge.sendAutomationRequest('control_actor', {
10
+ action: 'batch_get',
11
+ actorNames: [...names]
12
+ });
13
+ if (result.success && result.actors) {
14
+ return names.map(name => result.actors?.find(a => a.name === name || a.label === name) ?? null);
15
+ }
16
+ }
17
+ catch {
18
+ log.debug('Batch fetch not supported, falling back to individual fetches');
19
+ }
20
+ const results = await Promise.all(names.map(async (name) => {
21
+ try {
22
+ const result = await automationBridge.sendAutomationRequest('control_actor', {
23
+ action: 'find_by_name',
24
+ actorName: name
25
+ });
26
+ return result.success ? (result.actor ?? null) : null;
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ }));
32
+ return results;
33
+ }, {
34
+ cache: true,
35
+ maxBatchSize: 50
36
+ }),
37
+ assetLoader: new DataLoader(async (paths) => {
38
+ log.debug(`Batching asset fetch for ${paths.length} assets`);
39
+ try {
40
+ const result = await automationBridge.sendAutomationRequest('manage_asset', {
41
+ action: 'batch_get',
42
+ assetPaths: [...paths]
43
+ });
44
+ if (result.success && result.assets) {
45
+ return paths.map(path => result.assets?.find(a => a.path === path) ?? null);
46
+ }
47
+ }
48
+ catch {
49
+ log.debug('Batch asset fetch not supported');
50
+ }
51
+ const results = await Promise.all(paths.map(async (path) => {
52
+ try {
53
+ const result = await automationBridge.sendAutomationRequest('manage_asset', {
54
+ action: 'exists',
55
+ assetPath: path
56
+ });
57
+ if (result.success && result.exists) {
58
+ return result.asset ?? { name: path.split('/').pop() || '', path };
59
+ }
60
+ return null;
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }));
66
+ return results;
67
+ }, {
68
+ cache: true,
69
+ maxBatchSize: 100
70
+ }),
71
+ blueprintLoader: new DataLoader(async (paths) => {
72
+ log.debug(`Batching blueprint fetch for ${paths.length} blueprints`);
73
+ const results = await Promise.all(paths.map(async (path) => {
74
+ try {
75
+ const result = await automationBridge.sendAutomationRequest('manage_blueprint', {
76
+ action: 'get_blueprint',
77
+ blueprintPath: path
78
+ });
79
+ return result.success ? (result.blueprint ?? null) : null;
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }));
85
+ return results;
86
+ }, {
87
+ cache: true,
88
+ maxBatchSize: 20
89
+ }),
90
+ actorComponentsLoader: new DataLoader(async (actorNames) => {
91
+ log.debug(`Batching component fetch for ${actorNames.length} actors`);
92
+ const results = await Promise.all(actorNames.map(async (actorName) => {
93
+ try {
94
+ const result = await automationBridge.sendAutomationRequest('control_actor', {
95
+ action: 'get_components',
96
+ actorName
97
+ });
98
+ return result.success ? (result.components ?? null) : null;
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ }));
104
+ return results;
105
+ }, {
106
+ cache: true,
107
+ maxBatchSize: 30
108
+ })
109
+ };
110
+ }
111
+ export function clearLoaders(loaders) {
112
+ loaders.actorLoader.clearAll();
113
+ loaders.assetLoader.clearAll();
114
+ loaders.blueprintLoader.clearAll();
115
+ loaders.actorComponentsLoader.clearAll();
116
+ }
117
+ //# sourceMappingURL=loaders.js.map
@@ -0,0 +1,268 @@
1
+ import type { GraphQLContext } from './types.js';
2
+ export declare const scalarResolvers: {
3
+ Vector: {
4
+ serialize: (value: any) => any;
5
+ parseValue: (value: any) => any;
6
+ parseLiteral: (ast: any) => any;
7
+ };
8
+ Rotator: {
9
+ serialize: (value: any) => any;
10
+ parseValue: (value: any) => any;
11
+ parseLiteral: (ast: any) => any;
12
+ };
13
+ Transform: {
14
+ serialize: (value: any) => any;
15
+ parseValue: (value: any) => any;
16
+ parseLiteral: (ast: any) => any;
17
+ };
18
+ JSON: {
19
+ serialize: (value: any) => any;
20
+ parseValue: (value: any) => any;
21
+ parseLiteral: (ast: any) => any;
22
+ };
23
+ };
24
+ interface Asset {
25
+ name: string;
26
+ path: string;
27
+ class: string;
28
+ packagePath: string;
29
+ size?: number;
30
+ metadata?: Record<string, any>;
31
+ tags?: string[];
32
+ }
33
+ interface Actor {
34
+ name: string;
35
+ class: string;
36
+ location?: {
37
+ x: number;
38
+ y: number;
39
+ z: number;
40
+ };
41
+ rotation?: {
42
+ pitch: number;
43
+ yaw: number;
44
+ roll: number;
45
+ };
46
+ scale?: {
47
+ x: number;
48
+ y: number;
49
+ z: number;
50
+ };
51
+ tags?: string[];
52
+ properties?: Record<string, any>;
53
+ }
54
+ interface Blueprint {
55
+ name: string;
56
+ path: string;
57
+ parentClass?: string;
58
+ variables?: Array<{
59
+ name: string;
60
+ type: string;
61
+ defaultValue?: any;
62
+ metadata?: Record<string, any>;
63
+ }>;
64
+ functions?: Array<{
65
+ name: string;
66
+ inputs?: Array<{
67
+ name: string;
68
+ type: string;
69
+ }>;
70
+ outputs?: Array<{
71
+ name: string;
72
+ type: string;
73
+ }>;
74
+ }>;
75
+ events?: Array<{
76
+ name: string;
77
+ type: string;
78
+ }>;
79
+ components?: Array<{
80
+ name: string;
81
+ type: string;
82
+ properties?: Record<string, any>;
83
+ }>;
84
+ scsHierarchy?: Record<string, any>;
85
+ }
86
+ export declare const resolvers: {
87
+ Query: {
88
+ assets: (_: any, args: any, context: GraphQLContext) => Promise<{
89
+ edges: {
90
+ node: Asset;
91
+ cursor: string;
92
+ }[];
93
+ pageInfo: {
94
+ hasNextPage: boolean;
95
+ hasPreviousPage: boolean;
96
+ startCursor: string | null;
97
+ endCursor: string | null;
98
+ };
99
+ totalCount: number;
100
+ }>;
101
+ asset: (_: any, { path }: {
102
+ path: string;
103
+ }, context: GraphQLContext) => Promise<import("./loaders.js").Asset | null>;
104
+ actors: (_: any, args: any, context: GraphQLContext) => Promise<{
105
+ edges: {
106
+ node: Actor;
107
+ cursor: string;
108
+ }[];
109
+ pageInfo: {
110
+ hasNextPage: boolean;
111
+ hasPreviousPage: boolean;
112
+ startCursor: string | null;
113
+ endCursor: string | null;
114
+ };
115
+ totalCount: number;
116
+ }>;
117
+ actor: (_: any, { name }: {
118
+ name: string;
119
+ }, context: GraphQLContext) => Promise<import("./loaders.js").Actor | null>;
120
+ blueprints: (_: any, args: any, context: GraphQLContext) => Promise<{
121
+ edges: {
122
+ node: Blueprint;
123
+ cursor: string;
124
+ }[];
125
+ pageInfo: {
126
+ hasNextPage: number | true;
127
+ hasPreviousPage: boolean;
128
+ startCursor: string | null;
129
+ endCursor: string | null;
130
+ };
131
+ totalCount: number;
132
+ } | {
133
+ edges: never[];
134
+ pageInfo: {
135
+ hasNextPage: boolean;
136
+ hasPreviousPage: boolean;
137
+ startCursor: null;
138
+ endCursor: null;
139
+ };
140
+ totalCount: number;
141
+ }>;
142
+ blueprint: (_: any, { path }: {
143
+ path: string;
144
+ }, context: GraphQLContext) => Promise<import("./loaders.js").Blueprint | null>;
145
+ levels: (_: any, __: any, context: GraphQLContext) => Promise<any>;
146
+ currentLevel: (_: any, __: any, context: GraphQLContext) => Promise<{} | null>;
147
+ materials: (_: any, args: any, context: GraphQLContext) => Promise<{
148
+ edges: {
149
+ node: Asset;
150
+ cursor: string;
151
+ }[];
152
+ pageInfo: {
153
+ hasNextPage: boolean;
154
+ hasPreviousPage: boolean;
155
+ startCursor: string | null;
156
+ endCursor: string | null;
157
+ };
158
+ totalCount: number;
159
+ }>;
160
+ sequences: (_: any, args: any, context: GraphQLContext) => Promise<{
161
+ edges: {
162
+ node: Asset;
163
+ cursor: string;
164
+ }[];
165
+ pageInfo: {
166
+ hasNextPage: boolean;
167
+ hasPreviousPage: boolean;
168
+ startCursor: string | null;
169
+ endCursor: string | null;
170
+ };
171
+ totalCount: number;
172
+ }>;
173
+ worldPartitionCells: (_: any, __: any, context: GraphQLContext) => Promise<any>;
174
+ niagaraSystems: (_: any, args: any, context: GraphQLContext) => Promise<{
175
+ edges: {
176
+ node: {
177
+ emitters: never[];
178
+ parameters: never[];
179
+ name: string;
180
+ path: string;
181
+ class: string;
182
+ packagePath: string;
183
+ size?: number;
184
+ metadata?: Record<string, any>;
185
+ tags?: string[];
186
+ };
187
+ cursor: string;
188
+ }[];
189
+ pageInfo: {
190
+ hasNextPage: boolean;
191
+ hasPreviousPage: boolean;
192
+ startCursor: string | null;
193
+ endCursor: string | null;
194
+ };
195
+ totalCount: number;
196
+ }>;
197
+ niagaraSystem: (_: any, { path }: {
198
+ path: string;
199
+ }, context: GraphQLContext) => Promise<any>;
200
+ search: (_: any, { query, type }: any, context: GraphQLContext) => Promise<any>;
201
+ };
202
+ Mutation: {
203
+ duplicateAsset: (_: any, { path, newName }: any, context: GraphQLContext) => Promise<{}>;
204
+ moveAsset: (_: any, { path, newPath }: any, context: GraphQLContext) => Promise<{}>;
205
+ deleteAsset: (_: any, { path }: {
206
+ path: string;
207
+ }, context: GraphQLContext) => Promise<boolean>;
208
+ spawnActor: (_: any, { input }: any, context: GraphQLContext) => Promise<{}>;
209
+ deleteActor: (_: any, { name }: {
210
+ name: string;
211
+ }, context: GraphQLContext) => Promise<boolean>;
212
+ setActorTransform: (_: any, { name, transform }: any, context: GraphQLContext) => Promise<{}>;
213
+ createBlueprint: (_: any, { input }: any, context: GraphQLContext) => Promise<{}>;
214
+ addVariableToBlueprint: (_: any, { path, input }: any, context: GraphQLContext) => Promise<{}>;
215
+ addFunctionToBlueprint: (_: any, { path, input }: any, context: GraphQLContext) => Promise<{}>;
216
+ loadLevel: (_: any, { path }: {
217
+ path: string;
218
+ }, context: GraphQLContext) => Promise<{}>;
219
+ saveLevel: (_: any, { path }: {
220
+ path?: string;
221
+ }, context: GraphQLContext) => Promise<boolean>;
222
+ createMaterialInstance: (_: any, { parentPath, name, parameters }: any, context: GraphQLContext) => Promise<{}>;
223
+ };
224
+ Asset: {
225
+ dependencies: (parent: Asset, _: any, context: GraphQLContext) => Promise<any>;
226
+ dependents: (parent: Asset, _: any, context: GraphQLContext) => Promise<any>;
227
+ };
228
+ Actor: {
229
+ properties: (parent: Actor, _: any, context: GraphQLContext) => Promise<Record<string, any>>;
230
+ components: (parent: Actor, _: any, context: GraphQLContext) => Promise<any>;
231
+ };
232
+ Blueprint: {
233
+ variables: (parent: Blueprint, _args: any, _context: GraphQLContext) => Promise<{
234
+ name: string;
235
+ type: string;
236
+ defaultValue?: any;
237
+ metadata?: Record<string, any>;
238
+ }[]>;
239
+ functions: (parent: Blueprint, _args: any, _context: GraphQLContext) => Promise<{
240
+ name: string;
241
+ inputs?: Array<{
242
+ name: string;
243
+ type: string;
244
+ }>;
245
+ outputs?: Array<{
246
+ name: string;
247
+ type: string;
248
+ }>;
249
+ }[]>;
250
+ events: (parent: Blueprint, _args: any, _context: GraphQLContext) => Promise<{
251
+ name: string;
252
+ type: string;
253
+ }[]>;
254
+ components: (parent: Blueprint, _args: any, _context: GraphQLContext) => Promise<{
255
+ name: string;
256
+ type: string;
257
+ properties?: Record<string, any>;
258
+ }[]>;
259
+ };
260
+ Material: {
261
+ parameters: (parent: any, _: any, context: GraphQLContext) => Promise<any>;
262
+ };
263
+ Sequence: {
264
+ tracks: (parent: any, _: any, context: GraphQLContext) => Promise<any>;
265
+ };
266
+ };
267
+ export {};
268
+ //# sourceMappingURL=resolvers.d.ts.map