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,488 +0,0 @@
1
- #include "McpAutomationBridgeGlobals.h"
2
- #include "McpAutomationBridgeHelpers.h"
3
- #include "McpAutomationBridgeSubsystem.h"
4
-
5
- #if WITH_EDITOR
6
- #include "BehaviorTree/BTDecorator.h"
7
- #include "BehaviorTree/BTService.h"
8
- #include "BehaviorTree/BehaviorTree.h"
9
- #include "BehaviorTree/Composites/BTComposite_Selector.h"
10
- #include "BehaviorTree/Composites/BTComposite_Sequence.h"
11
- #include "BehaviorTree/Composites/BTComposite_SimpleParallel.h"
12
- #include "BehaviorTree/Tasks/BTTask_FinishWithResult.h"
13
- #include "BehaviorTree/Tasks/BTTask_MoveTo.h"
14
- #include "BehaviorTree/Tasks/BTTask_RotateToFaceBBEntry.h"
15
- #include "BehaviorTree/Tasks/BTTask_RunBehavior.h"
16
- #include "BehaviorTree/Tasks/BTTask_Wait.h"
17
- #include "BehaviorTreeGraph.h"
18
- #include "BehaviorTreeGraphNode.h"
19
- #include "BehaviorTreeGraphNode_Composite.h"
20
- #include "BehaviorTreeGraphNode_Decorator.h"
21
- #include "BehaviorTreeGraphNode_Root.h"
22
- #include "BehaviorTreeGraphNode_Service.h"
23
- #include "BehaviorTreeGraphNode_Task.h"
24
- #include "EdGraph/EdGraph.h"
25
- #include "EdGraph/EdGraphSchema.h"
26
- #include "EdGraphSchema_BehaviorTree.h"
27
-
28
-
29
- #endif
30
-
31
- /**
32
- * @brief Handles requests to create and manipulate Behavior Tree assets and their graphs.
33
- *
34
- * Processes the "manage_behavior_tree" action and performs editor-only subActions
35
- * such as "create", "add_node", "connect_nodes", "remove_node",
36
- * "break_connections", and "set_node_properties". Results and errors are sent
37
- * back over the provided websocket; when compiled without editor support an
38
- * appropriate error response is sent.
39
- *
40
- * @param RequestId Identifier for the incoming request; used when sending the response.
41
- * @param Action Action name to handle (this function acts on "manage_behavior_tree").
42
- * @param Payload JSON object containing a required "subAction" field and subAction-specific parameters.
43
- * @param RequestingSocket WebSocket to which success or error responses are written.
44
- * @return bool True if the request was handled (including cases where an error response was sent); false if Action does not equal "manage_behavior_tree".
45
- */
46
- bool UMcpAutomationBridgeSubsystem::HandleBehaviorTreeAction(
47
- const FString &RequestId, const FString &Action,
48
- const TSharedPtr<FJsonObject> &Payload,
49
- TSharedPtr<FMcpBridgeWebSocket> RequestingSocket) {
50
- if (Action != TEXT("manage_behavior_tree")) {
51
- return false;
52
- }
53
-
54
- #if WITH_EDITOR
55
- if (!Payload.IsValid()) {
56
- SendAutomationError(RequestingSocket, RequestId, TEXT("Missing payload."),
57
- TEXT("INVALID_PAYLOAD"));
58
- return true;
59
- }
60
-
61
- FString SubAction;
62
- if (!Payload->TryGetStringField(TEXT("subAction"), SubAction) ||
63
- SubAction.IsEmpty()) {
64
- SendAutomationError(RequestingSocket, RequestId,
65
- TEXT("Missing 'subAction' for manage_behavior_tree"),
66
- TEXT("INVALID_ARGUMENT"));
67
- return true;
68
- }
69
-
70
- // Handle 'create' subAction first - this doesn't need an existing asset
71
- if (SubAction == TEXT("create")) {
72
- FString Name;
73
- if (!Payload->TryGetStringField(TEXT("name"), Name) || Name.IsEmpty()) {
74
- SendAutomationError(RequestingSocket, RequestId,
75
- TEXT("name required for create"),
76
- TEXT("INVALID_ARGUMENT"));
77
- return true;
78
- }
79
-
80
- FString SavePath;
81
- if (!Payload->TryGetStringField(TEXT("savePath"), SavePath) ||
82
- SavePath.IsEmpty()) {
83
- SavePath = TEXT("/Game");
84
- }
85
-
86
- // Ensure path starts with /Game
87
- if (!SavePath.StartsWith(TEXT("/"))) {
88
- SavePath = TEXT("/Game/") + SavePath;
89
- }
90
-
91
- FString PackagePath = SavePath / Name;
92
-
93
- // Check if already exists
94
- if (UEditorAssetLibrary::DoesAssetExist(PackagePath)) {
95
- SendAutomationError(
96
- RequestingSocket, RequestId,
97
- FString::Printf(TEXT("Behavior Tree already exists at %s"),
98
- *PackagePath),
99
- TEXT("ASSET_EXISTS"));
100
- return true;
101
- }
102
-
103
- // Create the behavior tree asset
104
- UPackage *Package = CreatePackage(*PackagePath);
105
- if (!Package) {
106
- SendAutomationError(RequestingSocket, RequestId,
107
- TEXT("Failed to create package"),
108
- TEXT("PACKAGE_FAILED"));
109
- return true;
110
- }
111
-
112
- UBehaviorTree *NewBT =
113
- NewObject<UBehaviorTree>(Package, *Name, RF_Public | RF_Standalone);
114
- if (!NewBT) {
115
- SendAutomationError(RequestingSocket, RequestId,
116
- TEXT("Failed to create Behavior Tree"),
117
- TEXT("CREATE_FAILED"));
118
- return true;
119
- }
120
-
121
- // Initialize the BT graph (EdGraph)
122
- UEdGraph *NewGraph =
123
- NewObject<UBehaviorTreeGraph>(NewBT, TEXT("BehaviorTree"));
124
- NewGraph->Schema = UEdGraphSchema_BehaviorTree::StaticClass();
125
- NewBT->BTGraph = NewGraph;
126
-
127
- // Create default nodes (Root)
128
- NewGraph->GetSchema()->CreateDefaultNodesForGraph(*NewGraph);
129
-
130
- // Save the asset
131
- FAssetRegistryModule::AssetCreated(NewBT);
132
- Package->MarkPackageDirty();
133
-
134
- bool bSaved = UEditorAssetLibrary::SaveAsset(NewBT->GetPathName());
135
-
136
- TSharedPtr<FJsonObject> Result = MakeShared<FJsonObject>();
137
- Result->SetStringField(TEXT("assetPath"), NewBT->GetPathName());
138
- Result->SetStringField(TEXT("name"), Name);
139
- Result->SetBoolField(TEXT("saved"), bSaved);
140
-
141
- SendAutomationResponse(RequestingSocket, RequestId, true,
142
- TEXT("Behavior Tree created."), Result);
143
- return true;
144
- }
145
-
146
- FString AssetPath;
147
- if (!Payload->TryGetStringField(TEXT("assetPath"), AssetPath) ||
148
- AssetPath.IsEmpty()) {
149
- SendAutomationError(RequestingSocket, RequestId,
150
- TEXT("Missing 'assetPath'. Use 'create' subAction to "
151
- "create a new Behavior Tree first."),
152
- TEXT("INVALID_ARGUMENT"));
153
- return true;
154
- }
155
-
156
- UBehaviorTree *BT = LoadObject<UBehaviorTree>(nullptr, *AssetPath);
157
- if (!BT) {
158
- SendAutomationError(
159
- RequestingSocket, RequestId,
160
- FString::Printf(
161
- TEXT("Could not load Behavior Tree at '%s'. Use 'create' subAction "
162
- "to create a new Behavior Tree first."),
163
- *AssetPath),
164
- TEXT("ASSET_NOT_FOUND"));
165
- return true;
166
- }
167
-
168
- UEdGraph *BTGraph = BT->BTGraph;
169
- if (!BTGraph) {
170
- SendAutomationError(RequestingSocket, RequestId,
171
- TEXT("Behavior Tree has no graph."),
172
- TEXT("GRAPH_NOT_FOUND"));
173
- return true;
174
- }
175
-
176
- auto FindGraphNodeByIdOrName =
177
- [&](const FString &IdOrName) -> UEdGraphNode * {
178
- if (IdOrName.IsEmpty()) {
179
- return nullptr;
180
- }
181
- const FString Needle = IdOrName.TrimStartAndEnd();
182
-
183
- // Iterate nodes
184
- for (UEdGraphNode *Node : BTGraph->Nodes) {
185
- if (!Node)
186
- continue;
187
-
188
- // Check exact GUID match first
189
- if (Node->NodeGuid.ToString() == Needle)
190
- return Node;
191
-
192
- // Check parsed GUID match (handles format differences)
193
- FGuid SearchGuid;
194
- if (FGuid::Parse(Needle, SearchGuid) && Node->NodeGuid == SearchGuid) {
195
- return Node;
196
- }
197
-
198
- // Check Name and PathName
199
- if (Node->GetName().Equals(Needle, ESearchCase::IgnoreCase))
200
- return Node;
201
- if (Node->GetPathName().Equals(Needle, ESearchCase::IgnoreCase))
202
- return Node;
203
- }
204
- return nullptr;
205
- };
206
-
207
- if (SubAction == TEXT("add_node")) {
208
- FString NodeType;
209
- Payload->TryGetStringField(TEXT("nodeType"), NodeType);
210
- float X = 0.0f;
211
- float Y = 0.0f;
212
- Payload->TryGetNumberField(TEXT("x"), X);
213
- Payload->TryGetNumberField(TEXT("y"), Y);
214
-
215
- // Check for explicit Node ID
216
- FString ProvidedNodeId;
217
- Payload->TryGetStringField(TEXT("nodeId"), ProvidedNodeId);
218
-
219
- UBehaviorTreeGraphNode *NewNode = nullptr;
220
-
221
- // Determine node class
222
- UClass *NodeClass = nullptr;
223
- UClass *NodeInstanceClass = nullptr;
224
-
225
- if (NodeType == TEXT("Sequence")) {
226
- NodeClass = UBehaviorTreeGraphNode_Composite::StaticClass();
227
- NodeInstanceClass = UBTComposite_Sequence::StaticClass();
228
- } else if (NodeType == TEXT("Selector")) {
229
- NodeClass = UBehaviorTreeGraphNode_Composite::StaticClass();
230
- NodeInstanceClass = UBTComposite_Selector::StaticClass();
231
- } else if (NodeType == TEXT("SimpleParallel")) {
232
- NodeClass = UBehaviorTreeGraphNode_Composite::StaticClass();
233
- NodeInstanceClass = UBTComposite_SimpleParallel::StaticClass();
234
- } else if (NodeType == TEXT("Wait")) {
235
- NodeClass = UBehaviorTreeGraphNode_Task::StaticClass();
236
- NodeInstanceClass = UBTTask_Wait::StaticClass();
237
- } else if (NodeType == TEXT("MoveTo")) {
238
- NodeClass = UBehaviorTreeGraphNode_Task::StaticClass();
239
- NodeInstanceClass = UBTTask_MoveTo::StaticClass();
240
- } else if (NodeType == TEXT("RotateTo")) {
241
- NodeClass = UBehaviorTreeGraphNode_Task::StaticClass();
242
- NodeInstanceClass = UBTTask_RotateToFaceBBEntry::StaticClass();
243
- } else if (NodeType == TEXT("RunBehavior")) {
244
- NodeClass = UBehaviorTreeGraphNode_Task::StaticClass();
245
- NodeInstanceClass = UBTTask_RunBehavior::StaticClass();
246
- } else if (NodeType == TEXT("Fail")) {
247
- NodeClass = UBehaviorTreeGraphNode_Task::StaticClass();
248
- NodeInstanceClass = UBTTask_FinishWithResult::StaticClass();
249
- } else if (NodeType == TEXT("Succeed")) {
250
- // Succeed is a FinishWithResult task configured to success
251
- NodeClass = UBehaviorTreeGraphNode_Task::StaticClass();
252
- NodeInstanceClass = UBTTask_FinishWithResult::StaticClass();
253
- } else if (NodeType == TEXT("Root")) {
254
- NodeClass = UBehaviorTreeGraphNode_Root::StaticClass();
255
- // Root doesn't have an instance class in the same way
256
- } else {
257
- // Try to resolve as a class path
258
- UClass *Resolved = ResolveClassByName(NodeType);
259
- if (Resolved) {
260
- if (Resolved->IsChildOf(UBTCompositeNode::StaticClass())) {
261
- NodeClass = UBehaviorTreeGraphNode_Composite::StaticClass();
262
- NodeInstanceClass = Resolved;
263
- } else if (Resolved->IsChildOf(UBTTaskNode::StaticClass())) {
264
- NodeClass = UBehaviorTreeGraphNode_Task::StaticClass();
265
- NodeInstanceClass = Resolved;
266
- } else if (Resolved->IsChildOf(UBTDecorator::StaticClass())) {
267
- NodeClass = UBehaviorTreeGraphNode_Decorator::StaticClass();
268
- NodeInstanceClass = Resolved;
269
- } else if (Resolved->IsChildOf(UBTService::StaticClass())) {
270
- NodeClass = UBehaviorTreeGraphNode_Service::StaticClass();
271
- NodeInstanceClass = Resolved;
272
- }
273
- }
274
- }
275
-
276
- if (NodeClass) {
277
- NewNode = NewObject<UBehaviorTreeGraphNode>(BTGraph, NodeClass);
278
- if (NewNode) {
279
-
280
- // Use provided ID if valid, otherwise create new random one
281
- FGuid NewGuid;
282
- if (!ProvidedNodeId.IsEmpty() &&
283
- FGuid::Parse(ProvidedNodeId, NewGuid)) {
284
- NewNode->NodeGuid = NewGuid;
285
- } else {
286
- NewNode->CreateNewGuid();
287
- }
288
-
289
- NewNode->NodePosX = X;
290
- NewNode->NodePosY = Y;
291
-
292
- BTGraph->AddNode(NewNode, true, false);
293
-
294
- // Initialize the node instance
295
- NewNode->PostPlacedNewNode();
296
- NewNode->AllocateDefaultPins();
297
-
298
- BTGraph->NotifyGraphChanged();
299
- BT->MarkPackageDirty();
300
-
301
- TSharedPtr<FJsonObject> Result = MakeShared<FJsonObject>();
302
- Result->SetStringField(TEXT("nodeId"), NewNode->NodeGuid.ToString());
303
- SendAutomationResponse(RequestingSocket, RequestId, true,
304
- TEXT("Node added."), Result);
305
- } else {
306
- SendAutomationError(RequestingSocket, RequestId,
307
- TEXT("Failed to create node object."),
308
- TEXT("CREATE_FAILED"));
309
- }
310
- } else {
311
- SendAutomationError(
312
- RequestingSocket, RequestId,
313
- FString::Printf(TEXT("Unknown node type '%s'"), *NodeType),
314
- TEXT("UNKNOWN_TYPE"));
315
- }
316
- return true;
317
- } else if (SubAction == TEXT("connect_nodes")) {
318
- // Parent -> Child connection
319
- FString ParentNodeId, ChildNodeId;
320
- Payload->TryGetStringField(TEXT("parentNodeId"), ParentNodeId);
321
- Payload->TryGetStringField(TEXT("childNodeId"), ChildNodeId);
322
-
323
- UEdGraphNode *Parent = FindGraphNodeByIdOrName(ParentNodeId);
324
- UEdGraphNode *Child = FindGraphNodeByIdOrName(ChildNodeId);
325
-
326
- if (!Parent || !Child) {
327
- SendAutomationError(RequestingSocket, RequestId,
328
- TEXT("Parent or child node not found."),
329
- TEXT("NODE_NOT_FOUND"));
330
- return true;
331
- }
332
-
333
- // In BT, output pin of parent connects to input pin of child
334
- UEdGraphPin *OutputPin = nullptr;
335
- for (UEdGraphPin *Pin : Parent->Pins) {
336
- if (Pin->Direction == EGPD_Output) {
337
- OutputPin = Pin;
338
- break;
339
- }
340
- }
341
-
342
- UEdGraphPin *InputPin = nullptr;
343
- for (UEdGraphPin *Pin : Child->Pins) {
344
- if (Pin->Direction == EGPD_Input) {
345
- InputPin = Pin;
346
- break;
347
- }
348
- }
349
-
350
- if (OutputPin && InputPin) {
351
- if (BTGraph->GetSchema()->TryCreateConnection(OutputPin, InputPin)) {
352
- BTGraph->NotifyGraphChanged();
353
- BT->MarkPackageDirty();
354
- SendAutomationResponse(RequestingSocket, RequestId, true,
355
- TEXT("Nodes connected."));
356
- } else {
357
- SendAutomationError(RequestingSocket, RequestId,
358
- TEXT("Failed to connect nodes."),
359
- TEXT("CONNECT_FAILED"));
360
- }
361
- } else {
362
- SendAutomationError(RequestingSocket, RequestId,
363
- TEXT("Could not find valid pins for connection."),
364
- TEXT("PIN_NOT_FOUND"));
365
- }
366
- return true;
367
- } else if (SubAction == TEXT("remove_node")) {
368
- FString NodeId;
369
- Payload->TryGetStringField(TEXT("nodeId"), NodeId);
370
-
371
- UEdGraphNode *TargetNode = FindGraphNodeByIdOrName(NodeId);
372
-
373
- if (TargetNode) {
374
- BTGraph->RemoveNode(TargetNode);
375
- SendAutomationResponse(RequestingSocket, RequestId, true,
376
- TEXT("Node removed."));
377
- } else {
378
- SendAutomationError(RequestingSocket, RequestId, TEXT("Node not found."),
379
- TEXT("NODE_NOT_FOUND"));
380
- }
381
- return true;
382
- } else if (SubAction == TEXT("break_connections")) {
383
- FString NodeId;
384
- Payload->TryGetStringField(TEXT("nodeId"), NodeId);
385
-
386
- UEdGraphNode *TargetNode = FindGraphNodeByIdOrName(NodeId);
387
-
388
- if (TargetNode) {
389
- TargetNode->BreakAllNodeLinks();
390
- SendAutomationResponse(RequestingSocket, RequestId, true,
391
- TEXT("Connections broken."));
392
- } else {
393
- SendAutomationError(RequestingSocket, RequestId, TEXT("Node not found."),
394
- TEXT("NODE_NOT_FOUND"));
395
- }
396
- return true;
397
- } else if (SubAction == TEXT("set_node_properties")) {
398
- FString NodeId;
399
- Payload->TryGetStringField(TEXT("nodeId"), NodeId);
400
-
401
- UEdGraphNode *TargetNode = FindGraphNodeByIdOrName(NodeId);
402
-
403
- if (TargetNode) {
404
- bool bModified = false;
405
- FString Comment;
406
- if (Payload->TryGetStringField(TEXT("comment"), Comment)) {
407
- TargetNode->NodeComment = Comment;
408
- bModified = true;
409
- }
410
-
411
- // Try to set properties on the underlying NodeInstance
412
- UBehaviorTreeGraphNode *BTNode = Cast<UBehaviorTreeGraphNode>(TargetNode);
413
- const TSharedPtr<FJsonObject> *Props = nullptr;
414
- if (BTNode && BTNode->NodeInstance &&
415
- Payload->TryGetObjectField(TEXT("properties"), Props)) {
416
- for (const auto &Pair : (*Props)->Values) {
417
- FProperty *Prop =
418
- BTNode->NodeInstance->GetClass()->FindPropertyByName(*Pair.Key);
419
- if (Prop) {
420
- if (FFloatProperty *FloatProp = CastField<FFloatProperty>(Prop)) {
421
- if (Pair.Value->Type == EJson::Number) {
422
- FloatProp->SetPropertyValue_InContainer(
423
- BTNode->NodeInstance, (float)Pair.Value->AsNumber());
424
- bModified = true;
425
- }
426
- } else if (FDoubleProperty *DoubleProp =
427
- CastField<FDoubleProperty>(Prop)) {
428
- if (Pair.Value->Type == EJson::Number) {
429
- DoubleProp->SetPropertyValue_InContainer(
430
- BTNode->NodeInstance, Pair.Value->AsNumber());
431
- bModified = true;
432
- }
433
- } else if (FIntProperty *IntProp = CastField<FIntProperty>(Prop)) {
434
- if (Pair.Value->Type == EJson::Number) {
435
- IntProp->SetPropertyValue_InContainer(
436
- BTNode->NodeInstance, (int32)Pair.Value->AsNumber());
437
- bModified = true;
438
- }
439
- } else if (FBoolProperty *BoolProp =
440
- CastField<FBoolProperty>(Prop)) {
441
- if (Pair.Value->Type == EJson::Boolean) {
442
- BoolProp->SetPropertyValue_InContainer(BTNode->NodeInstance,
443
- Pair.Value->AsBool());
444
- bModified = true;
445
- }
446
- } else if (FStrProperty *StrProp = CastField<FStrProperty>(Prop)) {
447
- if (Pair.Value->Type == EJson::String) {
448
- StrProp->SetPropertyValue_InContainer(BTNode->NodeInstance,
449
- Pair.Value->AsString());
450
- bModified = true;
451
- }
452
- } else if (FNameProperty *NameProp =
453
- CastField<FNameProperty>(Prop)) {
454
- if (Pair.Value->Type == EJson::String) {
455
- NameProp->SetPropertyValue_InContainer(
456
- BTNode->NodeInstance, FName(*Pair.Value->AsString()));
457
- bModified = true;
458
- }
459
- }
460
- }
461
- }
462
- }
463
-
464
- if (bModified) {
465
- BTGraph->NotifyGraphChanged();
466
- BT->MarkPackageDirty();
467
- }
468
-
469
- SendAutomationResponse(RequestingSocket, RequestId, true,
470
- TEXT("Node properties updated."));
471
- } else {
472
- SendAutomationError(RequestingSocket, RequestId, TEXT("Node not found."),
473
- TEXT("NODE_NOT_FOUND"));
474
- }
475
- return true;
476
- }
477
-
478
- SendAutomationError(
479
- RequestingSocket, RequestId,
480
- FString::Printf(TEXT("Unknown subAction: %s"), *SubAction),
481
- TEXT("INVALID_SUBACTION"));
482
- return true;
483
- #else
484
- SendAutomationError(RequestingSocket, RequestId, TEXT("Editor only."),
485
- TEXT("EDITOR_ONLY"));
486
- return true;
487
- #endif
488
- }