unreal-engine-mcp-server 0.5.4 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/automation/bridge.d.ts.map +1 -0
- package/dist/automation/bridge.js.map +1 -0
- package/dist/automation/connection-manager.d.ts.map +1 -0
- package/dist/automation/connection-manager.js.map +1 -0
- package/dist/automation/handshake.d.ts.map +1 -0
- package/dist/automation/handshake.js.map +1 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/message-handler.d.ts.map +1 -0
- package/dist/automation/message-handler.js.map +1 -0
- package/dist/automation/request-tracker.d.ts.map +1 -0
- package/dist/automation/request-tracker.js.map +1 -0
- package/dist/automation/types.d.ts.map +1 -0
- package/dist/automation/types.js.map +1 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +4 -3
- package/dist/cli.js.map +1 -0
- package/dist/config/class-aliases.d.ts.map +1 -0
- package/dist/config/class-aliases.js.map +1 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js.map +1 -0
- package/dist/graphql/loaders.d.ts.map +1 -0
- package/dist/graphql/loaders.js.map +1 -0
- package/dist/graphql/resolvers.d.ts.map +1 -0
- package/dist/graphql/resolvers.js +29 -29
- package/dist/graphql/resolvers.js.map +1 -0
- package/dist/graphql/schema.d.ts.map +1 -0
- package/dist/graphql/schema.js.map +1 -0
- package/dist/graphql/server.d.ts.map +1 -0
- package/dist/graphql/server.js.map +1 -0
- package/dist/graphql/types.d.ts.map +1 -0
- package/dist/graphql/types.js.map +1 -0
- package/dist/handlers/resource-handlers.d.ts.map +1 -0
- package/dist/handlers/resource-handlers.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -7
- package/dist/index.js.map +1 -0
- package/dist/resources/actors.d.ts.map +1 -0
- package/dist/resources/actors.js.map +1 -0
- package/dist/resources/assets.d.ts.map +1 -0
- package/dist/resources/assets.js +6 -4
- package/dist/resources/assets.js.map +1 -0
- package/dist/resources/levels.d.ts.map +1 -0
- package/dist/resources/levels.js.map +1 -0
- package/dist/server/resource-registry.d.ts.map +1 -0
- package/dist/server/resource-registry.js.map +1 -0
- package/dist/server/tool-registry.d.ts.map +1 -0
- package/dist/server/tool-registry.js.map +1 -0
- package/dist/server-setup.d.ts.map +1 -0
- package/dist/server-setup.js.map +1 -0
- package/dist/services/health-monitor.d.ts.map +1 -0
- package/dist/services/health-monitor.js.map +1 -0
- package/dist/services/metrics-server.d.ts.map +1 -0
- package/dist/services/metrics-server.js.map +1 -0
- package/dist/tools/actors.d.ts.map +1 -0
- package/dist/tools/actors.js +3 -1
- package/dist/tools/actors.js.map +1 -0
- package/dist/tools/animation.d.ts.map +1 -0
- package/dist/tools/animation.js +2 -2
- package/dist/tools/animation.js.map +1 -0
- package/dist/tools/assets.d.ts.map +1 -0
- package/dist/tools/assets.js.map +1 -0
- package/dist/tools/audio.d.ts.map +1 -0
- package/dist/tools/audio.js.map +1 -0
- package/dist/tools/base-tool.d.ts.map +1 -0
- package/dist/tools/base-tool.js.map +1 -0
- package/dist/tools/behavior-tree.d.ts.map +1 -0
- package/dist/tools/behavior-tree.js.map +1 -0
- package/dist/tools/blueprint.d.ts.map +1 -0
- package/dist/tools/blueprint.js +4 -2
- package/dist/tools/blueprint.js.map +1 -0
- package/dist/tools/consolidated-tool-definitions.d.ts.map +1 -0
- package/dist/tools/consolidated-tool-definitions.js.map +1 -0
- package/dist/tools/consolidated-tool-handlers.d.ts.map +1 -0
- package/dist/tools/consolidated-tool-handlers.js.map +1 -0
- package/dist/tools/debug.d.ts.map +1 -0
- package/dist/tools/debug.js +3 -1
- package/dist/tools/debug.js.map +1 -0
- package/dist/tools/dynamic-handler-registry.d.ts.map +1 -0
- package/dist/tools/dynamic-handler-registry.js +3 -1
- package/dist/tools/dynamic-handler-registry.js.map +1 -0
- package/dist/tools/editor.d.ts.map +1 -0
- package/dist/tools/editor.js +1 -1
- package/dist/tools/editor.js.map +1 -0
- package/dist/tools/engine.d.ts.map +1 -0
- package/dist/tools/engine.js.map +1 -0
- package/dist/tools/environment.d.ts.map +1 -0
- package/dist/tools/environment.js +2 -2
- package/dist/tools/environment.js.map +1 -0
- package/dist/tools/foliage.d.ts.map +1 -0
- package/dist/tools/foliage.js.map +1 -0
- package/dist/tools/handlers/actor-handlers.d.ts +1 -1
- package/dist/tools/handlers/actor-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/actor-handlers.js +6 -5
- package/dist/tools/handlers/actor-handlers.js.map +1 -0
- package/dist/tools/handlers/animation-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/animation-handlers.js.map +1 -0
- package/dist/tools/handlers/argument-helper.d.ts.map +1 -0
- package/dist/tools/handlers/argument-helper.js.map +1 -0
- package/dist/tools/handlers/asset-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/asset-handlers.js +5 -1
- package/dist/tools/handlers/asset-handlers.js.map +1 -0
- package/dist/tools/handlers/audio-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/audio-handlers.js.map +1 -0
- package/dist/tools/handlers/blueprint-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/blueprint-handlers.js +2 -1
- package/dist/tools/handlers/blueprint-handlers.js.map +1 -0
- package/dist/tools/handlers/common-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/common-handlers.js.map +1 -0
- package/dist/tools/handlers/editor-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/editor-handlers.js +12 -2
- package/dist/tools/handlers/editor-handlers.js.map +1 -0
- package/dist/tools/handlers/effect-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/effect-handlers.js.map +1 -0
- package/dist/tools/handlers/environment-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/environment-handlers.js.map +1 -0
- package/dist/tools/handlers/graph-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/graph-handlers.js +61 -1
- package/dist/tools/handlers/graph-handlers.js.map +1 -0
- package/dist/tools/handlers/input-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/input-handlers.js.map +1 -0
- package/dist/tools/handlers/inspect-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/inspect-handlers.js.map +1 -0
- package/dist/tools/handlers/level-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/level-handlers.js.map +1 -0
- package/dist/tools/handlers/lighting-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/lighting-handlers.js +23 -1
- package/dist/tools/handlers/lighting-handlers.js.map +1 -0
- package/dist/tools/handlers/performance-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/performance-handlers.js +15 -2
- package/dist/tools/handlers/performance-handlers.js.map +1 -0
- package/dist/tools/handlers/pipeline-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/pipeline-handlers.js.map +1 -0
- package/dist/tools/handlers/sequence-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/sequence-handlers.js.map +1 -0
- package/dist/tools/handlers/system-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/system-handlers.js +16 -1
- package/dist/tools/handlers/system-handlers.js.map +1 -0
- package/dist/tools/input.d.ts.map +1 -0
- package/dist/tools/input.js +3 -1
- package/dist/tools/input.js.map +1 -0
- package/dist/tools/introspection.d.ts.map +1 -0
- package/dist/tools/introspection.js.map +1 -0
- package/dist/tools/landscape.d.ts.map +1 -0
- package/dist/tools/landscape.js +3 -1
- package/dist/tools/landscape.js.map +1 -0
- package/dist/tools/level.d.ts.map +1 -0
- package/dist/tools/level.js.map +1 -0
- package/dist/tools/lighting.d.ts.map +1 -0
- package/dist/tools/lighting.js +3 -1
- package/dist/tools/lighting.js.map +1 -0
- package/dist/tools/logs.d.ts.map +1 -0
- package/dist/tools/logs.js.map +1 -0
- package/dist/tools/materials.d.ts.map +1 -0
- package/dist/tools/materials.js +3 -1
- package/dist/tools/materials.js.map +1 -0
- package/dist/tools/niagara.d.ts.map +1 -0
- package/dist/tools/niagara.js +7 -5
- package/dist/tools/niagara.js.map +1 -0
- package/dist/tools/performance.d.ts.map +1 -0
- package/dist/tools/performance.js.map +1 -0
- package/dist/tools/physics.d.ts.map +1 -0
- package/dist/tools/physics.js +9 -7
- package/dist/tools/physics.js.map +1 -0
- package/dist/tools/property-dictionary.d.ts.map +1 -0
- package/dist/tools/property-dictionary.js.map +1 -0
- package/dist/tools/sequence.d.ts.map +1 -0
- package/dist/tools/sequence.js +3 -1
- package/dist/tools/sequence.js.map +1 -0
- package/dist/tools/tool-definition-utils.d.ts.map +1 -0
- package/dist/tools/tool-definition-utils.js.map +1 -0
- package/dist/tools/ui.d.ts.map +1 -0
- package/dist/tools/ui.js +3 -1
- package/dist/tools/ui.js.map +1 -0
- package/dist/types/automation-responses.d.ts.map +1 -0
- package/dist/types/automation-responses.js.map +1 -0
- package/dist/types/env.d.ts.map +1 -0
- package/dist/types/env.js.map +1 -0
- package/dist/types/handler-types.d.ts.map +1 -0
- package/dist/types/handler-types.js.map +1 -0
- package/dist/types/tool-interfaces.d.ts.map +1 -0
- package/dist/types/tool-interfaces.js.map +1 -0
- package/dist/types/tool-types.d.ts.map +1 -0
- package/dist/types/tool-types.js.map +1 -0
- package/dist/unreal-bridge.d.ts +1 -0
- package/dist/unreal-bridge.d.ts.map +1 -0
- package/dist/unreal-bridge.js +8 -0
- package/dist/unreal-bridge.js.map +1 -0
- package/dist/utils/command-validator.d.ts.map +1 -0
- package/dist/utils/command-validator.js.map +1 -0
- package/dist/utils/elicitation.d.ts.map +1 -0
- package/dist/utils/elicitation.js.map +1 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/ini-reader.d.ts.map +1 -0
- package/dist/utils/ini-reader.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/normalize.d.ts.map +1 -0
- package/dist/utils/normalize.js.map +1 -0
- package/dist/utils/path-security.d.ts.map +1 -0
- package/dist/utils/path-security.js.map +1 -0
- package/dist/utils/response-factory.d.ts.map +1 -0
- package/dist/utils/response-factory.js +3 -1
- package/dist/utils/response-factory.js.map +1 -0
- package/dist/utils/response-validator.d.ts.map +1 -0
- package/dist/utils/response-validator.js.map +1 -0
- package/dist/utils/result-helpers.d.ts.map +1 -0
- package/dist/utils/result-helpers.js.map +1 -0
- package/dist/utils/safe-json.d.ts.map +1 -0
- package/dist/utils/safe-json.js.map +1 -0
- package/dist/utils/unreal-command-queue.d.ts.map +1 -0
- package/dist/utils/unreal-command-queue.js.map +1 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/wasm/index.d.ts.map +1 -0
- package/dist/wasm/index.js.map +1 -0
- package/package.json +12 -34
- package/server.json +2 -2
- package/.dockerignore +0 -57
- package/.env.example +0 -26
- package/.env.production +0 -61
- package/.eslintrc.json +0 -0
- package/.eslintrc.override.json +0 -8
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -94
- package/.github/ISSUE_TEMPLATE/config.yml +0 -8
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -56
- package/.github/copilot-instructions.md +0 -478
- package/.github/dependabot.yml +0 -19
- package/.github/labeler.yml +0 -24
- package/.github/labels.yml +0 -70
- package/.github/pull_request_template.md +0 -42
- package/.github/release-drafter-config.yml +0 -51
- package/.github/workflows/auto-merge.yml +0 -38
- package/.github/workflows/ci.yml +0 -38
- package/.github/workflows/dependency-review.yml +0 -17
- package/.github/workflows/gemini-issue-triage.yml +0 -172
- package/.github/workflows/greetings.yml +0 -27
- package/.github/workflows/labeler.yml +0 -17
- package/.github/workflows/links.yml +0 -80
- package/.github/workflows/pr-size-labeler.yml +0 -137
- package/.github/workflows/publish-mcp.yml +0 -79
- package/.github/workflows/release-drafter.yml +0 -24
- package/.github/workflows/release.yml +0 -112
- package/.github/workflows/semantic-pull-request.yml +0 -35
- package/.github/workflows/smoke-test.yml +0 -36
- package/.github/workflows/stale.yml +0 -28
- package/CONTRIBUTING.md +0 -140
- package/Dockerfile +0 -37
- package/GEMINI.md +0 -115
- package/Public/Plugin_setup_guide.mp4 +0 -0
- package/Public/icon.png +0 -0
- package/claude_desktop_config_example.json +0 -15
- package/dist/types/responses.d.ts +0 -249
- package/dist/types/responses.js +0 -2
- package/docs/GraphQL-API.md +0 -888
- package/docs/Migration-Guide-v0.5.0.md +0 -684
- package/docs/Roadmap.md +0 -53
- package/docs/WebAssembly-Integration.md +0 -628
- package/docs/editor-plugin-extension.md +0 -370
- package/docs/handler-mapping.md +0 -249
- package/docs/native-automation-progress.md +0 -128
- package/docs/testing-guide.md +0 -423
- package/eslint.config.mjs +0 -68
- package/mcp-config-example.json +0 -14
- package/plugins/McpAutomationBridge/Config/FilterPlugin.ini +0 -8
- package/plugins/McpAutomationBridge/McpAutomationBridge.uplugin +0 -64
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/McpAutomationBridge.Build.cs +0 -189
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.cpp +0 -22
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.h +0 -30
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeHelpers.h +0 -1983
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeModule.cpp +0 -72
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSettings.cpp +0 -46
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSubsystem.cpp +0 -846
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AnimationHandlers.cpp +0 -2393
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetQueryHandlers.cpp +0 -300
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetWorkflowHandlers.cpp +0 -2807
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AudioHandlers.cpp +0 -1087
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BehaviorTreeHandlers.cpp +0 -488
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.cpp +0 -643
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.h +0 -31
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintGraphHandlers.cpp +0 -1094
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers.cpp +0 -5750
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers_List.cpp +0 -152
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ControlHandlers.cpp +0 -2614
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_DebugHandlers.cpp +0 -42
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EditorFunctionHandlers.cpp +0 -1237
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EffectHandlers.cpp +0 -1725
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EnvironmentHandlers.cpp +0 -2265
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_FoliageHandlers.cpp +0 -954
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InputHandlers.cpp +0 -209
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InsightsHandlers.cpp +0 -41
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LandscapeHandlers.cpp +0 -1164
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LevelHandlers.cpp +0 -762
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LightingHandlers.cpp +0 -663
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LogHandlers.cpp +0 -136
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_MaterialGraphHandlers.cpp +0 -494
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraGraphHandlers.cpp +0 -278
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraHandlers.cpp +0 -625
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PerformanceHandlers.cpp +0 -401
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PipelineHandlers.cpp +0 -67
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ProcessRequest.cpp +0 -472
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PropertyHandlers.cpp +0 -2634
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_RenderHandlers.cpp +0 -189
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.cpp +0 -917
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.h +0 -39
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequenceHandlers.cpp +0 -2706
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequencerHandlers.cpp +0 -519
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_TestHandlers.cpp +0 -38
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_UiHandlers.cpp +0 -668
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_WorldPartitionHandlers.cpp +0 -346
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.cpp +0 -1345
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.h +0 -149
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpConnectionManager.cpp +0 -782
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSettings.h +0 -115
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSubsystem.h +0 -796
- package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpConnectionManager.h +0 -117
- package/scripts/check-unreal-connection.mjs +0 -19
- package/scripts/clean-tmp.js +0 -23
- package/scripts/patch-wasm.js +0 -26
- package/scripts/run-all-tests.mjs +0 -136
- package/scripts/smoke-test.ts +0 -94
- package/scripts/sync-mcp-plugin.js +0 -143
- package/scripts/test-no-plugin-alternates.mjs +0 -113
- package/scripts/validate-server.js +0 -46
- package/scripts/verify-automation-bridge.js +0 -200
- package/src/automation/bridge.ts +0 -630
- package/src/automation/connection-manager.ts +0 -148
- package/src/automation/handshake.ts +0 -99
- package/src/automation/index.ts +0 -2
- package/src/automation/message-handler.ts +0 -192
- package/src/automation/request-tracker.ts +0 -155
- package/src/automation/types.ts +0 -108
- package/src/cli.ts +0 -34
- package/src/config/class-aliases.ts +0 -65
- package/src/config.ts +0 -73
- package/src/constants.ts +0 -29
- package/src/graphql/loaders.ts +0 -244
- package/src/graphql/resolvers.ts +0 -1008
- package/src/graphql/schema.ts +0 -452
- package/src/graphql/server.ts +0 -156
- package/src/graphql/types.ts +0 -10
- package/src/handlers/resource-handlers.ts +0 -186
- package/src/index.ts +0 -243
- package/src/resources/actors.ts +0 -127
- package/src/resources/assets.ts +0 -286
- package/src/resources/levels.ts +0 -68
- package/src/server/resource-registry.ts +0 -47
- package/src/server/tool-registry.ts +0 -354
- package/src/server-setup.ts +0 -114
- package/src/services/health-monitor.ts +0 -132
- package/src/services/metrics-server.ts +0 -176
- package/src/tools/actors.ts +0 -564
- package/src/tools/animation.ts +0 -941
- package/src/tools/assets.ts +0 -394
- package/src/tools/audio.ts +0 -499
- package/src/tools/base-tool.ts +0 -52
- package/src/tools/behavior-tree.ts +0 -45
- package/src/tools/blueprint.ts +0 -940
- package/src/tools/consolidated-tool-definitions.ts +0 -1256
- package/src/tools/consolidated-tool-handlers.ts +0 -302
- package/src/tools/debug.ts +0 -622
- package/src/tools/dynamic-handler-registry.ts +0 -33
- package/src/tools/editor.ts +0 -435
- package/src/tools/engine.ts +0 -43
- package/src/tools/environment.ts +0 -281
- package/src/tools/foliage.ts +0 -596
- package/src/tools/handlers/actor-handlers.ts +0 -244
- package/src/tools/handlers/animation-handlers.ts +0 -237
- package/src/tools/handlers/argument-helper.ts +0 -142
- package/src/tools/handlers/asset-handlers.ts +0 -550
- package/src/tools/handlers/audio-handlers.ts +0 -194
- package/src/tools/handlers/blueprint-handlers.ts +0 -380
- package/src/tools/handlers/common-handlers.ts +0 -108
- package/src/tools/handlers/editor-handlers.ts +0 -124
- package/src/tools/handlers/effect-handlers.ts +0 -224
- package/src/tools/handlers/environment-handlers.ts +0 -183
- package/src/tools/handlers/graph-handlers.ts +0 -117
- package/src/tools/handlers/input-handlers.ts +0 -28
- package/src/tools/handlers/inspect-handlers.ts +0 -450
- package/src/tools/handlers/level-handlers.ts +0 -253
- package/src/tools/handlers/lighting-handlers.ts +0 -151
- package/src/tools/handlers/performance-handlers.ts +0 -132
- package/src/tools/handlers/pipeline-handlers.ts +0 -194
- package/src/tools/handlers/sequence-handlers.ts +0 -438
- package/src/tools/handlers/system-handlers.ts +0 -564
- package/src/tools/input.ts +0 -160
- package/src/tools/introspection.ts +0 -689
- package/src/tools/landscape.ts +0 -649
- package/src/tools/level.ts +0 -989
- package/src/tools/lighting.ts +0 -1052
- package/src/tools/logs.ts +0 -219
- package/src/tools/materials.ts +0 -295
- package/src/tools/niagara.ts +0 -485
- package/src/tools/performance.ts +0 -661
- package/src/tools/physics.ts +0 -679
- package/src/tools/property-dictionary.ts +0 -98
- package/src/tools/sequence.ts +0 -385
- package/src/tools/tool-definition-utils.ts +0 -35
- package/src/tools/ui.ts +0 -452
- package/src/types/automation-responses.ts +0 -119
- package/src/types/env.ts +0 -17
- package/src/types/handler-types.ts +0 -442
- package/src/types/responses.ts +0 -355
- package/src/types/tool-interfaces.ts +0 -250
- package/src/types/tool-types.ts +0 -575
- package/src/unreal-bridge.ts +0 -693
- package/src/utils/command-validator.ts +0 -139
- package/src/utils/elicitation.ts +0 -132
- package/src/utils/error-handler.ts +0 -287
- package/src/utils/ini-reader.ts +0 -86
- package/src/utils/logger.ts +0 -35
- package/src/utils/normalize.test.ts +0 -162
- package/src/utils/normalize.ts +0 -146
- package/src/utils/path-security.ts +0 -43
- package/src/utils/response-factory.ts +0 -44
- package/src/utils/response-validator.ts +0 -395
- package/src/utils/result-helpers.ts +0 -195
- package/src/utils/safe-json.test.ts +0 -90
- package/src/utils/safe-json.ts +0 -70
- package/src/utils/unreal-command-queue.ts +0 -166
- package/src/utils/validation.test.ts +0 -184
- package/src/utils/validation.ts +0 -312
- package/src/wasm/index.ts +0 -838
- package/test-server.mjs +0 -100
- package/tests/test-animation.mjs +0 -369
- package/tests/test-asset-advanced.mjs +0 -82
- package/tests/test-asset-graph.mjs +0 -311
- package/tests/test-audio.mjs +0 -417
- package/tests/test-automation-timeouts.mjs +0 -98
- package/tests/test-behavior-tree.mjs +0 -444
- package/tests/test-blueprint-graph.mjs +0 -410
- package/tests/test-blueprint.mjs +0 -577
- package/tests/test-client-mode.mjs +0 -86
- package/tests/test-console-command.mjs +0 -56
- package/tests/test-control-actor.mjs +0 -425
- package/tests/test-control-editor.mjs +0 -112
- package/tests/test-graphql.mjs +0 -372
- package/tests/test-input.mjs +0 -349
- package/tests/test-inspect.mjs +0 -302
- package/tests/test-landscape.mjs +0 -316
- package/tests/test-lighting.mjs +0 -428
- package/tests/test-manage-asset.mjs +0 -438
- package/tests/test-manage-level.mjs +0 -89
- package/tests/test-materials.mjs +0 -356
- package/tests/test-niagara.mjs +0 -185
- package/tests/test-no-inline-python.mjs +0 -122
- package/tests/test-performance.mjs +0 -539
- package/tests/test-plugin-handshake.mjs +0 -82
- package/tests/test-runner.mjs +0 -993
- package/tests/test-sequence.mjs +0 -104
- package/tests/test-system.mjs +0 -96
- package/tests/test-wasm.mjs +0 -283
- package/tests/test-world-partition.mjs +0 -215
- package/tsconfig.json +0 -56
- package/vitest.config.ts +0 -35
- package/wasm/Cargo.lock +0 -363
- package/wasm/Cargo.toml +0 -42
- package/wasm/LICENSE +0 -21
- package/wasm/README.md +0 -253
- package/wasm/src/dependency_resolver.rs +0 -377
- package/wasm/src/lib.rs +0 -153
- package/wasm/src/property_parser.rs +0 -271
- package/wasm/src/transform_math.rs +0 -396
- package/wasm/tests/integration.rs +0 -109
|
@@ -1,450 +0,0 @@
|
|
|
1
|
-
import { cleanObject } from '../../utils/safe-json.js';
|
|
2
|
-
import { ITools } from '../../types/tool-interfaces.js';
|
|
3
|
-
import { executeAutomationRequest } from './common-handlers.js';
|
|
4
|
-
import { normalizeArgs, resolveObjectPath } from './argument-helper.js';
|
|
5
|
-
|
|
6
|
-
async function resolveComponentObjectPathFromArgs(args: any, tools: ITools): Promise<string> {
|
|
7
|
-
const componentName = typeof args.componentName === 'string' ? args.componentName.trim() : '';
|
|
8
|
-
const componentPath = typeof args.componentPath === 'string' ? args.componentPath.trim() : '';
|
|
9
|
-
|
|
10
|
-
// Direct path provided
|
|
11
|
-
const direct = componentPath || (
|
|
12
|
-
(componentName.includes(':') || componentName.includes('.')) &&
|
|
13
|
-
(componentName.startsWith('/Game') || componentName.startsWith('/Script') || componentName.startsWith('/Engine'))
|
|
14
|
-
? componentName
|
|
15
|
-
: ''
|
|
16
|
-
);
|
|
17
|
-
if (direct) return direct;
|
|
18
|
-
|
|
19
|
-
const actorName = await resolveObjectPath(args, tools, { pathKeys: [], actorKeys: ['actorName', 'name', 'objectPath'] });
|
|
20
|
-
if (!actorName) {
|
|
21
|
-
throw new Error('Invalid actorName: required to resolve componentName');
|
|
22
|
-
}
|
|
23
|
-
if (!componentName) {
|
|
24
|
-
throw new Error('Invalid componentName: must be a non-empty string');
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Use inspect:get_components to find the exact component path
|
|
28
|
-
const compsRes: any = await executeAutomationRequest(
|
|
29
|
-
tools,
|
|
30
|
-
'inspect',
|
|
31
|
-
{
|
|
32
|
-
action: 'get_components',
|
|
33
|
-
actorName: actorName,
|
|
34
|
-
objectPath: actorName
|
|
35
|
-
},
|
|
36
|
-
'Failed to get components'
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
let components: any[] = [];
|
|
40
|
-
if (compsRes.success) {
|
|
41
|
-
components = Array.isArray(compsRes?.components) ? compsRes.components : [];
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const needle = componentName.toLowerCase();
|
|
45
|
-
|
|
46
|
-
if (components.length > 0) {
|
|
47
|
-
// 1. Exact Name/Path Match
|
|
48
|
-
let match = components.find((c) => String(c?.name || '').toLowerCase() === needle)
|
|
49
|
-
?? components.find((c) => String(c?.path || '').toLowerCase() === needle)
|
|
50
|
-
?? components.find((c) => String(c?.path || '').toLowerCase().endsWith(`:${needle}`))
|
|
51
|
-
?? components.find((c) => String(c?.path || '').toLowerCase().endsWith(`.${needle}`));
|
|
52
|
-
|
|
53
|
-
// 2. Fuzzy/StartsWith Match (e.g. "StaticMeshComponent" -> "StaticMeshComponent0")
|
|
54
|
-
if (!match) {
|
|
55
|
-
match = components.find((c) => String(c?.name || '').toLowerCase().startsWith(needle));
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// RESOLUTION LOGIC FIX:
|
|
59
|
-
// If we have a match, we MUST use its path OR its name.
|
|
60
|
-
// We cannot fall back to 'needle' or 'args.componentName' if we found a better specific match.
|
|
61
|
-
if (match) {
|
|
62
|
-
if (typeof match.path === 'string' && match.path.trim().length > 0) {
|
|
63
|
-
return match.path.trim();
|
|
64
|
-
}
|
|
65
|
-
if (typeof match.name === 'string' && match.name.trim().length > 0) {
|
|
66
|
-
// Construct path from the MATCHED name, not the requested name
|
|
67
|
-
return `${actorName}.${match.name}`;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Fallback: Construct path manually using original request
|
|
73
|
-
// Use dot notation for subobjects
|
|
74
|
-
return `${actorName}.${componentName}`;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
export async function handleInspectTools(action: string, args: any, tools: ITools) {
|
|
79
|
-
switch (action) {
|
|
80
|
-
case 'inspect_object': {
|
|
81
|
-
const objectPath = await resolveObjectPath(args, tools);
|
|
82
|
-
if (!objectPath) {
|
|
83
|
-
throw new Error('Invalid objectPath: must be a non-empty string');
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const payload = {
|
|
87
|
-
...args,
|
|
88
|
-
objectPath,
|
|
89
|
-
action: 'inspect_object',
|
|
90
|
-
detailed: true
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
const res: any = await executeAutomationRequest(
|
|
94
|
-
tools,
|
|
95
|
-
'inspect',
|
|
96
|
-
payload,
|
|
97
|
-
'Automation bridge not available for inspect operations'
|
|
98
|
-
);
|
|
99
|
-
|
|
100
|
-
if (res && res.success === false) {
|
|
101
|
-
const errorCode = String(res.error || '').toUpperCase();
|
|
102
|
-
const msg = String(res.message || '');
|
|
103
|
-
if (errorCode === 'OBJECT_NOT_FOUND' || msg.toLowerCase().includes('object not found')) {
|
|
104
|
-
return cleanObject({
|
|
105
|
-
success: false,
|
|
106
|
-
handled: true,
|
|
107
|
-
notFound: true,
|
|
108
|
-
error: res.error,
|
|
109
|
-
message: res.message || 'Object not found'
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
return cleanObject(res);
|
|
115
|
-
}
|
|
116
|
-
case 'get_property': {
|
|
117
|
-
const objectPath = await resolveObjectPath(args, tools);
|
|
118
|
-
const propertyName = normalizeArgs(args, [{ key: 'propertyName', aliases: ['propertyPath'], required: true }]).propertyName;
|
|
119
|
-
|
|
120
|
-
if (!objectPath) {
|
|
121
|
-
throw new Error('Invalid objectPath: must be a non-empty string');
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const res = await tools.introspectionTools.getProperty({
|
|
125
|
-
objectPath,
|
|
126
|
-
propertyName
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
// Smart Lookup: If property not found on the Actor, try to find it on components
|
|
130
|
-
if (!res.success && (res.error === 'PROPERTY_NOT_FOUND' || String(res.error).includes('not found'))) {
|
|
131
|
-
const actorName = await resolveObjectPath(args, tools, { pathKeys: [], actorKeys: ['actorName', 'name', 'objectPath'] });
|
|
132
|
-
if (actorName) {
|
|
133
|
-
const triedPaths: string[] = [];
|
|
134
|
-
|
|
135
|
-
// Strategy 1: Check RootComponent (Most common for transform/mobility)
|
|
136
|
-
try {
|
|
137
|
-
const rootRes: any = await tools.introspectionTools.getProperty({
|
|
138
|
-
objectPath: actorName,
|
|
139
|
-
propertyName: 'RootComponent'
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
// Check if we got a valid object path string or object with path
|
|
143
|
-
const rootPath = typeof rootRes.value === 'string' ? rootRes.value : (rootRes.value?.path || rootRes.value?.objectPath);
|
|
144
|
-
|
|
145
|
-
if (rootRes.success && rootPath && typeof rootPath === 'string' && rootPath.length > 0 && rootPath !== 'None') {
|
|
146
|
-
triedPaths.push(rootPath);
|
|
147
|
-
const propRes: any = await tools.introspectionTools.getProperty({
|
|
148
|
-
objectPath: rootPath,
|
|
149
|
-
propertyName
|
|
150
|
-
});
|
|
151
|
-
if (propRes.success) {
|
|
152
|
-
return cleanObject({
|
|
153
|
-
...propRes,
|
|
154
|
-
message: `Resolved property '${propertyName}' on RootComponent (Smart Lookup)`,
|
|
155
|
-
foundOnComponent: 'RootComponent'
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
} catch (_e) { /* Ignore RootComponent lookup errors */ }
|
|
160
|
-
|
|
161
|
-
try {
|
|
162
|
-
// Strategy 2: Iterate all components
|
|
163
|
-
// Use ActorTools directly with the input/original name (args.objectPath)
|
|
164
|
-
const shortName = String(args.objectPath || '').trim();
|
|
165
|
-
const compsRes: any = await tools.actorTools.getComponents(shortName);
|
|
166
|
-
|
|
167
|
-
if (compsRes.success && (Array.isArray(compsRes.components) || Array.isArray(compsRes))) {
|
|
168
|
-
const list = Array.isArray(compsRes.components) ? compsRes.components : (Array.isArray(compsRes) ? compsRes : []);
|
|
169
|
-
const triedPaths: string[] = [];
|
|
170
|
-
for (const comp of list) {
|
|
171
|
-
// Use path if available, otherwise construct it (ActorPath.ComponentName)
|
|
172
|
-
// Note: C++ Inspect handler might miss 'path', so we fallback.
|
|
173
|
-
const compName = comp.name;
|
|
174
|
-
const compPath = comp.path || (compName ? `${actorName}.${compName}` : undefined);
|
|
175
|
-
|
|
176
|
-
if (!compPath) continue;
|
|
177
|
-
triedPaths.push(compPath);
|
|
178
|
-
|
|
179
|
-
// Quick check: Try to get property on component
|
|
180
|
-
const compRes: any = await tools.introspectionTools.getProperty({
|
|
181
|
-
objectPath: compPath,
|
|
182
|
-
propertyName
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
if (compRes.success) {
|
|
186
|
-
return cleanObject({
|
|
187
|
-
...compRes,
|
|
188
|
-
message: `Resolved property '${propertyName}' on component '${comp.name}' (Smart Lookup)`,
|
|
189
|
-
foundOnComponent: comp.name
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
// End of loop - if we're here, nothing found
|
|
194
|
-
return cleanObject({
|
|
195
|
-
...res,
|
|
196
|
-
message: res.message + ` (Smart Lookup failed. Tried: ${triedPaths.length} paths. First: ${triedPaths[0]}. Components: ${list.map((c: any) => c.name).join(',')})`,
|
|
197
|
-
smartLookupTriedPaths: triedPaths
|
|
198
|
-
});
|
|
199
|
-
} else {
|
|
200
|
-
return cleanObject({
|
|
201
|
-
...res,
|
|
202
|
-
message: res.message + ' (Smart Lookup failed: get_components returned ' + (compsRes.success ? 'success but no list' : 'failure: ' + compsRes.error) + ' | Name: ' + shortName + ' Path: ' + actorName + ')',
|
|
203
|
-
smartLookupGetComponentsError: compsRes
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
} catch (_e: any) {
|
|
207
|
-
return cleanObject({
|
|
208
|
-
...res,
|
|
209
|
-
message: res.message + ' (Smart Lookup exception: ' + _e.message + ')',
|
|
210
|
-
error: _e
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
return cleanObject(res);
|
|
216
|
-
}
|
|
217
|
-
case 'set_property': {
|
|
218
|
-
const objectPath = await resolveObjectPath(args, tools);
|
|
219
|
-
const params = normalizeArgs(args, [
|
|
220
|
-
{ key: 'propertyName', aliases: ['propertyPath'], required: true },
|
|
221
|
-
{ key: 'value' }
|
|
222
|
-
]);
|
|
223
|
-
|
|
224
|
-
if (!objectPath) {
|
|
225
|
-
throw new Error('Invalid objectPath: must be a non-empty string');
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
const res: any = await tools.introspectionTools.setProperty({
|
|
229
|
-
objectPath,
|
|
230
|
-
propertyName: params.propertyName,
|
|
231
|
-
value: params.value
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
if (res && res.success === false) {
|
|
235
|
-
const errorCode = String(res.error || '').toUpperCase();
|
|
236
|
-
if (errorCode === 'PROPERTY_NOT_FOUND') {
|
|
237
|
-
return cleanObject({
|
|
238
|
-
...res,
|
|
239
|
-
error: 'UNKNOWN_PROPERTY'
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
return cleanObject(res);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
case 'get_components': {
|
|
248
|
-
const actorName = await resolveObjectPath(args, tools, { pathKeys: [], actorKeys: ['actorName', 'name', 'objectPath'] });
|
|
249
|
-
if (!actorName) {
|
|
250
|
-
throw new Error('Invalid actorName');
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
const res: any = await executeAutomationRequest(
|
|
254
|
-
tools,
|
|
255
|
-
'inspect',
|
|
256
|
-
{
|
|
257
|
-
action: 'get_components',
|
|
258
|
-
actorName: actorName,
|
|
259
|
-
objectPath: actorName
|
|
260
|
-
},
|
|
261
|
-
'Failed to get components'
|
|
262
|
-
);
|
|
263
|
-
|
|
264
|
-
return cleanObject(res);
|
|
265
|
-
}
|
|
266
|
-
case 'get_component_property': {
|
|
267
|
-
const componentObjectPath = await resolveComponentObjectPathFromArgs(args, tools);
|
|
268
|
-
const params = normalizeArgs(args, [
|
|
269
|
-
{ key: 'propertyName', aliases: ['propertyPath'], required: true }
|
|
270
|
-
]);
|
|
271
|
-
|
|
272
|
-
const res = await tools.introspectionTools.getProperty({
|
|
273
|
-
objectPath: componentObjectPath,
|
|
274
|
-
propertyName: params.propertyName
|
|
275
|
-
});
|
|
276
|
-
return cleanObject(res);
|
|
277
|
-
}
|
|
278
|
-
case 'set_component_property': {
|
|
279
|
-
const componentObjectPath = await resolveComponentObjectPathFromArgs(args, tools);
|
|
280
|
-
const params = normalizeArgs(args, [
|
|
281
|
-
{ key: 'propertyName', aliases: ['propertyPath'], required: true },
|
|
282
|
-
{ key: 'value' }
|
|
283
|
-
]);
|
|
284
|
-
|
|
285
|
-
const res = await tools.introspectionTools.setProperty({
|
|
286
|
-
objectPath: componentObjectPath,
|
|
287
|
-
propertyName: params.propertyName,
|
|
288
|
-
value: params.value
|
|
289
|
-
});
|
|
290
|
-
return cleanObject(res);
|
|
291
|
-
}
|
|
292
|
-
case 'get_metadata': {
|
|
293
|
-
const actorName = await resolveObjectPath(args, tools);
|
|
294
|
-
if (!actorName) throw new Error('Invalid actorName');
|
|
295
|
-
return cleanObject(await tools.actorTools.getMetadata(actorName));
|
|
296
|
-
}
|
|
297
|
-
case 'add_tag': {
|
|
298
|
-
const actorName = await resolveObjectPath(args, tools);
|
|
299
|
-
const params = normalizeArgs(args, [
|
|
300
|
-
{ key: 'tag', required: true }
|
|
301
|
-
]);
|
|
302
|
-
|
|
303
|
-
if (!actorName) throw new Error('Invalid actorName');
|
|
304
|
-
return cleanObject(await tools.actorTools.addTag({
|
|
305
|
-
actorName,
|
|
306
|
-
tag: params.tag
|
|
307
|
-
}));
|
|
308
|
-
}
|
|
309
|
-
case 'find_by_tag':
|
|
310
|
-
const params = normalizeArgs(args, [{ key: 'tag' }]);
|
|
311
|
-
return cleanObject(await tools.actorTools.findByTag({
|
|
312
|
-
tag: params.tag
|
|
313
|
-
}));
|
|
314
|
-
case 'create_snapshot': {
|
|
315
|
-
const actorName = await resolveObjectPath(args, tools);
|
|
316
|
-
if (!actorName) throw new Error('actorName is required for create_snapshot');
|
|
317
|
-
return cleanObject(await tools.actorTools.createSnapshot({
|
|
318
|
-
actorName,
|
|
319
|
-
snapshotName: args.snapshotName
|
|
320
|
-
}));
|
|
321
|
-
}
|
|
322
|
-
case 'restore_snapshot': {
|
|
323
|
-
const actorName = await resolveObjectPath(args, tools);
|
|
324
|
-
if (!actorName) throw new Error('actorName is required for restore_snapshot');
|
|
325
|
-
return cleanObject(await tools.actorTools.restoreSnapshot({
|
|
326
|
-
actorName,
|
|
327
|
-
snapshotName: args.snapshotName
|
|
328
|
-
}));
|
|
329
|
-
}
|
|
330
|
-
case 'export': {
|
|
331
|
-
const actorName = await resolveObjectPath(args, tools);
|
|
332
|
-
if (!actorName) throw new Error('actorName may be required for export depending on context (exporting actor requires it)');
|
|
333
|
-
const params = normalizeArgs(args, [
|
|
334
|
-
{ key: 'destinationPath', aliases: ['outputPath'] }
|
|
335
|
-
]);
|
|
336
|
-
return cleanObject(await tools.actorTools.exportActor({
|
|
337
|
-
actorName: actorName || '',
|
|
338
|
-
destinationPath: params.destinationPath
|
|
339
|
-
}));
|
|
340
|
-
}
|
|
341
|
-
case 'delete_object': {
|
|
342
|
-
const actorName = await resolveObjectPath(args, tools);
|
|
343
|
-
try {
|
|
344
|
-
if (!actorName) throw new Error('actorName is required for delete_object');
|
|
345
|
-
const res = await tools.actorTools.delete({
|
|
346
|
-
actorName
|
|
347
|
-
});
|
|
348
|
-
return cleanObject(res);
|
|
349
|
-
} catch (err: any) {
|
|
350
|
-
const msg = String(err?.message || err || '');
|
|
351
|
-
const lower = msg.toLowerCase();
|
|
352
|
-
if (lower.includes('actor not found')) {
|
|
353
|
-
return cleanObject({
|
|
354
|
-
success: false,
|
|
355
|
-
error: 'NOT_FOUND',
|
|
356
|
-
handled: true,
|
|
357
|
-
message: msg,
|
|
358
|
-
deleted: actorName,
|
|
359
|
-
notFound: true
|
|
360
|
-
});
|
|
361
|
-
}
|
|
362
|
-
throw err;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
case 'list_objects':
|
|
366
|
-
return cleanObject(await tools.actorTools.listActors(args));
|
|
367
|
-
case 'find_by_class': {
|
|
368
|
-
const params = normalizeArgs(args, [
|
|
369
|
-
{ key: 'className', aliases: ['classPath'], required: true }
|
|
370
|
-
]);
|
|
371
|
-
const res: any = await tools.introspectionTools.findObjectsByClass(params.className);
|
|
372
|
-
if (!res || res.success === false) {
|
|
373
|
-
// Return proper failure state
|
|
374
|
-
return cleanObject({
|
|
375
|
-
success: false,
|
|
376
|
-
error: res?.error || 'OPERATION_FAILED',
|
|
377
|
-
message: res?.message || 'find_by_class failed',
|
|
378
|
-
className: params.className,
|
|
379
|
-
objects: [],
|
|
380
|
-
count: 0
|
|
381
|
-
});
|
|
382
|
-
}
|
|
383
|
-
return cleanObject(res);
|
|
384
|
-
}
|
|
385
|
-
case 'get_bounding_box': {
|
|
386
|
-
const actorName = await resolveObjectPath(args, tools);
|
|
387
|
-
try {
|
|
388
|
-
if (!actorName) throw new Error('actorName is required for get_bounding_box');
|
|
389
|
-
const res = await tools.actorTools.getBoundingBox(actorName);
|
|
390
|
-
return cleanObject(res);
|
|
391
|
-
} catch (err: any) {
|
|
392
|
-
const msg = String(err?.message || err || '');
|
|
393
|
-
const lower = msg.toLowerCase();
|
|
394
|
-
if (lower.includes('actor not found')) {
|
|
395
|
-
return cleanObject({
|
|
396
|
-
success: false,
|
|
397
|
-
error: 'NOT_FOUND',
|
|
398
|
-
handled: true,
|
|
399
|
-
message: msg,
|
|
400
|
-
actorName,
|
|
401
|
-
notFound: true
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
throw err;
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
case 'inspect_class': {
|
|
408
|
-
const params = normalizeArgs(args, [
|
|
409
|
-
{ key: 'className', aliases: ['classPath'], required: true }
|
|
410
|
-
]);
|
|
411
|
-
let className = params.className;
|
|
412
|
-
|
|
413
|
-
// Basic smart resolution for common classes if path is incomplete
|
|
414
|
-
// E.g. "Landscape" -> "/Script/Landscape.Landscape" or "/Script/Engine.Landscape"
|
|
415
|
-
if (className && !className.includes('/') && !className.includes('.')) {
|
|
416
|
-
if (className === 'Landscape') {
|
|
417
|
-
className = '/Script/Landscape.Landscape';
|
|
418
|
-
} else if (['Actor', 'Pawn', 'Character', 'StaticMeshActor'].includes(className)) {
|
|
419
|
-
className = `/Script/Engine.${className}`;
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
const res: any = await tools.introspectionTools.getCDO(className);
|
|
424
|
-
if (!res || res.success === false) {
|
|
425
|
-
// If first try failed and it looked like a short name, maybe try standard engine path?
|
|
426
|
-
if (args.className && !args.className.includes('/') && !className.startsWith('/Script/')) {
|
|
427
|
-
const retryName = `/Script/Engine.${args.className}`;
|
|
428
|
-
const resRetry: any = await tools.introspectionTools.getCDO(retryName);
|
|
429
|
-
if (resRetry && resRetry.success) {
|
|
430
|
-
return cleanObject(resRetry);
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
// Return proper failure state
|
|
435
|
-
return cleanObject({
|
|
436
|
-
success: false,
|
|
437
|
-
error: res?.error || 'OPERATION_FAILED',
|
|
438
|
-
message: res?.message || `inspect_class failed for '${className}'`,
|
|
439
|
-
className,
|
|
440
|
-
cdo: res?.cdo ?? null
|
|
441
|
-
});
|
|
442
|
-
}
|
|
443
|
-
return cleanObject(res);
|
|
444
|
-
}
|
|
445
|
-
default:
|
|
446
|
-
// Fallback to generic automation request if action not explicitly handled
|
|
447
|
-
const res = await executeAutomationRequest(tools, 'inspect', args, 'Automation bridge not available for inspect operations');
|
|
448
|
-
return cleanObject(res);
|
|
449
|
-
}
|
|
450
|
-
}
|