@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,186 @@
1
+ // A game-roadmap preset. Each issue is one game-level feature arc with a title,
2
+ // one lifecycle status, and one required Summary description. Acceptance
3
+ // criteria remain parseable for future use but are not scaffolded: the initial
4
+ // roadmap task is the complete playable prototype, proven by the game's
5
+ // autoplay record and analytics/readouts rather than a checklist here.
6
+ //
7
+ // Hard schema = the core fields (id/title/summary/status, id/status/evidence,
8
+ // id) PLUS preset-specific strict fields (a status enum, AC `text`, evidence
9
+ // `commit`). No passthrough, no unknown.
10
+
11
+ // A STANDALONE preset: imports ONLY the public mechanism from `ztrack/preset-kit`.
12
+ import {
13
+ z, toMdast, nodeText, type MdNode,
14
+ check as runCheck, rule, gitWorld,
15
+ type Context, type IssueColumns, type IssueRecord, type Preset, type VisualizerSpec,
16
+ } from 'ztrack/preset-kit';
17
+
18
+ // ── the hard schema (core + preset-specific, all strict) ────────────────────
19
+ export const SpecEvidenceSchema = z.object({
20
+ id: z.string().min(1), // core
21
+ commit: z.string().regex(/^[0-9a-f]{7,40}$/), // preset: evidence is commit-backed
22
+ }).strict();
23
+
24
+ export const SpecAcStatusSchema = z.enum(['pending', 'passed', 'failed']); // preset's status vocabulary
25
+ export const SpecAcSchema = z.object({
26
+ id: z.string().min(1), // core
27
+ status: SpecAcStatusSchema, // core (preset narrows the type)
28
+ evidence: z.array(SpecEvidenceSchema), // core
29
+ text: z.string().min(1), // preset
30
+ }).strict();
31
+
32
+ export const SpecIssueStatusSchema = z.enum(['draft', 'in-review', 'done']);
33
+ export const SpecIssueSchema = z.object({
34
+ id: z.string().min(1), // core
35
+ title: z.string().min(1), // core
36
+ summary: z.string().min(1), // core; every roadmap task explains its arc
37
+ status: SpecIssueStatusSchema, // core (narrowed)
38
+ acceptanceCriteria: z.array(SpecAcSchema), // core
39
+ }).strict();
40
+
41
+ export const SpecRootSchema = z.object({ issues: z.array(SpecIssueSchema) }).strict();
42
+ export type SpecRoot = z.infer<typeof SpecRootSchema>;
43
+
44
+ // ── mdast parse: markdown -> the schema shape (structured, no prose mining) ──
45
+ // MdNode / toMdast / nodeText are rented from the kit (shared mdast mechanism).
46
+ function firstParagraphText(item: MdNode): string {
47
+ const p = (item.children ?? []).find((c) => c.type === 'paragraph');
48
+ return p ? nodeText(p).split('\n')[0]!.trim() : '';
49
+ }
50
+
51
+ // designated-position parses (the AC line, the evidence line) — not free-prose mining.
52
+ function splitAcIdText(line: string): { id: string; text: string } {
53
+ const m = /^(\S+)\s+(.+)$/.exec(line);
54
+ return m ? { id: m[1]!, text: m[2]!.trim() } : { id: line, text: line };
55
+ }
56
+
57
+ function parseSpecIssue(record: IssueRecord): Record<string, unknown> {
58
+ // id/title/status come STRUCTURED from the record's columns; only summary + ACs are
59
+ // parsed from the body.
60
+ const issue: Record<string, unknown> = { id: record.id, title: record.title, status: record.status || 'draft', summary: '', acceptanceCriteria: [] };
61
+ const tree = toMdast(record.body);
62
+ let inAc = false;
63
+
64
+ for (const node of tree.children ?? []) {
65
+ if (node.type === 'heading') {
66
+ inAc = /acceptance criteria/i.test(nodeText(node));
67
+ continue;
68
+ }
69
+ if (node.type === 'paragraph') {
70
+ const summary = /^Summary:\s*(.+)$/im.exec(nodeText(node))?.[1]?.trim();
71
+ if (summary) issue.summary = summary;
72
+ continue;
73
+ }
74
+ if (node.type === 'list' && inAc) {
75
+ const acs: unknown[] = [];
76
+ for (const item of node.children ?? []) {
77
+ if (item.type !== 'listItem') continue;
78
+ const { id, text } = splitAcIdText(firstParagraphText(item));
79
+ const status = item.checked === true ? 'passed' : 'pending';
80
+ const evidence: unknown[] = [];
81
+ const nested = (item.children ?? []).find((c) => c.type === 'list');
82
+ for (const evItem of nested?.children ?? []) {
83
+ const commit = /commit:\s*([0-9a-fA-F]+)/.exec(firstParagraphText(evItem))?.[1]?.toLowerCase();
84
+ if (commit) evidence.push({ id: `${id}/ev${evidence.length + 1}`, commit });
85
+ }
86
+ acs.push({ id, status, text, evidence });
87
+ }
88
+ issue.acceptanceCriteria = acs;
89
+ }
90
+ }
91
+ return issue;
92
+ }
93
+
94
+ // The root: each issue's metadata is structured (its record's columns); content from body.
95
+ export function parseSpec(records: IssueRecord[]): unknown {
96
+ return { issues: records.map(parseSpecIssue) };
97
+ }
98
+
99
+ // ── serialize: the validated issue -> its STORED form (content body + metadata columns) ──
100
+ // The evidence id is positional (`<acId>/ev<n>`), so it isn't emitted — re-parsing
101
+ // regenerates it. A passed AC is the checked box; pending/failed are unchecked.
102
+ export function serializeSpecIssue(issue: SpecRoot['issues'][number]): { body: string; columns: IssueColumns } {
103
+ const out: string[] = [];
104
+ if (issue.summary) out.push(`Summary: ${issue.summary}`, '');
105
+ if (issue.acceptanceCriteria.length > 0) {
106
+ out.push('## Acceptance Criteria', '');
107
+ for (const ac of issue.acceptanceCriteria) {
108
+ out.push(`- [${ac.status === 'passed' ? 'x' : ' '}] ${ac.id} ${ac.text}`);
109
+ for (const ev of ac.evidence) out.push(` - commit: ${ev.commit}`);
110
+ }
111
+ }
112
+ return { body: out.join('\n') + '\n', columns: { title: issue.title, status: issue.status } };
113
+ }
114
+
115
+ // ── rules: declarative records over the engine's derived model ──────────────
116
+ // Duplicate-id detection is universal, so it arrives on the core model (m.duplicateAcIds
117
+ // / m.duplicateIssueIds) — this preset writes no derive and uses no blocking graph.
118
+ type SpecAC = SpecRoot['issues'][number]['acceptanceCriteria'][number];
119
+ type SpecEvidence = SpecAC['evidence'][number];
120
+
121
+ const shaMatches = (a: string, b: string) => a.startsWith(b) || b.startsWith(a);
122
+
123
+ const SPEC_RULES = [
124
+ rule<SpecRoot, Record<string, never>>({
125
+ code: 'roadmap_empty',
126
+ severity: 'warning',
127
+ select: (m) => (m.root.issues.length === 0 ? [{}] : []),
128
+ message: () =>
129
+ 'Roadmap is empty. Before coding, add one carefully scoped task for the complete playable prototype, including game-owned autoplay and gameplay analytics.',
130
+ }),
131
+ // Evidence is opt-in for a game: a checked box is done, and the real proof lives in the
132
+ // playtest record. Restore ztrack's `passed_ac_missing_evidence` rule here to require it.
133
+ rule<SpecRoot, { issueId: string; acId: string; evidenceId: string; ev: SpecEvidence }>({
134
+ code: 'evidence_commit_not_found', select: (m) => m.evidence,
135
+ when: ({ ev }, m) => { const c = m.context.git?.existingCommits; return !!c && !c.some((x) => shaMatches(x, ev.commit)); },
136
+ message: ({ ev }) => `Evidence ${ev.id} cites commit ${ev.commit}, which does not exist.`,
137
+ subject: ({ ev }) => ev.commit, // the missing sha — a `ref:` waiver pins to exactly this occurrence
138
+ }),
139
+ rule<SpecRoot, { issueId: string; acId: string }>({
140
+ code: 'duplicate_ac_id', select: (m) => m.duplicateAcIds,
141
+ message: ({ acId }) => `Duplicate AC id ${acId}.`,
142
+ }),
143
+ rule<SpecRoot, { issueId: string }>({
144
+ code: 'duplicate_issue_id', select: (m) => m.duplicateIssueIds,
145
+ message: ({ issueId }) => `Duplicate issue id ${issueId}.`,
146
+ }),
147
+ ];
148
+
149
+ // ── the dashboard's vocabulary (VIZ-2), as plain data ────────────────────────────────────────
150
+ // spec's OWN vocabulary — NOT simple-sdlc's default.tsx vocabulary, which this preset's schema
151
+ // doesn't share: a 3-state lifecycle (no ready/in-progress split), no assignee, no PR, and an AC
152
+ // with just id/text (no version, no proof, no image/acVersion-bearing evidence — see
153
+ // SpecAcSchema/SpecEvidenceSchema above). Only map fields this schema actually has; a mapping
154
+ // this preset can't back with a real field (pr, acProof, acEvidence) is simply omitted. Field
155
+ // references and literal labels ONLY (see `VisualizerSpec`, `ztrack/preset-kit`) — no functions,
156
+ // no markup. Installed into your repo verbatim: edit freely, keeping statusOrder in sync with
157
+ // SpecIssueStatusSchema above (`boilerplates/presets/visualizerVocabulary.test.ts` checks that).
158
+ const SPEC_VISUALIZER: VisualizerSpec = {
159
+ statusOrder: ['draft', 'in-review', 'done'], // must equal SpecIssueStatusSchema above
160
+ acUnitLabel: 'Acceptance Criteria',
161
+ acText: { id: 'id', text: 'text' }, // SpecAcSchema.{id,text} — no `version` field to map
162
+ // no assignee/pr: SpecIssueSchema has neither. No acProof: SpecAcSchema has no proof field.
163
+ // No acEvidence: SpecEvidenceSchema is only {id, commit} — no image/acVersion fields to map.
164
+ };
165
+
166
+ export const SpecPreset: Preset<SpecRoot> = {
167
+ name: 'spec',
168
+ schema: SpecRootSchema,
169
+ visualizer: SPEC_VISUALIZER,
170
+ // observed facts: commit existence (no PR model in this preset).
171
+ loadContext: (input) => gitWorld(input.projectRoot, [], { verifyCommits: input.verifyCommits }),
172
+ parse: parseSpec,
173
+ serialize: serializeSpecIssue, // issue -> { body, columns }; the inverse of parse
174
+ rules: SPEC_RULES,
175
+ // A new task starts with its feature-arc description and one lifecycle status supplied by
176
+ // the document record. Acceptance criteria are intentionally not invented at this stage.
177
+ scaffold: (_title) =>
178
+ 'Summary: Describe the complete playable prototype or later major game feature.\n',
179
+ };
180
+
181
+ export function checkSpec(records: IssueRecord[], ctx?: Context) {
182
+ return runCheck(SpecPreset, records, ctx);
183
+ }
184
+
185
+ // The installed entrypoint: the resolver reads the preset off `default`.
186
+ export default SpecPreset;
@@ -0,0 +1,14 @@
1
+ // Your repo-owned dashboard extension (see docs/VISUALIZER.md). It compiles into the served
2
+ // board automatically — no config, no restart. Every member below is optional; this file ships
3
+ // as a no-op, so the stock board is what you get until you fill one in.
4
+ //
5
+ // import { defineVisualizerExtension } from 'ztrack/visualizer-kit';
6
+ //
7
+ // export default defineVisualizerExtension({
8
+ // issuePanels: (issue) => <section className="panel">...</section>,
9
+ // acText: (ac) => ac.id,
10
+ // });
11
+
12
+ import { defineVisualizerExtension } from 'ztrack/visualizer-kit';
13
+
14
+ export default defineVisualizerExtension({});
@@ -0,0 +1,14 @@
1
+ // Your repo-owned dashboard extension (see docs/VISUALIZER.md). It compiles into the served
2
+ // board automatically — no config, no restart. Every member below is optional; this file ships
3
+ // as a no-op, so the stock board is what you get until you fill one in.
4
+ //
5
+ // import { defineVisualizerExtension } from 'ztrack/visualizer-kit';
6
+ //
7
+ // export default defineVisualizerExtension({
8
+ // issuePanels: (issue) => <section className="panel">...</section>,
9
+ // acText: (ac) => ac.id,
10
+ // });
11
+
12
+ import { defineVisualizerExtension } from 'ztrack/visualizer-kit';
13
+
14
+ export default defineVisualizerExtension({});
@@ -0,0 +1,17 @@
1
+ {
2
+ "backend": "markdown",
3
+ "local": {
4
+ "teamKey": "LOCAL"
5
+ },
6
+ "board": "shared",
7
+ "validation": {
8
+ "entrypoint": ".volter/tracker/validation/preset.mts",
9
+ "installedFrom": "spec"
10
+ },
11
+ "sources": [
12
+ {
13
+ "path": "ROADMAP.md",
14
+ "format": "document"
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,176 @@
1
+ # AGENTS.md — VGAI Game Project
2
+
3
+ A standalone game built with VGAI — work here, not in the engine repo.
4
+ The editor is the authoring and verification surface.
5
+
6
+ ## Route the request first
7
+
8
+ | Intent | First action |
9
+ | --- | --- |
10
+ | Build or change this game | This file + the relevant `.agents/references/project-manual.md` section |
11
+ | Open, play, or verify it | `.agents/skills/editor/SKILL.md` |
12
+ | Model or revise a game prop with Blender | `.agents/skills/vgai-3d-models/SKILL.md` |
13
+ | The game needs a 3D asset placed, rigged, or baked | `.agents/skills/vgai-3d-assets/SKILL.md` |
14
+ | Other craft (2D/3D art, animation, humanoids, generated assets) | The matching `.agents/skills/vgai-*/SKILL.md` |
15
+ | Import an existing web game | Read-only compatibility report; never rewrite its source |
16
+ | Browse or modify an example | Read-only, or scaffold a copy; user games never go in `examples/` |
17
+
18
+ `.agents/` is canonical; `.claude/skills/` and `.github/skills/` are
19
+ generated projections (never edit); `CLAUDE.md` and
20
+ `.github/copilot-instructions.md` only point here.
21
+
22
+ **Capabilities are this project's standard libraries, and they are ADDED.**
23
+ Before writing reusable plumbing, run
24
+ bare `npm run --silent vgai -- add` (lists), inspect the match, and `add <id>` it —
25
+ the installed source is project-owned and editable. A doc naming
26
+ `src/lib/<x>` describes what that capability installs.
27
+
28
+ ## Before writing code
29
+
30
+ 1. Read the brief; write the initial `ROADMAP.md` task first (shape:
31
+ the ROADMAP rule below).
32
+ 2. Read `vgai.project.json` — each root's `adapter` owns its document
33
+ and lifecycle; read the root entry files and any data schema before
34
+ editing. `src/main.ts` registers each root's adapter (`three`, `dom`).
35
+ 3. Start the editor now (`npm run dev`); tell the user the URL in your
36
+ FIRST visible message. Keep it running and narrate as you build. The
37
+ editor IS the Code-OSS workbench this machine declares in
38
+ `.vgai/workbench.json` (the product's `create --workbench <dir>` writes it); with
39
+ no declaration `npm run dev` refuses and prints the exact JSON to write —
40
+ write it, do not work around it.
41
+ 4. Multiplayer: every SEAT is a person — an INSTANCE in one editor,
42
+ played by its resident tester (`game.instance(id)` → the running
43
+ `tester-station.ts` module's `hireTester`) or a human via handoff; never a
44
+ second browser or synthetic player.
45
+
46
+ Everything else is in the project manual; read only the sections the
47
+ request needs.
48
+
49
+ ## Non-negotiable rules
50
+
51
+ - **Author in playable slices, playtested LIVE by two people: you are
52
+ the DEVELOPER, the bot is your QA TESTER.** All in-game action is the
53
+ tester's honest input at sim speed, directed by calling `hireTester` on the
54
+ running `src/bot/tester-station.ts` module,
55
+ never by sending inputs yourself. The playtest is INTERACTIVE; its
56
+ receipt is the play log — never a script.
57
+ - **A control is done when ITS OWN CLICK visibly changes something.**
58
+ Acceptance for any face control is driving the control itself in the live
59
+ session (a DOM click through `game.run`) and seeing a change a human would
60
+ see—never merely calling the function it wraps. An action whose success can
61
+ be invisible (for example, a goal completing before the next paint) must
62
+ narrate itself in the face.
63
+ - **Development panels are game-specific.** The `game` starter includes required
64
+ Inspector, Data and Analytics stubs; replace them with useful fields and controls.
65
+ The `prototype` starter omits them. Any panels you add must use game vocabulary,
66
+ not raw JSON or generic event lists. The editor already provides session playback.
67
+ - **Every mechanic ships its debug function and readout in the same slice.**
68
+ Export them beside the mechanic for the REPL and tester; provide setup helpers
69
+ for situations that are costly to reach through normal play.
70
+ - **Keep game data in typed `src/data/` modules named for the mechanic or content.**
71
+ Editor panels read that data; they do not determine its storage shape.
72
+ - Use the real audio adapter even when the game is silent.
73
+ - Contributions live in `src/contributions/`. Use `use-game-modules.ts` for live
74
+ state and the selected Gameplay Session for Analytics. Implementation details
75
+ are in the project manual's Studio surfaces section.
76
+ - **Game-level feature arcs live in `ROADMAP.md` — one file.** Task one
77
+ is the complete playable prototype from the brief — mechanics,
78
+ rendering, UI, tooling, readouts are parts of it, not peer tasks; later
79
+ entries are only major features of comparable scope. One `Summary:` and
80
+ one lifecycle `status:` each; no acceptance criteria yet; never a
81
+ second task file; never done before a DEVLOG'd live playtest proves
82
+ the arc (`ztrack check` verifies structure).
83
+ - **`DEVLOG.md` is the development journal, not a second tracker.** One
84
+ entry per arc: what changed, why, decisions, playtest outcome, what
85
+ remains — with reviewed screenshots (a clip when motion matters)
86
+ promoted from `.vgai/` history into `media/`; inspect every artifact
87
+ you attach, never the latest blindly.
88
+ - **Record through the eval door**: Play running →
89
+ `eval 'return editor.recording.start({ fps: 30 })'`, drive via
90
+ `game.*`, `eval 'return editor.recording.stop()'` → WebM under
91
+ `.vgai/recordings/`. Inspect/trim with ordinary `ffmpeg`; no wrappers.
92
+ - **Keep Three source modular:** thin `src/world.tsx`; compositions in
93
+ `src/scenes/*Scene.tsx` (no stories); placeables in `src/prefabs/` with
94
+ stories; support in `src/components/`. Owned parts stay inside their
95
+ owner; independent entities never hide in scenery; no monoliths, no
96
+ prefab-per-primitive. E10/E11 enforce declared classifications and W10
97
+ warns when a Three project silently loses all prefabs. Characters are ALWAYS rigged models
98
+ authored in Blender (`vgai-3d-models`), never primitive stacks.
99
+ - Use Three.js, PixiJS, React, Rapier, and Colyseus directly — no
100
+ wrappers, no parallel ECS or mirror tree.
101
+ - The world node is the entity. On a TSX root, behavior is a React
102
+ component calling `useFrame`; physics is `@react-three/rapier` JSX.
103
+ Debug state is ordinary exported functions in the game's own modules —
104
+ reached via `game.run` and the contributions the game writes. Static
105
+ scenery, lights, and UI stay native objects.
106
+ - The source is the document: TSX for a Three root, JSX for React; an
107
+ unrecognized manifest key is rejected. Never call `createRoot`,
108
+ `hydrateRoot`, or `ReactDOM.render` from project code.
109
+ - One component, one concern.
110
+ - A player HUD is a `dom` root, never drei `Html` (invisible in
111
+ captures).
112
+ - Never fabricate first-party data, modify imported game source without
113
+ consent, or author schema fields with no runtime reader. The game's
114
+ numbers and tables are plain typed literals under `src/data/`.
115
+ - Preserve existing user edits and unrelated files.
116
+ - Generated assets: provider-native APIs + `ctx.projectOutputs.write(...)`;
117
+ load the generative-assets skill before spending funds.
118
+ - Keep reference images and motion studies in `references/`; Content shows
119
+ them without shipping them. Put assets the game loads in `public/`.
120
+ - Repeatable sequences: flat scripts in `scripts/<task>/steps/` (README
121
+ per step); intermediates in `.vgai/tmp/<task>/`. Helpers in
122
+ `src/lib/<domain>/` only when reusable and purely mechanical; no
123
+ runners, task graphs, or auto-judges.
124
+ - Editor control is observation and verification; write through source
125
+ edits, not UI automation. `npm run dev:standalone` serves EXPORTED
126
+ builds only — until exported it refuses; the editor is the one surface.
127
+
128
+ ## Verification contract — after every slice
129
+
130
+ **Never write automated tests — no vitest, no `tests/` (E12 enforces).**
131
+ Games are fundamentally unpredictable; pre-written assertions enter an
132
+ endless rewrite cycle. Playtest live; the play log is the receipt.
133
+
134
+ 1. Run `check-idioms`, `typecheck`, `validate`, and `validate-manifest`.
135
+ **`npm run typecheck` is the gate, never bare `tsc`** (bare `tsc`
136
+ skips `src/tools`).
137
+ 2. The ONLY approved slice test is LIVE: a REPL-style manual session in
138
+ the editor-owned tab — set up, enter Play, advance sim time, inspect,
139
+ act one step at a time. Keep the probe disposable (never a spec,
140
+ script, or harness). After init-time edits, `restart`.
141
+ 3. `npx volter-game-editor status` must show `connected: true`; it tails the session
142
+ journal (`logs/editor-*.jsonl`). Read the play logs. Any
143
+ `UNRESOLVED CONSOLE SET` is remaining work; `npx volter-game-editor console` silent is
144
+ the only all-clear.
145
+ 4. Enter Play and look. Capture a legible screenshot; **a hidden tab
146
+ captures t≈0** — drive `game.waitSimTime` first.
147
+ 5. Drive the game with `npm run --silent vgai -- eval '<js>'` — the one general
148
+ door (`{ editor, game, page, tools, session }`). Never synthetic
149
+ keys, rAF loops, wall-clock sleeps, or `window.__vgai*` reads.
150
+ 6. Repeat for the few varied situations that could expose the change;
151
+ the observations and screenshots ARE the proof.
152
+ 7. Inspect the live hierarchy against the taxonomy above; every prefab
153
+ appears in Content; collapse repeated primitives.
154
+ 8. **Commit NOW, one commit per slice**, message naming the mechanic. A
155
+ single end-of-build commit is a process failure.
156
+ 9. Arc complete → update `DEVLOG.md` (rule above).
157
+ 10. Before handoff, report what was tested and which optional harnesses
158
+ were absent; remaining major arcs go in `ROADMAP.md`.
159
+
160
+ ## Commands
161
+
162
+ ```bash
163
+ npm run dev # open/reuse this project's editor (the workbench .vgai/workbench.json names)
164
+ npm run --silent vgai -- status # require connected: true
165
+ npm run --silent vgai -- play # editor Play mode
166
+ npm run --silent vgai -- restart # remount after init-time edits
167
+ npm run --silent vgai -- screenshot # visible evidence
168
+ npm run --silent vgai -- eval '<js>' # THE door onto the running game
169
+ npm run check-idioms # every slice
170
+ npm run validate # manifest/files + React design states
171
+ npm run typecheck # THE gate: src + src/tools + server
172
+ npm run dev:standalone # EXPORTED builds only
173
+ ```
174
+
175
+ Always `npm run --silent vgai -- <verb>`, never a bare `vgai` (a global one may
176
+ belong to another checkout).
@@ -0,0 +1 @@
1
+ @AGENTS.md
@@ -0,0 +1,20 @@
1
+ # Development Log
2
+
3
+ This is the project's internal development journal. It records the reasoning
4
+ that source history and playtest receipts cannot: what changed, why that path
5
+ was chosen, what was learned, and what remains.
6
+
7
+ Add one entry when a coherent workstream or feature arc finishes—not after
8
+ every small edit. Put the newest entry first and cover:
9
+
10
+ - what changed and why;
11
+ - important decisions, rejected alternatives, and lessons;
12
+ - the playtest outcome and anything still unresolved;
13
+ - links to the best representative screenshots and, when motion matters, a
14
+ short gameplay clip.
15
+
16
+ Evidence linked here is durable project material. Review the actual candidate
17
+ captures, reject unclear or unrepresentative frames, and watch each selected
18
+ clip from beginning to end. Copy only the chosen media out of the bounded
19
+ `.vgai/` run history into `media/screenshots/` or `media/clips/` before linking
20
+ it here. Never cite an unreviewed capture merely because it is the latest one.
@@ -0,0 +1,118 @@
1
+ # IDIOMS.md — project architecture checks
2
+
3
+ `AGENTS.md` is the working contract. This page is the compact map of what
4
+ `npm run check-idioms` can enforce mechanically and what still requires live
5
+ judgment.
6
+
7
+ Legend: **ERROR** fails every run; **WARN** prints but fails only with
8
+ `--strict`; **LOOK** is judged in the live editor and recorded in `DEVLOG.md`.
9
+
10
+ ## Source and roots
11
+
12
+ - The source is the document. Three roots are ordinary R3F TSX, Canvas roots
13
+ are ordinary Pixi/React source, and DOM roots are ordinary React. The world
14
+ node is the entity; no mirror ECS, registration layer, or vgai runtime API
15
+ belongs in gameplay components. **LOOK**
16
+ - A DOM HUD is a manifest `dom` root and reads the project's own React
17
+ context/store. A timer repeatedly copying game state into React state is a
18
+ manual polling pump. **WARN W1**
19
+ - A positive `useFrame(callback, priority)` priority takes over rendering;
20
+ use zero/negative values for ordering unless that callback actually calls
21
+ `render`. **WARN W8**
22
+ - Display names are editable presentation, not gameplay identity. Trigger
23
+ logic comparing `.name` can silently break after an editor rename. **WARN
24
+ W4**
25
+
26
+ ## Scenes, prefabs, and supporting components
27
+
28
+ - `src/world.tsx` is thin: root-wide providers/instruments and the active scene
29
+ swap slot. Complete compositions live as `src/scenes/*Scene.tsx`; support
30
+ that is not a scene belongs in `src/components/`. Stories inside
31
+ `src/scenes/`, or helper-shaped files there, are misclassification. **ERROR
32
+ E11**
33
+ - A prefab is one independently placeable/duplicable/reusable object under
34
+ `src/prefabs/`. Its colocated portable story names it as `meta.component`;
35
+ that story is its Content registration. A module claiming prefab residence
36
+ without that registration is incomplete. **ERROR E10**
37
+ - Owned construction pieces remain inside their owner; do not create a prefab
38
+ per mesh/primitive. Conversely, independent entities do not hide inside
39
+ scenery or one scene monolith. The template demonstrates the contrast with
40
+ `HeroBox` (prefab) and `Ground` (support).
41
+ - A Three project with no correctly story-backed prefab is suspicious. Fully
42
+ procedural or wholly simulation-owned games can be honest exceptions, but
43
+ ordinary games should not silently lose the architecture when replacing the
44
+ starter subject. **WARN W10**
45
+ - R3F placeables forward ordinary `ThreeElements[...]` props to one native
46
+ outer root and every spatial instance has a meaningful `name`; runtime
47
+ motion belongs on an inner child so it cannot fight authored placement.
48
+ The editor's own `R3F00x` analyzer supplies the finding. **WARN E9**
49
+
50
+ ## Mechanics, tester, and studio surfaces
51
+
52
+ - Every mechanic exports the functions and readings needed to arrange and
53
+ judge it. The developer calls the running instance directly through
54
+ `game.run(({ modules }) => ...)`; contributions read the same instances
55
+ through `src/tools/use-game-modules.ts`. There is no command registry or
56
+ prescribed vocabulary. **LOOK**
57
+ - The resident QA tester is game code. It receives intent-level goals, runs at
58
+ simulation speed, and actuates only the game's normal input store. Setup
59
+ functions may arrange an expensive situation; they do not perform the
60
+ behavior being judged. The tester's repertoire grows in the slice that adds
61
+ each mechanic. **LOOK**
62
+ - `src/tools/` is literal contribution TSX. The unfinished Tester/Data/Analytics stubs
63
+ emit `VGAI_STUB_UNIMPLEMENTED`; replacing or honestly deleting the relevant
64
+ stub is required before completion. **ERROR E6**
65
+ - Tester holds live QA state, controller ownership, goals/mind, setup cheats,
66
+ and judgment readings. Analytics holds historical session data. Data holds
67
+ authored typed literals and derived views. A HUD number does not earn an
68
+ inspector row merely because it exists. **LOOK**
69
+ - Analytics receives a durable Gameplay Session and cursor, not a live `play`
70
+ handle. Every chart derives from the selected `logs/play-*.jsonl` session so
71
+ it survives Stop and reload. A raw event listing does not fulfill Analytics;
72
+ supply game-specific analysis using the editor's existing playback shell. **LOOK**
73
+
74
+ ## Live proof
75
+
76
+ - Playtesting is interactive: arrange, direct the tester, advance sim time,
77
+ observe, read the log, redirect. No committed route, test file, test-runner
78
+ dependency, or test script belongs in a game project. **ERROR E12**
79
+ - Do not boot a private Playwright harness, reach through `window.__vgai`, or
80
+ add `?bot=` boot plumbing. Use the editor-owned session and the game's
81
+ running modules. **ERROR E1–E4**
82
+ - Gameplay source must not accumulate for many commits before the first Play
83
+ receipt. `logs/play-*.jsonl` is written by the editor and cannot be replaced
84
+ by an assertion that somebody intended to play. **WARN W9**
85
+ - At handoff, read `npx volter-game-editor console`, inspect the live hierarchy and Content
86
+ gallery, look at several relevant situations, and promote only reviewed
87
+ screenshots/clips into `media/`. **LOOK**
88
+
89
+ ## Native libraries
90
+
91
+ - Call Three, Rapier, React, Pixi, XState, and Colyseus directly. A helper that
92
+ returns the library's own object is fine; a wrapper or registry that becomes
93
+ a second programming model is not. **LOOK**
94
+ - Dynamically import the Colyseus client so a single-player bundle does not
95
+ pay for it. **WARN W3**
96
+ - If this project's manifest explicitly claims seeded determinism, raw
97
+ gameplay `Math.random()` or wall-clock reads violate that claim. **ERROR
98
+ E5**
99
+ - Every owner releases what it creates: listeners, timers, bodies, scene
100
+ objects, and GPU resources. Play→Stop must leave `npx volter-game-editor console` silent.
101
+ **LOOK**
102
+
103
+ ## Run the scanner
104
+
105
+ ```bash
106
+ npm run check-idioms
107
+ npm run check-idioms -- --strict
108
+ ```
109
+
110
+ A heuristic false positive may be suppressed on the relevant source line with
111
+ a real reason:
112
+
113
+ ```ts
114
+ setTimeout(closeSdkToast, 250); // idioms-ignore W1 one-shot SDK transition, not a state pump
115
+ ```
116
+
117
+ Project-wide warnings such as W10 accept the same comment anywhere under
118
+ `src/`. An empty or missing reason does not suppress a finding.
@@ -0,0 +1,30 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Volter AI, Inc.
4
+
5
+ This MIT license covers the vgai game-project template (this directory) — the
6
+ starter code scaffolded into your project. It is intentionally permissive so that
7
+ the game you build with vgai, and anything you generate from this template, is
8
+ YOURS, free of any obligations to us. You may relicense your generated game
9
+ under any terms you choose.
10
+
11
+ (The vgai engine and tooling — everything outside this directory — are licensed
12
+ per component: Apache-2.0 core, AGPL-3.0 editor. See the repository LICENSE.md.)
13
+
14
+ Permission is hereby granted, free of charge, to any person obtaining a copy
15
+ of this software and associated documentation files (the "Software"), to deal
16
+ in the Software without restriction, including without limitation the rights
17
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
18
+ copies of the Software, and to permit persons to whom the Software is
19
+ furnished to do so, subject to the following conditions:
20
+
21
+ The above copyright notice and this permission notice shall be included in all
22
+ copies or substantial portions of the Software.
23
+
24
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
+ SOFTWARE.