@fps-games/editor 0.2.1-beta.3 → 0.2.1-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 (514) hide show
  1. package/dist/build-info.json +44 -44
  2. package/dist/editor-commands/capabilities/assets.d.ts +8 -0
  3. package/dist/editor-commands/capabilities/assets.d.ts.map +1 -0
  4. package/dist/{agent-bridge → editor-commands}/capabilities/assets.js +41 -41
  5. package/dist/editor-commands/capabilities/assets.js.map +1 -0
  6. package/dist/editor-commands/capabilities/editor-state.d.ts +5 -0
  7. package/dist/editor-commands/capabilities/editor-state.d.ts.map +1 -0
  8. package/dist/{agent-bridge → editor-commands}/capabilities/editor-state.js +22 -22
  9. package/dist/editor-commands/capabilities/editor-state.js.map +1 -0
  10. package/dist/editor-commands/capabilities/hierarchy.d.ts +4 -0
  11. package/dist/editor-commands/capabilities/hierarchy.d.ts.map +1 -0
  12. package/dist/{agent-bridge → editor-commands}/capabilities/hierarchy.js +5 -5
  13. package/dist/editor-commands/capabilities/hierarchy.js.map +1 -0
  14. package/dist/editor-commands/capabilities/host-lifecycle.d.ts +11 -0
  15. package/dist/editor-commands/capabilities/host-lifecycle.d.ts.map +1 -0
  16. package/dist/editor-commands/capabilities/host-lifecycle.js +149 -0
  17. package/dist/editor-commands/capabilities/host-lifecycle.js.map +1 -0
  18. package/dist/editor-commands/capabilities/prefabs.d.ts +5 -0
  19. package/dist/editor-commands/capabilities/prefabs.d.ts.map +1 -0
  20. package/dist/{agent-bridge → editor-commands}/capabilities/prefabs.js +93 -93
  21. package/dist/editor-commands/capabilities/prefabs.js.map +1 -0
  22. package/dist/editor-commands/capabilities/scene-objects.d.ts +8 -0
  23. package/dist/editor-commands/capabilities/scene-objects.d.ts.map +1 -0
  24. package/dist/editor-commands/capabilities/scene-objects.js +480 -0
  25. package/dist/editor-commands/capabilities/scene-objects.js.map +1 -0
  26. package/dist/editor-commands/capabilities/selection.d.ts +5 -0
  27. package/dist/editor-commands/capabilities/selection.d.ts.map +1 -0
  28. package/dist/editor-commands/capabilities/selection.js +60 -0
  29. package/dist/editor-commands/capabilities/selection.js.map +1 -0
  30. package/dist/editor-commands/capabilities/shadows.d.ts +5 -0
  31. package/dist/editor-commands/capabilities/shadows.d.ts.map +1 -0
  32. package/dist/{agent-bridge → editor-commands}/capabilities/shadows.js +74 -74
  33. package/dist/editor-commands/capabilities/shadows.js.map +1 -0
  34. package/dist/editor-commands/capabilities/transform.d.ts +5 -0
  35. package/dist/editor-commands/capabilities/transform.d.ts.map +1 -0
  36. package/dist/editor-commands/capabilities/transform.js +164 -0
  37. package/dist/editor-commands/capabilities/transform.js.map +1 -0
  38. package/dist/editor-commands/capabilities/ui-regions.d.ts +4 -0
  39. package/dist/editor-commands/capabilities/ui-regions.d.ts.map +1 -0
  40. package/dist/{agent-bridge → editor-commands}/capabilities/ui-regions.js +55 -57
  41. package/dist/editor-commands/capabilities/ui-regions.js.map +1 -0
  42. package/dist/editor-commands/capabilities/viewport.d.ts +5 -0
  43. package/dist/editor-commands/capabilities/viewport.d.ts.map +1 -0
  44. package/dist/{agent-bridge → editor-commands}/capabilities/viewport.js +100 -100
  45. package/dist/editor-commands/capabilities/viewport.js.map +1 -0
  46. package/dist/editor-commands/command-sources.d.ts +7 -0
  47. package/dist/editor-commands/command-sources.d.ts.map +1 -0
  48. package/dist/editor-commands/command-sources.js +34 -0
  49. package/dist/editor-commands/command-sources.js.map +1 -0
  50. package/dist/editor-commands/diagnostics.d.ts +12 -0
  51. package/dist/editor-commands/diagnostics.d.ts.map +1 -0
  52. package/dist/{agent-bridge → editor-commands}/diagnostics.js +4 -4
  53. package/dist/editor-commands/diagnostics.js.map +1 -0
  54. package/dist/{agent-bridge → editor-commands}/index.d.ts +1 -1
  55. package/dist/editor-commands/index.d.ts.map +1 -0
  56. package/dist/{agent-bridge → editor-commands}/index.js +1 -1
  57. package/dist/editor-commands/index.js.map +1 -0
  58. package/dist/editor-commands/register.d.ts +4 -0
  59. package/dist/editor-commands/register.d.ts.map +1 -0
  60. package/dist/{agent-bridge → editor-commands}/register.js +323 -286
  61. package/dist/editor-commands/register.js.map +1 -0
  62. package/dist/{agent-bridge → editor-commands}/shared.d.ts +80 -80
  63. package/dist/editor-commands/shared.d.ts.map +1 -0
  64. package/dist/{agent-bridge → editor-commands}/shared.js +29 -29
  65. package/dist/editor-commands/shared.js.map +1 -0
  66. package/dist/editor-commands/source-types.d.ts +110 -0
  67. package/dist/editor-commands/source-types.d.ts.map +1 -0
  68. package/dist/editor-commands/source-types.js.map +1 -0
  69. package/dist/editor-plugin-commands.d.ts +4 -0
  70. package/dist/editor-plugin-commands.d.ts.map +1 -0
  71. package/dist/editor-plugin-commands.js +18 -0
  72. package/dist/editor-plugin-commands.js.map +1 -0
  73. package/dist/index.d.ts +2 -2
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +1 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/local-editor-commands.d.ts +2 -0
  78. package/dist/local-editor-commands.d.ts.map +1 -0
  79. package/dist/local-editor-commands.js +2 -0
  80. package/dist/local-editor-commands.js.map +1 -0
  81. package/dist/local-editor-harness.d.ts +35 -21
  82. package/dist/local-editor-harness.d.ts.map +1 -1
  83. package/dist/local-editor-harness.js +1721 -367
  84. package/dist/local-editor-harness.js.map +1 -1
  85. package/dist/local-editor-prefab-stage-transaction.d.ts +2 -1
  86. package/dist/local-editor-prefab-stage-transaction.d.ts.map +1 -1
  87. package/dist/local-editor-prefab-stage-transaction.js +6 -5
  88. package/dist/local-editor-prefab-stage-transaction.js.map +1 -1
  89. package/dist/local-editor-scene-view-interaction-runtime.d.ts.map +1 -1
  90. package/dist/local-editor-scene-view-interaction-runtime.js +2 -5
  91. package/dist/local-editor-scene-view-interaction-runtime.js.map +1 -1
  92. package/dist/playable-local-editor-entry.d.ts +10 -0
  93. package/dist/playable-local-editor-entry.d.ts.map +1 -1
  94. package/dist/playable-local-editor-entry.js +10 -2
  95. package/dist/playable-local-editor-entry.js.map +1 -1
  96. package/dist/playable-local-editor-host.d.ts +3 -32
  97. package/dist/playable-local-editor-host.d.ts.map +1 -1
  98. package/dist/playable-local-editor-host.js +6 -70
  99. package/dist/playable-local-editor-host.js.map +1 -1
  100. package/dist/playable-product-local-editor.d.ts +1 -2
  101. package/dist/playable-product-local-editor.d.ts.map +1 -1
  102. package/dist/playable-product-local-editor.js +0 -1
  103. package/dist/playable-product-local-editor.js.map +1 -1
  104. package/dist/playable-product-projection-preview.d.ts.map +1 -1
  105. package/dist/playable-product-projection-preview.js +1 -1
  106. package/dist/playable-product-projection-preview.js.map +1 -1
  107. package/dist/playable-product-scene-capabilities.d.ts +0 -2
  108. package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
  109. package/dist/playable-product-scene-capabilities.js +33 -6
  110. package/dist/playable-product-scene-capabilities.js.map +1 -1
  111. package/dist/playable-runtime-babylon.d.ts +4 -0
  112. package/dist/playable-runtime-babylon.d.ts.map +1 -1
  113. package/dist/playable-runtime-babylon.js +4 -0
  114. package/dist/playable-runtime-babylon.js.map +1 -1
  115. package/dist/playable-sdk.d.ts +1 -1
  116. package/dist/playable-sdk.d.ts.map +1 -1
  117. package/dist/playable-sdk.js.map +1 -1
  118. package/dist/playable-standard-project.d.ts +0 -2
  119. package/dist/playable-standard-project.d.ts.map +1 -1
  120. package/dist/playable-standard-project.js +1 -2
  121. package/dist/playable-standard-project.js.map +1 -1
  122. package/dist/project-service-projection.d.ts +16 -0
  123. package/dist/project-service-projection.d.ts.map +1 -0
  124. package/dist/project-service-projection.js +67 -0
  125. package/dist/project-service-projection.js.map +1 -0
  126. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts +18 -0
  127. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts.map +1 -1
  128. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js +54 -18
  129. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js.map +1 -1
  130. package/node_modules/@fps-games/babylon-renderer/package.json +9 -9
  131. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +1 -0
  132. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  133. package/node_modules/@fps-games/editor-babylon/dist/projection.js +1 -1
  134. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  135. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
  136. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +127 -13
  137. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
  138. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
  139. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +66 -1
  140. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
  141. package/node_modules/@fps-games/editor-babylon/package.json +6 -6
  142. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts +32 -0
  143. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts.map +1 -0
  144. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js +254 -0
  145. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js.map +1 -0
  146. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +3 -1
  147. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  148. package/node_modules/@fps-games/editor-browser/dist/index.js +2 -0
  149. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  150. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts +68 -0
  151. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts.map +1 -0
  152. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js +650 -0
  153. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js.map +1 -0
  154. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts +1 -0
  155. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts.map +1 -1
  156. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js +22 -0
  157. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js.map +1 -1
  158. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts +8 -0
  159. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts.map +1 -1
  160. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js +117 -6
  161. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js.map +1 -1
  162. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts +14 -1
  163. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts.map +1 -1
  164. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js +100 -1
  165. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js.map +1 -1
  166. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +8 -1
  167. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  168. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +75 -2
  169. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  170. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +37 -12
  171. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  172. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  173. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +25 -2
  174. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  175. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +332 -107
  176. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  177. package/node_modules/@fps-games/editor-browser/package.json +7 -7
  178. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts +107 -0
  179. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts.map +1 -0
  180. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js +1211 -0
  181. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js.map +1 -0
  182. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts +34 -0
  183. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts.map +1 -0
  184. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js +260 -0
  185. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js.map +1 -0
  186. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts +9 -0
  187. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts.map +1 -0
  188. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js +14 -0
  189. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js.map +1 -0
  190. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts +18 -0
  191. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts.map +1 -0
  192. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js +113 -0
  193. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js.map +1 -0
  194. package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts +82 -0
  195. package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts.map +1 -0
  196. package/node_modules/@fps-games/editor-core/dist/editor-command-system.js +1098 -0
  197. package/node_modules/@fps-games/editor-core/dist/editor-command-system.js.map +1 -0
  198. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts +6 -7
  199. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts.map +1 -1
  200. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js +62 -103
  201. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js.map +1 -1
  202. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts +30 -0
  203. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts.map +1 -0
  204. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js +540 -0
  205. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js.map +1 -0
  206. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts +9 -0
  207. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts.map +1 -0
  208. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js +61 -0
  209. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js.map +1 -0
  210. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts +55 -0
  211. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts.map +1 -1
  212. package/node_modules/@fps-games/editor-core/dist/editor-session.js +247 -6
  213. package/node_modules/@fps-games/editor-core/dist/editor-session.js.map +1 -1
  214. package/node_modules/@fps-games/editor-core/dist/index.d.ts +6 -2
  215. package/node_modules/@fps-games/editor-core/dist/index.d.ts.map +1 -1
  216. package/node_modules/@fps-games/editor-core/dist/index.js +6 -2
  217. package/node_modules/@fps-games/editor-core/dist/index.js.map +1 -1
  218. package/node_modules/@fps-games/editor-core/package.json +6 -6
  219. package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts +0 -1
  220. package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts.map +1 -1
  221. package/node_modules/@fps-games/editor-forge-play/dist/index.js +0 -1
  222. package/node_modules/@fps-games/editor-forge-play/dist/index.js.map +1 -1
  223. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  224. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts +2 -0
  225. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts.map +1 -1
  226. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.d.ts.map +1 -1
  227. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js +41 -1
  228. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js.map +1 -1
  229. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts +27 -1
  230. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts.map +1 -1
  231. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.js.map +1 -1
  232. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts +2 -0
  233. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts.map +1 -1
  234. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js +214 -7
  235. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js.map +1 -1
  236. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts +1 -0
  237. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts.map +1 -1
  238. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js +11 -3
  239. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js.map +1 -1
  240. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts +2 -4
  241. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts.map +1 -1
  242. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js +0 -1
  243. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js.map +1 -1
  244. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.d.ts.map +1 -1
  245. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js +77 -31
  246. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js.map +1 -1
  247. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts +8 -1
  248. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts.map +1 -1
  249. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.js.map +1 -1
  250. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts +21 -1
  251. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts.map +1 -1
  252. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js +90 -4
  253. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js.map +1 -1
  254. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts +27 -1
  255. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts.map +1 -1
  256. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js +161 -1
  257. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js.map +1 -1
  258. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts +2 -2
  259. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts.map +1 -1
  260. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js +5 -92
  261. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js.map +1 -1
  262. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts +7 -0
  263. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts.map +1 -1
  264. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js +26 -9
  265. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js.map +1 -1
  266. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts +9 -0
  267. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts.map +1 -1
  268. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js +19 -8
  269. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js.map +1 -1
  270. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts +5 -0
  271. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts.map +1 -1
  272. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js +16 -4
  273. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js.map +1 -1
  274. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts +9 -0
  275. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts.map +1 -1
  276. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js +12 -2
  277. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js.map +1 -1
  278. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts +2 -1
  279. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts.map +1 -1
  280. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js +10 -5
  281. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js.map +1 -1
  282. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts +1 -0
  283. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts.map +1 -1
  284. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js +1 -0
  285. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js.map +1 -1
  286. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts +17 -82
  287. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts.map +1 -1
  288. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js +53 -57
  289. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js.map +1 -1
  290. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.d.ts.map +1 -1
  291. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js +3 -2
  292. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js.map +1 -1
  293. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts +10 -0
  294. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts.map +1 -0
  295. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js +256 -0
  296. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js.map +1 -0
  297. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.d.ts.map +1 -1
  298. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js +7 -5
  299. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js.map +1 -1
  300. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
  301. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +8 -0
  302. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
  303. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts +1 -0
  304. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts.map +1 -1
  305. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.js.map +1 -1
  306. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +134 -12
  307. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
  308. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.d.ts.map +1 -1
  309. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js +47 -0
  310. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js.map +1 -1
  311. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts +27 -0
  312. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts.map +1 -0
  313. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js +592 -0
  314. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js.map +1 -0
  315. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +3 -1
  316. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  317. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +2 -1
  318. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  319. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.d.ts.map +1 -1
  320. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js +61 -6
  321. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js.map +1 -1
  322. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts +0 -2
  323. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts.map +1 -1
  324. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js +1 -10
  325. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js.map +1 -1
  326. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
  327. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +21 -0
  328. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
  329. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts +13 -0
  330. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts.map +1 -0
  331. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js +18 -0
  332. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js.map +1 -0
  333. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts +28 -0
  334. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts.map +1 -0
  335. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js +863 -0
  336. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js.map +1 -0
  337. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts +2 -0
  338. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts.map +1 -1
  339. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.js.map +1 -1
  340. package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
  341. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts +1626 -0
  342. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts.map +1 -0
  343. package/node_modules/@fps-games/editor-protocol/dist/{agent-bridge.js → editor-command-capabilities.js} +766 -620
  344. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.js.map +1 -0
  345. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts +69 -0
  346. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts.map +1 -0
  347. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js +22 -0
  348. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js.map +1 -0
  349. package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts +136 -0
  350. package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts.map +1 -0
  351. package/node_modules/@fps-games/editor-protocol/dist/editor-command.js +2 -0
  352. package/node_modules/@fps-games/editor-protocol/dist/editor-command.js.map +1 -0
  353. package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts +225 -0
  354. package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts.map +1 -0
  355. package/node_modules/@fps-games/editor-protocol/dist/editor-service.js +4 -0
  356. package/node_modules/@fps-games/editor-protocol/dist/editor-service.js.map +1 -0
  357. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts +6 -3
  358. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts.map +1 -1
  359. package/node_modules/@fps-games/editor-protocol/dist/index.js +6 -3
  360. package/node_modules/@fps-games/editor-protocol/dist/index.js.map +1 -1
  361. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  362. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  363. package/node_modules/@fps-games/editor-ui/package.json +1 -1
  364. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  365. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  366. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  367. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  368. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  369. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  370. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  371. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  372. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  373. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  374. package/node_modules/@fps-games/plugin-assets/package.json +6 -6
  375. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts +1 -0
  376. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts.map +1 -1
  377. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js +78 -4
  378. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js.map +1 -1
  379. package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
  380. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
  381. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
  382. package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
  383. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  384. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  385. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  386. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  387. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  388. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  389. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  390. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  391. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  392. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  393. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  394. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  395. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  396. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  397. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  398. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  399. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  400. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
  401. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
  402. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
  403. package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
  404. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  405. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  406. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  407. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  408. package/package.json +23 -23
  409. package/dist/agent-bridge/capabilities/assets.d.ts +0 -8
  410. package/dist/agent-bridge/capabilities/assets.d.ts.map +0 -1
  411. package/dist/agent-bridge/capabilities/assets.js.map +0 -1
  412. package/dist/agent-bridge/capabilities/editor-state.d.ts +0 -5
  413. package/dist/agent-bridge/capabilities/editor-state.d.ts.map +0 -1
  414. package/dist/agent-bridge/capabilities/editor-state.js.map +0 -1
  415. package/dist/agent-bridge/capabilities/hierarchy.d.ts +0 -4
  416. package/dist/agent-bridge/capabilities/hierarchy.d.ts.map +0 -1
  417. package/dist/agent-bridge/capabilities/hierarchy.js.map +0 -1
  418. package/dist/agent-bridge/capabilities/host-lifecycle.d.ts +0 -11
  419. package/dist/agent-bridge/capabilities/host-lifecycle.d.ts.map +0 -1
  420. package/dist/agent-bridge/capabilities/host-lifecycle.js +0 -149
  421. package/dist/agent-bridge/capabilities/host-lifecycle.js.map +0 -1
  422. package/dist/agent-bridge/capabilities/prefabs.d.ts +0 -5
  423. package/dist/agent-bridge/capabilities/prefabs.d.ts.map +0 -1
  424. package/dist/agent-bridge/capabilities/prefabs.js.map +0 -1
  425. package/dist/agent-bridge/capabilities/scene-objects.d.ts +0 -8
  426. package/dist/agent-bridge/capabilities/scene-objects.d.ts.map +0 -1
  427. package/dist/agent-bridge/capabilities/scene-objects.js +0 -480
  428. package/dist/agent-bridge/capabilities/scene-objects.js.map +0 -1
  429. package/dist/agent-bridge/capabilities/selection.d.ts +0 -5
  430. package/dist/agent-bridge/capabilities/selection.d.ts.map +0 -1
  431. package/dist/agent-bridge/capabilities/selection.js +0 -60
  432. package/dist/agent-bridge/capabilities/selection.js.map +0 -1
  433. package/dist/agent-bridge/capabilities/shadows.d.ts +0 -5
  434. package/dist/agent-bridge/capabilities/shadows.d.ts.map +0 -1
  435. package/dist/agent-bridge/capabilities/shadows.js.map +0 -1
  436. package/dist/agent-bridge/capabilities/transform.d.ts +0 -5
  437. package/dist/agent-bridge/capabilities/transform.d.ts.map +0 -1
  438. package/dist/agent-bridge/capabilities/transform.js +0 -164
  439. package/dist/agent-bridge/capabilities/transform.js.map +0 -1
  440. package/dist/agent-bridge/capabilities/ui-regions.d.ts +0 -4
  441. package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +0 -1
  442. package/dist/agent-bridge/capabilities/ui-regions.js.map +0 -1
  443. package/dist/agent-bridge/capabilities/viewport.d.ts +0 -5
  444. package/dist/agent-bridge/capabilities/viewport.d.ts.map +0 -1
  445. package/dist/agent-bridge/capabilities/viewport.js.map +0 -1
  446. package/dist/agent-bridge/capability-sources.d.ts +0 -7
  447. package/dist/agent-bridge/capability-sources.d.ts.map +0 -1
  448. package/dist/agent-bridge/capability-sources.js +0 -34
  449. package/dist/agent-bridge/capability-sources.js.map +0 -1
  450. package/dist/agent-bridge/diagnostics.d.ts +0 -12
  451. package/dist/agent-bridge/diagnostics.d.ts.map +0 -1
  452. package/dist/agent-bridge/diagnostics.js.map +0 -1
  453. package/dist/agent-bridge/index.d.ts.map +0 -1
  454. package/dist/agent-bridge/index.js.map +0 -1
  455. package/dist/agent-bridge/register.d.ts +0 -4
  456. package/dist/agent-bridge/register.d.ts.map +0 -1
  457. package/dist/agent-bridge/register.js.map +0 -1
  458. package/dist/agent-bridge/shared.d.ts.map +0 -1
  459. package/dist/agent-bridge/shared.js.map +0 -1
  460. package/dist/agent-bridge/source-types.d.ts +0 -110
  461. package/dist/agent-bridge/source-types.d.ts.map +0 -1
  462. package/dist/agent-bridge/source-types.js.map +0 -1
  463. package/dist/editor-plugin-agent-capabilities.d.ts +0 -4
  464. package/dist/editor-plugin-agent-capabilities.d.ts.map +0 -1
  465. package/dist/editor-plugin-agent-capabilities.js +0 -64
  466. package/dist/editor-plugin-agent-capabilities.js.map +0 -1
  467. package/dist/local-editor-agent-actions.d.ts +0 -43
  468. package/dist/local-editor-agent-actions.d.ts.map +0 -1
  469. package/dist/local-editor-agent-actions.js +0 -321
  470. package/dist/local-editor-agent-actions.js.map +0 -1
  471. package/dist/local-editor-agent-bridge-transport.d.ts +0 -129
  472. package/dist/local-editor-agent-bridge-transport.d.ts.map +0 -1
  473. package/dist/local-editor-agent-bridge-transport.js +0 -403
  474. package/dist/local-editor-agent-bridge-transport.js.map +0 -1
  475. package/dist/local-editor-agent-bridge.d.ts +0 -2
  476. package/dist/local-editor-agent-bridge.d.ts.map +0 -1
  477. package/dist/local-editor-agent-bridge.js +0 -2
  478. package/dist/local-editor-agent-bridge.js.map +0 -1
  479. package/dist/local-editor-agent-context.d.ts +0 -68
  480. package/dist/local-editor-agent-context.d.ts.map +0 -1
  481. package/dist/local-editor-agent-context.js +0 -716
  482. package/dist/local-editor-agent-context.js.map +0 -1
  483. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts +0 -22
  484. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts.map +0 -1
  485. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js +0 -106
  486. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js.map +0 -1
  487. package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts +0 -17
  488. package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts.map +0 -1
  489. package/node_modules/@fps-games/editor-core/dist/agent-interaction.js +0 -14
  490. package/node_modules/@fps-games/editor-core/dist/agent-interaction.js.map +0 -1
  491. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts +0 -23
  492. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts.map +0 -1
  493. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js +0 -47
  494. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js.map +0 -1
  495. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts +0 -112
  496. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts.map +0 -1
  497. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js +0 -159
  498. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js.map +0 -1
  499. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts +0 -15
  500. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts.map +0 -1
  501. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js +0 -76
  502. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js.map +0 -1
  503. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts +0 -1622
  504. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts.map +0 -1
  505. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js.map +0 -1
  506. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts +0 -68
  507. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts.map +0 -1
  508. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js +0 -23
  509. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js.map +0 -1
  510. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +0 -187
  511. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +0 -1
  512. package/node_modules/@fps-games/editor-protocol/dist/agent.js +0 -5
  513. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +0 -1
  514. /package/dist/{agent-bridge → editor-commands}/source-types.js +0 -0
@@ -0,0 +1,480 @@
1
+ import { validateSceneGraphDelete, } from '@fps-games/editor-core';
2
+ import { EDITOR_COMMAND_ID, } from '@fps-games/editor-protocol';
3
+ import { cloneVec3, createLocalEditorCommandFailure, editorTransformSnapshotToAgentTransform, isLocalEditorCommandVec3, } from '../diagnostics.js';
4
+ import { findEditorCommandVisibleAssetInfo } from './assets.js';
5
+ import { cloneEditorCommandSelection, getEditorCommandSafeSceneHierarchy, getEditorCommandSafeSceneReadModel, getEditorCommandSafeSceneSelection, hasEditorCommandSafeSceneScope, isEditorCommandDocumentNodeLocked, isEditorCommandDocumentNodeSelectable, isEditorCommandHierarchyObjectSelectable, normalizeEditorCommandIdList, normalizeEditorCommandString, } from '../shared.js';
6
+ const OBJECT_CREATE_FROM_ASSET_PROJECTION_WAIT_MS = 3000;
7
+ export function createLocalEditorCommandObjectSource(state, options, renderUi, operations) {
8
+ return {
9
+ listObjects(input) {
10
+ const document = state.session?.getState({ cloneDocuments: false }).workingDocument ?? null;
11
+ if (state.mode !== 'editor' || !document)
12
+ return [];
13
+ return listEditorCommandSceneObjects(state, options, document, input.includeUnselectable === true, operations);
14
+ },
15
+ resolveObject(input) {
16
+ return resolveEditorCommandObject(state, options, input, operations);
17
+ },
18
+ getObject(objectId) {
19
+ const document = state.session?.getState({ cloneDocuments: false }).workingDocument ?? null;
20
+ if (state.mode !== 'editor' || !document)
21
+ return null;
22
+ return createEditorCommandSceneObject(state, options, document, objectId, getEditorCommandSafeSceneHierarchy(operations));
23
+ },
24
+ createPrimitive(input) {
25
+ return createEditorCommandPrimitiveObject(state, options, input, renderUi, operations);
26
+ },
27
+ createFromAsset(input) {
28
+ return createEditorCommandObjectFromAsset(state, options, input, renderUi, operations);
29
+ },
30
+ deleteObjects(input) {
31
+ return deleteEditorCommandObjects(state, options, input, renderUi, operations);
32
+ },
33
+ };
34
+ }
35
+ export function listEditorCommandSceneObjects(state, options, document, includeUnselectable, operations) {
36
+ const hierarchy = getEditorCommandSafeSceneHierarchy(operations);
37
+ return hierarchy
38
+ .map(item => createEditorCommandSceneObject(state, options, document, item.id, hierarchy))
39
+ .filter((object) => !!object)
40
+ .filter(object => includeUnselectable || object.selectable !== false);
41
+ }
42
+ export function createEditorCommandSceneObject(state, options, document, objectId, hierarchyItems) {
43
+ const item = hierarchyItems.find(candidate => candidate.id === objectId) ?? null;
44
+ if (!item)
45
+ return null;
46
+ const projectionNode = options.documentAdapter.getProjectionNode(document, objectId);
47
+ const runtimeTransform = state.projection?.readNodeTransform(objectId) ?? null;
48
+ const documentTransform = projectionNode?.transform ?? null;
49
+ const transform = editorTransformSnapshotToAgentTransform(runtimeTransform ?? documentTransform);
50
+ const bounds = createEditorCommandSceneObjectBounds(state.projection?.getSelectionBounds([objectId]) ?? null, transform?.position);
51
+ const locked = isEditorCommandDocumentNodeLocked(options, document, objectId);
52
+ const selectable = isEditorCommandDocumentNodeSelectable(options, document, objectId);
53
+ return {
54
+ id: objectId,
55
+ name: projectionNode?.name,
56
+ label: item?.label ?? projectionNode?.name ?? objectId,
57
+ type: projectionNode?.runtimeKind ?? projectionNode?.helperKind ?? item?.role,
58
+ path: createEditorCommandHierarchyPath(objectId, hierarchyItems),
59
+ parentId: item?.parentId ?? projectionNode?.parentId ?? null,
60
+ selectable,
61
+ locked,
62
+ ...(transform ? { transform } : {}),
63
+ ...(bounds ? { bounds } : {}),
64
+ };
65
+ }
66
+ function createEditorCommandSceneObjectBounds(bounds, fallbackCenter) {
67
+ const record = bounds && typeof bounds === 'object' && !Array.isArray(bounds)
68
+ ? bounds
69
+ : null;
70
+ const min = record ? readEditorCommandFiniteVec3(record.min) : null;
71
+ const max = record ? readEditorCommandFiniteVec3(record.max) : null;
72
+ const size = record ? readEditorCommandFiniteVec3(record.size) : null;
73
+ const center = record ? readEditorCommandFiniteVec3(record.center) : null;
74
+ const hasInvertedMinMax = !!min && !!max && (min.x > max.x
75
+ || min.y > max.y
76
+ || min.z > max.z);
77
+ if (!hasInvertedMinMax && (min || max || size || center)) {
78
+ return {
79
+ ...(min ? { min } : {}),
80
+ ...(max ? { max } : {}),
81
+ ...(size ? { size } : {}),
82
+ ...(center ? { center } : {}),
83
+ };
84
+ }
85
+ if (!fallbackCenter || !isEditorCommandFiniteVec3(fallbackCenter))
86
+ return null;
87
+ const safeCenter = cloneVec3(fallbackCenter);
88
+ return {
89
+ min: cloneVec3(safeCenter),
90
+ max: cloneVec3(safeCenter),
91
+ center: cloneVec3(safeCenter),
92
+ size: { x: 0, y: 0, z: 0 },
93
+ };
94
+ }
95
+ function readEditorCommandFiniteVec3(value) {
96
+ if (!value || typeof value !== 'object' || Array.isArray(value))
97
+ return null;
98
+ const record = value;
99
+ const vec3 = {
100
+ x: record.x,
101
+ y: record.y,
102
+ z: record.z,
103
+ };
104
+ return isEditorCommandFiniteVec3(vec3) ? {
105
+ x: vec3.x,
106
+ y: vec3.y,
107
+ z: vec3.z,
108
+ } : null;
109
+ }
110
+ function isEditorCommandFiniteVec3(value) {
111
+ if (!value || typeof value !== 'object' || Array.isArray(value))
112
+ return false;
113
+ const record = value;
114
+ return Number.isFinite(record.x)
115
+ && Number.isFinite(record.y)
116
+ && Number.isFinite(record.z);
117
+ }
118
+ function resolveEditorCommandObject(state, options, input, operations) {
119
+ const document = state.session?.getState({ cloneDocuments: false }).workingDocument ?? null;
120
+ if (state.mode !== 'editor' || !document) {
121
+ return { objects: [], resolvedObject: null, ambiguous: false };
122
+ }
123
+ const objects = listEditorCommandSceneObjects(state, options, document, input.includeUnselectable === true, operations);
124
+ const objectId = normalizeEditorCommandString(input.objectId);
125
+ const name = normalizeEditorCommandString(input.name);
126
+ const path = normalizeEditorCommandString(input.path);
127
+ const type = normalizeEditorCommandString(input.type);
128
+ const query = normalizeEditorCommandString(input.query).toLowerCase();
129
+ const matches = objects.filter(object => {
130
+ if (objectId && object.id !== objectId)
131
+ return false;
132
+ if (name && object.name !== name && object.label !== name)
133
+ return false;
134
+ if (path && object.path !== path)
135
+ return false;
136
+ if (type && object.type !== type)
137
+ return false;
138
+ if (query && !commandServiceObjectMatchesQuery(object, query))
139
+ return false;
140
+ return true;
141
+ });
142
+ return {
143
+ objects: matches,
144
+ resolvedObject: matches.length === 1 ? matches[0] : null,
145
+ ambiguous: matches.length > 1,
146
+ };
147
+ }
148
+ function createEditorCommandPrimitiveObject(state, options, input, renderUi, operations) {
149
+ const shape = normalizeEditorCommandString(input.shape);
150
+ if (!isEditorCommandPrimitiveShape(shape)) {
151
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE, 'object.createPrimitive requires shape to be cube, sphere, plane, or capsule.', { code: 'object.create.invalidInput' });
152
+ }
153
+ if (state.mode !== 'editor' || !state.session) {
154
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE, 'Editor is not in edit mode.', { code: 'editor.notReady' });
155
+ }
156
+ if (!hasEditorCommandSafeSceneScope(operations)) {
157
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE, 'Scene object creation is unavailable outside the Scene Hierarchy scope.', { code: 'object.sceneScopeRequired' });
158
+ }
159
+ const sessionState = state.session.getState({ cloneDocuments: false });
160
+ const document = sessionState.workingDocument;
161
+ const hierarchy = getEditorCommandSafeSceneHierarchy(operations);
162
+ const requestedParentId = input.parentId === null ? null : normalizeEditorCommandString(input.parentId) || null;
163
+ const requestedActiveId = input.activeId === null
164
+ ? null
165
+ : normalizeEditorCommandString(input.activeId) || getEditorCommandSafeSceneSelection(operations).activeId;
166
+ const invalidTargetId = [requestedParentId, requestedActiveId]
167
+ .find(id => id && !hierarchy.some(item => item.id === id));
168
+ if (invalidTargetId) {
169
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE, `Create target is unavailable in the safe Hierarchy projection: ${invalidTargetId}`, { code: 'object.create.invalidTarget', objectId: invalidTargetId });
170
+ }
171
+ const intent = {
172
+ shape,
173
+ name: normalizeEditorCommandString(input.name) || undefined,
174
+ parentId: requestedParentId,
175
+ activeId: requestedActiveId,
176
+ };
177
+ operations.cancelActiveOperation();
178
+ const patch = options.documentAdapter.createSceneGraphCreatePrimitivePatch?.(document, intent);
179
+ if (!patch) {
180
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE, `Primitive patch was not created for shape: ${shape}`, { code: 'object.create.patchUnavailable' });
181
+ }
182
+ const result = state.session.dispatch({
183
+ type: 'document.patch',
184
+ label: patch.label ?? `Create ${shape}`,
185
+ patch: patch.patch,
186
+ targetId: patch.createdId ?? undefined,
187
+ ...operations.withProjectionImpact(operations.resolveProjectionImpact(patch, operations.createKnownCreatedReprojectProjectionImpact({
188
+ createdNodeIds: [patch.createdId],
189
+ reprojectIds: patch.reprojectIds,
190
+ }))),
191
+ });
192
+ if (!result.documentChanged) {
193
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE, `Create ${shape} did not change the document.`, { code: 'object.create.unchanged' });
194
+ }
195
+ const createdId = patch.createdId ?? null;
196
+ if (!createdId) {
197
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE, `Create ${shape} did not return a created id.`, { code: 'object.create.missingCreatedId' });
198
+ }
199
+ let selection = result.selection;
200
+ const updatedHierarchy = getEditorCommandSafeSceneHierarchy(operations);
201
+ if (isEditorCommandHierarchyObjectSelectable(options, result.workingDocument, createdId, updatedHierarchy)) {
202
+ selection = state.session.dispatch({
203
+ type: 'selection.replace',
204
+ selectedIds: [createdId],
205
+ activeId: createdId,
206
+ label: 'Agent Select Created Primitive',
207
+ }).selection;
208
+ }
209
+ else {
210
+ selection = operations.sanitizeSelection(result.workingDocument, selection) ?? selection;
211
+ }
212
+ selection = reconcileEditorCommandSafeSceneSelection(state, operations, selection);
213
+ operations.rebuildProjectionFromDocument(result.workingDocument, selection);
214
+ state.summary = operations.summarizeDocument(result.workingDocument, state.session.getSource());
215
+ state.status = patch.label ?? `Agent created ${shape} ${createdId}`;
216
+ renderUi();
217
+ const object = createEditorCommandSceneObject(state, options, result.workingDocument, createdId, getEditorCommandSafeSceneHierarchy(operations));
218
+ if (!object) {
219
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE, 'Created object is unavailable in the safe Scene Hierarchy projection.', { code: 'object.create.projectionIntegrity' });
220
+ }
221
+ return {
222
+ createdId,
223
+ object,
224
+ selection: cloneEditorCommandSelection(getEditorCommandSafeSceneSelection(operations)),
225
+ };
226
+ }
227
+ async function createEditorCommandObjectFromAsset(state, options, input, renderUi, operations) {
228
+ const assetId = normalizeEditorCommandString(input.assetId);
229
+ if (!assetId) {
230
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET, 'object.createFromAsset requires assetId.', { code: 'object.createFromAsset.invalidInput' });
231
+ }
232
+ if (state.mode !== 'editor' || !state.session) {
233
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET, 'Editor is not in edit mode.', { code: 'editor.notReady' });
234
+ }
235
+ if (!hasEditorCommandSafeSceneScope(operations)) {
236
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET, 'Scene asset placement is unavailable outside the Scene Hierarchy scope. Use prefab.node.createFromAsset in Prefab Stage.', { code: 'object.sceneScopeRequired' });
237
+ }
238
+ const asset = findEditorCommandVisibleAssetInfo(state, options, assetId);
239
+ if (!asset) {
240
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET, `Asset not found: ${assetId}`, { code: 'asset.notFound' });
241
+ }
242
+ if (asset.placeable === false) {
243
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET, `Asset is not placeable: ${assetId}`, { code: 'asset.unplaceable' });
244
+ }
245
+ const placement = createEditorCommandAssetPlacement(input);
246
+ if (placement === false) {
247
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET, 'object.createFromAsset position, rotation, and scale must be finite vec3 values when supplied.', { code: 'object.createFromAsset.invalidTransform' });
248
+ }
249
+ const result = operations.createAssetFromAssetId(assetId, {
250
+ name: normalizeEditorCommandString(input.name) || undefined,
251
+ placement,
252
+ select: input.select !== false,
253
+ });
254
+ if (!result.ok) {
255
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET, result.status || `Create from asset failed: ${assetId}`, { code: result.error ?? 'object.createFromAsset.failed' });
256
+ }
257
+ const createdId = normalizeEditorCommandString(result.createdId);
258
+ if (!createdId) {
259
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET, `Create from asset did not return a created id: ${assetId}`, { code: 'object.createFromAsset.missingCreatedId' });
260
+ }
261
+ const hierarchyToken = captureEditorCommandSceneHierarchyToken(operations);
262
+ if (!hierarchyToken) {
263
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET, 'Asset placement completed without a current Scene Hierarchy scope.', { code: 'object.createFromAsset.hierarchyUnavailable' });
264
+ }
265
+ await waitForEditorCommandProjectionIdle(state);
266
+ if (!isEditorCommandSceneHierarchyTokenCurrent(operations, hierarchyToken)) {
267
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET, 'Scene Hierarchy authority or revision changed while asset placement was pending.', {
268
+ code: 'object.createFromAsset.staleHierarchy',
269
+ details: {
270
+ expectedAuthorityToken: hierarchyToken.authorityToken,
271
+ expectedScopeKey: hierarchyToken.scopeKey,
272
+ expectedRevision: hierarchyToken.revision,
273
+ },
274
+ });
275
+ }
276
+ const document = state.session.getState({ cloneDocuments: false }).workingDocument;
277
+ const safeScene = getEditorCommandSafeSceneReadModel(operations);
278
+ const hierarchy = safeScene.hierarchy;
279
+ const selection = safeScene.selection;
280
+ const object = createEditorCommandSceneObject(state, options, document, createdId, hierarchy);
281
+ if (!object) {
282
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET, 'Placed asset object is unavailable in the safe Scene Hierarchy projection.', { code: 'object.createFromAsset.projectionIntegrity' });
283
+ }
284
+ let focused = false;
285
+ if (input.focus === true && hierarchy.some(item => item.id === createdId)) {
286
+ focused = operations.focusProjectionNode(createdId);
287
+ if (focused)
288
+ renderUi();
289
+ }
290
+ return {
291
+ assetId,
292
+ createdId,
293
+ object,
294
+ selection: cloneEditorCommandSelection(selection),
295
+ focused,
296
+ status: result.status,
297
+ };
298
+ }
299
+ async function waitForEditorCommandProjectionIdle(state) {
300
+ const waitForIdle = state.projection?.waitForIdle;
301
+ if (!waitForIdle)
302
+ return;
303
+ await Promise.race([
304
+ waitForIdle.call(state.projection),
305
+ new Promise(resolve => setTimeout(resolve, OBJECT_CREATE_FROM_ASSET_PROJECTION_WAIT_MS)),
306
+ ]);
307
+ }
308
+ function captureEditorCommandSceneHierarchyToken(operations) {
309
+ const model = operations.getHierarchyReadModel();
310
+ return model.snapshot.scopeType === 'scene'
311
+ ? {
312
+ authorityToken: model.authorityToken,
313
+ scopeKey: model.snapshot.scopeKey,
314
+ revision: model.snapshot.revision,
315
+ }
316
+ : null;
317
+ }
318
+ function isEditorCommandSceneHierarchyTokenCurrent(operations, expected) {
319
+ const current = captureEditorCommandSceneHierarchyToken(operations);
320
+ return current?.authorityToken === expected.authorityToken
321
+ && current.scopeKey === expected.scopeKey
322
+ && current.revision === expected.revision;
323
+ }
324
+ function createEditorCommandAssetPlacement(input) {
325
+ const hasPosition = input.position !== undefined;
326
+ const hasRotation = input.rotation !== undefined;
327
+ const hasScale = input.scale !== undefined;
328
+ if (!hasPosition && !hasRotation && !hasScale)
329
+ return undefined;
330
+ if ((hasPosition && !isLocalEditorCommandVec3(input.position))
331
+ || (hasRotation && !isLocalEditorCommandVec3(input.rotation))
332
+ || (hasScale && !isLocalEditorCommandVec3(input.scale))) {
333
+ return false;
334
+ }
335
+ return {
336
+ position: hasPosition && input.position ? cloneVec3(input.position) : { x: 0, y: 0, z: 0 },
337
+ rotation: hasRotation && input.rotation ? cloneVec3(input.rotation) : { x: 0, y: 0, z: 0 },
338
+ scale: hasScale && input.scale ? cloneVec3(input.scale) : { x: 1, y: 1, z: 1 },
339
+ };
340
+ }
341
+ function deleteEditorCommandObjects(state, options, input, renderUi, operations) {
342
+ const normalized = normalizeEditorCommandDeleteInput(input);
343
+ if (!normalized.ok)
344
+ return normalized.result;
345
+ if (state.mode !== 'editor' || !state.session) {
346
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_DELETE, 'Editor is not in edit mode.', { code: 'editor.notReady' });
347
+ }
348
+ if (!hasEditorCommandSafeSceneScope(operations)) {
349
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_DELETE, 'Scene object deletion is unavailable outside the Scene Hierarchy scope.', { code: 'object.sceneScopeRequired' });
350
+ }
351
+ const document = state.session.getState({ cloneDocuments: false }).workingDocument;
352
+ const intent = {
353
+ ids: normalized.ids,
354
+ activeId: normalized.activeId,
355
+ };
356
+ operations.cancelActiveOperation();
357
+ const hierarchy = getEditorCommandSafeSceneHierarchy(operations);
358
+ const invalidTargetId = [...intent.ids, intent.activeId]
359
+ .find(id => id && !hierarchy.some(item => item.id === id));
360
+ if (invalidTargetId) {
361
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_DELETE, `Delete target is unavailable in the safe Hierarchy projection: ${invalidTargetId}`, { code: 'object.delete.invalidTarget', objectId: invalidTargetId });
362
+ }
363
+ const validation = validateSceneGraphDelete(hierarchy, intent);
364
+ if (!validation.ok) {
365
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_DELETE, `Delete rejected: ${validation.reason ?? 'invalid scene graph delete'}.`, { code: 'object.delete.rejected', objectId: normalized.ids[0] });
366
+ }
367
+ const patch = options.documentAdapter.createSceneGraphDeletePatch?.(document, intent);
368
+ if (!patch) {
369
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_DELETE, 'Delete patch was not created.', { code: 'object.delete.patchUnavailable', objectId: normalized.ids[0] });
370
+ }
371
+ const result = state.session.dispatch({
372
+ type: 'document.patch',
373
+ label: patch.label ?? `Delete ${intent.ids.length} node(s)`,
374
+ patch: patch.patch,
375
+ targetId: intent.activeId ?? undefined,
376
+ ...operations.withProjectionImpact(operations.resolveProjectionImpact(patch, patch.deletedIds
377
+ ? operations.createDeletedNodeProjectionImpact(patch.deletedIds)
378
+ : undefined)),
379
+ });
380
+ if (!result.documentChanged) {
381
+ return createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_DELETE, 'Delete did not change the document.', { code: 'object.delete.unchanged', objectId: normalized.ids[0] });
382
+ }
383
+ const deletedIds = (patch.deletedIds ?? normalized.ids)
384
+ .filter(id => hierarchy.some(item => item.id === id));
385
+ const rawFallbackSelectionId = patch.fallbackSelectionId ?? null;
386
+ let selection = result.selection;
387
+ const updatedHierarchy = getEditorCommandSafeSceneHierarchy(operations);
388
+ const fallbackSelectionId = rawFallbackSelectionId
389
+ && updatedHierarchy.some(item => item.id === rawFallbackSelectionId)
390
+ ? rawFallbackSelectionId
391
+ : null;
392
+ if (fallbackSelectionId && isEditorCommandHierarchyObjectSelectable(options, result.workingDocument, fallbackSelectionId, updatedHierarchy)) {
393
+ selection = state.session.dispatch({
394
+ type: 'selection.replace',
395
+ selectedIds: [fallbackSelectionId],
396
+ activeId: fallbackSelectionId,
397
+ label: 'Agent Select Delete Fallback',
398
+ }).selection;
399
+ }
400
+ else {
401
+ selection = operations.sanitizeSelection(result.workingDocument, selection) ?? selection;
402
+ }
403
+ selection = reconcileEditorCommandSafeSceneSelection(state, operations, selection);
404
+ operations.rebuildProjectionFromDocument(result.workingDocument, selection);
405
+ state.summary = operations.summarizeDocument(result.workingDocument, state.session.getSource());
406
+ state.status = patch.label ?? `Agent deleted ${deletedIds.length} node(s)`;
407
+ renderUi();
408
+ return {
409
+ deletedIds,
410
+ fallbackSelectionId,
411
+ selection: cloneEditorCommandSelection(getEditorCommandSafeSceneSelection(operations)),
412
+ };
413
+ }
414
+ function reconcileEditorCommandSafeSceneSelection(state, operations, currentSelection) {
415
+ const safeSelection = getEditorCommandSafeSceneSelection(operations);
416
+ if (safeSelection.activeId === currentSelection.activeId
417
+ && safeSelection.selectedIds.length === currentSelection.selectedIds.length
418
+ && safeSelection.selectedIds.every((id, index) => id === currentSelection.selectedIds[index])) {
419
+ return safeSelection;
420
+ }
421
+ return state.session?.dispatch({
422
+ type: 'selection.replace',
423
+ selectedIds: safeSelection.selectedIds,
424
+ activeId: safeSelection.activeId,
425
+ label: 'Agent Reconcile Safe Hierarchy Selection',
426
+ }).selection ?? safeSelection;
427
+ }
428
+ function commandServiceObjectMatchesQuery(object, query) {
429
+ return [
430
+ object.id,
431
+ object.name,
432
+ object.label,
433
+ object.type,
434
+ object.path,
435
+ ].some(value => typeof value === 'string' && value.toLowerCase().includes(query));
436
+ }
437
+ function createEditorCommandHierarchyPath(objectId, hierarchyItems) {
438
+ const byId = new Map(hierarchyItems.map(item => [item.id, item]));
439
+ const path = [];
440
+ const seen = new Set();
441
+ let cursor = byId.get(objectId) ?? null;
442
+ while (cursor && !seen.has(cursor.id)) {
443
+ seen.add(cursor.id);
444
+ path.unshift(cursor.label || cursor.id);
445
+ cursor = cursor.parentId ? byId.get(cursor.parentId) ?? null : null;
446
+ }
447
+ return path.length > 0 ? path.join(' / ') : undefined;
448
+ }
449
+ function isEditorCommandPrimitiveShape(value) {
450
+ return value === 'cube' || value === 'sphere' || value === 'plane' || value === 'capsule';
451
+ }
452
+ function normalizeEditorCommandDeleteInput(input) {
453
+ const objectId = normalizeEditorCommandString(input.objectId);
454
+ const hasObjectId = objectId.length > 0;
455
+ const hasObjectIds = Array.isArray(input.objectIds);
456
+ if (hasObjectId === hasObjectIds) {
457
+ return {
458
+ ok: false,
459
+ result: createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_DELETE, 'object.delete requires exactly one of objectId or objectIds.', { code: 'object.delete.invalidInput', objectId: objectId || undefined }),
460
+ };
461
+ }
462
+ const ids = hasObjectId
463
+ ? [objectId]
464
+ : normalizeEditorCommandIdList(input.objectIds);
465
+ if (ids.length === 0) {
466
+ return {
467
+ ok: false,
468
+ result: createLocalEditorCommandFailure(EDITOR_COMMAND_ID.OBJECT_DELETE, 'object.delete requires at least one object id.', { code: 'object.delete.invalidInput' }),
469
+ };
470
+ }
471
+ const requestedActiveId = normalizeEditorCommandString(input.activeId);
472
+ return {
473
+ ok: true,
474
+ ids,
475
+ activeId: requestedActiveId && ids.includes(requestedActiveId)
476
+ ? requestedActiveId
477
+ : ids[ids.length - 1] ?? null,
478
+ };
479
+ }
480
+ //# sourceMappingURL=scene-objects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene-objects.js","sourceRoot":"","sources":["../../../src/editor-commands/capabilities/scene-objects.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type EditorTransformSnapshot,\n type EditorSelectionState,\n type SceneGraphCreatePrimitiveIntent,\n type SceneGraphDeleteIntent,\n validateSceneGraphDelete,\n} from '@fps-games/editor-core';\nimport {\n EDITOR_COMMAND_ID,\n type EditorCommandObjectCreateFromAssetInput,\n type EditorCommandObjectCreateFromAssetOutput,\n type EditorCommandObjectCreatePrimitiveOutput,\n type EditorCommandObjectDeleteOutput,\n type EditorCommandObjectResolveInput,\n type EditorCommandObjectResolveOutput,\n type EditorCommandPrimitiveShape,\n type EditorCommandBounds,\n type EditorCommandSceneObject,\n type EditorCommandVec3,\n} from '@fps-games/editor-protocol';\nimport {\n cloneVec3,\n createLocalEditorCommandFailure,\n editorTransformSnapshotToAgentTransform,\n isLocalEditorCommandVec3,\n} from '../diagnostics.js';\nimport { findEditorCommandVisibleAssetInfo } from './assets.js';\nimport type { LocalEditorCommandObjectSource } from '../source-types.js';\nimport {\n cloneEditorCommandSelection,\n getEditorCommandSafeSceneHierarchy,\n getEditorCommandSafeSceneReadModel,\n getEditorCommandSafeSceneSelection,\n hasEditorCommandSafeSceneScope,\n isEditorCommandDocumentNodeLocked,\n isEditorCommandDocumentNodeSelectable,\n isEditorCommandHierarchyObjectSelectable,\n normalizeEditorCommandIdList,\n normalizeEditorCommandString,\n type LocalEditorCommandHierarchyItem,\n type LocalEditorCommandCapabilitySourceOperations,\n type LocalEditorCommandHarnessState,\n} from '../shared.js';\nimport type { LocalEditorHarnessOptions } from '../../local-editor-harness.js';\n\nconst OBJECT_CREATE_FROM_ASSET_PROJECTION_WAIT_MS = 3000;\n\nexport function createLocalEditorCommandObjectSource<TDocument, TPatch, TAsset>(\n state: LocalEditorCommandHarnessState<TDocument, TPatch>,\n options: LocalEditorHarnessOptions<TDocument, TPatch, TAsset>,\n renderUi: () => void,\n operations: LocalEditorCommandCapabilitySourceOperations<TDocument>,\n): LocalEditorCommandObjectSource {\n return {\n listObjects(input) {\n const document = state.session?.getState({ cloneDocuments: false }).workingDocument ?? null;\n if (state.mode !== 'editor' || !document) return [];\n return listEditorCommandSceneObjects(state, options, document, input.includeUnselectable === true, operations);\n },\n resolveObject(input) {\n return resolveEditorCommandObject(state, options, input, operations);\n },\n getObject(objectId) {\n const document = state.session?.getState({ cloneDocuments: false }).workingDocument ?? null;\n if (state.mode !== 'editor' || !document) return null;\n return createEditorCommandSceneObject(\n state,\n options,\n document,\n objectId,\n getEditorCommandSafeSceneHierarchy(operations),\n );\n },\n createPrimitive(input) {\n return createEditorCommandPrimitiveObject(state, options, input, renderUi, operations);\n },\n createFromAsset(input) {\n return createEditorCommandObjectFromAsset(state, options, input, renderUi, operations);\n },\n deleteObjects(input) {\n return deleteEditorCommandObjects(state, options, input, renderUi, operations);\n },\n };\n}\n\nexport function listEditorCommandSceneObjects<TDocument, TPatch, TAsset>(\n state: LocalEditorCommandHarnessState<TDocument, TPatch>,\n options: LocalEditorHarnessOptions<TDocument, TPatch, TAsset>,\n document: TDocument,\n includeUnselectable: boolean,\n operations: Pick<LocalEditorCommandCapabilitySourceOperations<TDocument>, 'getHierarchyReadModel'>,\n): EditorCommandSceneObject[] {\n const hierarchy = getEditorCommandSafeSceneHierarchy(operations);\n return hierarchy\n .map(item => createEditorCommandSceneObject(state, options, document, item.id, hierarchy))\n .filter((object): object is EditorCommandSceneObject => !!object)\n .filter(object => includeUnselectable || object.selectable !== false);\n}\n\nexport function createEditorCommandSceneObject<TDocument, TPatch, TAsset>(\n state: LocalEditorCommandHarnessState<TDocument, TPatch>,\n options: LocalEditorHarnessOptions<TDocument, TPatch, TAsset>,\n document: TDocument,\n objectId: string,\n hierarchyItems: readonly LocalEditorCommandHierarchyItem[],\n): EditorCommandSceneObject | null {\n const item = hierarchyItems.find(candidate => candidate.id === objectId) ?? null;\n if (!item) return null;\n const projectionNode = options.documentAdapter.getProjectionNode(document, objectId);\n const runtimeTransform = state.projection?.readNodeTransform(objectId) ?? null;\n const documentTransform = projectionNode?.transform ?? null;\n const transform = editorTransformSnapshotToAgentTransform(runtimeTransform ?? documentTransform);\n const bounds = createEditorCommandSceneObjectBounds(state.projection?.getSelectionBounds([objectId]) ?? null, transform?.position);\n const locked = isEditorCommandDocumentNodeLocked(options, document, objectId);\n const selectable = isEditorCommandDocumentNodeSelectable(options, document, objectId);\n return {\n id: objectId,\n name: projectionNode?.name,\n label: item?.label ?? projectionNode?.name ?? objectId,\n type: projectionNode?.runtimeKind ?? projectionNode?.helperKind ?? item?.role,\n path: createEditorCommandHierarchyPath(objectId, hierarchyItems),\n parentId: item?.parentId ?? projectionNode?.parentId ?? null,\n selectable,\n locked,\n ...(transform ? { transform } : {}),\n ...(bounds ? { bounds } : {}),\n };\n}\n\nfunction createEditorCommandSceneObjectBounds(\n bounds: unknown,\n fallbackCenter?: EditorCommandVec3,\n): EditorCommandBounds | null {\n const record = bounds && typeof bounds === 'object' && !Array.isArray(bounds)\n ? bounds as Record<string, unknown>\n : null;\n const min = record ? readEditorCommandFiniteVec3(record.min) : null;\n const max = record ? readEditorCommandFiniteVec3(record.max) : null;\n const size = record ? readEditorCommandFiniteVec3(record.size) : null;\n const center = record ? readEditorCommandFiniteVec3(record.center) : null;\n const hasInvertedMinMax = !!min && !!max && (\n min.x > max.x\n || min.y > max.y\n || min.z > max.z\n );\n if (!hasInvertedMinMax && (min || max || size || center)) {\n return {\n ...(min ? { min } : {}),\n ...(max ? { max } : {}),\n ...(size ? { size } : {}),\n ...(center ? { center } : {}),\n };\n }\n if (!fallbackCenter || !isEditorCommandFiniteVec3(fallbackCenter)) return null;\n const safeCenter = cloneVec3(fallbackCenter);\n return {\n min: cloneVec3(safeCenter),\n max: cloneVec3(safeCenter),\n center: cloneVec3(safeCenter),\n size: { x: 0, y: 0, z: 0 },\n };\n}\n\nfunction readEditorCommandFiniteVec3(value: unknown): EditorCommandVec3 | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n const vec3 = {\n x: record.x,\n y: record.y,\n z: record.z,\n };\n return isEditorCommandFiniteVec3(vec3) ? {\n x: vec3.x,\n y: vec3.y,\n z: vec3.z,\n } : null;\n}\n\nfunction isEditorCommandFiniteVec3(value: unknown): value is EditorCommandVec3 {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n return Number.isFinite(record.x)\n && Number.isFinite(record.y)\n && Number.isFinite(record.z);\n}\n\nfunction resolveEditorCommandObject<TDocument, TPatch, TAsset>(\n state: LocalEditorCommandHarnessState<TDocument, TPatch>,\n options: LocalEditorHarnessOptions<TDocument, TPatch, TAsset>,\n input: EditorCommandObjectResolveInput,\n operations: Pick<LocalEditorCommandCapabilitySourceOperations<TDocument>, 'getHierarchyReadModel'>,\n): EditorCommandObjectResolveOutput {\n const document = state.session?.getState({ cloneDocuments: false }).workingDocument ?? null;\n if (state.mode !== 'editor' || !document) {\n return { objects: [], resolvedObject: null, ambiguous: false };\n }\n const objects = listEditorCommandSceneObjects(\n state,\n options,\n document,\n input.includeUnselectable === true,\n operations,\n );\n const objectId = normalizeEditorCommandString(input.objectId);\n const name = normalizeEditorCommandString(input.name);\n const path = normalizeEditorCommandString(input.path);\n const type = normalizeEditorCommandString(input.type);\n const query = normalizeEditorCommandString(input.query).toLowerCase();\n const matches = objects.filter(object => {\n if (objectId && object.id !== objectId) return false;\n if (name && object.name !== name && object.label !== name) return false;\n if (path && object.path !== path) return false;\n if (type && object.type !== type) return false;\n if (query && !commandServiceObjectMatchesQuery(object, query)) return false;\n return true;\n });\n return {\n objects: matches,\n resolvedObject: matches.length === 1 ? matches[0] : null,\n ambiguous: matches.length > 1,\n };\n}\n\nfunction createEditorCommandPrimitiveObject<TDocument, TPatch, TAsset>(\n state: LocalEditorCommandHarnessState<TDocument, TPatch>,\n options: LocalEditorHarnessOptions<TDocument, TPatch, TAsset>,\n input: { shape?: unknown; name?: unknown; parentId?: unknown; activeId?: unknown },\n renderUi: () => void,\n operations: LocalEditorCommandCapabilitySourceOperations<TDocument>,\n): EditorCommandObjectCreatePrimitiveOutput | ReturnType<typeof createLocalEditorCommandFailure> {\n const shape = normalizeEditorCommandString(input.shape);\n if (!isEditorCommandPrimitiveShape(shape)) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE,\n 'object.createPrimitive requires shape to be cube, sphere, plane, or capsule.',\n { code: 'object.create.invalidInput' },\n );\n }\n if (state.mode !== 'editor' || !state.session) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE,\n 'Editor is not in edit mode.',\n { code: 'editor.notReady' },\n );\n }\n if (!hasEditorCommandSafeSceneScope(operations)) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE,\n 'Scene object creation is unavailable outside the Scene Hierarchy scope.',\n { code: 'object.sceneScopeRequired' },\n );\n }\n const sessionState = state.session.getState({ cloneDocuments: false });\n const document = sessionState.workingDocument;\n const hierarchy = getEditorCommandSafeSceneHierarchy(operations);\n const requestedParentId = input.parentId === null ? null : normalizeEditorCommandString(input.parentId) || null;\n const requestedActiveId = input.activeId === null\n ? null\n : normalizeEditorCommandString(input.activeId) || getEditorCommandSafeSceneSelection(operations).activeId;\n const invalidTargetId = [requestedParentId, requestedActiveId]\n .find(id => id && !hierarchy.some(item => item.id === id));\n if (invalidTargetId) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE,\n `Create target is unavailable in the safe Hierarchy projection: ${invalidTargetId}`,\n { code: 'object.create.invalidTarget', objectId: invalidTargetId },\n );\n }\n const intent: SceneGraphCreatePrimitiveIntent = {\n shape,\n name: normalizeEditorCommandString(input.name) || undefined,\n parentId: requestedParentId,\n activeId: requestedActiveId,\n };\n operations.cancelActiveOperation();\n const patch = options.documentAdapter.createSceneGraphCreatePrimitivePatch?.(document, intent);\n if (!patch) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE,\n `Primitive patch was not created for shape: ${shape}`,\n { code: 'object.create.patchUnavailable' },\n );\n }\n const result = state.session.dispatch({\n type: 'document.patch',\n label: patch.label ?? `Create ${shape}`,\n patch: patch.patch,\n targetId: patch.createdId ?? undefined,\n ...operations.withProjectionImpact(operations.resolveProjectionImpact(\n patch,\n operations.createKnownCreatedReprojectProjectionImpact({\n createdNodeIds: [patch.createdId],\n reprojectIds: patch.reprojectIds,\n }),\n )),\n });\n if (!result.documentChanged) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE,\n `Create ${shape} did not change the document.`,\n { code: 'object.create.unchanged' },\n );\n }\n const createdId = patch.createdId ?? null;\n if (!createdId) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE,\n `Create ${shape} did not return a created id.`,\n { code: 'object.create.missingCreatedId' },\n );\n }\n let selection: EditorSelectionState = result.selection;\n const updatedHierarchy = getEditorCommandSafeSceneHierarchy(operations);\n if (isEditorCommandHierarchyObjectSelectable(options, result.workingDocument, createdId, updatedHierarchy)) {\n selection = state.session.dispatch({\n type: 'selection.replace',\n selectedIds: [createdId],\n activeId: createdId,\n label: 'Agent Select Created Primitive',\n }).selection;\n } else {\n selection = operations.sanitizeSelection(result.workingDocument, selection) ?? selection;\n }\n selection = reconcileEditorCommandSafeSceneSelection(state, operations, selection);\n operations.rebuildProjectionFromDocument(result.workingDocument, selection);\n state.summary = operations.summarizeDocument(result.workingDocument, state.session.getSource());\n state.status = patch.label ?? `Agent created ${shape} ${createdId}`;\n renderUi();\n const object = createEditorCommandSceneObject(\n state,\n options,\n result.workingDocument,\n createdId,\n getEditorCommandSafeSceneHierarchy(operations),\n );\n if (!object) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_PRIMITIVE,\n 'Created object is unavailable in the safe Scene Hierarchy projection.',\n { code: 'object.create.projectionIntegrity' },\n );\n }\n return {\n createdId,\n object,\n selection: cloneEditorCommandSelection(getEditorCommandSafeSceneSelection(operations)),\n };\n}\n\nasync function createEditorCommandObjectFromAsset<TDocument, TPatch, TAsset>(\n state: LocalEditorCommandHarnessState<TDocument, TPatch>,\n options: LocalEditorHarnessOptions<TDocument, TPatch, TAsset>,\n input: EditorCommandObjectCreateFromAssetInput,\n renderUi: () => void,\n operations: LocalEditorCommandCapabilitySourceOperations<TDocument>,\n): Promise<EditorCommandObjectCreateFromAssetOutput | ReturnType<typeof createLocalEditorCommandFailure>> {\n const assetId = normalizeEditorCommandString(input.assetId);\n if (!assetId) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET,\n 'object.createFromAsset requires assetId.',\n { code: 'object.createFromAsset.invalidInput' },\n );\n }\n if (state.mode !== 'editor' || !state.session) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET,\n 'Editor is not in edit mode.',\n { code: 'editor.notReady' },\n );\n }\n if (!hasEditorCommandSafeSceneScope(operations)) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET,\n 'Scene asset placement is unavailable outside the Scene Hierarchy scope. Use prefab.node.createFromAsset in Prefab Stage.',\n { code: 'object.sceneScopeRequired' },\n );\n }\n const asset = findEditorCommandVisibleAssetInfo(state, options, assetId);\n if (!asset) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET,\n `Asset not found: ${assetId}`,\n { code: 'asset.notFound' },\n );\n }\n if (asset.placeable === false) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET,\n `Asset is not placeable: ${assetId}`,\n { code: 'asset.unplaceable' },\n );\n }\n const placement = createEditorCommandAssetPlacement(input);\n if (placement === false) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET,\n 'object.createFromAsset position, rotation, and scale must be finite vec3 values when supplied.',\n { code: 'object.createFromAsset.invalidTransform' },\n );\n }\n const result = operations.createAssetFromAssetId(assetId, {\n name: normalizeEditorCommandString(input.name) || undefined,\n placement,\n select: input.select !== false,\n });\n if (!result.ok) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET,\n result.status || `Create from asset failed: ${assetId}`,\n { code: result.error ?? 'object.createFromAsset.failed' },\n );\n }\n const createdId = normalizeEditorCommandString(result.createdId);\n if (!createdId) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET,\n `Create from asset did not return a created id: ${assetId}`,\n { code: 'object.createFromAsset.missingCreatedId' },\n );\n }\n const hierarchyToken = captureEditorCommandSceneHierarchyToken(operations);\n if (!hierarchyToken) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET,\n 'Asset placement completed without a current Scene Hierarchy scope.',\n { code: 'object.createFromAsset.hierarchyUnavailable' },\n );\n }\n await waitForEditorCommandProjectionIdle(state);\n if (!isEditorCommandSceneHierarchyTokenCurrent(operations, hierarchyToken)) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET,\n 'Scene Hierarchy authority or revision changed while asset placement was pending.',\n {\n code: 'object.createFromAsset.staleHierarchy',\n details: {\n expectedAuthorityToken: hierarchyToken.authorityToken,\n expectedScopeKey: hierarchyToken.scopeKey,\n expectedRevision: hierarchyToken.revision,\n },\n },\n );\n }\n const document = state.session.getState({ cloneDocuments: false }).workingDocument;\n const safeScene = getEditorCommandSafeSceneReadModel(operations);\n const hierarchy = safeScene.hierarchy;\n const selection = safeScene.selection;\n const object = createEditorCommandSceneObject(state, options, document, createdId, hierarchy);\n if (!object) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_CREATE_FROM_ASSET,\n 'Placed asset object is unavailable in the safe Scene Hierarchy projection.',\n { code: 'object.createFromAsset.projectionIntegrity' },\n );\n }\n let focused = false;\n if (input.focus === true && hierarchy.some(item => item.id === createdId)) {\n focused = operations.focusProjectionNode(createdId);\n if (focused) renderUi();\n }\n return {\n assetId,\n createdId,\n object,\n selection: cloneEditorCommandSelection(selection),\n focused,\n status: result.status,\n };\n}\n\nasync function waitForEditorCommandProjectionIdle<TDocument, TPatch>(\n state: LocalEditorCommandHarnessState<TDocument, TPatch>,\n): Promise<void> {\n const waitForIdle = state.projection?.waitForIdle;\n if (!waitForIdle) return;\n await Promise.race([\n waitForIdle.call(state.projection),\n new Promise(resolve => setTimeout(resolve, OBJECT_CREATE_FROM_ASSET_PROJECTION_WAIT_MS)),\n ]);\n}\n\ninterface EditorCommandSceneHierarchyToken {\n authorityToken: number;\n scopeKey: string;\n revision: number;\n}\n\nfunction captureEditorCommandSceneHierarchyToken<TDocument>(\n operations: Pick<LocalEditorCommandCapabilitySourceOperations<TDocument>, 'getHierarchyReadModel'>,\n): EditorCommandSceneHierarchyToken | null {\n const model = operations.getHierarchyReadModel();\n return model.snapshot.scopeType === 'scene'\n ? {\n authorityToken: model.authorityToken,\n scopeKey: model.snapshot.scopeKey,\n revision: model.snapshot.revision,\n }\n : null;\n}\n\nfunction isEditorCommandSceneHierarchyTokenCurrent<TDocument>(\n operations: Pick<LocalEditorCommandCapabilitySourceOperations<TDocument>, 'getHierarchyReadModel'>,\n expected: EditorCommandSceneHierarchyToken,\n): boolean {\n const current = captureEditorCommandSceneHierarchyToken(operations);\n return current?.authorityToken === expected.authorityToken\n && current.scopeKey === expected.scopeKey\n && current.revision === expected.revision;\n}\n\nfunction createEditorCommandAssetPlacement(input: EditorCommandObjectCreateFromAssetInput): EditorTransformSnapshot | undefined | false {\n const hasPosition = input.position !== undefined;\n const hasRotation = input.rotation !== undefined;\n const hasScale = input.scale !== undefined;\n if (!hasPosition && !hasRotation && !hasScale) return undefined;\n if (\n (hasPosition && !isLocalEditorCommandVec3(input.position))\n || (hasRotation && !isLocalEditorCommandVec3(input.rotation))\n || (hasScale && !isLocalEditorCommandVec3(input.scale))\n ) {\n return false;\n }\n return {\n position: hasPosition && input.position ? cloneVec3(input.position) : { x: 0, y: 0, z: 0 },\n rotation: hasRotation && input.rotation ? cloneVec3(input.rotation) : { x: 0, y: 0, z: 0 },\n scale: hasScale && input.scale ? cloneVec3(input.scale) : { x: 1, y: 1, z: 1 },\n };\n}\n\nfunction deleteEditorCommandObjects<TDocument, TPatch, TAsset>(\n state: LocalEditorCommandHarnessState<TDocument, TPatch>,\n options: LocalEditorHarnessOptions<TDocument, TPatch, TAsset>,\n input: { objectId?: unknown; objectIds?: unknown; activeId?: unknown },\n renderUi: () => void,\n operations: LocalEditorCommandCapabilitySourceOperations<TDocument>,\n): EditorCommandObjectDeleteOutput | ReturnType<typeof createLocalEditorCommandFailure> {\n const normalized = normalizeEditorCommandDeleteInput(input);\n if (!normalized.ok) return normalized.result;\n if (state.mode !== 'editor' || !state.session) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_DELETE,\n 'Editor is not in edit mode.',\n { code: 'editor.notReady' },\n );\n }\n if (!hasEditorCommandSafeSceneScope(operations)) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_DELETE,\n 'Scene object deletion is unavailable outside the Scene Hierarchy scope.',\n { code: 'object.sceneScopeRequired' },\n );\n }\n const document = state.session.getState({ cloneDocuments: false }).workingDocument;\n const intent: SceneGraphDeleteIntent = {\n ids: normalized.ids,\n activeId: normalized.activeId,\n };\n operations.cancelActiveOperation();\n const hierarchy = getEditorCommandSafeSceneHierarchy(operations);\n const invalidTargetId = [...intent.ids, intent.activeId]\n .find(id => id && !hierarchy.some(item => item.id === id));\n if (invalidTargetId) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_DELETE,\n `Delete target is unavailable in the safe Hierarchy projection: ${invalidTargetId}`,\n { code: 'object.delete.invalidTarget', objectId: invalidTargetId },\n );\n }\n const validation = validateSceneGraphDelete(hierarchy, intent);\n if (!validation.ok) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_DELETE,\n `Delete rejected: ${validation.reason ?? 'invalid scene graph delete'}.`,\n { code: 'object.delete.rejected', objectId: normalized.ids[0] },\n );\n }\n const patch = options.documentAdapter.createSceneGraphDeletePatch?.(document, intent);\n if (!patch) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_DELETE,\n 'Delete patch was not created.',\n { code: 'object.delete.patchUnavailable', objectId: normalized.ids[0] },\n );\n }\n const result = state.session.dispatch({\n type: 'document.patch',\n label: patch.label ?? `Delete ${intent.ids.length} node(s)`,\n patch: patch.patch,\n targetId: intent.activeId ?? undefined,\n ...operations.withProjectionImpact(operations.resolveProjectionImpact(\n patch,\n patch.deletedIds\n ? operations.createDeletedNodeProjectionImpact(patch.deletedIds)\n : undefined,\n )),\n });\n if (!result.documentChanged) {\n return createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_DELETE,\n 'Delete did not change the document.',\n { code: 'object.delete.unchanged', objectId: normalized.ids[0] },\n );\n }\n const deletedIds = (patch.deletedIds ?? normalized.ids)\n .filter(id => hierarchy.some(item => item.id === id));\n const rawFallbackSelectionId = patch.fallbackSelectionId ?? null;\n let selection: EditorSelectionState = result.selection;\n const updatedHierarchy = getEditorCommandSafeSceneHierarchy(operations);\n const fallbackSelectionId = rawFallbackSelectionId\n && updatedHierarchy.some(item => item.id === rawFallbackSelectionId)\n ? rawFallbackSelectionId\n : null;\n if (fallbackSelectionId && isEditorCommandHierarchyObjectSelectable(options, result.workingDocument, fallbackSelectionId, updatedHierarchy)) {\n selection = state.session.dispatch({\n type: 'selection.replace',\n selectedIds: [fallbackSelectionId],\n activeId: fallbackSelectionId,\n label: 'Agent Select Delete Fallback',\n }).selection;\n } else {\n selection = operations.sanitizeSelection(result.workingDocument, selection) ?? selection;\n }\n selection = reconcileEditorCommandSafeSceneSelection(state, operations, selection);\n operations.rebuildProjectionFromDocument(result.workingDocument, selection);\n state.summary = operations.summarizeDocument(result.workingDocument, state.session.getSource());\n state.status = patch.label ?? `Agent deleted ${deletedIds.length} node(s)`;\n renderUi();\n return {\n deletedIds,\n fallbackSelectionId,\n selection: cloneEditorCommandSelection(getEditorCommandSafeSceneSelection(operations)),\n };\n}\n\nfunction reconcileEditorCommandSafeSceneSelection<TDocument, TPatch>(\n state: LocalEditorCommandHarnessState<TDocument, TPatch>,\n operations: Pick<LocalEditorCommandCapabilitySourceOperations<TDocument>, 'getHierarchyReadModel'>,\n currentSelection: EditorSelectionState,\n): EditorSelectionState {\n const safeSelection = getEditorCommandSafeSceneSelection(operations);\n if (safeSelection.activeId === currentSelection.activeId\n && safeSelection.selectedIds.length === currentSelection.selectedIds.length\n && safeSelection.selectedIds.every((id, index) => id === currentSelection.selectedIds[index])) {\n return safeSelection;\n }\n return state.session?.dispatch({\n type: 'selection.replace',\n selectedIds: safeSelection.selectedIds,\n activeId: safeSelection.activeId,\n label: 'Agent Reconcile Safe Hierarchy Selection',\n }).selection ?? safeSelection;\n}\n\nfunction commandServiceObjectMatchesQuery(object: EditorCommandSceneObject, query: string): boolean {\n return [\n object.id,\n object.name,\n object.label,\n object.type,\n object.path,\n ].some(value => typeof value === 'string' && value.toLowerCase().includes(query));\n}\n\nfunction createEditorCommandHierarchyPath(\n objectId: string,\n hierarchyItems: readonly LocalEditorCommandHierarchyItem[],\n): string | undefined {\n const byId = new Map(hierarchyItems.map(item => [item.id, item]));\n const path: string[] = [];\n const seen = new Set<string>();\n let cursor = byId.get(objectId) ?? null;\n while (cursor && !seen.has(cursor.id)) {\n seen.add(cursor.id);\n path.unshift(cursor.label || cursor.id);\n cursor = cursor.parentId ? byId.get(cursor.parentId) ?? null : null;\n }\n return path.length > 0 ? path.join(' / ') : undefined;\n}\n\nfunction isEditorCommandPrimitiveShape(value: string): value is EditorCommandPrimitiveShape {\n return value === 'cube' || value === 'sphere' || value === 'plane' || value === 'capsule';\n}\n\nfunction normalizeEditorCommandDeleteInput(\n input: { objectId?: unknown; objectIds?: unknown; activeId?: unknown },\n): { ok: true; ids: string[]; activeId: string | null } | { ok: false; result: ReturnType<typeof createLocalEditorCommandFailure> } {\n const objectId = normalizeEditorCommandString(input.objectId);\n const hasObjectId = objectId.length > 0;\n const hasObjectIds = Array.isArray(input.objectIds);\n if (hasObjectId === hasObjectIds) {\n return {\n ok: false,\n result: createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_DELETE,\n 'object.delete requires exactly one of objectId or objectIds.',\n { code: 'object.delete.invalidInput', objectId: objectId || undefined },\n ),\n };\n }\n const ids = hasObjectId\n ? [objectId]\n : normalizeEditorCommandIdList(input.objectIds as unknown[]);\n if (ids.length === 0) {\n return {\n ok: false,\n result: createLocalEditorCommandFailure(\n EDITOR_COMMAND_ID.OBJECT_DELETE,\n 'object.delete requires at least one object id.',\n { code: 'object.delete.invalidInput' },\n ),\n };\n }\n const requestedActiveId = normalizeEditorCommandString(input.activeId);\n return {\n ok: true,\n ids,\n activeId: requestedActiveId && ids.includes(requestedActiveId)\n ? requestedActiveId\n : ids[ids.length - 1] ?? null,\n };\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import type { LocalEditorCommandSelectionSource } from '../source-types.js';
2
+ import { type LocalEditorCommandCapabilitySourceOperations, type LocalEditorCommandHarnessState } from '../shared.js';
3
+ import type { LocalEditorHarnessOptions } from '../../local-editor-harness.js';
4
+ export declare function createLocalEditorCommandSelectionSource<TDocument, TPatch, TAsset>(state: LocalEditorCommandHarnessState<TDocument, TPatch>, options: LocalEditorHarnessOptions<TDocument, TPatch, TAsset>, operations: LocalEditorCommandCapabilitySourceOperations<TDocument>): LocalEditorCommandSelectionSource;
5
+ //# sourceMappingURL=selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../../src/editor-commands/capabilities/selection.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAML,KAAK,4CAA4C,EACjD,KAAK,8BAA8B,EACpC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE/E,wBAAgB,uCAAuC,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAC/E,KAAK,EAAE,8BAA8B,CAAC,SAAS,EAAE,MAAM,CAAC,EACxD,OAAO,EAAE,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAC7D,UAAU,EAAE,4CAA4C,CAAC,SAAS,CAAC,GAClE,iCAAiC,CAoDnC"}