@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,363 @@
1
+ # Editor-control reference
2
+
3
+ ## Contents
4
+
5
+ - [CLI invocation](#cli-invocation--use-the-project-local-cli)
6
+ - [Quick start](#quick-start)
7
+ - [Connection precondition](#precondition-most-verbs-need-a-connected-browser-tab-not-just-vgai-edit-running)
8
+ - [**Drive the running game — `npx volter-game-editor eval`**](#drive-the-running-game--vgai-eval-the-general-door)
9
+ - [CLI reference](#cli-reference)
10
+ - [Entity IDs](#entity-ids)
11
+ - [Typical workflows](#typical-workflows)
12
+ - [SDK](#sdk-programmatic-access)
13
+
14
+ Use the `vgai` CLI to create projects, launch the editor, and control it programmatically. The editor is a browser-based WebGL app; the CLI sends commands to it over HTTP.
15
+
16
+ **Driving a running GAME is a different question from driving the editor**, and
17
+ it has one answer: `npx volter-game-editor eval`. Read that section before the verb list — the
18
+ verbs cover the editor, and a game's own commands are never verbs.
19
+
20
+ ## CLI invocation — use the project-local CLI
21
+
22
+ Inside this scaffold, invoke every CLI verb as `npm run --silent vgai -- <verb>`. The
23
+ script points at the versioned `@volter/game-editor` installed with this project. Never
24
+ use a bare global `vgai` command here: another installation can own that binary
25
+ and can silently target the wrong session or apply different manifest rules.
26
+
27
+ ## Quick Start
28
+
29
+ ```bash
30
+ npm run --silent vgai -- create "My Game" # Scaffold a new project in ./my-game
31
+ cd my-game
32
+ npm run --silent vgai -- edit . # Launch editor + open browser
33
+ npm run --silent vgai -- play # Enter play mode
34
+ npm run --silent vgai -- restart # Remount all game roots — acks only when the session is READY
35
+ # again (relay up, tab attached, play measured running); exits
36
+ # non-zero naming the gap otherwise. No sleep-then-play dance.
37
+ npm run --silent vgai -- status # Check editor state
38
+ npm run --silent vgai -- eval --list # Everything you can drive — ask this FIRST
39
+ ```
40
+
41
+ **Port cross-talk:** the default editor port (5173) is shared across every
42
+ VGAI project on the machine. `npm run --silent vgai -- edit .` never silently retargets a
43
+ DIFFERENT project's already-running editor — if one is already open
44
+ elsewhere, this one starts a second instance on a fresh free port and prints
45
+ that URL instead (use `--switch` to retarget the existing one on purpose).
46
+ If you might have another vgai project's tab open in the browser already,
47
+ don't assume it's this project: read the URL `npx volter-game-editor edit` actually prints
48
+ (check `npx volter-game-editor sessions` to see every live session's port → project), or pass
49
+ `npx volter-game-editor edit --port <n>` to pin an explicit port for this project so a stale
50
+ tab from a different project can't be mistaken for this session.
51
+
52
+ ## Precondition: most verbs need a connected browser tab, not just `npx volter-game-editor edit` running
53
+
54
+ `npx volter-game-editor edit` starts the dev server and prints a URL — it does **not** by
55
+ itself give the CLI anything to talk to. Every control verb (`play`,
56
+ `select`, `focus`, `show`, `status`, ...) is relayed over HTTP/SSE to an
57
+ actual browser tab that has the editor page open and running; the dev
58
+ server just serves that page. Running `npx volter-game-editor edit` and then immediately
59
+ calling `npx volter-game-editor status` with **no tab ever opened** does not error — it
60
+ returns the last **cached** state from a previous session (or an empty
61
+ default), and prints a prominent multi-line `STALE SNAPSHOT` banner to
62
+ stderr (with the snapshot's age, if known) instead of a hard error, so
63
+ scripts that legitimately want last-known state still get it. Read that
64
+ banner: it means the JSON below it is stale, not live. Before trusting
65
+ `npx volter-game-editor status` (or issuing `play`/`select`/etc. and expecting them to do
66
+ anything), make sure a tab is actually open on the printed URL — a real
67
+ browser, or a Playwright/Puppeteer page you navigated to it yourself.
68
+
69
+ **`--no-open`: skip the browser auto-open.** Only for contexts where NO
70
+ human could possibly be watching (unattended CI). On WSL the auto-open
71
+ reaches the WINDOWS browser, so headless WSL is not a reason to pass this —
72
+ let `npx volter-game-editor edit` auto-open and tell the user the printed URL instead. The
73
+ one legitimate case is a fully unattended CI job that then drives the
74
+ editor itself, e.g. via Playwright:
75
+
76
+ ```bash
77
+ npm run --silent vgai -- edit . --no-open # ONLY when no human could be watching (e.g. CI)
78
+ ```
79
+
80
+ ```ts
81
+ // then, in a Playwright script, open a page against the printed URL —
82
+ // use 'load', NOT 'networkidle': the editor dev server keeps a
83
+ // long-lived SSE/websocket connection open for live commands, so the
84
+ // network never goes idle and `waitUntil: 'networkidle'` hangs forever.
85
+ await page.goto('http://localhost:5173', { waitUntil: 'load' });
86
+ ```
87
+
88
+ Once that page has loaded, it registers as a connected client and `vgai
89
+ status`/`npx volter-game-editor play`/etc. from another shell will reach it for real.
90
+
91
+ ## Drive the running game — `npx volter-game-editor eval`, the general door
92
+
93
+ **This is the section to read before the verb list below.** A first-party
94
+ game's control and readout surface is its own ordinary exported modules. There
95
+ is no command registry, provider registry, or fixed game vocabulary to learn.
96
+ `npx volter-game-editor eval` runs literal JS against this project's live session with
97
+ `{ editor, game, page, tools, session }` from `@volter/game-live` already in scope:
98
+
99
+ ```bash
100
+ npm run --silent vgai -- eval --list # what's in scope (no session needed)
101
+ npm run --silent vgai -- eval 'return game.run(async ({ modules }) => { const arena = await modules("src/sim/arena.ts"); return arena.readArena(); })'
102
+ npm run --silent vgai -- eval 'return game.run(async ({ modules }) => { const arena = await modules("src/sim/arena.ts"); arena.setupBossWave(); return arena.readArena(); })'
103
+ npm run --silent vgai -- eval 'return game.run(async ({ modules }) => { const tester = await modules("src/bot/tester-station.ts"); return tester.hireTester("sweep"); })'
104
+ npm run --silent vgai -- eval 'await game.waitSimTime({simSeconds: 4})'
105
+ npm run --silent vgai -- eval 'await editor.grid(false)' # the editor half, same door
106
+ ```
107
+
108
+ `--list` walks the live binding objects themselves rather than a written list,
109
+ so it cannot go stale — ask it rather than trusting any prose, including this
110
+ page. The game's own source tells you which module functions exist; the
111
+ template's `src/tools/use-game-modules.ts` shows how a literal contribution
112
+ reads the exact same running instances.
113
+
114
+ **NEVER pilot a realtime game from the developer REPL, with synthetic key
115
+ events, rAF loops, wall-clock sleeps, or direct `window.__vgai*`/scene-graph
116
+ reads.** Arrange expensive preconditions with exported setup functions, then
117
+ hire the resident tester to act through the game's real input store.
118
+ `waitSimTime` advances deterministically even while the editor tab is HIDDEN.
119
+ `npx volter-game-editor status` reports the tab's own
120
+ visibility MEASUREMENTS (`visibilityReport` — the reported value, its age,
121
+ and a live tick probe when the loop looks stopped) instead of letting
122
+ `connected: true` read as usable — and instead of asserting a story:
123
+ treat its readings as evidence with an age, never as a verdict about
124
+ what is on the user's screen. A result obtained by puppeteering the page is
125
+ not evidence: it can agree with the pixels while disagreeing with the state
126
+ providers every other tool reads.
127
+
128
+ ## When to Use This Skill
129
+
130
+ - **`create` / `edit`** — bootstrap and launch projects
131
+ - **`eval`** — drive or read the running game AND editor; the door above
132
+ - **`play` / `stop` / `restart` / `status` / `screenshot`** — the everyday loop
133
+ - You do NOT need the CLI for scene/asset changes — a three root's document IS its TSX source (`src/world.tsx`, `src/scenes/`, `src/prefabs/`), so editing the world is editing those files; the dev server validates every save and surfaces failures loudly
134
+
135
+ ## CLI Reference
136
+
137
+ ### Project Management (no running editor needed)
138
+
139
+ ```bash
140
+ npm run --silent vgai -- create <name> [location] # Empty project (default location: ./<name>)
141
+ npm run --silent vgai -- create <name> [location] --template game # Game composition; also empty, website, models
142
+ npm run --silent vgai -- edit [project-path] # Launch editor for project (default: cwd).
143
+ # Reuses the session already serving THIS
144
+ # project; otherwise starts a NEW instance on
145
+ # a free port rather than silently retargeting
146
+ # a different project's editor (see the port
147
+ # cross-talk note above).
148
+ # --switch retarget an existing instance
149
+ # instead of starting a new one
150
+ # --port <n> force a port for a fresh instance
151
+ npm run --silent vgai -- sessions # List live editor sessions (port -> project)
152
+ ```
153
+
154
+ ### Scene & Project Info (needs running editor)
155
+
156
+ ```bash
157
+ npm run --silent vgai -- open <path> # Switch project in running editor
158
+ npm run --silent vgai -- project # Show current project info
159
+ npm run --silent vgai -- projects # List recent projects
160
+ ```
161
+
162
+ `open` / `project` / `projects` stay first-class for a concrete reason: project
163
+ management lives on `EditorClient` and was never lifted onto `@volter/editor-live`'s
164
+ `editor`, so there is no `eval` equivalent to point them at.
165
+
166
+ ### Play Control
167
+
168
+ ```bash
169
+ npm run --silent vgai -- play # Enter play mode
170
+ npm run --silent vgai -- restart # Dispose + remount every game root — waits out a relaunching dev
171
+ # server, re-ensures the one tab, and acks only once play is
172
+ # measured running (a failure names the next step)
173
+ npm run --silent vgai -- stop # Exit play mode
174
+ ```
175
+
176
+ `pause` / `resume` / `step` were REMOVED — `npx volter-game-editor eval 'editor.pause()'`,
177
+ `editor.resume()`, `editor.step(1)`.
178
+
179
+ Component-source HMR swaps class prototypes onto live instances. That keeps
180
+ runtime state and avoids an editor reload, but it deliberately does not rerun
181
+ `init()`. Use `restart` after changing init-time debug registrations,
182
+ listeners, generated resources, component ownership, or other setup/teardown
183
+ behavior. The same action is always available in the Play bar; when the editor
184
+ knows a source change is structurally unsafe it highlights the button with the
185
+ reason.
186
+
187
+ ### Navigation, Panels, and Display — REMOVED, use `npx volter-game-editor eval`
188
+
189
+ Every verb in this group was a 1:1 wrapper over a method `eval` already
190
+ exposes, so they were deleted rather than kept as aliases. Typing one now
191
+ errors with its exact replacement:
192
+
193
+ ```bash
194
+ npm run --silent vgai -- eval 'editor.select("<entityId>")' # or "all"
195
+ npm run --silent vgai -- eval 'editor.deselect()'
196
+ npm run --silent vgai -- eval 'editor.focus("<entityId>")' # omit arg = current selection
197
+ npm run --silent vgai -- eval 'editor.view("top")' # top|front|right|perspective
198
+ npm run --silent vgai -- eval 'editor.showPanel("inspector")' # viewport|inspector|console|build
199
+ npm run --silent vgai -- eval 'editor.openAsset("<path>", "<kind>")'
200
+ npm run --silent vgai -- eval 'editor.grid(false)'
201
+ npm run --silent vgai -- eval 'editor.helpers(true)'
202
+ npm run --silent vgai -- eval 'editor.stats(true)'
203
+ npm run --silent vgai -- eval 'editor.shading("wireframe")' # solid|unlit|wireframe|normals|overdraw
204
+ ```
205
+
206
+ The advantage is not brevity — it is that one door composes. Selecting an
207
+ entity, framing it, and capturing the result is a single round trip instead of
208
+ four processes:
209
+
210
+ ```bash
211
+ npm run --silent vgai -- eval 'await editor.select(id); await editor.focus(); await editor.shading("wireframe"); return editor.screenshot()'
212
+ ```
213
+
214
+ Shading is temporary, render-only editor state: it never rewrites scene or
215
+ game materials and is not saved into a scene. Scene and Game remember separate
216
+ session-local modes; `shading` targets whichever viewport is active. Game
217
+ shading applies to compatible first-party Three.js roots, while React/Pixi and
218
+ other adapter-owned layers continue rendering natively. The Scene helper menu
219
+ also exposes independent lights, cameras, colliders, skeletons, audio, and
220
+ bounds toggles; use `setHelperType()` through the SDK when you need one category.
221
+
222
+ ### State
223
+
224
+ ```bash
225
+ npm run --silent vgai -- status # Print full editor state as JSON
226
+ ```
227
+
228
+ The `status` command returns:
229
+ - `playState` — `stopped`, `playing`, or `paused`
230
+ - `selectedEntityId` / `selectedEntityIds` — current selection
231
+ - `activeViewportTab` — `scene` or `game`
232
+ - `showGrid`, `showHelpers`, `showStats`, `shadingMode` — display state
233
+ - `transformMode`, `transformSpace`, `snapEnabled` — tool state
234
+ - `entityCount` — number of entities in the scene
235
+ - `savePath` — path to the currently open scene file
236
+ - `connected` — whether an editor browser tab is live right now; if
237
+ `false`, everything else in the payload is a cached snapshot (see the
238
+ precondition note above)
239
+
240
+ ### Verification — the LIVE playtest, in as many seats as it needs
241
+
242
+ ```bash
243
+ npm run --silent vgai -- eval 'return game.run(async ({ modules }) => { const mechanic = await modules("src/sim/<mechanic>.ts"); mechanic.<setup>(); return mechanic.<read>(); })'
244
+ npm run --silent vgai -- eval 'return game.run(async ({ modules }) => { const tester = await modules("src/bot/tester-station.ts"); return tester.hireTester("<goal>"); })'
245
+ npm run --silent vgai -- eval 'return game.run(async ({ modules }) => { const tester = await modules("src/bot/tester-station.ts"); return tester.describeTester(); })'
246
+ ```
247
+
248
+ Verification IS the interactive playtest: cheats set the situation, the
249
+ resident tester runs behavior, the event log is read on an interval, and the
250
+ run is redirected until the operator is satisfied. Games
251
+ are fundamentally unpredictable in behavior, so there are no spec files and
252
+ no committed route scripts — the play log (`logs/play-*.jsonl`) is the
253
+ receipt. Repeat with varied seeds, goals and dials; that variation is how
254
+ coverage grows.
255
+
256
+ A multiplayer game is the same playtest in more than one SEAT — instances of
257
+ this game side by side in one editor, each addressed from your program, so
258
+ you can watch them play each other. It is not a different kind of test, and
259
+ it never needs a second browser or a synthetic second player.
260
+
261
+ The playtest loop (exported setup/read functions, the tester's repertoire, and
262
+ sim-time budgets) is documented in the sibling
263
+ `.agents/references/project-manual.md`.
264
+
265
+ Reading and driving the game's own modules is **`npx volter-game-editor eval`'s job,
266
+ permanently**, not a gap waiting on more CLI verbs. A game names its own
267
+ functions, which is exactly why the door is general.
268
+
269
+ ### Global Options
270
+
271
+ ```bash
272
+ --url <url> # Editor URL (default: http://localhost:5173)
273
+ # Also: VGAI_EDITOR_URL env var
274
+ ```
275
+
276
+ ## Entity IDs
277
+
278
+ Entity ids are minted by the active authoring adapter (a three world's are
279
+ keyed on the OID its source carries — stable across reloads). To find one:
280
+
281
+ 1. `npm run --silent vgai -- eval 'return editor.hierarchy()'` — the hierarchy panel's
282
+ rows as data, each with its `id` and label
283
+ 2. Use that id with `editor.select("<id>")` / `editor.focus("<id>")` through
284
+ `npx volter-game-editor eval`
285
+
286
+ ## Typical Workflows
287
+
288
+ ### Start a new project from scratch
289
+
290
+ ```bash
291
+ npm run --silent vgai -- create "My Platformer"
292
+ cd my-platformer
293
+ npm run --silent vgai -- edit .
294
+ ```
295
+
296
+ ### Show the user an entity you just created/modified
297
+
298
+ ```bash
299
+ # After editing the world's TSX source — select and frame the entity in one round trip:
300
+ npm run --silent vgai -- eval 'await editor.select("<entity-id>"); await editor.focus()'
301
+ ```
302
+
303
+ ### Test gameplay
304
+
305
+ ```bash
306
+ npm run --silent vgai -- play
307
+ npm run --silent vgai -- eval 'return game.run(async ({ modules }) => { const mechanic = await modules("src/sim/<mechanic>.ts"); mechanic.<setup>(); return mechanic.<read>(); })'
308
+ npm run --silent vgai -- eval 'return game.run(async ({ modules }) => { const tester = await modules("src/bot/tester-station.ts"); return tester.hireTester("<goal>"); })'
309
+ npm run --silent vgai -- eval 'await game.waitSimTime({simSeconds: 5})'
310
+ npm run --silent vgai -- eval 'return game.run(async ({ modules }) => { const mechanic = await modules("src/sim/<mechanic>.ts"); return mechanic.<read>(); })'
311
+ npm run --silent vgai -- screenshot # and LOOK at the pixels
312
+ npm run --silent vgai -- restart # after an init-time source change
313
+ npm run --silent vgai -- stop
314
+ ```
315
+
316
+ Arrange and read through the mechanic's own exported functions; let the
317
+ resident tester drive player input. Both halves matter: the scene graph can
318
+ agree with your intent while the module readout every other tool consumes
319
+ disagrees.
320
+
321
+ ### Debug a specific view angle
322
+
323
+ ```bash
324
+ npm run --silent vgai -- eval 'await editor.view("top"); await editor.shading("wireframe"); await editor.helpers(true)'
325
+ ```
326
+
327
+ ## SDK (Programmatic Access)
328
+
329
+ For TypeScript automation, use **`@volter/game-live`** — the same surface `npx volter-game-editor eval`
330
+ binds, so anything you prototyped at the command line moves into a script
331
+ unchanged:
332
+
333
+ ```typescript
334
+ import { connect } from '@volter/game-live';
335
+
336
+ const { editor, game, tools, session } = await connect();
337
+ await editor.play();
338
+ await game.run(async ({ modules }) => {
339
+ const arena = await modules('src/sim/arena.ts');
340
+ arena.setupBossWave();
341
+ const tester = await modules('src/bot/tester-station.ts');
342
+ tester.hireTester('sweep');
343
+ });
344
+ await game.waitSimTime({ simSeconds: 4 });
345
+ const player = await game.run(async ({ modules }) => {
346
+ const arena = await modules('src/sim/arena.ts');
347
+ return arena.readPlayer();
348
+ });
349
+ ```
350
+
351
+ `connect()` ATTACHES to a session `npx volter-game-editor edit` is already serving — it never
352
+ starts one, and fails with a clear "run `npx volter-game-editor edit` first" rather than silently
353
+ booting a second editor. Top-level `editor` / `game` / `page` / `tools`
354
+ singletons are also exported for one-liners.
355
+
356
+ `@volter/editor-sdk`'s `EditorClient` is the lower layer underneath, and remains
357
+ the right import for editor-only automation that has no game running — plus the
358
+ handful of project-management calls (`createProject()`, `openProject()`,
359
+ `getProject()`, `listRecentProjects()`) that `@volter/editor-live` does not re-expose.
360
+
361
+ Run `npm run --silent vgai -- eval --list` for the current member list on every binding.
362
+ It walks the live objects at runtime, so it is accurate in a way this page
363
+ cannot promise to be.
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: vgai-3d-models
3
+ description: Model and revise game props with ordinary Blender Python through the Blender MCP and export the asset for a reusable Three.js prefab. Use when asked to model a prop, shape, machine, or other game object. For placement, stories and gameplay use vgai-3d-assets; for procedural geometry generated during gameplay use ordinary Three.js.
4
+ ---
5
+
6
+ # Model a game asset
7
+
8
+ You are using **Blender in the browser** through the project's Blender MCP.
9
+ Use `execute_blender_code`, `get_scene_info`, `get_object_info`, and
10
+ `get_viewport_screenshot` with ordinary `bpy`, `bmesh` and `mathutils` Python.
11
+ Blender coordinates are **Z-up**, distances are metres, and angles are radians.
12
+
13
+ Start the game's editor with `npm run dev` **in the background**, keep it running
14
+ while authoring, and tell the user its URL. Connect the project's `blender`
15
+ server in `.mcp.json` (`npm run --silent vgai -- blender-mcp`).
16
+ The **Model** document is your Blender viewport; the **Scene** composes game
17
+ objects. Inspect the model there, then inspect its placement in the game.
18
+
19
+ ## Model, inspect, refine
20
+
21
+ Work normally in Blender through MCP. Inspect the scene, construct and revise the
22
+ asset, and check screenshots and object bounds as you work. Use meaningful object
23
+ names, parenting and local origins for parts the game must manipulate separately.
24
+ Use project-relative paths for input assets and exports.
25
+
26
+ ## Export and place
27
+
28
+ Export the intended asset to `public/models/<asset>.glb` using
29
+ `bpy.ops.export_scene.gltf`, normally `export_format='GLB'`,
30
+ `use_selection=True`, `export_apply=True`. Select only its intended objects.
31
+ The exporter converts Blender's Z-up to glTF's Y-up; do not rotate it again.
32
+ Inspect the exported asset in the game's lighting: a Blender render alone does
33
+ not prove the game appearance, textures, rig or animations survived export.
34
+
35
+ Create `src/prefabs/<Asset>.tsx` and a colocated CSF story, following the
36
+ starter's `HeroBox.tsx` / `HeroBox.stories.tsx` shape. Use ordinary drei
37
+ `useGLTF` and `Clone` for a static model so two placements get separate object
38
+ instances. The public asset is addressed as `/models/<asset>.glb`.
39
+ The prefab owns collisions, interactions and named attachment points. Its story
40
+ makes it discoverable in Content. The scene places the prefab.
41
+
42
+ For an asset revision, edit it in Blender and re-export to the same asset path.
43
+ Check its game placements and preserve the selected starter's studio and
44
+ verification requirements. Before handoff, run the game's build and inspect the
45
+ exported game. Keep input assets and runtime exports in version control;
46
+ keep scratch files in `.vgai/tmp/`.
47
+
48
+ For animation and skinning, also read `vgai-animation-assets`; a static mesh
49
+ export is not proof that an animated character is game-ready.
50
+
51
+ ## Where the model lives
52
+
53
+ A model is a `.blend` under `src/models/`, and the bpy script that authored it
54
+ is an ordinary project file beside it (`cube.blend` / `cube.py`) — the script
55
+ is the asset's SOURCE, the `.blend` is what the Model document opens, and the
56
+ session saves the document about a second after your last call. Author through
57
+ this MCP; the document does not run your script for you.
58
+
59
+ ## When geometry generation is gameplay
60
+
61
+ Use ordinary Three.js/R3F in the game for runtime procedural geometry — that
62
+ is gameplay, not an asset. Existing TypeScript model builders stay project-owned
63
+ code; for an operation's exact TypeScript signature, look up its one row in
64
+ Blender's own `bpy.ops.mesh` / `bmesh.ops` documentation — this skill deliberately keeps no second table of them.
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: vgai-ingest-existing-game
3
+ description: >
4
+ Take an existing, unmodified web game (three.js, PixiJS, or React) to FULL
5
+ vgai editor integration: mount it through the adapter seam, declare its
6
+ real capabilities through the game contract, drive every adapter slot to a
7
+ terminal state (implemented, or verified implemented-empty), and prove it
8
+ live through the product's own doors. Use when asked to ingest, adapt,
9
+ integrate, or "make the editor work with" a game that already exists —
10
+ vendored reference games in this repo, or a user's own game folder. Do not
11
+ use for building a NEW game (scaffold instead) or for non-web runtimes
12
+ (Godot/Roblox translate through the import lanes, not ingestion).
13
+ ---
14
+
15
+ # Ingest an existing game — to closure, not to mount
16
+
17
+ **The manual is `docs/BRINGING-AN-EXISTING-GAME.md` — read the section
18
+ titled "The ingestion checklist — what done means" FIRST** (search for that
19
+ heading; the file is long) and keep it open — this skill is the operational
20
+ spine over that checklist, not a replacement. The doctrine that binds you is
21
+ in `docs/ARCHITECTURE-CORE.md` §the adapter seam: every capability slot ends
22
+ **implemented** or **implemented-empty** (a positively-answered, evidence-
23
+ backed absence). "Honest gap" is not an outcome; coverage warnings are work
24
+ orders. Mounting the game is STEP ONE of seven, not the deliverable.
25
+
26
+ ## The worked references — read before writing anything
27
+
28
+ - `public/ingest/simcity/` and `public/ingest/server-survival/` — closure
29
+ with ZERO patches: everything bound off the game's published `window`
30
+ objects; the navigation slots show the host-computation form (host BFS
31
+ over the game's own public graph, labeled as the host's in so many
32
+ words).
33
+ - The contract shapes: `packages/project/src/adapter/ingest/game-contract.ts`
34
+ (root · lifecycle · systems.commands/state/hierarchy · systemAdapters) and
35
+ `contract-system-adapters.ts` (the projection that rejects malformed
36
+ claims — a `present` missing required members, or an `empty` without
37
+ evidence, is loudly refused).
38
+
39
+ ## Two record-honesty rules, both bought with a measured failure
40
+
41
+ - **Re-derive every host-gap claim in the target's existing record against
42
+ current host source before believing it.** A vendored game's UPSTREAM.md
43
+ is a snapshot: server-survival's said capture was impossible on its three
44
+ version, while the host's structural recognition had long since fixed
45
+ exactly that — and named the game in its docblock. Ask the positive
46
+ question ("how does the host do this today?") against the code; a stale
47
+ note read as truth ends the task early and wrongly.
48
+ - **A reference's literal values are not conventions.** `captureTimeoutMs`
49
+ means "when to REPORT the degrade" (the subscription stays live) and is
50
+ clamped by the adapter — copying a reference's number copies a dead
51
+ number. When a field's meaning matters, read its owner's module header.
52
+
53
+ ## The workflow
54
+
55
+ 1. **Mount (checklist A–B).** Manifest with an `{ ingest }` root beside the
56
+ game; open through the session (`npx volter-game-editor edit <folder>` — a local editor
57
+ rejects URL params); pin CDN importmaps if any (pattern 4, a recorded
58
+ patch for vendored copies, an ordinary edit in a user's own folder).
59
+ 2. **Read the game's real surface before declaring anything.** Its exports,
60
+ its `window` publications, its module structure. Candidate bindings come
61
+ from what the game actually owns — the anti-shim rule: never fabricate a
62
+ datum the game has no referent for. Host-computed queries over the
63
+ game's own data are legitimate and labeled as the host's (simcity's
64
+ navigation); invented facts are not (a fake `disconnected` status).
65
+ 3. **Contract (checklist C).** Shim (`ingest.contractShim`) for a copy that
66
+ must stay pristine; recorded patches or direct edits for an owned one.
67
+ Declare only what you traced; guards replicate the game's own
68
+ preconditions. Verbs that crash the game when invoked externally are
69
+ worse than no verbs. State providers are SYNCHRONOUS (the bridge puts
70
+ `debug.state(key)` straight into its reply; a Promise serializes as
71
+ `{}`).
72
+ 4. **The refusal worklist (checklist D).** Everything unreachable is
73
+ recorded per-symbol with evidence — then CLOSED: a minimal accessor
74
+ patch (pattern 2) where the game has the value, or implemented-empty
75
+ where it genuinely doesn't. A wrong empty claim is a defect; so is a
76
+ refusal left sitting.
77
+ 5. **The FOUR declarable SystemAdapters slots (checklist F).** physics ·
78
+ networking · navigation · audio — each bound through
79
+ `systems.systemAdapters` or declared `{ present: false, evidence }`,
80
+ where the evidence is a grep/read another agent can re-run. The other
81
+ two slots are NOT yours to declare: `debug` is projected from your
82
+ `commands`/`state` (a second door would allow two conflicting debug
83
+ planes), and `renderDebug` is engine-owned, auto-registered from the
84
+ captured renderer — declaring either is a malformed claim the
85
+ projection rejects. Beware the two traps measured on the references: a
86
+ game with a REAL subsystem you almost claimed empty (a
87
+ pathfinder buried in an AI module), and a subsystem-shaped thing that isn't one (simcity's
88
+ random-walk cars are not pathfinding — but its public road graph still
89
+ made the slot bindable).
90
+ 6. **Verify live (checklist G).** Through the product's doors only:
91
+ `npx volter-game-editor eval 'game.commands()'`, drive a verb, read state, ⏸/▶ (pause
92
+ must freeze what the game's own pause freezes; input must gate), the
93
+ coverage rows on `npx volter-game-editor status`. Never synthetic key events, never raw
94
+ window reads — the eval seam exists so that is never necessary. (In a
95
+ sandboxed worktree where the CLI's eval form is blocked, the same door
96
+ is `@volter/game-live`'s `connect()` from a script INSIDE the worktree, run
97
+ with `npx tsx`.)
98
+ 7. **The ledger.** For vendored copies: lock updated (host-added hashes,
99
+ patches with reverse-apply), `node vendor/games/verify-unaltered.mjs`
100
+ green, UPSTREAM.md carrying every binding and every empty claim with
101
+ its evidence. For a user's folder: the diffs are theirs, visible in
102
+ their own git.
103
+
104
+ ## What done means
105
+
106
+ Every checklist row terminal; the coverage report on a live mount shows no
107
+ open work orders except rows the HOST
108
+ currently owes (a row whose honest answer is blocked by a missing or
109
+ defective host seam is a host work order — name it precisely in your
110
+ report, with the read that proves it, and do NOT shim around it per-game;
111
+ a decoy that makes a host instrument read green is fabrication). The total
112
+ cost is written down (manifest + shim + N patched lines).