unreal-engine-mcp-server 0.5.21 → 0.5.30

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 (382) hide show
  1. package/CHANGELOG.md +247 -4
  2. package/README.md +140 -85
  3. package/dist/automation/bridge.d.ts +8 -0
  4. package/dist/automation/bridge.d.ts.map +1 -1
  5. package/dist/automation/bridge.js +94 -14
  6. package/dist/automation/bridge.js.map +1 -1
  7. package/dist/automation/connection-manager.d.ts.map +1 -1
  8. package/dist/automation/connection-manager.js +13 -5
  9. package/dist/automation/connection-manager.js.map +1 -1
  10. package/dist/automation/handshake.d.ts.map +1 -1
  11. package/dist/automation/handshake.js +40 -27
  12. package/dist/automation/handshake.js.map +1 -1
  13. package/dist/automation/index.d.ts +1 -1
  14. package/dist/automation/index.d.ts.map +1 -1
  15. package/dist/automation/index.js +0 -1
  16. package/dist/automation/index.js.map +1 -1
  17. package/dist/automation/message-handler.d.ts.map +1 -1
  18. package/dist/automation/message-handler.js +13 -9
  19. package/dist/automation/message-handler.js.map +1 -1
  20. package/dist/automation/message-schema.d.ts.map +1 -1
  21. package/dist/automation/message-schema.js +19 -18
  22. package/dist/automation/message-schema.js.map +1 -1
  23. package/dist/automation/request-tracker.d.ts +1 -0
  24. package/dist/automation/request-tracker.d.ts.map +1 -1
  25. package/dist/automation/request-tracker.js +30 -31
  26. package/dist/automation/request-tracker.js.map +1 -1
  27. package/dist/automation/types.d.ts +38 -32
  28. package/dist/automation/types.d.ts.map +1 -1
  29. package/dist/cli.js +14 -16
  30. package/dist/cli.js.map +1 -1
  31. package/dist/config/class-aliases.d.ts.map +1 -1
  32. package/dist/config/class-aliases.js +10 -2
  33. package/dist/config/class-aliases.js.map +1 -1
  34. package/dist/config.d.ts +9 -8
  35. package/dist/config.d.ts.map +1 -1
  36. package/dist/config.js +58 -32
  37. package/dist/config.js.map +1 -1
  38. package/dist/handlers/resource-handlers.d.ts +15 -2
  39. package/dist/handlers/resource-handlers.d.ts.map +1 -1
  40. package/dist/handlers/resource-handlers.js +46 -63
  41. package/dist/handlers/resource-handlers.js.map +1 -1
  42. package/dist/index.d.ts +0 -2
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +42 -48
  45. package/dist/index.js.map +1 -1
  46. package/dist/resources/assets.d.ts.map +1 -1
  47. package/dist/resources/assets.js +34 -9
  48. package/dist/resources/assets.js.map +1 -1
  49. package/dist/resources/levels.d.ts +3 -0
  50. package/dist/resources/levels.d.ts.map +1 -1
  51. package/dist/resources/levels.js +33 -17
  52. package/dist/resources/levels.js.map +1 -1
  53. package/dist/server/resource-registry.d.ts +15 -2
  54. package/dist/server/resource-registry.d.ts.map +1 -1
  55. package/dist/server/resource-registry.js +9 -8
  56. package/dist/server/resource-registry.js.map +1 -1
  57. package/dist/server/tool-registry.d.ts +0 -1
  58. package/dist/server/tool-registry.d.ts.map +1 -1
  59. package/dist/server/tool-registry.js +91 -101
  60. package/dist/server/tool-registry.js.map +1 -1
  61. package/dist/server-setup.d.ts +5 -2
  62. package/dist/server-setup.d.ts.map +1 -1
  63. package/dist/server-setup.js +15 -19
  64. package/dist/server-setup.js.map +1 -1
  65. package/dist/services/health-monitor.d.ts +3 -0
  66. package/dist/services/health-monitor.d.ts.map +1 -1
  67. package/dist/services/health-monitor.js +30 -11
  68. package/dist/services/health-monitor.js.map +1 -1
  69. package/dist/services/metrics-server.d.ts +1 -1
  70. package/dist/services/metrics-server.d.ts.map +1 -1
  71. package/dist/services/metrics-server.js +65 -3
  72. package/dist/services/metrics-server.js.map +1 -1
  73. package/dist/tools/base-tool.d.ts.map +1 -1
  74. package/dist/tools/base-tool.js +14 -16
  75. package/dist/tools/base-tool.js.map +1 -1
  76. package/dist/tools/consolidated-tool-definitions.d.ts +16 -1
  77. package/dist/tools/consolidated-tool-definitions.d.ts.map +1 -1
  78. package/dist/tools/consolidated-tool-definitions.js +1479 -2538
  79. package/dist/tools/consolidated-tool-definitions.js.map +1 -1
  80. package/dist/tools/consolidated-tool-handlers.d.ts.map +1 -1
  81. package/dist/tools/consolidated-tool-handlers.js +195 -217
  82. package/dist/tools/consolidated-tool-handlers.js.map +1 -1
  83. package/dist/tools/dynamic-handler-registry.d.ts +1 -0
  84. package/dist/tools/dynamic-handler-registry.d.ts.map +1 -1
  85. package/dist/tools/dynamic-handler-registry.js +15 -7
  86. package/dist/tools/dynamic-handler-registry.js.map +1 -1
  87. package/dist/tools/dynamic-tool-manager.d.ts +1 -1
  88. package/dist/tools/dynamic-tool-manager.d.ts.map +1 -1
  89. package/dist/tools/dynamic-tool-manager.js +30 -18
  90. package/dist/tools/dynamic-tool-manager.js.map +1 -1
  91. package/dist/tools/editor.d.ts +2 -2
  92. package/dist/tools/editor.d.ts.map +1 -1
  93. package/dist/tools/editor.js +4 -4
  94. package/dist/tools/editor.js.map +1 -1
  95. package/dist/tools/handlers/actor-handlers.d.ts.map +1 -1
  96. package/dist/tools/handlers/actor-handlers.js +66 -7
  97. package/dist/tools/handlers/actor-handlers.js.map +1 -1
  98. package/dist/tools/handlers/ai-handlers.d.ts.map +1 -1
  99. package/dist/tools/handlers/ai-handlers.js +24 -13
  100. package/dist/tools/handlers/ai-handlers.js.map +1 -1
  101. package/dist/tools/handlers/animation-authoring-handlers.d.ts.map +1 -1
  102. package/dist/tools/handlers/animation-authoring-handlers.js +285 -218
  103. package/dist/tools/handlers/animation-authoring-handlers.js.map +1 -1
  104. package/dist/tools/handlers/animation-handlers.d.ts.map +1 -1
  105. package/dist/tools/handlers/animation-handlers.js +69 -21
  106. package/dist/tools/handlers/animation-handlers.js.map +1 -1
  107. package/dist/tools/handlers/asset-handlers.d.ts.map +1 -1
  108. package/dist/tools/handlers/asset-handlers.js +75 -16
  109. package/dist/tools/handlers/asset-handlers.js.map +1 -1
  110. package/dist/tools/handlers/audio-authoring-handlers.d.ts.map +1 -1
  111. package/dist/tools/handlers/audio-authoring-handlers.js +102 -9
  112. package/dist/tools/handlers/audio-authoring-handlers.js.map +1 -1
  113. package/dist/tools/handlers/audio-handlers.d.ts.map +1 -1
  114. package/dist/tools/handlers/audio-handlers.js +48 -13
  115. package/dist/tools/handlers/audio-handlers.js.map +1 -1
  116. package/dist/tools/handlers/blueprint-handlers.d.ts.map +1 -1
  117. package/dist/tools/handlers/blueprint-handlers.js +28 -48
  118. package/dist/tools/handlers/blueprint-handlers.js.map +1 -1
  119. package/dist/tools/handlers/character-handlers.d.ts.map +1 -1
  120. package/dist/tools/handlers/character-handlers.js +13 -12
  121. package/dist/tools/handlers/character-handlers.js.map +1 -1
  122. package/dist/tools/handlers/combat-handlers.d.ts.map +1 -1
  123. package/dist/tools/handlers/combat-handlers.js +12 -12
  124. package/dist/tools/handlers/combat-handlers.js.map +1 -1
  125. package/dist/tools/handlers/common-handlers.d.ts +14 -0
  126. package/dist/tools/handlers/common-handlers.d.ts.map +1 -1
  127. package/dist/tools/handlers/common-handlers.js +117 -9
  128. package/dist/tools/handlers/common-handlers.js.map +1 -1
  129. package/dist/tools/handlers/editor-handlers.d.ts.map +1 -1
  130. package/dist/tools/handlers/editor-handlers.js +139 -67
  131. package/dist/tools/handlers/editor-handlers.js.map +1 -1
  132. package/dist/tools/handlers/effect-handlers.d.ts.map +1 -1
  133. package/dist/tools/handlers/effect-handlers.js +324 -36
  134. package/dist/tools/handlers/effect-handlers.js.map +1 -1
  135. package/dist/tools/handlers/environment-handlers.d.ts.map +1 -1
  136. package/dist/tools/handlers/environment-handlers.js +186 -21
  137. package/dist/tools/handlers/environment-handlers.js.map +1 -1
  138. package/dist/tools/handlers/game-framework-handlers.d.ts.map +1 -1
  139. package/dist/tools/handlers/game-framework-handlers.js +10 -12
  140. package/dist/tools/handlers/game-framework-handlers.js.map +1 -1
  141. package/dist/tools/handlers/gas-handlers.d.ts.map +1 -1
  142. package/dist/tools/handlers/gas-handlers.js +136 -20
  143. package/dist/tools/handlers/gas-handlers.js.map +1 -1
  144. package/dist/tools/handlers/geometry-handlers.d.ts.map +1 -1
  145. package/dist/tools/handlers/geometry-handlers.js +130 -7
  146. package/dist/tools/handlers/geometry-handlers.js.map +1 -1
  147. package/dist/tools/handlers/graph-handlers.d.ts.map +1 -1
  148. package/dist/tools/handlers/graph-handlers.js +46 -11
  149. package/dist/tools/handlers/graph-handlers.js.map +1 -1
  150. package/dist/tools/handlers/input-handlers.d.ts.map +1 -1
  151. package/dist/tools/handlers/input-handlers.js +33 -75
  152. package/dist/tools/handlers/input-handlers.js.map +1 -1
  153. package/dist/tools/handlers/inspect-handlers.d.ts.map +1 -1
  154. package/dist/tools/handlers/inspect-handlers.js +136 -39
  155. package/dist/tools/handlers/inspect-handlers.js.map +1 -1
  156. package/dist/tools/handlers/interaction-handlers.d.ts.map +1 -1
  157. package/dist/tools/handlers/interaction-handlers.js +14 -12
  158. package/dist/tools/handlers/interaction-handlers.js.map +1 -1
  159. package/dist/tools/handlers/inventory-handlers.d.ts.map +1 -1
  160. package/dist/tools/handlers/inventory-handlers.js +19 -12
  161. package/dist/tools/handlers/inventory-handlers.js.map +1 -1
  162. package/dist/tools/handlers/level-handlers.d.ts.map +1 -1
  163. package/dist/tools/handlers/level-handlers.js +166 -149
  164. package/dist/tools/handlers/level-handlers.js.map +1 -1
  165. package/dist/tools/handlers/level-structure-handlers.d.ts.map +1 -1
  166. package/dist/tools/handlers/level-structure-handlers.js +18 -34
  167. package/dist/tools/handlers/level-structure-handlers.js.map +1 -1
  168. package/dist/tools/handlers/manage-tools-handlers.js +3 -3
  169. package/dist/tools/handlers/manage-tools-handlers.js.map +1 -1
  170. package/dist/tools/handlers/material-authoring-handlers.d.ts.map +1 -1
  171. package/dist/tools/handlers/material-authoring-handlers.js +382 -41
  172. package/dist/tools/handlers/material-authoring-handlers.js.map +1 -1
  173. package/dist/tools/handlers/navigation-handlers.d.ts.map +1 -1
  174. package/dist/tools/handlers/navigation-handlers.js +11 -36
  175. package/dist/tools/handlers/navigation-handlers.js.map +1 -1
  176. package/dist/tools/handlers/networking-handlers.d.ts.map +1 -1
  177. package/dist/tools/handlers/networking-handlers.js +17 -15
  178. package/dist/tools/handlers/networking-handlers.js.map +1 -1
  179. package/dist/tools/handlers/niagara-authoring-handlers.d.ts.map +1 -1
  180. package/dist/tools/handlers/niagara-authoring-handlers.js +24 -23
  181. package/dist/tools/handlers/niagara-authoring-handlers.js.map +1 -1
  182. package/dist/tools/handlers/pcg-handlers.d.ts +4 -0
  183. package/dist/tools/handlers/pcg-handlers.d.ts.map +1 -0
  184. package/dist/tools/handlers/pcg-handlers.js +77 -0
  185. package/dist/tools/handlers/pcg-handlers.js.map +1 -0
  186. package/dist/tools/handlers/performance-handlers.d.ts.map +1 -1
  187. package/dist/tools/handlers/performance-handlers.js +35 -42
  188. package/dist/tools/handlers/performance-handlers.js.map +1 -1
  189. package/dist/tools/handlers/pipeline-handlers.d.ts.map +1 -1
  190. package/dist/tools/handlers/pipeline-handlers.js +157 -39
  191. package/dist/tools/handlers/pipeline-handlers.js.map +1 -1
  192. package/dist/tools/handlers/sequence-handlers.d.ts.map +1 -1
  193. package/dist/tools/handlers/sequence-handlers.js +6 -4
  194. package/dist/tools/handlers/sequence-handlers.js.map +1 -1
  195. package/dist/tools/handlers/sessions-handlers.d.ts.map +1 -1
  196. package/dist/tools/handlers/sessions-handlers.js +7 -15
  197. package/dist/tools/handlers/sessions-handlers.js.map +1 -1
  198. package/dist/tools/handlers/spline-handlers.d.ts.map +1 -1
  199. package/dist/tools/handlers/spline-handlers.js +8 -35
  200. package/dist/tools/handlers/spline-handlers.js.map +1 -1
  201. package/dist/tools/handlers/system-handlers.d.ts.map +1 -1
  202. package/dist/tools/handlers/system-handlers.js +100 -26
  203. package/dist/tools/handlers/system-handlers.js.map +1 -1
  204. package/dist/tools/handlers/texture-handlers.d.ts.map +1 -1
  205. package/dist/tools/handlers/texture-handlers.js +14 -0
  206. package/dist/tools/handlers/texture-handlers.js.map +1 -1
  207. package/dist/tools/handlers/volume-handlers.d.ts.map +1 -1
  208. package/dist/tools/handlers/volume-handlers.js +6 -33
  209. package/dist/tools/handlers/volume-handlers.js.map +1 -1
  210. package/dist/tools/handlers/widget-authoring-handlers.d.ts.map +1 -1
  211. package/dist/tools/handlers/widget-authoring-handlers.js +26 -20
  212. package/dist/tools/handlers/widget-authoring-handlers.js.map +1 -1
  213. package/dist/tools/level.d.ts +2 -2
  214. package/dist/tools/level.d.ts.map +1 -1
  215. package/dist/tools/level.js +2 -1
  216. package/dist/tools/level.js.map +1 -1
  217. package/dist/tools/property-dictionary.js +1 -1
  218. package/dist/tools/property-dictionary.js.map +1 -1
  219. package/dist/tools/schemas/core-tools.d.ts +1 -1
  220. package/dist/tools/schemas/core-tools.d.ts.map +1 -1
  221. package/dist/tools/schemas/core-tools.js +94 -57
  222. package/dist/tools/schemas/core-tools.js.map +1 -1
  223. package/dist/tools/tool-definition-utils.d.ts +8 -0
  224. package/dist/tools/tool-definition-utils.d.ts.map +1 -1
  225. package/dist/tools/tool-definition-utils.js +20 -0
  226. package/dist/tools/tool-definition-utils.js.map +1 -1
  227. package/dist/types/automation-responses.d.ts +26 -33
  228. package/dist/types/automation-responses.d.ts.map +1 -1
  229. package/dist/types/env.d.ts.map +1 -1
  230. package/dist/types/env.js +7 -6
  231. package/dist/types/env.js.map +1 -1
  232. package/dist/types/handler-types.d.ts +41 -20
  233. package/dist/types/handler-types.d.ts.map +1 -1
  234. package/dist/types/index.d.ts +2 -2
  235. package/dist/types/index.d.ts.map +1 -1
  236. package/dist/types/index.js.map +1 -1
  237. package/dist/types/tool-interfaces.d.ts +5 -873
  238. package/dist/types/tool-interfaces.d.ts.map +1 -1
  239. package/dist/types/tool-types.d.ts +35 -1
  240. package/dist/types/tool-types.d.ts.map +1 -1
  241. package/dist/unreal-bridge.d.ts.map +1 -1
  242. package/dist/unreal-bridge.js +16 -6
  243. package/dist/unreal-bridge.js.map +1 -1
  244. package/dist/utils/action-constants.d.ts +4 -1
  245. package/dist/utils/action-constants.d.ts.map +1 -1
  246. package/dist/utils/action-constants.js +4 -1
  247. package/dist/utils/action-constants.js.map +1 -1
  248. package/dist/utils/command-validator.d.ts.map +1 -1
  249. package/dist/utils/command-validator.js +5 -4
  250. package/dist/utils/command-validator.js.map +1 -1
  251. package/dist/utils/elicitation.d.ts +5 -2
  252. package/dist/utils/elicitation.d.ts.map +1 -1
  253. package/dist/utils/elicitation.js +38 -21
  254. package/dist/utils/elicitation.js.map +1 -1
  255. package/dist/utils/environment-snapshot.d.ts +17 -0
  256. package/dist/utils/environment-snapshot.d.ts.map +1 -0
  257. package/dist/utils/environment-snapshot.js +242 -0
  258. package/dist/utils/environment-snapshot.js.map +1 -0
  259. package/dist/utils/error-handler.d.ts +1 -11
  260. package/dist/utils/error-handler.d.ts.map +1 -1
  261. package/dist/utils/error-handler.js +41 -25
  262. package/dist/utils/error-handler.js.map +1 -1
  263. package/dist/utils/index.d.ts +2 -1
  264. package/dist/utils/index.d.ts.map +1 -1
  265. package/dist/utils/index.js +2 -1
  266. package/dist/utils/index.js.map +1 -1
  267. package/dist/utils/ini-reader.js +4 -4
  268. package/dist/utils/ini-reader.js.map +1 -1
  269. package/dist/utils/log-reader.d.ts +29 -0
  270. package/dist/utils/log-reader.d.ts.map +1 -0
  271. package/dist/utils/log-reader.js +229 -0
  272. package/dist/utils/log-reader.js.map +1 -0
  273. package/dist/utils/log-redaction.d.ts +4 -0
  274. package/dist/utils/log-redaction.d.ts.map +1 -0
  275. package/dist/utils/log-redaction.js +27 -0
  276. package/dist/utils/log-redaction.js.map +1 -0
  277. package/dist/utils/logger.d.ts +1 -0
  278. package/dist/utils/logger.d.ts.map +1 -1
  279. package/dist/utils/logger.js +20 -7
  280. package/dist/utils/logger.js.map +1 -1
  281. package/dist/utils/normalize.d.ts.map +1 -1
  282. package/dist/utils/normalize.js +31 -30
  283. package/dist/utils/normalize.js.map +1 -1
  284. package/dist/utils/path-security.d.ts.map +1 -1
  285. package/dist/utils/path-security.js +20 -11
  286. package/dist/utils/path-security.js.map +1 -1
  287. package/dist/utils/response-factory.d.ts +1 -1
  288. package/dist/utils/response-factory.d.ts.map +1 -1
  289. package/dist/utils/response-factory.js +17 -3
  290. package/dist/utils/response-factory.js.map +1 -1
  291. package/dist/utils/response-validator.d.ts.map +1 -1
  292. package/dist/utils/response-validator.js +114 -47
  293. package/dist/utils/response-validator.js.map +1 -1
  294. package/dist/utils/safe-json.d.ts.map +1 -1
  295. package/dist/utils/safe-json.js +24 -18
  296. package/dist/utils/safe-json.js.map +1 -1
  297. package/dist/utils/type-coercion.d.ts +2 -3
  298. package/dist/utils/type-coercion.d.ts.map +1 -1
  299. package/dist/utils/type-coercion.js +42 -14
  300. package/dist/utils/type-coercion.js.map +1 -1
  301. package/dist/utils/type-guards.d.ts +2 -0
  302. package/dist/utils/type-guards.d.ts.map +1 -0
  303. package/dist/utils/type-guards.js +4 -0
  304. package/dist/utils/type-guards.js.map +1 -0
  305. package/dist/utils/unreal-command-queue.d.ts +2 -0
  306. package/dist/utils/unreal-command-queue.d.ts.map +1 -1
  307. package/dist/utils/unreal-command-queue.js +80 -54
  308. package/dist/utils/unreal-command-queue.js.map +1 -1
  309. package/dist/utils/validation.d.ts +2 -1
  310. package/dist/utils/validation.d.ts.map +1 -1
  311. package/dist/utils/validation.js +44 -34
  312. package/dist/utils/validation.js.map +1 -1
  313. package/package.json +4 -6
  314. package/server.json +3 -3
  315. package/dist/graphql/loaders.d.ts +0 -64
  316. package/dist/graphql/loaders.d.ts.map +0 -1
  317. package/dist/graphql/loaders.js +0 -117
  318. package/dist/graphql/loaders.js.map +0 -1
  319. package/dist/graphql/resolvers.d.ts +0 -373
  320. package/dist/graphql/resolvers.d.ts.map +0 -1
  321. package/dist/graphql/resolvers.js +0 -776
  322. package/dist/graphql/resolvers.js.map +0 -1
  323. package/dist/graphql/schema.d.ts +0 -5
  324. package/dist/graphql/schema.d.ts.map +0 -1
  325. package/dist/graphql/schema.js +0 -437
  326. package/dist/graphql/schema.js.map +0 -1
  327. package/dist/graphql/server.d.ts +0 -25
  328. package/dist/graphql/server.d.ts.map +0 -1
  329. package/dist/graphql/server.js +0 -119
  330. package/dist/graphql/server.js.map +0 -1
  331. package/dist/graphql/types.d.ts +0 -9
  332. package/dist/graphql/types.d.ts.map +0 -1
  333. package/dist/graphql/types.js +0 -2
  334. package/dist/graphql/types.js.map +0 -1
  335. package/dist/tools/actors.d.ts +0 -212
  336. package/dist/tools/actors.d.ts.map +0 -1
  337. package/dist/tools/actors.js +0 -456
  338. package/dist/tools/actors.js.map +0 -1
  339. package/dist/tools/animation.d.ts +0 -274
  340. package/dist/tools/animation.d.ts.map +0 -1
  341. package/dist/tools/animation.js +0 -773
  342. package/dist/tools/animation.js.map +0 -1
  343. package/dist/tools/assets.d.ts +0 -82
  344. package/dist/tools/assets.d.ts.map +0 -1
  345. package/dist/tools/assets.js +0 -383
  346. package/dist/tools/assets.js.map +0 -1
  347. package/dist/tools/blueprint.d.ts +0 -271
  348. package/dist/tools/blueprint.d.ts.map +0 -1
  349. package/dist/tools/blueprint.js +0 -828
  350. package/dist/tools/blueprint.js.map +0 -1
  351. package/dist/tools/environment.d.ts +0 -37
  352. package/dist/tools/environment.d.ts.map +0 -1
  353. package/dist/tools/environment.js +0 -338
  354. package/dist/tools/environment.js.map +0 -1
  355. package/dist/tools/foliage.d.ts +0 -140
  356. package/dist/tools/foliage.d.ts.map +0 -1
  357. package/dist/tools/foliage.js +0 -405
  358. package/dist/tools/foliage.js.map +0 -1
  359. package/dist/tools/landscape.d.ts +0 -120
  360. package/dist/tools/landscape.d.ts.map +0 -1
  361. package/dist/tools/landscape.js +0 -454
  362. package/dist/tools/landscape.js.map +0 -1
  363. package/dist/tools/lighting.d.ts +0 -240
  364. package/dist/tools/lighting.d.ts.map +0 -1
  365. package/dist/tools/lighting.js +0 -856
  366. package/dist/tools/lighting.js.map +0 -1
  367. package/dist/tools/logs.d.ts +0 -45
  368. package/dist/tools/logs.d.ts.map +0 -1
  369. package/dist/tools/logs.js +0 -235
  370. package/dist/tools/logs.js.map +0 -1
  371. package/dist/tools/niagara.d.ts +0 -277
  372. package/dist/tools/niagara.d.ts.map +0 -1
  373. package/dist/tools/niagara.js +0 -325
  374. package/dist/tools/niagara.js.map +0 -1
  375. package/dist/tools/physics.d.ts +0 -191
  376. package/dist/tools/physics.d.ts.map +0 -1
  377. package/dist/tools/physics.js +0 -492
  378. package/dist/tools/physics.js.map +0 -1
  379. package/dist/tools/sequence.d.ts +0 -139
  380. package/dist/tools/sequence.d.ts.map +0 -1
  381. package/dist/tools/sequence.js +0 -261
  382. package/dist/tools/sequence.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"common-handlers.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/common-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAW,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAMlF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIxF;AAMD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAwC1F;AAMD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAQ5D;AAKD,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAOvD;AAKD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAK7F;AAOD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CASxF;AAKD,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,EACjB,YAAY,GAAE,MAA0C,EACxD,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACnC,OAAO,CAAC,OAAO,CAAC,CAwBlB;AAMD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAezF;AAGD,KAAK,aAAa,GAAG,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAMtF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,GAAG,SAAS,CAmB9E;AAUD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,aAAa,EAAE,MAAM,EAAE,EACvB,OAAO,GAAE,MAAkB,GAC1B,IAAI,CAYN;AAUD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,GAAE,MAAkB,GAC1B,IAAI,CAYN;AAYD,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACnC,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CA8CD"}
1
+ {"version":3,"file":"common-handlers.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/common-handlers.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,20 @@
1
- import { getAdditionalPathPrefixes } from '../../config.js';
1
+ import { getAdditionalPathPrefixes, stringToPositiveInteger } from '../../config.js';
2
+ import { CommandValidator } from '../../utils/command-validator.js';
3
+ import { cleanObject } from '../../utils/safe-json.js';
4
+ export function getTimeoutMs(defaultMs = 120000) {
5
+ const raw = process.env.MCP_REQUEST_TIMEOUT_MS ?? process.env.MCP_AUTOMATION_REQUEST_TIMEOUT_MS;
6
+ return stringToPositiveInteger(raw, defaultMs);
7
+ }
2
8
  export function ensureArgsPresent(args) {
3
9
  if (args === null || args === undefined) {
4
10
  throw new Error('Invalid arguments: null or undefined');
5
11
  }
6
12
  }
13
+ function hasParentDirectorySegment(value) {
14
+ return value.replace(/\\/g, '/').split('/').some(segment => segment === '..');
15
+ }
7
16
  export function validateSecurityPatterns(args) {
8
- const traversalPatterns = [
9
- '../',
10
- '..\\',
17
+ const blockedPathPatterns = [
11
18
  '/etc/',
12
19
  '\\Windows\\',
13
20
  '\\Program Files',
@@ -15,20 +22,23 @@ export function validateSecurityPatterns(args) {
15
22
  for (const [key, value] of Object.entries(args)) {
16
23
  if (typeof value === 'string') {
17
24
  const lowerValue = value.toLowerCase();
18
- for (const pattern of traversalPatterns) {
25
+ if (hasParentDirectorySegment(value)) {
26
+ return `Security violation: '${key}' contains blocked path pattern. Path traversal is not allowed.`;
27
+ }
28
+ for (const pattern of blockedPathPatterns) {
19
29
  if (value.includes(pattern) || lowerValue.includes(pattern.toLowerCase())) {
20
30
  return `Security violation: '${key}' contains blocked path pattern. Path traversal is not allowed.`;
21
31
  }
22
32
  }
23
33
  if (key.toLowerCase().includes('path') && value.startsWith('/')) {
24
34
  const additional = getAdditionalPathPrefixes();
25
- const allowedPrefixes = ['/Game/', '/Engine/', '/Script/', '/Temp/', ...additional];
26
- const exactAllowed = ['/Game', '/Engine', '/Script', '/Temp',
35
+ const allowedPrefixes = ['/Game/', '/Engine/', '/Script/', '/Temp/', '/Niagara/', ...additional];
36
+ const exactAllowed = ['/Game', '/Engine', '/Script', '/Temp', '/Niagara',
27
37
  ...additional.map(p => p.replace(/\/$/, ''))];
28
38
  const isAllowed = allowedPrefixes.some(prefix => value.startsWith(prefix)) ||
29
39
  exactAllowed.includes(value);
30
40
  if (!isAllowed) {
31
- return `Security violation: '${key}' uses unauthorized absolute path. Only /Game/, /Engine/, /Script/, /Temp/ paths are allowed by default. Set MCP_ADDITIONAL_PATH_PREFIXES to whitelist custom plugin content mount points.`;
41
+ return `Security violation: '${key}' uses unauthorized absolute path. Only /Game/, /Engine/, /Script/, /Temp/, /Niagara/ paths are allowed by default. Set MCP_ADDITIONAL_PATH_PREFIXES to whitelist custom plugin content mount points.`;
32
42
  }
33
43
  }
34
44
  }
@@ -64,8 +74,88 @@ export function requireAssetName(value, field, message) {
64
74
  }
65
75
  return strValue;
66
76
  }
77
+ export function normalizePathFields(args, pathFields) {
78
+ const result = { ...args };
79
+ const rootAliases = [
80
+ 'Game',
81
+ 'Engine',
82
+ 'Script',
83
+ 'Temp',
84
+ 'Niagara',
85
+ ...getAdditionalPathPrefixes().map(prefix => prefix.replace(/^\//, '').replace(/\/$/, ''))
86
+ ];
87
+ for (const field of pathFields) {
88
+ const value = result[field];
89
+ if (typeof value === 'string' && value.length > 0) {
90
+ let normalized = value.replace(/\\/g, '/');
91
+ if (normalized.startsWith('/Content/')) {
92
+ normalized = '/Game/' + normalized.slice('/Content/'.length);
93
+ }
94
+ else if (normalized.startsWith('Content/')) {
95
+ normalized = '/Game/' + normalized.slice('Content/'.length);
96
+ }
97
+ else if (rootAliases.some(root => normalized.startsWith(`${root}/`))) {
98
+ normalized = '/' + normalized;
99
+ }
100
+ if (!normalized.startsWith('/')) {
101
+ normalized = '/Game/' + normalized;
102
+ }
103
+ result[field] = normalized;
104
+ }
105
+ }
106
+ return result;
107
+ }
108
+ export function promoteScalarResultFields(response) {
109
+ const result = response.result;
110
+ if (!result || typeof result !== 'object' || Array.isArray(result))
111
+ return response;
112
+ const promoted = {};
113
+ for (const [key, value] of Object.entries(result)) {
114
+ if (value === null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {
115
+ promoted[key] = value;
116
+ }
117
+ }
118
+ return { ...response, ...promoted };
119
+ }
120
+ function requireConsoleCommandString(value, context) {
121
+ if (typeof value !== 'string') {
122
+ throw new Error(`${context} must be a string`);
123
+ }
124
+ return value;
125
+ }
126
+ function validateConsoleCommandPayload(toolName, args) {
127
+ const normalizedToolName = toolName.toLowerCase();
128
+ if (normalizedToolName === 'console_command') {
129
+ CommandValidator.validate(requireConsoleCommandString(args.command, 'console_command.command'));
130
+ return;
131
+ }
132
+ if (normalizedToolName !== 'batch_console_commands') {
133
+ return;
134
+ }
135
+ const commands = args.commands;
136
+ if (!Array.isArray(commands)) {
137
+ throw new Error('batch_console_commands.commands must be an array');
138
+ }
139
+ for (const [index, entry] of commands.entries()) {
140
+ if (typeof entry === 'string') {
141
+ CommandValidator.validate(entry);
142
+ continue;
143
+ }
144
+ if (entry && typeof entry === 'object' && !Array.isArray(entry)) {
145
+ const commandRecord = entry;
146
+ const command = typeof commandRecord.command === 'string' && commandRecord.command.trim().length > 0
147
+ ? commandRecord.command
148
+ : commandRecord.cmd;
149
+ CommandValidator.validate(requireConsoleCommandString(command, `batch_console_commands.commands[${index}]`));
150
+ continue;
151
+ }
152
+ throw new Error(`batch_console_commands.commands[${index}] must be a string or command object`);
153
+ }
154
+ }
67
155
  export async function executeAutomationRequest(tools, toolName, args, errorMessage = 'Automation bridge not available', options = {}) {
68
156
  validateArgsSecurity(args);
157
+ const argsRecord = args;
158
+ validateConsoleCommandPayload(toolName, argsRecord);
69
159
  const automationBridge = tools.automationBridge;
70
160
  if (!automationBridge || typeof automationBridge.sendAutomationRequest !== 'function') {
71
161
  throw new Error(errorMessage);
@@ -73,12 +163,30 @@ export async function executeAutomationRequest(tools, toolName, args, errorMessa
73
163
  if (!automationBridge.isConnected()) {
74
164
  throw new Error(`Automation bridge is not connected to Unreal Engine. Please check if the editor is running and the plugin is enabled. Action: ${toolName}`);
75
165
  }
76
- const argsRecord = args;
77
166
  const timeoutMs = options.timeoutMs ?? (typeof argsRecord.timeoutMs === 'number' ? argsRecord.timeoutMs : undefined);
78
167
  const cleanedArgs = { ...argsRecord };
79
168
  delete cleanedArgs.timeoutMs;
80
169
  return await automationBridge.sendAutomationRequest(toolName, cleanedArgs, timeoutMs ? { timeoutMs } : {});
81
170
  }
171
+ export function createSubActionDispatcher(tools, args, options) {
172
+ const rawArgs = args;
173
+ const argsRecord = options.pathFields && options.pathFields.length > 0
174
+ ? normalizePathFields(rawArgs, options.pathFields)
175
+ : { ...rawArgs };
176
+ const timeoutMs = options.timeoutMs ?? (typeof argsRecord.timeoutMs === 'number' ? argsRecord.timeoutMs : getTimeoutMs());
177
+ return {
178
+ argsRecord,
179
+ async sendRequest(subAction, extraPayload = {}) {
180
+ const rawPayload = { ...argsRecord, ...extraPayload, subAction };
181
+ const normalizedPayload = options.pathFields && options.pathFields.length > 0
182
+ ? normalizePathFields(rawPayload, options.pathFields)
183
+ : rawPayload;
184
+ const payload = options.preparePayload ? options.preparePayload(normalizedPayload, subAction) : normalizedPayload;
185
+ const result = await executeAutomationRequest(tools, options.toolName, payload, `Automation bridge not available for ${options.domainName} action: ${subAction}`, { timeoutMs });
186
+ return cleanObject(result);
187
+ }
188
+ };
189
+ }
82
190
  export function normalizeLocation(location) {
83
191
  if (!location)
84
192
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"common-handlers.js","sourceRoot":"","sources":["../../../src/tools/handlers/common-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common-handlers.js","sourceRoot":"","sources":["../../../src/tools/handlers/common-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,UAAU,YAAY,CAAC,YAAoB,MAAM;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC;IAChG,OAAO,uBAAuB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACjD,CAAC;AAKD,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAa;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;AAChF,CAAC;AAMD,MAAM,UAAU,wBAAwB,CAAC,IAA6B;IAEpE,MAAM,mBAAmB,GAAG;QAC1B,OAAO;QACP,aAAa;QACb,iBAAiB;KAClB,CAAC;IAGF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACvC,IAAI,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,wBAAwB,GAAG,iEAAiE,CAAC;YACtG,CAAC;YAED,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;gBAC1C,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBAC1E,OAAO,wBAAwB,GAAG,iEAAiE,CAAC;gBACtG,CAAC;YACH,CAAC;YAOD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChE,MAAM,UAAU,GAAG,yBAAyB,EAAE,CAAC;gBAC/C,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,CAAC;gBACjG,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU;oBACtE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChD,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBACxD,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,wBAAwB,GAAG,uMAAuM,CAAC;gBAC5O,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAMD,MAAM,UAAU,oBAAoB,CAAC,IAAiB;IACpD,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,UAAU,GAAG,IAA+B,CAAC;IAEnD,MAAM,aAAa,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,aAAa,CAAC,IAAiB;IAC7C,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAKD,MAAM,UAAU,qBAAqB,CAAC,KAAc,EAAE,KAAa,EAAE,OAAgB;IACnF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,WAAW,KAAK,8BAA8B,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAOD,MAAM,UAAU,gBAAgB,CAAC,KAAc,EAAE,KAAa,EAAE,OAAgB;IAC9E,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAG9D,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,WAAW,KAAK,MAAM,QAAQ,+KAA+K,CAAC,CAAC;IAC5O,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAMD,MAAM,UAAU,mBAAmB,CACjC,IAA6B,EAC7B,UAA6B;IAE7B,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAG;QAClB,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,SAAS;QACT,GAAG,yBAAyB,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;KAC3F,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC3C,IAAI,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvC,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC/D,CAAC;iBAAM,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7C,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC9D,CAAC;iBAAM,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;gBACvE,UAAU,GAAG,GAAG,GAAG,UAAU,CAAC;YAChC,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;YACrC,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAiC;IACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEpF,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxI,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAc,EAAE,OAAe;IAClE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,mBAAmB,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,6BAA6B,CAAC,QAAgB,EAAE,IAA6B;IACpF,MAAM,kBAAkB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAClD,IAAI,kBAAkB,KAAK,iBAAiB,EAAE,CAAC;QAC7C,gBAAgB,CAAC,QAAQ,CAAC,2BAA2B,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC,CAAC;QAChG,OAAO;IACT,CAAC;IAED,IAAI,kBAAkB,KAAK,wBAAwB,EAAE,CAAC;QACpD,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACjC,SAAS;QACX,CAAC;QAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,aAAa,GAAG,KAAgC,CAAC;YACvD,MAAM,OAAO,GAAG,OAAO,aAAa,CAAC,OAAO,KAAK,QAAQ,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;gBAClG,CAAC,CAAC,aAAa,CAAC,OAAO;gBACvB,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC;YACtB,gBAAgB,CAAC,QAAQ,CAAC,2BAA2B,CAAC,OAAO,EAAE,mCAAmC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC7G,SAAS;QACX,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,sCAAsC,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAKD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAa,EACb,QAAgB,EAChB,IAAiB,EACjB,eAAuB,iCAAiC,EACxD,UAAkC,EAAE;IAGpC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,IAA+B,CAAC;IACnD,6BAA6B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEpD,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IAEhD,IAAI,CAAC,gBAAgB,IAAI,OAAO,gBAAgB,CAAC,qBAAqB,KAAK,UAAU,EAAE,CAAC;QACtF,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,iIAAiI,QAAQ,EAAE,CAAC,CAAC;IAC/J,CAAC;IAID,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAGrH,MAAM,WAAW,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;IACtC,OAAO,WAAW,CAAC,SAAS,CAAC;IAE7B,OAAO,MAAM,gBAAgB,CAAC,qBAAqB,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7G,CAAC;AAOD,MAAM,UAAU,yBAAyB,CACvC,KAAa,EACb,IAAiB,EACjB,OAMC;IAED,MAAM,OAAO,GAAG,IAA+B,CAAC;IAChD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QACpE,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC;QAClD,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IACnB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IAE1H,OAAO;QACL,UAAU;QACV,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,eAAwC,EAAE;YAC7E,MAAM,UAAU,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,YAAY,EAAE,SAAS,EAAE,CAAC;YACjE,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC3E,CAAC,CAAC,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC;gBACrD,CAAC,CAAC,UAAU,CAAC;YACf,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;YAClH,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,KAAK,EACL,OAAO,CAAC,QAAQ,EAChB,OAAsB,EACtB,uCAAuC,OAAO,CAAC,UAAU,YAAY,SAAS,EAAE,EAChF,EAAE,SAAS,EAAE,CACd,CAAC;YACF,OAAO,WAAW,CAAC,MAAM,CAA4B,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,iBAAiB,CAAC,QAAiB;IACjD,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAGhC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxF,CAAC;IAGD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC;QAC5F,MAAM,GAAG,GAAG,QAAmB,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AASD,MAAM,UAAU,iBAAiB,CAAC,QAAuB;IACvD,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAGhC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACpD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAC5G,CAAC;IAGD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,QAAmB,CAAC;QAChC,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAC7B,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;SAC5B,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAUD,MAAM,UAAU,sBAAsB,CACpC,IAA6B,EAC7B,aAAuB,EACvB,UAAkB,SAAS;IAE3B,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC;IAEjE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAE5E,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,0BAA0B,OAAO,yBAAyB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YACvF,aAAa,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACzC,CAAC;IACJ,CAAC;AACH,CAAC;AAUD,MAAM,UAAU,sBAAsB,CACpC,IAA6B,EAC7B,cAAwB,EACxB,UAAkB,SAAS;IAE3B,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YACrC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,mCAAmC,OAAO,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC5E,CAAC;IACJ,CAAC;AACH,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAa,EACb,QAAkB,EAClB,UAAkC,EAAE;IAQpC,MAAM,aAAa,GAAG,QAAQ;SAC3B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;SACvB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAExC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;YAChB,WAAW,EAAE,CAAC;SACf,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,KAAK,EACL,wBAAwB,EACxB,EAAE,QAAQ,EAAE,aAAa,EAAE,EAC3B,oDAAoD,EACpD,OAAO,CAQR,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAG5C,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,mCAAmC,WAAW,IAAI,aAAa,CAAC,MAAM,oBAAoB;YAC1F,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CACpD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM;QAC3D,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM;QAC3D,WAAW,EAAE,CAAC;KACf,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"editor-handlers.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/editor-handlers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAuJ/D,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,oBAwQtF"}
1
+ {"version":3,"file":"editor-handlers.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/editor-handlers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAyM/D,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,oBA+RtF"}
@@ -1,8 +1,9 @@
1
1
  import { cleanObject } from '../../utils/safe-json.js';
2
- import { executeAutomationRequest, requireNonEmptyString, validateExpectedParams, validateRequiredParams, validateArgsSecurity } from './common-handlers.js';
2
+ import { executeAutomationRequest, normalizePathFields, requireNonEmptyString, validateExpectedParams, validateRequiredParams, validateArgsSecurity } from './common-handlers.js';
3
3
  import { sanitizeCommandArgument } from '../../utils/validation.js';
4
4
  const EDITOR_ACTION_ALIASES = {
5
5
  'focus_actor': 'focus',
6
+ 'set_game_view_target': 'set_view_target',
6
7
  'set_camera_position': 'set_camera',
7
8
  'set_viewport_camera': 'set_camera',
8
9
  'take_screenshot': 'screenshot',
@@ -28,9 +29,6 @@ const IDEMPOTENT_ACTIONS = new Set([
28
29
  'step_frame', 'single_frame_step'
29
30
  ]);
30
31
  const ACTION_REQUIRED_PARAMS = {
31
- 'open_asset': ['assetPath'],
32
- 'close_asset': ['assetPath'],
33
- 'open_level': ['levelPath'],
34
32
  'focus_actor': ['actorName'],
35
33
  'focus': ['actorName'],
36
34
  'possess': ['actorName'],
@@ -41,7 +39,6 @@ const ACTION_REQUIRED_PARAMS = {
41
39
  'set_camera_fov': ['fov'],
42
40
  'set_game_speed': ['speed'],
43
41
  'set_fixed_delta_time': ['deltaTime'],
44
- 'screenshot': ['filename'],
45
42
  'set_preferences': ['category', 'preferences'],
46
43
  'execute_command': ['command'],
47
44
  'console_command': ['command'],
@@ -54,6 +51,7 @@ const ACTION_ALLOWED_PARAMS = {
54
51
  'resume': [],
55
52
  'eject': [],
56
53
  'possess': ['actorName'],
54
+ 'set_view_target': ['actorName', 'name', 'objectPath', 'location', 'rotation', 'blendTime'],
57
55
  'open_asset': ['assetPath', 'path'],
58
56
  'close_asset': ['assetPath', 'path'],
59
57
  'open_level': ['levelPath', 'path', 'assetPath'],
@@ -66,8 +64,8 @@ const ACTION_ALLOWED_PARAMS = {
66
64
  'set_camera_fov': ['fov'],
67
65
  'set_game_speed': ['speed'],
68
66
  'set_fixed_delta_time': ['deltaTime'],
69
- 'screenshot': ['filename', 'resolution'],
70
- 'set_preferences': ['category', 'preferences', 'section', 'key', 'value'],
67
+ 'screenshot': ['filename', 'path', 'resolution', 'mode', 'returnBase64', 'includeMetadata', 'metadata'],
68
+ 'set_preferences': ['category', 'preferences'],
71
69
  'execute_command': ['command'],
72
70
  'console_command': ['command'],
73
71
  'undo': [],
@@ -84,8 +82,22 @@ const ACTION_ALLOWED_PARAMS = {
84
82
  'start_recording': ['filename', 'name', 'frameRate', 'durationSeconds', 'metadata'],
85
83
  'stop_recording': [],
86
84
  'set_viewport_realtime': ['enabled', 'realtime'],
87
- 'simulate_input': ['key', 'action', 'inputAction', 'axis', 'value'],
85
+ 'simulate_input': ['key', 'type', 'inputType', 'inputAction', 'x', 'y', 'button'],
86
+ };
87
+ const INPUT_TYPE_ALIASES = {
88
+ press: 'key_down',
89
+ pressed: 'key_down',
90
+ down: 'key_down',
91
+ release: 'key_up',
92
+ released: 'key_up',
93
+ up: 'key_up',
94
+ click: 'mouse_click',
95
+ move: 'mouse_move',
88
96
  };
97
+ const SUPPORTED_INPUT_TYPES = new Set(['key_down', 'key_up', 'mouse_click', 'mouse_move']);
98
+ const EDITOR_ASSET_PATH_ACTIONS = new Set(['open_asset', 'close_asset', 'open_level']);
99
+ const EDITOR_PATH_FIELDS = ['assetPath', 'levelPath', 'path'];
100
+ const SUPPORTED_SCREENSHOT_MODES = new Set(['editor_viewport', 'game_viewport', 'full_editor_window']);
89
101
  function normalizeEditorAction(action) {
90
102
  return EDITOR_ACTION_ALIASES[action] ?? action;
91
103
  }
@@ -103,10 +115,42 @@ function validateEditorActionArgs(action, args) {
103
115
  validateExpectedParams(args, allowedParams, `control_editor:${action}`);
104
116
  }
105
117
  }
118
+ function getInputType(args) {
119
+ const inputTypeValue = args.type ?? args.inputType ?? args.inputAction;
120
+ if (typeof inputTypeValue !== 'string' || inputTypeValue.trim() === '') {
121
+ throw new Error('Missing required parameters for control_editor:simulate_input: [type|inputType|inputAction]');
122
+ }
123
+ const normalized = inputTypeValue.trim().toLowerCase();
124
+ if ((normalized === 'key' || normalized === 'keyboard') && typeof args.inputAction === 'string') {
125
+ const normalizedInputAction = args.inputAction.trim().toLowerCase();
126
+ const mappedActionType = INPUT_TYPE_ALIASES[normalizedInputAction] ?? normalizedInputAction;
127
+ if (mappedActionType === 'key_down' || mappedActionType === 'key_up') {
128
+ return mappedActionType;
129
+ }
130
+ }
131
+ const mappedType = INPUT_TYPE_ALIASES[normalized] ?? normalized;
132
+ if (!SUPPORTED_INPUT_TYPES.has(mappedType)) {
133
+ throw new Error(`Unknown input type: ${inputTypeValue}. Supported: key_down, key_up, mouse_click, mouse_move`);
134
+ }
135
+ return mappedType;
136
+ }
137
+ function getScreenshotMode(args) {
138
+ if (typeof args.mode !== 'string' || args.mode.trim() === '') {
139
+ return {};
140
+ }
141
+ const mode = args.mode.trim().toLowerCase();
142
+ if (!SUPPORTED_SCREENSHOT_MODES.has(mode)) {
143
+ return { error: `Unknown screenshot mode: ${args.mode}. Supported: editor_viewport, game_viewport, full_editor_window` };
144
+ }
145
+ return { mode };
146
+ }
106
147
  export async function handleEditorTools(action, args, tools) {
107
148
  const normalizedAction = normalizeEditorAction(action);
108
- const argsRecord = args;
149
+ const argsRecord = EDITOR_ASSET_PATH_ACTIONS.has(normalizedAction)
150
+ ? normalizePathFields(args, EDITOR_PATH_FIELDS)
151
+ : args;
109
152
  validateEditorActionArgs(normalizedAction, argsRecord);
153
+ const editorArgs = argsRecord;
110
154
  switch (normalizedAction) {
111
155
  case 'play': {
112
156
  const res = await executeAutomationRequest(tools, 'control_editor', { action: 'play' }, undefined, { timeoutMs: args.timeoutMs });
@@ -123,16 +167,57 @@ export async function handleEditorTools(action, args, tools) {
123
167
  case 'possess': {
124
168
  return await executeAutomationRequest(tools, 'control_editor', args);
125
169
  }
170
+ case 'set_view_target': {
171
+ const actorName = requireNonEmptyString(editorArgs.actorName ?? editorArgs.name ?? editorArgs.objectPath, 'actorName');
172
+ const res = await executeAutomationRequest(tools, 'control_editor', {
173
+ action: 'set_view_target',
174
+ actorName,
175
+ objectPath: editorArgs.objectPath,
176
+ location: editorArgs.location,
177
+ rotation: editorArgs.rotation,
178
+ blendTime: typeof editorArgs.blendTime === 'number' ? editorArgs.blendTime : undefined
179
+ });
180
+ return cleanObject(res);
181
+ }
126
182
  case 'pause': {
127
- const res = await executeAutomationRequest(tools, 'console_command', { command: 'pause' });
183
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'pause' });
128
184
  return cleanObject(res);
129
185
  }
130
186
  case 'resume': {
131
- const res = await executeAutomationRequest(tools, 'console_command', { command: 'pause' });
187
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'resume' });
132
188
  return cleanObject(res);
133
189
  }
134
190
  case 'screenshot': {
135
- const res = await executeAutomationRequest(tools, 'control_editor', { action: 'screenshot', filename: args.filename, resolution: args.resolution });
191
+ const filename = args.filename ?? args.path;
192
+ const modeResult = getScreenshotMode(args);
193
+ if (modeResult.error) {
194
+ return {
195
+ success: false,
196
+ type: 'INVALID_ARGUMENT',
197
+ error: 'INVALID_ARGUMENT',
198
+ message: modeResult.error,
199
+ action: 'screenshot'
200
+ };
201
+ }
202
+ const mode = modeResult.mode;
203
+ const payload = { action: 'screenshot', filename, resolution: args.resolution };
204
+ if (mode !== undefined) {
205
+ payload.mode = mode;
206
+ }
207
+ if (typeof args.returnBase64 === 'boolean') {
208
+ payload.returnBase64 = args.returnBase64;
209
+ }
210
+ else if (mode === 'full_editor_window' || mode === 'game_viewport') {
211
+ payload.returnBase64 = true;
212
+ }
213
+ if (args.includeMetadata === true) {
214
+ payload.includeMetadata = true;
215
+ }
216
+ if (args.includeMetadata === true && args.metadata !== undefined) {
217
+ payload.metadata = args.metadata;
218
+ }
219
+ const targetAction = mode === 'game_viewport' ? 'system_control' : 'control_editor';
220
+ const res = await executeAutomationRequest(tools, targetAction, payload);
136
221
  return cleanObject(res);
137
222
  }
138
223
  case 'console_command': {
@@ -144,7 +229,8 @@ export async function handleEditorTools(action, args, tools) {
144
229
  return cleanObject(res);
145
230
  }
146
231
  case 'start_recording': {
147
- const filename = args.filename || 'TestRecording';
232
+ const name = typeof args.name === 'string' ? args.name : undefined;
233
+ const filename = args.filename || name || 'TestRecording';
148
234
  const frameRate = typeof args.frameRate === 'number' ? args.frameRate : undefined;
149
235
  const durationSeconds = typeof args.durationSeconds === 'number' ? args.durationSeconds : undefined;
150
236
  const metadata = args.metadata;
@@ -175,32 +261,32 @@ export async function handleEditorTools(action, args, tools) {
175
261
  }
176
262
  }
177
263
  case 'stop_recording': {
178
- await executeAutomationRequest(tools, 'console_command', { command: 'DemoStop' });
179
- return { success: true, message: 'Stopped recording', action: 'stop_recording' };
264
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'stop_recording' });
265
+ return cleanObject(res);
180
266
  }
181
267
  case 'step_frame': {
182
268
  const steps = typeof args.steps === 'number' && args.steps > 0 ? args.steps : 1;
183
269
  for (let i = 0; i < steps; i++) {
184
- await executeAutomationRequest(tools, 'console_command', { command: 'r.SingleFrameAdvance 1' });
270
+ await executeAutomationRequest(tools, 'control_editor', { action: 'step_frame' });
185
271
  }
186
272
  return { success: true, message: `Stepped ${steps} frame(s)`, action: 'step_frame', steps };
187
273
  }
188
274
  case 'create_bookmark': {
189
- const idx = parseInt(args.bookmarkName ?? '0') || 0;
190
- await executeAutomationRequest(tools, 'console_command', { command: `r.SetBookmark ${idx}` });
191
- return { success: true, message: `Created bookmark ${idx}`, action: 'create_bookmark' };
275
+ const idx = typeof args.id === 'number' ? Math.trunc(args.id) : (parseInt(args.bookmarkName ?? '0') || 0);
276
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'create_bookmark', index: idx });
277
+ return cleanObject(res);
192
278
  }
193
279
  case 'jump_to_bookmark': {
194
- const idx = parseInt(args.bookmarkName ?? '0') || 0;
195
- await executeAutomationRequest(tools, 'console_command', { command: `r.JumpToBookmark ${idx}` });
196
- return { success: true, message: `Jumped to bookmark ${idx}`, action: 'jump_to_bookmark' };
280
+ const idx = typeof args.id === 'number' ? Math.trunc(args.id) : (parseInt(args.bookmarkName ?? '0') || 0);
281
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'jump_to_bookmark', index: idx });
282
+ return cleanObject(res);
197
283
  }
198
284
  case 'set_preferences': {
199
285
  const res = await executeAutomationRequest(tools, 'control_editor', { action: 'set_preferences', category: args.category ?? '', preferences: args.preferences ?? {} });
200
286
  return cleanObject(res);
201
287
  }
202
288
  case 'open_asset': {
203
- const assetPath = requireNonEmptyString(args.assetPath || args.path, 'assetPath');
289
+ const assetPath = requireNonEmptyString(editorArgs.assetPath || editorArgs.path, 'assetPath');
204
290
  const res = await executeAutomationRequest(tools, 'control_editor', { action: 'open_asset', assetPath });
205
291
  return cleanObject(res);
206
292
  }
@@ -213,15 +299,15 @@ export async function handleEditorTools(action, args, tools) {
213
299
  const safeFov = sanitizeCommandArgument(String(args.fov));
214
300
  if (!safeFov)
215
301
  return { success: false, error: 'FOV is required after sanitization', action: 'set_camera_fov' };
216
- await executeAutomationRequest(tools, 'console_command', { command: `fov ${safeFov}` });
217
- return { success: true, message: `Set FOV to ${safeFov}`, action: 'set_camera_fov' };
302
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'set_camera_fov', fov: Number(safeFov) });
303
+ return cleanObject(res);
218
304
  }
219
305
  case 'set_game_speed': {
220
306
  const safeSpeed = sanitizeCommandArgument(String(args.speed));
221
307
  if (!safeSpeed)
222
308
  return { success: false, error: 'Speed is required after sanitization', action: 'set_game_speed' };
223
- await executeAutomationRequest(tools, 'console_command', { command: `slomo ${safeSpeed}` });
224
- return { success: true, message: `Set game speed to ${safeSpeed}`, action: 'set_game_speed' };
309
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'set_game_speed', speed: Number(safeSpeed) });
310
+ return cleanObject(res);
225
311
  }
226
312
  case 'set_view_mode': {
227
313
  const viewMode = requireNonEmptyString(args.viewMode, 'viewMode');
@@ -233,8 +319,8 @@ export async function handleEditorTools(action, args, tools) {
233
319
  if (!validModes.includes(viewMode)) {
234
320
  throw new Error(`unknown_viewmode: ${viewMode}. Must be one of: ${validModes.join(', ')}`);
235
321
  }
236
- await executeAutomationRequest(tools, 'console_command', { command: `viewmode ${viewMode}` });
237
- return { success: true, message: `Set view mode to ${viewMode}`, action: 'set_view_mode' };
322
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'set_view_mode', viewMode });
323
+ return cleanObject(res);
238
324
  }
239
325
  case 'set_viewport_resolution': {
240
326
  const width = Number(args.width);
@@ -247,16 +333,16 @@ export async function handleEditorTools(action, args, tools) {
247
333
  action: 'set_viewport_resolution'
248
334
  };
249
335
  }
250
- await executeAutomationRequest(tools, 'console_command', { command: `r.SetRes ${width}x${height}` });
251
- return { success: true, message: `Set viewport resolution to ${width}x${height}`, action: 'set_viewport_resolution' };
336
+ const res = await executeAutomationRequest(tools, 'console_command', { command: `r.SetRes ${width}x${height}` });
337
+ return cleanObject({ ...res, action: 'set_viewport_resolution', width, height });
252
338
  }
253
339
  case 'set_viewport_realtime': {
254
340
  const enabled = args.enabled !== undefined ? args.enabled : (args.realtime !== false);
255
- await executeAutomationRequest(tools, 'console_command', { command: `r.ViewportRealtime ${enabled ? 1 : 0}` });
256
- return { success: true, message: `Set viewport realtime to ${enabled}`, action: 'set_viewport_realtime' };
341
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'set_viewport_realtime', enabled, realtime: enabled });
342
+ return cleanObject(res);
257
343
  }
258
344
  case 'close_asset': {
259
- const assetPath = requireNonEmptyString(args.assetPath || args.path, 'assetPath');
345
+ const assetPath = requireNonEmptyString(editorArgs.assetPath || editorArgs.path, 'assetPath');
260
346
  const res = await executeAutomationRequest(tools, 'control_editor', { action: 'close_asset', assetPath });
261
347
  return cleanObject(res);
262
348
  }
@@ -265,12 +351,12 @@ export async function handleEditorTools(action, args, tools) {
265
351
  return cleanObject(res);
266
352
  }
267
353
  case 'undo': {
268
- await executeAutomationRequest(tools, 'console_command', { command: 'Undo' });
269
- return { success: true, message: 'Undo executed', action: 'undo' };
354
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'undo' });
355
+ return cleanObject(res);
270
356
  }
271
357
  case 'redo': {
272
- await executeAutomationRequest(tools, 'console_command', { command: 'Redo' });
273
- return { success: true, message: 'Redo executed', action: 'redo' };
358
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'redo' });
359
+ return cleanObject(res);
274
360
  }
275
361
  case 'set_editor_mode': {
276
362
  const mode = requireNonEmptyString(args.mode, 'mode');
@@ -278,56 +364,42 @@ export async function handleEditorTools(action, args, tools) {
278
364
  return cleanObject(res);
279
365
  }
280
366
  case 'show_stats': {
281
- await executeAutomationRequest(tools, 'console_command', { command: 'Stat FPS' });
282
- await executeAutomationRequest(tools, 'console_command', { command: 'Stat Unit' });
283
- return { success: true, message: 'Stats displayed', action: 'show_stats' };
367
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'show_stats', stat: args.stat });
368
+ return cleanObject(res);
284
369
  }
285
370
  case 'hide_stats': {
286
- await executeAutomationRequest(tools, 'console_command', { command: 'Stat None' });
287
- return { success: true, message: 'Stats hidden', action: 'hide_stats' };
371
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'hide_stats', stat: args.stat });
372
+ return cleanObject(res);
288
373
  }
289
374
  case 'set_game_view': {
290
375
  const enabled = args.enabled !== false;
291
- await executeAutomationRequest(tools, 'console_command', { command: `ToggleGameView ${enabled ? 1 : 0}` });
292
- return { success: true, message: `Game view ${enabled ? 'enabled' : 'disabled'}`, action: 'set_game_view' };
376
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'set_game_view', enabled });
377
+ return cleanObject(res);
293
378
  }
294
379
  case 'set_immersive_mode': {
295
380
  const enabled = args.enabled !== false;
296
- await executeAutomationRequest(tools, 'console_command', { command: `ToggleImmersion ${enabled ? 1 : 0}` });
297
- return { success: true, message: `Immersive mode ${enabled ? 'enabled' : 'disabled'}`, action: 'set_immersive_mode' };
381
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'set_immersive_mode', enabled });
382
+ return cleanObject(res);
298
383
  }
299
384
  case 'set_fixed_delta_time': {
300
385
  const deltaTime = typeof args.deltaTime === 'number' ? args.deltaTime : 0.01667;
301
- await executeAutomationRequest(tools, 'console_command', { command: `r.FixedDeltaTime ${deltaTime}` });
302
- return { success: true, message: `Fixed delta time set to ${deltaTime}`, action: 'set_fixed_delta_time' };
386
+ const res = await executeAutomationRequest(tools, 'control_editor', { action: 'set_fixed_delta_time', deltaTime });
387
+ return cleanObject(res);
303
388
  }
304
389
  case 'open_level': {
305
- const levelPath = requireNonEmptyString(args.levelPath || args.path || args.assetPath, 'levelPath');
390
+ const levelPath = requireNonEmptyString(editorArgs.levelPath || editorArgs.path || editorArgs.assetPath, 'levelPath');
306
391
  const res = await executeAutomationRequest(tools, 'control_editor', { action: 'open_level', levelPath });
307
392
  return cleanObject(res);
308
393
  }
309
394
  case 'simulate_input': {
310
- const inputActionValue = args.inputAction ?? args.action ?? '';
311
- const inputType = typeof inputActionValue === 'string' ? inputActionValue.toLowerCase() : '';
312
- let mappedType = inputType;
313
- if (inputType === 'pressed' || inputType === 'down') {
314
- mappedType = 'key_down';
315
- }
316
- else if (inputType === 'released' || inputType === 'up') {
317
- mappedType = 'key_up';
318
- }
319
- else if (inputType === 'click') {
320
- mappedType = 'mouse_click';
321
- }
322
- else if (inputType === 'move') {
323
- mappedType = 'mouse_move';
324
- }
395
+ const mappedType = getInputType(args);
325
396
  const res = await executeAutomationRequest(tools, 'control_editor', {
326
397
  action: 'simulate_input',
327
398
  type: mappedType,
328
399
  key: args.key,
329
- axis: args.axis,
330
- value: args.value
400
+ x: args.x,
401
+ y: args.y,
402
+ button: args.button
331
403
  });
332
404
  return cleanObject(res);
333
405
  }