unreal-engine-mcp-server 0.4.7 → 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 +267 -31
- package/CONTRIBUTING.md +140 -0
- package/README.md +166 -71
- 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 -619
- 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 +5462 -1781
- package/dist/tools/consolidated-tool-definitions.js +829 -496
- package/dist/tools/consolidated-tool-handlers.d.ts +2 -1
- package/dist/tools/consolidated-tool-handlers.js +211 -1026
- 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 +3 -3
- package/dist/tools/logs.js +5 -57
- 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 +183 -19
- 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 -663
- 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 -515
- package/src/tools/consolidated-tool-handlers.ts +272 -1139
- 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 +9 -57
- 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 +243 -21
- 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 -574
- 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/dist/tools/debug.js
CHANGED
|
@@ -1,105 +1,46 @@
|
|
|
1
|
-
import { bestEffortInterpretedText, coerceString, interpretStandardResult } from '../utils/result-helpers.js';
|
|
2
|
-
import { parseStandardResult } from '../utils/python-output.js';
|
|
3
1
|
export class DebugVisualizationTools {
|
|
4
2
|
bridge;
|
|
3
|
+
automationBridge;
|
|
5
4
|
constructor(bridge) {
|
|
6
5
|
this.bridge = bridge;
|
|
7
6
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
.map(line => ` ${line}`)
|
|
16
|
-
.join('\n');
|
|
17
|
-
const script = `
|
|
18
|
-
import unreal
|
|
19
|
-
import json
|
|
20
|
-
|
|
21
|
-
payload = json.loads('${payloadJson}')
|
|
22
|
-
ues = unreal.get_editor_subsystem(unreal.UnrealEditorSubsystem)
|
|
23
|
-
if not ues:
|
|
24
|
-
raise Exception('UnrealEditorSubsystem not available')
|
|
25
|
-
world = ues.get_editor_world()
|
|
26
|
-
if not world:
|
|
27
|
-
raise Exception('Editor world unavailable')
|
|
28
|
-
try:
|
|
29
|
-
${indentedBody}
|
|
30
|
-
print('DEBUG_DRAW:' + json.dumps({'action': '${action}', 'params': payload}))
|
|
31
|
-
print('RESULT:' + json.dumps({'success': True, 'action': '${action}', 'params': payload}))
|
|
32
|
-
except Exception as e:
|
|
33
|
-
print('DEBUG_DRAW_ERROR:' + str(e))
|
|
34
|
-
print('RESULT:' + json.dumps({'success': False, 'action': '${action}', 'error': str(e)}))
|
|
35
|
-
`.trim()
|
|
36
|
-
.replace(/\r?\n/g, '\n');
|
|
7
|
+
setAutomationBridge(automationBridge) {
|
|
8
|
+
this.automationBridge = automationBridge;
|
|
9
|
+
}
|
|
10
|
+
async useAutomationBridge(action, params) {
|
|
11
|
+
if (!this.automationBridge) {
|
|
12
|
+
return { success: false, error: 'AUTOMATION_BRIDGE_NOT_AVAILABLE', message: 'Automation Bridge not available for debug operations' };
|
|
13
|
+
}
|
|
37
14
|
try {
|
|
38
|
-
const response = await this.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
15
|
+
const response = await this.automationBridge.sendAutomationRequest('create_effect', {
|
|
16
|
+
action: 'debug_shape',
|
|
17
|
+
shapeType: action,
|
|
18
|
+
...params
|
|
42
19
|
});
|
|
43
|
-
|
|
44
|
-
const parsedPayload = parsed.data ?? {};
|
|
45
|
-
const parsedSuccessValue = parsedPayload.success;
|
|
46
|
-
const normalizedSuccess = typeof parsedSuccessValue === 'string'
|
|
47
|
-
? ['true', '1', 'yes'].includes(parsedSuccessValue.toLowerCase())
|
|
48
|
-
: parsedSuccessValue === true;
|
|
49
|
-
if (!interpreted.success && normalizedSuccess) {
|
|
50
|
-
interpreted = {
|
|
51
|
-
...interpreted,
|
|
52
|
-
success: true,
|
|
53
|
-
error: undefined,
|
|
54
|
-
message: interpreted.message || `${action} executed`,
|
|
55
|
-
payload: { ...parsedPayload }
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
const finalSuccess = interpreted.success || normalizedSuccess;
|
|
59
|
-
const resolvedAction = coerceString(interpreted.payload.action) ?? action;
|
|
60
|
-
const fallbackOutput = typeof parsed.text === 'string' ? parsed.text : '';
|
|
61
|
-
const rawOutput = bestEffortInterpretedText(interpreted) ?? (fallbackOutput ? fallbackOutput : undefined);
|
|
62
|
-
if (finalSuccess) {
|
|
63
|
-
return {
|
|
64
|
-
...interpreted.payload,
|
|
65
|
-
success: true,
|
|
66
|
-
action: resolvedAction,
|
|
67
|
-
warnings: interpreted.warnings,
|
|
68
|
-
details: interpreted.details,
|
|
69
|
-
rawOutput,
|
|
70
|
-
raw: parsed.raw ?? interpreted.raw
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
return {
|
|
74
|
-
success: false,
|
|
75
|
-
action: resolvedAction,
|
|
76
|
-
error: interpreted.error ?? `${resolvedAction} failed`,
|
|
77
|
-
warnings: interpreted.warnings,
|
|
78
|
-
details: interpreted.details,
|
|
79
|
-
rawOutput,
|
|
80
|
-
raw: parsed.raw ?? interpreted.raw
|
|
81
|
-
};
|
|
20
|
+
return response;
|
|
82
21
|
}
|
|
83
|
-
catch (
|
|
84
|
-
return { success: false, error:
|
|
22
|
+
catch (error) {
|
|
23
|
+
return { success: false, error: 'AUTOMATION_BRIDGE_ERROR', message: String(error) };
|
|
85
24
|
}
|
|
86
25
|
}
|
|
87
|
-
// Draw debug line using Python SystemLibrary
|
|
88
26
|
async drawDebugLine(params) {
|
|
89
27
|
const color = params.color || [255, 0, 0, 255];
|
|
90
28
|
const duration = params.duration ?? 5.0;
|
|
91
29
|
const thickness = params.thickness ?? 1.0;
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
30
|
+
const result = await this.useAutomationBridge('line', {
|
|
31
|
+
start: params.start,
|
|
32
|
+
end: params.end,
|
|
33
|
+
color,
|
|
34
|
+
duration,
|
|
35
|
+
thickness
|
|
36
|
+
});
|
|
37
|
+
if (result.success) {
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
success: false,
|
|
42
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
43
|
+
message: result.message || 'Drawing debug lines requires Automation Bridge debug_shape handler',
|
|
103
44
|
params: {
|
|
104
45
|
start: params.start,
|
|
105
46
|
end: params.end,
|
|
@@ -107,27 +48,28 @@ unreal.SystemLibrary.draw_debug_line(world, start, end, color, ${duration}, ${th
|
|
|
107
48
|
duration,
|
|
108
49
|
thickness
|
|
109
50
|
}
|
|
110
|
-
}
|
|
51
|
+
};
|
|
111
52
|
}
|
|
112
|
-
// Draw debug box using Python SystemLibrary
|
|
113
53
|
async drawDebugBox(params) {
|
|
114
54
|
const color = params.color || [0, 255, 0, 255];
|
|
115
55
|
const rotation = params.rotation || [0, 0, 0];
|
|
116
56
|
const duration = params.duration ?? 5.0;
|
|
117
57
|
const thickness = params.thickness ?? 1.0;
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
return
|
|
130
|
-
|
|
58
|
+
const result = await this.useAutomationBridge('box', {
|
|
59
|
+
center: params.center,
|
|
60
|
+
extent: params.extent,
|
|
61
|
+
rotation,
|
|
62
|
+
color,
|
|
63
|
+
duration,
|
|
64
|
+
thickness
|
|
65
|
+
});
|
|
66
|
+
if (result.success) {
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
success: false,
|
|
71
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
72
|
+
message: result.message || 'Drawing debug boxes requires Automation Bridge debug_shape handler',
|
|
131
73
|
params: {
|
|
132
74
|
center: params.center,
|
|
133
75
|
extent: params.extent,
|
|
@@ -136,23 +78,28 @@ unreal.SystemLibrary.draw_debug_box(world, center, extent, color, rot, ${duratio
|
|
|
136
78
|
duration,
|
|
137
79
|
thickness
|
|
138
80
|
}
|
|
139
|
-
}
|
|
81
|
+
};
|
|
140
82
|
}
|
|
141
|
-
// Draw debug sphere using Python SystemLibrary
|
|
142
83
|
async drawDebugSphere(params) {
|
|
143
84
|
const segments = params.segments ?? 12;
|
|
144
85
|
const color = params.color || [0, 0, 255, 255];
|
|
145
86
|
const duration = params.duration ?? 5.0;
|
|
146
87
|
const thickness = params.thickness ?? 1.0;
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
color
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
88
|
+
const result = await this.useAutomationBridge('sphere', {
|
|
89
|
+
center: params.center,
|
|
90
|
+
radius: params.radius,
|
|
91
|
+
segments,
|
|
92
|
+
color,
|
|
93
|
+
duration,
|
|
94
|
+
thickness
|
|
95
|
+
});
|
|
96
|
+
if (result.success) {
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
success: false,
|
|
101
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
102
|
+
message: result.message || 'Drawing debug spheres requires Automation Bridge debug_shape handler',
|
|
156
103
|
params: {
|
|
157
104
|
center: params.center,
|
|
158
105
|
radius: params.radius,
|
|
@@ -161,19 +108,27 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
161
108
|
duration,
|
|
162
109
|
thickness
|
|
163
110
|
}
|
|
164
|
-
}
|
|
111
|
+
};
|
|
165
112
|
}
|
|
166
|
-
// The rest keep console-command fallbacks or editor helpers as before
|
|
167
113
|
async drawDebugCapsule(params) {
|
|
168
114
|
const rotation = params.rotation || [0, 0, 0];
|
|
169
115
|
const color = params.color || [255, 255, 0, 255];
|
|
170
116
|
const duration = params.duration || 5.0;
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
117
|
+
const result = await this.useAutomationBridge('capsule', {
|
|
118
|
+
center: params.center,
|
|
119
|
+
halfHeight: params.halfHeight,
|
|
120
|
+
radius: params.radius,
|
|
121
|
+
rotation,
|
|
122
|
+
color,
|
|
123
|
+
duration
|
|
124
|
+
});
|
|
125
|
+
if (result.success) {
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
success: false,
|
|
130
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
131
|
+
message: result.message || 'Drawing debug capsules requires Automation Bridge debug_shape handler',
|
|
177
132
|
params: {
|
|
178
133
|
center: params.center,
|
|
179
134
|
halfHeight: params.halfHeight,
|
|
@@ -182,17 +137,28 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
182
137
|
color,
|
|
183
138
|
duration
|
|
184
139
|
}
|
|
185
|
-
}
|
|
140
|
+
};
|
|
186
141
|
}
|
|
187
142
|
async drawDebugCone(params) {
|
|
188
143
|
const color = params.color || [255, 0, 255, 255];
|
|
189
144
|
const duration = params.duration || 5.0;
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
145
|
+
const result = await this.useAutomationBridge('cone', {
|
|
146
|
+
origin: params.origin,
|
|
147
|
+
direction: params.direction,
|
|
148
|
+
length: params.length,
|
|
149
|
+
angleWidth: params.angleWidth,
|
|
150
|
+
angleHeight: params.angleHeight,
|
|
151
|
+
numSides: params.numSides || 12,
|
|
152
|
+
color,
|
|
153
|
+
duration
|
|
154
|
+
});
|
|
155
|
+
if (result.success) {
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
success: false,
|
|
160
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
161
|
+
message: result.message || 'Drawing debug cones requires Automation Bridge debug_shape handler',
|
|
196
162
|
params: {
|
|
197
163
|
origin: params.origin,
|
|
198
164
|
direction: params.direction,
|
|
@@ -203,16 +169,25 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
203
169
|
color,
|
|
204
170
|
duration
|
|
205
171
|
}
|
|
206
|
-
}
|
|
172
|
+
};
|
|
207
173
|
}
|
|
208
174
|
async drawDebugString(params) {
|
|
209
175
|
const color = params.color || [255, 255, 255, 255];
|
|
210
176
|
const duration = params.duration || 5.0;
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
177
|
+
const result = await this.useAutomationBridge('string', {
|
|
178
|
+
location: params.location,
|
|
179
|
+
text: params.text,
|
|
180
|
+
color,
|
|
181
|
+
duration,
|
|
182
|
+
fontSize: params.fontSize
|
|
183
|
+
});
|
|
184
|
+
if (result.success) {
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
success: false,
|
|
189
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
190
|
+
message: result.message || 'Drawing debug strings requires Automation Bridge debug_shape handler',
|
|
216
191
|
params: {
|
|
217
192
|
location: params.location,
|
|
218
193
|
text: params.text,
|
|
@@ -220,18 +195,27 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
220
195
|
duration,
|
|
221
196
|
fontSize: params.fontSize
|
|
222
197
|
}
|
|
223
|
-
}
|
|
198
|
+
};
|
|
224
199
|
}
|
|
225
200
|
async drawDebugArrow(params) {
|
|
226
201
|
const color = params.color || [0, 255, 255, 255];
|
|
227
202
|
const duration = params.duration || 5.0;
|
|
228
203
|
const thickness = params.thickness || 2.0;
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
204
|
+
const result = await this.useAutomationBridge('arrow', {
|
|
205
|
+
start: params.start,
|
|
206
|
+
end: params.end,
|
|
207
|
+
arrowSize: params.arrowSize || 10.0,
|
|
208
|
+
color,
|
|
209
|
+
duration,
|
|
210
|
+
thickness
|
|
211
|
+
});
|
|
212
|
+
if (result.success) {
|
|
213
|
+
return result;
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
success: false,
|
|
217
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
218
|
+
message: result.message || 'Drawing debug arrows requires Automation Bridge debug_shape handler',
|
|
235
219
|
params: {
|
|
236
220
|
start: params.start,
|
|
237
221
|
end: params.end,
|
|
@@ -240,32 +224,42 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
240
224
|
duration,
|
|
241
225
|
thickness
|
|
242
226
|
}
|
|
243
|
-
}
|
|
227
|
+
};
|
|
244
228
|
}
|
|
245
229
|
async drawDebugPoint(params) {
|
|
246
230
|
const size = params.size || 10.0;
|
|
247
231
|
const color = params.color || [255, 255, 255, 255];
|
|
248
232
|
const duration = params.duration || 5.0;
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
233
|
+
const result = await this.useAutomationBridge('point', {
|
|
234
|
+
location: params.location,
|
|
235
|
+
size,
|
|
236
|
+
color,
|
|
237
|
+
duration
|
|
238
|
+
});
|
|
239
|
+
if (result.success) {
|
|
240
|
+
return result;
|
|
241
|
+
}
|
|
242
|
+
return {
|
|
243
|
+
success: false,
|
|
244
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
245
|
+
message: result.message || 'Drawing debug points requires Automation Bridge debug_shape handler',
|
|
254
246
|
params: {
|
|
255
247
|
location: params.location,
|
|
256
248
|
size,
|
|
257
249
|
color,
|
|
258
250
|
duration
|
|
259
251
|
}
|
|
260
|
-
}
|
|
252
|
+
};
|
|
261
253
|
}
|
|
262
254
|
async drawDebugCoordinateSystem(params) {
|
|
263
|
-
const
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
255
|
+
const result = await this.useAutomationBridge('coordinate_system', {
|
|
256
|
+
location: params.location,
|
|
257
|
+
rotation: params.rotation || [0, 0, 0],
|
|
258
|
+
scale: params.scale || 1.0,
|
|
259
|
+
duration: params.duration || 5.0,
|
|
260
|
+
thickness: params.thickness || 1.0
|
|
261
|
+
});
|
|
262
|
+
return result;
|
|
269
263
|
}
|
|
270
264
|
async drawDebugFrustum(params) {
|
|
271
265
|
const aspectRatio = params.aspectRatio || 1.77;
|
|
@@ -273,12 +267,23 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
273
267
|
const farPlane = params.farPlane || 1000.0;
|
|
274
268
|
const color = params.color || [128, 128, 255, 255];
|
|
275
269
|
const duration = params.duration || 5.0;
|
|
276
|
-
const
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
270
|
+
const result = await this.useAutomationBridge('frustum', {
|
|
271
|
+
origin: params.origin,
|
|
272
|
+
rotation: params.rotation,
|
|
273
|
+
fov: params.fov,
|
|
274
|
+
aspectRatio,
|
|
275
|
+
nearPlane,
|
|
276
|
+
farPlane,
|
|
277
|
+
color,
|
|
278
|
+
duration
|
|
279
|
+
});
|
|
280
|
+
if (result.success) {
|
|
281
|
+
return result;
|
|
282
|
+
}
|
|
283
|
+
return {
|
|
284
|
+
success: false,
|
|
285
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
286
|
+
message: result.message || 'Drawing debug frustums requires Automation Bridge debug_shape handler',
|
|
282
287
|
params: {
|
|
283
288
|
origin: params.origin,
|
|
284
289
|
rotation: params.rotation,
|
|
@@ -289,9 +294,15 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
289
294
|
color,
|
|
290
295
|
duration
|
|
291
296
|
}
|
|
292
|
-
}
|
|
297
|
+
};
|
|
293
298
|
}
|
|
294
299
|
async clearDebugDrawings() {
|
|
300
|
+
if (this.automationBridge) {
|
|
301
|
+
const response = await this.automationBridge.sendAutomationRequest('clear_debug_shapes', {});
|
|
302
|
+
if (response.success) {
|
|
303
|
+
return response;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
295
306
|
return this.bridge.executeConsoleCommand('FlushPersistentDebugLines');
|
|
296
307
|
}
|
|
297
308
|
async showCollision(params) {
|
|
@@ -311,9 +322,7 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
311
322
|
return this.bridge.executeConsoleCommand(command);
|
|
312
323
|
}
|
|
313
324
|
async setViewMode(params) {
|
|
314
|
-
// Map non-viewmode requests to appropriate show flags for safety
|
|
315
325
|
if (params.mode === 'CollisionPawn' || params.mode === 'CollisionVisibility') {
|
|
316
|
-
// Use collision visualization instead of viewmode (UE doesn't have these as view modes)
|
|
317
326
|
await this.showCollision({ enabled: true, type: 'Both' });
|
|
318
327
|
return { success: true, message: 'Collision visualization enabled (use show flags, not viewmode)' };
|
|
319
328
|
}
|
|
@@ -321,7 +330,6 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
321
330
|
'Lit', 'Unlit', 'Wireframe', 'DetailLighting', 'LightingOnly', 'LightComplexity', 'ShaderComplexity', 'LightmapDensity', 'StationaryLightOverlap', 'ReflectionOverride'
|
|
322
331
|
]);
|
|
323
332
|
if (!VALID_VIEWMODES.has(params.mode)) {
|
|
324
|
-
// Fallback to Lit if unknown
|
|
325
333
|
await this.bridge.executeConsoleCommand('viewmode Lit');
|
|
326
334
|
return { success: false, warning: `Unknown or unsupported viewmode '${params.mode}'. Reverted to Lit.` };
|
|
327
335
|
}
|
|
@@ -368,12 +376,26 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
368
376
|
const color = params.color || [255, 128, 0, 255];
|
|
369
377
|
const duration = params.duration || 5.0;
|
|
370
378
|
const thickness = params.thickness || 2.0;
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
379
|
+
const result = await this.useAutomationBridge('path', {
|
|
380
|
+
points: params.points,
|
|
381
|
+
color,
|
|
382
|
+
duration,
|
|
383
|
+
thickness
|
|
384
|
+
});
|
|
385
|
+
if (result.success) {
|
|
386
|
+
return result;
|
|
375
387
|
}
|
|
376
|
-
return {
|
|
388
|
+
return {
|
|
389
|
+
success: false,
|
|
390
|
+
error: result.error || 'AUTOMATION_BRIDGE_REQUIRED',
|
|
391
|
+
message: result.message || 'Drawing debug paths requires Automation Bridge debug_shape handler',
|
|
392
|
+
params: {
|
|
393
|
+
points: params.points,
|
|
394
|
+
color,
|
|
395
|
+
duration,
|
|
396
|
+
thickness
|
|
397
|
+
}
|
|
398
|
+
};
|
|
377
399
|
}
|
|
378
400
|
async showNavigationMesh(params) {
|
|
379
401
|
const command = params.enabled ? 'show Navigation' : 'show Navigation 0';
|
|
@@ -381,19 +403,51 @@ unreal.SystemLibrary.draw_debug_sphere(world, center, ${params.radius}, ${segmen
|
|
|
381
403
|
}
|
|
382
404
|
async enableOnScreenMessages(params) {
|
|
383
405
|
if (params.enabled && params.message) {
|
|
384
|
-
const
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
406
|
+
const result = await this.useAutomationBridge('message', {
|
|
407
|
+
message: params.message,
|
|
408
|
+
duration: params.duration || 5.0,
|
|
409
|
+
color: params.color || [255, 255, 255, 255]
|
|
410
|
+
});
|
|
411
|
+
if (result.success) {
|
|
412
|
+
return result;
|
|
413
|
+
}
|
|
414
|
+
return {
|
|
415
|
+
success: false,
|
|
416
|
+
error: 'AUTOMATION_BRIDGE_REQUIRED',
|
|
417
|
+
message: 'Showing on-screen messages requires Automation Bridge'
|
|
418
|
+
};
|
|
392
419
|
}
|
|
420
|
+
const command = params.enabled ? 'EnableAllScreenMessages' : 'DisableAllScreenMessages';
|
|
421
|
+
return this.bridge.executeConsoleCommand(command);
|
|
393
422
|
}
|
|
394
423
|
async showSkeletalMeshBones(params) {
|
|
395
|
-
const
|
|
396
|
-
|
|
424
|
+
const result = await this.useAutomationBridge('skeletal_meshes', {
|
|
425
|
+
actorName: params.actorName,
|
|
426
|
+
enabled: params.enabled
|
|
427
|
+
});
|
|
428
|
+
if (result.success) {
|
|
429
|
+
return result;
|
|
430
|
+
}
|
|
431
|
+
return {
|
|
432
|
+
success: false,
|
|
433
|
+
error: 'AUTOMATION_BRIDGE_REQUIRED',
|
|
434
|
+
message: 'Showing skeletal mesh bones requires Automation Bridge'
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
async clearDebugShapes() {
|
|
438
|
+
if (this.automationBridge) {
|
|
439
|
+
const response = await this.automationBridge.sendAutomationRequest('clear_debug_shapes', {});
|
|
440
|
+
if (response.success) {
|
|
441
|
+
return response;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
try {
|
|
445
|
+
await this.bridge.executeConsoleCommand('FlushPersistentDebugLines');
|
|
446
|
+
return { success: true, message: 'Debug shapes cleared' };
|
|
447
|
+
}
|
|
448
|
+
catch (err) {
|
|
449
|
+
return { success: false, error: `Failed to clear debug shapes: ${err}` };
|
|
450
|
+
}
|
|
397
451
|
}
|
|
398
452
|
}
|
|
399
453
|
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ITools } from '../types/tool-interfaces.js';
|
|
2
|
+
export interface DynamicHandlerContext {
|
|
3
|
+
name: string;
|
|
4
|
+
action: string;
|
|
5
|
+
args: any;
|
|
6
|
+
tools: ITools;
|
|
7
|
+
defaultHandler: () => Promise<any>;
|
|
8
|
+
}
|
|
9
|
+
export type DynamicHandlerFn = (ctx: DynamicHandlerContext) => Promise<any>;
|
|
10
|
+
export declare function getDynamicHandlerForTool(toolName: string, action?: string): Promise<DynamicHandlerFn | null>;
|
|
11
|
+
//# sourceMappingURL=dynamic-handler-registry.d.ts.map
|