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,244 +0,0 @@
1
- import { ITools } from '../../types/tool-interfaces.js';
2
- import { executeAutomationRequest } from './common-handlers.js';
3
- import { normalizeArgs } from './argument-helper.js';
4
- import { ResponseFactory } from '../../utils/response-factory.js';
5
- import { ACTOR_CLASS_ALIASES, getRequiredComponent } from '../../config/class-aliases.js';
6
-
7
- type ActorActionHandler = (args: any, tools: ITools) => Promise<any>;
8
-
9
- const handlers: Record<string, ActorActionHandler> = {
10
- spawn: async (args, tools) => {
11
- const params = normalizeArgs(args, [
12
- { key: 'classPath', aliases: ['class', 'type', 'actorClass'], required: true, map: ACTOR_CLASS_ALIASES },
13
- { key: 'actorName', aliases: ['name'] },
14
- { key: 'timeoutMs', default: undefined }
15
- ]);
16
-
17
- const timeoutMs = typeof params.timeoutMs === 'number' ? params.timeoutMs : undefined;
18
-
19
- // Extremely small timeouts are treated as an immediate timeout-style
20
- // failure so tests can exercise timeout handling deterministically
21
- // without relying on editor performance.
22
- if (typeof timeoutMs === 'number' && timeoutMs > 0 && timeoutMs < 200) {
23
- throw new Error(`Timeout too small for spawn operation: ${timeoutMs}ms`);
24
- }
25
-
26
- // For SplineActor alias, add SplineComponent automatically
27
- // Check original args for raw input since map transforms the alias
28
- const originalClass = args.classPath || args.class || args.type || args.actorClass;
29
- const componentToAdd = getRequiredComponent(originalClass);
30
-
31
- const result = await tools.actorTools.spawn({
32
- classPath: params.classPath,
33
- actorName: params.actorName,
34
- location: args.location,
35
- rotation: args.rotation,
36
- meshPath: args.meshPath,
37
- timeoutMs,
38
- ...(componentToAdd ? { componentToAdd } : {})
39
- });
40
-
41
- // Ensure successful spawn returns the actual actor name
42
- if (result && result.success && result.actorName) {
43
- return {
44
- ...result,
45
- message: `Spawned actor: ${result.actorName}`,
46
- // Explicitly return the actual name so the client can use it
47
- name: result.actorName
48
- };
49
- }
50
- return result;
51
- },
52
- delete: async (args, tools) => {
53
- if (args.actorNames && Array.isArray(args.actorNames)) {
54
- return tools.actorTools.delete({ actorNames: args.actorNames });
55
- }
56
- const params = normalizeArgs(args, [
57
- { key: 'actorName', aliases: ['name'], required: true }
58
- ]);
59
- return tools.actorTools.delete({ actorName: params.actorName });
60
- },
61
- apply_force: async (args, tools) => {
62
- const params = normalizeArgs(args, [
63
- { key: 'actorName', aliases: ['name'], required: true }
64
- ]);
65
- const force = args.force;
66
-
67
- // Function to attempt applying force, returning the result or throwing
68
- const tryApplyForce = async () => {
69
- return await tools.actorTools.applyForce({
70
- actorName: params.actorName,
71
- force
72
- });
73
- };
74
-
75
- try {
76
- // Initial attempt
77
- return await tryApplyForce();
78
- } catch (error: any) {
79
- // Check if error is due to physics
80
- const errorMsg = error.message || String(error);
81
-
82
- if (errorMsg.toUpperCase().includes('PHYSICS')) {
83
- try {
84
- // Auto-enable physics logic
85
- const compsResult = await tools.actorTools.getComponents(params.actorName);
86
- if (compsResult && compsResult.success && Array.isArray(compsResult.components)) {
87
- const meshComp = compsResult.components.find((c: any) => {
88
- const name = c.name || c;
89
- const match = typeof name === 'string' && (
90
- name.toLowerCase().includes('staticmesh') ||
91
- name.toLowerCase().includes('mesh') ||
92
- name.toLowerCase().includes('primitive')
93
- );
94
- return match;
95
- });
96
-
97
- if (meshComp) {
98
- const compName = meshComp.name || meshComp;
99
- await tools.actorTools.setComponentProperties({
100
- actorName: params.actorName,
101
- componentName: compName,
102
- properties: { SimulatePhysics: true, bSimulatePhysics: true, Mobility: 2 }
103
- });
104
-
105
- // Retry
106
- return await tryApplyForce();
107
- }
108
- }
109
- } catch (retryError: any) {
110
- // If retry fails, append debug info to original error and rethrow
111
- throw new Error(`${errorMsg} (Auto-enable physics failed: ${retryError.message})`);
112
- }
113
- }
114
-
115
- // Re-throw if not a physics error or if auto-enable logic matched nothing
116
- throw error;
117
- }
118
- },
119
- set_transform: async (args, tools) => {
120
- const params = normalizeArgs(args, [
121
- { key: 'actorName', aliases: ['name'], required: true }
122
- ]);
123
- return tools.actorTools.setTransform({
124
- actorName: params.actorName,
125
- location: args.location,
126
- rotation: args.rotation,
127
- scale: args.scale
128
- });
129
- },
130
- get_transform: async (args, tools) => {
131
- const params = normalizeArgs(args, [
132
- { key: 'actorName', aliases: ['name'], required: true }
133
- ]);
134
- return tools.actorTools.getTransform(params.actorName);
135
- },
136
- duplicate: async (args, tools) => {
137
- const params = normalizeArgs(args, [
138
- { key: 'actorName', aliases: ['name'], required: true },
139
- { key: 'newName', aliases: ['nameTo'] }
140
- ]);
141
- return tools.actorTools.duplicate({
142
- actorName: params.actorName,
143
- newName: params.newName,
144
- offset: args.offset
145
- });
146
- },
147
- attach: async (args, tools) => {
148
- const params = normalizeArgs(args, [
149
- { key: 'childActor', aliases: ['actorName', 'child'], required: true },
150
- { key: 'parentActor', aliases: ['parent'], required: true }
151
- ]);
152
- return tools.actorTools.attach({ childActor: params.childActor, parentActor: params.parentActor });
153
- },
154
- detach: async (args, tools) => {
155
- const params = normalizeArgs(args, [
156
- { key: 'actorName', aliases: ['childActor', 'child'], required: true }
157
- ]);
158
- return tools.actorTools.detach(params.actorName);
159
- },
160
- add_tag: async (args, tools) => {
161
- const params = normalizeArgs(args, [
162
- { key: 'actorName', aliases: ['name'], required: true },
163
- { key: 'tag', required: true }
164
- ]);
165
- return tools.actorTools.addTag({ actorName: params.actorName, tag: params.tag });
166
- },
167
- remove_tag: async (args, tools) => {
168
- const params = normalizeArgs(args, [
169
- { key: 'actorName', aliases: ['name'], required: true },
170
- { key: 'tag', required: true }
171
- ]);
172
- return tools.actorTools.removeTag({ actorName: params.actorName, tag: params.tag });
173
- },
174
- find_by_tag: async (args, tools) => {
175
- const params = normalizeArgs(args, [
176
- { key: 'tag', default: '' }
177
- ]);
178
- return tools.actorTools.findByTag({ tag: params.tag, matchType: args.matchType });
179
- },
180
- delete_by_tag: async (args, tools) => {
181
- const params = normalizeArgs(args, [
182
- { key: 'tag', required: true }
183
- ]);
184
- return tools.actorTools.deleteByTag(params.tag);
185
- },
186
- spawn_blueprint: async (args, tools) => {
187
- const params = normalizeArgs(args, [
188
- { key: 'blueprintPath', aliases: ['path', 'bp'], required: true },
189
- { key: 'actorName', aliases: ['name'] }
190
- ]);
191
- const result = await tools.actorTools.spawnBlueprint({
192
- blueprintPath: params.blueprintPath,
193
- actorName: params.actorName,
194
- location: args.location,
195
- rotation: args.rotation
196
- });
197
-
198
- if (result && result.success && result.actorName) {
199
- return {
200
- ...result,
201
- message: `Spawned blueprint: ${result.actorName}`,
202
- name: result.actorName
203
- };
204
- }
205
- return result;
206
- },
207
- list: async (args, tools) => {
208
- const result = await tools.actorTools.listActors();
209
- if (result && result.actors && Array.isArray(result.actors)) {
210
- const limit = typeof args.limit === 'number' ? args.limit : 50;
211
- const count = result.actors.length;
212
- const names = result.actors.slice(0, limit).map((a: any) => a.label || a.name).join(', ');
213
- const remaining = count - limit;
214
- const suffix = remaining > 0 ? `... and ${remaining} others` : '';
215
- (result as any).message = `Found ${count} actors: ${names}${suffix}`;
216
- }
217
- return result;
218
- },
219
- find_by_name: async (args, tools) => {
220
- // Support both actorName and name parameters for consistency
221
- const params = normalizeArgs(args, [
222
- { key: 'name', aliases: ['actorName', 'query'], required: true }
223
- ]);
224
-
225
- // Use the plugin's fuzzy query endpoint (contains-match) instead of the
226
- // exact lookup endpoint. This improves "spawn then find" reliability.
227
- return tools.actorTools.findByName(params.name);
228
- }
229
- };
230
-
231
- export async function handleActorTools(action: string, args: any, tools: ITools) {
232
- try {
233
- const handler = handlers[action];
234
- if (handler) {
235
- const res = await handler(args, tools);
236
- return ResponseFactory.success(res);
237
- }
238
- // Fallback to direct bridge call or error
239
- const res = await executeAutomationRequest(tools, 'control_actor', args);
240
- return ResponseFactory.success(res);
241
- } catch (error) {
242
- return ResponseFactory.error(error);
243
- }
244
- }
@@ -1,237 +0,0 @@
1
- import { cleanObject } from '../../utils/safe-json.js';
2
- import { ITools } from '../../types/tool-interfaces.js';
3
- import { executeAutomationRequest } from './common-handlers.js';
4
-
5
- export async function handleAnimationTools(action: string, args: any, tools: ITools) {
6
- const animAction = String(action || '').toLowerCase();
7
-
8
- // Route specific actions to their dedicated handlers
9
- if (animAction === 'create_animation_blueprint' || animAction === 'create_anim_blueprint' || animAction === 'create_animation_bp') {
10
- const name = args.name ?? args.blueprintName;
11
- const skeletonPath = args.skeletonPath ?? args.targetSkeleton;
12
- const savePath = args.savePath ?? args.path ?? '/Game/Animations';
13
-
14
- // Auto-resolve skeleton from actorName if not provided
15
- if (!skeletonPath && args.actorName) {
16
- try {
17
- const compsRes: any = await tools.actorTools.getComponents(args.actorName);
18
- if (compsRes && Array.isArray(compsRes.components)) {
19
- const meshComp = compsRes.components.find((c: any) => c.type === 'SkeletalMeshComponent' || c.className === 'SkeletalMeshComponent');
20
- if (meshComp && meshComp.skeletalMesh) {
21
- // SkeletalMeshComponent usually has a 'skeletalMesh' property which is the path to the mesh
22
- // We can use inspect on that mesh to find its skeleton?
23
- // Or maybe getComponents returned extra details?
24
- // Assuming we get the mesh path, we still need the skeleton.
25
- // But often creating AnimBP for a Mesh acts as shortcut?
26
- // Actually, if we have the *mesh* path, we can try to use that if the C++ handler supports it,
27
- // OR we might need to inspect the mesh asset to find its skeleton.
28
- // For now, let's settle for: if user provided meshPath but not skeletonPath, we might need a way to look it up.
29
- // But here we only have actorName.
30
- // Let's defer this complexity unless required.
31
- // Correction: The walkthrough issue said "Skeleton missing".
32
- // Let's assume user MUST provide it or we fail.
33
- // But if we can help, we should.
34
- // If we have meshPath, we can pass it as 'meshPath' and let C++ handle finding the skeleton?
35
- // The C++ 'create_animation_blueprint' handler expects 'skeletonPath'.
36
- // So we'd need to modify C++ to check meshPath->Skeleton.
37
- // Since I'm editing TS only right now, I'll allow passing 'meshPath' in payload if skeletonPath is missing,
38
- // and hope C++ was updated or I should update C++ later.
39
- // Actually, checking args, if 'meshPath' is passed, we should pass it along.
40
- }
41
- }
42
- } catch (_e) { }
43
- }
44
-
45
- const payload = {
46
- ...args,
47
- name,
48
- skeletonPath,
49
- savePath
50
- };
51
-
52
- return await executeAutomationRequest(tools, 'create_animation_blueprint', payload, 'Automation bridge not available for animation blueprint creation');
53
- }
54
-
55
- if (animAction === 'play_anim_montage' || animAction === 'play_montage') {
56
- const resp: any = await executeAutomationRequest(
57
- tools,
58
- 'play_anim_montage',
59
- args,
60
- 'Automation bridge not available for montage playback'
61
- );
62
- const result = resp?.result ?? resp ?? {};
63
- const errorCode = typeof result.error === 'string' ? result.error.toUpperCase() : '';
64
- const message = typeof result.message === 'string' ? result.message : '';
65
- const msgLower = message.toLowerCase();
66
-
67
- // Check for actor not found - return proper failure state
68
- if (msgLower.includes('actor not found') || msgLower.includes('no animation played') || errorCode === 'ACTOR_NOT_FOUND') {
69
- return cleanObject({
70
- success: false,
71
- error: 'ACTOR_NOT_FOUND',
72
- message: message || 'Actor not found; no animation played',
73
- actorName: args.actorName
74
- });
75
- }
76
-
77
- if (
78
- errorCode === 'INVALID_ARGUMENT' &&
79
- msgLower.includes('actorname required') &&
80
- typeof args.playRate === 'number' &&
81
- args.playRate === 0
82
- ) {
83
- return cleanObject({
84
- success: true,
85
- noOp: true,
86
- message: 'Montage playback skipped: playRate 0 with missing actorName treated as no-op.'
87
- });
88
- }
89
-
90
- return cleanObject(resp);
91
- }
92
-
93
- if (animAction === 'setup_ragdoll' || animAction === 'activate_ragdoll') {
94
- // Auto-resolve meshPath from actorName if missing
95
- if (args.actorName && !args.meshPath && !args.skeletonPath) {
96
- try {
97
- const compsRes: any = await tools.actorTools.getComponents(args.actorName);
98
- if (compsRes && Array.isArray(compsRes.components)) {
99
- const meshComp = compsRes.components.find((c: any) => c.type === 'SkeletalMeshComponent' || c.className === 'SkeletalMeshComponent');
100
- if (meshComp && meshComp.path) {
101
- args.meshPath = meshComp.path;
102
- }
103
- }
104
- } catch (_e) {
105
- // Ignore component lookup errors, fallback to C++ handling
106
- }
107
- }
108
-
109
- const resp: any = await executeAutomationRequest(tools, 'setup_ragdoll', args, 'Automation bridge not available for ragdoll setup');
110
- const result = resp?.result ?? resp ?? {};
111
- const message = typeof result.message === 'string' ? result.message : '';
112
- const msgLower = message.toLowerCase();
113
-
114
- // Check for actor not found - return proper failure state
115
- if (msgLower.includes('actor not found') || msgLower.includes('no ragdoll applied')) {
116
- return cleanObject({
117
- success: false,
118
- error: 'ACTOR_NOT_FOUND',
119
- message: message || 'Actor not found; no ragdoll applied',
120
- actorName: args.actorName
121
- });
122
- }
123
-
124
- return cleanObject(resp);
125
- }
126
-
127
- // Flatten blend space axis parameters for C++ handler
128
- if (animAction === 'create_blend_space' || animAction === 'create_blend_tree') {
129
- if (args.horizontalAxis) {
130
- args.minX = args.horizontalAxis.minValue;
131
- args.maxX = args.horizontalAxis.maxValue;
132
- }
133
- if (args.verticalAxis) {
134
- args.minY = args.verticalAxis.minValue;
135
- args.maxY = args.verticalAxis.maxValue;
136
- }
137
- }
138
-
139
- switch (animAction) {
140
- case 'create_blend_space':
141
- return cleanObject(await tools.animationTools.createBlendSpace({
142
- name: args.name,
143
- path: args.path || args.savePath,
144
- skeletonPath: args.skeletonPath,
145
- horizontalAxis: args.horizontalAxis,
146
- verticalAxis: args.verticalAxis
147
- }));
148
- case 'create_state_machine':
149
- return cleanObject(await tools.animationTools.createStateMachine({
150
- machineName: args.machineName || args.name,
151
- states: args.states,
152
- transitions: args.transitions,
153
- blueprintPath: args.blueprintPath || args.path || args.savePath
154
- }));
155
- case 'setup_ik':
156
- return cleanObject(await tools.animationTools.setupIK({
157
- actorName: args.actorName,
158
- ikBones: args.ikBones,
159
- enableFootPlacement: args.enableFootPlacement
160
- }));
161
- case 'create_procedural_anim':
162
- return cleanObject(await tools.animationTools.createProceduralAnim({
163
- systemName: args.systemName || args.name,
164
- baseAnimation: args.baseAnimation,
165
- modifiers: args.modifiers,
166
- savePath: args.savePath || args.path
167
- }));
168
- case 'create_blend_tree':
169
- return cleanObject(await tools.animationTools.createBlendTree({
170
- treeName: args.treeName || args.name,
171
- blendType: args.blendType,
172
- basePose: args.basePose,
173
- additiveAnimations: args.additiveAnimations,
174
- savePath: args.savePath || args.path
175
- }));
176
- case 'cleanup':
177
- return cleanObject(await tools.animationTools.cleanup(args.artifacts));
178
- case 'create_animation_asset': {
179
- let assetType = args.assetType;
180
- if (!assetType && args.name) {
181
- if (args.name.toLowerCase().endsWith('montage') || args.name.toLowerCase().includes('montage')) {
182
- assetType = 'montage';
183
- }
184
- }
185
- return cleanObject(await tools.animationTools.createAnimationAsset({
186
- name: args.name,
187
- path: args.path || args.savePath,
188
- skeletonPath: args.skeletonPath,
189
- assetType
190
- }));
191
- }
192
- case 'add_notify':
193
- return cleanObject(await tools.animationTools.addNotify({
194
- animationPath: args.animationPath,
195
- assetPath: args.assetPath,
196
- notifyName: args.notifyName || args.name,
197
- time: args.time ?? args.startTime
198
- }));
199
- case 'configure_vehicle':
200
- return cleanObject(await tools.physicsTools.configureVehicle({
201
- vehicleName: args.vehicleName,
202
- vehicleType: args.vehicleType,
203
- wheels: args.wheels,
204
- engine: args.engine,
205
- transmission: args.transmission,
206
- pluginDependencies: args.pluginDependencies ?? args.plugins
207
- }));
208
- case 'setup_physics_simulation': {
209
- // Support both meshPath/skeletonPath and actorName parameters
210
- const payload: any = {
211
- meshPath: args.meshPath,
212
- skeletonPath: args.skeletonPath,
213
- physicsAssetName: args.physicsAssetName,
214
- savePath: args.savePath
215
- };
216
-
217
- // If actorName is provided but no meshPath, resolve the skeletal mesh from the actor
218
- if (args.actorName && !args.meshPath && !args.skeletonPath) {
219
- payload.actorName = args.actorName;
220
- }
221
-
222
- // Ensure at least one source is provided
223
- if (!payload.meshPath && !payload.skeletonPath && !payload.actorName) {
224
- return cleanObject({
225
- success: false,
226
- error: 'INVALID_ARGUMENT',
227
- message: 'setup_physics_simulation requires meshPath, skeletonPath, or actorName parameter'
228
- });
229
- }
230
-
231
- return cleanObject(await tools.physicsTools.setupPhysicsSimulation(payload));
232
- }
233
- default:
234
- const res = await executeAutomationRequest(tools, 'animation_physics', args, 'Automation bridge not available for animation/physics operations');
235
- return cleanObject(res);
236
- }
237
- }
@@ -1,142 +0,0 @@
1
- import { ITools } from '../../types/tool-interfaces.js';
2
-
3
- export interface ArgConfig {
4
- /** The primary key to store the normalized value in. */
5
- key: string;
6
- /** A list of alternative keys (aliases) to look for in the input args. */
7
- aliases?: string[];
8
- /** If true, the value must be a non-empty string. Throws an error if missing or empty. */
9
- required?: boolean;
10
- /** If provided, uses this default value if no valid input is found. */
11
- default?: any;
12
- /** If provided, maps the input string using this dictionary (e.g. for friendly class names). */
13
- map?: Record<string, string>;
14
- /** Custom validation function. Throws or returns invalid message string if check fails. */
15
- validator?: (val: any) => void | string;
16
- }
17
-
18
- /**
19
- * Normalizes a raw arguments object based on a list of configurations.
20
- * Handles aliasing, defaults, required checks, and value mapping.
21
- *
22
- * @param args The raw arguments object from the tool call.
23
- * @param configs A list of configuration objects for each expected argument.
24
- * @returns A new object containing the normalized arguments.
25
- * @throws Error if a required argument is missing or validation fails.
26
- */
27
- export function normalizeArgs(args: any, configs: ArgConfig[]): any {
28
- const normalized: any = { ...args }; // Start with a shallow copy to preserve extra args
29
-
30
- for (const config of configs) {
31
- let val: any = undefined;
32
-
33
- // 1. Check primary key
34
- if (args[config.key] !== undefined && args[config.key] !== null && args[config.key] !== '') {
35
- val = args[config.key];
36
- }
37
-
38
- // 2. Check aliases if primary not found
39
- if (val === undefined && config.aliases) {
40
- for (const alias of config.aliases) {
41
- if (args[alias] !== undefined && args[alias] !== null && args[alias] !== '') {
42
- val = args[alias];
43
- break;
44
- }
45
- }
46
- }
47
-
48
- // 3. Apply default if still undefined
49
- if (val === undefined && config.default !== undefined) {
50
- val = config.default;
51
- }
52
-
53
- // 4. Validate 'required'
54
- if (config.required) {
55
- if (val === undefined || val === null || (typeof val === 'string' && val.trim() === '')) {
56
- const aliasStr = config.aliases ? ` (or ${config.aliases.join(', ')})` : '';
57
- throw new Error(`Missing required argument: ${config.key}${aliasStr}`);
58
- }
59
- }
60
-
61
- // 5. Apply map
62
- if (config.map && typeof val === 'string') {
63
- // Check for exact match first
64
- if (config.map[val]) {
65
- val = config.map[val];
66
- }
67
- }
68
-
69
- // 6. Custom validator
70
- if (config.validator && val !== undefined) {
71
- const err = config.validator(val);
72
- if (typeof err === 'string') {
73
- throw new Error(`Invalid argument '${config.key}': ${err}`);
74
- }
75
- }
76
-
77
- // 7. Store result (only if we found something or used a default)
78
- if (val !== undefined) {
79
- normalized[config.key] = val;
80
- }
81
- }
82
-
83
- return normalized;
84
- }
85
-
86
- /**
87
- * Helper to resolve an object path.
88
- * Can use a direct path, an actor name, or try to find an actor by name via the tool.
89
- */
90
- export async function resolveObjectPath(
91
- args: any,
92
- tools: ITools,
93
- config?: {
94
- pathKeys?: string[]; // defaults to ['objectPath', 'path']
95
- actorKeys?: string[]; // defaults to ['actorName', 'name']
96
- fallbackToName?: boolean; // if true, returns the name itself if resolution fails (default true)
97
- }
98
- ): Promise<string | undefined> {
99
- const pathKeys = config?.pathKeys || ['objectPath', 'path'];
100
- const actorKeys = config?.actorKeys || ['actorName', 'name'];
101
- const fallback = config?.fallbackToName !== false;
102
-
103
- // 1. Try direct path keys
104
- for (const key of pathKeys) {
105
- if (typeof args[key] === 'string' && args[key].trim().length > 0) {
106
- return args[key].trim().replace(/\/+$/, '');
107
- }
108
- }
109
-
110
- // 2. Try actor keys - direct pass-through first
111
- let potentialName: string | undefined;
112
- for (const key of actorKeys) {
113
- if (typeof args[key] === 'string' && args[key].trim().length > 0) {
114
- potentialName = args[key].trim();
115
- break;
116
- }
117
- }
118
-
119
- if (potentialName) {
120
- // 3. Try smart resolution via actor tools
121
- if (tools.actorTools && typeof (tools.actorTools as any).findByName === 'function') {
122
- try {
123
- const res: any = await (tools.actorTools as any).findByName(potentialName);
124
- const container: any = res && (res.result || res);
125
- const actors = container && Array.isArray(container.actors) ? container.actors : [];
126
- if (actors.length > 0) {
127
- const first = actors[0];
128
- const resolvedPath = first.path || first.objectPath || first.levelPath;
129
- if (typeof resolvedPath === 'string' && resolvedPath.trim().length > 0) {
130
- return resolvedPath.trim();
131
- }
132
- }
133
- } catch {
134
- // Ignore lookup errors
135
- }
136
- }
137
- // Fallback to the name itself
138
- if (fallback) return potentialName;
139
- }
140
-
141
- return undefined;
142
- }