@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,22 @@
1
+ {
2
+ // The editor's lane (src/contributions/**, src/tools/**) — their own program, WITHOUT
3
+ // src/world.tsx: see the base tsconfig's "exclude" note (fiber's JSX
4
+ // augmentation must not mix with the editor design-system's polymorphic
5
+ // primitives these tools import via @editor/*).
6
+ //
7
+ // `exclude` MUST be reset here. `extends` inherits the base config's
8
+ // `exclude: ["src/tools", "src/contributions"]`, and exclude beats include — inheriting it makes
9
+ // this program compile ZERO files while still exiting 0, so every tool file
10
+ // is silently untypechecked. `npm run typecheck` cannot tell you: a program
11
+ // with no files is a PASSING program.
12
+ //
13
+ // Tools are NODE code (see src/contributions/module-source.ts's header) — the base
14
+ // config's browser-only `types: ["vite/client"]` is why they had to be
15
+ // excluded from it in the first place, so add node here.
16
+ "extends": "./tsconfig.json",
17
+ "compilerOptions": {
18
+ "types": ["vite/client", "node"]
19
+ },
20
+ "include": ["src/tools", "src/contributions"],
21
+ "exclude": []
22
+ }
@@ -0,0 +1,27 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { InputMapFileSchema } from '@volter/game-runtime/input/schema';
3
+
4
+ /**
5
+ * Content validation for the project's structured input-map asset. Models,
6
+ * materials, animation, images, and audio use their ecosystem-native formats
7
+ * and are validated by their own loaders/tooling rather than vgai JSON schemas.
8
+ */
9
+ export const ASSET_CONTENT_EXTENSIONS = ['.inputmap.json'] as const;
10
+
11
+ export function validateAssetContentFile(path: string): string[] {
12
+ let raw: unknown;
13
+ try {
14
+ raw = JSON.parse(readFileSync(path, 'utf-8'));
15
+ } catch (reason) {
16
+ return [`${path}: invalid JSON — ${reason instanceof Error ? reason.message : String(reason)}`];
17
+ }
18
+
19
+ if (!path.endsWith('.inputmap.json')) {
20
+ throw new Error(
21
+ `validateAssetContentFile: "${path}" is not a supported structured asset (${ASSET_CONTENT_EXTENSIONS.join(', ')})`,
22
+ );
23
+ }
24
+ const result = InputMapFileSchema.safeParse(raw);
25
+ if (result.success) return [];
26
+ return result.error.issues.map((issue) => `${path}: ${issue.path.join('.')}: ${issue.message}`);
27
+ }
@@ -0,0 +1,60 @@
1
+ import { existsSync, readdirSync, statSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ import { ASSET_CONTENT_EXTENSIONS, validateAssetContentFile } from './validate-asset-content';
4
+
5
+ // ---------------------------------------------------------------------------
6
+ // Usage: npx tsx validate-assets.ts [folder]
7
+ //
8
+ // Content-parses every fetched-asset file under <folder>/public/ through the
9
+ // engine's own Zod schema — the same one the runtime rejects a malformed
10
+ // input map with, so a present-but-invalid `.inputmap.json` fails here instead
11
+ // of at load. Defaults to the current
12
+ // working directory.
13
+ //
14
+ // Shipped IN the project template so every scaffolded game gets a working
15
+ // `npm run validate-assets`; the engine is imported via the published
16
+ // the runtime packages' subpath exports, which resolve in both this monorepo and a
17
+ // generated project.
18
+ // ---------------------------------------------------------------------------
19
+
20
+ const args = process.argv.slice(2);
21
+ const rootDir = resolve(args[0] ?? '.');
22
+ const publicDir = join(rootDir, 'public');
23
+
24
+ if (!existsSync(publicDir)) {
25
+ console.error(`No public/ directory found in ${rootDir}`);
26
+ process.exit(1);
27
+ }
28
+
29
+ function collectFiles(dir: string, ext: string): string[] {
30
+ const result: string[] = [];
31
+ if (!existsSync(dir)) return result;
32
+ for (const entry of readdirSync(dir)) {
33
+ const full = join(dir, entry);
34
+ if (statSync(full).isDirectory()) {
35
+ result.push(...collectFiles(full, ext));
36
+ } else if (entry.endsWith(ext)) {
37
+ result.push(full);
38
+ }
39
+ }
40
+ return result;
41
+ }
42
+
43
+ const errors: string[] = [];
44
+ const assetContentFiles = ASSET_CONTENT_EXTENSIONS.flatMap((ext) => collectFiles(publicDir, ext));
45
+ for (const path of assetContentFiles) {
46
+ errors.push(...validateAssetContentFile(path));
47
+ }
48
+
49
+ if (errors.length > 0) {
50
+ console.error(`Asset validation failed with ${errors.length} error(s):\n`);
51
+ for (const err of errors) {
52
+ console.error(` ${err}`);
53
+ }
54
+ process.exit(1);
55
+ } else {
56
+ console.log(
57
+ `Validated ${assetContentFiles.length} asset file(s) ` +
58
+ `(.inputmap.json) in ${rootDir} — all OK`,
59
+ );
60
+ }
@@ -0,0 +1,55 @@
1
+ import { dirname, resolve } from 'node:path';
2
+ import { fileURLToPath, pathToFileURL } from 'node:url';
3
+ import { contributedKindModulePaths, registerKindModule } from '@volter/editor-project/manifest/kind-modules';
4
+ import { loadGameManifestFile } from '@volter/editor-project/manifest/load-file';
5
+
6
+ // ---------------------------------------------------------------------------
7
+ // Usage: npx tsx validate-manifest.ts [manifestPath...]
8
+ //
9
+ // Single source of truth for game-manifest validation, shipped IN the
10
+ // project template (mirrors validate-assets.ts) so every scaffolded game
11
+ // gets a working `npm run validate-manifest`. Validates each given
12
+ // `vgai.project.json` path via `loadGameManifestFile` (parse -> cross-field
13
+ // checks -> resolution) and prints the
14
+ // resolved adapter-root list (id, adapter identity) on success. Any failure
15
+ // prints a descriptive error and
16
+ // exits 1.
17
+ //
18
+ // Defaults to THIS template's own manifest (`vgai.project.json`, a sibling of
19
+ // this script) when no path is given, so `npm run validate-manifest` works
20
+ // out of the box both from the monorepo root and from a scaffolded project.
21
+ // ---------------------------------------------------------------------------
22
+
23
+ const defaultManifestPath = fileURLToPath(new URL('./vgai.project.json', import.meta.url));
24
+
25
+ const args = process.argv.slice(2);
26
+ const manifestPaths = args.length > 0 ? args.map((p) => resolve(p)) : [defaultManifestPath];
27
+
28
+ let hadError = false;
29
+
30
+ for (const manifestPath of manifestPaths) {
31
+ try {
32
+ // The project's own configuration kinds register first (ARCHITECTURE-CORE
33
+ // §The project model): this script runs under tsx, so it can evaluate them.
34
+ for (const modulePath of contributedKindModulePaths(dirname(manifestPath))) {
35
+ registerKindModule(await import(pathToFileURL(modulePath).href), modulePath);
36
+ }
37
+ const resolved = loadGameManifestFile(manifestPath);
38
+ console.log(
39
+ `${manifestPath}: OK — "${resolved.name}" v${resolved.version} (engine ${resolved.engine.version})`,
40
+ );
41
+ for (const root of resolved.roots) {
42
+ console.log(` root "${root.id}" adapter=${root.adapter.identity}`);
43
+ }
44
+ } catch (e) {
45
+ hadError = true;
46
+ console.error(`${manifestPath}: FAILED`);
47
+ console.error(` ${e instanceof Error ? e.message : String(e)}`);
48
+ }
49
+ }
50
+
51
+ if (hadError) {
52
+ process.exit(1);
53
+ } else {
54
+ console.log(`Validated ${manifestPaths.length} manifest(s) — all OK`);
55
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * This game's ADAPTER — the server side of the editor protocol.
3
+ *
4
+ * The editor is a universal CLIENT of a fixed protocol, and every game
5
+ * supplies its own adapter: a statically evaluable binding table mapping this
6
+ * project's regions to the libraries that serve them, its document table, and
7
+ * whatever it declares about itself. An adapter's SIZE measures this game's
8
+ * distance from native — which is why yours fits on a screen.
9
+ *
10
+ * Regions are derived mechanically from `vgai.project.json`'s `roots[]` — add
11
+ * a root to the manifest and its region appears here for free, with no edit to
12
+ * this file. `regionIncludes` states the PARAMETERS that derivation cannot
13
+ * produce: which source files each region owns beyond its entry's import reach.
14
+ * The rule stays selected; only the parameters are declared.
15
+ *
16
+ * WHY THAT TABLE IS NOT OPTIONAL. A file's region normally comes from which
17
+ * root's import closure reaches it — but reach is what the dev server's module
18
+ * graph holds AT THAT MOMENT, and a prefab opened through its own colocated
19
+ * story is reached from nothing. The editor stamps one source-id attribute per
20
+ * file (`userData-oid` for the R3F reconciler, `data-oid` for react-dom), and
21
+ * `data-oid` on a THREE object is not a degraded stamp: fiber pierces the dash,
22
+ * writes `object.data`, and THROWS the next time that object is applied to. So
23
+ * every directory of this game's R3F source says so here, once, and the answer
24
+ * stops depending on which module the browser asked for first. Add a component
25
+ * folder that renders R3F and add it to this list; the editor names the file
26
+ * and this fix (`OID001`/`OID003`) if you forget.
27
+ *
28
+ * What else IS stated below is this game's own document table — scenes and
29
+ * prefabs are its first two kinds; a page, a model, a bake are kinds the same
30
+ * way — because only
31
+ * this game knows where its scenes are declared:
32
+ *
33
+ * - `scenesFromEntrypointSelection` reads `src/world.tsx`'s module-level
34
+ * `const scenes = { … }` swap slot and answers one entry per key. That
35
+ * reference is LOAD-BEARING — the world itself mounts through it — so it
36
+ * cannot drift the way a `src/scenes/` folder convention can. Every entry
37
+ * becomes a viewport document in the editor, and `default` is the one open
38
+ * when the project opens.
39
+ * - `prefabsFromStories` reads the colocated portable-CSF stories: a
40
+ * component is a placeable prefab exactly when a story's `meta.component`
41
+ * names it.
42
+ *
43
+ * Drop `selection` (and name no region) for a world that mounts ONE
44
+ * composition with no swap slot; the finder then answers with the single-scene
45
+ * degenerate table instead.
46
+ *
47
+ * Unknown keys are rejected by name — this file is validated the moment it is
48
+ * evaluated, so a typo fails here rather than becoming silence in the editor.
49
+ */
50
+
51
+ import { defineAdapter } from '@volter/editor-project/adapter/adapter-module';
52
+
53
+ export default defineAdapter({
54
+ regionIncludes: {
55
+ // Every `.tsx` under these folders renders on the `world` root's `three`
56
+ // surface. Scoped to `.tsx` on purpose: the declaration places JSX modules
57
+ // on a reconciler, and the plain `.ts` beside them (a capability's math, a
58
+ // shared state helper an overlay also imports) renders nothing at all.
59
+ world: {
60
+ include: [
61
+ 'src/components/**/*.tsx',
62
+ 'src/prefabs/**/*.tsx',
63
+ 'src/scenes/**/*.tsx',
64
+ 'src/lib/reflections/**/*.tsx',
65
+ 'src/lib/static-batch/**/*.tsx',
66
+ ],
67
+ },
68
+ },
69
+ documents: {
70
+ find: [
71
+ { finder: 'scenesFromEntrypointSelection', regions: ['world'], selection: 'scenes' },
72
+ { finder: 'prefabsFromStories' },
73
+ ],
74
+ default: 'main',
75
+ },
76
+ });
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "./node_modules/@volter/editor-project/schemas/vgai-project.schema.json",
3
+ "manifestVersion": 2,
4
+ "name": "My Game",
5
+ "appId": "com.example.mygame",
6
+ "version": "0.1.0",
7
+ "engine": {
8
+ "version": "0.5.57"
9
+ },
10
+ "resolution": {
11
+ "width": 1280,
12
+ "height": 720
13
+ },
14
+ "configurations": [
15
+ { "id": "web", "kind": "bundle", "script": "build", "args": ["--base", "./"] }
16
+ ],
17
+ "roots": [
18
+ {
19
+ "id": "world",
20
+ "adapter": "three",
21
+ "entry": "src/world.tsx"
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,247 @@
1
+ import { createRequire } from 'node:module';
2
+ import path from 'node:path';
3
+ import { defineConfig } from 'vite';
4
+ // Config-relative TS imports get bundled the same way — that is what lets the
5
+ // project's executable Zod schemas reach the build-time check below.
6
+ import { manifestEntryModulesPlugin } from './manifest-entry-modules-plugin';
7
+ import manifest from './vgai.project.json';
8
+
9
+ /** A vgai runtime package served as SOURCE, the way the editor serves it. */
10
+ const packageSource = (name: string) =>
11
+ path.join(path.dirname(createRequire(import.meta.url).resolve(`${name}/package.json`)), 'src');
12
+
13
+ /**
14
+ * Run-4 dry-run friction #2 — auto-detect drvfs the SAME way the editor dev
15
+ * server does (`packages/editor/server/server-utils.ts`'s
16
+ * `resolveWatcherPollOptions`, and `dev.ts`'s own `projectOnDrvfs` check):
17
+ * on WSL, a project living on a Windows drive (`/mnt/<drive>/…`) never fires
18
+ * inotify, so without polling this standalone server (`npm run dev:standalone`)
19
+ * silently misses every external file edit — the same failure mode
20
+ * `dev.ts`'s comment documents for the editor. Before this fix, this file
21
+ * read ONLY `VGAI_WATCH_POLL`, so a project on drvfs polled in the editor
22
+ * but NOT in the standalone server — the two disagreed for no reason a
23
+ * developer could see.
24
+ *
25
+ * The editor's server utilities are not part of the project's package
26
+ * contract, so this
27
+ * duplicates the tiny drvfs check rather than reaching across a package
28
+ * boundary that doesn't exist here — same contract as the editor's own
29
+ * helper: `VGAI_WATCH_POLL=0` forces polling off anywhere, `=1`/`=<ms>`
30
+ * forces it on with that interval, unset auto-enables on a drvfs mount.
31
+ */
32
+ function resolveWatchOption(): { usePolling: true; interval: number } | undefined {
33
+ const raw = process.env['VGAI_WATCH_POLL'];
34
+ if (raw !== undefined && raw !== '') {
35
+ if (raw === '0') return undefined;
36
+ const ms = Number(raw);
37
+ return { usePolling: true, interval: Number.isFinite(ms) && ms > 1 ? ms : 1000 };
38
+ }
39
+ const onDrvfs = process.platform === 'linux' && /^\/mnt\/[a-z]\//i.test(__dirname);
40
+ return onDrvfs ? { usePolling: true, interval: 1000 } : undefined;
41
+ }
42
+
43
+ /**
44
+ * `VITE_ALLOWED_HOSTS` — `all` allows any Host header, a comma list allows
45
+ * exactly those, unset leaves Vite's own default alone.
46
+ *
47
+ * Returned as a SPREADABLE fragment rather than a value, because the "unset"
48
+ * case must omit the key entirely: this project compiles under
49
+ * `exactOptionalPropertyTypes`, where `allowedHosts: undefined` is a type
50
+ * error against `ServerOptions`'s optional `allowedHosts?: true | string[]`.
51
+ * Vite reads an absent key and an explicitly-undefined one identically, so
52
+ * the spread is behavior-preserving and the types now agree.
53
+ */
54
+ function resolveAllowedHosts(): { allowedHosts?: true | string[] } {
55
+ const raw = process.env['VITE_ALLOWED_HOSTS'];
56
+ if (raw === 'all') return { allowedHosts: true };
57
+ const hosts = raw?.split(',').filter(Boolean);
58
+ return hosts ? { allowedHosts: hosts } : {};
59
+ }
60
+
61
+ export default defineConfig({
62
+ // Build-path validation (build-only): every
63
+ // registered data asset must still parse through its schema (the EXACT
64
+ // parse defineData runs at load), every `"file#key"` ref must resolve, and
65
+ // no `src/tools/` module may reach the shipped bundle (§4: tools are
66
+ // editor-only — never serve testers a build with dev/cheat surfaces).
67
+ // The AUTOMATIC JSX runtime, set here rather than left to tsconfig.
68
+ //
69
+ // This project has no `@vitejs/plugin-react`; Vite's built-in esbuild does
70
+ // the JSX transform, and it picks the runtime from the tsconfig nearest the
71
+ // FILE. That covers `src/**`, but the vgai runtime packages are served as
72
+ // source out of their installed directories (see the aliases below), where
73
+ // the project's tsconfig does not reach — so their `.tsx` (e.g.
74
+ // `src/lib/react-root/react-root-adapter.tsx (formerly engine)`) compiled with the CLASSIC runtime, emitting
75
+ // bare `React.createElement` calls into a module that never imports React.
76
+ // The scaffold's game page died on `ReferenceError: React is not defined`.
77
+ esbuild: { jsx: 'automatic' },
78
+ plugins: [manifestEntryModulesPlugin(manifest)],
79
+ resolve: {
80
+ alias: {
81
+ '@volter/editor-project': packageSource('@volter/editor-project'),
82
+ '@volter/threejs-runtime': packageSource('@volter/threejs-runtime'),
83
+ '@volter/game-runtime': packageSource('@volter/game-runtime'),
84
+ },
85
+ // react/react-dom dedupe (GH #123): the aliases above resolve
86
+ // at the SOURCE-LINKED runtime checkout, so when Vite bundles the
87
+ // game runtime's react bridge module (`src/react/world-state.tsx` — the
88
+ // `<WorldProvider>` / `useWorldState` HUD bridge), module resolution walks
89
+ // up from THAT file and finds the CHECKOUT's `node_modules/react` — a
90
+ // different physical copy (often a different version) than this
91
+ // project's own. Two Reacts in one page means the Context object
92
+ // `WorldProvider` creates is not the one this project's tree looks up
93
+ // via `useContext`, so the documented HUD pattern crashes with "Invalid
94
+ // hook call" / "Cannot read properties of null (reading 'useContext')"
95
+ // on first render.
96
+ // `dedupe` forces Vite to collapse both import paths onto a single
97
+ // physical copy. Same fix, same reasoning, already applied for the
98
+ // identical dual-instance failure in this repo's own root
99
+ // `vite.config.ts` and in `examples/r3f-first-party/vite.config.ts`.
100
+ // '@react-three/fiber' joined the list with the D24 R3F default world:
101
+ // `src/world.tsx`'s drei imports and the source-served
102
+ // `@volter/game-runtime/world3d-react` adapter must agree on ONE fiber instance, or
103
+ // drei's hooks can't see the adapter's R3F root context and the fiber
104
+ // crashes pre-commit with "R3F: Hooks can only be used within the
105
+ // Canvas component!" (standalone-page-only — the editor's own server
106
+ // already optimizes fiber uniformly; browser-lane proof: 37-template-default-
107
+ // world's standalone test).
108
+ dedupe: ['react', 'react-dom', 'three', '@react-three/fiber', 'pixi.js', '@pixi/react'],
109
+ },
110
+ optimizeDeps: {
111
+ // Top-level `esbuild.jsx` does not govern dependency optimization. The
112
+ // installed `@volter/game-runtime/world3d-react` entry contains TSX, so its cold
113
+ // prebundle needs the automatic runtime too or it emits a bare `React`.
114
+ esbuildOptions: { jsx: 'automatic' },
115
+ // Pre-bundle deps that are only reached through the dynamically imported
116
+ // example modules (or injected by the JSX transform, like the React
117
+ // runtimes) so Vite does not discover them at runtime, re-optimize, and
118
+ // hard-reload the standalone runtime the first time a game selects them —
119
+ // that mid-session reload resets `window.__vgaiScene`/the menu out from
120
+ // under whatever is driving the page (the dep-optimize-reload flake the
121
+ // 04 spec hit: the first cold select of `editor-tutorial` reloaded on
122
+ // `react/jsx-dev-runtime`). Verified against a cold scaffold: with these
123
+ // listed, a full sweep of the switcher games triggers zero page reloads.
124
+ include: [
125
+ // BARE `react`/`react-dom`, not just the jsx-runtime subpaths below.
126
+ // The engine is served as SOURCE to a scaffolded project, so Vite's
127
+ // startup dep scan does not walk far enough to discover engine modules
128
+ // that do `import { createElement } from 'react'`. Unoptimized, Vite
129
+ // serves React's raw CJS `index.js`, which has no named ESM exports, and
130
+ // the game page dies before boot with
131
+ // The requested module '/node_modules/react/index.js' does not
132
+ // provide an export named 'createElement'
133
+ // A fresh scaffold + a live bot run hit exactly this against
134
+ // the published 0.5.1 CLI: the shipped bot failed on its own
135
+ // scaffold. Listing them here forces the same pre-bundle pass as the
136
+ // subpaths, which also keeps them in ONE React instance (see `dedupe`
137
+ // above) rather than a second copy behind a different optimized chunk.
138
+ 'react',
139
+ 'react-dom',
140
+ 'react/jsx-runtime',
141
+ 'react/jsx-dev-runtime',
142
+ 'react-dom/client',
143
+ // Reached through the generated manifest-entry module after startup;
144
+ // listing them prevents a first-boot optimizer reload.
145
+ 'three',
146
+ 'zod',
147
+ // The R3F default world: prebundle fiber and drei in the SAME
148
+ // optimizer pass so they share one fiber chunk — and so the
149
+ // source-served `@volter/game-runtime/world3d-react` adapter's bare fiber import
150
+ // rewrites to that same chunk. Split instances = drei hooks outside
151
+ // the adapter's root context (see the dedupe note above).
152
+ '@react-three/fiber',
153
+ '@react-three/drei',
154
+ ],
155
+ // `@volter/game-runtime/runtime/mount-game` must stay SOURCE, or the adapter registry
156
+ // splits into two instances and nothing mounts.
157
+ //
158
+ // The registry is module-level state shared by `mount-game` (which reads
159
+ // it) and whatever registers a factory into it — for `dom` roots that is
160
+ // now `src/lib/react-root` (the `react-root` capability), which used to be
161
+ // the engine package's own `react/root-adapter`.
162
+ //
163
+ // The original split: that engine file was a `.tsx` the optimizer REFUSES
164
+ // ("Cannot optimize dependency"), so it was always served as source, while
165
+ // `mount-game` is a `.ts` under `node_modules` the optimizer happily
166
+ // pre-bundled — giving the two halves separate copies of the registry.
167
+ // `main.ts` registered into one and `mountGameFromManifest` read the
168
+ // other, so a default scaffold died with `root "ui" has no registered
169
+ // adapter factory` and rendered an empty page.
170
+ //
171
+ // Now that the registering file is PROJECT source, both it and `main.ts`
172
+ // resolve `@volter/game-runtime/runtime/mount-game` the same way, so the specific split
173
+ // above can no longer form. The exclusion stays anyway: it is what pins
174
+ // this registry to ONE instance regardless of which capability registers
175
+ // into it, and a project that swaps React for Vue here must not have to
176
+ // rediscover this. Cheap insurance against a failure whose symptom is a
177
+ // blank page.
178
+ exclude: ['@volter/game-runtime/runtime/mount-game'],
179
+ },
180
+ server: {
181
+ port: 5180,
182
+ // Fail loudly instead of silently rebinding to 5181+ if 5180 is still
183
+ // held by a lingering prior instance. Without this, a stale server left
184
+ // over from an earlier run answers the NEW server's readiness
185
+ // probe (which targets the fixed 5180 URL) while the real new instance
186
+ // sits on a different port nobody is talking to -- a hazard previously
187
+ // observed causing a browser-lane spec to hang waiting on the wrong server. See
188
+ // packages/editor/e2e/helpers/server.ts's `startStandaloneServer`.
189
+ strictPort: true,
190
+ // Poll for file changes instead of relying on inotify — AUTO-ENABLED on
191
+ // WSL when the project lives on a Windows drive (/mnt/c, drvfs: inotify
192
+ // never fires there), or edits to src/data/ or src/ generally silently never
193
+ // hot-reload into the running game.
194
+ // `VGAI_WATCH_POLL` is an explicit override (`=0` off anywhere, `=1`/
195
+ // `=<ms>` on anywhere) — see `resolveWatchOption` above, which the
196
+ // EDITOR dev server's own auto-detect mirrors, so one behavior covers
197
+ // both surfaces without the developer having to set anything. Safe to
198
+ // enable here: this standalone server only watches the project tree,
199
+ // which is small.
200
+ //
201
+ // VGAI_NO_WATCH=1 (set by a harness driving this page):
202
+ // disable watching entirely — a mid-run Vite reload resets
203
+ // `window.__vgai`/whatever is driving the standalone page out from under
204
+ // an in-flight run (the hollowstone reload-kills-the-run
205
+ // lesson). Mutually exclusive with the poll option (same `server.watch`
206
+ // key) — NO_WATCH wins when both would otherwise apply.
207
+ ...(process.env['VGAI_NO_WATCH']
208
+ ? { watch: null }
209
+ : // Watch source; never watch output: a build (`npm run build`,
210
+ // `vercel build`) rewriting dist/ or .vercel/output/ inside the
211
+ // project root would otherwise read as a source change and reload
212
+ // the page out from under an in-flight run.
213
+ { watch: { ...resolveWatchOption(), ignored: ['**/.vercel/**', '**/dist/**'] } }),
214
+ ...resolveAllowedHosts(),
215
+ },
216
+ build: {
217
+ target: 'es2022',
218
+ // The engine has several independently cacheable heavyweight domains. Keep
219
+ // them out of one 4+ MiB entry chunk so browsers can fetch/cache them in
220
+ // parallel and a change to game code does not invalidate every vendor byte.
221
+ // 2.25 MiB is the measured raw ceiling for the largest unavoidable vendor
222
+ // domain (Rapier); a game/engine chunk reaching it still warns.
223
+ chunkSizeWarningLimit: 2304,
224
+ rollupOptions: {
225
+ output: {
226
+ manualChunks(id) {
227
+ if (!id.includes('/node_modules/')) return undefined;
228
+ if (id.includes('/@dimforge/rapier3d')) return 'vendor-physics';
229
+ if (id.includes('/three/') || id.includes('/postprocessing/')) return 'vendor-three';
230
+ if (id.includes('/three.quarks/') || id.includes('/quarks.core/')) {
231
+ return 'vendor-particles';
232
+ }
233
+ if (id.includes('/recast-navigation')) return 'vendor-navigation';
234
+ if (id.includes('/react/') || id.includes('/react-dom/') || id.includes('/scheduler/')) {
235
+ return 'vendor-react';
236
+ }
237
+ if (id.includes('/tone/') || id.includes('/standardized-audio-context/')) {
238
+ return 'vendor-audio';
239
+ }
240
+ if (id.includes('/xstate/') || id.includes('/gsap/')) return 'vendor-animation';
241
+ if (id.includes('/colyseus') || id.includes('/@colyseus/')) return 'vendor-network';
242
+ return undefined;
243
+ },
244
+ },
245
+ },
246
+ },
247
+ });
@@ -0,0 +1,63 @@
1
+ # Dependencies
2
+ node_modules
3
+
4
+ # Build output
5
+ dist/
6
+ dist-server/
7
+ *.local
8
+
9
+ # Vite cache
10
+ .vite/
11
+
12
+ # The editor's machine-local state. The rest of .vgai/ (overlays, thumbnail,
13
+ # provenance, generations, assets) is project data and is committed.
14
+ .vgai/editor-state.json
15
+ .vgai/session.json
16
+ .vgai/collaboration.json
17
+ .vgai/workbench.json
18
+ .vgai/captures/
19
+ .vgai/tmp/
20
+ .vgai/last-run/
21
+ .vgai/prev-run/
22
+ .vgai/screenshots/
23
+ .vgai/recordings/
24
+ .vgai/check-idioms.json
25
+ .vgai/tripwire-gate.json
26
+
27
+ # Session and Play logs
28
+ logs/
29
+ *.jsonl
30
+
31
+ # Playwright / test output
32
+ test-results/
33
+ playwright-report/
34
+ .playwright-mcp/
35
+
36
+ # OS junk
37
+ .DS_Store
38
+ Thumbs.db
39
+
40
+ # Local env files
41
+ .env
42
+ .env.local
43
+ .env.*.local
44
+
45
+ # ztrack (added by ztrack init)
46
+ .volter/tracker/tracker.sqlite
47
+ .volter/tracker/tracker.sqlite-*
48
+ .volter/tracker/tracker.sqlite.lock
49
+ .volter/tracker/local-store.json
50
+ .volter/agent-dispatch/
51
+ .volter/github/
52
+ .volter/sync/
53
+ .volter/.ztrack-loop.json
54
+ .volter/.ztrack-loop-iter-*
55
+ .volter/.ztrack-loop-exempt-*
56
+ .volter/.ztrack-loop-capped.json
57
+ # ztrack also writes .volter/tracker/.gitignore covering the audit files below.
58
+ # Restated here because npm strips every nested .gitignore from a package
59
+ # tarball (the same fact `restorePackagedTemplateDotfiles` exists for), so a
60
+ # project scaffolded from the PACKAGED editor never receives that file.
61
+ .volter/tracker/.audit.jsonl
62
+ .volter/tracker/.audit-state.json
63
+ .volter/tracker/.audit.lock
@@ -0,0 +1,83 @@
1
+ /* THE GAME EDITOR'S OWN SPLASH — what this product draws into the kit's opening cover
2
+ (`VgaiProduct.cover`, `packages/editor/workbench/src/vgaiCover.ts`).
3
+
4
+ IT SPELLS CLASSIC'S PALETTE, for the same reason the model editor's spells Blender's: the
5
+ cover paints BEFORE any theme extension is registered — the web workbench's first frame is
6
+ the page config's `initialColorTheme` — so a splash written against `--vscode-*` would wear
7
+ the workbench's default dark for exactly the seconds it exists instead of this product's
8
+ look. Classic is the editor's own Graphite and it ships no theme extension at all, so these
9
+ values come from `@vgai/editor-sdk`'s `widgets/theme.ts`, named beside them:
10
+
11
+ #1a1a1a GRAPHITE_BG[0] surface.shell — the window's outermost band
12
+ #242424 GRAPHITE_BG[1] surface.panel
13
+ #c5c8ce GRAPHITE_TEXT[1] content.primary
14
+ #9aa0a6 GRAPHITE_TEXT[2] content.muted
15
+ #333333 GRAPHITE_BORDER[1] boundary.default
16
+ #579eff GRAPHITE_ACCENT accent.default
17
+
18
+ Nothing here names a font: Classic is the workbench's own UI font, which is what this
19
+ product wearing no look extension means. */
20
+
21
+ .vgai-game-cover {
22
+ position: absolute;
23
+ inset: 0;
24
+ display: flex;
25
+ flex-direction: column;
26
+ align-items: center;
27
+ justify-content: center;
28
+ gap: 10px;
29
+ background: #1a1a1a;
30
+ color: #c5c8ce;
31
+ }
32
+
33
+ /* THE MARK: a play triangle inside the panel surface — the one glyph this product's whole
34
+ transport is built around. Inline SVG in the product's own markup, so there is no image to
35
+ fetch and the first frame is the first frame. */
36
+ .vgai-game-cover-mark {
37
+ width: 56px;
38
+ height: 56px;
39
+ opacity: 0.92;
40
+ }
41
+
42
+ .vgai-game-cover-title {
43
+ font-size: 26px;
44
+ font-weight: 600;
45
+ letter-spacing: 0.02em;
46
+ }
47
+
48
+ .vgai-game-cover-folder {
49
+ font-size: 12px;
50
+ color: #9aa0a6;
51
+ }
52
+
53
+ /* Indeterminate ON PURPOSE: this product knows WHAT it is waiting for and not how far along it
54
+ is, and a bar that invented a percentage would be a lie a person can see. */
55
+ .vgai-game-cover-rail {
56
+ position: relative;
57
+ width: 220px;
58
+ height: 2px;
59
+ margin-top: 6px;
60
+ overflow: hidden;
61
+ background: #333333;
62
+ }
63
+
64
+ .vgai-game-cover-rail::after {
65
+ content: "";
66
+ position: absolute;
67
+ top: 0;
68
+ bottom: 0;
69
+ width: 40%;
70
+ background: #579eff;
71
+ animation: vgai-game-cover-travel 1.25s ease-in-out infinite;
72
+ }
73
+
74
+ @keyframes vgai-game-cover-travel {
75
+ 0% { left: -40%; }
76
+ 100% { left: 100%; }
77
+ }
78
+
79
+ .vgai-game-cover-state {
80
+ font-size: 11px;
81
+ min-height: 14px;
82
+ color: #9aa0a6;
83
+ }