@volter/game-editor 0.5.67 → 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 (568) 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 +6 -6
  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/music/music-player.ts +18 -12
  17. package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +59 -59
  18. package/catalog/project-source/src/lib/static-batch/Frozen.tsx +1 -1
  19. package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +1 -1
  20. package/catalog/project-source/src/tools/bake-preview.tool.ts +9 -9
  21. package/dist/.vite/manifest.json +4106 -3965
  22. package/dist/assets/{AssetBudgetPanel-x_FNJbfZ.js → AssetBudgetPanel-BMR3AQhc.js} +10 -10
  23. package/dist/assets/AudioViewer-DESxi7pU.js +1 -0
  24. package/dist/assets/CanvasBoardDocument-Q_nrYFlB.js +1 -0
  25. package/dist/assets/CanvasSceneViewport-WZMoKy_F.js +1 -0
  26. package/dist/assets/ColorInput-C2EK-OnD.js +1 -0
  27. package/dist/assets/{EntityModelDocument-CzUHsH9E.js → EntityModelDocument-B_4ENTCq.js} +1 -1
  28. package/dist/assets/{EnvironmentAssetDocument-ByEB7_4A.js → EnvironmentAssetDocument-BZBp6OFJ.js} +1 -1
  29. package/dist/assets/{GameplaySessionTimeline-dhG-oiqd.js → GameplaySessionTimeline-1ivaucpv.js} +1 -1
  30. package/dist/assets/ImageViewer-D16OExYu.js +1 -0
  31. package/dist/assets/{InspectorCanvasPreview-CEr_Kxna.js → InspectorCanvasPreview-BrFjhoiD.js} +1 -1
  32. package/dist/assets/InspectorObjectPreview-CY5xVsPR.js +1 -0
  33. package/dist/assets/JsonAssetDocument-CvjTlcdr.js +2 -0
  34. package/dist/assets/{LiveModuleDocument-DL8QHSlk.js → LiveModuleDocument-ne1o9giX.js} +1 -1
  35. package/dist/assets/{LutAssetDocument-BImiug2M.js → LutAssetDocument-Cp0v-O7q.js} +1 -1
  36. package/dist/assets/ModelAssetDocument-Ceu7OIN9.js +1 -0
  37. package/dist/assets/{NonThreeAuthoringBootstrap-B40qmGGS.js → NonThreeAuthoringBootstrap-DiElZf-e.js} +1 -1
  38. package/dist/assets/Object3DDocumentToolbar-BLNamqii.js +1 -0
  39. package/dist/assets/Object3DDocumentViewport-D6QoHfa_.js +2 -0
  40. package/dist/assets/{Object3DPreview-ClYDoH2L.js → Object3DPreview-ZVokr044.js} +1 -1
  41. package/dist/assets/OnlineAssetDetail-Dnckd7zB.js +1 -0
  42. package/dist/assets/PlayBar-DsMitSgy.js +1 -0
  43. package/dist/assets/{QuarksAssetDocument-B-VOj-n4.js → QuarksAssetDocument-B5J8uHFM.js} +1 -1
  44. package/dist/assets/ReactCanvasControls-CmfvxJYY.js +1 -0
  45. package/dist/assets/RootSelectionOverlay-BWsNiSuM.js +1 -0
  46. package/dist/assets/{ShaderAssetDocument-Kn8IvRGV.js → ShaderAssetDocument-CT7XzsZq.js} +5 -5
  47. package/dist/assets/ShadowEditor-YO5KEfnz.js +1 -0
  48. package/dist/assets/{SourceAssetViewer-CLQ95VSD.js → SourceAssetViewer-FSLup2km.js} +1 -1
  49. package/dist/assets/StageHost-DYfGYwvq.js +2 -0
  50. package/dist/assets/{StoryPreviewMount-D2lg37et.js → StoryPreviewMount-BhvT5QlB.js} +1 -1
  51. package/dist/assets/ThreeBoardDocument-B-z2nwnH.js +2 -0
  52. package/dist/assets/{ThreeIsolationSceneContent-DbYIylZQ.js → ThreeIsolationSceneContent-B5pU4Y6k.js} +1 -1
  53. package/dist/assets/{ToolObject3DPreview-WEi6C9uU.js → ToolObject3DPreview-VtraiQ4Q.js} +1 -1
  54. package/dist/assets/Toolbar-M62Gob9T.js +1 -0
  55. package/dist/assets/{TransientHint-BpDLhRLd.js → TransientHint-Cc40mHWE.js} +1 -1
  56. package/dist/assets/VideoViewer-BxcUwXQm.js +1 -0
  57. package/dist/assets/ViewportShadingMenu-BoMPnTVh.js +1 -0
  58. package/dist/assets/active-ingest-0QjJWb7i.js +3 -0
  59. package/dist/assets/{animation-clock-Bm80XdqP.js → animation-clock-BXEwUJtz.js} +1 -1
  60. package/dist/assets/animation-mixers.service-C-Ko4KzM.js +1 -0
  61. package/dist/assets/animation-timeline.utility-Bl15-rYb.js +1 -0
  62. package/dist/assets/{asset-budget-asset.menu-CEgP0Kiw.js → asset-budget-asset.menu-BUa3g0Wy.js} +1 -1
  63. package/dist/assets/{asset-budget.action-D4R1c3wi.js → asset-budget.action-Dl5eVPIo.js} +1 -1
  64. package/dist/assets/{asset-budget.document-Syzjn1U1.js → asset-budget.document-DJylQ-0h.js} +1 -1
  65. package/dist/assets/{asset-budget.menu-BbRiqXeM.js → asset-budget.menu-BJtvNMLj.js} +1 -1
  66. package/dist/assets/asset-editor-persistence-BIbf5u0Q.js +1 -0
  67. package/dist/assets/asset-loaders-DoNflsHL.js +2 -0
  68. package/dist/assets/{asset-preview-B1tDziF1.js → asset-preview-DxlSdRZn.js} +1 -1
  69. package/dist/assets/{audio-unlock.service-ucMfCVBw.js → audio-unlock.service-CTaiyXF9.js} +1 -1
  70. package/dist/assets/audio.utility-CEmNc68t.js +1 -0
  71. package/dist/assets/autoplay.service-BZLSUyL8.js +1 -0
  72. package/dist/assets/{babylon-authoring-adapter-C8mFMXSr.js → babylon-authoring-adapter-BZvV2bz_.js} +1 -1
  73. package/dist/assets/binding-resolver-DGbk9_XR.js +2 -0
  74. package/dist/assets/blender-emscripten-engine-B7lfg-RX.js +2 -0
  75. package/dist/assets/{blender-node-editor.document-C1YmwWls.js → blender-node-editor.document-wXJobGNH.js} +1 -1
  76. package/dist/assets/{blender-properties-tab-B8lyjgj3.js → blender-properties-tab-7GFf80ev.js} +1 -1
  77. package/dist/assets/{blender-runtime-host-CyQlImSR.js → blender-runtime-host-CILxrx5T.js} +2 -2
  78. package/dist/assets/{blender-runtime-skin-BK7ShZ6z.js → blender-runtime-skin-Cd5lQYsC.js} +7 -7
  79. package/dist/assets/{blender-runtime.document-B0nVQs0P.js → blender-runtime.document-C0r_R49S.js} +7 -7
  80. package/dist/assets/{blender-timeline.document-CMcdE2CK.js → blender-timeline.document-BaISZMBc.js} +1 -1
  81. package/dist/assets/{blender-uv-editor.document-CjqNo4sZ.js → blender-uv-editor.document-CT_fsyyA.js} +1 -1
  82. package/dist/assets/blender-version.status-DzEx7u7k.js +1 -0
  83. package/dist/assets/blender-wali-engine-DOiQCBXH.js +2 -0
  84. package/dist/assets/{blender.command-C6NmRBo5.js → blender.command-DdiKd8mZ.js} +1 -1
  85. package/dist/assets/blender.keymap-BmOBRY7p.js +1 -0
  86. package/dist/assets/blender.status-BMETIbb2.js +1 -0
  87. package/dist/assets/board-guides-CjHQ9Ynm.js +1 -0
  88. package/dist/assets/body-marks-C1LxJtQb.js +1 -0
  89. package/dist/assets/bridge.command-DXUeavn5.js +3 -0
  90. package/dist/assets/{browserAll-lF_dLQVz.js → browserAll-Dg46xT22.js} +1 -1
  91. package/dist/assets/build-player.document-BHwVV3K0.js +1 -0
  92. package/dist/assets/build-profiles.document-HkpS-Kxa.js +2 -0
  93. package/dist/assets/build-progress.status-u1J0Rm1D.js +1 -0
  94. package/dist/assets/build-session-BLboUUbw.js +9 -0
  95. package/dist/assets/{build.action-DRX2IcYt.js → build.action-C00DL83N.js} +1 -1
  96. package/dist/assets/{build.command-BGvLaLG0.js → build.command-Cjk_NY75.js} +1 -1
  97. package/dist/assets/build.header-BWNmNWFT.js +1 -0
  98. package/dist/assets/{build.menu-UenrjPWS.js → build.menu-BBYtqCIq.js} +1 -1
  99. package/dist/assets/{build.service-BIUoTY6l.js → build.service-DOU15tKN.js} +1 -1
  100. package/dist/assets/{camera-DrvaM47S.js → camera-7DGyYW7Y.js} +1 -1
  101. package/dist/assets/{camera-runtime.inspector-CjJALNO8.js → camera-runtime.inspector-n-jiOR-3.js} +1 -1
  102. package/dist/assets/canvas-design-mount-CSRHU-ag.js +6 -0
  103. package/dist/assets/canvas-entry-runtime-BST8yRuK.js +2 -0
  104. package/dist/assets/{canvas-preview-frames-C0QTagA3.js → canvas-preview-frames-Cja32aW2.js} +1 -1
  105. package/dist/assets/{canvas-story-capture.service-Dgjr-rT1.js → canvas-story-capture.service-D5R5HJ8n.js} +2 -2
  106. package/dist/assets/capability-coverage-ByWftxk4.js +7 -0
  107. package/dist/assets/{collaboration-presence-BVIQuN1l.js → collaboration-presence-D6MC9xJN.js} +1 -1
  108. package/dist/assets/{collider-C7SbIYKY.js → collider-B78EcUc9.js} +1 -1
  109. package/dist/assets/{component-board.service-BEsFAw4_.js → component-board.service-BaQI5Oas.js} +2 -2
  110. package/dist/assets/component-board.service-CkjrsD8x.js +2 -0
  111. package/dist/assets/{component-board.service-CWFaGMCO.js → component-board.service-Dvjz_g-x.js} +2 -2
  112. package/dist/assets/component-contracts.service-C3-AXQp7.js +1 -0
  113. package/dist/assets/component-instance-root-DLI40MiB.js +1 -0
  114. package/dist/assets/{component-verbs.command-oNtGgzQL.js → component-verbs.command-Brr_WcaR.js} +1 -1
  115. package/dist/assets/component-verbs.service-DC2sC3j3.js +1 -0
  116. package/dist/assets/{config-_wCzzlM_.js → config-BI_7osdR.js} +3 -3
  117. package/dist/assets/{configurations-BXU4GGbV.js → configurations-XP9YLkrt.js} +1 -1
  118. package/dist/assets/connection.status-BhRwcFx0.js +1 -0
  119. package/dist/assets/{constraint-5KLYpGm7.js → constraint-Bp1l8hY-.js} +1 -1
  120. package/dist/assets/constraints.inspector-Dm1cycK3.js +1 -0
  121. package/dist/assets/{content-bounds-BeuIXKYu.js → content-bounds-DROIchTa.js} +1 -1
  122. package/dist/assets/{contract-system-adapters-Bic_7sev.js → contract-system-adapters-Cn7OW_ay.js} +1 -1
  123. package/dist/assets/coverage.service-l42ty7lr.js +3 -0
  124. package/dist/assets/create-runtime-B_uTwsmi.js +3 -0
  125. package/dist/assets/curve-THOUsg-j.js +1 -0
  126. package/dist/assets/{data-asset-DfQ2Pjse.js → data-asset-DAANayR6.js} +1 -1
  127. package/dist/assets/data-check-core-CHqar_E8.js +1 -0
  128. package/dist/assets/data-ref-CN34UeVw.js +1 -0
  129. package/dist/assets/debug-bridge-BD1XVAIB.js +1 -0
  130. package/dist/assets/debug-registry-ggQWxtu-.js +1 -0
  131. package/dist/assets/{deferred-ingest-play-BdR4qGk6.js → deferred-ingest-play-B2JUlwlT.js} +2 -2
  132. package/dist/assets/{design-time-canvas-mount-DPQeHSN2.js → design-time-canvas-mount-as9cN9I6.js} +2 -2
  133. package/dist/assets/design-time-layers-BRseeSmV.js +1 -0
  134. package/dist/assets/{design-time-mount.service-Ks-5Wkcs.js → design-time-mount.service-BTVu3yKo.js} +2 -2
  135. package/dist/assets/{design-time-mount.service-Ca-DZGFV.js → design-time-mount.service-DKvc7lVK.js} +2 -2
  136. package/dist/assets/design-time-react-mount-C7rB56QD.js +1 -0
  137. package/dist/assets/{document-preview-three-DThkjI1S.js → document-preview-three-CxmRhCcV.js} +1 -1
  138. package/dist/assets/{dom-authoring-adapter-BrLU8IJ_.js → dom-authoring-adapter-L8OzXfmE.js} +1 -1
  139. package/dist/assets/{draco3d-B2cwv46o.js → draco3d-BjNuXv66.js} +1 -1
  140. package/dist/assets/{edit-mode-audio.service-D4ITNbsm.js → edit-mode-audio.service-BwI5u845.js} +1 -1
  141. package/dist/assets/edit-mode-authoring-D5f7aHHl.js +1 -0
  142. package/dist/assets/{edit-mode-networking.service-BNv-FTRh.js → edit-mode-networking.service-DqP_4lbI.js} +1 -1
  143. package/dist/assets/editor-api-BM7H_F4G.js +1 -0
  144. package/dist/assets/{editor-layers-BDJnAAzj.js → editor-layers-D-CTUqco.js} +1 -1
  145. package/dist/assets/editor-presentation-activity-CqJH4G9t.js +1 -0
  146. package/dist/assets/{editor-shell-store-ChLcVeNB.js → editor-shell-store-DHVWS8cE.js} +1 -1
  147. package/dist/assets/{entity-object-JmYMfLsx.js → entity-object-MKYemTFM.js} +1 -1
  148. package/dist/assets/{extend-Cc-nEa_A.js → extend-BrgqZiMY.js} +1 -1
  149. package/dist/assets/fork-menu-DE2MK3Nq.js +1 -0
  150. package/dist/assets/{frame-debugger-store-DaCbAYSW.js → frame-debugger-store-BXoLKTdZ.js} +1 -1
  151. package/dist/assets/game-audio-BeCyd0Ha.js +1 -0
  152. package/dist/assets/{game-contract-seams-BnPFGLll.js → game-contract-seams-tyKDsfaP.js} +1 -1
  153. package/dist/assets/{game-css-scope-transform-D_p7cVgW.js → game-css-scope-transform-DcjrwtVc.js} +2 -2
  154. package/dist/assets/game-document.service-CTb2itHQ.js +1 -0
  155. package/dist/assets/game-eval.command-CpDKXOQU.js +2 -0
  156. package/dist/assets/game-module-access-BTInp2NG.js +1 -0
  157. package/dist/assets/game-network-DW5ARz4R.js +22 -0
  158. package/dist/assets/{gameplay-export-BzYzLZPi.js → gameplay-export-cHk3v9y-.js} +1 -1
  159. package/dist/assets/gameplay-replay-HRenPTtU.js +1 -0
  160. package/dist/assets/gameplay.command-DcY2lKKX.js +1 -0
  161. package/dist/assets/generation-CdOATubd.css +1 -0
  162. package/dist/assets/{generation-jobs-BZhOMrp-.js → generation-jobs-CJBehuUp.js} +1 -1
  163. package/dist/assets/generation.service-BMOc-C9i.js +1 -0
  164. package/dist/assets/{generations-DVDht_31.js → generations-ssgVOe_6.js} +1 -1
  165. package/dist/assets/generations.status-B_SmPReI.js +1 -0
  166. package/dist/assets/hierarchy-marks-BuCO8Ke-.js +1 -0
  167. package/dist/assets/hierarchy-marks-CsTaTkc7.js +1 -0
  168. package/dist/assets/hosted-asset-materialization-CiXZI85V.js +2 -0
  169. package/dist/assets/{ibl-override-material-CiKkaOTW.js → ibl-override-material-CMo_a49U.js} +1 -1
  170. package/dist/assets/index-B0S4fQQV.js +1 -0
  171. package/dist/assets/{index-C3Pw-9So.js → index-B9bd4k-t.js} +1 -1
  172. package/dist/assets/index-BMxv2MNV.js +1 -0
  173. package/dist/assets/{index-DUZeuA7g.js → index-Bm4_DmRO.js} +1 -1
  174. package/dist/assets/{index-cNc-iFbq.js → index-BvBlIRwM.js} +1 -1
  175. package/dist/assets/{index-Ck3JFh48.js → index-BweKDdi_.js} +1 -1
  176. package/dist/assets/{index-BRJMIUK0.js → index-C5ZAyrKq.js} +346 -345
  177. package/dist/assets/index-CPiRKiDC.css +1 -0
  178. package/dist/assets/index-CfpGZrbC.js +1 -0
  179. package/dist/assets/index-Czvj6whv.js +1 -0
  180. package/dist/assets/{index-SS9EugVg.js → index-DgPDGGSV.js} +2 -2
  181. package/dist/assets/{inference-diagnostics-xecGdohW.js → inference-diagnostics-DLt9ql9I.js} +1 -1
  182. package/dist/assets/{ingest-boot-viewport-DAt8WFSy.js → ingest-boot-viewport-BXVXjYpG.js} +1 -1
  183. package/dist/assets/ingest-siblings-DWJ7OGB_.js +1 -0
  184. package/dist/assets/ingest-source-persistence-6ShMoSCa.js +1 -0
  185. package/dist/assets/ingest.service-BBbX8ibg.js +1 -0
  186. package/dist/assets/{inspect-Dr4qvDpJ.js → inspect-Cz3Zyx_1.js} +1 -1
  187. package/dist/assets/inspection-D8fZOHCM.js +1 -0
  188. package/dist/assets/instances.command-BrdlngrL.js +1 -0
  189. package/dist/assets/{json-history-resource-DwS10tqD.js → json-history-resource-Uqrihfc8.js} +1 -1
  190. package/dist/assets/layered-pick-CAVQMPI7.js +1 -0
  191. package/dist/assets/{light-DcFqVCmv.js → light-CqzsCWeJ.js} +1 -1
  192. package/dist/assets/{live-project-verbs-C3LzprCe.js → live-project-verbs-CdFmLYOo.js} +1 -1
  193. package/dist/assets/{machine.document-BzZxubYQ.js → machine.document-DRIFOVaa.js} +1 -1
  194. package/dist/assets/{machines.finder-BR02bfVG.js → machines.finder-DPCT6few.js} +1 -1
  195. package/dist/assets/material-BVApn1V_.js +1 -0
  196. package/dist/assets/{material-factory-COz7qZhC.js → material-factory-B_75xxFD.js} +1 -1
  197. package/dist/assets/{mesh-DcmO-mWI.js → mesh-DdA3mExo.js} +1 -1
  198. package/dist/assets/model-asset-sections-D1uxOu2v.css +1 -0
  199. package/dist/assets/model-asset-sections.service-CJnSIckZ.js +1 -0
  200. package/dist/assets/{model-inspection-CXHxrafK.js → model-inspection-DvspbmJl.js} +1 -1
  201. package/dist/assets/{model-thumbnail-BEKPWg4l.js → model-thumbnail-BmQs-h6t.js} +1 -1
  202. package/dist/assets/{models.finder-c1I0tp2M.js → models.finder-Qv_Hsccy.js} +1 -1
  203. package/dist/assets/module-mode-MJ4Gbsry.js +2 -0
  204. package/dist/assets/mount-canvas-ingest-root-BxtM8OaB.js +2 -0
  205. package/dist/assets/mount-dom-ingest-root-pGatqO46.js +2 -0
  206. package/dist/assets/mount-ingest-root-C7jb-mCl.js +2 -0
  207. package/dist/assets/mount-manifest-BfoHBuzn.js +1 -0
  208. package/dist/assets/mount-readiness-DyAd17pe.js +4 -0
  209. package/dist/assets/mount-three-ingest-root-Boa5mcaF.js +1 -0
  210. package/dist/assets/{mounted-authoring-Clftxx0x.js → mounted-authoring-DxMISwvR.js} +1 -1
  211. package/dist/assets/{mounted-story-viewport-source-B4-eAYGI.js → mounted-story-viewport-source-DfnLxI1f.js} +1 -1
  212. package/dist/assets/{native-debug-module-2_HVupdg.js → native-debug-module-BlrALjM3.js} +1 -1
  213. package/dist/assets/{navigation-CH3-zr1n.js → navigation-CqG5o5AR.js} +1 -1
  214. package/dist/assets/{navmesh.menu-Dfi-Pk-8.js → navmesh.menu-D4TdVDhe.js} +1 -1
  215. package/dist/assets/{navmesh.service-Cz7QFY-M.js → navmesh.service-DWKT5ruQ.js} +1 -1
  216. package/dist/assets/network-observer.service-ZRAquNq4.js +1 -0
  217. package/dist/assets/network.utility-DjeOEvAY.js +1 -0
  218. package/dist/assets/object-marks-BnvSuCTt.js +1 -0
  219. package/dist/assets/{object3d-authoring-subject-BDrxd1GA.js → object3d-authoring-subject-XccsO0xG.js} +1 -1
  220. package/dist/assets/{object3d-document-session-registry-DJDEDM0p.js → object3d-document-session-registry-CMRJdFp6.js} +2 -2
  221. package/dist/assets/{oid-transform-D5Kxt6ij.js → oid-transform-DaA6yW6o.js} +1 -1
  222. package/dist/assets/{particles-vRp0Lf3o.js → particles-DsQRcDBY.js} +1 -1
  223. package/dist/assets/{performance-profiler-OwnXQX0M.js → performance-profiler-CMbwGBuk.js} +1 -1
  224. package/dist/assets/pixi-authoring-adapter-BoBt8bB5.js +1 -0
  225. package/dist/assets/pixi-live-write-target-CYZgvC6U.js +1 -0
  226. package/dist/assets/play.command-D9JGJP-e.js +2 -0
  227. package/dist/assets/pose-guard-CLabLSzf.js +1 -0
  228. package/dist/assets/presentation-COhHQdmR.js +1 -0
  229. package/dist/assets/{product-CxmUIxmr.js → product-CaRGoiIH.js} +1 -1
  230. package/dist/assets/{profiler.action-Dzy9DuAc.js → profiler.action-Cz7HYWjh.js} +1 -1
  231. package/dist/assets/{profiler.menu-jLDO3U6N.js → profiler.menu-D5aR_FBy.js} +1 -1
  232. package/dist/assets/profiler.utility-KwxlIPKb.js +1 -0
  233. package/dist/assets/{project-authoring-session-C3eusefK.js → project-authoring-session-DKXHVwxO.js} +2 -2
  234. package/dist/assets/project-provenance-BGnJXJwa.js +1 -0
  235. package/dist/assets/{properties-bone-constraints.inspector-B_PbSMV7.js → properties-bone-constraints.inspector-Bo-sU8eR.js} +1 -1
  236. package/dist/assets/{properties-bone.inspector-CMDEQuBd.js → properties-bone.inspector-BQiWplQv.js} +1 -1
  237. package/dist/assets/{properties-collection.inspector-D7Ay8yRj.js → properties-collection.inspector-C5BnR-GE.js} +1 -1
  238. package/dist/assets/{properties-constraints.inspector-DS1fZgXK.js → properties-constraints.inspector-CyheU12R.js} +1 -1
  239. package/dist/assets/{properties-data.inspector-k2pGN2Mp.js → properties-data.inspector-CkycARja.js} +1 -1
  240. package/dist/assets/{properties-material.inspector-Bb3yAGUx.js → properties-material.inspector-Bl_PUmY-.js} +1 -1
  241. package/dist/assets/{properties-modifiers.inspector-BcJfe-Wy.js → properties-modifiers.inspector-j7SnOxQq.js} +1 -1
  242. package/dist/assets/{properties-object.inspector-CUSfXJuq.js → properties-object.inspector-DcR3MGLK.js} +1 -1
  243. package/dist/assets/{properties-output.inspector-BTVW2kn1.js → properties-output.inspector-BLjw6K4b.js} +1 -1
  244. package/dist/assets/{properties-particles.inspector-Cw0fxx3B.js → properties-particles.inspector-BUIm2-Jf.js} +1 -1
  245. package/dist/assets/{properties-physics.inspector-C-0bD2bu.js → properties-physics.inspector-DNvRcxb6.js} +1 -1
  246. package/dist/assets/{properties-render.inspector-C8D5UpjX.js → properties-render.inspector-8FMZ-qoZ.js} +1 -1
  247. package/dist/assets/{properties-scene.inspector-HjK6QHGg.js → properties-scene.inspector-Dx7_z75k.js} +1 -1
  248. package/dist/assets/{properties-texture.inspector-CckZgUaI.js → properties-texture.inspector-WT15951-.js} +1 -1
  249. package/dist/assets/{properties-view-layer.inspector-C1ajtVSk.js → properties-view-layer.inspector-P7VNTdqr.js} +1 -1
  250. package/dist/assets/{properties-world.inspector-BiT_EdT-.js → properties-world.inspector-B3t1q8TF.js} +1 -1
  251. package/dist/assets/r3f-design-session-lsbFnoWH.js +2 -0
  252. package/dist/assets/{r3f-physics-binding-DzrbpqjM.js → r3f-physics-binding-Cx8yhuwt.js} +1 -1
  253. package/dist/assets/{r3f-source-authoring-adapter-DbbeRcvt.js → r3f-source-authoring-adapter-jH3G0TeH.js} +2 -2
  254. package/dist/assets/react-canvas-navigation-B_gOe3CI.js +1 -0
  255. package/dist/assets/react-inspector.service-CZf1vfdX.js +1 -0
  256. package/dist/assets/react-story-board-CCm2Opwn.js +1 -0
  257. package/dist/assets/{react-three-rapier.esm-U8J7g6tH.js → react-three-rapier.esm-CHXGG51p.js} +1 -1
  258. package/dist/assets/react-world-authoring-adapter-CnzxMtYz.js +1 -0
  259. package/dist/assets/{realm-services-CnY105XU.js → realm-services-Do9J6nsb.js} +1 -1
  260. package/dist/assets/reflection-probe-capture.inspector-BAjjIybz.js +1 -0
  261. package/dist/assets/{reflection-probe-BHNGwVyz.js → reflection-probe-sIto9mh0.js} +1 -1
  262. package/dist/assets/registry-Xnduk02T.js +1 -0
  263. package/dist/assets/{relative-import-specifier-BFKIWEWs.js → relative-import-specifier-CPFTrxi4.js} +1 -1
  264. package/dist/assets/{render-env-BkKZ4uMA.js → render-env-YJlI8K0i.js} +1 -1
  265. package/dist/assets/{render-features-rxbawsRb.js → render-features-DMSV2qKJ.js} +1 -1
  266. package/dist/assets/{render-settings-DS5leCed.js → render-settings-CRyDhHyz.js} +1 -1
  267. package/dist/assets/{resolve-three-CVnMRHxw.js → resolve-three-D27rMc37.js} +19 -19
  268. package/dist/assets/root-seam-contract-gjWUd5uu.js +1 -0
  269. package/dist/assets/run-selection-B0jOdyYt.js +2 -0
  270. package/dist/assets/scene-capture-Di9cM1p4.js +1 -0
  271. package/dist/assets/scene-document.service-XxGs4HHE.js +2 -0
  272. package/dist/assets/{scene-framing-BQt72ZCw.js → scene-framing-DkZKDwH3.js} +1 -1
  273. package/dist/assets/{scene-index--lRWLEmW.js → scene-index-DHeKmalD.js} +1 -1
  274. package/dist/assets/{scene-query-s1y04OVB.js → scene-query-ByZtXA2m.js} +1 -1
  275. package/dist/assets/seeded-random-BJthDRMu.js +1 -0
  276. package/dist/assets/{session-CTXsU1lK.js → session-x8E_NJk2.js} +34 -34
  277. package/dist/assets/{setup-renderer-Cwkl1Ar6.js → setup-renderer-F9mG7t6r.js} +1 -1
  278. package/dist/assets/{source-object3d-authoring-adapter-DF679Ncb.js → source-object3d-authoring-adapter-CvmFpSUj.js} +1 -1
  279. package/dist/assets/{source-persistence-backend-CwLYVPXj.js → source-persistence-backend-au3WtEn6.js} +1 -1
  280. package/dist/assets/{spark-renderer-lifecycle-DfYpvEJa.js → spark-renderer-lifecycle-B6Axb6jm.js} +1 -1
  281. package/dist/assets/{stage-keyboard-B8BEW592.js → stage-keyboard-BQkndG_D.js} +1 -1
  282. package/dist/assets/stage-overlay-set-g6eWhuRv.js +1 -0
  283. package/dist/assets/stage-presence-markers-0CDfO5f4.js +1 -0
  284. package/dist/assets/stage-transform-tools-BzPl7OIo.js +1 -0
  285. package/dist/assets/standard-viewport-dressing-BW-dM_1h.js +24 -0
  286. package/dist/assets/{state-watch.action-DnR5Zjr-.js → state-watch.action-Z1nQ5awu.js} +1 -1
  287. package/dist/assets/{state-watch.menu-wYLCLsAw.js → state-watch.menu-CQHGUF3W.js} +1 -1
  288. package/dist/assets/state-watch.utility-DCIg2i79.js +1 -0
  289. package/dist/assets/{story-capture-BmnwHGDV.js → story-capture-BIrjDKeY.js} +1 -1
  290. package/dist/assets/story-documents-BvG2xeaR.js +3 -0
  291. package/dist/assets/{story-documents.service-B6v7Z-WE.js → story-documents.service-DOSEa3ja.js} +1 -1
  292. package/dist/assets/{story-documents.service-yagl1wGp.js → story-documents.service-y1m7XGMJ.js} +1 -1
  293. package/dist/assets/{story-media-presence-BqRMu572.js → story-media-presence-HLV-KaMj.js} +1 -1
  294. package/dist/assets/{story-pixi-preview-Da6afqLg.js → story-pixi-preview-CMhho2gG.js} +1 -1
  295. package/dist/assets/{story-presentation-DMSYRWaz.js → story-presentation-CYhVv8Ku.js} +1 -1
  296. package/dist/assets/story-three-preview-CgcLF5lE.js +2 -0
  297. package/dist/assets/{structural-ids-Br2zjINh.js → structural-ids-BOo2BRoY.js} +1 -1
  298. package/dist/assets/studio-environment-R9qXUUcC.js +2 -0
  299. package/dist/assets/{surface-state-1lTOi8FD.js → surface-state-D8Qnowo6.js} +1 -1
  300. package/dist/assets/{syntactic-prop-specs-eiQXwMIc.js → syntactic-prop-specs-8gkBuc5j.js} +1 -1
  301. package/dist/assets/team-playtest.service-BBMZ2iyk.js +1 -0
  302. package/dist/assets/{three-TCuY32m_.js → three-DiL6vMXq.js} +1 -1
  303. package/dist/assets/three-authoring-adapter-CkLR2zGf.js +1 -0
  304. package/dist/assets/three-authoring.service-CovhlCGx.js +2 -0
  305. package/dist/assets/{three-ingest-runtime-B7rtg3QE.js → three-ingest-runtime-CwTqAHgX.js} +1 -1
  306. package/dist/assets/{three-integration-BdN5Nhsg.js → three-integration-DXOFI88n.js} +2 -2
  307. package/dist/assets/three-integration.service-rCAqpqSp.js +1 -0
  308. package/dist/assets/three-projection-core-B7Lf8tOp.js +1 -0
  309. package/dist/assets/{three-state-DwFE3ay2.js → three-state-BCACvUtm.js} +1 -1
  310. package/dist/assets/{three-story-capture.service-CvpV3v5a.js → three-story-capture.service-rTFKNtHA.js} +2 -2
  311. package/dist/assets/{three-story-model-C2r2BuiA.js → three-story-model-BjKr7OMn.js} +1 -1
  312. package/dist/assets/three-viewport-presentation-CBzvc2v2.js +141 -0
  313. package/dist/assets/tools-DfctM216.js +1 -0
  314. package/dist/assets/transform-mode-request-DlEApNrA.js +1 -0
  315. package/dist/assets/transport-strip-xCg94CuI.js +1 -0
  316. package/dist/assets/transport.header-BRtdky0x.js +1 -0
  317. package/dist/assets/{trigger-volume-DP0G1VBe.js → trigger-volume-BLkHmfm9.js} +1 -1
  318. package/dist/assets/tuples-BDz3wbQL.js +1 -0
  319. package/dist/assets/ui-board-document-DvbK_HVN.js +2 -0
  320. package/dist/assets/{user-data-Bpj7diUS.js → user-data-C84W0V47.js} +1 -1
  321. package/dist/assets/user-data-CODoGZqA.js +1 -0
  322. package/dist/assets/{utility-view-state-CAfbFbKQ.js → utility-view-state-CDRxZSo-.js} +1 -1
  323. package/dist/assets/viewport-door-BARIpMu-.js +1 -0
  324. package/dist/assets/{viewport-root-presentation-vgxsTyj4.js → viewport-root-presentation-hRLF0BeO.js} +1 -1
  325. package/dist/assets/{viewport-surface-status-cwCiBGa7.js → viewport-surface-status-TUfhXKR9.js} +1 -1
  326. package/dist/assets/{webworkerAll-Cm3gTjWi.js → webworkerAll-PJtcQ1FD.js} +1 -1
  327. package/dist/assets/worker-BtXrsgFy.js +2 -0
  328. package/dist/assets/workspace-arrangement-DqG5sUns.js +1 -0
  329. package/dist/assets/world-documents-D69XaqUX.js +1 -0
  330. package/dist/assets/world-root-stage-binding-BgZWZEuD.js +1 -0
  331. package/dist/assets/{xstate-animation-binding-BGLxcZT_.js → xstate-animation-binding-CIyLzGHs.js} +1 -1
  332. package/dist/assets/{xstate-animation-meta-D_T441Ru.js → xstate-animation-meta-CbYWup3R.js} +1 -1
  333. package/dist/volter-shared-react.json +10 -0
  334. package/dist/volter-shared-three.json +3 -0
  335. package/dist-node/cli.js +253 -210
  336. package/dist-node/create.js +103 -82
  337. package/package.json +23 -20
  338. package/src/contributions.d.ts +1 -1
  339. package/src/index.ts +10 -10
  340. package/starter/cube.py +1 -1
  341. package/template/.agents/references/project-manual.md +17 -17
  342. package/template/.agents/skills/editor/SKILL.md +6 -6
  343. package/template/.agents/skills/editor/agents/openai.yaml +3 -3
  344. package/template/.agents/skills/editor/references/editor-control.md +62 -62
  345. package/template/{.claude/skills/vgai-3d-models → .agents/skills/volter-3d-models}/SKILL.md +3 -3
  346. package/template/{.github/skills/vgai-ingest-existing-game → .agents/skills/volter-ingest-existing-game}/SKILL.md +2 -2
  347. package/template/.agents/skills/{vgai-music → volter-music}/SKILL.md +35 -11
  348. package/template/{.claude/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/SKILL.md +9 -9
  349. package/template/.agents/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  350. package/template/{.github/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
  351. package/template/.claude/skills/editor/SKILL.md +6 -6
  352. package/template/.claude/skills/editor/agents/openai.yaml +3 -3
  353. package/template/.claude/skills/editor/references/editor-control.md +62 -62
  354. package/template/{.agents/skills/vgai-3d-models → .claude/skills/volter-3d-models}/SKILL.md +3 -3
  355. package/template/{.agents/skills/vgai-ingest-existing-game → .claude/skills/volter-ingest-existing-game}/SKILL.md +2 -2
  356. package/template/{.github/skills/vgai-threejs-authoring → .claude/skills/volter-threejs-authoring}/SKILL.md +9 -9
  357. package/template/.claude/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  358. package/template/.claude/skills/{vgai-threejs-authoring → volter-threejs-authoring}/references/helper-catalog.md +1 -1
  359. package/template/.github/copilot-instructions.md +1 -1
  360. package/template/.github/skills/editor/SKILL.md +6 -6
  361. package/template/.github/skills/editor/agents/openai.yaml +3 -3
  362. package/template/.github/skills/editor/references/editor-control.md +62 -62
  363. package/template/.github/skills/{vgai-3d-models → volter-3d-models}/SKILL.md +3 -3
  364. package/template/{.claude/skills/vgai-ingest-existing-game → .github/skills/volter-ingest-existing-game}/SKILL.md +2 -2
  365. package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/SKILL.md +9 -9
  366. package/template/.github/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  367. package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
  368. package/template/.mcp.json +3 -3
  369. package/template/AGENTS.md +24 -23
  370. package/template/DEVLOG.md +1 -1
  371. package/template/IDIOMS.md +3 -3
  372. package/template/LICENSE +3 -3
  373. package/template/README.md +12 -12
  374. package/template/check-idioms.ts +51 -51
  375. package/template/manifest-entry-modules-plugin.ts +17 -4
  376. package/template/package.json +12 -12
  377. package/template/server/loopback.ts +1 -1
  378. package/template/server/main.ts +4 -4
  379. package/template/server/rooms/arena-room.ts +8 -8
  380. package/template/server/rooms/game-room.ts +8 -8
  381. package/template/server/rooms.ts +2 -2
  382. package/template/src/bot/QaTester.tsx +1 -1
  383. package/template/src/bot/bot-station.ts +2 -2
  384. package/template/src/bot/tester-station.ts +1 -1
  385. package/template/src/contributions/README.md +1 -1
  386. package/template/src/contributions/analytics.analytics.tsx +1 -1
  387. package/template/src/contributions/data.document.tsx +2 -2
  388. package/template/src/contributions/pages.finder.ts +1 -1
  389. package/template/src/contributions/tester.inspector.tsx +2 -2
  390. package/template/src/contributions/use-game-modules.ts +1 -1
  391. package/template/src/input.ts +2 -2
  392. package/template/src/lib/reflections/volume-reflection-material.ts +59 -59
  393. package/template/src/lib/static-batch/Frozen.tsx +1 -1
  394. package/template/src/lib/static-batch/mutation-watch.ts +1 -1
  395. package/template/src/main.ts +58 -6
  396. package/template/src/manifest-entry-modules.d.ts +12 -1
  397. package/template/src/prefabs/HeroBox.stories.tsx +1 -1
  398. package/template/src/world.tsx +1 -1
  399. package/template/tsconfig.json +1 -1
  400. package/template/validate-manifest.ts +3 -3
  401. package/template/vite.config.ts +11 -11
  402. package/template/{vgai.adapter.ts → volter.adapter.ts} +1 -1
  403. package/template/{vgai.project.json → volter.project.json} +2 -2
  404. package/template-dotfiles/gitignore +27 -27
  405. package/workbench/src/media/game-cover.css +11 -11
  406. package/workbench/src/product.contribution.ts +28 -28
  407. package/workbench/src/{vgaiGameSkew.ts → volterGameSkew.ts} +16 -16
  408. package/dist/assets/AudioViewer-BDPqHDfU.js +0 -1
  409. package/dist/assets/CanvasBoardDocument-mxL0oJ3N.js +0 -1
  410. package/dist/assets/CanvasSceneViewport-C_mapCwC.js +0 -1
  411. package/dist/assets/ColorInput-QUPS1pEB.js +0 -1
  412. package/dist/assets/ImageViewer-tlVvkdM4.js +0 -1
  413. package/dist/assets/InspectorObjectPreview-W-y079DS.js +0 -1
  414. package/dist/assets/JsonAssetDocument-CPmcWFPW.js +0 -2
  415. package/dist/assets/ModelAssetDocument-De1HKuxG.js +0 -1
  416. package/dist/assets/Object3DDocumentToolbar-Cks81kCS.js +0 -1
  417. package/dist/assets/Object3DDocumentViewport-DCwiSY3O.js +0 -2
  418. package/dist/assets/OnlineAssetDetail-CNuwSQRQ.js +0 -1
  419. package/dist/assets/PlayBar-bT8Xdrap.js +0 -1
  420. package/dist/assets/ReactCanvasControls-CnJrPj-B.js +0 -1
  421. package/dist/assets/RootSelectionOverlay-CpaGluQu.js +0 -1
  422. package/dist/assets/ShadowEditor-CVtMlALn.js +0 -1
  423. package/dist/assets/StageHost-B89HKcvd.js +0 -2
  424. package/dist/assets/ThreeBoardDocument-BAgHrbtu.js +0 -2
  425. package/dist/assets/Toolbar-DkTHnQto.js +0 -1
  426. package/dist/assets/VideoViewer-DMV8lf4P.js +0 -1
  427. package/dist/assets/ViewportShadingMenu-CXPi6fl8.js +0 -1
  428. package/dist/assets/active-ingest-DA426a81.js +0 -3
  429. package/dist/assets/adapter-runtime-bindings-4cmsRvRh.js +0 -2
  430. package/dist/assets/animation-mixers.service-DK64IuYq.js +0 -1
  431. package/dist/assets/animation-timeline.utility-D-g0zrOl.js +0 -1
  432. package/dist/assets/asset-editor-persistence-BGWIqZdk.js +0 -1
  433. package/dist/assets/asset-loaders-C0KQI5eY.js +0 -2
  434. package/dist/assets/audio.utility-BmE9WMUg.js +0 -1
  435. package/dist/assets/autoplay.service-CjPnv3QW.js +0 -1
  436. package/dist/assets/binding-resolver-dE0GnZT5.js +0 -2
  437. package/dist/assets/blender-emscripten-engine-BeWFjMn-.js +0 -2
  438. package/dist/assets/blender-version.status-OsFoc9SA.js +0 -1
  439. package/dist/assets/blender-wali-engine-da698rDf.js +0 -2
  440. package/dist/assets/blender.keymap-_rF_vRX8.js +0 -1
  441. package/dist/assets/blender.status-ujwGU6dU.js +0 -1
  442. package/dist/assets/board-guides-BEKPgD9M.js +0 -1
  443. package/dist/assets/body-marks-RKb_LTwL.js +0 -1
  444. package/dist/assets/bridge.command-BF00Iefm.js +0 -3
  445. package/dist/assets/build-profiles.document-CqNrDdh9.js +0 -2
  446. package/dist/assets/build-progress.status-Bo1ZgJcb.js +0 -1
  447. package/dist/assets/build-session-GZcSAfPN.js +0 -9
  448. package/dist/assets/build.header-Bt1kwHWl.js +0 -1
  449. package/dist/assets/canvas-design-mount-BbLW_Nci.js +0 -6
  450. package/dist/assets/canvas-entry-runtime-UNYuSfG0.js +0 -2
  451. package/dist/assets/capability-coverage-DZ-onC5j.js +0 -7
  452. package/dist/assets/component-board.service-q_TM9BCw.js +0 -2
  453. package/dist/assets/component-contracts.service-CPbfXE1h.js +0 -1
  454. package/dist/assets/component-instance-root-B0C5oNEm.js +0 -1
  455. package/dist/assets/component-verbs.service-CnA11bJq.js +0 -1
  456. package/dist/assets/connection.status-Yvt0bX0r.js +0 -1
  457. package/dist/assets/constraints.inspector-4r8jWq5a.js +0 -1
  458. package/dist/assets/coverage.service-DcpEoBuf.js +0 -3
  459. package/dist/assets/create-runtime-DBfUy0SO.js +0 -3
  460. package/dist/assets/curve-DVd18iAX.js +0 -1
  461. package/dist/assets/data-check-core-CQEjuFyt.js +0 -1
  462. package/dist/assets/data-ref-CWnkj-HX.js +0 -1
  463. package/dist/assets/debug-bridge-D3_-EgRE.js +0 -1
  464. package/dist/assets/debug-registry-P0_YQGWd.js +0 -1
  465. package/dist/assets/design-time-layers-ChswRUJt.js +0 -1
  466. package/dist/assets/design-time-react-mount-C85KfXOd.js +0 -1
  467. package/dist/assets/edit-mode-authoring-DeCxPcHM.js +0 -1
  468. package/dist/assets/editor-api-BFTIRlWa.js +0 -1
  469. package/dist/assets/editor-presentation-activity-C7SNSmTd.js +0 -1
  470. package/dist/assets/entry-adjudication-Dc18TIqT.js +0 -1
  471. package/dist/assets/fork-menu-DpKqRhF5.js +0 -1
  472. package/dist/assets/game-audio-CaGKzia4.js +0 -1
  473. package/dist/assets/game-document.service-Chmt4065.js +0 -1
  474. package/dist/assets/game-eval.command-DRSvOJ_1.js +0 -2
  475. package/dist/assets/game-module-access-o3iXZpCA.js +0 -1
  476. package/dist/assets/game-network-Ct2FQYmu.js +0 -1
  477. package/dist/assets/gameplay-replay-BwdxV4oF.js +0 -1
  478. package/dist/assets/gameplay.command-Boqv1hnc.js +0 -1
  479. package/dist/assets/generation-DhwCUHPf.css +0 -1
  480. package/dist/assets/generation.service-o9aXlsx4.js +0 -1
  481. package/dist/assets/generations.status-BvzgHlyk.js +0 -1
  482. package/dist/assets/hierarchy-marks-BLPfSIym.js +0 -1
  483. package/dist/assets/hierarchy-marks-Cc_3lxw6.js +0 -1
  484. package/dist/assets/hosted-asset-materialization-BpbnhJac.js +0 -2
  485. package/dist/assets/index-0Lm0Nf1M.css +0 -1
  486. package/dist/assets/index-BHoAKyAC.js +0 -1
  487. package/dist/assets/index-BeK4RPgj.js +0 -1
  488. package/dist/assets/index-C1c3eOmm.js +0 -1
  489. package/dist/assets/index.module-Ycad3DJq.js +0 -1
  490. package/dist/assets/ingest-siblings-BtiEXLnh.js +0 -1
  491. package/dist/assets/ingest-source-persistence-Dmdo-UBp.js +0 -1
  492. package/dist/assets/ingest.service-vbCucMz7.js +0 -1
  493. package/dist/assets/inspection-CObLhnrs.js +0 -1
  494. package/dist/assets/instances.command-BwayrqNm.js +0 -1
  495. package/dist/assets/layered-pick-kiQf53t5.js +0 -1
  496. package/dist/assets/material-B_V78pTt.js +0 -1
  497. package/dist/assets/model-asset-sections-CFvvihfx.css +0 -1
  498. package/dist/assets/model-asset-sections.service-CqSclZGY.js +0 -1
  499. package/dist/assets/module-mode-BH2R93XP.js +0 -2
  500. package/dist/assets/mount-canvas-ingest-root-D1z9i5B3.js +0 -2
  501. package/dist/assets/mount-dom-ingest-root-BAmmNxlm.js +0 -2
  502. package/dist/assets/mount-ingest-root-DYR0TMIt.js +0 -2
  503. package/dist/assets/mount-manifest-DdkFYdVA.js +0 -1
  504. package/dist/assets/mount-readiness-Ds0HvvLH.js +0 -4
  505. package/dist/assets/mount-three-ingest-root-DVbACDUy.js +0 -1
  506. package/dist/assets/network-observer.service-Ce83TdsU.js +0 -1
  507. package/dist/assets/network.utility-DFDul2Xb.js +0 -1
  508. package/dist/assets/object-marks-DwvIEBOK.js +0 -1
  509. package/dist/assets/pixi-authoring-adapter-BChknIdC.js +0 -1
  510. package/dist/assets/pixi-live-write-target-BjDsBQbp.js +0 -1
  511. package/dist/assets/play-mode-DICV4cKP.js +0 -22
  512. package/dist/assets/play.command-NHyi5rzF.js +0 -2
  513. package/dist/assets/pose-guard-DILO6gGq.js +0 -1
  514. package/dist/assets/presentation-BeNFBfKg.js +0 -1
  515. package/dist/assets/profiler.utility-Do2Bw7MY.js +0 -1
  516. package/dist/assets/project-provenance-4ldz-EOG.js +0 -1
  517. package/dist/assets/r3f-design-session-B5GsZI5M.js +0 -2
  518. package/dist/assets/react-canvas-navigation-Cp3cOHJa.js +0 -1
  519. package/dist/assets/react-inspector.service-Bm0OnanU.js +0 -1
  520. package/dist/assets/react-story-board-GaXqr03H.js +0 -1
  521. package/dist/assets/react-world-authoring-adapter-DOjv2pYm.js +0 -1
  522. package/dist/assets/reflection-probe-capture.inspector-DqSW9p1v.js +0 -1
  523. package/dist/assets/registry-CaCdF63N.js +0 -1
  524. package/dist/assets/root-seam-contract-CxLZaRio.js +0 -1
  525. package/dist/assets/run-selection-DzEkGesJ.js +0 -2
  526. package/dist/assets/scene-capture-0a-bTjT8.js +0 -1
  527. package/dist/assets/scene-document.service-CeDwVA7t.js +0 -2
  528. package/dist/assets/seeded-random-BgCwIAAU.js +0 -1
  529. package/dist/assets/stage-overlay-set-BGE03mqb.js +0 -1
  530. package/dist/assets/stage-presence-markers-DIP7YMcO.js +0 -1
  531. package/dist/assets/stage-transform-tools-BQB7EY4l.js +0 -1
  532. package/dist/assets/standard-viewport-dressing-BCA51Tum.js +0 -24
  533. package/dist/assets/state-watch.utility-CFG1Tu1m.js +0 -1
  534. package/dist/assets/story-documents-BTo90DiA.js +0 -3
  535. package/dist/assets/story-three-preview-R1JvrggS.js +0 -2
  536. package/dist/assets/studio-environment-DRxxq_QX.js +0 -2
  537. package/dist/assets/team-playtest.service-hLfjgScx.js +0 -1
  538. package/dist/assets/three-authoring-adapter-htbnVej2.js +0 -1
  539. package/dist/assets/three-authoring.service-BIQAtVdX.js +0 -2
  540. package/dist/assets/three-integration.service-CS8Nvbd2.js +0 -1
  541. package/dist/assets/three-projection-core-CG01r5Ta.js +0 -1
  542. package/dist/assets/three-viewport-presentation-B0z_cECu.js +0 -141
  543. package/dist/assets/tools-B_NJsk05.js +0 -1
  544. package/dist/assets/transform-mode-request-DzD9aUNA.js +0 -1
  545. package/dist/assets/transport-strip-CUjNltnb.js +0 -1
  546. package/dist/assets/transport.header-Bb4FpQ8J.js +0 -1
  547. package/dist/assets/tuples-DfWSY2tr.js +0 -1
  548. package/dist/assets/ui-board-document-CCiiXjX9.js +0 -2
  549. package/dist/assets/user-data-dHvLdpwM.js +0 -1
  550. package/dist/assets/viewport-door-Bj_ZIP85.js +0 -1
  551. package/dist/assets/worker-CC9Ug5Ei.js +0 -2
  552. package/dist/assets/workspace-arrangement-BdAlBwvd.js +0 -1
  553. package/dist/assets/world-documents-DBybpBq8.js +0 -1
  554. package/dist/assets/world-root-stage-binding-ZVYIgr74.js +0 -1
  555. package/dist/vgai-shared-react.json +0 -10
  556. package/dist/vgai-shared-three.json +0 -3
  557. package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  558. package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  559. package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  560. /package/dist/assets/{vgai-shared-fontawesome-CU65D4Ij.js → volter-shared-fontawesome-CU65D4Ij.js} +0 -0
  561. /package/dist/assets/{vgai-shared-jsx-dev-runtime-DFDKL7fx.js → volter-shared-jsx-dev-runtime-DFDKL7fx.js} +0 -0
  562. /package/dist/assets/{vgai-shared-jsx-runtime-DIqBpTut.js → volter-shared-jsx-runtime-DIqBpTut.js} +0 -0
  563. /package/dist/assets/{vgai-shared-react-BT7rMc2H.js → volter-shared-react-BT7rMc2H.js} +0 -0
  564. /package/dist/assets/{vgai-shared-react-dom-DFajMqMT.js → volter-shared-react-dom-DFajMqMT.js} +0 -0
  565. /package/dist/assets/{vgai-shared-react-dom-client-S0ozfl6_.js → volter-shared-react-dom-client-S0ozfl6_.js} +0 -0
  566. /package/dist/assets/{vgai-shared-three-DH4yxKwt.js → volter-shared-three-DH4yxKwt.js} +0 -0
  567. /package/template/{.vgai → .volter}/assets.json +0 -0
  568. /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.67",
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.67",
2362
- "@volter/editor-game": "0.5.67",
2363
- "@volter/editor-react": "0.5.67",
2364
- "@volter/editor-threejs": "0.5.67",
2365
- "@volter/editor-xstate": "0.5.67",
2366
- "@volter/editor-blender": "0.1.10",
2367
- "@volter/dawproject": "0.5.67",
2368
- "@volter/editor-dawproject": "0.5.67",
2369
- "@volter/blender-engine": "0.1.9",
2370
- "@volter/editor-project": "0.5.67",
2371
- "@volter/editor-sdk": "0.5.67",
2372
- "@volter/editor-live": "0.5.67",
2373
- "@volter/game-live": "0.5.67",
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.67",
2376
- "@volter/threejs-runtime": "0.5.67",
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) => {
@@ -5615,6 +5620,27 @@ function writeEditorPackages(targetDir, wanted) {
5615
5620
  );
5616
5621
  writeJson(pkgPath, pkg);
5617
5622
  }
5623
+ function writeNetworkedInput(targetDir) {
5624
+ const inputPath = join4(targetDir, "src", "input.ts");
5625
+ let input = readFileSync3(inputPath, "utf-8");
5626
+ for (const [line, replacement] of NETWORKED_INPUT_LINES) {
5627
+ if (!input.includes(line)) {
5628
+ throw new Error(`The template input store no longer declares its actions as expected: ${line}`);
5629
+ }
5630
+ input = input.replace(line, replacement);
5631
+ }
5632
+ writeFileSync3(inputPath, input, "utf-8");
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
+ }
5618
5644
  function rewriteTemplateVariantFiles(targetDir, composition, additions, starterDir) {
5619
5645
  if (!additions.has("three") || !additions.has("studio")) {
5620
5646
  for (const relative7 of STUDIO_OWNED_PATHS) {
@@ -5623,15 +5649,7 @@ function rewriteTemplateVariantFiles(targetDir, composition, additions, starterD
5623
5649
  }
5624
5650
  writeEditorPackages(targetDir, composition.editorPackages);
5625
5651
  if (additions.has("server") && additions.has("three")) {
5626
- const inputPath = join4(targetDir, "src", "input.ts");
5627
- let input = readFileSync3(inputPath, "utf-8");
5628
- for (const [line, replacement] of NETWORKED_INPUT_LINES) {
5629
- if (!input.includes(line)) {
5630
- throw new Error(`The template input store no longer declares its actions as expected: ${line}`);
5631
- }
5632
- input = input.replace(line, replacement);
5633
- }
5634
- writeFileSync3(inputPath, input, "utf-8");
5652
+ writeNetworkedInput(targetDir);
5635
5653
  } else {
5636
5654
  for (const relative7 of SERVER_CLIENT_PATHS) {
5637
5655
  rmSync2(join4(targetDir, relative7), { recursive: true, force: true });
@@ -5652,9 +5670,9 @@ function rewriteTemplateVariantFiles(targetDir, composition, additions, starterD
5652
5670
  for (const relative7 of THREE_OWNED_PATHS) {
5653
5671
  rmSync2(join4(targetDir, relative7), { recursive: true, force: true });
5654
5672
  }
5655
- writeFileSync3(join4(targetDir, "vgai.adapter.ts"), adapterSourceFor(additions), "utf-8");
5673
+ writeFileSync3(join4(targetDir, "volter.adapter.ts"), adapterSourceFor(additions), "utf-8");
5656
5674
  } else {
5657
- const adapterPath = join4(targetDir, "vgai.adapter.ts");
5675
+ const adapterPath = join4(targetDir, "volter.adapter.ts");
5658
5676
  const source = joinAdditionFinders(readFileSync3(adapterPath, "utf-8"), additions);
5659
5677
  writeFileSync3(adapterPath, source, "utf-8");
5660
5678
  }
@@ -5711,7 +5729,7 @@ function rewriteTsconfig(targetDir, engineRelPath, editorRelPath) {
5711
5729
  ])
5712
5730
  ),
5713
5731
  // `@volter/editor-blender`'s two VALUE exports — the look and the layout a models
5714
- // 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
5715
5733
  // as a wildcard because the package's `exports` names them individually;
5716
5734
  // both entries are inert for a project that never declares the package.
5717
5735
  "@volter/editor-blender/looks": ["node_modules/@volter/editor-blender/src/looks.ts"],
@@ -5809,7 +5827,8 @@ function scaffoldProject(opts) {
5809
5827
  additions,
5810
5828
  resolveScaffoldStarterDir(productDir)
5811
5829
  );
5812
- const adapterPath = join4(targetDir, "vgai.adapter.ts");
5830
+ if (additions.has("canvas")) applyCanvasAddition(targetDir, productDir);
5831
+ const adapterPath = join4(targetDir, "volter.adapter.ts");
5813
5832
  writeFileSync3(
5814
5833
  adapterPath,
5815
5834
  withEditorDeclaration(readFileSync3(adapterPath, "utf-8"), composition.editor),
@@ -5821,6 +5840,8 @@ function scaffoldProject(opts) {
5821
5840
  withAgentsContract(readFileSync3(agentsPath, "utf-8"), additions),
5822
5841
  "utf-8"
5823
5842
  );
5843
+ } else if (exampleId === void 0 && existsSync3(join4(targetDir, "src", "net"))) {
5844
+ writeNetworkedInput(targetDir);
5824
5845
  }
5825
5846
  rewriteTsconfig(targetDir, engineRelPath, editorRelPath);
5826
5847
  rewriteViteConfig(targetDir);
@@ -5956,7 +5977,7 @@ function initGitRepo(targetDir, projectName) {
5956
5977
  notice: "Skipped git init \u2014 the project is already inside a git work tree."
5957
5978
  };
5958
5979
  }
5959
- 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"];
5960
5981
  const steps = [
5961
5982
  { label: "git init", args: ["init", "--quiet"] },
5962
5983
  { label: "git add", args: ["add", "-A"] },
@@ -5995,13 +6016,15 @@ var presets = {
5995
6016
  // silent console the agent contract requires; they are an author's TODO
5996
6017
  // from the moment the author ASKS for those panels (`--with studio`, or
5997
6018
  // `--template full`).
5998
- 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"] },
5999
6022
  /** A 3D world and its models: the smallest thing that plays. */
6000
6023
  prototype: { additions: ["three", "blender"] },
6001
6024
  // EVERY addition in one project — the composition acceptance made
6002
6025
  // permanent. Check it against `SCAFFOLD_ADDITIONS` (./scaffold/additions.ts)
6003
6026
  // when the scaffolder grows one.
6004
- full: { additions: ["three", "ui", "server", "blender", "studio"] },
6027
+ full: { additions: ["three", "canvas", "ui", "server", "blender", "studio"] },
6005
6028
  /** The design skew: a React root and no 3D world. */
6006
6029
  website: { additions: ["ui"] },
6007
6030
  /** Nothing but the project — the shape an author adds to. */
@@ -6012,15 +6035,16 @@ var presets = {
6012
6035
  examples: true,
6013
6036
  compose(additions) {
6014
6037
  const three = additions.has("three");
6038
+ const world = three || additions.has("canvas");
6015
6039
  const studio = additions.has("studio");
6016
6040
  const layouts = "@volter/editor-sdk/layouts";
6017
- const design = additions.has("ui") && !three;
6041
+ const design = additions.has("ui") && !world;
6018
6042
  return {
6019
- // THE PRODUCT THIS PROJECT OPENS IN, and the 3D lane beside it:
6020
- // `@volter/editor-game` is the 3D world's lane, and a project with no 3D
6021
- // root has nothing for Play, the Game workspace or the instruments over
6022
- // a running game to run.
6023
- 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"] : []],
6024
6048
  editor: {
6025
6049
  layout: { name: design ? "DesignLayout" : studio ? "StudioLayout" : "GameLayout", from: layouts },
6026
6050
  inspector: studio ? "column" : "card"
@@ -6158,7 +6182,7 @@ function resolveWorktreeIdentity(projectRoot) {
6158
6182
  };
6159
6183
  }
6160
6184
 
6161
- // ../editor-core/dist/server/chunk-SAN4B5DO.js
6185
+ // ../editor-core/dist/server/chunk-C7HWTZ6G.js
6162
6186
  import {
6163
6187
  mkdirSync as mkdirSync5,
6164
6188
  readdirSync as readdirSync4,
@@ -6170,7 +6194,7 @@ import {
6170
6194
  import { homedir as homedir2 } from "node:os";
6171
6195
  import { join as join7, resolve as resolve6 } from "node:path";
6172
6196
  import { setTimeout as delay } from "node:timers/promises";
6173
- var EDITOR_SESSIONS_REGISTRY_FILE = join7(homedir2(), ".vgai", "editor-sessions.json");
6197
+ var EDITOR_SESSIONS_REGISTRY_FILE = join7(homedir2(), ".volter", "editor-sessions.json");
6174
6198
  function isEditorSessionEntry(v) {
6175
6199
  if (typeof v !== "object" || v === null) return false;
6176
6200
  const s = v;
@@ -6208,7 +6232,7 @@ function readLiveRegisteredSessions() {
6208
6232
  }
6209
6233
  }
6210
6234
  function announceEditorLaunch(project) {
6211
- const directory = join7(project, ".vgai", "editor-launches");
6235
+ const directory = join7(project, ".volter", "editor-launches");
6212
6236
  mkdirSync5(directory, { recursive: true });
6213
6237
  const file = join7(directory, `${process.pid}.json`);
6214
6238
  writeFileSync5(file, JSON.stringify({ pid: process.pid }));
@@ -6223,7 +6247,7 @@ function announceEditorLaunch(project) {
6223
6247
  return clear;
6224
6248
  }
6225
6249
  function hasPendingEditorLaunch(project) {
6226
- const directory = join7(project, ".vgai", "editor-launches");
6250
+ const directory = join7(project, ".volter", "editor-launches");
6227
6251
  try {
6228
6252
  return readdirSync4(directory).some((name) => {
6229
6253
  if (!/^\d+\.json$/.test(name)) return false;
@@ -6270,7 +6294,7 @@ function canonicalizeProjectPath(p) {
6270
6294
  }
6271
6295
  }
6272
6296
 
6273
- // ../editor-core/dist/server/chunk-2QQ7TUPG.js
6297
+ // ../editor-core/dist/server/chunk-4EX3ZYKI.js
6274
6298
  import { createServer } from "node:net";
6275
6299
  import { execFileSync as execFileSync3 } from "node:child_process";
6276
6300
  async function loopbackPortFree(port) {
@@ -6621,7 +6645,7 @@ import { createHash as createHash22 } from "node:crypto";
6621
6645
  import { mkdirSync as mkdirSync22, readFileSync as readFileSync32, renameSync as renameSync2, rmdirSync, statSync as statSync3, writeFileSync as writeFileSync22 } from "node:fs";
6622
6646
  import { homedir as homedir22 } from "node:os";
6623
6647
  import { dirname as dirname22, join as join32 } from "node:path";
6624
- var PRODUCT_DECLARATION_KEY = "vgai.product";
6648
+ var PRODUCT_DECLARATION_KEY = "volter.product";
6625
6649
  var PRODUCT_INSTALL_LINES = [
6626
6650
  " npm install --save-dev @volter/model-editor",
6627
6651
  " npm install --save-dev @volter/game-editor"
@@ -6636,7 +6660,7 @@ function readProductManifest(packageDir) {
6636
6660
  } catch {
6637
6661
  return null;
6638
6662
  }
6639
- const declared = manifest.vgai?.product;
6663
+ const declared = manifest.volter?.product;
6640
6664
  if (declared === void 0) return null;
6641
6665
  const entry = declared.entry;
6642
6666
  if (typeof entry !== "string" || !entry.startsWith("./"))
@@ -6681,7 +6705,7 @@ function readProductManifest(packageDir) {
6681
6705
  }
6682
6706
  var SHA256_HEX = /^[0-9a-f]{64}$/;
6683
6707
  function readProductWorkbench(manifestPath, declared) {
6684
- 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.';
6685
6709
  if (typeof declared !== "object" || declared === null || Array.isArray(declared))
6686
6710
  throw new Error(
6687
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:
@@ -6711,7 +6735,7 @@ ${example}`
6711
6735
  function workbenchProductId(packageName) {
6712
6736
  return packageName.split("/").pop() ?? packageName;
6713
6737
  }
6714
- function declaredVgaiPackages(projectRoot) {
6738
+ function declaredVolterPackages(projectRoot) {
6715
6739
  let manifest;
6716
6740
  try {
6717
6741
  manifest = JSON.parse(
@@ -6747,7 +6771,7 @@ function locatePackage(projectRoot, name) {
6747
6771
  }
6748
6772
  function declaredProducts(projectRoot) {
6749
6773
  const found = [];
6750
- for (const name of declaredVgaiPackages(projectRoot)) {
6774
+ for (const name of declaredVolterPackages(projectRoot)) {
6751
6775
  const dir = locatePackage(projectRoot, name);
6752
6776
  if (dir === null) continue;
6753
6777
  const product = readProductManifest(dir);
@@ -6775,10 +6799,10 @@ are not building with:
6775
6799
  ` + products.map((product) => ` npm uninstall ${product.name}`).join("\n")
6776
6800
  );
6777
6801
  }
6778
- var WORKBENCH_LOCATOR_PATH = ".vgai/workbench.json";
6802
+ var WORKBENCH_LOCATOR_PATH = ".volter/workbench.json";
6779
6803
  var RELEASE_RECORD = "BUILD.json";
6780
6804
  var SOURCES_LAUNCHER = join22("scripts", "code-server.sh");
6781
- var OVERLAY_RECORD = ".vgai-overlay.json";
6805
+ var OVERLAY_RECORD = ".volter-overlay.json";
6782
6806
  function workbenchDeclarationExample(projectRoot) {
6783
6807
  return `${join22(projectRoot, WORKBENCH_LOCATOR_PATH)}:
6784
6808
  { "workbench": "<path to an extracted Code-OSS release, or to a fork checkout>" }`;
@@ -6819,7 +6843,7 @@ ${workbenchDeclarationExample(projectRoot)}`
6819
6843
  return isAbsolute3(declared) ? resolve7(declared) : resolve7(projectRoot, declared);
6820
6844
  }
6821
6845
  function writeWorkbenchDeclaration(projectRoot, workbenchDir) {
6822
- mkdirSync6(join22(projectRoot, ".vgai"), { recursive: true });
6846
+ mkdirSync6(join22(projectRoot, ".volter"), { recursive: true });
6823
6847
  writeFileSync6(
6824
6848
  join22(projectRoot, WORKBENCH_LOCATOR_PATH),
6825
6849
  `${JSON.stringify({ workbench: resolve7(workbenchDir) }, null, 2)}
@@ -6844,7 +6868,7 @@ function resolveWorkbench(dir, expectedProduct) {
6844
6868
  if (expectedProduct !== void 0 && resolved.product !== expectedProduct) {
6845
6869
  throw new Error(
6846
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:
6847
- 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:
6848
6872
  node scripts/workbench/build-release.mjs --product ${expectedProduct} --platform ${machinePlatform()} --checkout <fork dir>`}`
6849
6873
  );
6850
6874
  }
@@ -6902,7 +6926,7 @@ function resolveSources(dir) {
6902
6926
  const marker = join22(dir, OVERLAY_RECORD);
6903
6927
  if (!existsSync22(marker)) {
6904
6928
  throw new Error(
6905
- `${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:
6906
6930
  node scripts/workbench/dev.mjs --checkout ${dir} --product <model-editor|game-editor>`
6907
6931
  );
6908
6932
  }
@@ -6927,7 +6951,7 @@ function resolveSources(dir) {
6927
6951
  };
6928
6952
  }
6929
6953
  var RELEASE_REPO = "volter-ai/code-oss";
6930
- var WORKBENCH_CACHE_ROOT = join22(homedir3(), ".vgai", "workbenches");
6954
+ var WORKBENCH_CACHE_ROOT = join22(homedir3(), ".volter", "workbenches");
6931
6955
  async function resolveWorkbenchForProject(options) {
6932
6956
  const { projectRoot, product, override, io } = options;
6933
6957
  const productId = workbenchProductId(product.name);
@@ -6977,7 +7001,7 @@ function apiHeaders(token) {
6977
7001
  return {
6978
7002
  Accept: "application/vnd.github+json",
6979
7003
  "X-GitHub-Api-Version": "2022-11-28",
6980
- "User-Agent": "vgai-workbench-locator",
7004
+ "User-Agent": "volter-workbench-locator",
6981
7005
  ...token === null ? {} : { Authorization: `Bearer ${token}` }
6982
7006
  };
6983
7007
  }
@@ -7111,7 +7135,7 @@ var MIN_PORT = 1024;
7111
7135
  var MAX_PORT = 65535;
7112
7136
  var WORKTREE_EDITOR_PORT_MIN = 20200;
7113
7137
  var WORKTREE_EDITOR_PORT_MAX = 29999;
7114
- var DEFAULT_PORT_REGISTRY = join32(homedir22(), ".vgai", "worktree-ports.json");
7138
+ var DEFAULT_PORT_REGISTRY = join32(homedir22(), ".volter", "worktree-ports.json");
7115
7139
  var LOCK_STALE_MS = 1e4;
7116
7140
  var lockWait = new Int32Array(new SharedArrayBuffer(4));
7117
7141
  function assertPort(value, source) {
@@ -7224,7 +7248,7 @@ function allocateWorktreeEditorPort(projectRoot, registryFile = DEFAULT_PORT_REG
7224
7248
  }
7225
7249
  function readEditorPortEnv(value) {
7226
7250
  if (value === void 0 || value.trim() === "") return void 0;
7227
- return assertPort(Number(value), "VGAI_EDITOR_PORT");
7251
+ return assertPort(Number(value), "VOLTER_EDITOR_PORT");
7228
7252
  }
7229
7253
  function resolveEditorPortRequest(projectRoot, portOverride, envValue, registryFile) {
7230
7254
  if (portOverride !== void 0) {
@@ -7313,7 +7337,7 @@ async function launch(folder, launching, options = {}) {
7313
7337
  const project = realpathSync3(resolve22(folder));
7314
7338
  const product = resolveProductForProject(project);
7315
7339
  if (product.name !== launching.packageName) throw new Error(`${project} declares ${product.name}, not ${launching.displayName}.`);
7316
- const port = resolveEditorPortPreference(project, options.port, process.env["VGAI_EDITOR_PORT"]);
7340
+ const port = resolveEditorPortPreference(project, options.port, process.env["VOLTER_EDITOR_PORT"]);
7317
7341
  await waitForPendingEditorLaunch(project);
7318
7342
  const sessions = await verifiedSessions(port);
7319
7343
  const verdict = classifyProjectSession(sessions, project);
@@ -7350,14 +7374,14 @@ async function launch(folder, launching, options = {}) {
7350
7374
  stdio: ["ignore", log, log],
7351
7375
  env: {
7352
7376
  ...process.env,
7353
- VGAI_CLI_ENTRY: resolve22(process.argv[1]),
7354
- VGAI_PROJECT: project,
7355
- VGAI_PRODUCT_DIR: product.dir,
7356
- VGAI_EDITOR_PORT: String(port),
7357
- VGAI_WORKBENCH_DIR: workbench.dir,
7358
- VGAI_FRAME_PORT: String(framePort),
7359
- VGAI_FRAME_PROXY_PORT: String(proxyPort),
7360
- ...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" } : {}
7361
7385
  }
7362
7386
  });
7363
7387
  } catch (error) {
@@ -7400,7 +7424,7 @@ async function prepareSession(folder, launching) {
7400
7424
  const child = spawn2(process.execPath, [entry], {
7401
7425
  cwd: project,
7402
7426
  stdio: ["ignore", "inherit", "inherit"],
7403
- 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" }
7404
7428
  });
7405
7429
  child.once("error", fail2);
7406
7430
  child.once("exit", done);
@@ -7417,10 +7441,29 @@ async function ensureTab(serverUrl, noOpen) {
7417
7441
  openAttemptAt,
7418
7442
  onProgress: (ms) => console.log(`Waiting for the editor page (${Math.round(ms / 1e3)}s)\u2026`)
7419
7443
  });
7420
- 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
+ }
7421
7464
  }
7422
7465
 
7423
- // ../editor-core/dist/server/chunk-BH4IOORU.js
7466
+ // ../editor-core/dist/server/chunk-RWQATMGM.js
7424
7467
  import { Agent, fetch as nodeFetch } from "undici";
7425
7468
  function createDispatcher(timeoutMs) {
7426
7469
  return new Agent({ headersTimeout: timeoutMs, bodyTimeout: timeoutMs });
@@ -7447,7 +7490,7 @@ var EditorCommandError = class extends Error {
7447
7490
  * the receipt window closing unanswered, a beating-but-dead tab, and no tab
7448
7491
  * present at all. The last four can fail in milliseconds.
7449
7492
  *
7450
- * 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
7451
7494
  * because a refusal the editor ANSWERED may go differently next time, while
7452
7495
  * a command the relay abandoned tells you nothing new on a second identical
7453
7496
  * attempt — and when the abandonment was a 120s budget, re-running it three
@@ -7625,22 +7668,22 @@ var EditorClient = class {
7625
7668
  return data;
7626
7669
  }
7627
7670
  // --- Play control ---
7628
- /** `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
7629
7672
  * explicit config leg, relayed as `cmd['seed']`; `handleCommand`'s
7630
7673
  * `'play'` case threads it into `enterPlayMode`'s highest-precedence seed
7631
- * argument (beats manifest.determinism.defaultSeed/?vgai-seed=). Omitted,
7674
+ * argument (beats manifest.determinism.defaultSeed/?volter-seed=). Omitted,
7632
7675
  * boot seeding falls back to that precedence unchanged.
7633
7676
  *
7634
- * `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,
7635
7678
  * relayed as `cmd['name']` and slugified server-side into the run's
7636
7679
  * `logs/play-*.jsonl` filename and its session-journal line. Findability
7637
7680
  * only: no registry, no uniqueness, no lookup verb — grep and `ls` are the
7638
7681
  * query engine. Omitted, the filename keeps its exact unnamed shape. */
7639
- /* `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
7640
7683
  * file. It does not ENABLE recording: every relayed play records, with no
7641
- * 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
7642
7685
  * the durable Gameplay Session; named, it becomes an explicit keepsake in
7643
- * `.vgai/recordings/<name>.webm`. */
7686
+ * `.volter/recordings/<name>.webm`. */
7644
7687
  async play(opts) {
7645
7688
  return this.command({
7646
7689
  type: "play",
@@ -7741,9 +7784,9 @@ var EditorClient = class {
7741
7784
  return { base64: data.base64, mimeType: data.mimeType };
7742
7785
  }
7743
7786
  /**
7744
- * Unit 4 (live-front-door wave) — capture the RUNNING GAME (`vgai
7745
- * screenshot`'s wire leg). Sends the SAME `bridge-screenshot` relay op
7746
- * `@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
7747
7790
  * `game.screenshot()` on the relay path) already sends, so all three
7748
7791
  * surfaces composite the identical full game stack — canvas(es) plus the
7749
7792
  * HUD/react DOM layers — rather than any of them inventing a second,
@@ -7761,8 +7804,8 @@ var EditorClient = class {
7761
7804
  * refuses it with `BRIDGE_SCREENSHOT_STALE` rather than pass it off as
7762
7805
  * current. Setting this asks the relay to render exactly ONE deterministic
7763
7806
  * tick (`runTicks(1, {render:'last'})`) first — the same escape
7764
- * `@vgai/live`'s `RelayTransport.screenshot` has always used, which is why
7765
- * `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.
7766
7809
  * Off by default: a caller who does not ask must never be handed a frame
7767
7810
  * that only exists because the capture drove the game.
7768
7811
  */
@@ -7847,8 +7890,8 @@ var EditorClient = class {
7847
7890
  ...source,
7848
7891
  ...options
7849
7892
  },
7850
- // Photographing changes nothing, and this is the relay `vgai screenshot
7851
- // <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
7852
7895
  // transport failure cost a cold agent three probe modules.
7853
7896
  { retryTransport: true }
7854
7897
  );
@@ -7862,7 +7905,7 @@ var EditorClient = class {
7862
7905
  };
7863
7906
  }
7864
7907
  /**
7865
- * 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):
7866
7909
  * the DEFINITION travels with the command (project data — see
7867
7910
  * `AssetPreviewShotSetDefinition`; the CLI resolves it from the registered
7868
7911
  * `project.<set>.previewShots` tool), and the editor's generic
@@ -7891,8 +7934,8 @@ var EditorClient = class {
7891
7934
  };
7892
7935
  }
7893
7936
  /**
7894
- * B8.4 — score the asset against a reference GLB (`vgai screenshot
7895
- * <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
7896
7939
  * (equal-height bounding-box framing, both yaw-normalized to face the
7897
7940
  * camera), per-view IoU numbers, and overlay evidence images. The
7898
7941
  * reference GLB's raw bytes travel base64 in the command; the editor
@@ -7909,7 +7952,7 @@ var EditorClient = class {
7909
7952
  return { width: data.width, height: data.height, views: data.views };
7910
7953
  }
7911
7954
  /**
7912
- * 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
7913
7956
  * one project story file rendered in the live session's DOM and captured
7914
7957
  * through the same composite leg {@link captureGame} uses, returned as
7915
7958
  * per-export images plus one variant sheet. `options.story` narrows to a
@@ -8041,9 +8084,9 @@ var EditorClient = class {
8041
8084
  * Run ONE command by id — the door to everything the command palette lists.
8042
8085
  *
8043
8086
  * Under the Code-OSS frame this is the workbench's own `ICommandService`, so
8044
- * any command id works: a view's `vgai.<view>.<verb>`, an editor action's
8045
- * `vgai.action.<id>`, or one of VS Code's own. Standalone `vgai edit` has no
8046
- * 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
8047
8090
  * the views registry, refusing anything else BY NAME.
8048
8091
  *
8049
8092
  * The result is whatever the command answered — a view verb's state, or
@@ -8239,7 +8282,7 @@ var EditorClient = class {
8239
8282
  * `blender-object-info`, `blender-screenshot-view`, `blender-read-file`,
8240
8283
  * `blender-write-file`, `blender-list-files`, `blender-start`,
8241
8284
  * `blender-status`): Blender runs in the editor tab's worker, and
8242
- * `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
8243
8286
  * one that creates nothing — it answers whether this tab already has a
8244
8287
  * session, which is how a caller survives an editor restart.
8245
8288
  */
@@ -8313,7 +8356,7 @@ var EditorClient = class {
8313
8356
  return data.projects;
8314
8357
  }
8315
8358
  // --- Registered project tools ---
8316
- /** List tools explicitly registered in `package.json#vgai.tools`.
8359
+ /** List tools explicitly registered in `package.json#volter.tools`.
8317
8360
  * The editor server loads callable metadata in Node; modules never enter the
8318
8361
  * editor browser merely because they were listed. */
8319
8362
  async listProjectTools() {
@@ -8586,11 +8629,11 @@ var RELAY_COMMANDS = {
8586
8629
  "close-asset-tab": alwaysRefresh(),
8587
8630
  "toggle-command-palette": noDerivedRefresh(),
8588
8631
  "toggle-console": noDerivedRefresh(),
8589
- // 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
8590
8633
  // no step can express. It is the HOST's, not a package's: reloading the tab
8591
- // 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
8592
8635
  // contribution, so a project without that package — every model project —
8593
- // answered `unknown command type "page-reload"` for a door `@vgai/live`
8636
+ // answered `unknown command type "page-reload"` for a door `@volter/live`
8594
8637
  // documents as general (measured on a `model-editor create` scaffold,
8595
8638
  // 2026-09-21). The handler schedules the navigation for the next task so
8596
8639
  // this ack can travel before the channel is torn down; the client waits for
@@ -8624,7 +8667,7 @@ var RELAY_COMMANDS = {
8624
8667
  "set-inspection-field": alwaysRefresh(3e4),
8625
8668
  "remove-inspection-field": alwaysRefresh(3e4),
8626
8669
  // `extract-component` and `fork-component` left this table with their menus
8627
- // (`@vgai/game/contributions/component-verbs.command.ts`), which carries
8670
+ // (`@volter/game/contributions/component-verbs.command.ts`), which carries
8628
8671
  // both budgets forward row for row.
8629
8672
  // The hierarchy context menu's structure verbs, over the control door. Every
8630
8673
  // one of them rewrites the game's own source, so they refresh like a write.
@@ -8640,7 +8683,7 @@ var RELAY_COMMANDS = {
8640
8683
  // `open` WAITS FOR THE PROJECT ADAPTER, for the same reason `play` waits on
8641
8684
  // the project's async `setup()`: on a cold session the adapter's scene table
8642
8685
  // is not there yet, and the door's whole job is to put a document on screen
8643
- // 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
8644
8687
  // `--template models` probe — 6025 / 6831 / 6474 ms from tab-connected to
8645
8688
  // the entry being listed, every one of them first refusing with
8646
8689
  // `SCENE_TABLE_UNAVAILABLE`. At the 5 s default the relay's timer won that
@@ -8663,7 +8706,7 @@ var RELAY_COMMANDS = {
8663
8706
  // Object3D document's orbit/turntable/frame, the viewport photograph and the
8664
8707
  // display and transform toggles — are its own command contribution
8665
8708
  // (`viewport-commands.ts`), each budget on its contributed row.
8666
- // The BLENDER lane's ten verbs are `@vgai/blender`'s
8709
+ // The BLENDER lane's ten verbs are `@volter/blender`'s
8667
8710
  // `contributions/blender.command.ts` (WORK.md §The workbench, item D) —
8668
8711
  // each row's budget travelled with it, onto the contributed spec the page
8669
8712
  // reports to the server. `capture-story-variants` made the same move, to the
@@ -9080,7 +9123,7 @@ async function openProject(path) {
9080
9123
  }
9081
9124
  async function restart(command, options = {}) {
9082
9125
  const { client, url, projectRoot } = await sessionClient();
9083
- const noOpen = Boolean(process.env["VGAI_NO_OPEN"]);
9126
+ const noOpen = Boolean(process.env["VOLTER_NO_OPEN"]);
9084
9127
  const before = await client.getState().catch(() => null);
9085
9128
  const divergence = staleAssetCacheWarning(before);
9086
9129
  const attached = before?.connected === true || (before?.editorsConnected ?? 0) > 0;
@@ -9207,7 +9250,7 @@ function parseLookFlags(options) {
9207
9250
  function screenshotPath(projectRoot, slug) {
9208
9251
  const stamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
9209
9252
  const safe = (slug ?? "").toLowerCase().replace(/[^a-z0-9-_]+/g, "-").replace(/^-+|-+$/g, "");
9210
- 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}`);
9211
9254
  }
9212
9255
  async function screenshot(target, options) {
9213
9256
  const flags = parseLookFlags(options);
@@ -9341,7 +9384,7 @@ async function assetLabLook(client, source, flags, outputDirectory, defaultStage
9341
9384
  }
9342
9385
  async function moduleLook(client, projectRoot, modulePath, flags) {
9343
9386
  if (flags.shots !== void 0 || flags.compare !== void 0) {
9344
- 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/.");
9345
9388
  }
9346
9389
  if (flags.width !== void 0 && flags.height !== void 0 && flags.width !== flags.height) {
9347
9390
  throw new Error("a module look renders square views \u2014 use --size, not --width/--height");
@@ -9354,7 +9397,7 @@ async function moduleLook(client, projectRoot, modulePath, flags) {
9354
9397
  ...size === void 0 ? {} : { size }
9355
9398
  });
9356
9399
  if (!outcome.ok) {
9357
- 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).` : "";
9358
9401
  throw new Error(`${toolName} refused '${modulePath}' \u2014 ${outcome.error?.message ?? "unknown error"}.${missing}`);
9359
9402
  }
9360
9403
  const result = outcome.data;
@@ -9421,7 +9464,7 @@ function runCapabilityCommand(verb, ids, options) {
9421
9464
  }
9422
9465
  return;
9423
9466
  }
9424
- 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.");
9425
9468
  if (verb === "outdated") {
9426
9469
  if (ids.length > 0) throw new Error("Usage: volter-game-editor outdated [--project <path>] [--json]");
9427
9470
  const rows = capabilityVersions(projectDir, catalogDir);
@@ -9501,7 +9544,7 @@ ${report.writtenFiles.map((path) => ` ${path}`).join("\n")}`);
9501
9544
  }
9502
9545
  for (const unplaced of report.unplacedFinders) {
9503
9546
  const include = unplaced.finder.include ? `, include: [${unplaced.finder.include.map((glob) => `'${glob}'`).join(", ")}]` : "";
9504
- 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.`);
9505
9548
  }
9506
9549
  for (const unplaced of report.unplacedRegions) {
9507
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.`);
@@ -9524,12 +9567,12 @@ import {
9524
9567
  } from "node:fs";
9525
9568
  import { homedir as homedir4 } from "node:os";
9526
9569
  import { isAbsolute as isAbsolute5, join as join11, resolve as resolve10 } from "node:path";
9527
- var WORKBENCH_LOCATOR_PATH2 = ".vgai/workbench.json";
9570
+ var WORKBENCH_LOCATOR_PATH2 = ".volter/workbench.json";
9528
9571
  var RELEASE_RECORD2 = "BUILD.json";
9529
9572
  var SOURCES_LAUNCHER2 = join11("scripts", "code-server.sh");
9530
- var OVERLAY_RECORD2 = ".vgai-overlay.json";
9573
+ var OVERLAY_RECORD2 = ".volter-overlay.json";
9531
9574
  function writeWorkbenchDeclaration2(projectRoot, workbenchDir) {
9532
- mkdirSync8(join11(projectRoot, ".vgai"), { recursive: true });
9575
+ mkdirSync8(join11(projectRoot, ".volter"), { recursive: true });
9533
9576
  writeFileSync8(
9534
9577
  join11(projectRoot, WORKBENCH_LOCATOR_PATH2),
9535
9578
  `${JSON.stringify({ workbench: resolve10(workbenchDir) }, null, 2)}
@@ -9550,7 +9593,7 @@ function resolveWorkbench2(dir, expectedProduct) {
9550
9593
  if (expectedProduct !== void 0 && resolved.product !== expectedProduct) {
9551
9594
  throw new Error(
9552
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:
9553
- 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:
9554
9597
  node scripts/workbench/build-release.mjs --product ${expectedProduct} --platform ${machinePlatform2()} --checkout <fork dir>`}`
9555
9598
  );
9556
9599
  }
@@ -9608,7 +9651,7 @@ function resolveSources2(dir) {
9608
9651
  const marker = join11(dir, OVERLAY_RECORD2);
9609
9652
  if (!existsSync9(marker)) {
9610
9653
  throw new Error(
9611
- `${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:
9612
9655
  node scripts/workbench/dev.mjs --checkout ${dir} --product <model-editor|game-editor>`
9613
9656
  );
9614
9657
  }
@@ -9632,10 +9675,10 @@ function resolveSources2(dir) {
9632
9675
  cwd: dir
9633
9676
  };
9634
9677
  }
9635
- var WORKBENCH_CACHE_ROOT2 = join11(homedir4(), ".vgai", "workbenches");
9678
+ var WORKBENCH_CACHE_ROOT2 = join11(homedir4(), ".volter", "workbenches");
9636
9679
 
9637
9680
  // node/cli.ts
9638
- 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] };
9639
9682
  async function playVerb(verb) {
9640
9683
  const { connect: connect2 } = await import("@volter/editor-live");
9641
9684
  const { EditorClient: EditorClient3 } = await Promise.resolve().then(() => (init_client(), client_exports));