unreal-engine-mcp-server 0.4.7 → 0.5.0

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 (438) 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.yml +148 -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 +23 -0
  19. package/.github/workflows/labeler.yml +16 -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 +12 -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 +267 -31
  29. package/CONTRIBUTING.md +140 -0
  30. package/README.md +166 -71
  31. package/claude_desktop_config_example.json +7 -6
  32. package/dist/automation/bridge.d.ts +50 -0
  33. package/dist/automation/bridge.js +452 -0
  34. package/dist/automation/connection-manager.d.ts +23 -0
  35. package/dist/automation/connection-manager.js +107 -0
  36. package/dist/automation/handshake.d.ts +11 -0
  37. package/dist/automation/handshake.js +89 -0
  38. package/dist/automation/index.d.ts +3 -0
  39. package/dist/automation/index.js +3 -0
  40. package/dist/automation/message-handler.d.ts +12 -0
  41. package/dist/automation/message-handler.js +149 -0
  42. package/dist/automation/request-tracker.d.ts +25 -0
  43. package/dist/automation/request-tracker.js +98 -0
  44. package/dist/automation/types.d.ts +130 -0
  45. package/dist/automation/types.js +2 -0
  46. package/dist/cli.js +32 -5
  47. package/dist/config.d.ts +27 -0
  48. package/dist/config.js +60 -0
  49. package/dist/constants.d.ts +12 -0
  50. package/dist/constants.js +12 -0
  51. package/dist/graphql/resolvers.d.ts +268 -0
  52. package/dist/graphql/resolvers.js +743 -0
  53. package/dist/graphql/schema.d.ts +5 -0
  54. package/dist/graphql/schema.js +437 -0
  55. package/dist/graphql/server.d.ts +26 -0
  56. package/dist/graphql/server.js +115 -0
  57. package/dist/graphql/types.d.ts +7 -0
  58. package/dist/graphql/types.js +2 -0
  59. package/dist/handlers/resource-handlers.d.ts +20 -0
  60. package/dist/handlers/resource-handlers.js +180 -0
  61. package/dist/index.d.ts +31 -18
  62. package/dist/index.js +119 -619
  63. package/dist/prompts/index.js +4 -4
  64. package/dist/resources/actors.d.ts +17 -12
  65. package/dist/resources/actors.js +56 -76
  66. package/dist/resources/assets.d.ts +6 -14
  67. package/dist/resources/assets.js +115 -147
  68. package/dist/resources/levels.d.ts +13 -13
  69. package/dist/resources/levels.js +25 -34
  70. package/dist/server/resource-registry.d.ts +20 -0
  71. package/dist/server/resource-registry.js +37 -0
  72. package/dist/server/tool-registry.d.ts +23 -0
  73. package/dist/server/tool-registry.js +322 -0
  74. package/dist/server-setup.d.ts +21 -0
  75. package/dist/server-setup.js +111 -0
  76. package/dist/services/health-monitor.d.ts +34 -0
  77. package/dist/services/health-monitor.js +105 -0
  78. package/dist/services/metrics-server.d.ts +11 -0
  79. package/dist/services/metrics-server.js +105 -0
  80. package/dist/tools/actors.d.ts +147 -9
  81. package/dist/tools/actors.js +350 -311
  82. package/dist/tools/animation.d.ts +135 -4
  83. package/dist/tools/animation.js +510 -411
  84. package/dist/tools/assets.d.ts +117 -19
  85. package/dist/tools/assets.js +259 -284
  86. package/dist/tools/audio.d.ts +102 -42
  87. package/dist/tools/audio.js +272 -685
  88. package/dist/tools/base-tool.d.ts +17 -0
  89. package/dist/tools/base-tool.js +46 -0
  90. package/dist/tools/behavior-tree.d.ts +94 -0
  91. package/dist/tools/behavior-tree.js +39 -0
  92. package/dist/tools/blueprint/helpers.d.ts +29 -0
  93. package/dist/tools/blueprint/helpers.js +182 -0
  94. package/dist/tools/blueprint.d.ts +228 -118
  95. package/dist/tools/blueprint.js +685 -832
  96. package/dist/tools/consolidated-tool-definitions.d.ts +5462 -1781
  97. package/dist/tools/consolidated-tool-definitions.js +829 -496
  98. package/dist/tools/consolidated-tool-handlers.d.ts +2 -1
  99. package/dist/tools/consolidated-tool-handlers.js +211 -1026
  100. package/dist/tools/debug.d.ts +143 -85
  101. package/dist/tools/debug.js +234 -180
  102. package/dist/tools/dynamic-handler-registry.d.ts +11 -0
  103. package/dist/tools/dynamic-handler-registry.js +101 -0
  104. package/dist/tools/editor.d.ts +139 -18
  105. package/dist/tools/editor.js +239 -244
  106. package/dist/tools/engine.d.ts +10 -4
  107. package/dist/tools/engine.js +13 -5
  108. package/dist/tools/environment.d.ts +36 -0
  109. package/dist/tools/environment.js +267 -0
  110. package/dist/tools/foliage.d.ts +105 -14
  111. package/dist/tools/foliage.js +219 -331
  112. package/dist/tools/handlers/actor-handlers.d.ts +3 -0
  113. package/dist/tools/handlers/actor-handlers.js +232 -0
  114. package/dist/tools/handlers/animation-handlers.d.ts +3 -0
  115. package/dist/tools/handlers/animation-handlers.js +185 -0
  116. package/dist/tools/handlers/argument-helper.d.ts +16 -0
  117. package/dist/tools/handlers/argument-helper.js +80 -0
  118. package/dist/tools/handlers/asset-handlers.d.ts +3 -0
  119. package/dist/tools/handlers/asset-handlers.js +496 -0
  120. package/dist/tools/handlers/audio-handlers.d.ts +3 -0
  121. package/dist/tools/handlers/audio-handlers.js +166 -0
  122. package/dist/tools/handlers/blueprint-handlers.d.ts +4 -0
  123. package/dist/tools/handlers/blueprint-handlers.js +358 -0
  124. package/dist/tools/handlers/common-handlers.d.ts +14 -0
  125. package/dist/tools/handlers/common-handlers.js +56 -0
  126. package/dist/tools/handlers/editor-handlers.d.ts +3 -0
  127. package/dist/tools/handlers/editor-handlers.js +119 -0
  128. package/dist/tools/handlers/effect-handlers.d.ts +3 -0
  129. package/dist/tools/handlers/effect-handlers.js +171 -0
  130. package/dist/tools/handlers/environment-handlers.d.ts +3 -0
  131. package/dist/tools/handlers/environment-handlers.js +170 -0
  132. package/dist/tools/handlers/graph-handlers.d.ts +3 -0
  133. package/dist/tools/handlers/graph-handlers.js +90 -0
  134. package/dist/tools/handlers/input-handlers.d.ts +3 -0
  135. package/dist/tools/handlers/input-handlers.js +21 -0
  136. package/dist/tools/handlers/inspect-handlers.d.ts +3 -0
  137. package/dist/tools/handlers/inspect-handlers.js +383 -0
  138. package/dist/tools/handlers/level-handlers.d.ts +3 -0
  139. package/dist/tools/handlers/level-handlers.js +237 -0
  140. package/dist/tools/handlers/lighting-handlers.d.ts +3 -0
  141. package/dist/tools/handlers/lighting-handlers.js +144 -0
  142. package/dist/tools/handlers/performance-handlers.d.ts +3 -0
  143. package/dist/tools/handlers/performance-handlers.js +130 -0
  144. package/dist/tools/handlers/pipeline-handlers.d.ts +3 -0
  145. package/dist/tools/handlers/pipeline-handlers.js +110 -0
  146. package/dist/tools/handlers/sequence-handlers.d.ts +3 -0
  147. package/dist/tools/handlers/sequence-handlers.js +376 -0
  148. package/dist/tools/handlers/system-handlers.d.ts +4 -0
  149. package/dist/tools/handlers/system-handlers.js +506 -0
  150. package/dist/tools/input.d.ts +19 -0
  151. package/dist/tools/input.js +89 -0
  152. package/dist/tools/introspection.d.ts +103 -40
  153. package/dist/tools/introspection.js +425 -568
  154. package/dist/tools/landscape.d.ts +97 -36
  155. package/dist/tools/landscape.js +280 -409
  156. package/dist/tools/level.d.ts +130 -10
  157. package/dist/tools/level.js +639 -675
  158. package/dist/tools/lighting.d.ts +77 -38
  159. package/dist/tools/lighting.js +441 -943
  160. package/dist/tools/logs.d.ts +3 -3
  161. package/dist/tools/logs.js +5 -57
  162. package/dist/tools/materials.d.ts +91 -24
  163. package/dist/tools/materials.js +190 -118
  164. package/dist/tools/niagara.d.ts +149 -39
  165. package/dist/tools/niagara.js +232 -182
  166. package/dist/tools/performance.d.ts +27 -12
  167. package/dist/tools/performance.js +204 -122
  168. package/dist/tools/physics.d.ts +32 -77
  169. package/dist/tools/physics.js +171 -582
  170. package/dist/tools/property-dictionary.d.ts +13 -0
  171. package/dist/tools/property-dictionary.js +82 -0
  172. package/dist/tools/sequence.d.ts +73 -48
  173. package/dist/tools/sequence.js +196 -748
  174. package/dist/tools/tool-definition-utils.d.ts +59 -0
  175. package/dist/tools/tool-definition-utils.js +35 -0
  176. package/dist/tools/ui.d.ts +66 -34
  177. package/dist/tools/ui.js +134 -214
  178. package/dist/types/env.d.ts +0 -3
  179. package/dist/types/env.js +0 -7
  180. package/dist/types/tool-interfaces.d.ts +898 -0
  181. package/dist/types/tool-interfaces.js +2 -0
  182. package/dist/types/tool-types.d.ts +183 -19
  183. package/dist/types/tool-types.js +0 -4
  184. package/dist/unreal-bridge.d.ts +24 -131
  185. package/dist/unreal-bridge.js +364 -1506
  186. package/dist/utils/command-validator.d.ts +9 -0
  187. package/dist/utils/command-validator.js +67 -0
  188. package/dist/utils/elicitation.d.ts +1 -1
  189. package/dist/utils/elicitation.js +12 -15
  190. package/dist/utils/error-handler.d.ts +2 -51
  191. package/dist/utils/error-handler.js +11 -87
  192. package/dist/utils/ini-reader.d.ts +3 -0
  193. package/dist/utils/ini-reader.js +69 -0
  194. package/dist/utils/logger.js +9 -6
  195. package/dist/utils/normalize.d.ts +3 -0
  196. package/dist/utils/normalize.js +56 -0
  197. package/dist/utils/response-factory.d.ts +7 -0
  198. package/dist/utils/response-factory.js +33 -0
  199. package/dist/utils/response-validator.d.ts +3 -24
  200. package/dist/utils/response-validator.js +130 -81
  201. package/dist/utils/result-helpers.d.ts +4 -5
  202. package/dist/utils/result-helpers.js +15 -16
  203. package/dist/utils/safe-json.js +5 -11
  204. package/dist/utils/unreal-command-queue.d.ts +24 -0
  205. package/dist/utils/unreal-command-queue.js +120 -0
  206. package/dist/utils/validation.d.ts +0 -40
  207. package/dist/utils/validation.js +1 -78
  208. package/dist/wasm/index.d.ts +70 -0
  209. package/dist/wasm/index.js +535 -0
  210. package/docs/GraphQL-API.md +888 -0
  211. package/docs/Migration-Guide-v0.5.0.md +692 -0
  212. package/docs/Roadmap.md +53 -0
  213. package/docs/WebAssembly-Integration.md +628 -0
  214. package/docs/editor-plugin-extension.md +370 -0
  215. package/docs/handler-mapping.md +242 -0
  216. package/docs/native-automation-progress.md +128 -0
  217. package/docs/testing-guide.md +423 -0
  218. package/mcp-config-example.json +6 -6
  219. package/package.json +60 -27
  220. package/plugins/McpAutomationBridge/Config/FilterPlugin.ini +8 -0
  221. package/plugins/McpAutomationBridge/McpAutomationBridge.uplugin +64 -0
  222. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/McpAutomationBridge.Build.cs +189 -0
  223. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.cpp +22 -0
  224. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.h +30 -0
  225. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeHelpers.h +1983 -0
  226. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeModule.cpp +72 -0
  227. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSettings.cpp +46 -0
  228. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSubsystem.cpp +581 -0
  229. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AnimationHandlers.cpp +2394 -0
  230. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetQueryHandlers.cpp +300 -0
  231. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetWorkflowHandlers.cpp +2807 -0
  232. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AudioHandlers.cpp +1087 -0
  233. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BehaviorTreeHandlers.cpp +488 -0
  234. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.cpp +643 -0
  235. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.h +31 -0
  236. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintGraphHandlers.cpp +1184 -0
  237. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers.cpp +5652 -0
  238. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers_List.cpp +152 -0
  239. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ControlHandlers.cpp +2614 -0
  240. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_DebugHandlers.cpp +42 -0
  241. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EditorFunctionHandlers.cpp +1237 -0
  242. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EffectHandlers.cpp +1701 -0
  243. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EnvironmentHandlers.cpp +2145 -0
  244. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_FoliageHandlers.cpp +954 -0
  245. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InputHandlers.cpp +209 -0
  246. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InsightsHandlers.cpp +41 -0
  247. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LandscapeHandlers.cpp +1164 -0
  248. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LevelHandlers.cpp +762 -0
  249. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LightingHandlers.cpp +634 -0
  250. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LogHandlers.cpp +136 -0
  251. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_MaterialGraphHandlers.cpp +494 -0
  252. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraGraphHandlers.cpp +278 -0
  253. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraHandlers.cpp +625 -0
  254. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PerformanceHandlers.cpp +401 -0
  255. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PipelineHandlers.cpp +67 -0
  256. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ProcessRequest.cpp +735 -0
  257. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PropertyHandlers.cpp +2634 -0
  258. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_RenderHandlers.cpp +189 -0
  259. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.cpp +917 -0
  260. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.h +39 -0
  261. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequenceHandlers.cpp +2670 -0
  262. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequencerHandlers.cpp +519 -0
  263. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_TestHandlers.cpp +38 -0
  264. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_UiHandlers.cpp +668 -0
  265. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_WorldPartitionHandlers.cpp +346 -0
  266. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.cpp +1330 -0
  267. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.h +149 -0
  268. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpConnectionManager.cpp +783 -0
  269. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSettings.h +115 -0
  270. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSubsystem.h +796 -0
  271. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpConnectionManager.h +117 -0
  272. package/scripts/check-unreal-connection.mjs +19 -0
  273. package/scripts/clean-tmp.js +23 -0
  274. package/scripts/patch-wasm.js +26 -0
  275. package/scripts/run-all-tests.mjs +131 -0
  276. package/scripts/smoke-test.ts +94 -0
  277. package/scripts/sync-mcp-plugin.js +143 -0
  278. package/scripts/test-no-plugin-alternates.mjs +113 -0
  279. package/scripts/validate-server.js +46 -0
  280. package/scripts/verify-automation-bridge.js +200 -0
  281. package/server.json +57 -21
  282. package/src/automation/bridge.ts +558 -0
  283. package/src/automation/connection-manager.ts +130 -0
  284. package/src/automation/handshake.ts +99 -0
  285. package/src/automation/index.ts +2 -0
  286. package/src/automation/message-handler.ts +167 -0
  287. package/src/automation/request-tracker.ts +123 -0
  288. package/src/automation/types.ts +107 -0
  289. package/src/cli.ts +33 -6
  290. package/src/config.ts +73 -0
  291. package/src/constants.ts +12 -0
  292. package/src/graphql/resolvers.ts +1010 -0
  293. package/src/graphql/schema.ts +452 -0
  294. package/src/graphql/server.ts +154 -0
  295. package/src/graphql/types.ts +7 -0
  296. package/src/handlers/resource-handlers.ts +186 -0
  297. package/src/index.ts +152 -663
  298. package/src/prompts/index.ts +4 -4
  299. package/src/resources/actors.ts +58 -76
  300. package/src/resources/assets.ts +147 -134
  301. package/src/resources/levels.ts +28 -33
  302. package/src/server/resource-registry.ts +47 -0
  303. package/src/server/tool-registry.ts +354 -0
  304. package/src/server-setup.ts +148 -0
  305. package/src/services/health-monitor.ts +132 -0
  306. package/src/services/metrics-server.ts +142 -0
  307. package/src/tools/actors.ts +417 -322
  308. package/src/tools/animation.ts +671 -461
  309. package/src/tools/assets.ts +353 -289
  310. package/src/tools/audio.ts +323 -766
  311. package/src/tools/base-tool.ts +52 -0
  312. package/src/tools/behavior-tree.ts +45 -0
  313. package/src/tools/blueprint/helpers.ts +189 -0
  314. package/src/tools/blueprint.ts +787 -965
  315. package/src/tools/consolidated-tool-definitions.ts +993 -515
  316. package/src/tools/consolidated-tool-handlers.ts +272 -1139
  317. package/src/tools/debug.ts +292 -187
  318. package/src/tools/dynamic-handler-registry.ts +151 -0
  319. package/src/tools/editor.ts +309 -246
  320. package/src/tools/engine.ts +14 -3
  321. package/src/tools/environment.ts +287 -0
  322. package/src/tools/foliage.ts +314 -379
  323. package/src/tools/handlers/actor-handlers.ts +271 -0
  324. package/src/tools/handlers/animation-handlers.ts +237 -0
  325. package/src/tools/handlers/argument-helper.ts +142 -0
  326. package/src/tools/handlers/asset-handlers.ts +532 -0
  327. package/src/tools/handlers/audio-handlers.ts +194 -0
  328. package/src/tools/handlers/blueprint-handlers.ts +380 -0
  329. package/src/tools/handlers/common-handlers.ts +87 -0
  330. package/src/tools/handlers/editor-handlers.ts +123 -0
  331. package/src/tools/handlers/effect-handlers.ts +220 -0
  332. package/src/tools/handlers/environment-handlers.ts +183 -0
  333. package/src/tools/handlers/graph-handlers.ts +116 -0
  334. package/src/tools/handlers/input-handlers.ts +28 -0
  335. package/src/tools/handlers/inspect-handlers.ts +450 -0
  336. package/src/tools/handlers/level-handlers.ts +252 -0
  337. package/src/tools/handlers/lighting-handlers.ts +147 -0
  338. package/src/tools/handlers/performance-handlers.ts +132 -0
  339. package/src/tools/handlers/pipeline-handlers.ts +127 -0
  340. package/src/tools/handlers/sequence-handlers.ts +415 -0
  341. package/src/tools/handlers/system-handlers.ts +564 -0
  342. package/src/tools/input.ts +101 -0
  343. package/src/tools/introspection.ts +493 -584
  344. package/src/tools/landscape.ts +394 -489
  345. package/src/tools/level.ts +752 -694
  346. package/src/tools/lighting.ts +583 -984
  347. package/src/tools/logs.ts +9 -57
  348. package/src/tools/materials.ts +231 -121
  349. package/src/tools/niagara.ts +293 -168
  350. package/src/tools/performance.ts +320 -168
  351. package/src/tools/physics.ts +268 -613
  352. package/src/tools/property-dictionary.ts +98 -0
  353. package/src/tools/sequence.ts +255 -815
  354. package/src/tools/tool-definition-utils.ts +35 -0
  355. package/src/tools/ui.ts +207 -283
  356. package/src/types/env.ts +0 -10
  357. package/src/types/tool-interfaces.ts +250 -0
  358. package/src/types/tool-types.ts +243 -21
  359. package/src/unreal-bridge.ts +460 -1550
  360. package/src/utils/command-validator.ts +75 -0
  361. package/src/utils/elicitation.ts +10 -7
  362. package/src/utils/error-handler.ts +14 -90
  363. package/src/utils/ini-reader.ts +86 -0
  364. package/src/utils/logger.ts +8 -3
  365. package/src/utils/normalize.ts +60 -0
  366. package/src/utils/response-factory.ts +39 -0
  367. package/src/utils/response-validator.ts +176 -56
  368. package/src/utils/result-helpers.ts +21 -19
  369. package/src/utils/safe-json.ts +14 -11
  370. package/src/utils/unreal-command-queue.ts +152 -0
  371. package/src/utils/validation.ts +4 -1
  372. package/src/wasm/index.ts +838 -0
  373. package/test-server.mjs +100 -0
  374. package/tests/run-unreal-tool-tests.mjs +242 -14
  375. package/tests/test-animation.mjs +44 -0
  376. package/tests/test-asset-advanced.mjs +82 -0
  377. package/tests/test-asset-errors.mjs +35 -0
  378. package/tests/test-audio.mjs +219 -0
  379. package/tests/test-automation-timeouts.mjs +98 -0
  380. package/tests/test-behavior-tree.mjs +261 -0
  381. package/tests/test-blueprint-events.mjs +35 -0
  382. package/tests/test-blueprint-graph.mjs +79 -0
  383. package/tests/test-blueprint.mjs +577 -0
  384. package/tests/test-client-mode.mjs +86 -0
  385. package/tests/test-console-command.mjs +56 -0
  386. package/tests/test-control-actor.mjs +425 -0
  387. package/tests/test-control-editor.mjs +80 -0
  388. package/tests/test-extra-tools.mjs +38 -0
  389. package/tests/test-graphql.mjs +322 -0
  390. package/tests/test-inspect.mjs +72 -0
  391. package/tests/test-landscape.mjs +60 -0
  392. package/tests/test-manage-asset.mjs +438 -0
  393. package/tests/test-manage-level.mjs +70 -0
  394. package/tests/test-materials.mjs +356 -0
  395. package/tests/test-niagara.mjs +185 -0
  396. package/tests/test-no-inline-python.mjs +122 -0
  397. package/tests/test-plugin-handshake.mjs +82 -0
  398. package/tests/test-render.mjs +33 -0
  399. package/tests/test-runner.mjs +933 -0
  400. package/tests/test-search-assets.mjs +66 -0
  401. package/tests/test-sequence.mjs +68 -0
  402. package/tests/test-system.mjs +57 -0
  403. package/tests/test-wasm.mjs +193 -0
  404. package/tests/test-world-partition.mjs +215 -0
  405. package/tsconfig.json +3 -3
  406. package/wasm/Cargo.lock +363 -0
  407. package/wasm/Cargo.toml +42 -0
  408. package/wasm/LICENSE +21 -0
  409. package/wasm/README.md +253 -0
  410. package/wasm/src/dependency_resolver.rs +377 -0
  411. package/wasm/src/lib.rs +153 -0
  412. package/wasm/src/property_parser.rs +271 -0
  413. package/wasm/src/transform_math.rs +396 -0
  414. package/wasm/tests/integration.rs +109 -0
  415. package/.github/workflows/smithery-build.yml +0 -29
  416. package/dist/tools/build_environment_advanced.d.ts +0 -65
  417. package/dist/tools/build_environment_advanced.js +0 -633
  418. package/dist/tools/rc.d.ts +0 -110
  419. package/dist/tools/rc.js +0 -437
  420. package/dist/tools/visual.d.ts +0 -40
  421. package/dist/tools/visual.js +0 -282
  422. package/dist/utils/http.d.ts +0 -6
  423. package/dist/utils/http.js +0 -151
  424. package/dist/utils/python-output.d.ts +0 -18
  425. package/dist/utils/python-output.js +0 -290
  426. package/dist/utils/python.d.ts +0 -2
  427. package/dist/utils/python.js +0 -4
  428. package/dist/utils/stdio-redirect.d.ts +0 -2
  429. package/dist/utils/stdio-redirect.js +0 -20
  430. package/docs/unreal-tool-test-cases.md +0 -574
  431. package/smithery.yaml +0 -29
  432. package/src/tools/build_environment_advanced.ts +0 -732
  433. package/src/tools/rc.ts +0 -515
  434. package/src/tools/visual.ts +0 -281
  435. package/src/utils/http.ts +0 -187
  436. package/src/utils/python-output.ts +0 -351
  437. package/src/utils/python.ts +0 -3
  438. 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,115 @@
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
+ export class GraphQLServer {
6
+ log = new Logger('GraphQLServer');
7
+ server = null;
8
+ config;
9
+ bridge;
10
+ automationBridge;
11
+ constructor(bridge, automationBridge, config = {}) {
12
+ this.bridge = bridge;
13
+ this.automationBridge = automationBridge;
14
+ this.config = {
15
+ enabled: config.enabled ?? process.env.GRAPHQL_ENABLED === 'true',
16
+ port: config.port ?? Number(process.env.GRAPHQL_PORT ?? 4000),
17
+ host: config.host ?? process.env.GRAPHQL_HOST ?? '127.0.0.1',
18
+ path: config.path ?? process.env.GRAPHQL_PATH ?? '/graphql',
19
+ cors: config.cors ?? {
20
+ origin: process.env.GRAPHQL_CORS_ORIGIN ?? '*',
21
+ credentials: process.env.GRAPHQL_CORS_CREDENTIALS === 'true'
22
+ }
23
+ };
24
+ }
25
+ async start() {
26
+ if (!this.config.enabled) {
27
+ this.log.info('GraphQL server is disabled');
28
+ return;
29
+ }
30
+ try {
31
+ const schema = createGraphQLSchema(this.bridge, this.automationBridge);
32
+ const yoga = createYoga({
33
+ schema,
34
+ graphqlEndpoint: this.config.path,
35
+ cors: {
36
+ origin: this.config.cors.origin,
37
+ credentials: this.config.cors.credentials,
38
+ methods: ['GET', 'POST', 'OPTIONS'],
39
+ allowedHeaders: ['Content-Type', 'Authorization']
40
+ },
41
+ context: () => ({
42
+ bridge: this.bridge,
43
+ automationBridge: this.automationBridge
44
+ }),
45
+ logging: {
46
+ debug: (...args) => this.log.debug('[GraphQL]', ...args),
47
+ info: (...args) => this.log.info('[GraphQL]', ...args),
48
+ warn: (...args) => this.log.warn('[GraphQL]', ...args),
49
+ error: (...args) => this.log.error('[GraphQL]', ...args)
50
+ }
51
+ });
52
+ this.server = createServer(yoga);
53
+ await new Promise((resolve, reject) => {
54
+ if (!this.server) {
55
+ reject(new Error('Server not initialized'));
56
+ return;
57
+ }
58
+ this.server.on('error', (error) => {
59
+ this.log.error('GraphQL server error:', error);
60
+ reject(error);
61
+ });
62
+ this.server.listen(this.config.port, this.config.host, () => {
63
+ this.log.info(`GraphQL server started at http://${this.config.host}:${this.config.port}${this.config.path}`);
64
+ this.log.info('GraphQL Playground available at the endpoint URL');
65
+ resolve();
66
+ });
67
+ });
68
+ this.setupShutdown();
69
+ }
70
+ catch (error) {
71
+ this.log.error('Failed to start GraphQL server:', error);
72
+ throw error;
73
+ }
74
+ }
75
+ async stop() {
76
+ return new Promise((resolve, reject) => {
77
+ if (!this.server) {
78
+ resolve();
79
+ return;
80
+ }
81
+ this.server.close((error) => {
82
+ if (error) {
83
+ this.log.error('Error closing GraphQL server:', error);
84
+ reject(error);
85
+ }
86
+ else {
87
+ this.log.info('GraphQL server stopped');
88
+ resolve();
89
+ }
90
+ });
91
+ });
92
+ }
93
+ setupShutdown() {
94
+ const gracefulShutdown = async (signal) => {
95
+ this.log.info(`Received ${signal}, shutting down GraphQL server...`);
96
+ try {
97
+ await this.stop();
98
+ process.exit(0);
99
+ }
100
+ catch (error) {
101
+ this.log.error('Error during GraphQL server shutdown:', error);
102
+ process.exit(1);
103
+ }
104
+ };
105
+ process.on('SIGINT', () => gracefulShutdown('SIGINT'));
106
+ process.on('SIGTERM', () => gracefulShutdown('SIGTERM'));
107
+ }
108
+ getConfig() {
109
+ return this.config;
110
+ }
111
+ isRunning() {
112
+ return this.server !== null && this.server.listening;
113
+ }
114
+ }
115
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1,7 @@
1
+ import type { UnrealBridge } from '../unreal-bridge.js';
2
+ import { AutomationBridge } from '../automation/index.js';
3
+ export interface GraphQLContext {
4
+ bridge: UnrealBridge;
5
+ automationBridge: AutomationBridge;
6
+ }
7
+ //# 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