@volter/game-editor 0.5.68 → 0.5.69

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 (548) hide show
  1. package/BUNDLED_NOTICES +10954 -5077
  2. package/LICENSE +1 -1
  3. package/LICENSE-BLENDER +2 -2
  4. package/NOTICE +2 -2
  5. package/additions/canvas/package.json +8 -0
  6. package/additions/canvas/src/canvas-mount.ts +46 -0
  7. package/additions/canvas/src/scene2d.tsx +18 -0
  8. package/catalog/entries/bake.json +1 -1
  9. package/catalog/entries/blender.json +3 -3
  10. package/catalog/entries/music.json +5 -5
  11. package/catalog/project-source/LICENSE +1 -1
  12. package/catalog/project-source/src/contributions/bake.kind.ts +2 -2
  13. package/catalog/project-source/src/contributions/builder-document.tsx +1 -1
  14. package/catalog/project-source/src/contributions/builder-ui.tsx +3 -3
  15. package/catalog/project-source/src/contributions/module-source.ts +4 -4
  16. package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +59 -59
  17. package/catalog/project-source/src/lib/static-batch/Frozen.tsx +1 -1
  18. package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +1 -1
  19. package/catalog/project-source/src/tools/bake-preview.tool.ts +9 -9
  20. package/dist/.vite/manifest.json +3999 -3999
  21. package/dist/assets/{AssetBudgetPanel-P2PeL_X5.js → AssetBudgetPanel-BMR3AQhc.js} +4 -4
  22. package/dist/assets/AudioViewer-DESxi7pU.js +1 -0
  23. package/dist/assets/{CanvasBoardDocument-BFJdTVGp.js → CanvasBoardDocument-Q_nrYFlB.js} +1 -1
  24. package/dist/assets/CanvasSceneViewport-WZMoKy_F.js +1 -0
  25. package/dist/assets/ColorInput-C2EK-OnD.js +1 -0
  26. package/dist/assets/{EntityModelDocument-Du8wIbyK.js → EntityModelDocument-B_4ENTCq.js} +1 -1
  27. package/dist/assets/{EnvironmentAssetDocument-_SttfMY_.js → EnvironmentAssetDocument-BZBp6OFJ.js} +1 -1
  28. package/dist/assets/{GameplaySessionTimeline-CWudWnfd.js → GameplaySessionTimeline-1ivaucpv.js} +1 -1
  29. package/dist/assets/ImageViewer-D16OExYu.js +1 -0
  30. package/dist/assets/{InspectorCanvasPreview-CEr_Kxna.js → InspectorCanvasPreview-BrFjhoiD.js} +1 -1
  31. package/dist/assets/InspectorObjectPreview-CY5xVsPR.js +1 -0
  32. package/dist/assets/JsonAssetDocument-CvjTlcdr.js +2 -0
  33. package/dist/assets/{LiveModuleDocument-BWjOzO_6.js → LiveModuleDocument-ne1o9giX.js} +1 -1
  34. package/dist/assets/{LutAssetDocument-DIc6nsht.js → LutAssetDocument-Cp0v-O7q.js} +1 -1
  35. package/dist/assets/{ModelAssetDocument-_CqTsX_A.js → ModelAssetDocument-Ceu7OIN9.js} +1 -1
  36. package/dist/assets/{NonThreeAuthoringBootstrap-C-V23E1e.js → NonThreeAuthoringBootstrap-DiElZf-e.js} +1 -1
  37. package/dist/assets/Object3DDocumentToolbar-BLNamqii.js +1 -0
  38. package/dist/assets/Object3DDocumentViewport-D6QoHfa_.js +2 -0
  39. package/dist/assets/{Object3DPreview-BPHEr3vI.js → Object3DPreview-ZVokr044.js} +1 -1
  40. package/dist/assets/OnlineAssetDetail-Dnckd7zB.js +1 -0
  41. package/dist/assets/PlayBar-DsMitSgy.js +1 -0
  42. package/dist/assets/{QuarksAssetDocument-4Dne3EHx.js → QuarksAssetDocument-B5J8uHFM.js} +1 -1
  43. package/dist/assets/ReactCanvasControls-CmfvxJYY.js +1 -0
  44. package/dist/assets/RootSelectionOverlay-BWsNiSuM.js +1 -0
  45. package/dist/assets/{ShaderAssetDocument-W3ZjLCkt.js → ShaderAssetDocument-CT7XzsZq.js} +4 -4
  46. package/dist/assets/ShadowEditor-YO5KEfnz.js +1 -0
  47. package/dist/assets/{SourceAssetViewer-BGUeDAEv.js → SourceAssetViewer-FSLup2km.js} +1 -1
  48. package/dist/assets/StageHost-DYfGYwvq.js +2 -0
  49. package/dist/assets/{StoryPreviewMount-Di8uMovM.js → StoryPreviewMount-BhvT5QlB.js} +1 -1
  50. package/dist/assets/ThreeBoardDocument-B-z2nwnH.js +2 -0
  51. package/dist/assets/{ThreeIsolationSceneContent-BAKurKW5.js → ThreeIsolationSceneContent-B5pU4Y6k.js} +1 -1
  52. package/dist/assets/{ToolObject3DPreview-CffvGJ1h.js → ToolObject3DPreview-VtraiQ4Q.js} +1 -1
  53. package/dist/assets/Toolbar-M62Gob9T.js +1 -0
  54. package/dist/assets/{TransientHint-CgmkrmKF.js → TransientHint-Cc40mHWE.js} +1 -1
  55. package/dist/assets/VideoViewer-BxcUwXQm.js +1 -0
  56. package/dist/assets/ViewportShadingMenu-BoMPnTVh.js +1 -0
  57. package/dist/assets/active-ingest-0QjJWb7i.js +3 -0
  58. package/dist/assets/{animation-clock-fLmY_3--.js → animation-clock-BXEwUJtz.js} +1 -1
  59. package/dist/assets/animation-mixers.service-C-Ko4KzM.js +1 -0
  60. package/dist/assets/animation-timeline.utility-Bl15-rYb.js +1 -0
  61. package/dist/assets/{asset-budget-asset.menu-BDRDWrvx.js → asset-budget-asset.menu-BUa3g0Wy.js} +1 -1
  62. package/dist/assets/{asset-budget.action-tQmNGQHC.js → asset-budget.action-Dl5eVPIo.js} +1 -1
  63. package/dist/assets/{asset-budget.document-BthgX37Z.js → asset-budget.document-DJylQ-0h.js} +1 -1
  64. package/dist/assets/{asset-budget.menu-DfyWVH6p.js → asset-budget.menu-BJtvNMLj.js} +1 -1
  65. package/dist/assets/asset-editor-persistence-BIbf5u0Q.js +1 -0
  66. package/dist/assets/asset-loaders-DoNflsHL.js +2 -0
  67. package/dist/assets/{asset-preview-Cv7tfD98.js → asset-preview-DxlSdRZn.js} +1 -1
  68. package/dist/assets/{audio-unlock.service-BvHvZjzx.js → audio-unlock.service-CTaiyXF9.js} +1 -1
  69. package/dist/assets/audio.utility-CEmNc68t.js +1 -0
  70. package/dist/assets/autoplay.service-BZLSUyL8.js +1 -0
  71. package/dist/assets/{babylon-authoring-adapter-Cg5ALSpr.js → babylon-authoring-adapter-BZvV2bz_.js} +1 -1
  72. package/dist/assets/binding-resolver-DGbk9_XR.js +2 -0
  73. package/dist/assets/blender-emscripten-engine-B7lfg-RX.js +2 -0
  74. package/dist/assets/{blender-node-editor.document-B92MO51u.js → blender-node-editor.document-wXJobGNH.js} +1 -1
  75. package/dist/assets/{blender-properties-tab-CDVyDAbf.js → blender-properties-tab-7GFf80ev.js} +1 -1
  76. package/dist/assets/{blender-runtime-host-CuniE0sy.js → blender-runtime-host-CILxrx5T.js} +2 -2
  77. package/dist/assets/{blender-runtime-skin-B_tOz5j5.js → blender-runtime-skin-Cd5lQYsC.js} +7 -7
  78. package/dist/assets/{blender-runtime.document-DxUwLiEW.js → blender-runtime.document-C0r_R49S.js} +7 -7
  79. package/dist/assets/{blender-timeline.document-BdEEoQbK.js → blender-timeline.document-BaISZMBc.js} +1 -1
  80. package/dist/assets/{blender-uv-editor.document-EMSUlRh4.js → blender-uv-editor.document-CT_fsyyA.js} +1 -1
  81. package/dist/assets/blender-version.status-DzEx7u7k.js +1 -0
  82. package/dist/assets/blender-wali-engine-DOiQCBXH.js +2 -0
  83. package/dist/assets/{blender.command-BkBML2SY.js → blender.command-DdiKd8mZ.js} +1 -1
  84. package/dist/assets/blender.status-BMETIbb2.js +1 -0
  85. package/dist/assets/board-guides-CjHQ9Ynm.js +1 -0
  86. package/dist/assets/body-marks-C1LxJtQb.js +1 -0
  87. package/dist/assets/{bridge.command-VnplZ81v.js → bridge.command-DXUeavn5.js} +3 -3
  88. package/dist/assets/{browserAll-BCmkqg8n.js → browserAll-Dg46xT22.js} +1 -1
  89. package/dist/assets/{build-player.document-DV7YcJQt.js → build-player.document-BHwVV3K0.js} +1 -1
  90. package/dist/assets/build-profiles.document-HkpS-Kxa.js +2 -0
  91. package/dist/assets/build-progress.status-u1J0Rm1D.js +1 -0
  92. package/dist/assets/{build-session-BGe0eGrQ.js → build-session-BLboUUbw.js} +2 -2
  93. package/dist/assets/{build.action-Bdj4ZEL_.js → build.action-C00DL83N.js} +1 -1
  94. package/dist/assets/{build.command-DAWiYvPa.js → build.command-Cjk_NY75.js} +1 -1
  95. package/dist/assets/build.header-BWNmNWFT.js +1 -0
  96. package/dist/assets/{build.menu-BiRNC_xc.js → build.menu-BBYtqCIq.js} +1 -1
  97. package/dist/assets/{build.service-Dw9K6VSF.js → build.service-DOU15tKN.js} +1 -1
  98. package/dist/assets/{camera-C-qXzXFf.js → camera-7DGyYW7Y.js} +1 -1
  99. package/dist/assets/{camera-runtime.inspector-BDrwWRlU.js → camera-runtime.inspector-n-jiOR-3.js} +1 -1
  100. package/dist/assets/{canvas-design-mount-DLn49Zle.js → canvas-design-mount-CSRHU-ag.js} +4 -4
  101. package/dist/assets/canvas-entry-runtime-BST8yRuK.js +2 -0
  102. package/dist/assets/{canvas-preview-frames-B5xFRjhQ.js → canvas-preview-frames-Cja32aW2.js} +1 -1
  103. package/dist/assets/{canvas-story-capture.service-DQ_leYyi.js → canvas-story-capture.service-D5R5HJ8n.js} +2 -2
  104. package/dist/assets/capability-coverage-ByWftxk4.js +7 -0
  105. package/dist/assets/{collaboration-presence-BOS1t8wI.js → collaboration-presence-D6MC9xJN.js} +1 -1
  106. package/dist/assets/{collider-Bf4Uk6LW.js → collider-B78EcUc9.js} +1 -1
  107. package/dist/assets/{component-board.service-DFSSCaCf.js → component-board.service-BaQI5Oas.js} +2 -2
  108. package/dist/assets/component-board.service-CkjrsD8x.js +2 -0
  109. package/dist/assets/{component-board.service-CpVXGhz5.js → component-board.service-Dvjz_g-x.js} +2 -2
  110. package/dist/assets/component-contracts.service-C3-AXQp7.js +1 -0
  111. package/dist/assets/component-instance-root-DLI40MiB.js +1 -0
  112. package/dist/assets/{component-verbs.command-DGzZAV_Z.js → component-verbs.command-Brr_WcaR.js} +1 -1
  113. package/dist/assets/{component-verbs.service-D1rVRogp.js → component-verbs.service-DC2sC3j3.js} +1 -1
  114. package/dist/assets/{config-D-EAAhqP.js → config-BI_7osdR.js} +4 -4
  115. package/dist/assets/{configurations-_HZOWZPy.js → configurations-XP9YLkrt.js} +1 -1
  116. package/dist/assets/connection.status-BhRwcFx0.js +1 -0
  117. package/dist/assets/{constraint-5KLYpGm7.js → constraint-Bp1l8hY-.js} +1 -1
  118. package/dist/assets/constraints.inspector-Dm1cycK3.js +1 -0
  119. package/dist/assets/{content-bounds-DKBD7nsv.js → content-bounds-DROIchTa.js} +1 -1
  120. package/dist/assets/{contract-system-adapters-h6OUBRYA.js → contract-system-adapters-Cn7OW_ay.js} +1 -1
  121. package/dist/assets/coverage.service-l42ty7lr.js +3 -0
  122. package/dist/assets/{create-runtime-Bg2uYMfh.js → create-runtime-B_uTwsmi.js} +2 -2
  123. package/dist/assets/curve-THOUsg-j.js +1 -0
  124. package/dist/assets/{data-asset-7Nfmx-28.js → data-asset-DAANayR6.js} +1 -1
  125. package/dist/assets/data-check-core-CHqar_E8.js +1 -0
  126. package/dist/assets/data-ref-CN34UeVw.js +1 -0
  127. package/dist/assets/debug-bridge-BD1XVAIB.js +1 -0
  128. package/dist/assets/debug-registry-ggQWxtu-.js +1 -0
  129. package/dist/assets/{deferred-ingest-play-Bej67_y9.js → deferred-ingest-play-B2JUlwlT.js} +2 -2
  130. package/dist/assets/{design-time-canvas-mount-CFW9ZWuk.js → design-time-canvas-mount-as9cN9I6.js} +2 -2
  131. package/dist/assets/design-time-layers-BRseeSmV.js +1 -0
  132. package/dist/assets/{design-time-mount.service-DJeAPUB_.js → design-time-mount.service-BTVu3yKo.js} +2 -2
  133. package/dist/assets/{design-time-mount.service-_R1UDCw3.js → design-time-mount.service-DKvc7lVK.js} +2 -2
  134. package/dist/assets/design-time-react-mount-C7rB56QD.js +1 -0
  135. package/dist/assets/{document-preview-three-5cbuuJMH.js → document-preview-three-CxmRhCcV.js} +1 -1
  136. package/dist/assets/{dom-authoring-adapter-CoESNvrM.js → dom-authoring-adapter-L8OzXfmE.js} +1 -1
  137. package/dist/assets/{draco3d-Sk9K4AUT.js → draco3d-BjNuXv66.js} +1 -1
  138. package/dist/assets/{edit-mode-audio.service-CH6J-8N7.js → edit-mode-audio.service-BwI5u845.js} +1 -1
  139. package/dist/assets/edit-mode-authoring-D5f7aHHl.js +1 -0
  140. package/dist/assets/{edit-mode-networking.service-C4o2pGHX.js → edit-mode-networking.service-DqP_4lbI.js} +1 -1
  141. package/dist/assets/editor-api-BM7H_F4G.js +1 -0
  142. package/dist/assets/{editor-layers-B4oYfpj8.js → editor-layers-D-CTUqco.js} +1 -1
  143. package/dist/assets/editor-presentation-activity-CqJH4G9t.js +1 -0
  144. package/dist/assets/{editor-shell-store-Bh1S7M54.js → editor-shell-store-DHVWS8cE.js} +1 -1
  145. package/dist/assets/{entity-object-B_5Gc0Ky.js → entity-object-MKYemTFM.js} +1 -1
  146. package/dist/assets/{extend-DcEyE5jI.js → extend-BrgqZiMY.js} +1 -1
  147. package/dist/assets/{fork-menu-CKjNh3MO.js → fork-menu-DE2MK3Nq.js} +1 -1
  148. package/dist/assets/{frame-debugger-store-D5YViF_8.js → frame-debugger-store-BXoLKTdZ.js} +1 -1
  149. package/dist/assets/game-audio-BeCyd0Ha.js +1 -0
  150. package/dist/assets/{game-contract-seams-C0AVYwvO.js → game-contract-seams-tyKDsfaP.js} +1 -1
  151. package/dist/assets/{game-css-scope-transform-8GOvVu1s.js → game-css-scope-transform-DcjrwtVc.js} +2 -2
  152. package/dist/assets/game-document.service-CTb2itHQ.js +1 -0
  153. package/dist/assets/{game-eval.command-4wa9vqWE.js → game-eval.command-CpDKXOQU.js} +2 -2
  154. package/dist/assets/game-module-access-BTInp2NG.js +1 -0
  155. package/dist/assets/game-network-DW5ARz4R.js +22 -0
  156. package/dist/assets/{gameplay-export-K5AcStVC.js → gameplay-export-cHk3v9y-.js} +1 -1
  157. package/dist/assets/gameplay-replay-HRenPTtU.js +1 -0
  158. package/dist/assets/{gameplay.command-DoWqBWhH.js → gameplay.command-DcY2lKKX.js} +1 -1
  159. package/dist/assets/generation-CdOATubd.css +1 -0
  160. package/dist/assets/{generation-jobs-CiabIfR0.js → generation-jobs-CJBehuUp.js} +1 -1
  161. package/dist/assets/generation.service-BMOc-C9i.js +1 -0
  162. package/dist/assets/{generations-DU9rCeQR.js → generations-ssgVOe_6.js} +1 -1
  163. package/dist/assets/generations.status-B_SmPReI.js +1 -0
  164. package/dist/assets/hierarchy-marks-BuCO8Ke-.js +1 -0
  165. package/dist/assets/hierarchy-marks-CsTaTkc7.js +1 -0
  166. package/dist/assets/hosted-asset-materialization-CiXZI85V.js +2 -0
  167. package/dist/assets/{ibl-override-material-CiKkaOTW.js → ibl-override-material-CMo_a49U.js} +1 -1
  168. package/dist/assets/index-B0S4fQQV.js +1 -0
  169. package/dist/assets/{index-Kb9_s5aP.js → index-B9bd4k-t.js} +1 -1
  170. package/dist/assets/index-BMxv2MNV.js +1 -0
  171. package/dist/assets/{index-CC1puVjo.js → index-Bm4_DmRO.js} +1 -1
  172. package/dist/assets/{index-BsYc2Oyj.js → index-BvBlIRwM.js} +1 -1
  173. package/dist/assets/{index-C4AUQbmq.js → index-BweKDdi_.js} +1 -1
  174. package/dist/assets/{index-CaG87ZF-.js → index-C5ZAyrKq.js} +271 -270
  175. package/dist/assets/index-CPiRKiDC.css +1 -0
  176. package/dist/assets/index-CfpGZrbC.js +1 -0
  177. package/dist/assets/index-Czvj6whv.js +1 -0
  178. package/dist/assets/{index-C20Flc1s.js → index-DgPDGGSV.js} +2 -2
  179. package/dist/assets/{inference-diagnostics-MGcIHEX6.js → inference-diagnostics-DLt9ql9I.js} +1 -1
  180. package/dist/assets/{ingest-boot-viewport-D2okO6JI.js → ingest-boot-viewport-BXVXjYpG.js} +1 -1
  181. package/dist/assets/ingest-siblings-DWJ7OGB_.js +1 -0
  182. package/dist/assets/ingest-source-persistence-6ShMoSCa.js +1 -0
  183. package/dist/assets/ingest.service-BBbX8ibg.js +1 -0
  184. package/dist/assets/{inspect-C8RP8G5F.js → inspect-Cz3Zyx_1.js} +1 -1
  185. package/dist/assets/inspection-D8fZOHCM.js +1 -0
  186. package/dist/assets/instances.command-BrdlngrL.js +1 -0
  187. package/dist/assets/{json-history-resource-CTXRV4GD.js → json-history-resource-Uqrihfc8.js} +1 -1
  188. package/dist/assets/{layered-pick-B_-BRrRD.js → layered-pick-CAVQMPI7.js} +1 -1
  189. package/dist/assets/{light-CskDQ8gF.js → light-CqzsCWeJ.js} +1 -1
  190. package/dist/assets/{live-project-verbs-BOAQN3ME.js → live-project-verbs-CdFmLYOo.js} +1 -1
  191. package/dist/assets/{machine.document-BxOoCOo9.js → machine.document-DRIFOVaa.js} +1 -1
  192. package/dist/assets/{machines.finder-CqEceWzS.js → machines.finder-DPCT6few.js} +1 -1
  193. package/dist/assets/material-BVApn1V_.js +1 -0
  194. package/dist/assets/{material-factory-qB9pzcQf.js → material-factory-B_75xxFD.js} +1 -1
  195. package/dist/assets/{mesh-5--4qA-C.js → mesh-DdA3mExo.js} +1 -1
  196. package/dist/assets/model-asset-sections-D1uxOu2v.css +1 -0
  197. package/dist/assets/model-asset-sections.service-CJnSIckZ.js +1 -0
  198. package/dist/assets/{model-inspection-MrJY0U_-.js → model-inspection-DvspbmJl.js} +1 -1
  199. package/dist/assets/{model-thumbnail-uk-2sblh.js → model-thumbnail-BmQs-h6t.js} +1 -1
  200. package/dist/assets/{models.finder-rk8dhgO8.js → models.finder-Qv_Hsccy.js} +1 -1
  201. package/dist/assets/module-mode-MJ4Gbsry.js +2 -0
  202. package/dist/assets/mount-canvas-ingest-root-BxtM8OaB.js +2 -0
  203. package/dist/assets/mount-dom-ingest-root-pGatqO46.js +2 -0
  204. package/dist/assets/{mount-ingest-root-BC3-1Cw1.js → mount-ingest-root-C7jb-mCl.js} +2 -2
  205. package/dist/assets/{mount-manifest-QJOB11Kv.js → mount-manifest-BfoHBuzn.js} +1 -1
  206. package/dist/assets/mount-readiness-DyAd17pe.js +4 -0
  207. package/dist/assets/mount-three-ingest-root-Boa5mcaF.js +1 -0
  208. package/dist/assets/{mounted-authoring-B7RL_V28.js → mounted-authoring-DxMISwvR.js} +1 -1
  209. package/dist/assets/{mounted-story-viewport-source-CnYhX3vW.js → mounted-story-viewport-source-DfnLxI1f.js} +1 -1
  210. package/dist/assets/{native-debug-module-B-rWJfWE.js → native-debug-module-BlrALjM3.js} +1 -1
  211. package/dist/assets/{navigation-BVu-aVmF.js → navigation-CqG5o5AR.js} +1 -1
  212. package/dist/assets/{navmesh.menu-C3M63eR4.js → navmesh.menu-D4TdVDhe.js} +1 -1
  213. package/dist/assets/{navmesh.service-B0H1fUfn.js → navmesh.service-DWKT5ruQ.js} +1 -1
  214. package/dist/assets/network-observer.service-ZRAquNq4.js +1 -0
  215. package/dist/assets/network.utility-DjeOEvAY.js +1 -0
  216. package/dist/assets/object-marks-BnvSuCTt.js +1 -0
  217. package/dist/assets/{object3d-authoring-subject-BDrxd1GA.js → object3d-authoring-subject-XccsO0xG.js} +1 -1
  218. package/dist/assets/{object3d-document-session-registry-OjqzJ86S.js → object3d-document-session-registry-CMRJdFp6.js} +2 -2
  219. package/dist/assets/{oid-transform-Bzc2ZJSH.js → oid-transform-DaA6yW6o.js} +1 -1
  220. package/dist/assets/{particles-Be7AvO4c.js → particles-DsQRcDBY.js} +1 -1
  221. package/dist/assets/{performance-profiler-OwnXQX0M.js → performance-profiler-CMbwGBuk.js} +1 -1
  222. package/dist/assets/pixi-authoring-adapter-BoBt8bB5.js +1 -0
  223. package/dist/assets/pixi-live-write-target-CYZgvC6U.js +1 -0
  224. package/dist/assets/{play.command-CIGRq8ow.js → play.command-D9JGJP-e.js} +2 -2
  225. package/dist/assets/pose-guard-CLabLSzf.js +1 -0
  226. package/dist/assets/presentation-COhHQdmR.js +1 -0
  227. package/dist/assets/{product-BN31wSnB.js → product-CaRGoiIH.js} +1 -1
  228. package/dist/assets/{profiler.action-D57Kj9ym.js → profiler.action-Cz7HYWjh.js} +1 -1
  229. package/dist/assets/{profiler.menu-Dh9Q5DDx.js → profiler.menu-D5aR_FBy.js} +1 -1
  230. package/dist/assets/profiler.utility-KwxlIPKb.js +1 -0
  231. package/dist/assets/{project-authoring-session-LCJAwGrD.js → project-authoring-session-DKXHVwxO.js} +2 -2
  232. package/dist/assets/project-provenance-BGnJXJwa.js +1 -0
  233. package/dist/assets/{properties-bone-constraints.inspector-CaIDq5nN.js → properties-bone-constraints.inspector-Bo-sU8eR.js} +1 -1
  234. package/dist/assets/{properties-bone.inspector-D2fcQGMF.js → properties-bone.inspector-BQiWplQv.js} +1 -1
  235. package/dist/assets/{properties-collection.inspector-CF5AtTAd.js → properties-collection.inspector-C5BnR-GE.js} +1 -1
  236. package/dist/assets/{properties-constraints.inspector-Bj2itDrS.js → properties-constraints.inspector-CyheU12R.js} +1 -1
  237. package/dist/assets/{properties-data.inspector-BfRqk0Xo.js → properties-data.inspector-CkycARja.js} +1 -1
  238. package/dist/assets/{properties-material.inspector-Bf8H0mvu.js → properties-material.inspector-Bl_PUmY-.js} +1 -1
  239. package/dist/assets/{properties-modifiers.inspector-BKShc1TH.js → properties-modifiers.inspector-j7SnOxQq.js} +1 -1
  240. package/dist/assets/{properties-object.inspector-YBh8ABnN.js → properties-object.inspector-DcR3MGLK.js} +1 -1
  241. package/dist/assets/{properties-output.inspector-CVkzfs-l.js → properties-output.inspector-BLjw6K4b.js} +1 -1
  242. package/dist/assets/{properties-particles.inspector-ChDpAq-2.js → properties-particles.inspector-BUIm2-Jf.js} +1 -1
  243. package/dist/assets/{properties-physics.inspector-BLEM7aMj.js → properties-physics.inspector-DNvRcxb6.js} +1 -1
  244. package/dist/assets/{properties-render.inspector-vU4D9xLL.js → properties-render.inspector-8FMZ-qoZ.js} +1 -1
  245. package/dist/assets/{properties-scene.inspector-C-DoN-kL.js → properties-scene.inspector-Dx7_z75k.js} +1 -1
  246. package/dist/assets/{properties-texture.inspector-DySxy1oU.js → properties-texture.inspector-WT15951-.js} +1 -1
  247. package/dist/assets/{properties-view-layer.inspector-DEKxMahJ.js → properties-view-layer.inspector-P7VNTdqr.js} +1 -1
  248. package/dist/assets/{properties-world.inspector-m5qL_TQV.js → properties-world.inspector-B3t1q8TF.js} +1 -1
  249. package/dist/assets/r3f-design-session-lsbFnoWH.js +2 -0
  250. package/dist/assets/{r3f-physics-binding-Bgzzd4ol.js → r3f-physics-binding-Cx8yhuwt.js} +1 -1
  251. package/dist/assets/{r3f-source-authoring-adapter-C8oMjdTL.js → r3f-source-authoring-adapter-jH3G0TeH.js} +1 -1
  252. package/dist/assets/react-canvas-navigation-B_gOe3CI.js +1 -0
  253. package/dist/assets/react-inspector.service-CZf1vfdX.js +1 -0
  254. package/dist/assets/react-story-board-CCm2Opwn.js +1 -0
  255. package/dist/assets/{react-three-rapier.esm-BR2ttgLS.js → react-three-rapier.esm-CHXGG51p.js} +1 -1
  256. package/dist/assets/react-world-authoring-adapter-CnzxMtYz.js +1 -0
  257. package/dist/assets/{realm-services-DefTrXnY.js → realm-services-Do9J6nsb.js} +1 -1
  258. package/dist/assets/reflection-probe-capture.inspector-BAjjIybz.js +1 -0
  259. package/dist/assets/{reflection-probe-BHNGwVyz.js → reflection-probe-sIto9mh0.js} +1 -1
  260. package/dist/assets/registry-Xnduk02T.js +1 -0
  261. package/dist/assets/{relative-import-specifier-DQzkawgj.js → relative-import-specifier-CPFTrxi4.js} +1 -1
  262. package/dist/assets/{render-env-BZ7LsGfk.js → render-env-YJlI8K0i.js} +1 -1
  263. package/dist/assets/{render-features-C7QwmhCo.js → render-features-DMSV2qKJ.js} +1 -1
  264. package/dist/assets/{render-settings-BBvkacR3.js → render-settings-CRyDhHyz.js} +1 -1
  265. package/dist/assets/resolve-three-D27rMc37.js +702 -0
  266. package/dist/assets/root-seam-contract-gjWUd5uu.js +1 -0
  267. package/dist/assets/{run-selection-BUeubtHj.js → run-selection-B0jOdyYt.js} +1 -1
  268. package/dist/assets/scene-capture-Di9cM1p4.js +1 -0
  269. package/dist/assets/scene-document.service-XxGs4HHE.js +2 -0
  270. package/dist/assets/{scene-framing-PVMqGU8h.js → scene-framing-DkZKDwH3.js} +1 -1
  271. package/dist/assets/{scene-index--lRWLEmW.js → scene-index-DHeKmalD.js} +1 -1
  272. package/dist/assets/{scene-query-s1y04OVB.js → scene-query-ByZtXA2m.js} +1 -1
  273. package/dist/assets/seeded-random-BJthDRMu.js +1 -0
  274. package/dist/assets/{session-CTXsU1lK.js → session-x8E_NJk2.js} +34 -34
  275. package/dist/assets/{setup-renderer-OOw1SykJ.js → setup-renderer-F9mG7t6r.js} +1 -1
  276. package/dist/assets/{source-object3d-authoring-adapter-RmutT5Dt.js → source-object3d-authoring-adapter-CvmFpSUj.js} +1 -1
  277. package/dist/assets/{source-persistence-backend-HviqjKZ2.js → source-persistence-backend-au3WtEn6.js} +1 -1
  278. package/dist/assets/{spark-renderer-lifecycle-DfYpvEJa.js → spark-renderer-lifecycle-B6Axb6jm.js} +1 -1
  279. package/dist/assets/{stage-keyboard-DDi7S27C.js → stage-keyboard-BQkndG_D.js} +1 -1
  280. package/dist/assets/stage-overlay-set-g6eWhuRv.js +1 -0
  281. package/dist/assets/stage-presence-markers-0CDfO5f4.js +1 -0
  282. package/dist/assets/stage-transform-tools-BzPl7OIo.js +1 -0
  283. package/dist/assets/standard-viewport-dressing-BW-dM_1h.js +24 -0
  284. package/dist/assets/{state-watch.action-DEdb1mNa.js → state-watch.action-Z1nQ5awu.js} +1 -1
  285. package/dist/assets/{state-watch.menu-jWbUM3kw.js → state-watch.menu-CQHGUF3W.js} +1 -1
  286. package/dist/assets/state-watch.utility-DCIg2i79.js +1 -0
  287. package/dist/assets/{story-capture-Dj1xkeKH.js → story-capture-BIrjDKeY.js} +1 -1
  288. package/dist/assets/story-documents-BvG2xeaR.js +3 -0
  289. package/dist/assets/{story-documents.service-iNP-ORNr.js → story-documents.service-DOSEa3ja.js} +1 -1
  290. package/dist/assets/{story-documents.service-BzQCuNBu.js → story-documents.service-y1m7XGMJ.js} +1 -1
  291. package/dist/assets/{story-media-presence-zTPlU9HR.js → story-media-presence-HLV-KaMj.js} +1 -1
  292. package/dist/assets/{story-pixi-preview-B7THvSl7.js → story-pixi-preview-CMhho2gG.js} +1 -1
  293. package/dist/assets/{story-presentation-BLXYPadR.js → story-presentation-CYhVv8Ku.js} +1 -1
  294. package/dist/assets/story-three-preview-CgcLF5lE.js +2 -0
  295. package/dist/assets/{structural-ids-Br2zjINh.js → structural-ids-BOo2BRoY.js} +1 -1
  296. package/dist/assets/studio-environment-R9qXUUcC.js +2 -0
  297. package/dist/assets/{surface-state-D9j6qNu8.js → surface-state-D8Qnowo6.js} +1 -1
  298. package/dist/assets/{syntactic-prop-specs-BTnsMOvH.js → syntactic-prop-specs-8gkBuc5j.js} +1 -1
  299. package/dist/assets/team-playtest.service-BBMZ2iyk.js +1 -0
  300. package/dist/assets/{three-oYrcK5SQ.js → three-DiL6vMXq.js} +1 -1
  301. package/dist/assets/three-authoring-adapter-CkLR2zGf.js +1 -0
  302. package/dist/assets/three-authoring.service-CovhlCGx.js +2 -0
  303. package/dist/assets/{three-ingest-runtime-CXKjNysA.js → three-ingest-runtime-CwTqAHgX.js} +1 -1
  304. package/dist/assets/{three-integration-CuAnYaTW.js → three-integration-DXOFI88n.js} +2 -2
  305. package/dist/assets/three-integration.service-rCAqpqSp.js +1 -0
  306. package/dist/assets/three-projection-core-B7Lf8tOp.js +1 -0
  307. package/dist/assets/{three-state-wXRU3rLr.js → three-state-BCACvUtm.js} +1 -1
  308. package/dist/assets/{three-story-capture.service-DMJRcqjr.js → three-story-capture.service-rTFKNtHA.js} +2 -2
  309. package/dist/assets/{three-story-model-DgiAP-oQ.js → three-story-model-BjKr7OMn.js} +1 -1
  310. package/dist/assets/three-viewport-presentation-CBzvc2v2.js +141 -0
  311. package/dist/assets/tools-DfctM216.js +1 -0
  312. package/dist/assets/transform-mode-request-DlEApNrA.js +1 -0
  313. package/dist/assets/transport-strip-xCg94CuI.js +1 -0
  314. package/dist/assets/transport.header-BRtdky0x.js +1 -0
  315. package/dist/assets/{trigger-volume-DP0G1VBe.js → trigger-volume-BLkHmfm9.js} +1 -1
  316. package/dist/assets/tuples-BDz3wbQL.js +1 -0
  317. package/dist/assets/ui-board-document-DvbK_HVN.js +2 -0
  318. package/dist/assets/{user-data-CqOoAowZ.js → user-data-C84W0V47.js} +1 -1
  319. package/dist/assets/user-data-CODoGZqA.js +1 -0
  320. package/dist/assets/{utility-view-state-Db97zwDz.js → utility-view-state-CDRxZSo-.js} +1 -1
  321. package/dist/assets/viewport-door-BARIpMu-.js +1 -0
  322. package/dist/assets/{viewport-root-presentation-B35t51xX.js → viewport-root-presentation-hRLF0BeO.js} +1 -1
  323. package/dist/assets/{viewport-surface-status-D5kZtFW5.js → viewport-surface-status-TUfhXKR9.js} +1 -1
  324. package/dist/assets/{webworkerAll-CfKEb4Ao.js → webworkerAll-PJtcQ1FD.js} +1 -1
  325. package/dist/assets/worker-BtXrsgFy.js +2 -0
  326. package/dist/assets/workspace-arrangement-DqG5sUns.js +1 -0
  327. package/dist/assets/world-documents-D69XaqUX.js +1 -0
  328. package/dist/assets/world-root-stage-binding-BgZWZEuD.js +1 -0
  329. package/dist/assets/{xstate-animation-binding-aQEmNSpm.js → xstate-animation-binding-CIyLzGHs.js} +1 -1
  330. package/dist/assets/{xstate-animation-meta-CnMX1Sc1.js → xstate-animation-meta-CbYWup3R.js} +1 -1
  331. package/dist/volter-shared-react.json +10 -0
  332. package/dist/volter-shared-three.json +3 -0
  333. package/dist-node/cli.js +239 -201
  334. package/dist-node/create.js +89 -73
  335. package/package.json +20 -19
  336. package/src/contributions.d.ts +1 -1
  337. package/src/index.ts +10 -10
  338. package/starter/cube.py +1 -1
  339. package/template/.agents/references/project-manual.md +17 -17
  340. package/template/.agents/skills/editor/SKILL.md +6 -6
  341. package/template/.agents/skills/editor/agents/openai.yaml +3 -3
  342. package/template/.agents/skills/editor/references/editor-control.md +62 -62
  343. package/template/.agents/skills/{vgai-3d-models → volter-3d-models}/SKILL.md +3 -3
  344. package/template/.agents/skills/{vgai-ingest-existing-game → volter-ingest-existing-game}/SKILL.md +2 -2
  345. package/template/.agents/skills/{vgai-music → volter-music}/SKILL.md +7 -7
  346. package/template/{.github/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/SKILL.md +9 -9
  347. package/template/.agents/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  348. package/template/{.claude/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
  349. package/template/.claude/skills/editor/SKILL.md +6 -6
  350. package/template/.claude/skills/editor/agents/openai.yaml +3 -3
  351. package/template/.claude/skills/editor/references/editor-control.md +62 -62
  352. package/template/{.github/skills/vgai-3d-models → .claude/skills/volter-3d-models}/SKILL.md +3 -3
  353. package/template/{.github/skills/vgai-ingest-existing-game → .claude/skills/volter-ingest-existing-game}/SKILL.md +2 -2
  354. package/template/.claude/skills/{vgai-threejs-authoring → volter-threejs-authoring}/SKILL.md +9 -9
  355. package/template/.claude/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  356. package/template/{.agents/skills/vgai-threejs-authoring → .claude/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
  357. package/template/.github/copilot-instructions.md +1 -1
  358. package/template/.github/skills/editor/SKILL.md +6 -6
  359. package/template/.github/skills/editor/agents/openai.yaml +3 -3
  360. package/template/.github/skills/editor/references/editor-control.md +62 -62
  361. package/template/{.claude/skills/vgai-3d-models → .github/skills/volter-3d-models}/SKILL.md +3 -3
  362. package/template/{.claude/skills/vgai-ingest-existing-game → .github/skills/volter-ingest-existing-game}/SKILL.md +2 -2
  363. package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/SKILL.md +9 -9
  364. package/template/.github/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  365. package/template/.github/skills/{vgai-threejs-authoring → volter-threejs-authoring}/references/helper-catalog.md +1 -1
  366. package/template/.mcp.json +3 -3
  367. package/template/AGENTS.md +24 -23
  368. package/template/DEVLOG.md +1 -1
  369. package/template/IDIOMS.md +3 -3
  370. package/template/LICENSE +3 -3
  371. package/template/README.md +12 -12
  372. package/template/check-idioms.ts +51 -51
  373. package/template/manifest-entry-modules-plugin.ts +17 -4
  374. package/template/package.json +13 -15
  375. package/template/server/loopback.ts +1 -1
  376. package/template/server/main.ts +4 -4
  377. package/template/server/rooms/arena-room.ts +8 -8
  378. package/template/server/rooms/game-room.ts +8 -8
  379. package/template/server/rooms.ts +2 -2
  380. package/template/src/bot/QaTester.tsx +1 -1
  381. package/template/src/bot/bot-station.ts +2 -2
  382. package/template/src/bot/tester-station.ts +1 -1
  383. package/template/src/contributions/README.md +1 -1
  384. package/template/src/contributions/analytics.analytics.tsx +1 -1
  385. package/template/src/contributions/data.document.tsx +2 -2
  386. package/template/src/contributions/pages.finder.ts +1 -1
  387. package/template/src/contributions/tester.inspector.tsx +2 -2
  388. package/template/src/contributions/use-game-modules.ts +1 -1
  389. package/template/src/input.ts +1 -1
  390. package/template/src/lib/reflections/volume-reflection-material.ts +59 -59
  391. package/template/src/lib/static-batch/Frozen.tsx +1 -1
  392. package/template/src/lib/static-batch/mutation-watch.ts +1 -1
  393. package/template/src/main.ts +19 -38
  394. package/template/src/manifest-entry-modules.d.ts +12 -1
  395. package/template/src/prefabs/HeroBox.stories.tsx +1 -1
  396. package/template/src/world.tsx +1 -1
  397. package/template/tsconfig.json +1 -1
  398. package/template/validate-manifest.ts +3 -3
  399. package/template/vite.config.ts +11 -11
  400. package/template/{vgai.adapter.ts → volter.adapter.ts} +1 -1
  401. package/template/{vgai.project.json → volter.project.json} +2 -2
  402. package/template-dotfiles/gitignore +27 -27
  403. package/workbench/src/media/game-cover.css +11 -11
  404. package/workbench/src/product.contribution.ts +28 -28
  405. package/workbench/src/{vgaiGameSkew.ts → volterGameSkew.ts} +16 -16
  406. package/dist/assets/AudioViewer-xFb5Wv7A.js +0 -1
  407. package/dist/assets/CanvasSceneViewport-vqBlOz8P.js +0 -1
  408. package/dist/assets/ColorInput-CX1UZjYO.js +0 -1
  409. package/dist/assets/ImageViewer-shZzMd91.js +0 -1
  410. package/dist/assets/InspectorObjectPreview-BMOvJaOw.js +0 -1
  411. package/dist/assets/JsonAssetDocument-D_HXneWE.js +0 -2
  412. package/dist/assets/Object3DDocumentToolbar-BfPH9jz5.js +0 -1
  413. package/dist/assets/Object3DDocumentViewport-BaXWtATg.js +0 -2
  414. package/dist/assets/OnlineAssetDetail-BxibUH6K.js +0 -1
  415. package/dist/assets/PlayBar-DRANyO01.js +0 -1
  416. package/dist/assets/ReactCanvasControls-K98jOX9b.js +0 -1
  417. package/dist/assets/RootSelectionOverlay-BQC12Gdd.js +0 -1
  418. package/dist/assets/ShadowEditor-DP1LWynl.js +0 -1
  419. package/dist/assets/StageHost-V_0opXFt.js +0 -2
  420. package/dist/assets/ThreeBoardDocument-tgcaZDqQ.js +0 -2
  421. package/dist/assets/Toolbar-uLgsrB2z.js +0 -1
  422. package/dist/assets/VideoViewer-ClUJ6_uy.js +0 -1
  423. package/dist/assets/ViewportShadingMenu-Bdkc6jcd.js +0 -1
  424. package/dist/assets/active-ingest-CnAeQcuQ.js +0 -3
  425. package/dist/assets/animation-mixers.service-DiecMX_A.js +0 -1
  426. package/dist/assets/animation-timeline.utility-C71vPJgs.js +0 -1
  427. package/dist/assets/asset-editor-persistence-BQgjOCrm.js +0 -1
  428. package/dist/assets/asset-loaders-5PIUVvmH.js +0 -2
  429. package/dist/assets/audio.utility-D9Vk_WYS.js +0 -1
  430. package/dist/assets/autoplay.service-CFJoLPLw.js +0 -1
  431. package/dist/assets/binding-resolver-C_9MBSMa.js +0 -2
  432. package/dist/assets/blender-emscripten-engine-BeWFjMn-.js +0 -2
  433. package/dist/assets/blender-version.status-DtfwUahB.js +0 -1
  434. package/dist/assets/blender-wali-engine-da698rDf.js +0 -2
  435. package/dist/assets/blender.status-ujwGU6dU.js +0 -1
  436. package/dist/assets/board-guides-_3R1t_-2.js +0 -1
  437. package/dist/assets/body-marks-RKb_LTwL.js +0 -1
  438. package/dist/assets/build-profiles.document-CZxDuhzz.js +0 -2
  439. package/dist/assets/build-progress.status-Dk5u3C67.js +0 -1
  440. package/dist/assets/build.header--xqH6uTP.js +0 -1
  441. package/dist/assets/canvas-entry-runtime-DVeh71nC.js +0 -2
  442. package/dist/assets/capability-coverage-DQgg6UJe.js +0 -7
  443. package/dist/assets/component-board.service-DgujG90T.js +0 -2
  444. package/dist/assets/component-contracts.service-Bc_2Xxh_.js +0 -1
  445. package/dist/assets/component-instance-root-df4ofoOR.js +0 -1
  446. package/dist/assets/connection.status-CCX-mgmr.js +0 -1
  447. package/dist/assets/constraints.inspector-CwEEREsf.js +0 -1
  448. package/dist/assets/coverage.service-CV7b5Sqn.js +0 -3
  449. package/dist/assets/curve-BKuiAPpj.js +0 -1
  450. package/dist/assets/data-check-core-CQEjuFyt.js +0 -1
  451. package/dist/assets/data-ref-DyFQqqX6.js +0 -1
  452. package/dist/assets/debug-bridge-CESAxmlz.js +0 -1
  453. package/dist/assets/debug-registry-l7k5Hjc8.js +0 -1
  454. package/dist/assets/design-time-layers-CQgnmqc8.js +0 -1
  455. package/dist/assets/design-time-react-mount-CFvIk_rV.js +0 -1
  456. package/dist/assets/edit-mode-authoring-DBjaBTxM.js +0 -1
  457. package/dist/assets/editor-api-D2azVray.js +0 -1
  458. package/dist/assets/editor-presentation-activity-C7SNSmTd.js +0 -1
  459. package/dist/assets/game-audio-CaGKzia4.js +0 -1
  460. package/dist/assets/game-document.service-FdG_gFPU.js +0 -1
  461. package/dist/assets/game-module-access-DulnT3NH.js +0 -1
  462. package/dist/assets/game-network-Bo_nlDR5.js +0 -22
  463. package/dist/assets/gameplay-replay-CnWnlogY.js +0 -1
  464. package/dist/assets/generation-DhwCUHPf.css +0 -1
  465. package/dist/assets/generation.service-D2yeZaJu.js +0 -1
  466. package/dist/assets/generations.status-3CrPw_n5.js +0 -1
  467. package/dist/assets/hierarchy-marks-BLPfSIym.js +0 -1
  468. package/dist/assets/hierarchy-marks-C25dY2fR.js +0 -1
  469. package/dist/assets/hosted-asset-materialization-DYdcFlDf.js +0 -2
  470. package/dist/assets/index-B5WjeCHm.css +0 -1
  471. package/dist/assets/index-BcH5GC3b.js +0 -1
  472. package/dist/assets/index-CwCDkEl1.js +0 -1
  473. package/dist/assets/index-n3QdTv-T.js +0 -1
  474. package/dist/assets/index.module-Ycad3DJq.js +0 -1
  475. package/dist/assets/ingest-siblings-CkxW__go.js +0 -1
  476. package/dist/assets/ingest-source-persistence-6peGfPAS.js +0 -1
  477. package/dist/assets/ingest.service-Cc73WMIW.js +0 -1
  478. package/dist/assets/inspection-CObLhnrs.js +0 -1
  479. package/dist/assets/instances.command-CxKGnrNl.js +0 -1
  480. package/dist/assets/material-BwFzKPi0.js +0 -1
  481. package/dist/assets/model-asset-sections-CFvvihfx.css +0 -1
  482. package/dist/assets/model-asset-sections.service-TZ2SaBmH.js +0 -1
  483. package/dist/assets/module-mode-B79jV5tQ.js +0 -2
  484. package/dist/assets/mount-canvas-ingest-root-BhaYNuhY.js +0 -2
  485. package/dist/assets/mount-dom-ingest-root-BQb1u0LX.js +0 -2
  486. package/dist/assets/mount-readiness-Ds0HvvLH.js +0 -4
  487. package/dist/assets/mount-three-ingest-root-DIDBfvIH.js +0 -1
  488. package/dist/assets/network-observer.service-CiR4Q9Q0.js +0 -1
  489. package/dist/assets/network.utility-CNG3eJ0E.js +0 -1
  490. package/dist/assets/object-marks-DwvIEBOK.js +0 -1
  491. package/dist/assets/pixi-authoring-adapter-B42K4md-.js +0 -1
  492. package/dist/assets/pixi-live-write-target-D56tQEe_.js +0 -1
  493. package/dist/assets/pose-guard-DILO6gGq.js +0 -1
  494. package/dist/assets/presentation-DGBuGP6i.js +0 -1
  495. package/dist/assets/profiler.utility-DLNySW3w.js +0 -1
  496. package/dist/assets/project-provenance-4ldz-EOG.js +0 -1
  497. package/dist/assets/r3f-design-session-C0DPEChS.js +0 -2
  498. package/dist/assets/react-canvas-navigation-Jowa_lJq.js +0 -1
  499. package/dist/assets/react-inspector.service-TfTdj_Qk.js +0 -1
  500. package/dist/assets/react-story-board-Bx7qYytV.js +0 -1
  501. package/dist/assets/react-world-authoring-adapter-C1jPW_cN.js +0 -1
  502. package/dist/assets/reflection-probe-capture.inspector-C-6zrzZb.js +0 -1
  503. package/dist/assets/registry-Z28XSZHF.js +0 -1
  504. package/dist/assets/resolve-three-C7zDbK29.js +0 -702
  505. package/dist/assets/root-seam-contract-rGNbiX6q.js +0 -1
  506. package/dist/assets/scene-capture-BTWgUzhI.js +0 -1
  507. package/dist/assets/scene-document.service-DJJp-la1.js +0 -2
  508. package/dist/assets/seeded-random-38To73fI.js +0 -1
  509. package/dist/assets/stage-overlay-set-olkNSZmq.js +0 -1
  510. package/dist/assets/stage-presence-markers-cznMN_qq.js +0 -1
  511. package/dist/assets/stage-transform-tools-BDUZqRIR.js +0 -1
  512. package/dist/assets/standard-viewport-dressing-BZyuxyVl.js +0 -24
  513. package/dist/assets/state-watch.utility-DDmn3G25.js +0 -1
  514. package/dist/assets/story-documents-8ehMyYHo.js +0 -3
  515. package/dist/assets/story-three-preview-B1nNiPwP.js +0 -2
  516. package/dist/assets/studio-environment-yaKaHPxH.js +0 -2
  517. package/dist/assets/team-playtest.service-Ds9tkO4q.js +0 -1
  518. package/dist/assets/three-authoring-adapter-BrkGH4cd.js +0 -1
  519. package/dist/assets/three-authoring.service-DoamZDMx.js +0 -2
  520. package/dist/assets/three-integration.service-Db-VabIm.js +0 -1
  521. package/dist/assets/three-projection-core-jBJVt6O0.js +0 -1
  522. package/dist/assets/three-viewport-presentation-CgO3eWJ-.js +0 -141
  523. package/dist/assets/tools-B_NJsk05.js +0 -1
  524. package/dist/assets/transform-mode-request-BnKpgRUW.js +0 -1
  525. package/dist/assets/transport-strip-a9yLoPsI.js +0 -1
  526. package/dist/assets/transport.header-CpfoppXc.js +0 -1
  527. package/dist/assets/tuples-CKsHOV9T.js +0 -1
  528. package/dist/assets/ui-board-document-DtTR_mBr.js +0 -2
  529. package/dist/assets/user-data-dHvLdpwM.js +0 -1
  530. package/dist/assets/viewport-door-DVkMQazS.js +0 -1
  531. package/dist/assets/worker-CC9Ug5Ei.js +0 -2
  532. package/dist/assets/workspace-arrangement-DIMM7ska.js +0 -1
  533. package/dist/assets/world-documents-C4t3iOD-.js +0 -1
  534. package/dist/assets/world-root-stage-binding-ydl3JN1a.js +0 -1
  535. package/dist/vgai-shared-react.json +0 -10
  536. package/dist/vgai-shared-three.json +0 -3
  537. package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  538. package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  539. package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  540. /package/dist/assets/{vgai-shared-fontawesome-CU65D4Ij.js → volter-shared-fontawesome-CU65D4Ij.js} +0 -0
  541. /package/dist/assets/{vgai-shared-jsx-dev-runtime-DFDKL7fx.js → volter-shared-jsx-dev-runtime-DFDKL7fx.js} +0 -0
  542. /package/dist/assets/{vgai-shared-jsx-runtime-DIqBpTut.js → volter-shared-jsx-runtime-DIqBpTut.js} +0 -0
  543. /package/dist/assets/{vgai-shared-react-BT7rMc2H.js → volter-shared-react-BT7rMc2H.js} +0 -0
  544. /package/dist/assets/{vgai-shared-react-dom-DFajMqMT.js → volter-shared-react-dom-DFajMqMT.js} +0 -0
  545. /package/dist/assets/{vgai-shared-react-dom-client-S0ozfl6_.js → volter-shared-react-dom-client-S0ozfl6_.js} +0 -0
  546. /package/dist/assets/{vgai-shared-three-DH4yxKwt.js → volter-shared-three-DH4yxKwt.js} +0 -0
  547. /package/template/{.vgai → .volter}/assets.json +0 -0
  548. /package/template/{.vgai → .volter}/provenance.json +0 -0
package/dist-node/cli.js CHANGED
@@ -72,7 +72,7 @@ var init_client = __esm({
72
72
  * the receipt window closing unanswered, a beating-but-dead tab, and no tab
73
73
  * present at all. The last four can fail in milliseconds.
74
74
  *
75
- * A caller that converges by retrying (`vgai restart`) needs the distinction
75
+ * A caller that converges by retrying (the editor's `restart` command) needs the distinction
76
76
  * because a refusal the editor ANSWERED may go differently next time, while
77
77
  * a command the relay abandoned tells you nothing new on a second identical
78
78
  * attempt — and when the abandonment was a 120s budget, re-running it three
@@ -231,22 +231,22 @@ var init_client = __esm({
231
231
  return data;
232
232
  }
233
233
  // --- Play control ---
234
- /** `opts.seed` (D15/T-D15.6, objection-4 fix) — `vgai play --seed <n>`'s
234
+ /** `opts.seed` (D15/T-D15.6, objection-4 fix) — the editor's `play --seed <n>` command's
235
235
  * explicit config leg, relayed as `cmd['seed']`; `handleCommand`'s
236
236
  * `'play'` case threads it into `enterPlayMode`'s highest-precedence seed
237
- * argument (beats manifest.determinism.defaultSeed/?vgai-seed=). Omitted,
237
+ * argument (beats manifest.determinism.defaultSeed/?volter-seed=). Omitted,
238
238
  * boot seeding falls back to that precedence unchanged.
239
239
  *
240
- * `opts.name` (`vgai play --name <text>`) — an OPTIONAL label for this run,
240
+ * `opts.name` (the editor's `play --name <text>` command) — an OPTIONAL label for this run,
241
241
  * relayed as `cmd['name']` and slugified server-side into the run's
242
242
  * `logs/play-*.jsonl` filename and its session-journal line. Findability
243
243
  * only: no registry, no uniqueness, no lookup verb — grep and `ls` are the
244
244
  * query engine. Omitted, the filename keeps its exact unnamed shape. */
245
- /* `opts.record` (`vgai play --record <name>`) — NAMES this run's recording
245
+ /* `opts.record` (the editor's `play --record <name>` command) — NAMES this run's recording
246
246
  * file. It does not ENABLE recording: every relayed play records, with no
247
- * flag (see `@vgai/game`'s `src/play/play-recording.ts`). Omitted, the clip is named for
247
+ * flag (see `@volter/game`'s `src/play/play-recording.ts`). Omitted, the clip is named for
248
248
  * the durable Gameplay Session; named, it becomes an explicit keepsake in
249
- * `.vgai/recordings/<name>.webm`. */
249
+ * `.volter/recordings/<name>.webm`. */
250
250
  async play(opts) {
251
251
  return this.command({
252
252
  type: "play",
@@ -347,9 +347,9 @@ var init_client = __esm({
347
347
  return { base64: data.base64, mimeType: data.mimeType };
348
348
  }
349
349
  /**
350
- * Unit 4 (live-front-door wave) — capture the RUNNING GAME (`vgai
351
- * screenshot`'s wire leg). Sends the SAME `bridge-screenshot` relay op
352
- * `@vgai/live`'s `RelayTransport.screenshot` (and therefore
350
+ * Unit 4 (live-front-door wave) — capture the RUNNING GAME (the editor's
351
+ * `screenshot`'s wire leg). Sends the SAME `bridge-screenshot` relay op
352
+ * `@volter/live`'s `RelayTransport.screenshot` (and therefore
353
353
  * `game.screenshot()` on the relay path) already sends, so all three
354
354
  * surfaces composite the identical full game stack — canvas(es) plus the
355
355
  * HUD/react DOM layers — rather than any of them inventing a second,
@@ -367,8 +367,8 @@ var init_client = __esm({
367
367
  * refuses it with `BRIDGE_SCREENSHOT_STALE` rather than pass it off as
368
368
  * current. Setting this asks the relay to render exactly ONE deterministic
369
369
  * tick (`runTicks(1, {render:'last'})`) first — the same escape
370
- * `@vgai/live`'s `RelayTransport.screenshot` has always used, which is why
371
- * `vgai eval` could recover these frames while `vgai screenshot` could not.
370
+ * `@volter/live`'s `RelayTransport.screenshot` has always used, which is why
371
+ * the editor's `eval` command could recover these frames while the editor's `screenshot` command could not.
372
372
  * Off by default: a caller who does not ask must never be handed a frame
373
373
  * that only exists because the capture drove the game.
374
374
  */
@@ -453,8 +453,8 @@ var init_client = __esm({
453
453
  ...source,
454
454
  ...options
455
455
  },
456
- // Photographing changes nothing, and this is the relay `vgai screenshot
457
- // <module>` / `project.bake.preview` rides — the lane where a momentary
456
+ // Photographing changes nothing, and this is the relay the editor's `screenshot
457
+ // <module>` command and `project.bake.preview` ride — the lane where a momentary
458
458
  // transport failure cost a cold agent three probe modules.
459
459
  { retryTransport: true }
460
460
  );
@@ -468,7 +468,7 @@ var init_client = __esm({
468
468
  };
469
469
  }
470
470
  /**
471
- * A project-defined labeled shot set (`vgai screenshot <target> --shots <set>`):
471
+ * A project-defined labeled shot set (the editor's `screenshot <target> --shots <set>` command):
472
472
  * the DEFINITION travels with the command (project data — see
473
473
  * `AssetPreviewShotSetDefinition`; the CLI resolves it from the registered
474
474
  * `project.<set>.previewShots` tool), and the editor's generic
@@ -497,8 +497,8 @@ var init_client = __esm({
497
497
  };
498
498
  }
499
499
  /**
500
- * B8.4 — score the asset against a reference GLB (`vgai screenshot
501
- * <model.glb> --compare <ref.glb>`): matched orthographic front + side silhouettes
500
+ * B8.4 — score the asset against a reference GLB (the editor's `screenshot
501
+ * <model.glb> --compare <ref.glb>` command): matched orthographic front + side silhouettes
502
502
  * (equal-height bounding-box framing, both yaw-normalized to face the
503
503
  * camera), per-view IoU numbers, and overlay evidence images. The
504
504
  * reference GLB's raw bytes travel base64 in the command; the editor
@@ -515,7 +515,7 @@ var init_client = __esm({
515
515
  return { width: data.width, height: data.height, views: data.views };
516
516
  }
517
517
  /**
518
- * The STORY lane (`vgai screenshot <file>.stories.tsx`): every CSF export of
518
+ * The STORY lane (the editor's `screenshot <file>.stories.tsx` command): every CSF export of
519
519
  * one project story file rendered in the live session's DOM and captured
520
520
  * through the same composite leg {@link captureGame} uses, returned as
521
521
  * per-export images plus one variant sheet. `options.story` narrows to a
@@ -647,9 +647,9 @@ var init_client = __esm({
647
647
  * Run ONE command by id — the door to everything the command palette lists.
648
648
  *
649
649
  * Under the Code-OSS frame this is the workbench's own `ICommandService`, so
650
- * any command id works: a view's `vgai.<view>.<verb>`, an editor action's
651
- * `vgai.action.<id>`, or one of VS Code's own. Standalone `vgai edit` has no
652
- * command service and answers the `vgai.<view>.<verb>` shape directly off
650
+ * any command id works: a view's `volter.<view>.<verb>`, an editor action's
651
+ * `volter.action.<id>`, or one of VS Code's own. Standalone the editor's `edit` command has no
652
+ * command service and answers the `volter.<view>.<verb>` shape directly off
653
653
  * the views registry, refusing anything else BY NAME.
654
654
  *
655
655
  * The result is whatever the command answered — a view verb's state, or
@@ -845,7 +845,7 @@ var init_client = __esm({
845
845
  * `blender-object-info`, `blender-screenshot-view`, `blender-read-file`,
846
846
  * `blender-write-file`, `blender-list-files`, `blender-start`,
847
847
  * `blender-status`): Blender runs in the editor tab's worker, and
848
- * `vgai blender-mcp` is transport onto these. `blender-status` is the only
848
+ * `volter blender-mcp` is transport onto these. `blender-status` is the only
849
849
  * one that creates nothing — it answers whether this tab already has a
850
850
  * session, which is how a caller survives an editor restart.
851
851
  */
@@ -919,7 +919,7 @@ var init_client = __esm({
919
919
  return data.projects;
920
920
  }
921
921
  // --- Registered project tools ---
922
- /** List tools explicitly registered in `package.json#vgai.tools`.
922
+ /** List tools explicitly registered in `package.json#volter.tools`.
923
923
  * The editor server loads callable metadata in Node; modules never enter the
924
924
  * editor browser merely because they were listed. */
925
925
  async listProjectTools() {
@@ -2034,7 +2034,7 @@ ${tool.description}` } : tool
2034
2034
  const defaults = blender_mcp_defaults_default;
2035
2035
  const mirror = new Mirror(project, [
2036
2036
  project,
2037
- ...(process.env["VGAI_BLENDER_MIRROR_ROOTS"] ?? "").split(":").filter((root) => root.startsWith("/"))
2037
+ ...(process.env["VOLTER_BLENDER_MIRROR_ROOTS"] ?? "").split(":").filter((root) => root.startsWith("/"))
2038
2038
  ], `${command} blender-mcp`);
2039
2039
  const tab = new TabSession(project, ensureEditor);
2040
2040
  const server = new Server(
@@ -2246,7 +2246,7 @@ var init_blender_mcp = __esm({
2246
2246
  #origin = null;
2247
2247
  #port = null;
2248
2248
  /** A replay starts with a fresh model once; ordinary agent sessions persist. */
2249
- #freshSessionPending = Boolean(process.env["VGAI_BLENDER_FRESH_SESSION"]);
2249
+ #freshSessionPending = Boolean(process.env["VOLTER_BLENDER_FRESH_SESSION"]);
2250
2250
  async client() {
2251
2251
  if (this.#client) return this.#client;
2252
2252
  if (!this.#connecting) {
@@ -2310,7 +2310,7 @@ import { fileURLToPath as fileURLToPath2 } from "node:url";
2310
2310
  var package_default = {
2311
2311
  name: "@volter/game-editor",
2312
2312
  author: "Volter AI, Inc.",
2313
- version: "0.5.68",
2313
+ version: "0.5.69",
2314
2314
  publishConfig: {
2315
2315
  access: "public"
2316
2316
  },
@@ -2337,6 +2337,7 @@ var package_default = {
2337
2337
  "workbench",
2338
2338
  "template",
2339
2339
  "template-dotfiles",
2340
+ "additions",
2340
2341
  "catalog",
2341
2342
  "starter",
2342
2343
  "BUNDLED_NOTICES"
@@ -2346,34 +2347,34 @@ var package_default = {
2346
2347
  "build:node": "node scripts/build-node.mjs",
2347
2348
  typecheck: "tsc -p tsconfig.node.json"
2348
2349
  },
2349
- vgai: {
2350
+ volter: {
2350
2351
  product: {
2351
2352
  entry: "./src/index.ts",
2352
2353
  displayName: "Volter Game Editor",
2353
2354
  colorTheme: "dark",
2354
2355
  workbench: {
2355
- release: "game-editor-53c70370c14c-d9c0c8f0d344-darwin-arm64",
2356
- tarballSha256: "db26cbe669909e5dab61536a01f08d95b7de4b037f6607f40b52bea100194093"
2356
+ release: "game-editor-f16dc165c0df-7829035e8e51-darwin-arm64",
2357
+ tarballSha256: "5737029b2bfe64a22466ccf000e80056cf9cebfdc3650022a27fa990e037a421"
2357
2358
  }
2358
2359
  }
2359
2360
  },
2360
2361
  dependencies: {
2361
- "@volter/editor-core": "0.5.68",
2362
- "@volter/editor-game": "0.5.68",
2363
- "@volter/editor-react": "0.5.68",
2364
- "@volter/editor-threejs": "0.5.68",
2365
- "@volter/editor-xstate": "0.5.68",
2366
- "@volter/editor-blender": "0.1.11",
2367
- "@volter/dawproject": "0.5.68",
2368
- "@volter/editor-dawproject": "0.5.68",
2369
- "@volter/blender-engine": "0.1.9",
2370
- "@volter/editor-project": "0.5.68",
2371
- "@volter/editor-sdk": "0.5.68",
2372
- "@volter/editor-live": "0.5.68",
2373
- "@volter/game-live": "0.5.68",
2362
+ "@volter/editor-core": "0.5.69",
2363
+ "@volter/editor-game": "0.5.69",
2364
+ "@volter/editor-react": "0.5.69",
2365
+ "@volter/editor-threejs": "0.5.69",
2366
+ "@volter/editor-xstate": "0.5.69",
2367
+ "@volter/editor-blender": "0.1.12",
2368
+ "@volter/dawproject": "0.5.69",
2369
+ "@volter/editor-dawproject": "0.5.69",
2370
+ "@volter/blender-engine": "0.1.10",
2371
+ "@volter/editor-project": "0.5.69",
2372
+ "@volter/editor-sdk": "0.5.69",
2373
+ "@volter/editor-live": "0.5.69",
2374
+ "@volter/game-live": "0.5.69",
2374
2375
  "@modelcontextprotocol/sdk": "1.30.0",
2375
- "@volter/game-runtime": "0.5.68",
2376
- "@volter/threejs-runtime": "0.5.68",
2376
+ "@volter/game-runtime": "0.5.69",
2377
+ "@volter/threejs-runtime": "0.5.69",
2377
2378
  undici: "7.29.1",
2378
2379
  typescript: "5.9.3",
2379
2380
  "@colyseus/schema": "^4.0.14",
@@ -2397,7 +2398,9 @@ var package_default = {
2397
2398
  vite: "^6.4.3",
2398
2399
  ztrack: "^1.5.5",
2399
2400
  "three-bvh-csg": "^0.0.18",
2400
- "three-mesh-bvh": "^0.9.12"
2401
+ "three-mesh-bvh": "^0.9.12",
2402
+ "@pixi/react": "8.0.5",
2403
+ "pixi.js": "^8.6.0"
2401
2404
  },
2402
2405
  bin: {
2403
2406
  "volter-game-editor": "./dist-node/cli.js"
@@ -2410,7 +2413,7 @@ import { dirname as dirname4, join as join6, resolve as resolve4 } from "node:pa
2410
2413
  import { fileURLToPath } from "node:url";
2411
2414
 
2412
2415
  // node/scaffold/additions.ts
2413
- var SCAFFOLD_ADDITIONS = ["three", "ui", "server", "blender", "studio"];
2416
+ var SCAFFOLD_ADDITIONS = ["three", "canvas", "ui", "server", "blender", "studio"];
2414
2417
  var ADDITION_REQUIRES = {
2415
2418
  studio: ["three"]
2416
2419
  };
@@ -2583,7 +2586,7 @@ const meta = {
2583
2586
  // states below render its presentational body with authored props.
2584
2587
  component: GameUI,
2585
2588
  render: (args) => <ReactGamePage {...args} />,
2586
- parameters: { vgai: { defaultStory: 'Ready' } },
2589
+ parameters: { volter: { defaultStory: 'Ready' } },
2587
2590
  args: { lastInput: 'Ready', title: 'My Game' },
2588
2591
  } satisfies Meta<typeof ReactGamePage>;
2589
2592
 
@@ -2598,15 +2601,15 @@ export const LongTitle: Story = {
2598
2601
  `;
2599
2602
  var REACT_ONLY_MAIN_SOURCE = `/**
2600
2603
  * Standalone entry point: this game's own boot, in its own libraries. Every
2601
- * \`dom\` root \`vgai.project.json\` declares renders its entry's default export
2604
+ * \`dom\` root \`volter.project.json\` declares renders its entry's default export
2602
2605
  * with react-dom, in one layer of \`#game-canvas\` per root, stacked by
2603
2606
  * \`zOrder\`. The editor mounts the same entries itself.
2604
2607
  */
2605
2608
 
2606
2609
  import { type ComponentType, createElement } from 'react';
2607
2610
  import { createRoot } from 'react-dom/client';
2608
- import { manifestEntryModules } from 'virtual:vgai-manifest-entries';
2609
- import manifest from '../vgai.project.json';
2611
+ import { manifestEntryModules } from 'virtual:volter-manifest-entries';
2612
+ import manifest from '../volter.project.json';
2610
2613
 
2611
2614
  interface DeclaredRoot {
2612
2615
  readonly id: string;
@@ -2644,7 +2647,7 @@ var REACT_ONLY_FILES = {
2644
2647
  };
2645
2648
  function withEditorDeclaration(source, declaration2) {
2646
2649
  if (!source.includes("defineAdapter({"))
2647
- throw new Error("Starter vgai.adapter.ts must call defineAdapter({ ... }).");
2650
+ throw new Error("Starter volter.adapter.ts must call defineAdapter({ ... }).");
2648
2651
  const look = [
2649
2652
  declaration2.style ? `, style: ${declaration2.style.name}` : "",
2650
2653
  declaration2.keymap ? `, keymap: ${declaration2.keymap.name}` : ""
@@ -2662,9 +2665,9 @@ function withEditorDeclaration(source, declaration2) {
2662
2665
  return `${imports}${source.replace("defineAdapter({", `defineAdapter({
2663
2666
  ${editor}`)}`;
2664
2667
  }
2665
- var MODELS_AGENTS_CONTRACT = `# AGENTS.md \u2014 VGAI Models Project
2668
+ var MODELS_AGENTS_CONTRACT = `# AGENTS.md \u2014 VOLTER Models Project
2666
2669
 
2667
- A standalone modeling project built with VGAI \u2014 Blender itself, compiled to
2670
+ A standalone modeling project built with VOLTER \u2014 Blender itself, compiled to
2668
2671
  WebAssembly and running headless in the editor tab's worker, over this
2669
2672
  project's own \`.blend\` files. Work here, not in the engine repo. The editor
2670
2673
  is the authoring and verification surface; nothing here plays.
@@ -2675,7 +2678,7 @@ is the authoring and verification surface; nothing here plays.
2675
2678
  | --- | --- |
2676
2679
  | Model, revise or add a model | \`src/models/<name>.blend\` \u2014 read \`src/models/cube.py\`'s docstring first |
2677
2680
  | Open the editor, look, or verify | \`.agents/skills/editor/SKILL.md\` |
2678
- | Blender-style modeling craft | \`.agents/skills/vgai-3d-models/SKILL.md\` |
2681
+ | Blender-style modeling craft | \`.agents/skills/volter-3d-models/SKILL.md\` |
2679
2682
 
2680
2683
  \`.agents/\` is canonical; \`.claude/skills/\` and \`.github/skills/\` are
2681
2684
  generated projections (never edit); \`CLAUDE.md\` and
@@ -2691,7 +2694,7 @@ opens. The document does not run the script \u2014 you do, through the session's
2691
2694
  Blender:
2692
2695
 
2693
2696
  \`\`\`bash
2694
- npm run --silent vgai -- blender-mcp # the MCP transport onto the tab's Blender
2697
+ npm run --silent volter -- blender-mcp # the MCP transport onto the tab's Blender
2695
2698
  \`\`\`
2696
2699
 
2697
2700
  Every call is ordinary bpy against the open document, and the session saves it
@@ -2702,33 +2705,33 @@ finder lists every \`.blend\` as a document. Coordinates are metres and Z is up
2702
2705
  ## The editor
2703
2706
 
2704
2707
  Workspaces: \`model\`, \`sculpt\`, \`texture\`, \`animate\`, \`design\`, \`look\`
2705
- (\`npm run --silent vgai -- eval 'editor.workspace("sculpt")'\`; a wrong id
2708
+ (\`npm run --silent volter -- eval 'editor.workspace("sculpt")'\`; a wrong id
2706
2709
  refuses and names the list). The look and keymap are Blender's
2707
2710
  (\`@volter/editor-blender\` contributes them). There is no Game workspace and
2708
- \`vgai play\` refuses: this project declares no roots.
2711
+ \`volter-game-editor play\` refuses: this project declares no roots.
2709
2712
 
2710
2713
  ## Verification contract \u2014 after every change
2711
2714
 
2712
2715
  1. \`npm run typecheck\` \u2014 the gate.
2713
2716
  2. Open the model's document and read the change through a door:
2714
- \`npm run --silent vgai -- eval 'editor.currentView()'\` names the open
2715
- document; \`npm run --silent vgai -- screenshot editor\` shows it; and
2717
+ \`npm run --silent volter -- eval 'editor.currentView()'\` names the open
2718
+ document; \`npm run --silent volter -- screenshot editor\` shows it; and
2716
2719
  \`get_scene_info\` over \`blender-mcp\` is what the engine itself says is in
2717
2720
  the file.
2718
- 3. \`npm run --silent vgai -- console\` silent \u2014 an unresolved entry is
2721
+ 3. \`npm run --silent volter -- console\` silent \u2014 an unresolved entry is
2719
2722
  remaining work, never noise.
2720
2723
 
2721
2724
  ## Commands
2722
2725
 
2723
2726
  \\\`\\\`\\\`bash
2724
2727
  npm run dev # open/reuse this project's editor
2725
- npm run --silent vgai -- status # require connected: true
2726
- npm run --silent vgai -- screenshot # visible evidence
2727
- npm run --silent vgai -- eval '<js>' # THE door onto the editor
2728
+ npm run --silent volter -- status # require connected: true
2729
+ npm run --silent volter -- screenshot # visible evidence
2730
+ npm run --silent volter -- eval '<js>' # THE door onto the editor
2728
2731
  npm run typecheck # THE gate
2729
2732
  \\\`\\\`\\\`
2730
2733
 
2731
- Always \`npm run --silent vgai -- <verb>\`, never a bare \`vgai\` (a global one may
2734
+ Always \`npm run --silent volter -- <verb>\`, never a bare \`volter\` (a global one may
2732
2735
  belong to another checkout).
2733
2736
  `;
2734
2737
  function withAgentsContract(source, additions) {
@@ -2799,7 +2802,7 @@ function assertScaffoldComposition(value, source, product) {
2799
2802
  if (!packages.includes(product))
2800
2803
  fail(
2801
2804
  source,
2802
- `compose() returned editorPackages ${JSON.stringify(packages)}, which omits ${product}. A scaffolded project declares the product it opens in \u2014 that declaration is how \`vgai edit\` finds the editor to run (ARCHITECTURE-CORE \xA7The target shape, rule 4).`
2805
+ `compose() returned editorPackages ${JSON.stringify(packages)}, which omits ${product}. A scaffolded project declares the product it opens in \u2014 that declaration is how \`volter edit\` finds the editor to run (ARCHITECTURE-CORE \xA7The target shape, rule 4).`
2803
2806
  );
2804
2807
  const editor = composition?.editor;
2805
2808
  if (typeof editor?.inspector !== "string" || editor.inspector.length === 0)
@@ -2834,7 +2837,7 @@ import {
2834
2837
  } from "node:fs";
2835
2838
  import { basename, dirname as dirname2, join as join4, relative as relative3, resolve as resolve2 } from "node:path";
2836
2839
 
2837
- // ../../../editor-game/node_modules/jsonc-parser/lib/esm/impl/scanner.js
2840
+ // ../../node_modules/jsonc-parser/lib/esm/impl/scanner.js
2838
2841
  function createScanner(text2, ignoreTrivia = false) {
2839
2842
  const len = text2.length;
2840
2843
  let pos = 0, value = "", tokenOffset = 0, token = 16, lineNumber = 0, lineStartOffset = 0, tokenLineStartOffset = 0, prevTokenLineStartOffset = 0, scanError = 0;
@@ -3255,7 +3258,7 @@ var CharacterCodes;
3255
3258
  CharacterCodes2[CharacterCodes2["tab"] = 9] = "tab";
3256
3259
  })(CharacterCodes || (CharacterCodes = {}));
3257
3260
 
3258
- // ../../../editor-game/node_modules/jsonc-parser/lib/esm/impl/string-intern.js
3261
+ // ../../node_modules/jsonc-parser/lib/esm/impl/string-intern.js
3259
3262
  var cachedSpaces = new Array(20).fill(0).map((_, index) => {
3260
3263
  return " ".repeat(index);
3261
3264
  });
@@ -3285,7 +3288,7 @@ var cachedBreakLinesWithSpaces = {
3285
3288
  }
3286
3289
  };
3287
3290
 
3288
- // ../../../editor-game/node_modules/jsonc-parser/lib/esm/impl/parser.js
3291
+ // ../../node_modules/jsonc-parser/lib/esm/impl/parser.js
3289
3292
  var ParseOptions;
3290
3293
  (function(ParseOptions2) {
3291
3294
  ParseOptions2.DEFAULT = {
@@ -3641,7 +3644,7 @@ function visit(text2, visitor, options = ParseOptions.DEFAULT) {
3641
3644
  return true;
3642
3645
  }
3643
3646
 
3644
- // ../../../editor-game/node_modules/jsonc-parser/lib/esm/main.js
3647
+ // ../../node_modules/jsonc-parser/lib/esm/main.js
3645
3648
  var ScanError;
3646
3649
  (function(ScanError2) {
3647
3650
  ScanError2[ScanError2["None"] = 0] = "None";
@@ -3735,8 +3738,8 @@ import { existsSync } from "node:fs";
3735
3738
  import { join } from "node:path";
3736
3739
 
3737
3740
  // ../editor-project/src/manifest/filename.ts
3738
- var MANIFEST_FILENAME = "vgai.project.json";
3739
- var REMOVED_MANIFEST_FILENAME = "vgai.game.json";
3741
+ var MANIFEST_FILENAME = "volter.project.json";
3742
+ var REMOVED_MANIFEST_FILENAME = "volter.game.json";
3740
3743
  function removedManifestFilenameMessage(where) {
3741
3744
  return `${where}: found \`${REMOVED_MANIFEST_FILENAME}\` and no \`${MANIFEST_FILENAME}\`. \`${REMOVED_MANIFEST_FILENAME}\` was REMOVED (the legacy-removal doctrine, docs/ARCHITECTURE-CORE.md \xA7Vocabulary) \u2014 nothing reads it any more, and it is deliberately NOT read as a fallback, because a second accepted name is the defect.
3742
3745
  Fix: rename it \u2014 \`git mv ${REMOVED_MANIFEST_FILENAME} ${MANIFEST_FILENAME}\`. The contents are unchanged; only the filename moved.`;
@@ -3762,7 +3765,7 @@ import { execFileSync } from "node:child_process";
3762
3765
  import { createHash } from "node:crypto";
3763
3766
  import { mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
3764
3767
  import { join as join2, relative, sep } from "node:path";
3765
- var SCAFFOLD_BASELINE_RELATIVE_PATH = ".vgai/scaffold-baseline.json";
3768
+ var SCAFFOLD_BASELINE_RELATIVE_PATH = ".volter/scaffold-baseline.json";
3766
3769
  function readEngineSourceState(engineDir) {
3767
3770
  try {
3768
3771
  const sha = execFileSync("git", ["-C", engineDir, "rev-parse", "HEAD"], {
@@ -3804,7 +3807,7 @@ function buildScaffoldBaseline(targetDir, engineVersion, engineDir) {
3804
3807
  }
3805
3808
  function writeScaffoldBaseline(targetDir, engineVersion, engineDir) {
3806
3809
  const baseline = buildScaffoldBaseline(targetDir, engineVersion, engineDir);
3807
- mkdirSync(join2(targetDir, ".vgai"), { recursive: true });
3810
+ mkdirSync(join2(targetDir, ".volter"), { recursive: true });
3808
3811
  writeFileSync(
3809
3812
  join2(targetDir, SCAFFOLD_BASELINE_RELATIVE_PATH),
3810
3813
  `${JSON.stringify(baseline, null, 2)}
@@ -3906,7 +3909,7 @@ ${indent}},`;
3906
3909
  }
3907
3910
  function mergeAdapterRegionIncludes(source, additions) {
3908
3911
  if (additions.length === 0) return { kind: "unchanged" };
3909
- const parsed = typescript().createSourceFile("vgai.adapter.ts", source, typescript().ScriptTarget.Latest, true);
3912
+ const parsed = typescript().createSourceFile("volter.adapter.ts", source, typescript().ScriptTarget.Latest, true);
3910
3913
  const definition = definitionObject(parsed);
3911
3914
  if ("reason" in definition) return { kind: "unreadable", reason: definition.reason };
3912
3915
  const listed = propertyOf(definition.object, "regions");
@@ -3997,7 +4000,7 @@ function finderText(addition, quote) {
3997
4000
  }
3998
4001
  function mergeAdapterFinders(source, additions) {
3999
4002
  if (additions.length === 0) return { kind: "unchanged" };
4000
- const parsed = typescript().createSourceFile("vgai.adapter.ts", source, typescript().ScriptTarget.Latest, true);
4003
+ const parsed = typescript().createSourceFile("volter.adapter.ts", source, typescript().ScriptTarget.Latest, true);
4001
4004
  const definition = definitionObject(parsed);
4002
4005
  if ("reason" in definition) return { kind: "unreadable", reason: definition.reason };
4003
4006
  const quote = quoteLike(source, void 0);
@@ -4058,7 +4061,7 @@ ${indentAt(source, array.getStart())}${source.slice(closing)}`;
4058
4061
  }
4059
4062
 
4060
4063
  // node/scaffold/catalog.ts
4061
- var PROJECT_CATALOG_DIR = join3(".vgai", "catalog");
4064
+ var PROJECT_CATALOG_DIR = join3(".volter", "catalog");
4062
4065
  var CATALOG_SURFACES = ["three", "canvas", "dom"];
4063
4066
  var CAPABILITY_STAMP_FILENAME = "capability.json";
4064
4067
  function capabilityStampPath(entry) {
@@ -4077,7 +4080,7 @@ function stringArray(value, field, manifestPath) {
4077
4080
  var RENAMED_CAPABILITY_IDS = /* @__PURE__ */ new Map([["mesh", "blender"]]);
4078
4081
  function renamedCapabilityIdMessage(where, oldId, newId) {
4079
4082
  return `${where}: capability id \`${oldId}\` was RENAMED to \`${newId}\` (2026-09-19). Nothing reads \`${oldId}\` any more, and it is deliberately NOT mapped onto \`${newId}\`, because a second accepted name is the defect.
4080
- Fix: in this project, rename the file \u2014 \`git mv .vgai/catalog/${oldId}.json .vgai/catalog/${newId}.json\` \u2014 and change its \`"id"\` to \`"${newId}"\`. If a stamp file names the old id, rename that too (\`src/tools/${oldId}.*\` -> \`src/tools/${newId}.*\`). Then \`vgai outdated\` will report against the current entry. Nothing else about the capability changed.`;
4083
+ Fix: in this project, rename the file \u2014 \`git mv .volter/catalog/${oldId}.json .volter/catalog/${newId}.json\` \u2014 and change its \`"id"\` to \`"${newId}"\`. If a stamp file names the old id, rename that too (\`src/tools/${oldId}.*\` -> \`src/tools/${newId}.*\`). Then \`volter-game-editor outdated\` will report against the current entry. Nothing else about the capability changed.`;
4081
4084
  }
4082
4085
  function readCatalogEntry(path) {
4083
4086
  const parsed = JSON.parse(readFileSync2(path, "utf8"));
@@ -4115,15 +4118,15 @@ function readCatalogEntry(path) {
4115
4118
  path
4116
4119
  );
4117
4120
  const scripts = readStringRecord(packageJson["scripts"], "scripts", path);
4118
- const vgaiTools = packageJson["vgaiTools"];
4119
- if (vgaiTools !== void 0 && (!Array.isArray(vgaiTools) || vgaiTools.some((entry) => typeof entry !== "string" && !isRecord(entry)))) {
4120
- throw new Error(`${path}: packageJson.vgaiTools must be an array of module paths`);
4121
+ const volterTools = packageJson["volterTools"];
4122
+ if (volterTools !== void 0 && (!Array.isArray(volterTools) || volterTools.some((entry) => typeof entry !== "string" && !isRecord(entry)))) {
4123
+ throw new Error(`${path}: packageJson.volterTools must be an array of module paths`);
4121
4124
  }
4122
4125
  manifest.packageJson = {
4123
4126
  ...dependencies ? { dependencies } : {},
4124
4127
  ...devDependencies ? { devDependencies } : {},
4125
4128
  ...scripts ? { scripts } : {},
4126
- ...vgaiTools ? { vgaiTools } : {}
4129
+ ...volterTools ? { volterTools } : {}
4127
4130
  };
4128
4131
  }
4129
4132
  const assetPacks = readAssetPacks(parsed["assetPacks"], path);
@@ -4438,29 +4441,29 @@ function planCapabilityPackageJson(originalBytes, manifests, label = "package.js
4438
4441
  resolveSpec
4439
4442
  );
4440
4443
  mergeStringDependencies(parsed, "scripts", patch.scripts, manifest.id, origins);
4441
- if (patch.vgaiTools) {
4442
- const vgai = parsed["vgai"] === void 0 ? {} : parsed["vgai"];
4443
- if (!isRecord(vgai)) throw new Error(`${label}: vgai must be an object`);
4444
- const currentTools = vgai["tools"] === void 0 ? [] : vgai["tools"];
4444
+ if (patch.volterTools) {
4445
+ const volter = parsed["volter"] === void 0 ? {} : parsed["volter"];
4446
+ if (!isRecord(volter)) throw new Error(`${label}: volter must be an object`);
4447
+ const currentTools = volter["tools"] === void 0 ? [] : volter["tools"];
4445
4448
  if (!Array.isArray(currentTools) || currentTools.some((tool) => typeof tool !== "string" && !isRecord(tool))) {
4446
- throw new Error(`${label}: vgai.tools must be an array of strings or objects`);
4449
+ throw new Error(`${label}: volter.tools must be an array of strings or objects`);
4447
4450
  }
4448
4451
  const tools = currentTools.map(
4449
4452
  (tool) => typeof tool === "string" ? tool : { ...tool }
4450
4453
  );
4451
- for (const tool of patch.vgaiTools) {
4454
+ for (const tool of patch.volterTools) {
4452
4455
  const id = toolIdentity(tool);
4453
4456
  const existing = tools.find((candidate) => toolIdentity(candidate) === id);
4454
4457
  if (existing && JSON.stringify(existing) !== JSON.stringify(tool)) {
4455
4458
  throw new Error(
4456
- `Capability ${manifest.id} conflicts with existing vgai.tools entry ${id}`
4459
+ `Capability ${manifest.id} conflicts with existing volter.tools entry ${id}`
4457
4460
  );
4458
4461
  }
4459
4462
  if (!existing) tools.push(tool);
4460
4463
  }
4461
4464
  tools.sort((a, b) => toolIdentity(a).localeCompare(toolIdentity(b)));
4462
- vgai["tools"] = tools;
4463
- parsed["vgai"] = vgai;
4465
+ volter["tools"] = tools;
4466
+ parsed["volter"] = volter;
4464
4467
  }
4465
4468
  }
4466
4469
  return Buffer.from(`${JSON.stringify(parsed, null, 2)}
@@ -4516,7 +4519,7 @@ function mergedAssetManifest(projectDir, manifests) {
4516
4519
  );
4517
4520
  return { bytes, changed: !original.equals(bytes), declared: merged };
4518
4521
  }
4519
- var ADAPTER_MODULE_FILE = "vgai.adapter.ts";
4522
+ var ADAPTER_MODULE_FILE = "volter.adapter.ts";
4520
4523
  function rootSurfaces(projectDir) {
4521
4524
  const surfaces = /* @__PURE__ */ new Map();
4522
4525
  let manifest;
@@ -4832,19 +4835,19 @@ function removeCapabilities(options) {
4832
4835
  if (existsSync2(packagePath)) {
4833
4836
  const original = readFileSync2(packagePath);
4834
4837
  const parsed = JSON.parse(original.toString("utf8"));
4835
- const vgai = parsed["vgai"];
4836
- if (isRecord(vgai) && Array.isArray(vgai["tools"])) {
4838
+ const volter = parsed["volter"];
4839
+ if (isRecord(volter) && Array.isArray(volter["tools"])) {
4837
4840
  const doomed = new Set(
4838
4841
  removing.flatMap(
4839
- (id) => (byId.get(id)?.packageJson?.vgaiTools ?? []).map((tool) => toolIdentity(tool))
4842
+ (id) => (byId.get(id)?.packageJson?.volterTools ?? []).map((tool) => toolIdentity(tool))
4840
4843
  )
4841
4844
  );
4842
- const tools = vgai["tools"].filter(
4845
+ const tools = volter["tools"].filter(
4843
4846
  (tool) => !doomed.has(toolIdentity(tool))
4844
4847
  );
4845
4848
  report.removedToolEntries = [...doomed].sort();
4846
- if (tools.length !== vgai["tools"].length) {
4847
- vgai["tools"] = tools;
4849
+ if (tools.length !== volter["tools"].length) {
4850
+ volter["tools"] = tools;
4848
4851
  if (!dryRun) {
4849
4852
  writeFileSync2(packagePath, Buffer.from(`${JSON.stringify(parsed, null, 2)}
4850
4853
  `));
@@ -5193,7 +5196,7 @@ Fix: create the project without --example, which scaffolds from the starter temp
5193
5196
  );
5194
5197
  }
5195
5198
  throw new Error(
5196
- `Unknown example id "${exampleId}": no vgai.project.json found at ${examplesSrcDir}`
5199
+ `Unknown example id "${exampleId}": no volter.project.json found at ${examplesSrcDir}`
5197
5200
  );
5198
5201
  }
5199
5202
  mkdirSync3(targetDir, { recursive: true });
@@ -5241,7 +5244,7 @@ function assertDevelopmentLog(targetDir) {
5241
5244
  const path = join4(targetDir, PROJECT_DEVELOPMENT_LOG_RELATIVE_PATH);
5242
5245
  if (!existsSync3(path)) {
5243
5246
  throw new Error(
5244
- `Scaffolded project is missing ${PROJECT_DEVELOPMENT_LOG_RELATIVE_PATH}; restore it from the VGAI starter template`
5247
+ `Scaffolded project is missing ${PROJECT_DEVELOPMENT_LOG_RELATIVE_PATH}; restore it from the VOLTER starter template`
5245
5248
  );
5246
5249
  }
5247
5250
  }
@@ -5266,7 +5269,7 @@ function trackedExampleFiles(exampleDir) {
5266
5269
  });
5267
5270
  if (result.status !== 0 || !result.stdout) return null;
5268
5271
  const paths = result.stdout.toString("utf8").split("\0").filter(Boolean);
5269
- return paths.includes("vgai.project.json") ? paths : null;
5272
+ return paths.includes("volter.project.json") ? paths : null;
5270
5273
  }
5271
5274
  function copyTrackedExampleFiles(exampleDir, targetDir) {
5272
5275
  const paths = trackedExampleFiles(exampleDir);
@@ -5298,11 +5301,11 @@ function writeExampleReadme(targetDir, projectName, exampleId) {
5298
5301
  path,
5299
5302
  `# ${projectName}
5300
5303
 
5301
- An editable standalone VGAI project scaffolded from the \`${exampleId ?? "example"}\` reference. Its gameplay source and assets were copied unchanged; this folder is now your project.
5304
+ An editable standalone VOLTER project scaffolded from the \`${exampleId ?? "example"}\` reference. Its gameplay source and assets were copied unchanged; this folder is now your project.
5302
5305
 
5303
5306
  \`\`\`bash
5304
5307
  npm run dev # open/reuse the visual editor
5305
- npm run vgai -- play # verify Play mode
5308
+ npm run volter -- play # verify Play mode
5306
5309
  npm run typecheck
5307
5310
  npm run validate-manifest
5308
5311
  \`\`\`
@@ -5316,12 +5319,12 @@ function shouldCopyExamplePath(exampleDir, sourcePath) {
5316
5319
  const relativePath = relative3(exampleDir, sourcePath).replaceAll("\\", "/");
5317
5320
  const topLevel = relativePath.split("/")[0] ?? "";
5318
5321
  const segments = relativePath.split("/");
5319
- return !["node_modules", "dist", "logs", ".vgai", ".git", "package-lock.json"].includes(topLevel) && !segments.some((segment) => segment === ".env" || segment.startsWith(".env."));
5322
+ return !["node_modules", "dist", "logs", ".volter", ".git", "package-lock.json"].includes(topLevel) && !segments.some((segment) => segment === ".env" || segment.startsWith(".env."));
5320
5323
  }
5321
5324
  function shouldCopyStarterPath(templateDir, sourcePath) {
5322
5325
  const relativePath = relative3(templateDir, sourcePath).replaceAll("\\", "/");
5323
5326
  const topLevel = relativePath.split("/")[0] ?? "";
5324
- return !["node_modules", "dist", "logs", ".vgai"].includes(topLevel);
5327
+ return !["node_modules", "dist", "logs", ".volter"].includes(topLevel);
5325
5328
  }
5326
5329
  function rewritePackageJson(targetDir, slug, engineDir, monoRoot) {
5327
5330
  const pkgPath = join4(targetDir, "package.json");
@@ -5351,8 +5354,8 @@ function rewritePackageJson(targetDir, slug, engineDir, monoRoot) {
5351
5354
  }
5352
5355
  pkg.scripts ??= {};
5353
5356
  for (const [name, script] of Object.entries(pkg.scripts)) {
5354
- if (name !== "vgai" && script.startsWith("vgai ")) {
5355
- pkg.scripts[name] = `npm run vgai -- ${script.slice("vgai ".length)}`;
5357
+ if (name !== "volter" && script.startsWith("volter ")) {
5358
+ pkg.scripts[name] = `npm run volter -- ${script.slice("volter ".length)}`;
5356
5359
  }
5357
5360
  }
5358
5361
  pkg.devDependencies = pkg.devDependencies ?? {};
@@ -5388,7 +5391,7 @@ function engineDependencySpec(monoRoot, packageName, checkoutRelPath = "") {
5388
5391
  return `^${version}`;
5389
5392
  }
5390
5393
  function rewriteGameManifest(targetDir, name, slug, additions, monoRoot) {
5391
- const manifestPath = join4(targetDir, "vgai.project.json");
5394
+ const manifestPath = join4(targetDir, "volter.project.json");
5392
5395
  const engineVersion = readInstalledVersion(monoRoot, "@volter/editor-project");
5393
5396
  let manifest;
5394
5397
  if (existsSync3(manifestPath)) {
@@ -5407,12 +5410,14 @@ function rewriteGameManifest(targetDir, name, slug, additions, monoRoot) {
5407
5410
  }
5408
5411
  manifest["name"] = name;
5409
5412
  manifest["manifestVersion"] = 2;
5410
- manifest["$schema"] = "./node_modules/@volter/editor-project/schemas/vgai-project.schema.json";
5413
+ manifest["$schema"] = "./node_modules/@volter/editor-project/schemas/volter-project.schema.json";
5411
5414
  manifest["appId"] = `com.example.${slug.replace(/[^a-zA-Z0-9]/g, "")}`;
5412
5415
  if (additions) {
5413
5416
  const roots = [];
5414
5417
  if (additions.has("three"))
5415
5418
  roots.push({ id: "world", adapter: "three", entry: "src/world.tsx" });
5419
+ if (additions.has("canvas"))
5420
+ roots.push({ id: "scene2d", adapter: "canvas", entry: "src/scene2d.tsx" });
5416
5421
  if (additions.has("ui"))
5417
5422
  roots.push({ id: "ui", adapter: "dom", entry: "src/ui/game.tsx", zOrder: 0 });
5418
5423
  manifest["roots"] = roots;
@@ -5451,7 +5456,7 @@ function repinEngineAfterInstall(targetDir) {
5451
5456
  try {
5452
5457
  const baseline = JSON.parse(readFileSync3(baselinePath, "utf-8"));
5453
5458
  baseline.engineVersion = installed;
5454
- baseline.files["vgai.project.json"] = hashFile(manifestPath);
5459
+ baseline.files["volter.project.json"] = hashFile(manifestPath);
5455
5460
  writeFileSync3(baselinePath, `${JSON.stringify(baseline, null, 2)}
5456
5461
  `, "utf-8");
5457
5462
  } catch {
@@ -5460,7 +5465,7 @@ function repinEngineAfterInstall(targetDir) {
5460
5465
  }
5461
5466
  var runNpmLink = (projectDir, packageDirs) => {
5462
5467
  const checkout = packageDirs[0] ? resolve2(packageDirs[0], "..", "..") : projectDir;
5463
- const prefix = join4(checkout, ".vgai", "npm-link-prefix");
5468
+ const prefix = join4(checkout, ".volter", "npm-link-prefix");
5464
5469
  mkdirSync3(join4(prefix, "lib", "node_modules"), { recursive: true });
5465
5470
  mkdirSync3(join4(prefix, "bin"), { recursive: true });
5466
5471
  const result = spawnSync("npm", ["link", "--no-save", ...packageDirs], {
@@ -5474,7 +5479,7 @@ var runNpmLink = (projectDir, packageDirs) => {
5474
5479
  throw new Error(`npm link exited with code ${result.status ?? "unknown"}`);
5475
5480
  }
5476
5481
  };
5477
- function checkoutVgaiPackageDirs(monoRoot) {
5482
+ function checkoutVolterPackageDirs(monoRoot) {
5478
5483
  const found = /* @__PURE__ */ new Map();
5479
5484
  const packagesDir = join4(monoRoot, "packages");
5480
5485
  let entries;
@@ -5500,7 +5505,7 @@ function checkoutVgaiPackageDirs(monoRoot) {
5500
5505
  }
5501
5506
  return found;
5502
5507
  }
5503
- function declaredVgaiDependencies(projectDir) {
5508
+ function declaredVolterDependencies(projectDir) {
5504
5509
  let pkg;
5505
5510
  try {
5506
5511
  pkg = JSON.parse(readFileSync3(join4(projectDir, "package.json"), "utf-8"));
@@ -5512,9 +5517,9 @@ function declaredVgaiDependencies(projectDir) {
5512
5517
  ].filter((name) => name.startsWith("@volter/")).sort();
5513
5518
  }
5514
5519
  function planCheckoutLink(projectDir, monoRoot) {
5515
- const owned = checkoutVgaiPackageDirs(monoRoot);
5520
+ const owned = checkoutVolterPackageDirs(monoRoot);
5516
5521
  if (owned.size === 0) return { packages: [], directories: [] };
5517
- const packages = declaredVgaiDependencies(projectDir).filter((name) => owned.has(name));
5522
+ const packages = declaredVolterDependencies(projectDir).filter((name) => owned.has(name));
5518
5523
  return { packages, directories: packages.map((name) => owned.get(name)) };
5519
5524
  }
5520
5525
  function pointUnpublishedPackagesAtCheckout(projectDir, monoRoot) {
@@ -5540,7 +5545,7 @@ function pointUnpublishedPackagesAtCheckout(projectDir, monoRoot) {
5540
5545
  return rewritten;
5541
5546
  }
5542
5547
  function checkoutPackageSpec(name, monoRoot) {
5543
- const dir = checkoutVgaiPackageDirs(monoRoot).get(name);
5548
+ const dir = checkoutVolterPackageDirs(monoRoot).get(name);
5544
5549
  return dir === void 0 ? null : `file:${dir}`;
5545
5550
  }
5546
5551
  var runPackageBuild = (packageDir) => {
@@ -5626,6 +5631,16 @@ function writeNetworkedInput(targetDir) {
5626
5631
  }
5627
5632
  writeFileSync3(inputPath, input, "utf-8");
5628
5633
  }
5634
+ function applyCanvasAddition(targetDir, productDir) {
5635
+ const additionDir = join4(productDir, "additions", "canvas");
5636
+ cpSync(join4(additionDir, "src"), join4(targetDir, "src"), { recursive: true });
5637
+ const own = JSON.parse(readFileSync3(join4(additionDir, "package.json"), "utf-8"));
5638
+ const pkgPath = join4(targetDir, "package.json");
5639
+ const pkg = JSON.parse(readFileSync3(pkgPath, "utf-8"));
5640
+ pkg.dependencies = { ...pkg.dependencies };
5641
+ for (const [name, spec] of Object.entries(own.dependencies ?? {})) pkg.dependencies[name] ??= spec;
5642
+ writeJson(pkgPath, pkg);
5643
+ }
5629
5644
  function rewriteTemplateVariantFiles(targetDir, composition, additions, starterDir) {
5630
5645
  if (!additions.has("three") || !additions.has("studio")) {
5631
5646
  for (const relative7 of STUDIO_OWNED_PATHS) {
@@ -5655,9 +5670,9 @@ function rewriteTemplateVariantFiles(targetDir, composition, additions, starterD
5655
5670
  for (const relative7 of THREE_OWNED_PATHS) {
5656
5671
  rmSync2(join4(targetDir, relative7), { recursive: true, force: true });
5657
5672
  }
5658
- writeFileSync3(join4(targetDir, "vgai.adapter.ts"), adapterSourceFor(additions), "utf-8");
5673
+ writeFileSync3(join4(targetDir, "volter.adapter.ts"), adapterSourceFor(additions), "utf-8");
5659
5674
  } else {
5660
- const adapterPath = join4(targetDir, "vgai.adapter.ts");
5675
+ const adapterPath = join4(targetDir, "volter.adapter.ts");
5661
5676
  const source = joinAdditionFinders(readFileSync3(adapterPath, "utf-8"), additions);
5662
5677
  writeFileSync3(adapterPath, source, "utf-8");
5663
5678
  }
@@ -5714,7 +5729,7 @@ function rewriteTsconfig(targetDir, engineRelPath, editorRelPath) {
5714
5729
  ])
5715
5730
  ),
5716
5731
  // `@volter/editor-blender`'s two VALUE exports — the look and the layout a models
5717
- // project's `vgai.adapter.ts` imports. Spelled entry by entry rather than
5732
+ // project's `volter.adapter.ts` imports. Spelled entry by entry rather than
5718
5733
  // as a wildcard because the package's `exports` names them individually;
5719
5734
  // both entries are inert for a project that never declares the package.
5720
5735
  "@volter/editor-blender/looks": ["node_modules/@volter/editor-blender/src/looks.ts"],
@@ -5812,7 +5827,8 @@ function scaffoldProject(opts) {
5812
5827
  additions,
5813
5828
  resolveScaffoldStarterDir(productDir)
5814
5829
  );
5815
- const adapterPath = join4(targetDir, "vgai.adapter.ts");
5830
+ if (additions.has("canvas")) applyCanvasAddition(targetDir, productDir);
5831
+ const adapterPath = join4(targetDir, "volter.adapter.ts");
5816
5832
  writeFileSync3(
5817
5833
  adapterPath,
5818
5834
  withEditorDeclaration(readFileSync3(adapterPath, "utf-8"), composition.editor),
@@ -5961,7 +5977,7 @@ function initGitRepo(targetDir, projectName) {
5961
5977
  notice: "Skipped git init \u2014 the project is already inside a git work tree."
5962
5978
  };
5963
5979
  }
5964
- const authorFallback = hasCommitterIdentity(targetDir) ? [] : ["-c", "user.name=vgai", "-c", "user.email=scaffold@vgai"];
5980
+ const authorFallback = hasCommitterIdentity(targetDir) ? [] : ["-c", "user.name=volter", "-c", "user.email=scaffold@volter"];
5965
5981
  const steps = [
5966
5982
  { label: "git init", args: ["init", "--quiet"] },
5967
5983
  { label: "git add", args: ["add", "-A"] },
@@ -6000,13 +6016,15 @@ var presets = {
6000
6016
  // silent console the agent contract requires; they are an author's TODO
6001
6017
  // from the moment the author ASKS for those panels (`--with studio`, or
6002
6018
  // `--template full`).
6003
- game: { additions: ["three", "server", "blender"] },
6019
+ // A game's UI is React DOM: its HUD is the `ui` root over the world. A `canvas` (Pixi) root
6020
+ // is 2D game rendering, never the UI layer.
6021
+ game: { additions: ["three", "ui", "server", "blender"] },
6004
6022
  /** A 3D world and its models: the smallest thing that plays. */
6005
6023
  prototype: { additions: ["three", "blender"] },
6006
6024
  // EVERY addition in one project — the composition acceptance made
6007
6025
  // permanent. Check it against `SCAFFOLD_ADDITIONS` (./scaffold/additions.ts)
6008
6026
  // when the scaffolder grows one.
6009
- full: { additions: ["three", "ui", "server", "blender", "studio"] },
6027
+ full: { additions: ["three", "canvas", "ui", "server", "blender", "studio"] },
6010
6028
  /** The design skew: a React root and no 3D world. */
6011
6029
  website: { additions: ["ui"] },
6012
6030
  /** Nothing but the project — the shape an author adds to. */
@@ -6017,15 +6035,16 @@ var presets = {
6017
6035
  examples: true,
6018
6036
  compose(additions) {
6019
6037
  const three = additions.has("three");
6038
+ const world = three || additions.has("canvas");
6020
6039
  const studio = additions.has("studio");
6021
6040
  const layouts = "@volter/editor-sdk/layouts";
6022
- const design = additions.has("ui") && !three;
6041
+ const design = additions.has("ui") && !world;
6023
6042
  return {
6024
- // THE PRODUCT THIS PROJECT OPENS IN, and the 3D lane beside it:
6025
- // `@volter/editor-game` is the 3D world's lane, and a project with no 3D
6026
- // root has nothing for Play, the Game workspace or the instruments over
6027
- // a running game to run.
6028
- editorPackages: [PRODUCT2, ...three ? ["@volter/editor-game"] : []],
6043
+ // THE PRODUCT THIS PROJECT OPENS IN, and the game lane beside it:
6044
+ // `@volter/editor-game` is the lane of a game world (3D, or a 2D scene), and
6045
+ // a project with no world has nothing for Play, the Game workspace or the
6046
+ // instruments over a running game to run.
6047
+ editorPackages: [PRODUCT2, ...world ? ["@volter/editor-game"] : []],
6029
6048
  editor: {
6030
6049
  layout: { name: design ? "DesignLayout" : studio ? "StudioLayout" : "GameLayout", from: layouts },
6031
6050
  inspector: studio ? "column" : "card"
@@ -6163,7 +6182,7 @@ function resolveWorktreeIdentity(projectRoot) {
6163
6182
  };
6164
6183
  }
6165
6184
 
6166
- // ../editor-core/dist/server/chunk-SAN4B5DO.js
6185
+ // ../editor-core/dist/server/chunk-C7HWTZ6G.js
6167
6186
  import {
6168
6187
  mkdirSync as mkdirSync5,
6169
6188
  readdirSync as readdirSync4,
@@ -6175,7 +6194,7 @@ import {
6175
6194
  import { homedir as homedir2 } from "node:os";
6176
6195
  import { join as join7, resolve as resolve6 } from "node:path";
6177
6196
  import { setTimeout as delay } from "node:timers/promises";
6178
- var EDITOR_SESSIONS_REGISTRY_FILE = join7(homedir2(), ".vgai", "editor-sessions.json");
6197
+ var EDITOR_SESSIONS_REGISTRY_FILE = join7(homedir2(), ".volter", "editor-sessions.json");
6179
6198
  function isEditorSessionEntry(v) {
6180
6199
  if (typeof v !== "object" || v === null) return false;
6181
6200
  const s = v;
@@ -6213,7 +6232,7 @@ function readLiveRegisteredSessions() {
6213
6232
  }
6214
6233
  }
6215
6234
  function announceEditorLaunch(project) {
6216
- const directory = join7(project, ".vgai", "editor-launches");
6235
+ const directory = join7(project, ".volter", "editor-launches");
6217
6236
  mkdirSync5(directory, { recursive: true });
6218
6237
  const file = join7(directory, `${process.pid}.json`);
6219
6238
  writeFileSync5(file, JSON.stringify({ pid: process.pid }));
@@ -6228,7 +6247,7 @@ function announceEditorLaunch(project) {
6228
6247
  return clear;
6229
6248
  }
6230
6249
  function hasPendingEditorLaunch(project) {
6231
- const directory = join7(project, ".vgai", "editor-launches");
6250
+ const directory = join7(project, ".volter", "editor-launches");
6232
6251
  try {
6233
6252
  return readdirSync4(directory).some((name) => {
6234
6253
  if (!/^\d+\.json$/.test(name)) return false;
@@ -6275,7 +6294,7 @@ function canonicalizeProjectPath(p) {
6275
6294
  }
6276
6295
  }
6277
6296
 
6278
- // ../editor-core/dist/server/chunk-2QQ7TUPG.js
6297
+ // ../editor-core/dist/server/chunk-4EX3ZYKI.js
6279
6298
  import { createServer } from "node:net";
6280
6299
  import { execFileSync as execFileSync3 } from "node:child_process";
6281
6300
  async function loopbackPortFree(port) {
@@ -6626,7 +6645,7 @@ import { createHash as createHash22 } from "node:crypto";
6626
6645
  import { mkdirSync as mkdirSync22, readFileSync as readFileSync32, renameSync as renameSync2, rmdirSync, statSync as statSync3, writeFileSync as writeFileSync22 } from "node:fs";
6627
6646
  import { homedir as homedir22 } from "node:os";
6628
6647
  import { dirname as dirname22, join as join32 } from "node:path";
6629
- var PRODUCT_DECLARATION_KEY = "vgai.product";
6648
+ var PRODUCT_DECLARATION_KEY = "volter.product";
6630
6649
  var PRODUCT_INSTALL_LINES = [
6631
6650
  " npm install --save-dev @volter/model-editor",
6632
6651
  " npm install --save-dev @volter/game-editor"
@@ -6641,7 +6660,7 @@ function readProductManifest(packageDir) {
6641
6660
  } catch {
6642
6661
  return null;
6643
6662
  }
6644
- const declared = manifest.vgai?.product;
6663
+ const declared = manifest.volter?.product;
6645
6664
  if (declared === void 0) return null;
6646
6665
  const entry = declared.entry;
6647
6666
  if (typeof entry !== "string" || !entry.startsWith("./"))
@@ -6686,7 +6705,7 @@ function readProductManifest(packageDir) {
6686
6705
  }
6687
6706
  var SHA256_HEX = /^[0-9a-f]{64}$/;
6688
6707
  function readProductWorkbench(manifestPath, declared) {
6689
- const example = ' "vgai": { "product": { "workbench": { "release": "<product>-<fork sha 12>-<platform>", "tarballSha256": "<64 hex>" } } }\n`node scripts/workbench/build-release.mjs --publish --out <release dir>` cuts the release and prints exactly that block.';
6708
+ const example = ' "volter": { "product": { "workbench": { "release": "<product>-<fork sha 12>-<platform>", "tarballSha256": "<64 hex>" } } }\n`node scripts/workbench/build-release.mjs --publish --out <release dir>` cuts the release and prints exactly that block.';
6690
6709
  if (typeof declared !== "object" || declared === null || Array.isArray(declared))
6691
6710
  throw new Error(
6692
6711
  `${manifestPath} declares ${PRODUCT_DECLARATION_KEY} but its "workbench" is ${JSON.stringify(declared)}. A product IS the Code-OSS workbench it was compiled into, so it names the published release those bytes are:
@@ -6716,7 +6735,7 @@ ${example}`
6716
6735
  function workbenchProductId(packageName) {
6717
6736
  return packageName.split("/").pop() ?? packageName;
6718
6737
  }
6719
- function declaredVgaiPackages(projectRoot) {
6738
+ function declaredVolterPackages(projectRoot) {
6720
6739
  let manifest;
6721
6740
  try {
6722
6741
  manifest = JSON.parse(
@@ -6752,7 +6771,7 @@ function locatePackage(projectRoot, name) {
6752
6771
  }
6753
6772
  function declaredProducts(projectRoot) {
6754
6773
  const found = [];
6755
- for (const name of declaredVgaiPackages(projectRoot)) {
6774
+ for (const name of declaredVolterPackages(projectRoot)) {
6756
6775
  const dir = locatePackage(projectRoot, name);
6757
6776
  if (dir === null) continue;
6758
6777
  const product = readProductManifest(dir);
@@ -6780,10 +6799,10 @@ are not building with:
6780
6799
  ` + products.map((product) => ` npm uninstall ${product.name}`).join("\n")
6781
6800
  );
6782
6801
  }
6783
- var WORKBENCH_LOCATOR_PATH = ".vgai/workbench.json";
6802
+ var WORKBENCH_LOCATOR_PATH = ".volter/workbench.json";
6784
6803
  var RELEASE_RECORD = "BUILD.json";
6785
6804
  var SOURCES_LAUNCHER = join22("scripts", "code-server.sh");
6786
- var OVERLAY_RECORD = ".vgai-overlay.json";
6805
+ var OVERLAY_RECORD = ".volter-overlay.json";
6787
6806
  function workbenchDeclarationExample(projectRoot) {
6788
6807
  return `${join22(projectRoot, WORKBENCH_LOCATOR_PATH)}:
6789
6808
  { "workbench": "<path to an extracted Code-OSS release, or to a fork checkout>" }`;
@@ -6824,7 +6843,7 @@ ${workbenchDeclarationExample(projectRoot)}`
6824
6843
  return isAbsolute3(declared) ? resolve7(declared) : resolve7(projectRoot, declared);
6825
6844
  }
6826
6845
  function writeWorkbenchDeclaration(projectRoot, workbenchDir) {
6827
- mkdirSync6(join22(projectRoot, ".vgai"), { recursive: true });
6846
+ mkdirSync6(join22(projectRoot, ".volter"), { recursive: true });
6828
6847
  writeFileSync6(
6829
6848
  join22(projectRoot, WORKBENCH_LOCATOR_PATH),
6830
6849
  `${JSON.stringify({ workbench: resolve7(workbenchDir) }, null, 2)}
@@ -6849,7 +6868,7 @@ function resolveWorkbench(dir, expectedProduct) {
6849
6868
  if (expectedProduct !== void 0 && resolved.product !== expectedProduct) {
6850
6869
  throw new Error(
6851
6870
  `${root} is a ${resolved.product} workbench and this project opens in ${expectedProduct}. A workbench is built for ONE product \u2014 the editor kit and that product's workbench half are overlaid on the fork together \u2014 so its title, its look and its commands are the other product's, whatever this session serves into it. ${resolved.kind === "sources" ? `Re-overlay the checkout:
6852
- node scripts/workbench/dev.mjs --checkout ${root} --product ${expectedProduct}` : `Name a ${expectedProduct} release in .vgai/workbench.json, or cut one:
6871
+ node scripts/workbench/dev.mjs --checkout ${root} --product ${expectedProduct}` : `Name a ${expectedProduct} release in .volter/workbench.json, or cut one:
6853
6872
  node scripts/workbench/build-release.mjs --product ${expectedProduct} --platform ${machinePlatform()} --checkout <fork dir>`}`
6854
6873
  );
6855
6874
  }
@@ -6907,7 +6926,7 @@ function resolveSources(dir) {
6907
6926
  const marker = join22(dir, OVERLAY_RECORD);
6908
6927
  if (!existsSync22(marker)) {
6909
6928
  throw new Error(
6910
- `${dir} is a Code-OSS checkout with no vgai overlay: ${OVERLAY_RECORD} is not there, so nothing of the editor is compiled into it and the workbench would come up as plain Code-OSS. Overlay and compile it:
6929
+ `${dir} is a Code-OSS checkout with no volter overlay: ${OVERLAY_RECORD} is not there, so nothing of the editor is compiled into it and the workbench would come up as plain Code-OSS. Overlay and compile it:
6911
6930
  node scripts/workbench/dev.mjs --checkout ${dir} --product <model-editor|game-editor>`
6912
6931
  );
6913
6932
  }
@@ -6932,7 +6951,7 @@ function resolveSources(dir) {
6932
6951
  };
6933
6952
  }
6934
6953
  var RELEASE_REPO = "volter-ai/code-oss";
6935
- var WORKBENCH_CACHE_ROOT = join22(homedir3(), ".vgai", "workbenches");
6954
+ var WORKBENCH_CACHE_ROOT = join22(homedir3(), ".volter", "workbenches");
6936
6955
  async function resolveWorkbenchForProject(options) {
6937
6956
  const { projectRoot, product, override, io } = options;
6938
6957
  const productId = workbenchProductId(product.name);
@@ -6982,7 +7001,7 @@ function apiHeaders(token) {
6982
7001
  return {
6983
7002
  Accept: "application/vnd.github+json",
6984
7003
  "X-GitHub-Api-Version": "2022-11-28",
6985
- "User-Agent": "vgai-workbench-locator",
7004
+ "User-Agent": "volter-workbench-locator",
6986
7005
  ...token === null ? {} : { Authorization: `Bearer ${token}` }
6987
7006
  };
6988
7007
  }
@@ -7116,7 +7135,7 @@ var MIN_PORT = 1024;
7116
7135
  var MAX_PORT = 65535;
7117
7136
  var WORKTREE_EDITOR_PORT_MIN = 20200;
7118
7137
  var WORKTREE_EDITOR_PORT_MAX = 29999;
7119
- var DEFAULT_PORT_REGISTRY = join32(homedir22(), ".vgai", "worktree-ports.json");
7138
+ var DEFAULT_PORT_REGISTRY = join32(homedir22(), ".volter", "worktree-ports.json");
7120
7139
  var LOCK_STALE_MS = 1e4;
7121
7140
  var lockWait = new Int32Array(new SharedArrayBuffer(4));
7122
7141
  function assertPort(value, source) {
@@ -7229,7 +7248,7 @@ function allocateWorktreeEditorPort(projectRoot, registryFile = DEFAULT_PORT_REG
7229
7248
  }
7230
7249
  function readEditorPortEnv(value) {
7231
7250
  if (value === void 0 || value.trim() === "") return void 0;
7232
- return assertPort(Number(value), "VGAI_EDITOR_PORT");
7251
+ return assertPort(Number(value), "VOLTER_EDITOR_PORT");
7233
7252
  }
7234
7253
  function resolveEditorPortRequest(projectRoot, portOverride, envValue, registryFile) {
7235
7254
  if (portOverride !== void 0) {
@@ -7318,7 +7337,7 @@ async function launch(folder, launching, options = {}) {
7318
7337
  const project = realpathSync3(resolve22(folder));
7319
7338
  const product = resolveProductForProject(project);
7320
7339
  if (product.name !== launching.packageName) throw new Error(`${project} declares ${product.name}, not ${launching.displayName}.`);
7321
- const port = resolveEditorPortPreference(project, options.port, process.env["VGAI_EDITOR_PORT"]);
7340
+ const port = resolveEditorPortPreference(project, options.port, process.env["VOLTER_EDITOR_PORT"]);
7322
7341
  await waitForPendingEditorLaunch(project);
7323
7342
  const sessions = await verifiedSessions(port);
7324
7343
  const verdict = classifyProjectSession(sessions, project);
@@ -7355,14 +7374,14 @@ async function launch(folder, launching, options = {}) {
7355
7374
  stdio: ["ignore", log, log],
7356
7375
  env: {
7357
7376
  ...process.env,
7358
- VGAI_CLI_ENTRY: resolve22(process.argv[1]),
7359
- VGAI_PROJECT: project,
7360
- VGAI_PRODUCT_DIR: product.dir,
7361
- VGAI_EDITOR_PORT: String(port),
7362
- VGAI_WORKBENCH_DIR: workbench.dir,
7363
- VGAI_FRAME_PORT: String(framePort),
7364
- VGAI_FRAME_PROXY_PORT: String(proxyPort),
7365
- ...options.noOpen ? { VGAI_NO_OPEN: "1" } : {}
7377
+ VOLTER_CLI_ENTRY: resolve22(process.argv[1]),
7378
+ VOLTER_PROJECT: project,
7379
+ VOLTER_PRODUCT_DIR: product.dir,
7380
+ VOLTER_EDITOR_PORT: String(port),
7381
+ VOLTER_WORKBENCH_DIR: workbench.dir,
7382
+ VOLTER_FRAME_PORT: String(framePort),
7383
+ VOLTER_FRAME_PROXY_PORT: String(proxyPort),
7384
+ ...options.noOpen ? { VOLTER_NO_OPEN: "1" } : {}
7366
7385
  }
7367
7386
  });
7368
7387
  } catch (error) {
@@ -7405,7 +7424,7 @@ async function prepareSession(folder, launching) {
7405
7424
  const child = spawn2(process.execPath, [entry], {
7406
7425
  cwd: project,
7407
7426
  stdio: ["ignore", "inherit", "inherit"],
7408
- env: { ...process.env, VGAI_PROJECT: project, VGAI_PRODUCT_DIR: product.dir, VGAI_NO_OPEN: "1", VGAI_PREPARE: "1" }
7427
+ env: { ...process.env, VOLTER_PROJECT: project, VOLTER_PRODUCT_DIR: product.dir, VOLTER_NO_OPEN: "1", VOLTER_PREPARE: "1" }
7409
7428
  });
7410
7429
  child.once("error", fail2);
7411
7430
  child.once("exit", done);
@@ -7422,10 +7441,29 @@ async function ensureTab(serverUrl, noOpen) {
7422
7441
  openAttemptAt,
7423
7442
  onProgress: (ms) => console.log(`Waiting for the editor page (${Math.round(ms / 1e3)}s)\u2026`)
7424
7443
  });
7425
- if (outcome.status !== "connected") throw new Error(`Editor page ${outcome.status === "never-arrived" ? "did not arrive" : "arrived but did not become ready"}; open the printed workbench URL and inspect the session log.`);
7444
+ if (outcome.status !== "connected") {
7445
+ const said = outcome.status === "never-arrived" ? [] : await currentPageErrors(serverUrl);
7446
+ throw new Error(
7447
+ `Editor page ${outcome.status === "never-arrived" ? "did not arrive" : "arrived but did not become ready"}` + (said.length > 0 ? `:
7448
+ ${said.map((message) => ` ${message}`).join("\n")}` : "; open the printed workbench URL and inspect the session log.")
7449
+ );
7450
+ }
7451
+ }
7452
+ async function currentPageErrors(serverUrl) {
7453
+ try {
7454
+ const response = await fetch(new URL("/__editor/console?all=1", serverUrl), { signal: AbortSignal.timeout(3e3) });
7455
+ if (!response.ok) return [];
7456
+ const body = await response.json();
7457
+ if (!body.currentLoadId) return [];
7458
+ return (body.entries ?? []).filter(
7459
+ (entry) => entry.severity === "error" && typeof entry.message === "string" && entry.lastLoadId === body.currentLoadId
7460
+ ).map((entry) => entry.message.split("\n")[0]);
7461
+ } catch {
7462
+ return [];
7463
+ }
7426
7464
  }
7427
7465
 
7428
- // ../editor-core/dist/server/chunk-BH4IOORU.js
7466
+ // ../editor-core/dist/server/chunk-RWQATMGM.js
7429
7467
  import { Agent, fetch as nodeFetch } from "undici";
7430
7468
  function createDispatcher(timeoutMs) {
7431
7469
  return new Agent({ headersTimeout: timeoutMs, bodyTimeout: timeoutMs });
@@ -7452,7 +7490,7 @@ var EditorCommandError = class extends Error {
7452
7490
  * the receipt window closing unanswered, a beating-but-dead tab, and no tab
7453
7491
  * present at all. The last four can fail in milliseconds.
7454
7492
  *
7455
- * A caller that converges by retrying (`vgai restart`) needs the distinction
7493
+ * A caller that converges by retrying (the editor's `restart` command) needs the distinction
7456
7494
  * because a refusal the editor ANSWERED may go differently next time, while
7457
7495
  * a command the relay abandoned tells you nothing new on a second identical
7458
7496
  * attempt — and when the abandonment was a 120s budget, re-running it three
@@ -7630,22 +7668,22 @@ var EditorClient = class {
7630
7668
  return data;
7631
7669
  }
7632
7670
  // --- Play control ---
7633
- /** `opts.seed` (D15/T-D15.6, objection-4 fix) — `vgai play --seed <n>`'s
7671
+ /** `opts.seed` (D15/T-D15.6, objection-4 fix) — the editor's `play --seed <n>` command's
7634
7672
  * explicit config leg, relayed as `cmd['seed']`; `handleCommand`'s
7635
7673
  * `'play'` case threads it into `enterPlayMode`'s highest-precedence seed
7636
- * argument (beats manifest.determinism.defaultSeed/?vgai-seed=). Omitted,
7674
+ * argument (beats manifest.determinism.defaultSeed/?volter-seed=). Omitted,
7637
7675
  * boot seeding falls back to that precedence unchanged.
7638
7676
  *
7639
- * `opts.name` (`vgai play --name <text>`) — an OPTIONAL label for this run,
7677
+ * `opts.name` (the editor's `play --name <text>` command) — an OPTIONAL label for this run,
7640
7678
  * relayed as `cmd['name']` and slugified server-side into the run's
7641
7679
  * `logs/play-*.jsonl` filename and its session-journal line. Findability
7642
7680
  * only: no registry, no uniqueness, no lookup verb — grep and `ls` are the
7643
7681
  * query engine. Omitted, the filename keeps its exact unnamed shape. */
7644
- /* `opts.record` (`vgai play --record <name>`) — NAMES this run's recording
7682
+ /* `opts.record` (the editor's `play --record <name>` command) — NAMES this run's recording
7645
7683
  * file. It does not ENABLE recording: every relayed play records, with no
7646
- * flag (see `@vgai/game`'s `src/play/play-recording.ts`). Omitted, the clip is named for
7684
+ * flag (see `@volter/game`'s `src/play/play-recording.ts`). Omitted, the clip is named for
7647
7685
  * the durable Gameplay Session; named, it becomes an explicit keepsake in
7648
- * `.vgai/recordings/<name>.webm`. */
7686
+ * `.volter/recordings/<name>.webm`. */
7649
7687
  async play(opts) {
7650
7688
  return this.command({
7651
7689
  type: "play",
@@ -7746,9 +7784,9 @@ var EditorClient = class {
7746
7784
  return { base64: data.base64, mimeType: data.mimeType };
7747
7785
  }
7748
7786
  /**
7749
- * Unit 4 (live-front-door wave) — capture the RUNNING GAME (`vgai
7750
- * screenshot`'s wire leg). Sends the SAME `bridge-screenshot` relay op
7751
- * `@vgai/live`'s `RelayTransport.screenshot` (and therefore
7787
+ * Unit 4 (live-front-door wave) — capture the RUNNING GAME (the editor's
7788
+ * `screenshot`'s wire leg). Sends the SAME `bridge-screenshot` relay op
7789
+ * `@volter/live`'s `RelayTransport.screenshot` (and therefore
7752
7790
  * `game.screenshot()` on the relay path) already sends, so all three
7753
7791
  * surfaces composite the identical full game stack — canvas(es) plus the
7754
7792
  * HUD/react DOM layers — rather than any of them inventing a second,
@@ -7766,8 +7804,8 @@ var EditorClient = class {
7766
7804
  * refuses it with `BRIDGE_SCREENSHOT_STALE` rather than pass it off as
7767
7805
  * current. Setting this asks the relay to render exactly ONE deterministic
7768
7806
  * tick (`runTicks(1, {render:'last'})`) first — the same escape
7769
- * `@vgai/live`'s `RelayTransport.screenshot` has always used, which is why
7770
- * `vgai eval` could recover these frames while `vgai screenshot` could not.
7807
+ * `@volter/live`'s `RelayTransport.screenshot` has always used, which is why
7808
+ * the editor's `eval` command could recover these frames while the editor's `screenshot` command could not.
7771
7809
  * Off by default: a caller who does not ask must never be handed a frame
7772
7810
  * that only exists because the capture drove the game.
7773
7811
  */
@@ -7852,8 +7890,8 @@ var EditorClient = class {
7852
7890
  ...source,
7853
7891
  ...options
7854
7892
  },
7855
- // Photographing changes nothing, and this is the relay `vgai screenshot
7856
- // <module>` / `project.bake.preview` rides — the lane where a momentary
7893
+ // Photographing changes nothing, and this is the relay the editor's `screenshot
7894
+ // <module>` command and `project.bake.preview` ride — the lane where a momentary
7857
7895
  // transport failure cost a cold agent three probe modules.
7858
7896
  { retryTransport: true }
7859
7897
  );
@@ -7867,7 +7905,7 @@ var EditorClient = class {
7867
7905
  };
7868
7906
  }
7869
7907
  /**
7870
- * A project-defined labeled shot set (`vgai screenshot <target> --shots <set>`):
7908
+ * A project-defined labeled shot set (the editor's `screenshot <target> --shots <set>` command):
7871
7909
  * the DEFINITION travels with the command (project data — see
7872
7910
  * `AssetPreviewShotSetDefinition`; the CLI resolves it from the registered
7873
7911
  * `project.<set>.previewShots` tool), and the editor's generic
@@ -7896,8 +7934,8 @@ var EditorClient = class {
7896
7934
  };
7897
7935
  }
7898
7936
  /**
7899
- * B8.4 — score the asset against a reference GLB (`vgai screenshot
7900
- * <model.glb> --compare <ref.glb>`): matched orthographic front + side silhouettes
7937
+ * B8.4 — score the asset against a reference GLB (the editor's `screenshot
7938
+ * <model.glb> --compare <ref.glb>` command): matched orthographic front + side silhouettes
7901
7939
  * (equal-height bounding-box framing, both yaw-normalized to face the
7902
7940
  * camera), per-view IoU numbers, and overlay evidence images. The
7903
7941
  * reference GLB's raw bytes travel base64 in the command; the editor
@@ -7914,7 +7952,7 @@ var EditorClient = class {
7914
7952
  return { width: data.width, height: data.height, views: data.views };
7915
7953
  }
7916
7954
  /**
7917
- * The STORY lane (`vgai screenshot <file>.stories.tsx`): every CSF export of
7955
+ * The STORY lane (the editor's `screenshot <file>.stories.tsx` command): every CSF export of
7918
7956
  * one project story file rendered in the live session's DOM and captured
7919
7957
  * through the same composite leg {@link captureGame} uses, returned as
7920
7958
  * per-export images plus one variant sheet. `options.story` narrows to a
@@ -8046,9 +8084,9 @@ var EditorClient = class {
8046
8084
  * Run ONE command by id — the door to everything the command palette lists.
8047
8085
  *
8048
8086
  * Under the Code-OSS frame this is the workbench's own `ICommandService`, so
8049
- * any command id works: a view's `vgai.<view>.<verb>`, an editor action's
8050
- * `vgai.action.<id>`, or one of VS Code's own. Standalone `vgai edit` has no
8051
- * command service and answers the `vgai.<view>.<verb>` shape directly off
8087
+ * any command id works: a view's `volter.<view>.<verb>`, an editor action's
8088
+ * `volter.action.<id>`, or one of VS Code's own. Standalone the editor's `edit` command has no
8089
+ * command service and answers the `volter.<view>.<verb>` shape directly off
8052
8090
  * the views registry, refusing anything else BY NAME.
8053
8091
  *
8054
8092
  * The result is whatever the command answered — a view verb's state, or
@@ -8244,7 +8282,7 @@ var EditorClient = class {
8244
8282
  * `blender-object-info`, `blender-screenshot-view`, `blender-read-file`,
8245
8283
  * `blender-write-file`, `blender-list-files`, `blender-start`,
8246
8284
  * `blender-status`): Blender runs in the editor tab's worker, and
8247
- * `vgai blender-mcp` is transport onto these. `blender-status` is the only
8285
+ * `volter blender-mcp` is transport onto these. `blender-status` is the only
8248
8286
  * one that creates nothing — it answers whether this tab already has a
8249
8287
  * session, which is how a caller survives an editor restart.
8250
8288
  */
@@ -8318,7 +8356,7 @@ var EditorClient = class {
8318
8356
  return data.projects;
8319
8357
  }
8320
8358
  // --- Registered project tools ---
8321
- /** List tools explicitly registered in `package.json#vgai.tools`.
8359
+ /** List tools explicitly registered in `package.json#volter.tools`.
8322
8360
  * The editor server loads callable metadata in Node; modules never enter the
8323
8361
  * editor browser merely because they were listed. */
8324
8362
  async listProjectTools() {
@@ -8591,11 +8629,11 @@ var RELAY_COMMANDS = {
8591
8629
  "close-asset-tab": alwaysRefresh(),
8592
8630
  "toggle-command-palette": noDerivedRefresh(),
8593
8631
  "toggle-console": noDerivedRefresh(),
8594
- // RELOAD THE EDITOR PAGE — `@vgai/live`'s `page.reload()`, the one page verb
8632
+ // RELOAD THE EDITOR PAGE — `@volter/live`'s `page.reload()`, the one page verb
8595
8633
  // no step can express. It is the HOST's, not a package's: reloading the tab
8596
- // is what the tab is, and until walk 5 it was a `@vgai/game` command
8634
+ // is what the tab is, and until walk 5 it was a `@volter/game` command
8597
8635
  // contribution, so a project without that package — every model project —
8598
- // answered `unknown command type "page-reload"` for a door `@vgai/live`
8636
+ // answered `unknown command type "page-reload"` for a door `@volter/live`
8599
8637
  // documents as general (measured on a `model-editor create` scaffold,
8600
8638
  // 2026-09-21). The handler schedules the navigation for the next task so
8601
8639
  // this ack can travel before the channel is torn down; the client waits for
@@ -8629,7 +8667,7 @@ var RELAY_COMMANDS = {
8629
8667
  "set-inspection-field": alwaysRefresh(3e4),
8630
8668
  "remove-inspection-field": alwaysRefresh(3e4),
8631
8669
  // `extract-component` and `fork-component` left this table with their menus
8632
- // (`@vgai/game/contributions/component-verbs.command.ts`), which carries
8670
+ // (`@volter/game/contributions/component-verbs.command.ts`), which carries
8633
8671
  // both budgets forward row for row.
8634
8672
  // The hierarchy context menu's structure verbs, over the control door. Every
8635
8673
  // one of them rewrites the game's own source, so they refresh like a write.
@@ -8645,7 +8683,7 @@ var RELAY_COMMANDS = {
8645
8683
  // `open` WAITS FOR THE PROJECT ADAPTER, for the same reason `play` waits on
8646
8684
  // the project's async `setup()`: on a cold session the adapter's scene table
8647
8685
  // is not there yet, and the door's whole job is to put a document on screen
8648
- // once it is. MEASURED on three cold `vgai edit` sessions over a
8686
+ // once it is. MEASURED on three cold the editor's `edit` command sessions over a
8649
8687
  // `--template models` probe — 6025 / 6831 / 6474 ms from tab-connected to
8650
8688
  // the entry being listed, every one of them first refusing with
8651
8689
  // `SCENE_TABLE_UNAVAILABLE`. At the 5 s default the relay's timer won that
@@ -8668,7 +8706,7 @@ var RELAY_COMMANDS = {
8668
8706
  // Object3D document's orbit/turntable/frame, the viewport photograph and the
8669
8707
  // display and transform toggles — are its own command contribution
8670
8708
  // (`viewport-commands.ts`), each budget on its contributed row.
8671
- // The BLENDER lane's ten verbs are `@vgai/blender`'s
8709
+ // The BLENDER lane's ten verbs are `@volter/blender`'s
8672
8710
  // `contributions/blender.command.ts` (WORK.md §The workbench, item D) —
8673
8711
  // each row's budget travelled with it, onto the contributed spec the page
8674
8712
  // reports to the server. `capture-story-variants` made the same move, to the
@@ -9085,7 +9123,7 @@ async function openProject(path) {
9085
9123
  }
9086
9124
  async function restart(command, options = {}) {
9087
9125
  const { client, url, projectRoot } = await sessionClient();
9088
- const noOpen = Boolean(process.env["VGAI_NO_OPEN"]);
9126
+ const noOpen = Boolean(process.env["VOLTER_NO_OPEN"]);
9089
9127
  const before = await client.getState().catch(() => null);
9090
9128
  const divergence = staleAssetCacheWarning(before);
9091
9129
  const attached = before?.connected === true || (before?.editorsConnected ?? 0) > 0;
@@ -9212,7 +9250,7 @@ function parseLookFlags(options) {
9212
9250
  function screenshotPath(projectRoot, slug) {
9213
9251
  const stamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
9214
9252
  const safe = (slug ?? "").toLowerCase().replace(/[^a-z0-9-_]+/g, "-").replace(/^-+|-+$/g, "");
9215
- return join23(projectRoot, ".vgai", "screenshots", slug === void 0 ? `${stamp}.png` : `${safe === "" ? "look" : safe}-${stamp}`);
9253
+ return join23(projectRoot, ".volter", "screenshots", slug === void 0 ? `${stamp}.png` : `${safe === "" ? "look" : safe}-${stamp}`);
9216
9254
  }
9217
9255
  async function screenshot(target, options) {
9218
9256
  const flags = parseLookFlags(options);
@@ -9346,7 +9384,7 @@ async function assetLabLook(client, source, flags, outputDirectory, defaultStage
9346
9384
  }
9347
9385
  async function moduleLook(client, projectRoot, modulePath, flags) {
9348
9386
  if (flags.shots !== void 0 || flags.compare !== void 0) {
9349
- throw new Error("--shots/--compare do not apply to a module target \u2014 the module lane builds bytes that stand nowhere and writes its fixed views under .vgai/screenshots/.");
9387
+ throw new Error("--shots/--compare do not apply to a module target \u2014 the module lane builds bytes that stand nowhere and writes its fixed views under .volter/screenshots/.");
9350
9388
  }
9351
9389
  if (flags.width !== void 0 && flags.height !== void 0 && flags.width !== flags.height) {
9352
9390
  throw new Error("a module look renders square views \u2014 use --size, not --width/--height");
@@ -9359,7 +9397,7 @@ async function moduleLook(client, projectRoot, modulePath, flags) {
9359
9397
  ...size === void 0 ? {} : { size }
9360
9398
  });
9361
9399
  if (!outcome.ok) {
9362
- const missing = outcome.error?.code === "PROJECT_TOOL_NOT_FOUND" ? ` This project registers no ${toolName} tool (package.json#vgai.tools).` : "";
9400
+ const missing = outcome.error?.code === "PROJECT_TOOL_NOT_FOUND" ? ` This project registers no ${toolName} tool (package.json#volter.tools).` : "";
9363
9401
  throw new Error(`${toolName} refused '${modulePath}' \u2014 ${outcome.error?.message ?? "unknown error"}.${missing}`);
9364
9402
  }
9365
9403
  const result = outcome.data;
@@ -9426,7 +9464,7 @@ function runCapabilityCommand(verb, ids, options) {
9426
9464
  }
9427
9465
  return;
9428
9466
  }
9429
- if (!projectDir) throw new Error("No vgai.project.json found. Run this command inside a game or pass --project.");
9467
+ if (!projectDir) throw new Error("No volter.project.json found. Run this command inside a game or pass --project.");
9430
9468
  if (verb === "outdated") {
9431
9469
  if (ids.length > 0) throw new Error("Usage: volter-game-editor outdated [--project <path>] [--json]");
9432
9470
  const rows = capabilityVersions(projectDir, catalogDir);
@@ -9506,7 +9544,7 @@ ${report.writtenFiles.map((path) => ` ${path}`).join("\n")}`);
9506
9544
  }
9507
9545
  for (const unplaced of report.unplacedFinders) {
9508
9546
  const include = unplaced.finder.include ? `, include: [${unplaced.finder.include.map((glob) => `'${glob}'`).join(", ")}]` : "";
9509
- console.error(`Warning: ${unplaced.capability}'s documents are found by \`${unplaced.finder.finder}\`, but ${unplaced.reason}. Until vgai.adapter.ts selects it in \`documents.find\` (\`{ finder: '${unplaced.finder.finder}'${include} }\`), none of them opens.`);
9547
+ console.error(`Warning: ${unplaced.capability}'s documents are found by \`${unplaced.finder.finder}\`, but ${unplaced.reason}. Until volter.adapter.ts selects it in \`documents.find\` (\`{ finder: '${unplaced.finder.finder}'${include} }\`), none of them opens.`);
9510
9548
  }
9511
9549
  for (const unplaced of report.unplacedRegions) {
9512
9550
  console.error(`Warning: ${unplaced.capability} renders on the \`${unplaced.surface}\` surface (${unplaced.globs.join(", ")}), but ${unplaced.reason}. The editor will report \`OID001\` for those files until this project declares them.`);
@@ -9529,12 +9567,12 @@ import {
9529
9567
  } from "node:fs";
9530
9568
  import { homedir as homedir4 } from "node:os";
9531
9569
  import { isAbsolute as isAbsolute5, join as join11, resolve as resolve10 } from "node:path";
9532
- var WORKBENCH_LOCATOR_PATH2 = ".vgai/workbench.json";
9570
+ var WORKBENCH_LOCATOR_PATH2 = ".volter/workbench.json";
9533
9571
  var RELEASE_RECORD2 = "BUILD.json";
9534
9572
  var SOURCES_LAUNCHER2 = join11("scripts", "code-server.sh");
9535
- var OVERLAY_RECORD2 = ".vgai-overlay.json";
9573
+ var OVERLAY_RECORD2 = ".volter-overlay.json";
9536
9574
  function writeWorkbenchDeclaration2(projectRoot, workbenchDir) {
9537
- mkdirSync8(join11(projectRoot, ".vgai"), { recursive: true });
9575
+ mkdirSync8(join11(projectRoot, ".volter"), { recursive: true });
9538
9576
  writeFileSync8(
9539
9577
  join11(projectRoot, WORKBENCH_LOCATOR_PATH2),
9540
9578
  `${JSON.stringify({ workbench: resolve10(workbenchDir) }, null, 2)}
@@ -9555,7 +9593,7 @@ function resolveWorkbench2(dir, expectedProduct) {
9555
9593
  if (expectedProduct !== void 0 && resolved.product !== expectedProduct) {
9556
9594
  throw new Error(
9557
9595
  `${root} is a ${resolved.product} workbench and this project opens in ${expectedProduct}. A workbench is built for ONE product \u2014 the editor kit and that product's workbench half are overlaid on the fork together \u2014 so its title, its look and its commands are the other product's, whatever this session serves into it. ${resolved.kind === "sources" ? `Re-overlay the checkout:
9558
- node scripts/workbench/dev.mjs --checkout ${root} --product ${expectedProduct}` : `Name a ${expectedProduct} release in .vgai/workbench.json, or cut one:
9596
+ node scripts/workbench/dev.mjs --checkout ${root} --product ${expectedProduct}` : `Name a ${expectedProduct} release in .volter/workbench.json, or cut one:
9559
9597
  node scripts/workbench/build-release.mjs --product ${expectedProduct} --platform ${machinePlatform2()} --checkout <fork dir>`}`
9560
9598
  );
9561
9599
  }
@@ -9613,7 +9651,7 @@ function resolveSources2(dir) {
9613
9651
  const marker = join11(dir, OVERLAY_RECORD2);
9614
9652
  if (!existsSync9(marker)) {
9615
9653
  throw new Error(
9616
- `${dir} is a Code-OSS checkout with no vgai overlay: ${OVERLAY_RECORD2} is not there, so nothing of the editor is compiled into it and the workbench would come up as plain Code-OSS. Overlay and compile it:
9654
+ `${dir} is a Code-OSS checkout with no volter overlay: ${OVERLAY_RECORD2} is not there, so nothing of the editor is compiled into it and the workbench would come up as plain Code-OSS. Overlay and compile it:
9617
9655
  node scripts/workbench/dev.mjs --checkout ${dir} --product <model-editor|game-editor>`
9618
9656
  );
9619
9657
  }
@@ -9637,10 +9675,10 @@ function resolveSources2(dir) {
9637
9675
  cwd: dir
9638
9676
  };
9639
9677
  }
9640
- var WORKBENCH_CACHE_ROOT2 = join11(homedir4(), ".vgai", "workbenches");
9678
+ var WORKBENCH_CACHE_ROOT2 = join11(homedir4(), ".volter", "workbenches");
9641
9679
 
9642
9680
  // node/cli.ts
9643
- var PRODUCT3 = { packageName: package_default.name, id: "game-editor", displayName: package_default.vgai.product.displayName, command: Object.keys(package_default.bin)[0] };
9681
+ var PRODUCT3 = { packageName: package_default.name, id: "game-editor", displayName: package_default.volter.product.displayName, command: Object.keys(package_default.bin)[0] };
9644
9682
  async function playVerb(verb) {
9645
9683
  const { connect: connect2 } = await import("@volter/editor-live");
9646
9684
  const { EditorClient: EditorClient3 } = await Promise.resolve().then(() => (init_client(), client_exports));