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.
- package/CHANGELOG.md +247 -4
- package/README.md +140 -85
- package/dist/automation/bridge.d.ts +8 -0
- package/dist/automation/bridge.d.ts.map +1 -1
- package/dist/automation/bridge.js +94 -14
- package/dist/automation/bridge.js.map +1 -1
- package/dist/automation/connection-manager.d.ts.map +1 -1
- package/dist/automation/connection-manager.js +13 -5
- package/dist/automation/connection-manager.js.map +1 -1
- package/dist/automation/handshake.d.ts.map +1 -1
- package/dist/automation/handshake.js +40 -27
- package/dist/automation/handshake.js.map +1 -1
- package/dist/automation/index.d.ts +1 -1
- package/dist/automation/index.d.ts.map +1 -1
- package/dist/automation/index.js +0 -1
- package/dist/automation/index.js.map +1 -1
- package/dist/automation/message-handler.d.ts.map +1 -1
- package/dist/automation/message-handler.js +13 -9
- package/dist/automation/message-handler.js.map +1 -1
- package/dist/automation/message-schema.d.ts.map +1 -1
- package/dist/automation/message-schema.js +19 -18
- package/dist/automation/message-schema.js.map +1 -1
- package/dist/automation/request-tracker.d.ts +1 -0
- package/dist/automation/request-tracker.d.ts.map +1 -1
- package/dist/automation/request-tracker.js +30 -31
- package/dist/automation/request-tracker.js.map +1 -1
- package/dist/automation/types.d.ts +38 -32
- package/dist/automation/types.d.ts.map +1 -1
- package/dist/cli.js +14 -16
- package/dist/cli.js.map +1 -1
- package/dist/config/class-aliases.d.ts.map +1 -1
- package/dist/config/class-aliases.js +10 -2
- package/dist/config/class-aliases.js.map +1 -1
- package/dist/config.d.ts +9 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +58 -32
- package/dist/config.js.map +1 -1
- package/dist/handlers/resource-handlers.d.ts +15 -2
- package/dist/handlers/resource-handlers.d.ts.map +1 -1
- package/dist/handlers/resource-handlers.js +46 -63
- package/dist/handlers/resource-handlers.js.map +1 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -48
- package/dist/index.js.map +1 -1
- package/dist/resources/assets.d.ts.map +1 -1
- package/dist/resources/assets.js +34 -9
- package/dist/resources/assets.js.map +1 -1
- package/dist/resources/levels.d.ts +3 -0
- package/dist/resources/levels.d.ts.map +1 -1
- package/dist/resources/levels.js +33 -17
- package/dist/resources/levels.js.map +1 -1
- package/dist/server/resource-registry.d.ts +15 -2
- package/dist/server/resource-registry.d.ts.map +1 -1
- package/dist/server/resource-registry.js +9 -8
- package/dist/server/resource-registry.js.map +1 -1
- package/dist/server/tool-registry.d.ts +0 -1
- package/dist/server/tool-registry.d.ts.map +1 -1
- package/dist/server/tool-registry.js +91 -101
- package/dist/server/tool-registry.js.map +1 -1
- package/dist/server-setup.d.ts +5 -2
- package/dist/server-setup.d.ts.map +1 -1
- package/dist/server-setup.js +15 -19
- package/dist/server-setup.js.map +1 -1
- package/dist/services/health-monitor.d.ts +3 -0
- package/dist/services/health-monitor.d.ts.map +1 -1
- package/dist/services/health-monitor.js +30 -11
- package/dist/services/health-monitor.js.map +1 -1
- package/dist/services/metrics-server.d.ts +1 -1
- package/dist/services/metrics-server.d.ts.map +1 -1
- package/dist/services/metrics-server.js +65 -3
- package/dist/services/metrics-server.js.map +1 -1
- package/dist/tools/base-tool.d.ts.map +1 -1
- package/dist/tools/base-tool.js +14 -16
- package/dist/tools/base-tool.js.map +1 -1
- package/dist/tools/consolidated-tool-definitions.d.ts +16 -1
- package/dist/tools/consolidated-tool-definitions.d.ts.map +1 -1
- package/dist/tools/consolidated-tool-definitions.js +1479 -2538
- package/dist/tools/consolidated-tool-definitions.js.map +1 -1
- package/dist/tools/consolidated-tool-handlers.d.ts.map +1 -1
- package/dist/tools/consolidated-tool-handlers.js +195 -217
- package/dist/tools/consolidated-tool-handlers.js.map +1 -1
- package/dist/tools/dynamic-handler-registry.d.ts +1 -0
- package/dist/tools/dynamic-handler-registry.d.ts.map +1 -1
- package/dist/tools/dynamic-handler-registry.js +15 -7
- package/dist/tools/dynamic-handler-registry.js.map +1 -1
- package/dist/tools/dynamic-tool-manager.d.ts +1 -1
- package/dist/tools/dynamic-tool-manager.d.ts.map +1 -1
- package/dist/tools/dynamic-tool-manager.js +30 -18
- package/dist/tools/dynamic-tool-manager.js.map +1 -1
- package/dist/tools/editor.d.ts +2 -2
- package/dist/tools/editor.d.ts.map +1 -1
- package/dist/tools/editor.js +4 -4
- package/dist/tools/editor.js.map +1 -1
- package/dist/tools/handlers/actor-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/actor-handlers.js +66 -7
- package/dist/tools/handlers/actor-handlers.js.map +1 -1
- package/dist/tools/handlers/ai-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/ai-handlers.js +24 -13
- package/dist/tools/handlers/ai-handlers.js.map +1 -1
- package/dist/tools/handlers/animation-authoring-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/animation-authoring-handlers.js +285 -218
- package/dist/tools/handlers/animation-authoring-handlers.js.map +1 -1
- package/dist/tools/handlers/animation-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/animation-handlers.js +69 -21
- package/dist/tools/handlers/animation-handlers.js.map +1 -1
- package/dist/tools/handlers/asset-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/asset-handlers.js +75 -16
- package/dist/tools/handlers/asset-handlers.js.map +1 -1
- package/dist/tools/handlers/audio-authoring-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/audio-authoring-handlers.js +102 -9
- package/dist/tools/handlers/audio-authoring-handlers.js.map +1 -1
- package/dist/tools/handlers/audio-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/audio-handlers.js +48 -13
- package/dist/tools/handlers/audio-handlers.js.map +1 -1
- package/dist/tools/handlers/blueprint-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/blueprint-handlers.js +28 -48
- package/dist/tools/handlers/blueprint-handlers.js.map +1 -1
- package/dist/tools/handlers/character-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/character-handlers.js +13 -12
- package/dist/tools/handlers/character-handlers.js.map +1 -1
- package/dist/tools/handlers/combat-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/combat-handlers.js +12 -12
- package/dist/tools/handlers/combat-handlers.js.map +1 -1
- package/dist/tools/handlers/common-handlers.d.ts +14 -0
- package/dist/tools/handlers/common-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/common-handlers.js +117 -9
- package/dist/tools/handlers/common-handlers.js.map +1 -1
- package/dist/tools/handlers/editor-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/editor-handlers.js +139 -67
- package/dist/tools/handlers/editor-handlers.js.map +1 -1
- package/dist/tools/handlers/effect-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/effect-handlers.js +324 -36
- package/dist/tools/handlers/effect-handlers.js.map +1 -1
- package/dist/tools/handlers/environment-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/environment-handlers.js +186 -21
- package/dist/tools/handlers/environment-handlers.js.map +1 -1
- package/dist/tools/handlers/game-framework-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/game-framework-handlers.js +10 -12
- package/dist/tools/handlers/game-framework-handlers.js.map +1 -1
- package/dist/tools/handlers/gas-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/gas-handlers.js +136 -20
- package/dist/tools/handlers/gas-handlers.js.map +1 -1
- package/dist/tools/handlers/geometry-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/geometry-handlers.js +130 -7
- package/dist/tools/handlers/geometry-handlers.js.map +1 -1
- package/dist/tools/handlers/graph-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/graph-handlers.js +46 -11
- package/dist/tools/handlers/graph-handlers.js.map +1 -1
- package/dist/tools/handlers/input-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/input-handlers.js +33 -75
- package/dist/tools/handlers/input-handlers.js.map +1 -1
- package/dist/tools/handlers/inspect-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/inspect-handlers.js +136 -39
- package/dist/tools/handlers/inspect-handlers.js.map +1 -1
- package/dist/tools/handlers/interaction-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/interaction-handlers.js +14 -12
- package/dist/tools/handlers/interaction-handlers.js.map +1 -1
- package/dist/tools/handlers/inventory-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/inventory-handlers.js +19 -12
- package/dist/tools/handlers/inventory-handlers.js.map +1 -1
- package/dist/tools/handlers/level-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/level-handlers.js +166 -149
- package/dist/tools/handlers/level-handlers.js.map +1 -1
- package/dist/tools/handlers/level-structure-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/level-structure-handlers.js +18 -34
- package/dist/tools/handlers/level-structure-handlers.js.map +1 -1
- package/dist/tools/handlers/manage-tools-handlers.js +3 -3
- package/dist/tools/handlers/manage-tools-handlers.js.map +1 -1
- package/dist/tools/handlers/material-authoring-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/material-authoring-handlers.js +382 -41
- package/dist/tools/handlers/material-authoring-handlers.js.map +1 -1
- package/dist/tools/handlers/navigation-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/navigation-handlers.js +11 -36
- package/dist/tools/handlers/navigation-handlers.js.map +1 -1
- package/dist/tools/handlers/networking-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/networking-handlers.js +17 -15
- package/dist/tools/handlers/networking-handlers.js.map +1 -1
- package/dist/tools/handlers/niagara-authoring-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/niagara-authoring-handlers.js +24 -23
- package/dist/tools/handlers/niagara-authoring-handlers.js.map +1 -1
- package/dist/tools/handlers/pcg-handlers.d.ts +4 -0
- package/dist/tools/handlers/pcg-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/pcg-handlers.js +77 -0
- package/dist/tools/handlers/pcg-handlers.js.map +1 -0
- package/dist/tools/handlers/performance-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/performance-handlers.js +35 -42
- package/dist/tools/handlers/performance-handlers.js.map +1 -1
- package/dist/tools/handlers/pipeline-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/pipeline-handlers.js +157 -39
- package/dist/tools/handlers/pipeline-handlers.js.map +1 -1
- package/dist/tools/handlers/sequence-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/sequence-handlers.js +6 -4
- package/dist/tools/handlers/sequence-handlers.js.map +1 -1
- package/dist/tools/handlers/sessions-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/sessions-handlers.js +7 -15
- package/dist/tools/handlers/sessions-handlers.js.map +1 -1
- package/dist/tools/handlers/spline-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/spline-handlers.js +8 -35
- package/dist/tools/handlers/spline-handlers.js.map +1 -1
- package/dist/tools/handlers/system-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/system-handlers.js +100 -26
- package/dist/tools/handlers/system-handlers.js.map +1 -1
- package/dist/tools/handlers/texture-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/texture-handlers.js +14 -0
- package/dist/tools/handlers/texture-handlers.js.map +1 -1
- package/dist/tools/handlers/volume-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/volume-handlers.js +6 -33
- package/dist/tools/handlers/volume-handlers.js.map +1 -1
- package/dist/tools/handlers/widget-authoring-handlers.d.ts.map +1 -1
- package/dist/tools/handlers/widget-authoring-handlers.js +26 -20
- package/dist/tools/handlers/widget-authoring-handlers.js.map +1 -1
- package/dist/tools/level.d.ts +2 -2
- package/dist/tools/level.d.ts.map +1 -1
- package/dist/tools/level.js +2 -1
- package/dist/tools/level.js.map +1 -1
- package/dist/tools/property-dictionary.js +1 -1
- package/dist/tools/property-dictionary.js.map +1 -1
- package/dist/tools/schemas/core-tools.d.ts +1 -1
- package/dist/tools/schemas/core-tools.d.ts.map +1 -1
- package/dist/tools/schemas/core-tools.js +94 -57
- package/dist/tools/schemas/core-tools.js.map +1 -1
- package/dist/tools/tool-definition-utils.d.ts +8 -0
- package/dist/tools/tool-definition-utils.d.ts.map +1 -1
- package/dist/tools/tool-definition-utils.js +20 -0
- package/dist/tools/tool-definition-utils.js.map +1 -1
- package/dist/types/automation-responses.d.ts +26 -33
- package/dist/types/automation-responses.d.ts.map +1 -1
- package/dist/types/env.d.ts.map +1 -1
- package/dist/types/env.js +7 -6
- package/dist/types/env.js.map +1 -1
- package/dist/types/handler-types.d.ts +41 -20
- package/dist/types/handler-types.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/tool-interfaces.d.ts +5 -873
- package/dist/types/tool-interfaces.d.ts.map +1 -1
- package/dist/types/tool-types.d.ts +35 -1
- package/dist/types/tool-types.d.ts.map +1 -1
- package/dist/unreal-bridge.d.ts.map +1 -1
- package/dist/unreal-bridge.js +16 -6
- package/dist/unreal-bridge.js.map +1 -1
- package/dist/utils/action-constants.d.ts +4 -1
- package/dist/utils/action-constants.d.ts.map +1 -1
- package/dist/utils/action-constants.js +4 -1
- package/dist/utils/action-constants.js.map +1 -1
- package/dist/utils/command-validator.d.ts.map +1 -1
- package/dist/utils/command-validator.js +5 -4
- package/dist/utils/command-validator.js.map +1 -1
- package/dist/utils/elicitation.d.ts +5 -2
- package/dist/utils/elicitation.d.ts.map +1 -1
- package/dist/utils/elicitation.js +38 -21
- package/dist/utils/elicitation.js.map +1 -1
- package/dist/utils/environment-snapshot.d.ts +17 -0
- package/dist/utils/environment-snapshot.d.ts.map +1 -0
- package/dist/utils/environment-snapshot.js +242 -0
- package/dist/utils/environment-snapshot.js.map +1 -0
- package/dist/utils/error-handler.d.ts +1 -11
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +41 -25
- package/dist/utils/error-handler.js.map +1 -1
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/ini-reader.js +4 -4
- package/dist/utils/ini-reader.js.map +1 -1
- package/dist/utils/log-reader.d.ts +29 -0
- package/dist/utils/log-reader.d.ts.map +1 -0
- package/dist/utils/log-reader.js +229 -0
- package/dist/utils/log-reader.js.map +1 -0
- package/dist/utils/log-redaction.d.ts +4 -0
- package/dist/utils/log-redaction.d.ts.map +1 -0
- package/dist/utils/log-redaction.js +27 -0
- package/dist/utils/log-redaction.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +20 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/normalize.d.ts.map +1 -1
- package/dist/utils/normalize.js +31 -30
- package/dist/utils/normalize.js.map +1 -1
- package/dist/utils/path-security.d.ts.map +1 -1
- package/dist/utils/path-security.js +20 -11
- package/dist/utils/path-security.js.map +1 -1
- package/dist/utils/response-factory.d.ts +1 -1
- package/dist/utils/response-factory.d.ts.map +1 -1
- package/dist/utils/response-factory.js +17 -3
- package/dist/utils/response-factory.js.map +1 -1
- package/dist/utils/response-validator.d.ts.map +1 -1
- package/dist/utils/response-validator.js +114 -47
- package/dist/utils/response-validator.js.map +1 -1
- package/dist/utils/safe-json.d.ts.map +1 -1
- package/dist/utils/safe-json.js +24 -18
- package/dist/utils/safe-json.js.map +1 -1
- package/dist/utils/type-coercion.d.ts +2 -3
- package/dist/utils/type-coercion.d.ts.map +1 -1
- package/dist/utils/type-coercion.js +42 -14
- package/dist/utils/type-coercion.js.map +1 -1
- package/dist/utils/type-guards.d.ts +2 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +4 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/dist/utils/unreal-command-queue.d.ts +2 -0
- package/dist/utils/unreal-command-queue.d.ts.map +1 -1
- package/dist/utils/unreal-command-queue.js +80 -54
- package/dist/utils/unreal-command-queue.js.map +1 -1
- package/dist/utils/validation.d.ts +2 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +44 -34
- package/dist/utils/validation.js.map +1 -1
- package/package.json +4 -6
- package/server.json +3 -3
- package/dist/graphql/loaders.d.ts +0 -64
- package/dist/graphql/loaders.d.ts.map +0 -1
- package/dist/graphql/loaders.js +0 -117
- package/dist/graphql/loaders.js.map +0 -1
- package/dist/graphql/resolvers.d.ts +0 -373
- package/dist/graphql/resolvers.d.ts.map +0 -1
- package/dist/graphql/resolvers.js +0 -776
- package/dist/graphql/resolvers.js.map +0 -1
- package/dist/graphql/schema.d.ts +0 -5
- package/dist/graphql/schema.d.ts.map +0 -1
- package/dist/graphql/schema.js +0 -437
- package/dist/graphql/schema.js.map +0 -1
- package/dist/graphql/server.d.ts +0 -25
- package/dist/graphql/server.d.ts.map +0 -1
- package/dist/graphql/server.js +0 -119
- package/dist/graphql/server.js.map +0 -1
- package/dist/graphql/types.d.ts +0 -9
- package/dist/graphql/types.d.ts.map +0 -1
- package/dist/graphql/types.js +0 -2
- package/dist/graphql/types.js.map +0 -1
- package/dist/tools/actors.d.ts +0 -212
- package/dist/tools/actors.d.ts.map +0 -1
- package/dist/tools/actors.js +0 -456
- package/dist/tools/actors.js.map +0 -1
- package/dist/tools/animation.d.ts +0 -274
- package/dist/tools/animation.d.ts.map +0 -1
- package/dist/tools/animation.js +0 -773
- package/dist/tools/animation.js.map +0 -1
- package/dist/tools/assets.d.ts +0 -82
- package/dist/tools/assets.d.ts.map +0 -1
- package/dist/tools/assets.js +0 -383
- package/dist/tools/assets.js.map +0 -1
- package/dist/tools/blueprint.d.ts +0 -271
- package/dist/tools/blueprint.d.ts.map +0 -1
- package/dist/tools/blueprint.js +0 -828
- package/dist/tools/blueprint.js.map +0 -1
- package/dist/tools/environment.d.ts +0 -37
- package/dist/tools/environment.d.ts.map +0 -1
- package/dist/tools/environment.js +0 -338
- package/dist/tools/environment.js.map +0 -1
- package/dist/tools/foliage.d.ts +0 -140
- package/dist/tools/foliage.d.ts.map +0 -1
- package/dist/tools/foliage.js +0 -405
- package/dist/tools/foliage.js.map +0 -1
- package/dist/tools/landscape.d.ts +0 -120
- package/dist/tools/landscape.d.ts.map +0 -1
- package/dist/tools/landscape.js +0 -454
- package/dist/tools/landscape.js.map +0 -1
- package/dist/tools/lighting.d.ts +0 -240
- package/dist/tools/lighting.d.ts.map +0 -1
- package/dist/tools/lighting.js +0 -856
- package/dist/tools/lighting.js.map +0 -1
- package/dist/tools/logs.d.ts +0 -45
- package/dist/tools/logs.d.ts.map +0 -1
- package/dist/tools/logs.js +0 -235
- package/dist/tools/logs.js.map +0 -1
- package/dist/tools/niagara.d.ts +0 -277
- package/dist/tools/niagara.d.ts.map +0 -1
- package/dist/tools/niagara.js +0 -325
- package/dist/tools/niagara.js.map +0 -1
- package/dist/tools/physics.d.ts +0 -191
- package/dist/tools/physics.d.ts.map +0 -1
- package/dist/tools/physics.js +0 -492
- package/dist/tools/physics.js.map +0 -1
- package/dist/tools/sequence.d.ts +0 -139
- package/dist/tools/sequence.d.ts.map +0 -1
- package/dist/tools/sequence.js +0 -261
- 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;
|
|
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;AAKlF,wBAAgB,YAAY,CAAC,SAAS,GAAE,MAAe,GAAG,MAAM,CAG/D;AAKD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIxF;AAUD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CA0C1F;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;AAMD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8BzB;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYpG;AA+CD,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,CAyBlB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1G;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnG,GACA,mBAAmB,CAyBrB;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,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
|
|
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
|
-
|
|
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":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAK5D,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;AAMD,MAAM,UAAU,wBAAwB,CAAC,IAA6B;IAEpE,MAAM,iBAAiB,GAAG;QACxB,KAAK;QACL,MAAM;QACN,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,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;gBACxC,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,GAAG,UAAU,CAAC,CAAC;gBACpF,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO;oBAC1D,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,4LAA4L,CAAC;gBACjO,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;AAKD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAa,EACb,QAAgB,EAChB,IAAiB,EACjB,eAAuB,iCAAiC,EACxD,UAAkC,EAAE;IAGpC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE3B,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,UAAU,GAAG,IAA+B,CAAC;IACnD,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;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
|
+
{"version":3,"file":"common-handlers.js","sourceRoot":"","sources":["../../../src/tools/handlers/common-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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'
|
|
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', '
|
|
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 =
|
|
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, '
|
|
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, '
|
|
187
|
+
const res = await executeAutomationRequest(tools, 'control_editor', { action: 'resume' });
|
|
132
188
|
return cleanObject(res);
|
|
133
189
|
}
|
|
134
190
|
case 'screenshot': {
|
|
135
|
-
const
|
|
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
|
|
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, '
|
|
179
|
-
return
|
|
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, '
|
|
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, '
|
|
191
|
-
return
|
|
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, '
|
|
196
|
-
return
|
|
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(
|
|
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, '
|
|
217
|
-
return
|
|
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, '
|
|
224
|
-
return
|
|
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, '
|
|
237
|
-
return
|
|
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 {
|
|
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, '
|
|
256
|
-
return
|
|
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(
|
|
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, '
|
|
269
|
-
return
|
|
354
|
+
const res = await executeAutomationRequest(tools, 'control_editor', { action: 'undo' });
|
|
355
|
+
return cleanObject(res);
|
|
270
356
|
}
|
|
271
357
|
case 'redo': {
|
|
272
|
-
await executeAutomationRequest(tools, '
|
|
273
|
-
return
|
|
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, '
|
|
282
|
-
|
|
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, '
|
|
287
|
-
return
|
|
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, '
|
|
292
|
-
return
|
|
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, '
|
|
297
|
-
return
|
|
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, '
|
|
302
|
-
return
|
|
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(
|
|
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
|
|
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
|
-
|
|
330
|
-
|
|
400
|
+
x: args.x,
|
|
401
|
+
y: args.y,
|
|
402
|
+
button: args.button
|
|
331
403
|
});
|
|
332
404
|
return cleanObject(res);
|
|
333
405
|
}
|