unreal-engine-mcp-server 0.5.3 → 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/CHANGELOG.md +66 -0
- package/dist/automation/bridge.d.ts +1 -0
- package/dist/automation/bridge.d.ts.map +1 -0
- package/dist/automation/bridge.js +62 -4
- 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 +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 +2 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +2 -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 +0 -1
- package/dist/graphql/server.d.ts.map +1 -0
- package/dist/graphql/server.js +15 -16
- 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 +3 -3
- 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 +61 -7
- 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 -2241
- 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 -1330
- 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 -560
- 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 -107
- 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 -24
- 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 -128
- 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/run-unreal-tool-tests.mjs +0 -948
- package/tests/test-animation.mjs +0 -369
- package/tests/test-asset-advanced.mjs +0 -82
- package/tests/test-asset-errors.mjs +0 -35
- 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 -933
- 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
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import { cleanObject } from '../../utils/safe-json.js';
|
|
2
|
-
import { ITools } from '../../types/tool-interfaces.js';
|
|
3
|
-
import type { LevelArgs } from '../../types/handler-types.js';
|
|
4
|
-
import { executeAutomationRequest, requireNonEmptyString } from './common-handlers.js';
|
|
5
|
-
|
|
6
|
-
export async function handleLevelTools(action: string, args: LevelArgs, tools: ITools) {
|
|
7
|
-
switch (action) {
|
|
8
|
-
case 'load':
|
|
9
|
-
case 'load_level': {
|
|
10
|
-
const levelPath = requireNonEmptyString(args.levelPath, 'levelPath', 'Missing required parameter: levelPath');
|
|
11
|
-
const res = await tools.levelTools.loadLevel({ levelPath, streaming: !!args.streaming });
|
|
12
|
-
return cleanObject(res);
|
|
13
|
-
}
|
|
14
|
-
case 'save': {
|
|
15
|
-
const targetPath = args.levelPath || args.savePath;
|
|
16
|
-
if (targetPath) {
|
|
17
|
-
const res = await tools.levelTools.saveLevelAs({ targetPath });
|
|
18
|
-
return cleanObject(res);
|
|
19
|
-
}
|
|
20
|
-
const res = await tools.levelTools.saveLevel({ levelName: args.levelName });
|
|
21
|
-
return cleanObject(res);
|
|
22
|
-
}
|
|
23
|
-
case 'save_as':
|
|
24
|
-
case 'save_level_as': {
|
|
25
|
-
// Accept savePath, destinationPath, or levelPath as the target
|
|
26
|
-
const targetPath = args.savePath || args.destinationPath || args.levelPath;
|
|
27
|
-
if (!targetPath) {
|
|
28
|
-
return {
|
|
29
|
-
success: false,
|
|
30
|
-
error: 'INVALID_ARGUMENT',
|
|
31
|
-
message: 'savePath is required for save_as action',
|
|
32
|
-
action
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
const res = await tools.levelTools.saveLevelAs({ targetPath });
|
|
36
|
-
return cleanObject(res);
|
|
37
|
-
}
|
|
38
|
-
case 'create_level': {
|
|
39
|
-
const levelName = requireNonEmptyString(args.levelName || (args.levelPath ? args.levelPath.split('/').pop() : ''), 'levelName', 'Missing required parameter: levelName');
|
|
40
|
-
const res = await tools.levelTools.createLevel({ levelName, savePath: args.savePath || args.levelPath });
|
|
41
|
-
return cleanObject(res);
|
|
42
|
-
}
|
|
43
|
-
case 'add_sublevel': {
|
|
44
|
-
const subLevelPath = requireNonEmptyString(args.subLevelPath || args.levelPath, 'subLevelPath', 'Missing required parameter: subLevelPath');
|
|
45
|
-
const res = await tools.levelTools.addSubLevel({
|
|
46
|
-
subLevelPath,
|
|
47
|
-
parentLevel: args.parentLevel || args.parentPath,
|
|
48
|
-
streamingMethod: args.streamingMethod
|
|
49
|
-
});
|
|
50
|
-
return cleanObject(res);
|
|
51
|
-
}
|
|
52
|
-
case 'stream': {
|
|
53
|
-
const levelPath = typeof args.levelPath === 'string' ? args.levelPath : undefined;
|
|
54
|
-
const levelName = typeof args.levelName === 'string' ? args.levelName : undefined;
|
|
55
|
-
if (!levelPath && !levelName) {
|
|
56
|
-
return cleanObject({
|
|
57
|
-
success: false,
|
|
58
|
-
error: 'INVALID_ARGUMENT',
|
|
59
|
-
message: 'Missing required parameter: levelPath (or levelName)',
|
|
60
|
-
action
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
if (typeof args.shouldBeLoaded !== 'boolean') {
|
|
64
|
-
return cleanObject({
|
|
65
|
-
success: false,
|
|
66
|
-
error: 'INVALID_ARGUMENT',
|
|
67
|
-
message: 'Missing required parameter: shouldBeLoaded (boolean)',
|
|
68
|
-
action,
|
|
69
|
-
levelPath,
|
|
70
|
-
levelName
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const res = await tools.levelTools.streamLevel({
|
|
75
|
-
levelPath,
|
|
76
|
-
levelName,
|
|
77
|
-
shouldBeLoaded: args.shouldBeLoaded,
|
|
78
|
-
shouldBeVisible: args.shouldBeVisible
|
|
79
|
-
});
|
|
80
|
-
return cleanObject(res);
|
|
81
|
-
}
|
|
82
|
-
case 'create_light': {
|
|
83
|
-
// Delegate directly to the plugin's manage_level.create_light handler.
|
|
84
|
-
const res = await executeAutomationRequest(tools, 'manage_level', args);
|
|
85
|
-
return cleanObject(res);
|
|
86
|
-
}
|
|
87
|
-
case 'spawn_light': {
|
|
88
|
-
// Fallback to control_actor spawn if manage_level spawn_light is not supported
|
|
89
|
-
const lightClassMap: Record<string, string> = {
|
|
90
|
-
'Point': '/Script/Engine.PointLight',
|
|
91
|
-
'Directional': '/Script/Engine.DirectionalLight',
|
|
92
|
-
'Spot': '/Script/Engine.SpotLight',
|
|
93
|
-
'Sky': '/Script/Engine.SkyLight',
|
|
94
|
-
'Rect': '/Script/Engine.RectLight'
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
const lightType = args.lightType || 'Point';
|
|
98
|
-
const classPath = lightClassMap[lightType] || '/Script/Engine.PointLight';
|
|
99
|
-
|
|
100
|
-
try {
|
|
101
|
-
const res = await tools.actorTools.spawn({
|
|
102
|
-
classPath,
|
|
103
|
-
actorName: args.name,
|
|
104
|
-
location: args.location,
|
|
105
|
-
rotation: args.rotation
|
|
106
|
-
});
|
|
107
|
-
return { ...cleanObject(res), action: 'spawn_light' };
|
|
108
|
-
} catch (_e) {
|
|
109
|
-
return await executeAutomationRequest(tools, 'manage_level', args);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
case 'build_lighting': {
|
|
113
|
-
return cleanObject(await tools.lightingTools.buildLighting({
|
|
114
|
-
quality: (args.quality as any) || 'Preview',
|
|
115
|
-
buildOnlySelected: false,
|
|
116
|
-
buildReflectionCaptures: false
|
|
117
|
-
}));
|
|
118
|
-
}
|
|
119
|
-
case 'export_level': {
|
|
120
|
-
const res = await tools.levelTools.exportLevel({
|
|
121
|
-
levelPath: args.levelPath,
|
|
122
|
-
exportPath: args.exportPath ?? args.destinationPath ?? '',
|
|
123
|
-
timeoutMs: typeof args.timeoutMs === 'number' ? args.timeoutMs : undefined
|
|
124
|
-
});
|
|
125
|
-
return cleanObject(res);
|
|
126
|
-
}
|
|
127
|
-
case 'import_level': {
|
|
128
|
-
const res = await tools.levelTools.importLevel({
|
|
129
|
-
packagePath: args.packagePath ?? args.sourcePath ?? '',
|
|
130
|
-
destinationPath: args.destinationPath,
|
|
131
|
-
timeoutMs: typeof args.timeoutMs === 'number' ? args.timeoutMs : undefined
|
|
132
|
-
});
|
|
133
|
-
return cleanObject(res);
|
|
134
|
-
}
|
|
135
|
-
case 'list_levels': {
|
|
136
|
-
const res = await tools.levelTools.listLevels();
|
|
137
|
-
return cleanObject(res);
|
|
138
|
-
}
|
|
139
|
-
case 'get_summary': {
|
|
140
|
-
const res = await tools.levelTools.getLevelSummary(args.levelPath);
|
|
141
|
-
return cleanObject(res);
|
|
142
|
-
}
|
|
143
|
-
case 'delete': {
|
|
144
|
-
const levelPaths = Array.isArray(args.levelPaths) ? args.levelPaths.filter((p): p is string => typeof p === 'string') : (args.levelPath ? [args.levelPath] : []);
|
|
145
|
-
const res = await tools.levelTools.deleteLevels({ levelPaths });
|
|
146
|
-
return cleanObject(res);
|
|
147
|
-
}
|
|
148
|
-
case 'set_metadata': {
|
|
149
|
-
const levelPath = requireNonEmptyString(args.levelPath, 'levelPath', 'Missing required parameter: levelPath');
|
|
150
|
-
const metadata = (args.metadata && typeof args.metadata === 'object') ? args.metadata : {};
|
|
151
|
-
const res = await executeAutomationRequest(tools, 'set_metadata', { assetPath: levelPath, metadata });
|
|
152
|
-
return cleanObject(res);
|
|
153
|
-
}
|
|
154
|
-
case 'load_cells': {
|
|
155
|
-
// Calculate origin/extent if min/max provided for C++ handler compatibility
|
|
156
|
-
let origin = args.origin;
|
|
157
|
-
let extent = args.extent;
|
|
158
|
-
|
|
159
|
-
if (!origin && args.min && args.max) {
|
|
160
|
-
const min = args.min;
|
|
161
|
-
const max = args.max;
|
|
162
|
-
origin = [(min[0] + max[0]) / 2, (min[1] + max[1]) / 2, (min[2] + max[2]) / 2];
|
|
163
|
-
extent = [(max[0] - min[0]) / 2, (max[1] - min[1]) / 2, (max[2] - min[2]) / 2];
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
const payload = {
|
|
167
|
-
subAction: 'load_cells',
|
|
168
|
-
origin: origin,
|
|
169
|
-
extent: extent,
|
|
170
|
-
...args // Allow other args to override if explicit
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
const res = await executeAutomationRequest(tools, 'manage_world_partition', payload);
|
|
174
|
-
return cleanObject(res);
|
|
175
|
-
}
|
|
176
|
-
case 'set_datalayer': {
|
|
177
|
-
const dataLayerName = args.dataLayerName || args.dataLayerLabel;
|
|
178
|
-
if (!dataLayerName || typeof dataLayerName !== 'string' || dataLayerName.trim().length === 0) {
|
|
179
|
-
return cleanObject({
|
|
180
|
-
success: false,
|
|
181
|
-
error: 'INVALID_ARGUMENT',
|
|
182
|
-
message: 'Missing required parameter: dataLayerLabel (or dataLayerName)',
|
|
183
|
-
action
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
if (!args.dataLayerState || typeof args.dataLayerState !== 'string') {
|
|
187
|
-
return cleanObject({
|
|
188
|
-
success: false,
|
|
189
|
-
error: 'INVALID_ARGUMENT',
|
|
190
|
-
message: 'Missing required parameter: dataLayerState',
|
|
191
|
-
action,
|
|
192
|
-
dataLayerName
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
const res = await executeAutomationRequest(tools, 'manage_world_partition', {
|
|
197
|
-
subAction: 'set_datalayer',
|
|
198
|
-
actorPath: args.actorPath,
|
|
199
|
-
dataLayerName, // Map label to name
|
|
200
|
-
...args
|
|
201
|
-
});
|
|
202
|
-
return cleanObject(res);
|
|
203
|
-
}
|
|
204
|
-
case 'cleanup_invalid_datalayers': {
|
|
205
|
-
// Route to manage_world_partition
|
|
206
|
-
const res = await executeAutomationRequest(tools, 'manage_world_partition', {
|
|
207
|
-
subAction: 'cleanup_invalid_datalayers'
|
|
208
|
-
}, 'World Partition support not available');
|
|
209
|
-
return cleanObject(res);
|
|
210
|
-
}
|
|
211
|
-
case 'validate_level': {
|
|
212
|
-
const levelPath = requireNonEmptyString(args.levelPath, 'levelPath', 'Missing required parameter: levelPath');
|
|
213
|
-
|
|
214
|
-
// Prefer an editor-side existence check when the automation bridge is available.
|
|
215
|
-
const automationBridge = tools.automationBridge;
|
|
216
|
-
if (!automationBridge || typeof automationBridge.sendAutomationRequest !== 'function' || !automationBridge.isConnected()) {
|
|
217
|
-
return cleanObject({
|
|
218
|
-
success: false,
|
|
219
|
-
error: 'BRIDGE_UNAVAILABLE',
|
|
220
|
-
message: 'Automation bridge not available; cannot validate level asset',
|
|
221
|
-
levelPath
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
try {
|
|
226
|
-
const resp: any = await automationBridge.sendAutomationRequest('execute_editor_function', {
|
|
227
|
-
functionName: 'ASSET_EXISTS_SIMPLE',
|
|
228
|
-
path: levelPath
|
|
229
|
-
});
|
|
230
|
-
const result = resp?.result ?? resp ?? {};
|
|
231
|
-
const exists = Boolean(result.exists);
|
|
232
|
-
|
|
233
|
-
return cleanObject({
|
|
234
|
-
success: true,
|
|
235
|
-
exists,
|
|
236
|
-
levelPath: result.path ?? levelPath,
|
|
237
|
-
classPath: result.class,
|
|
238
|
-
error: exists ? undefined : 'NOT_FOUND',
|
|
239
|
-
message: exists ? 'Level asset exists' : 'Level asset not found'
|
|
240
|
-
});
|
|
241
|
-
} catch (err) {
|
|
242
|
-
return cleanObject({
|
|
243
|
-
success: false,
|
|
244
|
-
error: 'VALIDATION_FAILED',
|
|
245
|
-
message: `Level validation failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
246
|
-
levelPath
|
|
247
|
-
});
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
default:
|
|
251
|
-
return await executeAutomationRequest(tools, 'manage_level', args);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { cleanObject } from '../../utils/safe-json.js';
|
|
2
|
-
import { ITools } from '../../types/tool-interfaces.js';
|
|
3
|
-
import type { LightingArgs } from '../../types/handler-types.js';
|
|
4
|
-
import { normalizeLocation } from './common-handlers.js';
|
|
5
|
-
|
|
6
|
-
export async function handleLightingTools(action: string, args: LightingArgs, tools: ITools) {
|
|
7
|
-
// Normalize location parameter to accept both {x,y,z} and [x,y,z] formats
|
|
8
|
-
const normalizedLocation = normalizeLocation(args.location);
|
|
9
|
-
|
|
10
|
-
switch (action) {
|
|
11
|
-
case 'spawn_light':
|
|
12
|
-
case 'create_light': {
|
|
13
|
-
// Map generic create_light to specific types if provided
|
|
14
|
-
const lightType = args.lightType ? args.lightType.toLowerCase() : 'point';
|
|
15
|
-
const commonParams = {
|
|
16
|
-
name: args.name,
|
|
17
|
-
location: normalizedLocation || args.location,
|
|
18
|
-
rotation: args.rotation,
|
|
19
|
-
intensity: args.intensity,
|
|
20
|
-
color: args.color,
|
|
21
|
-
castShadows: args.castShadows
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
if (lightType === 'directional') {
|
|
25
|
-
return cleanObject(await tools.lightingTools.createDirectionalLight({
|
|
26
|
-
...commonParams,
|
|
27
|
-
temperature: args.temperature,
|
|
28
|
-
useAsAtmosphereSunLight: args.useAsAtmosphereSunLight
|
|
29
|
-
}));
|
|
30
|
-
} else if (lightType === 'spot') {
|
|
31
|
-
return cleanObject(await tools.lightingTools.createSpotLight({
|
|
32
|
-
...commonParams,
|
|
33
|
-
location: normalizedLocation || [0, 0, 0],
|
|
34
|
-
rotation: args.rotation || [0, 0, 0],
|
|
35
|
-
innerCone: args.innerCone,
|
|
36
|
-
outerCone: args.outerCone,
|
|
37
|
-
radius: args.radius
|
|
38
|
-
}));
|
|
39
|
-
} else if (lightType === 'rect') {
|
|
40
|
-
return cleanObject(await tools.lightingTools.createRectLight({
|
|
41
|
-
...commonParams,
|
|
42
|
-
location: normalizedLocation || [0, 0, 0],
|
|
43
|
-
rotation: args.rotation || [0, 0, 0],
|
|
44
|
-
width: args.width,
|
|
45
|
-
height: args.height
|
|
46
|
-
}));
|
|
47
|
-
} else {
|
|
48
|
-
// Default to Point
|
|
49
|
-
return cleanObject(await tools.lightingTools.createPointLight({
|
|
50
|
-
...commonParams,
|
|
51
|
-
radius: args.radius,
|
|
52
|
-
falloffExponent: args.falloffExponent
|
|
53
|
-
}));
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
case 'create_dynamic_light': {
|
|
57
|
-
return cleanObject(await tools.lightingTools.createDynamicLight({
|
|
58
|
-
name: args.name,
|
|
59
|
-
lightType: args.lightType,
|
|
60
|
-
location: args.location,
|
|
61
|
-
rotation: args.rotation,
|
|
62
|
-
intensity: args.intensity,
|
|
63
|
-
color: args.color,
|
|
64
|
-
pulse: args.pulse
|
|
65
|
-
}));
|
|
66
|
-
}
|
|
67
|
-
case 'spawn_sky_light':
|
|
68
|
-
case 'create_sky_light': {
|
|
69
|
-
return cleanObject(await tools.lightingTools.createSkyLight({
|
|
70
|
-
name: args.name,
|
|
71
|
-
sourceType: args.sourceType,
|
|
72
|
-
cubemapPath: args.cubemapPath,
|
|
73
|
-
intensity: args.intensity,
|
|
74
|
-
recapture: args.recapture
|
|
75
|
-
}));
|
|
76
|
-
}
|
|
77
|
-
case 'ensure_single_sky_light': {
|
|
78
|
-
return cleanObject(await tools.lightingTools.ensureSingleSkyLight({
|
|
79
|
-
name: args.name,
|
|
80
|
-
recapture: args.recapture
|
|
81
|
-
}));
|
|
82
|
-
}
|
|
83
|
-
case 'create_lightmass_volume': {
|
|
84
|
-
return cleanObject(await tools.lightingTools.createLightmassVolume({
|
|
85
|
-
name: args.name,
|
|
86
|
-
location: args.location,
|
|
87
|
-
size: args.size
|
|
88
|
-
}));
|
|
89
|
-
}
|
|
90
|
-
case 'setup_volumetric_fog': {
|
|
91
|
-
return cleanObject(await tools.lightingTools.setupVolumetricFog({
|
|
92
|
-
enabled: args.enabled !== false,
|
|
93
|
-
density: args.density,
|
|
94
|
-
scatteringIntensity: args.scatteringIntensity,
|
|
95
|
-
fogHeight: args.fogHeight
|
|
96
|
-
}));
|
|
97
|
-
}
|
|
98
|
-
case 'setup_global_illumination': {
|
|
99
|
-
return cleanObject(await tools.lightingTools.setupGlobalIllumination({
|
|
100
|
-
method: args.method,
|
|
101
|
-
quality: args.quality,
|
|
102
|
-
indirectLightingIntensity: args.indirectLightingIntensity,
|
|
103
|
-
bounces: args.bounces
|
|
104
|
-
}));
|
|
105
|
-
}
|
|
106
|
-
case 'configure_shadows': {
|
|
107
|
-
return cleanObject(await tools.lightingTools.configureShadows({
|
|
108
|
-
shadowQuality: args.shadowQuality,
|
|
109
|
-
cascadedShadows: args.cascadedShadows,
|
|
110
|
-
shadowDistance: args.shadowDistance,
|
|
111
|
-
contactShadows: args.contactShadows,
|
|
112
|
-
rayTracedShadows: args.rayTracedShadows
|
|
113
|
-
}));
|
|
114
|
-
}
|
|
115
|
-
case 'set_exposure': {
|
|
116
|
-
return cleanObject(await tools.lightingTools.setExposure({
|
|
117
|
-
method: args.method,
|
|
118
|
-
compensationValue: args.compensationValue,
|
|
119
|
-
minBrightness: args.minBrightness,
|
|
120
|
-
maxBrightness: args.maxBrightness
|
|
121
|
-
}));
|
|
122
|
-
}
|
|
123
|
-
case 'set_ambient_occlusion': {
|
|
124
|
-
return cleanObject(await tools.lightingTools.setAmbientOcclusion({
|
|
125
|
-
enabled: args.enabled !== false,
|
|
126
|
-
intensity: args.intensity,
|
|
127
|
-
radius: args.radius,
|
|
128
|
-
quality: args.quality
|
|
129
|
-
}));
|
|
130
|
-
}
|
|
131
|
-
case 'build_lighting': {
|
|
132
|
-
return cleanObject(await tools.lightingTools.buildLighting({
|
|
133
|
-
quality: args.quality,
|
|
134
|
-
buildOnlySelected: args.buildOnlySelected,
|
|
135
|
-
buildReflectionCaptures: args.buildReflectionCaptures
|
|
136
|
-
}));
|
|
137
|
-
}
|
|
138
|
-
case 'create_lighting_enabled_level': {
|
|
139
|
-
return cleanObject(await tools.lightingTools.createLightingEnabledLevel({
|
|
140
|
-
levelName: args.levelName,
|
|
141
|
-
copyActors: args.copyActors,
|
|
142
|
-
useTemplate: args.useTemplate
|
|
143
|
-
}));
|
|
144
|
-
}
|
|
145
|
-
case 'list_light_types': {
|
|
146
|
-
return cleanObject(await tools.lightingTools.listLightTypes());
|
|
147
|
-
}
|
|
148
|
-
default:
|
|
149
|
-
throw new Error(`Unknown lighting action: ${action}`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { cleanObject } from '../../utils/safe-json.js';
|
|
2
|
-
import { ITools } from '../../types/tool-interfaces.js';
|
|
3
|
-
|
|
4
|
-
export async function handlePerformanceTools(action: string, args: any, tools: ITools) {
|
|
5
|
-
switch (action) {
|
|
6
|
-
case 'start_profiling': {
|
|
7
|
-
return cleanObject(await tools.performanceTools.startProfiling({
|
|
8
|
-
type: args.type || 'All',
|
|
9
|
-
duration: args.duration
|
|
10
|
-
}));
|
|
11
|
-
}
|
|
12
|
-
case 'stop_profiling': {
|
|
13
|
-
return cleanObject(await tools.performanceTools.stopProfiling());
|
|
14
|
-
}
|
|
15
|
-
case 'run_benchmark': {
|
|
16
|
-
return cleanObject(await tools.performanceTools.runBenchmark({
|
|
17
|
-
duration: args.duration,
|
|
18
|
-
outputPath: args.outputPath
|
|
19
|
-
}));
|
|
20
|
-
}
|
|
21
|
-
case 'show_fps': {
|
|
22
|
-
return cleanObject(await tools.performanceTools.showFPS({
|
|
23
|
-
enabled: args.enabled !== false,
|
|
24
|
-
verbose: args.verbose
|
|
25
|
-
}));
|
|
26
|
-
}
|
|
27
|
-
case 'show_stats': {
|
|
28
|
-
return cleanObject(await tools.performanceTools.showStats({
|
|
29
|
-
category: args.category || args.type || 'Unit',
|
|
30
|
-
enabled: args.enabled !== false
|
|
31
|
-
}));
|
|
32
|
-
}
|
|
33
|
-
case 'set_scalability': {
|
|
34
|
-
const category = args.category || 'ViewDistance';
|
|
35
|
-
const level = typeof args.level === 'number' ? args.level : 3;
|
|
36
|
-
return cleanObject(await tools.performanceTools.setScalability({
|
|
37
|
-
category,
|
|
38
|
-
level
|
|
39
|
-
}));
|
|
40
|
-
}
|
|
41
|
-
case 'set_resolution_scale': {
|
|
42
|
-
return cleanObject(await tools.performanceTools.setResolutionScale({
|
|
43
|
-
scale: args.scale
|
|
44
|
-
}));
|
|
45
|
-
}
|
|
46
|
-
case 'set_vsync': {
|
|
47
|
-
return cleanObject(await tools.performanceTools.setVSync({
|
|
48
|
-
enabled: args.enabled !== false
|
|
49
|
-
}));
|
|
50
|
-
}
|
|
51
|
-
case 'set_frame_rate_limit': {
|
|
52
|
-
return cleanObject(await tools.performanceTools.setFrameRateLimit({
|
|
53
|
-
maxFPS: args.maxFPS
|
|
54
|
-
}));
|
|
55
|
-
}
|
|
56
|
-
case 'enable_gpu_timing': {
|
|
57
|
-
return cleanObject(await tools.performanceTools.enableGPUTiming({
|
|
58
|
-
enabled: args.enabled !== false
|
|
59
|
-
}));
|
|
60
|
-
}
|
|
61
|
-
case 'generate_memory_report': {
|
|
62
|
-
return cleanObject(await tools.performanceTools.generateMemoryReport({
|
|
63
|
-
detailed: args.detailed,
|
|
64
|
-
outputPath: args.outputPath
|
|
65
|
-
}));
|
|
66
|
-
}
|
|
67
|
-
case 'configure_texture_streaming': {
|
|
68
|
-
return cleanObject(await tools.performanceTools.configureTextureStreaming({
|
|
69
|
-
enabled: args.enabled !== false,
|
|
70
|
-
poolSize: args.poolSize,
|
|
71
|
-
boostPlayerLocation: args.boostPlayerLocation
|
|
72
|
-
}));
|
|
73
|
-
}
|
|
74
|
-
case 'configure_lod': {
|
|
75
|
-
return cleanObject(await tools.performanceTools.configureLOD({
|
|
76
|
-
forceLOD: args.forceLOD,
|
|
77
|
-
lodBias: args.lodBias,
|
|
78
|
-
distanceScale: args.distanceScale
|
|
79
|
-
}));
|
|
80
|
-
}
|
|
81
|
-
case 'apply_baseline_settings': {
|
|
82
|
-
return cleanObject(await tools.performanceTools.applyBaselinePerformanceSettings({
|
|
83
|
-
distanceScale: args.distanceScale,
|
|
84
|
-
skeletalBias: args.skeletalBias,
|
|
85
|
-
vsync: args.vsync,
|
|
86
|
-
maxFPS: args.maxFPS,
|
|
87
|
-
hzb: args.hzb
|
|
88
|
-
}));
|
|
89
|
-
}
|
|
90
|
-
case 'optimize_draw_calls':
|
|
91
|
-
case 'merge_actors': {
|
|
92
|
-
// If action is merge_actors, force mergeActors param to true
|
|
93
|
-
const mergeParams = action === 'merge_actors' ? { ...args, mergeActors: true } : args;
|
|
94
|
-
return cleanObject(await tools.performanceTools.optimizeDrawCalls({
|
|
95
|
-
enableInstancing: mergeParams.enableInstancing,
|
|
96
|
-
enableBatching: mergeParams.enableBatching,
|
|
97
|
-
mergeActors: mergeParams.mergeActors,
|
|
98
|
-
actors: mergeParams.actors
|
|
99
|
-
}));
|
|
100
|
-
}
|
|
101
|
-
case 'configure_occlusion_culling': {
|
|
102
|
-
return cleanObject(await tools.performanceTools.configureOcclusionCulling({
|
|
103
|
-
enabled: args.enabled !== false,
|
|
104
|
-
method: args.method,
|
|
105
|
-
freezeRendering: args.freezeRendering
|
|
106
|
-
}));
|
|
107
|
-
}
|
|
108
|
-
case 'optimize_shaders': {
|
|
109
|
-
return cleanObject(await tools.performanceTools.optimizeShaders({
|
|
110
|
-
compileOnDemand: args.compileOnDemand,
|
|
111
|
-
cacheShaders: args.cacheShaders,
|
|
112
|
-
reducePermutations: args.reducePermutations
|
|
113
|
-
}));
|
|
114
|
-
}
|
|
115
|
-
case 'configure_nanite': {
|
|
116
|
-
return cleanObject(await tools.performanceTools.configureNanite({
|
|
117
|
-
enabled: args.enabled !== false,
|
|
118
|
-
maxPixelsPerEdge: args.maxPixelsPerEdge,
|
|
119
|
-
streamingPoolSize: args.streamingPoolSize
|
|
120
|
-
}));
|
|
121
|
-
}
|
|
122
|
-
case 'configure_world_partition': {
|
|
123
|
-
return cleanObject(await tools.performanceTools.configureWorldPartition({
|
|
124
|
-
enabled: args.enabled !== false,
|
|
125
|
-
streamingDistance: args.streamingDistance,
|
|
126
|
-
cellSize: args.cellSize
|
|
127
|
-
}));
|
|
128
|
-
}
|
|
129
|
-
default:
|
|
130
|
-
throw new Error(`Unknown performance action: ${action}`);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { cleanObject } from '../../utils/safe-json.js';
|
|
2
|
-
import { ITools } from '../../types/tool-interfaces.js';
|
|
3
|
-
import type { PipelineArgs } from '../../types/handler-types.js';
|
|
4
|
-
import { executeAutomationRequest } from './common-handlers.js';
|
|
5
|
-
import { spawn } from 'child_process';
|
|
6
|
-
import path from 'path';
|
|
7
|
-
import fs from 'fs';
|
|
8
|
-
|
|
9
|
-
export async function handlePipelineTools(action: string, args: PipelineArgs, tools: ITools) {
|
|
10
|
-
switch (action) {
|
|
11
|
-
case 'run_ubt': {
|
|
12
|
-
const target = args.target;
|
|
13
|
-
const platform = args.platform || 'Win64';
|
|
14
|
-
const configuration = args.configuration || 'Development';
|
|
15
|
-
const extraArgs = args.arguments || '';
|
|
16
|
-
|
|
17
|
-
if (!target) {
|
|
18
|
-
throw new Error('Target is required for run_ubt');
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// Try to find UnrealBuildTool
|
|
22
|
-
let ubtPath = 'UnrealBuildTool'; // Assume in PATH by default
|
|
23
|
-
const enginePath = process.env.UE_ENGINE_PATH || process.env.UNREAL_ENGINE_PATH;
|
|
24
|
-
|
|
25
|
-
if (enginePath) {
|
|
26
|
-
const possiblePath = path.join(enginePath, 'Engine', 'Binaries', 'DotNET', 'UnrealBuildTool', 'UnrealBuildTool.exe');
|
|
27
|
-
if (fs.existsSync(possiblePath)) {
|
|
28
|
-
ubtPath = possiblePath;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
let projectPath = process.env.UE_PROJECT_PATH;
|
|
33
|
-
if (!projectPath && args.projectPath) {
|
|
34
|
-
projectPath = args.projectPath;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (!projectPath) {
|
|
38
|
-
throw new Error('UE_PROJECT_PATH environment variable is not set and no projectPath argument was provided.');
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// If projectPath points to a .uproject file, use it. If it's a directory, look for a .uproject file.
|
|
42
|
-
let uprojectFile = projectPath;
|
|
43
|
-
if (!uprojectFile.endsWith('.uproject')) {
|
|
44
|
-
// Find first .uproject in the directory
|
|
45
|
-
try {
|
|
46
|
-
const files = fs.readdirSync(projectPath);
|
|
47
|
-
const found = files.find(f => f.endsWith('.uproject'));
|
|
48
|
-
if (found) {
|
|
49
|
-
uprojectFile = path.join(projectPath, found);
|
|
50
|
-
}
|
|
51
|
-
} catch (_e) {
|
|
52
|
-
throw new Error(`Could not read project directory: ${projectPath}`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const cmdArgs = [
|
|
57
|
-
target,
|
|
58
|
-
platform,
|
|
59
|
-
configuration,
|
|
60
|
-
`-Project="${uprojectFile}"`,
|
|
61
|
-
extraArgs
|
|
62
|
-
].filter(Boolean);
|
|
63
|
-
|
|
64
|
-
return new Promise((resolve) => {
|
|
65
|
-
const child = spawn(ubtPath, cmdArgs, { shell: true });
|
|
66
|
-
|
|
67
|
-
const MAX_OUTPUT_SIZE = 20 * 1024; // 20KB cap
|
|
68
|
-
let stdout = '';
|
|
69
|
-
let stderr = '';
|
|
70
|
-
|
|
71
|
-
child.stdout.on('data', (data) => {
|
|
72
|
-
const str = data.toString();
|
|
73
|
-
process.stderr.write(str); // Stream to server console (stderr to avoid MCP corruption)
|
|
74
|
-
stdout += str;
|
|
75
|
-
if (stdout.length > MAX_OUTPUT_SIZE) {
|
|
76
|
-
stdout = stdout.substring(stdout.length - MAX_OUTPUT_SIZE);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
child.stderr.on('data', (data) => {
|
|
81
|
-
const str = data.toString();
|
|
82
|
-
process.stderr.write(str); // Stream to server console
|
|
83
|
-
stderr += str;
|
|
84
|
-
if (stderr.length > MAX_OUTPUT_SIZE) {
|
|
85
|
-
stderr = stderr.substring(stderr.length - MAX_OUTPUT_SIZE);
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
child.on('close', (code) => {
|
|
90
|
-
const truncatedNote = (stdout.length >= MAX_OUTPUT_SIZE || stderr.length >= MAX_OUTPUT_SIZE)
|
|
91
|
-
? '\n[Output truncated for response payload]'
|
|
92
|
-
: '';
|
|
93
|
-
|
|
94
|
-
if (code === 0) {
|
|
95
|
-
resolve({
|
|
96
|
-
success: true,
|
|
97
|
-
message: 'UnrealBuildTool finished successfully',
|
|
98
|
-
output: stdout + truncatedNote,
|
|
99
|
-
command: `${ubtPath} ${cmdArgs.join(' ')}`
|
|
100
|
-
});
|
|
101
|
-
} else {
|
|
102
|
-
resolve({
|
|
103
|
-
success: false,
|
|
104
|
-
error: 'UBT_FAILED',
|
|
105
|
-
message: `UnrealBuildTool failed with code ${code}`,
|
|
106
|
-
output: stdout + truncatedNote,
|
|
107
|
-
errorOutput: stderr + truncatedNote,
|
|
108
|
-
command: `${ubtPath} ${cmdArgs.join(' ')}`
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
child.on('error', (err) => {
|
|
114
|
-
resolve({
|
|
115
|
-
success: false,
|
|
116
|
-
error: 'SPAWN_FAILED',
|
|
117
|
-
message: `Failed to spawn UnrealBuildTool: ${err.message}`,
|
|
118
|
-
command: `${ubtPath} ${cmdArgs.join(' ')}`
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
default:
|
|
124
|
-
// Fallback to automation bridge if we add more actions later that are bridge-supported
|
|
125
|
-
const res = await executeAutomationRequest(tools, 'manage_pipeline', { ...args, subAction: action }, 'Automation bridge not available for manage_pipeline');
|
|
126
|
-
return cleanObject(res);
|
|
127
|
-
}
|
|
128
|
-
}
|