unreal-engine-mcp-server 0.4.6 → 0.5.0
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/.env.example +26 -0
- package/.env.production +38 -7
- package/.eslintrc.json +0 -54
- package/.eslintrc.override.json +8 -0
- package/.github/ISSUE_TEMPLATE/bug_report.yml +94 -0
- package/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +56 -0
- package/.github/copilot-instructions.md +478 -45
- package/.github/dependabot.yml +19 -0
- package/.github/labeler.yml +24 -0
- package/.github/labels.yml +70 -0
- package/.github/pull_request_template.md +42 -0
- package/.github/release-drafter.yml +148 -0
- package/.github/workflows/auto-merge.yml +38 -0
- package/.github/workflows/ci.yml +38 -0
- package/.github/workflows/dependency-review.yml +17 -0
- package/.github/workflows/gemini-issue-triage.yml +172 -0
- package/.github/workflows/greetings.yml +23 -0
- package/.github/workflows/labeler.yml +16 -0
- package/.github/workflows/links.yml +80 -0
- package/.github/workflows/pr-size-labeler.yml +137 -0
- package/.github/workflows/publish-mcp.yml +12 -7
- package/.github/workflows/release-drafter.yml +23 -0
- package/.github/workflows/release.yml +112 -0
- package/.github/workflows/semantic-pull-request.yml +35 -0
- package/.github/workflows/smoke-test.yml +36 -0
- package/.github/workflows/stale.yml +28 -0
- package/CHANGELOG.md +269 -22
- package/CONTRIBUTING.md +140 -0
- package/README.md +166 -72
- package/claude_desktop_config_example.json +7 -6
- package/dist/automation/bridge.d.ts +50 -0
- package/dist/automation/bridge.js +452 -0
- package/dist/automation/connection-manager.d.ts +23 -0
- package/dist/automation/connection-manager.js +107 -0
- package/dist/automation/handshake.d.ts +11 -0
- package/dist/automation/handshake.js +89 -0
- package/dist/automation/index.d.ts +3 -0
- package/dist/automation/index.js +3 -0
- package/dist/automation/message-handler.d.ts +12 -0
- package/dist/automation/message-handler.js +149 -0
- package/dist/automation/request-tracker.d.ts +25 -0
- package/dist/automation/request-tracker.js +98 -0
- package/dist/automation/types.d.ts +130 -0
- package/dist/automation/types.js +2 -0
- package/dist/cli.js +32 -5
- package/dist/config.d.ts +27 -0
- package/dist/config.js +60 -0
- package/dist/constants.d.ts +12 -0
- package/dist/constants.js +12 -0
- package/dist/graphql/resolvers.d.ts +268 -0
- package/dist/graphql/resolvers.js +743 -0
- package/dist/graphql/schema.d.ts +5 -0
- package/dist/graphql/schema.js +437 -0
- package/dist/graphql/server.d.ts +26 -0
- package/dist/graphql/server.js +115 -0
- package/dist/graphql/types.d.ts +7 -0
- package/dist/graphql/types.js +2 -0
- package/dist/handlers/resource-handlers.d.ts +20 -0
- package/dist/handlers/resource-handlers.js +180 -0
- package/dist/index.d.ts +31 -18
- package/dist/index.js +119 -604
- package/dist/prompts/index.js +4 -4
- package/dist/resources/actors.d.ts +17 -12
- package/dist/resources/actors.js +56 -76
- package/dist/resources/assets.d.ts +6 -14
- package/dist/resources/assets.js +115 -147
- package/dist/resources/levels.d.ts +13 -13
- package/dist/resources/levels.js +25 -34
- package/dist/server/resource-registry.d.ts +20 -0
- package/dist/server/resource-registry.js +37 -0
- package/dist/server/tool-registry.d.ts +23 -0
- package/dist/server/tool-registry.js +322 -0
- package/dist/server-setup.d.ts +21 -0
- package/dist/server-setup.js +111 -0
- package/dist/services/health-monitor.d.ts +34 -0
- package/dist/services/health-monitor.js +105 -0
- package/dist/services/metrics-server.d.ts +11 -0
- package/dist/services/metrics-server.js +105 -0
- package/dist/tools/actors.d.ts +147 -9
- package/dist/tools/actors.js +350 -311
- package/dist/tools/animation.d.ts +135 -4
- package/dist/tools/animation.js +510 -411
- package/dist/tools/assets.d.ts +117 -19
- package/dist/tools/assets.js +259 -284
- package/dist/tools/audio.d.ts +102 -42
- package/dist/tools/audio.js +272 -685
- package/dist/tools/base-tool.d.ts +17 -0
- package/dist/tools/base-tool.js +46 -0
- package/dist/tools/behavior-tree.d.ts +94 -0
- package/dist/tools/behavior-tree.js +39 -0
- package/dist/tools/blueprint/helpers.d.ts +29 -0
- package/dist/tools/blueprint/helpers.js +182 -0
- package/dist/tools/blueprint.d.ts +228 -118
- package/dist/tools/blueprint.js +685 -832
- package/dist/tools/consolidated-tool-definitions.d.ts +5475 -1627
- package/dist/tools/consolidated-tool-definitions.js +829 -482
- package/dist/tools/consolidated-tool-handlers.d.ts +2 -1
- package/dist/tools/consolidated-tool-handlers.js +211 -1009
- package/dist/tools/debug.d.ts +143 -85
- package/dist/tools/debug.js +234 -180
- package/dist/tools/dynamic-handler-registry.d.ts +11 -0
- package/dist/tools/dynamic-handler-registry.js +101 -0
- package/dist/tools/editor.d.ts +139 -18
- package/dist/tools/editor.js +239 -244
- package/dist/tools/engine.d.ts +10 -4
- package/dist/tools/engine.js +13 -5
- package/dist/tools/environment.d.ts +36 -0
- package/dist/tools/environment.js +267 -0
- package/dist/tools/foliage.d.ts +105 -14
- package/dist/tools/foliage.js +219 -331
- package/dist/tools/handlers/actor-handlers.d.ts +3 -0
- package/dist/tools/handlers/actor-handlers.js +232 -0
- package/dist/tools/handlers/animation-handlers.d.ts +3 -0
- package/dist/tools/handlers/animation-handlers.js +185 -0
- package/dist/tools/handlers/argument-helper.d.ts +16 -0
- package/dist/tools/handlers/argument-helper.js +80 -0
- package/dist/tools/handlers/asset-handlers.d.ts +3 -0
- package/dist/tools/handlers/asset-handlers.js +496 -0
- package/dist/tools/handlers/audio-handlers.d.ts +3 -0
- package/dist/tools/handlers/audio-handlers.js +166 -0
- package/dist/tools/handlers/blueprint-handlers.d.ts +4 -0
- package/dist/tools/handlers/blueprint-handlers.js +358 -0
- package/dist/tools/handlers/common-handlers.d.ts +14 -0
- package/dist/tools/handlers/common-handlers.js +56 -0
- package/dist/tools/handlers/editor-handlers.d.ts +3 -0
- package/dist/tools/handlers/editor-handlers.js +119 -0
- package/dist/tools/handlers/effect-handlers.d.ts +3 -0
- package/dist/tools/handlers/effect-handlers.js +171 -0
- package/dist/tools/handlers/environment-handlers.d.ts +3 -0
- package/dist/tools/handlers/environment-handlers.js +170 -0
- package/dist/tools/handlers/graph-handlers.d.ts +3 -0
- package/dist/tools/handlers/graph-handlers.js +90 -0
- package/dist/tools/handlers/input-handlers.d.ts +3 -0
- package/dist/tools/handlers/input-handlers.js +21 -0
- package/dist/tools/handlers/inspect-handlers.d.ts +3 -0
- package/dist/tools/handlers/inspect-handlers.js +383 -0
- package/dist/tools/handlers/level-handlers.d.ts +3 -0
- package/dist/tools/handlers/level-handlers.js +237 -0
- package/dist/tools/handlers/lighting-handlers.d.ts +3 -0
- package/dist/tools/handlers/lighting-handlers.js +144 -0
- package/dist/tools/handlers/performance-handlers.d.ts +3 -0
- package/dist/tools/handlers/performance-handlers.js +130 -0
- package/dist/tools/handlers/pipeline-handlers.d.ts +3 -0
- package/dist/tools/handlers/pipeline-handlers.js +110 -0
- package/dist/tools/handlers/sequence-handlers.d.ts +3 -0
- package/dist/tools/handlers/sequence-handlers.js +376 -0
- package/dist/tools/handlers/system-handlers.d.ts +4 -0
- package/dist/tools/handlers/system-handlers.js +506 -0
- package/dist/tools/input.d.ts +19 -0
- package/dist/tools/input.js +89 -0
- package/dist/tools/introspection.d.ts +103 -40
- package/dist/tools/introspection.js +425 -568
- package/dist/tools/landscape.d.ts +97 -36
- package/dist/tools/landscape.js +280 -409
- package/dist/tools/level.d.ts +130 -10
- package/dist/tools/level.js +639 -675
- package/dist/tools/lighting.d.ts +77 -38
- package/dist/tools/lighting.js +441 -943
- package/dist/tools/logs.d.ts +45 -0
- package/dist/tools/logs.js +210 -0
- package/dist/tools/materials.d.ts +91 -24
- package/dist/tools/materials.js +190 -118
- package/dist/tools/niagara.d.ts +149 -39
- package/dist/tools/niagara.js +232 -182
- package/dist/tools/performance.d.ts +27 -12
- package/dist/tools/performance.js +204 -122
- package/dist/tools/physics.d.ts +32 -77
- package/dist/tools/physics.js +171 -582
- package/dist/tools/property-dictionary.d.ts +13 -0
- package/dist/tools/property-dictionary.js +82 -0
- package/dist/tools/sequence.d.ts +73 -48
- package/dist/tools/sequence.js +196 -748
- package/dist/tools/tool-definition-utils.d.ts +59 -0
- package/dist/tools/tool-definition-utils.js +35 -0
- package/dist/tools/ui.d.ts +66 -34
- package/dist/tools/ui.js +134 -214
- package/dist/types/env.d.ts +0 -3
- package/dist/types/env.js +0 -7
- package/dist/types/tool-interfaces.d.ts +898 -0
- package/dist/types/tool-interfaces.js +2 -0
- package/dist/types/tool-types.d.ts +195 -11
- package/dist/types/tool-types.js +0 -4
- package/dist/unreal-bridge.d.ts +24 -131
- package/dist/unreal-bridge.js +364 -1506
- package/dist/utils/command-validator.d.ts +9 -0
- package/dist/utils/command-validator.js +67 -0
- package/dist/utils/elicitation.d.ts +1 -1
- package/dist/utils/elicitation.js +12 -15
- package/dist/utils/error-handler.d.ts +2 -51
- package/dist/utils/error-handler.js +11 -87
- package/dist/utils/ini-reader.d.ts +3 -0
- package/dist/utils/ini-reader.js +69 -0
- package/dist/utils/logger.js +9 -6
- package/dist/utils/normalize.d.ts +3 -0
- package/dist/utils/normalize.js +56 -0
- package/dist/utils/response-factory.d.ts +7 -0
- package/dist/utils/response-factory.js +33 -0
- package/dist/utils/response-validator.d.ts +3 -24
- package/dist/utils/response-validator.js +130 -81
- package/dist/utils/result-helpers.d.ts +4 -5
- package/dist/utils/result-helpers.js +15 -16
- package/dist/utils/safe-json.js +5 -11
- package/dist/utils/unreal-command-queue.d.ts +24 -0
- package/dist/utils/unreal-command-queue.js +120 -0
- package/dist/utils/validation.d.ts +0 -40
- package/dist/utils/validation.js +1 -78
- package/dist/wasm/index.d.ts +70 -0
- package/dist/wasm/index.js +535 -0
- package/docs/GraphQL-API.md +888 -0
- package/docs/Migration-Guide-v0.5.0.md +692 -0
- package/docs/Roadmap.md +53 -0
- package/docs/WebAssembly-Integration.md +628 -0
- package/docs/editor-plugin-extension.md +370 -0
- package/docs/handler-mapping.md +242 -0
- package/docs/native-automation-progress.md +128 -0
- package/docs/testing-guide.md +423 -0
- package/mcp-config-example.json +6 -6
- package/package.json +60 -27
- package/plugins/McpAutomationBridge/Config/FilterPlugin.ini +8 -0
- package/plugins/McpAutomationBridge/McpAutomationBridge.uplugin +64 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/McpAutomationBridge.Build.cs +189 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.cpp +22 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.h +30 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeHelpers.h +1983 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeModule.cpp +72 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSettings.cpp +46 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSubsystem.cpp +581 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AnimationHandlers.cpp +2394 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetQueryHandlers.cpp +300 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetWorkflowHandlers.cpp +2807 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AudioHandlers.cpp +1087 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BehaviorTreeHandlers.cpp +488 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.cpp +643 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.h +31 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintGraphHandlers.cpp +1184 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers.cpp +5652 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers_List.cpp +152 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ControlHandlers.cpp +2614 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_DebugHandlers.cpp +42 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EditorFunctionHandlers.cpp +1237 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EffectHandlers.cpp +1701 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EnvironmentHandlers.cpp +2145 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_FoliageHandlers.cpp +954 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InputHandlers.cpp +209 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InsightsHandlers.cpp +41 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LandscapeHandlers.cpp +1164 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LevelHandlers.cpp +762 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LightingHandlers.cpp +634 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LogHandlers.cpp +136 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_MaterialGraphHandlers.cpp +494 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraGraphHandlers.cpp +278 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraHandlers.cpp +625 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PerformanceHandlers.cpp +401 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PipelineHandlers.cpp +67 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ProcessRequest.cpp +735 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PropertyHandlers.cpp +2634 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_RenderHandlers.cpp +189 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.cpp +917 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.h +39 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequenceHandlers.cpp +2670 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequencerHandlers.cpp +519 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_TestHandlers.cpp +38 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_UiHandlers.cpp +668 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_WorldPartitionHandlers.cpp +346 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.cpp +1330 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.h +149 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpConnectionManager.cpp +783 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSettings.h +115 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSubsystem.h +796 -0
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpConnectionManager.h +117 -0
- package/scripts/check-unreal-connection.mjs +19 -0
- package/scripts/clean-tmp.js +23 -0
- package/scripts/patch-wasm.js +26 -0
- package/scripts/run-all-tests.mjs +131 -0
- package/scripts/smoke-test.ts +94 -0
- package/scripts/sync-mcp-plugin.js +143 -0
- package/scripts/test-no-plugin-alternates.mjs +113 -0
- package/scripts/validate-server.js +46 -0
- package/scripts/verify-automation-bridge.js +200 -0
- package/server.json +57 -21
- package/src/automation/bridge.ts +558 -0
- package/src/automation/connection-manager.ts +130 -0
- package/src/automation/handshake.ts +99 -0
- package/src/automation/index.ts +2 -0
- package/src/automation/message-handler.ts +167 -0
- package/src/automation/request-tracker.ts +123 -0
- package/src/automation/types.ts +107 -0
- package/src/cli.ts +33 -6
- package/src/config.ts +73 -0
- package/src/constants.ts +12 -0
- package/src/graphql/resolvers.ts +1010 -0
- package/src/graphql/schema.ts +452 -0
- package/src/graphql/server.ts +154 -0
- package/src/graphql/types.ts +7 -0
- package/src/handlers/resource-handlers.ts +186 -0
- package/src/index.ts +152 -649
- package/src/prompts/index.ts +4 -4
- package/src/resources/actors.ts +58 -76
- package/src/resources/assets.ts +147 -134
- package/src/resources/levels.ts +28 -33
- package/src/server/resource-registry.ts +47 -0
- package/src/server/tool-registry.ts +354 -0
- package/src/server-setup.ts +148 -0
- package/src/services/health-monitor.ts +132 -0
- package/src/services/metrics-server.ts +142 -0
- package/src/tools/actors.ts +417 -322
- package/src/tools/animation.ts +671 -461
- package/src/tools/assets.ts +353 -289
- package/src/tools/audio.ts +323 -766
- package/src/tools/base-tool.ts +52 -0
- package/src/tools/behavior-tree.ts +45 -0
- package/src/tools/blueprint/helpers.ts +189 -0
- package/src/tools/blueprint.ts +787 -965
- package/src/tools/consolidated-tool-definitions.ts +993 -500
- package/src/tools/consolidated-tool-handlers.ts +272 -1122
- package/src/tools/debug.ts +292 -187
- package/src/tools/dynamic-handler-registry.ts +151 -0
- package/src/tools/editor.ts +309 -246
- package/src/tools/engine.ts +14 -3
- package/src/tools/environment.ts +287 -0
- package/src/tools/foliage.ts +314 -379
- package/src/tools/handlers/actor-handlers.ts +271 -0
- package/src/tools/handlers/animation-handlers.ts +237 -0
- package/src/tools/handlers/argument-helper.ts +142 -0
- package/src/tools/handlers/asset-handlers.ts +532 -0
- package/src/tools/handlers/audio-handlers.ts +194 -0
- package/src/tools/handlers/blueprint-handlers.ts +380 -0
- package/src/tools/handlers/common-handlers.ts +87 -0
- package/src/tools/handlers/editor-handlers.ts +123 -0
- package/src/tools/handlers/effect-handlers.ts +220 -0
- package/src/tools/handlers/environment-handlers.ts +183 -0
- package/src/tools/handlers/graph-handlers.ts +116 -0
- package/src/tools/handlers/input-handlers.ts +28 -0
- package/src/tools/handlers/inspect-handlers.ts +450 -0
- package/src/tools/handlers/level-handlers.ts +252 -0
- package/src/tools/handlers/lighting-handlers.ts +147 -0
- package/src/tools/handlers/performance-handlers.ts +132 -0
- package/src/tools/handlers/pipeline-handlers.ts +127 -0
- package/src/tools/handlers/sequence-handlers.ts +415 -0
- package/src/tools/handlers/system-handlers.ts +564 -0
- package/src/tools/input.ts +101 -0
- package/src/tools/introspection.ts +493 -584
- package/src/tools/landscape.ts +394 -489
- package/src/tools/level.ts +752 -694
- package/src/tools/lighting.ts +583 -984
- package/src/tools/logs.ts +219 -0
- package/src/tools/materials.ts +231 -121
- package/src/tools/niagara.ts +293 -168
- package/src/tools/performance.ts +320 -168
- package/src/tools/physics.ts +268 -613
- package/src/tools/property-dictionary.ts +98 -0
- package/src/tools/sequence.ts +255 -815
- package/src/tools/tool-definition-utils.ts +35 -0
- package/src/tools/ui.ts +207 -283
- package/src/types/env.ts +0 -10
- package/src/types/tool-interfaces.ts +250 -0
- package/src/types/tool-types.ts +250 -13
- package/src/unreal-bridge.ts +460 -1550
- package/src/utils/command-validator.ts +75 -0
- package/src/utils/elicitation.ts +10 -7
- package/src/utils/error-handler.ts +14 -90
- package/src/utils/ini-reader.ts +86 -0
- package/src/utils/logger.ts +8 -3
- package/src/utils/normalize.ts +60 -0
- package/src/utils/response-factory.ts +39 -0
- package/src/utils/response-validator.ts +176 -56
- package/src/utils/result-helpers.ts +21 -19
- package/src/utils/safe-json.ts +14 -11
- package/src/utils/unreal-command-queue.ts +152 -0
- package/src/utils/validation.ts +4 -1
- package/src/wasm/index.ts +838 -0
- package/test-server.mjs +100 -0
- package/tests/run-unreal-tool-tests.mjs +242 -14
- package/tests/test-animation.mjs +44 -0
- package/tests/test-asset-advanced.mjs +82 -0
- package/tests/test-asset-errors.mjs +35 -0
- package/tests/test-audio.mjs +219 -0
- package/tests/test-automation-timeouts.mjs +98 -0
- package/tests/test-behavior-tree.mjs +261 -0
- package/tests/test-blueprint-events.mjs +35 -0
- package/tests/test-blueprint-graph.mjs +79 -0
- package/tests/test-blueprint.mjs +577 -0
- package/tests/test-client-mode.mjs +86 -0
- package/tests/test-console-command.mjs +56 -0
- package/tests/test-control-actor.mjs +425 -0
- package/tests/test-control-editor.mjs +80 -0
- package/tests/test-extra-tools.mjs +38 -0
- package/tests/test-graphql.mjs +322 -0
- package/tests/test-inspect.mjs +72 -0
- package/tests/test-landscape.mjs +60 -0
- package/tests/test-manage-asset.mjs +438 -0
- package/tests/test-manage-level.mjs +70 -0
- package/tests/test-materials.mjs +356 -0
- package/tests/test-niagara.mjs +185 -0
- package/tests/test-no-inline-python.mjs +122 -0
- package/tests/test-plugin-handshake.mjs +82 -0
- package/tests/test-render.mjs +33 -0
- package/tests/test-runner.mjs +933 -0
- package/tests/test-search-assets.mjs +66 -0
- package/tests/test-sequence.mjs +68 -0
- package/tests/test-system.mjs +57 -0
- package/tests/test-wasm.mjs +193 -0
- package/tests/test-world-partition.mjs +215 -0
- package/tsconfig.json +3 -3
- package/wasm/Cargo.lock +363 -0
- package/wasm/Cargo.toml +42 -0
- package/wasm/LICENSE +21 -0
- package/wasm/README.md +253 -0
- package/wasm/src/dependency_resolver.rs +377 -0
- package/wasm/src/lib.rs +153 -0
- package/wasm/src/property_parser.rs +271 -0
- package/wasm/src/transform_math.rs +396 -0
- package/wasm/tests/integration.rs +109 -0
- package/.github/workflows/smithery-build.yml +0 -29
- package/dist/tools/build_environment_advanced.d.ts +0 -65
- package/dist/tools/build_environment_advanced.js +0 -633
- package/dist/tools/rc.d.ts +0 -110
- package/dist/tools/rc.js +0 -437
- package/dist/tools/visual.d.ts +0 -40
- package/dist/tools/visual.js +0 -282
- package/dist/utils/http.d.ts +0 -6
- package/dist/utils/http.js +0 -151
- package/dist/utils/python-output.d.ts +0 -18
- package/dist/utils/python-output.js +0 -290
- package/dist/utils/python.d.ts +0 -2
- package/dist/utils/python.js +0 -4
- package/dist/utils/stdio-redirect.d.ts +0 -2
- package/dist/utils/stdio-redirect.js +0 -20
- package/docs/unreal-tool-test-cases.md +0 -572
- package/smithery.yaml +0 -29
- package/src/tools/build_environment_advanced.ts +0 -732
- package/src/tools/rc.ts +0 -515
- package/src/tools/visual.ts +0 -281
- package/src/utils/http.ts +0 -187
- package/src/utils/python-output.ts +0 -351
- package/src/utils/python.ts +0 -3
- package/src/utils/stdio-redirect.ts +0 -18
package/src/tools/debug.ts
CHANGED
|
@@ -1,99 +1,40 @@
|
|
|
1
1
|
// Debug visualization tools for Unreal Engine
|
|
2
|
+
// Uses Automation Bridge and console commands for all operations
|
|
3
|
+
|
|
2
4
|
import { UnrealBridge } from '../unreal-bridge.js';
|
|
3
|
-
import {
|
|
4
|
-
import { parseStandardResult } from '../utils/python-output.js';
|
|
5
|
+
import { AutomationBridge } from '../automation/index.js';
|
|
5
6
|
|
|
6
7
|
export class DebugVisualizationTools {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
// Helper to draw via Python SystemLibrary with the editor world
|
|
10
|
-
private async pyDraw(scriptBody: string, meta?: { action: string; params?: Record<string, unknown> }) {
|
|
11
|
-
const action = (meta?.action || 'debug_draw').replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
12
|
-
const payloadObject = meta?.params ?? {};
|
|
13
|
-
const payloadJson = JSON.stringify(payloadObject).replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
14
|
-
const indentedBody = scriptBody
|
|
15
|
-
.split(/\r?\n/)
|
|
16
|
-
.map(line => ` ${line}`)
|
|
17
|
-
.join('\n');
|
|
18
|
-
|
|
19
|
-
const script = `
|
|
20
|
-
import unreal
|
|
21
|
-
import json
|
|
22
|
-
|
|
23
|
-
payload = json.loads('${payloadJson}')
|
|
24
|
-
ues = unreal.get_editor_subsystem(unreal.UnrealEditorSubsystem)
|
|
25
|
-
if not ues:
|
|
26
|
-
raise Exception('UnrealEditorSubsystem not available')
|
|
27
|
-
world = ues.get_editor_world()
|
|
28
|
-
if not world:
|
|
29
|
-
raise Exception('Editor world unavailable')
|
|
30
|
-
try:
|
|
31
|
-
${indentedBody}
|
|
32
|
-
print('DEBUG_DRAW:' + json.dumps({'action': '${action}', 'params': payload}))
|
|
33
|
-
print('RESULT:' + json.dumps({'success': True, 'action': '${action}', 'params': payload}))
|
|
34
|
-
except Exception as e:
|
|
35
|
-
print('DEBUG_DRAW_ERROR:' + str(e))
|
|
36
|
-
print('RESULT:' + json.dumps({'success': False, 'action': '${action}', 'error': str(e)}))
|
|
37
|
-
`.trim()
|
|
38
|
-
.replace(/\r?\n/g, '\n');
|
|
8
|
+
private bridge: UnrealBridge;
|
|
9
|
+
private automationBridge?: AutomationBridge;
|
|
39
10
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
successMessage: `${action} executed`,
|
|
44
|
-
failureMessage: `${action} failed`
|
|
45
|
-
});
|
|
11
|
+
constructor(bridge: UnrealBridge) {
|
|
12
|
+
this.bridge = bridge;
|
|
13
|
+
}
|
|
46
14
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const normalizedSuccess = typeof parsedSuccessValue === 'string'
|
|
51
|
-
? ['true', '1', 'yes'].includes(parsedSuccessValue.toLowerCase())
|
|
52
|
-
: parsedSuccessValue === true;
|
|
53
|
-
|
|
54
|
-
if (!interpreted.success && normalizedSuccess) {
|
|
55
|
-
interpreted = {
|
|
56
|
-
...interpreted,
|
|
57
|
-
success: true,
|
|
58
|
-
error: undefined,
|
|
59
|
-
message: interpreted.message || `${action} executed`,
|
|
60
|
-
payload: { ...parsedPayload }
|
|
61
|
-
};
|
|
62
|
-
}
|
|
15
|
+
setAutomationBridge(automationBridge: AutomationBridge) {
|
|
16
|
+
this.automationBridge = automationBridge;
|
|
17
|
+
}
|
|
63
18
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (finalSuccess) {
|
|
71
|
-
return {
|
|
72
|
-
...interpreted.payload,
|
|
73
|
-
success: true,
|
|
74
|
-
action: resolvedAction,
|
|
75
|
-
warnings: interpreted.warnings,
|
|
76
|
-
details: interpreted.details,
|
|
77
|
-
rawOutput,
|
|
78
|
-
raw: parsed.raw ?? interpreted.raw
|
|
79
|
-
};
|
|
80
|
-
}
|
|
19
|
+
// Helper to use Automation Bridge for debug operations
|
|
20
|
+
private async useAutomationBridge(action: string, params: any) {
|
|
21
|
+
if (!this.automationBridge) {
|
|
22
|
+
return { success: false, error: 'AUTOMATION_BRIDGE_NOT_AVAILABLE', message: 'Automation Bridge not available for debug operations' };
|
|
23
|
+
}
|
|
81
24
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
action:
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
};
|
|
91
|
-
} catch (e) {
|
|
92
|
-
return { success: false, error: String(e), action: meta?.action || 'debug_draw' };
|
|
25
|
+
try {
|
|
26
|
+
const response = await this.automationBridge.sendAutomationRequest('create_effect', {
|
|
27
|
+
action: 'debug_shape',
|
|
28
|
+
shapeType: action,
|
|
29
|
+
...params
|
|
30
|
+
});
|
|
31
|
+
return response;
|
|
32
|
+
} catch (error) {
|
|
33
|
+
return { success: false, error: 'AUTOMATION_BRIDGE_ERROR', message: String(error) };
|
|
93
34
|
}
|
|
94
35
|
}
|
|
95
36
|
|
|
96
|
-
// Draw debug line using
|
|
37
|
+
// Draw debug line using Automation Bridge
|
|
97
38
|
async drawDebugLine(params: {
|
|
98
39
|
start: [number, number, number];
|
|
99
40
|
end: [number, number, number];
|
|
@@ -104,17 +45,24 @@ except Exception as e:
|
|
|
104
45
|
const color = params.color || [255, 0, 0, 255];
|
|
105
46
|
const duration = params.duration ?? 5.0;
|
|
106
47
|
const thickness = params.thickness ?? 1.0;
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
48
|
+
|
|
49
|
+
// Try Automation Bridge first
|
|
50
|
+
const result = await this.useAutomationBridge('line', {
|
|
51
|
+
start: params.start,
|
|
52
|
+
end: params.end,
|
|
53
|
+
color,
|
|
54
|
+
duration,
|
|
55
|
+
thickness
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
if (result.success) {
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return {
|
|
63
|
+
success: false,
|
|
64
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
65
|
+
message: result.message || 'Drawing debug lines requires Automation Bridge debug_shape handler',
|
|
118
66
|
params: {
|
|
119
67
|
start: params.start,
|
|
120
68
|
end: params.end,
|
|
@@ -122,10 +70,10 @@ unreal.SystemLibrary.draw_debug_line(world, start, end, color, ${duration}, ${th
|
|
|
122
70
|
duration,
|
|
123
71
|
thickness
|
|
124
72
|
}
|
|
125
|
-
}
|
|
73
|
+
};
|
|
126
74
|
}
|
|
127
75
|
|
|
128
|
-
// Draw debug box using
|
|
76
|
+
// Draw debug box using Automation Bridge
|
|
129
77
|
async drawDebugBox(params: {
|
|
130
78
|
center: [number, number, number];
|
|
131
79
|
extent: [number, number, number];
|
|
@@ -138,19 +86,24 @@ unreal.SystemLibrary.draw_debug_line(world, start, end, color, ${duration}, ${th
|
|
|
138
86
|
const rotation = params.rotation || [0, 0, 0];
|
|
139
87
|
const duration = params.duration ?? 5.0;
|
|
140
88
|
const thickness = params.thickness ?? 1.0;
|
|
141
|
-
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
89
|
+
|
|
90
|
+
const result = await this.useAutomationBridge('box', {
|
|
91
|
+
center: params.center,
|
|
92
|
+
extent: params.extent,
|
|
93
|
+
rotation,
|
|
94
|
+
color,
|
|
95
|
+
duration,
|
|
96
|
+
thickness
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
if (result.success) {
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return {
|
|
104
|
+
success: false,
|
|
105
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
106
|
+
message: result.message || 'Drawing debug boxes requires Automation Bridge debug_shape handler',
|
|
154
107
|
params: {
|
|
155
108
|
center: params.center,
|
|
156
109
|
extent: params.extent,
|
|
@@ -159,10 +112,10 @@ unreal.SystemLibrary.draw_debug_box(world, center, extent, color, rot, ${duratio
|
|
|
159
112
|
duration,
|
|
160
113
|
thickness
|
|
161
114
|
}
|
|
162
|
-
}
|
|
115
|
+
};
|
|
163
116
|
}
|
|
164
117
|
|
|
165
|
-
// Draw debug sphere using
|
|
118
|
+
// Draw debug sphere using Automation Bridge
|
|
166
119
|
async drawDebugSphere(params: {
|
|
167
120
|
center: [number, number, number];
|
|
168
121
|
radius: number;
|
|
@@ -175,15 +128,24 @@ unreal.SystemLibrary.draw_debug_box(world, center, extent, color, rot, ${duratio
|
|
|
175
128
|
const color = params.color || [0, 0, 255, 255];
|
|
176
129
|
const duration = params.duration ?? 5.0;
|
|
177
130
|
const thickness = params.thickness ?? 1.0;
|
|
178
|
-
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
131
|
+
|
|
132
|
+
const result = await this.useAutomationBridge('sphere', {
|
|
133
|
+
center: params.center,
|
|
134
|
+
radius: params.radius,
|
|
135
|
+
segments,
|
|
136
|
+
color,
|
|
137
|
+
duration,
|
|
138
|
+
thickness
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
if (result.success) {
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return {
|
|
146
|
+
success: false,
|
|
147
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
148
|
+
message: result.message || 'Drawing debug spheres requires Automation Bridge debug_shape handler',
|
|
187
149
|
params: {
|
|
188
150
|
center: params.center,
|
|
189
151
|
radius: params.radius,
|
|
@@ -192,11 +154,9 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
192
154
|
duration,
|
|
193
155
|
thickness
|
|
194
156
|
}
|
|
195
|
-
}
|
|
157
|
+
};
|
|
196
158
|
}
|
|
197
159
|
|
|
198
|
-
// The rest keep console-command fallbacks or editor helpers as before
|
|
199
|
-
|
|
200
160
|
async drawDebugCapsule(params: {
|
|
201
161
|
center: [number, number, number];
|
|
202
162
|
halfHeight: number;
|
|
@@ -208,12 +168,24 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
208
168
|
const rotation = params.rotation || [0, 0, 0];
|
|
209
169
|
const color = params.color || [255, 255, 0, 255];
|
|
210
170
|
const duration = params.duration || 5.0;
|
|
211
|
-
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
171
|
+
|
|
172
|
+
const result = await this.useAutomationBridge('capsule', {
|
|
173
|
+
center: params.center,
|
|
174
|
+
halfHeight: params.halfHeight,
|
|
175
|
+
radius: params.radius,
|
|
176
|
+
rotation,
|
|
177
|
+
color,
|
|
178
|
+
duration
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
if (result.success) {
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return {
|
|
186
|
+
success: false,
|
|
187
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
188
|
+
message: result.message || 'Drawing debug capsules requires Automation Bridge debug_shape handler',
|
|
217
189
|
params: {
|
|
218
190
|
center: params.center,
|
|
219
191
|
halfHeight: params.halfHeight,
|
|
@@ -222,7 +194,7 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
222
194
|
color,
|
|
223
195
|
duration
|
|
224
196
|
}
|
|
225
|
-
}
|
|
197
|
+
};
|
|
226
198
|
}
|
|
227
199
|
|
|
228
200
|
async drawDebugCone(params: {
|
|
@@ -237,12 +209,26 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
237
209
|
}) {
|
|
238
210
|
const color = params.color || [255, 0, 255, 255];
|
|
239
211
|
const duration = params.duration || 5.0;
|
|
240
|
-
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
212
|
+
|
|
213
|
+
const result = await this.useAutomationBridge('cone', {
|
|
214
|
+
origin: params.origin,
|
|
215
|
+
direction: params.direction,
|
|
216
|
+
length: params.length,
|
|
217
|
+
angleWidth: params.angleWidth,
|
|
218
|
+
angleHeight: params.angleHeight,
|
|
219
|
+
numSides: params.numSides || 12,
|
|
220
|
+
color,
|
|
221
|
+
duration
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
if (result.success) {
|
|
225
|
+
return result;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
return {
|
|
229
|
+
success: false,
|
|
230
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
231
|
+
message: result.message || 'Drawing debug cones requires Automation Bridge debug_shape handler',
|
|
246
232
|
params: {
|
|
247
233
|
origin: params.origin,
|
|
248
234
|
direction: params.direction,
|
|
@@ -253,7 +239,7 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
253
239
|
color,
|
|
254
240
|
duration
|
|
255
241
|
}
|
|
256
|
-
}
|
|
242
|
+
};
|
|
257
243
|
}
|
|
258
244
|
|
|
259
245
|
async drawDebugString(params: {
|
|
@@ -265,11 +251,23 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
265
251
|
}) {
|
|
266
252
|
const color = params.color || [255, 255, 255, 255];
|
|
267
253
|
const duration = params.duration || 5.0;
|
|
268
|
-
|
|
269
|
-
const
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
254
|
+
|
|
255
|
+
const result = await this.useAutomationBridge('string', {
|
|
256
|
+
location: params.location,
|
|
257
|
+
text: params.text,
|
|
258
|
+
color,
|
|
259
|
+
duration,
|
|
260
|
+
fontSize: params.fontSize
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
if (result.success) {
|
|
264
|
+
return result;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
return {
|
|
268
|
+
success: false,
|
|
269
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
270
|
+
message: result.message || 'Drawing debug strings requires Automation Bridge debug_shape handler',
|
|
273
271
|
params: {
|
|
274
272
|
location: params.location,
|
|
275
273
|
text: params.text,
|
|
@@ -277,7 +275,7 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
277
275
|
duration,
|
|
278
276
|
fontSize: params.fontSize
|
|
279
277
|
}
|
|
280
|
-
}
|
|
278
|
+
};
|
|
281
279
|
}
|
|
282
280
|
|
|
283
281
|
async drawDebugArrow(params: {
|
|
@@ -291,12 +289,24 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
291
289
|
const color = params.color || [0, 255, 255, 255];
|
|
292
290
|
const duration = params.duration || 5.0;
|
|
293
291
|
const thickness = params.thickness || 2.0;
|
|
294
|
-
|
|
295
|
-
const
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
292
|
+
|
|
293
|
+
const result = await this.useAutomationBridge('arrow', {
|
|
294
|
+
start: params.start,
|
|
295
|
+
end: params.end,
|
|
296
|
+
arrowSize: params.arrowSize || 10.0,
|
|
297
|
+
color,
|
|
298
|
+
duration,
|
|
299
|
+
thickness
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
if (result.success) {
|
|
303
|
+
return result;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return {
|
|
307
|
+
success: false,
|
|
308
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
309
|
+
message: result.message || 'Drawing debug arrows requires Automation Bridge debug_shape handler',
|
|
300
310
|
params: {
|
|
301
311
|
start: params.start,
|
|
302
312
|
end: params.end,
|
|
@@ -305,7 +315,7 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
305
315
|
duration,
|
|
306
316
|
thickness
|
|
307
317
|
}
|
|
308
|
-
}
|
|
318
|
+
};
|
|
309
319
|
}
|
|
310
320
|
|
|
311
321
|
async drawDebugPoint(params: {
|
|
@@ -317,18 +327,29 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
317
327
|
const size = params.size || 10.0;
|
|
318
328
|
const color = params.color || [255, 255, 255, 255];
|
|
319
329
|
const duration = params.duration || 5.0;
|
|
320
|
-
|
|
321
|
-
const
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
330
|
+
|
|
331
|
+
const result = await this.useAutomationBridge('point', {
|
|
332
|
+
location: params.location,
|
|
333
|
+
size,
|
|
334
|
+
color,
|
|
335
|
+
duration
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
if (result.success) {
|
|
339
|
+
return result;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
return {
|
|
343
|
+
success: false,
|
|
344
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
345
|
+
message: result.message || 'Drawing debug points requires Automation Bridge debug_shape handler',
|
|
325
346
|
params: {
|
|
326
347
|
location: params.location,
|
|
327
348
|
size,
|
|
328
349
|
color,
|
|
329
350
|
duration
|
|
330
351
|
}
|
|
331
|
-
}
|
|
352
|
+
};
|
|
332
353
|
}
|
|
333
354
|
|
|
334
355
|
async drawDebugCoordinateSystem(params: {
|
|
@@ -338,12 +359,15 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
338
359
|
duration?: number;
|
|
339
360
|
thickness?: number;
|
|
340
361
|
}) {
|
|
341
|
-
const
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
362
|
+
const result = await this.useAutomationBridge('coordinate_system', {
|
|
363
|
+
location: params.location,
|
|
364
|
+
rotation: params.rotation || [0, 0, 0],
|
|
365
|
+
scale: params.scale || 1.0,
|
|
366
|
+
duration: params.duration || 5.0,
|
|
367
|
+
thickness: params.thickness || 1.0
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
return result;
|
|
347
371
|
}
|
|
348
372
|
|
|
349
373
|
async drawDebugFrustum(params: {
|
|
@@ -361,12 +385,26 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
361
385
|
const farPlane = params.farPlane || 1000.0;
|
|
362
386
|
const color = params.color || [128, 128, 255, 255];
|
|
363
387
|
const duration = params.duration || 5.0;
|
|
364
|
-
|
|
365
|
-
const
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
388
|
+
|
|
389
|
+
const result = await this.useAutomationBridge('frustum', {
|
|
390
|
+
origin: params.origin,
|
|
391
|
+
rotation: params.rotation,
|
|
392
|
+
fov: params.fov,
|
|
393
|
+
aspectRatio,
|
|
394
|
+
nearPlane,
|
|
395
|
+
farPlane,
|
|
396
|
+
color,
|
|
397
|
+
duration
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
if (result.success) {
|
|
401
|
+
return result;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
return {
|
|
405
|
+
success: false,
|
|
406
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
407
|
+
message: result.message || 'Drawing debug frustums requires Automation Bridge debug_shape handler',
|
|
370
408
|
params: {
|
|
371
409
|
origin: params.origin,
|
|
372
410
|
rotation: params.rotation,
|
|
@@ -377,10 +415,17 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
377
415
|
color,
|
|
378
416
|
duration
|
|
379
417
|
}
|
|
380
|
-
}
|
|
418
|
+
};
|
|
381
419
|
}
|
|
382
420
|
|
|
383
421
|
async clearDebugDrawings() {
|
|
422
|
+
if (this.automationBridge) {
|
|
423
|
+
const response = await this.automationBridge.sendAutomationRequest('clear_debug_shapes', {});
|
|
424
|
+
if (response.success) {
|
|
425
|
+
return response;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
384
429
|
return this.bridge.executeConsoleCommand('FlushPersistentDebugLines');
|
|
385
430
|
}
|
|
386
431
|
|
|
@@ -388,7 +433,7 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
388
433
|
enabled: boolean;
|
|
389
434
|
type?: 'Simple' | 'Complex' | 'Both';
|
|
390
435
|
}) {
|
|
391
|
-
|
|
436
|
+
const commands: string[] = [];
|
|
392
437
|
if (params.enabled) {
|
|
393
438
|
const typeCmd = params.type === 'Simple' ? '1' : params.type === 'Complex' ? '2' : '3';
|
|
394
439
|
commands.push(`show Collision ${typeCmd}`);
|
|
@@ -429,7 +474,7 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
429
474
|
];
|
|
430
475
|
if (UNSAFE_VIEWMODES.includes(params.mode)) {
|
|
431
476
|
console.error(`⚠️ Viewmode '${params.mode}' may be unstable in some UE configurations.`);
|
|
432
|
-
try { await this.bridge.executeConsoleCommand('stop'); } catch {}
|
|
477
|
+
try { await this.bridge.executeConsoleCommand('stop'); } catch { }
|
|
433
478
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
434
479
|
}
|
|
435
480
|
|
|
@@ -471,12 +516,31 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
471
516
|
const color = params.color || [255, 128, 0, 255];
|
|
472
517
|
const duration = params.duration || 5.0;
|
|
473
518
|
const thickness = params.thickness || 2.0;
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
519
|
+
|
|
520
|
+
// Try Automation Bridge for path drawing
|
|
521
|
+
const result = await this.useAutomationBridge('path', {
|
|
522
|
+
points: params.points,
|
|
523
|
+
color,
|
|
524
|
+
duration,
|
|
525
|
+
thickness
|
|
526
|
+
});
|
|
527
|
+
|
|
528
|
+
if (result.success) {
|
|
529
|
+
return result;
|
|
478
530
|
}
|
|
479
|
-
|
|
531
|
+
|
|
532
|
+
// If Automation Bridge is unavailable or fails, do not claim success
|
|
533
|
+
return {
|
|
534
|
+
success: false,
|
|
535
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
536
|
+
message: result.message || 'Drawing debug paths requires Automation Bridge debug_shape handler',
|
|
537
|
+
params: {
|
|
538
|
+
points: params.points,
|
|
539
|
+
color,
|
|
540
|
+
duration,
|
|
541
|
+
thickness
|
|
542
|
+
}
|
|
543
|
+
};
|
|
480
544
|
}
|
|
481
545
|
|
|
482
546
|
async showNavigationMesh(params: { enabled: boolean; }) {
|
|
@@ -492,18 +556,59 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
492
556
|
color?: [number, number, number, number];
|
|
493
557
|
}) {
|
|
494
558
|
if (params.enabled && params.message) {
|
|
495
|
-
|
|
496
|
-
const
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
559
|
+
// Use Automation Bridge for on-screen messages
|
|
560
|
+
const result = await this.useAutomationBridge('message', {
|
|
561
|
+
message: params.message,
|
|
562
|
+
duration: params.duration || 5.0,
|
|
563
|
+
color: params.color || [255, 255, 255, 255]
|
|
564
|
+
});
|
|
565
|
+
|
|
566
|
+
if (result.success) {
|
|
567
|
+
return result;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
return {
|
|
571
|
+
success: false,
|
|
572
|
+
error: 'AUTOMATION_BRIDGE_REQUIRED',
|
|
573
|
+
message: 'Showing on-screen messages requires Automation Bridge'
|
|
574
|
+
};
|
|
502
575
|
}
|
|
576
|
+
|
|
577
|
+
const command = params.enabled ? 'EnableAllScreenMessages' : 'DisableAllScreenMessages';
|
|
578
|
+
return this.bridge.executeConsoleCommand(command);
|
|
503
579
|
}
|
|
504
580
|
|
|
505
581
|
async showSkeletalMeshBones(params: { actorName: string; enabled: boolean; }) {
|
|
506
|
-
|
|
507
|
-
|
|
582
|
+
// Use Automation Bridge for skeletal mesh visualization
|
|
583
|
+
const result = await this.useAutomationBridge('skeletal_meshes', {
|
|
584
|
+
actorName: params.actorName,
|
|
585
|
+
enabled: params.enabled
|
|
586
|
+
});
|
|
587
|
+
|
|
588
|
+
if (result.success) {
|
|
589
|
+
return result;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
return {
|
|
593
|
+
success: false,
|
|
594
|
+
error: 'AUTOMATION_BRIDGE_REQUIRED',
|
|
595
|
+
message: 'Showing skeletal mesh bones requires Automation Bridge'
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
async clearDebugShapes() {
|
|
600
|
+
if (this.automationBridge) {
|
|
601
|
+
const response = await this.automationBridge.sendAutomationRequest('clear_debug_shapes', {});
|
|
602
|
+
if (response.success) {
|
|
603
|
+
return response;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
try {
|
|
608
|
+
await this.bridge.executeConsoleCommand('FlushPersistentDebugLines');
|
|
609
|
+
return { success: true, message: 'Debug shapes cleared' };
|
|
610
|
+
} catch (err) {
|
|
611
|
+
return { success: false, error: `Failed to clear debug shapes: ${err}` };
|
|
612
|
+
}
|
|
508
613
|
}
|
|
509
614
|
}
|