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
package/src/tools/performance.ts
DELETED
|
@@ -1,661 +0,0 @@
|
|
|
1
|
-
// Performance tools for Unreal Engine
|
|
2
|
-
import { UnrealBridge } from '../unreal-bridge.js';
|
|
3
|
-
import { AutomationBridge } from '../automation/index.js';
|
|
4
|
-
import { Logger } from '../utils/logger.js';
|
|
5
|
-
|
|
6
|
-
export class PerformanceTools {
|
|
7
|
-
private log = new Logger('PerformanceTools');
|
|
8
|
-
private automationBridge?: AutomationBridge;
|
|
9
|
-
|
|
10
|
-
constructor(private bridge: UnrealBridge, automationBridge?: AutomationBridge) {
|
|
11
|
-
this.automationBridge = automationBridge;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
setAutomationBridge(automationBridge?: AutomationBridge) {
|
|
15
|
-
this.automationBridge = automationBridge;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// Start profiling
|
|
19
|
-
async startProfiling(params: {
|
|
20
|
-
type: 'CPU' | 'GPU' | 'Memory' | 'RenderThread' | 'GameThread' | 'All';
|
|
21
|
-
duration?: number;
|
|
22
|
-
}) {
|
|
23
|
-
if (this.automationBridge) {
|
|
24
|
-
try {
|
|
25
|
-
const response = await this.automationBridge.sendAutomationRequest('start_profiling', {
|
|
26
|
-
type: params.type,
|
|
27
|
-
duration: params.duration
|
|
28
|
-
});
|
|
29
|
-
if (response.success) return { success: true, message: `${params.type} profiling started (bridge)` };
|
|
30
|
-
} catch (_e) {
|
|
31
|
-
// Fallback
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const commands: string[] = [];
|
|
36
|
-
|
|
37
|
-
switch (params.type) {
|
|
38
|
-
case 'CPU':
|
|
39
|
-
commands.push('stat startfile');
|
|
40
|
-
break;
|
|
41
|
-
case 'GPU':
|
|
42
|
-
commands.push('profilegpu');
|
|
43
|
-
break;
|
|
44
|
-
case 'Memory':
|
|
45
|
-
commands.push('stat memory');
|
|
46
|
-
break;
|
|
47
|
-
case 'RenderThread':
|
|
48
|
-
commands.push('stat renderthread');
|
|
49
|
-
break;
|
|
50
|
-
case 'GameThread':
|
|
51
|
-
commands.push('stat game');
|
|
52
|
-
break;
|
|
53
|
-
case 'All':
|
|
54
|
-
commands.push('stat startfile');
|
|
55
|
-
commands.push('profilegpu');
|
|
56
|
-
commands.push('stat memory');
|
|
57
|
-
break;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (params.duration) {
|
|
61
|
-
commands.push(`stat stopfile ${params.duration}`);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
await this.bridge.executeConsoleCommands(commands);
|
|
65
|
-
|
|
66
|
-
return { success: true, message: `${params.type} profiling started` };
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Stop profiling
|
|
70
|
-
async stopProfiling() {
|
|
71
|
-
if (this.automationBridge) {
|
|
72
|
-
try {
|
|
73
|
-
const response = await this.automationBridge.sendAutomationRequest('stop_profiling', {});
|
|
74
|
-
if (response.success) return { success: true, message: 'Profiling stopped (bridge)' };
|
|
75
|
-
} catch (_e) {
|
|
76
|
-
// Fallback
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const commands = [
|
|
81
|
-
'stat stopfile',
|
|
82
|
-
'stat none'
|
|
83
|
-
];
|
|
84
|
-
|
|
85
|
-
await this.bridge.executeConsoleCommands(commands);
|
|
86
|
-
|
|
87
|
-
return { success: true, message: 'Profiling stopped' };
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Show FPS
|
|
91
|
-
async showFPS(params: {
|
|
92
|
-
enabled: boolean;
|
|
93
|
-
verbose?: boolean;
|
|
94
|
-
}) {
|
|
95
|
-
const startTime = Date.now();
|
|
96
|
-
this.log.debug('Starting showFPS with params:', params);
|
|
97
|
-
|
|
98
|
-
if (this.automationBridge) {
|
|
99
|
-
try {
|
|
100
|
-
const response = await this.automationBridge.sendAutomationRequest('show_fps', {
|
|
101
|
-
enabled: params.enabled,
|
|
102
|
-
verbose: params.verbose
|
|
103
|
-
});
|
|
104
|
-
if (response.success) return {
|
|
105
|
-
success: true,
|
|
106
|
-
message: params.enabled ? 'FPS display enabled (bridge)' : 'FPS display disabled (bridge)',
|
|
107
|
-
fpsVisible: params.enabled
|
|
108
|
-
};
|
|
109
|
-
} catch (_e) {
|
|
110
|
-
// Fallback
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
try {
|
|
115
|
-
// Use stat fps as requested - shows FPS counter
|
|
116
|
-
// For more detailed timing info, use 'stat unit' instead
|
|
117
|
-
const command = params.enabled
|
|
118
|
-
? (params.verbose ? 'stat unit' : 'stat fps')
|
|
119
|
-
: 'stat none';
|
|
120
|
-
|
|
121
|
-
this.log.debug(`Executing command: ${command}`);
|
|
122
|
-
await this.bridge.executeConsoleCommand(command);
|
|
123
|
-
this.log.debug(`Command completed in ${Date.now() - startTime}ms`);
|
|
124
|
-
return {
|
|
125
|
-
success: true,
|
|
126
|
-
message: params.enabled ? 'FPS display enabled' : 'FPS display disabled',
|
|
127
|
-
fpsVisible: params.enabled,
|
|
128
|
-
command: command
|
|
129
|
-
};
|
|
130
|
-
} catch (error) {
|
|
131
|
-
return {
|
|
132
|
-
success: false,
|
|
133
|
-
error: `Failed to ${params.enabled ? 'enable' : 'disable'} FPS display: ${error}`,
|
|
134
|
-
fpsVisible: false
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// Show performance stats
|
|
140
|
-
async showStats(params: {
|
|
141
|
-
category: 'Unit' | 'FPS' | 'Memory' | 'Game' | 'Slate' | 'Engine' | 'RHI' | 'Streaming' | 'SceneRendering' | 'Physics' | 'Navigation' | 'Particles' | 'Audio';
|
|
142
|
-
enabled: boolean;
|
|
143
|
-
}) {
|
|
144
|
-
if (this.automationBridge) {
|
|
145
|
-
try {
|
|
146
|
-
const response = await this.automationBridge.sendAutomationRequest('show_stats', {
|
|
147
|
-
category: params.category,
|
|
148
|
-
enabled: params.enabled
|
|
149
|
-
});
|
|
150
|
-
if (response.success) return { success: true, message: `Stat '${params.category}' configured (bridge)` };
|
|
151
|
-
} catch (_e) {
|
|
152
|
-
// Fallback
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const command = params.enabled
|
|
157
|
-
? `stat ${params.category.toLowerCase()}`
|
|
158
|
-
: 'stat none';
|
|
159
|
-
|
|
160
|
-
return this.bridge.executeConsoleCommand(command);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
// Set scalability settings using console commands
|
|
164
|
-
async setScalability(params: {
|
|
165
|
-
category: 'ViewDistance' | 'AntiAliasing' | 'PostProcessing' | 'PostProcess' | 'Shadows' | 'GlobalIllumination' | 'Reflections' | 'Textures' | 'Effects' | 'Foliage' | 'Shading';
|
|
166
|
-
level: 0 | 1 | 2 | 3 | 4; // 0=Low, 1=Medium, 2=High, 3=Epic, 4=Cinematic
|
|
167
|
-
}) {
|
|
168
|
-
if (this.automationBridge) {
|
|
169
|
-
try {
|
|
170
|
-
const response = await this.automationBridge.sendAutomationRequest('set_scalability', {
|
|
171
|
-
category: params.category,
|
|
172
|
-
level: params.level
|
|
173
|
-
});
|
|
174
|
-
if (response.success) return { success: true, message: `${params.category} quality set to level ${params.level} (bridge)` };
|
|
175
|
-
} catch (_e) {
|
|
176
|
-
// Fallback
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// Map incoming category to the base name expected by "sg.<Base>Quality"
|
|
181
|
-
// Note: Several CVars use singular form (Shadow/Texture/Reflection)
|
|
182
|
-
const categoryBaseMap: Record<string, string> = {
|
|
183
|
-
ViewDistance: 'ViewDistance',
|
|
184
|
-
AntiAliasing: 'AntiAliasing',
|
|
185
|
-
PostProcessing: 'PostProcess',
|
|
186
|
-
PostProcess: 'PostProcess',
|
|
187
|
-
Shadows: 'Shadow',
|
|
188
|
-
GlobalIllumination: 'GlobalIllumination',
|
|
189
|
-
Reflections: 'Reflection',
|
|
190
|
-
Textures: 'Texture',
|
|
191
|
-
Effects: 'Effects',
|
|
192
|
-
Foliage: 'Foliage',
|
|
193
|
-
Shading: 'Shading',
|
|
194
|
-
};
|
|
195
|
-
const requestedLevel = Number(params.level);
|
|
196
|
-
if (!Number.isInteger(requestedLevel) || requestedLevel < 0 || requestedLevel > 4) {
|
|
197
|
-
return {
|
|
198
|
-
success: false,
|
|
199
|
-
error: 'Invalid scalability level. Expected integer between 0 and 4.'
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
const base = categoryBaseMap[params.category] || params.category;
|
|
204
|
-
|
|
205
|
-
// Use direct console command to set with highest priority (SetByConsole)
|
|
206
|
-
// This avoids conflicts with the scalability system
|
|
207
|
-
const setCommand = `sg.${base}Quality ${requestedLevel}`;
|
|
208
|
-
|
|
209
|
-
// Apply the console command directly
|
|
210
|
-
await this.bridge.executeConsoleCommand(setCommand);
|
|
211
|
-
|
|
212
|
-
return {
|
|
213
|
-
success: true,
|
|
214
|
-
message: `${params.category} quality set to level ${requestedLevel}`,
|
|
215
|
-
method: 'Console'
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
// Set resolution scale
|
|
220
|
-
async setResolutionScale(params: {
|
|
221
|
-
scale: number; // Accepts both percentage (10-200) and multiplier (0.1-2.0)
|
|
222
|
-
}) {
|
|
223
|
-
// Validate input
|
|
224
|
-
if (params.scale === undefined || params.scale === null || isNaN(params.scale)) {
|
|
225
|
-
return { success: false, error: 'Invalid scale parameter' };
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
// Intelligently detect if scale is a percentage (10-200) or multiplier (0.1-2.0)
|
|
229
|
-
// If scale >= 10, assume it's already a percentage value
|
|
230
|
-
let percentage: number;
|
|
231
|
-
if (params.scale >= 10) {
|
|
232
|
-
// User passed percentage directly (e.g., 100 for 100%)
|
|
233
|
-
percentage = Math.round(params.scale);
|
|
234
|
-
} else {
|
|
235
|
-
// User passed multiplier (e.g., 1.0 for 100%)
|
|
236
|
-
percentage = Math.round(params.scale * 100);
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
// Clamp to Unreal's valid range (10-200%)
|
|
240
|
-
const finalPercentage = Math.max(10, Math.min(200, percentage));
|
|
241
|
-
|
|
242
|
-
if (this.automationBridge) {
|
|
243
|
-
try {
|
|
244
|
-
const response = await this.automationBridge.sendAutomationRequest('set_resolution_scale', { scale: finalPercentage });
|
|
245
|
-
|
|
246
|
-
if (response.success) return { success: true, message: `Resolution scale set to ${finalPercentage}% (bridge)`, actualScale: finalPercentage / 100 };
|
|
247
|
-
} catch (_e) {
|
|
248
|
-
// Fallback
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
const command = `r.ScreenPercentage ${finalPercentage}`;
|
|
253
|
-
|
|
254
|
-
try {
|
|
255
|
-
await this.bridge.executeConsoleCommand(command);
|
|
256
|
-
return {
|
|
257
|
-
success: true,
|
|
258
|
-
message: `Resolution scale set to ${finalPercentage}%`,
|
|
259
|
-
actualScale: finalPercentage / 100
|
|
260
|
-
};
|
|
261
|
-
} catch (e) {
|
|
262
|
-
return { success: false, error: `Failed to set resolution scale: ${e}` };
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// Enable/disable vsync
|
|
267
|
-
async setVSync(params: {
|
|
268
|
-
enabled: boolean;
|
|
269
|
-
}) {
|
|
270
|
-
if (this.automationBridge) {
|
|
271
|
-
try {
|
|
272
|
-
const response = await this.automationBridge.sendAutomationRequest('set_vsync', { enabled: params.enabled });
|
|
273
|
-
if (response.success) return { success: true, message: 'VSync configured (bridge)' };
|
|
274
|
-
} catch (_e) {
|
|
275
|
-
// Fallback
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
const command = `r.VSync ${params.enabled ? 1 : 0}`;
|
|
279
|
-
return this.bridge.executeConsoleCommand(command);
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
// Set frame rate limit
|
|
283
|
-
async setFrameRateLimit(params: {
|
|
284
|
-
maxFPS: number; // 0 for unlimited
|
|
285
|
-
}) {
|
|
286
|
-
if (this.automationBridge) {
|
|
287
|
-
try {
|
|
288
|
-
const response = await this.automationBridge.sendAutomationRequest('set_frame_rate_limit', { maxFPS: params.maxFPS });
|
|
289
|
-
if (response.success) return { success: true, message: 'Max FPS set (bridge)' };
|
|
290
|
-
} catch (_e) {
|
|
291
|
-
// Fallback
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
const command = `t.MaxFPS ${params.maxFPS}`;
|
|
295
|
-
return this.bridge.executeConsoleCommand(command);
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
// Enable GPU timing
|
|
299
|
-
async enableGPUTiming(params: {
|
|
300
|
-
enabled: boolean;
|
|
301
|
-
}) {
|
|
302
|
-
// Note: C++ handler doesn't seem to have explicit 'enable_gpu_timing' in the list I saw earlier?
|
|
303
|
-
// Checking McpAutomationBridge_PerformanceHandlers.cpp content provided:
|
|
304
|
-
// It has: generate_memory_report, start/stop_profiling, show_fps, show_stats, set_scalability, set_resolution_scale, set_vsync, set_frame_rate_limit, configure_nanite, configure_lod.
|
|
305
|
-
// IT DOES NOT HAVE enable_gpu_timing.
|
|
306
|
-
// So we stick to console command for this one, or add it to C++ later.
|
|
307
|
-
// I will NOT add bridge call here to avoid failure since I know it's missing.
|
|
308
|
-
|
|
309
|
-
const command = `r.GPUStatsEnabled ${params.enabled ? 1 : 0}`;
|
|
310
|
-
return this.bridge.executeConsoleCommand(command);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
// Memory report
|
|
314
|
-
async generateMemoryReport(params: {
|
|
315
|
-
detailed?: boolean;
|
|
316
|
-
outputPath?: string;
|
|
317
|
-
}) {
|
|
318
|
-
// If output path is specified, use Automation Bridge for file writing
|
|
319
|
-
if (this.automationBridge) {
|
|
320
|
-
try {
|
|
321
|
-
const response = await this.automationBridge.sendAutomationRequest('generate_memory_report', {
|
|
322
|
-
detailed: params.detailed ?? false,
|
|
323
|
-
outputPath: params.outputPath
|
|
324
|
-
});
|
|
325
|
-
|
|
326
|
-
// Even if no output path, bridge can run the report
|
|
327
|
-
if (response.success) {
|
|
328
|
-
return { success: true, message: response.message || 'Memory report generated' };
|
|
329
|
-
}
|
|
330
|
-
} catch (error) {
|
|
331
|
-
// Fallback only if no output path (since console can't save to file reliably)
|
|
332
|
-
if (params.outputPath) {
|
|
333
|
-
return { success: false, error: `Failed to generate memory report: ${error instanceof Error ? error.message : String(error)}` };
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
const commands: string[] = [];
|
|
339
|
-
|
|
340
|
-
if (params.detailed) {
|
|
341
|
-
commands.push('memreport -full');
|
|
342
|
-
} else {
|
|
343
|
-
commands.push('memreport');
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
// Writing reports to disk via console is not supported
|
|
347
|
-
if (params.outputPath) {
|
|
348
|
-
throw new Error('Saving memreport to a file requires Automation Bridge support');
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
await this.bridge.executeConsoleCommands(commands);
|
|
352
|
-
|
|
353
|
-
return { success: true, message: 'Memory report generated' };
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
// Texture streaming
|
|
357
|
-
async configureTextureStreaming(params: {
|
|
358
|
-
enabled: boolean;
|
|
359
|
-
poolSize?: number; // MB
|
|
360
|
-
boostPlayerLocation?: boolean;
|
|
361
|
-
}) {
|
|
362
|
-
if (this.automationBridge) {
|
|
363
|
-
try {
|
|
364
|
-
const response = await this.automationBridge.sendAutomationRequest('configure_texture_streaming', {
|
|
365
|
-
enabled: params.enabled,
|
|
366
|
-
poolSize: params.poolSize,
|
|
367
|
-
boostPlayerLocation: params.boostPlayerLocation
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
if (response.success) return { success: true, message: response.message || 'Texture streaming configured (bridge)' };
|
|
371
|
-
} catch (_error) {
|
|
372
|
-
// Fallback
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
if (params.boostPlayerLocation && !this.automationBridge) {
|
|
377
|
-
throw new Error('Boosting player location for streaming requires Automation Bridge support');
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
const commands: string[] = [];
|
|
381
|
-
|
|
382
|
-
commands.push(`r.TextureStreaming ${params.enabled ? 1 : 0}`);
|
|
383
|
-
|
|
384
|
-
if (params.poolSize !== undefined) {
|
|
385
|
-
commands.push(`r.Streaming.PoolSize ${params.poolSize}`);
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
await this.bridge.executeConsoleCommands(commands);
|
|
389
|
-
|
|
390
|
-
return { success: true, message: 'Texture streaming configured' };
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
// LOD settings
|
|
394
|
-
async configureLOD(params: {
|
|
395
|
-
forceLOD?: number;
|
|
396
|
-
lodBias?: number; // skeletal LOD bias (int)
|
|
397
|
-
distanceScale?: number; // distance scale (float) applied to both static and skeletal
|
|
398
|
-
}) {
|
|
399
|
-
if (this.automationBridge) {
|
|
400
|
-
try {
|
|
401
|
-
const response = await this.automationBridge.sendAutomationRequest('configure_lod', {
|
|
402
|
-
forceLOD: params.forceLOD,
|
|
403
|
-
lodBias: params.lodBias
|
|
404
|
-
// Note: C++ handler doesn't seem to have explicit 'distanceScale'.
|
|
405
|
-
// We will stick to console for proper implementation of distanceScale
|
|
406
|
-
});
|
|
407
|
-
|
|
408
|
-
// If we have distanceScale, we still need to apply it via console as C++ seems to miss it
|
|
409
|
-
if (params.distanceScale !== undefined) {
|
|
410
|
-
await this.bridge.executeConsoleCommand(`r.StaticMeshLODDistanceScale ${params.distanceScale}`);
|
|
411
|
-
await this.bridge.executeConsoleCommand(`r.SkeletalMeshLODDistanceScale ${params.distanceScale}`);
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
if (response.success) return { success: true, message: 'LOD settings configured' };
|
|
415
|
-
} catch (_e) {
|
|
416
|
-
// Fallback
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
const commands: string[] = [];
|
|
421
|
-
|
|
422
|
-
if (params.forceLOD !== undefined) {
|
|
423
|
-
commands.push(`r.ForceLOD ${params.forceLOD}`);
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
if (params.lodBias !== undefined) {
|
|
427
|
-
// Skeletal mesh LOD bias is an integer bias value
|
|
428
|
-
commands.push(`r.SkeletalMeshLODBias ${params.lodBias}`);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
if (params.distanceScale !== undefined) {
|
|
432
|
-
// Apply distance scale to both static and skeletal meshes
|
|
433
|
-
commands.push(`r.StaticMeshLODDistanceScale ${params.distanceScale}`);
|
|
434
|
-
commands.push(`r.SkeletalMeshLODDistanceScale ${params.distanceScale}`);
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
await this.bridge.executeConsoleCommands(commands);
|
|
438
|
-
|
|
439
|
-
return { success: true, message: 'LOD settings configured' };
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
// Apply a baseline performance profile (explicit CVar enforcement)
|
|
443
|
-
async applyBaselinePerformanceSettings(params?: {
|
|
444
|
-
distanceScale?: number; // default 1.0
|
|
445
|
-
skeletalBias?: number; // default 0
|
|
446
|
-
vsync?: boolean; // default false
|
|
447
|
-
maxFPS?: number; // default 60
|
|
448
|
-
hzb?: boolean; // default true
|
|
449
|
-
}) {
|
|
450
|
-
// This is a composite helper, stick to console or individual bridge calls.
|
|
451
|
-
// Console is efficient enough for batch cvar setting.
|
|
452
|
-
const p = {
|
|
453
|
-
distanceScale: params?.distanceScale ?? 1.0,
|
|
454
|
-
skeletalBias: params?.skeletalBias ?? 0,
|
|
455
|
-
vsync: params?.vsync ?? false,
|
|
456
|
-
maxFPS: params?.maxFPS ?? 60,
|
|
457
|
-
hzb: params?.hzb ?? true,
|
|
458
|
-
};
|
|
459
|
-
|
|
460
|
-
const commands = [
|
|
461
|
-
`r.StaticMeshLODDistanceScale ${p.distanceScale}`,
|
|
462
|
-
`r.SkeletalMeshLODDistanceScale ${p.distanceScale}`,
|
|
463
|
-
`r.SkeletalMeshLODBias ${p.skeletalBias}`,
|
|
464
|
-
`r.HZBOcclusion ${p.hzb ? 1 : 0}`,
|
|
465
|
-
`r.VSync ${p.vsync ? 1 : 0}`,
|
|
466
|
-
`t.MaxFPS ${p.maxFPS}`,
|
|
467
|
-
];
|
|
468
|
-
|
|
469
|
-
await this.bridge.executeConsoleCommands(commands);
|
|
470
|
-
|
|
471
|
-
return { success: true, message: 'Baseline performance settings applied', params: p };
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
// Draw call optimization
|
|
475
|
-
async optimizeDrawCalls(params: {
|
|
476
|
-
enableInstancing?: boolean;
|
|
477
|
-
|
|
478
|
-
mergeActors?: boolean;
|
|
479
|
-
actors?: string[];
|
|
480
|
-
}) {
|
|
481
|
-
// If merging actors, bridge is required and actors must be provided
|
|
482
|
-
if (params.mergeActors) {
|
|
483
|
-
if (this.automationBridge) {
|
|
484
|
-
try {
|
|
485
|
-
const actors = Array.isArray(params.actors)
|
|
486
|
-
? params.actors.filter((name): name is string => typeof name === 'string' && name.length > 0)
|
|
487
|
-
: undefined;
|
|
488
|
-
|
|
489
|
-
if (!actors || actors.length < 2) {
|
|
490
|
-
return {
|
|
491
|
-
success: false,
|
|
492
|
-
error: 'Merge actors requires an "actors" array with at least 2 valid actor names.'
|
|
493
|
-
};
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
const payload: any = {
|
|
497
|
-
enableInstancing: params.enableInstancing,
|
|
498
|
-
mergeActors: params.mergeActors,
|
|
499
|
-
actors: actors
|
|
500
|
-
};
|
|
501
|
-
|
|
502
|
-
const response = await this.automationBridge.sendAutomationRequest('merge_actors', payload);
|
|
503
|
-
|
|
504
|
-
return response.success
|
|
505
|
-
? { success: true, message: response.message || 'Actors merged for optimization' }
|
|
506
|
-
: { success: false, error: response.message || response.error || 'Failed to merge actors' };
|
|
507
|
-
} catch (error) {
|
|
508
|
-
return { success: false, error: `Failed to merge actors: ${error instanceof Error ? error.message : String(error)}` };
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
throw new Error('Actor merging requires Automation Bridge support');
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
const commands: string[] = [];
|
|
515
|
-
|
|
516
|
-
if (params.enableInstancing !== undefined) {
|
|
517
|
-
commands.push(`r.MeshDrawCommands.DynamicInstancing ${params.enableInstancing ? 1 : 0}`);
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
// Avoid using r.RHICmdBypass; it's a low-level debug toggle and not suitable for general batching control
|
|
521
|
-
|
|
522
|
-
await this.bridge.executeConsoleCommands(commands);
|
|
523
|
-
|
|
524
|
-
return { success: true, message: 'Draw call optimization configured' };
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
// Occlusion culling
|
|
528
|
-
async configureOcclusionCulling(params: {
|
|
529
|
-
enabled: boolean;
|
|
530
|
-
method?: 'Hardware' | 'Software' | 'Hierarchical';
|
|
531
|
-
freezeRendering?: boolean;
|
|
532
|
-
}) {
|
|
533
|
-
const commands: string[] = [];
|
|
534
|
-
|
|
535
|
-
// Enable/disable HZB occlusion (boolean)
|
|
536
|
-
commands.push(`r.HZBOcclusion ${params.enabled ? 1 : 0}`);
|
|
537
|
-
|
|
538
|
-
// Optional freeze rendering toggle
|
|
539
|
-
if (params.freezeRendering !== undefined) {
|
|
540
|
-
commands.push(`FreezeRendering ${params.freezeRendering ? 1 : 0}`);
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
await this.bridge.executeConsoleCommands(commands);
|
|
544
|
-
|
|
545
|
-
return { success: true, message: 'Occlusion culling configured' };
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
// Shader compilation
|
|
549
|
-
async optimizeShaders(params: {
|
|
550
|
-
compileOnDemand?: boolean;
|
|
551
|
-
cacheShaders?: boolean;
|
|
552
|
-
reducePermutations?: boolean;
|
|
553
|
-
}) {
|
|
554
|
-
const commands: string[] = [];
|
|
555
|
-
|
|
556
|
-
if (params.compileOnDemand !== undefined) {
|
|
557
|
-
commands.push(`r.ShaderDevelopmentMode ${params.compileOnDemand ? 1 : 0}`);
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
if (params.cacheShaders !== undefined) {
|
|
561
|
-
commands.push(`r.ShaderPipelineCache.Enabled ${params.cacheShaders ? 1 : 0}`);
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
if (params.reducePermutations) {
|
|
565
|
-
commands.push('RecompileShaders changed');
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
await this.bridge.executeConsoleCommands(commands);
|
|
569
|
-
|
|
570
|
-
return { success: true, message: 'Shader optimization configured' };
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
// Nanite settings
|
|
574
|
-
async configureNanite(params: {
|
|
575
|
-
enabled: boolean;
|
|
576
|
-
maxPixelsPerEdge?: number;
|
|
577
|
-
streamingPoolSize?: number;
|
|
578
|
-
}) {
|
|
579
|
-
if (this.automationBridge) {
|
|
580
|
-
try {
|
|
581
|
-
const response = await this.automationBridge.sendAutomationRequest('configure_nanite', {
|
|
582
|
-
enabled: params.enabled,
|
|
583
|
-
maxPixelsPerEdge: params.maxPixelsPerEdge,
|
|
584
|
-
streamingPoolSize: params.streamingPoolSize
|
|
585
|
-
});
|
|
586
|
-
// C++ handler snippet only showed `r.Nanite`.
|
|
587
|
-
// Checking snippet: `if (CVar) CVar->Set(bEnabled ? 1 : 0);`
|
|
588
|
-
// It missed maxPixelsPerEdge and streamingPoolSize in the snippet I read.
|
|
589
|
-
// Let's rely on fallback or partial console commands for the extras.
|
|
590
|
-
if (params.maxPixelsPerEdge !== undefined) {
|
|
591
|
-
await this.bridge.executeConsoleCommand(`r.Nanite.MaxPixelsPerEdge ${params.maxPixelsPerEdge}`);
|
|
592
|
-
}
|
|
593
|
-
if (params.streamingPoolSize !== undefined) {
|
|
594
|
-
await this.bridge.executeConsoleCommand(`r.Nanite.StreamingPoolSize ${params.streamingPoolSize}`);
|
|
595
|
-
}
|
|
596
|
-
|
|
597
|
-
if (response.success) return { success: true, message: 'Nanite configured' };
|
|
598
|
-
} catch (_e) {
|
|
599
|
-
// Fallback
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
|
|
603
|
-
const commands: string[] = [];
|
|
604
|
-
|
|
605
|
-
commands.push(`r.Nanite ${params.enabled ? 1 : 0}`);
|
|
606
|
-
|
|
607
|
-
if (params.maxPixelsPerEdge !== undefined) {
|
|
608
|
-
commands.push(`r.Nanite.MaxPixelsPerEdge ${params.maxPixelsPerEdge}`);
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
if (params.streamingPoolSize !== undefined) {
|
|
612
|
-
commands.push(`r.Nanite.StreamingPoolSize ${params.streamingPoolSize}`);
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
await this.bridge.executeConsoleCommands(commands);
|
|
616
|
-
|
|
617
|
-
return { success: true, message: 'Nanite configured' };
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
// World Partition streaming
|
|
621
|
-
async configureWorldPartition(params: {
|
|
622
|
-
enabled: boolean;
|
|
623
|
-
streamingDistance?: number;
|
|
624
|
-
cellSize?: number;
|
|
625
|
-
}) {
|
|
626
|
-
const commands: string[] = [];
|
|
627
|
-
|
|
628
|
-
commands.push(`wp.Runtime.EnableStreaming ${params.enabled ? 1 : 0}`);
|
|
629
|
-
|
|
630
|
-
if (params.streamingDistance !== undefined) {
|
|
631
|
-
commands.push(`wp.Runtime.StreamingDistance ${params.streamingDistance}`);
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
if (params.cellSize !== undefined) {
|
|
635
|
-
commands.push(`wp.Runtime.CellSize ${params.cellSize}`);
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
await this.bridge.executeConsoleCommands(commands);
|
|
639
|
-
|
|
640
|
-
return { success: true, message: 'World Partition configured' };
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
// Benchmark
|
|
644
|
-
async runBenchmark(params: {
|
|
645
|
-
duration?: number;
|
|
646
|
-
outputPath?: string;
|
|
647
|
-
}) {
|
|
648
|
-
const duration = params.duration || 60;
|
|
649
|
-
|
|
650
|
-
// Start recording and GPU profiling
|
|
651
|
-
await this.bridge.executeConsoleCommands(['stat startfile', 'profilegpu']);
|
|
652
|
-
|
|
653
|
-
// Wait for the requested duration
|
|
654
|
-
await new Promise(resolve => setTimeout(resolve, duration * 1000));
|
|
655
|
-
|
|
656
|
-
// Stop recording and clear stats
|
|
657
|
-
await this.bridge.executeConsoleCommands(['stat stopfile', 'stat none']);
|
|
658
|
-
|
|
659
|
-
return { success: true, message: `Benchmark completed for ${duration} seconds` };
|
|
660
|
-
}
|
|
661
|
-
}
|