ue-mcp 1.2.4 → 1.3.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/README.md +4 -3
- package/dist/action-class.js +56 -3
- package/dist/action-class.js.map +1 -1
- package/dist/bridge-timeouts.d.ts +64 -0
- package/dist/bridge-timeouts.js +118 -0
- package/dist/bridge-timeouts.js.map +1 -0
- package/dist/bridge.js +10 -2
- package/dist/bridge.js.map +1 -1
- package/dist/editor-control.d.ts +72 -5
- package/dist/editor-control.js +164 -140
- package/dist/editor-control.js.map +1 -1
- package/dist/editor-target.d.ts +55 -1
- package/dist/editor-target.js +107 -10
- package/dist/editor-target.js.map +1 -1
- package/dist/engine-observer.d.ts +59 -5
- package/dist/engine-observer.js +249 -29
- package/dist/engine-observer.js.map +1 -1
- package/dist/engine-root.d.ts +91 -0
- package/dist/engine-root.js +448 -0
- package/dist/engine-root.js.map +1 -0
- package/dist/epic-enrich.js +16 -1
- package/dist/epic-enrich.js.map +1 -1
- package/dist/feedback-cli.js +4 -0
- package/dist/feedback-cli.js.map +1 -1
- package/dist/feedback-deferred.d.ts +9 -0
- package/dist/feedback-deferred.js +2 -0
- package/dist/feedback-deferred.js.map +1 -1
- package/dist/feedback-fallback.d.ts +99 -0
- package/dist/feedback-fallback.js +173 -0
- package/dist/feedback-fallback.js.map +1 -0
- package/dist/flow/write-methods.js +20 -0
- package/dist/flow/write-methods.js.map +1 -1
- package/dist/lean-context.js +8 -3
- package/dist/lean-context.js.map +1 -1
- package/dist/locking.js +11 -2
- package/dist/locking.js.map +1 -1
- package/dist/project.d.ts +11 -0
- package/dist/project.js +23 -2
- package/dist/project.js.map +1 -1
- package/dist/python-gate.d.ts +95 -0
- package/dist/python-gate.js +175 -0
- package/dist/python-gate.js.map +1 -0
- package/dist/tool-counts.json +16 -16
- package/dist/tools/animation.js +288 -24
- package/dist/tools/animation.js.map +1 -1
- package/dist/tools/asset.js +79 -14
- package/dist/tools/asset.js.map +1 -1
- package/dist/tools/audio.js +59 -5
- package/dist/tools/audio.js.map +1 -1
- package/dist/tools/blueprint.js +29 -12
- package/dist/tools/blueprint.js.map +1 -1
- package/dist/tools/chooser.js +4 -1
- package/dist/tools/chooser.js.map +1 -1
- package/dist/tools/editor.js +81 -43
- package/dist/tools/editor.js.map +1 -1
- package/dist/tools/feedback.js +214 -48
- package/dist/tools/feedback.js.map +1 -1
- package/dist/tools/foliage.js +27 -1
- package/dist/tools/foliage.js.map +1 -1
- package/dist/tools/gameplay.js +38 -11
- package/dist/tools/gameplay.js.map +1 -1
- package/dist/tools/gas.js +17 -5
- package/dist/tools/gas.js.map +1 -1
- package/dist/tools/landscape.js +22 -7
- package/dist/tools/landscape.js.map +1 -1
- package/dist/tools/level.js +322 -51
- package/dist/tools/level.js.map +1 -1
- package/dist/tools/material.js +10 -4
- package/dist/tools/material.js.map +1 -1
- package/dist/tools/niagara.js +3 -2
- package/dist/tools/niagara.js.map +1 -1
- package/dist/tools/pcg.js +6 -5
- package/dist/tools/pcg.js.map +1 -1
- package/dist/tools/project.js +47 -20
- package/dist/tools/project.js.map +1 -1
- package/dist/types.d.ts +21 -0
- package/dist/types.js +46 -3
- package/dist/types.js.map +1 -1
- package/dist/ue-mcp.default.yml +493 -125
- package/package.json +2 -2
- package/plugin/ue_mcp_bridge/NATIVE_RUNTIME_VISIBILITY.md +53 -0
- package/plugin/ue_mcp_bridge/NATIVE_STATIC_MESH_USAGE_PROGRESS.md +115 -0
- package/plugin/ue_mcp_bridge/README_MassHandlers.md +97 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/BridgeServer.cpp +14 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/GameThreadExecutor.cpp +21 -4
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/GameThreadExecutor.h +9 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/HandlerJsonProperty.h +395 -69
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers.cpp +79 -3
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers.h +25 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_ControlRig.cpp +3 -3
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_ControlRigSequencer.cpp +3061 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_IKRetargeterAuthoring.cpp +961 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_IKRigAuthoring.cpp +900 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_Pose.cpp +769 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_Sequence.cpp +44 -3
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_SkeletalLive.cpp +217 -11
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_StateMachine.cpp +551 -24
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_Validation.cpp +735 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers.cpp +352 -73
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers.h +8 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_BulkProperties.cpp +1 -1
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_BulkRead.cpp +503 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_BulkRead.h +21 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_BulkUpsert.cpp +2 -2
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Enum.cpp +2 -2
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Geometry.cpp +902 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Geometry.h +33 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Import.cpp +478 -134
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Mesh.cpp +5 -5
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_MeshBoolean.cpp +933 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_MeshBoolean.h +35 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Redirectors.cpp +478 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_RenderTarget.cpp +1 -1
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Sockets.cpp +4 -4
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Struct.cpp +2 -2
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Subobject.cpp +319 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AudioHandlers_SoundCue.cpp +3 -3
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers.cpp +482 -35
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers.h +10 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Collision.cpp +502 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Collision.h +43 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Functions.cpp +89 -7
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Graph.cpp +17 -51
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Internal.h +107 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Properties.cpp +10 -10
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Search.cpp +648 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DemoHandlers.cpp +5 -1
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DiffHandlers.cpp +252 -1
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DiffHandlers.h +10 -2
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.cpp +252 -41
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.h +4 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers_Build.cpp +250 -27
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers_PIE.cpp +303 -125
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers_PIERuntime.cpp +73 -50
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers_RuntimeVisibility.cpp +757 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/FoliageHandlers.cpp +11 -2
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/FoliageHandlers.h +3 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/FoliageHandlers_Batch.cpp +419 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers.cpp +39 -161
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers.h +66 -1
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers_BTAuthoring.cpp +1323 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers_BehaviorTree.cpp +1211 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GasHandlers.cpp +2 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GasHandlers.h +60 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GasHandlers_Runtime.cpp +363 -12
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/HandlerEditorState.h +84 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LandscapeHandlers.cpp +1288 -36
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LandscapeHandlers.h +3 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LandscapeHandlers_Sculpt.cpp +41 -16
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers.cpp +959 -213
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers.h +66 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_BatchWrite.cpp +1571 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Convert.cpp +316 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Inspection.cpp +280 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_InstanceProjection.cpp +666 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_InstanceProjection_Internal.h +63 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Lights.cpp +43 -12
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_MultiLevel.cpp +13 -47
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_PostProcess.cpp +527 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Query.cpp +1169 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Refresh.cpp +723 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Save.cpp +325 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Spatial.cpp +360 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Trace.cpp +178 -58
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Transient.cpp +337 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Volumes.cpp +25 -12
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_WorldPartition.cpp +10 -9
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_WorldPartitionSettings.cpp +686 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MassHandlers.cpp +467 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MassHandlers.h +22 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MaterialHandlers.cpp +452 -175
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MaterialHandlers.h +5 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MaterialHandlers_Build.cpp +597 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/NiagaraHandlers.cpp +17 -15
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/PCGHandlers.cpp +38 -168
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/PhysicsHandlers.cpp +39 -30
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SequencerHandlers.cpp +392 -78
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SequencerHandlers.h +2 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SequencerHandlers_Internal.h +83 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SkeletalMeshHandlers.cpp +200 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SkeletalMeshHandlers.h +15 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SplineHandlers.cpp +19 -12
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/StateTreeHandlers.cpp +31 -1
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/WidgetHandlers.cpp +307 -69
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/WidgetHandlers.h +84 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/WidgetHandlers_Extraction.cpp +8 -41
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/WidgetHandlers_Properties.cpp +33 -52
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/ActorSelectorTests.cpp +344 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AnimationControlRigTimelineTests.cpp +60 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AnimationPoseTests.cpp +115 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AssetBulkReadTests.cpp +177 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AssetDeleteGuardTests.cpp +276 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AssetPathResolutionTests.cpp +243 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AssetPropertyPersistTests.cpp +213 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AssetSubobjectTests.cpp +235 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AutomationRunnerTests.cpp +72 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/BehaviorTreeAuthoringTests.cpp +526 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/BehaviorTreeNodeTests.cpp +334 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/BlueprintHandlerSurfaceTests.cpp +362 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/BridgeProtocolTests.cpp +14 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/CollisionQueryTests.cpp +288 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/DataTableRowWriteTests.cpp +453 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/EditorFunctionCallTests.cpp +223 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/FoliageBatchTests.cpp +147 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/GameThreadGateTests.cpp +82 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/GasLiveAttributeTests.cpp +183 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LandscapeSampleTests.cpp +119 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelBatchWriteTests.cpp +176 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelComponentTreeInstanceCountTests.cpp +189 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelConvertBrushesTests.cpp +100 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelInstanceProjectionTests.cpp +265 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelPostProcessOverrideTests.cpp +258 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelQueryComponentsTests.cpp +195 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelRefreshTests.cpp +142 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelSaveReportTests.cpp +125 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelScriptHandlersTests.cpp +42 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelStaticMeshUsageTests.cpp +412 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelTraceWorldScopeTests.cpp +133 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelTransientActorTests.cpp +205 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelWorldPartitionSettingsTests.cpp +168 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/MCPInstancedStructPathTestTypes.h +51 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/MCPInstancedStructPathTests.cpp +379 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/MaterialBuildTests.cpp +238 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/MeshBooleanTests.cpp +170 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/MeshGeometryTests.cpp +116 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/PackageSaveExtensionTests.cpp +161 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/PackageWriteGuardTests.cpp +253 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/RuntimeVisibilityTests.cpp +143 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/SequencerHandlerTests.cpp +660 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/SequencerScrubTests.cpp +50 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/SkeletonDiffTests.cpp +685 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/WidgetBlueprintResolveTests.cpp +145 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/UE_MCP_Bridge.cpp +80 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Public/HandlerFunctionCall.h +509 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Public/HandlerQuery.h +407 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Public/HandlerUtils.h +1008 -77
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/UE_MCP_Bridge.Build.cs +87 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_BridgeStatus/Private/MCPEngineStatus.cpp +152 -14
- package/plugin/ue_mcp_bridge/Source/UE_MCP_BridgeStatus/Private/Tests/MCPEngineStatusTests.cpp +65 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_BridgeStatus/Public/MCPEngineStatus.h +32 -1
- package/plugin/ue_mcp_bridge/Source/UE_MCP_BridgeStatus/UE_MCP_BridgeStatus.Build.cs +2 -0
- package/skills/ue-mcp-animation/SKILL.md +154 -0
- package/skills/ue-mcp-blueprint/SKILL.md +71 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "CoreMinimal.h"
|
|
4
|
+
#include "Dom/JsonObject.h"
|
|
5
|
+
#include "Dom/JsonValue.h"
|
|
6
|
+
|
|
7
|
+
class UWorld;
|
|
8
|
+
|
|
9
|
+
namespace UEMCPInstanceProjection
|
|
10
|
+
{
|
|
11
|
+
constexpr int32 DefaultMaxInstances = 10000;
|
|
12
|
+
constexpr int32 HardMaxInstances = 50000;
|
|
13
|
+
constexpr int32 MaxReportedSamples = 32;
|
|
14
|
+
constexpr int32 MaxFilteredSurfaceHits = 64;
|
|
15
|
+
|
|
16
|
+
enum class EMissPolicy : uint8
|
|
17
|
+
{
|
|
18
|
+
Error,
|
|
19
|
+
Skip,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
struct FProjectionPlanEntry
|
|
23
|
+
{
|
|
24
|
+
int32 InstanceIndex = INDEX_NONE;
|
|
25
|
+
FTransform Before = FTransform::Identity;
|
|
26
|
+
FTransform After = FTransform::Identity;
|
|
27
|
+
bool bHit = false;
|
|
28
|
+
FString HitActorLabel;
|
|
29
|
+
FString HitActorClass;
|
|
30
|
+
FString MissReason;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
struct FProjectionPlan
|
|
34
|
+
{
|
|
35
|
+
TArray<FProjectionPlanEntry> Entries;
|
|
36
|
+
int32 HitCount = 0;
|
|
37
|
+
int32 MissCount = 0;
|
|
38
|
+
double MinDistance = TNumericLimits<double>::Max();
|
|
39
|
+
double MaxDistance = 0.0;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
bool ParseMissPolicy(const FString& InValue, EMissPolicy& OutPolicy);
|
|
43
|
+
|
|
44
|
+
FVector ApplySurfaceOffset(const FVector& ImpactPoint, const FVector& ImpactNormal, double SurfaceOffset);
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Testable core for the registered editor-world handler.
|
|
48
|
+
*
|
|
49
|
+
* Raw bridge parameters:
|
|
50
|
+
* - actorLabel (required), componentName (required only when ambiguous)
|
|
51
|
+
* - instanceIndices (optional; omitted means all), maxInstances (default
|
|
52
|
+
* 10000, hard limit 50000)
|
|
53
|
+
* - direction, traceStartOffset, traceDistance, channel, traceComplex
|
|
54
|
+
* - surfaceActorClass, surfaceActorLabels, surfaceOffset
|
|
55
|
+
* - onMiss (error or skip), dryRun (default true)
|
|
56
|
+
*
|
|
57
|
+
* A commit still runs the complete preflight in the same game-thread call,
|
|
58
|
+
* then applies all hits in one editor transaction without saving a package.
|
|
59
|
+
*/
|
|
60
|
+
TSharedPtr<FJsonValue> SnapInstancesToSurfaceInWorld(
|
|
61
|
+
UWorld* World,
|
|
62
|
+
const TSharedPtr<FJsonObject>& Params);
|
|
63
|
+
}
|
|
@@ -168,6 +168,7 @@ TSharedPtr<FJsonValue> FLevelHandlers::SpawnLight(const TSharedPtr<FJsonObject>&
|
|
|
168
168
|
auto Result = MCPSuccess();
|
|
169
169
|
MCPSetCreated(Result);
|
|
170
170
|
Result->SetStringField(TEXT("actorLabel"), FinalLabel);
|
|
171
|
+
Result->SetStringField(TEXT("actorPath"), NewLight->GetPathName());
|
|
171
172
|
Result->SetStringField(TEXT("actorName"), NewLight->GetName());
|
|
172
173
|
Result->SetStringField(TEXT("lightType"), LightType);
|
|
173
174
|
|
|
@@ -182,15 +183,14 @@ TSharedPtr<FJsonValue> FLevelHandlers::SpawnLight(const TSharedPtr<FJsonObject>&
|
|
|
182
183
|
TSharedPtr<FJsonValue> FLevelHandlers::SetLightProperties(const TSharedPtr<FJsonObject>& Params)
|
|
183
184
|
{
|
|
184
185
|
FString ActorLabel;
|
|
185
|
-
if (auto Err =
|
|
186
|
+
if (auto Err = RequireStringAlt(Params, TEXT("actorLabel"), TEXT("actorPath"), ActorLabel)) return Err;
|
|
186
187
|
|
|
187
188
|
REQUIRE_EDITOR_WORLD(World);
|
|
188
189
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
190
|
+
TSharedPtr<FJsonValue> ActorErr;
|
|
191
|
+
AActor* Actor = MCPResolveActor(World, Params, ActorErr);
|
|
192
|
+
if (!Actor) return ActorErr;
|
|
193
|
+
ActorLabel = Actor->GetActorLabel();
|
|
194
194
|
|
|
195
195
|
ULightComponent* LightComponent = Actor->FindComponentByClass<ULightComponent>();
|
|
196
196
|
// #608: USkyLightComponent is not a ULightComponent, so it was previously
|
|
@@ -447,6 +447,7 @@ TSharedPtr<FJsonValue> FLevelHandlers::SetLightProperties(const TSharedPtr<FJson
|
|
|
447
447
|
auto Result = MCPSuccess();
|
|
448
448
|
MCPSetUpdated(Result);
|
|
449
449
|
Result->SetStringField(TEXT("actorLabel"), ActorLabel);
|
|
450
|
+
Result->SetStringField(TEXT("actorPath"), Actor->GetPathName());
|
|
450
451
|
Result->SetNumberField(TEXT("intensity"), LightComponent ? (double)LightComponent->Intensity : (SkyForProps ? (double)SkyForProps->Intensity : 0.0));
|
|
451
452
|
Result->SetBoolField(TEXT("isSkyLight"), LightComponent == nullptr && SkyForProps != nullptr);
|
|
452
453
|
Result->SetStringField(TEXT("mobility"), MobilityToString(PropertyComponent->Mobility));
|
|
@@ -517,16 +518,45 @@ TSharedPtr<FJsonValue> FLevelHandlers::SetFogProperties(const TSharedPtr<FJsonOb
|
|
|
517
518
|
UWorld* World = ResolveWorldFromParams(Params, *WorldScope);
|
|
518
519
|
if (!World) return MCPError(TEXT("World not available"));
|
|
519
520
|
|
|
520
|
-
|
|
521
|
-
|
|
521
|
+
// #983: a named selector goes through the shared resolver, so a duplicated
|
|
522
|
+
// label is refused with the candidate paths rather than tuning whichever
|
|
523
|
+
// fog the actor iterator reached first. Without one, "the only fog in the
|
|
524
|
+
// level" is a default this action is entitled to, and several is reported
|
|
525
|
+
// rather than picked between.
|
|
522
526
|
AExponentialHeightFog* Fog = nullptr;
|
|
523
|
-
|
|
527
|
+
FMCPActorSelector FogSelector;
|
|
528
|
+
FogSelector.bRequired = false;
|
|
529
|
+
TSharedPtr<FJsonValue> FogError;
|
|
530
|
+
if (AActor* Named = MCPResolveActor(World, Params, FogError, FogSelector))
|
|
531
|
+
{
|
|
532
|
+
Fog = Cast<AExponentialHeightFog>(Named);
|
|
533
|
+
if (!Fog)
|
|
534
|
+
{
|
|
535
|
+
return MCPError(FString::Printf(
|
|
536
|
+
TEXT("Actor '%s' is a %s, not an ExponentialHeightFog"),
|
|
537
|
+
*Named->GetActorLabel(), *Named->GetClass()->GetName()));
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
else if (FogError.IsValid())
|
|
541
|
+
{
|
|
542
|
+
return FogError;
|
|
543
|
+
}
|
|
544
|
+
else
|
|
524
545
|
{
|
|
525
|
-
|
|
546
|
+
TArray<AExponentialHeightFog*> Fogs;
|
|
547
|
+
for (TActorIterator<AExponentialHeightFog> It(World); It; ++It)
|
|
548
|
+
{
|
|
549
|
+
if (IsValid(*It)) Fogs.Add(*It);
|
|
550
|
+
}
|
|
551
|
+
if (Fogs.Num() > 1)
|
|
526
552
|
{
|
|
527
|
-
|
|
528
|
-
|
|
553
|
+
TArray<FString> Labels;
|
|
554
|
+
for (AExponentialHeightFog* Candidate : Fogs) Labels.Add(Candidate->GetActorLabel());
|
|
555
|
+
return MCPError(FString::Printf(
|
|
556
|
+
TEXT("%d ExponentialHeightFog actors in the level; pass actorLabel or actorPath to choose. Available: [%s]"),
|
|
557
|
+
Fogs.Num(), *FString::Join(Labels, TEXT(", "))));
|
|
529
558
|
}
|
|
559
|
+
Fog = Fogs.Num() == 1 ? Fogs[0] : nullptr;
|
|
530
560
|
}
|
|
531
561
|
if (!Fog) return MCPError(TEXT("No ExponentialHeightFog actor found"));
|
|
532
562
|
|
|
@@ -594,6 +624,7 @@ TSharedPtr<FJsonValue> FLevelHandlers::SetFogProperties(const TSharedPtr<FJsonOb
|
|
|
594
624
|
auto Result = MCPSuccess();
|
|
595
625
|
MCPSetUpdated(Result);
|
|
596
626
|
Result->SetStringField(TEXT("actorLabel"), Fog->GetActorLabel());
|
|
627
|
+
Result->SetStringField(TEXT("actorPath"), Fog->GetPathName());
|
|
597
628
|
Result->SetNumberField(TEXT("fogDensity"), FC->FogDensity);
|
|
598
629
|
Result->SetNumberField(TEXT("fogHeightFalloff"), FC->FogHeightFalloff);
|
|
599
630
|
return MCPResult(Result);
|
package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_MultiLevel.cpp
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#include "LevelHandlers.h"
|
|
2
2
|
|
|
3
3
|
#include "HandlerUtils.h"
|
|
4
|
+
#include "HandlerEditorState.h"
|
|
4
5
|
|
|
5
6
|
#include "Editor.h"
|
|
6
7
|
#include "Engine/Brush.h"
|
|
@@ -40,41 +41,6 @@ namespace
|
|
|
40
41
|
TArray<FString> ProtectedLabels;
|
|
41
42
|
};
|
|
42
43
|
|
|
43
|
-
TArray<TSharedPtr<FJsonValue>> StringListToJson(const TArray<FString>& Values)
|
|
44
|
-
{
|
|
45
|
-
TArray<TSharedPtr<FJsonValue>> Result;
|
|
46
|
-
Result.Reserve(Values.Num());
|
|
47
|
-
for (const FString& Value : Values)
|
|
48
|
-
{
|
|
49
|
-
Result.Add(MakeShared<FJsonValueString>(Value));
|
|
50
|
-
}
|
|
51
|
-
return Result;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
void CollectDirtyEditorPackageNames(TArray<FString>& OutPackageNames)
|
|
55
|
-
{
|
|
56
|
-
OutPackageNames.Reset();
|
|
57
|
-
TArray<UPackage*> DirtyPackages;
|
|
58
|
-
FEditorFileUtils::GetDirtyContentPackages(DirtyPackages);
|
|
59
|
-
FEditorFileUtils::GetDirtyWorldPackages(DirtyPackages);
|
|
60
|
-
for (UPackage* Package : DirtyPackages)
|
|
61
|
-
{
|
|
62
|
-
if (!Package || !Package->IsDirty())
|
|
63
|
-
{
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const FString PackageName = Package->GetName();
|
|
68
|
-
if (PackageName.StartsWith(TEXT("/Script/")))
|
|
69
|
-
{
|
|
70
|
-
continue;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
OutPackageNames.AddUnique(PackageName);
|
|
74
|
-
}
|
|
75
|
-
OutPackageNames.Sort();
|
|
76
|
-
}
|
|
77
|
-
|
|
78
44
|
UClass* ResolveExpectedActorClass(const FString& ClassPath, FString& OutError)
|
|
79
45
|
{
|
|
80
46
|
if (ClassPath.IsEmpty())
|
|
@@ -209,12 +175,12 @@ namespace
|
|
|
209
175
|
Result->SetNumberField(TEXT("matched"), Request.MatchedLabels.Num());
|
|
210
176
|
Result->SetNumberField(TEXT("deleted"), Request.Deleted);
|
|
211
177
|
Result->SetBoolField(TEXT("saved"), Request.bSaved);
|
|
212
|
-
Result->SetArrayField(TEXT("matchedLabels"),
|
|
213
|
-
Result->SetArrayField(TEXT("missingLabels"),
|
|
214
|
-
Result->SetArrayField(TEXT("duplicateLabels"),
|
|
215
|
-
Result->SetArrayField(TEXT("wrongClassLabels"),
|
|
216
|
-
Result->SetArrayField(TEXT("nonPersistentLabels"),
|
|
217
|
-
Result->SetArrayField(TEXT("protectedLabels"),
|
|
178
|
+
Result->SetArrayField(TEXT("matchedLabels"), MCPStringListToJson(Request.MatchedLabels));
|
|
179
|
+
Result->SetArrayField(TEXT("missingLabels"), MCPStringListToJson(Request.MissingLabels));
|
|
180
|
+
Result->SetArrayField(TEXT("duplicateLabels"), MCPStringListToJson(Request.DuplicateLabels));
|
|
181
|
+
Result->SetArrayField(TEXT("wrongClassLabels"), MCPStringListToJson(Request.WrongClassLabels));
|
|
182
|
+
Result->SetArrayField(TEXT("nonPersistentLabels"), MCPStringListToJson(Request.NonPersistentLabels));
|
|
183
|
+
Result->SetArrayField(TEXT("protectedLabels"), MCPStringListToJson(Request.ProtectedLabels));
|
|
218
184
|
if (!Request.ExpectedClassPath.IsEmpty())
|
|
219
185
|
{
|
|
220
186
|
Result->SetStringField(TEXT("expectedClassPath"), Request.ExpectedClassPath);
|
|
@@ -399,7 +365,7 @@ TSharedPtr<FJsonValue> FLevelHandlers::DeleteExactLabeledActorsInLevels(
|
|
|
399
365
|
}
|
|
400
366
|
|
|
401
367
|
TArray<FString> InitialDirtyPackages;
|
|
402
|
-
CollectDirtyEditorPackageNames(InitialDirtyPackages);
|
|
368
|
+
MCPEditorState::CollectDirtyEditorPackageNames(InitialDirtyPackages);
|
|
403
369
|
if (!InitialDirtyPackages.IsEmpty())
|
|
404
370
|
{
|
|
405
371
|
auto Result = MCPSuccess();
|
|
@@ -407,7 +373,7 @@ TSharedPtr<FJsonValue> FLevelHandlers::DeleteExactLabeledActorsInLevels(
|
|
|
407
373
|
Result->SetStringField(
|
|
408
374
|
TEXT("error"),
|
|
409
375
|
TEXT("Refusing to load levels while content or map packages are dirty"));
|
|
410
|
-
Result->SetArrayField(TEXT("dirtyPackages"),
|
|
376
|
+
Result->SetArrayField(TEXT("dirtyPackages"), MCPStringListToJson(InitialDirtyPackages));
|
|
411
377
|
return MCPResult(Result);
|
|
412
378
|
}
|
|
413
379
|
|
|
@@ -477,7 +443,7 @@ TSharedPtr<FJsonValue> FLevelHandlers::DeleteExactLabeledActorsInLevels(
|
|
|
477
443
|
Result->SetArrayField(TEXT("levels"), LevelResults);
|
|
478
444
|
if (!DirtyPackages.IsEmpty())
|
|
479
445
|
{
|
|
480
|
-
Result->SetArrayField(TEXT("dirtyPackages"),
|
|
446
|
+
Result->SetArrayField(TEXT("dirtyPackages"), MCPStringListToJson(DirtyPackages));
|
|
481
447
|
}
|
|
482
448
|
return MCPResult(Result);
|
|
483
449
|
};
|
|
@@ -529,7 +495,7 @@ TSharedPtr<FJsonValue> FLevelHandlers::DeleteExactLabeledActorsInLevels(
|
|
|
529
495
|
}
|
|
530
496
|
|
|
531
497
|
TArray<FString> DirtyAfterLoad;
|
|
532
|
-
CollectDirtyEditorPackageNames(DirtyAfterLoad);
|
|
498
|
+
MCPEditorState::CollectDirtyEditorPackageNames(DirtyAfterLoad);
|
|
533
499
|
if (!DirtyAfterLoad.IsEmpty())
|
|
534
500
|
{
|
|
535
501
|
return BuildResult(
|
|
@@ -605,7 +571,7 @@ TSharedPtr<FJsonValue> FLevelHandlers::DeleteExactLabeledActorsInLevels(
|
|
|
605
571
|
}
|
|
606
572
|
|
|
607
573
|
TArray<FString> DirtyAfterLoad;
|
|
608
|
-
CollectDirtyEditorPackageNames(DirtyAfterLoad);
|
|
574
|
+
MCPEditorState::CollectDirtyEditorPackageNames(DirtyAfterLoad);
|
|
609
575
|
if (!DirtyAfterLoad.IsEmpty())
|
|
610
576
|
{
|
|
611
577
|
return BuildResult(
|
|
@@ -717,7 +683,7 @@ TSharedPtr<FJsonValue> FLevelHandlers::DeleteExactLabeledActorsInLevels(
|
|
|
717
683
|
Request.bSaved = true;
|
|
718
684
|
|
|
719
685
|
TArray<FString> DirtyAfterSave;
|
|
720
|
-
CollectDirtyEditorPackageNames(DirtyAfterSave);
|
|
686
|
+
MCPEditorState::CollectDirtyEditorPackageNames(DirtyAfterSave);
|
|
721
687
|
if (!DirtyAfterSave.IsEmpty())
|
|
722
688
|
{
|
|
723
689
|
return BuildResult(
|