unreal-engine-mcp-server 0.5.4 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/automation/bridge.d.ts.map +1 -0
- package/dist/automation/bridge.js.map +1 -0
- package/dist/automation/connection-manager.d.ts.map +1 -0
- package/dist/automation/connection-manager.js.map +1 -0
- package/dist/automation/handshake.d.ts.map +1 -0
- package/dist/automation/handshake.js.map +1 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/message-handler.d.ts.map +1 -0
- package/dist/automation/message-handler.js.map +1 -0
- package/dist/automation/request-tracker.d.ts.map +1 -0
- package/dist/automation/request-tracker.js.map +1 -0
- package/dist/automation/types.d.ts.map +1 -0
- package/dist/automation/types.js.map +1 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +4 -3
- package/dist/cli.js.map +1 -0
- package/dist/config/class-aliases.d.ts.map +1 -0
- package/dist/config/class-aliases.js.map +1 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js.map +1 -0
- package/dist/graphql/loaders.d.ts.map +1 -0
- package/dist/graphql/loaders.js.map +1 -0
- package/dist/graphql/resolvers.d.ts.map +1 -0
- package/dist/graphql/resolvers.js +29 -29
- package/dist/graphql/resolvers.js.map +1 -0
- package/dist/graphql/schema.d.ts.map +1 -0
- package/dist/graphql/schema.js.map +1 -0
- package/dist/graphql/server.d.ts.map +1 -0
- package/dist/graphql/server.js.map +1 -0
- package/dist/graphql/types.d.ts.map +1 -0
- package/dist/graphql/types.js.map +1 -0
- package/dist/handlers/resource-handlers.d.ts.map +1 -0
- package/dist/handlers/resource-handlers.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -7
- package/dist/index.js.map +1 -0
- package/dist/resources/actors.d.ts.map +1 -0
- package/dist/resources/actors.js.map +1 -0
- package/dist/resources/assets.d.ts.map +1 -0
- package/dist/resources/assets.js +6 -4
- package/dist/resources/assets.js.map +1 -0
- package/dist/resources/levels.d.ts.map +1 -0
- package/dist/resources/levels.js.map +1 -0
- package/dist/server/resource-registry.d.ts.map +1 -0
- package/dist/server/resource-registry.js.map +1 -0
- package/dist/server/tool-registry.d.ts.map +1 -0
- package/dist/server/tool-registry.js.map +1 -0
- package/dist/server-setup.d.ts.map +1 -0
- package/dist/server-setup.js.map +1 -0
- package/dist/services/health-monitor.d.ts.map +1 -0
- package/dist/services/health-monitor.js.map +1 -0
- package/dist/services/metrics-server.d.ts.map +1 -0
- package/dist/services/metrics-server.js.map +1 -0
- package/dist/tools/actors.d.ts.map +1 -0
- package/dist/tools/actors.js +3 -1
- package/dist/tools/actors.js.map +1 -0
- package/dist/tools/animation.d.ts.map +1 -0
- package/dist/tools/animation.js +2 -2
- package/dist/tools/animation.js.map +1 -0
- package/dist/tools/assets.d.ts.map +1 -0
- package/dist/tools/assets.js.map +1 -0
- package/dist/tools/audio.d.ts.map +1 -0
- package/dist/tools/audio.js.map +1 -0
- package/dist/tools/base-tool.d.ts.map +1 -0
- package/dist/tools/base-tool.js.map +1 -0
- package/dist/tools/behavior-tree.d.ts.map +1 -0
- package/dist/tools/behavior-tree.js.map +1 -0
- package/dist/tools/blueprint.d.ts.map +1 -0
- package/dist/tools/blueprint.js +4 -2
- package/dist/tools/blueprint.js.map +1 -0
- package/dist/tools/consolidated-tool-definitions.d.ts.map +1 -0
- package/dist/tools/consolidated-tool-definitions.js.map +1 -0
- package/dist/tools/consolidated-tool-handlers.d.ts.map +1 -0
- package/dist/tools/consolidated-tool-handlers.js.map +1 -0
- package/dist/tools/debug.d.ts.map +1 -0
- package/dist/tools/debug.js +3 -1
- package/dist/tools/debug.js.map +1 -0
- package/dist/tools/dynamic-handler-registry.d.ts.map +1 -0
- package/dist/tools/dynamic-handler-registry.js +3 -1
- package/dist/tools/dynamic-handler-registry.js.map +1 -0
- package/dist/tools/editor.d.ts.map +1 -0
- package/dist/tools/editor.js +1 -1
- package/dist/tools/editor.js.map +1 -0
- package/dist/tools/engine.d.ts.map +1 -0
- package/dist/tools/engine.js.map +1 -0
- package/dist/tools/environment.d.ts.map +1 -0
- package/dist/tools/environment.js +2 -2
- package/dist/tools/environment.js.map +1 -0
- package/dist/tools/foliage.d.ts.map +1 -0
- package/dist/tools/foliage.js.map +1 -0
- package/dist/tools/handlers/actor-handlers.d.ts +1 -1
- package/dist/tools/handlers/actor-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/actor-handlers.js +6 -5
- package/dist/tools/handlers/actor-handlers.js.map +1 -0
- package/dist/tools/handlers/animation-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/animation-handlers.js.map +1 -0
- package/dist/tools/handlers/argument-helper.d.ts.map +1 -0
- package/dist/tools/handlers/argument-helper.js.map +1 -0
- package/dist/tools/handlers/asset-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/asset-handlers.js +5 -1
- package/dist/tools/handlers/asset-handlers.js.map +1 -0
- package/dist/tools/handlers/audio-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/audio-handlers.js.map +1 -0
- package/dist/tools/handlers/blueprint-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/blueprint-handlers.js +2 -1
- package/dist/tools/handlers/blueprint-handlers.js.map +1 -0
- package/dist/tools/handlers/common-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/common-handlers.js.map +1 -0
- package/dist/tools/handlers/editor-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/editor-handlers.js +12 -2
- package/dist/tools/handlers/editor-handlers.js.map +1 -0
- package/dist/tools/handlers/effect-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/effect-handlers.js.map +1 -0
- package/dist/tools/handlers/environment-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/environment-handlers.js.map +1 -0
- package/dist/tools/handlers/graph-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/graph-handlers.js +61 -1
- package/dist/tools/handlers/graph-handlers.js.map +1 -0
- package/dist/tools/handlers/input-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/input-handlers.js.map +1 -0
- package/dist/tools/handlers/inspect-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/inspect-handlers.js.map +1 -0
- package/dist/tools/handlers/level-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/level-handlers.js.map +1 -0
- package/dist/tools/handlers/lighting-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/lighting-handlers.js +23 -1
- package/dist/tools/handlers/lighting-handlers.js.map +1 -0
- package/dist/tools/handlers/performance-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/performance-handlers.js +15 -2
- package/dist/tools/handlers/performance-handlers.js.map +1 -0
- package/dist/tools/handlers/pipeline-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/pipeline-handlers.js.map +1 -0
- package/dist/tools/handlers/sequence-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/sequence-handlers.js.map +1 -0
- package/dist/tools/handlers/system-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/system-handlers.js +16 -1
- package/dist/tools/handlers/system-handlers.js.map +1 -0
- package/dist/tools/input.d.ts.map +1 -0
- package/dist/tools/input.js +3 -1
- package/dist/tools/input.js.map +1 -0
- package/dist/tools/introspection.d.ts.map +1 -0
- package/dist/tools/introspection.js.map +1 -0
- package/dist/tools/landscape.d.ts.map +1 -0
- package/dist/tools/landscape.js +3 -1
- package/dist/tools/landscape.js.map +1 -0
- package/dist/tools/level.d.ts.map +1 -0
- package/dist/tools/level.js.map +1 -0
- package/dist/tools/lighting.d.ts.map +1 -0
- package/dist/tools/lighting.js +3 -1
- package/dist/tools/lighting.js.map +1 -0
- package/dist/tools/logs.d.ts.map +1 -0
- package/dist/tools/logs.js.map +1 -0
- package/dist/tools/materials.d.ts.map +1 -0
- package/dist/tools/materials.js +3 -1
- package/dist/tools/materials.js.map +1 -0
- package/dist/tools/niagara.d.ts.map +1 -0
- package/dist/tools/niagara.js +7 -5
- package/dist/tools/niagara.js.map +1 -0
- package/dist/tools/performance.d.ts.map +1 -0
- package/dist/tools/performance.js.map +1 -0
- package/dist/tools/physics.d.ts.map +1 -0
- package/dist/tools/physics.js +9 -7
- package/dist/tools/physics.js.map +1 -0
- package/dist/tools/property-dictionary.d.ts.map +1 -0
- package/dist/tools/property-dictionary.js.map +1 -0
- package/dist/tools/sequence.d.ts.map +1 -0
- package/dist/tools/sequence.js +3 -1
- package/dist/tools/sequence.js.map +1 -0
- package/dist/tools/tool-definition-utils.d.ts.map +1 -0
- package/dist/tools/tool-definition-utils.js.map +1 -0
- package/dist/tools/ui.d.ts.map +1 -0
- package/dist/tools/ui.js +3 -1
- package/dist/tools/ui.js.map +1 -0
- package/dist/types/automation-responses.d.ts.map +1 -0
- package/dist/types/automation-responses.js.map +1 -0
- package/dist/types/env.d.ts.map +1 -0
- package/dist/types/env.js.map +1 -0
- package/dist/types/handler-types.d.ts.map +1 -0
- package/dist/types/handler-types.js.map +1 -0
- package/dist/types/tool-interfaces.d.ts.map +1 -0
- package/dist/types/tool-interfaces.js.map +1 -0
- package/dist/types/tool-types.d.ts.map +1 -0
- package/dist/types/tool-types.js.map +1 -0
- package/dist/unreal-bridge.d.ts +1 -0
- package/dist/unreal-bridge.d.ts.map +1 -0
- package/dist/unreal-bridge.js +8 -0
- package/dist/unreal-bridge.js.map +1 -0
- package/dist/utils/command-validator.d.ts.map +1 -0
- package/dist/utils/command-validator.js.map +1 -0
- package/dist/utils/elicitation.d.ts.map +1 -0
- package/dist/utils/elicitation.js.map +1 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/ini-reader.d.ts.map +1 -0
- package/dist/utils/ini-reader.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/normalize.d.ts.map +1 -0
- package/dist/utils/normalize.js.map +1 -0
- package/dist/utils/path-security.d.ts.map +1 -0
- package/dist/utils/path-security.js.map +1 -0
- package/dist/utils/response-factory.d.ts.map +1 -0
- package/dist/utils/response-factory.js +3 -1
- package/dist/utils/response-factory.js.map +1 -0
- package/dist/utils/response-validator.d.ts.map +1 -0
- package/dist/utils/response-validator.js.map +1 -0
- package/dist/utils/result-helpers.d.ts.map +1 -0
- package/dist/utils/result-helpers.js.map +1 -0
- package/dist/utils/safe-json.d.ts.map +1 -0
- package/dist/utils/safe-json.js.map +1 -0
- package/dist/utils/unreal-command-queue.d.ts.map +1 -0
- package/dist/utils/unreal-command-queue.js.map +1 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/wasm/index.d.ts.map +1 -0
- package/dist/wasm/index.js.map +1 -0
- package/package.json +12 -34
- package/server.json +2 -2
- package/.dockerignore +0 -57
- package/.env.example +0 -26
- package/.env.production +0 -61
- package/.eslintrc.json +0 -0
- package/.eslintrc.override.json +0 -8
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -94
- package/.github/ISSUE_TEMPLATE/config.yml +0 -8
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -56
- package/.github/copilot-instructions.md +0 -478
- package/.github/dependabot.yml +0 -19
- package/.github/labeler.yml +0 -24
- package/.github/labels.yml +0 -70
- package/.github/pull_request_template.md +0 -42
- package/.github/release-drafter-config.yml +0 -51
- package/.github/workflows/auto-merge.yml +0 -38
- package/.github/workflows/ci.yml +0 -38
- package/.github/workflows/dependency-review.yml +0 -17
- package/.github/workflows/gemini-issue-triage.yml +0 -172
- package/.github/workflows/greetings.yml +0 -27
- package/.github/workflows/labeler.yml +0 -17
- package/.github/workflows/links.yml +0 -80
- package/.github/workflows/pr-size-labeler.yml +0 -137
- package/.github/workflows/publish-mcp.yml +0 -79
- package/.github/workflows/release-drafter.yml +0 -24
- package/.github/workflows/release.yml +0 -112
- package/.github/workflows/semantic-pull-request.yml +0 -35
- package/.github/workflows/smoke-test.yml +0 -36
- package/.github/workflows/stale.yml +0 -28
- package/CONTRIBUTING.md +0 -140
- package/Dockerfile +0 -37
- package/GEMINI.md +0 -115
- package/Public/Plugin_setup_guide.mp4 +0 -0
- package/Public/icon.png +0 -0
- package/claude_desktop_config_example.json +0 -15
- package/dist/types/responses.d.ts +0 -249
- package/dist/types/responses.js +0 -2
- package/docs/GraphQL-API.md +0 -888
- package/docs/Migration-Guide-v0.5.0.md +0 -684
- package/docs/Roadmap.md +0 -53
- package/docs/WebAssembly-Integration.md +0 -628
- package/docs/editor-plugin-extension.md +0 -370
- package/docs/handler-mapping.md +0 -249
- package/docs/native-automation-progress.md +0 -128
- package/docs/testing-guide.md +0 -423
- package/eslint.config.mjs +0 -68
- package/mcp-config-example.json +0 -14
- package/plugins/McpAutomationBridge/Config/FilterPlugin.ini +0 -8
- package/plugins/McpAutomationBridge/McpAutomationBridge.uplugin +0 -64
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/McpAutomationBridge.Build.cs +0 -189
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.cpp +0 -22
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.h +0 -30
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeHelpers.h +0 -1983
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeModule.cpp +0 -72
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSettings.cpp +0 -46
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSubsystem.cpp +0 -846
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AnimationHandlers.cpp +0 -2393
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetQueryHandlers.cpp +0 -300
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetWorkflowHandlers.cpp +0 -2807
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AudioHandlers.cpp +0 -1087
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BehaviorTreeHandlers.cpp +0 -488
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.cpp +0 -643
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.h +0 -31
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintGraphHandlers.cpp +0 -1094
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers.cpp +0 -5750
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers_List.cpp +0 -152
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ControlHandlers.cpp +0 -2614
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_DebugHandlers.cpp +0 -42
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EditorFunctionHandlers.cpp +0 -1237
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EffectHandlers.cpp +0 -1725
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EnvironmentHandlers.cpp +0 -2265
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_FoliageHandlers.cpp +0 -954
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InputHandlers.cpp +0 -209
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InsightsHandlers.cpp +0 -41
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LandscapeHandlers.cpp +0 -1164
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LevelHandlers.cpp +0 -762
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LightingHandlers.cpp +0 -663
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LogHandlers.cpp +0 -136
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_MaterialGraphHandlers.cpp +0 -494
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraGraphHandlers.cpp +0 -278
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraHandlers.cpp +0 -625
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PerformanceHandlers.cpp +0 -401
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PipelineHandlers.cpp +0 -67
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ProcessRequest.cpp +0 -472
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PropertyHandlers.cpp +0 -2634
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_RenderHandlers.cpp +0 -189
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.cpp +0 -917
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.h +0 -39
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequenceHandlers.cpp +0 -2706
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequencerHandlers.cpp +0 -519
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_TestHandlers.cpp +0 -38
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_UiHandlers.cpp +0 -668
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_WorldPartitionHandlers.cpp +0 -346
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.cpp +0 -1345
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.h +0 -149
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpConnectionManager.cpp +0 -782
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSettings.h +0 -115
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSubsystem.h +0 -796
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpConnectionManager.h +0 -117
- package/scripts/check-unreal-connection.mjs +0 -19
- package/scripts/clean-tmp.js +0 -23
- package/scripts/patch-wasm.js +0 -26
- package/scripts/run-all-tests.mjs +0 -136
- package/scripts/smoke-test.ts +0 -94
- package/scripts/sync-mcp-plugin.js +0 -143
- package/scripts/test-no-plugin-alternates.mjs +0 -113
- package/scripts/validate-server.js +0 -46
- package/scripts/verify-automation-bridge.js +0 -200
- package/src/automation/bridge.ts +0 -630
- package/src/automation/connection-manager.ts +0 -148
- package/src/automation/handshake.ts +0 -99
- package/src/automation/index.ts +0 -2
- package/src/automation/message-handler.ts +0 -192
- package/src/automation/request-tracker.ts +0 -155
- package/src/automation/types.ts +0 -108
- package/src/cli.ts +0 -34
- package/src/config/class-aliases.ts +0 -65
- package/src/config.ts +0 -73
- package/src/constants.ts +0 -29
- package/src/graphql/loaders.ts +0 -244
- package/src/graphql/resolvers.ts +0 -1008
- package/src/graphql/schema.ts +0 -452
- package/src/graphql/server.ts +0 -156
- package/src/graphql/types.ts +0 -10
- package/src/handlers/resource-handlers.ts +0 -186
- package/src/index.ts +0 -243
- package/src/resources/actors.ts +0 -127
- package/src/resources/assets.ts +0 -286
- package/src/resources/levels.ts +0 -68
- package/src/server/resource-registry.ts +0 -47
- package/src/server/tool-registry.ts +0 -354
- package/src/server-setup.ts +0 -114
- package/src/services/health-monitor.ts +0 -132
- package/src/services/metrics-server.ts +0 -176
- package/src/tools/actors.ts +0 -564
- package/src/tools/animation.ts +0 -941
- package/src/tools/assets.ts +0 -394
- package/src/tools/audio.ts +0 -499
- package/src/tools/base-tool.ts +0 -52
- package/src/tools/behavior-tree.ts +0 -45
- package/src/tools/blueprint.ts +0 -940
- package/src/tools/consolidated-tool-definitions.ts +0 -1256
- package/src/tools/consolidated-tool-handlers.ts +0 -302
- package/src/tools/debug.ts +0 -622
- package/src/tools/dynamic-handler-registry.ts +0 -33
- package/src/tools/editor.ts +0 -435
- package/src/tools/engine.ts +0 -43
- package/src/tools/environment.ts +0 -281
- package/src/tools/foliage.ts +0 -596
- package/src/tools/handlers/actor-handlers.ts +0 -244
- package/src/tools/handlers/animation-handlers.ts +0 -237
- package/src/tools/handlers/argument-helper.ts +0 -142
- package/src/tools/handlers/asset-handlers.ts +0 -550
- package/src/tools/handlers/audio-handlers.ts +0 -194
- package/src/tools/handlers/blueprint-handlers.ts +0 -380
- package/src/tools/handlers/common-handlers.ts +0 -108
- package/src/tools/handlers/editor-handlers.ts +0 -124
- package/src/tools/handlers/effect-handlers.ts +0 -224
- package/src/tools/handlers/environment-handlers.ts +0 -183
- package/src/tools/handlers/graph-handlers.ts +0 -117
- package/src/tools/handlers/input-handlers.ts +0 -28
- package/src/tools/handlers/inspect-handlers.ts +0 -450
- package/src/tools/handlers/level-handlers.ts +0 -253
- package/src/tools/handlers/lighting-handlers.ts +0 -151
- package/src/tools/handlers/performance-handlers.ts +0 -132
- package/src/tools/handlers/pipeline-handlers.ts +0 -194
- package/src/tools/handlers/sequence-handlers.ts +0 -438
- package/src/tools/handlers/system-handlers.ts +0 -564
- package/src/tools/input.ts +0 -160
- package/src/tools/introspection.ts +0 -689
- package/src/tools/landscape.ts +0 -649
- package/src/tools/level.ts +0 -989
- package/src/tools/lighting.ts +0 -1052
- package/src/tools/logs.ts +0 -219
- package/src/tools/materials.ts +0 -295
- package/src/tools/niagara.ts +0 -485
- package/src/tools/performance.ts +0 -661
- package/src/tools/physics.ts +0 -679
- package/src/tools/property-dictionary.ts +0 -98
- package/src/tools/sequence.ts +0 -385
- package/src/tools/tool-definition-utils.ts +0 -35
- package/src/tools/ui.ts +0 -452
- package/src/types/automation-responses.ts +0 -119
- package/src/types/env.ts +0 -17
- package/src/types/handler-types.ts +0 -442
- package/src/types/responses.ts +0 -355
- package/src/types/tool-interfaces.ts +0 -250
- package/src/types/tool-types.ts +0 -575
- package/src/unreal-bridge.ts +0 -693
- package/src/utils/command-validator.ts +0 -139
- package/src/utils/elicitation.ts +0 -132
- package/src/utils/error-handler.ts +0 -287
- package/src/utils/ini-reader.ts +0 -86
- package/src/utils/logger.ts +0 -35
- package/src/utils/normalize.test.ts +0 -162
- package/src/utils/normalize.ts +0 -146
- package/src/utils/path-security.ts +0 -43
- package/src/utils/response-factory.ts +0 -44
- package/src/utils/response-validator.ts +0 -395
- package/src/utils/result-helpers.ts +0 -195
- package/src/utils/safe-json.test.ts +0 -90
- package/src/utils/safe-json.ts +0 -70
- package/src/utils/unreal-command-queue.ts +0 -166
- package/src/utils/validation.test.ts +0 -184
- package/src/utils/validation.ts +0 -312
- package/src/wasm/index.ts +0 -838
- package/test-server.mjs +0 -100
- package/tests/test-animation.mjs +0 -369
- package/tests/test-asset-advanced.mjs +0 -82
- package/tests/test-asset-graph.mjs +0 -311
- package/tests/test-audio.mjs +0 -417
- package/tests/test-automation-timeouts.mjs +0 -98
- package/tests/test-behavior-tree.mjs +0 -444
- package/tests/test-blueprint-graph.mjs +0 -410
- package/tests/test-blueprint.mjs +0 -577
- package/tests/test-client-mode.mjs +0 -86
- package/tests/test-console-command.mjs +0 -56
- package/tests/test-control-actor.mjs +0 -425
- package/tests/test-control-editor.mjs +0 -112
- package/tests/test-graphql.mjs +0 -372
- package/tests/test-input.mjs +0 -349
- package/tests/test-inspect.mjs +0 -302
- package/tests/test-landscape.mjs +0 -316
- package/tests/test-lighting.mjs +0 -428
- package/tests/test-manage-asset.mjs +0 -438
- package/tests/test-manage-level.mjs +0 -89
- package/tests/test-materials.mjs +0 -356
- package/tests/test-niagara.mjs +0 -185
- package/tests/test-no-inline-python.mjs +0 -122
- package/tests/test-performance.mjs +0 -539
- package/tests/test-plugin-handshake.mjs +0 -82
- package/tests/test-runner.mjs +0 -993
- package/tests/test-sequence.mjs +0 -104
- package/tests/test-system.mjs +0 -96
- package/tests/test-wasm.mjs +0 -283
- package/tests/test-world-partition.mjs +0 -215
- package/tsconfig.json +0 -56
- package/vitest.config.ts +0 -35
- package/wasm/Cargo.lock +0 -363
- package/wasm/Cargo.toml +0 -42
- package/wasm/LICENSE +0 -21
- package/wasm/README.md +0 -253
- package/wasm/src/dependency_resolver.rs +0 -377
- package/wasm/src/lib.rs +0 -153
- package/wasm/src/property_parser.rs +0 -271
- package/wasm/src/transform_math.rs +0 -396
- package/wasm/tests/integration.rs +0 -109
package/src/tools/editor.ts
DELETED
|
@@ -1,435 +0,0 @@
|
|
|
1
|
-
import { BaseTool } from './base-tool.js';
|
|
2
|
-
import { IEditorTools, StandardActionResponse } from '../types/tool-interfaces.js';
|
|
3
|
-
import { toVec3Object, toRotObject } from '../utils/normalize.js';
|
|
4
|
-
import { DEFAULT_SCREENSHOT_RESOLUTION } from '../constants.js';
|
|
5
|
-
import { EditorResponse } from '../types/automation-responses.js';
|
|
6
|
-
import { wasmIntegration } from '../wasm/index.js';
|
|
7
|
-
|
|
8
|
-
export class EditorTools extends BaseTool implements IEditorTools {
|
|
9
|
-
private cameraBookmarks = new Map<string, { location: [number, number, number]; rotation: [number, number, number]; savedAt: number }>();
|
|
10
|
-
private editorPreferences = new Map<string, Record<string, unknown>>();
|
|
11
|
-
private activeRecording?: { name?: string; options?: Record<string, unknown>; startedAt: number };
|
|
12
|
-
|
|
13
|
-
async isInPIE(): Promise<boolean> {
|
|
14
|
-
try {
|
|
15
|
-
const response = await this.sendAutomationRequest<EditorResponse>(
|
|
16
|
-
'check_pie_state',
|
|
17
|
-
{},
|
|
18
|
-
{ timeoutMs: 5000 }
|
|
19
|
-
);
|
|
20
|
-
|
|
21
|
-
if (response && response.success !== false) {
|
|
22
|
-
return response.isInPIE === true || (response.result as any)?.isInPIE === true;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return false;
|
|
26
|
-
} catch {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
async ensureNotInPIE(): Promise<void> {
|
|
32
|
-
if (await this.isInPIE()) {
|
|
33
|
-
await this.stopPlayInEditor();
|
|
34
|
-
// Wait a bit for PIE to fully stop
|
|
35
|
-
await new Promise(resolve => setTimeout(resolve, 500));
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
async playInEditor(timeoutMs: number = 30000): Promise<StandardActionResponse> {
|
|
40
|
-
try {
|
|
41
|
-
try {
|
|
42
|
-
const response = await this.sendAutomationRequest<EditorResponse>(
|
|
43
|
-
'control_editor',
|
|
44
|
-
{ action: 'play' },
|
|
45
|
-
{ timeoutMs }
|
|
46
|
-
);
|
|
47
|
-
if (response && response.success === true) {
|
|
48
|
-
return { success: true, message: response.message || 'PIE started' };
|
|
49
|
-
}
|
|
50
|
-
return { success: false, error: response?.error || response?.message || 'Failed to start PIE' };
|
|
51
|
-
} catch (err: unknown) {
|
|
52
|
-
// If it's a timeout, return error instead of falling back
|
|
53
|
-
const errMsg = err instanceof Error ? err.message : String(err);
|
|
54
|
-
if (errMsg && /time.*out/i.test(errMsg)) {
|
|
55
|
-
return { success: false, error: `Timeout waiting for PIE to start: ${errMsg}` };
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Fallback to console commands if automation bridge is unavailable or fails (non-timeout)
|
|
59
|
-
await this.bridge.executeConsoleCommand('t.MaxFPS 60');
|
|
60
|
-
await this.bridge.executeConsoleCommand('PlayInViewport');
|
|
61
|
-
return { success: true, message: 'PIE start command sent' };
|
|
62
|
-
}
|
|
63
|
-
} catch (err) {
|
|
64
|
-
return { success: false, error: `Failed to start PIE: ${err}` };
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
async stopPlayInEditor(): Promise<StandardActionResponse> {
|
|
69
|
-
try {
|
|
70
|
-
try {
|
|
71
|
-
const response = await this.sendAutomationRequest<EditorResponse>(
|
|
72
|
-
'control_editor',
|
|
73
|
-
{ action: 'stop' },
|
|
74
|
-
{ timeoutMs: 30000 }
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
if (response.success !== false) {
|
|
78
|
-
return {
|
|
79
|
-
success: true,
|
|
80
|
-
message: response.message || 'PIE stopped successfully'
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
return {
|
|
85
|
-
success: false,
|
|
86
|
-
error: response.error || response.message || 'Failed to stop PIE'
|
|
87
|
-
};
|
|
88
|
-
} catch (_pluginErr) {
|
|
89
|
-
// Fallback to console command if plugin fails
|
|
90
|
-
await this.bridge.executeConsoleCommand('stop');
|
|
91
|
-
return { success: true, message: 'PIE stopped via console command' };
|
|
92
|
-
}
|
|
93
|
-
} catch (err) {
|
|
94
|
-
return { success: false, error: `Failed to stop PIE: ${err}` };
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
async pausePlayInEditor(): Promise<StandardActionResponse> {
|
|
99
|
-
try {
|
|
100
|
-
// Pause/Resume PIE
|
|
101
|
-
await this.bridge.executeConsoleCommand('pause');
|
|
102
|
-
return { success: true, message: 'PIE paused/resumed' };
|
|
103
|
-
} catch (err) {
|
|
104
|
-
return { success: false, error: `Failed to pause PIE: ${err}` };
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Alias for consistency with naming convention
|
|
109
|
-
async pauseInEditor(): Promise<StandardActionResponse> {
|
|
110
|
-
return this.pausePlayInEditor();
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
async buildLighting(): Promise<StandardActionResponse> {
|
|
114
|
-
try {
|
|
115
|
-
// Use console command to build lighting
|
|
116
|
-
await this.bridge.executeConsoleCommand('BuildLighting');
|
|
117
|
-
return { success: true, message: 'Lighting build started' };
|
|
118
|
-
} catch (err) {
|
|
119
|
-
return { success: false, error: `Failed to build lighting: ${err}` };
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
private async getViewportCameraInfo(): Promise<{
|
|
124
|
-
success: boolean;
|
|
125
|
-
location?: [number, number, number];
|
|
126
|
-
rotation?: [number, number, number];
|
|
127
|
-
error?: string;
|
|
128
|
-
message?: string;
|
|
129
|
-
}> {
|
|
130
|
-
try {
|
|
131
|
-
const resp = await this.sendAutomationRequest<EditorResponse>(
|
|
132
|
-
'control_editor',
|
|
133
|
-
{ action: 'get_camera' },
|
|
134
|
-
{ timeoutMs: 3000 }
|
|
135
|
-
);
|
|
136
|
-
const result: any = resp?.result ?? resp;
|
|
137
|
-
const loc = result?.location ?? result?.camera?.location;
|
|
138
|
-
const rot = result?.rotation ?? result?.camera?.rotation;
|
|
139
|
-
const locArr: [number, number, number] | undefined = Array.isArray(loc) && loc.length === 3 ? [Number(loc[0]) || 0, Number(loc[1]) || 0, Number(loc[2]) || 0] : undefined;
|
|
140
|
-
const rotArr: [number, number, number] | undefined = Array.isArray(rot) && rot.length === 3 ? [Number(rot[0]) || 0, Number(rot[1]) || 0, Number(rot[2]) || 0] : undefined;
|
|
141
|
-
if (resp && resp.success !== false && locArr && rotArr) {
|
|
142
|
-
return { success: true, location: locArr, rotation: rotArr };
|
|
143
|
-
}
|
|
144
|
-
return { success: false, error: 'Failed to get camera information' };
|
|
145
|
-
} catch (err) {
|
|
146
|
-
return { success: false, error: `Camera query failed: ${err}` };
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
async setViewportCamera(location?: { x: number; y: number; z: number } | [number, number, number] | null | undefined, rotation?: { pitch: number; yaw: number; roll: number } | [number, number, number] | null | undefined): Promise<StandardActionResponse> {
|
|
151
|
-
// Special handling for when both location and rotation are missing/invalid
|
|
152
|
-
// Allow rotation-only updates
|
|
153
|
-
if (location === null) {
|
|
154
|
-
// Explicit null is not allowed for location
|
|
155
|
-
throw new Error('Invalid location: null is not allowed');
|
|
156
|
-
}
|
|
157
|
-
if (location !== undefined && location !== null) {
|
|
158
|
-
const locObj = toVec3Object(location);
|
|
159
|
-
if (!locObj) {
|
|
160
|
-
throw new Error('Invalid location: must be {x,y,z} or [x,y,z]');
|
|
161
|
-
}
|
|
162
|
-
// Clamp extreme values to reasonable limits for Unreal Engine
|
|
163
|
-
const MAX_COORD = 1000000; // 1 million units is a reasonable max for UE
|
|
164
|
-
locObj.x = Math.max(-MAX_COORD, Math.min(MAX_COORD, locObj.x));
|
|
165
|
-
locObj.y = Math.max(-MAX_COORD, Math.min(MAX_COORD, locObj.y));
|
|
166
|
-
locObj.z = Math.max(-MAX_COORD, Math.min(MAX_COORD, locObj.z));
|
|
167
|
-
location = locObj as any;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
// Validate rotation if provided
|
|
171
|
-
if (rotation !== undefined) {
|
|
172
|
-
if (rotation === null) {
|
|
173
|
-
throw new Error('Invalid rotation: null is not allowed');
|
|
174
|
-
}
|
|
175
|
-
const rotObj = toRotObject(rotation);
|
|
176
|
-
if (!rotObj) {
|
|
177
|
-
throw new Error('Invalid rotation: must be {pitch,yaw,roll} or [pitch,yaw,roll]');
|
|
178
|
-
}
|
|
179
|
-
// Normalize rotation values to 0-360 range
|
|
180
|
-
rotObj.pitch = ((rotObj.pitch % 360) + 360) % 360;
|
|
181
|
-
rotObj.yaw = ((rotObj.yaw % 360) + 360) % 360;
|
|
182
|
-
rotObj.roll = ((rotObj.roll % 360) + 360) % 360;
|
|
183
|
-
rotation = rotObj as any;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// Use native control_editor.set_camera when available
|
|
187
|
-
try {
|
|
188
|
-
// Use WASM composeTransform for camera transform calculation
|
|
189
|
-
const locArray: [number, number, number] = location
|
|
190
|
-
? [((location as any).x ?? (location as any)[0] ?? 0), ((location as any).y ?? (location as any)[1] ?? 0), ((location as any).z ?? (location as any)[2] ?? 0)]
|
|
191
|
-
: [0, 0, 0];
|
|
192
|
-
const rotArray: [number, number, number] = rotation
|
|
193
|
-
? [((rotation as any).pitch ?? (rotation as any)[0] ?? 0), ((rotation as any).yaw ?? (rotation as any)[1] ?? 0), ((rotation as any).roll ?? (rotation as any)[2] ?? 0)]
|
|
194
|
-
: [0, 0, 0];
|
|
195
|
-
// Compose transform to validate and process camera positioning via WASM
|
|
196
|
-
wasmIntegration.composeTransform(locArray, rotArray, [1, 1, 1]);
|
|
197
|
-
// console.error('[WASM] Using composeTransform for camera positioning');
|
|
198
|
-
|
|
199
|
-
const resp = await this.sendAutomationRequest<EditorResponse>('control_editor', {
|
|
200
|
-
action: 'set_camera',
|
|
201
|
-
location: location as any,
|
|
202
|
-
rotation: rotation as any
|
|
203
|
-
}, { timeoutMs: 10000 });
|
|
204
|
-
if (resp && resp.success === true) {
|
|
205
|
-
return { success: true, message: resp.message || 'Camera set', location, rotation };
|
|
206
|
-
}
|
|
207
|
-
return { success: false, error: resp?.error || resp?.message || 'Failed to set camera' };
|
|
208
|
-
} catch (err) {
|
|
209
|
-
return { success: false, error: `Camera control failed: ${err}` };
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
async setCameraSpeed(speed: number): Promise<StandardActionResponse> {
|
|
214
|
-
try {
|
|
215
|
-
await this.bridge.executeConsoleCommand(`camspeed ${speed}`);
|
|
216
|
-
return { success: true, message: `Camera speed set to ${speed}` };
|
|
217
|
-
} catch (err) {
|
|
218
|
-
return { success: false, error: `Failed to set camera speed: ${err}` };
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
async setFOV(fov: number): Promise<StandardActionResponse> {
|
|
223
|
-
try {
|
|
224
|
-
await this.bridge.executeConsoleCommand(`fov ${fov}`);
|
|
225
|
-
return { success: true, message: `FOV set to ${fov}` };
|
|
226
|
-
} catch (err) {
|
|
227
|
-
return { success: false, error: `Failed to set FOV: ${err}` };
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
async takeScreenshot(filename?: string, resolution?: string): Promise<StandardActionResponse> {
|
|
232
|
-
try {
|
|
233
|
-
if (resolution && !/^\d+x\d+$/.test(resolution)) {
|
|
234
|
-
return { success: false, error: 'Invalid resolution format. Use WxH (e.g. 1920x1080)' };
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
const sanitizedFilename = filename ? filename.replace(/[<>:*?"|]/g, '_') : `Screenshot_${Date.now()}`;
|
|
238
|
-
const resString = resolution || DEFAULT_SCREENSHOT_RESOLUTION;
|
|
239
|
-
const command = filename ? `highresshot ${resString} filename="${sanitizedFilename}"` : 'shot';
|
|
240
|
-
|
|
241
|
-
await this.bridge.executeConsoleCommand(command);
|
|
242
|
-
|
|
243
|
-
return {
|
|
244
|
-
success: true,
|
|
245
|
-
message: `Screenshot captured: ${sanitizedFilename}`,
|
|
246
|
-
filename: sanitizedFilename,
|
|
247
|
-
command
|
|
248
|
-
};
|
|
249
|
-
} catch (err) {
|
|
250
|
-
return { success: false, error: `Failed to take screenshot: ${err}` };
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
async resumePlayInEditor(): Promise<StandardActionResponse> {
|
|
255
|
-
try {
|
|
256
|
-
// Use console command to toggle pause (resumes if paused)
|
|
257
|
-
await this.bridge.executeConsoleCommand('pause');
|
|
258
|
-
return {
|
|
259
|
-
success: true,
|
|
260
|
-
message: 'PIE resume toggled via pause command'
|
|
261
|
-
};
|
|
262
|
-
} catch (err) {
|
|
263
|
-
return { success: false, error: `Failed to resume PIE: ${err}` };
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
async stepPIEFrame(steps: number = 1): Promise<StandardActionResponse> {
|
|
268
|
-
const clampedSteps = Number.isFinite(steps) ? Math.max(1, Math.floor(steps)) : 1;
|
|
269
|
-
try {
|
|
270
|
-
// Use console command to step frames
|
|
271
|
-
for (let index = 0; index < clampedSteps; index += 1) {
|
|
272
|
-
await this.bridge.executeConsoleCommand('Step=1');
|
|
273
|
-
}
|
|
274
|
-
return {
|
|
275
|
-
success: true,
|
|
276
|
-
message: `Advanced PIE by ${clampedSteps} frame(s)`,
|
|
277
|
-
steps: clampedSteps
|
|
278
|
-
};
|
|
279
|
-
} catch (err) {
|
|
280
|
-
return { success: false, error: `Failed to step PIE: ${err}` };
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
async startRecording(options?: { filename?: string; frameRate?: number; durationSeconds?: number; metadata?: Record<string, unknown> }): Promise<StandardActionResponse> {
|
|
285
|
-
const startedAt = Date.now();
|
|
286
|
-
this.activeRecording = {
|
|
287
|
-
name: typeof options?.filename === 'string' ? options.filename.trim() : undefined,
|
|
288
|
-
options: options ? { ...options } : undefined,
|
|
289
|
-
startedAt
|
|
290
|
-
};
|
|
291
|
-
|
|
292
|
-
return {
|
|
293
|
-
success: true as const,
|
|
294
|
-
message: 'Recording session started',
|
|
295
|
-
recording: {
|
|
296
|
-
name: this.activeRecording.name,
|
|
297
|
-
startedAt,
|
|
298
|
-
options: this.activeRecording.options
|
|
299
|
-
}
|
|
300
|
-
};
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
async stopRecording(): Promise<StandardActionResponse> {
|
|
304
|
-
if (!this.activeRecording) {
|
|
305
|
-
return {
|
|
306
|
-
success: true as const,
|
|
307
|
-
message: 'No active recording session to stop'
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
const stoppedRecording = this.activeRecording;
|
|
312
|
-
this.activeRecording = undefined;
|
|
313
|
-
|
|
314
|
-
return {
|
|
315
|
-
success: true as const,
|
|
316
|
-
message: 'Recording session stopped',
|
|
317
|
-
recording: stoppedRecording
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
async createCameraBookmark(name: string): Promise<StandardActionResponse> {
|
|
322
|
-
const trimmedName = name.trim();
|
|
323
|
-
if (!trimmedName) {
|
|
324
|
-
return { success: false as const, error: 'bookmarkName is required' };
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
const cameraInfo = await this.getViewportCameraInfo();
|
|
328
|
-
if (!cameraInfo.success || !cameraInfo.location || !cameraInfo.rotation) {
|
|
329
|
-
return {
|
|
330
|
-
success: false as const,
|
|
331
|
-
error: cameraInfo.error || 'Failed to capture viewport camera'
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
this.cameraBookmarks.set(trimmedName, {
|
|
336
|
-
location: cameraInfo.location,
|
|
337
|
-
rotation: cameraInfo.rotation,
|
|
338
|
-
savedAt: Date.now()
|
|
339
|
-
});
|
|
340
|
-
|
|
341
|
-
return {
|
|
342
|
-
success: true as const,
|
|
343
|
-
message: `Bookmark '${trimmedName}' saved`,
|
|
344
|
-
bookmark: {
|
|
345
|
-
name: trimmedName,
|
|
346
|
-
location: cameraInfo.location,
|
|
347
|
-
rotation: cameraInfo.rotation
|
|
348
|
-
}
|
|
349
|
-
};
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
async jumpToCameraBookmark(name: string): Promise<StandardActionResponse> {
|
|
353
|
-
const trimmedName = name.trim();
|
|
354
|
-
if (!trimmedName) {
|
|
355
|
-
return { success: false as const, error: 'bookmarkName is required' };
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
const bookmark = this.cameraBookmarks.get(trimmedName);
|
|
359
|
-
if (!bookmark) {
|
|
360
|
-
return {
|
|
361
|
-
success: false as const,
|
|
362
|
-
error: `Bookmark '${trimmedName}' not found`
|
|
363
|
-
};
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
await this.setViewportCamera(
|
|
367
|
-
{ x: bookmark.location[0], y: bookmark.location[1], z: bookmark.location[2] },
|
|
368
|
-
{ pitch: bookmark.rotation[0], yaw: bookmark.rotation[1], roll: bookmark.rotation[2] }
|
|
369
|
-
);
|
|
370
|
-
|
|
371
|
-
return {
|
|
372
|
-
success: true as const,
|
|
373
|
-
message: `Jumped to bookmark '${trimmedName}'`
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
async setEditorPreferences(category: string | undefined, preferences: Record<string, unknown>): Promise<StandardActionResponse> {
|
|
378
|
-
const resolvedCategory = typeof category === 'string' && category.trim().length > 0 ? category.trim() : 'General';
|
|
379
|
-
const existing = this.editorPreferences.get(resolvedCategory) ?? {};
|
|
380
|
-
this.editorPreferences.set(resolvedCategory, { ...existing, ...preferences });
|
|
381
|
-
|
|
382
|
-
return {
|
|
383
|
-
success: true as const,
|
|
384
|
-
message: `Preferences stored for ${resolvedCategory}`,
|
|
385
|
-
preferences: this.editorPreferences.get(resolvedCategory)
|
|
386
|
-
};
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
async setViewportResolution(width: number, height: number): Promise<StandardActionResponse> {
|
|
390
|
-
try {
|
|
391
|
-
// Clamp to reasonable limits
|
|
392
|
-
const clampedWidth = Math.max(320, Math.min(7680, width));
|
|
393
|
-
const clampedHeight = Math.max(240, Math.min(4320, height));
|
|
394
|
-
|
|
395
|
-
// Use console command directly instead of Python
|
|
396
|
-
const command = `r.SetRes ${clampedWidth}x${clampedHeight}`;
|
|
397
|
-
await this.bridge.executeConsoleCommand(command);
|
|
398
|
-
|
|
399
|
-
return {
|
|
400
|
-
success: true,
|
|
401
|
-
message: `Viewport resolution set to ${clampedWidth}x${clampedHeight}`,
|
|
402
|
-
width: clampedWidth,
|
|
403
|
-
height: clampedHeight
|
|
404
|
-
};
|
|
405
|
-
} catch (err) {
|
|
406
|
-
return { success: false, error: `Failed to set viewport resolution: ${err}` };
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
async executeConsoleCommand(command: string): Promise<StandardActionResponse> {
|
|
411
|
-
try {
|
|
412
|
-
// Sanitize and validate command
|
|
413
|
-
if (!command || typeof command !== 'string') {
|
|
414
|
-
return { success: false, error: 'Invalid command: must be a non-empty string' };
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
if (command.length > 1000) {
|
|
418
|
-
return {
|
|
419
|
-
success: false,
|
|
420
|
-
error: `Command too long (${command.length} chars). Maximum is 1000 characters.`
|
|
421
|
-
};
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
const res = await this.bridge.executeConsoleCommand(command);
|
|
425
|
-
|
|
426
|
-
return {
|
|
427
|
-
success: true,
|
|
428
|
-
message: `Console command executed: ${command}`,
|
|
429
|
-
output: res
|
|
430
|
-
};
|
|
431
|
-
} catch (err) {
|
|
432
|
-
return { success: false, error: `Failed to execute console command: ${err}` };
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
}
|
package/src/tools/engine.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { UnrealBridge } from '../unreal-bridge.js';
|
|
2
|
-
import { AutomationBridge } from '../automation/index.js';
|
|
3
|
-
import { loadEnv } from '../types/env.js';
|
|
4
|
-
import { spawn } from 'child_process';
|
|
5
|
-
|
|
6
|
-
export class EngineTools {
|
|
7
|
-
private env = loadEnv();
|
|
8
|
-
constructor(_bridge: UnrealBridge, private automationBridge?: AutomationBridge) { }
|
|
9
|
-
|
|
10
|
-
setAutomationBridge(automationBridge?: AutomationBridge) {
|
|
11
|
-
this.automationBridge = automationBridge;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
async launchEditor(params?: { editorExe?: string; projectPath?: string }) {
|
|
15
|
-
const exe = params?.editorExe || this.env.UE_EDITOR_EXE;
|
|
16
|
-
const proj = params?.projectPath || this.env.UE_PROJECT_PATH;
|
|
17
|
-
if (!exe) return { success: false, error: 'UE_EDITOR_EXE not set and editorExe not provided' };
|
|
18
|
-
if (!proj) return { success: false, error: 'UE_PROJECT_PATH not set and projectPath not provided' };
|
|
19
|
-
try {
|
|
20
|
-
const child = spawn(exe, [proj], { detached: true, stdio: 'ignore' });
|
|
21
|
-
child.unref();
|
|
22
|
-
return { success: true, pid: child.pid, message: 'Editor launch requested' };
|
|
23
|
-
} catch (err: any) {
|
|
24
|
-
return { success: false, error: String(err?.message || err) };
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
async quitEditor() {
|
|
29
|
-
if (!this.automationBridge) {
|
|
30
|
-
return { success: false, error: 'AUTOMATION_BRIDGE_UNAVAILABLE', message: 'Automation bridge is not available for quit_editor' };
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
try {
|
|
34
|
-
const resp: any = await this.automationBridge.sendAutomationRequest('quit_editor', {});
|
|
35
|
-
if (resp && resp.success === false) {
|
|
36
|
-
return { success: false, error: resp.error || resp.message || 'Quit request failed' };
|
|
37
|
-
}
|
|
38
|
-
return { success: true, message: 'Quit command sent' };
|
|
39
|
-
} catch (err: any) {
|
|
40
|
-
return { success: false, error: String(err?.message || err) };
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|