unreal-engine-mcp-server 0.5.4 → 0.5.6

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 (561) hide show
  1. package/CHANGELOG.md +350 -0
  2. package/dist/automation/bridge.d.ts.map +1 -0
  3. package/dist/automation/bridge.js +5 -4
  4. package/dist/automation/bridge.js.map +1 -0
  5. package/dist/automation/connection-manager.d.ts.map +1 -0
  6. package/dist/automation/connection-manager.js.map +1 -0
  7. package/dist/automation/handshake.d.ts.map +1 -0
  8. package/dist/automation/handshake.js.map +1 -0
  9. package/dist/automation/index.d.ts.map +1 -0
  10. package/dist/automation/index.js.map +1 -0
  11. package/dist/automation/message-handler.d.ts.map +1 -0
  12. package/dist/automation/message-handler.js.map +1 -0
  13. package/dist/automation/request-tracker.d.ts.map +1 -0
  14. package/dist/automation/request-tracker.js.map +1 -0
  15. package/dist/automation/types.d.ts +7 -0
  16. package/dist/automation/types.d.ts.map +1 -0
  17. package/dist/automation/types.js.map +1 -0
  18. package/dist/cli.d.ts.map +1 -0
  19. package/dist/cli.js +6 -4
  20. package/dist/cli.js.map +1 -0
  21. package/dist/config/class-aliases.d.ts.map +1 -0
  22. package/dist/config/class-aliases.js.map +1 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/constants.d.ts.map +1 -0
  26. package/dist/constants.js.map +1 -0
  27. package/dist/graphql/loaders.d.ts.map +1 -0
  28. package/dist/graphql/loaders.js.map +1 -0
  29. package/dist/graphql/resolvers.d.ts +174 -69
  30. package/dist/graphql/resolvers.d.ts.map +1 -0
  31. package/dist/graphql/resolvers.js +82 -67
  32. package/dist/graphql/resolvers.js.map +1 -0
  33. package/dist/graphql/schema.d.ts.map +1 -0
  34. package/dist/graphql/schema.js.map +1 -0
  35. package/dist/graphql/server.d.ts.map +1 -0
  36. package/dist/graphql/server.js.map +1 -0
  37. package/dist/graphql/types.d.ts.map +1 -0
  38. package/dist/graphql/types.js.map +1 -0
  39. package/dist/handlers/resource-handlers.d.ts.map +1 -0
  40. package/dist/handlers/resource-handlers.js.map +1 -0
  41. package/dist/index.d.ts +2 -1
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +70 -9
  44. package/dist/index.js.map +1 -0
  45. package/dist/resources/actors.d.ts +7 -4
  46. package/dist/resources/actors.d.ts.map +1 -0
  47. package/dist/resources/actors.js +15 -12
  48. package/dist/resources/actors.js.map +1 -0
  49. package/dist/resources/assets.d.ts +43 -2
  50. package/dist/resources/assets.d.ts.map +1 -0
  51. package/dist/resources/assets.js +21 -12
  52. package/dist/resources/assets.js.map +1 -0
  53. package/dist/resources/levels.d.ts.map +1 -0
  54. package/dist/resources/levels.js +7 -5
  55. package/dist/resources/levels.js.map +1 -0
  56. package/dist/schemas/index.d.ts +4 -0
  57. package/dist/schemas/index.d.ts.map +1 -0
  58. package/dist/schemas/index.js +4 -0
  59. package/dist/schemas/index.js.map +1 -0
  60. package/dist/schemas/parser.d.ts +20 -0
  61. package/dist/schemas/parser.d.ts.map +1 -0
  62. package/dist/schemas/parser.js +61 -0
  63. package/dist/schemas/parser.js.map +1 -0
  64. package/dist/schemas/primitives.d.ts +221 -0
  65. package/dist/schemas/primitives.d.ts.map +1 -0
  66. package/dist/schemas/primitives.js +115 -0
  67. package/dist/schemas/primitives.js.map +1 -0
  68. package/dist/schemas/responses.d.ts +362 -0
  69. package/dist/schemas/responses.d.ts.map +1 -0
  70. package/dist/schemas/responses.js +252 -0
  71. package/dist/schemas/responses.js.map +1 -0
  72. package/dist/server/resource-registry.d.ts.map +1 -0
  73. package/dist/server/resource-registry.js.map +1 -0
  74. package/dist/server/tool-registry.d.ts.map +1 -0
  75. package/dist/server/tool-registry.js +22 -17
  76. package/dist/server/tool-registry.js.map +1 -0
  77. package/dist/server-setup.d.ts.map +1 -0
  78. package/dist/server-setup.js.map +1 -0
  79. package/dist/services/health-monitor.d.ts +1 -1
  80. package/dist/services/health-monitor.d.ts.map +1 -0
  81. package/dist/services/health-monitor.js +4 -3
  82. package/dist/services/health-monitor.js.map +1 -0
  83. package/dist/services/metrics-server.d.ts.map +1 -0
  84. package/dist/services/metrics-server.js.map +1 -0
  85. package/dist/tools/actors.d.ts +27 -27
  86. package/dist/tools/actors.d.ts.map +1 -0
  87. package/dist/tools/actors.js +14 -10
  88. package/dist/tools/actors.js.map +1 -0
  89. package/dist/tools/animation.d.ts +15 -23
  90. package/dist/tools/animation.d.ts.map +1 -0
  91. package/dist/tools/animation.js +17 -13
  92. package/dist/tools/animation.js.map +1 -0
  93. package/dist/tools/assets.d.ts.map +1 -0
  94. package/dist/tools/assets.js +18 -12
  95. package/dist/tools/assets.js.map +1 -0
  96. package/dist/tools/audio.d.ts +10 -10
  97. package/dist/tools/audio.d.ts.map +1 -0
  98. package/dist/tools/audio.js.map +1 -0
  99. package/dist/tools/base-tool.d.ts.map +1 -0
  100. package/dist/tools/base-tool.js.map +1 -0
  101. package/dist/tools/behavior-tree.d.ts +24 -24
  102. package/dist/tools/behavior-tree.d.ts.map +1 -0
  103. package/dist/tools/behavior-tree.js.map +1 -0
  104. package/dist/tools/blueprint.d.ts +14 -3
  105. package/dist/tools/blueprint.d.ts.map +1 -0
  106. package/dist/tools/blueprint.js +5 -3
  107. package/dist/tools/blueprint.js.map +1 -0
  108. package/dist/tools/consolidated-tool-definitions.d.ts +32 -32
  109. package/dist/tools/consolidated-tool-definitions.d.ts.map +1 -0
  110. package/dist/tools/consolidated-tool-definitions.js.map +1 -0
  111. package/dist/tools/consolidated-tool-handlers.d.ts +1 -1
  112. package/dist/tools/consolidated-tool-handlers.d.ts.map +1 -0
  113. package/dist/tools/consolidated-tool-handlers.js +26 -21
  114. package/dist/tools/consolidated-tool-handlers.js.map +1 -0
  115. package/dist/tools/debug.d.ts +25 -7
  116. package/dist/tools/debug.d.ts.map +1 -0
  117. package/dist/tools/debug.js +3 -1
  118. package/dist/tools/debug.js.map +1 -0
  119. package/dist/tools/dynamic-handler-registry.d.ts +1 -1
  120. package/dist/tools/dynamic-handler-registry.d.ts.map +1 -0
  121. package/dist/tools/dynamic-handler-registry.js +3 -1
  122. package/dist/tools/dynamic-handler-registry.js.map +1 -0
  123. package/dist/tools/editor.d.ts.map +1 -0
  124. package/dist/tools/editor.js +8 -6
  125. package/dist/tools/editor.js.map +1 -0
  126. package/dist/tools/engine.d.ts +1 -1
  127. package/dist/tools/engine.d.ts.map +1 -0
  128. package/dist/tools/engine.js +4 -2
  129. package/dist/tools/engine.js.map +1 -0
  130. package/dist/tools/environment.d.ts.map +1 -0
  131. package/dist/tools/environment.js +4 -3
  132. package/dist/tools/environment.js.map +1 -0
  133. package/dist/tools/foliage.d.ts.map +1 -0
  134. package/dist/tools/foliage.js +8 -8
  135. package/dist/tools/foliage.js.map +1 -0
  136. package/dist/tools/handlers/actor-handlers.d.ts +2 -1
  137. package/dist/tools/handlers/actor-handlers.d.ts.map +1 -0
  138. package/dist/tools/handlers/actor-handlers.js +56 -33
  139. package/dist/tools/handlers/actor-handlers.js.map +1 -0
  140. package/dist/tools/handlers/animation-handlers.d.ts +2 -1
  141. package/dist/tools/handlers/animation-handlers.d.ts.map +1 -0
  142. package/dist/tools/handlers/animation-handlers.js +74 -67
  143. package/dist/tools/handlers/animation-handlers.js.map +1 -0
  144. package/dist/tools/handlers/argument-helper.d.ts +24 -4
  145. package/dist/tools/handlers/argument-helper.d.ts.map +1 -0
  146. package/dist/tools/handlers/argument-helper.js +139 -4
  147. package/dist/tools/handlers/argument-helper.js.map +1 -0
  148. package/dist/tools/handlers/asset-handlers.d.ts +2 -1
  149. package/dist/tools/handlers/asset-handlers.d.ts.map +1 -0
  150. package/dist/tools/handlers/asset-handlers.js +155 -94
  151. package/dist/tools/handlers/asset-handlers.js.map +1 -0
  152. package/dist/tools/handlers/audio-handlers.d.ts +2 -1
  153. package/dist/tools/handlers/audio-handlers.d.ts.map +1 -0
  154. package/dist/tools/handlers/audio-handlers.js +82 -80
  155. package/dist/tools/handlers/audio-handlers.js.map +1 -0
  156. package/dist/tools/handlers/blueprint-handlers.d.ts +3 -5
  157. package/dist/tools/handlers/blueprint-handlers.d.ts.map +1 -0
  158. package/dist/tools/handlers/blueprint-handlers.js +150 -142
  159. package/dist/tools/handlers/blueprint-handlers.js.map +1 -0
  160. package/dist/tools/handlers/common-handlers.d.ts +2 -3
  161. package/dist/tools/handlers/common-handlers.d.ts.map +1 -0
  162. package/dist/tools/handlers/common-handlers.js.map +1 -0
  163. package/dist/tools/handlers/editor-handlers.d.ts.map +1 -0
  164. package/dist/tools/handlers/editor-handlers.js +12 -2
  165. package/dist/tools/handlers/editor-handlers.js.map +1 -0
  166. package/dist/tools/handlers/effect-handlers.d.ts +2 -1
  167. package/dist/tools/handlers/effect-handlers.d.ts.map +1 -0
  168. package/dist/tools/handlers/effect-handlers.js +70 -68
  169. package/dist/tools/handlers/effect-handlers.js.map +1 -0
  170. package/dist/tools/handlers/environment-handlers.d.ts +2 -1
  171. package/dist/tools/handlers/environment-handlers.d.ts.map +1 -0
  172. package/dist/tools/handlers/environment-handlers.js +86 -74
  173. package/dist/tools/handlers/environment-handlers.js.map +1 -0
  174. package/dist/tools/handlers/graph-handlers.d.ts +1 -1
  175. package/dist/tools/handlers/graph-handlers.d.ts.map +1 -0
  176. package/dist/tools/handlers/graph-handlers.js +63 -2
  177. package/dist/tools/handlers/graph-handlers.js.map +1 -0
  178. package/dist/tools/handlers/input-handlers.d.ts +2 -5
  179. package/dist/tools/handlers/input-handlers.d.ts.map +1 -0
  180. package/dist/tools/handlers/input-handlers.js +5 -4
  181. package/dist/tools/handlers/input-handlers.js.map +1 -0
  182. package/dist/tools/handlers/inspect-handlers.d.ts +2 -1
  183. package/dist/tools/handlers/inspect-handlers.d.ts.map +1 -0
  184. package/dist/tools/handlers/inspect-handlers.js +61 -37
  185. package/dist/tools/handlers/inspect-handlers.js.map +1 -0
  186. package/dist/tools/handlers/level-handlers.d.ts +2 -2
  187. package/dist/tools/handlers/level-handlers.d.ts.map +1 -0
  188. package/dist/tools/handlers/level-handlers.js +43 -39
  189. package/dist/tools/handlers/level-handlers.js.map +1 -0
  190. package/dist/tools/handlers/lighting-handlers.d.ts +12 -1
  191. package/dist/tools/handlers/lighting-handlers.d.ts.map +1 -0
  192. package/dist/tools/handlers/lighting-handlers.js +90 -47
  193. package/dist/tools/handlers/lighting-handlers.js.map +1 -0
  194. package/dist/tools/handlers/performance-handlers.d.ts +2 -1
  195. package/dist/tools/handlers/performance-handlers.d.ts.map +1 -0
  196. package/dist/tools/handlers/performance-handlers.js +55 -40
  197. package/dist/tools/handlers/performance-handlers.js.map +1 -0
  198. package/dist/tools/handlers/pipeline-handlers.d.ts.map +1 -0
  199. package/dist/tools/handlers/pipeline-handlers.js.map +1 -0
  200. package/dist/tools/handlers/sequence-handlers.d.ts.map +1 -0
  201. package/dist/tools/handlers/sequence-handlers.js.map +1 -0
  202. package/dist/tools/handlers/system-handlers.d.ts +3 -2
  203. package/dist/tools/handlers/system-handlers.d.ts.map +1 -0
  204. package/dist/tools/handlers/system-handlers.js +105 -52
  205. package/dist/tools/handlers/system-handlers.js.map +1 -0
  206. package/dist/tools/input.d.ts.map +1 -0
  207. package/dist/tools/input.js +3 -1
  208. package/dist/tools/input.js.map +1 -0
  209. package/dist/tools/introspection.d.ts +14 -14
  210. package/dist/tools/introspection.d.ts.map +1 -0
  211. package/dist/tools/introspection.js +54 -45
  212. package/dist/tools/introspection.js.map +1 -0
  213. package/dist/tools/landscape.d.ts.map +1 -0
  214. package/dist/tools/landscape.js +15 -13
  215. package/dist/tools/landscape.js.map +1 -0
  216. package/dist/tools/level.d.ts.map +1 -0
  217. package/dist/tools/level.js +3 -2
  218. package/dist/tools/level.js.map +1 -0
  219. package/dist/tools/lighting.d.ts +32 -59
  220. package/dist/tools/lighting.d.ts.map +1 -0
  221. package/dist/tools/lighting.js +56 -19
  222. package/dist/tools/lighting.js.map +1 -0
  223. package/dist/tools/logs.d.ts.map +1 -0
  224. package/dist/tools/logs.js +2 -1
  225. package/dist/tools/logs.js.map +1 -0
  226. package/dist/tools/materials.d.ts +42 -14
  227. package/dist/tools/materials.d.ts.map +1 -0
  228. package/dist/tools/materials.js +15 -9
  229. package/dist/tools/materials.js.map +1 -0
  230. package/dist/tools/niagara.d.ts +63 -39
  231. package/dist/tools/niagara.d.ts.map +1 -0
  232. package/dist/tools/niagara.js +43 -33
  233. package/dist/tools/niagara.js.map +1 -0
  234. package/dist/tools/performance.d.ts +12 -11
  235. package/dist/tools/performance.d.ts.map +1 -0
  236. package/dist/tools/performance.js +3 -2
  237. package/dist/tools/performance.js.map +1 -0
  238. package/dist/tools/physics.d.ts +37 -20
  239. package/dist/tools/physics.d.ts.map +1 -0
  240. package/dist/tools/physics.js +37 -30
  241. package/dist/tools/physics.js.map +1 -0
  242. package/dist/tools/property-dictionary.d.ts.map +1 -0
  243. package/dist/tools/property-dictionary.js.map +1 -0
  244. package/dist/tools/sequence.d.ts +1 -1
  245. package/dist/tools/sequence.d.ts.map +1 -0
  246. package/dist/tools/sequence.js +8 -4
  247. package/dist/tools/sequence.js.map +1 -0
  248. package/dist/tools/tool-definition-utils.d.ts.map +1 -0
  249. package/dist/tools/tool-definition-utils.js.map +1 -0
  250. package/dist/tools/ui.d.ts +11 -11
  251. package/dist/tools/ui.d.ts.map +1 -0
  252. package/dist/tools/ui.js +7 -3
  253. package/dist/tools/ui.js.map +1 -0
  254. package/dist/types/automation-responses.d.ts.map +1 -0
  255. package/dist/types/automation-responses.js.map +1 -0
  256. package/dist/types/env.d.ts.map +1 -0
  257. package/dist/types/env.js.map +1 -0
  258. package/dist/types/handler-types.d.ts +112 -3
  259. package/dist/types/handler-types.d.ts.map +1 -0
  260. package/dist/types/handler-types.js.map +1 -0
  261. package/dist/types/tool-interfaces.d.ts +39 -21
  262. package/dist/types/tool-interfaces.d.ts.map +1 -0
  263. package/dist/types/tool-interfaces.js.map +1 -0
  264. package/dist/types/tool-types.d.ts +8 -8
  265. package/dist/types/tool-types.d.ts.map +1 -0
  266. package/dist/types/tool-types.js.map +1 -0
  267. package/dist/unreal-bridge.d.ts +8 -6
  268. package/dist/unreal-bridge.d.ts.map +1 -0
  269. package/dist/unreal-bridge.js +16 -3
  270. package/dist/unreal-bridge.js.map +1 -0
  271. package/dist/utils/command-validator.d.ts.map +1 -0
  272. package/dist/utils/command-validator.js.map +1 -0
  273. package/dist/utils/elicitation.d.ts +2 -5
  274. package/dist/utils/elicitation.d.ts.map +1 -0
  275. package/dist/utils/elicitation.js +3 -2
  276. package/dist/utils/elicitation.js.map +1 -0
  277. package/dist/utils/error-handler.d.ts.map +1 -0
  278. package/dist/utils/error-handler.js.map +1 -0
  279. package/dist/utils/ini-reader.d.ts +1 -1
  280. package/dist/utils/ini-reader.d.ts.map +1 -0
  281. package/dist/utils/ini-reader.js.map +1 -0
  282. package/dist/utils/logger.d.ts +4 -4
  283. package/dist/utils/logger.d.ts.map +1 -0
  284. package/dist/utils/logger.js.map +1 -0
  285. package/dist/utils/normalize.d.ts +2 -2
  286. package/dist/utils/normalize.d.ts.map +1 -0
  287. package/dist/utils/normalize.js +4 -3
  288. package/dist/utils/normalize.js.map +1 -0
  289. package/dist/utils/path-security.d.ts.map +1 -0
  290. package/dist/utils/path-security.js.map +1 -0
  291. package/dist/utils/response-factory.d.ts +2 -2
  292. package/dist/utils/response-factory.d.ts.map +1 -0
  293. package/dist/utils/response-factory.js +3 -1
  294. package/dist/utils/response-factory.js.map +1 -0
  295. package/dist/utils/response-validator.d.ts +4 -4
  296. package/dist/utils/response-validator.d.ts.map +1 -0
  297. package/dist/utils/response-validator.js +31 -23
  298. package/dist/utils/response-validator.js.map +1 -0
  299. package/dist/utils/result-helpers.d.ts.map +1 -0
  300. package/dist/utils/result-helpers.js.map +1 -0
  301. package/dist/utils/safe-json.d.ts.map +1 -0
  302. package/dist/utils/safe-json.js.map +1 -0
  303. package/dist/utils/unreal-command-queue.d.ts +2 -2
  304. package/dist/utils/unreal-command-queue.d.ts.map +1 -0
  305. package/dist/utils/unreal-command-queue.js +4 -3
  306. package/dist/utils/unreal-command-queue.js.map +1 -0
  307. package/dist/utils/validation.d.ts +1 -1
  308. package/dist/utils/validation.d.ts.map +1 -0
  309. package/dist/utils/validation.js.map +1 -0
  310. package/dist/wasm/index.d.ts +2 -2
  311. package/dist/wasm/index.d.ts.map +1 -0
  312. package/dist/wasm/index.js +11 -7
  313. package/dist/wasm/index.js.map +1 -0
  314. package/package.json +12 -34
  315. package/server.json +2 -2
  316. package/.dockerignore +0 -57
  317. package/.env.example +0 -26
  318. package/.env.production +0 -61
  319. package/.eslintrc.json +0 -0
  320. package/.eslintrc.override.json +0 -8
  321. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -94
  322. package/.github/ISSUE_TEMPLATE/config.yml +0 -8
  323. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -56
  324. package/.github/copilot-instructions.md +0 -478
  325. package/.github/dependabot.yml +0 -19
  326. package/.github/labeler.yml +0 -24
  327. package/.github/labels.yml +0 -70
  328. package/.github/pull_request_template.md +0 -42
  329. package/.github/release-drafter-config.yml +0 -51
  330. package/.github/workflows/auto-merge.yml +0 -38
  331. package/.github/workflows/ci.yml +0 -38
  332. package/.github/workflows/dependency-review.yml +0 -17
  333. package/.github/workflows/gemini-issue-triage.yml +0 -172
  334. package/.github/workflows/greetings.yml +0 -27
  335. package/.github/workflows/labeler.yml +0 -17
  336. package/.github/workflows/links.yml +0 -80
  337. package/.github/workflows/pr-size-labeler.yml +0 -137
  338. package/.github/workflows/publish-mcp.yml +0 -79
  339. package/.github/workflows/release-drafter.yml +0 -24
  340. package/.github/workflows/release.yml +0 -112
  341. package/.github/workflows/semantic-pull-request.yml +0 -35
  342. package/.github/workflows/smoke-test.yml +0 -36
  343. package/.github/workflows/stale.yml +0 -28
  344. package/CONTRIBUTING.md +0 -140
  345. package/Dockerfile +0 -37
  346. package/GEMINI.md +0 -115
  347. package/Public/Plugin_setup_guide.mp4 +0 -0
  348. package/Public/icon.png +0 -0
  349. package/claude_desktop_config_example.json +0 -15
  350. package/dist/types/responses.d.ts +0 -249
  351. package/dist/types/responses.js +0 -2
  352. package/docs/GraphQL-API.md +0 -888
  353. package/docs/Migration-Guide-v0.5.0.md +0 -684
  354. package/docs/Roadmap.md +0 -53
  355. package/docs/WebAssembly-Integration.md +0 -628
  356. package/docs/editor-plugin-extension.md +0 -370
  357. package/docs/handler-mapping.md +0 -249
  358. package/docs/native-automation-progress.md +0 -128
  359. package/docs/testing-guide.md +0 -423
  360. package/eslint.config.mjs +0 -68
  361. package/mcp-config-example.json +0 -14
  362. package/plugins/McpAutomationBridge/Config/FilterPlugin.ini +0 -8
  363. package/plugins/McpAutomationBridge/McpAutomationBridge.uplugin +0 -64
  364. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/McpAutomationBridge.Build.cs +0 -189
  365. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.cpp +0 -22
  366. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.h +0 -30
  367. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeHelpers.h +0 -1983
  368. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeModule.cpp +0 -72
  369. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSettings.cpp +0 -46
  370. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSubsystem.cpp +0 -846
  371. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AnimationHandlers.cpp +0 -2393
  372. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetQueryHandlers.cpp +0 -300
  373. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetWorkflowHandlers.cpp +0 -2807
  374. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AudioHandlers.cpp +0 -1087
  375. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BehaviorTreeHandlers.cpp +0 -488
  376. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.cpp +0 -643
  377. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.h +0 -31
  378. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintGraphHandlers.cpp +0 -1094
  379. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers.cpp +0 -5750
  380. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers_List.cpp +0 -152
  381. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ControlHandlers.cpp +0 -2614
  382. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_DebugHandlers.cpp +0 -42
  383. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EditorFunctionHandlers.cpp +0 -1237
  384. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EffectHandlers.cpp +0 -1725
  385. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EnvironmentHandlers.cpp +0 -2265
  386. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_FoliageHandlers.cpp +0 -954
  387. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InputHandlers.cpp +0 -209
  388. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InsightsHandlers.cpp +0 -41
  389. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LandscapeHandlers.cpp +0 -1164
  390. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LevelHandlers.cpp +0 -762
  391. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LightingHandlers.cpp +0 -663
  392. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LogHandlers.cpp +0 -136
  393. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_MaterialGraphHandlers.cpp +0 -494
  394. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraGraphHandlers.cpp +0 -278
  395. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraHandlers.cpp +0 -625
  396. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PerformanceHandlers.cpp +0 -401
  397. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PipelineHandlers.cpp +0 -67
  398. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ProcessRequest.cpp +0 -472
  399. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PropertyHandlers.cpp +0 -2634
  400. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_RenderHandlers.cpp +0 -189
  401. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.cpp +0 -917
  402. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.h +0 -39
  403. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequenceHandlers.cpp +0 -2706
  404. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequencerHandlers.cpp +0 -519
  405. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_TestHandlers.cpp +0 -38
  406. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_UiHandlers.cpp +0 -668
  407. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_WorldPartitionHandlers.cpp +0 -346
  408. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.cpp +0 -1345
  409. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.h +0 -149
  410. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpConnectionManager.cpp +0 -782
  411. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSettings.h +0 -115
  412. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSubsystem.h +0 -796
  413. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpConnectionManager.h +0 -117
  414. package/scripts/check-unreal-connection.mjs +0 -19
  415. package/scripts/clean-tmp.js +0 -23
  416. package/scripts/patch-wasm.js +0 -26
  417. package/scripts/run-all-tests.mjs +0 -136
  418. package/scripts/smoke-test.ts +0 -94
  419. package/scripts/sync-mcp-plugin.js +0 -143
  420. package/scripts/test-no-plugin-alternates.mjs +0 -113
  421. package/scripts/validate-server.js +0 -46
  422. package/scripts/verify-automation-bridge.js +0 -200
  423. package/src/automation/bridge.ts +0 -630
  424. package/src/automation/connection-manager.ts +0 -148
  425. package/src/automation/handshake.ts +0 -99
  426. package/src/automation/index.ts +0 -2
  427. package/src/automation/message-handler.ts +0 -192
  428. package/src/automation/request-tracker.ts +0 -155
  429. package/src/automation/types.ts +0 -108
  430. package/src/cli.ts +0 -34
  431. package/src/config/class-aliases.ts +0 -65
  432. package/src/config.ts +0 -73
  433. package/src/constants.ts +0 -29
  434. package/src/graphql/loaders.ts +0 -244
  435. package/src/graphql/resolvers.ts +0 -1008
  436. package/src/graphql/schema.ts +0 -452
  437. package/src/graphql/server.ts +0 -156
  438. package/src/graphql/types.ts +0 -10
  439. package/src/handlers/resource-handlers.ts +0 -186
  440. package/src/index.ts +0 -243
  441. package/src/resources/actors.ts +0 -127
  442. package/src/resources/assets.ts +0 -286
  443. package/src/resources/levels.ts +0 -68
  444. package/src/server/resource-registry.ts +0 -47
  445. package/src/server/tool-registry.ts +0 -354
  446. package/src/server-setup.ts +0 -114
  447. package/src/services/health-monitor.ts +0 -132
  448. package/src/services/metrics-server.ts +0 -176
  449. package/src/tools/actors.ts +0 -564
  450. package/src/tools/animation.ts +0 -941
  451. package/src/tools/assets.ts +0 -394
  452. package/src/tools/audio.ts +0 -499
  453. package/src/tools/base-tool.ts +0 -52
  454. package/src/tools/behavior-tree.ts +0 -45
  455. package/src/tools/blueprint.ts +0 -940
  456. package/src/tools/consolidated-tool-definitions.ts +0 -1256
  457. package/src/tools/consolidated-tool-handlers.ts +0 -302
  458. package/src/tools/debug.ts +0 -622
  459. package/src/tools/dynamic-handler-registry.ts +0 -33
  460. package/src/tools/editor.ts +0 -435
  461. package/src/tools/engine.ts +0 -43
  462. package/src/tools/environment.ts +0 -281
  463. package/src/tools/foliage.ts +0 -596
  464. package/src/tools/handlers/actor-handlers.ts +0 -244
  465. package/src/tools/handlers/animation-handlers.ts +0 -237
  466. package/src/tools/handlers/argument-helper.ts +0 -142
  467. package/src/tools/handlers/asset-handlers.ts +0 -550
  468. package/src/tools/handlers/audio-handlers.ts +0 -194
  469. package/src/tools/handlers/blueprint-handlers.ts +0 -380
  470. package/src/tools/handlers/common-handlers.ts +0 -108
  471. package/src/tools/handlers/editor-handlers.ts +0 -124
  472. package/src/tools/handlers/effect-handlers.ts +0 -224
  473. package/src/tools/handlers/environment-handlers.ts +0 -183
  474. package/src/tools/handlers/graph-handlers.ts +0 -117
  475. package/src/tools/handlers/input-handlers.ts +0 -28
  476. package/src/tools/handlers/inspect-handlers.ts +0 -450
  477. package/src/tools/handlers/level-handlers.ts +0 -253
  478. package/src/tools/handlers/lighting-handlers.ts +0 -151
  479. package/src/tools/handlers/performance-handlers.ts +0 -132
  480. package/src/tools/handlers/pipeline-handlers.ts +0 -194
  481. package/src/tools/handlers/sequence-handlers.ts +0 -438
  482. package/src/tools/handlers/system-handlers.ts +0 -564
  483. package/src/tools/input.ts +0 -160
  484. package/src/tools/introspection.ts +0 -689
  485. package/src/tools/landscape.ts +0 -649
  486. package/src/tools/level.ts +0 -989
  487. package/src/tools/lighting.ts +0 -1052
  488. package/src/tools/logs.ts +0 -219
  489. package/src/tools/materials.ts +0 -295
  490. package/src/tools/niagara.ts +0 -485
  491. package/src/tools/performance.ts +0 -661
  492. package/src/tools/physics.ts +0 -679
  493. package/src/tools/property-dictionary.ts +0 -98
  494. package/src/tools/sequence.ts +0 -385
  495. package/src/tools/tool-definition-utils.ts +0 -35
  496. package/src/tools/ui.ts +0 -452
  497. package/src/types/automation-responses.ts +0 -119
  498. package/src/types/env.ts +0 -17
  499. package/src/types/handler-types.ts +0 -442
  500. package/src/types/responses.ts +0 -355
  501. package/src/types/tool-interfaces.ts +0 -250
  502. package/src/types/tool-types.ts +0 -575
  503. package/src/unreal-bridge.ts +0 -693
  504. package/src/utils/command-validator.ts +0 -139
  505. package/src/utils/elicitation.ts +0 -132
  506. package/src/utils/error-handler.ts +0 -287
  507. package/src/utils/ini-reader.ts +0 -86
  508. package/src/utils/logger.ts +0 -35
  509. package/src/utils/normalize.test.ts +0 -162
  510. package/src/utils/normalize.ts +0 -146
  511. package/src/utils/path-security.ts +0 -43
  512. package/src/utils/response-factory.ts +0 -44
  513. package/src/utils/response-validator.ts +0 -395
  514. package/src/utils/result-helpers.ts +0 -195
  515. package/src/utils/safe-json.test.ts +0 -90
  516. package/src/utils/safe-json.ts +0 -70
  517. package/src/utils/unreal-command-queue.ts +0 -166
  518. package/src/utils/validation.test.ts +0 -184
  519. package/src/utils/validation.ts +0 -312
  520. package/src/wasm/index.ts +0 -838
  521. package/test-server.mjs +0 -100
  522. package/tests/test-animation.mjs +0 -369
  523. package/tests/test-asset-advanced.mjs +0 -82
  524. package/tests/test-asset-graph.mjs +0 -311
  525. package/tests/test-audio.mjs +0 -417
  526. package/tests/test-automation-timeouts.mjs +0 -98
  527. package/tests/test-behavior-tree.mjs +0 -444
  528. package/tests/test-blueprint-graph.mjs +0 -410
  529. package/tests/test-blueprint.mjs +0 -577
  530. package/tests/test-client-mode.mjs +0 -86
  531. package/tests/test-console-command.mjs +0 -56
  532. package/tests/test-control-actor.mjs +0 -425
  533. package/tests/test-control-editor.mjs +0 -112
  534. package/tests/test-graphql.mjs +0 -372
  535. package/tests/test-input.mjs +0 -349
  536. package/tests/test-inspect.mjs +0 -302
  537. package/tests/test-landscape.mjs +0 -316
  538. package/tests/test-lighting.mjs +0 -428
  539. package/tests/test-manage-asset.mjs +0 -438
  540. package/tests/test-manage-level.mjs +0 -89
  541. package/tests/test-materials.mjs +0 -356
  542. package/tests/test-niagara.mjs +0 -185
  543. package/tests/test-no-inline-python.mjs +0 -122
  544. package/tests/test-performance.mjs +0 -539
  545. package/tests/test-plugin-handshake.mjs +0 -82
  546. package/tests/test-runner.mjs +0 -993
  547. package/tests/test-sequence.mjs +0 -104
  548. package/tests/test-system.mjs +0 -96
  549. package/tests/test-wasm.mjs +0 -283
  550. package/tests/test-world-partition.mjs +0 -215
  551. package/tsconfig.json +0 -56
  552. package/vitest.config.ts +0 -35
  553. package/wasm/Cargo.lock +0 -363
  554. package/wasm/Cargo.toml +0 -42
  555. package/wasm/LICENSE +0 -21
  556. package/wasm/README.md +0 -253
  557. package/wasm/src/dependency_resolver.rs +0 -377
  558. package/wasm/src/lib.rs +0 -153
  559. package/wasm/src/property_parser.rs +0 -271
  560. package/wasm/src/transform_math.rs +0 -396
  561. 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
- }