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,689 +0,0 @@
1
- import { UnrealBridge } from '../unreal-bridge.js';
2
- import { AutomationBridge } from '../automation/index.js';
3
- import { Logger } from '../utils/logger.js';
4
- import { lookupPropertyMetadata, normalizeDictionaryKey, PropertyDictionaryEntry } from './property-dictionary.js';
5
-
6
- export interface ObjectSummary {
7
- name?: string;
8
- class?: string;
9
- path?: string;
10
- parent?: string;
11
- tags?: string[];
12
- propertyCount: number;
13
- curatedPropertyCount: number;
14
- filteredPropertyCount: number;
15
- categories?: Record<string, number>;
16
- }
17
-
18
- export interface ObjectInfo {
19
- class?: string;
20
- name?: string;
21
- path?: string;
22
- properties: PropertyInfo[];
23
- functions?: FunctionInfo[];
24
- parent?: string;
25
- interfaces?: string[];
26
- flags?: string[];
27
- summary?: ObjectSummary;
28
- filteredProperties?: string[];
29
- tags?: string[];
30
- original?: any;
31
- }
32
-
33
- export interface PropertyInfo {
34
- name: string;
35
- type: string;
36
- value?: any;
37
- flags?: string[];
38
- metadata?: Record<string, unknown>;
39
- category?: string;
40
- tooltip?: string;
41
- description?: string;
42
- displayValue?: string;
43
- dictionaryEntry?: PropertyDictionaryEntry;
44
- isReadOnly?: boolean;
45
- }
46
-
47
- export interface FunctionInfo {
48
- name: string;
49
- parameters: ParameterInfo[];
50
- returnType?: string;
51
- flags?: string[];
52
- category?: string;
53
- }
54
-
55
- export interface ParameterInfo {
56
- name: string;
57
- type: string;
58
- defaultValue?: any;
59
- isOptional?: boolean;
60
- }
61
-
62
- export class IntrospectionTools {
63
- private log = new Logger('IntrospectionTools');
64
- private objectCache = new Map<string, ObjectInfo>();
65
- private retryAttempts = 3;
66
- private retryDelay = 1000;
67
-
68
- private readonly propertyFilterPatterns: RegExp[] = [
69
- /internal/i,
70
- /transient/i,
71
- /^temp/i,
72
- /^bhidden/i,
73
- /renderstate/i,
74
- /previewonly/i,
75
- /deprecated/i
76
- ];
77
-
78
- private readonly ignoredPropertyKeys = new Set<string>([
79
- 'assetimportdata',
80
- 'blueprintcreatedcomponents',
81
- 'componentreplicator',
82
- 'componentoverrides',
83
- 'actorcomponenttags'
84
- ]);
85
-
86
- constructor(private bridge: UnrealBridge, private automationBridge?: AutomationBridge) { }
87
-
88
- setAutomationBridge(automationBridge?: AutomationBridge) { this.automationBridge = automationBridge; }
89
-
90
- /**
91
- * Execute with retry logic for transient failures
92
- */
93
- private async executeWithRetry<T>(
94
- operation: () => Promise<T>,
95
- operationName: string
96
- ): Promise<T> {
97
- let lastError: any;
98
-
99
- for (let attempt = 1; attempt <= this.retryAttempts; attempt++) {
100
- try {
101
- return await operation();
102
- } catch (error: any) {
103
- lastError = error;
104
- this.log.warn(`${operationName} attempt ${attempt} failed: ${error.message || error}`);
105
-
106
- if (attempt < this.retryAttempts) {
107
- await new Promise(resolve =>
108
- setTimeout(resolve, this.retryDelay * attempt)
109
- );
110
- }
111
- }
112
- }
113
-
114
- throw lastError;
115
- }
116
-
117
- /**
118
- * Convert Unreal property value to JavaScript-friendly format
119
- */
120
- private convertPropertyValue(value: any, typeName: string): any {
121
- // Handle vectors, rotators, transforms
122
- if (typeName.includes('Vector')) {
123
- if (typeof value === 'object' && value !== null) {
124
- return { x: value.X || 0, y: value.Y || 0, z: value.Z || 0 };
125
- }
126
- }
127
- if (typeName.includes('Rotator')) {
128
- if (typeof value === 'object' && value !== null) {
129
- return { pitch: value.Pitch || 0, yaw: value.Yaw || 0, roll: value.Roll || 0 };
130
- }
131
- }
132
- if (typeName.includes('Transform')) {
133
- if (typeof value === 'object' && value !== null) {
134
- return {
135
- location: this.convertPropertyValue(value.Translation || value.Location, 'Vector'),
136
- rotation: this.convertPropertyValue(value.Rotation, 'Rotator'),
137
- scale: this.convertPropertyValue(value.Scale3D || value.Scale, 'Vector')
138
- };
139
- }
140
- }
141
- return value;
142
- }
143
-
144
- private isPlainObject(value: any): value is Record<string, unknown> {
145
- return !!value && typeof value === 'object' && !Array.isArray(value);
146
- }
147
-
148
- private isLikelyPropertyDescriptor(value: any): boolean {
149
- if (!this.isPlainObject(value)) return false;
150
- if (typeof value.name === 'string' && ('value' in value || 'type' in value)) return true;
151
- if ('propertyName' in value && ('currentValue' in value || 'defaultValue' in value)) return true;
152
- return false;
153
- }
154
-
155
- private shouldFilterProperty(name: string, value: any, flags?: string[], detailed = false): boolean {
156
- if (detailed) return false;
157
- if (!name) return true;
158
- const normalized = normalizeDictionaryKey(name);
159
- if (this.ignoredPropertyKeys.has(normalized)) return true;
160
- for (const pattern of this.propertyFilterPatterns) {
161
- if (pattern.test(name)) return true;
162
- }
163
- if (Array.isArray(value) && value.length === 0) return true;
164
- if (this.isPlainObject(value) && Object.keys(value).length === 0) return true;
165
- if (flags?.some((f) => /deprecated/i.test(f))) return true;
166
- return false;
167
- }
168
-
169
- private formatDisplayValue(value: any, type: string): string {
170
- if (value === null || value === undefined) return 'None';
171
- if (typeof value === 'string') return value.length > 120 ? `${value.slice(0, 117)}...` : value;
172
- if (typeof value === 'number' || typeof value === 'boolean') return `${value}`;
173
- if (Array.isArray(value)) {
174
- const preview = value.slice(0, 5).map((entry) => this.formatDisplayValue(entry, typeof entry));
175
- const suffix = value.length > 5 ? `, … (+${value.length - 5})` : '';
176
- return `[${preview.join(', ')}${suffix}]`;
177
- }
178
- if (this.isPlainObject(value)) {
179
- const keys = Object.keys(value);
180
- if (['vector', 'rotator', 'transform'].some((token) => type.toLowerCase().includes(token))) {
181
- const printable = Object.entries(value)
182
- .map(([k, v]) => `${k}: ${this.formatDisplayValue(v, typeof v)}`)
183
- .join(', ');
184
- return `{ ${printable} }`;
185
- }
186
- const preview = keys.slice(0, 5).map((k) => `${k}: ${this.formatDisplayValue(value[k], typeof value[k])}`);
187
- const suffix = keys.length > 5 ? `, … (+${keys.length - 5} keys)` : '';
188
- return `{ ${preview.join(', ')}${suffix} }`;
189
- }
190
- return String(value);
191
- }
192
-
193
- private normalizePropertyEntry(entry: any, detailed = false): PropertyInfo | null {
194
- if (!entry) return null;
195
- const name: string = entry.name ?? entry.propertyName ?? entry.key ?? '';
196
- if (!name) return null;
197
-
198
- const candidateType = entry.type ?? entry.propertyType ?? (entry.value !== undefined ? typeof entry.value : undefined);
199
- const type = typeof candidateType === 'string' && candidateType.length > 0 ? candidateType : 'unknown';
200
- const rawValue = entry.value ?? entry.currentValue ?? entry.defaultValue ?? entry.data ?? entry;
201
- const value = this.convertPropertyValue(rawValue, type);
202
- const flags: string[] | undefined = entry.flags ?? entry.attributes;
203
- const metadata: Record<string, unknown> | undefined = entry.metadata ?? entry.annotations;
204
- const filtered = this.shouldFilterProperty(name, value, flags, detailed);
205
- const dictionaryEntry = lookupPropertyMetadata(name);
206
- const propertyInfo: PropertyInfo = {
207
- name,
208
- type,
209
- value,
210
- flags,
211
- metadata,
212
- category: dictionaryEntry?.category ?? entry.category,
213
- tooltip: entry.tooltip ?? entry.helpText,
214
- description: dictionaryEntry?.description ?? entry.description,
215
- displayValue: this.formatDisplayValue(value, type),
216
- dictionaryEntry,
217
- isReadOnly: Boolean(entry.isReadOnly || entry.readOnly || flags?.some((f) => f.toLowerCase().includes('readonly')))
218
- };
219
- (propertyInfo as any).__filtered = filtered;
220
- return propertyInfo;
221
- }
222
-
223
- private flattenPropertyMap(source: Record<string, unknown>, prefix = '', detailed = false): PropertyInfo[] {
224
- const properties: PropertyInfo[] = [];
225
- for (const [rawKey, rawValue] of Object.entries(source)) {
226
- const name = prefix ? `${prefix}.${rawKey}` : rawKey;
227
- if (this.isLikelyPropertyDescriptor(rawValue)) {
228
- const normalized = this.normalizePropertyEntry({ ...(rawValue as Record<string, unknown>), name }, detailed);
229
- if (normalized) properties.push(normalized);
230
- continue;
231
- }
232
-
233
- if (this.isPlainObject(rawValue)) {
234
- const nestedKeys = Object.keys(rawValue);
235
- const hasPrimitiveChildren = nestedKeys.some((key) => {
236
- const child = rawValue[key];
237
- return child === null || typeof child !== 'object' || Array.isArray(child) || this.isLikelyPropertyDescriptor(child);
238
- });
239
-
240
- if (hasPrimitiveChildren) {
241
- const normalized = this.normalizePropertyEntry({ name, value: rawValue }, detailed);
242
- if (normalized) properties.push(normalized);
243
- } else {
244
- properties.push(...this.flattenPropertyMap(rawValue, name, detailed));
245
- }
246
- continue;
247
- }
248
-
249
- const normalized = this.normalizePropertyEntry({ name, value: rawValue }, detailed);
250
- if (normalized) properties.push(normalized);
251
- }
252
- return properties;
253
- }
254
-
255
- private extractRawProperties(rawInfo: any, detailed = false): PropertyInfo[] {
256
- if (!rawInfo) return [];
257
- if (Array.isArray(rawInfo.properties)) {
258
- const entries = rawInfo.properties as Array<Record<string, unknown>>;
259
- return entries
260
- .map((entry) => this.normalizePropertyEntry(entry, detailed))
261
- .filter((entry): entry is PropertyInfo => Boolean(entry));
262
- }
263
-
264
- if (this.isPlainObject(rawInfo.properties)) {
265
- return this.flattenPropertyMap(rawInfo.properties, '', detailed);
266
- }
267
-
268
- if (Array.isArray(rawInfo)) {
269
- const entries = rawInfo as Array<Record<string, unknown>>;
270
- return entries
271
- .map((entry) => this.normalizePropertyEntry(entry, detailed))
272
- .filter((entry): entry is PropertyInfo => Boolean(entry));
273
- }
274
-
275
- if (this.isPlainObject(rawInfo)) {
276
- const shallow = { ...rawInfo };
277
- delete shallow.properties;
278
- delete shallow.functions;
279
- delete shallow.summary;
280
- return this.flattenPropertyMap(shallow, '', detailed);
281
- }
282
-
283
- return [];
284
- }
285
-
286
- curateObjectInfo(rawInfo: any, objectPath: string, detailed = false): ObjectInfo {
287
- const properties = this.extractRawProperties(rawInfo, detailed);
288
- const filteredProperties: string[] = [];
289
- const curatedProperties = properties.filter((prop) => {
290
- const shouldFilter = (prop as any).__filtered;
291
- delete (prop as any).__filtered;
292
- if (shouldFilter) {
293
- filteredProperties.push(prop.name);
294
- }
295
- return !shouldFilter;
296
- });
297
-
298
- const categories: Record<string, number> = {};
299
- const finalList = (detailed ? properties : curatedProperties).map((prop) => {
300
- const category = (prop.category ?? prop.dictionaryEntry?.category ?? 'General');
301
- categories[category] = (categories[category] ?? 0) + 1;
302
- return prop;
303
- });
304
-
305
- const summary: ObjectSummary = {
306
- name: rawInfo?.name ?? rawInfo?.objectName ?? rawInfo?.displayName,
307
- class: rawInfo?.class ?? rawInfo?.className ?? rawInfo?.type ?? rawInfo?.objectClass,
308
- path: rawInfo?.path ?? rawInfo?.objectPath ?? objectPath,
309
- parent: rawInfo?.outer ?? rawInfo?.parent,
310
- tags: Array.isArray(rawInfo?.tags) ? rawInfo.tags : undefined,
311
- propertyCount: properties.length,
312
- curatedPropertyCount: curatedProperties.length,
313
- filteredPropertyCount: filteredProperties.length,
314
- categories
315
- };
316
-
317
- const info: ObjectInfo = {
318
- class: summary.class,
319
- name: summary.name,
320
- path: summary.path,
321
- parent: summary.parent,
322
- tags: summary.tags,
323
- properties: finalList,
324
- functions: Array.isArray(rawInfo?.functions) ? rawInfo.functions : undefined,
325
- interfaces: Array.isArray(rawInfo?.interfaces) ? rawInfo.interfaces : undefined,
326
- flags: Array.isArray(rawInfo?.flags) ? rawInfo.flags : undefined,
327
- summary,
328
- filteredProperties: filteredProperties.length ? filteredProperties : undefined,
329
- original: rawInfo
330
- };
331
-
332
- return info;
333
- }
334
-
335
- async inspectObject(params: { objectPath: string; detailed?: boolean }) {
336
- // Check cache first if not requesting detailed info
337
- if (!params.detailed && this.objectCache.has(params.objectPath)) {
338
- const cached = this.objectCache.get(params.objectPath);
339
- if (cached) {
340
- return { success: true, info: cached };
341
- }
342
- }
343
-
344
- if (!this.automationBridge) {
345
- throw new Error('Automation Bridge not available. Introspection operations require plugin support.');
346
- }
347
-
348
- const automationBridge = this.automationBridge;
349
- return this.executeWithRetry(async () => {
350
- try {
351
- const response = await automationBridge.sendAutomationRequest('inspect_object', {
352
- objectPath: params.objectPath,
353
- detailed: params.detailed ?? false
354
- }, {
355
- timeoutMs: 60000
356
- });
357
-
358
- if (response.success === false) {
359
- return {
360
- success: false,
361
- error: response.error || response.message || 'Failed to inspect object'
362
- };
363
- }
364
-
365
- const rawInfo = response.info ?? response.result ?? response.data ?? response;
366
- const curatedInfo = this.curateObjectInfo(rawInfo, params.objectPath, params.detailed ?? false);
367
-
368
- const result = {
369
- success: true,
370
- info: curatedInfo
371
- };
372
-
373
- // Cache the result if successful and not detailed
374
- if (result.success && result.info && !params.detailed) {
375
- this.objectCache.set(params.objectPath, result.info as ObjectInfo);
376
- }
377
-
378
- return result;
379
- } catch (error) {
380
- return {
381
- success: false,
382
- error: `Failed to inspect object: ${error instanceof Error ? error.message : String(error)}`
383
- };
384
- }
385
- }, 'inspectObject');
386
- }
387
-
388
- /**
389
- * Set property value on an object
390
- */
391
- async setProperty(params: { objectPath: string; propertyName: string; value: any }) {
392
- return this.executeWithRetry(async () => {
393
- try {
394
- // Validate and convert value type if needed
395
- let processedValue = params.value;
396
-
397
- // Handle special Unreal types
398
- if (typeof params.value === 'object' && params.value !== null) {
399
- // Vector conversion
400
- if ('x' in params.value || 'X' in params.value) {
401
- processedValue = {
402
- X: params.value.x || params.value.X || 0,
403
- Y: params.value.y || params.value.Y || 0,
404
- Z: params.value.z || params.value.Z || 0
405
- };
406
- }
407
- // Rotator conversion
408
- else if ('pitch' in params.value || 'Pitch' in params.value) {
409
- processedValue = {
410
- Pitch: params.value.pitch || params.value.Pitch || 0,
411
- Yaw: params.value.yaw || params.value.Yaw || 0,
412
- Roll: params.value.roll || params.value.Roll || 0
413
- };
414
- }
415
- // Transform conversion
416
- else if ('location' in params.value || 'Location' in params.value) {
417
- processedValue = {
418
- Translation: this.convertPropertyValue(
419
- params.value.location || params.value.Location,
420
- 'Vector'
421
- ),
422
- Rotation: this.convertPropertyValue(
423
- params.value.rotation || params.value.Rotation,
424
- 'Rotator'
425
- ),
426
- Scale3D: this.convertPropertyValue(
427
- params.value.scale || params.value.Scale || { x: 1, y: 1, z: 1 },
428
- 'Vector'
429
- )
430
- };
431
- }
432
- }
433
- const res = await this.bridge.setObjectProperty({
434
- objectPath: params.objectPath,
435
- propertyName: params.propertyName,
436
- value: processedValue
437
- });
438
-
439
- if (res.success) {
440
- this.objectCache.delete(params.objectPath);
441
- }
442
-
443
- return res;
444
- } catch (err: unknown) {
445
- const errorMsg = (err instanceof Error ? err.message : undefined) || String(err);
446
- if (errorMsg.includes('404')) {
447
- return { success: false, error: `Property '${params.propertyName}' not found on object '${params.objectPath}'` };
448
- }
449
- if (errorMsg.includes('400')) {
450
- return { success: false, error: `Invalid value type for property '${params.propertyName}'` };
451
- }
452
- return { success: false, error: errorMsg };
453
- }
454
- }, 'setProperty');
455
- }
456
-
457
- /**
458
- * Get property value of an object
459
- */
460
- async getProperty(params: { objectPath: string; propertyName: string }) {
461
- return this.executeWithRetry(
462
- async () => {
463
- const result = await this.bridge.getObjectProperty({
464
- objectPath: params.objectPath,
465
- propertyName: params.propertyName
466
- });
467
-
468
- return result;
469
- },
470
- 'getProperty'
471
- );
472
- }
473
-
474
- /**
475
- * Call a function on an object
476
- */
477
- async callFunction(params: {
478
- objectPath: string;
479
- functionName: string;
480
- parameters?: any[];
481
- }) {
482
- if (!this.automationBridge) {
483
- throw new Error('Automation Bridge not available. Function call operations require plugin support.');
484
- }
485
-
486
- const automationBridge = this.automationBridge;
487
- return this.executeWithRetry(async () => {
488
- try {
489
- const response = await automationBridge.sendAutomationRequest('call_object_function', {
490
- objectPath: params.objectPath,
491
- functionName: params.functionName,
492
- parameters: params.parameters || []
493
- }, {
494
- timeoutMs: 60000
495
- });
496
-
497
- if (response.success === false) {
498
- return {
499
- success: false,
500
- error: response.error || response.message || 'Failed to call function'
501
- };
502
- }
503
-
504
- return {
505
- success: true,
506
- result: response.result
507
- };
508
- } catch (error) {
509
- return {
510
- success: false,
511
- error: `Failed to call function: ${error instanceof Error ? error.message : String(error)}`
512
- };
513
- }
514
- }, 'callFunction');
515
- }
516
-
517
- /**
518
- * Get Class Default Object (CDO) for a class
519
- */
520
- async getCDO(className: string) {
521
- if (!this.automationBridge) {
522
- throw new Error('Automation Bridge not available. CDO operations require plugin support.');
523
- }
524
-
525
- const automationBridge = this.automationBridge;
526
- return this.executeWithRetry(async () => {
527
- try {
528
- const response: any = await automationBridge.sendAutomationRequest('inspect', {
529
- action: 'inspect_class',
530
- // C++ plugin expects `classPath` for inspect_class, but accepts both
531
- // short names and full paths (e.g. "Actor" or "/Script/Engine.Actor").
532
- classPath: className
533
- }, {
534
- timeoutMs: 60000
535
- });
536
-
537
- if (response?.success === false) {
538
- return {
539
- success: false,
540
- error: response.error || response.message || 'Failed to get CDO'
541
- };
542
- }
543
-
544
- return {
545
- success: true,
546
- // Plugin returns class inspection data under data/result depending on bridge version.
547
- cdo: response?.data ?? response?.result ?? response
548
- };
549
- } catch (error) {
550
- return {
551
- success: false,
552
- error: `Failed to get CDO: ${error instanceof Error ? error.message : String(error)}`
553
- };
554
- }
555
- }, 'getCDO');
556
- }
557
-
558
- /**
559
- * Search for objects by class
560
- */
561
- async findObjectsByClass(className: string, limit: number = 100) {
562
- if (!this.automationBridge) {
563
- throw new Error('Automation Bridge not available. Object search operations require plugin support.');
564
- }
565
-
566
- const automationBridge = this.automationBridge;
567
- return this.executeWithRetry(async () => {
568
- try {
569
- const response: any = await automationBridge.sendAutomationRequest('inspect', {
570
- action: 'find_by_class',
571
- className,
572
- limit
573
- }, {
574
- timeoutMs: 60000
575
- });
576
-
577
- if (response?.success === false) {
578
- return {
579
- success: false,
580
- error: response.error || response.message || 'Failed to find objects'
581
- };
582
- }
583
-
584
- const data = response?.data ?? response?.result ?? response;
585
- const validObjects = Array.isArray(data?.actors)
586
- ? data.actors
587
- : (Array.isArray(data?.objects) ? data.objects : (Array.isArray(data) ? data : []));
588
- return {
589
- success: true,
590
- message: `Found ${validObjects.length} objects`,
591
- objects: validObjects,
592
- count: validObjects.length
593
- };
594
- } catch (error) {
595
- return {
596
- success: false,
597
- error: `Failed to find objects: ${error instanceof Error ? error.message : String(error)}`
598
- };
599
- }
600
- }, 'findObjectsByClass');
601
- }
602
-
603
- /**
604
- * Get property value of a component
605
- */
606
- async getComponentProperty(params: { objectPath: string; componentName: string; propertyName: string }) {
607
- if (!this.automationBridge) {
608
- throw new Error('Automation Bridge not available. Component property operations require plugin support.');
609
- }
610
-
611
- const automationBridge = this.automationBridge;
612
- return this.executeWithRetry(async () => {
613
- try {
614
- const response = await automationBridge.sendAutomationRequest('get_component_property', {
615
- objectPath: params.objectPath,
616
- componentName: params.componentName,
617
- propertyName: params.propertyName
618
- }, {
619
- timeoutMs: 15000
620
- });
621
-
622
- if (response.success === false) {
623
- return {
624
- success: false,
625
- error: response.error || response.message || 'Failed to get component property'
626
- };
627
- }
628
-
629
- return {
630
- success: true,
631
- value: response.value,
632
- type: response.type
633
- };
634
- } catch (error) {
635
- return {
636
- success: false,
637
- error: `Failed to get component property: ${error instanceof Error ? error.message : String(error)}`
638
- };
639
- }
640
- }, 'getComponentProperty');
641
- }
642
-
643
- /**
644
- * Set property value of a component
645
- */
646
- async setComponentProperty(params: { objectPath: string; componentName: string; propertyName: string; value: any }) {
647
- if (!this.automationBridge) {
648
- throw new Error('Automation Bridge not available. Component property operations require plugin support.');
649
- }
650
-
651
- const automationBridge = this.automationBridge;
652
- return this.executeWithRetry(async () => {
653
- try {
654
- const response = await automationBridge.sendAutomationRequest('set_component_property', {
655
- objectPath: params.objectPath,
656
- componentName: params.componentName,
657
- propertyName: params.propertyName,
658
- value: params.value
659
- }, {
660
- timeoutMs: 15000
661
- });
662
-
663
- if (response.success === false) {
664
- return {
665
- success: false,
666
- error: response.error || response.message || 'Failed to set component property'
667
- };
668
- }
669
-
670
- return {
671
- success: true,
672
- message: response.message || 'Property set successfully'
673
- };
674
- } catch (error) {
675
- return {
676
- success: false,
677
- error: `Failed to set component property: ${error instanceof Error ? error.message : String(error)}`
678
- };
679
- }
680
- }, 'setComponentProperty');
681
- }
682
-
683
- /**
684
- * Clear object cache
685
- */
686
- clearCache(): void {
687
- this.objectCache.clear();
688
- }
689
- }