@volter/game-editor 0.5.65

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 (653) hide show
  1. package/BUNDLED_NOTICES +11228 -0
  2. package/LICENSE +686 -0
  3. package/LICENSE-BLENDER +1409 -0
  4. package/LICENSE-MCP +21 -0
  5. package/NOTICE +21 -0
  6. package/catalog/entries/audio.json +14 -0
  7. package/catalog/entries/bake.json +36 -0
  8. package/catalog/entries/blender.json +17 -0
  9. package/catalog/entries/react-root.json +24 -0
  10. package/catalog/entries/reflections.json +29 -0
  11. package/catalog/entries/static-batch.json +25 -0
  12. package/catalog/project-source/LICENSE +37 -0
  13. package/catalog/project-source/src/contributions/bake.kind.ts +40 -0
  14. package/catalog/project-source/src/contributions/builder-document.tsx +65 -0
  15. package/catalog/project-source/src/contributions/builder-state.ts +27 -0
  16. package/catalog/project-source/src/contributions/builder-ui.tsx +61 -0
  17. package/catalog/project-source/src/contributions/module-source.ts +502 -0
  18. package/catalog/project-source/src/contributions/pages.finder.ts +61 -0
  19. package/catalog/project-source/src/lib/audio/sfx.ts +255 -0
  20. package/catalog/project-source/src/lib/bake/asset-seed.ts +128 -0
  21. package/catalog/project-source/src/lib/bake/bake-schema.ts +65 -0
  22. package/catalog/project-source/src/lib/bake/clip-layering.ts +203 -0
  23. package/catalog/project-source/src/lib/bake/gltf-bake.ts +657 -0
  24. package/catalog/project-source/src/lib/bake/mesh-slice.ts +157 -0
  25. package/catalog/project-source/src/lib/bake/node-image.ts +463 -0
  26. package/catalog/project-source/src/lib/bake/object3d-bake.ts +121 -0
  27. package/catalog/project-source/src/lib/bake/object3d-lifecycle.ts +15 -0
  28. package/catalog/project-source/src/lib/bake/object3d-source.ts +8 -0
  29. package/catalog/project-source/src/lib/bake/params.ts +75 -0
  30. package/catalog/project-source/src/lib/bake/rest-relative-animation.ts +217 -0
  31. package/catalog/project-source/src/lib/bake/use-model.ts +95 -0
  32. package/catalog/project-source/src/lib/react-root/index.ts +20 -0
  33. package/catalog/project-source/src/lib/react-root/react-root-adapter.tsx +57 -0
  34. package/catalog/project-source/src/lib/reflections/ReflectionProbe.tsx +201 -0
  35. package/catalog/project-source/src/lib/reflections/index.ts +19 -0
  36. package/catalog/project-source/src/lib/reflections/probe-controller.ts +75 -0
  37. package/catalog/project-source/src/lib/reflections/reflection-probe-registry.ts +402 -0
  38. package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +416 -0
  39. package/catalog/project-source/src/lib/static-batch/Frozen.tsx +91 -0
  40. package/catalog/project-source/src/lib/static-batch/freeze.ts +579 -0
  41. package/catalog/project-source/src/lib/static-batch/index.ts +44 -0
  42. package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +149 -0
  43. package/catalog/project-source/src/lib/static-batch/shadow-cache.ts +171 -0
  44. package/catalog/project-source/src/tools/bake-module.tool.ts +139 -0
  45. package/catalog/project-source/src/tools/bake-preview.tool.ts +475 -0
  46. package/dist/.vite/manifest.json +8304 -0
  47. package/dist/assets/AssetBudgetPanel-J9--TZPU.js +23 -0
  48. package/dist/assets/AudioViewer-CR7333fe.js +1 -0
  49. package/dist/assets/BVHLoader-6bQIXhMX.js +1 -0
  50. package/dist/assets/BufferGeometryUtils-Nz37EVXf.js +1 -0
  51. package/dist/assets/CCDIKSolver-CD7vLpsK.js +1 -0
  52. package/dist/assets/CSS3DRenderer-CL7ABLVK.js +1 -0
  53. package/dist/assets/CanvasSceneViewport-Bpi6gVTC.js +1 -0
  54. package/dist/assets/ColladaLoader-aVOPIsCh.js +3 -0
  55. package/dist/assets/ColorInput-DQBNrW-K.js +1 -0
  56. package/dist/assets/ConvexGeometry-CAzXlPVG.js +1 -0
  57. package/dist/assets/ConvexHull-BINCESFp.js +1 -0
  58. package/dist/assets/CopyShader-BzTUYzf6.js +24 -0
  59. package/dist/assets/DecalGeometry-160KRdfg.js +1 -0
  60. package/dist/assets/EXRLoader-Cdans_oJ.js +1 -0
  61. package/dist/assets/EffectComposer-DQxfsXBZ.js +1 -0
  62. package/dist/assets/EntityModelDocument-Ccvw66N9.js +1 -0
  63. package/dist/assets/EnvironmentAssetDocument-Dg-Qq6O6.js +1 -0
  64. package/dist/assets/FBXLoader-B4MoUtAn.js +1 -0
  65. package/dist/assets/Fbo-Dz-Soul3.js +1 -0
  66. package/dist/assets/FontLoader-CvGoVI5a.js +2 -0
  67. package/dist/assets/GLTFExporter-HgrCle4L.js +1 -0
  68. package/dist/assets/GameplaySessionTimeline-B52W3FVZ.js +1 -0
  69. package/dist/assets/Gltf-UHVWKz65.js +2 -0
  70. package/dist/assets/HDRLoader-THU88oVD.js +5 -0
  71. package/dist/assets/ImageViewer-Tn7s_MnW.js +1 -0
  72. package/dist/assets/InspectorCanvasPreview-CEr_Kxna.js +1 -0
  73. package/dist/assets/InspectorObjectPreview-CVejvLRg.js +1 -0
  74. package/dist/assets/JsonAssetDocument-C7VGcLhu.js +3 -0
  75. package/dist/assets/LineSegments2-CsOpKSiM.js +370 -0
  76. package/dist/assets/MTLLoader-_Xzd4_0p.js +2 -0
  77. package/dist/assets/MarchingCubes-Bsp4wrzd.js +1 -0
  78. package/dist/assets/MeshBVH-BiDHDcu-.js +1 -0
  79. package/dist/assets/ModelAssetDocument-F5GACirk.js +1 -0
  80. package/dist/assets/NonThreeAuthoringBootstrap-C3woOMxX.js +1 -0
  81. package/dist/assets/OBJLoader-BhIC6Hwo.js +5 -0
  82. package/dist/assets/Object3DDocumentViewport-DB7T0NTl.js +2 -0
  83. package/dist/assets/Object3DPreview-DL8oi7Xs.js +2 -0
  84. package/dist/assets/OnlineAssetDetail-C6z9RvYK.js +2 -0
  85. package/dist/assets/OrbitControls-CM3bPray.js +1 -0
  86. package/dist/assets/OrbitControls-DLpayAaK.js +1 -0
  87. package/dist/assets/OrthographicCamera-bQozawrh.js +1 -0
  88. package/dist/assets/PLYLoader-DYQqs5Ik.js +2 -0
  89. package/dist/assets/PerspectiveCamera-CQ2lh01o.js +1 -0
  90. package/dist/assets/PlayBar-BR-Vg3Jb.js +2 -0
  91. package/dist/assets/RGBELoader-BgBcQv8j.js +1 -0
  92. package/dist/assets/RectAreaLightUniformsLib-CMMoWfll.js +1 -0
  93. package/dist/assets/RenderPass-DPrn-Uky.js +1 -0
  94. package/dist/assets/ResolutionPicker-C67vs1F3.js +1 -0
  95. package/dist/assets/RootSelectionOverlay-BZPlxmXU.js +1 -0
  96. package/dist/assets/RoundedBox-BDGBg6QZ.js +1 -0
  97. package/dist/assets/RoundedBoxGeometry-CyUuYPfW.js +1 -0
  98. package/dist/assets/STLLoader-Dyv3lsxY.js +1 -0
  99. package/dist/assets/SelectionBox-D_75KrNW.js +1 -0
  100. package/dist/assets/ShaderPass-QYRpPuFJ.js +1 -0
  101. package/dist/assets/ShadowEditor-DkImwu1Y.js +1 -0
  102. package/dist/assets/SimplifyModifier-C8ayvRzd.js +1 -0
  103. package/dist/assets/SkeletonUtils-Cps8GOC6.js +1 -0
  104. package/dist/assets/Sky-CQKCgYDs.js +154 -0
  105. package/dist/assets/SourceAssetViewer-2SWQoUut.js +12 -0
  106. package/dist/assets/StageHost-BN-IoTef.js +2 -0
  107. package/dist/assets/StoryPreviewMount-DjyxRCXu.js +1 -0
  108. package/dist/assets/TDSLoader-D_T8XJ81.js +1 -0
  109. package/dist/assets/TextGeometry-DOWAEUV0.js +1 -0
  110. package/dist/assets/ThreeBoardDocument-CVncZyIq.js +2 -0
  111. package/dist/assets/ThreeIsolationSceneContent-C8C8whSF.js +1 -0
  112. package/dist/assets/ToolObject3DPreview-BRoDWe4Q.js +1 -0
  113. package/dist/assets/TrackballControls-DfznuQTh.js +1 -0
  114. package/dist/assets/TransientHint-BB1fwrvK.js +1 -0
  115. package/dist/assets/UnrealBloomPass-CR-cS_K5.js +83 -0
  116. package/dist/assets/VideoViewer-C6kocgIU.js +1 -0
  117. package/dist/assets/_commonjsHelpers-D6-XlEtG.js +1 -0
  118. package/dist/assets/active-ingest-CT6jSGhr.js +3 -0
  119. package/dist/assets/adapter-surface-Y37Nzcyw.js +1 -0
  120. package/dist/assets/after-paint-CB4bz1-e.js +1 -0
  121. package/dist/assets/agx-base-srgb-BjWZJgrZ.lut +0 -0
  122. package/dist/assets/agx-look-medium-high-contrast-D5F_ob1L.lut +0 -0
  123. package/dist/assets/agx-look-punchy-dxsnycNs.lut +0 -0
  124. package/dist/assets/animation-clock-CnjZqfJp.js +1 -0
  125. package/dist/assets/asset-budget-asset.menu-Di3KiQCd.js +1 -0
  126. package/dist/assets/asset-budget.action-DCzzcuTh.js +1 -0
  127. package/dist/assets/asset-budget.document-BWU8wnVW.js +1 -0
  128. package/dist/assets/asset-budget.menu-BGZpT_31.js +1 -0
  129. package/dist/assets/asset-editor-persistence-BBaONOJt.js +1 -0
  130. package/dist/assets/asset-loaders-BOy5Ss8k.js +2 -0
  131. package/dist/assets/asset-parse-error-BHMwBRU3.js +3 -0
  132. package/dist/assets/assets-BuSoGjBX.js +1 -0
  133. package/dist/assets/audio-meter-CyiToeUW.js +1 -0
  134. package/dist/assets/audio-unlock.service-CfUgUQVy.js +1 -0
  135. package/dist/assets/audio.utility-C6K6jem8.js +1 -0
  136. package/dist/assets/authoring-CgcOFhGS.js +1 -0
  137. package/dist/assets/autoplay.service-BZBGNSvt.js +1 -0
  138. package/dist/assets/axe-LkjAB6Lv.js +30 -0
  139. package/dist/assets/babylon-authoring-adapter-CL02gWDn.js +1 -0
  140. package/dist/assets/binding-Bmxqznjk.js +1 -0
  141. package/dist/assets/binding-identity-DcTpbvyg.js +1 -0
  142. package/dist/assets/binding-resolver-Dsh-6Vor.js +2 -0
  143. package/dist/assets/blender-emscripten-engine-9ZIRYNhe.js +2 -0
  144. package/dist/assets/blender-node-editor.document-iIDkB9sI.js +1 -0
  145. package/dist/assets/blender-properties-tab-C5CyPydi.js +3 -0
  146. package/dist/assets/blender-runtime-host-BpBwGv7r.js +4 -0
  147. package/dist/assets/blender-runtime-skin-DyQ9B6CR.js +7140 -0
  148. package/dist/assets/blender-runtime.document-lIYhhPtv.js +8 -0
  149. package/dist/assets/blender-timeline.document-77fx96N7.js +1 -0
  150. package/dist/assets/blender-uv-editor.document-fsT7B4gV.js +1 -0
  151. package/dist/assets/blender-version.status-o6dBm3n6.js +1 -0
  152. package/dist/assets/blender-wali-engine-wTOcrOMC.js +2 -0
  153. package/dist/assets/blender.command-BtJeWk-A.js +1 -0
  154. package/dist/assets/blender.keymap-GAQgeklK.js +1 -0
  155. package/dist/assets/blender.status-ujwGU6dU.js +1 -0
  156. package/dist/assets/blender.style-Dcem5f_T.js +1 -0
  157. package/dist/assets/board-guides-DziKSTss.js +1 -0
  158. package/dist/assets/body-marks-h_xDxiDE.js +1 -0
  159. package/dist/assets/bridge.command-o5gDNEwa.js +3 -0
  160. package/dist/assets/browserAll-DeWblVez.js +1 -0
  161. package/dist/assets/build-profiles.document-kW8iw8Xj.js +2 -0
  162. package/dist/assets/build-progress.status-BNRLytg2.js +1 -0
  163. package/dist/assets/build-session-C_sg3CEn.js +9 -0
  164. package/dist/assets/build.action-lYjTLb7K.js +1 -0
  165. package/dist/assets/build.command-DIGgUPU_.js +1 -0
  166. package/dist/assets/build.header-CKajx5U3.js +1 -0
  167. package/dist/assets/build.menu-BdU0QXny.js +1 -0
  168. package/dist/assets/build.service-CbBAyeu3.js +1 -0
  169. package/dist/assets/bus-mixer-CGfWDP3C.js +1 -0
  170. package/dist/assets/camera-KEsKvOL7.js +1 -0
  171. package/dist/assets/camera-runtime.inspector-B7unX4g1.js +1 -0
  172. package/dist/assets/canvas-entry-runtime-SfBxaR9M.js +2 -0
  173. package/dist/assets/capability-coverage-Czas4C18.js +7 -0
  174. package/dist/assets/chrome-trace-YZHMz60-.js +1 -0
  175. package/dist/assets/client-DNXj_opT.js +25 -0
  176. package/dist/assets/clip-planes-CnAI6DZn.js +1 -0
  177. package/dist/assets/collaboration-presence-DLoZ7EA3.js +1 -0
  178. package/dist/assets/collider-Bw0mXlsW.js +1 -0
  179. package/dist/assets/collider-dimensions-9xoFADXN.js +1 -0
  180. package/dist/assets/collision-system-DpNUJRJ3.js +1 -0
  181. package/dist/assets/command-results-CUQD49AB.js +1 -0
  182. package/dist/assets/component-board-registry-DrIa2csL.js +1 -0
  183. package/dist/assets/component-board.service-DCwcUssB.js +2 -0
  184. package/dist/assets/component-board.service-DidCyM4O.js +2 -0
  185. package/dist/assets/component-verbs.command-7xzfjGMZ.js +1 -0
  186. package/dist/assets/component-verbs.service-Bv9jId3q.js +1 -0
  187. package/dist/assets/config-CEZk921y.js +6 -0
  188. package/dist/assets/configurations-DTBMdaTL.js +1 -0
  189. package/dist/assets/connection.status-BifnQdOs.js +1 -0
  190. package/dist/assets/console-bridge-CHcb-xk5.js +1 -0
  191. package/dist/assets/constraint-De8f1Uiq.js +1 -0
  192. package/dist/assets/constraints.inspector-B9U9Yj-u.js +1 -0
  193. package/dist/assets/countdown-timer-CUm74dom.js +1 -0
  194. package/dist/assets/coverage.service-VTX5Mcsx.js +3 -0
  195. package/dist/assets/crash-null-boundary-v3a0uEgw.js +1 -0
  196. package/dist/assets/create-runtime-CVCc1BDx.js +1 -0
  197. package/dist/assets/curve-7Q79VgU4.js +1 -0
  198. package/dist/assets/data-asset-4hjS642k.js +5 -0
  199. package/dist/assets/data-check-core-CQEjuFyt.js +1 -0
  200. package/dist/assets/data-ref-CQI28C0D.js +1 -0
  201. package/dist/assets/debug-bridge-CCohG-d-.js +1 -0
  202. package/dist/assets/debug-registry-Dgvitx8M.js +1 -0
  203. package/dist/assets/defaults-DKiBJCPN.js +1 -0
  204. package/dist/assets/deferred-commands-CEMmvL47.js +1 -0
  205. package/dist/assets/deferred-ingest-play-DCJi_Pgu.js +2 -0
  206. package/dist/assets/design-time-layers-wYgOTgni.js +1 -0
  207. package/dist/assets/design-time-mount-registry-DUpXCg1U.js +1 -0
  208. package/dist/assets/design-time-mount.service-BzY21e1F.js +2 -0
  209. package/dist/assets/design-time-react-mount-DM9WLrF2.js +1 -0
  210. package/dist/assets/dev-build-gDYrq68M.js +1 -0
  211. package/dist/assets/directional-shadow-fit-BVkOKAv2.js +1 -0
  212. package/dist/assets/document-preview-three-Kbg2GCLm.js +1 -0
  213. package/dist/assets/dom-authoring-adapter-CY8C7f4T.js +1 -0
  214. package/dist/assets/draco3d-BBUTcNkz.js +1 -0
  215. package/dist/assets/draco_decoder-DsQ12WqX.wasm +0 -0
  216. package/dist/assets/draco_encoder-2Tcju8Ns.wasm +0 -0
  217. package/dist/assets/edit-mode-audio.service-Bzetwd5B.js +1 -0
  218. package/dist/assets/edit-mode-authoring-B47TfLqu.js +1 -0
  219. package/dist/assets/edit-mode-networking.service-YCX6RRb_.js +1 -0
  220. package/dist/assets/editor-api-BoJIcyZG.js +1 -0
  221. package/dist/assets/editor-port-C_FeBdeV.js +1 -0
  222. package/dist/assets/editor-presentation-activity-C7SNSmTd.js +1 -0
  223. package/dist/assets/entry-adjudication-Cq8Yeb74.js +1 -0
  224. package/dist/assets/environment-capture-7himRh2L.js +1 -0
  225. package/dist/assets/esbuild-BHljloGq.wasm +0 -0
  226. package/dist/assets/events-156d8d12.esm-ErOhDXXB.js +36 -0
  227. package/dist/assets/extend-B-eOccUm.js +36 -0
  228. package/dist/assets/extends-CF3RwP-h.js +1 -0
  229. package/dist/assets/eyedropper-session-bjPXnfeX.js +1 -0
  230. package/dist/assets/fflate.module-DPuTF8aG.js +6 -0
  231. package/dist/assets/filmic-srgb-Ct35FIH6.lut +0 -0
  232. package/dist/assets/first-party-audio-system-DxnGJOER.js +1 -0
  233. package/dist/assets/first-party-navigation-system-CL5Bquub.js +1 -0
  234. package/dist/assets/fork-menu-BoVyw2Wu.js +1 -0
  235. package/dist/assets/frame-debugger-store-D1Mf_5up.js +1 -0
  236. package/dist/assets/frame-delta-D2nsw_Ht.js +1 -0
  237. package/dist/assets/frame-pacing-D5acoOzO.js +1 -0
  238. package/dist/assets/frame-selector-cache-cCeUbcjG.js +1 -0
  239. package/dist/assets/game-DHOZVb-7.js +1 -0
  240. package/dist/assets/game-contract-seams-a5YXejOu.js +1 -0
  241. package/dist/assets/game-css-scope-transform-Eng4wS8E.js +33 -0
  242. package/dist/assets/game-document.service-DbRfx2V0.js +1 -0
  243. package/dist/assets/game-eval.command-D-7Dxbj_.js +2 -0
  244. package/dist/assets/game-input-seams-CIQdetRw.js +1 -0
  245. package/dist/assets/game-loop-CZvXlY00.js +1 -0
  246. package/dist/assets/game-module-access-B2mFxv-i.js +1 -0
  247. package/dist/assets/game.layout-CBASrvQu.js +1 -0
  248. package/dist/assets/gameplay-export-BoKXm51x.js +1 -0
  249. package/dist/assets/gameplay-replay-e5umMlXv.js +1 -0
  250. package/dist/assets/gameplay-rng-trap-CTNhm-UW.js +3 -0
  251. package/dist/assets/gameplay.command-DxcVYX6F.js +1 -0
  252. package/dist/assets/generation-DhwCUHPf.css +1 -0
  253. package/dist/assets/generation-jobs-BQrXbGp_.js +1 -0
  254. package/dist/assets/generation.service-CDIgObuw.js +1 -0
  255. package/dist/assets/generations-DzUogZsM.js +1 -0
  256. package/dist/assets/generations.status-CgOUBCum.js +1 -0
  257. package/dist/assets/hierarchy-marks-BLPfSIym.js +1 -0
  258. package/dist/assets/host-pointer-DbGSCjE9.js +1 -0
  259. package/dist/assets/hosted-asset-materialization-CiIvWkGU.js +2 -0
  260. package/dist/assets/ibl-override-material-BlmCxFKq.js +6 -0
  261. package/dist/assets/index-96FBF1Oj.js +1 -0
  262. package/dist/assets/index-BAWkB0dv.js +1 -0
  263. package/dist/assets/index-BDnS2b6S.js +1 -0
  264. package/dist/assets/index-BHp07vN0.js +2 -0
  265. package/dist/assets/index-BMxv2MNV.js +1 -0
  266. package/dist/assets/index-BP6wv2A0.js +5 -0
  267. package/dist/assets/index-BcCBqgM_.js +952 -0
  268. package/dist/assets/index-Bge9JUr6.js +1 -0
  269. package/dist/assets/index-BjTCPEQ7.js +134 -0
  270. package/dist/assets/index-BncK9THk.js +1 -0
  271. package/dist/assets/index-CJbYy-CF.js +3 -0
  272. package/dist/assets/index-CVCb_ImQ.js +1 -0
  273. package/dist/assets/index-CZd9o7Lu.js +1 -0
  274. package/dist/assets/index-CanA16PU.js +2 -0
  275. package/dist/assets/index-CinJrH5C.js +9 -0
  276. package/dist/assets/index-CtzuWnCS.js +1 -0
  277. package/dist/assets/index-D2fNXpHa.css +1 -0
  278. package/dist/assets/index-DUpHH6JR.js +3120 -0
  279. package/dist/assets/index-DUqP1RMl.js +1 -0
  280. package/dist/assets/index-D_NuPfjr.js +9 -0
  281. package/dist/assets/index-Da9JhEvW.js +25 -0
  282. package/dist/assets/index-DgapqSPi.js +7 -0
  283. package/dist/assets/index-FUuS4qwW.js +562 -0
  284. package/dist/assets/index-GIL7oGEO.js +4894 -0
  285. package/dist/assets/index-IEjydI9d.js +1 -0
  286. package/dist/assets/index-OrYXPk3Z.js +487 -0
  287. package/dist/assets/index-V1R-e5Bd.js +1 -0
  288. package/dist/assets/index-bQE2NA0D.js +1 -0
  289. package/dist/assets/index-gHZae-lw.js +13 -0
  290. package/dist/assets/index-mjWQmGhM.js +1 -0
  291. package/dist/assets/index-nmcBqr7Y.js +1 -0
  292. package/dist/assets/inference-diagnostics-Dhmtfbq_.js +1 -0
  293. package/dist/assets/ingest-BbYMC2vQ.js +1 -0
  294. package/dist/assets/ingest-boot-viewport-D5rI_Kk_.js +1 -0
  295. package/dist/assets/ingest-siblings-Bop2kqVl.js +1 -0
  296. package/dist/assets/ingest-source-persistence-C_6Hiyra.js +1 -0
  297. package/dist/assets/ingest.service-BTDnQfM1.js +1 -0
  298. package/dist/assets/input-manager-DH_hGW6d.js +1 -0
  299. package/dist/assets/input-router-BNQvtIqw.js +1 -0
  300. package/dist/assets/inspect-BZfi3mmo.js +1 -0
  301. package/dist/assets/inspection-CObLhnrs.js +1 -0
  302. package/dist/assets/instance-fork-actions-D3sRzS3K.js +1 -0
  303. package/dist/assets/instances.command-D6UkZNO8.js +1 -0
  304. package/dist/assets/instruments-CKR02Y8I.js +1 -0
  305. package/dist/assets/json-history-resource-BbxllWfV.js +1 -0
  306. package/dist/assets/jsx-runtime-DPjLkJKQ.js +9 -0
  307. package/dist/assets/light-D-_wsKTq.js +1 -0
  308. package/dist/assets/light-camera-factory-CWbbe9gI.js +1 -0
  309. package/dist/assets/lil-gui.module.min-BF55BEwA.js +10 -0
  310. package/dist/assets/live-behaviors-Bxq49Maz.js +1 -0
  311. package/dist/assets/live-gesture-lock-DJbrjOqf.js +1 -0
  312. package/dist/assets/loader-CaF_I7Yt.js +1 -0
  313. package/dist/assets/logger-Dqis-7W1.js +1 -0
  314. package/dist/assets/loop-gate-report-N52EWFGD.js +1 -0
  315. package/dist/assets/matcap-texture-CVfalpWT.js +1 -0
  316. package/dist/assets/material-CpAdjDxn.js +1 -0
  317. package/dist/assets/material-factory-Bz6h__6g.js +1 -0
  318. package/dist/assets/mesh-B3WPtNKO.js +1 -0
  319. package/dist/assets/mesh-shadow-CZnXrw_l.js +1 -0
  320. package/dist/assets/mikktspace.module-DO88SLib.js +1 -0
  321. package/dist/assets/model-asset-sections-CFvvihfx.css +1 -0
  322. package/dist/assets/model-asset-sections.service-CHhFS3ZX.js +1 -0
  323. package/dist/assets/model.layout-BJUEQYUI.js +1 -0
  324. package/dist/assets/models.finder-G2jQgIRu.js +1 -0
  325. package/dist/assets/module-mode-DVBLT9d-.js +2 -0
  326. package/dist/assets/mount-canvas-ingest-root-DDuAWf_C.js +2 -0
  327. package/dist/assets/mount-dom-ingest-root-D_EiBgpn.js +2 -0
  328. package/dist/assets/mount-game-6t9cKNo4.js +1 -0
  329. package/dist/assets/mount-ingest-root-glv2SSWf.js +2 -0
  330. package/dist/assets/mount-manifest-CGVxhmAw.js +1 -0
  331. package/dist/assets/mount-readiness-Ds0HvvLH.js +4 -0
  332. package/dist/assets/mount-three-ingest-root-hrUt9VVU.js +1 -0
  333. package/dist/assets/mounted-authoring-Dmg5xmhP.js +1 -0
  334. package/dist/assets/mounted-story-viewport-source-DjP6RA9U.js +1 -0
  335. package/dist/assets/native-debug-module-CWicoSGD.js +1 -0
  336. package/dist/assets/native-entry-surface-BE8LJNdu.js +1 -0
  337. package/dist/assets/navigation-CIiCx-SM.js +1 -0
  338. package/dist/assets/navmesh-workflow-store-Cmnm57TB.js +1 -0
  339. package/dist/assets/navmesh.menu-CAKiH8PW.js +1 -0
  340. package/dist/assets/navmesh.service-jgDWlgj1.js +1 -0
  341. package/dist/assets/network.utility-CEu5nHf7.js +1 -0
  342. package/dist/assets/object-marks-DwvIEBOK.js +1 -0
  343. package/dist/assets/object3d-authoring-subject-CH5sI2oP.js +1 -0
  344. package/dist/assets/output-DK8waum9.js +195 -0
  345. package/dist/assets/particles-Y626p22p.js +1 -0
  346. package/dist/assets/particles-factory-DnLOHXT8.js +1 -0
  347. package/dist/assets/pasteboard-materialize-BqSS4QzV.js +20 -0
  348. package/dist/assets/pasteboard.action-DU3UHtJG.js +2 -0
  349. package/dist/assets/performance-profiler-D_Jey87L.js +1 -0
  350. package/dist/assets/physics-registry-B2Jkp8e6.js +1 -0
  351. package/dist/assets/physics-registry-CUB9cT9p.js +1 -0
  352. package/dist/assets/pixi-authoring-adapter-CjibysC3.js +1 -0
  353. package/dist/assets/pixi-live-write-target-DuWydlWb.js +1 -0
  354. package/dist/assets/pixi-primitive-DlWbUPN9.js +1 -0
  355. package/dist/assets/pixi-react-root-factory-DYsznYRQ.js +1 -0
  356. package/dist/assets/pixi-story-model-DNkfnWUV.js +1 -0
  357. package/dist/assets/pixi-transform-channels-VjdohT11.js +1 -0
  358. package/dist/assets/play-mode-BFU2PCkG.js +22 -0
  359. package/dist/assets/play.command-BpqqLqkq.js +2 -0
  360. package/dist/assets/playtest-BXIL1JEF.js +1 -0
  361. package/dist/assets/pose-guard-6Osb2cFu.js +1 -0
  362. package/dist/assets/presentation-BPP5pXeQ.js +1 -0
  363. package/dist/assets/product-DFhyARJj.js +1 -0
  364. package/dist/assets/profiler.action-CaXJDp3t.js +1 -0
  365. package/dist/assets/profiler.menu-BIMF6Bi4.js +1 -0
  366. package/dist/assets/profiler.utility-BExw9wBO.js +1 -0
  367. package/dist/assets/project-authoring-session-Bnt6icLr.js +2 -0
  368. package/dist/assets/project-provenance-BoP3nrle.js +1 -0
  369. package/dist/assets/prompt-labels-DSMdM2_B.js +1 -0
  370. package/dist/assets/properties-bone-constraints.inspector-ByT6p7S-.js +1 -0
  371. package/dist/assets/properties-bone.inspector-z4qJwKO5.js +1 -0
  372. package/dist/assets/properties-collection.inspector-D0_3ijWU.js +1 -0
  373. package/dist/assets/properties-constraints.inspector-CESzjuls.js +1 -0
  374. package/dist/assets/properties-data.inspector-hG8Wgyzb.js +1 -0
  375. package/dist/assets/properties-material.inspector-CzY0JCQ6.js +1 -0
  376. package/dist/assets/properties-modifiers.inspector-3dDhwf7g.js +1 -0
  377. package/dist/assets/properties-object.inspector-CiarfxkT.js +1 -0
  378. package/dist/assets/properties-output.inspector-DKJxmKSD.js +1 -0
  379. package/dist/assets/properties-particles.inspector-CCEdYWGm.js +1 -0
  380. package/dist/assets/properties-physics.inspector-B2c0KUyA.js +1 -0
  381. package/dist/assets/properties-render.inspector-Bcm0HLRW.js +1 -0
  382. package/dist/assets/properties-scene.inspector-PIM_eTb_.js +1 -0
  383. package/dist/assets/properties-texture.inspector-CgFlnyr8.js +1 -0
  384. package/dist/assets/properties-view-layer.inspector-DGjF_Aqo.js +1 -0
  385. package/dist/assets/properties-world.inspector-CrMvaRvB.js +1 -0
  386. package/dist/assets/r3f-design-session-D-4yyDO9.js +2 -0
  387. package/dist/assets/r3f-physics-binding-BBo8oma9.js +1 -0
  388. package/dist/assets/r3f-root-factory-z9llD1OU.js +1 -0
  389. package/dist/assets/r3f-source-authoring-adapter-w6Bc60K-.js +13 -0
  390. package/dist/assets/rapier-physics-adapter-CaZqWLu0.js +1 -0
  391. package/dist/assets/rapier-physics-bridge-CMoeVo3Y.js +1 -0
  392. package/dist/assets/react-18-By2b4xR9.js +1 -0
  393. package/dist/assets/react-inspector.service-B_neRnSK.js +1 -0
  394. package/dist/assets/react-root-CEz5NTck.js +1 -0
  395. package/dist/assets/react-story-board-BDDwiE2H.js +1 -0
  396. package/dist/assets/react-three-fiber.esm-CycrbDlA.js +1 -0
  397. package/dist/assets/react-three-rapier.esm-CEfKpvxT.js +1 -0
  398. package/dist/assets/react-world-authoring-adapter-DmrwM3py.js +1 -0
  399. package/dist/assets/realm-services-CobQsq_X.js +1 -0
  400. package/dist/assets/rebind-controller-Dtq19Vb3.js +1 -0
  401. package/dist/assets/recast-navigation.wasm-compat-Dsoa_MD-.js +1 -0
  402. package/dist/assets/reflection-probe-Don-M3Fj.js +1 -0
  403. package/dist/assets/reflection-probe-capture.inspector-CmFUoJCx.js +1 -0
  404. package/dist/assets/register-render-vitals-BiZk29b2.js +1 -0
  405. package/dist/assets/registry-02YZjMNp.js +1 -0
  406. package/dist/assets/relative-path-guard-GiM7Lsz8.js +1 -0
  407. package/dist/assets/render-audio-control-vMRlePWb.js +1 -0
  408. package/dist/assets/render-batch-system-0vq7p0VC.js +1 -0
  409. package/dist/assets/render-census-BrQX_CXv.js +1 -0
  410. package/dist/assets/render-control-Df3yTiyr.js +1 -0
  411. package/dist/assets/render-env-D2IV2x5k.js +1 -0
  412. package/dist/assets/render-features-CPQ_e568.js +1 -0
  413. package/dist/assets/render-seed-DF4JHy7P.js +1 -0
  414. package/dist/assets/render-settings-Bw4W9SYF.js +1 -0
  415. package/dist/assets/render-vitals-BZ5HtvMi.js +1 -0
  416. package/dist/assets/renderer-config-BqG4O8i9.js +1 -0
  417. package/dist/assets/resolve-three-SZE_WWUM.js +702 -0
  418. package/dist/assets/root-seam-contract-Z0VWX3Bk.js +1 -0
  419. package/dist/assets/rrweb-Cd2ifIRP.js +142 -0
  420. package/dist/assets/run-ticks-settled-C4ksViyA.js +1 -0
  421. package/dist/assets/runtime-inspection-l2iFQSsg.js +1 -0
  422. package/dist/assets/scene-capture-BQKzU0NT.js +1 -0
  423. package/dist/assets/scene-capture-CGYF-Viw.js +1 -0
  424. package/dist/assets/scene-document.service-qkDjUrlP.js +2 -0
  425. package/dist/assets/scene-framing-Cat0GtyJ.js +1 -0
  426. package/dist/assets/scene-index-B6BZOHMk.js +1 -0
  427. package/dist/assets/scene-query-C7_N-TpI.js +1 -0
  428. package/dist/assets/schema-kl9-2B_J.js +1 -0
  429. package/dist/assets/sculpt.layout-zJF55yCR.js +1 -0
  430. package/dist/assets/seeded-random-i3mtgBKZ.js +1 -0
  431. package/dist/assets/session-CZ5JPg-z.js +4877 -0
  432. package/dist/assets/setup-audio-S8GQF91f.js +1 -0
  433. package/dist/assets/setup-particles-GCXlnkj_.js +1 -0
  434. package/dist/assets/setup-physics-BeZ7-LKD.js +1 -0
  435. package/dist/assets/setup-renderer-DVXaSGin.js +1587 -0
  436. package/dist/assets/shading.layout-DULYZV6M.js +1 -0
  437. package/dist/assets/sim-clock-CLflx7kg.js +1 -0
  438. package/dist/assets/sky-precompute-worker-ChN7J87v.js +1 -0
  439. package/dist/assets/soft-particle-depth-DGvfQDi1.js +1 -0
  440. package/dist/assets/source-object3d-authoring-adapter-B-L6Ha6f.js +1 -0
  441. package/dist/assets/source-persistence-backend-C-aR-B_Y.js +1 -0
  442. package/dist/assets/spark-renderer-lifecycle-ynWESJcv.js +1 -0
  443. package/dist/assets/spark.module-4pXQoz5d.js +12120 -0
  444. package/dist/assets/stage-invalidation-DBg3C3Ta.js +1 -0
  445. package/dist/assets/stage-keyboard-n-5kKH-m.js +1 -0
  446. package/dist/assets/stage-overlay-set-B9zp2sLB.js +1 -0
  447. package/dist/assets/stage-presence-markers-DiGI6A45.js +1 -0
  448. package/dist/assets/standard-viewport-dressing-CzjAe_0A.js +7 -0
  449. package/dist/assets/state-bridge-DLP1jLRW.js +1 -0
  450. package/dist/assets/state-watch.action-BOvQR2qt.js +1 -0
  451. package/dist/assets/state-watch.menu-CNLvDeeY.js +1 -0
  452. package/dist/assets/state-watch.utility-Bg1tTTQU.js +1 -0
  453. package/dist/assets/static-batch-advisor-B13QEH7d.js +1 -0
  454. package/dist/assets/stats.module-BL02l9NC.js +1 -0
  455. package/dist/assets/story-arg-descriptors-Ek86ExX7.js +1 -0
  456. package/dist/assets/story-capture-_gC8dXV-.js +1 -0
  457. package/dist/assets/story-documents--TDLaPeL.js +3 -0
  458. package/dist/assets/story-documents.service-BiS_YbNQ.js +1 -0
  459. package/dist/assets/story-documents.service-CxOPYJ2j.js +1 -0
  460. package/dist/assets/story-media-presence-BHzk2IV5.js +1 -0
  461. package/dist/assets/story-mount-turn-DFRTj5hi.js +1 -0
  462. package/dist/assets/story-pixi-preview-BUrOJZXS.js +1 -0
  463. package/dist/assets/story-presentation-j2AVN-mK.js +1 -0
  464. package/dist/assets/story-three-preview-BHEDZzcl.js +2 -0
  465. package/dist/assets/structural-ids-Dc-7rEwi.js +1 -0
  466. package/dist/assets/structural-signature-0w-i_ats.js +1 -0
  467. package/dist/assets/surface-content-Dg9Kkazf.js +1 -0
  468. package/dist/assets/surface-state-DaxyruCj.js +3 -0
  469. package/dist/assets/system-adapters-rIC8FSGP.js +1 -0
  470. package/dist/assets/system-runner-DkOjxEBt.js +1 -0
  471. package/dist/assets/system-slot-E2mEdiih.js +1 -0
  472. package/dist/assets/team-playtest.service-DqOinFVA.js +1 -0
  473. package/dist/assets/texture.layout-DASpHVht.js +1 -0
  474. package/dist/assets/three-CDSueJyJ.js +1 -0
  475. package/dist/assets/three-authoring-adapter-CmSQ3Vui.js +1 -0
  476. package/dist/assets/three-authoring.service-iuHLwtf1.js +2 -0
  477. package/dist/assets/three-ingest-runtime-QzDYk6tU.js +1 -0
  478. package/dist/assets/three-projection-core-BmKMZ-nf.js +1 -0
  479. package/dist/assets/three-viewport-presentation-QBQpSdMh.js +1 -0
  480. package/dist/assets/three.module-D396a9Mn.js +3840 -0
  481. package/dist/assets/three.quarks.esm-B1C61jGo.js +1039 -0
  482. package/dist/assets/tools-B_NJsk05.js +1 -0
  483. package/dist/assets/transform-writer-BhBBTx33.js +1 -0
  484. package/dist/assets/transport.header-B-6HQlU2.js +1 -0
  485. package/dist/assets/trigger-volume-BNK2XzPL.js +1 -0
  486. package/dist/assets/tuples-CIQ4Bn1U.js +1 -0
  487. package/dist/assets/tween.module-DciWpAG6.js +1 -0
  488. package/dist/assets/ui-board-document-Bwtt--xp.js +2 -0
  489. package/dist/assets/unexported-game-trap-Dm1JYKHy.js +2 -0
  490. package/dist/assets/unmanaged-root-detector-B8CpbkSN.js +2 -0
  491. package/dist/assets/upstream-pin-BdgRH6ID.js +1 -0
  492. package/dist/assets/use-data-Dzq-MytE.js +1 -0
  493. package/dist/assets/use-live-actor-state-DErbWQWF.js +1 -0
  494. package/dist/assets/use-selection-DbR73-xd.js +1 -0
  495. package/dist/assets/user-data-BB2Of6Ht.js +1 -0
  496. package/dist/assets/utility-view-state-BHypxA33.js +1 -0
  497. package/dist/assets/uv-editing.layout-BEKHxmHw.js +1 -0
  498. package/dist/assets/vgai-shared-fontawesome-CU65D4Ij.js +1 -0
  499. package/dist/assets/vgai-shared-jsx-dev-runtime-DFDKL7fx.js +1 -0
  500. package/dist/assets/vgai-shared-jsx-runtime-DIqBpTut.js +1 -0
  501. package/dist/assets/vgai-shared-react-BT7rMc2H.js +1 -0
  502. package/dist/assets/vgai-shared-react-dom-DFajMqMT.js +1 -0
  503. package/dist/assets/vgai-shared-react-dom-client-S0ozfl6_.js +1 -0
  504. package/dist/assets/vgai-shared-three-Bc5PvpLM.js +1 -0
  505. package/dist/assets/viewport-pick-context-DkawXbEi.js +1 -0
  506. package/dist/assets/viewport-root-presentation-CWsE56K6.js +1 -0
  507. package/dist/assets/viewport-shading-BuA88e_A.js +1 -0
  508. package/dist/assets/viewport-shading-boundary-B_-_gABg.js +82 -0
  509. package/dist/assets/viewport-surface-status-B3om4Kcf.js +1 -0
  510. package/dist/assets/vision_bundle-DX0dWqEa.js +15 -0
  511. package/dist/assets/voxel-surface-DtcsSWRL.js +1 -0
  512. package/dist/assets/wav-encode-D31zWF6O.js +1 -0
  513. package/dist/assets/webgl-frame-capture-FlF9zQmW.js +1 -0
  514. package/dist/assets/webgl-gpu-timer-D3YX7RaD.js +1 -0
  515. package/dist/assets/webworkerAll-CM2o_dnz.js +1 -0
  516. package/dist/assets/worker-UrMcrc5_.js +2 -0
  517. package/dist/assets/world-documents-147tiFZe.js +1 -0
  518. package/dist/assets/world-root-stage-binding-vwTrtBz6.js +1 -0
  519. package/dist/assets/world-state-BWG-IcOd.js +1 -0
  520. package/dist/assets/writer-B-KovzkA.js +5 -0
  521. package/dist/assets/xstate-animation-binding-Brd0NST6.js +1 -0
  522. package/dist/assets/xstate-animation-meta-Q3u9zh_m.js +1 -0
  523. package/dist/assets/xstate-behavior.action-B8UluFBK.js +1 -0
  524. package/dist/assets/xstate-behavior.document-CKAsE45I.js +1 -0
  525. package/dist/assets/xstate-behavior.inspector-vJJyuifc.js +1 -0
  526. package/dist/assets/xstate-behavior.menu-BXbPICIh.js +1 -0
  527. package/dist/assets/xstate-inspection-BsZv8LS9.js +1 -0
  528. package/dist/vgai-shared-react.json +10 -0
  529. package/dist/vgai-shared-three.json +3 -0
  530. package/dist-node/cli.js +9320 -0
  531. package/dist-node/create.js +3239 -0
  532. package/package.json +91 -0
  533. package/presets.mjs +2 -0
  534. package/src/contributions.d.ts +4 -0
  535. package/src/index.ts +38 -0
  536. package/starter/cube.blend +0 -0
  537. package/starter/cube.py +81 -0
  538. package/template/.agents/references/project-manual.md +341 -0
  539. package/template/.agents/skills/editor/SKILL.md +53 -0
  540. package/template/.agents/skills/editor/agents/openai.yaml +4 -0
  541. package/template/.agents/skills/editor/references/editor-control.md +363 -0
  542. package/template/.agents/skills/vgai-3d-models/SKILL.md +64 -0
  543. package/template/.agents/skills/vgai-ingest-existing-game/SKILL.md +112 -0
  544. package/template/.agents/skills/vgai-threejs-authoring/SKILL.md +347 -0
  545. package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
  546. package/template/.agents/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
  547. package/template/.claude/skills/editor/SKILL.md +53 -0
  548. package/template/.claude/skills/editor/agents/openai.yaml +4 -0
  549. package/template/.claude/skills/editor/references/editor-control.md +363 -0
  550. package/template/.claude/skills/vgai-3d-models/SKILL.md +64 -0
  551. package/template/.claude/skills/vgai-ingest-existing-game/SKILL.md +112 -0
  552. package/template/.claude/skills/vgai-threejs-authoring/SKILL.md +347 -0
  553. package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
  554. package/template/.claude/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
  555. package/template/.github/copilot-instructions.md +6 -0
  556. package/template/.github/skills/editor/SKILL.md +53 -0
  557. package/template/.github/skills/editor/agents/openai.yaml +4 -0
  558. package/template/.github/skills/editor/references/editor-control.md +363 -0
  559. package/template/.github/skills/vgai-3d-models/SKILL.md +64 -0
  560. package/template/.github/skills/vgai-ingest-existing-game/SKILL.md +112 -0
  561. package/template/.github/skills/vgai-threejs-authoring/SKILL.md +347 -0
  562. package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
  563. package/template/.github/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
  564. package/template/.mcp.json +12 -0
  565. package/template/.vgai/assets.json +1 -0
  566. package/template/.vgai/provenance.json +4 -0
  567. package/template/.volter/tracker/validation/.preset.base.mts +178 -0
  568. package/template/.volter/tracker/validation/preset.mts +186 -0
  569. package/template/.volter/tracker/visualizer/.extension.base.tsx +14 -0
  570. package/template/.volter/tracker/visualizer/extension.tsx +14 -0
  571. package/template/.volter/tracker-config.json +17 -0
  572. package/template/AGENTS.md +176 -0
  573. package/template/CLAUDE.md +1 -0
  574. package/template/DEVLOG.md +20 -0
  575. package/template/IDIOMS.md +118 -0
  576. package/template/LICENSE +30 -0
  577. package/template/README.md +83 -0
  578. package/template/ROADMAP.md +20 -0
  579. package/template/asset-manifest.json +3 -0
  580. package/template/check-idioms.ts +1533 -0
  581. package/template/index.html +18 -0
  582. package/template/manifest-entry-modules-plugin.ts +53 -0
  583. package/template/package.json +62 -0
  584. package/template/public/jsm/libs/basis/basis_transcoder.js +19 -0
  585. package/template/public/jsm/libs/basis/basis_transcoder.wasm +0 -0
  586. package/template/public/jsm/libs/draco/gltf/draco_decoder.js +33 -0
  587. package/template/public/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
  588. package/template/public/jsm/libs/draco/gltf/draco_encoder.js +33 -0
  589. package/template/public/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
  590. package/template/public/shaders/daylight-sky.frag.glsl +15 -0
  591. package/template/public/shaders/daylight-sky.vert.glsl +7 -0
  592. package/template/scripts/patch-drei-stats-gl.mjs +35 -0
  593. package/template/server/colyseus-setup.ts +111 -0
  594. package/template/server/loopback.ts +76 -0
  595. package/template/server/main.ts +78 -0
  596. package/template/server/rooms/arena-room.ts +488 -0
  597. package/template/server/rooms/game-room.ts +274 -0
  598. package/template/server/rooms.ts +15 -0
  599. package/template/server/tsconfig.json +19 -0
  600. package/template/src/bot/QaTester.tsx +35 -0
  601. package/template/src/bot/behaviors.ts +203 -0
  602. package/template/src/bot/bot-station.ts +192 -0
  603. package/template/src/bot/tester-run.ts +238 -0
  604. package/template/src/bot/tester-station.ts +193 -0
  605. package/template/src/components/environment/DaylightSky.tsx +54 -0
  606. package/template/src/components/environment/Ground.tsx +129 -0
  607. package/template/src/components/environment/SceneAtmosphere.tsx +14 -0
  608. package/template/src/components/environment/SoftGroundShadow.tsx +62 -0
  609. package/template/src/components/environment/SunShadowFit.tsx +141 -0
  610. package/template/src/contributions/README.md +98 -0
  611. package/template/src/contributions/analytics.analytics.tsx +26 -0
  612. package/template/src/contributions/data.document.tsx +35 -0
  613. package/template/src/contributions/pages.finder.ts +61 -0
  614. package/template/src/contributions/tester.inspector.tsx +64 -0
  615. package/template/src/contributions/use-game-modules.ts +80 -0
  616. package/template/src/data/README.md +17 -0
  617. package/template/src/input.ts +97 -0
  618. package/template/src/lib/audio/capability.json +4 -0
  619. package/template/src/lib/audio/sfx.ts +255 -0
  620. package/template/src/lib/react-root/capability.json +4 -0
  621. package/template/src/lib/react-root/index.ts +20 -0
  622. package/template/src/lib/react-root/react-root-adapter.tsx +57 -0
  623. package/template/src/lib/reflections/ReflectionProbe.tsx +201 -0
  624. package/template/src/lib/reflections/capability.json +4 -0
  625. package/template/src/lib/reflections/index.ts +19 -0
  626. package/template/src/lib/reflections/probe-controller.ts +75 -0
  627. package/template/src/lib/reflections/reflection-probe-registry.ts +402 -0
  628. package/template/src/lib/reflections/volume-reflection-material.ts +416 -0
  629. package/template/src/lib/static-batch/Frozen.tsx +91 -0
  630. package/template/src/lib/static-batch/capability.json +4 -0
  631. package/template/src/lib/static-batch/freeze.ts +579 -0
  632. package/template/src/lib/static-batch/index.ts +44 -0
  633. package/template/src/lib/static-batch/mutation-watch.ts +149 -0
  634. package/template/src/lib/static-batch/shadow-cache.ts +171 -0
  635. package/template/src/main.ts +63 -0
  636. package/template/src/manifest-entry-modules.d.ts +3 -0
  637. package/template/src/prefabs/HeroBox.stories.tsx +23 -0
  638. package/template/src/prefabs/HeroBox.tsx +35 -0
  639. package/template/src/scenes/MainScene.tsx +77 -0
  640. package/template/src/world.tsx +87 -0
  641. package/template/tsconfig.json +35 -0
  642. package/template/tsconfig.node.json +32 -0
  643. package/template/tsconfig.tools.json +22 -0
  644. package/template/validate-asset-content.ts +27 -0
  645. package/template/validate-assets.ts +60 -0
  646. package/template/validate-manifest.ts +55 -0
  647. package/template/vgai.adapter.ts +76 -0
  648. package/template/vgai.project.json +24 -0
  649. package/template/vite.config.ts +247 -0
  650. package/template-dotfiles/gitignore +63 -0
  651. package/workbench/src/media/game-cover.css +83 -0
  652. package/workbench/src/product.contribution.ts +188 -0
  653. package/workbench/src/vgaiGameSkew.ts +276 -0
@@ -0,0 +1,188 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * THE GAME EDITOR'S WORKBENCH HALF — everything about this build that is a GAME editor's
3
+ * rather than the editor kit's.
4
+ *
5
+ * THIS FILE LIVES IN THIS REPOSITORY (`packages/game-editor/workbench/src/`) and is OVERLAID
6
+ * on a Code-OSS checkout at a pin by `scripts/workbench/overlay.mjs --product game-editor`.
7
+ * Edit it here.
8
+ *
9
+ * It is the counterpart of `packages/game-editor/src/index.ts`, which composes the SAME
10
+ * product in the editor's own realm. There is exactly one piece of workbench code that is a
11
+ * game editor's and not any editor's, and it is `vgaiGameSkew.ts` beside this file: what the
12
+ * frame must answer for a GAME layout — immersive Play, the semantic dock commands, and the
13
+ * surface-keyboard probe. Everything else a game editor draws is the kit's.
14
+ *
15
+ * NO LOOK ROWS. This product wears Classic — the editor's own Graphite, which is the reference
16
+ * frame every host-default shape was measured against — and Classic is the workbench's own
17
+ * themes, so it declares none. A `looks` row is a claim that this build SHIPS a theme
18
+ * extension for that look, and this one ships none.
19
+ *
20
+ * IT DOES SHIP ONE STYLESHEET, and only one: `media/game-cover.css`, this product's own
21
+ * opening splash. It spells Classic's palette because the cover paints before any theme is
22
+ * registered at all — see that file's header, and `vgaiProduct.ts`'s `cover`.
23
+ *--------------------------------------------------------------------------------------------*/
24
+
25
+ import './media/game-cover.css';
26
+ import { $ } from '../../../../base/browser/dom.js';
27
+ import { mainWindow } from '../../../../base/browser/window.js';
28
+ import { localize } from '../../../../nls.js';
29
+ import { registerVgaiProduct, type VgaiProductCover, type VgaiProductCoverContext, type VgaiProductMountContext } from '../../vgai/browser/vgaiProduct.js';
30
+ import { VgaiGameSkew, type VgaiGameBridge } from './vgaiGameSkew.js';
31
+
32
+ /** What this product reads off the mount to know its Game document is open and drawn — a
33
+ * MIRROR of the kit's `VgaiDocumentsBridge`, declared here for the same reason
34
+ * `VgaiGameBridge` is: a product declares the shape it expects (`vgaiProduct.ts`'s header),
35
+ * and a door this build's kit does not have reads as missing rather than as a crash. */
36
+ interface DocumentsRegistry {
37
+ whenRestored?(): Promise<void>;
38
+ /** `area` is set only for a document the active WORKSPACE opened into one of its
39
+ * `areas`; {@link openDocument} is why this mirror carries it. */
40
+ list?(): readonly { readonly id: string; readonly title: string; readonly area?: unknown }[];
41
+ activeId?(): string | null;
42
+ subscribe?(listener: () => void): () => void;
43
+ }
44
+
45
+ /**
46
+ * IS A DOCUMENT A PERSON CAME TO SEE OPEN — never an AREA document.
47
+ *
48
+ * A workspace's own `areas` open WITH THE LAYOUT, before the adapter's table has settled,
49
+ * and they are never activatable, so counting one calls the product open over an empty
50
+ * pane. It is walk 4's W2 (#7739) — the rule `openDefaultTableDocument` states in as many
51
+ * words — reappearing in a `ready` written after it. Measured on the MODEL editor (walk 5
52
+ * beat 3: `openDocumentIds: ["tool:blender-timeline.document"]` answered as "open"); this
53
+ * product carries the same predicate, and a `game` scaffold links `@volter/editor-blender`, so its
54
+ * Model workspace's Timeline area registers here too.
55
+ */
56
+ function openDocument(registry: DocumentsRegistry): boolean {
57
+ return (
58
+ (registry.list?.() ?? []).some((document) => document.area === undefined) &&
59
+ registry.activeId?.() !== null
60
+ );
61
+ }
62
+
63
+ /**
64
+ * HOW LONG THIS PRODUCT WAITS FOR ITS FIRST DOCUMENT. Shorter than the model editor's 90 s
65
+ * because what is being waited for is smaller: a game editor boots its project's own modules
66
+ * and draws a scene, where the model editor waits for Blender itself to come up in the tab's
67
+ * worker. Past it the honest thing is to say the game did not open, which the kit turns into
68
+ * the cover's refusal with a way out.
69
+ */
70
+ const GAME_OPEN_BUDGET_MS = 60_000;
71
+
72
+ /** This product's splash while it is opening, so `ready` can narrate its own wait into the
73
+ * cover it drew. Set by `cover`, cleared by the handle's `dispose`. */
74
+ let splash: { say(text: string): void } | undefined;
75
+
76
+ registerVgaiProduct({
77
+ id: 'game-editor',
78
+ layout: {
79
+ sidebarWidth: 260,
80
+ containers: [
81
+ {
82
+ id: 'workbench.view.vgai',
83
+ title: 'Game',
84
+ location: 'sidebar',
85
+ views: [
86
+ { part: 'outliner', title: 'Hierarchy', weight: 50 },
87
+ { part: 'content', title: 'Content', weight: 50 },
88
+ ],
89
+ },
90
+ {
91
+ id: 'workbench.view.vgai.inspector',
92
+ title: 'Inspector',
93
+ location: 'auxiliarybar',
94
+ views: [{ part: 'properties', title: 'Inspector', weight: 100 }],
95
+ },
96
+ ],
97
+ },
98
+ title: localize('vgaiGameTitle', "Volter Game Editor"),
99
+ // The workbench's own trust prompt, in this product's words: a game project runs its own
100
+ // code the moment it opens — its contributions from its `node_modules`, its dev server, and
101
+ // the game itself in the pane.
102
+ trustSentence: localize('vgaiGameTrustRequest', "Volter Game Editor runs this project's own code — its editor contributions, its dev server and its game. Trust this folder to open it."),
103
+ // THIS PRODUCT'S OWN SPLASH (F4). The kit owns the cover's mechanism — when it goes up,
104
+ // that it comes away whole, what a refusal looks like; this is the picture inside it, in
105
+ // Classic's own palette and this product's own words, drawn with no image to fetch so the
106
+ // first painted frame is already this.
107
+ cover(host: HTMLElement, context: VgaiProductCoverContext): VgaiProductCover {
108
+ const root = $('.vgai-game-cover');
109
+ // THE MARK, built as ELEMENTS. Not `innerHTML` — the page carries a Trusted Types
110
+ // policy and the workbench's own code never assigns markup — and not a file either,
111
+ // because an image to fetch is a frame to wait for.
112
+ const mark = $.SVG<SVGElement>('svg', { class: 'vgai-game-cover-mark', viewBox: '0 0 48 48', 'aria-hidden': 'true' });
113
+ mark.append(
114
+ $.SVG<SVGElement>('rect', { x: '4', y: '4', width: '40', height: '40', rx: '9', fill: '#242424', stroke: '#333333' }),
115
+ $.SVG<SVGElement>('path', { d: 'M20 16 L34 24 L20 32 Z', fill: '#579eff' }),
116
+ );
117
+ const title = $('.vgai-game-cover-title');
118
+ title.textContent = localize('vgaiGameCoverTitle', "Game");
119
+ const folder = $('.vgai-game-cover-folder');
120
+ folder.textContent = context.folderName;
121
+ const state = $('.vgai-game-cover-state');
122
+ state.textContent = localize('vgaiGameCoverStarting', "Starting the editor…");
123
+ root.append(mark, title, folder, $('.vgai-game-cover-rail'), state);
124
+ host.appendChild(root);
125
+ splash = { say: (text: string) => { state.textContent = text; } };
126
+ return {
127
+ dispose: () => {
128
+ splash = undefined;
129
+ root.remove();
130
+ },
131
+ };
132
+ },
133
+ // WHEN THIS PRODUCT IS OPEN: when its Game document is registered, active and drawn. The
134
+ // mount resolving is the EDITOR being assembled — the project's own modules still have to
135
+ // load and the scene still has to draw, and the editor's own "No document open yet" is
136
+ // what a person would otherwise watch in that window.
137
+ async ready(context: VgaiProductMountContext): Promise<void> {
138
+ const registry = context.mount['documents'] as DocumentsRegistry | undefined;
139
+ // A bridge without the door is a MISSING door: with nothing to watch, the mount
140
+ // resolving is the answer, which is what this product did before `ready` existed.
141
+ if (!registry?.subscribe || !registry.list || !registry.activeId) { return; }
142
+ await registry.whenRestored?.();
143
+ // An explicitly empty tab session is a valid authoring workspace.
144
+ if (registry.list().length === 0) { return; }
145
+ const open = (): boolean => openDocument(registry);
146
+ if (!open()) {
147
+ splash?.say(localize('vgaiGameCoverWaiting', "Opening the game…"));
148
+ await new Promise<void>((resolve, reject) => {
149
+ let unsubscribe: (() => void) | undefined;
150
+ let timer: number | undefined;
151
+ // DECLARED BEFORE EITHER IS INSTALLED, because a registry that notifies
152
+ // synchronously from `subscribe` would otherwise reach a `const` still in its
153
+ // temporal dead zone and throw out of this promise.
154
+ const stop = () => {
155
+ if (timer !== undefined) { mainWindow.clearTimeout(timer); }
156
+ unsubscribe?.();
157
+ unsubscribe = undefined;
158
+ };
159
+ timer = mainWindow.setTimeout(() => {
160
+ stop();
161
+ reject(new Error(localize('vgaiGameCoverTimedOut', "No document opened within {0}s. The project's own modules load through the editor session; `volter-game-editor console` is where it says why.", Math.round(GAME_OPEN_BUDGET_MS / 1000))));
162
+ }, GAME_OPEN_BUDGET_MS);
163
+ unsubscribe = registry.subscribe?.(() => { if (open()) { stop(); resolve(); } });
164
+ // One more read after subscribing: the document can land between the check
165
+ // above and this listener, and then no further change is coming.
166
+ if (open()) { stop(); resolve(); }
167
+ });
168
+ }
169
+ // DRAWN, not merely registered — the pane paints the active document on the frame
170
+ // after the registry names it, so the cover lifts onto the game and not onto the empty
171
+ // pane it was covering.
172
+ splash?.say(localize('vgaiGameCoverDrawing', "Drawing…"));
173
+ await new Promise<void>((resolve) => mainWindow.requestAnimationFrame(() => mainWindow.requestAnimationFrame(() => resolve())));
174
+ },
175
+ mount(context: VgaiProductMountContext): void {
176
+ // THE GAME SKEW'S THREE FRAME ANSWERS (vgaiGameSkew.ts, U2). The bridge publishes its
177
+ // half beside the kit's doors; a bridge without it is a missing door rather than a
178
+ // crash, which is the same rule every other door here follows.
179
+ const bridge = context.mount['game'] as VgaiGameBridge | undefined;
180
+ if (!bridge) { return; }
181
+ context.store.add(context.instantiationService.createInstance(VgaiGameSkew, bridge, {
182
+ pane: context.ids.pane,
183
+ hierarchyView: context.ids.hierarchyView,
184
+ inspectorView: context.ids.inspectorView,
185
+ contentView: context.ids.contentView,
186
+ }));
187
+ },
188
+ });
@@ -0,0 +1,276 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * THE GAME SKEW UNDER THE FRAME.
3
+ *
4
+ * THE ONE PIECE OF WORKBENCH CODE THAT IS A GAME EDITOR'S. It lives in this
5
+ * repository beside the rest of the game editor (`packages/game-editor/workbench/src/`) and is
6
+ * overlaid on a Code-OSS checkout by `scripts/workbench/overlay.mjs --product game-editor`; a
7
+ * copy inside a fork checkout is build output. `product.contribution.ts` beside it is what
8
+ * constructs this, from the bridge member the kit's mount hands over.
9
+ *
10
+ * The product declares its native view arrangement in product.contribution.ts: hierarchy
11
+ * above Content in the primary sidebar, inspector in the secondary sidebar. The bridge
12
+ * mounts those panels and the viewport-local compact inspector. This file binds that
13
+ * presentation to the workbench, plus Play, semantic panel commands and keyboard ownership.
14
+ *
15
+ * 1. IMMERSIVE PLAY IS A LAYOUT ACT, performed with the workbench's own verbs.
16
+ * `installPlayTransitionDock({ hideChrome, showChrome })` is the editor's existing seam —
17
+ * `live-transition.ts` owns the TIMING and the camera flight and deliberately never touches
18
+ * Dockview, so what the dock registered there (a chrome dissolve over its groups) the frame
19
+ * registers as: hide the side bar, the auxiliary bar and the panel, and maximize the editor
20
+ * group when there is more than one. Reversing it is not "show everything" — it is
21
+ * RESTORING WHAT WAS THERE, so the act persists each part's visibility and the group
22
+ * arrangement on the way in and puts exactly those back on the way out. A person who was
23
+ * already working with the panel hidden gets it back hidden.
24
+ *
25
+ * THERE IS NO EDGE REVEAL HERE, and that is a decision rather than a gap. The dock's
26
+ * immersive presentation has a macOS-style auto-hide: dwell at an edge and the chrome
27
+ * re-materializes over the game (`LiveRevealOverlays.tsx`, mounted by the dock). Under the
28
+ * frame the chrome is not hidden-but-present, it is genuinely laid out away, and reviving it
29
+ * on a pointer dwell would be a second layout act firing on mouse movement — the exact
30
+ * "DOCUMENT-OPEN NEVER MOVES CHROME" inversion ARCHITECTURE-CORE §Editor chrome rules
31
+ * against, now on an even weaker trigger. Escape is the way out, and it already works
32
+ * without anything here: `play-mode.ts` registers Escape-to-stop, stopping ends the
33
+ * transition, and `showChrome` restores the layout. One gesture, one reversal.
34
+ *
35
+ * 2. THE SEMANTIC DOCK COMMANDS. `workspace-dock-controller.ts` is the editor's imperative
36
+ * boundary — "reveal the Profiler", "focus the hierarchy" — and callers deliberately name a
37
+ * capability rather than a location. Only `WorkspaceDock.tsx` ever installed an
38
+ * implementation, so under the frame every such call QUEUED FOREVER (the controller holds
39
+ * pending resolvers until one arrives): `playUtilities` on a layout, the Generations button,
40
+ * every menu item that reveals a utility. Here they are the views service: a utility is the
41
+ * view U8 gave it (`vgai.utility.<id>` in the panel container), the two static panels are the
42
+ * outliner and properties views, and focus mode is the editor group's own maximize.
43
+ *
44
+ * 3. THE SURFACE-KEYBOARD PROBE, and it is the one that closes a real defect. The play-input
45
+ * predicate is "play is running AND the Game tab is active" (plus instance focus), and
46
+ * standalone those clauses are the whole truth because the editor page is the only surface.
47
+ * Under the frame the page is a workbench: Monaco can sit in the group beside a running game,
48
+ * on the same `document` the game's listeners are on, and both clauses stay true while a
49
+ * person types into a source file. `@editor/surface-keyboard`'s probe is the missing term and
50
+ * this is the frame's answer to it — the WORKBENCH'S OWN notion of the active editor, not DOM
51
+ * focus. Focus would have been wrong in a way that costs the game: a game canvas with no
52
+ * `tabindex` leaves focus on `body`, so a focus-based probe would go false on the first click
53
+ * INTO the game.
54
+ *
55
+ * Nothing under `src/vs/` imports an editor module: what arrives is `VgaiGameBridge`, whose
56
+ * counterpart is `bridge.tsx`'s `VgaiGameHandle`.
57
+ *--------------------------------------------------------------------------------------------*/
58
+
59
+ import { Disposable, MutableDisposable } from '../../../../base/common/lifecycle.js';
60
+ import { localize } from '../../../../nls.js';
61
+ import { CommandsRegistry } from '../../../../platform/commands/common/commands.js';
62
+ import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
63
+ import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';
64
+ import { Registry } from '../../../../platform/registry/common/platform.js';
65
+ import { EditorExtensions, IEditorFactoryRegistry } from '../../../common/editor.js';
66
+ import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';
67
+ import { GroupsArrangement, IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js';
68
+ import { IEditorService } from '../../../services/editor/common/editorService.js';
69
+ import { IWorkbenchLayoutService, Parts } from '../../../services/layout/browser/layoutService.js';
70
+ import { IViewsService } from '../../../services/views/common/viewsService.js';
71
+ import { ChatViewId } from '../../chat/browser/chat.js';
72
+
73
+ /** What the frame performs when the editor asks for immersive Play, and its exact reversal. */
74
+ export interface VgaiImmersiveAct {
75
+ enter(): void;
76
+ exit(): void;
77
+ }
78
+
79
+ /** The editor's semantic dock vocabulary, as the frame answers it. Every member is optional on
80
+ * the editor's own `WorkspaceDockCommands` except the two that are not; the bridge adapts. */
81
+ export interface VgaiDockCommands {
82
+ showUtility(id: string): void;
83
+ toggleUtility(id: string): void;
84
+ ensureUtility(id: string): void;
85
+ closeUtility(id: string): void;
86
+ /** `'hierarchy'` and `'inspector'` are the two the editor's static-panel registry names. */
87
+ showStaticPanel(kind: string): void;
88
+ setFocus(focused: boolean): void;
89
+ toggleFocus(): void;
90
+ }
91
+
92
+ export interface VgaiGameBridge {
93
+ setActiveStaticPanel(kind: string | null): void;
94
+ focusCompactInspector(): boolean;
95
+ /** Whether OUR editor pane currently holds the keyboard, pushed on every change. */
96
+ setPaneActive(active: boolean): void;
97
+ /** Install the immersive-Play layout act (null uninstalls). */
98
+ setImmersive(act: VgaiImmersiveAct | null): void;
99
+ /** Install the frame's answers for the semantic dock commands (null uninstalls). */
100
+ setDockCommands(commands: VgaiDockCommands | null): void;
101
+ /** Say something in the editor's OWN console, where `volter-game-editor console` reads it. */
102
+ report(level: 'warn' | 'error', message: string): void;
103
+ }
104
+
105
+ /** The view id U8 gives a `workspace.utility`; kept in step with `vgaiUtilityViews.ts`'s own
106
+ * `viewIdFor`, which is its single author — this file only needs to name one. */
107
+ function utilityViewId(id: string): string {
108
+ return `vgai.utility.${id}`;
109
+ }
110
+
111
+ /** What `hideChrome` recorded, so `showChrome` restores rather than reveals. */
112
+ const PLAY_LAYOUT_KEY = 'vgai.play.layout';
113
+
114
+ interface LayoutSnapshot {
115
+ readonly sideBar: boolean;
116
+ readonly auxiliaryBar: boolean;
117
+ readonly panel: boolean;
118
+ readonly maximized: boolean;
119
+ }
120
+
121
+ export class VgaiGameSkew extends Disposable {
122
+
123
+ /** Non-null exactly while immersive Play is in force. Also the re-entrancy guard: a second
124
+ * `enter()` (a re-mount inside one play session) must not overwrite the pre-play layout
125
+ * with the immersive one, which would make the exit a no-op and strand the person in a
126
+ * bare editor with no side bars and no way back but the View menu. */
127
+ private snapshot: LayoutSnapshot | null = null;
128
+ private readonly playTabOptions = this._register(new MutableDisposable());
129
+
130
+ constructor(
131
+ private readonly bridge: VgaiGameBridge,
132
+ /** The contribution's own ids — passed rather than imported, so this file never becomes a
133
+ * second author of an id the contribution already spells (and never imports the module
134
+ * that constructs it). */
135
+ private readonly ids: { readonly pane: string; readonly hierarchyView: string; readonly inspectorView: string; readonly contentView: string },
136
+ @IEditorService private readonly editorService: IEditorService,
137
+ @IEditorGroupsService private readonly editorGroupsService: IEditorGroupsService,
138
+ @IWorkbenchLayoutService private readonly layoutService: IWorkbenchLayoutService,
139
+ @IViewsService private readonly viewsService: IViewsService,
140
+ @IStorageService private readonly storageService: IStorageService,
141
+ @IContextKeyService private readonly contextKeyService: IContextKeyService,
142
+ ) {
143
+ super();
144
+
145
+ const restoredGroups = this.editorGroupsService.groups.map(group => ({ id: group.id, editors: group.editors.map(editor => editor.getName()) }));
146
+ // Read the native owners when diagnosing a missing view or tab strip. This
147
+ // command reports state; it never reveals views or rewrites preferences.
148
+ this._register(CommandsRegistry.registerCommand('vgai.layout.inspect', accessor => ({
149
+ settings: ['workbench.editor.showTabs', 'zenMode.showTabs'].map(key => {
150
+ const value = accessor.get(IConfigurationService).inspect(key);
151
+ return { key, value: value.value, defaultValue: value.defaultValue, userValue: value.userValue, workspaceValue: value.workspaceValue, memoryValue: value.memoryValue };
152
+ }),
153
+ zen: this.contextKeyService.getContextKeyValue<boolean>('inZenMode') === true,
154
+ effectiveTabs: this.editorGroupsService.mainPart.partOptions.showTabs,
155
+ restoredGroups,
156
+ immersive: this.snapshot,
157
+ parts: ([Parts.SIDEBAR_PART, Parts.AUXILIARYBAR_PART, Parts.PANEL_PART] as const).map(part => ({ part, visible: this.layoutService.isVisible(part) })),
158
+ views: [this.ids.hierarchyView, this.ids.contentView, this.ids.inspectorView, ChatViewId].map(id => ({ id, visible: this.viewsService.isViewVisible(id) })),
159
+ groups: this.editorGroupsService.groups.map(group => ({ id: group.id, editors: group.editors.map(editor => ({ name: editor.getName(), type: editor.typeId, serializable: Registry.as<IEditorFactoryRegistry>(EditorExtensions.EditorFactory).getEditorSerializer(editor)?.canSerialize(editor) ?? false })) })),
160
+ })));
161
+
162
+ // A reload ends Play but Code-OSS persists the hidden parts. Recover the
163
+ // pre-Play visibility before accepting another Play entry, just as Zen
164
+ // Mode retains exitInfo. This is workspace state, never a user setting.
165
+ this.snapshot = this.storageService.getObject<LayoutSnapshot>(PLAY_LAYOUT_KEY, StorageScope.WORKSPACE) ?? null;
166
+ this.exitImmersive();
167
+
168
+ this._register(this.editorService.onDidActiveEditorChange(() => this.syncPaneActive()));
169
+ this.syncPaneActive();
170
+ // Inspector presentation changes its content, not native view visibility.
171
+ // Only a view command or the temporary Play/Zen layout may hide the pane.
172
+
173
+ this.bridge.setImmersive({ enter: () => this.enterImmersive(), exit: () => this.exitImmersive() });
174
+ this._register({ dispose: () => this.bridge.setImmersive(null) });
175
+
176
+ this.bridge.setDockCommands({
177
+ showUtility: id => void this.openUtility(id, true),
178
+ toggleUtility: id => void this.toggleUtility(id),
179
+ ensureUtility: id => void this.openUtility(id, false),
180
+ closeUtility: id => this.viewsService.closeView(utilityViewId(id)),
181
+ showStaticPanel: kind => void this.showStaticPanel(kind),
182
+ setFocus: focused => this.setFocus(focused),
183
+ toggleFocus: () => this.layoutService.toggleZenMode(),
184
+ // The workbench owns view placement and has its own `View: Reset View Locations`;
185
+ // a second reset here would be a parallel layout authority over state that is no
186
+ // longer ours to hold (U8's ruling that a view's home is the view container's).
187
+ });
188
+ this._register({ dispose: () => this.bridge.setDockCommands(null) });
189
+ }
190
+
191
+ /** THE ACTIVE EDITOR, not DOM focus — see the header's point 3. `activeEditorPane` is the
192
+ * pane of the ACTIVE GROUP, so typing into Monaco in the group beside the stage makes this
193
+ * false while a click anywhere inside our own pane keeps it true. */
194
+ private syncPaneActive(): void {
195
+ this.bridge.setPaneActive(this.editorService.activeEditorPane?.getId() === this.ids.pane);
196
+ }
197
+
198
+ private enterImmersive(): void {
199
+ if (this.snapshot) { return; }
200
+ this.snapshot = {
201
+ sideBar: this.layoutService.isVisible(Parts.SIDEBAR_PART),
202
+ auxiliaryBar: this.layoutService.isVisible(Parts.AUXILIARYBAR_PART),
203
+ panel: this.layoutService.isVisible(Parts.PANEL_PART),
204
+ maximized: this.editorGroupsService.mainPart.hasMaximizedGroup(),
205
+ };
206
+ this.storageService.store(PLAY_LAYOUT_KEY, this.snapshot, StorageScope.WORKSPACE, StorageTarget.MACHINE);
207
+ this.layoutService.setPartHidden(true, Parts.SIDEBAR_PART);
208
+ this.layoutService.setPartHidden(true, Parts.AUXILIARYBAR_PART);
209
+ this.layoutService.setPartHidden(true, Parts.PANEL_PART);
210
+ this.setMaximized(true);
211
+ this.playTabOptions.value = this.editorGroupsService.mainPart.enforcePartOptions({ showTabs: 'none' });
212
+ }
213
+
214
+ private exitImmersive(): void {
215
+ this.playTabOptions.clear();
216
+ const snapshot = this.snapshot;
217
+ if (!snapshot) { return; }
218
+ this.snapshot = null;
219
+ this.layoutService.setPartHidden(!snapshot.sideBar, Parts.SIDEBAR_PART);
220
+ this.layoutService.setPartHidden(!snapshot.auxiliaryBar, Parts.AUXILIARYBAR_PART);
221
+ this.layoutService.setPartHidden(!snapshot.panel, Parts.PANEL_PART);
222
+ this.setMaximized(snapshot.maximized);
223
+ this.storageService.remove(PLAY_LAYOUT_KEY, StorageScope.WORKSPACE);
224
+ }
225
+
226
+ /** Maximizing is meaningless with one group and `toggleMaximizeGroup` would then be a
227
+ * visible no-op that still fires the workbench's own notifications, so the single-group
228
+ * case is skipped rather than toggled. */
229
+ private setMaximized(maximized: boolean): void {
230
+ const part = this.editorGroupsService.mainPart;
231
+ if (part.count < 2) { return; }
232
+ if (part.hasMaximizedGroup() === maximized) { return; }
233
+ // THE INVERSE OF MAXIMIZE IS THE GRID'S OWN RESTORE, NEVER `EVEN`. `EVEN` means "size
234
+ // all groups the same", and a workspace AREA is not a sibling of equal weight — the
235
+ // Model workspace's Timeline declares 0.0719. Measured 2026-09-20 (U8 walk 3, beat 8)
236
+ // on a `--template game` scaffold: mount 874/68, Play 942/0, Stop **471/471**, and it
237
+ // stayed there through a Sculpt round trip because nothing else re-sizes a group whose
238
+ // document never moved. `toggleMaximizeGroup` takes `unmaximizeGroup` ->
239
+ // `gridWidget.exitMaximizedView()`, which puts back the proportions maximizing saved.
240
+ if (maximized) { part.arrangeGroups(GroupsArrangement.MAXIMIZE); } else { part.toggleMaximizeGroup(); }
241
+ }
242
+
243
+ private setFocus(focused: boolean): void {
244
+ // Native Zen owns its visibility snapshot, tabs, and restoration. Group
245
+ // maximization is independent and cannot tell whether focus mode is active.
246
+ if ((this.contextKeyService.getContextKeyValue<boolean>('inZenMode') === true) !== focused) {
247
+ this.layoutService.toggleZenMode();
248
+ }
249
+ }
250
+
251
+ private async openUtility(id: string, focus: boolean): Promise<void> {
252
+ const view = await this.viewsService.openView(utilityViewId(id), focus);
253
+ // A utility whose availability gate is closed has no view registered, and a silent
254
+ // nothing is how a menu item becomes a lie. The editor's own console is where a
255
+ // person (and `volter-game-editor console`) sees it.
256
+ if (!view) { this.bridge.report('warn', localize('vgaiUtilityMissing', "The “{0}” utility has no view in this window, so it could not be opened — its availability gate is closed, or the panel's views have not been published yet.", id)); }
257
+ }
258
+
259
+ private async toggleUtility(id: string): Promise<void> {
260
+ const viewId = utilityViewId(id);
261
+ if (this.viewsService.isViewVisible(viewId)) { this.viewsService.closeView(viewId); return; }
262
+ await this.openUtility(id, true);
263
+ }
264
+
265
+ private async showStaticPanel(kind: string): Promise<void> {
266
+ // Resolve semantic panel commands to the product's real native views.
267
+ const viewId = kind === 'hierarchy' ? this.ids.hierarchyView : kind === 'inspector' ? this.ids.inspectorView : kind === 'assets' ? this.ids.contentView : kind === 'agent' ? ChatViewId : null;
268
+ if (!viewId) {
269
+ this.bridge.report('warn', localize('vgaiStaticPanelMissing', "The “{0}” panel has no view under the VS Code frame, so it could not be focused.", kind));
270
+ return;
271
+ }
272
+ if (kind === 'inspector' && this.bridge.focusCompactInspector()) return;
273
+ const view = await this.viewsService.openView(viewId, true);
274
+ this.bridge.setActiveStaticPanel(view ? kind : null);
275
+ }
276
+ }