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
package/wasm/Cargo.toml
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
[package]
|
|
2
|
-
name = "unreal-mcp-wasm"
|
|
3
|
-
version = "0.1.0"
|
|
4
|
-
edition = "2021"
|
|
5
|
-
authors = ["Unreal Engine MCP Team"]
|
|
6
|
-
description = "WebAssembly module for performance-critical operations in Unreal Engine MCP Server"
|
|
7
|
-
license = "MIT"
|
|
8
|
-
repository = "https://github.com/ChiR24/unreal-engine-mcp-server"
|
|
9
|
-
|
|
10
|
-
[lib]
|
|
11
|
-
crate-type = ["cdylib"]
|
|
12
|
-
|
|
13
|
-
[dependencies]
|
|
14
|
-
wasm-bindgen = { version = "0.2", features = ["serde-serialize"] }
|
|
15
|
-
serde = { version = "1.0", features = ["derive"] }
|
|
16
|
-
serde_json = "1.0"
|
|
17
|
-
js-sys = "0.3"
|
|
18
|
-
getrandom = { version = "0.2", features = ["js"] }
|
|
19
|
-
console_error_panic_hook = "0.1"
|
|
20
|
-
serde-wasm-bindgen = "0.6"
|
|
21
|
-
|
|
22
|
-
[dependencies.web-sys]
|
|
23
|
-
version = "0.3"
|
|
24
|
-
features = [
|
|
25
|
-
"console",
|
|
26
|
-
"Performance",
|
|
27
|
-
"Window",
|
|
28
|
-
"Document"
|
|
29
|
-
]
|
|
30
|
-
|
|
31
|
-
[dev-dependencies]
|
|
32
|
-
wasm-bindgen-test = "0.3"
|
|
33
|
-
|
|
34
|
-
[profile.release]
|
|
35
|
-
opt-level = 3
|
|
36
|
-
lto = true
|
|
37
|
-
codegen-units = 1
|
|
38
|
-
panic = "abort"
|
|
39
|
-
strip = true
|
|
40
|
-
|
|
41
|
-
[package.metadata.wasm-pack.profile.release]
|
|
42
|
-
wasm-opt = false
|
package/wasm/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 Unreal Engine MCP Server Contributors
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
package/wasm/README.md
DELETED
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
# Unreal MCP WASM Module
|
|
2
|
-
|
|
3
|
-
WebAssembly module providing high-performance operations for the Unreal Engine MCP Server.
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- **Property Parser**: Efficient JSON property parsing and serialization
|
|
8
|
-
- **Transform Math**: Optimized 3D vector and matrix operations
|
|
9
|
-
- **Dependency Resolver**: Asset dependency graph traversal and analysis
|
|
10
|
-
- **Utils**: Common mathematical utilities
|
|
11
|
-
|
|
12
|
-
## Prerequisites
|
|
13
|
-
|
|
14
|
-
- Rust (latest stable)
|
|
15
|
-
- wasm-pack
|
|
16
|
-
- Node.js (for integration testing)
|
|
17
|
-
|
|
18
|
-
## Build Instructions
|
|
19
|
-
|
|
20
|
-
### Install wasm-pack
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### Build for Release
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
wasm-pack build --release --target web
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
This creates a `pkg/` directory with:
|
|
33
|
-
- `unreal_mcp_wasm.js` - JavaScript bindings
|
|
34
|
-
- `unreal_mcp_wasm_bg.wasm` - Compiled WebAssembly binary
|
|
35
|
-
- `unreal_mcp_wasm.d.ts` - TypeScript definitions
|
|
36
|
-
|
|
37
|
-
### Build for Development
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
wasm-pack build --dev --target web --watch
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
The `--watch` flag enables hot reloading during development.
|
|
44
|
-
|
|
45
|
-
### Testing
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
# Run Rust tests
|
|
49
|
-
cargo test
|
|
50
|
-
|
|
51
|
-
# Run integration tests
|
|
52
|
-
wasm-pack test --headless --firefox
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## Usage
|
|
56
|
-
|
|
57
|
-
### In TypeScript
|
|
58
|
-
|
|
59
|
-
```typescript
|
|
60
|
-
import init, {
|
|
61
|
-
PropertyParser,
|
|
62
|
-
TransformCalculator,
|
|
63
|
-
Vector
|
|
64
|
-
} from './pkg/unreal_mcp_wasm.js';
|
|
65
|
-
|
|
66
|
-
async function main() {
|
|
67
|
-
await init();
|
|
68
|
-
|
|
69
|
-
// Property parsing
|
|
70
|
-
const parser = new PropertyParser();
|
|
71
|
-
const json = '{"name": "Test", "value": 42}';
|
|
72
|
-
const result = parser.parse_properties(json);
|
|
73
|
-
console.log(result);
|
|
74
|
-
|
|
75
|
-
// Vector math
|
|
76
|
-
const v1 = new Vector(1, 2, 3);
|
|
77
|
-
const v2 = new Vector(4, 5, 6);
|
|
78
|
-
const sum = v1.add(v2);
|
|
79
|
-
console.log(sum); // { x: 5, y: 7, z: 9 }
|
|
80
|
-
|
|
81
|
-
// Transform calculations
|
|
82
|
-
const calculator = new TransformCalculator();
|
|
83
|
-
const location = [100, 200, 300];
|
|
84
|
-
const rotation = [0, 90, 0];
|
|
85
|
-
const scale = [1, 1, 1];
|
|
86
|
-
const matrix = calculator.compose_transform(location, rotation, scale);
|
|
87
|
-
console.log(matrix);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
main();
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## API Reference
|
|
94
|
-
|
|
95
|
-
### PropertyParser
|
|
96
|
-
|
|
97
|
-
```typescript
|
|
98
|
-
new PropertyParser(maxDepth?: number)
|
|
99
|
-
parse_properties(jsonStr: string, maxDepth?: number): Promise<ParseResult>
|
|
100
|
-
serialize_properties(properties: JsValue): Promise<string>
|
|
101
|
-
extract_property_names(jsonStr: string): Promise<string[]>
|
|
102
|
-
get_property_type(jsonStr: string): string
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### TransformCalculator
|
|
106
|
-
|
|
107
|
-
```typescript
|
|
108
|
-
new TransformCalculator()
|
|
109
|
-
compose_transform(location: [number, number, number], rotation: [number, number, number], scale: [number, number, number]): number[]
|
|
110
|
-
decompose_matrix(matrix: number[]): number[]
|
|
111
|
-
apply_transform(point: number[], transform: number[]): number[]
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
### Vector
|
|
115
|
-
|
|
116
|
-
```typescript
|
|
117
|
-
new Vector(x: number, y: number, z: number)
|
|
118
|
-
add(other: Vector): Vector
|
|
119
|
-
subtract(other: Vector): Vector
|
|
120
|
-
multiply(other: Vector): Vector
|
|
121
|
-
scale(scalar: number): Vector
|
|
122
|
-
dot(other: Vector): number
|
|
123
|
-
cross(other: Vector): Vector
|
|
124
|
-
length(): number
|
|
125
|
-
normalize(): Vector
|
|
126
|
-
distance_to(other: Vector): number
|
|
127
|
-
lerp(other: Vector, t: number): Vector
|
|
128
|
-
to_array(): number[]
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### DependencyResolver
|
|
132
|
-
|
|
133
|
-
```typescript
|
|
134
|
-
new DependencyResolver(maxDepth?: number)
|
|
135
|
-
analyze_dependencies(assetPath: string, dependenciesJson: string, maxDepth?: number): Promise<DependencyAnalysis>
|
|
136
|
-
find_dependents(assetPath: string, dependenciesJson: string): string[]
|
|
137
|
-
calculate_depth(assetPath: string, dependenciesJson: string, maxDepth?: number): number
|
|
138
|
-
find_circular_dependencies(dependenciesJson: string, maxDepth?: number): string[][]
|
|
139
|
-
topological_sort(dependenciesJson: string): string[]
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### Utils
|
|
143
|
-
|
|
144
|
-
```typescript
|
|
145
|
-
now(): number
|
|
146
|
-
random(): number
|
|
147
|
-
clamp(value: number, min: number, max: number): number
|
|
148
|
-
lerp(a: number, b: number, t: number): number
|
|
149
|
-
deg_to_rad(degrees: number): number
|
|
150
|
-
rad_to_deg(radians: number): number
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### Metrics
|
|
154
|
-
|
|
155
|
-
```typescript
|
|
156
|
-
new Metrics()
|
|
157
|
-
record(name: string, durationMs: number): void
|
|
158
|
-
average_for(name: string): number
|
|
159
|
-
count(): number
|
|
160
|
-
clear(): void
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
## Performance
|
|
164
|
-
|
|
165
|
-
### Benchmarks (Approximate)
|
|
166
|
-
|
|
167
|
-
| Operation | WASM | TypeScript | Speedup |
|
|
168
|
-
|-----------|------|------------|---------|
|
|
169
|
-
| Parse 1000 properties | 20-40ms | 150-300ms | **5-8x** |
|
|
170
|
-
| Vector operations (1000) | 1-2ms | 5-10ms | **5x** |
|
|
171
|
-
| Transform composition | 0.5ms | 5ms | **10x** |
|
|
172
|
-
| Dependency analysis | 10-20ms | 50-100ms | **5x** |
|
|
173
|
-
|
|
174
|
-
## Limitations
|
|
175
|
-
|
|
176
|
-
1. Requires WebAssembly support (all modern browsers)
|
|
177
|
-
2. Limited to f32 for floating-point operations (performance optimization)
|
|
178
|
-
3. Maximum recursion depth defaults to 100 (configurable)
|
|
179
|
-
|
|
180
|
-
## Troubleshooting
|
|
181
|
-
|
|
182
|
-
### Build Errors
|
|
183
|
-
|
|
184
|
-
**Error: `wasm-pack` not found**
|
|
185
|
-
```bash
|
|
186
|
-
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
**Error: `cargo` not found**
|
|
190
|
-
Install Rust from https://rustup.rs/
|
|
191
|
-
|
|
192
|
-
### Runtime Errors
|
|
193
|
-
|
|
194
|
-
**Error: "WebAssembly module not initialized"**
|
|
195
|
-
```typescript
|
|
196
|
-
await init(); // Must be called before using WASM functions
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
**Error: "Maximum nesting depth exceeded"**
|
|
200
|
-
```typescript
|
|
201
|
-
const parser = new PropertyParser(200); // Increase max depth
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
## Development
|
|
205
|
-
|
|
206
|
-
### Project Structure
|
|
207
|
-
|
|
208
|
-
```
|
|
209
|
-
wasm/
|
|
210
|
-
├── src/
|
|
211
|
-
│ ├── lib.rs # Entry point
|
|
212
|
-
│ ├── property_parser.rs # Property parsing
|
|
213
|
-
│ ├── transform_math.rs # Vector/matrix math
|
|
214
|
-
│ └── dependency_resolver.rs # Dependency graphs
|
|
215
|
-
├── tests/
|
|
216
|
-
│ └── integration.rs # Integration tests
|
|
217
|
-
├── Cargo.toml # Rust configuration
|
|
218
|
-
└── README.md # This file
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
### Adding New Functions
|
|
222
|
-
|
|
223
|
-
1. Add function to appropriate module
|
|
224
|
-
2. Mark with `#[wasm_bindgen]`
|
|
225
|
-
3. Build with `wasm-pack build --dev`
|
|
226
|
-
4. Run tests with `cargo test`
|
|
227
|
-
|
|
228
|
-
### Code Style
|
|
229
|
-
|
|
230
|
-
- Use `f32` for floating-point numbers
|
|
231
|
-
- Prefer simple types over complex generics
|
|
232
|
-
- Add documentation comments
|
|
233
|
-
- Include tests for new functionality
|
|
234
|
-
|
|
235
|
-
## License
|
|
236
|
-
|
|
237
|
-
MIT
|
|
238
|
-
|
|
239
|
-
## Contributing
|
|
240
|
-
|
|
241
|
-
1. Fork the repository
|
|
242
|
-
2. Create a feature branch
|
|
243
|
-
3. Make your changes
|
|
244
|
-
4. Add tests
|
|
245
|
-
5. Run `cargo test`
|
|
246
|
-
6. Submit a pull request
|
|
247
|
-
|
|
248
|
-
## See Also
|
|
249
|
-
|
|
250
|
-
- [WebAssembly.org](https://webassembly.org/)
|
|
251
|
-
- [wasm-bindgen](https://rustwasm.github.io/wasm-bindgen/)
|
|
252
|
-
- [wasm-pack](https://rustwasm.github.io/wasm-pack/)
|
|
253
|
-
- [serde](https://serde.rs/)
|
|
@@ -1,377 +0,0 @@
|
|
|
1
|
-
//! Asset dependency resolution module
|
|
2
|
-
//!
|
|
3
|
-
//! This module provides efficient traversal and analysis of
|
|
4
|
-
//! asset dependency graphs.
|
|
5
|
-
|
|
6
|
-
use serde::{Deserialize, Serialize};
|
|
7
|
-
use std::collections::{HashSet, HashMap, VecDeque};
|
|
8
|
-
use wasm_bindgen::prelude::*;
|
|
9
|
-
use serde_wasm_bindgen as swb;
|
|
10
|
-
|
|
11
|
-
/// Asset dependency information
|
|
12
|
-
#[derive(Serialize, Deserialize, Clone)]
|
|
13
|
-
#[serde(rename_all = "camelCase")]
|
|
14
|
-
pub struct AssetDependency {
|
|
15
|
-
pub path: String,
|
|
16
|
-
pub dependencies: Vec<String>,
|
|
17
|
-
pub dependents: Vec<String>,
|
|
18
|
-
pub depth: u32,
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/// Dependency graph analysis result
|
|
22
|
-
#[derive(Serialize, Deserialize)]
|
|
23
|
-
#[serde(rename_all = "camelCase")]
|
|
24
|
-
pub struct DependencyAnalysis {
|
|
25
|
-
pub asset: String,
|
|
26
|
-
pub dependencies: Vec<AssetDependency>,
|
|
27
|
-
pub total_dependency_count: usize,
|
|
28
|
-
pub max_depth: u32,
|
|
29
|
-
pub circular_dependencies: Vec<Vec<String>>,
|
|
30
|
-
pub analysis_time_ms: f64,
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
#[wasm_bindgen]
|
|
34
|
-
pub struct DependencyResolver {
|
|
35
|
-
/// Maximum depth to prevent infinite recursion
|
|
36
|
-
max_depth: usize,
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
#[wasm_bindgen]
|
|
40
|
-
impl DependencyResolver {
|
|
41
|
-
/// Create a DependencyResolver with default max depth (100)
|
|
42
|
-
#[wasm_bindgen(constructor)]
|
|
43
|
-
pub fn new() -> DependencyResolver {
|
|
44
|
-
console_error_panic_hook::set_once();
|
|
45
|
-
DependencyResolver { max_depth: 100 }
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/// Create a DependencyResolver with custom max depth
|
|
49
|
-
#[wasm_bindgen(js_name = withMaxDepth)]
|
|
50
|
-
pub fn with_max_depth(max_depth: usize) -> DependencyResolver {
|
|
51
|
-
console_error_panic_hook::set_once();
|
|
52
|
-
DependencyResolver { max_depth }
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/// Analyze dependencies for an asset
|
|
56
|
-
#[wasm_bindgen(js_name = analyzeDependencies)]
|
|
57
|
-
pub fn analyze_dependencies(
|
|
58
|
-
&self,
|
|
59
|
-
asset_path: &str,
|
|
60
|
-
dependencies_json: &str,
|
|
61
|
-
max_depth: Option<usize>,
|
|
62
|
-
) -> Result<JsValue, JsValue> {
|
|
63
|
-
let start = js_sys::Date::now();
|
|
64
|
-
|
|
65
|
-
let dependencies_map: HashMap<String, Vec<String>> = serde_json::from_str(dependencies_json)
|
|
66
|
-
.map_err(|e| JsValue::from_str(&format!("JSON parse error: {}", e)))?;
|
|
67
|
-
|
|
68
|
-
let depth_limit = max_depth.unwrap_or(self.max_depth);
|
|
69
|
-
|
|
70
|
-
if !dependencies_map.contains_key(asset_path) {
|
|
71
|
-
return Err(JsValue::from_str(&format!("Asset not found: {}", asset_path)));
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
let mut visited = HashSet::new();
|
|
75
|
-
let mut result = Vec::new();
|
|
76
|
-
let mut stack = VecDeque::new();
|
|
77
|
-
let mut circular_deps = Vec::new();
|
|
78
|
-
|
|
79
|
-
stack.push_back((asset_path.to_string(), 0));
|
|
80
|
-
|
|
81
|
-
while let Some((current_path, current_depth)) = stack.pop_front() {
|
|
82
|
-
if current_depth > depth_limit {
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if visited.contains(¤t_path) {
|
|
87
|
-
// Found circular dependency
|
|
88
|
-
circular_deps.push(vec![current_path.clone()]);
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
visited.insert(current_path.clone());
|
|
93
|
-
|
|
94
|
-
if let Some(deps) = dependencies_map.get(¤t_path) {
|
|
95
|
-
result.push(AssetDependency {
|
|
96
|
-
path: current_path.clone(),
|
|
97
|
-
dependencies: deps.clone(),
|
|
98
|
-
dependents: self.find_dependents_internal(¤t_path, &dependencies_map),
|
|
99
|
-
depth: current_depth as u32,
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
for dep in deps {
|
|
103
|
-
if !visited.contains(dep) {
|
|
104
|
-
stack.push_back((dep.clone(), current_depth + 1));
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
let analysis_time = js_sys::Date::now() - start;
|
|
111
|
-
|
|
112
|
-
let total_dependency_count = result.len();
|
|
113
|
-
|
|
114
|
-
let analysis = DependencyAnalysis {
|
|
115
|
-
asset: asset_path.to_string(),
|
|
116
|
-
dependencies: result,
|
|
117
|
-
total_dependency_count,
|
|
118
|
-
max_depth: depth_limit as u32,
|
|
119
|
-
circular_dependencies: circular_deps,
|
|
120
|
-
analysis_time_ms: analysis_time,
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
let js_value = swb::to_value(&analysis)
|
|
124
|
-
.map_err(|e| JsValue::from_str(&format!("Serialize error: {}", e)))?;
|
|
125
|
-
Ok(js_value)
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/// Find all dependents of an asset
|
|
129
|
-
#[wasm_bindgen(js_name = findDependents)]
|
|
130
|
-
pub fn find_dependents(
|
|
131
|
-
&self,
|
|
132
|
-
asset_path: &str,
|
|
133
|
-
dependencies_json: &str,
|
|
134
|
-
) -> Result<JsValue, JsValue> {
|
|
135
|
-
let dependencies_map: HashMap<String, Vec<String>> = serde_json::from_str(dependencies_json)
|
|
136
|
-
.map_err(|e| JsValue::from_str(&format!("JSON parse error: {}", e)))?;
|
|
137
|
-
|
|
138
|
-
let dependents = self.find_dependents_internal(asset_path, &dependencies_map);
|
|
139
|
-
|
|
140
|
-
let js_value = swb::to_value(&dependents)
|
|
141
|
-
.map_err(|e| JsValue::from_str(&format!("Serialize error: {}", e)))?;
|
|
142
|
-
Ok(js_value)
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/// Calculate dependency depth
|
|
146
|
-
#[wasm_bindgen(js_name = calculateDepth)]
|
|
147
|
-
pub fn calculate_depth(
|
|
148
|
-
&self,
|
|
149
|
-
asset_path: &str,
|
|
150
|
-
dependencies_json: &str,
|
|
151
|
-
max_depth: Option<usize>,
|
|
152
|
-
) -> Result<u32, JsValue> {
|
|
153
|
-
let dependencies_map: HashMap<String, Vec<String>> = serde_json::from_str(dependencies_json)
|
|
154
|
-
.map_err(|e| JsValue::from_str(&format!("JSON parse error: {}", e)))?;
|
|
155
|
-
|
|
156
|
-
let depth_limit = max_depth.unwrap_or(self.max_depth);
|
|
157
|
-
|
|
158
|
-
let depth = self.calculate_depth_internal(asset_path, &dependencies_map, depth_limit, &mut HashSet::new());
|
|
159
|
-
|
|
160
|
-
Ok(depth)
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/// Find circular dependencies in the graph
|
|
164
|
-
#[wasm_bindgen(js_name = findCircularDependencies)]
|
|
165
|
-
pub fn find_circular_dependencies(
|
|
166
|
-
&self,
|
|
167
|
-
dependencies_json: &str,
|
|
168
|
-
max_depth: Option<usize>,
|
|
169
|
-
) -> Result<JsValue, JsValue> {
|
|
170
|
-
let dependencies_map: HashMap<String, Vec<String>> = serde_json::from_str(dependencies_json)
|
|
171
|
-
.map_err(|e| JsValue::from_str(&format!("JSON parse error: {}", e)))?;
|
|
172
|
-
|
|
173
|
-
let depth_limit = max_depth.unwrap_or(self.max_depth);
|
|
174
|
-
|
|
175
|
-
let circular_deps = self.find_circular_dependencies_internal(&dependencies_map, depth_limit);
|
|
176
|
-
|
|
177
|
-
let js_value = swb::to_value(&circular_deps)
|
|
178
|
-
.map_err(|e| JsValue::from_str(&format!("Serialize error: {}", e)))?;
|
|
179
|
-
Ok(js_value)
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/// Topological sort of dependencies
|
|
183
|
-
#[wasm_bindgen(js_name = topologicalSort)]
|
|
184
|
-
pub fn topological_sort(
|
|
185
|
-
&self,
|
|
186
|
-
dependencies_json: &str,
|
|
187
|
-
) -> Result<JsValue, JsValue> {
|
|
188
|
-
let dependencies_map: HashMap<String, Vec<String>> = serde_json::from_str(dependencies_json)
|
|
189
|
-
.map_err(|e| JsValue::from_str(&format!("JSON parse error: {}", e)))?;
|
|
190
|
-
|
|
191
|
-
let sorted = self.topological_sort_internal(&dependencies_map)?;
|
|
192
|
-
|
|
193
|
-
let js_value = swb::to_value(&sorted)
|
|
194
|
-
.map_err(|e| JsValue::from_str(&format!("Serialize error: {}", e)))?;
|
|
195
|
-
Ok(js_value)
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
impl DependencyResolver {
|
|
200
|
-
fn find_dependents_internal(
|
|
201
|
-
&self,
|
|
202
|
-
asset_path: &str,
|
|
203
|
-
dependencies_map: &HashMap<String, Vec<String>>,
|
|
204
|
-
) -> Vec<String> {
|
|
205
|
-
let mut dependents = Vec::new();
|
|
206
|
-
|
|
207
|
-
for (path, deps) in dependencies_map {
|
|
208
|
-
if deps.contains(&asset_path.to_string()) {
|
|
209
|
-
dependents.push(path.clone());
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
dependents
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
fn calculate_depth_internal(
|
|
217
|
-
&self,
|
|
218
|
-
asset_path: &str,
|
|
219
|
-
dependencies_map: &HashMap<String, Vec<String>>,
|
|
220
|
-
max_depth: usize,
|
|
221
|
-
visited: &mut HashSet<String>,
|
|
222
|
-
) -> u32 {
|
|
223
|
-
if visited.contains(asset_path) {
|
|
224
|
-
return 0;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
if max_depth == 0 {
|
|
228
|
-
return 0;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
visited.insert(asset_path.to_string());
|
|
232
|
-
|
|
233
|
-
if let Some(deps) = dependencies_map.get(asset_path) {
|
|
234
|
-
if deps.is_empty() {
|
|
235
|
-
visited.remove(asset_path);
|
|
236
|
-
return 0;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
let mut max_child_depth = 0;
|
|
240
|
-
for dep in deps {
|
|
241
|
-
let child_depth = self.calculate_depth_internal(
|
|
242
|
-
dep,
|
|
243
|
-
dependencies_map,
|
|
244
|
-
max_depth - 1,
|
|
245
|
-
visited,
|
|
246
|
-
);
|
|
247
|
-
max_child_depth = max_child_depth.max(child_depth);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
visited.remove(asset_path);
|
|
251
|
-
max_child_depth + 1
|
|
252
|
-
} else {
|
|
253
|
-
visited.remove(asset_path);
|
|
254
|
-
0
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
fn find_circular_dependencies_internal(
|
|
259
|
-
&self,
|
|
260
|
-
dependencies_map: &HashMap<String, Vec<String>>,
|
|
261
|
-
max_depth: usize,
|
|
262
|
-
) -> Vec<Vec<String>> {
|
|
263
|
-
let mut cycles = Vec::new();
|
|
264
|
-
let mut visited = HashSet::new();
|
|
265
|
-
let mut stack = HashSet::new();
|
|
266
|
-
|
|
267
|
-
fn dfs(
|
|
268
|
-
current: &str,
|
|
269
|
-
dependencies_map: &HashMap<String, Vec<String>>,
|
|
270
|
-
visited: &mut HashSet<String>,
|
|
271
|
-
stack: &mut HashSet<String>,
|
|
272
|
-
cycles: &mut Vec<Vec<String>>,
|
|
273
|
-
path: &mut Vec<String>,
|
|
274
|
-
depth: usize,
|
|
275
|
-
max_depth: usize,
|
|
276
|
-
) {
|
|
277
|
-
if depth > max_depth {
|
|
278
|
-
return;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
visited.insert(current.to_string());
|
|
282
|
-
stack.insert(current.to_string());
|
|
283
|
-
path.push(current.to_string());
|
|
284
|
-
|
|
285
|
-
if let Some(deps) = dependencies_map.get(current) {
|
|
286
|
-
for dep in deps {
|
|
287
|
-
if !visited.contains(dep) {
|
|
288
|
-
dfs(
|
|
289
|
-
dep,
|
|
290
|
-
dependencies_map,
|
|
291
|
-
visited,
|
|
292
|
-
stack,
|
|
293
|
-
cycles,
|
|
294
|
-
path,
|
|
295
|
-
depth + 1,
|
|
296
|
-
max_depth,
|
|
297
|
-
);
|
|
298
|
-
} else if stack.contains(dep) {
|
|
299
|
-
// Found a cycle
|
|
300
|
-
let cycle_start = path.iter().position(|p| p == dep);
|
|
301
|
-
if let Some(start) = cycle_start {
|
|
302
|
-
cycles.push(path[start..].to_vec());
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
stack.remove(current);
|
|
309
|
-
path.pop();
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
for asset in dependencies_map.keys() {
|
|
313
|
-
if !visited.contains(asset) {
|
|
314
|
-
let mut path = Vec::new();
|
|
315
|
-
dfs(
|
|
316
|
-
asset,
|
|
317
|
-
dependencies_map,
|
|
318
|
-
&mut visited,
|
|
319
|
-
&mut stack,
|
|
320
|
-
&mut cycles,
|
|
321
|
-
&mut path,
|
|
322
|
-
0,
|
|
323
|
-
max_depth,
|
|
324
|
-
);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
cycles
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
fn topological_sort_internal(
|
|
332
|
-
&self,
|
|
333
|
-
dependencies_map: &HashMap<String, Vec<String>>,
|
|
334
|
-
) -> Result<Vec<String>, JsValue> {
|
|
335
|
-
let mut in_degree: HashMap<String, usize> = HashMap::new();
|
|
336
|
-
let mut graph: HashMap<String, Vec<String>> = HashMap::new();
|
|
337
|
-
|
|
338
|
-
// Initialize
|
|
339
|
-
for (asset, deps) in dependencies_map {
|
|
340
|
-
in_degree.entry(asset.clone()).or_insert(0);
|
|
341
|
-
for dep in deps {
|
|
342
|
-
in_degree.entry(dep.clone()).or_insert(0);
|
|
343
|
-
graph.entry(dep.clone()).or_insert_with(Vec::new).push(asset.clone());
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
// Kahn's algorithm
|
|
348
|
-
let mut queue: VecDeque<String> = in_degree
|
|
349
|
-
.iter()
|
|
350
|
-
.filter(|(_, °ree)| degree == 0)
|
|
351
|
-
.map(|(asset, _)| asset.clone())
|
|
352
|
-
.collect();
|
|
353
|
-
|
|
354
|
-
let mut sorted = Vec::new();
|
|
355
|
-
|
|
356
|
-
while let Some(asset) = queue.pop_front() {
|
|
357
|
-
sorted.push(asset.clone());
|
|
358
|
-
|
|
359
|
-
if let Some(dependents) = graph.get(&asset) {
|
|
360
|
-
for dependent in dependents {
|
|
361
|
-
if let Some(&mut ref mut degree) = in_degree.get_mut(dependent) {
|
|
362
|
-
*degree -= 1;
|
|
363
|
-
if *degree == 0 {
|
|
364
|
-
queue.push_back(dependent.clone());
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
if sorted.len() != in_degree.len() {
|
|
372
|
-
return Err(JsValue::from_str("Graph contains cycles - topological sort not possible"));
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
Ok(sorted)
|
|
376
|
-
}
|
|
377
|
-
}
|