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,5 @@
1
+ import type { UnrealBridge } from '../unreal-bridge.js';
2
+ import { AutomationBridge } from '../automation/index.js';
3
+ export declare const typeDefs = "\n # Custom types for Unreal math types\n type Vector {\n x: Float!\n y: Float!\n z: Float!\n}\n\ntype Rotator {\n pitch: Float!\n yaw: Float!\n roll: Float!\n}\n\ntype Transform {\n location: Vector!\n rotation: Rotator!\n scale: Vector!\n}\n\n # Asset - related types\ntype Asset {\n name: String!\n path: String!\n class: String!\n packagePath: String!\n size: Float\n dependencies: [Asset!]!\n dependents: [Asset!]!\n metadata: JSON\n tags: [String!]!\n}\n\n scalar JSON\n\n # Actor - related types\ntype Actor {\n name: String!\n class: String!\n location: Vector\n rotation: Rotator\n scale: Vector\n components: [Component!]!\n tags: [String!]!\n properties: JSON\n}\n\ntype Component {\n name: String!\n type: String!\n properties: JSON\n}\n\n # Blueprint - specific types\ntype Blueprint {\n name: String!\n path: String!\n parentClass: String\n variables: [Variable!]!\n functions: [Function!]!\n events: [Event!]!\n components: [Component!]!\n scsHierarchy: JSON\n}\n\ntype Variable {\n name: String!\n type: String!\n defaultValue: JSON\n metadata: JSON\n}\n\ntype Function {\n name: String!\n inputs: [Parameter!]!\n outputs: [Parameter!]!\n}\n\ntype Parameter {\n name: String!\n type: String!\n}\n\ntype Event {\n name: String!\n type: String!\n}\n\n # Level - related types\ntype Level {\n name: String!\n path: String!\n actors: [Actor!]!\n streamingLevels: [String!]!\n lightingQuality: String\n loaded: Boolean!\n}\n\n # Material types\ntype Material {\n name: String!\n path: String!\n parameters: [MaterialParameter!]!\n usedInstances: [Asset!]!\n}\n\ntype MaterialParameter {\n name: String!\n type: String!\n value: JSON\n}\n\n # Sequence types\ntype Sequence {\n name: String!\n path: String!\n duration: Float\n tracks: [SequenceTrack!]!\n}\n\ntype SequenceTrack {\n name: String!\n type: String!\n clips: [SequenceClip!]!\n}\n\ntype SequenceClip {\n name: String!\n startTime: Float!\n endTime: Float!\n}\n\n # World Partition types\ntype WorldPartitionCell {\n name: String!\n bounds: Box!\n isLoaded: Boolean!\n dataLayers: [String!]\n}\n\ntype Box {\n min: Vector!\n max: Vector!\n}\n\n # Niagara types\ntype NiagaraSystem {\n name: String!\n path: String!\n emitters: [NiagaraEmitter!]!\n parameters: [NiagaraParameter!]!\n}\n\ntype NiagaraEmitter {\n name: String!\n isValid: Boolean!\n enabled: Boolean!\n}\n\ntype NiagaraParameter {\n name: String!\n type: String!\n value: JSON\n}\n\n # Query operations\ntype Query {\n # Asset queries\nassets(filter: AssetFilter, pagination: PaginationInput): AssetConnection!\nasset(path: String!): Asset\n\n # Actor queries\nactors(filter: ActorFilter, pagination: PaginationInput): ActorConnection!\nactor(name: String!): Actor\n\n # Blueprint queries\nblueprints(filter: BlueprintFilter, pagination: PaginationInput): BlueprintConnection!\nblueprint(path: String!): Blueprint\n\n # Level queries\nlevels: [Level!]!\ncurrentLevel: Level\n\n # Material queries\nmaterials(filter: MaterialFilter, pagination: PaginationInput): MaterialConnection!\n\n # Sequence queries\nsequences(filter: SequenceFilter, pagination: PaginationInput): SequenceConnection!\n\n # World Partition queries\nworldPartitionCells: [WorldPartitionCell!]!\n\n # Niagara queries\nniagaraSystems(filter: NiagaraFilter, pagination: PaginationInput): NiagaraSystemConnection!\nniagaraSystem(path: String!): NiagaraSystem\n\n # Search across all types\nsearch(query: String!, type: SearchType): [SearchResult!]!\n }\n\n # Mutation operations\ntype Mutation {\n # Asset mutations\nduplicateAsset(path: String!, newName: String!): Asset!\nmoveAsset(path: String!, newPath: String!): Asset!\ndeleteAsset(path: String!): Boolean!\n\n # Actor mutations\nspawnActor(input: SpawnActorInput!): Actor!\ndeleteActor(name: String!): Boolean!\nsetActorTransform(name: String!, transform: TransformInput!): Actor!\n\n # Blueprint mutations\ncreateBlueprint(input: CreateBlueprintInput!): Blueprint!\naddVariableToBlueprint(path: String!, input: AddVariableInput!): Blueprint!\naddFunctionToBlueprint(path: String!, input: AddFunctionInput!): Blueprint!\n\n # Level mutations\nloadLevel(path: String!): Level!\nsaveLevel(path: String): Boolean!\n\n # Material mutations\ncreateMaterialInstance(parentPath: String!, name: String!, parameters: JSON): Asset!\n }\n\n # Input types\n input AssetFilter {\n class: String\n tag: String\n pathStartsWith: String\n}\n\n input NiagaraFilter {\n class: String\n tag: String\n pathStartsWith: String\n}\n\n input ActorFilter {\n class: String\n tag: String\n locationNear: VectorInput\n distance: Float\n}\n\n input BlueprintFilter {\n parentClass: String\n hasVariable: String\n hasFunction: String\n}\n\n input MaterialFilter {\n hasParameter: String\n}\n\n input SequenceFilter {\n hasTrackType: String\n}\n\n input PaginationInput {\n offset: Int\n limit: Int\n}\n\n input VectorInput {\n x: Float!\n y: Float!\n z: Float!\n}\n\n input RotatorInput {\n pitch: Float!\n yaw: Float!\n roll: Float!\n}\n\n input TransformInput {\n location: VectorInput!\n rotation: RotatorInput!\n scale: VectorInput!\n}\n\n input SpawnActorInput {\n classPath: String!\n name: String\n transform: TransformInput!\n tags: [String!]\n}\n\n input CreateBlueprintInput {\n name: String!\n blueprintType: String!\n savePath: String!\n}\n\n input AddVariableInput {\n variableName: String!\n variableType: String!\n defaultValue: JSON\n}\n\n input AddFunctionInput {\n functionName: String!\n inputs: [ParameterInput!]\n}\n\n input ParameterInput {\n name: String!\n type: String!\n}\n\n # Connection types for pagination\n type AssetConnection {\n edges: [AssetEdge!]!\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ntype AssetEdge {\n node: Asset!\n cursor: String!\n}\n\ntype ActorConnection {\n edges: [ActorEdge!]!\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ntype ActorEdge {\n node: Actor!\n cursor: String!\n}\n\ntype BlueprintConnection {\n edges: [BlueprintEdge!]!\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ntype BlueprintEdge {\n node: Blueprint!\n cursor: String!\n}\n\ntype MaterialConnection {\n edges: [MaterialEdge!]!\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ntype MaterialEdge {\n node: Material!\n cursor: String!\n}\n\ntype SequenceConnection {\n edges: [SequenceEdge!]!\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ntype SequenceEdge {\n node: Sequence!\n cursor: String!\n}\n\ntype NiagaraSystemConnection {\n edges: [NiagaraSystemEdge!]!\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ntype NiagaraSystemEdge {\n node: NiagaraSystem!\n cursor: String!\n}\n\ntype PageInfo {\n hasNextPage: Boolean!\n hasPreviousPage: Boolean!\n startCursor: String\n endCursor: String\n}\n\n # Search functionality\n union SearchResult = Asset | Actor | Blueprint | Material | Sequence | NiagaraSystem\n\nenum SearchType {\n ALL\n ASSETS\n ACTORS\n BLUEPRINTS\n MATERIALS\n SEQUENCES\n NIAGARA\n}\n";
4
+ export declare function createGraphQLSchema(_bridge: UnrealBridge, _automationBridge: AutomationBridge): import("graphql").GraphQLSchema;
5
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1,437 @@
1
+ import { makeExecutableSchema } from '@graphql-tools/schema';
2
+ import { resolvers as baseResolvers } from './resolvers.js';
3
+ import { scalarResolvers } from './resolvers.js';
4
+ export const typeDefs = `
5
+ # Custom types for Unreal math types
6
+ type Vector {
7
+ x: Float!
8
+ y: Float!
9
+ z: Float!
10
+ }
11
+
12
+ type Rotator {
13
+ pitch: Float!
14
+ yaw: Float!
15
+ roll: Float!
16
+ }
17
+
18
+ type Transform {
19
+ location: Vector!
20
+ rotation: Rotator!
21
+ scale: Vector!
22
+ }
23
+
24
+ # Asset - related types
25
+ type Asset {
26
+ name: String!
27
+ path: String!
28
+ class: String!
29
+ packagePath: String!
30
+ size: Float
31
+ dependencies: [Asset!]!
32
+ dependents: [Asset!]!
33
+ metadata: JSON
34
+ tags: [String!]!
35
+ }
36
+
37
+ scalar JSON
38
+
39
+ # Actor - related types
40
+ type Actor {
41
+ name: String!
42
+ class: String!
43
+ location: Vector
44
+ rotation: Rotator
45
+ scale: Vector
46
+ components: [Component!]!
47
+ tags: [String!]!
48
+ properties: JSON
49
+ }
50
+
51
+ type Component {
52
+ name: String!
53
+ type: String!
54
+ properties: JSON
55
+ }
56
+
57
+ # Blueprint - specific types
58
+ type Blueprint {
59
+ name: String!
60
+ path: String!
61
+ parentClass: String
62
+ variables: [Variable!]!
63
+ functions: [Function!]!
64
+ events: [Event!]!
65
+ components: [Component!]!
66
+ scsHierarchy: JSON
67
+ }
68
+
69
+ type Variable {
70
+ name: String!
71
+ type: String!
72
+ defaultValue: JSON
73
+ metadata: JSON
74
+ }
75
+
76
+ type Function {
77
+ name: String!
78
+ inputs: [Parameter!]!
79
+ outputs: [Parameter!]!
80
+ }
81
+
82
+ type Parameter {
83
+ name: String!
84
+ type: String!
85
+ }
86
+
87
+ type Event {
88
+ name: String!
89
+ type: String!
90
+ }
91
+
92
+ # Level - related types
93
+ type Level {
94
+ name: String!
95
+ path: String!
96
+ actors: [Actor!]!
97
+ streamingLevels: [String!]!
98
+ lightingQuality: String
99
+ loaded: Boolean!
100
+ }
101
+
102
+ # Material types
103
+ type Material {
104
+ name: String!
105
+ path: String!
106
+ parameters: [MaterialParameter!]!
107
+ usedInstances: [Asset!]!
108
+ }
109
+
110
+ type MaterialParameter {
111
+ name: String!
112
+ type: String!
113
+ value: JSON
114
+ }
115
+
116
+ # Sequence types
117
+ type Sequence {
118
+ name: String!
119
+ path: String!
120
+ duration: Float
121
+ tracks: [SequenceTrack!]!
122
+ }
123
+
124
+ type SequenceTrack {
125
+ name: String!
126
+ type: String!
127
+ clips: [SequenceClip!]!
128
+ }
129
+
130
+ type SequenceClip {
131
+ name: String!
132
+ startTime: Float!
133
+ endTime: Float!
134
+ }
135
+
136
+ # World Partition types
137
+ type WorldPartitionCell {
138
+ name: String!
139
+ bounds: Box!
140
+ isLoaded: Boolean!
141
+ dataLayers: [String!]
142
+ }
143
+
144
+ type Box {
145
+ min: Vector!
146
+ max: Vector!
147
+ }
148
+
149
+ # Niagara types
150
+ type NiagaraSystem {
151
+ name: String!
152
+ path: String!
153
+ emitters: [NiagaraEmitter!]!
154
+ parameters: [NiagaraParameter!]!
155
+ }
156
+
157
+ type NiagaraEmitter {
158
+ name: String!
159
+ isValid: Boolean!
160
+ enabled: Boolean!
161
+ }
162
+
163
+ type NiagaraParameter {
164
+ name: String!
165
+ type: String!
166
+ value: JSON
167
+ }
168
+
169
+ # Query operations
170
+ type Query {
171
+ # Asset queries
172
+ assets(filter: AssetFilter, pagination: PaginationInput): AssetConnection!
173
+ asset(path: String!): Asset
174
+
175
+ # Actor queries
176
+ actors(filter: ActorFilter, pagination: PaginationInput): ActorConnection!
177
+ actor(name: String!): Actor
178
+
179
+ # Blueprint queries
180
+ blueprints(filter: BlueprintFilter, pagination: PaginationInput): BlueprintConnection!
181
+ blueprint(path: String!): Blueprint
182
+
183
+ # Level queries
184
+ levels: [Level!]!
185
+ currentLevel: Level
186
+
187
+ # Material queries
188
+ materials(filter: MaterialFilter, pagination: PaginationInput): MaterialConnection!
189
+
190
+ # Sequence queries
191
+ sequences(filter: SequenceFilter, pagination: PaginationInput): SequenceConnection!
192
+
193
+ # World Partition queries
194
+ worldPartitionCells: [WorldPartitionCell!]!
195
+
196
+ # Niagara queries
197
+ niagaraSystems(filter: NiagaraFilter, pagination: PaginationInput): NiagaraSystemConnection!
198
+ niagaraSystem(path: String!): NiagaraSystem
199
+
200
+ # Search across all types
201
+ search(query: String!, type: SearchType): [SearchResult!]!
202
+ }
203
+
204
+ # Mutation operations
205
+ type Mutation {
206
+ # Asset mutations
207
+ duplicateAsset(path: String!, newName: String!): Asset!
208
+ moveAsset(path: String!, newPath: String!): Asset!
209
+ deleteAsset(path: String!): Boolean!
210
+
211
+ # Actor mutations
212
+ spawnActor(input: SpawnActorInput!): Actor!
213
+ deleteActor(name: String!): Boolean!
214
+ setActorTransform(name: String!, transform: TransformInput!): Actor!
215
+
216
+ # Blueprint mutations
217
+ createBlueprint(input: CreateBlueprintInput!): Blueprint!
218
+ addVariableToBlueprint(path: String!, input: AddVariableInput!): Blueprint!
219
+ addFunctionToBlueprint(path: String!, input: AddFunctionInput!): Blueprint!
220
+
221
+ # Level mutations
222
+ loadLevel(path: String!): Level!
223
+ saveLevel(path: String): Boolean!
224
+
225
+ # Material mutations
226
+ createMaterialInstance(parentPath: String!, name: String!, parameters: JSON): Asset!
227
+ }
228
+
229
+ # Input types
230
+ input AssetFilter {
231
+ class: String
232
+ tag: String
233
+ pathStartsWith: String
234
+ }
235
+
236
+ input NiagaraFilter {
237
+ class: String
238
+ tag: String
239
+ pathStartsWith: String
240
+ }
241
+
242
+ input ActorFilter {
243
+ class: String
244
+ tag: String
245
+ locationNear: VectorInput
246
+ distance: Float
247
+ }
248
+
249
+ input BlueprintFilter {
250
+ parentClass: String
251
+ hasVariable: String
252
+ hasFunction: String
253
+ }
254
+
255
+ input MaterialFilter {
256
+ hasParameter: String
257
+ }
258
+
259
+ input SequenceFilter {
260
+ hasTrackType: String
261
+ }
262
+
263
+ input PaginationInput {
264
+ offset: Int
265
+ limit: Int
266
+ }
267
+
268
+ input VectorInput {
269
+ x: Float!
270
+ y: Float!
271
+ z: Float!
272
+ }
273
+
274
+ input RotatorInput {
275
+ pitch: Float!
276
+ yaw: Float!
277
+ roll: Float!
278
+ }
279
+
280
+ input TransformInput {
281
+ location: VectorInput!
282
+ rotation: RotatorInput!
283
+ scale: VectorInput!
284
+ }
285
+
286
+ input SpawnActorInput {
287
+ classPath: String!
288
+ name: String
289
+ transform: TransformInput!
290
+ tags: [String!]
291
+ }
292
+
293
+ input CreateBlueprintInput {
294
+ name: String!
295
+ blueprintType: String!
296
+ savePath: String!
297
+ }
298
+
299
+ input AddVariableInput {
300
+ variableName: String!
301
+ variableType: String!
302
+ defaultValue: JSON
303
+ }
304
+
305
+ input AddFunctionInput {
306
+ functionName: String!
307
+ inputs: [ParameterInput!]
308
+ }
309
+
310
+ input ParameterInput {
311
+ name: String!
312
+ type: String!
313
+ }
314
+
315
+ # Connection types for pagination
316
+ type AssetConnection {
317
+ edges: [AssetEdge!]!
318
+ pageInfo: PageInfo!
319
+ totalCount: Int!
320
+ }
321
+
322
+ type AssetEdge {
323
+ node: Asset!
324
+ cursor: String!
325
+ }
326
+
327
+ type ActorConnection {
328
+ edges: [ActorEdge!]!
329
+ pageInfo: PageInfo!
330
+ totalCount: Int!
331
+ }
332
+
333
+ type ActorEdge {
334
+ node: Actor!
335
+ cursor: String!
336
+ }
337
+
338
+ type BlueprintConnection {
339
+ edges: [BlueprintEdge!]!
340
+ pageInfo: PageInfo!
341
+ totalCount: Int!
342
+ }
343
+
344
+ type BlueprintEdge {
345
+ node: Blueprint!
346
+ cursor: String!
347
+ }
348
+
349
+ type MaterialConnection {
350
+ edges: [MaterialEdge!]!
351
+ pageInfo: PageInfo!
352
+ totalCount: Int!
353
+ }
354
+
355
+ type MaterialEdge {
356
+ node: Material!
357
+ cursor: String!
358
+ }
359
+
360
+ type SequenceConnection {
361
+ edges: [SequenceEdge!]!
362
+ pageInfo: PageInfo!
363
+ totalCount: Int!
364
+ }
365
+
366
+ type SequenceEdge {
367
+ node: Sequence!
368
+ cursor: String!
369
+ }
370
+
371
+ type NiagaraSystemConnection {
372
+ edges: [NiagaraSystemEdge!]!
373
+ pageInfo: PageInfo!
374
+ totalCount: Int!
375
+ }
376
+
377
+ type NiagaraSystemEdge {
378
+ node: NiagaraSystem!
379
+ cursor: String!
380
+ }
381
+
382
+ type PageInfo {
383
+ hasNextPage: Boolean!
384
+ hasPreviousPage: Boolean!
385
+ startCursor: String
386
+ endCursor: String
387
+ }
388
+
389
+ # Search functionality
390
+ union SearchResult = Asset | Actor | Blueprint | Material | Sequence | NiagaraSystem
391
+
392
+ enum SearchType {
393
+ ALL
394
+ ASSETS
395
+ ACTORS
396
+ BLUEPRINTS
397
+ MATERIALS
398
+ SEQUENCES
399
+ NIAGARA
400
+ }
401
+ `;
402
+ export function createGraphQLSchema(_bridge, _automationBridge) {
403
+ const SearchResult = {
404
+ __resolveType(obj) {
405
+ if (obj.name && obj.path && obj.class) {
406
+ return 'Asset';
407
+ }
408
+ if (obj.name && obj.class && !obj.path) {
409
+ return 'Actor';
410
+ }
411
+ if (obj.name && obj.path && obj.variables) {
412
+ return 'Blueprint';
413
+ }
414
+ if (obj.name && obj.path && obj.parameters) {
415
+ if (obj.usedInstances)
416
+ return 'Material';
417
+ if (obj.emitters)
418
+ return 'NiagaraSystem';
419
+ return 'Material';
420
+ }
421
+ if (obj.name && obj.path && obj.tracks) {
422
+ return 'Sequence';
423
+ }
424
+ return null;
425
+ }
426
+ };
427
+ const mergedResolvers = {
428
+ ...baseResolvers,
429
+ JSON: scalarResolvers.JSON,
430
+ SearchResult
431
+ };
432
+ return makeExecutableSchema({
433
+ typeDefs,
434
+ resolvers: mergedResolvers
435
+ });
436
+ }
437
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1,26 @@
1
+ import type { UnrealBridge } from '../unreal-bridge.js';
2
+ import { AutomationBridge } from '../automation/index.js';
3
+ export interface GraphQLServerConfig {
4
+ enabled?: boolean;
5
+ port?: number;
6
+ host?: string;
7
+ path?: string;
8
+ cors?: {
9
+ origin?: string | string[];
10
+ credentials?: boolean;
11
+ };
12
+ }
13
+ export declare class GraphQLServer {
14
+ private log;
15
+ private server;
16
+ private config;
17
+ private bridge;
18
+ private automationBridge;
19
+ constructor(bridge: UnrealBridge, automationBridge: AutomationBridge, config?: GraphQLServerConfig);
20
+ start(): Promise<void>;
21
+ stop(): Promise<void>;
22
+ private setupShutdown;
23
+ getConfig(): Required<GraphQLServerConfig>;
24
+ isRunning(): boolean;
25
+ }
26
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1,117 @@
1
+ import { createYoga } from 'graphql-yoga';
2
+ import { createServer } from 'http';
3
+ import { Logger } from '../utils/logger.js';
4
+ import { createGraphQLSchema } from './schema.js';
5
+ import { createLoaders } from './loaders.js';
6
+ export class GraphQLServer {
7
+ log = new Logger('GraphQLServer');
8
+ server = null;
9
+ config;
10
+ bridge;
11
+ automationBridge;
12
+ constructor(bridge, automationBridge, config = {}) {
13
+ this.bridge = bridge;
14
+ this.automationBridge = automationBridge;
15
+ this.config = {
16
+ enabled: config.enabled ?? process.env.GRAPHQL_ENABLED === 'true',
17
+ port: config.port ?? Number(process.env.GRAPHQL_PORT ?? 4000),
18
+ host: config.host ?? process.env.GRAPHQL_HOST ?? '127.0.0.1',
19
+ path: config.path ?? process.env.GRAPHQL_PATH ?? '/graphql',
20
+ cors: config.cors ?? {
21
+ origin: process.env.GRAPHQL_CORS_ORIGIN ?? '*',
22
+ credentials: process.env.GRAPHQL_CORS_CREDENTIALS === 'true'
23
+ }
24
+ };
25
+ }
26
+ async start() {
27
+ if (!this.config.enabled) {
28
+ this.log.info('GraphQL server is disabled');
29
+ return;
30
+ }
31
+ try {
32
+ const schema = createGraphQLSchema(this.bridge, this.automationBridge);
33
+ const yoga = createYoga({
34
+ schema,
35
+ graphqlEndpoint: this.config.path,
36
+ cors: {
37
+ origin: this.config.cors.origin,
38
+ credentials: this.config.cors.credentials,
39
+ methods: ['GET', 'POST', 'OPTIONS'],
40
+ allowedHeaders: ['Content-Type', 'Authorization']
41
+ },
42
+ context: () => ({
43
+ bridge: this.bridge,
44
+ automationBridge: this.automationBridge,
45
+ loaders: createLoaders(this.automationBridge)
46
+ }),
47
+ logging: {
48
+ debug: (...args) => this.log.debug('[GraphQL]', ...args),
49
+ info: (...args) => this.log.info('[GraphQL]', ...args),
50
+ warn: (...args) => this.log.warn('[GraphQL]', ...args),
51
+ error: (...args) => this.log.error('[GraphQL]', ...args)
52
+ }
53
+ });
54
+ this.server = createServer(yoga);
55
+ await new Promise((resolve, reject) => {
56
+ if (!this.server) {
57
+ reject(new Error('Server not initialized'));
58
+ return;
59
+ }
60
+ this.server.on('error', (error) => {
61
+ this.log.error('GraphQL server error:', error);
62
+ reject(error);
63
+ });
64
+ this.server.listen(this.config.port, this.config.host, () => {
65
+ this.log.info(`GraphQL server started at http://${this.config.host}:${this.config.port}${this.config.path}`);
66
+ this.log.info('GraphQL Playground available at the endpoint URL');
67
+ resolve();
68
+ });
69
+ });
70
+ this.setupShutdown();
71
+ }
72
+ catch (error) {
73
+ this.log.error('Failed to start GraphQL server:', error);
74
+ throw error;
75
+ }
76
+ }
77
+ async stop() {
78
+ return new Promise((resolve, reject) => {
79
+ if (!this.server) {
80
+ resolve();
81
+ return;
82
+ }
83
+ this.server.close((error) => {
84
+ if (error) {
85
+ this.log.error('Error closing GraphQL server:', error);
86
+ reject(error);
87
+ }
88
+ else {
89
+ this.log.info('GraphQL server stopped');
90
+ resolve();
91
+ }
92
+ });
93
+ });
94
+ }
95
+ setupShutdown() {
96
+ const gracefulShutdown = async (signal) => {
97
+ this.log.info(`Received ${signal}, shutting down GraphQL server...`);
98
+ try {
99
+ await this.stop();
100
+ process.exit(0);
101
+ }
102
+ catch (error) {
103
+ this.log.error('Error during GraphQL server shutdown:', error);
104
+ process.exit(1);
105
+ }
106
+ };
107
+ process.on('SIGINT', () => gracefulShutdown('SIGINT'));
108
+ process.on('SIGTERM', () => gracefulShutdown('SIGTERM'));
109
+ }
110
+ getConfig() {
111
+ return this.config;
112
+ }
113
+ isRunning() {
114
+ return this.server !== null && this.server.listening;
115
+ }
116
+ }
117
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1,9 @@
1
+ import type { UnrealBridge } from '../unreal-bridge.js';
2
+ import { AutomationBridge } from '../automation/index.js';
3
+ import type { GraphQLLoaders } from './loaders.js';
4
+ export interface GraphQLContext {
5
+ bridge: UnrealBridge;
6
+ automationBridge: AutomationBridge;
7
+ loaders?: GraphQLLoaders;
8
+ }
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,20 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { UnrealBridge } from '../unreal-bridge.js';
3
+ import { AutomationBridge } from '../automation/index.js';
4
+ import { AssetResources } from '../resources/assets.js';
5
+ import { ActorResources } from '../resources/actors.js';
6
+ import { LevelResources } from '../resources/levels.js';
7
+ import { HealthMonitor } from '../services/health-monitor.js';
8
+ export declare class ResourceHandler {
9
+ private server;
10
+ private bridge;
11
+ private automationBridge;
12
+ private assetResources;
13
+ private actorResources;
14
+ private levelResources;
15
+ private healthMonitor;
16
+ private ensureConnected;
17
+ constructor(server: Server, bridge: UnrealBridge, automationBridge: AutomationBridge, assetResources: AssetResources, actorResources: ActorResources, levelResources: LevelResources, healthMonitor: HealthMonitor, ensureConnected: () => Promise<boolean>);
18
+ registerHandlers(): void;
19
+ }
20
+ //# sourceMappingURL=resource-handlers.d.ts.map