unreal-engine-mcp-server 0.5.4 → 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/dist/automation/bridge.d.ts.map +1 -0
  2. package/dist/automation/bridge.js.map +1 -0
  3. package/dist/automation/connection-manager.d.ts.map +1 -0
  4. package/dist/automation/connection-manager.js.map +1 -0
  5. package/dist/automation/handshake.d.ts.map +1 -0
  6. package/dist/automation/handshake.js.map +1 -0
  7. package/dist/automation/index.d.ts.map +1 -0
  8. package/dist/automation/index.js.map +1 -0
  9. package/dist/automation/message-handler.d.ts.map +1 -0
  10. package/dist/automation/message-handler.js.map +1 -0
  11. package/dist/automation/request-tracker.d.ts.map +1 -0
  12. package/dist/automation/request-tracker.js.map +1 -0
  13. package/dist/automation/types.d.ts.map +1 -0
  14. package/dist/automation/types.js.map +1 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +4 -3
  17. package/dist/cli.js.map +1 -0
  18. package/dist/config/class-aliases.d.ts.map +1 -0
  19. package/dist/config/class-aliases.js.map +1 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/constants.d.ts.map +1 -0
  23. package/dist/constants.js.map +1 -0
  24. package/dist/graphql/loaders.d.ts.map +1 -0
  25. package/dist/graphql/loaders.js.map +1 -0
  26. package/dist/graphql/resolvers.d.ts.map +1 -0
  27. package/dist/graphql/resolvers.js +29 -29
  28. package/dist/graphql/resolvers.js.map +1 -0
  29. package/dist/graphql/schema.d.ts.map +1 -0
  30. package/dist/graphql/schema.js.map +1 -0
  31. package/dist/graphql/server.d.ts.map +1 -0
  32. package/dist/graphql/server.js.map +1 -0
  33. package/dist/graphql/types.d.ts.map +1 -0
  34. package/dist/graphql/types.js.map +1 -0
  35. package/dist/handlers/resource-handlers.d.ts.map +1 -0
  36. package/dist/handlers/resource-handlers.js.map +1 -0
  37. package/dist/index.d.ts +1 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +64 -7
  40. package/dist/index.js.map +1 -0
  41. package/dist/resources/actors.d.ts.map +1 -0
  42. package/dist/resources/actors.js.map +1 -0
  43. package/dist/resources/assets.d.ts.map +1 -0
  44. package/dist/resources/assets.js +6 -4
  45. package/dist/resources/assets.js.map +1 -0
  46. package/dist/resources/levels.d.ts.map +1 -0
  47. package/dist/resources/levels.js.map +1 -0
  48. package/dist/server/resource-registry.d.ts.map +1 -0
  49. package/dist/server/resource-registry.js.map +1 -0
  50. package/dist/server/tool-registry.d.ts.map +1 -0
  51. package/dist/server/tool-registry.js.map +1 -0
  52. package/dist/server-setup.d.ts.map +1 -0
  53. package/dist/server-setup.js.map +1 -0
  54. package/dist/services/health-monitor.d.ts.map +1 -0
  55. package/dist/services/health-monitor.js.map +1 -0
  56. package/dist/services/metrics-server.d.ts.map +1 -0
  57. package/dist/services/metrics-server.js.map +1 -0
  58. package/dist/tools/actors.d.ts.map +1 -0
  59. package/dist/tools/actors.js +3 -1
  60. package/dist/tools/actors.js.map +1 -0
  61. package/dist/tools/animation.d.ts.map +1 -0
  62. package/dist/tools/animation.js +2 -2
  63. package/dist/tools/animation.js.map +1 -0
  64. package/dist/tools/assets.d.ts.map +1 -0
  65. package/dist/tools/assets.js.map +1 -0
  66. package/dist/tools/audio.d.ts.map +1 -0
  67. package/dist/tools/audio.js.map +1 -0
  68. package/dist/tools/base-tool.d.ts.map +1 -0
  69. package/dist/tools/base-tool.js.map +1 -0
  70. package/dist/tools/behavior-tree.d.ts.map +1 -0
  71. package/dist/tools/behavior-tree.js.map +1 -0
  72. package/dist/tools/blueprint.d.ts.map +1 -0
  73. package/dist/tools/blueprint.js +4 -2
  74. package/dist/tools/blueprint.js.map +1 -0
  75. package/dist/tools/consolidated-tool-definitions.d.ts.map +1 -0
  76. package/dist/tools/consolidated-tool-definitions.js.map +1 -0
  77. package/dist/tools/consolidated-tool-handlers.d.ts.map +1 -0
  78. package/dist/tools/consolidated-tool-handlers.js.map +1 -0
  79. package/dist/tools/debug.d.ts.map +1 -0
  80. package/dist/tools/debug.js +3 -1
  81. package/dist/tools/debug.js.map +1 -0
  82. package/dist/tools/dynamic-handler-registry.d.ts.map +1 -0
  83. package/dist/tools/dynamic-handler-registry.js +3 -1
  84. package/dist/tools/dynamic-handler-registry.js.map +1 -0
  85. package/dist/tools/editor.d.ts.map +1 -0
  86. package/dist/tools/editor.js +1 -1
  87. package/dist/tools/editor.js.map +1 -0
  88. package/dist/tools/engine.d.ts.map +1 -0
  89. package/dist/tools/engine.js.map +1 -0
  90. package/dist/tools/environment.d.ts.map +1 -0
  91. package/dist/tools/environment.js +2 -2
  92. package/dist/tools/environment.js.map +1 -0
  93. package/dist/tools/foliage.d.ts.map +1 -0
  94. package/dist/tools/foliage.js.map +1 -0
  95. package/dist/tools/handlers/actor-handlers.d.ts +1 -1
  96. package/dist/tools/handlers/actor-handlers.d.ts.map +1 -0
  97. package/dist/tools/handlers/actor-handlers.js +6 -5
  98. package/dist/tools/handlers/actor-handlers.js.map +1 -0
  99. package/dist/tools/handlers/animation-handlers.d.ts.map +1 -0
  100. package/dist/tools/handlers/animation-handlers.js.map +1 -0
  101. package/dist/tools/handlers/argument-helper.d.ts.map +1 -0
  102. package/dist/tools/handlers/argument-helper.js.map +1 -0
  103. package/dist/tools/handlers/asset-handlers.d.ts.map +1 -0
  104. package/dist/tools/handlers/asset-handlers.js +5 -1
  105. package/dist/tools/handlers/asset-handlers.js.map +1 -0
  106. package/dist/tools/handlers/audio-handlers.d.ts.map +1 -0
  107. package/dist/tools/handlers/audio-handlers.js.map +1 -0
  108. package/dist/tools/handlers/blueprint-handlers.d.ts.map +1 -0
  109. package/dist/tools/handlers/blueprint-handlers.js +2 -1
  110. package/dist/tools/handlers/blueprint-handlers.js.map +1 -0
  111. package/dist/tools/handlers/common-handlers.d.ts.map +1 -0
  112. package/dist/tools/handlers/common-handlers.js.map +1 -0
  113. package/dist/tools/handlers/editor-handlers.d.ts.map +1 -0
  114. package/dist/tools/handlers/editor-handlers.js +12 -2
  115. package/dist/tools/handlers/editor-handlers.js.map +1 -0
  116. package/dist/tools/handlers/effect-handlers.d.ts.map +1 -0
  117. package/dist/tools/handlers/effect-handlers.js.map +1 -0
  118. package/dist/tools/handlers/environment-handlers.d.ts.map +1 -0
  119. package/dist/tools/handlers/environment-handlers.js.map +1 -0
  120. package/dist/tools/handlers/graph-handlers.d.ts.map +1 -0
  121. package/dist/tools/handlers/graph-handlers.js +61 -1
  122. package/dist/tools/handlers/graph-handlers.js.map +1 -0
  123. package/dist/tools/handlers/input-handlers.d.ts.map +1 -0
  124. package/dist/tools/handlers/input-handlers.js.map +1 -0
  125. package/dist/tools/handlers/inspect-handlers.d.ts.map +1 -0
  126. package/dist/tools/handlers/inspect-handlers.js.map +1 -0
  127. package/dist/tools/handlers/level-handlers.d.ts.map +1 -0
  128. package/dist/tools/handlers/level-handlers.js.map +1 -0
  129. package/dist/tools/handlers/lighting-handlers.d.ts.map +1 -0
  130. package/dist/tools/handlers/lighting-handlers.js +23 -1
  131. package/dist/tools/handlers/lighting-handlers.js.map +1 -0
  132. package/dist/tools/handlers/performance-handlers.d.ts.map +1 -0
  133. package/dist/tools/handlers/performance-handlers.js +15 -2
  134. package/dist/tools/handlers/performance-handlers.js.map +1 -0
  135. package/dist/tools/handlers/pipeline-handlers.d.ts.map +1 -0
  136. package/dist/tools/handlers/pipeline-handlers.js.map +1 -0
  137. package/dist/tools/handlers/sequence-handlers.d.ts.map +1 -0
  138. package/dist/tools/handlers/sequence-handlers.js.map +1 -0
  139. package/dist/tools/handlers/system-handlers.d.ts.map +1 -0
  140. package/dist/tools/handlers/system-handlers.js +16 -1
  141. package/dist/tools/handlers/system-handlers.js.map +1 -0
  142. package/dist/tools/input.d.ts.map +1 -0
  143. package/dist/tools/input.js +3 -1
  144. package/dist/tools/input.js.map +1 -0
  145. package/dist/tools/introspection.d.ts.map +1 -0
  146. package/dist/tools/introspection.js.map +1 -0
  147. package/dist/tools/landscape.d.ts.map +1 -0
  148. package/dist/tools/landscape.js +3 -1
  149. package/dist/tools/landscape.js.map +1 -0
  150. package/dist/tools/level.d.ts.map +1 -0
  151. package/dist/tools/level.js.map +1 -0
  152. package/dist/tools/lighting.d.ts.map +1 -0
  153. package/dist/tools/lighting.js +3 -1
  154. package/dist/tools/lighting.js.map +1 -0
  155. package/dist/tools/logs.d.ts.map +1 -0
  156. package/dist/tools/logs.js.map +1 -0
  157. package/dist/tools/materials.d.ts.map +1 -0
  158. package/dist/tools/materials.js +3 -1
  159. package/dist/tools/materials.js.map +1 -0
  160. package/dist/tools/niagara.d.ts.map +1 -0
  161. package/dist/tools/niagara.js +7 -5
  162. package/dist/tools/niagara.js.map +1 -0
  163. package/dist/tools/performance.d.ts.map +1 -0
  164. package/dist/tools/performance.js.map +1 -0
  165. package/dist/tools/physics.d.ts.map +1 -0
  166. package/dist/tools/physics.js +9 -7
  167. package/dist/tools/physics.js.map +1 -0
  168. package/dist/tools/property-dictionary.d.ts.map +1 -0
  169. package/dist/tools/property-dictionary.js.map +1 -0
  170. package/dist/tools/sequence.d.ts.map +1 -0
  171. package/dist/tools/sequence.js +3 -1
  172. package/dist/tools/sequence.js.map +1 -0
  173. package/dist/tools/tool-definition-utils.d.ts.map +1 -0
  174. package/dist/tools/tool-definition-utils.js.map +1 -0
  175. package/dist/tools/ui.d.ts.map +1 -0
  176. package/dist/tools/ui.js +3 -1
  177. package/dist/tools/ui.js.map +1 -0
  178. package/dist/types/automation-responses.d.ts.map +1 -0
  179. package/dist/types/automation-responses.js.map +1 -0
  180. package/dist/types/env.d.ts.map +1 -0
  181. package/dist/types/env.js.map +1 -0
  182. package/dist/types/handler-types.d.ts.map +1 -0
  183. package/dist/types/handler-types.js.map +1 -0
  184. package/dist/types/tool-interfaces.d.ts.map +1 -0
  185. package/dist/types/tool-interfaces.js.map +1 -0
  186. package/dist/types/tool-types.d.ts.map +1 -0
  187. package/dist/types/tool-types.js.map +1 -0
  188. package/dist/unreal-bridge.d.ts +1 -0
  189. package/dist/unreal-bridge.d.ts.map +1 -0
  190. package/dist/unreal-bridge.js +8 -0
  191. package/dist/unreal-bridge.js.map +1 -0
  192. package/dist/utils/command-validator.d.ts.map +1 -0
  193. package/dist/utils/command-validator.js.map +1 -0
  194. package/dist/utils/elicitation.d.ts.map +1 -0
  195. package/dist/utils/elicitation.js.map +1 -0
  196. package/dist/utils/error-handler.d.ts.map +1 -0
  197. package/dist/utils/error-handler.js.map +1 -0
  198. package/dist/utils/ini-reader.d.ts.map +1 -0
  199. package/dist/utils/ini-reader.js.map +1 -0
  200. package/dist/utils/logger.d.ts.map +1 -0
  201. package/dist/utils/logger.js.map +1 -0
  202. package/dist/utils/normalize.d.ts.map +1 -0
  203. package/dist/utils/normalize.js.map +1 -0
  204. package/dist/utils/path-security.d.ts.map +1 -0
  205. package/dist/utils/path-security.js.map +1 -0
  206. package/dist/utils/response-factory.d.ts.map +1 -0
  207. package/dist/utils/response-factory.js +3 -1
  208. package/dist/utils/response-factory.js.map +1 -0
  209. package/dist/utils/response-validator.d.ts.map +1 -0
  210. package/dist/utils/response-validator.js.map +1 -0
  211. package/dist/utils/result-helpers.d.ts.map +1 -0
  212. package/dist/utils/result-helpers.js.map +1 -0
  213. package/dist/utils/safe-json.d.ts.map +1 -0
  214. package/dist/utils/safe-json.js.map +1 -0
  215. package/dist/utils/unreal-command-queue.d.ts.map +1 -0
  216. package/dist/utils/unreal-command-queue.js.map +1 -0
  217. package/dist/utils/validation.d.ts.map +1 -0
  218. package/dist/utils/validation.js.map +1 -0
  219. package/dist/wasm/index.d.ts.map +1 -0
  220. package/dist/wasm/index.js.map +1 -0
  221. package/package.json +12 -34
  222. package/server.json +2 -2
  223. package/.dockerignore +0 -57
  224. package/.env.example +0 -26
  225. package/.env.production +0 -61
  226. package/.eslintrc.json +0 -0
  227. package/.eslintrc.override.json +0 -8
  228. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -94
  229. package/.github/ISSUE_TEMPLATE/config.yml +0 -8
  230. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -56
  231. package/.github/copilot-instructions.md +0 -478
  232. package/.github/dependabot.yml +0 -19
  233. package/.github/labeler.yml +0 -24
  234. package/.github/labels.yml +0 -70
  235. package/.github/pull_request_template.md +0 -42
  236. package/.github/release-drafter-config.yml +0 -51
  237. package/.github/workflows/auto-merge.yml +0 -38
  238. package/.github/workflows/ci.yml +0 -38
  239. package/.github/workflows/dependency-review.yml +0 -17
  240. package/.github/workflows/gemini-issue-triage.yml +0 -172
  241. package/.github/workflows/greetings.yml +0 -27
  242. package/.github/workflows/labeler.yml +0 -17
  243. package/.github/workflows/links.yml +0 -80
  244. package/.github/workflows/pr-size-labeler.yml +0 -137
  245. package/.github/workflows/publish-mcp.yml +0 -79
  246. package/.github/workflows/release-drafter.yml +0 -24
  247. package/.github/workflows/release.yml +0 -112
  248. package/.github/workflows/semantic-pull-request.yml +0 -35
  249. package/.github/workflows/smoke-test.yml +0 -36
  250. package/.github/workflows/stale.yml +0 -28
  251. package/CONTRIBUTING.md +0 -140
  252. package/Dockerfile +0 -37
  253. package/GEMINI.md +0 -115
  254. package/Public/Plugin_setup_guide.mp4 +0 -0
  255. package/Public/icon.png +0 -0
  256. package/claude_desktop_config_example.json +0 -15
  257. package/dist/types/responses.d.ts +0 -249
  258. package/dist/types/responses.js +0 -2
  259. package/docs/GraphQL-API.md +0 -888
  260. package/docs/Migration-Guide-v0.5.0.md +0 -684
  261. package/docs/Roadmap.md +0 -53
  262. package/docs/WebAssembly-Integration.md +0 -628
  263. package/docs/editor-plugin-extension.md +0 -370
  264. package/docs/handler-mapping.md +0 -249
  265. package/docs/native-automation-progress.md +0 -128
  266. package/docs/testing-guide.md +0 -423
  267. package/eslint.config.mjs +0 -68
  268. package/mcp-config-example.json +0 -14
  269. package/plugins/McpAutomationBridge/Config/FilterPlugin.ini +0 -8
  270. package/plugins/McpAutomationBridge/McpAutomationBridge.uplugin +0 -64
  271. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/McpAutomationBridge.Build.cs +0 -189
  272. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.cpp +0 -22
  273. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.h +0 -30
  274. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeHelpers.h +0 -1983
  275. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeModule.cpp +0 -72
  276. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSettings.cpp +0 -46
  277. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSubsystem.cpp +0 -846
  278. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AnimationHandlers.cpp +0 -2393
  279. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetQueryHandlers.cpp +0 -300
  280. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetWorkflowHandlers.cpp +0 -2807
  281. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AudioHandlers.cpp +0 -1087
  282. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BehaviorTreeHandlers.cpp +0 -488
  283. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.cpp +0 -643
  284. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.h +0 -31
  285. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintGraphHandlers.cpp +0 -1094
  286. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers.cpp +0 -5750
  287. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers_List.cpp +0 -152
  288. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ControlHandlers.cpp +0 -2614
  289. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_DebugHandlers.cpp +0 -42
  290. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EditorFunctionHandlers.cpp +0 -1237
  291. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EffectHandlers.cpp +0 -1725
  292. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EnvironmentHandlers.cpp +0 -2265
  293. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_FoliageHandlers.cpp +0 -954
  294. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InputHandlers.cpp +0 -209
  295. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InsightsHandlers.cpp +0 -41
  296. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LandscapeHandlers.cpp +0 -1164
  297. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LevelHandlers.cpp +0 -762
  298. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LightingHandlers.cpp +0 -663
  299. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LogHandlers.cpp +0 -136
  300. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_MaterialGraphHandlers.cpp +0 -494
  301. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraGraphHandlers.cpp +0 -278
  302. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraHandlers.cpp +0 -625
  303. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PerformanceHandlers.cpp +0 -401
  304. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PipelineHandlers.cpp +0 -67
  305. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ProcessRequest.cpp +0 -472
  306. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PropertyHandlers.cpp +0 -2634
  307. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_RenderHandlers.cpp +0 -189
  308. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.cpp +0 -917
  309. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.h +0 -39
  310. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequenceHandlers.cpp +0 -2706
  311. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequencerHandlers.cpp +0 -519
  312. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_TestHandlers.cpp +0 -38
  313. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_UiHandlers.cpp +0 -668
  314. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_WorldPartitionHandlers.cpp +0 -346
  315. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.cpp +0 -1345
  316. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.h +0 -149
  317. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpConnectionManager.cpp +0 -782
  318. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSettings.h +0 -115
  319. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSubsystem.h +0 -796
  320. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpConnectionManager.h +0 -117
  321. package/scripts/check-unreal-connection.mjs +0 -19
  322. package/scripts/clean-tmp.js +0 -23
  323. package/scripts/patch-wasm.js +0 -26
  324. package/scripts/run-all-tests.mjs +0 -136
  325. package/scripts/smoke-test.ts +0 -94
  326. package/scripts/sync-mcp-plugin.js +0 -143
  327. package/scripts/test-no-plugin-alternates.mjs +0 -113
  328. package/scripts/validate-server.js +0 -46
  329. package/scripts/verify-automation-bridge.js +0 -200
  330. package/src/automation/bridge.ts +0 -630
  331. package/src/automation/connection-manager.ts +0 -148
  332. package/src/automation/handshake.ts +0 -99
  333. package/src/automation/index.ts +0 -2
  334. package/src/automation/message-handler.ts +0 -192
  335. package/src/automation/request-tracker.ts +0 -155
  336. package/src/automation/types.ts +0 -108
  337. package/src/cli.ts +0 -34
  338. package/src/config/class-aliases.ts +0 -65
  339. package/src/config.ts +0 -73
  340. package/src/constants.ts +0 -29
  341. package/src/graphql/loaders.ts +0 -244
  342. package/src/graphql/resolvers.ts +0 -1008
  343. package/src/graphql/schema.ts +0 -452
  344. package/src/graphql/server.ts +0 -156
  345. package/src/graphql/types.ts +0 -10
  346. package/src/handlers/resource-handlers.ts +0 -186
  347. package/src/index.ts +0 -243
  348. package/src/resources/actors.ts +0 -127
  349. package/src/resources/assets.ts +0 -286
  350. package/src/resources/levels.ts +0 -68
  351. package/src/server/resource-registry.ts +0 -47
  352. package/src/server/tool-registry.ts +0 -354
  353. package/src/server-setup.ts +0 -114
  354. package/src/services/health-monitor.ts +0 -132
  355. package/src/services/metrics-server.ts +0 -176
  356. package/src/tools/actors.ts +0 -564
  357. package/src/tools/animation.ts +0 -941
  358. package/src/tools/assets.ts +0 -394
  359. package/src/tools/audio.ts +0 -499
  360. package/src/tools/base-tool.ts +0 -52
  361. package/src/tools/behavior-tree.ts +0 -45
  362. package/src/tools/blueprint.ts +0 -940
  363. package/src/tools/consolidated-tool-definitions.ts +0 -1256
  364. package/src/tools/consolidated-tool-handlers.ts +0 -302
  365. package/src/tools/debug.ts +0 -622
  366. package/src/tools/dynamic-handler-registry.ts +0 -33
  367. package/src/tools/editor.ts +0 -435
  368. package/src/tools/engine.ts +0 -43
  369. package/src/tools/environment.ts +0 -281
  370. package/src/tools/foliage.ts +0 -596
  371. package/src/tools/handlers/actor-handlers.ts +0 -244
  372. package/src/tools/handlers/animation-handlers.ts +0 -237
  373. package/src/tools/handlers/argument-helper.ts +0 -142
  374. package/src/tools/handlers/asset-handlers.ts +0 -550
  375. package/src/tools/handlers/audio-handlers.ts +0 -194
  376. package/src/tools/handlers/blueprint-handlers.ts +0 -380
  377. package/src/tools/handlers/common-handlers.ts +0 -108
  378. package/src/tools/handlers/editor-handlers.ts +0 -124
  379. package/src/tools/handlers/effect-handlers.ts +0 -224
  380. package/src/tools/handlers/environment-handlers.ts +0 -183
  381. package/src/tools/handlers/graph-handlers.ts +0 -117
  382. package/src/tools/handlers/input-handlers.ts +0 -28
  383. package/src/tools/handlers/inspect-handlers.ts +0 -450
  384. package/src/tools/handlers/level-handlers.ts +0 -253
  385. package/src/tools/handlers/lighting-handlers.ts +0 -151
  386. package/src/tools/handlers/performance-handlers.ts +0 -132
  387. package/src/tools/handlers/pipeline-handlers.ts +0 -194
  388. package/src/tools/handlers/sequence-handlers.ts +0 -438
  389. package/src/tools/handlers/system-handlers.ts +0 -564
  390. package/src/tools/input.ts +0 -160
  391. package/src/tools/introspection.ts +0 -689
  392. package/src/tools/landscape.ts +0 -649
  393. package/src/tools/level.ts +0 -989
  394. package/src/tools/lighting.ts +0 -1052
  395. package/src/tools/logs.ts +0 -219
  396. package/src/tools/materials.ts +0 -295
  397. package/src/tools/niagara.ts +0 -485
  398. package/src/tools/performance.ts +0 -661
  399. package/src/tools/physics.ts +0 -679
  400. package/src/tools/property-dictionary.ts +0 -98
  401. package/src/tools/sequence.ts +0 -385
  402. package/src/tools/tool-definition-utils.ts +0 -35
  403. package/src/tools/ui.ts +0 -452
  404. package/src/types/automation-responses.ts +0 -119
  405. package/src/types/env.ts +0 -17
  406. package/src/types/handler-types.ts +0 -442
  407. package/src/types/responses.ts +0 -355
  408. package/src/types/tool-interfaces.ts +0 -250
  409. package/src/types/tool-types.ts +0 -575
  410. package/src/unreal-bridge.ts +0 -693
  411. package/src/utils/command-validator.ts +0 -139
  412. package/src/utils/elicitation.ts +0 -132
  413. package/src/utils/error-handler.ts +0 -287
  414. package/src/utils/ini-reader.ts +0 -86
  415. package/src/utils/logger.ts +0 -35
  416. package/src/utils/normalize.test.ts +0 -162
  417. package/src/utils/normalize.ts +0 -146
  418. package/src/utils/path-security.ts +0 -43
  419. package/src/utils/response-factory.ts +0 -44
  420. package/src/utils/response-validator.ts +0 -395
  421. package/src/utils/result-helpers.ts +0 -195
  422. package/src/utils/safe-json.test.ts +0 -90
  423. package/src/utils/safe-json.ts +0 -70
  424. package/src/utils/unreal-command-queue.ts +0 -166
  425. package/src/utils/validation.test.ts +0 -184
  426. package/src/utils/validation.ts +0 -312
  427. package/src/wasm/index.ts +0 -838
  428. package/test-server.mjs +0 -100
  429. package/tests/test-animation.mjs +0 -369
  430. package/tests/test-asset-advanced.mjs +0 -82
  431. package/tests/test-asset-graph.mjs +0 -311
  432. package/tests/test-audio.mjs +0 -417
  433. package/tests/test-automation-timeouts.mjs +0 -98
  434. package/tests/test-behavior-tree.mjs +0 -444
  435. package/tests/test-blueprint-graph.mjs +0 -410
  436. package/tests/test-blueprint.mjs +0 -577
  437. package/tests/test-client-mode.mjs +0 -86
  438. package/tests/test-console-command.mjs +0 -56
  439. package/tests/test-control-actor.mjs +0 -425
  440. package/tests/test-control-editor.mjs +0 -112
  441. package/tests/test-graphql.mjs +0 -372
  442. package/tests/test-input.mjs +0 -349
  443. package/tests/test-inspect.mjs +0 -302
  444. package/tests/test-landscape.mjs +0 -316
  445. package/tests/test-lighting.mjs +0 -428
  446. package/tests/test-manage-asset.mjs +0 -438
  447. package/tests/test-manage-level.mjs +0 -89
  448. package/tests/test-materials.mjs +0 -356
  449. package/tests/test-niagara.mjs +0 -185
  450. package/tests/test-no-inline-python.mjs +0 -122
  451. package/tests/test-performance.mjs +0 -539
  452. package/tests/test-plugin-handshake.mjs +0 -82
  453. package/tests/test-runner.mjs +0 -993
  454. package/tests/test-sequence.mjs +0 -104
  455. package/tests/test-system.mjs +0 -96
  456. package/tests/test-wasm.mjs +0 -283
  457. package/tests/test-world-partition.mjs +0 -215
  458. package/tsconfig.json +0 -56
  459. package/vitest.config.ts +0 -35
  460. package/wasm/Cargo.lock +0 -363
  461. package/wasm/Cargo.toml +0 -42
  462. package/wasm/LICENSE +0 -21
  463. package/wasm/README.md +0 -253
  464. package/wasm/src/dependency_resolver.rs +0 -377
  465. package/wasm/src/lib.rs +0 -153
  466. package/wasm/src/property_parser.rs +0 -271
  467. package/wasm/src/transform_math.rs +0 -396
  468. package/wasm/tests/integration.rs +0 -109
@@ -1,117 +0,0 @@
1
- #pragma once
2
-
3
- #include "CoreMinimal.h"
4
- #include "Containers/Ticker.h"
5
- #include "Dom/JsonObject.h"
6
- #include "Templates/SharedPointer.h"
7
- #include "Misc/ScopeLock.h"
8
-
9
- class FMcpBridgeWebSocket;
10
- class UMcpAutomationBridgeSettings;
11
-
12
- /**
13
- * Delegate for handling incoming automation requests.
14
- * Params: RequestId, Action, Payload, RequestingSocket
15
- */
16
- DECLARE_DELEGATE_FourParams(FMcpMessageReceivedCallback, const FString&, const FString&, const TSharedPtr<FJsonObject>&, TSharedPtr<FMcpBridgeWebSocket>);
17
-
18
- /**
19
- * Manages WebSocket connections for the MCP Automation Bridge.
20
- * Handles listening, connecting, reconnecting, heartbeats, and message dispatching.
21
- */
22
- class MCPAUTOMATIONBRIDGE_API FMcpConnectionManager : public TSharedFromThis<FMcpConnectionManager>
23
- {
24
- public:
25
- FMcpConnectionManager();
26
- ~FMcpConnectionManager();
27
-
28
- void Initialize(const UMcpAutomationBridgeSettings* Settings);
29
- void Start();
30
- void Stop();
31
-
32
- bool IsConnected() const;
33
- bool IsBridgeActive() const { return bBridgeAvailable; }
34
-
35
- bool SendRawMessage(const FString& Message);
36
- void SendAutomationResponse(TSharedPtr<FMcpBridgeWebSocket> TargetSocket, const FString& RequestId, bool bSuccess, const FString& Message, const TSharedPtr<FJsonObject>& Result, const FString& ErrorCode);
37
- void SendControlMessage(const TSharedPtr<FJsonObject>& Message);
38
-
39
- void SetOnMessageReceived(FMcpMessageReceivedCallback InCallback);
40
-
41
- // Request tracking helpers
42
- int32 GetActiveSocketCount() const;
43
- void RegisterRequestSocket(const FString& RequestId, TSharedPtr<FMcpBridgeWebSocket> Socket);
44
-
45
- // Telemetry helpers
46
- void StartRequestTelemetry(const FString& RequestId, const FString& Action);
47
- void RecordAutomationTelemetry(const FString& RequestId, bool bSuccess, const FString& Message, const FString& ErrorCode);
48
-
49
- bool Tick(float DeltaTime);
50
-
51
- private:
52
- void AttemptConnection();
53
- void ForceReconnect(const FString& Reason, float ReconnectDelayOverride = -1.0f);
54
-
55
- void HandleConnected(TSharedPtr<FMcpBridgeWebSocket> Socket);
56
- void HandleClientConnected(TSharedPtr<FMcpBridgeWebSocket> ClientSocket);
57
- void HandleConnectionError(TSharedPtr<FMcpBridgeWebSocket> Socket, const FString& Error);
58
- void HandleServerConnectionError(const FString& Error);
59
- void HandleClosed(TSharedPtr<FMcpBridgeWebSocket> Socket, int32 StatusCode, const FString& Reason, bool bWasClean);
60
- void HandleMessage(TSharedPtr<FMcpBridgeWebSocket> Socket, const FString& Message);
61
- void HandleHeartbeat(TSharedPtr<FMcpBridgeWebSocket> Socket);
62
-
63
- void EmitAutomationTelemetrySummaryIfNeeded(double NowSeconds);
64
-
65
- private:
66
- TArray<TSharedPtr<FMcpBridgeWebSocket>> ActiveSockets;
67
- TMap<FString, TSharedPtr<FMcpBridgeWebSocket>> PendingRequestsToSockets;
68
- FTSTicker::FDelegateHandle TickerHandle;
69
- FMcpMessageReceivedCallback OnMessageReceived;
70
-
71
- // Configuration
72
- FString EnvListenHost;
73
- FString EnvListenPorts;
74
- FString EndpointUrl;
75
- FString CapabilityToken;
76
- FString ServerName;
77
- FString ServerVersion;
78
- FString ActiveSessionId;
79
-
80
- int32 ClientPort = 0;
81
- float AutoReconnectDelaySeconds = 5.0f;
82
- float HeartbeatTimeoutSeconds = 0.0f;
83
-
84
- bool bRequireCapabilityToken = false;
85
- bool bEnvListenPortsSet = false;
86
- bool bHeartbeatTrackingEnabled = false;
87
-
88
- // State
89
- bool bBridgeAvailable = false;
90
- bool bReconnectEnabled = true;
91
- float TimeUntilReconnect = 0.0f;
92
- double LastHeartbeatTimestamp = 0.0;
93
-
94
- // Telemetry
95
- struct FAutomationRequestTelemetry
96
- {
97
- FString Action;
98
- double StartTimeSeconds = 0.0;
99
- };
100
-
101
- struct FAutomationActionStats
102
- {
103
- int32 SuccessCount = 0;
104
- int32 FailureCount = 0;
105
- double TotalSuccessDurationSeconds = 0.0;
106
- double TotalFailureDurationSeconds = 0.0;
107
- double LastDurationSeconds = 0.0;
108
- double LastUpdatedSeconds = 0.0;
109
- };
110
-
111
- TMap<FString, FAutomationRequestTelemetry> ActiveRequestTelemetry;
112
- TMap<FString, FAutomationActionStats> AutomationActionTelemetry;
113
- double TelemetrySummaryIntervalSeconds = 120.0;
114
- double LastTelemetrySummaryLogSeconds = 0.0;
115
-
116
- mutable FCriticalSection PendingRequestsMutex;
117
- };
@@ -1,19 +0,0 @@
1
- #!/usr/bin/env node
2
- import net from 'node:net';
3
-
4
- const HOST = process.env.MCP_AUTOMATION_WS_HOST || '127.0.0.1';
5
- const PORT = process.env.MCP_AUTOMATION_WS_PORT ? parseInt(process.env.MCP_AUTOMATION_WS_PORT) : 8091;
6
- console.log(`Checking connection to Unreal Engine on port ${PORT}...`);
7
-
8
- function check(host, port, timeoutMs = 2000) {
9
- return new Promise((resolve) => {
10
- const socket = new net.Socket();
11
- const timer = setTimeout(() => { try { socket.destroy(); } catch {} resolve(false); }, timeoutMs);
12
- socket.once('error', () => { clearTimeout(timer); resolve(false); });
13
- socket.connect(port, host, () => { clearTimeout(timer); try { socket.destroy(); } catch {} resolve(true); });
14
- });
15
- }
16
-
17
- const ok = await check(HOST, PORT);
18
- console.log(ok ? `OK: ${HOST}:${PORT} accepting TCP` : `DOWN: ${HOST}:${PORT} not reachable`);
19
- process.exit(ok ? 0 : 1);
@@ -1,23 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { fileURLToPath } from 'url';
4
-
5
- const __filename = fileURLToPath(import.meta.url);
6
- const __dirname = path.dirname(__filename);
7
-
8
- const TMP_DIR = path.resolve(__dirname, '..', 'tmp');
9
- if (!fs.existsSync(TMP_DIR)) {
10
- console.log('No tmp directory present.');
11
- process.exit(0);
12
- }
13
-
14
- for (const f of fs.readdirSync(TMP_DIR)) {
15
- const p = path.join(TMP_DIR, f);
16
- try {
17
- fs.unlinkSync(p);
18
- console.log('Removed', p);
19
- } catch (e) {
20
- console.warn('Failed to remove', p, e.message || e);
21
- }
22
- }
23
- console.log('tmp cleanup complete.');
@@ -1,26 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { fileURLToPath } from 'url';
4
-
5
- const __filename = fileURLToPath(import.meta.url);
6
- const __dirname = path.dirname(__filename);
7
-
8
- const wasmPkgPath = path.resolve(__dirname, '../src/wasm/pkg/unreal_mcp_wasm.js');
9
-
10
- try {
11
- if (fs.existsSync(wasmPkgPath)) {
12
- let content = fs.readFileSync(wasmPkgPath, 'utf8');
13
- if (content.includes('console.log(getObject(arg0));')) {
14
- content = content.replace('console.log(getObject(arg0));', 'console.error(getObject(arg0));');
15
- fs.writeFileSync(wasmPkgPath, content);
16
- console.log('Successfully patched console.log to console.error in WASM bindings.');
17
- } else {
18
- console.log('WASM bindings already patched or console.log not found.');
19
- }
20
- } else {
21
- console.warn('WASM binding file not found at:', wasmPkgPath);
22
- }
23
- } catch (error) {
24
- console.error('Error patching WASM bindings:', error);
25
- process.exit(1);
26
- }
@@ -1,136 +0,0 @@
1
- #!/usr/bin/env node
2
- import { spawn } from 'node:child_process';
3
-
4
- const tests = [
5
- 'test:control_actor', // 1
6
- 'test:control_editor', // 1
7
- 'test:manage_level', // crashed 1
8
- 'test:animation',
9
- 'test:materials',
10
- 'test:niagara',
11
- 'test:landscape',
12
- 'test:sequence', // crashed 1
13
- 'test:system',
14
- 'test:console_command',
15
- 'test:inspect',
16
- 'test:manage_asset',
17
- 'test:blueprint',
18
- 'test:blueprint_graph',
19
- 'test:audio',
20
- 'test:behavior_tree',
21
- 'test:lighting',
22
- 'test:performance',
23
- 'test:input',
24
- 'test:asset_graph',
25
- 'test:graphql',
26
- 'test:wasm:all',
27
- 'test:no-inline-python',
28
- 'test:plugin-handshake',
29
- 'test:asset_advanced',
30
- 'test:world_partition'
31
- ];
32
-
33
- const isWindows = process.platform === 'win32';
34
- const npmExecPath = process.env.npm_execpath;
35
- const npmCommand = isWindows ? 'npm.cmd' : 'npm';
36
-
37
- function spawnNpm(cmd) {
38
- if (npmExecPath && npmExecPath.endsWith('.js')) {
39
- return spawn(process.execPath, [npmExecPath, 'run', cmd], {
40
- stdio: 'inherit',
41
- cwd: process.cwd(),
42
- env: process.env,
43
- windowsHide: true
44
- });
45
- }
46
- return spawn(npmCommand, ['run', cmd], {
47
- stdio: 'inherit',
48
- cwd: process.cwd(),
49
- env: process.env,
50
- windowsHide: true
51
- });
52
- }
53
-
54
- function runOne(cmd) {
55
- return new Promise((resolve) => {
56
- const startedAt = Date.now();
57
- const child = spawnNpm(cmd);
58
-
59
- let errorMsg = '';
60
- child.on('error', (err) => {
61
- errorMsg = `Failed to launch npm run ${cmd}: ${err.message}`;
62
- });
63
-
64
- child.on('exit', (code, signal) => {
65
- const durationMs = Date.now() - startedAt;
66
- if (signal) {
67
- resolve({ name: cmd, ok: false, code: null, signal, durationMs, error: `${cmd} terminated via signal ${signal}` });
68
- } else {
69
- resolve({ name: cmd, ok: code === 0, code, signal: null, durationMs, error: code === 0 ? null : (errorMsg || `${cmd} failed with code ${code}`) });
70
- }
71
- });
72
-
73
- const forwardSignal = (sig) => {
74
- if (child.killed) return;
75
- child.kill(sig);
76
- };
77
-
78
- process.once('SIGTERM', forwardSignal);
79
-
80
- child.once('exit', () => {
81
- process.removeListener('SIGINT', forwardSignal);
82
- process.removeListener('SIGTERM', forwardSignal);
83
- });
84
- });
85
- }
86
-
87
- (async () => {
88
- // Pass 0: Build once
89
- console.log('\n============================================================');
90
- console.log('Running Pre-Test Build');
91
- console.log('============================================================');
92
-
93
- // Use runOne to execute the build command
94
- // We can't use npm run build directly if it's not in the 'tests' array, so let's just trigger it.
95
- const buildRes = await runOne('build');
96
- if (!buildRes.ok) {
97
- console.error(`\nBuild failed (code=${buildRes.code ?? 'n/a'}). Aborting tests.`);
98
- process.exit(1);
99
- }
100
- console.log('Build completed successfully. Disabling auto-build for tests.');
101
-
102
- // Set the environment variable to disable auto-build for subsequent tests
103
- process.env.UNREAL_MCP_NO_AUTO_BUILD = '1';
104
- // Force use of the just-built dist folder to prevent falling back to ts-node
105
- // (which can happen if build:wasm updates timestamps in src/ after build:core)
106
- process.env.UNREAL_MCP_FORCE_DIST = '1';
107
-
108
- const results = [];
109
- for (const t of tests) {
110
- const res = await runOne(t);
111
- results.push(res);
112
- if (!res.ok) {
113
- console.error(`\n${t} failed (code=${res.code ?? 'n/a'}, signal=${res.signal ?? 'n/a'}) after ${res.durationMs}ms`);
114
- if (res.error) console.error(res.error);
115
- }
116
- }
117
-
118
- // Summary
119
- const passed = results.filter(r => r.ok).length;
120
- const failed = results.length - passed;
121
- console.log('\n============================================================');
122
- console.log('Test Suite Summary');
123
- console.log('============================================================');
124
- for (const r of results) {
125
- const status = r.ok ? 'PASSED' : 'FAILED';
126
- console.log(`${status} - ${r.name} (${r.durationMs} ms)`);
127
- }
128
- console.log('------------------------------------------------------------');
129
- console.log(`Total: ${results.length} Passed: ${passed} Failed: ${failed}`);
130
- console.log('============================================================');
131
-
132
- process.exit(failed > 0 ? 1 : 0);
133
- })().catch((err) => {
134
- console.error(err.message || err);
135
- process.exit(1);
136
- });
@@ -1,94 +0,0 @@
1
-
2
- import { spawn } from 'child_process';
3
- import path from 'path';
4
- import { fileURLToPath } from 'url';
5
-
6
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
- const serverPath = path.join(__dirname, '../dist/cli.js');
8
-
9
- console.log('🚬 Running Smoke Test (Mock Mode)...');
10
- console.log(`🔌 Server Path: ${serverPath}`);
11
-
12
- const env = { ...process.env, MOCK_UNREAL_CONNECTION: 'true' };
13
-
14
- const child = spawn('node', [serverPath], {
15
- env,
16
- stdio: ['pipe', 'pipe', 'inherit'] // pipe stdin/stdout, inherit stderr
17
- });
18
-
19
- const requests = [
20
- {
21
- jsonrpc: '2.0',
22
- id: 1,
23
- method: 'initialize',
24
- params: {
25
- protocolVersion: '2024-11-05',
26
- capabilities: {},
27
- clientInfo: { name: 'smoke-test', version: '1.0' }
28
- }
29
- },
30
- {
31
- jsonrpc: '2.0',
32
- id: 2,
33
- method: 'tools/list',
34
- params: {}
35
- }
36
- ];
37
-
38
- let buffer = '';
39
- let passed = false;
40
-
41
- child.stdout.on('data', (data) => {
42
- const chunk = data.toString();
43
- buffer += chunk;
44
-
45
- // Try to parse JSON lines
46
- const lines = buffer.split('\n');
47
- buffer = lines.pop() || ''; // Keep the incomplete last line
48
-
49
- for (const line of lines) {
50
- if (!line.trim()) continue;
51
- try {
52
- const msg = JSON.parse(line);
53
- console.log('Received:', JSON.stringify(msg).substring(0, 100) + '...');
54
-
55
- if (msg.id === 1 && msg.result) {
56
- console.log('✅ Initialize success');
57
- // Send list tools request
58
- child.stdin.write(JSON.stringify(requests[1]) + '\n');
59
- }
60
-
61
- if (msg.id === 2 && msg.result) {
62
- console.log(`✅ Tools check success: Found ${msg.result.tools?.length || 0} tools`);
63
- passed = true;
64
- child.kill();
65
- }
66
-
67
- } catch (_e) {
68
- // Ignore non-JSON output (logs)
69
- }
70
- }
71
- });
72
-
73
- child.on('exit', (_code) => {
74
- if (passed) {
75
- console.log('🎉 Smoke Test PASSED');
76
- process.exit(0);
77
- } else {
78
- console.error('❌ Smoke Test FAILED - Server exited without passing checks');
79
- process.exit(1);
80
- }
81
- });
82
-
83
- // Start by sending initialize
84
- console.log('Sending initialize...');
85
- child.stdin.write(JSON.stringify(requests[0]) + '\n');
86
-
87
- // Timeout safety
88
- setTimeout(() => {
89
- if (!passed) {
90
- console.error('❌ Timeout waiting for smoke test');
91
- child.kill();
92
- process.exit(1);
93
- }
94
- }, 10000);
@@ -1,143 +0,0 @@
1
- #!/usr/bin/env node
2
- import fs from 'fs';
3
- import path from 'path';
4
- import { fileURLToPath } from 'url';
5
-
6
- const __filename = fileURLToPath(import.meta.url);
7
- const __dirname = path.dirname(__filename);
8
-
9
- const SOURCE_RELATIVE = ['..', 'plugins', 'McpAutomationBridge'];
10
- const sourceDir = path.resolve(__dirname, ...SOURCE_RELATIVE);
11
-
12
- function showHelp() {
13
- const scriptName = path.basename(process.argv[1]);
14
- console.log(`Usage: node ${scriptName} [--engine <engine_plugins_dir>] [--project <project_plugins_dir>] [--dry-run] [--clean-engine] [--clean-project]`);
15
- console.log('Copies the MCP Automation Bridge plugin from this repository into Engine and/or Project plugin directories.');
16
- console.log('--engine <dir> Path to the Engine/Plugins directory (the script appends McpAutomationBridge automatically).');
17
- console.log('--project <dir> Path to the Project/Plugins directory (the script appends McpAutomationBridge automatically).');
18
- console.log('--dry-run Log the operations without modifying the filesystem.');
19
- console.log('--clean-engine Remove the destination engine plugin directory before copying.');
20
- console.log('--clean-project Remove the destination project plugin directory before copying.');
21
- console.log('--help Show this message.');
22
- }
23
-
24
- function parseArgs(argv) {
25
- const args = {
26
- engine: null,
27
- project: null,
28
- dryRun: false,
29
- cleanEngine: false,
30
- cleanProject: false,
31
- help: false
32
- };
33
-
34
- for (let i = 2; i < argv.length; i += 1) {
35
- const token = argv[i];
36
- switch (token) {
37
- case '--engine':
38
- args.engine = argv[++i];
39
- break;
40
- case '--project':
41
- args.project = argv[++i];
42
- break;
43
- case '--dry-run':
44
- args.dryRun = true;
45
- break;
46
- case '--clean-engine':
47
- args.cleanEngine = true;
48
- break;
49
- case '--clean-project':
50
- args.cleanProject = true;
51
- break;
52
- case '--help':
53
- case '-h':
54
- args.help = true;
55
- break;
56
- default:
57
- console.error(`Unknown argument: ${token}`);
58
- args.help = true;
59
- break;
60
- }
61
- }
62
-
63
- return args;
64
- }
65
-
66
- function ensureSourceExists() {
67
- if (!fs.existsSync(sourceDir) || !fs.statSync(sourceDir).isDirectory()) {
68
- throw new Error(`Source directory missing: ${sourceDir}`);
69
- }
70
- }
71
-
72
- function resolveDestination(rootDir, label) {
73
- if (!rootDir) {
74
- return null;
75
- }
76
-
77
- const fullPath = path.resolve(rootDir, 'McpAutomationBridge');
78
- if (!fs.existsSync(path.dirname(fullPath))) {
79
- throw new Error(`Destination parent directory does not exist for ${label}: ${path.dirname(fullPath)}`);
80
- }
81
-
82
- return fullPath;
83
- }
84
-
85
- function removeDir(targetPath, dryRun) {
86
- if (!fs.existsSync(targetPath)) {
87
- return;
88
- }
89
-
90
- if (dryRun) {
91
- console.log(`[dry-run] Would remove directory: ${targetPath}`);
92
- return;
93
- }
94
-
95
- fs.rmSync(targetPath, { recursive: true, force: true });
96
- console.log(`Removed existing directory: ${targetPath}`);
97
- }
98
-
99
- function copyDir(targetPath, dryRun) {
100
- if (dryRun) {
101
- console.log(`[dry-run] Would copy ${sourceDir} -> ${targetPath}`);
102
- return;
103
- }
104
-
105
- fs.cpSync(sourceDir, targetPath, { recursive: true });
106
- console.log(`Copied ${sourceDir} -> ${targetPath}`);
107
- }
108
-
109
- function main() {
110
- const args = parseArgs(process.argv);
111
-
112
- if (args.help || (!args.engine && !args.project)) {
113
- showHelp();
114
- return;
115
- }
116
-
117
- ensureSourceExists();
118
-
119
- if (args.engine) {
120
- const engineDest = resolveDestination(args.engine, 'engine');
121
- if (args.cleanEngine) {
122
- removeDir(engineDest, args.dryRun);
123
- }
124
- copyDir(engineDest, args.dryRun);
125
- }
126
-
127
- if (args.project) {
128
- const projectDest = resolveDestination(args.project, 'project');
129
- if (args.cleanProject) {
130
- removeDir(projectDest, args.dryRun);
131
- }
132
- copyDir(projectDest, args.dryRun);
133
- }
134
-
135
- console.log('Done. Remember to clear the plugin Binaries/Intermediate folders if requested by Unreal.');
136
- }
137
-
138
- try {
139
- main();
140
- } catch (err) {
141
- console.error(`Error: ${err.message}`);
142
- process.exitCode = 1;
143
- }
@@ -1,113 +0,0 @@
1
- #!/usr/bin/env node
2
- import fs from 'node:fs/promises';
3
- import path from 'node:path';
4
- import { fileURLToPath } from 'node:url';
5
-
6
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
- const repoRoot = path.resolve(__dirname, '..');
8
- const srcRoot = path.resolve(repoRoot, 'src');
9
-
10
- function isPositionInsideLiteralOrComment(content, pos) {
11
- let inSingle = false;
12
- let inDouble = false;
13
- let inBacktick = false;
14
- let inLineComment = false;
15
- let inBlockComment = false;
16
-
17
- for (let i = 0; i < pos; i += 1) {
18
- const ch = content[i];
19
- const next = content[i + 1];
20
-
21
- if (inLineComment) {
22
- if (ch === '\n') inLineComment = false;
23
- continue;
24
- }
25
- if (inBlockComment) {
26
- if (ch === '*' && next === '/') {
27
- inBlockComment = false; i += 1; continue;
28
- }
29
- continue;
30
- }
31
- if (inSingle) {
32
- if (ch === "\\") { i += 1; continue; }
33
- if (ch === "'") { inSingle = false; }
34
- continue;
35
- }
36
- if (inDouble) {
37
- if (ch === "\\") { i += 1; continue; }
38
- if (ch === '"') { inDouble = false; }
39
- continue;
40
- }
41
- if (inBacktick) {
42
- if (ch === "\\") { i += 1; continue; }
43
- if (ch === '`') { inBacktick = false; }
44
- continue;
45
- }
46
-
47
- if (ch === '/' && next === '/') { inLineComment = true; i += 1; continue; }
48
- if (ch === '/' && next === '*') { inBlockComment = true; i += 1; continue; }
49
- if (ch === "'") { inSingle = true; continue; }
50
- if (ch === '"') { inDouble = true; continue; }
51
- if (ch === '`') { inBacktick = true; continue; }
52
- }
53
-
54
- return inSingle || inDouble || inBacktick || inLineComment || inBlockComment;
55
- }
56
-
57
- async function listTsFiles(dir) {
58
- const out = [];
59
- const entries = await fs.readdir(dir, { withFileTypes: true });
60
- for (const ent of entries) {
61
- if (ent.name === 'node_modules' || ent.name === 'dist' || ent.name === '.git') continue;
62
- const full = path.join(dir, ent.name);
63
- if (ent.isDirectory()) {
64
- out.push(...(await listTsFiles(full)));
65
- } else if (ent.isFile() && full.endsWith('.ts')) {
66
- out.push(full);
67
- }
68
- }
69
- return out;
70
- }
71
-
72
- function toLineCol(content, index) {
73
- const before = content.slice(0, index);
74
- const lines = before.split(/\r?\n/);
75
- const line = lines.length;
76
- const col = lines[lines.length - 1].length + 1;
77
- return { line, col };
78
- }
79
-
80
- async function main() {
81
- const pattern = /simulated\s*:/g;
82
- const files = await listTsFiles(srcRoot);
83
- const failures = [];
84
-
85
- for (const f of files) {
86
- const content = await fs.readFile(f, 'utf8');
87
- let m;
88
- while ((m = pattern.exec(content)) !== null) {
89
- const idx = m.index;
90
- if (isPositionInsideLiteralOrComment(content, idx)) continue;
91
- const pos = toLineCol(content, idx);
92
- const snippetLine = content.split(/\r?\n/)[pos.line - 1] ?? '';
93
- failures.push({ file: f, line: pos.line, col: pos.col, snippet: snippetLine.trim() });
94
- }
95
- }
96
-
97
- if (failures.length > 0) {
98
- console.error('\nDetected per-tool "simulated" alternatives usages in TypeScript files:');
99
- for (const fail of failures) {
100
- console.error(`\n - ${path.relative(repoRoot, fail.file)}:${fail.line}:${fail.col} -> ${fail.snippet}`);
101
- }
102
- console.error('\nPer-tool simulated alternatives are disallowed. Replace simulated behavior with explicit plugin actions or return an explicit error (e.g. MISSING_ENGINE_PLUGINS).');
103
- process.exitCode = 1;
104
- return;
105
- }
106
-
107
- console.log('No per-tool plugin "simulated" alternatives found in TypeScript source files.');
108
- }
109
-
110
- main().catch((err) => {
111
- console.error('Test failed with unexpected error:', err);
112
- process.exitCode = 2;
113
- });