unreal-engine-mcp-server 0.4.7 → 0.5.1
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-config.yml +51 -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 +27 -0
- package/.github/workflows/labeler.yml +17 -0
- package/.github/workflows/links.yml +80 -0
- package/.github/workflows/pr-size-labeler.yml +137 -0
- package/.github/workflows/publish-mcp.yml +13 -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 +338 -31
- package/CONTRIBUTING.md +140 -0
- package/GEMINI.md +115 -0
- package/Public/Plugin_setup_guide.mp4 +0 -0
- package/README.md +189 -128
- 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 +26 -0
- package/dist/config.js +59 -0
- package/dist/constants.d.ts +16 -0
- package/dist/constants.js +16 -0
- package/dist/graphql/loaders.d.ts +64 -0
- package/dist/graphql/loaders.js +117 -0
- package/dist/graphql/resolvers.d.ts +268 -0
- package/dist/graphql/resolvers.js +746 -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 +117 -0
- package/dist/graphql/types.d.ts +9 -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 +33 -18
- package/dist/index.js +130 -619
- 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 +20 -0
- package/dist/server-setup.js +71 -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 +163 -9
- package/dist/tools/actors.js +356 -311
- package/dist/tools/animation.d.ts +135 -4
- package/dist/tools/animation.js +510 -411
- package/dist/tools/assets.d.ts +75 -29
- package/dist/tools/assets.js +265 -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.d.ts +208 -126
- 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 +198 -1027
- package/dist/tools/debug.d.ts +143 -85
- package/dist/tools/debug.js +234 -180
- package/dist/tools/dynamic-handler-registry.d.ts +13 -0
- package/dist/tools/dynamic-handler-registry.js +23 -0
- package/dist/tools/editor.d.ts +30 -83
- package/dist/tools/editor.js +247 -244
- package/dist/tools/engine.d.ts +10 -4
- package/dist/tools/engine.js +13 -5
- package/dist/tools/environment.d.ts +30 -0
- package/dist/tools/environment.js +267 -0
- package/dist/tools/foliage.d.ts +65 -99
- package/dist/tools/foliage.js +221 -331
- package/dist/tools/handlers/actor-handlers.d.ts +3 -0
- package/dist/tools/handlers/actor-handlers.js +227 -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 +54 -93
- package/dist/tools/landscape.js +284 -409
- package/dist/tools/level.d.ts +66 -27
- package/dist/tools/level.js +647 -675
- package/dist/tools/lighting.d.ts +77 -38
- package/dist/tools/lighting.js +445 -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 +194 -118
- package/dist/tools/niagara.d.ts +149 -39
- package/dist/tools/niagara.js +267 -182
- package/dist/tools/performance.d.ts +27 -13
- package/dist/tools/performance.js +203 -122
- package/dist/tools/physics.d.ts +32 -77
- package/dist/tools/physics.js +175 -582
- package/dist/tools/property-dictionary.d.ts +13 -0
- package/dist/tools/property-dictionary.js +82 -0
- package/dist/tools/sequence.d.ts +85 -60
- package/dist/tools/sequence.js +208 -747
- 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 +64 -34
- package/dist/tools/ui.js +134 -214
- package/dist/types/automation-responses.d.ts +115 -0
- package/dist/types/automation-responses.js +2 -0
- package/dist/types/env.d.ts +0 -3
- package/dist/types/env.js +0 -7
- package/dist/types/responses.d.ts +249 -0
- package/dist/types/responses.js +2 -0
- 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 +68 -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/path-security.d.ts +2 -0
- package/dist/utils/path-security.js +24 -0
- package/dist/utils/response-factory.d.ts +7 -0
- package/dist/utils/response-factory.js +27 -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 +684 -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 +67 -28
- 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 +136 -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 +58 -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 +19 -0
- package/src/graphql/loaders.ts +244 -0
- package/src/graphql/resolvers.ts +1008 -0
- package/src/graphql/schema.ts +452 -0
- package/src/graphql/server.ts +156 -0
- package/src/graphql/types.ts +10 -0
- package/src/handlers/resource-handlers.ts +186 -0
- package/src/index.ts +166 -664
- package/src/resources/actors.ts +58 -76
- package/src/resources/assets.ts +148 -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 +114 -0
- package/src/services/health-monitor.ts +132 -0
- package/src/services/metrics-server.ts +142 -0
- package/src/tools/actors.ts +426 -323
- package/src/tools/animation.ts +672 -461
- package/src/tools/assets.ts +364 -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.ts +792 -970
- package/src/tools/consolidated-tool-definitions.ts +993 -515
- package/src/tools/consolidated-tool-handlers.ts +258 -1146
- package/src/tools/debug.ts +292 -187
- package/src/tools/dynamic-handler-registry.ts +33 -0
- package/src/tools/editor.ts +329 -253
- package/src/tools/engine.ts +14 -3
- package/src/tools/environment.ts +281 -0
- package/src/tools/foliage.ts +330 -392
- package/src/tools/handlers/actor-handlers.ts +265 -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 +418 -507
- package/src/tools/level.ts +786 -708
- package/src/tools/lighting.ts +588 -984
- package/src/tools/logs.ts +9 -57
- package/src/tools/materials.ts +237 -121
- package/src/tools/niagara.ts +335 -168
- package/src/tools/performance.ts +320 -169
- package/src/tools/physics.ts +274 -613
- package/src/tools/property-dictionary.ts +98 -0
- package/src/tools/sequence.ts +276 -820
- package/src/tools/tool-definition-utils.ts +35 -0
- package/src/tools/ui.ts +205 -283
- package/src/types/automation-responses.ts +119 -0
- package/src/types/env.ts +0 -10
- package/src/types/responses.ts +355 -0
- 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 +76 -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.test.ts +162 -0
- package/src/utils/normalize.ts +60 -0
- package/src/utils/path-security.ts +43 -0
- package/src/utils/response-factory.ts +44 -0
- package/src/utils/response-validator.ts +176 -56
- package/src/utils/result-helpers.ts +21 -19
- package/src/utils/safe-json.test.ts +90 -0
- package/src/utils/safe-json.ts +14 -11
- package/src/utils/unreal-command-queue.ts +152 -0
- package/src/utils/validation.test.ts +184 -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 +369 -0
- package/tests/test-asset-advanced.mjs +82 -0
- package/tests/test-asset-errors.mjs +35 -0
- package/tests/test-asset-graph.mjs +311 -0
- package/tests/test-audio.mjs +417 -0
- package/tests/test-automation-timeouts.mjs +98 -0
- package/tests/test-behavior-tree.mjs +444 -0
- package/tests/test-blueprint-graph.mjs +410 -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 +112 -0
- package/tests/test-graphql.mjs +372 -0
- package/tests/test-input.mjs +349 -0
- package/tests/test-inspect.mjs +302 -0
- package/tests/test-landscape.mjs +316 -0
- package/tests/test-lighting.mjs +428 -0
- package/tests/test-manage-asset.mjs +438 -0
- package/tests/test-manage-level.mjs +89 -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-performance.mjs +539 -0
- package/tests/test-plugin-handshake.mjs +82 -0
- package/tests/test-runner.mjs +933 -0
- package/tests/test-sequence.mjs +104 -0
- package/tests/test-system.mjs +96 -0
- package/tests/test-wasm.mjs +283 -0
- package/tests/test-world-partition.mjs +215 -0
- package/tsconfig.json +3 -3
- package/vitest.config.ts +35 -0
- 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/prompts/index.d.ts +0 -21
- package/dist/prompts/index.js +0 -217
- 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/prompts/index.ts +0 -249
- 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
|
@@ -1,32 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Validation and sanitization utilities for Unreal Engine assets
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Sanitize an asset name for Unreal Engine
|
|
6
|
-
* @param name The name to sanitize
|
|
7
|
-
* @returns Sanitized name
|
|
8
|
-
*/
|
|
9
1
|
export declare function sanitizeAssetName(name: string): string;
|
|
10
|
-
/**
|
|
11
|
-
* Sanitize a path for Unreal Engine
|
|
12
|
-
* @param path The path to sanitize
|
|
13
|
-
* @returns Sanitized path
|
|
14
|
-
*/
|
|
15
2
|
export declare function sanitizePath(path: string): string;
|
|
16
|
-
/**
|
|
17
|
-
* Validate path length
|
|
18
|
-
* @param path The full path to validate
|
|
19
|
-
* @returns Object with validation result
|
|
20
|
-
*/
|
|
21
3
|
export declare function validatePathLength(path: string): {
|
|
22
4
|
valid: boolean;
|
|
23
5
|
error?: string;
|
|
24
6
|
};
|
|
25
|
-
/**
|
|
26
|
-
* Validate and sanitize asset parameters
|
|
27
|
-
* @param params Object containing name and optionally savePath
|
|
28
|
-
* @returns Sanitized parameters with validation result
|
|
29
|
-
*/
|
|
30
7
|
export declare function validateAssetParams(params: {
|
|
31
8
|
name: string;
|
|
32
9
|
savePath?: string;
|
|
@@ -36,30 +13,13 @@ export declare function validateAssetParams(params: {
|
|
|
36
13
|
sanitized: typeof params;
|
|
37
14
|
error?: string;
|
|
38
15
|
};
|
|
39
|
-
/**
|
|
40
|
-
* Extract valid skeletal mesh path from various inputs
|
|
41
|
-
* @param input The input path which might be a skeleton or mesh
|
|
42
|
-
* @returns Corrected skeletal mesh path or null
|
|
43
|
-
*/
|
|
44
16
|
export declare function resolveSkeletalMeshPath(input: string): string | null;
|
|
45
|
-
/**
|
|
46
|
-
* Concurrency delay to prevent race conditions
|
|
47
|
-
* @param ms Milliseconds to delay
|
|
48
|
-
*/
|
|
49
17
|
export declare function concurrencyDelay(ms?: number): Promise<void>;
|
|
50
|
-
/**
|
|
51
|
-
* Ensure the provided value is a finite number within optional bounds.
|
|
52
|
-
* @throws if the value is not a finite number or violates bounds
|
|
53
|
-
*/
|
|
54
18
|
export declare function validateNumber(value: unknown, label: string, { min, max, allowZero }?: {
|
|
55
19
|
min?: number;
|
|
56
20
|
max?: number;
|
|
57
21
|
allowZero?: boolean;
|
|
58
22
|
}): number;
|
|
59
|
-
/**
|
|
60
|
-
* Validate an array (tuple) of finite numbers, preserving the original shape.
|
|
61
|
-
* @throws if the tuple has the wrong length or contains invalid values
|
|
62
|
-
*/
|
|
63
23
|
export declare function ensureVector3(value: unknown, label: string): [number, number, number];
|
|
64
24
|
export declare function ensureColorRGB(value: unknown, label: string): [number, number, number];
|
|
65
25
|
export declare function ensureRotation(value: unknown, label: string): [number, number, number];
|
package/dist/utils/validation.js
CHANGED
|
@@ -1,101 +1,58 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Validation and sanitization utilities for Unreal Engine assets
|
|
3
|
-
*/
|
|
4
1
|
import { toRotTuple, toVec3Tuple } from './normalize.js';
|
|
5
|
-
/**
|
|
6
|
-
* Maximum path length allowed in Unreal Engine
|
|
7
|
-
*/
|
|
8
2
|
const MAX_PATH_LENGTH = 260;
|
|
9
|
-
/**
|
|
10
|
-
* Invalid characters for Unreal Engine asset names
|
|
11
|
-
* Note: Dashes are allowed in Unreal asset names
|
|
12
|
-
*/
|
|
13
|
-
// eslint-disable-next-line no-useless-escape
|
|
14
3
|
const INVALID_CHARS = /[@#%$&*()+=\[\]{}<>?|\\;:'"`,~!\s]/g;
|
|
15
|
-
/**
|
|
16
|
-
* Reserved keywords that shouldn't be used as names
|
|
17
|
-
*/
|
|
18
4
|
const RESERVED_KEYWORDS = [
|
|
19
5
|
'None', 'null', 'undefined', 'true', 'false',
|
|
20
6
|
'class', 'struct', 'enum', 'interface',
|
|
21
7
|
'default', 'transient', 'native'
|
|
22
8
|
];
|
|
23
|
-
/**
|
|
24
|
-
* Sanitize an asset name for Unreal Engine
|
|
25
|
-
* @param name The name to sanitize
|
|
26
|
-
* @returns Sanitized name
|
|
27
|
-
*/
|
|
28
9
|
export function sanitizeAssetName(name) {
|
|
29
10
|
if (!name || typeof name !== 'string') {
|
|
30
11
|
return 'Asset';
|
|
31
12
|
}
|
|
32
|
-
// Remove leading/trailing whitespace
|
|
33
13
|
let sanitized = name.trim();
|
|
34
|
-
// Replace invalid characters with underscores
|
|
35
14
|
sanitized = sanitized.replace(INVALID_CHARS, '_');
|
|
36
|
-
// Remove consecutive underscores
|
|
37
15
|
sanitized = sanitized.replace(/_+/g, '_');
|
|
38
|
-
// Remove leading/trailing underscores
|
|
39
16
|
sanitized = sanitized.replace(/^_+|_+$/g, '');
|
|
40
|
-
// If name is empty after sanitization, use default
|
|
41
17
|
if (!sanitized) {
|
|
42
18
|
return 'Asset';
|
|
43
19
|
}
|
|
44
|
-
// If name is a reserved keyword, append underscore
|
|
45
20
|
if (RESERVED_KEYWORDS.includes(sanitized)) {
|
|
46
21
|
sanitized = `${sanitized}_Asset`;
|
|
47
22
|
}
|
|
48
|
-
// Ensure name starts with a letter
|
|
49
23
|
if (!/^[A-Za-z]/.test(sanitized)) {
|
|
50
24
|
sanitized = `Asset_${sanitized}`;
|
|
51
25
|
}
|
|
52
|
-
// Truncate overly long names to reduce risk of hitting path length limits
|
|
53
26
|
if (sanitized.length > 64) {
|
|
54
27
|
sanitized = sanitized.slice(0, 64);
|
|
55
28
|
}
|
|
56
29
|
return sanitized;
|
|
57
30
|
}
|
|
58
|
-
/**
|
|
59
|
-
* Sanitize a path for Unreal Engine
|
|
60
|
-
* @param path The path to sanitize
|
|
61
|
-
* @returns Sanitized path
|
|
62
|
-
*/
|
|
63
31
|
export function sanitizePath(path) {
|
|
64
32
|
if (!path || typeof path !== 'string') {
|
|
65
33
|
return '/Game';
|
|
66
34
|
}
|
|
67
|
-
// Normalize slashes
|
|
68
35
|
path = path.replace(/\\/g, '/');
|
|
69
|
-
// Ensure path starts with /
|
|
70
36
|
if (!path.startsWith('/')) {
|
|
71
37
|
path = `/${path}`;
|
|
72
38
|
}
|
|
73
|
-
// Split path into segments and sanitize each
|
|
74
39
|
let segments = path.split('/').filter(s => s.length > 0);
|
|
75
40
|
if (segments.length === 0) {
|
|
76
41
|
return '/Game';
|
|
77
42
|
}
|
|
78
|
-
// Ensure the first segment is a valid root (Game, Engine, Script, Temp)
|
|
79
43
|
const ROOTS = new Set(['Game', 'Engine', 'Script', 'Temp']);
|
|
80
44
|
if (!ROOTS.has(segments[0])) {
|
|
81
45
|
segments = ['Game', ...segments];
|
|
82
46
|
}
|
|
83
47
|
const sanitizedSegments = segments.map(segment => {
|
|
84
|
-
// Don't sanitize Game, Engine, or other root folders
|
|
85
48
|
if (['Game', 'Engine', 'Script', 'Temp'].includes(segment)) {
|
|
86
49
|
return segment;
|
|
87
50
|
}
|
|
88
51
|
return sanitizeAssetName(segment);
|
|
89
52
|
});
|
|
90
|
-
// Reconstruct path
|
|
91
53
|
const sanitizedPath = '/' + sanitizedSegments.join('/');
|
|
92
54
|
return sanitizedPath;
|
|
93
55
|
}
|
|
94
|
-
/**
|
|
95
|
-
* Validate path length
|
|
96
|
-
* @param path The full path to validate
|
|
97
|
-
* @returns Object with validation result
|
|
98
|
-
*/
|
|
99
56
|
export function validatePathLength(path) {
|
|
100
57
|
if (path.length > MAX_PATH_LENGTH) {
|
|
101
58
|
return {
|
|
@@ -105,23 +62,14 @@ export function validatePathLength(path) {
|
|
|
105
62
|
}
|
|
106
63
|
return { valid: true };
|
|
107
64
|
}
|
|
108
|
-
/**
|
|
109
|
-
* Validate and sanitize asset parameters
|
|
110
|
-
* @param params Object containing name and optionally savePath
|
|
111
|
-
* @returns Sanitized parameters with validation result
|
|
112
|
-
*/
|
|
113
65
|
export function validateAssetParams(params) {
|
|
114
|
-
// Sanitize name
|
|
115
66
|
const sanitizedName = sanitizeAssetName(params.name);
|
|
116
|
-
// Sanitize path if provided
|
|
117
67
|
const sanitizedPath = params.savePath
|
|
118
68
|
? sanitizePath(params.savePath)
|
|
119
69
|
: params.savePath;
|
|
120
|
-
// Construct full path for validation
|
|
121
70
|
const fullPath = sanitizedPath
|
|
122
71
|
? `${sanitizedPath}/${sanitizedName}`
|
|
123
72
|
: `/Game/${sanitizedName}`;
|
|
124
|
-
// Validate path length
|
|
125
73
|
const pathValidation = validatePathLength(fullPath);
|
|
126
74
|
if (!pathValidation.valid) {
|
|
127
75
|
return {
|
|
@@ -139,16 +87,10 @@ export function validateAssetParams(params) {
|
|
|
139
87
|
}
|
|
140
88
|
};
|
|
141
89
|
}
|
|
142
|
-
/**
|
|
143
|
-
* Extract valid skeletal mesh path from various inputs
|
|
144
|
-
* @param input The input path which might be a skeleton or mesh
|
|
145
|
-
* @returns Corrected skeletal mesh path or null
|
|
146
|
-
*/
|
|
147
90
|
export function resolveSkeletalMeshPath(input) {
|
|
148
91
|
if (!input || typeof input !== 'string') {
|
|
149
92
|
return null;
|
|
150
93
|
}
|
|
151
|
-
// Common skeleton to mesh mappings
|
|
152
94
|
const skeletonToMeshMap = {
|
|
153
95
|
'/Game/Mannequin/Character/Mesh/UE4_Mannequin_Skeleton': '/Game/Characters/Mannequins/Meshes/SKM_Manny_Simple',
|
|
154
96
|
'/Game/Characters/Mannequins/Meshes/SK_Mannequin': '/Game/Characters/Mannequins/Meshes/SKM_Manny_Simple',
|
|
@@ -159,15 +101,11 @@ export function resolveSkeletalMeshPath(input) {
|
|
|
159
101
|
'/Game/Characters/Mannequins/Skeletons/UE5_Manny_Skeleton': '/Game/Characters/Mannequins/Meshes/SKM_Manny_Simple',
|
|
160
102
|
'/Game/Characters/Mannequins/Skeletons/UE5_Quinn_Skeleton': '/Game/Characters/Mannequins/Meshes/SKM_Quinn_Simple'
|
|
161
103
|
};
|
|
162
|
-
// Check if this is a known skeleton path
|
|
163
104
|
if (skeletonToMeshMap[input]) {
|
|
164
105
|
return skeletonToMeshMap[input];
|
|
165
106
|
}
|
|
166
|
-
// If it contains _Skeleton, try to convert to mesh name
|
|
167
107
|
if (input.includes('_Skeleton')) {
|
|
168
|
-
// Try common replacements
|
|
169
108
|
let meshPath = input.replace('_Skeleton', '');
|
|
170
|
-
// Mapping for replacements
|
|
171
109
|
const replacements = {
|
|
172
110
|
'/SK_': '/SKM_',
|
|
173
111
|
'UE4_Mannequin': 'SKM_Manny',
|
|
@@ -175,28 +113,17 @@ export function resolveSkeletalMeshPath(input) {
|
|
|
175
113
|
'UE5_Manny': 'SKM_Manny',
|
|
176
114
|
'UE5_Quinn': 'SKM_Quinn'
|
|
177
115
|
};
|
|
178
|
-
// Apply all replacements using regex
|
|
179
116
|
meshPath = meshPath.replace(new RegExp(Object.keys(replacements).join('|'), 'g'), match => replacements[match]);
|
|
180
117
|
return meshPath;
|
|
181
118
|
}
|
|
182
|
-
// If it starts with SK_ (skeleton prefix), try SKM_ (skeletal mesh prefix)
|
|
183
119
|
if (input.includes('/SK_')) {
|
|
184
120
|
return input.replace('/SK_', '/SKM_');
|
|
185
121
|
}
|
|
186
|
-
// Return as-is if no conversion needed
|
|
187
122
|
return input;
|
|
188
123
|
}
|
|
189
|
-
|
|
190
|
-
* Concurrency delay to prevent race conditions
|
|
191
|
-
* @param ms Milliseconds to delay
|
|
192
|
-
*/
|
|
193
|
-
export async function concurrencyDelay(ms = 100) {
|
|
124
|
+
export async function concurrencyDelay(ms = 20) {
|
|
194
125
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
195
126
|
}
|
|
196
|
-
/**
|
|
197
|
-
* Ensure the provided value is a finite number within optional bounds.
|
|
198
|
-
* @throws if the value is not a finite number or violates bounds
|
|
199
|
-
*/
|
|
200
127
|
export function validateNumber(value, label, { min, max, allowZero = true } = {}) {
|
|
201
128
|
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
202
129
|
throw new Error(`Invalid ${label}: expected a finite number`);
|
|
@@ -212,10 +139,6 @@ export function validateNumber(value, label, { min, max, allowZero = true } = {}
|
|
|
212
139
|
}
|
|
213
140
|
return value;
|
|
214
141
|
}
|
|
215
|
-
/**
|
|
216
|
-
* Validate an array (tuple) of finite numbers, preserving the original shape.
|
|
217
|
-
* @throws if the tuple has the wrong length or contains invalid values
|
|
218
|
-
*/
|
|
219
142
|
export function ensureVector3(value, label) {
|
|
220
143
|
const tuple = toVec3Tuple(value);
|
|
221
144
|
if (!tuple) {
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
interface WASMConfig {
|
|
2
|
+
enabled?: boolean;
|
|
3
|
+
wasmPath?: string;
|
|
4
|
+
fallbackEnabled?: boolean;
|
|
5
|
+
performanceMonitoring?: boolean;
|
|
6
|
+
}
|
|
7
|
+
interface PerformanceMetrics {
|
|
8
|
+
operation: string;
|
|
9
|
+
duration: number;
|
|
10
|
+
timestamp: number;
|
|
11
|
+
useWASM: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare class WASMIntegration {
|
|
14
|
+
private log;
|
|
15
|
+
private module;
|
|
16
|
+
private config;
|
|
17
|
+
private metrics;
|
|
18
|
+
private maxMetrics;
|
|
19
|
+
private initialized;
|
|
20
|
+
private moduleUnavailable;
|
|
21
|
+
constructor(config?: WASMConfig);
|
|
22
|
+
initialize(): Promise<void>;
|
|
23
|
+
isReady(): boolean;
|
|
24
|
+
static isSupported(): boolean;
|
|
25
|
+
parseProperties(jsonStr: string, options?: {
|
|
26
|
+
maxDepth?: number;
|
|
27
|
+
}): Promise<any>;
|
|
28
|
+
composeTransform(location: [number, number, number], rotation: [number, number, number], scale: [number, number, number]): Float32Array;
|
|
29
|
+
decomposeMatrix(matrix: Float32Array): number[];
|
|
30
|
+
vectorAdd(v1: [number, number, number], v2: [number, number, number]): [number, number, number];
|
|
31
|
+
resolveDependencies(assetPath: string, dependencies: Record<string, string[]>, options?: {
|
|
32
|
+
maxDepth?: number;
|
|
33
|
+
}): Promise<any>;
|
|
34
|
+
calculateDependencyDepth(assetPath: string, dependencies: Record<string, string[]>, options?: {
|
|
35
|
+
maxDepth?: number;
|
|
36
|
+
}): Promise<number>;
|
|
37
|
+
findCircularDependencies(dependencies: Record<string, string[]>, options?: {
|
|
38
|
+
maxDepth?: number;
|
|
39
|
+
}): Promise<string[][]>;
|
|
40
|
+
topologicalSort(dependencies: Record<string, string[]>): Promise<string[]>;
|
|
41
|
+
getMetrics(): {
|
|
42
|
+
totalOperations: number;
|
|
43
|
+
wasmOperations: number;
|
|
44
|
+
tsOperations: number;
|
|
45
|
+
averageTime: number;
|
|
46
|
+
operations: PerformanceMetrics[];
|
|
47
|
+
};
|
|
48
|
+
getStatus(): {
|
|
49
|
+
enabled: boolean;
|
|
50
|
+
ready: boolean;
|
|
51
|
+
moduleUnavailable: boolean;
|
|
52
|
+
};
|
|
53
|
+
clearMetrics(): void;
|
|
54
|
+
reportPerformance(): string;
|
|
55
|
+
private recordMetrics;
|
|
56
|
+
private fallbackParseProperties;
|
|
57
|
+
private fallbackComposeTransform;
|
|
58
|
+
private fallbackDecomposeMatrix;
|
|
59
|
+
private fallbackVectorAdd;
|
|
60
|
+
private fallbackResolveDependencies;
|
|
61
|
+
private fallbackCalculateDependencyDepth;
|
|
62
|
+
private fallbackFindCircularDependencies;
|
|
63
|
+
private fallbackTopologicalSort;
|
|
64
|
+
}
|
|
65
|
+
export declare const wasmIntegration: WASMIntegration;
|
|
66
|
+
export declare function initializeWASM(config?: WASMConfig): Promise<void>;
|
|
67
|
+
export declare function isWASMReady(): boolean;
|
|
68
|
+
export declare function getWASMPerformanceReport(): string;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=index.d.ts.map
|