@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,347 @@
1
+ ---
2
+ name: vgai-threejs-authoring
3
+ description: Build, rig, animate, diagnose, and visually refine polished native Three.js scenes and procedural assets with direct Object3D code, reusable construction helpers, geometry libraries, and an inspect-render-critique loop. Use for procedural models, rigid mechanical armatures, environments, static props, stylized materials, lighting, cameras, scene composition, or an agent-focused Blender-like workflow. Use vgai-3d-assets alongside this skill when the result should become a source document and a baked GLB. Do not use for Blender bpy work or imported skeletal retargeting.
4
+ ---
5
+
6
+ # VGAI Three.js Authoring
7
+
8
+ Author ordinary project source against Three.js. Treat the source module and
9
+ live `Object3D` graph as truth. Use helpers for leverage, not as a replacement
10
+ scene language.
11
+
12
+ ## Establish the authoring surface
13
+
14
+ 1. Read the project instructions and architecture.
15
+ 2. Locate the Three root or modeling build entry, existing helpers,
16
+ renderer setup, and verification commands.
17
+ 3. Start or reuse the VGAI editor immediately and keep it open.
18
+ 4. Capture a fixed-camera visual baseline.
19
+ 5. Inspect the live hierarchy, selected-object facts, renderer state, and
20
+ console before changing code.
21
+
22
+ Never introduce a parallel entity tree, semantic operation log, generated
23
+ scene JSON, or wrapper around ordinary Three.js access for agent control. Give
24
+ important objects stable `Object3D.name` values or project metadata.
25
+
26
+ Also use `vgai-3d-assets` for reusable source-backed assets,
27
+ `vgai-animation-assets` for imported skeletons or clips, and
28
+ `vgai-environment-art` for whole-scene art direction.
29
+
30
+ ## Choose the lowest sufficient layer
31
+
32
+ Use these layers in order:
33
+
34
+ 1. Use Three.js directly for transforms, parenting, materials, lights,
35
+ cameras, curves, standard geometries, loaders, and animation.
36
+ 2. Use an existing project helper for repeated high-value construction.
37
+ 3. Use official Three.js addons before adding dependencies.
38
+ 4. Use a proven specialist library for booleans, BVHs, topology repair, or
39
+ asset optimization.
40
+ 5. Add a helper only after the same construction or failure-prone calculation
41
+ appears more than once.
42
+
43
+ Keep alternate library representations temporary. Return a normal
44
+ `BufferGeometry`, `Mesh`, `Group`, or other native `Object3D`.
45
+
46
+ Read [references/helper-catalog.md](references/helper-catalog.md) before adding
47
+ modeling capabilities or dependencies. That catalog answers *which op* — for
48
+ *which surfacing mode* (palette, shader look, tiling projection, card, decal,
49
+ provider retexture, procedural mask) and whether the asset needs UVs at all,
50
+ walk the eight modes cheapest-first in the `vgai-3d-assets` skill's
51
+ `references/surfacing.md`.
52
+
53
+ ## Author raw code
54
+
55
+ Write named functions that return real objects:
56
+
57
+ ```ts
58
+ function createObservatory(materials: Materials): THREE.Group {
59
+ const root = new THREE.Group();
60
+ root.name = 'observatory';
61
+ root.add(createTowerShell(materials.ivory), createTelescope(materials));
62
+ return root;
63
+ }
64
+ ```
65
+
66
+ Prefer hierarchy and local coordinates. Give each substantial assembly a
67
+ meaningful origin. Share materials intentionally. Seed authored randomness.
68
+ Use raw Three.js whenever a helper becomes awkward.
69
+
70
+ ## Author shader looks as native GLSL
71
+
72
+ Keep shader source in ordinary `.vert`, `.frag`, or `.glsl` files and bind it
73
+ with `THREE.ShaderMaterial` directly. A sibling `name.vert.glsl` +
74
+ `name.frag.glsl` pair is the portable convention Asset Lab recognizes; it is
75
+ not a VGAI format. Keep authored uniform defaults, defines, textures, and
76
+ material composition beside the owning material in TS/TSX, where the runtime
77
+ actually reads them. Never add a `.shader.json`, uniform sidecar, or generated
78
+ shader graph to duplicate those facts.
79
+
80
+ Open either GLSL file from Content to inspect the pair against a real WebGL
81
+ preview. Asset Lab is visual-only: it does not duplicate the project's coding
82
+ surface or write shader source. Edit the ordinary GLSL files with your normal
83
+ coding tools; the open preview reloads them, and compiler diagnostics name the
84
+ native file, stage, and source line. Use the reflected Inspector uniforms to
85
+ explore values, geometry, and time/resolution inputs, then move accepted
86
+ defaults into the owning TS/TSX—the controls are session-only by design.
87
+ Resolve every compiler diagnostic before judging the look in its real scene,
88
+ because neutral preview geometry cannot prove lighting, depth, transparency,
89
+ postprocessing, or the game's actual texture bindings.
90
+
91
+ ## Compose postprocessing directly
92
+
93
+ When a game needs postprocessing, add `@react-three/postprocessing` to that
94
+ project and import its components directly. Do not create a VGAI chain file,
95
+ effect registry, wrapper component, or JSON descriptor. The owning scene's JSX
96
+ is already the ordered chain; conditionally render one effect to bypass it and
97
+ move its JSX child to reorder it. Keep the finishing order restrained: render,
98
+ limited AO, bloom, color grade, anti-aliasing, then output color/tone conversion.
99
+
100
+ A 3D `.cube` color grade is an ordinary portable LUT. Open it from Content for
101
+ Asset Lab's visual before/after comparison; intensity and interpolation there
102
+ are session-only exploration. Load the accepted LUT with Three's
103
+ `LUTCubeLoader`, hand its `texture3D` directly to the library's `LUT` effect,
104
+ and author the accepted strength in TSX. Judge each bypass at the same camera,
105
+ pose, exposure, and simulation time. Asset Lab deliberately has no chain source
106
+ view: edit the ordinary TSX with the project's coding surface and watch the
107
+ running viewport reload it.
108
+
109
+ ## Register reusable R3F prefabs
110
+
111
+ An R3F component becomes a Content prefab only when the project declares a
112
+ portable CSF story for it. Colocate `<Name>.stories.tsx`, set
113
+ `meta.component` to the component itself, and author at least one standalone
114
+ representative state. Update the story whenever the prefab's required props or
115
+ display contract changes.
116
+
117
+ The editor mounts the composed story off-screen and photographs that exact
118
+ state. It never infers prefab intent or appearance from export status, scene
119
+ placement, or a GLB path referenced by the component. A storyless component is
120
+ valid scene implementation, but it does not belong in Content. Keep model
121
+ files in Models; the component story may render a model, but does not turn the
122
+ model into the component or the component into an inferred prefab.
123
+
124
+ Use ordinary Storybook `args`, decorators, and loaders for required context.
125
+ For a suspending R3F loader, do not put `<Suspense>` around the story content:
126
+ the preview captures the first commit, so a committed fallback would be the
127
+ photographed subject.
128
+
129
+ ## Build for visual quality
130
+
131
+ Establish these before micro-detail:
132
+
133
+ - a readable primary silhouette;
134
+ - asymmetry and at least three depth layers;
135
+ - a clear focal object and subordinate forms;
136
+ - intentional key, fill, and rim light;
137
+ - a restrained material palette with readable value and surface contrast;
138
+ - camera framing chosen for the composition, not merely fitting bounds.
139
+
140
+ Work through three frequency bands:
141
+
142
+ 1. Primary forms carry silhouette, proportion, and composition.
143
+ 2. Secondary forms explain construction: profiles, frames, ribs, supports,
144
+ openings, joints, and material transitions.
145
+ 3. Tertiary accents appear only where the intended camera can read them.
146
+
147
+ A primitive remains blocking geometry until it has deliberate proportions,
148
+ edge treatment, a believable relationship with adjacent forms, and suitable
149
+ surface response. Object count is not a quality metric; count visible authored
150
+ decisions.
151
+
152
+ Treat emissive materials, ambient occlusion, and bloom as accents. If an effect
153
+ erases ribs, frames, texture, or material boundaries, reduce the effect before
154
+ adding geometry.
155
+
156
+ ## Author stylized rendering honestly
157
+
158
+ For cel shading, use a nearest-filter gradient ramp with `MeshToonMaterial`.
159
+ For hard linework, combine inverted back-face hulls for silhouettes with
160
+ `EdgesGeometry` for intentional internal creases.
161
+
162
+ Treat style as a runtime-wide contract, not a promise made by one builder.
163
+ Inventory the live material classes after every async GLB and modeled object
164
+ has loaded. A helper that exists but is never imported by the mounted root has
165
+ implemented nothing. Apply the policy to the real runtime graph and expose a
166
+ small debug report so playtests can prove which materials were converted,
167
+ preserved, or excluded.
168
+
169
+ Author the policy per material family and per material slot. Use harder ramps
170
+ for focal props, characters, and readable detail; use a softer, higher-floor
171
+ ramp for broad architectural planes so point lights do not create concentric
172
+ band stains or crush the whole foreground. Preserve intentional Basic,
173
+ transparent/glass, emissive, and special-effect materials. When replacing a
174
+ material, carry forward its maps, vertex colors, alpha test, AO/normal/emissive
175
+ inputs, side, depth, and blend settings. A mixed material array must preserve
176
+ and convert each slot independently.
177
+
178
+ Attach derived ink beneath source meshes so animation and transforms remain
179
+ automatic. Exclude transparent smoke, glass, skies, and soft background forms
180
+ unless the art direction explicitly requires outlines.
181
+
182
+ An ordinary inverted-hull `ShaderMaterial` that expands `position` and
183
+ `normal` is not skinning-safe. Reject `SkinnedMesh` at the outline helper
184
+ boundary unless the shader explicitly includes and proves skinning/morph
185
+ chunks; a caller-side entity whitelist is not sufficient. For character ink,
186
+ use a deformation-aware path and inspect it in bent shoulder, hip, elbow,
187
+ knee, wrist, and ankle poses. Expose and assert that a rigid-only path outlined
188
+ zero skinned meshes.
189
+
190
+ Specify silhouette width in pixels when framing can change. Derive view-space
191
+ offset from depth, projection scale, and drawing-buffer height; refresh the
192
+ height after resize. Keep creases thinner and fade them sooner than
193
+ silhouettes. Prefer dark hues related to each material family over uniform
194
+ black.
195
+
196
+ Author stylized profiles per material family. Control lit/shadow color, band
197
+ threshold and softness, graphic highlight, rim, and thresholded specular
198
+ response. Preserve native Three.js lighting and shadows. `onBeforeCompile` is
199
+ version-sensitive; compile it in real WebGL after Three.js upgrades.
200
+
201
+ Run an ink-off diagnostic. The same fixed-camera frame must remain readable
202
+ through value grouping, shadow hue, highlights, and rims. Contours clarify
203
+ forms; they do not rescue confused materials.
204
+
205
+ Use only visual-inspection boundaries as workflow steps. One style iteration
206
+ produces and inspects, at the same camera and pose: the prior runtime frame,
207
+ toon with ink disabled, toon with ink enabled, and the full game composite.
208
+ Keep typecheck, shader compilation, material census, and scene validation
209
+ inside that same step; they are supporting checks, not separate milestones.
210
+ Reject broad-plane band stains, shadow crush, lost texture identity, mixed PBR/
211
+ toon assets, bind-pose outlines, or HUD/camera mismatch before continuing.
212
+
213
+ Use postprocessing as a finishing layer. A restrained order is render, limited
214
+ AO, restrained bloom, subtle color composite, SMAA, then output color/tone
215
+ conversion. Keep project-owned presentation separate from exported model
216
+ content.
217
+
218
+ ## Rig at the correct deformation layer
219
+
220
+ - Use `Object3D` or `Bone` hierarchies for rigid articulated machinery.
221
+ - Use `SkinnedMesh` only for continuous deformation across a joint.
222
+ - Attach rigid accessories directly to their owning joint.
223
+ - Use morph targets for localized shape changes not naturally expressed by a
224
+ joint.
225
+
226
+ Put pivots at physical joint centers and author child geometry in local
227
+ coordinates. A `THREE.Bone` does not require a `SkinnedMesh`; use bones when
228
+ armature semantics and `SkeletonHelper` aid inspection.
229
+
230
+ Keep pose policy separate from construction. Use a deterministic pose function
231
+ for procedural locomotion and exact comparisons. Use native `AnimationClip`
232
+ and `AnimationMixer` when motion must be blended, serialized, edited, or baked.
233
+ Apply contact or IK correction after the base pose.
234
+
235
+ Validate a full cycle. Sample every driven joint and end effector at exact
236
+ times; reject non-finite transforms, duplicate names, insufficient joint
237
+ range, and negligible contact travel. Inspect support and passing poses. Hide
238
+ rig helpers outside diagnostics.
239
+
240
+ Animation cadence is separate from render cadence. For stepped motion,
241
+ quantize pose time while rendering and responding at display refresh rate.
242
+ Derive transforms from stored base values; do not accumulate with `+=` unless
243
+ drift is intentional.
244
+
245
+ ## Render self-review is MANDATORY — the look protocol
246
+
247
+ After EVERY modeling milestone — a new mesh, a kit op applied, a material/
248
+ shading change, a fit or weld — render your work and LOOK at the pixels
249
+ before proceeding. Self-reports ("the topology is correct", "tests pass")
250
+ are not visual evidence; only a render is.
251
+
252
+ **Everything below happens inside YOUR project directory.** The one command
253
+ is `npx volter-game-editor screenshot`, and the module lane is the asset loop:
254
+
255
+ 1. Look at a builder: `npx volter-game-editor screenshot src/models/<thing>.ts` runs that
256
+ module's default export headlessly in Node, exports the `Object3D` it
257
+ returns to an in-memory GLB, and photographs it in your live editor
258
+ session. `--export <fn>` picks a non-default export. Nothing is written
259
+ under `public/` and no provenance record is created — a look is not an
260
+ export. (It needs a live session for this project: `npx volter-game-editor edit .`.)
261
+ 2. Look at a baked file: `npx volter-game-editor screenshot <path.glb>` — front/right/top/
262
+ 3-quarter plus a contact sheet, through the Asset Lab.
263
+ 3. Ask for canonical angles rather than ad-hoc ones: `--shots <set>`
264
+ resolves the registered `project.<set>.previewShots` tool, and a lib that
265
+ registers a set gets it by default. `--size`/`--width`/`--height` frame
266
+ it; `--compare <ref.glb>` scores silhouette IoU against a reference.
267
+ 4. READ every printed PNG before the next edit: silhouette, shading, nothing
268
+ clipped or inside-out, vert/tri budget. A defect you can see is a defect —
269
+ fix it before building more on top of it.
270
+ 5. Framing is automatic from your mesh's bounding box — if a render looks
271
+ empty or mis-framed, your geometry (scale/position/origin) is wrong, not
272
+ the camera. The corollary is a real blind spot: an asset lane auto-frames
273
+ its subject, so it can NEVER show you a wrong origin, a floating contact
274
+ plane, or a scale that disagrees with the world. Only a scene shot can —
275
+ `npx volter-game-editor screenshot` with no target (play mode, whole stack) or `vgai
276
+ screenshot <entityId>` (one entity where it stands, under the scene's own
277
+ lighting).
278
+
279
+ > Engine-repo aside — not for game projects. When you are working inside the
280
+ > vgai engine checkout itself (no game project, no editor session), the
281
+ > equivalent is `node packages/engine/e2e/turntable/capture.mjs <subject>`,
282
+ > run from the checkout root; it boots and tears down its own server. Point
283
+ > it at your own builder with `capture.mjs file --module
284
+ > /<repo-relative-path>.ts --export <fn>`, add `--zooms full,top,detail`
285
+ > (detail takes `--focus x,y,z`) for close-ups, and `npx biome check --write
286
+ > <your-file>.ts` before finishing, since unformatted engine files block the
287
+ > repo's lint for everyone.
288
+
289
+ ## Run the refinement loop
290
+
291
+ For every meaningful iteration:
292
+
293
+ 1. Build or typecheck.
294
+ 2. Reload or rebuild the raw source graph.
295
+ 3. Inspect names, bounds, hierarchy, camera, renderer statistics, warnings,
296
+ and failed requests.
297
+ 4. Freeze procedural motion at a known time.
298
+ 5. Capture the same viewport and camera as the baseline.
299
+ 6. Identify the largest visible defect.
300
+ 7. Make the smallest source change that tests the diagnosis.
301
+ 8. Repeat until the pixels are visibly better.
302
+
303
+ When the project has `@volter/editor-live`, make the shared editor view the evidence
304
+ boundary instead of taking an unrelated page screenshot:
305
+
306
+ ```ts
307
+ const shown = await editor.present({
308
+ version: 1,
309
+ document: { kind: 'workspace', id: 'workspace:scene' },
310
+ viewport: { camera: 'isometric', frame: 'document' },
311
+ });
312
+ const actual = await editor.currentView();
313
+ const capture = await editor.captureActiveDocument();
314
+ ```
315
+
316
+ Treat `actual` as the postcondition and `capture.document` as provenance for
317
+ the pixels. `present()` is an intent, not proof: the active document may have
318
+ degraded, failed to mount, or been changed by the human. Keep the returned
319
+ share link with critique notes so the same subject, camera, diagnostic, and
320
+ utility can be reopened for the next cycle.
321
+
322
+ Do not declare success because code is shorter, more reusable, or produces
323
+ fewer commands.
324
+
325
+ ## Validate the deliverable
326
+
327
+ Before finishing:
328
+
329
+ - run project production/type validation;
330
+ - verify no runtime or WebGL shader errors;
331
+ - verify stable names and direct graph inspection;
332
+ - verify derived ink is non-interactive and follows source transforms;
333
+ - verify outline width at default and materially different framing;
334
+ - verify material design with ink disabled;
335
+ - verify every loaded asset participates in the intended runtime material-family policy;
336
+ - verify broad planes have no band stains or crushed readable shadow detail;
337
+ - verify rigid-only outline paths report zero outlined `SkinnedMesh` objects;
338
+ - compare finishing effects at one exact pose;
339
+ - verify deterministic rebuild and bounded animation;
340
+ - verify a full-cycle report has finite, meaningful ranges and travel;
341
+ - verify cleanup and disposal;
342
+ - compare final browser-rendered evidence against the baseline;
343
+ - record generally useful helpers in the catalog while keeping one-off
344
+ assemblies project-owned.
345
+
346
+ When a helper improves one scene but harms another, keep it local until its
347
+ contract is understood.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "VGAI Three.js Authoring"
3
+ short_description: "Build polished native Three.js scenes and assets"
4
+ default_prompt: "Use $vgai-threejs-authoring to build and visually refine native Three.js source without introducing a parallel scene model."
@@ -0,0 +1,65 @@
1
+ # Native Three.js helper and dependency catalog
2
+
3
+ Use this reference to decide whether a task needs Blender, direct Three.js, a
4
+ small project helper, or a specialist geometry library.
5
+
6
+ **MODELING IS BLENDER'S.** A model is a `.blend`, authored in the real Blender
7
+ running headless in the editor tab, and a game loads the GLB it exports. Reach
8
+ for `vgai-3d-models` (bpy through the Blender MCP).
9
+
10
+ **Add a capability before you look for its source.** Everything under
11
+ `src/lib/` below is a CAPABILITY, not scaffold contents — a fresh project has
12
+ no `src/lib/` directory at all. Run `npx volter-game-editor add <id>` to copy the source in as
13
+ ordinary project files you own and edit; bare `npx volter-game-editor add` lists every
14
+ capability and marks what is already present.
15
+
16
+
17
+ ## Direct Three.js
18
+
19
+ Use directly for `Object3D` hierarchy and transforms; standard geometries,
20
+ `Shape`, extrusion, lathing, tubes, and curves; materials, textures, lights,
21
+ shadows, cameras, loaders, raycasting, and animation; and official addons such
22
+ as `RoundedBoxGeometry` and `BufferGeometryUtils`. Do not wrap ordinary
23
+ property access.
24
+
25
+ ## Rigging and validation helpers
26
+
27
+ Keep helpers thin: create named native joints; sample exact-time poses and
28
+ end-effector bounds; report unique names, finite transforms, angular range,
29
+ and contact travel; expose `SkeletonHelper` only as a diagnostic; and convert
30
+ accepted reusable motion into ordinary `AnimationClip`s.
31
+
32
+ Do not wrap `AnimationMixer`, `AnimationClip`, `KeyframeTrack`, or normal bone
33
+ transforms. Rigid machinery attaches parts directly to joints; deforming
34
+ meshes require real normalized skin attributes — weight them in Blender and
35
+ let the glTF exporter write `JOINTS_0`/`WEIGHTS_0`. Blender's automatic
36
+ weighting can report FINISHED having weighted nothing: check the weights.
37
+
38
+ ## Geometry libraries
39
+
40
+ - `three-mesh-bvh` for accelerated raycasting, closest-point queries, surface
41
+ placement and large-mesh spatial tests; `three-bvh-csg` for booleans on
42
+ watertight meshes when raw `BufferGeometry` interop matters — validate
43
+ structurally and visually. Both are ordinary libraries you call directly.
44
+ - Evaluate Manifold for robust solids, converting results back to
45
+ `BufferGeometry`.
46
+ - Use Replicad or OpenCascade only when CAD workplanes, precise fillets,
47
+ shells, or face selection justify their cost.
48
+ - Use glTF Transform outside the runtime bundle for welding, pruning,
49
+ simplification, instancing, compression, and texture processing.
50
+
51
+ Learn functional composition from JSCAD, workplanes/selectors from CadQuery,
52
+ and presentation helpers from Drei. Modifier coverage is Blender's own. Do not
53
+ adopt an alternate persistent scene model to imitate them.
54
+
55
+ ## Proven prototype surface
56
+
57
+ Proven craft techniques: profile lathing, beveled extrusion, arched frames,
58
+ deterministic canvas textures, CSG, curve pipes, per-material anime profiles,
59
+ pixel-width silhouette ink, distance-faded creases, rigid bone chains,
60
+ exact-time gait validation, stepped pose timing, hard shadows, environment
61
+ lighting, limited AO/bloom, a subtle color composite, and SMAA. Treat them as
62
+ techniques to write in project source, not runtime APIs. Portable GLB ink
63
+ emits ordinary expanded meshes and `LineSegments`; the source-quality
64
+ ink uses project shader hooks and should remain source-only unless an explicit
65
+ import recipe recreates it.
@@ -0,0 +1,12 @@
1
+ {
2
+ "mcpServers": {
3
+ "vgai": {
4
+ "command": "npm",
5
+ "args": ["run", "--silent", "vgai", "--", "mcp", "."]
6
+ },
7
+ "blender": {
8
+ "command": "npm",
9
+ "args": ["run", "--silent", "vgai", "--", "blender-mcp"]
10
+ }
11
+ }
12
+ }
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1,4 @@
1
+ {
2
+ "version": 1,
3
+ "operations": {}
4
+ }
@@ -0,0 +1,178 @@
1
+ // A minimal preset that follows the rules. Domain: a simple spec issue whose
2
+ // acceptance criteria are GFM task-list items, each carrying commit-backed
3
+ // evidence as a nested list. The whole thing is ONE strict Zod schema; mdast
4
+ // fills it; rules validate it with injected context.
5
+ //
6
+ // Hard schema = the core fields (id/title/summary/status, id/status/evidence,
7
+ // id) PLUS preset-specific strict fields (a status enum, AC `text`, evidence
8
+ // `commit`). No passthrough, no unknown.
9
+
10
+ // A STANDALONE preset: imports ONLY the public mechanism from `ztrack/preset-kit`.
11
+ import {
12
+ z, toMdast, nodeText, type MdNode,
13
+ check as runCheck, rule, gitWorld,
14
+ type Context, type IssueColumns, type IssueRecord, type Preset, type VisualizerSpec,
15
+ } from 'ztrack/preset-kit';
16
+
17
+ // ── the hard schema (core + preset-specific, all strict) ────────────────────
18
+ export const SpecEvidenceSchema = z.object({
19
+ id: z.string().min(1), // core
20
+ commit: z.string().regex(/^[0-9a-f]{7,40}$/), // preset: evidence is commit-backed
21
+ }).strict();
22
+
23
+ export const SpecAcStatusSchema = z.enum(['pending', 'passed', 'failed']); // preset's status vocabulary
24
+ export const SpecAcSchema = z.object({
25
+ id: z.string().min(1), // core
26
+ status: SpecAcStatusSchema, // core (preset narrows the type)
27
+ evidence: z.array(SpecEvidenceSchema), // core
28
+ text: z.string().min(1), // preset
29
+ }).strict();
30
+
31
+ export const SpecIssueStatusSchema = z.enum(['draft', 'in-review', 'done']);
32
+ export const SpecIssueSchema = z.object({
33
+ id: z.string().min(1), // core
34
+ title: z.string().min(1), // core
35
+ summary: z.string(), // core
36
+ status: SpecIssueStatusSchema, // core (narrowed)
37
+ acceptanceCriteria: z.array(SpecAcSchema), // core
38
+ }).strict();
39
+
40
+ export const SpecRootSchema = z.object({ issues: z.array(SpecIssueSchema) }).strict();
41
+ export type SpecRoot = z.infer<typeof SpecRootSchema>;
42
+
43
+ // ── mdast parse: markdown -> the schema shape (structured, no prose mining) ──
44
+ // MdNode / toMdast / nodeText are rented from the kit (shared mdast mechanism).
45
+ function firstParagraphText(item: MdNode): string {
46
+ const p = (item.children ?? []).find((c) => c.type === 'paragraph');
47
+ return p ? nodeText(p).split('\n')[0]!.trim() : '';
48
+ }
49
+
50
+ // designated-position parses (the AC line, the evidence line) — not free-prose mining.
51
+ function splitAcIdText(line: string): { id: string; text: string } {
52
+ const m = /^(\S+)\s+(.+)$/.exec(line);
53
+ return m ? { id: m[1]!, text: m[2]!.trim() } : { id: line, text: line };
54
+ }
55
+
56
+ function parseSpecIssue(record: IssueRecord): Record<string, unknown> {
57
+ // id/title/status come STRUCTURED from the record's columns; only summary + ACs are
58
+ // parsed from the body.
59
+ const issue: Record<string, unknown> = { id: record.id, title: record.title, status: record.status || 'draft', summary: '', acceptanceCriteria: [] };
60
+ const tree = toMdast(record.body);
61
+ let inAc = false;
62
+
63
+ for (const node of tree.children ?? []) {
64
+ if (node.type === 'heading') {
65
+ inAc = /acceptance criteria/i.test(nodeText(node));
66
+ continue;
67
+ }
68
+ if (node.type === 'paragraph') {
69
+ const summary = /^Summary:\s*(.+)$/im.exec(nodeText(node))?.[1]?.trim();
70
+ if (summary) issue.summary = summary;
71
+ continue;
72
+ }
73
+ if (node.type === 'list' && inAc) {
74
+ const acs: unknown[] = [];
75
+ for (const item of node.children ?? []) {
76
+ if (item.type !== 'listItem') continue;
77
+ const { id, text } = splitAcIdText(firstParagraphText(item));
78
+ const status = item.checked === true ? 'passed' : 'pending';
79
+ const evidence: unknown[] = [];
80
+ const nested = (item.children ?? []).find((c) => c.type === 'list');
81
+ for (const evItem of nested?.children ?? []) {
82
+ const commit = /commit:\s*([0-9a-fA-F]+)/.exec(firstParagraphText(evItem))?.[1]?.toLowerCase();
83
+ if (commit) evidence.push({ id: `${id}/ev${evidence.length + 1}`, commit });
84
+ }
85
+ acs.push({ id, status, text, evidence });
86
+ }
87
+ issue.acceptanceCriteria = acs;
88
+ }
89
+ }
90
+ return issue;
91
+ }
92
+
93
+ // The root: each issue's metadata is structured (its record's columns); content from body.
94
+ export function parseSpec(records: IssueRecord[]): unknown {
95
+ return { issues: records.map(parseSpecIssue) };
96
+ }
97
+
98
+ // ── serialize: the validated issue -> its STORED form (content body + metadata columns) ──
99
+ // The evidence id is positional (`<acId>/ev<n>`), so it isn't emitted — re-parsing
100
+ // regenerates it. A passed AC is the checked box; pending/failed are unchecked.
101
+ export function serializeSpecIssue(issue: SpecRoot['issues'][number]): { body: string; columns: IssueColumns } {
102
+ const out: string[] = [];
103
+ if (issue.summary) out.push(`Summary: ${issue.summary}`, '');
104
+ out.push('## Acceptance Criteria', '');
105
+ for (const ac of issue.acceptanceCriteria) {
106
+ out.push(`- [${ac.status === 'passed' ? 'x' : ' '}] ${ac.id} ${ac.text}`);
107
+ for (const ev of ac.evidence) out.push(` - commit: ${ev.commit}`);
108
+ }
109
+ return { body: out.join('\n') + '\n', columns: { title: issue.title, status: issue.status } };
110
+ }
111
+
112
+ // ── rules: declarative records over the engine's derived model ──────────────
113
+ // Duplicate-id detection is universal, so it arrives on the core model (m.duplicateAcIds
114
+ // / m.duplicateIssueIds) — this preset writes no derive and uses no blocking graph.
115
+ type SpecAC = SpecRoot['issues'][number]['acceptanceCriteria'][number];
116
+ type SpecEvidence = SpecAC['evidence'][number];
117
+
118
+ const shaMatches = (a: string, b: string) => a.startsWith(b) || b.startsWith(a);
119
+
120
+ const SPEC_RULES = [
121
+ rule<SpecRoot, { issueId: string; acId: string; ac: SpecAC }>({
122
+ code: 'passed_ac_missing_evidence', select: (m) => m.acs,
123
+ when: ({ ac }) => ac.status === 'passed' && ac.evidence.length === 0,
124
+ message: ({ ac }) => `AC ${ac.id} is passed but cites no commit-backed evidence.`,
125
+ }),
126
+ rule<SpecRoot, { issueId: string; acId: string; evidenceId: string; ev: SpecEvidence }>({
127
+ code: 'evidence_commit_not_found', select: (m) => m.evidence,
128
+ when: ({ ev }, m) => { const c = m.context.git?.existingCommits; return !!c && !c.some((x) => shaMatches(x, ev.commit)); },
129
+ message: ({ ev }) => `Evidence ${ev.id} cites commit ${ev.commit}, which does not exist.`,
130
+ subject: ({ ev }) => ev.commit, // the missing sha — a `ref:` waiver pins to exactly this occurrence
131
+ }),
132
+ rule<SpecRoot, { issueId: string; acId: string }>({
133
+ code: 'duplicate_ac_id', select: (m) => m.duplicateAcIds,
134
+ message: ({ acId }) => `Duplicate AC id ${acId}.`,
135
+ }),
136
+ rule<SpecRoot, { issueId: string }>({
137
+ code: 'duplicate_issue_id', select: (m) => m.duplicateIssueIds,
138
+ message: ({ issueId }) => `Duplicate issue id ${issueId}.`,
139
+ }),
140
+ ];
141
+
142
+ // ── the dashboard's vocabulary (VIZ-2), as plain data ────────────────────────────────────────
143
+ // spec's OWN vocabulary — NOT simple-sdlc's default.tsx vocabulary, which this preset's schema
144
+ // doesn't share: a 3-state lifecycle (no ready/in-progress split), no assignee, no PR, and an AC
145
+ // with just id/text (no version, no proof, no image/acVersion-bearing evidence — see
146
+ // SpecAcSchema/SpecEvidenceSchema above). Only map fields this schema actually has; a mapping
147
+ // this preset can't back with a real field (pr, acProof, acEvidence) is simply omitted. Field
148
+ // references and literal labels ONLY (see `VisualizerSpec`, `ztrack/preset-kit`) — no functions,
149
+ // no markup. Installed into your repo verbatim: edit freely, keeping statusOrder in sync with
150
+ // SpecIssueStatusSchema above (`boilerplates/presets/visualizerVocabulary.test.ts` checks that).
151
+ const SPEC_VISUALIZER: VisualizerSpec = {
152
+ statusOrder: ['draft', 'in-review', 'done'], // must equal SpecIssueStatusSchema above
153
+ acUnitLabel: 'Acceptance Criteria',
154
+ acText: { id: 'id', text: 'text' }, // SpecAcSchema.{id,text} — no `version` field to map
155
+ // no assignee/pr: SpecIssueSchema has neither. No acProof: SpecAcSchema has no proof field.
156
+ // No acEvidence: SpecEvidenceSchema is only {id, commit} — no image/acVersion fields to map.
157
+ };
158
+
159
+ export const SpecPreset: Preset<SpecRoot> = {
160
+ name: 'spec',
161
+ schema: SpecRootSchema,
162
+ visualizer: SPEC_VISUALIZER,
163
+ // observed facts: commit existence (no PR model in this preset).
164
+ loadContext: (input) => gitWorld(input.projectRoot, [], { verifyCommits: input.verifyCommits }),
165
+ parse: parseSpec,
166
+ serialize: serializeSpecIssue, // issue -> { body, columns }; the inverse of parse
167
+ rules: SPEC_RULES,
168
+ // `ztrack issue scaffold` starter: a pending AC (green to begin). Mark it [x] + cite a
169
+ // `- commit: <sha>` once the behavior is implemented.
170
+ scaffold: (_title) => `Summary: A short spec of the behavior.\n\n## Acceptance Criteria\n\n- [ ] AC-1 Describe one observable acceptance criterion.\n`,
171
+ };
172
+
173
+ export function checkSpec(records: IssueRecord[], ctx?: Context) {
174
+ return runCheck(SpecPreset, records, ctx);
175
+ }
176
+
177
+ // The installed entrypoint: the resolver reads the preset off `default`.
178
+ export default SpecPreset;