@fps-games/editor 0.2.0-beta.2 → 0.2.0-beta.4

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 (652) hide show
  1. package/dist/agent-bridge/capabilities/assets.js.map +1 -1
  2. package/dist/agent-bridge/capabilities/editor-state.d.ts.map +1 -1
  3. package/dist/agent-bridge/capabilities/editor-state.js +26 -17
  4. package/dist/agent-bridge/capabilities/editor-state.js.map +1 -1
  5. package/dist/agent-bridge/capabilities/host-lifecycle.js.map +1 -1
  6. package/dist/agent-bridge/capabilities/prefabs.d.ts.map +1 -1
  7. package/dist/agent-bridge/capabilities/prefabs.js +61 -13
  8. package/dist/agent-bridge/capabilities/prefabs.js.map +1 -1
  9. package/dist/agent-bridge/capabilities/scene-objects.d.ts +1 -1
  10. package/dist/agent-bridge/capabilities/scene-objects.d.ts.map +1 -1
  11. package/dist/agent-bridge/capabilities/scene-objects.js +110 -25
  12. package/dist/agent-bridge/capabilities/scene-objects.js.map +1 -1
  13. package/dist/agent-bridge/capabilities/selection.d.ts.map +1 -1
  14. package/dist/agent-bridge/capabilities/selection.js +8 -5
  15. package/dist/agent-bridge/capabilities/selection.js.map +1 -1
  16. package/dist/agent-bridge/capabilities/shadows.d.ts.map +1 -1
  17. package/dist/agent-bridge/capabilities/shadows.js +11 -2
  18. package/dist/agent-bridge/capabilities/shadows.js.map +1 -1
  19. package/dist/agent-bridge/capabilities/transform.d.ts.map +1 -1
  20. package/dist/agent-bridge/capabilities/transform.js +6 -4
  21. package/dist/agent-bridge/capabilities/transform.js.map +1 -1
  22. package/dist/agent-bridge/capabilities/ui-regions.js.map +1 -1
  23. package/dist/agent-bridge/capabilities/viewport.d.ts.map +1 -1
  24. package/dist/agent-bridge/capabilities/viewport.js +79 -47
  25. package/dist/agent-bridge/capabilities/viewport.js.map +1 -1
  26. package/dist/agent-bridge/capability-sources.js.map +1 -1
  27. package/dist/agent-bridge/diagnostics.js.map +1 -1
  28. package/dist/agent-bridge/index.js.map +1 -1
  29. package/dist/agent-bridge/register.js.map +1 -1
  30. package/dist/agent-bridge/shared.d.ts +8 -3
  31. package/dist/agent-bridge/shared.d.ts.map +1 -1
  32. package/dist/agent-bridge/shared.js +32 -0
  33. package/dist/agent-bridge/shared.js.map +1 -1
  34. package/dist/agent-bridge/source-types.js.map +1 -1
  35. package/dist/authoring-apply.js.map +1 -1
  36. package/dist/build-info.json +48 -48
  37. package/dist/editor-plugin-agent-capabilities.js.map +1 -1
  38. package/dist/editor-plugin-hierarchy-command.js.map +1 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/internal/local-editor-lifecycle-operations.js.map +1 -1
  41. package/dist/local-editor-agent-actions.d.ts.map +1 -1
  42. package/dist/local-editor-agent-actions.js +9 -5
  43. package/dist/local-editor-agent-actions.js.map +1 -1
  44. package/dist/local-editor-agent-bridge-transport.js.map +1 -1
  45. package/dist/local-editor-agent-bridge.js.map +1 -1
  46. package/dist/local-editor-agent-context.js.map +1 -1
  47. package/dist/local-editor-harness.d.ts +57 -1
  48. package/dist/local-editor-harness.d.ts.map +1 -1
  49. package/dist/local-editor-harness.js +393 -41
  50. package/dist/local-editor-harness.js.map +1 -1
  51. package/dist/local-editor-marker-graph.js.map +1 -1
  52. package/dist/local-editor-performance-stats.js.map +1 -1
  53. package/dist/local-editor-plugin-inspector.js.map +1 -1
  54. package/dist/local-editor-plugin-panel.js.map +1 -1
  55. package/dist/local-editor-scene-render-scheduler.js.map +1 -1
  56. package/dist/local-editor-scene-view-interaction-runtime.js.map +1 -1
  57. package/dist/local-editor-viewport-render-coordinator.js.map +1 -1
  58. package/dist/playable-babylon-facade.js.map +1 -1
  59. package/dist/playable-babylon-outline-inspector.js.map +1 -1
  60. package/dist/playable-babylon-outline-runtime.js.map +1 -1
  61. package/dist/playable-babylon-rendering.js.map +1 -1
  62. package/dist/playable-local-editor-host.d.ts +36 -0
  63. package/dist/playable-local-editor-host.d.ts.map +1 -1
  64. package/dist/playable-local-editor-host.js.map +1 -1
  65. package/dist/playable-product-local-editor.js.map +1 -1
  66. package/dist/playable-product-projection-preview.js.map +1 -1
  67. package/dist/playable-product-rendering.js.map +1 -1
  68. package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
  69. package/dist/playable-product-scene-capabilities.js +49 -2
  70. package/dist/playable-product-scene-capabilities.js.map +1 -1
  71. package/dist/playable-runtime-babylon.js.map +1 -1
  72. package/dist/playable-runtime.js.map +1 -1
  73. package/dist/playable-sdk-upgrade-doctor.js.map +1 -1
  74. package/dist/playable-sdk-vite.js.map +1 -1
  75. package/dist/playable-sdk.js.map +1 -1
  76. package/dist/playable-standard-project.js.map +1 -1
  77. package/dist/static-shadow-cpu-worker.js.map +1 -1
  78. package/dist/vite.js.map +1 -1
  79. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.js.map +1 -1
  80. package/node_modules/@fps-games/babylon-renderer/dist/environment/index.js.map +1 -1
  81. package/node_modules/@fps-games/babylon-renderer/dist/environment/profile.js.map +1 -1
  82. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.js.map +1 -1
  83. package/node_modules/@fps-games/babylon-renderer/dist/index.js.map +1 -1
  84. package/node_modules/@fps-games/babylon-renderer/dist/lighting/directional-light-angles.js.map +1 -1
  85. package/node_modules/@fps-games/babylon-renderer/dist/outlines/babylon-default/apply.js.map +1 -1
  86. package/node_modules/@fps-games/babylon-renderer/dist/outlines/babylon-default/index.js.map +1 -1
  87. package/node_modules/@fps-games/babylon-renderer/dist/outlines/babylon-default/types.js.map +1 -1
  88. package/node_modules/@fps-games/babylon-renderer/dist/outlines/index.js.map +1 -1
  89. package/node_modules/@fps-games/babylon-renderer/dist/outlines/types.js.map +1 -1
  90. package/node_modules/@fps-games/babylon-renderer/dist/placement/index.js.map +1 -1
  91. package/node_modules/@fps-games/babylon-renderer/dist/placement/runtime-drop-position.js.map +1 -1
  92. package/node_modules/@fps-games/babylon-renderer/dist/plugin.js.map +1 -1
  93. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js.map +1 -1
  94. package/node_modules/@fps-games/babylon-renderer/dist/post-process/index.js.map +1 -1
  95. package/node_modules/@fps-games/babylon-renderer/dist/post-process/profile.js.map +1 -1
  96. package/node_modules/@fps-games/babylon-renderer/dist/post-process/types.js.map +1 -1
  97. package/node_modules/@fps-games/babylon-renderer/dist/post-process/volume-stack.js.map +1 -1
  98. package/node_modules/@fps-games/babylon-renderer/dist/reference.js.map +1 -1
  99. package/node_modules/@fps-games/babylon-renderer/dist/rendering/index.js.map +1 -1
  100. package/node_modules/@fps-games/babylon-renderer/dist/rendering/node-rendering.js.map +1 -1
  101. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-shaders.js.map +1 -1
  102. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-system.js.map +1 -1
  103. package/node_modules/@fps-games/babylon-renderer/dist/shadows/dynamic-shadow-system.js.map +1 -1
  104. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-shaders.js.map +1 -1
  105. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-system.js.map +1 -1
  106. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-artifact-system.js.map +1 -1
  107. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-atlas.js.map +1 -1
  108. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-bake.js.map +1 -1
  109. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-baker.js.map +1 -1
  110. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-options.js.map +1 -1
  111. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-rendering.js.map +1 -1
  112. package/node_modules/@fps-games/babylon-renderer/dist/shadows/types.js.map +1 -1
  113. package/node_modules/@fps-games/babylon-renderer/package.json +7 -7
  114. package/node_modules/@fps-games/editor-babylon/dist/camera-controller.js.map +1 -1
  115. package/node_modules/@fps-games/editor-babylon/dist/edit-session.js.map +1 -1
  116. package/node_modules/@fps-games/editor-babylon/dist/editor-sky.js.map +1 -1
  117. package/node_modules/@fps-games/editor-babylon/dist/editor-world.js.map +1 -1
  118. package/node_modules/@fps-games/editor-babylon/dist/event-guard.js.map +1 -1
  119. package/node_modules/@fps-games/editor-babylon/dist/index.js.map +1 -1
  120. package/node_modules/@fps-games/editor-babylon/dist/infinite-grid-layer.js.map +1 -1
  121. package/node_modules/@fps-games/editor-babylon/dist/infinite-grid.js.map +1 -1
  122. package/node_modules/@fps-games/editor-babylon/dist/input-controller.js.map +1 -1
  123. package/node_modules/@fps-games/editor-babylon/dist/inspector-adapter.js.map +1 -1
  124. package/node_modules/@fps-games/editor-babylon/dist/inspector-host.js.map +1 -1
  125. package/node_modules/@fps-games/editor-babylon/dist/main-camera-preview.js.map +1 -1
  126. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js.map +1 -1
  127. package/node_modules/@fps-games/editor-babylon/dist/material-property-adapter.js.map +1 -1
  128. package/node_modules/@fps-games/editor-babylon/dist/material-slot-source-resolver.js.map +1 -1
  129. package/node_modules/@fps-games/editor-babylon/dist/monitor.js.map +1 -1
  130. package/node_modules/@fps-games/editor-babylon/dist/outline-adapter.js.map +1 -1
  131. package/node_modules/@fps-games/editor-babylon/dist/performance-monitor.js.map +1 -1
  132. package/node_modules/@fps-games/editor-babylon/dist/prefab-comparison-preview-controller.js.map +1 -1
  133. package/node_modules/@fps-games/editor-babylon/dist/primitive-projection-instancing.js.map +1 -1
  134. package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.js.map +1 -1
  135. package/node_modules/@fps-games/editor-babylon/dist/projection-pick-resolver.js.map +1 -1
  136. package/node_modules/@fps-games/editor-babylon/dist/projection-selection-controller.js.map +1 -1
  137. package/node_modules/@fps-games/editor-babylon/dist/projection-source-owner-path.js.map +1 -1
  138. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  139. package/node_modules/@fps-games/editor-babylon/dist/runtime-globals.js.map +1 -1
  140. package/node_modules/@fps-games/editor-babylon/dist/scene-camera-preview.js.map +1 -1
  141. package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.js.map +1 -1
  142. package/node_modules/@fps-games/editor-babylon/dist/scene-view-input-controller.js.map +1 -1
  143. package/node_modules/@fps-games/editor-babylon/dist/scene-view-measurement-controller.js.map +1 -1
  144. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js.map +1 -1
  145. package/node_modules/@fps-games/editor-babylon/dist/selection-controller.js.map +1 -1
  146. package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.js.map +1 -1
  147. package/node_modules/@fps-games/editor-babylon/dist/tool-controller.js.map +1 -1
  148. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
  149. package/node_modules/@fps-games/editor-babylon/dist/transform-solver.js.map +1 -1
  150. package/node_modules/@fps-games/editor-babylon/dist/types.js.map +1 -1
  151. package/node_modules/@fps-games/editor-babylon/package.json +5 -5
  152. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +3 -1
  153. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  154. package/node_modules/@fps-games/editor-browser/dist/index.js +2 -0
  155. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  156. package/node_modules/@fps-games/editor-browser/dist/local-editor-inspector-clipboard.js.map +1 -1
  157. package/node_modules/@fps-games/editor-browser/dist/local-editor-inspector-groups.js.map +1 -1
  158. package/node_modules/@fps-games/editor-browser/dist/local-editor-rendering-actions.js.map +1 -1
  159. package/node_modules/@fps-games/editor-browser/dist/local-editor-root-ownership.js.map +1 -1
  160. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js.map +1 -1
  161. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-context-menu.js.map +1 -1
  162. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-dock-panel.js.map +1 -1
  163. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-actions.js.map +1 -1
  164. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-attach-dialog.js.map +1 -1
  165. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-auto-scroll.js.map +1 -1
  166. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-command-adapter.js.map +1 -1
  167. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts +2 -1
  168. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts.map +1 -1
  169. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js +260 -94
  170. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js.map +1 -1
  171. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-drag-policy.js.map +1 -1
  172. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-projection.d.ts +7 -0
  173. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-projection.d.ts.map +1 -0
  174. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-projection.js +186 -0
  175. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-projection.js.map +1 -0
  176. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.d.ts +2 -2
  177. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.d.ts.map +1 -1
  178. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.js +14 -8
  179. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.js.map +1 -1
  180. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.d.ts.map +1 -1
  181. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.js +23 -7
  182. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.js.map +1 -1
  183. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js.map +1 -1
  184. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
  185. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
  186. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +6 -0
  187. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
  188. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.d.ts +3 -0
  189. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.d.ts.map +1 -1
  190. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.js +60 -13
  191. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.js.map +1 -1
  192. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-modal-dialog.js.map +1 -1
  193. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panel-registry.js.map +1 -1
  194. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  195. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-plugin-panel.js.map +1 -1
  196. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js.map +1 -1
  197. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-primitives.js.map +1 -1
  198. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-shared.js.map +1 -1
  199. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-shortcuts.js.map +1 -1
  200. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.d.ts +24 -0
  201. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.d.ts.map +1 -0
  202. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.js +69 -0
  203. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.js.map +1 -0
  204. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-structured-drag-auto-scroll.js.map +1 -1
  205. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-structured-drag-policy.js.map +1 -1
  206. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-structured-drag-preview.js.map +1 -1
  207. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-structured-drag-session.js.map +1 -1
  208. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-theme.js.map +1 -1
  209. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-tooltip.js.map +1 -1
  210. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +58 -14
  211. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  212. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  213. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js.map +1 -1
  214. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +1 -1
  215. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  216. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +196 -11
  217. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  218. package/node_modules/@fps-games/editor-browser/dist/plugin-contributions.js.map +1 -1
  219. package/node_modules/@fps-games/editor-browser/dist/runtime-camera-debug-panel.js.map +1 -1
  220. package/node_modules/@fps-games/editor-browser/dist/runtime-debug-panel-shell.js.map +1 -1
  221. package/node_modules/@fps-games/editor-browser/dist/runtime-lighting-debug-panel.js.map +1 -1
  222. package/node_modules/@fps-games/editor-browser/package.json +4 -4
  223. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js.map +1 -1
  224. package/node_modules/@fps-games/editor-core/dist/agent-interaction.js.map +1 -1
  225. package/node_modules/@fps-games/editor-core/dist/authoring-source.js.map +1 -1
  226. package/node_modules/@fps-games/editor-core/dist/document-adapter.js.map +1 -1
  227. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js.map +1 -1
  228. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts +9 -1
  229. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts.map +1 -1
  230. package/node_modules/@fps-games/editor-core/dist/editor-session.js +18 -0
  231. package/node_modules/@fps-games/editor-core/dist/editor-session.js.map +1 -1
  232. package/node_modules/@fps-games/editor-core/dist/events.d.ts +1 -1
  233. package/node_modules/@fps-games/editor-core/dist/events.d.ts.map +1 -1
  234. package/node_modules/@fps-games/editor-core/dist/events.js.map +1 -1
  235. package/node_modules/@fps-games/editor-core/dist/field-schema/index.js.map +1 -1
  236. package/node_modules/@fps-games/editor-core/dist/field-schema/resolver.js.map +1 -1
  237. package/node_modules/@fps-games/editor-core/dist/field-schema/schema.js.map +1 -1
  238. package/node_modules/@fps-games/editor-core/dist/field-schema/types.js.map +1 -1
  239. package/node_modules/@fps-games/editor-core/dist/field-schema/validators.js.map +1 -1
  240. package/node_modules/@fps-games/editor-core/dist/host-services.js.map +1 -1
  241. package/node_modules/@fps-games/editor-core/dist/index.js.map +1 -1
  242. package/node_modules/@fps-games/editor-core/dist/inspector.js.map +1 -1
  243. package/node_modules/@fps-games/editor-core/dist/lifecycle.js.map +1 -1
  244. package/node_modules/@fps-games/editor-core/dist/marker-graph.js.map +1 -1
  245. package/node_modules/@fps-games/editor-core/dist/scene-graph.js.map +1 -1
  246. package/node_modules/@fps-games/editor-core/dist/scene-view-input.js.map +1 -1
  247. package/node_modules/@fps-games/editor-core/dist/selection-strategy.js.map +1 -1
  248. package/node_modules/@fps-games/editor-core/dist/serialized-object.js.map +1 -1
  249. package/node_modules/@fps-games/editor-core/dist/transform-command.js.map +1 -1
  250. package/node_modules/@fps-games/editor-core/dist/transform-gizmo.js.map +1 -1
  251. package/node_modules/@fps-games/editor-core/dist/transform-operation-policy.js.map +1 -1
  252. package/node_modules/@fps-games/editor-core/dist/transform-operations.js.map +1 -1
  253. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -1
  254. package/node_modules/@fps-games/editor-core/package.json +6 -6
  255. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js.map +1 -1
  256. package/node_modules/@fps-games/editor-forge-play/dist/index.js.map +1 -1
  257. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  258. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-bridge/drop-cache.js.map +1 -1
  259. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-bridge/index.js.map +1 -1
  260. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-bridge/payload.d.ts.map +1 -1
  261. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-bridge/payload.js +28 -5
  262. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-bridge/payload.js.map +1 -1
  263. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-bridge/types.d.ts +1 -0
  264. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-bridge/types.d.ts.map +1 -1
  265. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-bridge/types.js.map +1 -1
  266. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/config.js.map +1 -1
  267. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js.map +1 -1
  268. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js.map +1 -1
  269. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/managed-facade.js.map +1 -1
  270. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/manager-core.d.ts.map +1 -1
  271. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/manager-core.js +13 -1
  272. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/manager-core.js.map +1 -1
  273. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/metadata.js.map +1 -1
  274. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/node.js.map +1 -1
  275. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.d.ts +1 -0
  276. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.d.ts.map +1 -1
  277. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.js +58 -23
  278. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.js.map +1 -1
  279. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/types.js.map +1 -1
  280. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js.map +1 -1
  281. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/document.js.map +1 -1
  282. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js.map +1 -1
  283. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/types.js.map +1 -1
  284. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/document.js.map +1 -1
  285. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/identity.js.map +1 -1
  286. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/index.js.map +1 -1
  287. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/managed-runtime-instance.js.map +1 -1
  288. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/placement.js.map +1 -1
  289. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/runtime-scene.js.map +1 -1
  290. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/types.js.map +1 -1
  291. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-registration/index.js.map +1 -1
  292. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-registration/result.d.ts.map +1 -1
  293. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-registration/result.js +3 -0
  294. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-registration/result.js.map +1 -1
  295. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-registration/transport.js.map +1 -1
  296. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-registration/types.d.ts +1 -0
  297. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-registration/types.d.ts.map +1 -1
  298. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-registration/types.js.map +1 -1
  299. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-registration/workflow.d.ts +1 -0
  300. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-registration/workflow.d.ts.map +1 -1
  301. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-registration/workflow.js +7 -1
  302. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-registration/workflow.js.map +1 -1
  303. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring/constants.js.map +1 -1
  304. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring/drift.js.map +1 -1
  305. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring/index.js.map +1 -1
  306. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring/runtime-transform-patch.js.map +1 -1
  307. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring/source.js.map +1 -1
  308. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-client/client.js.map +1 -1
  309. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-client/index.js.map +1 -1
  310. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-client/types.js.map +1 -1
  311. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js.map +1 -1
  312. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/index.js.map +1 -1
  313. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/payload.js.map +1 -1
  314. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/response.js.map +1 -1
  315. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js.map +1 -1
  316. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.js.map +1 -1
  317. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/adapter-dispatcher.js.map +1 -1
  318. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/index.js.map +1 -1
  319. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/payload.js.map +1 -1
  320. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/project-asset-adapter.js.map +1 -1
  321. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.js.map +1 -1
  322. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/readers.js.map +1 -1
  323. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/types.js.map +1 -1
  324. package/node_modules/@fps-games/editor-playable-sdk/dist/camera-debug/binding.js.map +1 -1
  325. package/node_modules/@fps-games/editor-playable-sdk/dist/camera-debug/fields.js.map +1 -1
  326. package/node_modules/@fps-games/editor-playable-sdk/dist/camera-debug/index.js.map +1 -1
  327. package/node_modules/@fps-games/editor-playable-sdk/dist/camera-debug/math.js.map +1 -1
  328. package/node_modules/@fps-games/editor-playable-sdk/dist/camera-debug/pan.js.map +1 -1
  329. package/node_modules/@fps-games/editor-playable-sdk/dist/camera-debug/panel-format.js.map +1 -1
  330. package/node_modules/@fps-games/editor-playable-sdk/dist/camera-debug/panel-state.js.map +1 -1
  331. package/node_modules/@fps-games/editor-playable-sdk/dist/camera-debug/panel-storage.js.map +1 -1
  332. package/node_modules/@fps-games/editor-playable-sdk/dist/camera-debug/panel-text.js.map +1 -1
  333. package/node_modules/@fps-games/editor-playable-sdk/dist/camera-debug/rig.js.map +1 -1
  334. package/node_modules/@fps-games/editor-playable-sdk/dist/camera-debug/save-patch.js.map +1 -1
  335. package/node_modules/@fps-games/editor-playable-sdk/dist/camera-debug/snapshot.js.map +1 -1
  336. package/node_modules/@fps-games/editor-playable-sdk/dist/camera-debug/types.js.map +1 -1
  337. package/node_modules/@fps-games/editor-playable-sdk/dist/commands/index.js.map +1 -1
  338. package/node_modules/@fps-games/editor-playable-sdk/dist/commands/transform.js.map +1 -1
  339. package/node_modules/@fps-games/editor-playable-sdk/dist/commands/types.js.map +1 -1
  340. package/node_modules/@fps-games/editor-playable-sdk/dist/core-contracts/index.js.map +1 -1
  341. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js.map +1 -1
  342. package/node_modules/@fps-games/editor-playable-sdk/dist/document/index.js.map +1 -1
  343. package/node_modules/@fps-games/editor-playable-sdk/dist/document/types.js.map +1 -1
  344. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/index.js.map +1 -1
  345. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/resolver.js.map +1 -1
  346. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/schema.js.map +1 -1
  347. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/types.js.map +1 -1
  348. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/validators.js.map +1 -1
  349. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
  350. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/camera-section.js.map +1 -1
  351. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-property.js.map +1 -1
  352. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.js.map +1 -1
  353. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/format.js.map +1 -1
  354. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/index.js.map +1 -1
  355. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/light-fields.js.map +1 -1
  356. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/light-sections.js.map +1 -1
  357. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/marker-section.js.map +1 -1
  358. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/object-assembly.js.map +1 -1
  359. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/readonly.js.map +1 -1
  360. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/runtime-sections.js.map +1 -1
  361. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/runtime-summary.js.map +1 -1
  362. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/runtime.js.map +1 -1
  363. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/safe-value.js.map +1 -1
  364. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/types.js.map +1 -1
  365. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/validation.js.map +1 -1
  366. package/node_modules/@fps-games/editor-playable-sdk/dist/internal/local-harness.js.map +1 -1
  367. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/binding.js.map +1 -1
  368. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/fields.js.map +1 -1
  369. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/index.js.map +1 -1
  370. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/math.js.map +1 -1
  371. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/save-patch.js.map +1 -1
  372. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/snapshot.js.map +1 -1
  373. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/storage.js.map +1 -1
  374. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/text.js.map +1 -1
  375. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/types.js.map +1 -1
  376. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-preview/index.js.map +1 -1
  377. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-preview/math.js.map +1 -1
  378. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-preview/profile.js.map +1 -1
  379. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-preview/types.js.map +1 -1
  380. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js.map +1 -1
  381. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.js.map +1 -1
  382. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts +2 -0
  383. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts.map +1 -1
  384. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js +5 -0
  385. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js.map +1 -1
  386. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js.map +1 -1
  387. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts +1 -1
  388. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts.map +1 -1
  389. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js.map +1 -1
  390. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js.map +1 -1
  391. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/loading-overlay.js.map +1 -1
  392. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/project-asset-commands.d.ts +18 -0
  393. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/project-asset-commands.d.ts.map +1 -1
  394. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/project-asset-commands.js +60 -1
  395. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/project-asset-commands.js.map +1 -1
  396. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/timing.js.map +1 -1
  397. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.js.map +1 -1
  398. package/node_modules/@fps-games/editor-playable-sdk/dist/marker-scene/facade.js.map +1 -1
  399. package/node_modules/@fps-games/editor-playable-sdk/dist/marker-scene/game-objects.js.map +1 -1
  400. package/node_modules/@fps-games/editor-playable-sdk/dist/marker-scene/geometry.js.map +1 -1
  401. package/node_modules/@fps-games/editor-playable-sdk/dist/marker-scene/index.js.map +1 -1
  402. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js.map +1 -1
  403. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js.map +1 -1
  404. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/default-assets.js.map +1 -1
  405. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/document-assets.d.ts.map +1 -1
  406. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/document-assets.js +28 -2
  407. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/document-assets.js.map +1 -1
  408. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/duplicate.js.map +1 -1
  409. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/index.js.map +1 -1
  410. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js.map +1 -1
  411. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/paths.js.map +1 -1
  412. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/preview.js.map +1 -1
  413. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/profile.js.map +1 -1
  414. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/reimport.d.ts.map +1 -1
  415. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/reimport.js +26 -9
  416. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/reimport.js.map +1 -1
  417. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/resolver.js.map +1 -1
  418. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js.map +1 -1
  419. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts.map +1 -1
  420. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js +0 -3
  421. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js.map +1 -1
  422. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/text.js.map +1 -1
  423. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/types.d.ts +8 -1
  424. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/types.d.ts.map +1 -1
  425. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/types.js.map +1 -1
  426. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.js.map +1 -1
  427. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/index.js.map +1 -1
  428. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/json-field.js.map +1 -1
  429. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/reducer.js.map +1 -1
  430. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/rendering-alpha-index.js.map +1 -1
  431. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/transform.js.map +1 -1
  432. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/types.js.map +1 -1
  433. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts +1 -1
  434. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts.map +1 -1
  435. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js +18 -1
  436. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js.map +1 -1
  437. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/index.js.map +1 -1
  438. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/types.d.ts +2 -0
  439. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/types.d.ts.map +1 -1
  440. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/types.js.map +1 -1
  441. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/action-patches.js.map +1 -1
  442. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/assets.js.map +1 -1
  443. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/index.js.map +1 -1
  444. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js.map +1 -1
  445. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/projection.js.map +1 -1
  446. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/shadow-inspector.js.map +1 -1
  447. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/source-structure-inspector.js.map +1 -1
  448. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js.map +1 -1
  449. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/structure.js.map +1 -1
  450. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/types.js.map +1 -1
  451. package/node_modules/@fps-games/editor-playable-sdk/dist/product/asset-manager.js.map +1 -1
  452. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal-scene-feature.js.map +1 -1
  453. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js.map +1 -1
  454. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js.map +1 -1
  455. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts +1 -0
  456. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts.map +1 -1
  457. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js +3 -1
  458. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js.map +1 -1
  459. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js.map +1 -1
  460. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js.map +1 -1
  461. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-asset-actions.js.map +1 -1
  462. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js.map +1 -1
  463. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/draft.js.map +1 -1
  464. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/index.js.map +1 -1
  465. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js.map +1 -1
  466. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/route.js.map +1 -1
  467. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.js.map +1 -1
  468. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js.map +1 -1
  469. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/import-plan.js.map +1 -1
  470. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/index.js.map +1 -1
  471. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.js.map +1 -1
  472. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/types.js.map +1 -1
  473. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.js +13 -1
  474. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.js.map +1 -1
  475. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/index.js.map +1 -1
  476. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/types.js.map +1 -1
  477. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/validation.js.map +1 -1
  478. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/artifacts.js.map +1 -1
  479. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
  480. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/companion-configs.js.map +1 -1
  481. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/driver.js.map +1 -1
  482. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/index.js.map +1 -1
  483. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/protocol.js.map +1 -1
  484. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.js.map +1 -1
  485. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/validation.js.map +1 -1
  486. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/descriptors.js.map +1 -1
  487. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/index.js.map +1 -1
  488. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/inspector.js.map +1 -1
  489. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/object.js.map +1 -1
  490. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/patch.js.map +1 -1
  491. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/types.js.map +1 -1
  492. package/node_modules/@fps-games/editor-playable-sdk/dist/session/classification.js.map +1 -1
  493. package/node_modules/@fps-games/editor-playable-sdk/dist/session/hierarchy-facade.js.map +1 -1
  494. package/node_modules/@fps-games/editor-playable-sdk/dist/session/hierarchy.js.map +1 -1
  495. package/node_modules/@fps-games/editor-playable-sdk/dist/session/identity.js.map +1 -1
  496. package/node_modules/@fps-games/editor-playable-sdk/dist/session/index.js.map +1 -1
  497. package/node_modules/@fps-games/editor-playable-sdk/dist/session/object-command-facade.js.map +1 -1
  498. package/node_modules/@fps-games/editor-playable-sdk/dist/session/patches.js.map +1 -1
  499. package/node_modules/@fps-games/editor-playable-sdk/dist/session/property-patches.js.map +1 -1
  500. package/node_modules/@fps-games/editor-playable-sdk/dist/session/reducer-core.js.map +1 -1
  501. package/node_modules/@fps-games/editor-playable-sdk/dist/session/system-defaults.js.map +1 -1
  502. package/node_modules/@fps-games/editor-playable-sdk/dist/session/transform.js.map +1 -1
  503. package/node_modules/@fps-games/editor-playable-sdk/dist/session/types.js.map +1 -1
  504. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/index.js.map +1 -1
  505. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/resolver.js.map +1 -1
  506. package/node_modules/@fps-games/editor-playable-sdk/dist/shared/http.js.map +1 -1
  507. package/node_modules/@fps-games/editor-playable-sdk/dist/shared/json.js.map +1 -1
  508. package/node_modules/@fps-games/editor-playable-sdk/dist/static-shadows/artifact.js.map +1 -1
  509. package/node_modules/@fps-games/editor-playable-sdk/dist/static-shadows/index.js.map +1 -1
  510. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/host.js.map +1 -1
  511. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/index.js.map +1 -1
  512. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
  513. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/report.js.map +1 -1
  514. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.js.map +1 -1
  515. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/asset-authoring.js.map +1 -1
  516. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/authoring-http.d.ts +1 -0
  517. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/authoring-http.d.ts.map +1 -1
  518. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/authoring-http.js +1 -0
  519. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/authoring-http.js.map +1 -1
  520. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/build-info-core.js.map +1 -1
  521. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/build-info-node.js.map +1 -1
  522. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.d.ts +6 -5
  523. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.d.ts.map +1 -1
  524. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js.map +1 -1
  525. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  526. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/module-invalidation.d.ts +3 -1
  527. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/module-invalidation.d.ts.map +1 -1
  528. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/module-invalidation.js +37 -8
  529. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/module-invalidation.js.map +1 -1
  530. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/path-write-coordinator.js.map +1 -1
  531. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.d.ts +4 -3
  532. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.d.ts.map +1 -1
  533. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js +14 -1
  534. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js.map +1 -1
  535. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts +5 -4
  536. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts.map +1 -1
  537. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js.map +1 -1
  538. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-asset-authoring.d.ts +3 -2
  539. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-asset-authoring.d.ts.map +1 -1
  540. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-asset-authoring.js +2 -11
  541. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-asset-authoring.js.map +1 -1
  542. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts +8 -7
  543. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
  544. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +84 -6
  545. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
  546. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-rendering-authoring.d.ts +2 -1
  547. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-rendering-authoring.d.ts.map +1 -1
  548. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-rendering-authoring.js.map +1 -1
  549. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-scene-authoring.d.ts +4 -3
  550. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-scene-authoring.d.ts.map +1 -1
  551. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-scene-authoring.js +1 -4
  552. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-scene-authoring.js.map +1 -1
  553. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js.map +1 -1
  554. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts +0 -33
  555. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts.map +1 -1
  556. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.js.map +1 -1
  557. package/node_modules/@fps-games/editor-playable-sdk/package.json +9 -6
  558. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js.map +1 -1
  559. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js.map +1 -1
  560. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +1 -1
  561. package/node_modules/@fps-games/editor-protocol/dist/index.js.map +1 -1
  562. package/node_modules/@fps-games/editor-protocol/dist/marker-graph.js.map +1 -1
  563. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  564. package/node_modules/@fps-games/editor-tooling/dist/contributions.js.map +1 -1
  565. package/node_modules/@fps-games/editor-tooling/dist/data-object.js.map +1 -1
  566. package/node_modules/@fps-games/editor-tooling/dist/index.js.map +1 -1
  567. package/node_modules/@fps-games/editor-tooling/dist/migration.js.map +1 -1
  568. package/node_modules/@fps-games/editor-tooling/dist/package-metadata-node.js.map +1 -1
  569. package/node_modules/@fps-games/editor-tooling/dist/vite.js.map +1 -1
  570. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  571. package/node_modules/@fps-games/playable-assets/dist/identity.js.map +1 -1
  572. package/node_modules/@fps-games/playable-assets/dist/index.d.ts +1 -0
  573. package/node_modules/@fps-games/playable-assets/dist/index.d.ts.map +1 -1
  574. package/node_modules/@fps-games/playable-assets/dist/index.js +1 -0
  575. package/node_modules/@fps-games/playable-assets/dist/index.js.map +1 -1
  576. package/node_modules/@fps-games/playable-assets/dist/portable-path.d.ts +2 -0
  577. package/node_modules/@fps-games/playable-assets/dist/portable-path.d.ts.map +1 -0
  578. package/node_modules/@fps-games/playable-assets/dist/portable-path.js +25 -0
  579. package/node_modules/@fps-games/playable-assets/dist/portable-path.js.map +1 -0
  580. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  581. package/node_modules/@fps-games/playable-contracts/dist/index.js.map +1 -1
  582. package/node_modules/@fps-games/playable-contracts/dist/marker-graph-validation.js.map +1 -1
  583. package/node_modules/@fps-games/playable-contracts/dist/marker-graph.js.map +1 -1
  584. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  585. package/node_modules/@fps-games/playable-rendering/dist/index.js.map +1 -1
  586. package/node_modules/@fps-games/playable-rendering/dist/rendering-profile-authoring.js.map +1 -1
  587. package/node_modules/@fps-games/playable-rendering/dist/rendering-profile-types.js.map +1 -1
  588. package/node_modules/@fps-games/playable-rendering/dist/rendering-profile-validation.js.map +1 -1
  589. package/node_modules/@fps-games/playable-rendering/dist/rendering-profile-values.js.map +1 -1
  590. package/node_modules/@fps-games/playable-rendering/dist/rendering-profile.js.map +1 -1
  591. package/node_modules/@fps-games/playable-rendering/dist/runtime.js.map +1 -1
  592. package/node_modules/@fps-games/playable-rendering/dist/shadow-quality.js.map +1 -1
  593. package/node_modules/@fps-games/playable-rendering/dist/shadow-runtime.js.map +1 -1
  594. package/node_modules/@fps-games/playable-rendering/dist/shadow-settings.js.map +1 -1
  595. package/node_modules/@fps-games/playable-rendering/dist/shadow-types.js.map +1 -1
  596. package/node_modules/@fps-games/playable-rendering/dist/shadow-validation.js.map +1 -1
  597. package/node_modules/@fps-games/playable-rendering/dist/value.js.map +1 -1
  598. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  599. package/node_modules/@fps-games/playable-runtime/dist/compiled-scene-data.js.map +1 -1
  600. package/node_modules/@fps-games/playable-runtime/dist/index.js.map +1 -1
  601. package/node_modules/@fps-games/playable-runtime/dist/runtime-data.js.map +1 -1
  602. package/node_modules/@fps-games/playable-runtime/dist/runtime.js.map +1 -1
  603. package/node_modules/@fps-games/playable-runtime/dist/standard-plugins.js.map +1 -1
  604. package/node_modules/@fps-games/playable-runtime/dist/tokens.js.map +1 -1
  605. package/node_modules/@fps-games/playable-runtime/dist/types.js.map +1 -1
  606. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  607. package/node_modules/@fps-games/playable-runtime-data/dist/index.js.map +1 -1
  608. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  609. package/node_modules/@fps-games/playable-scene/dist/index.js.map +1 -1
  610. package/node_modules/@fps-games/playable-scene/dist/transform-math.js.map +1 -1
  611. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  612. package/node_modules/@fps-games/plugin-api/dist/index.js.map +1 -1
  613. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  614. package/node_modules/@fps-games/plugin-assets/dist/reference.js.map +1 -1
  615. package/node_modules/@fps-games/plugin-assets/dist/runtime.js.map +1 -1
  616. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  617. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  618. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  619. package/node_modules/@fps-games/plugin-assets/package.json +5 -5
  620. package/node_modules/@fps-games/plugin-host/dist/index.js.map +1 -1
  621. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  622. package/node_modules/@fps-games/plugin-markers/dist/reference.js.map +1 -1
  623. package/node_modules/@fps-games/plugin-markers/dist/runtime.js.map +1 -1
  624. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  625. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  626. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  627. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  628. package/node_modules/@fps-games/plugin-materials/dist/reference.js.map +1 -1
  629. package/node_modules/@fps-games/plugin-materials/dist/runtime.js.map +1 -1
  630. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  631. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  632. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  633. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  634. package/node_modules/@fps-games/plugin-rendering/dist/reference.js.map +1 -1
  635. package/node_modules/@fps-games/plugin-rendering/dist/runtime.js.map +1 -1
  636. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  637. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  638. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  639. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  640. package/node_modules/@fps-games/plugin-scene/dist/reference.js.map +1 -1
  641. package/node_modules/@fps-games/plugin-scene/dist/runtime.js.map +1 -1
  642. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  643. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  644. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  645. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  646. package/node_modules/@fps-games/plugin-shadows/dist/reference.js.map +1 -1
  647. package/node_modules/@fps-games/plugin-shadows/dist/runtime.js.map +1 -1
  648. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  649. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  650. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  651. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  652. package/package.json +27 -19
@@ -1,6 +1,6 @@
1
1
  import { createEditorSession, FPS_EDITOR_ACTIVE_TOOL_CHANGED, FPS_EDITOR_DOCUMENT_CHANGED, FPS_EDITOR_HISTORY_CHANGED, FPS_EDITOR_SELECTION_CHANGED, createEditorAgentBridge, createInspectorRegistry, DEFAULT_EDITOR_TRANSFORM_OPERATION_SETTINGS, DEFAULT_EDITOR_VIEWPORT_TOOL_STATE, createEmptyEditorViewportSpatialOverlayState, cloneEditorTransformSnapshot as cloneCoreEditorTransformSnapshot, composeEditorTransformMatrix, editorTransformMatricesAlmostEqual, cloneEditorViewportToolState, cloneEditorViewportSpatialOverlayState, aggregateInspectorObjectsToMultiObject, createInspectorEditPayload, compareInspectorSections, computeEditorTransformActionTargets, mergeInspectorSections, isEditorTransformTrsSnapshot, normalizeEditorTransformConstraint, readEditorTransformPosition, resolveEditorSelectionCommand, validateSceneGraphDelete, validateSceneGraphDrop, validateSceneGraphGroupSelection, validateSceneGraphMove, validateSceneGraphRename, } from '@fps-games/editor-core';
2
2
  import {} from '@fps-games/editor-protocol';
3
- import { createLocalEditorBrowserUi, toTransformOperationPolicyStatusLabel, } from '@fps-games/editor-browser';
3
+ import { createLocalEditorBrowserUi, createLocalEditorActiveHierarchyScope, createLocalEditorHierarchyProjection, isLocalEditorHierarchyCommandPreconditionCurrent, resolveLocalEditorStatusDiagnostics, createLocalEditorSceneHierarchyScope, createLocalEditorPrefabStageHierarchyScope, toTransformOperationPolicyStatusLabel, } from '@fps-games/editor-browser';
4
4
  import { createLocalEditorHarnessPluginInspectorOptions } from './local-editor-plugin-inspector.js';
5
5
  import { registerLocalEditorHarnessLifecycleOperations, } from './internal/local-editor-lifecycle-operations.js';
6
6
  import { createLocalEditorPluginPanelState } from './local-editor-plugin-panel.js';
@@ -27,6 +27,70 @@ const EDITOR_WORLD_DISPOSE_BOUNDARY_DELAY_MS = 500;
27
27
  const RENDERING_ACTION_PROGRESS_MIN_VISIBLE_MS = 1000;
28
28
  const EMPTY_EDITOR_SELECTION = { selectedIds: [], activeId: null };
29
29
  const MARKER_RELATION_HIGHLIGHT_RENDER_REASON = 'marker-relation-highlight';
30
+ export function assertLocalEditorUpdatedAssetSnapshotFreshness(snapshot, input) {
31
+ if (snapshot?.assetId === input.assetId && snapshot.contentHash === input.expectedContentHash)
32
+ return;
33
+ const error = new Error('asset_update_snapshot_stale');
34
+ Object.assign(error, {
35
+ code: 'asset_update_snapshot_stale',
36
+ details: {
37
+ assetId: input.assetId,
38
+ expectedContentHash: input.expectedContentHash,
39
+ actualAssetId: snapshot?.assetId ?? null,
40
+ actualContentHash: snapshot?.contentHash ?? null,
41
+ },
42
+ });
43
+ throw error;
44
+ }
45
+ export function syncLocalEditorUpdatedAssetProjection(state, documentChanged, rebuild) {
46
+ if (!documentChanged && !state.pending)
47
+ return false;
48
+ state.pending = true;
49
+ rebuild();
50
+ state.pending = false;
51
+ return true;
52
+ }
53
+ export function applyLocalEditorUpdatedAssetRefresh(session, input) {
54
+ const sessionState = session.getState();
55
+ const callbackState = session.getState();
56
+ const persistedDocument = input.hydrateDocumentAssets(callbackState.persistedDocument, input.assets);
57
+ const workingDocument = input.hydrateDocumentAssets(callbackState.workingDocument, input.assets);
58
+ const compareDocuments = input.compareDocuments
59
+ ?? ((left, right) => JSON.stringify(left) === JSON.stringify(right));
60
+ const projectionChanged = !compareDocuments(sessionState.persistedDocument, persistedDocument)
61
+ || !compareDocuments(sessionState.workingDocument, workingDocument);
62
+ // Re-run diagnostics even for a document no-op so retries preserve unresolved
63
+ // binding warnings. The callback only receives cloned snapshots; its document
64
+ // output is ignored unless the asset projection itself changed.
65
+ const reconciliation = input.reconcileUpdatedAsset?.(workingDocument, { assetId: input.assetId }) ?? { document: workingDocument };
66
+ if (!projectionChanged) {
67
+ return {
68
+ changed: false,
69
+ workingDocument: sessionState.workingDocument,
70
+ selection: sessionState.selection,
71
+ reconciledBindingCount: 0,
72
+ warnings: reconciliation.warnings ?? [],
73
+ };
74
+ }
75
+ // Finish all fallible project-owned calculation before mutating the session.
76
+ session.rebaseExternalDocuments({ persistedDocument, workingDocument });
77
+ const result = session.dispatch({
78
+ type: 'document.replace',
79
+ label: 'Reconcile updated asset',
80
+ document: reconciliation.document,
81
+ projectionImpact: {
82
+ type: 'rebuild',
83
+ reason: 'asset-update',
84
+ },
85
+ });
86
+ return {
87
+ changed: true,
88
+ workingDocument: result.workingDocument,
89
+ selection: result.selection,
90
+ reconciledBindingCount: reconciliation.reconciledBindingCount ?? 0,
91
+ warnings: reconciliation.warnings ?? [],
92
+ };
93
+ }
30
94
  const PREFAB_STAGE_STUDIO_WORLD_APPEARANCE = {
31
95
  sky: {
32
96
  preset: 'atmospheric',
@@ -195,12 +259,16 @@ function createLocalEditorHarnessImplementation(options, construction) {
195
259
  scopeOperations: null,
196
260
  nextPrefabScopeRevision: 0,
197
261
  editorStateRevision: 0,
262
+ hierarchyProjectionRevision: 0,
263
+ hierarchyCommandDiagnostics: [],
264
+ hierarchyReconcileDiagnostics: [],
198
265
  sceneArtifactRevision: 0,
199
266
  busy: false,
200
267
  session: null,
201
268
  source: null,
202
269
  assets: [],
203
270
  assetFilter: '',
271
+ updatedAssetProjection: { pending: false },
204
272
  selectedAssetId: null,
205
273
  babylon: null,
206
274
  engine: null,
@@ -213,6 +281,8 @@ function createLocalEditorHarnessImplementation(options, construction) {
213
281
  overrides: {},
214
282
  isolatedObjectIds: [],
215
283
  },
284
+ previewVisibilityScopeId: 'scene',
285
+ previewVisibilityByScope: new Map(),
216
286
  markerOverlay: null,
217
287
  markerGraphVisibility: createDefaultMarkerGraphVisibilityState(),
218
288
  activeMarkerRelationId: null,
@@ -267,7 +337,10 @@ function createLocalEditorHarnessImplementation(options, construction) {
267
337
  agentBridgeTransport: null,
268
338
  agentBridgeStatus: createDisabledLocalEditorAgentBridgeTransportStatus(),
269
339
  };
340
+ state.previewVisibilityByScope.set(state.previewVisibilityScopeId, state.previewVisibility);
270
341
  const handleEditorSessionChange = (change) => {
342
+ if (change.documentChanged || change.selectionChanged)
343
+ advanceHierarchyProjectionRevision(state);
271
344
  void lifecycleController?.synchronizeDocumentState(change.dirty).catch(error => {
272
345
  console.error('[LocalEditorHarness] lifecycle document synchronization failed', error);
273
346
  });
@@ -324,6 +397,13 @@ function createLocalEditorHarnessImplementation(options, construction) {
324
397
  };
325
398
  let harness;
326
399
  let agentLifecycleController;
400
+ const acceptBrowserHierarchyCommandPrecondition = (precondition) => {
401
+ const hadCommandDiagnostics = state.hierarchyCommandDiagnostics.length > 0;
402
+ const accepted = acceptHierarchyCommandPrecondition(state, precondition);
403
+ if (accepted && hadCommandDiagnostics)
404
+ harness.render();
405
+ return accepted;
406
+ };
327
407
  const pluginInspector = createLocalEditorHarnessPluginInspectorOptions(options.pluginHost, options.inspector);
328
408
  const ui = createLocalEditorBrowserUi({
329
409
  root,
@@ -364,6 +444,12 @@ function createLocalEditorHarnessImplementation(options, construction) {
364
444
  harness.render();
365
445
  },
366
446
  onAssetAction: (input) => {
447
+ const hierarchyAction = input.actionId.startsWith('prefab.node.')
448
+ || input.hierarchyPrecondition !== undefined;
449
+ if (hierarchyAction && !acceptBrowserHierarchyCommandPrecondition(input.hierarchyPrecondition)) {
450
+ harness.render();
451
+ return;
452
+ }
367
453
  void runExclusive(state, harness.render, async () => {
368
454
  if (await handleBrowserAssetAction(state, options, input))
369
455
  harness.render();
@@ -375,14 +461,26 @@ function createLocalEditorHarnessImplementation(options, construction) {
375
461
  harness.render();
376
462
  });
377
463
  },
378
- onSelectPrefabStageItem: (itemId) => {
464
+ onSelectPrefabStageItem: (itemId, precondition) => {
465
+ if (!acceptBrowserHierarchyCommandPrecondition(precondition)) {
466
+ harness.render();
467
+ return;
468
+ }
379
469
  if (selectPrefabStageItemWithPreviewSync(state, options, itemId))
380
470
  harness.render();
381
471
  },
382
- onSelectHierarchyItem: (input) => {
472
+ onSelectHierarchyItem: (input, precondition) => {
473
+ if (!acceptBrowserHierarchyCommandPrecondition(precondition)) {
474
+ harness.render();
475
+ return;
476
+ }
383
477
  selectItem(state, options, input, harness.render);
384
478
  },
385
- onHierarchyItemEnabledChange: (input) => {
479
+ onHierarchyItemEnabledChange: (input, precondition) => {
480
+ if (!acceptBrowserHierarchyCommandPrecondition(precondition)) {
481
+ harness.render();
482
+ return;
483
+ }
386
484
  if (patchHierarchyItemEnabled(state, options, input))
387
485
  harness.render();
388
486
  },
@@ -394,35 +492,63 @@ function createLocalEditorHarnessImplementation(options, construction) {
394
492
  if (patchMarkerRelation(state, options, input))
395
493
  harness.render();
396
494
  },
397
- onSelectionCommand: (command) => {
495
+ onSelectionCommand: (command, precondition) => {
496
+ if (!acceptBrowserHierarchyCommandPrecondition(precondition)) {
497
+ harness.render();
498
+ return;
499
+ }
398
500
  dispatchSelectionCommand(state, options, command, harness.render);
399
501
  },
400
- onSceneGraphRename: (intent) => {
502
+ onSceneGraphRename: (intent, precondition) => {
503
+ if (!acceptBrowserHierarchyCommandPrecondition(precondition)) {
504
+ harness.render();
505
+ return;
506
+ }
401
507
  if (renameSceneGraphNode(state, options, intent))
402
508
  harness.render();
403
509
  },
404
- onSceneGraphCreateGroup: (intent) => {
510
+ onSceneGraphCreateGroup: (intent, precondition) => {
511
+ if (!acceptBrowserHierarchyCommandPrecondition(precondition)) {
512
+ harness.render();
513
+ return;
514
+ }
405
515
  if (createSceneGraphGroup(state, options, intent))
406
516
  harness.render();
407
517
  },
408
518
  onSceneGraphCreatePrimitive: options.documentAdapter.createSceneGraphCreatePrimitivePatch
409
- ? (intent) => {
519
+ ? (intent, precondition) => {
520
+ if (!acceptBrowserHierarchyCommandPrecondition(precondition)) {
521
+ harness.render();
522
+ return;
523
+ }
410
524
  if (createSceneGraphPrimitive(state, options, intent))
411
525
  harness.render();
412
526
  }
413
527
  : undefined,
414
528
  onSceneGraphCreateMarker: options.documentAdapter.createMarkerGraphPatch
415
- ? (intent) => {
529
+ ? (intent, precondition) => {
530
+ if (!acceptBrowserHierarchyCommandPrecondition(precondition)) {
531
+ harness.render();
532
+ return;
533
+ }
416
534
  if (createSceneGraphMarker(state, options, intent))
417
535
  harness.render();
418
536
  }
419
537
  : undefined,
420
- onSceneGraphDelete: (intent) => {
538
+ onSceneGraphDelete: (intent, precondition) => {
539
+ if (!acceptBrowserHierarchyCommandPrecondition(precondition)) {
540
+ harness.render();
541
+ return;
542
+ }
421
543
  if (deleteSceneGraphNodes(state, options, intent))
422
544
  harness.render();
423
545
  },
424
546
  onSceneGraphDuplicate: options.documentAdapter.createDuplicateSelectionPatch
425
- ? (intent) => {
547
+ ? (intent, precondition) => {
548
+ if (!acceptBrowserHierarchyCommandPrecondition(precondition)) {
549
+ harness.render();
550
+ return;
551
+ }
426
552
  if (duplicateSceneGraphNodes(state, options, {
427
553
  targetIds: intent.targetIds,
428
554
  activeId: intent.activeId ?? null,
@@ -430,23 +556,41 @@ function createLocalEditorHarnessImplementation(options, construction) {
430
556
  harness.render();
431
557
  }
432
558
  : undefined,
433
- onSceneGraphDrop: (intent) => {
559
+ onSceneGraphDrop: (intent, precondition) => {
560
+ if (!acceptBrowserHierarchyCommandPrecondition(precondition)) {
561
+ harness.render();
562
+ return;
563
+ }
434
564
  if (dropSceneGraphNode(state, options, intent))
435
565
  harness.render();
436
566
  },
437
- onSceneGraphMove: (intent) => {
567
+ onSceneGraphMove: (intent, precondition) => {
568
+ if (!acceptBrowserHierarchyCommandPrecondition(precondition)) {
569
+ harness.render();
570
+ return { ok: false, reason: 'Hierarchy projection is stale.' };
571
+ }
438
572
  const result = moveSceneGraphNodes(state, options, intent);
439
573
  if (result)
440
574
  harness.render();
441
575
  return result ?? { ok: false, reason: 'Editor is not ready.' };
442
576
  },
443
- onSceneGraphGroupSelection: (intent) => {
577
+ onSceneGraphGroupSelection: (intent, precondition) => {
578
+ if (!acceptBrowserHierarchyCommandPrecondition(precondition)) {
579
+ harness.render();
580
+ return;
581
+ }
444
582
  if (groupSceneGraphSelection(state, options, intent))
445
583
  harness.render();
446
584
  },
447
- onContextAction: (action) => {
585
+ onContextAction: (action, precondition) => {
586
+ if (action.region === 'hierarchy' && !acceptBrowserHierarchyCommandPrecondition(precondition)) {
587
+ harness.render();
588
+ return;
589
+ }
448
590
  if (action.region === 'hierarchy' && action.action === 'custom') {
449
- const result = runHierarchyCustomContextAction(state, options, action);
591
+ if (!precondition)
592
+ return;
593
+ const result = runHierarchyCustomContextAction(state, options, action, precondition);
450
594
  if (isLocalEditorPromiseLike(result)) {
451
595
  void result.then(changed => {
452
596
  if (changed)
@@ -691,6 +835,7 @@ function createLocalEditorHarnessImplementation(options, construction) {
691
835
  onChange: handleEditorSessionChange,
692
836
  onChangeError: handleEditorSessionObserverError,
693
837
  });
838
+ advanceHierarchyProjectionRevision(state);
694
839
  try {
695
840
  attachLifecycleOwnedSessionAuthority();
696
841
  }
@@ -789,6 +934,7 @@ function createLocalEditorHarnessImplementation(options, construction) {
789
934
  };
790
935
  harness = {
791
936
  render() {
937
+ reconcileHierarchySelectionBeforeRender(state, options);
792
938
  syncViewportCameraState(state);
793
939
  syncViewportMeasurementState(state);
794
940
  syncViewportSpatialOverlay(state, options);
@@ -863,6 +1009,70 @@ function createLocalEditorHarnessImplementation(options, construction) {
863
1009
  };
864
1010
  }
865
1011
  },
1012
+ async refreshUpdatedAsset(input) {
1013
+ try {
1014
+ if (!state.session)
1015
+ throw new Error('editor_document_unavailable');
1016
+ if (!options.documentAdapter.hydrateDocumentAssets) {
1017
+ throw new Error('asset_update_hydration_unavailable');
1018
+ }
1019
+ if (!options.documentAdapter.resolveUpdatedAssetSnapshot) {
1020
+ throw new Error('asset_update_snapshot_verification_unavailable');
1021
+ }
1022
+ const assets = await options.persistenceAdapter.loadAssets();
1023
+ assertLocalEditorUpdatedAssetSnapshotFreshness(options.documentAdapter.resolveUpdatedAssetSnapshot(assets, { assetId: input.assetId }), input);
1024
+ const result = applyLocalEditorUpdatedAssetRefresh(state.session, {
1025
+ assetId: input.assetId,
1026
+ assets,
1027
+ hydrateDocumentAssets: options.documentAdapter.hydrateDocumentAssets,
1028
+ ...(options.documentAdapter.reconcileUpdatedAsset
1029
+ ? { reconcileUpdatedAsset: options.documentAdapter.reconcileUpdatedAsset }
1030
+ : {}),
1031
+ ...(options.documentAdapter.compareDocuments
1032
+ ? { compareDocuments: options.documentAdapter.compareDocuments }
1033
+ : {}),
1034
+ });
1035
+ state.assets = assets;
1036
+ clearArmedPlacement(state);
1037
+ syncLocalEditorUpdatedAssetProjection(state.updatedAssetProjection, result.changed, () => {
1038
+ rebuildProjectionFromDocument(state, options, result.workingDocument, result.selection);
1039
+ });
1040
+ state.summary = summarizeDocument(options, result.workingDocument, state.session.getSource());
1041
+ const warnings = result.warnings;
1042
+ const reconciledBindingCount = result.reconciledBindingCount;
1043
+ state.status = warnings.length > 0
1044
+ ? `Asset updated with ${warnings.length} warning${warnings.length === 1 ? '' : 's'}`
1045
+ : result.changed ? 'Asset updated' : 'Asset metadata already current';
1046
+ state.statusTone = warnings.length > 0 ? 'warning' : 'success';
1047
+ state.statusToneStatus = state.status;
1048
+ state.statusDetails = warnings.map(warning => warning.code).join(', ');
1049
+ harness.render();
1050
+ return {
1051
+ ok: true,
1052
+ assetId: input.assetId,
1053
+ assetCount: assets.length,
1054
+ reconciledBindingCount,
1055
+ warnings,
1056
+ status: state.status,
1057
+ };
1058
+ }
1059
+ catch (error) {
1060
+ state.status = 'Asset update refresh failed';
1061
+ state.statusTone = 'error';
1062
+ state.statusToneStatus = state.status;
1063
+ state.statusDetails = error instanceof Error ? error.message : String(error);
1064
+ harness.render();
1065
+ return {
1066
+ ok: false,
1067
+ assetId: input.assetId,
1068
+ assetCount: state.assets.length,
1069
+ reconciledBindingCount: 0,
1070
+ warnings: [],
1071
+ status: state.status,
1072
+ error: state.statusDetails,
1073
+ };
1074
+ }
1075
+ },
866
1076
  createAssetFromAssetId(assetId, createOptions) {
867
1077
  const result = addAssetToDocument(state, options, assetId, createOptions);
868
1078
  harness.render();
@@ -935,6 +1145,7 @@ function createLocalEditorHarnessImplementation(options, construction) {
935
1145
  onChange: handleEditorSessionChange,
936
1146
  onChangeError: handleEditorSessionObserverError,
937
1147
  });
1148
+ advanceHierarchyProjectionRevision(state);
938
1149
  try {
939
1150
  attachLifecycleOwnedSessionAuthority();
940
1151
  }
@@ -1028,10 +1239,10 @@ function createLocalEditorHarnessImplementation(options, construction) {
1028
1239
  }),
1029
1240
  selectPrefabStageItem: itemId => selectPrefabStageItemWithPreviewSync(state, options, itemId),
1030
1241
  runPrefabStageAssetAction: input => patchBrowserAssetAction(state, options, input),
1031
- getHierarchy: () => createUiState(state, options).hierarchy,
1242
+ getHierarchyProjection: () => createUiState(state, options).hierarchyProjection ?? null,
1243
+ getStatusDiagnostics: () => createUiState(state, options).statusDiagnostics ?? [],
1032
1244
  dispatchSelectionCommand: (command, shouldRenderUi = false) => dispatchSelectionCommand(state, options, command, shouldRenderUi ? () => harness.render() : undefined),
1033
1245
  focusProjectionNode: objectId => frameViewportProjectionNode(state, objectId),
1034
- focusSelectedProjection: () => frameSelectedViewportProjection(state, options),
1035
1246
  syncViewportCameraState: () => syncViewportCameraState(state),
1036
1247
  requestSceneFrame: reason => requestEditorSceneFrame(state, reason),
1037
1248
  cloneTransformSnapshot: transform => cloneEditorTransformSnapshot(transform),
@@ -2109,7 +2320,9 @@ function clearPrefabStageForEditorTeardown(state) {
2109
2320
  const stage = state.prefabStage;
2110
2321
  if (!stage)
2111
2322
  return;
2323
+ switchPreviewVisibilityScope(state, 'scene');
2112
2324
  state.prefabStage = null;
2325
+ advanceHierarchyProjectionRevision(state);
2113
2326
  setGridVisibleForEditorContext(state, stage.restoreGridVisible, 'prefab-stage-editor-teardown-grid');
2114
2327
  state.sceneCameraPreviewEnabled = stage.restoreSceneCameraPreviewEnabled;
2115
2328
  if (!stage.restoreSceneCameraPreviewEnabled)
@@ -2404,7 +2617,7 @@ function createBrowserContextForCustomAction(state, options, action) {
2404
2617
  activeId: action.activeId,
2405
2618
  };
2406
2619
  }
2407
- function runHierarchyCustomContextAction(state, options, action) {
2620
+ function runHierarchyCustomContextAction(state, options, action, precondition) {
2408
2621
  const browserContext = createBrowserContextForCustomAction(state, options, action);
2409
2622
  const context = browserContext
2410
2623
  ? createHarnessHierarchyContextActionContext(state, options, browserContext, action.payload)
@@ -2415,14 +2628,21 @@ function runHierarchyCustomContextAction(state, options, action) {
2415
2628
  .find(candidate => candidate.id === action.id);
2416
2629
  if (!registration)
2417
2630
  return false;
2631
+ const applyIfCurrent = (value) => {
2632
+ const hadCommandDiagnostics = state.hierarchyCommandDiagnostics.length > 0;
2633
+ if (!acceptHierarchyCommandPrecondition(state, precondition))
2634
+ return true;
2635
+ return applyHierarchyContextActionResult(state, options, value, registration.label)
2636
+ || hadCommandDiagnostics;
2637
+ };
2418
2638
  try {
2419
2639
  const result = registration.run(context);
2420
2640
  if (isLocalEditorPromiseLike(result)) {
2421
2641
  return Promise.resolve(result)
2422
- .then(value => applyHierarchyContextActionResult(state, options, value, registration.label))
2642
+ .then(applyIfCurrent)
2423
2643
  .catch(error => reportHierarchyContextActionError(state, registration.label, error));
2424
2644
  }
2425
- return applyHierarchyContextActionResult(state, options, result, registration.label);
2645
+ return applyIfCurrent(result);
2426
2646
  }
2427
2647
  catch (error) {
2428
2648
  return reportHierarchyContextActionError(state, registration.label, error);
@@ -2584,6 +2804,64 @@ function dispatchSelectionCommand(state, options, command, renderUi) {
2584
2804
  }
2585
2805
  return true;
2586
2806
  }
2807
+ function acceptHierarchyCommandPrecondition(state, precondition) {
2808
+ const documentRevision = state.session?.getState({ cloneDocuments: false }).documentRevision ?? 0;
2809
+ const scopeId = state.prefabStage
2810
+ ? `prefab-stage:${state.prefabStage.descriptor.assetId}`
2811
+ : 'scene';
2812
+ const expected = {
2813
+ scopeId,
2814
+ documentRevision,
2815
+ projectionRevision: state.hierarchyProjectionRevision,
2816
+ };
2817
+ if (!precondition) {
2818
+ state.hierarchyCommandDiagnostics = [{
2819
+ code: 'hierarchy-command-precondition-missing',
2820
+ severity: 'error',
2821
+ source: 'hierarchy-command',
2822
+ message: `Hierarchy command rejected because no projection revision was provided (expected ${formatHierarchyRevision(expected)}).`,
2823
+ ...expected,
2824
+ details: {
2825
+ expectedScopeId: expected.scopeId,
2826
+ expectedDocumentRevision: expected.documentRevision,
2827
+ expectedProjectionRevision: expected.projectionRevision,
2828
+ },
2829
+ }];
2830
+ return false;
2831
+ }
2832
+ const accepted = isLocalEditorHierarchyCommandPreconditionCurrent(precondition, expected);
2833
+ if (accepted) {
2834
+ state.hierarchyCommandDiagnostics = [];
2835
+ return true;
2836
+ }
2837
+ const message = `Hierarchy command rejected because its projection is stale (expected ${formatHierarchyRevision(expected)}, received ${formatHierarchyRevision(precondition)}).`;
2838
+ state.hierarchyCommandDiagnostics = [{
2839
+ code: 'hierarchy-command-stale',
2840
+ severity: 'error',
2841
+ source: 'hierarchy-command',
2842
+ message,
2843
+ scopeId,
2844
+ documentRevision,
2845
+ projectionRevision: state.hierarchyProjectionRevision,
2846
+ details: {
2847
+ expectedScopeId: expected.scopeId,
2848
+ expectedDocumentRevision: expected.documentRevision,
2849
+ expectedProjectionRevision: expected.projectionRevision,
2850
+ receivedScopeId: precondition.scopeId,
2851
+ receivedDocumentRevision: precondition.documentRevision,
2852
+ receivedProjectionRevision: precondition.projectionRevision,
2853
+ },
2854
+ }];
2855
+ return false;
2856
+ }
2857
+ function formatHierarchyRevision(precondition) {
2858
+ return `${precondition.scopeId}@document:${precondition.documentRevision}/projection:${precondition.projectionRevision}`;
2859
+ }
2860
+ function advanceHierarchyProjectionRevision(state) {
2861
+ state.hierarchyProjectionRevision += 1;
2862
+ state.hierarchyCommandDiagnostics = [];
2863
+ state.hierarchyReconcileDiagnostics = [];
2864
+ }
2587
2865
  function consumeMarkerRelationPickSelectionCommand(state, options, command, renderUi) {
2588
2866
  const pick = state.markerRelationPick;
2589
2867
  if (!pick?.active)
@@ -3927,6 +4205,7 @@ async function enterPrefabStage(state, options, input) {
3927
4205
  return true;
3928
4206
  }
3929
4207
  }
4208
+ switchPreviewVisibilityScope(state, `prefab-stage:${descriptor.assetId}`);
3930
4209
  state.prefabStage = {
3931
4210
  descriptor,
3932
4211
  asset,
@@ -3936,6 +4215,7 @@ async function enterPrefabStage(state, options, input) {
3936
4215
  restoreGridVisible: previousPrefabStage?.restoreGridVisible ?? state.gridVisible,
3937
4216
  restoreSceneCameraPreviewEnabled: previousPrefabStage?.restoreSceneCameraPreviewEnabled ?? state.sceneCameraPreviewEnabled,
3938
4217
  };
4218
+ advanceHierarchyProjectionRevision(state);
3939
4219
  setGridVisibleForEditorContext(state, false, 'prefab-stage-enter-grid');
3940
4220
  state.sceneCameraPreviewEnabled = false;
3941
4221
  state.sceneCameraPreview?.setActive(false);
@@ -3958,7 +4238,9 @@ async function exitPrefabStage(state, options) {
3958
4238
  const restoreGridVisible = prefabStage.restoreGridVisible;
3959
4239
  const restoreSceneCameraPreviewEnabled = prefabStage.restoreSceneCameraPreviewEnabled;
3960
4240
  await closePrefabStageLifecycleScopes(state, prefabStage);
4241
+ switchPreviewVisibilityScope(state, 'scene');
3961
4242
  state.prefabStage = null;
4243
+ advanceHierarchyProjectionRevision(state);
3962
4244
  setGridVisibleForEditorContext(state, restoreGridVisible, 'prefab-stage-exit-grid');
3963
4245
  if (sessionState?.workingDocument) {
3964
4246
  rebuildProjectionFromDocument(state, options, sessionState.workingDocument, sessionState.selection);
@@ -3983,6 +4265,7 @@ async function closePrefabStageLifecycleScopes(state, stage) {
3983
4265
  function selectPrefabStageItem(state, itemId) {
3984
4266
  if (!state.prefabStage || state.prefabStage.selectedItemId === itemId)
3985
4267
  return false;
4268
+ advanceHierarchyProjectionRevision(state);
3986
4269
  state.prefabStage = {
3987
4270
  ...state.prefabStage,
3988
4271
  selectedItemId: itemId,
@@ -4048,6 +4331,7 @@ function dispatchPrefabStageProjectionSelectionCommand(state, options, command)
4048
4331
  if (command.type === 'selection.clear') {
4049
4332
  if (state.prefabStage.selectedItemId === null)
4050
4333
  return false;
4334
+ advanceHierarchyProjectionRevision(state);
4051
4335
  state.prefabStage = { ...state.prefabStage, selectedItemId: null };
4052
4336
  state.editorStateRevision += 1;
4053
4337
  syncPrefabStageSelectionToProjection(state, options, 'prefab-stage-selection-clear', state.editorStateRevision);
@@ -4064,6 +4348,7 @@ function dispatchPrefabStageProjectionSelectionCommand(state, options, command)
4064
4348
  const currentlySelected = currentProjectionSelection.selectedIds.includes(candidateId);
4065
4349
  if ((command.type === 'selection.toggle' && currentlySelected)
4066
4350
  || (command.type === 'selection.remove' && currentlySelected)) {
4351
+ advanceHierarchyProjectionRevision(state);
4067
4352
  state.prefabStage = { ...state.prefabStage, selectedItemId: null };
4068
4353
  state.editorStateRevision += 1;
4069
4354
  syncPrefabStageSelectionToProjection(state, options, 'prefab-stage-selection-remove', state.editorStateRevision);
@@ -4074,6 +4359,7 @@ function dispatchPrefabStageProjectionSelectionCommand(state, options, command)
4074
4359
  const nextItemId = target.itemId ?? `prefab-node:${target.targetId}`;
4075
4360
  if (state.prefabStage.selectedItemId === nextItemId)
4076
4361
  return false;
4362
+ advanceHierarchyProjectionRevision(state);
4077
4363
  state.prefabStage = { ...state.prefabStage, selectedItemId: nextItemId };
4078
4364
  state.editorStateRevision += 1;
4079
4365
  syncPrefabStageSelectionToProjection(state, options, 'prefab-stage-selection-command', state.editorStateRevision);
@@ -5721,6 +6007,7 @@ function cancelEditorIntent(state, options) {
5721
6007
  }
5722
6008
  if (state.prefabStage?.selectedItemId) {
5723
6009
  cancelActiveOperation(state);
6010
+ advanceHierarchyProjectionRevision(state);
5724
6011
  state.prefabStage = { ...state.prefabStage, selectedItemId: null };
5725
6012
  state.editorStateRevision += 1;
5726
6013
  syncPrefabStageSelectionToProjection(state, options, 'prefab-stage-selection-cancel', state.editorStateRevision);
@@ -5829,24 +6116,6 @@ function createProjectionBoundsFocusFrame(bounds) {
5829
6116
  radius,
5830
6117
  };
5831
6118
  }
5832
- function frameSelectedViewportProjection(state, options) {
5833
- if (state.mode !== 'editor')
5834
- return false;
5835
- if (state.prefabStage) {
5836
- const activeId = getCurrentPrefabStageProjectionSelection(state, options).activeId;
5837
- if (!activeId) {
5838
- state.status = 'Focus failed: no Prefab Stage selection';
5839
- return false;
5840
- }
5841
- return focusPrefabStageProjectionNode(state, options, activeId, 'prefab-stage-frame-selection');
5842
- }
5843
- const activeId = state.session?.getState({ cloneDocuments: false }).selection.activeId ?? null;
5844
- if (!activeId) {
5845
- state.status = 'Focus failed: no selection';
5846
- return false;
5847
- }
5848
- return frameViewportProjectionNode(state, activeId);
5849
- }
5850
6119
  function focusPrefabStageProjectionNode(state, options, projectionNodeId, reason) {
5851
6120
  const document = state.session?.getState({ cloneDocuments: false }).workingDocument ?? null;
5852
6121
  if (!state.prefabStage || !document)
@@ -6283,6 +6552,18 @@ function applyPreviewVisibilityStateToProjection(state) {
6283
6552
  projection.setPreviewVisibilityOverrides(overrides);
6284
6553
  }
6285
6554
  }
6555
+ function switchPreviewVisibilityScope(state, nextScopeId) {
6556
+ if (state.previewVisibilityScopeId === nextScopeId)
6557
+ return;
6558
+ state.previewVisibilityByScope.set(state.previewVisibilityScopeId, state.previewVisibility);
6559
+ const next = state.previewVisibilityByScope.get(nextScopeId) ?? {
6560
+ overrides: {},
6561
+ isolatedObjectIds: [],
6562
+ };
6563
+ state.previewVisibilityByScope.set(nextScopeId, next);
6564
+ state.previewVisibilityScopeId = nextScopeId;
6565
+ state.previewVisibility = next;
6566
+ }
6286
6567
  function setSceneCameraPreviewEnabled(state, options, enabled) {
6287
6568
  if (!enabled) {
6288
6569
  state.sceneCameraPreviewEnabled = false;
@@ -6505,6 +6786,7 @@ function createUiState(state, options) {
6505
6786
  const hierarchy = document
6506
6787
  ? createMarkerGraphHierarchyItems(documentHierarchy, markerGraph, createMarkerGraphHierarchyVisibility(state))
6507
6788
  : [];
6789
+ const prefabStage = createBrowserPrefabStageState(state, options, document);
6508
6790
  state.performanceObjectCount = document ? countLocalEditorAuthoredObjects(documentHierarchy) : null;
6509
6791
  state.performanceStats = createLocalEditorPerformanceStats({
6510
6792
  frameStats: state.sceneFrameStats,
@@ -6515,7 +6797,7 @@ function createUiState(state, options) {
6515
6797
  ...state.assets.map(asset => toBrowserAssetItem(options, asset)),
6516
6798
  ...documentAssetItems,
6517
6799
  ]);
6518
- return {
6800
+ const uiState = {
6519
6801
  mode: state.mode,
6520
6802
  busy: state.busy,
6521
6803
  agentBridge: state.agentBridgeStatus,
@@ -6530,6 +6812,8 @@ function createUiState(state, options) {
6530
6812
  hierarchy,
6531
6813
  selectedIds,
6532
6814
  activeId,
6815
+ documentRevision: sessionState?.documentRevision ?? 0,
6816
+ hierarchyProjectionRevision: state.hierarchyProjectionRevision,
6533
6817
  selectionSummary: {
6534
6818
  count: selectedIds.length,
6535
6819
  activeId,
@@ -6576,7 +6860,7 @@ function createUiState(state, options) {
6576
6860
  enabled: state.sceneCameraPreviewEnabled,
6577
6861
  available: hasSceneCameraPreviewRig(state, options),
6578
6862
  },
6579
- prefabStage: createBrowserPrefabStageState(state, options, document),
6863
+ prefabStage,
6580
6864
  grid: {
6581
6865
  visible: state.gridVisible,
6582
6866
  available: !!state.grid,
@@ -6591,6 +6875,74 @@ function createUiState(state, options) {
6591
6875
  }
6592
6876
  : null,
6593
6877
  };
6878
+ const hierarchyProjection = createLocalEditorHierarchyProjection(createLocalEditorActiveHierarchyScope(uiState));
6879
+ uiState.hierarchyProjection = hierarchyProjection;
6880
+ uiState.statusDiagnostics = [
6881
+ ...hierarchyProjection.diagnostics,
6882
+ ...state.hierarchyReconcileDiagnostics,
6883
+ ...state.hierarchyCommandDiagnostics,
6884
+ ];
6885
+ uiState.statusDiagnostics = resolveLocalEditorStatusDiagnostics(uiState);
6886
+ if (!state.prefabStage) {
6887
+ uiState.selectedIds = hierarchyProjection.selectedIds;
6888
+ uiState.activeId = hierarchyProjection.activeId;
6889
+ uiState.selectionSummary = {
6890
+ count: hierarchyProjection.selectedIds.length,
6891
+ activeId: hierarchyProjection.activeId,
6892
+ };
6893
+ if (activeId !== hierarchyProjection.activeId) {
6894
+ uiState.inspectorObject = null;
6895
+ uiState.inspectorMultiObject = null;
6896
+ }
6897
+ }
6898
+ return uiState;
6899
+ }
6900
+ function reconcileHierarchySelectionBeforeRender(state, options) {
6901
+ const sessionState = state.session?.getState({ cloneDocuments: false });
6902
+ const document = sessionState?.workingDocument ?? null;
6903
+ if (!sessionState || !document)
6904
+ return;
6905
+ if (state.prefabStage) {
6906
+ const stage = createBrowserPrefabStageState(state, options, document);
6907
+ if (!stage)
6908
+ return;
6909
+ const projection = createLocalEditorHierarchyProjection(createLocalEditorPrefabStageHierarchyScope(stage, sessionState.documentRevision, state.hierarchyProjectionRevision));
6910
+ if (stage.selectedItemId === projection.activeId)
6911
+ return;
6912
+ const reconcileDiagnostics = projection.diagnostics.filter(diagnostic => diagnostic.code === 'hierarchy-selection-stale');
6913
+ advanceHierarchyProjectionRevision(state);
6914
+ state.hierarchyReconcileDiagnostics = reconcileDiagnostics;
6915
+ state.prefabStage.selectedItemId = projection.activeId;
6916
+ state.editorStateRevision += 1;
6917
+ syncPrefabStageSelectionToProjection(state, options, 'hierarchy-projection-selection-sanitize', state.editorStateRevision);
6918
+ return;
6919
+ }
6920
+ const documentHierarchy = options.documentAdapter.getHierarchyItems(document);
6921
+ const markerGraph = options.documentAdapter.getMarkerGraph?.(document) ?? null;
6922
+ const hierarchy = markerGraph
6923
+ ? createMarkerGraphHierarchyItems(documentHierarchy, markerGraph, createMarkerGraphHierarchyVisibility(state))
6924
+ : documentHierarchy;
6925
+ const projection = createLocalEditorHierarchyProjection(createLocalEditorSceneHierarchyScope({
6926
+ hierarchy,
6927
+ selectedIds: sessionState.selection.selectedIds,
6928
+ activeId: sessionState.selection.activeId,
6929
+ documentRevision: sessionState.documentRevision,
6930
+ hierarchyProjectionRevision: state.hierarchyProjectionRevision,
6931
+ }));
6932
+ if (projection.activeId === sessionState.selection.activeId
6933
+ && projection.selectedIds.length === sessionState.selection.selectedIds.length
6934
+ && projection.selectedIds.every((id, index) => id === sessionState.selection.selectedIds[index]))
6935
+ return;
6936
+ const reconcileDiagnostics = projection.diagnostics.filter(diagnostic => diagnostic.code === 'hierarchy-selection-stale');
6937
+ state.session?.dispatch({
6938
+ type: 'selection.replace',
6939
+ selectedIds: projection.selectedIds,
6940
+ activeId: projection.activeId,
6941
+ label: 'Sanitize Hierarchy Projection Selection',
6942
+ });
6943
+ state.hierarchyReconcileDiagnostics = reconcileDiagnostics;
6944
+ state.editorStateRevision += 1;
6945
+ syncSelectionToProjection(state, options, { selectedIds: projection.selectedIds, activeId: projection.activeId }, 'hierarchy-projection-selection-sanitize', state.editorStateRevision);
6594
6946
  }
6595
6947
  function createBrowserPrefabStageState(state, options, document) {
6596
6948
  const stage = state.prefabStage;