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.
Files changed (468) hide show
  1. package/dist/automation/bridge.d.ts.map +1 -0
  2. package/dist/automation/bridge.js.map +1 -0
  3. package/dist/automation/connection-manager.d.ts.map +1 -0
  4. package/dist/automation/connection-manager.js.map +1 -0
  5. package/dist/automation/handshake.d.ts.map +1 -0
  6. package/dist/automation/handshake.js.map +1 -0
  7. package/dist/automation/index.d.ts.map +1 -0
  8. package/dist/automation/index.js.map +1 -0
  9. package/dist/automation/message-handler.d.ts.map +1 -0
  10. package/dist/automation/message-handler.js.map +1 -0
  11. package/dist/automation/request-tracker.d.ts.map +1 -0
  12. package/dist/automation/request-tracker.js.map +1 -0
  13. package/dist/automation/types.d.ts.map +1 -0
  14. package/dist/automation/types.js.map +1 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +4 -3
  17. package/dist/cli.js.map +1 -0
  18. package/dist/config/class-aliases.d.ts.map +1 -0
  19. package/dist/config/class-aliases.js.map +1 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/constants.d.ts.map +1 -0
  23. package/dist/constants.js.map +1 -0
  24. package/dist/graphql/loaders.d.ts.map +1 -0
  25. package/dist/graphql/loaders.js.map +1 -0
  26. package/dist/graphql/resolvers.d.ts.map +1 -0
  27. package/dist/graphql/resolvers.js +29 -29
  28. package/dist/graphql/resolvers.js.map +1 -0
  29. package/dist/graphql/schema.d.ts.map +1 -0
  30. package/dist/graphql/schema.js.map +1 -0
  31. package/dist/graphql/server.d.ts.map +1 -0
  32. package/dist/graphql/server.js.map +1 -0
  33. package/dist/graphql/types.d.ts.map +1 -0
  34. package/dist/graphql/types.js.map +1 -0
  35. package/dist/handlers/resource-handlers.d.ts.map +1 -0
  36. package/dist/handlers/resource-handlers.js.map +1 -0
  37. package/dist/index.d.ts +1 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +64 -7
  40. package/dist/index.js.map +1 -0
  41. package/dist/resources/actors.d.ts.map +1 -0
  42. package/dist/resources/actors.js.map +1 -0
  43. package/dist/resources/assets.d.ts.map +1 -0
  44. package/dist/resources/assets.js +6 -4
  45. package/dist/resources/assets.js.map +1 -0
  46. package/dist/resources/levels.d.ts.map +1 -0
  47. package/dist/resources/levels.js.map +1 -0
  48. package/dist/server/resource-registry.d.ts.map +1 -0
  49. package/dist/server/resource-registry.js.map +1 -0
  50. package/dist/server/tool-registry.d.ts.map +1 -0
  51. package/dist/server/tool-registry.js.map +1 -0
  52. package/dist/server-setup.d.ts.map +1 -0
  53. package/dist/server-setup.js.map +1 -0
  54. package/dist/services/health-monitor.d.ts.map +1 -0
  55. package/dist/services/health-monitor.js.map +1 -0
  56. package/dist/services/metrics-server.d.ts.map +1 -0
  57. package/dist/services/metrics-server.js.map +1 -0
  58. package/dist/tools/actors.d.ts.map +1 -0
  59. package/dist/tools/actors.js +3 -1
  60. package/dist/tools/actors.js.map +1 -0
  61. package/dist/tools/animation.d.ts.map +1 -0
  62. package/dist/tools/animation.js +2 -2
  63. package/dist/tools/animation.js.map +1 -0
  64. package/dist/tools/assets.d.ts.map +1 -0
  65. package/dist/tools/assets.js.map +1 -0
  66. package/dist/tools/audio.d.ts.map +1 -0
  67. package/dist/tools/audio.js.map +1 -0
  68. package/dist/tools/base-tool.d.ts.map +1 -0
  69. package/dist/tools/base-tool.js.map +1 -0
  70. package/dist/tools/behavior-tree.d.ts.map +1 -0
  71. package/dist/tools/behavior-tree.js.map +1 -0
  72. package/dist/tools/blueprint.d.ts.map +1 -0
  73. package/dist/tools/blueprint.js +4 -2
  74. package/dist/tools/blueprint.js.map +1 -0
  75. package/dist/tools/consolidated-tool-definitions.d.ts.map +1 -0
  76. package/dist/tools/consolidated-tool-definitions.js.map +1 -0
  77. package/dist/tools/consolidated-tool-handlers.d.ts.map +1 -0
  78. package/dist/tools/consolidated-tool-handlers.js.map +1 -0
  79. package/dist/tools/debug.d.ts.map +1 -0
  80. package/dist/tools/debug.js +3 -1
  81. package/dist/tools/debug.js.map +1 -0
  82. package/dist/tools/dynamic-handler-registry.d.ts.map +1 -0
  83. package/dist/tools/dynamic-handler-registry.js +3 -1
  84. package/dist/tools/dynamic-handler-registry.js.map +1 -0
  85. package/dist/tools/editor.d.ts.map +1 -0
  86. package/dist/tools/editor.js +1 -1
  87. package/dist/tools/editor.js.map +1 -0
  88. package/dist/tools/engine.d.ts.map +1 -0
  89. package/dist/tools/engine.js.map +1 -0
  90. package/dist/tools/environment.d.ts.map +1 -0
  91. package/dist/tools/environment.js +2 -2
  92. package/dist/tools/environment.js.map +1 -0
  93. package/dist/tools/foliage.d.ts.map +1 -0
  94. package/dist/tools/foliage.js.map +1 -0
  95. package/dist/tools/handlers/actor-handlers.d.ts +1 -1
  96. package/dist/tools/handlers/actor-handlers.d.ts.map +1 -0
  97. package/dist/tools/handlers/actor-handlers.js +6 -5
  98. package/dist/tools/handlers/actor-handlers.js.map +1 -0
  99. package/dist/tools/handlers/animation-handlers.d.ts.map +1 -0
  100. package/dist/tools/handlers/animation-handlers.js.map +1 -0
  101. package/dist/tools/handlers/argument-helper.d.ts.map +1 -0
  102. package/dist/tools/handlers/argument-helper.js.map +1 -0
  103. package/dist/tools/handlers/asset-handlers.d.ts.map +1 -0
  104. package/dist/tools/handlers/asset-handlers.js +5 -1
  105. package/dist/tools/handlers/asset-handlers.js.map +1 -0
  106. package/dist/tools/handlers/audio-handlers.d.ts.map +1 -0
  107. package/dist/tools/handlers/audio-handlers.js.map +1 -0
  108. package/dist/tools/handlers/blueprint-handlers.d.ts.map +1 -0
  109. package/dist/tools/handlers/blueprint-handlers.js +2 -1
  110. package/dist/tools/handlers/blueprint-handlers.js.map +1 -0
  111. package/dist/tools/handlers/common-handlers.d.ts.map +1 -0
  112. package/dist/tools/handlers/common-handlers.js.map +1 -0
  113. package/dist/tools/handlers/editor-handlers.d.ts.map +1 -0
  114. package/dist/tools/handlers/editor-handlers.js +12 -2
  115. package/dist/tools/handlers/editor-handlers.js.map +1 -0
  116. package/dist/tools/handlers/effect-handlers.d.ts.map +1 -0
  117. package/dist/tools/handlers/effect-handlers.js.map +1 -0
  118. package/dist/tools/handlers/environment-handlers.d.ts.map +1 -0
  119. package/dist/tools/handlers/environment-handlers.js.map +1 -0
  120. package/dist/tools/handlers/graph-handlers.d.ts.map +1 -0
  121. package/dist/tools/handlers/graph-handlers.js +61 -1
  122. package/dist/tools/handlers/graph-handlers.js.map +1 -0
  123. package/dist/tools/handlers/input-handlers.d.ts.map +1 -0
  124. package/dist/tools/handlers/input-handlers.js.map +1 -0
  125. package/dist/tools/handlers/inspect-handlers.d.ts.map +1 -0
  126. package/dist/tools/handlers/inspect-handlers.js.map +1 -0
  127. package/dist/tools/handlers/level-handlers.d.ts.map +1 -0
  128. package/dist/tools/handlers/level-handlers.js.map +1 -0
  129. package/dist/tools/handlers/lighting-handlers.d.ts.map +1 -0
  130. package/dist/tools/handlers/lighting-handlers.js +23 -1
  131. package/dist/tools/handlers/lighting-handlers.js.map +1 -0
  132. package/dist/tools/handlers/performance-handlers.d.ts.map +1 -0
  133. package/dist/tools/handlers/performance-handlers.js +15 -2
  134. package/dist/tools/handlers/performance-handlers.js.map +1 -0
  135. package/dist/tools/handlers/pipeline-handlers.d.ts.map +1 -0
  136. package/dist/tools/handlers/pipeline-handlers.js.map +1 -0
  137. package/dist/tools/handlers/sequence-handlers.d.ts.map +1 -0
  138. package/dist/tools/handlers/sequence-handlers.js.map +1 -0
  139. package/dist/tools/handlers/system-handlers.d.ts.map +1 -0
  140. package/dist/tools/handlers/system-handlers.js +16 -1
  141. package/dist/tools/handlers/system-handlers.js.map +1 -0
  142. package/dist/tools/input.d.ts.map +1 -0
  143. package/dist/tools/input.js +3 -1
  144. package/dist/tools/input.js.map +1 -0
  145. package/dist/tools/introspection.d.ts.map +1 -0
  146. package/dist/tools/introspection.js.map +1 -0
  147. package/dist/tools/landscape.d.ts.map +1 -0
  148. package/dist/tools/landscape.js +3 -1
  149. package/dist/tools/landscape.js.map +1 -0
  150. package/dist/tools/level.d.ts.map +1 -0
  151. package/dist/tools/level.js.map +1 -0
  152. package/dist/tools/lighting.d.ts.map +1 -0
  153. package/dist/tools/lighting.js +3 -1
  154. package/dist/tools/lighting.js.map +1 -0
  155. package/dist/tools/logs.d.ts.map +1 -0
  156. package/dist/tools/logs.js.map +1 -0
  157. package/dist/tools/materials.d.ts.map +1 -0
  158. package/dist/tools/materials.js +3 -1
  159. package/dist/tools/materials.js.map +1 -0
  160. package/dist/tools/niagara.d.ts.map +1 -0
  161. package/dist/tools/niagara.js +7 -5
  162. package/dist/tools/niagara.js.map +1 -0
  163. package/dist/tools/performance.d.ts.map +1 -0
  164. package/dist/tools/performance.js.map +1 -0
  165. package/dist/tools/physics.d.ts.map +1 -0
  166. package/dist/tools/physics.js +9 -7
  167. package/dist/tools/physics.js.map +1 -0
  168. package/dist/tools/property-dictionary.d.ts.map +1 -0
  169. package/dist/tools/property-dictionary.js.map +1 -0
  170. package/dist/tools/sequence.d.ts.map +1 -0
  171. package/dist/tools/sequence.js +3 -1
  172. package/dist/tools/sequence.js.map +1 -0
  173. package/dist/tools/tool-definition-utils.d.ts.map +1 -0
  174. package/dist/tools/tool-definition-utils.js.map +1 -0
  175. package/dist/tools/ui.d.ts.map +1 -0
  176. package/dist/tools/ui.js +3 -1
  177. package/dist/tools/ui.js.map +1 -0
  178. package/dist/types/automation-responses.d.ts.map +1 -0
  179. package/dist/types/automation-responses.js.map +1 -0
  180. package/dist/types/env.d.ts.map +1 -0
  181. package/dist/types/env.js.map +1 -0
  182. package/dist/types/handler-types.d.ts.map +1 -0
  183. package/dist/types/handler-types.js.map +1 -0
  184. package/dist/types/tool-interfaces.d.ts.map +1 -0
  185. package/dist/types/tool-interfaces.js.map +1 -0
  186. package/dist/types/tool-types.d.ts.map +1 -0
  187. package/dist/types/tool-types.js.map +1 -0
  188. package/dist/unreal-bridge.d.ts +1 -0
  189. package/dist/unreal-bridge.d.ts.map +1 -0
  190. package/dist/unreal-bridge.js +8 -0
  191. package/dist/unreal-bridge.js.map +1 -0
  192. package/dist/utils/command-validator.d.ts.map +1 -0
  193. package/dist/utils/command-validator.js.map +1 -0
  194. package/dist/utils/elicitation.d.ts.map +1 -0
  195. package/dist/utils/elicitation.js.map +1 -0
  196. package/dist/utils/error-handler.d.ts.map +1 -0
  197. package/dist/utils/error-handler.js.map +1 -0
  198. package/dist/utils/ini-reader.d.ts.map +1 -0
  199. package/dist/utils/ini-reader.js.map +1 -0
  200. package/dist/utils/logger.d.ts.map +1 -0
  201. package/dist/utils/logger.js.map +1 -0
  202. package/dist/utils/normalize.d.ts.map +1 -0
  203. package/dist/utils/normalize.js.map +1 -0
  204. package/dist/utils/path-security.d.ts.map +1 -0
  205. package/dist/utils/path-security.js.map +1 -0
  206. package/dist/utils/response-factory.d.ts.map +1 -0
  207. package/dist/utils/response-factory.js +3 -1
  208. package/dist/utils/response-factory.js.map +1 -0
  209. package/dist/utils/response-validator.d.ts.map +1 -0
  210. package/dist/utils/response-validator.js.map +1 -0
  211. package/dist/utils/result-helpers.d.ts.map +1 -0
  212. package/dist/utils/result-helpers.js.map +1 -0
  213. package/dist/utils/safe-json.d.ts.map +1 -0
  214. package/dist/utils/safe-json.js.map +1 -0
  215. package/dist/utils/unreal-command-queue.d.ts.map +1 -0
  216. package/dist/utils/unreal-command-queue.js.map +1 -0
  217. package/dist/utils/validation.d.ts.map +1 -0
  218. package/dist/utils/validation.js.map +1 -0
  219. package/dist/wasm/index.d.ts.map +1 -0
  220. package/dist/wasm/index.js.map +1 -0
  221. package/package.json +12 -34
  222. package/server.json +2 -2
  223. package/.dockerignore +0 -57
  224. package/.env.example +0 -26
  225. package/.env.production +0 -61
  226. package/.eslintrc.json +0 -0
  227. package/.eslintrc.override.json +0 -8
  228. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -94
  229. package/.github/ISSUE_TEMPLATE/config.yml +0 -8
  230. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -56
  231. package/.github/copilot-instructions.md +0 -478
  232. package/.github/dependabot.yml +0 -19
  233. package/.github/labeler.yml +0 -24
  234. package/.github/labels.yml +0 -70
  235. package/.github/pull_request_template.md +0 -42
  236. package/.github/release-drafter-config.yml +0 -51
  237. package/.github/workflows/auto-merge.yml +0 -38
  238. package/.github/workflows/ci.yml +0 -38
  239. package/.github/workflows/dependency-review.yml +0 -17
  240. package/.github/workflows/gemini-issue-triage.yml +0 -172
  241. package/.github/workflows/greetings.yml +0 -27
  242. package/.github/workflows/labeler.yml +0 -17
  243. package/.github/workflows/links.yml +0 -80
  244. package/.github/workflows/pr-size-labeler.yml +0 -137
  245. package/.github/workflows/publish-mcp.yml +0 -79
  246. package/.github/workflows/release-drafter.yml +0 -24
  247. package/.github/workflows/release.yml +0 -112
  248. package/.github/workflows/semantic-pull-request.yml +0 -35
  249. package/.github/workflows/smoke-test.yml +0 -36
  250. package/.github/workflows/stale.yml +0 -28
  251. package/CONTRIBUTING.md +0 -140
  252. package/Dockerfile +0 -37
  253. package/GEMINI.md +0 -115
  254. package/Public/Plugin_setup_guide.mp4 +0 -0
  255. package/Public/icon.png +0 -0
  256. package/claude_desktop_config_example.json +0 -15
  257. package/dist/types/responses.d.ts +0 -249
  258. package/dist/types/responses.js +0 -2
  259. package/docs/GraphQL-API.md +0 -888
  260. package/docs/Migration-Guide-v0.5.0.md +0 -684
  261. package/docs/Roadmap.md +0 -53
  262. package/docs/WebAssembly-Integration.md +0 -628
  263. package/docs/editor-plugin-extension.md +0 -370
  264. package/docs/handler-mapping.md +0 -249
  265. package/docs/native-automation-progress.md +0 -128
  266. package/docs/testing-guide.md +0 -423
  267. package/eslint.config.mjs +0 -68
  268. package/mcp-config-example.json +0 -14
  269. package/plugins/McpAutomationBridge/Config/FilterPlugin.ini +0 -8
  270. package/plugins/McpAutomationBridge/McpAutomationBridge.uplugin +0 -64
  271. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/McpAutomationBridge.Build.cs +0 -189
  272. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.cpp +0 -22
  273. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeGlobals.h +0 -30
  274. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeHelpers.h +0 -1983
  275. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeModule.cpp +0 -72
  276. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSettings.cpp +0 -46
  277. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridgeSubsystem.cpp +0 -846
  278. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AnimationHandlers.cpp +0 -2393
  279. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetQueryHandlers.cpp +0 -300
  280. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AssetWorkflowHandlers.cpp +0 -2807
  281. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_AudioHandlers.cpp +0 -1087
  282. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BehaviorTreeHandlers.cpp +0 -488
  283. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.cpp +0 -643
  284. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintCreationHandlers.h +0 -31
  285. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintGraphHandlers.cpp +0 -1094
  286. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers.cpp +0 -5750
  287. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_BlueprintHandlers_List.cpp +0 -152
  288. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ControlHandlers.cpp +0 -2614
  289. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_DebugHandlers.cpp +0 -42
  290. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EditorFunctionHandlers.cpp +0 -1237
  291. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EffectHandlers.cpp +0 -1725
  292. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_EnvironmentHandlers.cpp +0 -2265
  293. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_FoliageHandlers.cpp +0 -954
  294. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InputHandlers.cpp +0 -209
  295. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_InsightsHandlers.cpp +0 -41
  296. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LandscapeHandlers.cpp +0 -1164
  297. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LevelHandlers.cpp +0 -762
  298. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LightingHandlers.cpp +0 -663
  299. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_LogHandlers.cpp +0 -136
  300. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_MaterialGraphHandlers.cpp +0 -494
  301. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraGraphHandlers.cpp +0 -278
  302. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_NiagaraHandlers.cpp +0 -625
  303. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PerformanceHandlers.cpp +0 -401
  304. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PipelineHandlers.cpp +0 -67
  305. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_ProcessRequest.cpp +0 -472
  306. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_PropertyHandlers.cpp +0 -2634
  307. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_RenderHandlers.cpp +0 -189
  308. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.cpp +0 -917
  309. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SCSHandlers.h +0 -39
  310. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequenceHandlers.cpp +0 -2706
  311. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_SequencerHandlers.cpp +0 -519
  312. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_TestHandlers.cpp +0 -38
  313. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_UiHandlers.cpp +0 -668
  314. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpAutomationBridge_WorldPartitionHandlers.cpp +0 -346
  315. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.cpp +0 -1345
  316. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpBridgeWebSocket.h +0 -149
  317. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/McpConnectionManager.cpp +0 -782
  318. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSettings.h +0 -115
  319. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpAutomationBridgeSubsystem.h +0 -796
  320. package/plugins/McpAutomationBridge/Source/McpAutomationBridge/Public/McpConnectionManager.h +0 -117
  321. package/scripts/check-unreal-connection.mjs +0 -19
  322. package/scripts/clean-tmp.js +0 -23
  323. package/scripts/patch-wasm.js +0 -26
  324. package/scripts/run-all-tests.mjs +0 -136
  325. package/scripts/smoke-test.ts +0 -94
  326. package/scripts/sync-mcp-plugin.js +0 -143
  327. package/scripts/test-no-plugin-alternates.mjs +0 -113
  328. package/scripts/validate-server.js +0 -46
  329. package/scripts/verify-automation-bridge.js +0 -200
  330. package/src/automation/bridge.ts +0 -630
  331. package/src/automation/connection-manager.ts +0 -148
  332. package/src/automation/handshake.ts +0 -99
  333. package/src/automation/index.ts +0 -2
  334. package/src/automation/message-handler.ts +0 -192
  335. package/src/automation/request-tracker.ts +0 -155
  336. package/src/automation/types.ts +0 -108
  337. package/src/cli.ts +0 -34
  338. package/src/config/class-aliases.ts +0 -65
  339. package/src/config.ts +0 -73
  340. package/src/constants.ts +0 -29
  341. package/src/graphql/loaders.ts +0 -244
  342. package/src/graphql/resolvers.ts +0 -1008
  343. package/src/graphql/schema.ts +0 -452
  344. package/src/graphql/server.ts +0 -156
  345. package/src/graphql/types.ts +0 -10
  346. package/src/handlers/resource-handlers.ts +0 -186
  347. package/src/index.ts +0 -243
  348. package/src/resources/actors.ts +0 -127
  349. package/src/resources/assets.ts +0 -286
  350. package/src/resources/levels.ts +0 -68
  351. package/src/server/resource-registry.ts +0 -47
  352. package/src/server/tool-registry.ts +0 -354
  353. package/src/server-setup.ts +0 -114
  354. package/src/services/health-monitor.ts +0 -132
  355. package/src/services/metrics-server.ts +0 -176
  356. package/src/tools/actors.ts +0 -564
  357. package/src/tools/animation.ts +0 -941
  358. package/src/tools/assets.ts +0 -394
  359. package/src/tools/audio.ts +0 -499
  360. package/src/tools/base-tool.ts +0 -52
  361. package/src/tools/behavior-tree.ts +0 -45
  362. package/src/tools/blueprint.ts +0 -940
  363. package/src/tools/consolidated-tool-definitions.ts +0 -1256
  364. package/src/tools/consolidated-tool-handlers.ts +0 -302
  365. package/src/tools/debug.ts +0 -622
  366. package/src/tools/dynamic-handler-registry.ts +0 -33
  367. package/src/tools/editor.ts +0 -435
  368. package/src/tools/engine.ts +0 -43
  369. package/src/tools/environment.ts +0 -281
  370. package/src/tools/foliage.ts +0 -596
  371. package/src/tools/handlers/actor-handlers.ts +0 -244
  372. package/src/tools/handlers/animation-handlers.ts +0 -237
  373. package/src/tools/handlers/argument-helper.ts +0 -142
  374. package/src/tools/handlers/asset-handlers.ts +0 -550
  375. package/src/tools/handlers/audio-handlers.ts +0 -194
  376. package/src/tools/handlers/blueprint-handlers.ts +0 -380
  377. package/src/tools/handlers/common-handlers.ts +0 -108
  378. package/src/tools/handlers/editor-handlers.ts +0 -124
  379. package/src/tools/handlers/effect-handlers.ts +0 -224
  380. package/src/tools/handlers/environment-handlers.ts +0 -183
  381. package/src/tools/handlers/graph-handlers.ts +0 -117
  382. package/src/tools/handlers/input-handlers.ts +0 -28
  383. package/src/tools/handlers/inspect-handlers.ts +0 -450
  384. package/src/tools/handlers/level-handlers.ts +0 -253
  385. package/src/tools/handlers/lighting-handlers.ts +0 -151
  386. package/src/tools/handlers/performance-handlers.ts +0 -132
  387. package/src/tools/handlers/pipeline-handlers.ts +0 -194
  388. package/src/tools/handlers/sequence-handlers.ts +0 -438
  389. package/src/tools/handlers/system-handlers.ts +0 -564
  390. package/src/tools/input.ts +0 -160
  391. package/src/tools/introspection.ts +0 -689
  392. package/src/tools/landscape.ts +0 -649
  393. package/src/tools/level.ts +0 -989
  394. package/src/tools/lighting.ts +0 -1052
  395. package/src/tools/logs.ts +0 -219
  396. package/src/tools/materials.ts +0 -295
  397. package/src/tools/niagara.ts +0 -485
  398. package/src/tools/performance.ts +0 -661
  399. package/src/tools/physics.ts +0 -679
  400. package/src/tools/property-dictionary.ts +0 -98
  401. package/src/tools/sequence.ts +0 -385
  402. package/src/tools/tool-definition-utils.ts +0 -35
  403. package/src/tools/ui.ts +0 -452
  404. package/src/types/automation-responses.ts +0 -119
  405. package/src/types/env.ts +0 -17
  406. package/src/types/handler-types.ts +0 -442
  407. package/src/types/responses.ts +0 -355
  408. package/src/types/tool-interfaces.ts +0 -250
  409. package/src/types/tool-types.ts +0 -575
  410. package/src/unreal-bridge.ts +0 -693
  411. package/src/utils/command-validator.ts +0 -139
  412. package/src/utils/elicitation.ts +0 -132
  413. package/src/utils/error-handler.ts +0 -287
  414. package/src/utils/ini-reader.ts +0 -86
  415. package/src/utils/logger.ts +0 -35
  416. package/src/utils/normalize.test.ts +0 -162
  417. package/src/utils/normalize.ts +0 -146
  418. package/src/utils/path-security.ts +0 -43
  419. package/src/utils/response-factory.ts +0 -44
  420. package/src/utils/response-validator.ts +0 -395
  421. package/src/utils/result-helpers.ts +0 -195
  422. package/src/utils/safe-json.test.ts +0 -90
  423. package/src/utils/safe-json.ts +0 -70
  424. package/src/utils/unreal-command-queue.ts +0 -166
  425. package/src/utils/validation.test.ts +0 -184
  426. package/src/utils/validation.ts +0 -312
  427. package/src/wasm/index.ts +0 -838
  428. package/test-server.mjs +0 -100
  429. package/tests/test-animation.mjs +0 -369
  430. package/tests/test-asset-advanced.mjs +0 -82
  431. package/tests/test-asset-graph.mjs +0 -311
  432. package/tests/test-audio.mjs +0 -417
  433. package/tests/test-automation-timeouts.mjs +0 -98
  434. package/tests/test-behavior-tree.mjs +0 -444
  435. package/tests/test-blueprint-graph.mjs +0 -410
  436. package/tests/test-blueprint.mjs +0 -577
  437. package/tests/test-client-mode.mjs +0 -86
  438. package/tests/test-console-command.mjs +0 -56
  439. package/tests/test-control-actor.mjs +0 -425
  440. package/tests/test-control-editor.mjs +0 -112
  441. package/tests/test-graphql.mjs +0 -372
  442. package/tests/test-input.mjs +0 -349
  443. package/tests/test-inspect.mjs +0 -302
  444. package/tests/test-landscape.mjs +0 -316
  445. package/tests/test-lighting.mjs +0 -428
  446. package/tests/test-manage-asset.mjs +0 -438
  447. package/tests/test-manage-level.mjs +0 -89
  448. package/tests/test-materials.mjs +0 -356
  449. package/tests/test-niagara.mjs +0 -185
  450. package/tests/test-no-inline-python.mjs +0 -122
  451. package/tests/test-performance.mjs +0 -539
  452. package/tests/test-plugin-handshake.mjs +0 -82
  453. package/tests/test-runner.mjs +0 -993
  454. package/tests/test-sequence.mjs +0 -104
  455. package/tests/test-system.mjs +0 -96
  456. package/tests/test-wasm.mjs +0 -283
  457. package/tests/test-world-partition.mjs +0 -215
  458. package/tsconfig.json +0 -56
  459. package/vitest.config.ts +0 -35
  460. package/wasm/Cargo.lock +0 -363
  461. package/wasm/Cargo.toml +0 -42
  462. package/wasm/LICENSE +0 -21
  463. package/wasm/README.md +0 -253
  464. package/wasm/src/dependency_resolver.rs +0 -377
  465. package/wasm/src/lib.rs +0 -153
  466. package/wasm/src/property_parser.rs +0 -271
  467. package/wasm/src/transform_math.rs +0 -396
  468. 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(&current_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(&current_path) {
95
- result.push(AssetDependency {
96
- path: current_path.clone(),
97
- dependencies: deps.clone(),
98
- dependents: self.find_dependents_internal(&current_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(|(_, &degree)| 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
- }