unreal-engine-mcp-server 0.5.3 → 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/CHANGELOG.md +66 -0
- package/dist/automation/bridge.d.ts +1 -0
- package/dist/automation/bridge.d.ts.map +1 -0
- package/dist/automation/bridge.js +62 -4
- 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 +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 +2 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +2 -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 +0 -1
- package/dist/graphql/server.d.ts.map +1 -0
- package/dist/graphql/server.js +15 -16
- 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 +3 -3
- 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 +61 -7
- 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 -2241
- 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 -1330
- 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 -560
- 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 -107
- 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 -24
- 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 -128
- 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/run-unreal-tool-tests.mjs +0 -948
- package/tests/test-animation.mjs +0 -369
- package/tests/test-asset-advanced.mjs +0 -82
- package/tests/test-asset-errors.mjs +0 -35
- 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 -933
- 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/src/automation/types.ts
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { WebSocket } from 'ws';
|
|
2
|
-
|
|
3
|
-
export interface AutomationBridgeOptions {
|
|
4
|
-
host?: string;
|
|
5
|
-
port?: number;
|
|
6
|
-
ports?: number[];
|
|
7
|
-
protocols?: string[];
|
|
8
|
-
capabilityToken?: string;
|
|
9
|
-
enabled?: boolean;
|
|
10
|
-
serverName?: string;
|
|
11
|
-
serverVersion?: string;
|
|
12
|
-
heartbeatIntervalMs?: number;
|
|
13
|
-
maxPendingRequests?: number;
|
|
14
|
-
maxConcurrentConnections?: number;
|
|
15
|
-
clientMode?: boolean;
|
|
16
|
-
clientHost?: string;
|
|
17
|
-
clientPort?: number;
|
|
18
|
-
serverLegacyEnabled?: boolean;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface AutomationBridgeMessage {
|
|
22
|
-
type: string;
|
|
23
|
-
[key: string]: unknown;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export interface AutomationBridgeResponseMessage extends AutomationBridgeMessage {
|
|
27
|
-
requestId: string;
|
|
28
|
-
success?: boolean;
|
|
29
|
-
message?: string;
|
|
30
|
-
error?: string;
|
|
31
|
-
result?: unknown;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export interface AutomationBridgeStatus {
|
|
35
|
-
enabled: boolean;
|
|
36
|
-
host: string;
|
|
37
|
-
port: number;
|
|
38
|
-
configuredPorts: number[];
|
|
39
|
-
listeningPorts: number[];
|
|
40
|
-
connected: boolean;
|
|
41
|
-
connectedAt: string | null;
|
|
42
|
-
activePort: number | null;
|
|
43
|
-
negotiatedProtocol: string | null;
|
|
44
|
-
supportedProtocols: string[];
|
|
45
|
-
supportedOpcodes: string[];
|
|
46
|
-
expectedResponseOpcodes: string[];
|
|
47
|
-
capabilityTokenRequired: boolean;
|
|
48
|
-
lastHandshakeAt: string | null;
|
|
49
|
-
lastHandshakeMetadata: Record<string, unknown> | null;
|
|
50
|
-
lastHandshakeAck: Record<string, unknown> | null;
|
|
51
|
-
lastHandshakeFailure: { reason: string; at: string } | null;
|
|
52
|
-
lastDisconnect: { code: number; reason: string; at: string } | null;
|
|
53
|
-
lastError: { message: string; at: string } | null;
|
|
54
|
-
lastMessageAt: string | null;
|
|
55
|
-
lastRequestSentAt: string | null;
|
|
56
|
-
pendingRequests: number;
|
|
57
|
-
pendingRequestDetails: Array<{ requestId: string; action: string; ageMs: number }>;
|
|
58
|
-
connections: Array<{
|
|
59
|
-
connectionId: string;
|
|
60
|
-
sessionId: string | null;
|
|
61
|
-
remoteAddress: string | null;
|
|
62
|
-
remotePort: number | null;
|
|
63
|
-
port: number;
|
|
64
|
-
connectedAt: string;
|
|
65
|
-
protocol: string | null;
|
|
66
|
-
readyState: number;
|
|
67
|
-
isPrimary: boolean;
|
|
68
|
-
}>;
|
|
69
|
-
webSocketListening: boolean;
|
|
70
|
-
serverLegacyEnabled: boolean;
|
|
71
|
-
serverName: string;
|
|
72
|
-
serverVersion: string;
|
|
73
|
-
maxConcurrentConnections: number;
|
|
74
|
-
maxPendingRequests: number;
|
|
75
|
-
heartbeatIntervalMs: number;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export interface PendingRequest {
|
|
79
|
-
resolve: (value: AutomationBridgeResponseMessage) => void;
|
|
80
|
-
reject: (reason: Error) => void;
|
|
81
|
-
timeout: NodeJS.Timeout;
|
|
82
|
-
action: string;
|
|
83
|
-
payload: Record<string, unknown>;
|
|
84
|
-
requestedAt: Date;
|
|
85
|
-
waitForEvent?: boolean;
|
|
86
|
-
eventTimeout?: NodeJS.Timeout | undefined;
|
|
87
|
-
eventTimeoutMs?: number | undefined;
|
|
88
|
-
initialResponse?: AutomationBridgeResponseMessage | undefined;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export interface SocketInfo {
|
|
92
|
-
connectionId: string;
|
|
93
|
-
port: number;
|
|
94
|
-
connectedAt: Date;
|
|
95
|
-
protocol?: string;
|
|
96
|
-
sessionId?: string;
|
|
97
|
-
remoteAddress?: string;
|
|
98
|
-
remotePort?: number;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export type AutomationBridgeEvents = {
|
|
102
|
-
connected: (info: { socket: WebSocket; metadata: Record<string, unknown>; port: number; protocol: string | null }) => void;
|
|
103
|
-
disconnected: (info: { code: number; reason: string; port: number; protocol: string | null }) => void;
|
|
104
|
-
message: (message: AutomationBridgeMessage) => void;
|
|
105
|
-
error: (error: Error & { port?: number }) => void;
|
|
106
|
-
handshakeFailed: (info: { reason: string; port: number }) => void;
|
|
107
|
-
};
|
package/src/cli.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Dynamic import loader: prefer compiled JS when present (./index.js) but
|
|
3
|
-
// gracefully fall back to TypeScript source (./index.ts) when running via
|
|
4
|
-
// ts-node-esm or similar dev workflows where compiled JS isn't available.
|
|
5
|
-
(async () => {
|
|
6
|
-
try {
|
|
7
|
-
const m = await import('./index.js');
|
|
8
|
-
if (m && typeof m.startStdioServer === 'function') {
|
|
9
|
-
await m.startStdioServer();
|
|
10
|
-
} else {
|
|
11
|
-
throw new Error('startStdioServer not exported from index.js');
|
|
12
|
-
}
|
|
13
|
-
} catch (err) {
|
|
14
|
-
// If index.js cannot be resolved, try importing the TypeScript source
|
|
15
|
-
// at runtime (useful when running via ts-node-esm). Cast the error to
|
|
16
|
-
// `any` when inspecting runtime-only properties like `code`.
|
|
17
|
-
if (err && (((err as any).code === 'ERR_MODULE_NOT_FOUND') || String(err).includes('Unable to resolve'))) {
|
|
18
|
-
try {
|
|
19
|
-
const tsModuleSpecifier = new URL('./index.ts', import.meta.url).href;
|
|
20
|
-
const m2 = await import(tsModuleSpecifier);
|
|
21
|
-
if (m2 && typeof m2.startStdioServer === 'function') {
|
|
22
|
-
await m2.startStdioServer();
|
|
23
|
-
} else {
|
|
24
|
-
throw new Error('startStdioServer not exported from index.ts');
|
|
25
|
-
}
|
|
26
|
-
} catch (err2) {
|
|
27
|
-
console.error('Failed to start server (fallback to TypeScript failed):', err2);
|
|
28
|
-
process.exit(1);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
console.error('Failed to start server:', err);
|
|
32
|
-
process.exit(1);
|
|
33
|
-
}
|
|
34
|
-
})();
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared configuration for Unreal Engine class names and aliases.
|
|
3
|
-
* Centralizes class mappings to avoid duplication across handlers.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* User-friendly class name aliases to full Unreal class paths.
|
|
8
|
-
* These allow users to specify simpler names like 'PointLight' instead of '/Script/Engine.PointLight'.
|
|
9
|
-
*/
|
|
10
|
-
export const ACTOR_CLASS_ALIASES: Record<string, string> = {
|
|
11
|
-
// Special cases that need component addition
|
|
12
|
-
'SplineActor': '/Script/Engine.Actor',
|
|
13
|
-
'Spline': '/Script/Engine.Actor',
|
|
14
|
-
|
|
15
|
-
// Light actors
|
|
16
|
-
'PointLight': '/Script/Engine.PointLight',
|
|
17
|
-
'SpotLight': '/Script/Engine.SpotLight',
|
|
18
|
-
'DirectionalLight': '/Script/Engine.DirectionalLight',
|
|
19
|
-
'RectLight': '/Script/Engine.RectLight',
|
|
20
|
-
|
|
21
|
-
// Camera actors
|
|
22
|
-
'Camera': '/Script/Engine.CameraActor',
|
|
23
|
-
'CameraActor': '/Script/Engine.CameraActor',
|
|
24
|
-
|
|
25
|
-
// Mesh actors
|
|
26
|
-
'StaticMeshActor': '/Script/Engine.StaticMeshActor',
|
|
27
|
-
'SkeletalMeshActor': '/Script/Engine.SkeletalMeshActor',
|
|
28
|
-
|
|
29
|
-
// Gameplay actors
|
|
30
|
-
'PlayerStart': '/Script/Engine.PlayerStart',
|
|
31
|
-
'Pawn': '/Script/Engine.Pawn',
|
|
32
|
-
'Character': '/Script/Engine.Character',
|
|
33
|
-
'Actor': '/Script/Engine.Actor',
|
|
34
|
-
|
|
35
|
-
// Trigger volumes
|
|
36
|
-
'TriggerBox': '/Script/Engine.TriggerBox',
|
|
37
|
-
'TriggerSphere': '/Script/Engine.TriggerSphere',
|
|
38
|
-
'BlockingVolume': '/Script/Engine.BlockingVolume',
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Class aliases that require a component to be auto-added after spawning.
|
|
43
|
-
*/
|
|
44
|
-
export const CLASSES_REQUIRING_COMPONENT: Record<string, string> = {
|
|
45
|
-
'SplineActor': 'SplineComponent',
|
|
46
|
-
'Spline': 'SplineComponent',
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Resolve a class name alias to its full Unreal class path.
|
|
51
|
-
* @param classNameOrPath - The class name or alias to resolve
|
|
52
|
-
* @returns The full class path, or the original if not an alias
|
|
53
|
-
*/
|
|
54
|
-
export function resolveClassAlias(classNameOrPath: string): string {
|
|
55
|
-
return ACTOR_CLASS_ALIASES[classNameOrPath] || classNameOrPath;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Check if a class alias requires an auto-added component.
|
|
60
|
-
* @param className - The original class name or alias
|
|
61
|
-
* @returns The component name to add, or undefined
|
|
62
|
-
*/
|
|
63
|
-
export function getRequiredComponent(className: string): string | undefined {
|
|
64
|
-
return CLASSES_REQUIRING_COMPONENT[className];
|
|
65
|
-
}
|
package/src/config.ts
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { Logger } from './utils/logger.js';
|
|
3
|
-
import dotenv from 'dotenv';
|
|
4
|
-
|
|
5
|
-
// Suppress dotenv output to avoid corrupting MCP stdout stream
|
|
6
|
-
const originalWrite = process.stdout.write;
|
|
7
|
-
process.stdout.write = function () { return true; } as any;
|
|
8
|
-
try {
|
|
9
|
-
dotenv.config();
|
|
10
|
-
} finally {
|
|
11
|
-
process.stdout.write = originalWrite;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const log = new Logger('Config');
|
|
15
|
-
|
|
16
|
-
const stringToBoolean = (val: unknown) => {
|
|
17
|
-
if (typeof val === 'boolean') return val;
|
|
18
|
-
if (typeof val === 'string') {
|
|
19
|
-
const lower = val.toLowerCase().trim();
|
|
20
|
-
return lower === 'true' || lower === '1' || lower === 'on';
|
|
21
|
-
}
|
|
22
|
-
return false;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
const stringToNumber = (val: unknown, defaultVal: number) => {
|
|
26
|
-
if (typeof val === 'number') return val;
|
|
27
|
-
if (typeof val === 'string') {
|
|
28
|
-
const parsed = parseInt(val, 10);
|
|
29
|
-
return isNaN(parsed) ? defaultVal : parsed;
|
|
30
|
-
}
|
|
31
|
-
return defaultVal;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export const EnvSchema = z.object({
|
|
35
|
-
// Server Settings
|
|
36
|
-
NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
|
|
37
|
-
LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('debug'),
|
|
38
|
-
MCP_ROUTE_STDOUT_LOGS: z.preprocess(stringToBoolean, z.boolean().default(true)),
|
|
39
|
-
|
|
40
|
-
// Unreal Settings
|
|
41
|
-
UE_PROJECT_PATH: z.string().optional(),
|
|
42
|
-
UE_EDITOR_EXE: z.string().optional(),
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
// Connection Settings
|
|
46
|
-
MCP_AUTOMATION_PORT: z.preprocess((v) => stringToNumber(v, 8091), z.number().default(8091)),
|
|
47
|
-
MCP_AUTOMATION_HOST: z.string().default('127.0.0.1'),
|
|
48
|
-
MCP_AUTOMATION_CLIENT_MODE: z.preprocess(stringToBoolean, z.boolean().default(false)),
|
|
49
|
-
|
|
50
|
-
// Timeouts
|
|
51
|
-
MCP_CONNECTION_TIMEOUT_MS: z.preprocess((v) => stringToNumber(v, 5000), z.number().default(5000)),
|
|
52
|
-
MCP_REQUEST_TIMEOUT_MS: z.preprocess((v) => stringToNumber(v, 30000), z.number().default(30000)),
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
export type Config = z.infer<typeof EnvSchema>;
|
|
56
|
-
|
|
57
|
-
let config: Config;
|
|
58
|
-
|
|
59
|
-
try {
|
|
60
|
-
config = EnvSchema.parse(process.env);
|
|
61
|
-
log.debug('Configuration loaded successfully');
|
|
62
|
-
} catch (error) {
|
|
63
|
-
if (error instanceof z.ZodError) {
|
|
64
|
-
log.error('❌ Invalid configuration:', error.format());
|
|
65
|
-
log.warn('⚠️ Falling back to safe defaults.');
|
|
66
|
-
// Fallback to parsing an empty object to get all defaults
|
|
67
|
-
config = EnvSchema.parse({});
|
|
68
|
-
} else {
|
|
69
|
-
throw error;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export { config };
|
package/src/constants.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
// Shared runtime defaults and protocol constants
|
|
2
|
-
export const DEFAULT_AUTOMATION_HOST = '127.0.0.1';
|
|
3
|
-
export const DEFAULT_AUTOMATION_PORT = 8090;
|
|
4
|
-
export const DEFAULT_AUTOMATION_PORTS = [8090, 8091];
|
|
5
|
-
export const DEFAULT_NEGOTIATED_PROTOCOLS = ['mcp-automation'];
|
|
6
|
-
export const DEFAULT_HEARTBEAT_INTERVAL_MS = 10000;
|
|
7
|
-
export const DEFAULT_HANDSHAKE_TIMEOUT_MS = 5000;
|
|
8
|
-
export const DEFAULT_MAX_PENDING_REQUESTS = 25;
|
|
9
|
-
export const DEFAULT_TIME_OF_DAY = 9;
|
|
10
|
-
export const DEFAULT_SUN_INTENSITY = 10000;
|
|
11
|
-
export const DEFAULT_SKYLIGHT_INTENSITY = 1;
|
|
12
|
-
|
|
13
|
-
export const DEFAULT_SCREENSHOT_RESOLUTION = '1920x1080';
|
|
14
|
-
|
|
15
|
-
// Operation Timeouts
|
|
16
|
-
export const DEFAULT_OPERATION_TIMEOUT_MS = 30000;
|
|
17
|
-
export const DEFAULT_ASSET_OP_TIMEOUT_MS = 60000;
|
|
18
|
-
export const EXTENDED_ASSET_OP_TIMEOUT_MS = 120000;
|
|
19
|
-
export const LONG_RUNNING_OP_TIMEOUT_MS = 300000;
|
|
20
|
-
|
|
21
|
-
// Command-specific timeouts
|
|
22
|
-
export const CONSOLE_COMMAND_TIMEOUT_MS = 30000;
|
|
23
|
-
export const ENGINE_QUERY_TIMEOUT_MS = 15000;
|
|
24
|
-
export const CONNECTION_TIMEOUT_MS = 15000;
|
package/src/graphql/loaders.ts
DELETED
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DataLoader instances for GraphQL N+1 query optimization
|
|
3
|
-
*
|
|
4
|
-
* DataLoaders batch and cache requests within a single GraphQL request,
|
|
5
|
-
* preventing the N+1 query problem when resolving nested fields.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import DataLoader from 'dataloader';
|
|
9
|
-
import type { AutomationBridge } from '../automation/index.js';
|
|
10
|
-
import { Logger } from '../utils/logger.js';
|
|
11
|
-
|
|
12
|
-
const log = new Logger('GraphQL:Loaders');
|
|
13
|
-
|
|
14
|
-
// ============================================================================
|
|
15
|
-
// Types
|
|
16
|
-
// ============================================================================
|
|
17
|
-
|
|
18
|
-
export interface Actor {
|
|
19
|
-
name: string;
|
|
20
|
-
label?: string;
|
|
21
|
-
class?: string;
|
|
22
|
-
path?: string;
|
|
23
|
-
location?: { x: number; y: number; z: number };
|
|
24
|
-
rotation?: { pitch: number; yaw: number; roll: number };
|
|
25
|
-
scale?: { x: number; y: number; z: number };
|
|
26
|
-
tags?: string[];
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface Asset {
|
|
30
|
-
name: string;
|
|
31
|
-
path: string;
|
|
32
|
-
class?: string;
|
|
33
|
-
packagePath?: string;
|
|
34
|
-
size?: number;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export interface Blueprint {
|
|
38
|
-
name: string;
|
|
39
|
-
path: string;
|
|
40
|
-
parentClass?: string;
|
|
41
|
-
variables?: Array<{ name: string; type: string; defaultValue?: unknown }>;
|
|
42
|
-
functions?: Array<{ name: string; parameters?: Array<{ name: string; type: string }> }>;
|
|
43
|
-
components?: Array<{ name: string; type: string }>;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// ============================================================================
|
|
47
|
-
// Loader Factory
|
|
48
|
-
// ============================================================================
|
|
49
|
-
|
|
50
|
-
export interface GraphQLLoaders {
|
|
51
|
-
actorLoader: DataLoader<string, Actor | null>;
|
|
52
|
-
assetLoader: DataLoader<string, Asset | null>;
|
|
53
|
-
blueprintLoader: DataLoader<string, Blueprint | null>;
|
|
54
|
-
actorComponentsLoader: DataLoader<string, Array<{ name: string; type: string }> | null>;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Creates DataLoader instances for a GraphQL request context.
|
|
59
|
-
*
|
|
60
|
-
* Each GraphQL request should have its own set of loaders to ensure
|
|
61
|
-
* proper request-scoped caching and batching.
|
|
62
|
-
*/
|
|
63
|
-
export function createLoaders(automationBridge: AutomationBridge): GraphQLLoaders {
|
|
64
|
-
return {
|
|
65
|
-
/**
|
|
66
|
-
* Batches actor fetches by name
|
|
67
|
-
*/
|
|
68
|
-
actorLoader: new DataLoader<string, Actor | null>(
|
|
69
|
-
async (names: readonly string[]) => {
|
|
70
|
-
log.debug(`Batching actor fetch for ${names.length} actors`);
|
|
71
|
-
|
|
72
|
-
try {
|
|
73
|
-
// Use batch fetch if available, otherwise fall back to individual fetches
|
|
74
|
-
const result = await automationBridge.sendAutomationRequest<{
|
|
75
|
-
success: boolean;
|
|
76
|
-
actors?: Actor[];
|
|
77
|
-
}>('control_actor', {
|
|
78
|
-
action: 'batch_get',
|
|
79
|
-
actorNames: [...names]
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
if (result.success && result.actors) {
|
|
83
|
-
// Map results back to input order
|
|
84
|
-
return names.map(name =>
|
|
85
|
-
result.actors?.find(a => a.name === name || a.label === name) ?? null
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
} catch {
|
|
89
|
-
log.debug('Batch fetch not supported, falling back to individual fetches');
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Fallback: fetch individually
|
|
93
|
-
const results = await Promise.all(
|
|
94
|
-
names.map(async (name) => {
|
|
95
|
-
try {
|
|
96
|
-
const result = await automationBridge.sendAutomationRequest<{
|
|
97
|
-
success: boolean;
|
|
98
|
-
actor?: Actor;
|
|
99
|
-
}>('control_actor', {
|
|
100
|
-
action: 'find_by_name',
|
|
101
|
-
actorName: name
|
|
102
|
-
});
|
|
103
|
-
return result.success ? (result.actor ?? null) : null;
|
|
104
|
-
} catch {
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
})
|
|
108
|
-
);
|
|
109
|
-
return results;
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
cache: true,
|
|
113
|
-
maxBatchSize: 50
|
|
114
|
-
}
|
|
115
|
-
),
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Batches asset fetches by path
|
|
119
|
-
*/
|
|
120
|
-
assetLoader: new DataLoader<string, Asset | null>(
|
|
121
|
-
async (paths: readonly string[]) => {
|
|
122
|
-
log.debug(`Batching asset fetch for ${paths.length} assets`);
|
|
123
|
-
|
|
124
|
-
try {
|
|
125
|
-
const result = await automationBridge.sendAutomationRequest<{
|
|
126
|
-
success: boolean;
|
|
127
|
-
assets?: Asset[];
|
|
128
|
-
}>('manage_asset', {
|
|
129
|
-
action: 'batch_get',
|
|
130
|
-
assetPaths: [...paths]
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
if (result.success && result.assets) {
|
|
134
|
-
return paths.map(path =>
|
|
135
|
-
result.assets?.find(a => a.path === path) ?? null
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
} catch {
|
|
139
|
-
log.debug('Batch asset fetch not supported');
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// Fallback: check existence individually
|
|
143
|
-
const results = await Promise.all(
|
|
144
|
-
paths.map(async (path) => {
|
|
145
|
-
try {
|
|
146
|
-
const result = await automationBridge.sendAutomationRequest<{
|
|
147
|
-
success: boolean;
|
|
148
|
-
exists?: boolean;
|
|
149
|
-
asset?: Asset;
|
|
150
|
-
}>('manage_asset', {
|
|
151
|
-
action: 'exists',
|
|
152
|
-
assetPath: path
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
if (result.success && result.exists) {
|
|
156
|
-
return result.asset ?? { name: path.split('/').pop() || '', path };
|
|
157
|
-
}
|
|
158
|
-
return null;
|
|
159
|
-
} catch {
|
|
160
|
-
return null;
|
|
161
|
-
}
|
|
162
|
-
})
|
|
163
|
-
);
|
|
164
|
-
return results;
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
cache: true,
|
|
168
|
-
maxBatchSize: 100
|
|
169
|
-
}
|
|
170
|
-
),
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Batches blueprint fetches by path
|
|
174
|
-
*/
|
|
175
|
-
blueprintLoader: new DataLoader<string, Blueprint | null>(
|
|
176
|
-
async (paths: readonly string[]) => {
|
|
177
|
-
log.debug(`Batching blueprint fetch for ${paths.length} blueprints`);
|
|
178
|
-
|
|
179
|
-
const results = await Promise.all(
|
|
180
|
-
paths.map(async (path) => {
|
|
181
|
-
try {
|
|
182
|
-
const result = await automationBridge.sendAutomationRequest<{
|
|
183
|
-
success: boolean;
|
|
184
|
-
blueprint?: Blueprint;
|
|
185
|
-
}>('manage_blueprint', {
|
|
186
|
-
action: 'get_blueprint',
|
|
187
|
-
blueprintPath: path
|
|
188
|
-
});
|
|
189
|
-
return result.success ? (result.blueprint ?? null) : null;
|
|
190
|
-
} catch {
|
|
191
|
-
return null;
|
|
192
|
-
}
|
|
193
|
-
})
|
|
194
|
-
);
|
|
195
|
-
return results;
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
cache: true,
|
|
199
|
-
maxBatchSize: 20
|
|
200
|
-
}
|
|
201
|
-
),
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Batches actor component fetches
|
|
205
|
-
*/
|
|
206
|
-
actorComponentsLoader: new DataLoader<string, Array<{ name: string; type: string }> | null>(
|
|
207
|
-
async (actorNames: readonly string[]) => {
|
|
208
|
-
log.debug(`Batching component fetch for ${actorNames.length} actors`);
|
|
209
|
-
|
|
210
|
-
const results = await Promise.all(
|
|
211
|
-
actorNames.map(async (actorName) => {
|
|
212
|
-
try {
|
|
213
|
-
const result = await automationBridge.sendAutomationRequest<{
|
|
214
|
-
success: boolean;
|
|
215
|
-
components?: Array<{ name: string; type: string }>;
|
|
216
|
-
}>('control_actor', {
|
|
217
|
-
action: 'get_components',
|
|
218
|
-
actorName
|
|
219
|
-
});
|
|
220
|
-
return result.success ? (result.components ?? null) : null;
|
|
221
|
-
} catch {
|
|
222
|
-
return null;
|
|
223
|
-
}
|
|
224
|
-
})
|
|
225
|
-
);
|
|
226
|
-
return results;
|
|
227
|
-
},
|
|
228
|
-
{
|
|
229
|
-
cache: true,
|
|
230
|
-
maxBatchSize: 30
|
|
231
|
-
}
|
|
232
|
-
)
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* Clears all loader caches (useful between mutations)
|
|
238
|
-
*/
|
|
239
|
-
export function clearLoaders(loaders: GraphQLLoaders): void {
|
|
240
|
-
loaders.actorLoader.clearAll();
|
|
241
|
-
loaders.assetLoader.clearAll();
|
|
242
|
-
loaders.blueprintLoader.clearAll();
|
|
243
|
-
loaders.actorComponentsLoader.clearAll();
|
|
244
|
-
}
|