ue-mcp 1.2.3 → 1.3.0

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 (255) hide show
  1. package/README.md +4 -3
  2. package/dist/action-class.js +56 -3
  3. package/dist/action-class.js.map +1 -1
  4. package/dist/bridge-timeouts.d.ts +64 -0
  5. package/dist/bridge-timeouts.js +118 -0
  6. package/dist/bridge-timeouts.js.map +1 -0
  7. package/dist/bridge.js +10 -2
  8. package/dist/bridge.js.map +1 -1
  9. package/dist/editor-control.d.ts +72 -5
  10. package/dist/editor-control.js +164 -140
  11. package/dist/editor-control.js.map +1 -1
  12. package/dist/editor-target.d.ts +55 -1
  13. package/dist/editor-target.js +107 -10
  14. package/dist/editor-target.js.map +1 -1
  15. package/dist/engine-observer.d.ts +59 -5
  16. package/dist/engine-observer.js +249 -29
  17. package/dist/engine-observer.js.map +1 -1
  18. package/dist/engine-root.d.ts +91 -0
  19. package/dist/engine-root.js +448 -0
  20. package/dist/engine-root.js.map +1 -0
  21. package/dist/epic-enrich.js +16 -1
  22. package/dist/epic-enrich.js.map +1 -1
  23. package/dist/feedback-cli.js +4 -0
  24. package/dist/feedback-cli.js.map +1 -1
  25. package/dist/feedback-deferred.d.ts +9 -0
  26. package/dist/feedback-deferred.js +2 -0
  27. package/dist/feedback-deferred.js.map +1 -1
  28. package/dist/feedback-fallback.d.ts +99 -0
  29. package/dist/feedback-fallback.js +173 -0
  30. package/dist/feedback-fallback.js.map +1 -0
  31. package/dist/flow/write-methods.js +20 -0
  32. package/dist/flow/write-methods.js.map +1 -1
  33. package/dist/index.js +41 -2
  34. package/dist/index.js.map +1 -1
  35. package/dist/lean-context.js +8 -3
  36. package/dist/lean-context.js.map +1 -1
  37. package/dist/locking.js +11 -2
  38. package/dist/locking.js.map +1 -1
  39. package/dist/plugin/loader.d.ts +4 -0
  40. package/dist/plugin/loader.js +22 -8
  41. package/dist/plugin/loader.js.map +1 -1
  42. package/dist/plugin/manifest.d.ts +72 -52
  43. package/dist/plugin/manifest.js +118 -21
  44. package/dist/plugin/manifest.js.map +1 -1
  45. package/dist/plugin-cli.js +16 -3
  46. package/dist/plugin-cli.js.map +1 -1
  47. package/dist/project.d.ts +11 -0
  48. package/dist/project.js +23 -2
  49. package/dist/project.js.map +1 -1
  50. package/dist/python-gate.d.ts +95 -0
  51. package/dist/python-gate.js +175 -0
  52. package/dist/python-gate.js.map +1 -0
  53. package/dist/tool-counts.json +16 -16
  54. package/dist/tools/animation.js +288 -24
  55. package/dist/tools/animation.js.map +1 -1
  56. package/dist/tools/asset.js +79 -14
  57. package/dist/tools/asset.js.map +1 -1
  58. package/dist/tools/audio.js +59 -5
  59. package/dist/tools/audio.js.map +1 -1
  60. package/dist/tools/blueprint.js +29 -12
  61. package/dist/tools/blueprint.js.map +1 -1
  62. package/dist/tools/chooser.js +4 -1
  63. package/dist/tools/chooser.js.map +1 -1
  64. package/dist/tools/editor.js +81 -43
  65. package/dist/tools/editor.js.map +1 -1
  66. package/dist/tools/feedback.js +214 -48
  67. package/dist/tools/feedback.js.map +1 -1
  68. package/dist/tools/foliage.js +27 -1
  69. package/dist/tools/foliage.js.map +1 -1
  70. package/dist/tools/gameplay.js +38 -11
  71. package/dist/tools/gameplay.js.map +1 -1
  72. package/dist/tools/gas.js +17 -5
  73. package/dist/tools/gas.js.map +1 -1
  74. package/dist/tools/landscape.js +22 -7
  75. package/dist/tools/landscape.js.map +1 -1
  76. package/dist/tools/level.js +322 -51
  77. package/dist/tools/level.js.map +1 -1
  78. package/dist/tools/material.js +10 -4
  79. package/dist/tools/material.js.map +1 -1
  80. package/dist/tools/niagara.js +3 -2
  81. package/dist/tools/niagara.js.map +1 -1
  82. package/dist/tools/pcg.js +6 -5
  83. package/dist/tools/pcg.js.map +1 -1
  84. package/dist/tools/plugins.js +2 -0
  85. package/dist/tools/plugins.js.map +1 -1
  86. package/dist/tools/project.js +47 -20
  87. package/dist/tools/project.js.map +1 -1
  88. package/dist/types.d.ts +24 -0
  89. package/dist/types.js +46 -3
  90. package/dist/types.js.map +1 -1
  91. package/dist/ue-mcp.default.yml +493 -125
  92. package/package.json +2 -2
  93. package/plugin/ue_mcp_bridge/NATIVE_RUNTIME_VISIBILITY.md +53 -0
  94. package/plugin/ue_mcp_bridge/NATIVE_STATIC_MESH_USAGE_PROGRESS.md +115 -0
  95. package/plugin/ue_mcp_bridge/README_MassHandlers.md +97 -0
  96. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/BridgeServer.cpp +14 -0
  97. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/GameThreadExecutor.cpp +21 -4
  98. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/GameThreadExecutor.h +9 -0
  99. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/HandlerJsonProperty.h +395 -69
  100. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers.cpp +79 -3
  101. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers.h +25 -0
  102. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_ControlRig.cpp +3 -3
  103. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_ControlRigSequencer.cpp +3061 -0
  104. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_IKRetargeterAuthoring.cpp +961 -0
  105. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_IKRigAuthoring.cpp +900 -0
  106. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_Pose.cpp +769 -0
  107. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_Sequence.cpp +44 -3
  108. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_SkeletalLive.cpp +217 -11
  109. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_StateMachine.cpp +551 -24
  110. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_Validation.cpp +735 -0
  111. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers.cpp +352 -73
  112. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers.h +8 -0
  113. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_BulkProperties.cpp +1 -1
  114. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_BulkRead.cpp +503 -0
  115. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_BulkRead.h +21 -0
  116. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_BulkUpsert.cpp +2 -2
  117. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Enum.cpp +2 -2
  118. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Geometry.cpp +902 -0
  119. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Geometry.h +33 -0
  120. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Import.cpp +478 -134
  121. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Mesh.cpp +5 -5
  122. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_MeshBoolean.cpp +933 -0
  123. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_MeshBoolean.h +35 -0
  124. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Redirectors.cpp +478 -0
  125. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_RenderTarget.cpp +1 -1
  126. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Sockets.cpp +4 -4
  127. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Struct.cpp +2 -2
  128. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers_Subobject.cpp +319 -0
  129. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AudioHandlers_SoundCue.cpp +3 -3
  130. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers.cpp +482 -35
  131. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers.h +10 -0
  132. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Collision.cpp +502 -0
  133. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Collision.h +43 -0
  134. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Functions.cpp +89 -7
  135. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Graph.cpp +17 -51
  136. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Internal.h +107 -0
  137. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Properties.cpp +10 -10
  138. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers_Search.cpp +648 -0
  139. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DemoHandlers.cpp +5 -1
  140. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DiffHandlers.cpp +252 -1
  141. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DiffHandlers.h +10 -2
  142. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.cpp +252 -41
  143. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.h +4 -0
  144. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers_Build.cpp +250 -27
  145. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers_PIE.cpp +303 -125
  146. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers_PIERuntime.cpp +73 -50
  147. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers_RuntimeVisibility.cpp +757 -0
  148. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/FoliageHandlers.cpp +11 -2
  149. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/FoliageHandlers.h +3 -0
  150. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/FoliageHandlers_Batch.cpp +419 -0
  151. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers.cpp +39 -161
  152. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers.h +66 -1
  153. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers_BTAuthoring.cpp +1323 -0
  154. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers_BehaviorTree.cpp +1211 -0
  155. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GasHandlers.cpp +2 -0
  156. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GasHandlers.h +60 -0
  157. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GasHandlers_Runtime.cpp +363 -12
  158. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/HandlerEditorState.h +84 -0
  159. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LandscapeHandlers.cpp +1288 -36
  160. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LandscapeHandlers.h +3 -0
  161. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LandscapeHandlers_Sculpt.cpp +41 -16
  162. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers.cpp +959 -213
  163. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers.h +66 -0
  164. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_BatchWrite.cpp +1571 -0
  165. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Convert.cpp +316 -0
  166. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Inspection.cpp +280 -0
  167. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_InstanceProjection.cpp +666 -0
  168. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_InstanceProjection_Internal.h +63 -0
  169. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Lights.cpp +43 -12
  170. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_MultiLevel.cpp +13 -47
  171. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_PostProcess.cpp +527 -0
  172. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Query.cpp +1169 -0
  173. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Refresh.cpp +723 -0
  174. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Save.cpp +325 -0
  175. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Spatial.cpp +360 -0
  176. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Trace.cpp +178 -58
  177. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Transient.cpp +337 -0
  178. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_Volumes.cpp +25 -12
  179. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_WorldPartition.cpp +10 -9
  180. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers_WorldPartitionSettings.cpp +686 -0
  181. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MassHandlers.cpp +467 -0
  182. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MassHandlers.h +22 -0
  183. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MaterialHandlers.cpp +452 -175
  184. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MaterialHandlers.h +5 -0
  185. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MaterialHandlers_Build.cpp +597 -0
  186. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/NiagaraHandlers.cpp +17 -15
  187. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/PCGHandlers.cpp +38 -168
  188. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/PhysicsHandlers.cpp +39 -30
  189. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SequencerHandlers.cpp +392 -78
  190. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SequencerHandlers.h +2 -0
  191. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SequencerHandlers_Internal.h +83 -0
  192. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SkeletalMeshHandlers.cpp +200 -0
  193. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SkeletalMeshHandlers.h +15 -0
  194. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SplineHandlers.cpp +19 -12
  195. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/StateTreeHandlers.cpp +31 -1
  196. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/WidgetHandlers.cpp +307 -69
  197. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/WidgetHandlers.h +84 -0
  198. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/WidgetHandlers_Extraction.cpp +8 -41
  199. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/WidgetHandlers_Properties.cpp +33 -52
  200. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/ActorSelectorTests.cpp +344 -0
  201. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AnimationControlRigTimelineTests.cpp +60 -0
  202. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AnimationPoseTests.cpp +115 -0
  203. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AssetBulkReadTests.cpp +177 -0
  204. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AssetDeleteGuardTests.cpp +276 -0
  205. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AssetPathResolutionTests.cpp +243 -0
  206. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AssetPropertyPersistTests.cpp +213 -0
  207. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AssetSubobjectTests.cpp +235 -0
  208. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/AutomationRunnerTests.cpp +72 -0
  209. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/BehaviorTreeAuthoringTests.cpp +526 -0
  210. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/BehaviorTreeNodeTests.cpp +334 -0
  211. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/BlueprintHandlerSurfaceTests.cpp +362 -0
  212. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/BridgeProtocolTests.cpp +14 -0
  213. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/CollisionQueryTests.cpp +288 -0
  214. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/DataTableRowWriteTests.cpp +453 -0
  215. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/EditorFunctionCallTests.cpp +223 -0
  216. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/FoliageBatchTests.cpp +147 -0
  217. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/GameThreadGateTests.cpp +82 -0
  218. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/GasLiveAttributeTests.cpp +183 -0
  219. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LandscapeSampleTests.cpp +119 -0
  220. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelBatchWriteTests.cpp +176 -0
  221. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelComponentTreeInstanceCountTests.cpp +189 -0
  222. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelConvertBrushesTests.cpp +100 -0
  223. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelInstanceProjectionTests.cpp +265 -0
  224. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelPostProcessOverrideTests.cpp +258 -0
  225. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelQueryComponentsTests.cpp +195 -0
  226. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelRefreshTests.cpp +142 -0
  227. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelSaveReportTests.cpp +125 -0
  228. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelScriptHandlersTests.cpp +42 -0
  229. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelStaticMeshUsageTests.cpp +412 -0
  230. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelTraceWorldScopeTests.cpp +133 -0
  231. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelTransientActorTests.cpp +205 -0
  232. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/LevelWorldPartitionSettingsTests.cpp +168 -0
  233. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/MCPInstancedStructPathTestTypes.h +51 -0
  234. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/MCPInstancedStructPathTests.cpp +379 -0
  235. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/MaterialBuildTests.cpp +238 -0
  236. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/MeshBooleanTests.cpp +170 -0
  237. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/MeshGeometryTests.cpp +116 -0
  238. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/PackageSaveExtensionTests.cpp +161 -0
  239. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/PackageWriteGuardTests.cpp +253 -0
  240. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/RuntimeVisibilityTests.cpp +143 -0
  241. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/SequencerHandlerTests.cpp +660 -0
  242. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/SequencerScrubTests.cpp +50 -0
  243. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/SkeletonDiffTests.cpp +685 -0
  244. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Tests/WidgetBlueprintResolveTests.cpp +145 -0
  245. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/UE_MCP_Bridge.cpp +80 -0
  246. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Public/HandlerFunctionCall.h +509 -0
  247. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Public/HandlerQuery.h +407 -0
  248. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Public/HandlerUtils.h +1008 -77
  249. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/UE_MCP_Bridge.Build.cs +87 -0
  250. package/plugin/ue_mcp_bridge/Source/UE_MCP_BridgeStatus/Private/MCPEngineStatus.cpp +152 -14
  251. package/plugin/ue_mcp_bridge/Source/UE_MCP_BridgeStatus/Private/Tests/MCPEngineStatusTests.cpp +65 -0
  252. package/plugin/ue_mcp_bridge/Source/UE_MCP_BridgeStatus/Public/MCPEngineStatus.h +32 -1
  253. package/plugin/ue_mcp_bridge/Source/UE_MCP_BridgeStatus/UE_MCP_BridgeStatus.Build.cs +2 -0
  254. package/skills/ue-mcp-animation/SKILL.md +154 -0
  255. package/skills/ue-mcp-blueprint/SKILL.md +71 -0
@@ -4,10 +4,10 @@ import { spawn } from "child_process";
4
4
  import * as net from "net";
5
5
  import WebSocket from "ws";
6
6
  import { readUeMcpConfig } from "./project.js";
7
- import { findEngineInstall } from "./deployer.js";
7
+ import { EngineResolutionError, selectEngine, trySelectEngine } from "./engine-root.js";
8
8
  import { invalidatePluginFreshness } from "./plugin-freshness.js";
9
9
  import { editorOwnsProject, findEditorByPid, findInteractiveEditors, readEngineState, readEngineSnapshot, readLogState, } from "./engine-observer.js";
10
- import { isPidAlive, lockfileIsFromThisLaunch, resolveBridgeTarget } from "./editor-target.js";
10
+ import { findLiveInstanceRecord, isPidAlive, lockfileIsFromThisLaunch, resolveBridgeTarget } from "./editor-target.js";
11
11
  import { startProgress } from "./ui/progress.js";
12
12
  // Process control is cross-platform: the editor binary path and the running-
13
13
  // process probe differ per OS, and stopping goes through the bridge (#790).
@@ -38,80 +38,33 @@ function readEngineAssociation(projectPath) {
38
38
  return null;
39
39
  }
40
40
  }
41
- function findUEBuildTool(engineAssociation, configuredPath) {
42
- // UE_BUILD_TOOL_PATH is one value for the process and still wins;
43
- // `editor.buildToolPath` is the per-project equivalent (#817), which matters
44
- // as soon as two projects are on two engine versions.
45
- const envPath = process.env.UE_BUILD_TOOL_PATH;
46
- if (envPath)
47
- return envPath;
48
- if (typeof configuredPath === "string" && configuredPath.trim() !== "")
49
- return configuredPath.trim();
50
- const scriptName = IS_WINDOWS ? "Build.bat" : "Build.sh";
51
- // Prefer the engine the project's EngineAssociation actually points at, so a
52
- // 5.7 project builds with 5.7's Build tool - not whatever version happens to
53
- // sort first in the fallback search below. The editor launch already respects
54
- // the association (findEditorExecutable); without this the CLI build could
55
- // silently compile against a different engine than the editor runs, masking
56
- // API incompatibilities until the editor's own rebuild fails.
57
- const associatedRoot = findEngineInstall(engineAssociation ?? null);
58
- if (associatedRoot) {
59
- const associatedTool = path.join(associatedRoot, "Engine", "Build", "BatchFiles", scriptName);
60
- if (fs.existsSync(associatedTool))
61
- return associatedTool;
62
- }
63
- const versions = ["5.8", "5.7", "5.6", "5.5", "5.4", "5.3"];
64
- const searchRoots = IS_WINDOWS
65
- ? [
66
- "C:/Program Files/Epic Games",
67
- "D:/Program Files/Epic Games",
68
- "E:/Program Files/Epic Games",
69
- "C:/Epic Games",
70
- "D:/Epic Games",
71
- "E:/Epic Games",
72
- ]
73
- : process.platform === "darwin"
74
- ? ["/Users/Shared/Epic Games"]
75
- : [
76
- path.join(process.env.HOME ?? "/home", "UnrealEngine"),
77
- "/opt/UnrealEngine",
78
- ];
79
- for (const basePath of searchRoots) {
80
- for (const version of versions) {
81
- const buildToolPath = path.join(basePath, `UE_${version}`, "Engine", "Build", "BatchFiles", scriptName);
82
- if (fs.existsSync(buildToolPath)) {
83
- return buildToolPath;
84
- }
85
- }
86
- }
87
- // Linux source builds: ~/UnrealEngine/Engine/Build/BatchFiles/Build.sh (no version subdir)
88
- if (!IS_WINDOWS && process.platform !== "darwin") {
89
- const home = process.env.HOME ?? "/home";
90
- const sourceBuild = path.join(home, "UnrealEngine", "Engine", "Build", "BatchFiles", "Build.sh");
91
- if (fs.existsSync(sourceBuild))
92
- return sourceBuild;
93
- }
94
- return null;
95
- }
96
41
  /**
97
- * #766/#790: the editor binary lives at a different path per platform. Only the
98
- * Win64 path was ever checked, which is the whole reason start_editor was
99
- * Windows-only - engine discovery itself (findUEBuildTool) has always worked
100
- * cross-platform. On macOS the launchable binary is inside the .app bundle.
42
+ * The engine lookup for one project: its .uproject, its association and its
43
+ * per-project `editor:` config, handed to the single resolver in
44
+ * `engine-root.ts` (#959, #961, #962, #974).
101
45
  */
102
- function editorBinaryCandidates(engineRoot) {
103
- const binaries = path.join(engineRoot, "Engine", "Binaries");
104
- if (IS_WINDOWS) {
105
- return [path.join(binaries, "Win64", "UnrealEditor.exe")];
106
- }
107
- if (process.platform === "darwin") {
108
- return [
109
- path.join(binaries, "Mac", "UnrealEditor.app", "Contents", "MacOS", "UnrealEditor"),
110
- path.join(binaries, "Mac", "UnrealEditor"),
111
- ];
112
- }
113
- return [path.join(binaries, "Linux", "UnrealEditor")];
46
+ function engineLookupFor(projectPath, engineAssociation, editorConfig) {
47
+ return {
48
+ projectPath: projectPath ?? null,
49
+ engineAssociation: engineAssociation ?? null,
50
+ configBuildToolPath: editorConfig?.buildToolPath ?? null,
51
+ configEditorPath: editorConfig?.path ?? null,
52
+ };
114
53
  }
54
+ /**
55
+ * The editor binary this project launches, or null.
56
+ *
57
+ * The whole order lives in `engine-root.ts` now: env pins, the per-project
58
+ * config, the EngineAssociation (as a path, a registered GUID or a launcher
59
+ * version), an engine tree beside or above the project, the engine the project
60
+ * was last opened with, then the default install locations. The build tool goes
61
+ * through the same list, so the editor this launches and the engine
62
+ * `build_project` compiles with are the same tree by construction.
63
+ *
64
+ * #766/#790: the binary lives at a different path per platform, which is what
65
+ * `engineEditorBinaries` covers. On macOS the launchable one is inside the .app
66
+ * bundle.
67
+ */
115
68
  function findEditorExecutable(project) {
116
69
  // Same rule as the build tool: the env var is the global default and wins,
117
70
  // `editor.path` is how one project names its own binary (#817).
@@ -121,22 +74,24 @@ function findEditorExecutable(project) {
121
74
  const configured = project?.config.editor?.path;
122
75
  if (typeof configured === "string" && configured.trim() !== "")
123
76
  return configured.trim();
124
- const associatedEngineRoot = findEngineInstall(project?.engineAssociation ?? null);
125
- if (associatedEngineRoot) {
126
- for (const candidate of editorBinaryCandidates(associatedEngineRoot)) {
127
- if (fs.existsSync(candidate))
128
- return candidate;
129
- }
77
+ const lookup = engineLookupFor(project?.projectPath, project?.engineAssociation, project?.config.editor);
78
+ return trySelectEngine(lookup, "editor")?.editorExecutable ?? null;
79
+ }
80
+ /**
81
+ * Why no editor binary was found, naming every path probed.
82
+ *
83
+ * A user who is told only to set an env var cannot tell a missing install from
84
+ * a wrong root from a layout the resolver does not understand (#974).
85
+ */
86
+ function editorExecutableFailure(project) {
87
+ try {
88
+ selectEngine(engineLookupFor(project?.projectPath, project?.engineAssociation, project?.config.editor), "editor");
130
89
  }
131
- const buildTool = findUEBuildTool(project?.engineAssociation ?? null, project?.config.editor?.buildToolPath);
132
- if (!buildTool)
133
- return null;
134
- const engineRoot = path.resolve(buildTool, "..", "..", "..", "..");
135
- for (const candidate of editorBinaryCandidates(engineRoot)) {
136
- if (fs.existsSync(candidate))
137
- return candidate;
90
+ catch (err) {
91
+ if (err instanceof EngineResolutionError)
92
+ return err.message;
138
93
  }
139
- return null;
94
+ return NO_EDITOR_BINARY_MSG;
140
95
  }
141
96
  /**
142
97
  * The host the client talks to one project's bridge on.
@@ -432,7 +387,20 @@ function describeTimeline(timeline) {
432
387
  return "no phases observed";
433
388
  return timeline.map((entry) => `${entry.phase} ${entry.atSeconds}s`).join(" -> ");
434
389
  }
435
- export async function startEditor(project, timeoutSeconds = 300, onProgress) {
390
+ /** Startup-only editor settings travel in the environment, because the bridge
391
+ * reads them before it is listening. Kept in one place so a second setting
392
+ * cannot quietly drop the first by rebuilding the env inline. */
393
+ function buildEditorLaunchEnv(dialogPolicy, paramEcho) {
394
+ if (!dialogPolicy && !paramEcho)
395
+ return process.env;
396
+ const env = { ...process.env };
397
+ if (dialogPolicy)
398
+ env.UE_MCP_DIALOG_POLICY = dialogPolicy;
399
+ if (paramEcho)
400
+ env.UE_MCP_PARAM_ECHO = "1";
401
+ return env;
402
+ }
403
+ export async function startEditor(project, timeoutSeconds = 300, onProgress, opts = {}) {
436
404
  // Every check below is about ONE editor: the one holding this project. Know
437
405
  // which project that is before looking at anything, because without it the
438
406
  // only available question is "is any editor running on this machine", and
@@ -471,7 +439,7 @@ export async function startEditor(project, timeoutSeconds = 300, onProgress) {
471
439
  if (!editorExe) {
472
440
  return {
473
441
  success: false,
474
- message: NO_EDITOR_BINARY_MSG,
442
+ message: editorExecutableFailure(project),
475
443
  };
476
444
  }
477
445
  try {
@@ -481,6 +449,7 @@ export async function startEditor(project, timeoutSeconds = 300, onProgress) {
481
449
  const editorProcess = spawn(editorExe, [project.projectPath], {
482
450
  stdio: "ignore",
483
451
  detached: true,
452
+ env: buildEditorLaunchEnv(opts.dialogPolicy, opts.paramEcho),
484
453
  });
485
454
  editorProcess.unref();
486
455
  // Hold here until the editor is actually usable, drawing the startup as a
@@ -597,23 +566,20 @@ async function requestEditorSelfQuit(port, host) {
597
566
  return sendOneBridgeCall(port, "execute_python", { code: EDITOR_SELF_QUIT_PY }, host);
598
567
  }
599
568
  /**
600
- * Stop the editor by asking it to quit ITSELF through the bridge. ue-mcp NEVER
601
- * issues an OS kill: `taskkill /IM UnrealEditor.exe` matches by image name and
602
- * would also close the user's other editors (e.g. their real project). `force`
603
- * is accepted for back-compat but there is deliberately no force-kill path.
604
- * Success is confirmed by the project's own bridge port going quiet, so it is
605
- * specific to this editor even when others are open.
569
+ * The editor holding `projectPath` open, resolved from what this project
570
+ * published and cross-checked against the process table.
606
571
  *
607
- * The port comes from this project's lockfile and nowhere else, and the process
608
- * it names is checked before the quit goes out (#819).
572
+ * A lockfile that no longer describes a live editor of this project is a stale
573
+ * lockfile, and it is said in those words. It is never reported as a project
574
+ * mismatch, and the file is never blamed while a healthy editor is still
575
+ * listening: the recovery is to resolve the process that actually holds the
576
+ * .uproject, which is what this does before it refuses anything.
609
577
  */
610
- export async function stopEditor(force = false, projectDir) {
611
- void force;
612
- const projectPath = uprojectInDir(projectDir);
578
+ export async function resolveOwnedEditor(projectDir, projectPath) {
613
579
  if (!projectDir || !projectPath) {
614
580
  return {
615
- success: false,
616
- message: "No project is loaded, so stop_editor has no editor to aim at. Use project(action='set_project') first. " +
581
+ owned: false,
582
+ message: "No project is loaded, so there is no editor to aim at. Use project(action='set_project') first. " +
617
583
  "A lifecycle action never falls back to whichever editor it can find.",
618
584
  };
619
585
  }
@@ -621,49 +587,85 @@ export async function stopEditor(force = false, projectDir) {
621
587
  if (!target.ok) {
622
588
  const running = await findInteractiveEditors(projectPath);
623
589
  if (running.length === 0) {
624
- return { success: false, message: `Editor is not running for this project. ${target.reason}` };
590
+ return { owned: false, message: `Editor is not running for this project. ${target.reason}` };
625
591
  }
626
592
  const state = await readEngineState(projectPath, { probeWindows: true });
627
593
  return {
628
- success: false,
594
+ owned: false,
629
595
  message: `Editor is running (pid ${running.map((p) => p.pid).join(", ")}) but no bridge port is published for it, ` +
630
596
  `so it cannot be asked to quit cleanly. ${target.reason} ${state.summary} ` +
631
597
  "Close it manually - ue-mcp never force-kills processes.",
632
598
  state,
633
599
  };
634
600
  }
635
- // The lockfile was written by an editor that had THIS project open, but it
636
- // outlives a crash, and the port it names can be taken by something else
637
- // afterwards. Confirm the process it points at is still that editor before
638
- // sending anything a quit request (#819).
639
- if (target.pid !== null) {
640
- const owner = await findEditorByPid(target.pid);
641
- if (!owner) {
601
+ // Plugin builds before the lockfile carried a pid leave nothing to identify
602
+ // the listener with, so the process table has to answer instead.
603
+ if (target.pid === null) {
604
+ if ((await findInteractiveEditors(projectPath)).length === 0) {
642
605
  return {
643
- success: false,
644
- message: `The bridge lockfile at ${target.lockfilePath} names pid ${target.pid}, which is no longer running - ` +
645
- "the editor exited without removing it. Nothing was asked to quit, because port " +
646
- `${target.port} may since have been taken by an unrelated process. Delete that file if it persists.`,
647
- };
648
- }
649
- if (owner.projectPath !== null && !editorOwnsProject(owner, projectPath)) {
650
- return {
651
- success: false,
652
- message: `The bridge lockfile at ${target.lockfilePath} names pid ${target.pid}, but that process now has ` +
653
- `${owner.projectPath} open, not this project. Nothing was asked to quit. Delete that file if it persists.`,
606
+ owned: false,
607
+ message: `The bridge lockfile at ${target.lockfilePath} records no pid (older plugin build) and no editor for this ` +
608
+ `project is running, so port ${target.port} cannot be shown to belong to it. Nothing was asked to quit.`,
654
609
  };
655
610
  }
611
+ return { owned: true, port: target.port, pid: null, source: target.source };
656
612
  }
657
- else if ((await findInteractiveEditors(projectPath)).length === 0) {
658
- // Plugin builds before the lockfile carried a pid leave nothing to identify
659
- // the listener with, so the process table has to answer instead.
613
+ // The lockfile was written by an editor that had THIS project open, but it
614
+ // outlives a crash, and the port it names can be taken by something else
615
+ // afterwards (#819). A process whose command line could not be read is not
616
+ // evidence against it: "might be ours" is the only honest answer there, and
617
+ // the lockfile already says whose it is.
618
+ const owner = await findEditorByPid(target.pid);
619
+ if (owner && (owner.projectPath === null || editorOwnsProject(owner, projectPath))) {
620
+ return { owned: true, port: target.port, pid: target.pid, source: target.source };
621
+ }
622
+ // The lockfile does not describe an editor of this project any more. Before
623
+ // refusing, look for the editor that does: it publishes its own address to
624
+ // instances/<pid>.json, which no other instance can take away (#934). Telling
625
+ // the user to delete a file while a healthy editor is listening would throw
626
+ // away the bridge's only handle on it, which is exactly what used to happen.
627
+ const live = await findInteractiveEditors(projectPath);
628
+ const record = live.length > 0 ? findLiveInstanceRecord(projectDir, (pid) => live.some((p) => p.pid === pid)) : null;
629
+ if (record) {
660
630
  return {
661
- success: false,
662
- message: `The bridge lockfile at ${target.lockfilePath} records no pid (older plugin build) and no editor for this ` +
663
- `project is running, so port ${target.port} cannot be shown to belong to it. Nothing was asked to quit.`,
631
+ owned: true,
632
+ port: record.port,
633
+ pid: record.pid,
634
+ source: "instance-record",
635
+ healed: `${target.lockfilePath} names pid ${target.pid}, which is no longer the editor for this project. ` +
636
+ `The editor that is (pid ${record.pid}) was resolved from ${record.recordPath} instead.`,
664
637
  };
665
638
  }
666
- const port = target.port;
639
+ const staleDetail = owner
640
+ ? `names pid ${target.pid}, which is no longer the editor for this project - that process now has ` +
641
+ `${owner.projectPath} open`
642
+ : `names pid ${target.pid}, which is no longer running`;
643
+ return {
644
+ owned: false,
645
+ message: `Stale lockfile: ${target.lockfilePath} ${staleDetail}. No editor holding ${projectPath} open is running ` +
646
+ `either, so nothing was asked to quit and port ${target.port} was not dialled - it may since have been taken ` +
647
+ "by an unrelated process. The file is safe to delete; the next editor for this project republishes it.",
648
+ };
649
+ }
650
+ /**
651
+ * Stop the editor by asking it to quit ITSELF through the bridge. ue-mcp NEVER
652
+ * issues an OS kill: `taskkill /IM UnrealEditor.exe` matches by image name and
653
+ * would also close the user's other editors (e.g. their real project). `force`
654
+ * is accepted for back-compat but there is deliberately no force-kill path.
655
+ * Success is confirmed by the project's own bridge port going quiet, so it is
656
+ * specific to this editor even when others are open.
657
+ *
658
+ * The port comes from what this project published and nowhere else, and the
659
+ * process behind it is checked before the quit goes out (#819).
660
+ */
661
+ export async function stopEditor(force = false, projectDir) {
662
+ void force;
663
+ const projectPath = uprojectInDir(projectDir);
664
+ const ownership = await resolveOwnedEditor(projectDir, projectPath);
665
+ if (!ownership.owned) {
666
+ return { success: false, message: ownership.message, ...(ownership.state ? { state: ownership.state } : {}) };
667
+ }
668
+ const port = ownership.port;
667
669
  const host = bridgeHost(projectDir);
668
670
  const bridgeUp = await isBridgeAvailable(host, port);
669
671
  if (!bridgeUp && (await findInteractiveEditors(projectPath)).length === 0) {
@@ -691,7 +693,12 @@ export async function stopEditor(force = false, projectDir) {
691
693
  for (let i = 0; i < 20; i++) {
692
694
  await new Promise((resolve) => setTimeout(resolve, 1000));
693
695
  if (!(await isBridgeAvailable(host, port))) {
694
- return { success: true, message: "Editor quit itself via the bridge" };
696
+ return {
697
+ success: true,
698
+ message: ownership.healed
699
+ ? `Editor quit itself via the bridge. ${ownership.healed}`
700
+ : "Editor quit itself via the bridge",
701
+ };
695
702
  }
696
703
  }
697
704
  return {
@@ -736,22 +743,39 @@ function getPlatformString() {
736
743
  return "Mac";
737
744
  return "Linux";
738
745
  }
746
+ /**
747
+ * Compile a project's C++ out of process, with UnrealBuildTool.
748
+ *
749
+ * Out of process is the point: UnrealBuildTool refuses to link while an editor
750
+ * holds the module DLLs, so a full rebuild is exactly the case where the editor
751
+ * must be down, and an editor that is down cannot answer a bridge call (#958).
752
+ */
739
753
  export async function buildProject(projectPath, opts = {}) {
740
754
  const resolvedPath = path.resolve(projectPath);
741
- const buildTool = findUEBuildTool(readEngineAssociation(resolvedPath), readProjectEditorConfig(resolvedPath).buildToolPath);
742
- if (!buildTool) {
755
+ if (!fs.existsSync(resolvedPath)) {
756
+ return { success: false, exitCode: null, message: `Project file not found: ${resolvedPath}` };
757
+ }
758
+ // The failure names every location probed. The old message named one env var
759
+ // and nothing else, so a missing tool, a wrong root and an unsupported layout
760
+ // all read identically (#974).
761
+ let buildTool;
762
+ try {
763
+ const engine = selectEngine(engineLookupFor(resolvedPath, readEngineAssociation(resolvedPath), readProjectEditorConfig(resolvedPath)), "buildTool");
764
+ if (!engine.buildTool)
765
+ throw new EngineResolutionError("Resolved engine names no build tool.", []);
766
+ buildTool = engine.buildTool;
767
+ }
768
+ catch (err) {
743
769
  return {
744
770
  success: false,
745
771
  exitCode: null,
746
- message: "Unreal Engine build tool not found. Set UE_BUILD_TOOL_PATH or install UE5.3+ to a default location.",
772
+ message: err instanceof EngineResolutionError ? err.message : String(err),
747
773
  };
748
774
  }
749
- if (!fs.existsSync(resolvedPath)) {
750
- return { success: false, exitCode: null, message: `Project file not found: ${resolvedPath}` };
751
- }
752
775
  const projectName = path.basename(resolvedPath, ".uproject");
753
776
  const target = `${projectName}Editor`;
754
- const platform = getPlatformString();
777
+ const platform = opts.platform?.trim() || getPlatformString();
778
+ const configuration = opts.configuration?.trim() || "Development";
755
779
  // #740: the quotes around the project path are SHELL syntax, not part of the
756
780
  // value. On Windows the args are joined into a single `cmd /c` string, so
757
781
  // they are required. Off Windows the args go straight into argv with no shell
@@ -759,8 +783,8 @@ export async function buildProject(projectPath, opts = {}) {
759
783
  // characters and reported "Unable to find project file" for a file that was
760
784
  // plainly there - while the same command pasted into a terminal worked,
761
785
  // because the shell removed them first.
762
- const commonArgs = [target, platform, "Development"];
763
- const tailArgs = ["-WaitMutex", "-FromMsBuild"];
786
+ const commonArgs = [target, platform, configuration];
787
+ const tailArgs = ["-WaitMutex", "-FromMsBuild", ...(opts.clean ? ["-Clean"] : [])];
764
788
  const windowsArgs = [...commonArgs, `-Project="${resolvedPath}"`, ...tailArgs];
765
789
  const posixArgs = [...commonArgs, `-Project=${resolvedPath}`, ...tailArgs];
766
790
  return new Promise((resolve) => {
@@ -791,7 +815,7 @@ export async function buildProject(projectPath, opts = {}) {
791
815
  // Only this project's: a build in one editor says nothing about another.
792
816
  invalidatePluginFreshness(resolvedPath);
793
817
  resolve(code === 0
794
- ? { success: true, exitCode: 0, message: "Build succeeded" }
818
+ ? { success: true, exitCode: 0, message: `Build succeeded (${target} ${platform} ${configuration})` }
795
819
  : { success: false, exitCode: code, message: `Build failed with exit code ${code}` });
796
820
  });
797
821
  proc.on("error", (err) => {
@@ -1 +1 @@
1
- {"version":3,"file":"editor-control.js","sourceRoot":"","sources":["../src/editor-control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAuB,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,YAAY,GAEb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,6EAA6E;AAC7E,4EAA4E;AAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AAEhD,MAAM,oBAAoB,GACxB,sLAAsL,CAAC;AAEzL;;;;;;GAMG;AACH,SAAS,uBAAuB,CAAC,WAAmB;IAClD,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,SAAS,qBAAqB,CAAC,WAAmB;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QACjE,OAAO,OAAO,MAAM,EAAE,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;IACzF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,iBAAiC,EAAE,cAA8B;IACxF,kEAAkE;IAClE,6EAA6E;IAC7E,sDAAsD;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC/C,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,cAAc,CAAC,IAAI,EAAE,CAAC;IAErG,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;IAEzD,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,2EAA2E;IAC3E,4EAA4E;IAC5E,8DAA8D;IAC9D,MAAM,cAAc,GAAG,iBAAiB,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC;IACpE,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;QAC9F,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;YAAE,OAAO,cAAc,CAAC;IAC3D,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAE5D,MAAM,WAAW,GAAa,UAAU;QACtC,CAAC,CAAC;YACE,6BAA6B;YAC7B,6BAA6B;YAC7B,6BAA6B;YAC7B,eAAe;YACf,eAAe;YACf,eAAe;SAChB;QACH,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC7B,CAAC,CAAC,CAAC,0BAA0B,CAAC;YAC9B,CAAC,CAAC;gBACE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,cAAc,CAAC;gBACtD,mBAAmB;aACpB,CAAC;IAER,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;YACxG,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjC,OAAO,aAAa,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,2FAA2F;IAC3F,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;QACjG,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO,WAAW,CAAC;IACrD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,UAAkB;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC7D,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO;YACL,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC;YACnF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,cAAc,CAAC;SAC3C,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAwB;IACpD,2EAA2E;IAC3E,gEAAgE;IAChE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC3C,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,UAAU,GAAG,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;IAChD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,UAAU,CAAC,IAAI,EAAE,CAAC;IAEzF,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,IAAI,IAAI,CAAC,CAAC;IACnF,IAAI,oBAAoB,EAAE,CAAC;QACzB,KAAK,MAAM,SAAS,IAAI,sBAAsB,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACrE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;QACjD,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,iBAAiB,IAAI,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC7G,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACnE,KAAK,MAAM,SAAS,IAAI,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IACjD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,UAAU,CAAC,UAA0B;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACpC,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACpB,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC;YAC5D,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,OAAO,UAAU,CAAC,IAAI,EAAE,CAAC;QAC3F,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;YAClE,gEAAgE;QAClE,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,IAAa,EAAE,SAAS,GAAG,IAAI;IAC7E,OAAO,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAI,GAAG,UAAU,EAAE,EAAE,IAAI,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI;IAC9E,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;YAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC;gBAChB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC;gBAChB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAiBxC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,WAAmB,EACnB,UAAkB,EAClB,cAAc,GAAG,GAAG,EACpB,YAAqB;IAErB,OAAO,kBAAkB,CAAC,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;AACvF,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,WAAsC,EACtC,UAA8B,EAC9B,cAAsB,EACtB,OAAmF,EAAE;IAErF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,cAAc,GAAG,IAAI,CAAC;IACxC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,+EAA+E;IAC/E,IAAI,oBAAoB,GAAG,CAAC,CAAC,CAAC;IAC9B,iFAAiF;IACjF,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACzF,MAAM,OAAO,GAAG,GAAW,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;IAE9D,MAAM,MAAM,GAAG,CAAC,MAAmB,EAAe,EAAE;QAClD,GAAG,EAAE,IAAI,CACP,MAAM,CAAC,KAAK;YACV,CAAC,CAAC,mBAAmB,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACxD,CAAC,CAAC,gCAAgC,MAAM,CAAC,MAAM,IAAI,WAAW,EAAE,CACnE,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QAE3C,2EAA2E;QAC3E,2EAA2E;QAC3E,4EAA4E;QAC5E,4EAA4E;QAC5E,yEAAyE;QACzE,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC,iBAAiB,IAAI,QAAQ,CAAC,GAAG,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9E,MAAM,iBAAiB,GAAG,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;QACjF,IAAI,iBAAiB;YAAE,WAAW,GAAG,IAAI,CAAC;QAE1C,wEAAwE;QACxE,wEAAwE;QACxE,6CAA6C;QAC7C,MAAM,KAAK,GAAG,iBAAiB;YAC7B,CAAC,CAAC,QAAS,CAAC,KAAK;YACjB,CAAC,CAAC,WAAW;gBACX,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,YAAY;oBACZ,CAAC,CAAC,QAAQ,CAAC,KAAK;oBAChB,CAAC,CAAC,WAAW,CAAC;QACpB,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACjC,SAAS,GAAG,KAAK,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK;gBACL,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvC,MAAM,EAAE,OAAO,QAAQ,EAAE,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,aAAa,UAAU,CAAC,CAAC,CAAC,SAAS;aACtG,CAAC,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI,KAAK,IAAI,WAAW,CAAC;QAC/D,MAAM,MAAM,GACV,OAAO,QAAQ,EAAE,aAAa,KAAK,QAAQ,IAAI,QAAQ,CAAC,aAAa,GAAG,CAAC;YACvE,CAAC,CAAC,GAAG,QAAQ,CAAC,aAAa,cAAc,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YAChE,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QAEjC,GAAG,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAExF,sCAAsC;QACtC,EAAE;QACF,qEAAqE;QACrE,uEAAuE;QACvE,yEAAyE;QACzE,yEAAyE;QACzE,oEAAoE;QACpE,uEAAuE;QACvE,0EAA0E;QAC1E,gCAAgC;QAChC,EAAE;QACF,mEAAmE;QACnE,wEAAwE;QACxE,2EAA2E;QAC3E,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,kBAAkB,CAAC;gBAChC,cAAc,EAAE,OAAO,EAAE;gBACzB,cAAc;gBACd,oBAAoB;gBACpB,KAAK;gBACL,MAAM;gBACN,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;aAC/C,CAAC,CAAC;YACH,IAAI,MAAM,EAAE,CAAC;gBACX,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACvC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,wEAAwE;QACxE,IAAI,YAAY,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACjD,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,mCAAmC,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;QACvK,CAAC;QACD,IAAI,QAAQ,EAAE,KAAK,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;gBACZ,KAAK,EAAE,KAAK;gBACZ,cAAc,EAAE,OAAO,EAAE;gBACzB,QAAQ;gBACR,MAAM,EAAE,sBAAsB,QAAQ,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,8CAA8C;gBAC/I,KAAK,EAAE,MAAM,eAAe,CAAC,WAAW,IAAI,IAAI,CAAC;aAClD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,YAAY,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC,WAAW,IAAI,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1K,CAAC;QAED,4EAA4E;QAC5E,yEAAyE;QACzE,2EAA2E;QAC3E,yEAAyE;QACzE,wEAAwE;QACxE,4EAA4E;QAC5E,sEAAsE;QACtE,2EAA2E;QAC3E,6EAA6E;QAC7E,oEAAoE;QACpE,yEAAyE;QACzE,kCAAkC;QAClC,MAAM,YAAY,GAChB,QAAQ,CAAC,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACxG,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,IAAI,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,IAAI,QAAQ,EAAE,aAAa,IAAI,EAAE,IAAI,YAAY,EAAE,CAAC;QACrJ,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC9B,YAAY,GAAG,QAAQ,CAAC;YACxB,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,CAAC;aAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,GAAG,kBAAkB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,GAAG,wBAAwB,EAAE,CAAC;YACvH,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,WAAW,IAAI,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YACxF,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzD,OAAO,MAAM,CAAC;oBACZ,KAAK,EAAE,KAAK;oBACZ,cAAc,EAAE,OAAO,EAAE;oBACzB,QAAQ;oBACR,MAAM,EAAE,yDAAyD,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE;oBACnH,KAAK,EAAE,YAAY;iBACpB,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1B,OAAO,MAAM,CAAC;oBACZ,KAAK,EAAE,KAAK;oBACZ,cAAc,EAAE,OAAO,EAAE;oBACzB,QAAQ;oBACR,MAAM,EAAE,uDAAuD;oBAC/D,KAAK,EAAE,YAAY;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,0EAA0E;QAC1E,+DAA+D;QAC/D,uEAAuE;QACvE,4EAA4E;QAC5E,4EAA4E;QAC5E,2EAA2E;QAC3E,2EAA2E;QAC3E,WAAW;QACX,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,QAAQ,GACZ,MAAM,CAAC,EAAE;YACT,wBAAwB,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;YAC/D,CAAC,MAAM,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,EAAE,KAAK,KAAK,OAAO,EAAE,CAAC;gBAChC,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,wEAAwE;gBACxE,uEAAuE;gBACvE,sEAAsE;gBACtE,wDAAwD;gBACxD,IAAI,aAAa,KAAK,IAAI;oBAAE,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,IAAI,EAAE,CAAC;oBACtC,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,iEAAiE,EAAE,CAAC,CAAC;gBACjJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,MAAM,CAAC;QACZ,KAAK,EAAE,KAAK;QACZ,cAAc,EAAE,OAAO,EAAE;QACzB,QAAQ;QACR,MAAM,EAAE,yBAAyB,cAAc,GAAG;QAClD,KAAK,EAAE,MAAM,eAAe,CAAC,WAAW,IAAI,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC1E,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAOlC;IACC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACjF,IAAI,OAAO,IAAI,KAAK,CAAC,oBAAoB;QAAE,OAAO,IAAI,CAAC;IAEvD,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACpG,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,KAAK,CAAC,cAAc;QAC3B,OAAO,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,OAAO,KAAK,KAAK,CAAC,MAAM,GAAG;KACtD,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,SAAS,gBAAgB,CAAC,QAAsB;IAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,oBAAoB,CAAC;IACvD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAuB,EACvB,cAAc,GAAG,GAAG,EACpB,UAAuB;IAEvB,4EAA4E;IAC5E,2EAA2E;IAC3E,0EAA0E;IAC1E,8EAA8E;IAC9E,sCAAsC;IACtC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,6DAA6D,EAAE,CAAC;IACpG,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAErD,8EAA8E;IAC9E,6EAA6E;IAC7E,0EAA0E;IAC1E,wEAAwE;IACxE,8EAA8E;IAC9E,yEAAyE;IACzE,0EAA0E;IAC1E,6BAA6B;IAC7B,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAClF,IAAI,MAAM,CAAC,EAAE,IAAI,YAAY,IAAI,CAAC,MAAM,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAChG,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,+EAA+E,MAAM,CAAC,IAAI,IAAI;SACxG,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACzE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACjF,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,mDAAmD,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,0CAA0C,KAAK,CAAC,OAAO,EAAE;YAChK,KAAK;SACN,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,oBAAoB;SAC9B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,0EAA0E;QAC1E,qDAAqD;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAC5D,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,aAAa,CAAC,KAAK,EAAE,CAAC;QAEtB,0EAA0E;QAC1E,sEAAsE;QACtE,qEAAqE;QACrE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;QAEvH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,6CAA6C,MAAM,CAAC,MAAM,sBAAsB,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG;gBAC7H,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,mBAAmB,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,yCAAyC;YACpK,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACzD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC9F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,6EAA6E;AAC7E,+EAA+E;AAC/E,mCAAmC;AACnC,MAAM,mBAAmB,GAAG;IAC1B,eAAe;IACf,uBAAuB;IACvB,UAAU;IACV,4CAA4C;IAC5C,4BAA4B;IAC5B,kEAAkE;IAClE,wDAAwD;CACzD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;;;GAIG;AACH,SAAS,aAAa,CAAC,UAAmB;IACxC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5F,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CACxB,IAAY,EACZ,MAAc,EACd,MAA+B,EAC/B,OAAe,UAAU,EAAE;IAE3B,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QACtC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,0EAA0E;QAC1E,yEAAyE;QACzE,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,CAAC,CAAU,EAAE,EAAE;YAC5B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC;gBAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1C,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACpF,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE;YACjC,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAwD,CAAC;gBAC5F,IAAI,GAAG,CAAC,KAAK;oBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK;oBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,CAAC;YAAC,MAAM,CAAC;gBACP,qEAAqE;gBACrE,6DAA6D;YAC/D,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,qBAAqB,CAAC,IAAY,EAAE,IAAY;IAC7D,IAAI,MAAM,iBAAiB,CAAC,IAAI,EAAE,yBAAyB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACvH,OAAO,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,IAAI,CAAC,CAAC;AACxF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAK,GAAG,KAAK,EAAE,UAAmB;IACjE,KAAK,KAAK,CAAC;IAEX,MAAM,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EACL,yGAAyG;gBACzG,sEAAsE;SACzE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,2CAA2C,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACjG,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EACL,0BAA0B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,4CAA4C;gBAC1G,0CAA0C,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,GAAG;gBAC3E,yDAAyD;YAC3D,KAAK;SACN,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,yEAAyE;IACzE,2EAA2E;IAC3E,0CAA0C;IAC1C,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EACL,0BAA0B,MAAM,CAAC,YAAY,cAAc,MAAM,CAAC,GAAG,iCAAiC;oBACtG,iFAAiF;oBACjF,GAAG,MAAM,CAAC,IAAI,sFAAsF;aACvG,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC;YACzE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EACL,0BAA0B,MAAM,CAAC,YAAY,cAAc,MAAM,CAAC,GAAG,6BAA6B;oBAClG,GAAG,KAAK,CAAC,WAAW,sFAAsF;aAC7G,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,MAAM,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpE,4EAA4E;QAC5E,iEAAiE;QACjE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EACL,0BAA0B,MAAM,CAAC,YAAY,8DAA8D;gBAC3G,+BAA+B,MAAM,CAAC,IAAI,8DAA8D;SAC3G,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,2EAA2E;QAC3E,yEAAyE;QACzE,2EAA2E;QAC3E,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,2FAA2F,KAAK,CAAC,OAAO,0DAA0D;YAC3K,KAAK;SACN,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,wHAAwH;SAClI,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,CAAC,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO;QACL,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,wHAAwH;KAClI,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAuB,EAAE,MAA2D;IACtH,2EAA2E;IAC3E,+EAA+E;IAC/E,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,6DAA6D,EAAE,CAAC;IACpG,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,uEAAuE;IACvE,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,MAAM,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1F,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,0BAA0B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;IACrF,CAAC;IAED,wDAAwD;IACxD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAE1D,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,mCAAmC;IACnC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAQD,SAAS,iBAAiB;IACxB,IAAI,UAAU;QAAE,OAAO,OAAO,CAAC;IAC/B,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAAmB,EACnB,OAA8C,EAAE;IAEhD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,eAAe,CAC/B,qBAAqB,CAAC,YAAY,CAAC,EACnC,uBAAuB,CAAC,YAAY,CAAC,CAAC,aAAa,CACpD,CAAC;IACF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,IAAI;YACd,OAAO,EACL,qGAAqG;SACxG,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,2BAA2B,YAAY,EAAE,EAAE,CAAC;IAChG,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,GAAG,WAAW,QAAQ,CAAC;IACtC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IAErC,6EAA6E;IAC7E,0EAA0E;IAC1E,8EAA8E;IAC9E,6EAA6E;IAC7E,4EAA4E;IAC5E,wEAAwE;IACxE,wCAAwC;IACxC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,EAAE,aAAa,YAAY,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC;IAC/E,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,EAAE,YAAY,YAAY,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC;IAE3E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,IAAI,CAAC;QACT,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,IAAI,SAAS,GAAG,CAAC;YACvC,MAAM,WAAW,GAAG,WAAW,aAAa,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YACzE,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,QAAQ;gBAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;gBAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEjD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,yEAAyE;YACzE,qEAAqE;YACrE,oEAAoE;YACpE,yEAAyE;YACzE,yBAAyB,CAAC,YAAY,CAAC,CAAC;YACxC,OAAO,CACL,IAAI,KAAK,CAAC;gBACR,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE;gBAC5D,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,+BAA+B,IAAI,EAAE,EAAE,CACvF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"editor-control.js","sourceRoot":"","sources":["../src/editor-control.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,35 @@
21
21
  */
22
22
  /** The path the bridge publishes its bound port to, for one project root. */
23
23
  export declare function bridgeLockfilePath(projectDir: string): string;
24
+ /** Where every live bridge publishes its own address, one file per process. */
25
+ export declare function bridgeInstancesDir(projectDir: string): string;
26
+ /**
27
+ * One editor's own published address, from `instances/<pid>.json`.
28
+ *
29
+ * Unlike port.json this file cannot be taken away by anybody else: the process
30
+ * that wrote it is the only one that ever deletes it, and its name is that
31
+ * process's pid. That is what makes it the recovery path when port.json is
32
+ * gone (#934).
33
+ */
34
+ export interface BridgeInstanceRecord {
35
+ port: number;
36
+ pid: number;
37
+ instanceId: string | null;
38
+ /** "listening" or "bind-failed". A bind-failed record names no reachable port. */
39
+ state: string | null;
40
+ startedAt: string | null;
41
+ recordPath: string;
42
+ writtenAtMs: number;
43
+ }
44
+ /**
45
+ * Every readable instance record for this project, newest first.
46
+ *
47
+ * Records are read, not trusted: the caller decides which pids are still alive.
48
+ * A record whose process is gone is exactly the artefact that outlives a crash,
49
+ * and treating it as an address would resurrect the bug the lockfile pid check
50
+ * exists to prevent (#819).
51
+ */
52
+ export declare function readBridgeInstanceRecords(projectDir: string): BridgeInstanceRecord[];
24
53
  export interface BridgeLockfile {
25
54
  port: number;
26
55
  /** The editor process that bound the port, or null on older plugin builds. */
@@ -37,6 +66,10 @@ export type BridgeTarget = {
37
66
  pid: number | null;
38
67
  writtenAtMs: number;
39
68
  lockfilePath: string;
69
+ /** Which published file this address came from. */
70
+ source: "port.json" | "instance-record";
71
+ /** The instance record used, when the shared lockfile could not answer. */
72
+ recordPath?: string;
40
73
  } | {
41
74
  ok: false;
42
75
  /** The file that was checked, or null when no project is loaded. */
@@ -44,12 +77,33 @@ export type BridgeTarget = {
44
77
  /** Names the lockfile path, so the reader can go and look at it. */
45
78
  reason: string;
46
79
  };
80
+ /**
81
+ * A live editor's own published address for this project, newest first.
82
+ *
83
+ * #934: two editors of one project share a single `Saved/UE_MCP_Bridge/`, and
84
+ * the one that quits removes port.json on its way out. Only the instance that
85
+ * wrote it ever deletes it, so the survivor is left with no shared lockfile at
86
+ * all even though it is listening perfectly well, and recovery used to mean
87
+ * hand-writing port.json back. Its own `instances/<pid>.json` was on disk the
88
+ * whole time and names its port, so recovery is a directory read.
89
+ *
90
+ * `alive` is injected so the fallback is testable without real pids.
91
+ */
92
+ export declare function findLiveInstanceRecord(projectDir: string, alive?: (pid: number) => boolean): BridgeInstanceRecord | null;
47
93
  /**
48
94
  * The bridge endpoint belonging to `projectDir`, or a reason naming the exact
49
95
  * file that was checked. Never returns a port that this project did not
50
96
  * publish for itself.
97
+ *
98
+ * The shared lockfile is still the first answer, and callers still check the
99
+ * pid it names for themselves. When there is no lockfile at all, a live
100
+ * instance record for this project is a strictly better answer than a refusal:
101
+ * the editor published it, for this project, and it names a port nobody else
102
+ * can overwrite (#934).
103
+ *
104
+ * `isAlive` is injected so the fallback is testable without real pids.
51
105
  */
52
- export declare function resolveBridgeTarget(projectDir?: string | null): BridgeTarget;
106
+ export declare function resolveBridgeTarget(projectDir?: string | null, isAlive?: (pid: number) => boolean): BridgeTarget;
53
107
  /**
54
108
  * Is this lockfile from the launch that started at `notBeforeMs`?
55
109
  *