@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
@@ -1,12 +1,9 @@
1
- import { createEditorAgentInteractionController, createProjectAuthoringHost, } from '@fps-games/editor-core';
1
+ import { createProjectAuthoringHost, } from '@fps-games/editor-core';
2
2
  import { getFpsEditorPluginLifecycleScopeHost, resolveFpsEditorLifecycleParticipants, } from '@fps-games/editor-core/plugin-host';
3
- import { createForgePlayAgentTransport, } from '@fps-games/editor-forge-play';
4
3
  import { createPlayableLocalEditorLoadingOverlay, formatPlayableEditorDoctorReport, inspectPlayableEditorHostCompatibilityReport, } from '@fps-games/editor-playable-sdk';
5
4
  import { createPlayableLocalEditorHostController, PLAYABLE_LOCAL_EDITOR_APPLICATION_SCOPE_ID, } from '@fps-games/editor-playable-sdk/internal/local-harness';
6
5
  import { createLocalEditorHarness, } from './local-editor-harness.js';
7
6
  import { getLocalEditorHarnessLifecycleOperations, } from './internal/local-editor-lifecycle-operations.js';
8
- import { createLocalEditorAgentHierarchyOperations } from './local-editor-agent-actions.js';
9
- import { createLocalEditorProjectEntryAgentContext } from './local-editor-agent-context.js';
10
7
  export const PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION = 2;
11
8
  /**
12
9
  * Frozen required contract for playable local editor host manifests.
@@ -57,16 +54,7 @@ export function createFpsGameEditorLocalEditorHost(options) {
57
54
  };
58
55
  }
59
56
  export function createFpsGameEditorLocalEditorHostManifest(options) {
60
- const { project, compatibilityTag, agentBridgeSessionMetadata, agentBridge: configuredAgentBridge, logCompatibilityReport: _logCompatibilityReport, logger: _logger, ...manifestOptions } = options;
61
- const agentBridge = agentBridgeSessionMetadata
62
- ? {
63
- ...(configuredAgentBridge ?? {}),
64
- sessionMetadata: {
65
- ...configuredAgentBridge?.sessionMetadata,
66
- ...agentBridgeSessionMetadata,
67
- },
68
- }
69
- : configuredAgentBridge;
57
+ const { project, compatibilityTag, logCompatibilityReport: _logCompatibilityReport, logger: _logger, ...manifestOptions } = options;
70
58
  return {
71
59
  ...manifestOptions,
72
60
  metadata: {
@@ -75,7 +63,6 @@ export function createFpsGameEditorLocalEditorHostManifest(options) {
75
63
  projectName: project.projectName,
76
64
  ...(compatibilityTag ? { compatibilityTag } : {}),
77
65
  },
78
- ...(agentBridge ? { agentBridge } : {}),
79
66
  };
80
67
  }
81
68
  function logPlayableLocalEditorHostCompatibilityReport(report, logger = console) {
@@ -144,59 +131,10 @@ function createHarnessDocumentAdapter(documentCapability, capabilities) {
144
131
  };
145
132
  }
146
133
  function createHarnessHierarchyOptions(manifest) {
147
- const capabilities = manifest.capabilities;
148
- const agentController = createEditorAgentInteractionController({
149
- transport: createForgePlayAgentTransport({
150
- window: manifest.forgePlay?.window,
151
- }),
152
- });
153
- const agentOperations = createLocalEditorAgentHierarchyOperations({
154
- sendContext: context => agentController.sendContext(context),
155
- getProjectionNode: (document, id) => manifest.documentAdapter.getProjectionNode(document, id),
156
- getMarkerGraph: document => capabilities?.markerGraph?.getMarkerGraph?.(document) ?? null,
157
- getMarkerTypeCatalog: document => capabilities?.markerGraph?.getMarkerTypeCatalog?.(document) ?? [],
158
- getRelationTypeCatalog: document => capabilities?.markerGraph?.getRelationTypeCatalog?.(document) ?? [],
159
- describeSceneObject: manifest.capabilities?.agentContext?.describeSceneObject,
160
- describeSceneObjectSet: manifest.capabilities?.agentContext?.describeSceneObjectSet,
161
- describeRegionBinding: manifest.capabilities?.agentContext?.describeRegionBinding,
162
- source: {
163
- projectId: manifest.metadata?.projectId,
164
- projectName: manifest.metadata?.projectName,
165
- },
166
- reportError: manifest.forgePlay?.reportError,
167
- });
168
- const operations = capabilities?.hierarchyActions?.operations;
169
- return {
170
- operations: [
171
- ...agentOperations,
172
- ...(operations ?? []),
173
- ],
174
- };
175
- }
176
- function createHarnessProjectAgentOptions(manifest) {
177
- const controller = createEditorAgentInteractionController({
178
- transport: createForgePlayAgentTransport({ window: manifest.forgePlay?.window }),
179
- });
180
- return {
181
- async sendProjectEntry(input) {
182
- const context = createLocalEditorProjectEntryAgentContext({
183
- ...input,
184
- source: {
185
- projectId: manifest.metadata?.projectId,
186
- projectName: manifest.metadata?.projectName,
187
- },
188
- });
189
- if (!context)
190
- return false;
191
- try {
192
- return await controller.sendContext(context);
193
- }
194
- catch (error) {
195
- manifest.forgePlay?.reportError?.(error);
196
- return false;
197
- }
198
- },
199
- };
134
+ const operations = manifest.capabilities?.hierarchyActions?.operations;
135
+ if (!operations || operations.length === 0)
136
+ return undefined;
137
+ return { operations: [...operations] };
200
138
  }
201
139
  export function createPlayableLocalEditorHost(manifest) {
202
140
  const compatibilityReport = inspectPlayableLocalEditorHostManifest(manifest);
@@ -216,12 +154,10 @@ export function createPlayableLocalEditorHost(manifest) {
216
154
  documentAdapter: createHarnessDocumentAdapter(manifest.documentAdapter, manifest.capabilities),
217
155
  persistenceAdapter: manifest.persistenceAdapter,
218
156
  worldAdapter: createHarnessWorldAdapter(manifest.worldAdapter),
219
- agentBridge: manifest.agentBridge,
220
157
  transformDocumentCapabilities: manifest.capabilities?.transformCommands?.documentCapabilities,
221
158
  world: manifest.world,
222
159
  createGrid: manifest.createGrid,
223
160
  hierarchy: createHarnessHierarchyOptions(manifest),
224
- agentContext: createHarnessProjectAgentOptions(manifest),
225
161
  };
226
162
  const harness = createLocalEditorHarness(harnessOptions);
227
163
  const lifecycleOperations = getLocalEditorHarnessLifecycleOperations(harness);
@@ -1 +1 @@
1
- {"version":3,"file":"playable-local-editor-host.js","sourceRoot":"","sources":["../src/playable-local-editor-host.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createEditorAgentInteractionController,\n createProjectAuthoringHost,\n type AuthoringSourceDriver,\n type DocumentCommand,\n type EditorProjectionImpact,\n type EditorTransformDocumentCapabilities,\n type EditorTransformSnapshot,\n type ProjectAuthoringHost,\n} from '@fps-games/editor-core';\nimport {\n getFpsEditorPluginLifecycleScopeHost,\n resolveFpsEditorLifecycleParticipants,\n type FpsEditorPluginHost,\n} from '@fps-games/editor-core/plugin-host';\nimport type {\n FpsEditorLifecycleService,\n} from '@fps-games/editor-core/lifecycle';\nimport {\n createForgePlayAgentTransport,\n} from '@fps-games/editor-forge-play';\nimport type { BabylonEditorProjectionSelectionEdgesPrewarm } from '@fps-games/editor-babylon';\nimport type {\n LocalEditorBrowserProjectFileContent,\n LocalEditorBrowserProjectFileSnapshot,\n LocalEditorBrowserProjectMediaSource,\n} from '@fps-games/editor-browser';\nimport type {\n ArtistMaterialTextureRef,\n EditorAgentContextSemantics,\n EditorDiagnostic,\n EditorDiagnosticLocator,\n EditorDiagnosticPhase,\n SpatialMarkerGraph,\n SpatialMarkerNode,\n SpatialMarkerTypeDefinition,\n SpatialRelationTypeDefinition,\n} from '@fps-games/editor-protocol';\nimport {\n createPlayableLocalEditorLoadingOverlay,\n formatPlayableEditorDoctorReport,\n inspectPlayableEditorHostCompatibilityReport,\n type FpsGameEditorProjectDefinition,\n type PlayableForgePlayModeBridge,\n type PlayableForgePlayDocumentExportResult,\n type PlayableForgePlaySaveState,\n type PlayableForgePlayWindowLike,\n type PlayableLocalEditorDiscardConfirmationInput,\n type PlayableLocalEditorHostBridgeContext,\n type PlayableLocalEditorHostLoadingContent,\n type PlayableLocalEditorInteractionPolicy,\n type PlayableLocalEditorDocumentOperationExecutor,\n type PlayableLocalEditorSaveFailureInput,\n type PlayableLocalEditorSaveFailureState,\n type PlayableLocalEditorUnsavedChangesState,\n} from '@fps-games/editor-playable-sdk';\nimport {\n createPlayableLocalEditorHostController,\n PLAYABLE_LOCAL_EDITOR_APPLICATION_SCOPE_ID,\n type PlayableLocalEditorLifecycleController,\n} from '@fps-games/editor-playable-sdk/internal/local-harness';\nimport {\n createLocalEditorHarness,\n type LocalEditorHarness,\n type LocalEditorHarnessDocumentAdapter,\n type LocalEditorHarnessHistoryOperation,\n type LocalEditorHarnessHistoryOperationOptions,\n type LocalEditorHarnessHistoryOperationResult,\n type LocalEditorHarnessHistoryProjectionResult,\n type LocalEditorHarnessHistoryStateResult,\n type LocalEditorHarnessHierarchyOperationRegistration,\n type LocalEditorMarkerGraphCommand,\n type LocalEditorHarnessOptions,\n type LocalEditorHarnessOperationOrigin,\n type LocalEditorHarnessPersistenceAdapter,\n type LocalEditorHarnessProjectionWaitPolicy,\n type LocalEditorHarnessWorldAdapter,\n} from './local-editor-harness.js';\nimport {\n getLocalEditorHarnessLifecycleOperations,\n type LocalEditorHarnessLifecycleOperations,\n} from './internal/local-editor-lifecycle-operations.js';\nimport { createLocalEditorAgentHierarchyOperations } from './local-editor-agent-actions.js';\nimport { createLocalEditorProjectEntryAgentContext } from './local-editor-agent-context.js';\n\nexport const PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION = 2 as const;\n\n/**\n * Frozen required contract for playable local editor host manifests.\n * \n * This contract defines the minimum set of methods that a host manifest must provide.\n * The contract is deeply frozen to prevent accidental modifications that would break\n * backward compatibility.\n * \n * IMPORTANT: Adding new required methods is a BREAKING CHANGE and requires:\n * - Incrementing PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION\n * - Providing migration documentation\n * - Updating all reference consumers\n */\nexport const PLAYABLE_LOCAL_EDITOR_HOST_REQUIRED_CONTRACT = Object.freeze({\n document: Object.freeze([\n 'reduceDocument',\n 'getHierarchyItems',\n 'getProjectionNodes',\n 'getProjectionNode',\n 'createPatchFromAsset',\n 'createSerializedPropertyPatch',\n ] as const),\n persistence: Object.freeze([\n 'loadAssets',\n 'runGame',\n ] as const),\n world: Object.freeze({\n direct: Object.freeze([\n 'getCanvas',\n 'disposeWorld',\n 'loadPreviewEngine',\n 'createPreviewEngine',\n 'importPreviewAsset',\n ] as const),\n }),\n});\n\ntype PlayableLocalEditorMaybePromise<T> = T | Promise<T>;\n\nexport type PlayableLocalEditorHostCompatibilitySeverity = 'error' | 'warning' | 'info';\n\nexport interface PlayableLocalEditorHostManifestMetadata {\n manifestVersion: typeof PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION;\n projectId?: string;\n projectName?: string;\n compatibilityTag?: string;\n}\n\nexport interface PlayableLocalEditorHostCompatibilityDiagnostic {\n severity: PlayableLocalEditorHostCompatibilitySeverity;\n code: string;\n message: string;\n path?: string;\n}\n\nexport interface PlayableLocalEditorHostCompatibilityReport {\n supportedManifestVersion: typeof PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION;\n manifestVersion?: unknown;\n projectId?: string;\n projectName?: string;\n compatibilityTag?: string;\n ok: boolean;\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[];\n}\n\nexport interface PlayableLocalEditorAuthoringSourceDriverLike<TDocument = unknown, TPayload = unknown> {\n sourceType: string;\n load(input: unknown): PlayableLocalEditorMaybePromise<unknown>;\n reduce?(input: {\n source: unknown;\n document: TDocument;\n command?: unknown;\n intent?: unknown;\n }): PlayableLocalEditorMaybePromise<TDocument>;\n validate?(input: unknown): PlayableLocalEditorMaybePromise<unknown>;\n save(input: {\n source: unknown;\n document: TDocument;\n command?: unknown;\n intent?: unknown;\n }): PlayableLocalEditorMaybePromise<unknown>;\n compile?(input: unknown): PlayableLocalEditorMaybePromise<unknown>;\n compileRuntimePatch?(input: unknown): PlayableLocalEditorMaybePromise<unknown>;\n}\n\nexport interface PlayableLocalEditorAuthoringHostLike {\n getSourceRegistry(): unknown;\n registerSource(source: unknown): void;\n registerSourceDriver(driver: PlayableLocalEditorAuthoringSourceDriverLike): void;\n loadSource<TDocument = unknown>(ref: unknown): Promise<unknown>;\n commitSource<TDocument = unknown>(input: {\n source: unknown;\n document: TDocument;\n beforeDocument?: TDocument;\n expectedRevision?: number;\n command?: unknown;\n }): Promise<unknown>;\n dispatch<TDocument = unknown, TPayload = unknown>(command: unknown): Promise<unknown>;\n attachRuntimeAdapter?(adapter: unknown): void;\n detachRuntimeAdapter?(): void;\n}\n\nexport interface PlayableLocalEditorPatchResult<TPatch> {\n patch: TPatch;\n label?: string;\n changedId?: string;\n createdId?: string | null;\n changedIds?: string[];\n reprojectIds?: string[];\n projectionImpact?: PlayableLocalEditorProjectionImpact;\n selectId?: string | null;\n}\n\nexport type PlayableLocalEditorProjectionImpact = EditorProjectionImpact;\n\nexport interface PlayableLocalEditorPropertyPatchInput<TDocument = unknown> {\n document: TDocument;\n targetId: string;\n targetIds?: string[];\n path: string;\n value: unknown;\n control?: string;\n valueType?: string;\n commitMode?: string;\n persistence?: string;\n source?: unknown;\n}\n\nexport interface PlayableLocalEditorMultiPropertyPatchInput<TDocument = unknown>\n extends Omit<PlayableLocalEditorPropertyPatchInput<TDocument>, 'targetId'> {\n targetIds: string[];\n activeId: string | null;\n}\n\nexport interface PlayableLocalEditorMultiPropertyCapabilityInput<TDocument = unknown> {\n document: TDocument;\n targetIds: string[];\n activeId: string | null;\n path: string;\n control?: string;\n valueType?: string;\n commitMode?: string;\n persistence?: string;\n}\n\nexport interface PlayableLocalEditorTransformPatchInput<TDocument = unknown> {\n document: TDocument;\n targetId: string;\n targetIds?: string[];\n transform?: unknown;\n worldTransform?: unknown;\n operation?: string;\n duplicate?: boolean;\n [key: string]: unknown;\n}\n\nexport interface PlayableLocalEditorTransformInspectorPreviewInput<TDocument = unknown> {\n document: TDocument;\n targetId: string;\n targetIds: string[];\n activeId: string | null;\n transform: EditorTransformSnapshot;\n}\n\nexport interface PlayableLocalEditorTransformBatchPatchInput<TDocument = unknown> {\n document: TDocument;\n targetIds: string[];\n activeId?: string | null;\n operation?: string;\n [key: string]: unknown;\n}\n\nexport interface PlayableLocalEditorRenderingPropertyChangeResult<TPatch = unknown> {\n changed?: boolean;\n dirty?: boolean;\n status?: string;\n statusTone?: string;\n statusDetails?: string;\n details?: Record<string, unknown>;\n refreshWorldRendering?: boolean;\n documentPatch?: PlayableLocalEditorPatchResult<TPatch> | null;\n}\n\nexport interface PlayableLocalEditorRuntimeInspectorContext<TDocument = unknown> {\n document: TDocument;\n targetIds: string[];\n activeId: string | null;\n inspectorObject: unknown;\n projectionNode?: unknown | null;\n projectedRoot?: unknown;\n}\n\nexport interface PlayableLocalEditorPrefabStageInput<TAsset = unknown> {\n assetId: string;\n browserAssetId?: string;\n asset?: TAsset | null;\n}\n\nexport interface PlayableLocalEditorPrefabStageDescriptor<TDocument = unknown> {\n assetId: string;\n browserAssetId?: string;\n label: string;\n sourceAssetId?: string;\n sourceAssetGuid?: string;\n readonly?: boolean;\n previewNodeId?: string;\n document?: TDocument;\n data?: unknown;\n}\n\nexport interface PlayableLocalEditorPrefabStageContext {\n previewNodeId?: string;\n importStructureReady: boolean;\n importStructure: unknown | null;\n}\n\nexport interface PlayableLocalEditorHierarchyActionsCapability<TDocument, TPatch = unknown> {\n operations?: readonly LocalEditorHarnessHierarchyOperationRegistration<TDocument, TPatch>[];\n}\n\nexport interface PlayableLocalEditorAgentContextObjectInput<TDocument = unknown> {\n document: TDocument;\n objectId: string;\n targetIds: string[];\n activeId: string | null;\n contextNodeId: string | null;\n hierarchyItem: unknown | null;\n hierarchyItems: readonly unknown[];\n projectionNode: unknown | null | undefined;\n}\n\nexport interface PlayableLocalEditorAgentContextObjectSetInput<TDocument = unknown> {\n document: TDocument;\n objectIds: string[];\n activeId: string | null;\n hierarchyItems: readonly unknown[];\n projectionNodes: Record<string, unknown | null | undefined>;\n}\n\nexport interface PlayableLocalEditorAgentContextRegionBindingInput<TDocument = unknown>\n extends PlayableLocalEditorAgentContextObjectSetInput<TDocument> {\n relationshipType: 'selection-region';\n}\n\nexport interface PlayableLocalEditorAgentContextCapability<TDocument> {\n describeSceneObject?(input: PlayableLocalEditorAgentContextObjectInput<TDocument>): EditorAgentContextSemantics | null | undefined;\n describeSceneObjectSet?(input: PlayableLocalEditorAgentContextObjectSetInput<TDocument>): EditorAgentContextSemantics | null | undefined;\n describeRegionBinding?(input: PlayableLocalEditorAgentContextRegionBindingInput<TDocument>): EditorAgentContextSemantics | null | undefined;\n}\n\nexport interface PlayableLocalEditorDocumentLifecycleCapability<TDocument, TAsset = unknown> {\n cloneDocument?(document: TDocument): TDocument;\n compareDocuments?(left: TDocument, right: TDocument): boolean;\n prepareDocument?(document: TDocument, assets: TAsset[]): TDocument;\n hydrateDocumentAssets?(document: TDocument, assets: TAsset[]): TDocument;\n resolveUpdatedAssetSnapshot?(\n assets: TAsset[],\n input: { assetId: string },\n ): { assetId: string; contentHash?: string } | null;\n listAssetSnapshots?(assets: TAsset[]): Array<{ assetId: string; contentHash?: string }>;\n reconcileUpdatedAsset?(\n document: TDocument,\n input: { assetId: string },\n ): {\n document: TDocument;\n reconciledBindingCount?: number;\n warnings?: Array<{\n code: string;\n gameObjectId?: string;\n slotId?: string;\n materialAssetId?: string;\n candidateSlotIds?: string[];\n }>;\n };\n validateDocument?(\n document: TDocument,\n context: {\n phase: EditorDiagnosticPhase;\n scopeId: string;\n documentRevision: number;\n projectionRevision: number;\n },\n ): readonly EditorDiagnostic[];\n summarize?(document: TDocument): string;\n}\n\nexport interface PlayableLocalEditorSelectionCapability<TDocument> {\n isSelectable?(document: TDocument, id: string): boolean;\n isLocked?(document: TDocument, id: string): boolean;\n}\n\nexport interface PlayableLocalEditorInspectorCapability<TDocument> {\n getInspectorObject?(document: TDocument, activeId: string): unknown | null;\n getInspectorMultiObject?(document: TDocument, selectedIds: string[], activeId: string | null): unknown | null;\n getRuntimeInspectorSections?(context: PlayableLocalEditorRuntimeInspectorContext<TDocument>): unknown[];\n}\n\nexport interface PlayableLocalEditorAssetBrowserCapability<TDocument> {\n getBrowserAssetItems?(document: TDocument): unknown[];\n}\n\nexport interface PlayableLocalEditorAssetActionsCapability<TDocument, TPatch, TAsset = unknown> {\n createPatchFromAsset?(asset: TAsset, input?: Record<string, unknown> & { document?: TDocument; placement?: unknown }): {\n patch: TPatch;\n label?: string;\n };\n createAssetActionPatch?(input: Record<string, unknown> & { document: TDocument; asset?: TAsset }): PlayableLocalEditorPatchResult<TPatch> | null;\n createPlacedAssetPatch?(input: Record<string, unknown> & { document: TDocument; asset?: TAsset }): PlayableLocalEditorPatchResult<TPatch> | null;\n findCreatedId?(beforeDocument: TDocument, afterDocument: TDocument): string | null;\n}\n\nexport interface PlayableLocalEditorTransformCommandsCapability<TDocument, TPatch> {\n documentCapabilities?: Partial<EditorTransformDocumentCapabilities>;\n canCreateSerializedMultiPropertyPatch?(input: PlayableLocalEditorMultiPropertyCapabilityInput<TDocument>): boolean;\n createSerializedMultiPropertyPatch?(input: PlayableLocalEditorMultiPropertyPatchInput<TDocument>): PlayableLocalEditorPatchResult<TPatch> | null;\n createTransformInspectorPreview?(input: PlayableLocalEditorTransformInspectorPreviewInput<TDocument>): EditorTransformSnapshot | null;\n createTransformPatch?(input: PlayableLocalEditorTransformPatchInput<TDocument>): PlayableLocalEditorPatchResult<TPatch> | null;\n createTransformBatchPatch?(input: PlayableLocalEditorTransformBatchPatchInput<TDocument>): PlayableLocalEditorPatchResult<TPatch> | null;\n createDuplicateSelectionPatch?(input: Record<string, unknown> & { document: TDocument; targetIds: string[] }): PlayableLocalEditorPatchResult<TPatch> | null;\n}\n\nexport interface PlayableLocalEditorSceneGraphCapability<TDocument, TPatch> {\n validateSceneGraphDrop?(document: TDocument, intent: unknown): unknown;\n createSceneGraphRenamePatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n createSceneGraphCreateGroupPatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n createSceneGraphCreatePrimitivePatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n createSceneGraphDeletePatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n createSceneGraphDropPatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n validateSceneGraphMove?(document: TDocument, intent: unknown): unknown;\n createSceneGraphMovePatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n validateSceneGraphGroupSelection?(document: TDocument, intent: unknown): unknown;\n createSceneGraphGroupSelectionPatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n}\n\nexport type PlayableLocalEditorMarkerGraphCommand = LocalEditorMarkerGraphCommand;\n\nexport interface PlayableLocalEditorMarkerGraphCapability<TDocument, TPatch> {\n getMarkerGraph?(document: TDocument): SpatialMarkerGraph | null;\n getMarkerTypeCatalog?(document: TDocument): SpatialMarkerTypeDefinition[];\n getRelationTypeCatalog?(document: TDocument): SpatialRelationTypeDefinition[];\n getPrefabInstanceMarkerOverlays?(document: TDocument): Array<{ ownerInstanceId: string; localNodeId: string; marker: SpatialMarkerNode }>;\n getPrefabStageMarkerOverlays?(document: TDocument, prefabAssetId: string, previewInstanceId: string): Array<{ ownerInstanceId: string; localNodeId: string; marker: SpatialMarkerNode }>;\n createMarkerGraphPatch?(document: TDocument, command: PlayableLocalEditorMarkerGraphCommand): PlayableLocalEditorPatchResult<TPatch> | null;\n}\n\nexport interface PlayableLocalEditorWorldPreviewCapability<TDocument> {\n getSceneCameraPreviewRig?(document: TDocument): unknown | null;\n getWorldAppearance?(document: TDocument): unknown | null;\n}\n\nexport interface PlayableLocalEditorRenderingCapability<TDocument, TPatch = unknown> {\n getWorldRendering?(document: TDocument): unknown | null;\n getRenderingPanelState?(document: TDocument, context?: Record<string, unknown>): unknown | null;\n onRenderingAction?(input: Record<string, unknown> & { document: TDocument }): PlayableLocalEditorMaybePromise<\n boolean | void | PlayableLocalEditorRenderingPropertyChangeResult<TPatch>\n >;\n onRenderingPropertyChange?(input: Record<string, unknown> & { document: TDocument }): PlayableLocalEditorMaybePromise<\n boolean | void | PlayableLocalEditorRenderingPropertyChangeResult<TPatch>\n >;\n getShadowMapExperimentConfig?(): unknown | null;\n getShadowMapExperimentPlan?(document: TDocument): unknown | null;\n createShadowMapExperimentProfilesPatch?(input: {\n document: TDocument;\n qualityProfile?: string | null;\n behaviorProfile?: string | null;\n }): PlayableLocalEditorPatchResult<TPatch> | null;\n}\n\nexport interface PlayableLocalEditorPrefabStageCapability<TDocument, TAsset = unknown> {\n getPrefabStageDescriptor?(\n document: TDocument,\n input: PlayableLocalEditorPrefabStageInput<TAsset>,\n ): PlayableLocalEditorPrefabStageDescriptor<TDocument> | null;\n getPrefabStageProjectionNodes?(\n document: TDocument,\n descriptor: PlayableLocalEditorPrefabStageDescriptor<TDocument>,\n ): unknown[];\n getPrefabStageStructure?(\n document: TDocument,\n descriptor: PlayableLocalEditorPrefabStageDescriptor<TDocument>,\n context: PlayableLocalEditorPrefabStageContext,\n ): unknown[];\n getPrefabStageInspectorObject?(\n document: TDocument,\n descriptor: PlayableLocalEditorPrefabStageDescriptor<TDocument>,\n selectedItemId: string | null,\n context: PlayableLocalEditorPrefabStageContext,\n ): unknown | null;\n resolvePrefabStagePreviewTarget?(\n document: TDocument,\n descriptor: PlayableLocalEditorPrefabStageDescriptor<TDocument>,\n projectionNodeId: string,\n context: PlayableLocalEditorPrefabStageContext,\n ): unknown | null;\n getPrefabStageProjectionNodeId?(\n document: TDocument,\n descriptor: PlayableLocalEditorPrefabStageDescriptor<TDocument>,\n nodeId: string,\n context: PlayableLocalEditorPrefabStageContext,\n ): string | null;\n}\n\nexport interface PlayableLocalEditorHostCapabilities<TDocument, TPatch, TAsset = unknown> {\n documentLifecycle?: PlayableLocalEditorDocumentLifecycleCapability<TDocument, TAsset>;\n selection?: PlayableLocalEditorSelectionCapability<TDocument>;\n inspector?: PlayableLocalEditorInspectorCapability<TDocument>;\n assetBrowser?: PlayableLocalEditorAssetBrowserCapability<TDocument>;\n assetActions?: PlayableLocalEditorAssetActionsCapability<TDocument, TPatch, TAsset>;\n transformCommands?: PlayableLocalEditorTransformCommandsCapability<TDocument, TPatch>;\n sceneGraph?: PlayableLocalEditorSceneGraphCapability<TDocument, TPatch>;\n markerGraph?: PlayableLocalEditorMarkerGraphCapability<TDocument, TPatch>;\n worldPreview?: PlayableLocalEditorWorldPreviewCapability<TDocument>;\n rendering?: PlayableLocalEditorRenderingCapability<TDocument, TPatch>;\n prefabStage?: PlayableLocalEditorPrefabStageCapability<TDocument, TAsset>;\n hierarchyActions?: PlayableLocalEditorHierarchyActionsCapability<TDocument, TPatch>;\n agentContext?: PlayableLocalEditorAgentContextCapability<TDocument>;\n}\n\nexport interface PlayableLocalEditorDocumentCapability<TDocument, TPatch, TAsset = unknown> {\n reduceDocument(document: TDocument, command: any): TDocument;\n getHierarchyItems(document: TDocument): unknown[];\n isHierarchyStructureChange?(command: DocumentCommand<TDocument, TPatch>): boolean;\n getProjectionNodes(document: TDocument): unknown[];\n getProjectionNode(document: TDocument, id: string): unknown | null;\n getProjectionNodesForTarget?(document: TDocument, targetId: string): unknown[];\n resolveProjectionTargetId?(document: TDocument, projectionNodeId: string): string | null;\n getProjectionSelectionNodeIds?(document: TDocument, targetId: string): string[];\n createPatchFromAsset(asset: TAsset, input?: Record<string, unknown> & { document?: TDocument; placement?: unknown }): {\n patch: TPatch;\n label?: string;\n };\n createSerializedPropertyPatch(input: PlayableLocalEditorPropertyPatchInput<TDocument>): PlayableLocalEditorPatchResult<TPatch> | null;\n resolveDiagnosticLocator?(\n document: TDocument,\n diagnostic: EditorDiagnostic,\n ): EditorDiagnosticLocator | null;\n}\n\nexport interface PlayableLocalEditorPersistenceCapability<TDocument, TAsset = unknown> {\n loadAuthoringSource?(): PlayableLocalEditorMaybePromise<{\n source: unknown;\n document: TDocument;\n assets?: TAsset[];\n summary?: string;\n }>;\n loadDocument?(): PlayableLocalEditorMaybePromise<TDocument>;\n loadAssets(): PlayableLocalEditorMaybePromise<TAsset[]>;\n loadProjectFiles?(): PlayableLocalEditorMaybePromise<LocalEditorBrowserProjectFileSnapshot>;\n loadProjectFile?(path: string): PlayableLocalEditorMaybePromise<LocalEditorBrowserProjectFileContent>;\n resolveProjectMedia?(path: string): PlayableLocalEditorMaybePromise<LocalEditorBrowserProjectMediaSource | null>;\n saveAuthoringSource?(input: {\n source: unknown;\n document: TDocument;\n }): PlayableLocalEditorMaybePromise<{\n source: unknown;\n document: TDocument;\n summary?: string;\n }>;\n saveDocument?(document: TDocument): PlayableLocalEditorMaybePromise<{ document: TDocument; summary?: string }>;\n runGame(context?: { reason: 'save' | 'discard' }): PlayableLocalEditorMaybePromise<void>;\n}\n\nexport interface PlayableLocalEditorWorldCapability<TAsset = unknown> {\n disposeWorld(): PlayableLocalEditorMaybePromise<void>;\n getCanvas(): HTMLCanvasElement | null;\n loadPreviewEngine(): PlayableLocalEditorMaybePromise<Record<string, any>>;\n createPreviewEngine(engineModule: Record<string, any>, canvas: HTMLCanvasElement): any;\n importPreviewAsset(context: any): Promise<unknown | null>;\n resolveMaterialTextureUrl?(texture: ArtistMaterialTextureRef): string | null | undefined;\n toBrowserAssetItem?(asset: TAsset): unknown;\n resolveAssetId?(asset: TAsset): string;\n}\n\nexport interface PlayableLocalEditorWorldOptions {\n cameraTarget?: { x: number; y: number; z: number };\n cameraRadius?: number;\n clearColor?: { r: number; g: number; b: number; a: number };\n sky?: Record<string, unknown> | false;\n grid?: Record<string, unknown>;\n useRightHandedSystem?: boolean;\n coordinateAxes?: boolean;\n selectionEdgesPrewarm?: BabylonEditorProjectionSelectionEdgesPrewarm;\n}\n\nexport interface PlayableLocalEditorGridContext {\n getCamera(): unknown | null;\n getEditorCamera(): unknown | null;\n}\n\nexport type PlayableLocalEditorGridFactory = (\n babylon: Record<string, any>,\n scene: unknown,\n camera?: unknown,\n context?: PlayableLocalEditorGridContext,\n) => unknown | void;\n\nexport interface PlayableLocalEditorAssetReloadResult {\n ok: boolean;\n assetCount: number;\n status: string;\n}\n\nexport interface PlayableLocalEditorUpdatedAssetRefreshResult extends PlayableLocalEditorAssetReloadResult {\n assetId: string;\n reconciledBindingCount: number;\n warnings: Array<{\n code: string;\n gameObjectId?: string;\n slotId?: string;\n materialAssetId?: string;\n candidateSlotIds?: string[];\n }>;\n error?: string;\n}\n\nexport interface PlayableLocalEditorAssetCreationOptions {\n placement?: unknown;\n}\n\nexport interface PlayableLocalEditorAssetCreationResult {\n ok: boolean;\n assetId: string;\n changed?: boolean;\n createdId?: string | null;\n status: string;\n error?: string;\n}\n\nexport type PlayableLocalEditorOperationOrigin = LocalEditorHarnessOperationOrigin;\nexport type PlayableLocalEditorProjectionWaitPolicy = LocalEditorHarnessProjectionWaitPolicy;\nexport type PlayableLocalEditorHistoryOperation = LocalEditorHarnessHistoryOperation;\nexport type PlayableLocalEditorHistoryOperationOptions = LocalEditorHarnessHistoryOperationOptions;\nexport type PlayableLocalEditorHistoryProjectionResult = LocalEditorHarnessHistoryProjectionResult;\nexport type PlayableLocalEditorHistoryStateResult = LocalEditorHarnessHistoryStateResult;\nexport type PlayableLocalEditorHistoryOperationResult<TDocument = unknown> =\n LocalEditorHarnessHistoryOperationResult<TDocument>;\n\nexport interface PlayableLocalEditorHarnessApi<TDocument = unknown> {\n render(): void;\n notifyViewportRevealed(reason?: string): void;\n getWorkingDocument(): TDocument | null;\n projectAssetDropPoint(point: { x: number; y: number } | null): { x: number; y: number; z: number } | null;\n getUnsavedChangesState(): PlayableLocalEditorUnsavedChangesState;\n getSaveFailureState(): PlayableLocalEditorSaveFailureState | null;\n getLifecycleService(): FpsEditorLifecycleService | null;\n validateOperation(phase: 'save' | 'run' | 'export'): boolean;\n validateOperationSettled(phase: 'save' | 'run' | 'export'): Promise<boolean>;\n validateOperationSettledForCurrentDocument(phase: 'save' | 'run' | 'export'): Promise<boolean>;\n runExclusiveDocumentOperation<TResult>(\n operation: (executor: PlayableLocalEditorDocumentOperationExecutor) => Promise<TResult>,\n ): Promise<TResult>;\n reloadAssets(): Promise<PlayableLocalEditorAssetReloadResult>;\n refreshUpdatedAsset(input: {\n assetId: string;\n expectedContentHash: string;\n }): Promise<PlayableLocalEditorUpdatedAssetRefreshResult>;\n createAssetFromAssetId(assetId: string, options?: PlayableLocalEditorAssetCreationOptions): PlayableLocalEditorAssetCreationResult;\n undo(options?: PlayableLocalEditorHistoryOperationOptions): Promise<PlayableLocalEditorHistoryOperationResult<TDocument>>;\n redo(options?: PlayableLocalEditorHistoryOperationOptions): Promise<PlayableLocalEditorHistoryOperationResult<TDocument>>;\n enterEditor(): Promise<void>;\n saveScene(): Promise<boolean>;\n saveAndRunGame(): Promise<boolean>;\n discardAndRunGame(): Promise<void>;\n}\n\nexport interface PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset = unknown> {\n metadata: PlayableLocalEditorHostManifestMetadata;\n root?: HTMLElement;\n localTestActions?: boolean;\n gameModeEntryVisible?: boolean;\n pluginHost?: FpsEditorPluginHost;\n authoring?: {\n host?: PlayableLocalEditorAuthoringHostLike;\n drivers?: readonly PlayableLocalEditorAuthoringSourceDriverLike[];\n };\n documentAdapter: PlayableLocalEditorDocumentCapability<TDocument, TPatch, TAsset>;\n capabilities?: PlayableLocalEditorHostCapabilities<TDocument, TPatch, TAsset>;\n persistenceAdapter: PlayableLocalEditorPersistenceCapability<TDocument, TAsset>;\n worldAdapter: PlayableLocalEditorWorldCapability<TAsset>;\n agentBridge?: LocalEditorHarnessOptions<TDocument, TPatch, TAsset>['agentBridge'];\n world?: PlayableLocalEditorWorldOptions;\n createGrid?: PlayableLocalEditorGridFactory;\n lifecycle: {\n loadingContent: PlayableLocalEditorHostLoadingContent;\n interactions?: PlayableLocalEditorInteractionPolicy;\n beforeDiscardAndRunGame?: () => void | Promise<void>;\n minAssetLoadingOverlayMs?: number;\n };\n forgePlay?: {\n enabled?: boolean;\n window?: PlayableForgePlayWindowLike;\n handleProjectAssetCommand?: (\n context: PlayableLocalEditorHostBridgeContext<PlayableLocalEditorHarnessApi<TDocument>>,\n ) => Promise<void> | void;\n handleAssetDrop?: (\n payload: Record<string, unknown>,\n context: Omit<PlayableLocalEditorHostBridgeContext<PlayableLocalEditorHarnessApi<TDocument>>, 'name'>,\n ) => void;\n hasUnsavedPlatformChanges?: () => boolean;\n exportDocument?: (input: {\n payload: Record<string, unknown>;\n saveState: PlayableForgePlaySaveState;\n postEvent: (name: string, payload?: Record<string, unknown>) => void;\n context: Omit<PlayableLocalEditorHostBridgeContext<PlayableLocalEditorHarnessApi<TDocument>>, 'name' | 'payload'>;\n }) => Promise<PlayableForgePlayDocumentExportResult> | PlayableForgePlayDocumentExportResult;\n reportError?: (error: unknown) => void;\n };\n}\n\nexport interface PlayableLocalEditorHost<TDocument = unknown> {\n harness: PlayableLocalEditorHarnessApi<TDocument>;\n lifecycle: FpsEditorLifecycleService;\n enterEditor(): Promise<void>;\n saveScene(): Promise<boolean>;\n saveAndRunGame(): Promise<boolean>;\n discardAndRunGame(): Promise<void>;\n runWithAssetLoadingOverlay<T>(operation: () => Promise<T>): Promise<T>;\n getBridge(): PlayableForgePlayModeBridge | null;\n getCompatibilityReport(): PlayableLocalEditorHostCompatibilityReport;\n dispose(): Promise<void>;\n}\n\nexport interface FpsGameEditorLocalEditorHostOptions<TDocument, TPatch, TAsset = unknown>\n extends Omit<PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset>, 'metadata' | 'agentBridge'> {\n project: Pick<FpsGameEditorProjectDefinition, 'projectId' | 'projectName'>;\n compatibilityTag?: string;\n agentBridgeSessionMetadata?: Record<string, unknown>;\n agentBridge?: PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset>['agentBridge'];\n logCompatibilityReport?: boolean;\n logger?: Pick<Console, 'warn' | 'error'>;\n}\n\nexport interface FpsGameEditorLocalEditorHostResult<TDocument, TPatch, TAsset = unknown> {\n host: PlayableLocalEditorHost<TDocument>;\n manifest: PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset>;\n compatibilityReport: PlayableLocalEditorHostCompatibilityReport;\n}\n\nexport function createFpsGameEditorLocalEditorHost<TDocument, TPatch, TAsset = unknown>(\n options: FpsGameEditorLocalEditorHostOptions<TDocument, TPatch, TAsset>,\n): FpsGameEditorLocalEditorHostResult<TDocument, TPatch, TAsset> {\n const manifest = createFpsGameEditorLocalEditorHostManifest(options);\n const host = createPlayableLocalEditorHost<TDocument, TPatch, TAsset>(manifest);\n const compatibilityReport = host.getCompatibilityReport();\n if (options.logCompatibilityReport !== false) {\n logPlayableLocalEditorHostCompatibilityReport(compatibilityReport, options.logger);\n }\n return {\n host,\n manifest,\n compatibilityReport,\n };\n}\n\nexport function createFpsGameEditorLocalEditorHostManifest<TDocument, TPatch, TAsset = unknown>(\n options: FpsGameEditorLocalEditorHostOptions<TDocument, TPatch, TAsset>,\n): PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset> {\n const {\n project,\n compatibilityTag,\n agentBridgeSessionMetadata,\n agentBridge: configuredAgentBridge,\n logCompatibilityReport: _logCompatibilityReport,\n logger: _logger,\n ...manifestOptions\n } = options;\n const agentBridge = agentBridgeSessionMetadata\n ? {\n ...(configuredAgentBridge ?? {}),\n sessionMetadata: {\n ...(configuredAgentBridge?.sessionMetadata as Record<string, unknown> | undefined),\n ...agentBridgeSessionMetadata,\n },\n }\n : configuredAgentBridge;\n\n return {\n ...manifestOptions,\n metadata: {\n manifestVersion: PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION,\n projectId: project.projectId,\n projectName: project.projectName,\n ...(compatibilityTag ? { compatibilityTag } : {}),\n },\n ...(agentBridge ? { agentBridge } : {}),\n };\n}\n\nfunction logPlayableLocalEditorHostCompatibilityReport(\n report: PlayableLocalEditorHostCompatibilityReport,\n logger: Pick<Console, 'warn' | 'error'> = console,\n): void {\n const visibleDiagnostics = report.diagnostics.filter(\n diagnostic => diagnostic.severity === 'warning' || diagnostic.severity === 'error',\n );\n if (visibleDiagnostics.length === 0) return;\n const doctorReport = inspectPlayableEditorHostCompatibilityReport({\n diagnostics: visibleDiagnostics,\n });\n const formatted = formatPlayableEditorDoctorReport(doctorReport);\n if (doctorReport.ok) logger.warn(formatted);\n else logger.error(formatted);\n}\n\nexport function inspectPlayableLocalEditorHostManifest(\n manifest: unknown,\n): PlayableLocalEditorHostCompatibilityReport {\n const diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[] = [];\n const report: PlayableLocalEditorHostCompatibilityReport = {\n supportedManifestVersion: PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION,\n ok: true,\n diagnostics,\n };\n\n if (!isRecord(manifest)) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'manifest.invalid',\n 'Playable local editor host manifest must be an object.',\n 'manifest',\n ));\n report.ok = false;\n return report;\n }\n\n inspectMetadata(manifest.metadata, report, diagnostics);\n inspectRequiredCapability(\n manifest,\n diagnostics,\n 'documentAdapter',\n 'documentCapability',\n PLAYABLE_LOCAL_EDITOR_HOST_REQUIRED_CONTRACT.document,\n );\n inspectRequiredCapability(\n manifest,\n diagnostics,\n 'persistenceAdapter',\n 'persistenceCapability',\n PLAYABLE_LOCAL_EDITOR_HOST_REQUIRED_CONTRACT.persistence,\n );\n inspectWorldCapability(manifest.worldAdapter, diagnostics);\n inspectLifecycle(manifest.lifecycle, diagnostics);\n inspectForgePlay(manifest.forgePlay, diagnostics);\n inspectAuthoring(manifest.authoring, diagnostics);\n inspectCapabilities(manifest.capabilities, diagnostics);\n\n report.ok = !diagnostics.some(diagnostic => diagnostic.severity === 'error');\n return report;\n}\n\nexport function formatPlayableLocalEditorHostCompatibilityReport(\n report: PlayableLocalEditorHostCompatibilityReport,\n): string {\n const project = report.projectName ?? report.projectId ?? 'unknown project';\n const header = report.ok\n ? `Playable local editor host compatibility: PASS (${project})`\n : `Playable local editor host compatibility: BLOCKED (${project})`;\n if (report.diagnostics.length === 0) return header;\n const lines = report.diagnostics.map((diagnostic) => {\n const path = diagnostic.path ? ` ${diagnostic.path}` : '';\n return `[${diagnostic.severity.toUpperCase()}] ${diagnostic.code}${path}: ${diagnostic.message}`;\n });\n return [header, ...lines].join('\\n');\n}\n\nfunction createHarnessDocumentAdapter<TDocument, TPatch, TAsset>(\n documentCapability: PlayableLocalEditorDocumentCapability<TDocument, TPatch, TAsset>,\n capabilities: PlayableLocalEditorHostCapabilities<TDocument, TPatch, TAsset> | undefined,\n): LocalEditorHarnessDocumentAdapter<TDocument, TPatch, TAsset> {\n return {\n ...documentCapability,\n ...capabilities?.documentLifecycle,\n ...capabilities?.selection,\n ...capabilities?.inspector,\n ...capabilities?.markerGraph,\n ...capabilities?.assetBrowser,\n ...capabilities?.assetActions,\n ...capabilities?.transformCommands,\n ...capabilities?.sceneGraph,\n ...capabilities?.worldPreview,\n ...capabilities?.rendering,\n ...capabilities?.prefabStage,\n } as unknown as LocalEditorHarnessDocumentAdapter<TDocument, TPatch, TAsset>;\n}\n\nfunction createHarnessHierarchyOptions<TDocument, TPatch, TAsset>(\n manifest: PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset>,\n): LocalEditorHarnessOptions<TDocument, TPatch, TAsset>['hierarchy'] | undefined {\n const capabilities = manifest.capabilities;\n const agentController = createEditorAgentInteractionController({\n transport: createForgePlayAgentTransport({\n window: manifest.forgePlay?.window,\n }),\n });\n const agentOperations = createLocalEditorAgentHierarchyOperations<TDocument>({\n sendContext: context => agentController.sendContext(context),\n getProjectionNode: (document, id) => manifest.documentAdapter.getProjectionNode(document, id),\n getMarkerGraph: document => capabilities?.markerGraph?.getMarkerGraph?.(document) ?? null,\n getMarkerTypeCatalog: document => capabilities?.markerGraph?.getMarkerTypeCatalog?.(document) ?? [],\n getRelationTypeCatalog: document => capabilities?.markerGraph?.getRelationTypeCatalog?.(document) ?? [],\n describeSceneObject: manifest.capabilities?.agentContext?.describeSceneObject,\n describeSceneObjectSet: manifest.capabilities?.agentContext?.describeSceneObjectSet,\n describeRegionBinding: manifest.capabilities?.agentContext?.describeRegionBinding,\n source: {\n projectId: manifest.metadata?.projectId,\n projectName: manifest.metadata?.projectName,\n },\n reportError: manifest.forgePlay?.reportError,\n });\n const operations = capabilities?.hierarchyActions?.operations;\n return {\n operations: [\n ...(agentOperations as readonly LocalEditorHarnessHierarchyOperationRegistration<TDocument, TPatch>[]),\n ...((operations ?? []) as readonly LocalEditorHarnessHierarchyOperationRegistration<TDocument, TPatch>[]),\n ],\n };\n}\n\nfunction createHarnessProjectAgentOptions<TDocument, TPatch, TAsset>(\n manifest: PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset>,\n): NonNullable<LocalEditorHarnessOptions<TDocument, TPatch, TAsset>['agentContext']> {\n const controller = createEditorAgentInteractionController({\n transport: createForgePlayAgentTransport({ window: manifest.forgePlay?.window }),\n });\n return {\n async sendProjectEntry(input) {\n const context = createLocalEditorProjectEntryAgentContext({\n ...input,\n source: {\n projectId: manifest.metadata?.projectId,\n projectName: manifest.metadata?.projectName,\n },\n });\n if (!context) return false;\n try {\n return await controller.sendContext(context);\n } catch (error) {\n manifest.forgePlay?.reportError?.(error);\n return false;\n }\n },\n };\n}\n\nexport function createPlayableLocalEditorHost<TDocument, TPatch, TAsset = unknown>(\n manifest: PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset>,\n): PlayableLocalEditorHost<TDocument> {\n const compatibilityReport = inspectPlayableLocalEditorHostManifest(manifest);\n if (!compatibilityReport.ok) {\n throw new Error(formatPlayableLocalEditorHostCompatibilityReport(compatibilityReport));\n }\n\n const authoringHost = manifest.authoring\n ? (manifest.authoring.host as ProjectAuthoringHost | undefined)\n ?? createProjectAuthoringHost({ drivers: [...(manifest.authoring.drivers ?? [])] as AuthoringSourceDriver[] })\n : undefined;\n const harnessOptions = {\n root: manifest.root,\n localTestActions: manifest.localTestActions,\n gameModeEntryVisible: manifest.gameModeEntryVisible,\n pluginHost: manifest.pluginHost,\n authoringHost,\n documentAdapter: createHarnessDocumentAdapter(manifest.documentAdapter, manifest.capabilities),\n persistenceAdapter: manifest.persistenceAdapter as unknown as LocalEditorHarnessPersistenceAdapter<TDocument, TAsset>,\n worldAdapter: createHarnessWorldAdapter(manifest.worldAdapter),\n agentBridge: manifest.agentBridge,\n transformDocumentCapabilities: manifest.capabilities?.transformCommands?.documentCapabilities,\n world: manifest.world as LocalEditorHarnessOptions<TDocument, TPatch, TAsset>['world'],\n createGrid: manifest.createGrid as LocalEditorHarnessOptions<TDocument, TPatch, TAsset>['createGrid'],\n hierarchy: createHarnessHierarchyOptions(manifest),\n agentContext: createHarnessProjectAgentOptions(manifest),\n } satisfies LocalEditorHarnessOptions<TDocument, TPatch, TAsset>;\n const harness = createLocalEditorHarness<TDocument, TPatch, TAsset>(harnessOptions);\n const lifecycleOperations = getLocalEditorHarnessLifecycleOperations(harness);\n const root = manifest.root ?? document.body;\n const loadingOverlay = createPlayableLocalEditorLoadingOverlay(root);\n const interactions = composePlayableLocalEditorInteractionPolicy(\n manifest.lifecycle.interactions,\n harness.getDefaultInteractionPolicy?.(),\n createNativePlayableLocalEditorInteractionPolicy(root),\n );\n const uninstallBeforeUnloadGuard = installPlayableLocalEditorBeforeUnloadGuard(root, harness);\n const controller = createPlayableLocalEditorHostController({\n harness,\n lifecycleOperations,\n lifecycleScopeHost: manifest.pluginHost\n ? getFpsEditorPluginLifecycleScopeHost(manifest.pluginHost)\n : undefined,\n eventPublisher: manifest.pluginHost?.eventPublisher,\n reportDiagnostic: manifest.pluginHost\n ? diagnostic => manifest.pluginHost?.reportDiagnostic(diagnostic)\n : undefined,\n loadingOverlay,\n loadingContent: manifest.lifecycle.loadingContent,\n interactions,\n beforeDiscardAndRunGame: manifest.lifecycle.beforeDiscardAndRunGame,\n minAssetLoadingOverlayMs: manifest.lifecycle.minAssetLoadingOverlayMs,\n renderAfterEnter: false,\n forgePlay: manifest.forgePlay\n ? {\n enabled: manifest.forgePlay.enabled,\n window: manifest.forgePlay.window,\n hasUnsavedPlatformChanges: manifest.forgePlay.hasUnsavedPlatformChanges,\n handleProjectAssetCommand: manifest.forgePlay.handleProjectAssetCommand,\n handleAssetDrop: manifest.forgePlay.handleAssetDrop,\n exportDocument: manifest.forgePlay.exportDocument,\n reportError: manifest.forgePlay.reportError,\n }\n : undefined,\n });\n const hostHarness = controller.harness as PlayableLocalEditorHarnessApi<TDocument>;\n bindHarnessLifecycle(lifecycleOperations, controller);\n const lifecycleParticipantDisposers = manifest.pluginHost\n ? resolveFpsEditorLifecycleParticipants(manifest.pluginHost.contributions)\n .map(participant => controller.lifecycle.registerParticipant(participant))\n : [];\n if (lifecycleParticipantDisposers.length > 0) {\n controller.lifecycle.addScopeResource(\n PLAYABLE_LOCAL_EDITOR_APPLICATION_SCOPE_ID,\n () => {\n for (const dispose of [...lifecycleParticipantDisposers].reverse()) dispose();\n },\n );\n }\n\n let disposal: Promise<void> | null = null;\n let harnessDisposed = false;\n return {\n harness: hostHarness,\n lifecycle: controller.lifecycle.lifecycle,\n enterEditor: controller.enterEditor,\n saveScene: controller.saveScene,\n saveAndRunGame: controller.saveAndRunGame,\n discardAndRunGame: async () => {\n await controller.discardAndRunGame();\n },\n runWithAssetLoadingOverlay: controller.runWithAssetLoadingOverlay,\n getBridge: controller.getBridge,\n getCompatibilityReport() {\n return cloneCompatibilityReport(compatibilityReport);\n },\n async dispose() {\n if (disposal) return disposal;\n const pending = (async () => {\n await controller.dispose();\n uninstallBeforeUnloadGuard();\n if (!harnessDisposed) {\n await harness.dispose();\n harnessDisposed = true;\n }\n })();\n disposal = pending;\n void pending.catch(() => {\n if (disposal === pending) disposal = null;\n });\n return pending;\n },\n };\n}\n\nfunction bindHarnessLifecycle<TDocument>(\n lifecycleOperations: LocalEditorHarnessLifecycleOperations,\n controller: Pick<PlayableLocalEditorHost<TDocument>, 'enterEditor'> & {\n saveScene(executor?: PlayableLocalEditorDocumentOperationExecutor): Promise<boolean>;\n } & Pick<\n PlayableLocalEditorLifecycleController,\n | 'saveAndRunGame'\n | 'discardAndRunGame'\n | 'prepareSaveAndRunGame'\n | 'prepareDiscardAndRunGame'\n > & { lifecycle: PlayableLocalEditorLifecycleController },\n): void {\n lifecycleOperations.setLifecycleController({\n enterEditor: controller.enterEditor,\n saveScene: (_operation, _context, executor) => controller.saveScene(executor),\n saveAndRunGame: controller.saveAndRunGame,\n discardAndRunGame: controller.discardAndRunGame,\n prepareSaveAndRunGame: controller.prepareSaveAndRunGame,\n prepareDiscardAndRunGame: controller.prepareDiscardAndRunGame,\n lifecycle: controller.lifecycle.lifecycle,\n synchronizeDocumentState: controller.lifecycle.synchronizeDocumentState,\n registerParticipant: controller.lifecycle.registerParticipant,\n openScope: controller.lifecycle.openScope,\n addScopeResource: controller.lifecycle.addScopeResource,\n closeScope: controller.lifecycle.closeScope,\n });\n}\n\nfunction createNativePlayableLocalEditorInteractionPolicy(\n root: HTMLElement,\n): PlayableLocalEditorInteractionPolicy {\n const browserWindow = resolvePlayableLocalEditorWindow(root);\n return {\n confirmDiscardUnsavedChanges(input: PlayableLocalEditorDiscardConfirmationInput) {\n return browserWindow?.confirm?.(formatNativeDiscardConfirmationMessage(input)) ?? true;\n },\n notifySaveFailed(input: PlayableLocalEditorSaveFailureInput) {\n browserWindow?.alert?.(formatNativeSaveFailureMessage(input));\n },\n };\n}\n\nfunction composePlayableLocalEditorInteractionPolicy(\n override: PlayableLocalEditorInteractionPolicy | undefined,\n fallback: PlayableLocalEditorInteractionPolicy | undefined,\n nativeFallback: PlayableLocalEditorInteractionPolicy,\n): PlayableLocalEditorInteractionPolicy {\n return {\n confirmDiscardUnsavedChanges: override?.confirmDiscardUnsavedChanges\n ?? fallback?.confirmDiscardUnsavedChanges\n ?? nativeFallback.confirmDiscardUnsavedChanges,\n notifySaveFailed: override?.notifySaveFailed\n ?? fallback?.notifySaveFailed\n ?? nativeFallback.notifySaveFailed,\n };\n}\n\nfunction installPlayableLocalEditorBeforeUnloadGuard(\n root: HTMLElement,\n harness: Pick<LocalEditorHarness, 'getUnsavedChangesState'>,\n): () => void {\n const browserWindow = resolvePlayableLocalEditorWindow(root);\n if (!browserWindow?.addEventListener || !browserWindow.removeEventListener) return () => {};\n const onBeforeUnload = (event: BeforeUnloadEvent): string | void => {\n let unsavedChanges: PlayableLocalEditorUnsavedChangesState;\n try {\n unsavedChanges = harness.getUnsavedChangesState();\n } catch (error) {\n console.error('[PlayableLocalEditorHost] beforeunload dirty state unavailable', error);\n return;\n }\n if (!unsavedChanges.dirty || !unsavedChanges.hasWorkingDocument) return;\n event.preventDefault();\n event.returnValue = '';\n return '';\n };\n browserWindow.addEventListener('beforeunload', onBeforeUnload);\n return () => {\n browserWindow.removeEventListener('beforeunload', onBeforeUnload);\n };\n}\n\nfunction resolvePlayableLocalEditorWindow(root: HTMLElement): Window | null {\n return root.ownerDocument?.defaultView ?? (typeof window === 'undefined' ? null : window);\n}\n\nfunction formatNativeDiscardConfirmationMessage(\n _input: PlayableLocalEditorDiscardConfirmationInput,\n): string {\n return '当前编辑内容尚未保存。\\n\\n继续会丢弃这些更改并运行游戏。';\n}\n\nfunction formatNativeSaveFailureMessage(input: PlayableLocalEditorSaveFailureInput): string {\n const status = input.status?.trim() || '保存没有成功,当前编辑内容仍保留在编辑器中。';\n const details = input.details?.trim();\n const error = stringifyPlayableLocalEditorError(input.error)?.trim();\n const extra = [details, error]\n .filter((part): part is string => !!part && part !== status);\n return ['保存失败', status, ...extra].join('\\n\\n');\n}\n\nfunction stringifyPlayableLocalEditorError(error: unknown): string | undefined {\n if (error == null) return undefined;\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nfunction inspectMetadata(\n metadata: unknown,\n report: PlayableLocalEditorHostCompatibilityReport,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n if (metadata === undefined) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'metadata.missing',\n 'Manifest metadata is required for the host compatibility contract.',\n 'metadata',\n ));\n return;\n }\n if (!isRecord(metadata)) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'metadata.invalid',\n 'Manifest metadata must be an object.',\n 'metadata',\n ));\n return;\n }\n\n report.manifestVersion = metadata.manifestVersion;\n report.projectId = readOptionalString(metadata.projectId);\n report.projectName = readOptionalString(metadata.projectName);\n report.compatibilityTag = readOptionalString(metadata.compatibilityTag);\n\n if (metadata.manifestVersion !== PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'metadata.manifest-version.unsupported',\n `Manifest version ${String(metadata.manifestVersion)} is incompatible with supported version ${PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION}. Upgrade the manifest or use a compatible editor package version.`,\n 'metadata.manifestVersion',\n ));\n }\n}\n\nfunction inspectRequiredCapability(\n manifest: Record<string, unknown>,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n fieldName: string,\n capabilityName: string,\n requiredFunctions: readonly string[],\n): void {\n const capability = manifest[fieldName];\n if (!isRecord(capability)) {\n diagnostics.push(createDiagnostic(\n 'error',\n `${capabilityName}.missing`,\n `${capabilityName} is required.`,\n capabilityName,\n ));\n return;\n }\n for (const functionName of requiredFunctions) {\n const fn = capability[functionName];\n if (typeof fn !== 'function') {\n diagnostics.push(createDiagnostic(\n 'error',\n `${capabilityName}.${functionName}.missing`,\n `${capabilityName}.${functionName} must be a function.`,\n `${capabilityName}.${functionName}`,\n ));\n } else {\n // Validate function signature: check parameter count\n validateFunctionSignature(fn, functionName, capabilityName, diagnostics);\n }\n }\n}\n\n/**\n * Validates function signature by checking parameter count.\n * Issues warnings when declared parameter count differs from expected.\n * \n * Note: Function.length is not fully reliable (rest params, default values, \n * destructured params all affect it), so signature mismatches are reported as\n * warnings rather than blocking errors.\n */\nfunction validateFunctionSignature(\n fn: Function,\n functionName: string,\n capabilityName: string,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n const expectedArity = getExpectedFunctionArity(capabilityName, functionName);\n if (expectedArity === undefined) return; // No validation defined for this function\n \n const actualArity = fn.length;\n const arityMismatch = actualArity < expectedArity.min\n || (expectedArity.max !== undefined && actualArity > expectedArity.max);\n if (arityMismatch) {\n const severity = capabilityName === 'worldCapability' ? 'error' : 'warning';\n diagnostics.push(createDiagnostic(\n severity,\n `${capabilityName}.${functionName}.arity-mismatch`,\n `${capabilityName}.${functionName} declares ${actualArity} parameter(s), but SDK expects ${expectedArity.min}${expectedArity.max !== undefined && expectedArity.max !== expectedArity.min ? `-${expectedArity.max}` : ''}. Verify the function signature matches the SDK contract.`,\n `${capabilityName}.${functionName}`,\n ));\n }\n}\n\n/**\n * Returns expected parameter count for required functions.\n * min: minimum required parameters\n * max: maximum expected parameters (undefined = no limit)\n */\nfunction getExpectedFunctionArity(\n capabilityName: string,\n functionName: string,\n): { min: number; max?: number } | undefined {\n // Document capability function signatures\n if (capabilityName === 'documentCapability') {\n switch (functionName) {\n case 'reduceDocument': return { min: 2, max: 2 }; // (document, command)\n case 'getHierarchyItems': return { min: 1, max: 1 }; // (document)\n case 'getProjectionNodes': return { min: 1, max: 1 }; // (document)\n case 'getProjectionNode': return { min: 2, max: 2 }; // (document, id)\n case 'createPatchFromAsset': return { min: 1, max: 2 }; // (asset, input?)\n case 'createSerializedPropertyPatch': return { min: 1, max: 1 }; // (input)\n }\n }\n \n // Persistence capability function signatures\n if (capabilityName === 'persistenceCapability') {\n switch (functionName) {\n case 'loadAssets': return { min: 1, max: 1 }; // (document)\n case 'runGame': return { min: 0, max: 1 }; // (context?)\n }\n }\n \n // World capability function signatures\n if (capabilityName === 'worldCapability') {\n switch (functionName) {\n case 'getCanvas': return { min: 0, max: 0 }; // ()\n case 'disposeWorld': return { min: 0, max: 0 }; // ()\n case 'loadPreviewEngine': return { min: 0, max: 0 }; // ()\n case 'createPreviewEngine': return { min: 2, max: 2 }; // (engineModule, canvas)\n case 'importPreviewAsset': return { min: 1, max: 1 }; // (context)\n }\n }\n \n return undefined;\n}\n\nfunction inspectWorldCapability(\n worldCapability: unknown,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n if (!isRecord(worldCapability)) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'worldCapability.missing',\n 'worldCapability is required.',\n 'worldCapability',\n ));\n return;\n }\n for (const functionName of PLAYABLE_LOCAL_EDITOR_HOST_REQUIRED_CONTRACT.world.direct) {\n const fn = worldCapability[functionName];\n if (typeof fn !== 'function') {\n diagnostics.push(createDiagnostic(\n 'error',\n `worldCapability.${functionName}.missing`,\n `worldCapability.${functionName} must be a function.`,\n `worldCapability.${functionName}`,\n ));\n } else {\n validateFunctionSignature(fn, functionName, 'worldCapability', diagnostics);\n }\n }\n}\n\nfunction createHarnessWorldAdapter<TAsset>(\n worldCapability: PlayableLocalEditorWorldCapability<TAsset>,\n): LocalEditorHarnessWorldAdapter<TAsset> {\n const adapter: LocalEditorHarnessWorldAdapter<TAsset> = {\n disposeGameWorld() {\n return worldCapability.disposeWorld?.() as ReturnType<LocalEditorHarnessWorldAdapter<TAsset>['disposeGameWorld']>;\n },\n getCanvas() {\n return worldCapability.getCanvas();\n },\n loadBabylon() {\n return worldCapability.loadPreviewEngine?.() as ReturnType<LocalEditorHarnessWorldAdapter<TAsset>['loadBabylon']>;\n },\n createEngine(engineModule, canvas) {\n return worldCapability.createPreviewEngine?.(engineModule, canvas);\n },\n importProjectionModel(context) {\n return worldCapability.importPreviewAsset?.(context) as ReturnType<LocalEditorHarnessWorldAdapter<TAsset>['importProjectionModel']>;\n },\n };\n if (worldCapability.toBrowserAssetItem) {\n adapter.toBrowserAssetItem = worldCapability.toBrowserAssetItem as LocalEditorHarnessWorldAdapter<TAsset>['toBrowserAssetItem'];\n }\n if (worldCapability.resolveAssetId) {\n adapter.resolveAssetId = worldCapability.resolveAssetId;\n }\n if (worldCapability.resolveMaterialTextureUrl) {\n adapter.resolveMaterialTextureUrl = worldCapability.resolveMaterialTextureUrl;\n }\n return adapter;\n}\n\nfunction inspectLifecycle(\n lifecycle: unknown,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n if (!isRecord(lifecycle)) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'lifecycle.missing',\n 'lifecycle is required.',\n 'lifecycle',\n ));\n return;\n }\n if (!isRecord(lifecycle.loadingContent)) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'lifecycle.loading-content.missing',\n 'lifecycle.loadingContent is required.',\n 'lifecycle.loadingContent',\n ));\n }\n}\n\nfunction inspectForgePlay(\n forgePlay: unknown,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n if (!isRecord(forgePlay)) return;\n if (forgePlay.enabled !== false && !forgePlay.window) {\n diagnostics.push(createDiagnostic(\n 'warning',\n 'forge-play.window.missing',\n 'Forge Play bridge is enabled but no window was provided; mode and document bridge commands will not be installed.',\n 'forgePlay.window',\n ));\n }\n}\n\nfunction inspectAuthoring(\n authoring: unknown,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n if (!isRecord(authoring)) return;\n const drivers = Array.isArray(authoring.drivers) ? authoring.drivers : [];\n if (authoring.host && drivers.length > 0) {\n diagnostics.push(createDiagnostic(\n 'info',\n 'authoring.host-overrides-drivers',\n 'authoring.host and authoring.drivers are both present; the provided host will be used.',\n 'authoring',\n ));\n }\n}\n\nfunction inspectCapabilities(\n capabilities: unknown,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n if (capabilities === undefined) return;\n if (!isRecord(capabilities)) {\n diagnostics.push(createDiagnostic(\n 'warning',\n 'capabilities.invalid',\n 'capabilities must be an object when provided.',\n 'capabilities',\n ));\n return;\n }\n const hierarchyActions = capabilities.hierarchyActions;\n if (isRecord(hierarchyActions) && hierarchyActions.contextActions !== undefined) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'capabilities.hierarchyActions.contextActions.removed',\n 'capabilities.hierarchyActions.contextActions was removed; migrate each action to capabilities.hierarchyActions.operations.',\n 'capabilities.hierarchyActions.contextActions',\n ));\n }\n if (isRecord(hierarchyActions)\n && hierarchyActions.operations !== undefined\n && !Array.isArray(hierarchyActions.operations)) {\n diagnostics.push(createDiagnostic(\n 'warning',\n 'capabilities.hierarchyActions.operations.invalid',\n 'capabilities.hierarchyActions.operations should be an array of typed hierarchy operation registrations.',\n 'capabilities.hierarchyActions.operations',\n ));\n }\n if (isRecord(hierarchyActions) && Array.isArray(hierarchyActions.operations)) {\n hierarchyActions.operations.forEach((operation, index) => {\n if (!isRecord(operation)) return;\n if (operation.contextMenu === undefined) return;\n diagnostics.push(createDiagnostic(\n 'error',\n 'capabilities.hierarchyActions.operations.contextMenu.removed',\n 'Hierarchy operation contextMenu was removed; use operation.menu or menu: false.',\n `capabilities.hierarchyActions.operations[${index}].contextMenu`,\n ));\n });\n }\n}\n\nfunction createDiagnostic(\n severity: PlayableLocalEditorHostCompatibilitySeverity,\n code: string,\n message: string,\n path?: string,\n): PlayableLocalEditorHostCompatibilityDiagnostic {\n return {\n severity,\n code,\n message,\n path,\n };\n}\n\nfunction cloneCompatibilityReport(\n report: PlayableLocalEditorHostCompatibilityReport,\n): PlayableLocalEditorHostCompatibilityReport {\n return {\n supportedManifestVersion: report.supportedManifestVersion,\n manifestVersion: report.manifestVersion,\n projectId: report.projectId,\n projectName: report.projectName,\n compatibilityTag: report.compatibilityTag,\n ok: report.ok,\n diagnostics: report.diagnostics.map(diagnostic => ({ ...diagnostic })),\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n"]}
1
+ {"version":3,"file":"playable-local-editor-host.js","sourceRoot":"","sources":["../src/playable-local-editor-host.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createProjectAuthoringHost,\n type AuthoringSourceDriver,\n type DocumentCommand,\n type EditorProjectionImpact,\n type EditorTransformDocumentCapabilities,\n type EditorTransformSnapshot,\n type ProjectAuthoringHost,\n} from '@fps-games/editor-core';\nimport {\n getFpsEditorPluginLifecycleScopeHost,\n resolveFpsEditorLifecycleParticipants,\n type FpsEditorPluginHost,\n} from '@fps-games/editor-core/plugin-host';\nimport type {\n FpsEditorLifecycleService,\n} from '@fps-games/editor-core/lifecycle';\nimport type { BabylonEditorProjectionSelectionEdgesPrewarm } from '@fps-games/editor-babylon';\nimport type {\n LocalEditorBrowserProjectFileContent,\n LocalEditorBrowserProjectFileSnapshot,\n LocalEditorBrowserProjectMediaSource,\n} from '@fps-games/editor-browser';\nimport type {\n ArtistMaterialTextureRef,\n EditorDiagnostic,\n EditorDiagnosticLocator,\n EditorDiagnosticPhase,\n SpatialMarkerGraph,\n SpatialMarkerNode,\n SpatialMarkerTypeDefinition,\n SpatialRelationTypeDefinition,\n} from '@fps-games/editor-protocol';\nimport {\n createPlayableLocalEditorLoadingOverlay,\n formatPlayableEditorDoctorReport,\n inspectPlayableEditorHostCompatibilityReport,\n type FpsGameEditorProjectDefinition,\n type PlayableForgePlayModeBridge,\n type PlayableForgePlayDocumentExportResult,\n type PlayableForgePlaySaveState,\n type PlayableForgePlayWindowLike,\n type PlayableLocalEditorDiscardConfirmationInput,\n type PlayableLocalEditorHostBridgeContext,\n type PlayableLocalEditorHostLoadingContent,\n type PlayableLocalEditorInteractionPolicy,\n type PlayableLocalEditorDocumentOperationExecutor,\n type PlayableLocalEditorSaveFailureInput,\n type PlayableLocalEditorSaveFailureState,\n type PlayableLocalEditorUnsavedChangesState,\n} from '@fps-games/editor-playable-sdk';\nimport {\n createPlayableLocalEditorHostController,\n PLAYABLE_LOCAL_EDITOR_APPLICATION_SCOPE_ID,\n type PlayableLocalEditorLifecycleController,\n} from '@fps-games/editor-playable-sdk/internal/local-harness';\nimport {\n createLocalEditorHarness,\n type LocalEditorHarness,\n type LocalEditorHarnessDocumentAdapter,\n type LocalEditorHarnessHistoryOperation,\n type LocalEditorHarnessHistoryOperationOptions,\n type LocalEditorHarnessHistoryOperationResult,\n type LocalEditorHarnessHistoryProjectionResult,\n type LocalEditorHarnessHistoryStateResult,\n type LocalEditorHarnessHierarchyOperationRegistration,\n type LocalEditorMarkerGraphCommand,\n type LocalEditorHarnessOptions,\n type LocalEditorHarnessOperationOrigin,\n type LocalEditorHarnessPersistenceAdapter,\n type LocalEditorHarnessProjectionWaitPolicy,\n type LocalEditorHarnessWorldAdapter,\n} from './local-editor-harness.js';\nimport {\n getLocalEditorHarnessLifecycleOperations,\n type LocalEditorHarnessLifecycleOperations,\n} from './internal/local-editor-lifecycle-operations.js';\n\nexport const PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION = 2 as const;\n\n/**\n * Frozen required contract for playable local editor host manifests.\n * \n * This contract defines the minimum set of methods that a host manifest must provide.\n * The contract is deeply frozen to prevent accidental modifications that would break\n * backward compatibility.\n * \n * IMPORTANT: Adding new required methods is a BREAKING CHANGE and requires:\n * - Incrementing PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION\n * - Providing migration documentation\n * - Updating all reference consumers\n */\nexport const PLAYABLE_LOCAL_EDITOR_HOST_REQUIRED_CONTRACT = Object.freeze({\n document: Object.freeze([\n 'reduceDocument',\n 'getHierarchyItems',\n 'getProjectionNodes',\n 'getProjectionNode',\n 'createPatchFromAsset',\n 'createSerializedPropertyPatch',\n ] as const),\n persistence: Object.freeze([\n 'loadAssets',\n 'runGame',\n ] as const),\n world: Object.freeze({\n direct: Object.freeze([\n 'getCanvas',\n 'disposeWorld',\n 'loadPreviewEngine',\n 'createPreviewEngine',\n 'importPreviewAsset',\n ] as const),\n }),\n});\n\ntype PlayableLocalEditorMaybePromise<T> = T | Promise<T>;\n\nexport type PlayableLocalEditorHostCompatibilitySeverity = 'error' | 'warning' | 'info';\n\nexport interface PlayableLocalEditorHostManifestMetadata {\n manifestVersion: typeof PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION;\n projectId?: string;\n projectName?: string;\n compatibilityTag?: string;\n}\n\nexport interface PlayableLocalEditorHostCompatibilityDiagnostic {\n severity: PlayableLocalEditorHostCompatibilitySeverity;\n code: string;\n message: string;\n path?: string;\n}\n\nexport interface PlayableLocalEditorHostCompatibilityReport {\n supportedManifestVersion: typeof PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION;\n manifestVersion?: unknown;\n projectId?: string;\n projectName?: string;\n compatibilityTag?: string;\n ok: boolean;\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[];\n}\n\nexport interface PlayableLocalEditorAuthoringSourceDriverLike<TDocument = unknown, TPayload = unknown> {\n sourceType: string;\n load(input: unknown): PlayableLocalEditorMaybePromise<unknown>;\n reduce?(input: {\n source: unknown;\n document: TDocument;\n command?: unknown;\n intent?: unknown;\n }): PlayableLocalEditorMaybePromise<TDocument>;\n validate?(input: unknown): PlayableLocalEditorMaybePromise<unknown>;\n save(input: {\n source: unknown;\n document: TDocument;\n command?: unknown;\n intent?: unknown;\n }): PlayableLocalEditorMaybePromise<unknown>;\n compile?(input: unknown): PlayableLocalEditorMaybePromise<unknown>;\n compileRuntimePatch?(input: unknown): PlayableLocalEditorMaybePromise<unknown>;\n}\n\nexport interface PlayableLocalEditorAuthoringHostLike {\n getSourceRegistry(): unknown;\n registerSource(source: unknown): void;\n registerSourceDriver(driver: PlayableLocalEditorAuthoringSourceDriverLike): void;\n loadSource<TDocument = unknown>(ref: unknown): Promise<unknown>;\n commitSource<TDocument = unknown>(input: {\n source: unknown;\n document: TDocument;\n beforeDocument?: TDocument;\n expectedRevision?: number;\n command?: unknown;\n }): Promise<unknown>;\n dispatch<TDocument = unknown, TPayload = unknown>(command: unknown): Promise<unknown>;\n attachRuntimeAdapter?(adapter: unknown): void;\n detachRuntimeAdapter?(): void;\n}\n\nexport interface PlayableLocalEditorPatchResult<TPatch> {\n patch: TPatch;\n label?: string;\n changedId?: string;\n createdId?: string | null;\n changedIds?: string[];\n reprojectIds?: string[];\n projectionImpact?: PlayableLocalEditorProjectionImpact;\n selectId?: string | null;\n}\n\nexport type PlayableLocalEditorProjectionImpact = EditorProjectionImpact;\n\nexport interface PlayableLocalEditorPropertyPatchInput<TDocument = unknown> {\n document: TDocument;\n targetId: string;\n targetIds?: string[];\n path: string;\n value: unknown;\n control?: string;\n valueType?: string;\n commitMode?: string;\n persistence?: string;\n source?: unknown;\n}\n\nexport interface PlayableLocalEditorMultiPropertyPatchInput<TDocument = unknown>\n extends Omit<PlayableLocalEditorPropertyPatchInput<TDocument>, 'targetId'> {\n targetIds: string[];\n activeId: string | null;\n}\n\nexport interface PlayableLocalEditorMultiPropertyCapabilityInput<TDocument = unknown> {\n document: TDocument;\n targetIds: string[];\n activeId: string | null;\n path: string;\n control?: string;\n valueType?: string;\n commitMode?: string;\n persistence?: string;\n}\n\nexport interface PlayableLocalEditorTransformPatchInput<TDocument = unknown> {\n document: TDocument;\n targetId: string;\n targetIds?: string[];\n transform?: unknown;\n worldTransform?: unknown;\n operation?: string;\n duplicate?: boolean;\n [key: string]: unknown;\n}\n\nexport interface PlayableLocalEditorTransformInspectorPreviewInput<TDocument = unknown> {\n document: TDocument;\n targetId: string;\n targetIds: string[];\n activeId: string | null;\n transform: EditorTransformSnapshot;\n}\n\nexport interface PlayableLocalEditorTransformBatchPatchInput<TDocument = unknown> {\n document: TDocument;\n targetIds: string[];\n activeId?: string | null;\n operation?: string;\n [key: string]: unknown;\n}\n\nexport interface PlayableLocalEditorRenderingPropertyChangeResult<TPatch = unknown> {\n changed?: boolean;\n dirty?: boolean;\n status?: string;\n statusTone?: string;\n statusDetails?: string;\n details?: Record<string, unknown>;\n refreshWorldRendering?: boolean;\n documentPatch?: PlayableLocalEditorPatchResult<TPatch> | null;\n}\n\nexport interface PlayableLocalEditorRuntimeInspectorContext<TDocument = unknown> {\n document: TDocument;\n targetIds: string[];\n activeId: string | null;\n inspectorObject: unknown;\n projectionNode?: unknown | null;\n projectedRoot?: unknown;\n}\n\nexport interface PlayableLocalEditorPrefabStageInput<TAsset = unknown> {\n assetId: string;\n browserAssetId?: string;\n asset?: TAsset | null;\n}\n\nexport interface PlayableLocalEditorPrefabStageDescriptor<TDocument = unknown> {\n assetId: string;\n browserAssetId?: string;\n label: string;\n sourceAssetId?: string;\n sourceAssetGuid?: string;\n readonly?: boolean;\n previewNodeId?: string;\n document?: TDocument;\n data?: unknown;\n}\n\nexport interface PlayableLocalEditorPrefabStageContext {\n previewNodeId?: string;\n importStructureReady: boolean;\n importStructure: unknown | null;\n}\n\nexport interface PlayableLocalEditorHierarchyActionsCapability<TDocument, TPatch = unknown> {\n operations?: readonly LocalEditorHarnessHierarchyOperationRegistration<TDocument, TPatch>[];\n}\n\nexport interface PlayableLocalEditorDocumentLifecycleCapability<TDocument, TAsset = unknown> {\n cloneDocument?(document: TDocument): TDocument;\n compareDocuments?(left: TDocument, right: TDocument): boolean;\n prepareDocument?(document: TDocument, assets: TAsset[]): TDocument;\n hydrateDocumentAssets?(document: TDocument, assets: TAsset[]): TDocument;\n resolveUpdatedAssetSnapshot?(\n assets: TAsset[],\n input: { assetId: string },\n ): { assetId: string; contentHash?: string } | null;\n listAssetSnapshots?(assets: TAsset[]): Array<{ assetId: string; contentHash?: string }>;\n reconcileUpdatedAsset?(\n document: TDocument,\n input: { assetId: string },\n ): {\n document: TDocument;\n reconciledBindingCount?: number;\n warnings?: Array<{\n code: string;\n gameObjectId?: string;\n slotId?: string;\n materialAssetId?: string;\n candidateSlotIds?: string[];\n }>;\n };\n validateDocument?(\n document: TDocument,\n context: {\n phase: EditorDiagnosticPhase;\n scopeId: string;\n documentRevision: number;\n projectionRevision: number;\n },\n ): readonly EditorDiagnostic[];\n summarize?(document: TDocument): string;\n}\n\nexport interface PlayableLocalEditorSelectionCapability<TDocument> {\n isSelectable?(document: TDocument, id: string): boolean;\n isLocked?(document: TDocument, id: string): boolean;\n}\n\nexport interface PlayableLocalEditorInspectorCapability<TDocument> {\n getInspectorObject?(document: TDocument, activeId: string): unknown | null;\n getInspectorMultiObject?(document: TDocument, selectedIds: string[], activeId: string | null): unknown | null;\n getRuntimeInspectorSections?(context: PlayableLocalEditorRuntimeInspectorContext<TDocument>): unknown[];\n}\n\nexport interface PlayableLocalEditorAssetBrowserCapability<TDocument> {\n getBrowserAssetItems?(document: TDocument): unknown[];\n}\n\nexport interface PlayableLocalEditorAssetActionsCapability<TDocument, TPatch, TAsset = unknown> {\n createPatchFromAsset?(asset: TAsset, input?: Record<string, unknown> & { document?: TDocument; placement?: unknown }): {\n patch: TPatch;\n label?: string;\n };\n createAssetActionPatch?(input: Record<string, unknown> & { document: TDocument; asset?: TAsset }): PlayableLocalEditorPatchResult<TPatch> | null;\n createPlacedAssetPatch?(input: Record<string, unknown> & { document: TDocument; asset?: TAsset }): PlayableLocalEditorPatchResult<TPatch> | null;\n findCreatedId?(beforeDocument: TDocument, afterDocument: TDocument): string | null;\n}\n\nexport interface PlayableLocalEditorTransformCommandsCapability<TDocument, TPatch> {\n documentCapabilities?: Partial<EditorTransformDocumentCapabilities>;\n canCreateSerializedMultiPropertyPatch?(input: PlayableLocalEditorMultiPropertyCapabilityInput<TDocument>): boolean;\n createSerializedMultiPropertyPatch?(input: PlayableLocalEditorMultiPropertyPatchInput<TDocument>): PlayableLocalEditorPatchResult<TPatch> | null;\n createTransformInspectorPreview?(input: PlayableLocalEditorTransformInspectorPreviewInput<TDocument>): EditorTransformSnapshot | null;\n createTransformPatch?(input: PlayableLocalEditorTransformPatchInput<TDocument>): PlayableLocalEditorPatchResult<TPatch> | null;\n createTransformBatchPatch?(input: PlayableLocalEditorTransformBatchPatchInput<TDocument>): PlayableLocalEditorPatchResult<TPatch> | null;\n createDuplicateSelectionPatch?(input: Record<string, unknown> & { document: TDocument; targetIds: string[] }): PlayableLocalEditorPatchResult<TPatch> | null;\n}\n\nexport interface PlayableLocalEditorSceneGraphCapability<TDocument, TPatch> {\n validateSceneGraphDrop?(document: TDocument, intent: unknown): unknown;\n createSceneGraphRenamePatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n createSceneGraphCreateGroupPatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n createSceneGraphCreatePrimitivePatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n createSceneGraphDeletePatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n createSceneGraphDropPatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n validateSceneGraphMove?(document: TDocument, intent: unknown): unknown;\n createSceneGraphMovePatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n validateSceneGraphGroupSelection?(document: TDocument, intent: unknown): unknown;\n createSceneGraphGroupSelectionPatch?(document: TDocument, intent: unknown): PlayableLocalEditorPatchResult<TPatch> | null;\n}\n\nexport type PlayableLocalEditorMarkerGraphCommand = LocalEditorMarkerGraphCommand;\n\nexport interface PlayableLocalEditorMarkerGraphCapability<TDocument, TPatch> {\n getMarkerGraph?(document: TDocument): SpatialMarkerGraph | null;\n getMarkerTypeCatalog?(document: TDocument): SpatialMarkerTypeDefinition[];\n getRelationTypeCatalog?(document: TDocument): SpatialRelationTypeDefinition[];\n getPrefabInstanceMarkerOverlays?(document: TDocument): Array<{ ownerInstanceId: string; localNodeId: string; marker: SpatialMarkerNode }>;\n getPrefabStageMarkerOverlays?(document: TDocument, prefabAssetId: string, previewInstanceId: string): Array<{ ownerInstanceId: string; localNodeId: string; marker: SpatialMarkerNode }>;\n createMarkerGraphPatch?(document: TDocument, command: PlayableLocalEditorMarkerGraphCommand): PlayableLocalEditorPatchResult<TPatch> | null;\n}\n\nexport interface PlayableLocalEditorWorldPreviewCapability<TDocument> {\n getSceneCameraPreviewRig?(document: TDocument): unknown | null;\n getWorldAppearance?(document: TDocument): unknown | null;\n}\n\nexport interface PlayableLocalEditorRenderingCapability<TDocument, TPatch = unknown> {\n getWorldRendering?(document: TDocument): unknown | null;\n getRenderingPanelState?(document: TDocument, context?: Record<string, unknown>): unknown | null;\n onRenderingAction?(input: Record<string, unknown> & { document: TDocument }): PlayableLocalEditorMaybePromise<\n boolean | void | PlayableLocalEditorRenderingPropertyChangeResult<TPatch>\n >;\n onRenderingPropertyChange?(input: Record<string, unknown> & { document: TDocument }): PlayableLocalEditorMaybePromise<\n boolean | void | PlayableLocalEditorRenderingPropertyChangeResult<TPatch>\n >;\n getShadowMapExperimentConfig?(): unknown | null;\n getShadowMapExperimentPlan?(document: TDocument): unknown | null;\n createShadowMapExperimentProfilesPatch?(input: {\n document: TDocument;\n qualityProfile?: string | null;\n behaviorProfile?: string | null;\n }): PlayableLocalEditorPatchResult<TPatch> | null;\n}\n\nexport interface PlayableLocalEditorPrefabStageCapability<TDocument, TAsset = unknown> {\n getPrefabStageDescriptor?(\n document: TDocument,\n input: PlayableLocalEditorPrefabStageInput<TAsset>,\n ): PlayableLocalEditorPrefabStageDescriptor<TDocument> | null;\n getPrefabStageProjectionNodes?(\n document: TDocument,\n descriptor: PlayableLocalEditorPrefabStageDescriptor<TDocument>,\n ): unknown[];\n getPrefabStageStructure?(\n document: TDocument,\n descriptor: PlayableLocalEditorPrefabStageDescriptor<TDocument>,\n context: PlayableLocalEditorPrefabStageContext,\n ): unknown[];\n getPrefabStageInspectorObject?(\n document: TDocument,\n descriptor: PlayableLocalEditorPrefabStageDescriptor<TDocument>,\n selectedItemId: string | null,\n context: PlayableLocalEditorPrefabStageContext,\n ): unknown | null;\n resolvePrefabStagePreviewTarget?(\n document: TDocument,\n descriptor: PlayableLocalEditorPrefabStageDescriptor<TDocument>,\n projectionNodeId: string,\n context: PlayableLocalEditorPrefabStageContext,\n ): unknown | null;\n getPrefabStageProjectionNodeId?(\n document: TDocument,\n descriptor: PlayableLocalEditorPrefabStageDescriptor<TDocument>,\n nodeId: string,\n context: PlayableLocalEditorPrefabStageContext,\n ): string | null;\n}\n\nexport interface PlayableLocalEditorHostCapabilities<TDocument, TPatch, TAsset = unknown> {\n documentLifecycle?: PlayableLocalEditorDocumentLifecycleCapability<TDocument, TAsset>;\n selection?: PlayableLocalEditorSelectionCapability<TDocument>;\n inspector?: PlayableLocalEditorInspectorCapability<TDocument>;\n assetBrowser?: PlayableLocalEditorAssetBrowserCapability<TDocument>;\n assetActions?: PlayableLocalEditorAssetActionsCapability<TDocument, TPatch, TAsset>;\n transformCommands?: PlayableLocalEditorTransformCommandsCapability<TDocument, TPatch>;\n sceneGraph?: PlayableLocalEditorSceneGraphCapability<TDocument, TPatch>;\n markerGraph?: PlayableLocalEditorMarkerGraphCapability<TDocument, TPatch>;\n worldPreview?: PlayableLocalEditorWorldPreviewCapability<TDocument>;\n rendering?: PlayableLocalEditorRenderingCapability<TDocument, TPatch>;\n prefabStage?: PlayableLocalEditorPrefabStageCapability<TDocument, TAsset>;\n hierarchyActions?: PlayableLocalEditorHierarchyActionsCapability<TDocument, TPatch>;\n}\n\nexport interface PlayableLocalEditorDocumentCapability<TDocument, TPatch, TAsset = unknown> {\n reduceDocument(document: TDocument, command: any): TDocument;\n getHierarchyItems(document: TDocument): unknown[];\n isHierarchyStructureChange?(command: DocumentCommand<TDocument, TPatch>): boolean;\n getProjectionNodes(document: TDocument): unknown[];\n getProjectionNode(document: TDocument, id: string): unknown | null;\n getProjectionNodesForTarget?(document: TDocument, targetId: string): unknown[];\n resolveProjectionTargetId?(document: TDocument, projectionNodeId: string): string | null;\n getProjectionSelectionNodeIds?(document: TDocument, targetId: string): string[];\n createPatchFromAsset(asset: TAsset, input?: Record<string, unknown> & { document?: TDocument; placement?: unknown }): {\n patch: TPatch;\n label?: string;\n };\n createSerializedPropertyPatch(input: PlayableLocalEditorPropertyPatchInput<TDocument>): PlayableLocalEditorPatchResult<TPatch> | null;\n resolveDiagnosticLocator?(\n document: TDocument,\n diagnostic: EditorDiagnostic,\n ): EditorDiagnosticLocator | null;\n}\n\nexport interface PlayableLocalEditorPersistenceCapability<TDocument, TAsset = unknown> {\n loadAuthoringSource?(): PlayableLocalEditorMaybePromise<{\n source: unknown;\n document: TDocument;\n assets?: TAsset[];\n summary?: string;\n }>;\n loadDocument?(): PlayableLocalEditorMaybePromise<TDocument>;\n loadAssets(): PlayableLocalEditorMaybePromise<TAsset[]>;\n loadProjectFiles?(): PlayableLocalEditorMaybePromise<LocalEditorBrowserProjectFileSnapshot>;\n loadProjectFile?(path: string): PlayableLocalEditorMaybePromise<LocalEditorBrowserProjectFileContent>;\n resolveProjectMedia?(path: string): PlayableLocalEditorMaybePromise<LocalEditorBrowserProjectMediaSource | null>;\n saveAuthoringSource?(input: {\n source: unknown;\n document: TDocument;\n }): PlayableLocalEditorMaybePromise<{\n source: unknown;\n document: TDocument;\n summary?: string;\n }>;\n saveDocument?(document: TDocument): PlayableLocalEditorMaybePromise<{ document: TDocument; summary?: string }>;\n runGame(context?: { reason: 'save' | 'discard' }): PlayableLocalEditorMaybePromise<void>;\n}\n\nexport interface PlayableLocalEditorWorldCapability<TAsset = unknown> {\n disposeWorld(): PlayableLocalEditorMaybePromise<void>;\n getCanvas(): HTMLCanvasElement | null;\n loadPreviewEngine(): PlayableLocalEditorMaybePromise<Record<string, any>>;\n createPreviewEngine(engineModule: Record<string, any>, canvas: HTMLCanvasElement): any;\n importPreviewAsset(context: any): Promise<unknown | null>;\n resolveMaterialTextureUrl?(texture: ArtistMaterialTextureRef): string | null | undefined;\n toBrowserAssetItem?(asset: TAsset): unknown;\n resolveAssetId?(asset: TAsset): string;\n}\n\nexport interface PlayableLocalEditorWorldOptions {\n cameraTarget?: { x: number; y: number; z: number };\n cameraRadius?: number;\n clearColor?: { r: number; g: number; b: number; a: number };\n sky?: Record<string, unknown> | false;\n grid?: Record<string, unknown>;\n useRightHandedSystem?: boolean;\n coordinateAxes?: boolean;\n selectionEdgesPrewarm?: BabylonEditorProjectionSelectionEdgesPrewarm;\n}\n\nexport interface PlayableLocalEditorGridContext {\n getCamera(): unknown | null;\n getEditorCamera(): unknown | null;\n}\n\nexport type PlayableLocalEditorGridFactory = (\n babylon: Record<string, any>,\n scene: unknown,\n camera?: unknown,\n context?: PlayableLocalEditorGridContext,\n) => unknown | void;\n\nexport interface PlayableLocalEditorAssetReloadResult {\n ok: boolean;\n assetCount: number;\n status: string;\n}\n\nexport interface PlayableLocalEditorUpdatedAssetRefreshResult extends PlayableLocalEditorAssetReloadResult {\n assetId: string;\n reconciledBindingCount: number;\n warnings: Array<{\n code: string;\n gameObjectId?: string;\n slotId?: string;\n materialAssetId?: string;\n candidateSlotIds?: string[];\n }>;\n error?: string;\n}\n\nexport interface PlayableLocalEditorAssetCreationOptions {\n placement?: unknown;\n}\n\nexport interface PlayableLocalEditorAssetCreationResult {\n ok: boolean;\n assetId: string;\n changed?: boolean;\n createdId?: string | null;\n status: string;\n error?: string;\n}\n\nexport type PlayableLocalEditorOperationOrigin = LocalEditorHarnessOperationOrigin;\nexport type PlayableLocalEditorProjectionWaitPolicy = LocalEditorHarnessProjectionWaitPolicy;\nexport type PlayableLocalEditorHistoryOperation = LocalEditorHarnessHistoryOperation;\nexport type PlayableLocalEditorHistoryOperationOptions = LocalEditorHarnessHistoryOperationOptions;\nexport type PlayableLocalEditorHistoryProjectionResult = LocalEditorHarnessHistoryProjectionResult;\nexport type PlayableLocalEditorHistoryStateResult = LocalEditorHarnessHistoryStateResult;\nexport type PlayableLocalEditorHistoryOperationResult<TDocument = unknown> =\n LocalEditorHarnessHistoryOperationResult<TDocument>;\n\nexport interface PlayableLocalEditorHarnessApi<TDocument = unknown> {\n render(): void;\n notifyViewportRevealed(reason?: string): void;\n getWorkingDocument(): TDocument | null;\n projectAssetDropPoint(point: { x: number; y: number } | null): { x: number; y: number; z: number } | null;\n getUnsavedChangesState(): PlayableLocalEditorUnsavedChangesState;\n getSaveFailureState(): PlayableLocalEditorSaveFailureState | null;\n getLifecycleService(): FpsEditorLifecycleService | null;\n validateOperation(phase: 'save' | 'run' | 'export'): boolean;\n validateOperationSettled(phase: 'save' | 'run' | 'export'): Promise<boolean>;\n validateOperationSettledForCurrentDocument(phase: 'save' | 'run' | 'export'): Promise<boolean>;\n runExclusiveDocumentOperation<TResult>(\n operation: (executor: PlayableLocalEditorDocumentOperationExecutor) => Promise<TResult>,\n ): Promise<TResult>;\n reloadAssets(): Promise<PlayableLocalEditorAssetReloadResult>;\n refreshUpdatedAsset(input: {\n assetId: string;\n expectedContentHash: string;\n }): Promise<PlayableLocalEditorUpdatedAssetRefreshResult>;\n createAssetFromAssetId(assetId: string, options?: PlayableLocalEditorAssetCreationOptions): PlayableLocalEditorAssetCreationResult;\n undo(options?: PlayableLocalEditorHistoryOperationOptions): Promise<PlayableLocalEditorHistoryOperationResult<TDocument>>;\n redo(options?: PlayableLocalEditorHistoryOperationOptions): Promise<PlayableLocalEditorHistoryOperationResult<TDocument>>;\n enterEditor(): Promise<void>;\n saveScene(): Promise<boolean>;\n saveAndRunGame(): Promise<boolean>;\n discardAndRunGame(): Promise<void>;\n}\n\nexport interface PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset = unknown> {\n metadata: PlayableLocalEditorHostManifestMetadata;\n root?: HTMLElement;\n localTestActions?: boolean;\n gameModeEntryVisible?: boolean;\n pluginHost?: FpsEditorPluginHost;\n authoring?: {\n host?: PlayableLocalEditorAuthoringHostLike;\n drivers?: readonly PlayableLocalEditorAuthoringSourceDriverLike[];\n };\n documentAdapter: PlayableLocalEditorDocumentCapability<TDocument, TPatch, TAsset>;\n capabilities?: PlayableLocalEditorHostCapabilities<TDocument, TPatch, TAsset>;\n persistenceAdapter: PlayableLocalEditorPersistenceCapability<TDocument, TAsset>;\n worldAdapter: PlayableLocalEditorWorldCapability<TAsset>;\n world?: PlayableLocalEditorWorldOptions;\n createGrid?: PlayableLocalEditorGridFactory;\n lifecycle: {\n loadingContent: PlayableLocalEditorHostLoadingContent;\n interactions?: PlayableLocalEditorInteractionPolicy;\n beforeDiscardAndRunGame?: () => void | Promise<void>;\n minAssetLoadingOverlayMs?: number;\n };\n forgePlay?: {\n enabled?: boolean;\n window?: PlayableForgePlayWindowLike;\n handleProjectAssetCommand?: (\n context: PlayableLocalEditorHostBridgeContext<PlayableLocalEditorHarnessApi<TDocument>>,\n ) => Promise<void> | void;\n handleAssetDrop?: (\n payload: Record<string, unknown>,\n context: Omit<PlayableLocalEditorHostBridgeContext<PlayableLocalEditorHarnessApi<TDocument>>, 'name'>,\n ) => void;\n hasUnsavedPlatformChanges?: () => boolean;\n exportDocument?: (input: {\n payload: Record<string, unknown>;\n saveState: PlayableForgePlaySaveState;\n postEvent: (name: string, payload?: Record<string, unknown>) => void;\n context: Omit<PlayableLocalEditorHostBridgeContext<PlayableLocalEditorHarnessApi<TDocument>>, 'name' | 'payload'>;\n }) => Promise<PlayableForgePlayDocumentExportResult> | PlayableForgePlayDocumentExportResult;\n reportError?: (error: unknown) => void;\n };\n}\n\nexport interface PlayableLocalEditorHost<TDocument = unknown> {\n harness: PlayableLocalEditorHarnessApi<TDocument>;\n lifecycle: FpsEditorLifecycleService;\n enterEditor(): Promise<void>;\n saveScene(): Promise<boolean>;\n saveAndRunGame(): Promise<boolean>;\n discardAndRunGame(): Promise<void>;\n runWithAssetLoadingOverlay<T>(operation: () => Promise<T>): Promise<T>;\n getBridge(): PlayableForgePlayModeBridge | null;\n getCompatibilityReport(): PlayableLocalEditorHostCompatibilityReport;\n dispose(): Promise<void>;\n}\n\nexport interface FpsGameEditorLocalEditorHostOptions<TDocument, TPatch, TAsset = unknown>\n extends Omit<PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset>, 'metadata'> {\n project: Pick<FpsGameEditorProjectDefinition, 'projectId' | 'projectName'>;\n compatibilityTag?: string;\n logCompatibilityReport?: boolean;\n logger?: Pick<Console, 'warn' | 'error'>;\n}\n\nexport interface FpsGameEditorLocalEditorHostResult<TDocument, TPatch, TAsset = unknown> {\n host: PlayableLocalEditorHost<TDocument>;\n manifest: PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset>;\n compatibilityReport: PlayableLocalEditorHostCompatibilityReport;\n}\n\nexport function createFpsGameEditorLocalEditorHost<TDocument, TPatch, TAsset = unknown>(\n options: FpsGameEditorLocalEditorHostOptions<TDocument, TPatch, TAsset>,\n): FpsGameEditorLocalEditorHostResult<TDocument, TPatch, TAsset> {\n const manifest = createFpsGameEditorLocalEditorHostManifest(options);\n const host = createPlayableLocalEditorHost<TDocument, TPatch, TAsset>(manifest);\n const compatibilityReport = host.getCompatibilityReport();\n if (options.logCompatibilityReport !== false) {\n logPlayableLocalEditorHostCompatibilityReport(compatibilityReport, options.logger);\n }\n return {\n host,\n manifest,\n compatibilityReport,\n };\n}\n\nexport function createFpsGameEditorLocalEditorHostManifest<TDocument, TPatch, TAsset = unknown>(\n options: FpsGameEditorLocalEditorHostOptions<TDocument, TPatch, TAsset>,\n): PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset> {\n const {\n project,\n compatibilityTag,\n logCompatibilityReport: _logCompatibilityReport,\n logger: _logger,\n ...manifestOptions\n } = options;\n return {\n ...manifestOptions,\n metadata: {\n manifestVersion: PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION,\n projectId: project.projectId,\n projectName: project.projectName,\n ...(compatibilityTag ? { compatibilityTag } : {}),\n },\n };\n}\n\nfunction logPlayableLocalEditorHostCompatibilityReport(\n report: PlayableLocalEditorHostCompatibilityReport,\n logger: Pick<Console, 'warn' | 'error'> = console,\n): void {\n const visibleDiagnostics = report.diagnostics.filter(\n diagnostic => diagnostic.severity === 'warning' || diagnostic.severity === 'error',\n );\n if (visibleDiagnostics.length === 0) return;\n const doctorReport = inspectPlayableEditorHostCompatibilityReport({\n diagnostics: visibleDiagnostics,\n });\n const formatted = formatPlayableEditorDoctorReport(doctorReport);\n if (doctorReport.ok) logger.warn(formatted);\n else logger.error(formatted);\n}\n\nexport function inspectPlayableLocalEditorHostManifest(\n manifest: unknown,\n): PlayableLocalEditorHostCompatibilityReport {\n const diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[] = [];\n const report: PlayableLocalEditorHostCompatibilityReport = {\n supportedManifestVersion: PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION,\n ok: true,\n diagnostics,\n };\n\n if (!isRecord(manifest)) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'manifest.invalid',\n 'Playable local editor host manifest must be an object.',\n 'manifest',\n ));\n report.ok = false;\n return report;\n }\n\n inspectMetadata(manifest.metadata, report, diagnostics);\n inspectRequiredCapability(\n manifest,\n diagnostics,\n 'documentAdapter',\n 'documentCapability',\n PLAYABLE_LOCAL_EDITOR_HOST_REQUIRED_CONTRACT.document,\n );\n inspectRequiredCapability(\n manifest,\n diagnostics,\n 'persistenceAdapter',\n 'persistenceCapability',\n PLAYABLE_LOCAL_EDITOR_HOST_REQUIRED_CONTRACT.persistence,\n );\n inspectWorldCapability(manifest.worldAdapter, diagnostics);\n inspectLifecycle(manifest.lifecycle, diagnostics);\n inspectForgePlay(manifest.forgePlay, diagnostics);\n inspectAuthoring(manifest.authoring, diagnostics);\n inspectCapabilities(manifest.capabilities, diagnostics);\n\n report.ok = !diagnostics.some(diagnostic => diagnostic.severity === 'error');\n return report;\n}\n\nexport function formatPlayableLocalEditorHostCompatibilityReport(\n report: PlayableLocalEditorHostCompatibilityReport,\n): string {\n const project = report.projectName ?? report.projectId ?? 'unknown project';\n const header = report.ok\n ? `Playable local editor host compatibility: PASS (${project})`\n : `Playable local editor host compatibility: BLOCKED (${project})`;\n if (report.diagnostics.length === 0) return header;\n const lines = report.diagnostics.map((diagnostic) => {\n const path = diagnostic.path ? ` ${diagnostic.path}` : '';\n return `[${diagnostic.severity.toUpperCase()}] ${diagnostic.code}${path}: ${diagnostic.message}`;\n });\n return [header, ...lines].join('\\n');\n}\n\nfunction createHarnessDocumentAdapter<TDocument, TPatch, TAsset>(\n documentCapability: PlayableLocalEditorDocumentCapability<TDocument, TPatch, TAsset>,\n capabilities: PlayableLocalEditorHostCapabilities<TDocument, TPatch, TAsset> | undefined,\n): LocalEditorHarnessDocumentAdapter<TDocument, TPatch, TAsset> {\n return {\n ...documentCapability,\n ...capabilities?.documentLifecycle,\n ...capabilities?.selection,\n ...capabilities?.inspector,\n ...capabilities?.markerGraph,\n ...capabilities?.assetBrowser,\n ...capabilities?.assetActions,\n ...capabilities?.transformCommands,\n ...capabilities?.sceneGraph,\n ...capabilities?.worldPreview,\n ...capabilities?.rendering,\n ...capabilities?.prefabStage,\n } as unknown as LocalEditorHarnessDocumentAdapter<TDocument, TPatch, TAsset>;\n}\n\nfunction createHarnessHierarchyOptions<TDocument, TPatch, TAsset>(\n manifest: PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset>,\n): LocalEditorHarnessOptions<TDocument, TPatch, TAsset>['hierarchy'] | undefined {\n const operations = manifest.capabilities?.hierarchyActions?.operations;\n if (!operations || operations.length === 0) return undefined;\n return { operations: [...operations] };\n}\n\nexport function createPlayableLocalEditorHost<TDocument, TPatch, TAsset = unknown>(\n manifest: PlayableLocalEditorHostManifest<TDocument, TPatch, TAsset>,\n): PlayableLocalEditorHost<TDocument> {\n const compatibilityReport = inspectPlayableLocalEditorHostManifest(manifest);\n if (!compatibilityReport.ok) {\n throw new Error(formatPlayableLocalEditorHostCompatibilityReport(compatibilityReport));\n }\n\n const authoringHost = manifest.authoring\n ? (manifest.authoring.host as ProjectAuthoringHost | undefined)\n ?? createProjectAuthoringHost({ drivers: [...(manifest.authoring.drivers ?? [])] as AuthoringSourceDriver[] })\n : undefined;\n const harnessOptions = {\n root: manifest.root,\n localTestActions: manifest.localTestActions,\n gameModeEntryVisible: manifest.gameModeEntryVisible,\n pluginHost: manifest.pluginHost,\n authoringHost,\n documentAdapter: createHarnessDocumentAdapter(manifest.documentAdapter, manifest.capabilities),\n persistenceAdapter: manifest.persistenceAdapter as unknown as LocalEditorHarnessPersistenceAdapter<TDocument, TAsset>,\n worldAdapter: createHarnessWorldAdapter(manifest.worldAdapter),\n transformDocumentCapabilities: manifest.capabilities?.transformCommands?.documentCapabilities,\n world: manifest.world as LocalEditorHarnessOptions<TDocument, TPatch, TAsset>['world'],\n createGrid: manifest.createGrid as LocalEditorHarnessOptions<TDocument, TPatch, TAsset>['createGrid'],\n hierarchy: createHarnessHierarchyOptions(manifest),\n } satisfies LocalEditorHarnessOptions<TDocument, TPatch, TAsset>;\n const harness = createLocalEditorHarness<TDocument, TPatch, TAsset>(harnessOptions);\n const lifecycleOperations = getLocalEditorHarnessLifecycleOperations(harness);\n const root = manifest.root ?? document.body;\n const loadingOverlay = createPlayableLocalEditorLoadingOverlay(root);\n const interactions = composePlayableLocalEditorInteractionPolicy(\n manifest.lifecycle.interactions,\n harness.getDefaultInteractionPolicy?.(),\n createNativePlayableLocalEditorInteractionPolicy(root),\n );\n const uninstallBeforeUnloadGuard = installPlayableLocalEditorBeforeUnloadGuard(root, harness);\n const controller = createPlayableLocalEditorHostController({\n harness,\n lifecycleOperations,\n lifecycleScopeHost: manifest.pluginHost\n ? getFpsEditorPluginLifecycleScopeHost(manifest.pluginHost)\n : undefined,\n eventPublisher: manifest.pluginHost?.eventPublisher,\n reportDiagnostic: manifest.pluginHost\n ? diagnostic => manifest.pluginHost?.reportDiagnostic(diagnostic)\n : undefined,\n loadingOverlay,\n loadingContent: manifest.lifecycle.loadingContent,\n interactions,\n beforeDiscardAndRunGame: manifest.lifecycle.beforeDiscardAndRunGame,\n minAssetLoadingOverlayMs: manifest.lifecycle.minAssetLoadingOverlayMs,\n renderAfterEnter: false,\n forgePlay: manifest.forgePlay\n ? {\n enabled: manifest.forgePlay.enabled,\n window: manifest.forgePlay.window,\n hasUnsavedPlatformChanges: manifest.forgePlay.hasUnsavedPlatformChanges,\n handleProjectAssetCommand: manifest.forgePlay.handleProjectAssetCommand,\n handleAssetDrop: manifest.forgePlay.handleAssetDrop,\n exportDocument: manifest.forgePlay.exportDocument,\n reportError: manifest.forgePlay.reportError,\n }\n : undefined,\n });\n const hostHarness = controller.harness as PlayableLocalEditorHarnessApi<TDocument>;\n bindHarnessLifecycle(lifecycleOperations, controller);\n const lifecycleParticipantDisposers = manifest.pluginHost\n ? resolveFpsEditorLifecycleParticipants(manifest.pluginHost.contributions)\n .map(participant => controller.lifecycle.registerParticipant(participant))\n : [];\n if (lifecycleParticipantDisposers.length > 0) {\n controller.lifecycle.addScopeResource(\n PLAYABLE_LOCAL_EDITOR_APPLICATION_SCOPE_ID,\n () => {\n for (const dispose of [...lifecycleParticipantDisposers].reverse()) dispose();\n },\n );\n }\n\n let disposal: Promise<void> | null = null;\n let harnessDisposed = false;\n return {\n harness: hostHarness,\n lifecycle: controller.lifecycle.lifecycle,\n enterEditor: controller.enterEditor,\n saveScene: controller.saveScene,\n saveAndRunGame: controller.saveAndRunGame,\n discardAndRunGame: async () => {\n await controller.discardAndRunGame();\n },\n runWithAssetLoadingOverlay: controller.runWithAssetLoadingOverlay,\n getBridge: controller.getBridge,\n getCompatibilityReport() {\n return cloneCompatibilityReport(compatibilityReport);\n },\n async dispose() {\n if (disposal) return disposal;\n const pending = (async () => {\n await controller.dispose();\n uninstallBeforeUnloadGuard();\n if (!harnessDisposed) {\n await harness.dispose();\n harnessDisposed = true;\n }\n })();\n disposal = pending;\n void pending.catch(() => {\n if (disposal === pending) disposal = null;\n });\n return pending;\n },\n };\n}\n\nfunction bindHarnessLifecycle<TDocument>(\n lifecycleOperations: LocalEditorHarnessLifecycleOperations,\n controller: Pick<PlayableLocalEditorHost<TDocument>, 'enterEditor'> & {\n saveScene(executor?: PlayableLocalEditorDocumentOperationExecutor): Promise<boolean>;\n } & Pick<\n PlayableLocalEditorLifecycleController,\n | 'saveAndRunGame'\n | 'discardAndRunGame'\n | 'prepareSaveAndRunGame'\n | 'prepareDiscardAndRunGame'\n > & { lifecycle: PlayableLocalEditorLifecycleController },\n): void {\n lifecycleOperations.setLifecycleController({\n enterEditor: controller.enterEditor,\n saveScene: (_operation, _context, executor) => controller.saveScene(executor),\n saveAndRunGame: controller.saveAndRunGame,\n discardAndRunGame: controller.discardAndRunGame,\n prepareSaveAndRunGame: controller.prepareSaveAndRunGame,\n prepareDiscardAndRunGame: controller.prepareDiscardAndRunGame,\n lifecycle: controller.lifecycle.lifecycle,\n synchronizeDocumentState: controller.lifecycle.synchronizeDocumentState,\n registerParticipant: controller.lifecycle.registerParticipant,\n openScope: controller.lifecycle.openScope,\n addScopeResource: controller.lifecycle.addScopeResource,\n closeScope: controller.lifecycle.closeScope,\n });\n}\n\nfunction createNativePlayableLocalEditorInteractionPolicy(\n root: HTMLElement,\n): PlayableLocalEditorInteractionPolicy {\n const browserWindow = resolvePlayableLocalEditorWindow(root);\n return {\n confirmDiscardUnsavedChanges(input: PlayableLocalEditorDiscardConfirmationInput) {\n return browserWindow?.confirm?.(formatNativeDiscardConfirmationMessage(input)) ?? true;\n },\n notifySaveFailed(input: PlayableLocalEditorSaveFailureInput) {\n browserWindow?.alert?.(formatNativeSaveFailureMessage(input));\n },\n };\n}\n\nfunction composePlayableLocalEditorInteractionPolicy(\n override: PlayableLocalEditorInteractionPolicy | undefined,\n fallback: PlayableLocalEditorInteractionPolicy | undefined,\n nativeFallback: PlayableLocalEditorInteractionPolicy,\n): PlayableLocalEditorInteractionPolicy {\n return {\n confirmDiscardUnsavedChanges: override?.confirmDiscardUnsavedChanges\n ?? fallback?.confirmDiscardUnsavedChanges\n ?? nativeFallback.confirmDiscardUnsavedChanges,\n notifySaveFailed: override?.notifySaveFailed\n ?? fallback?.notifySaveFailed\n ?? nativeFallback.notifySaveFailed,\n };\n}\n\nfunction installPlayableLocalEditorBeforeUnloadGuard(\n root: HTMLElement,\n harness: Pick<LocalEditorHarness, 'getUnsavedChangesState'>,\n): () => void {\n const browserWindow = resolvePlayableLocalEditorWindow(root);\n if (!browserWindow?.addEventListener || !browserWindow.removeEventListener) return () => {};\n const onBeforeUnload = (event: BeforeUnloadEvent): string | void => {\n let unsavedChanges: PlayableLocalEditorUnsavedChangesState;\n try {\n unsavedChanges = harness.getUnsavedChangesState();\n } catch (error) {\n console.error('[PlayableLocalEditorHost] beforeunload dirty state unavailable', error);\n return;\n }\n if (!unsavedChanges.dirty || !unsavedChanges.hasWorkingDocument) return;\n event.preventDefault();\n event.returnValue = '';\n return '';\n };\n browserWindow.addEventListener('beforeunload', onBeforeUnload);\n return () => {\n browserWindow.removeEventListener('beforeunload', onBeforeUnload);\n };\n}\n\nfunction resolvePlayableLocalEditorWindow(root: HTMLElement): Window | null {\n return root.ownerDocument?.defaultView ?? (typeof window === 'undefined' ? null : window);\n}\n\nfunction formatNativeDiscardConfirmationMessage(\n _input: PlayableLocalEditorDiscardConfirmationInput,\n): string {\n return '当前编辑内容尚未保存。\\n\\n继续会丢弃这些更改并运行游戏。';\n}\n\nfunction formatNativeSaveFailureMessage(input: PlayableLocalEditorSaveFailureInput): string {\n const status = input.status?.trim() || '保存没有成功,当前编辑内容仍保留在编辑器中。';\n const details = input.details?.trim();\n const error = stringifyPlayableLocalEditorError(input.error)?.trim();\n const extra = [details, error]\n .filter((part): part is string => !!part && part !== status);\n return ['保存失败', status, ...extra].join('\\n\\n');\n}\n\nfunction stringifyPlayableLocalEditorError(error: unknown): string | undefined {\n if (error == null) return undefined;\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nfunction inspectMetadata(\n metadata: unknown,\n report: PlayableLocalEditorHostCompatibilityReport,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n if (metadata === undefined) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'metadata.missing',\n 'Manifest metadata is required for the host compatibility contract.',\n 'metadata',\n ));\n return;\n }\n if (!isRecord(metadata)) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'metadata.invalid',\n 'Manifest metadata must be an object.',\n 'metadata',\n ));\n return;\n }\n\n report.manifestVersion = metadata.manifestVersion;\n report.projectId = readOptionalString(metadata.projectId);\n report.projectName = readOptionalString(metadata.projectName);\n report.compatibilityTag = readOptionalString(metadata.compatibilityTag);\n\n if (metadata.manifestVersion !== PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'metadata.manifest-version.unsupported',\n `Manifest version ${String(metadata.manifestVersion)} is incompatible with supported version ${PLAYABLE_LOCAL_EDITOR_HOST_MANIFEST_VERSION}. Upgrade the manifest or use a compatible editor package version.`,\n 'metadata.manifestVersion',\n ));\n }\n}\n\nfunction inspectRequiredCapability(\n manifest: Record<string, unknown>,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n fieldName: string,\n capabilityName: string,\n requiredFunctions: readonly string[],\n): void {\n const capability = manifest[fieldName];\n if (!isRecord(capability)) {\n diagnostics.push(createDiagnostic(\n 'error',\n `${capabilityName}.missing`,\n `${capabilityName} is required.`,\n capabilityName,\n ));\n return;\n }\n for (const functionName of requiredFunctions) {\n const fn = capability[functionName];\n if (typeof fn !== 'function') {\n diagnostics.push(createDiagnostic(\n 'error',\n `${capabilityName}.${functionName}.missing`,\n `${capabilityName}.${functionName} must be a function.`,\n `${capabilityName}.${functionName}`,\n ));\n } else {\n // Validate function signature: check parameter count\n validateFunctionSignature(fn, functionName, capabilityName, diagnostics);\n }\n }\n}\n\n/**\n * Validates function signature by checking parameter count.\n * Issues warnings when declared parameter count differs from expected.\n * \n * Note: Function.length is not fully reliable (rest params, default values, \n * destructured params all affect it), so signature mismatches are reported as\n * warnings rather than blocking errors.\n */\nfunction validateFunctionSignature(\n fn: Function,\n functionName: string,\n capabilityName: string,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n const expectedArity = getExpectedFunctionArity(capabilityName, functionName);\n if (expectedArity === undefined) return; // No validation defined for this function\n \n const actualArity = fn.length;\n const arityMismatch = actualArity < expectedArity.min\n || (expectedArity.max !== undefined && actualArity > expectedArity.max);\n if (arityMismatch) {\n const severity = capabilityName === 'worldCapability' ? 'error' : 'warning';\n diagnostics.push(createDiagnostic(\n severity,\n `${capabilityName}.${functionName}.arity-mismatch`,\n `${capabilityName}.${functionName} declares ${actualArity} parameter(s), but SDK expects ${expectedArity.min}${expectedArity.max !== undefined && expectedArity.max !== expectedArity.min ? `-${expectedArity.max}` : ''}. Verify the function signature matches the SDK contract.`,\n `${capabilityName}.${functionName}`,\n ));\n }\n}\n\n/**\n * Returns expected parameter count for required functions.\n * min: minimum required parameters\n * max: maximum expected parameters (undefined = no limit)\n */\nfunction getExpectedFunctionArity(\n capabilityName: string,\n functionName: string,\n): { min: number; max?: number } | undefined {\n // Document capability function signatures\n if (capabilityName === 'documentCapability') {\n switch (functionName) {\n case 'reduceDocument': return { min: 2, max: 2 }; // (document, command)\n case 'getHierarchyItems': return { min: 1, max: 1 }; // (document)\n case 'getProjectionNodes': return { min: 1, max: 1 }; // (document)\n case 'getProjectionNode': return { min: 2, max: 2 }; // (document, id)\n case 'createPatchFromAsset': return { min: 1, max: 2 }; // (asset, input?)\n case 'createSerializedPropertyPatch': return { min: 1, max: 1 }; // (input)\n }\n }\n \n // Persistence capability function signatures\n if (capabilityName === 'persistenceCapability') {\n switch (functionName) {\n case 'loadAssets': return { min: 1, max: 1 }; // (document)\n case 'runGame': return { min: 0, max: 1 }; // (context?)\n }\n }\n \n // World capability function signatures\n if (capabilityName === 'worldCapability') {\n switch (functionName) {\n case 'getCanvas': return { min: 0, max: 0 }; // ()\n case 'disposeWorld': return { min: 0, max: 0 }; // ()\n case 'loadPreviewEngine': return { min: 0, max: 0 }; // ()\n case 'createPreviewEngine': return { min: 2, max: 2 }; // (engineModule, canvas)\n case 'importPreviewAsset': return { min: 1, max: 1 }; // (context)\n }\n }\n \n return undefined;\n}\n\nfunction inspectWorldCapability(\n worldCapability: unknown,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n if (!isRecord(worldCapability)) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'worldCapability.missing',\n 'worldCapability is required.',\n 'worldCapability',\n ));\n return;\n }\n for (const functionName of PLAYABLE_LOCAL_EDITOR_HOST_REQUIRED_CONTRACT.world.direct) {\n const fn = worldCapability[functionName];\n if (typeof fn !== 'function') {\n diagnostics.push(createDiagnostic(\n 'error',\n `worldCapability.${functionName}.missing`,\n `worldCapability.${functionName} must be a function.`,\n `worldCapability.${functionName}`,\n ));\n } else {\n validateFunctionSignature(fn, functionName, 'worldCapability', diagnostics);\n }\n }\n}\n\nfunction createHarnessWorldAdapter<TAsset>(\n worldCapability: PlayableLocalEditorWorldCapability<TAsset>,\n): LocalEditorHarnessWorldAdapter<TAsset> {\n const adapter: LocalEditorHarnessWorldAdapter<TAsset> = {\n disposeGameWorld() {\n return worldCapability.disposeWorld?.() as ReturnType<LocalEditorHarnessWorldAdapter<TAsset>['disposeGameWorld']>;\n },\n getCanvas() {\n return worldCapability.getCanvas();\n },\n loadBabylon() {\n return worldCapability.loadPreviewEngine?.() as ReturnType<LocalEditorHarnessWorldAdapter<TAsset>['loadBabylon']>;\n },\n createEngine(engineModule, canvas) {\n return worldCapability.createPreviewEngine?.(engineModule, canvas);\n },\n importProjectionModel(context) {\n return worldCapability.importPreviewAsset?.(context) as ReturnType<LocalEditorHarnessWorldAdapter<TAsset>['importProjectionModel']>;\n },\n };\n if (worldCapability.toBrowserAssetItem) {\n adapter.toBrowserAssetItem = worldCapability.toBrowserAssetItem as LocalEditorHarnessWorldAdapter<TAsset>['toBrowserAssetItem'];\n }\n if (worldCapability.resolveAssetId) {\n adapter.resolveAssetId = worldCapability.resolveAssetId;\n }\n if (worldCapability.resolveMaterialTextureUrl) {\n adapter.resolveMaterialTextureUrl = worldCapability.resolveMaterialTextureUrl;\n }\n return adapter;\n}\n\nfunction inspectLifecycle(\n lifecycle: unknown,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n if (!isRecord(lifecycle)) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'lifecycle.missing',\n 'lifecycle is required.',\n 'lifecycle',\n ));\n return;\n }\n if (!isRecord(lifecycle.loadingContent)) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'lifecycle.loading-content.missing',\n 'lifecycle.loadingContent is required.',\n 'lifecycle.loadingContent',\n ));\n }\n}\n\nfunction inspectForgePlay(\n forgePlay: unknown,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n if (!isRecord(forgePlay)) return;\n if (forgePlay.enabled !== false && !forgePlay.window) {\n diagnostics.push(createDiagnostic(\n 'warning',\n 'forge-play.window.missing',\n 'Forge Play bridge is enabled but no window was provided; mode and document bridge commands will not be installed.',\n 'forgePlay.window',\n ));\n }\n}\n\nfunction inspectAuthoring(\n authoring: unknown,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n if (!isRecord(authoring)) return;\n const drivers = Array.isArray(authoring.drivers) ? authoring.drivers : [];\n if (authoring.host && drivers.length > 0) {\n diagnostics.push(createDiagnostic(\n 'info',\n 'authoring.host-overrides-drivers',\n 'authoring.host and authoring.drivers are both present; the provided host will be used.',\n 'authoring',\n ));\n }\n}\n\nfunction inspectCapabilities(\n capabilities: unknown,\n diagnostics: PlayableLocalEditorHostCompatibilityDiagnostic[],\n): void {\n if (capabilities === undefined) return;\n if (!isRecord(capabilities)) {\n diagnostics.push(createDiagnostic(\n 'warning',\n 'capabilities.invalid',\n 'capabilities must be an object when provided.',\n 'capabilities',\n ));\n return;\n }\n const hierarchyActions = capabilities.hierarchyActions;\n if (isRecord(hierarchyActions) && hierarchyActions.contextActions !== undefined) {\n diagnostics.push(createDiagnostic(\n 'error',\n 'capabilities.hierarchyActions.contextActions.removed',\n 'capabilities.hierarchyActions.contextActions was removed; migrate each action to capabilities.hierarchyActions.operations.',\n 'capabilities.hierarchyActions.contextActions',\n ));\n }\n if (isRecord(hierarchyActions)\n && hierarchyActions.operations !== undefined\n && !Array.isArray(hierarchyActions.operations)) {\n diagnostics.push(createDiagnostic(\n 'warning',\n 'capabilities.hierarchyActions.operations.invalid',\n 'capabilities.hierarchyActions.operations should be an array of typed hierarchy operation registrations.',\n 'capabilities.hierarchyActions.operations',\n ));\n }\n if (isRecord(hierarchyActions) && Array.isArray(hierarchyActions.operations)) {\n hierarchyActions.operations.forEach((operation, index) => {\n if (!isRecord(operation)) return;\n if (operation.contextMenu === undefined) return;\n diagnostics.push(createDiagnostic(\n 'error',\n 'capabilities.hierarchyActions.operations.contextMenu.removed',\n 'Hierarchy operation contextMenu was removed; use operation.menu or menu: false.',\n `capabilities.hierarchyActions.operations[${index}].contextMenu`,\n ));\n });\n }\n}\n\nfunction createDiagnostic(\n severity: PlayableLocalEditorHostCompatibilitySeverity,\n code: string,\n message: string,\n path?: string,\n): PlayableLocalEditorHostCompatibilityDiagnostic {\n return {\n severity,\n code,\n message,\n path,\n };\n}\n\nfunction cloneCompatibilityReport(\n report: PlayableLocalEditorHostCompatibilityReport,\n): PlayableLocalEditorHostCompatibilityReport {\n return {\n supportedManifestVersion: report.supportedManifestVersion,\n manifestVersion: report.manifestVersion,\n projectId: report.projectId,\n projectName: report.projectName,\n compatibilityTag: report.compatibilityTag,\n ok: report.ok,\n diagnostics: report.diagnostics.map(diagnostic => ({ ...diagnostic })),\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n"]}
@@ -16,7 +16,7 @@ export interface FpsGameEditorProductLocalEditorContext<TDocument> {
16
16
  getCanvas(): HTMLCanvasElement | null;
17
17
  }
18
18
  type FpsGameEditorProductBaseHostOptions<TDocument, TPatch, TAsset> = FpsGameEditorLocalEditorHostOptions<TDocument, TPatch, TAsset>;
19
- export type FpsGameEditorProductLocalEditorHostOptions<TDocument, TPatch, TAsset = unknown> = Omit<FpsGameEditorProductBaseHostOptions<TDocument, TPatch, TAsset>, 'project' | 'root' | 'compatibilityTag' | 'agentBridgeSessionMetadata' | 'pluginHost' | 'persistenceAdapter' | 'worldAdapter'> & {
19
+ export type FpsGameEditorProductLocalEditorHostOptions<TDocument, TPatch, TAsset = unknown> = Omit<FpsGameEditorProductBaseHostOptions<TDocument, TPatch, TAsset>, 'project' | 'root' | 'compatibilityTag' | 'pluginHost' | 'persistenceAdapter' | 'worldAdapter'> & {
20
20
  persistenceAdapter: Omit<FpsGameEditorProductBaseHostOptions<TDocument, TPatch, TAsset>['persistenceAdapter'], 'runGame'>;
21
21
  worldAdapter: Omit<FpsGameEditorProductBaseHostOptions<TDocument, TPatch, TAsset>['worldAdapter'], 'disposeWorld' | 'disposeGameWorld' | 'getCanvas'>;
22
22
  };
@@ -26,7 +26,6 @@ export interface FpsGameEditorProductLocalEditorOptions<TDocument, TPatch, TAsse
26
26
  project: Pick<FpsGameEditorProjectDefinition, 'projectId' | 'projectName'>;
27
27
  root?: HTMLElement;
28
28
  compatibilityTag?: string;
29
- agentBridgeSessionMetadata?: Record<string, unknown>;
30
29
  pluginHost?: FpsEditorPluginHost;
31
30
  window?: FpsGameEditorProductWindowLike;
32
31
  canvasId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"playable-product-local-editor.d.ts","sourceRoot":"","sources":["../src/playable-product-local-editor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"playable-product-local-editor.d.ts","sourceRoot":"","sources":["../src/playable-product-local-editor.ts"],"names":[],"mappings":"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"}
@@ -207,7 +207,6 @@ export function mountFpsGameEditorProductLocalEditor(options) {
207
207
  project: options.project,
208
208
  compatibilityTag: options.compatibilityTag,
209
209
  root: options.root,
210
- agentBridgeSessionMetadata: options.agentBridgeSessionMetadata,
211
210
  pluginHost: options.pluginHost,
212
211
  });
213
212
  }