@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.
- package/BUNDLED_NOTICES +10954 -5077
- package/LICENSE +1 -1
- package/LICENSE-BLENDER +2 -2
- package/NOTICE +2 -2
- package/additions/canvas/package.json +8 -0
- package/additions/canvas/src/canvas-mount.ts +46 -0
- package/additions/canvas/src/scene2d.tsx +18 -0
- package/catalog/entries/bake.json +1 -1
- package/catalog/entries/blender.json +3 -3
- package/catalog/entries/music.json +6 -6
- package/catalog/project-source/LICENSE +1 -1
- package/catalog/project-source/src/contributions/bake.kind.ts +2 -2
- package/catalog/project-source/src/contributions/builder-document.tsx +1 -1
- package/catalog/project-source/src/contributions/builder-ui.tsx +3 -3
- package/catalog/project-source/src/contributions/module-source.ts +4 -4
- package/catalog/project-source/src/lib/music/music-player.ts +18 -12
- package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +59 -59
- package/catalog/project-source/src/lib/static-batch/Frozen.tsx +1 -1
- package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +1 -1
- package/catalog/project-source/src/tools/bake-preview.tool.ts +9 -9
- package/dist/.vite/manifest.json +4106 -3965
- package/dist/assets/{AssetBudgetPanel-x_FNJbfZ.js → AssetBudgetPanel-BMR3AQhc.js} +10 -10
- package/dist/assets/AudioViewer-DESxi7pU.js +1 -0
- package/dist/assets/CanvasBoardDocument-Q_nrYFlB.js +1 -0
- package/dist/assets/CanvasSceneViewport-WZMoKy_F.js +1 -0
- package/dist/assets/ColorInput-C2EK-OnD.js +1 -0
- package/dist/assets/{EntityModelDocument-CzUHsH9E.js → EntityModelDocument-B_4ENTCq.js} +1 -1
- package/dist/assets/{EnvironmentAssetDocument-ByEB7_4A.js → EnvironmentAssetDocument-BZBp6OFJ.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-dhG-oiqd.js → GameplaySessionTimeline-1ivaucpv.js} +1 -1
- package/dist/assets/ImageViewer-D16OExYu.js +1 -0
- package/dist/assets/{InspectorCanvasPreview-CEr_Kxna.js → InspectorCanvasPreview-BrFjhoiD.js} +1 -1
- package/dist/assets/InspectorObjectPreview-CY5xVsPR.js +1 -0
- package/dist/assets/JsonAssetDocument-CvjTlcdr.js +2 -0
- package/dist/assets/{LiveModuleDocument-DL8QHSlk.js → LiveModuleDocument-ne1o9giX.js} +1 -1
- package/dist/assets/{LutAssetDocument-BImiug2M.js → LutAssetDocument-Cp0v-O7q.js} +1 -1
- package/dist/assets/ModelAssetDocument-Ceu7OIN9.js +1 -0
- package/dist/assets/{NonThreeAuthoringBootstrap-B40qmGGS.js → NonThreeAuthoringBootstrap-DiElZf-e.js} +1 -1
- package/dist/assets/Object3DDocumentToolbar-BLNamqii.js +1 -0
- package/dist/assets/Object3DDocumentViewport-D6QoHfa_.js +2 -0
- package/dist/assets/{Object3DPreview-ClYDoH2L.js → Object3DPreview-ZVokr044.js} +1 -1
- package/dist/assets/OnlineAssetDetail-Dnckd7zB.js +1 -0
- package/dist/assets/PlayBar-DsMitSgy.js +1 -0
- package/dist/assets/{QuarksAssetDocument-B-VOj-n4.js → QuarksAssetDocument-B5J8uHFM.js} +1 -1
- package/dist/assets/ReactCanvasControls-CmfvxJYY.js +1 -0
- package/dist/assets/RootSelectionOverlay-BWsNiSuM.js +1 -0
- package/dist/assets/{ShaderAssetDocument-Kn8IvRGV.js → ShaderAssetDocument-CT7XzsZq.js} +5 -5
- package/dist/assets/ShadowEditor-YO5KEfnz.js +1 -0
- package/dist/assets/{SourceAssetViewer-CLQ95VSD.js → SourceAssetViewer-FSLup2km.js} +1 -1
- package/dist/assets/StageHost-DYfGYwvq.js +2 -0
- package/dist/assets/{StoryPreviewMount-D2lg37et.js → StoryPreviewMount-BhvT5QlB.js} +1 -1
- package/dist/assets/ThreeBoardDocument-B-z2nwnH.js +2 -0
- package/dist/assets/{ThreeIsolationSceneContent-DbYIylZQ.js → ThreeIsolationSceneContent-B5pU4Y6k.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-WEi6C9uU.js → ToolObject3DPreview-VtraiQ4Q.js} +1 -1
- package/dist/assets/Toolbar-M62Gob9T.js +1 -0
- package/dist/assets/{TransientHint-BpDLhRLd.js → TransientHint-Cc40mHWE.js} +1 -1
- package/dist/assets/VideoViewer-BxcUwXQm.js +1 -0
- package/dist/assets/ViewportShadingMenu-BoMPnTVh.js +1 -0
- package/dist/assets/active-ingest-0QjJWb7i.js +3 -0
- package/dist/assets/{animation-clock-Bm80XdqP.js → animation-clock-BXEwUJtz.js} +1 -1
- package/dist/assets/animation-mixers.service-C-Ko4KzM.js +1 -0
- package/dist/assets/animation-timeline.utility-Bl15-rYb.js +1 -0
- package/dist/assets/{asset-budget-asset.menu-CEgP0Kiw.js → asset-budget-asset.menu-BUa3g0Wy.js} +1 -1
- package/dist/assets/{asset-budget.action-D4R1c3wi.js → asset-budget.action-Dl5eVPIo.js} +1 -1
- package/dist/assets/{asset-budget.document-Syzjn1U1.js → asset-budget.document-DJylQ-0h.js} +1 -1
- package/dist/assets/{asset-budget.menu-BbRiqXeM.js → asset-budget.menu-BJtvNMLj.js} +1 -1
- package/dist/assets/asset-editor-persistence-BIbf5u0Q.js +1 -0
- package/dist/assets/asset-loaders-DoNflsHL.js +2 -0
- package/dist/assets/{asset-preview-B1tDziF1.js → asset-preview-DxlSdRZn.js} +1 -1
- package/dist/assets/{audio-unlock.service-ucMfCVBw.js → audio-unlock.service-CTaiyXF9.js} +1 -1
- package/dist/assets/audio.utility-CEmNc68t.js +1 -0
- package/dist/assets/autoplay.service-BZLSUyL8.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-C8mFMXSr.js → babylon-authoring-adapter-BZvV2bz_.js} +1 -1
- package/dist/assets/binding-resolver-DGbk9_XR.js +2 -0
- package/dist/assets/blender-emscripten-engine-B7lfg-RX.js +2 -0
- package/dist/assets/{blender-node-editor.document-C1YmwWls.js → blender-node-editor.document-wXJobGNH.js} +1 -1
- package/dist/assets/{blender-properties-tab-B8lyjgj3.js → blender-properties-tab-7GFf80ev.js} +1 -1
- package/dist/assets/{blender-runtime-host-CyQlImSR.js → blender-runtime-host-CILxrx5T.js} +2 -2
- package/dist/assets/{blender-runtime-skin-BK7ShZ6z.js → blender-runtime-skin-Cd5lQYsC.js} +7 -7
- package/dist/assets/{blender-runtime.document-B0nVQs0P.js → blender-runtime.document-C0r_R49S.js} +7 -7
- package/dist/assets/{blender-timeline.document-CMcdE2CK.js → blender-timeline.document-BaISZMBc.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-CjqNo4sZ.js → blender-uv-editor.document-CT_fsyyA.js} +1 -1
- package/dist/assets/blender-version.status-DzEx7u7k.js +1 -0
- package/dist/assets/blender-wali-engine-DOiQCBXH.js +2 -0
- package/dist/assets/{blender.command-C6NmRBo5.js → blender.command-DdiKd8mZ.js} +1 -1
- package/dist/assets/blender.keymap-BmOBRY7p.js +1 -0
- package/dist/assets/blender.status-BMETIbb2.js +1 -0
- package/dist/assets/board-guides-CjHQ9Ynm.js +1 -0
- package/dist/assets/body-marks-C1LxJtQb.js +1 -0
- package/dist/assets/bridge.command-DXUeavn5.js +3 -0
- package/dist/assets/{browserAll-lF_dLQVz.js → browserAll-Dg46xT22.js} +1 -1
- package/dist/assets/build-player.document-BHwVV3K0.js +1 -0
- package/dist/assets/build-profiles.document-HkpS-Kxa.js +2 -0
- package/dist/assets/build-progress.status-u1J0Rm1D.js +1 -0
- package/dist/assets/build-session-BLboUUbw.js +9 -0
- package/dist/assets/{build.action-DRX2IcYt.js → build.action-C00DL83N.js} +1 -1
- package/dist/assets/{build.command-BGvLaLG0.js → build.command-Cjk_NY75.js} +1 -1
- package/dist/assets/build.header-BWNmNWFT.js +1 -0
- package/dist/assets/{build.menu-UenrjPWS.js → build.menu-BBYtqCIq.js} +1 -1
- package/dist/assets/{build.service-BIUoTY6l.js → build.service-DOU15tKN.js} +1 -1
- package/dist/assets/{camera-DrvaM47S.js → camera-7DGyYW7Y.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-CjJALNO8.js → camera-runtime.inspector-n-jiOR-3.js} +1 -1
- package/dist/assets/canvas-design-mount-CSRHU-ag.js +6 -0
- package/dist/assets/canvas-entry-runtime-BST8yRuK.js +2 -0
- package/dist/assets/{canvas-preview-frames-C0QTagA3.js → canvas-preview-frames-Cja32aW2.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-Dgjr-rT1.js → canvas-story-capture.service-D5R5HJ8n.js} +2 -2
- package/dist/assets/capability-coverage-ByWftxk4.js +7 -0
- package/dist/assets/{collaboration-presence-BVIQuN1l.js → collaboration-presence-D6MC9xJN.js} +1 -1
- package/dist/assets/{collider-C7SbIYKY.js → collider-B78EcUc9.js} +1 -1
- package/dist/assets/{component-board.service-BEsFAw4_.js → component-board.service-BaQI5Oas.js} +2 -2
- package/dist/assets/component-board.service-CkjrsD8x.js +2 -0
- package/dist/assets/{component-board.service-CWFaGMCO.js → component-board.service-Dvjz_g-x.js} +2 -2
- package/dist/assets/component-contracts.service-C3-AXQp7.js +1 -0
- package/dist/assets/component-instance-root-DLI40MiB.js +1 -0
- package/dist/assets/{component-verbs.command-oNtGgzQL.js → component-verbs.command-Brr_WcaR.js} +1 -1
- package/dist/assets/component-verbs.service-DC2sC3j3.js +1 -0
- package/dist/assets/{config-_wCzzlM_.js → config-BI_7osdR.js} +3 -3
- package/dist/assets/{configurations-BXU4GGbV.js → configurations-XP9YLkrt.js} +1 -1
- package/dist/assets/connection.status-BhRwcFx0.js +1 -0
- package/dist/assets/{constraint-5KLYpGm7.js → constraint-Bp1l8hY-.js} +1 -1
- package/dist/assets/constraints.inspector-Dm1cycK3.js +1 -0
- package/dist/assets/{content-bounds-BeuIXKYu.js → content-bounds-DROIchTa.js} +1 -1
- package/dist/assets/{contract-system-adapters-Bic_7sev.js → contract-system-adapters-Cn7OW_ay.js} +1 -1
- package/dist/assets/coverage.service-l42ty7lr.js +3 -0
- package/dist/assets/create-runtime-B_uTwsmi.js +3 -0
- package/dist/assets/curve-THOUsg-j.js +1 -0
- package/dist/assets/{data-asset-DfQ2Pjse.js → data-asset-DAANayR6.js} +1 -1
- package/dist/assets/data-check-core-CHqar_E8.js +1 -0
- package/dist/assets/data-ref-CN34UeVw.js +1 -0
- package/dist/assets/debug-bridge-BD1XVAIB.js +1 -0
- package/dist/assets/debug-registry-ggQWxtu-.js +1 -0
- package/dist/assets/{deferred-ingest-play-BdR4qGk6.js → deferred-ingest-play-B2JUlwlT.js} +2 -2
- package/dist/assets/{design-time-canvas-mount-DPQeHSN2.js → design-time-canvas-mount-as9cN9I6.js} +2 -2
- package/dist/assets/design-time-layers-BRseeSmV.js +1 -0
- package/dist/assets/{design-time-mount.service-Ks-5Wkcs.js → design-time-mount.service-BTVu3yKo.js} +2 -2
- package/dist/assets/{design-time-mount.service-Ca-DZGFV.js → design-time-mount.service-DKvc7lVK.js} +2 -2
- package/dist/assets/design-time-react-mount-C7rB56QD.js +1 -0
- package/dist/assets/{document-preview-three-DThkjI1S.js → document-preview-three-CxmRhCcV.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-BrLU8IJ_.js → dom-authoring-adapter-L8OzXfmE.js} +1 -1
- package/dist/assets/{draco3d-B2cwv46o.js → draco3d-BjNuXv66.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-D4ITNbsm.js → edit-mode-audio.service-BwI5u845.js} +1 -1
- package/dist/assets/edit-mode-authoring-D5f7aHHl.js +1 -0
- package/dist/assets/{edit-mode-networking.service-BNv-FTRh.js → edit-mode-networking.service-DqP_4lbI.js} +1 -1
- package/dist/assets/editor-api-BM7H_F4G.js +1 -0
- package/dist/assets/{editor-layers-BDJnAAzj.js → editor-layers-D-CTUqco.js} +1 -1
- package/dist/assets/editor-presentation-activity-CqJH4G9t.js +1 -0
- package/dist/assets/{editor-shell-store-ChLcVeNB.js → editor-shell-store-DHVWS8cE.js} +1 -1
- package/dist/assets/{entity-object-JmYMfLsx.js → entity-object-MKYemTFM.js} +1 -1
- package/dist/assets/{extend-Cc-nEa_A.js → extend-BrgqZiMY.js} +1 -1
- package/dist/assets/fork-menu-DE2MK3Nq.js +1 -0
- package/dist/assets/{frame-debugger-store-DaCbAYSW.js → frame-debugger-store-BXoLKTdZ.js} +1 -1
- package/dist/assets/game-audio-BeCyd0Ha.js +1 -0
- package/dist/assets/{game-contract-seams-BnPFGLll.js → game-contract-seams-tyKDsfaP.js} +1 -1
- package/dist/assets/{game-css-scope-transform-D_p7cVgW.js → game-css-scope-transform-DcjrwtVc.js} +2 -2
- package/dist/assets/game-document.service-CTb2itHQ.js +1 -0
- package/dist/assets/game-eval.command-CpDKXOQU.js +2 -0
- package/dist/assets/game-module-access-BTInp2NG.js +1 -0
- package/dist/assets/game-network-DW5ARz4R.js +22 -0
- package/dist/assets/{gameplay-export-BzYzLZPi.js → gameplay-export-cHk3v9y-.js} +1 -1
- package/dist/assets/gameplay-replay-HRenPTtU.js +1 -0
- package/dist/assets/gameplay.command-DcY2lKKX.js +1 -0
- package/dist/assets/generation-CdOATubd.css +1 -0
- package/dist/assets/{generation-jobs-BZhOMrp-.js → generation-jobs-CJBehuUp.js} +1 -1
- package/dist/assets/generation.service-BMOc-C9i.js +1 -0
- package/dist/assets/{generations-DVDht_31.js → generations-ssgVOe_6.js} +1 -1
- package/dist/assets/generations.status-B_SmPReI.js +1 -0
- package/dist/assets/hierarchy-marks-BuCO8Ke-.js +1 -0
- package/dist/assets/hierarchy-marks-CsTaTkc7.js +1 -0
- package/dist/assets/hosted-asset-materialization-CiXZI85V.js +2 -0
- package/dist/assets/{ibl-override-material-CiKkaOTW.js → ibl-override-material-CMo_a49U.js} +1 -1
- package/dist/assets/index-B0S4fQQV.js +1 -0
- package/dist/assets/{index-C3Pw-9So.js → index-B9bd4k-t.js} +1 -1
- package/dist/assets/index-BMxv2MNV.js +1 -0
- package/dist/assets/{index-DUZeuA7g.js → index-Bm4_DmRO.js} +1 -1
- package/dist/assets/{index-cNc-iFbq.js → index-BvBlIRwM.js} +1 -1
- package/dist/assets/{index-Ck3JFh48.js → index-BweKDdi_.js} +1 -1
- package/dist/assets/{index-BRJMIUK0.js → index-C5ZAyrKq.js} +346 -345
- package/dist/assets/index-CPiRKiDC.css +1 -0
- package/dist/assets/index-CfpGZrbC.js +1 -0
- package/dist/assets/index-Czvj6whv.js +1 -0
- package/dist/assets/{index-SS9EugVg.js → index-DgPDGGSV.js} +2 -2
- package/dist/assets/{inference-diagnostics-xecGdohW.js → inference-diagnostics-DLt9ql9I.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-DAt8WFSy.js → ingest-boot-viewport-BXVXjYpG.js} +1 -1
- package/dist/assets/ingest-siblings-DWJ7OGB_.js +1 -0
- package/dist/assets/ingest-source-persistence-6ShMoSCa.js +1 -0
- package/dist/assets/ingest.service-BBbX8ibg.js +1 -0
- package/dist/assets/{inspect-Dr4qvDpJ.js → inspect-Cz3Zyx_1.js} +1 -1
- package/dist/assets/inspection-D8fZOHCM.js +1 -0
- package/dist/assets/instances.command-BrdlngrL.js +1 -0
- package/dist/assets/{json-history-resource-DwS10tqD.js → json-history-resource-Uqrihfc8.js} +1 -1
- package/dist/assets/layered-pick-CAVQMPI7.js +1 -0
- package/dist/assets/{light-DcFqVCmv.js → light-CqzsCWeJ.js} +1 -1
- package/dist/assets/{live-project-verbs-C3LzprCe.js → live-project-verbs-CdFmLYOo.js} +1 -1
- package/dist/assets/{machine.document-BzZxubYQ.js → machine.document-DRIFOVaa.js} +1 -1
- package/dist/assets/{machines.finder-BR02bfVG.js → machines.finder-DPCT6few.js} +1 -1
- package/dist/assets/material-BVApn1V_.js +1 -0
- package/dist/assets/{material-factory-COz7qZhC.js → material-factory-B_75xxFD.js} +1 -1
- package/dist/assets/{mesh-DcmO-mWI.js → mesh-DdA3mExo.js} +1 -1
- package/dist/assets/model-asset-sections-D1uxOu2v.css +1 -0
- package/dist/assets/model-asset-sections.service-CJnSIckZ.js +1 -0
- package/dist/assets/{model-inspection-CXHxrafK.js → model-inspection-DvspbmJl.js} +1 -1
- package/dist/assets/{model-thumbnail-BEKPWg4l.js → model-thumbnail-BmQs-h6t.js} +1 -1
- package/dist/assets/{models.finder-c1I0tp2M.js → models.finder-Qv_Hsccy.js} +1 -1
- package/dist/assets/module-mode-MJ4Gbsry.js +2 -0
- package/dist/assets/mount-canvas-ingest-root-BxtM8OaB.js +2 -0
- package/dist/assets/mount-dom-ingest-root-pGatqO46.js +2 -0
- package/dist/assets/mount-ingest-root-C7jb-mCl.js +2 -0
- package/dist/assets/mount-manifest-BfoHBuzn.js +1 -0
- package/dist/assets/mount-readiness-DyAd17pe.js +4 -0
- package/dist/assets/mount-three-ingest-root-Boa5mcaF.js +1 -0
- package/dist/assets/{mounted-authoring-Clftxx0x.js → mounted-authoring-DxMISwvR.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-B4-eAYGI.js → mounted-story-viewport-source-DfnLxI1f.js} +1 -1
- package/dist/assets/{native-debug-module-2_HVupdg.js → native-debug-module-BlrALjM3.js} +1 -1
- package/dist/assets/{navigation-CH3-zr1n.js → navigation-CqG5o5AR.js} +1 -1
- package/dist/assets/{navmesh.menu-Dfi-Pk-8.js → navmesh.menu-D4TdVDhe.js} +1 -1
- package/dist/assets/{navmesh.service-Cz7QFY-M.js → navmesh.service-DWKT5ruQ.js} +1 -1
- package/dist/assets/network-observer.service-ZRAquNq4.js +1 -0
- package/dist/assets/network.utility-DjeOEvAY.js +1 -0
- package/dist/assets/object-marks-BnvSuCTt.js +1 -0
- package/dist/assets/{object3d-authoring-subject-BDrxd1GA.js → object3d-authoring-subject-XccsO0xG.js} +1 -1
- package/dist/assets/{object3d-document-session-registry-DJDEDM0p.js → object3d-document-session-registry-CMRJdFp6.js} +2 -2
- package/dist/assets/{oid-transform-D5Kxt6ij.js → oid-transform-DaA6yW6o.js} +1 -1
- package/dist/assets/{particles-vRp0Lf3o.js → particles-DsQRcDBY.js} +1 -1
- package/dist/assets/{performance-profiler-OwnXQX0M.js → performance-profiler-CMbwGBuk.js} +1 -1
- package/dist/assets/pixi-authoring-adapter-BoBt8bB5.js +1 -0
- package/dist/assets/pixi-live-write-target-CYZgvC6U.js +1 -0
- package/dist/assets/play.command-D9JGJP-e.js +2 -0
- package/dist/assets/pose-guard-CLabLSzf.js +1 -0
- package/dist/assets/presentation-COhHQdmR.js +1 -0
- package/dist/assets/{product-CxmUIxmr.js → product-CaRGoiIH.js} +1 -1
- package/dist/assets/{profiler.action-Dzy9DuAc.js → profiler.action-Cz7HYWjh.js} +1 -1
- package/dist/assets/{profiler.menu-jLDO3U6N.js → profiler.menu-D5aR_FBy.js} +1 -1
- package/dist/assets/profiler.utility-KwxlIPKb.js +1 -0
- package/dist/assets/{project-authoring-session-C3eusefK.js → project-authoring-session-DKXHVwxO.js} +2 -2
- package/dist/assets/project-provenance-BGnJXJwa.js +1 -0
- package/dist/assets/{properties-bone-constraints.inspector-B_PbSMV7.js → properties-bone-constraints.inspector-Bo-sU8eR.js} +1 -1
- package/dist/assets/{properties-bone.inspector-CMDEQuBd.js → properties-bone.inspector-BQiWplQv.js} +1 -1
- package/dist/assets/{properties-collection.inspector-D7Ay8yRj.js → properties-collection.inspector-C5BnR-GE.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-DS1fZgXK.js → properties-constraints.inspector-CyheU12R.js} +1 -1
- package/dist/assets/{properties-data.inspector-k2pGN2Mp.js → properties-data.inspector-CkycARja.js} +1 -1
- package/dist/assets/{properties-material.inspector-Bb3yAGUx.js → properties-material.inspector-Bl_PUmY-.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-BcJfe-Wy.js → properties-modifiers.inspector-j7SnOxQq.js} +1 -1
- package/dist/assets/{properties-object.inspector-CUSfXJuq.js → properties-object.inspector-DcR3MGLK.js} +1 -1
- package/dist/assets/{properties-output.inspector-BTVW2kn1.js → properties-output.inspector-BLjw6K4b.js} +1 -1
- package/dist/assets/{properties-particles.inspector-Cw0fxx3B.js → properties-particles.inspector-BUIm2-Jf.js} +1 -1
- package/dist/assets/{properties-physics.inspector-C-0bD2bu.js → properties-physics.inspector-DNvRcxb6.js} +1 -1
- package/dist/assets/{properties-render.inspector-C8D5UpjX.js → properties-render.inspector-8FMZ-qoZ.js} +1 -1
- package/dist/assets/{properties-scene.inspector-HjK6QHGg.js → properties-scene.inspector-Dx7_z75k.js} +1 -1
- package/dist/assets/{properties-texture.inspector-CckZgUaI.js → properties-texture.inspector-WT15951-.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-C1ajtVSk.js → properties-view-layer.inspector-P7VNTdqr.js} +1 -1
- package/dist/assets/{properties-world.inspector-BiT_EdT-.js → properties-world.inspector-B3t1q8TF.js} +1 -1
- package/dist/assets/r3f-design-session-lsbFnoWH.js +2 -0
- package/dist/assets/{r3f-physics-binding-DzrbpqjM.js → r3f-physics-binding-Cx8yhuwt.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-DbbeRcvt.js → r3f-source-authoring-adapter-jH3G0TeH.js} +2 -2
- package/dist/assets/react-canvas-navigation-B_gOe3CI.js +1 -0
- package/dist/assets/react-inspector.service-CZf1vfdX.js +1 -0
- package/dist/assets/react-story-board-CCm2Opwn.js +1 -0
- package/dist/assets/{react-three-rapier.esm-U8J7g6tH.js → react-three-rapier.esm-CHXGG51p.js} +1 -1
- package/dist/assets/react-world-authoring-adapter-CnzxMtYz.js +1 -0
- package/dist/assets/{realm-services-CnY105XU.js → realm-services-Do9J6nsb.js} +1 -1
- package/dist/assets/reflection-probe-capture.inspector-BAjjIybz.js +1 -0
- package/dist/assets/{reflection-probe-BHNGwVyz.js → reflection-probe-sIto9mh0.js} +1 -1
- package/dist/assets/registry-Xnduk02T.js +1 -0
- package/dist/assets/{relative-import-specifier-BFKIWEWs.js → relative-import-specifier-CPFTrxi4.js} +1 -1
- package/dist/assets/{render-env-BkKZ4uMA.js → render-env-YJlI8K0i.js} +1 -1
- package/dist/assets/{render-features-rxbawsRb.js → render-features-DMSV2qKJ.js} +1 -1
- package/dist/assets/{render-settings-DS5leCed.js → render-settings-CRyDhHyz.js} +1 -1
- package/dist/assets/{resolve-three-CVnMRHxw.js → resolve-three-D27rMc37.js} +19 -19
- package/dist/assets/root-seam-contract-gjWUd5uu.js +1 -0
- package/dist/assets/run-selection-B0jOdyYt.js +2 -0
- package/dist/assets/scene-capture-Di9cM1p4.js +1 -0
- package/dist/assets/scene-document.service-XxGs4HHE.js +2 -0
- package/dist/assets/{scene-framing-BQt72ZCw.js → scene-framing-DkZKDwH3.js} +1 -1
- package/dist/assets/{scene-index--lRWLEmW.js → scene-index-DHeKmalD.js} +1 -1
- package/dist/assets/{scene-query-s1y04OVB.js → scene-query-ByZtXA2m.js} +1 -1
- package/dist/assets/seeded-random-BJthDRMu.js +1 -0
- package/dist/assets/{session-CTXsU1lK.js → session-x8E_NJk2.js} +34 -34
- package/dist/assets/{setup-renderer-Cwkl1Ar6.js → setup-renderer-F9mG7t6r.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-DF679Ncb.js → source-object3d-authoring-adapter-CvmFpSUj.js} +1 -1
- package/dist/assets/{source-persistence-backend-CwLYVPXj.js → source-persistence-backend-au3WtEn6.js} +1 -1
- package/dist/assets/{spark-renderer-lifecycle-DfYpvEJa.js → spark-renderer-lifecycle-B6Axb6jm.js} +1 -1
- package/dist/assets/{stage-keyboard-B8BEW592.js → stage-keyboard-BQkndG_D.js} +1 -1
- package/dist/assets/stage-overlay-set-g6eWhuRv.js +1 -0
- package/dist/assets/stage-presence-markers-0CDfO5f4.js +1 -0
- package/dist/assets/stage-transform-tools-BzPl7OIo.js +1 -0
- package/dist/assets/standard-viewport-dressing-BW-dM_1h.js +24 -0
- package/dist/assets/{state-watch.action-DnR5Zjr-.js → state-watch.action-Z1nQ5awu.js} +1 -1
- package/dist/assets/{state-watch.menu-wYLCLsAw.js → state-watch.menu-CQHGUF3W.js} +1 -1
- package/dist/assets/state-watch.utility-DCIg2i79.js +1 -0
- package/dist/assets/{story-capture-BmnwHGDV.js → story-capture-BIrjDKeY.js} +1 -1
- package/dist/assets/story-documents-BvG2xeaR.js +3 -0
- package/dist/assets/{story-documents.service-B6v7Z-WE.js → story-documents.service-DOSEa3ja.js} +1 -1
- package/dist/assets/{story-documents.service-yagl1wGp.js → story-documents.service-y1m7XGMJ.js} +1 -1
- package/dist/assets/{story-media-presence-BqRMu572.js → story-media-presence-HLV-KaMj.js} +1 -1
- package/dist/assets/{story-pixi-preview-Da6afqLg.js → story-pixi-preview-CMhho2gG.js} +1 -1
- package/dist/assets/{story-presentation-DMSYRWaz.js → story-presentation-CYhVv8Ku.js} +1 -1
- package/dist/assets/story-three-preview-CgcLF5lE.js +2 -0
- package/dist/assets/{structural-ids-Br2zjINh.js → structural-ids-BOo2BRoY.js} +1 -1
- package/dist/assets/studio-environment-R9qXUUcC.js +2 -0
- package/dist/assets/{surface-state-1lTOi8FD.js → surface-state-D8Qnowo6.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-eiQXwMIc.js → syntactic-prop-specs-8gkBuc5j.js} +1 -1
- package/dist/assets/team-playtest.service-BBMZ2iyk.js +1 -0
- package/dist/assets/{three-TCuY32m_.js → three-DiL6vMXq.js} +1 -1
- package/dist/assets/three-authoring-adapter-CkLR2zGf.js +1 -0
- package/dist/assets/three-authoring.service-CovhlCGx.js +2 -0
- package/dist/assets/{three-ingest-runtime-B7rtg3QE.js → three-ingest-runtime-CwTqAHgX.js} +1 -1
- package/dist/assets/{three-integration-BdN5Nhsg.js → three-integration-DXOFI88n.js} +2 -2
- package/dist/assets/three-integration.service-rCAqpqSp.js +1 -0
- package/dist/assets/three-projection-core-B7Lf8tOp.js +1 -0
- package/dist/assets/{three-state-DwFE3ay2.js → three-state-BCACvUtm.js} +1 -1
- package/dist/assets/{three-story-capture.service-CvpV3v5a.js → three-story-capture.service-rTFKNtHA.js} +2 -2
- package/dist/assets/{three-story-model-C2r2BuiA.js → three-story-model-BjKr7OMn.js} +1 -1
- package/dist/assets/three-viewport-presentation-CBzvc2v2.js +141 -0
- package/dist/assets/tools-DfctM216.js +1 -0
- package/dist/assets/transform-mode-request-DlEApNrA.js +1 -0
- package/dist/assets/transport-strip-xCg94CuI.js +1 -0
- package/dist/assets/transport.header-BRtdky0x.js +1 -0
- package/dist/assets/{trigger-volume-DP0G1VBe.js → trigger-volume-BLkHmfm9.js} +1 -1
- package/dist/assets/tuples-BDz3wbQL.js +1 -0
- package/dist/assets/ui-board-document-DvbK_HVN.js +2 -0
- package/dist/assets/{user-data-Bpj7diUS.js → user-data-C84W0V47.js} +1 -1
- package/dist/assets/user-data-CODoGZqA.js +1 -0
- package/dist/assets/{utility-view-state-CAfbFbKQ.js → utility-view-state-CDRxZSo-.js} +1 -1
- package/dist/assets/viewport-door-BARIpMu-.js +1 -0
- package/dist/assets/{viewport-root-presentation-vgxsTyj4.js → viewport-root-presentation-hRLF0BeO.js} +1 -1
- package/dist/assets/{viewport-surface-status-cwCiBGa7.js → viewport-surface-status-TUfhXKR9.js} +1 -1
- package/dist/assets/{webworkerAll-Cm3gTjWi.js → webworkerAll-PJtcQ1FD.js} +1 -1
- package/dist/assets/worker-BtXrsgFy.js +2 -0
- package/dist/assets/workspace-arrangement-DqG5sUns.js +1 -0
- package/dist/assets/world-documents-D69XaqUX.js +1 -0
- package/dist/assets/world-root-stage-binding-BgZWZEuD.js +1 -0
- package/dist/assets/{xstate-animation-binding-BGLxcZT_.js → xstate-animation-binding-CIyLzGHs.js} +1 -1
- package/dist/assets/{xstate-animation-meta-D_T441Ru.js → xstate-animation-meta-CbYWup3R.js} +1 -1
- package/dist/volter-shared-react.json +10 -0
- package/dist/volter-shared-three.json +3 -0
- package/dist-node/cli.js +253 -210
- package/dist-node/create.js +103 -82
- package/package.json +23 -20
- package/src/contributions.d.ts +1 -1
- package/src/index.ts +10 -10
- package/starter/cube.py +1 -1
- package/template/.agents/references/project-manual.md +17 -17
- package/template/.agents/skills/editor/SKILL.md +6 -6
- package/template/.agents/skills/editor/agents/openai.yaml +3 -3
- package/template/.agents/skills/editor/references/editor-control.md +62 -62
- package/template/{.claude/skills/vgai-3d-models → .agents/skills/volter-3d-models}/SKILL.md +3 -3
- package/template/{.github/skills/vgai-ingest-existing-game → .agents/skills/volter-ingest-existing-game}/SKILL.md +2 -2
- package/template/.agents/skills/{vgai-music → volter-music}/SKILL.md +35 -11
- package/template/{.claude/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/SKILL.md +9 -9
- package/template/.agents/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
- package/template/{.github/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
- package/template/.claude/skills/editor/SKILL.md +6 -6
- package/template/.claude/skills/editor/agents/openai.yaml +3 -3
- package/template/.claude/skills/editor/references/editor-control.md +62 -62
- package/template/{.agents/skills/vgai-3d-models → .claude/skills/volter-3d-models}/SKILL.md +3 -3
- package/template/{.agents/skills/vgai-ingest-existing-game → .claude/skills/volter-ingest-existing-game}/SKILL.md +2 -2
- package/template/{.github/skills/vgai-threejs-authoring → .claude/skills/volter-threejs-authoring}/SKILL.md +9 -9
- package/template/.claude/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.claude/skills/{vgai-threejs-authoring → volter-threejs-authoring}/references/helper-catalog.md +1 -1
- package/template/.github/copilot-instructions.md +1 -1
- package/template/.github/skills/editor/SKILL.md +6 -6
- package/template/.github/skills/editor/agents/openai.yaml +3 -3
- package/template/.github/skills/editor/references/editor-control.md +62 -62
- package/template/.github/skills/{vgai-3d-models → volter-3d-models}/SKILL.md +3 -3
- package/template/{.claude/skills/vgai-ingest-existing-game → .github/skills/volter-ingest-existing-game}/SKILL.md +2 -2
- package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/SKILL.md +9 -9
- package/template/.github/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
- package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
- package/template/.mcp.json +3 -3
- package/template/AGENTS.md +24 -23
- package/template/DEVLOG.md +1 -1
- package/template/IDIOMS.md +3 -3
- package/template/LICENSE +3 -3
- package/template/README.md +12 -12
- package/template/check-idioms.ts +51 -51
- package/template/manifest-entry-modules-plugin.ts +17 -4
- package/template/package.json +12 -12
- package/template/server/loopback.ts +1 -1
- package/template/server/main.ts +4 -4
- package/template/server/rooms/arena-room.ts +8 -8
- package/template/server/rooms/game-room.ts +8 -8
- package/template/server/rooms.ts +2 -2
- package/template/src/bot/QaTester.tsx +1 -1
- package/template/src/bot/bot-station.ts +2 -2
- package/template/src/bot/tester-station.ts +1 -1
- package/template/src/contributions/README.md +1 -1
- package/template/src/contributions/analytics.analytics.tsx +1 -1
- package/template/src/contributions/data.document.tsx +2 -2
- package/template/src/contributions/pages.finder.ts +1 -1
- package/template/src/contributions/tester.inspector.tsx +2 -2
- package/template/src/contributions/use-game-modules.ts +1 -1
- package/template/src/input.ts +2 -2
- package/template/src/lib/reflections/volume-reflection-material.ts +59 -59
- package/template/src/lib/static-batch/Frozen.tsx +1 -1
- package/template/src/lib/static-batch/mutation-watch.ts +1 -1
- package/template/src/main.ts +58 -6
- package/template/src/manifest-entry-modules.d.ts +12 -1
- package/template/src/prefabs/HeroBox.stories.tsx +1 -1
- package/template/src/world.tsx +1 -1
- package/template/tsconfig.json +1 -1
- package/template/validate-manifest.ts +3 -3
- package/template/vite.config.ts +11 -11
- package/template/{vgai.adapter.ts → volter.adapter.ts} +1 -1
- package/template/{vgai.project.json → volter.project.json} +2 -2
- package/template-dotfiles/gitignore +27 -27
- package/workbench/src/media/game-cover.css +11 -11
- package/workbench/src/product.contribution.ts +28 -28
- package/workbench/src/{vgaiGameSkew.ts → volterGameSkew.ts} +16 -16
- package/dist/assets/AudioViewer-BDPqHDfU.js +0 -1
- package/dist/assets/CanvasBoardDocument-mxL0oJ3N.js +0 -1
- package/dist/assets/CanvasSceneViewport-C_mapCwC.js +0 -1
- package/dist/assets/ColorInput-QUPS1pEB.js +0 -1
- package/dist/assets/ImageViewer-tlVvkdM4.js +0 -1
- package/dist/assets/InspectorObjectPreview-W-y079DS.js +0 -1
- package/dist/assets/JsonAssetDocument-CPmcWFPW.js +0 -2
- package/dist/assets/ModelAssetDocument-De1HKuxG.js +0 -1
- package/dist/assets/Object3DDocumentToolbar-Cks81kCS.js +0 -1
- package/dist/assets/Object3DDocumentViewport-DCwiSY3O.js +0 -2
- package/dist/assets/OnlineAssetDetail-CNuwSQRQ.js +0 -1
- package/dist/assets/PlayBar-bT8Xdrap.js +0 -1
- package/dist/assets/ReactCanvasControls-CnJrPj-B.js +0 -1
- package/dist/assets/RootSelectionOverlay-CpaGluQu.js +0 -1
- package/dist/assets/ShadowEditor-CVtMlALn.js +0 -1
- package/dist/assets/StageHost-B89HKcvd.js +0 -2
- package/dist/assets/ThreeBoardDocument-BAgHrbtu.js +0 -2
- package/dist/assets/Toolbar-DkTHnQto.js +0 -1
- package/dist/assets/VideoViewer-DMV8lf4P.js +0 -1
- package/dist/assets/ViewportShadingMenu-CXPi6fl8.js +0 -1
- package/dist/assets/active-ingest-DA426a81.js +0 -3
- package/dist/assets/adapter-runtime-bindings-4cmsRvRh.js +0 -2
- package/dist/assets/animation-mixers.service-DK64IuYq.js +0 -1
- package/dist/assets/animation-timeline.utility-D-g0zrOl.js +0 -1
- package/dist/assets/asset-editor-persistence-BGWIqZdk.js +0 -1
- package/dist/assets/asset-loaders-C0KQI5eY.js +0 -2
- package/dist/assets/audio.utility-BmE9WMUg.js +0 -1
- package/dist/assets/autoplay.service-CjPnv3QW.js +0 -1
- package/dist/assets/binding-resolver-dE0GnZT5.js +0 -2
- package/dist/assets/blender-emscripten-engine-BeWFjMn-.js +0 -2
- package/dist/assets/blender-version.status-OsFoc9SA.js +0 -1
- package/dist/assets/blender-wali-engine-da698rDf.js +0 -2
- package/dist/assets/blender.keymap-_rF_vRX8.js +0 -1
- package/dist/assets/blender.status-ujwGU6dU.js +0 -1
- package/dist/assets/board-guides-BEKPgD9M.js +0 -1
- package/dist/assets/body-marks-RKb_LTwL.js +0 -1
- package/dist/assets/bridge.command-BF00Iefm.js +0 -3
- package/dist/assets/build-profiles.document-CqNrDdh9.js +0 -2
- package/dist/assets/build-progress.status-Bo1ZgJcb.js +0 -1
- package/dist/assets/build-session-GZcSAfPN.js +0 -9
- package/dist/assets/build.header-Bt1kwHWl.js +0 -1
- package/dist/assets/canvas-design-mount-BbLW_Nci.js +0 -6
- package/dist/assets/canvas-entry-runtime-UNYuSfG0.js +0 -2
- package/dist/assets/capability-coverage-DZ-onC5j.js +0 -7
- package/dist/assets/component-board.service-q_TM9BCw.js +0 -2
- package/dist/assets/component-contracts.service-CPbfXE1h.js +0 -1
- package/dist/assets/component-instance-root-B0C5oNEm.js +0 -1
- package/dist/assets/component-verbs.service-CnA11bJq.js +0 -1
- package/dist/assets/connection.status-Yvt0bX0r.js +0 -1
- package/dist/assets/constraints.inspector-4r8jWq5a.js +0 -1
- package/dist/assets/coverage.service-DcpEoBuf.js +0 -3
- package/dist/assets/create-runtime-DBfUy0SO.js +0 -3
- package/dist/assets/curve-DVd18iAX.js +0 -1
- package/dist/assets/data-check-core-CQEjuFyt.js +0 -1
- package/dist/assets/data-ref-CWnkj-HX.js +0 -1
- package/dist/assets/debug-bridge-D3_-EgRE.js +0 -1
- package/dist/assets/debug-registry-P0_YQGWd.js +0 -1
- package/dist/assets/design-time-layers-ChswRUJt.js +0 -1
- package/dist/assets/design-time-react-mount-C85KfXOd.js +0 -1
- package/dist/assets/edit-mode-authoring-DeCxPcHM.js +0 -1
- package/dist/assets/editor-api-BFTIRlWa.js +0 -1
- package/dist/assets/editor-presentation-activity-C7SNSmTd.js +0 -1
- package/dist/assets/entry-adjudication-Dc18TIqT.js +0 -1
- package/dist/assets/fork-menu-DpKqRhF5.js +0 -1
- package/dist/assets/game-audio-CaGKzia4.js +0 -1
- package/dist/assets/game-document.service-Chmt4065.js +0 -1
- package/dist/assets/game-eval.command-DRSvOJ_1.js +0 -2
- package/dist/assets/game-module-access-o3iXZpCA.js +0 -1
- package/dist/assets/game-network-Ct2FQYmu.js +0 -1
- package/dist/assets/gameplay-replay-BwdxV4oF.js +0 -1
- package/dist/assets/gameplay.command-Boqv1hnc.js +0 -1
- package/dist/assets/generation-DhwCUHPf.css +0 -1
- package/dist/assets/generation.service-o9aXlsx4.js +0 -1
- package/dist/assets/generations.status-BvzgHlyk.js +0 -1
- package/dist/assets/hierarchy-marks-BLPfSIym.js +0 -1
- package/dist/assets/hierarchy-marks-Cc_3lxw6.js +0 -1
- package/dist/assets/hosted-asset-materialization-BpbnhJac.js +0 -2
- package/dist/assets/index-0Lm0Nf1M.css +0 -1
- package/dist/assets/index-BHoAKyAC.js +0 -1
- package/dist/assets/index-BeK4RPgj.js +0 -1
- package/dist/assets/index-C1c3eOmm.js +0 -1
- package/dist/assets/index.module-Ycad3DJq.js +0 -1
- package/dist/assets/ingest-siblings-BtiEXLnh.js +0 -1
- package/dist/assets/ingest-source-persistence-Dmdo-UBp.js +0 -1
- package/dist/assets/ingest.service-vbCucMz7.js +0 -1
- package/dist/assets/inspection-CObLhnrs.js +0 -1
- package/dist/assets/instances.command-BwayrqNm.js +0 -1
- package/dist/assets/layered-pick-kiQf53t5.js +0 -1
- package/dist/assets/material-B_V78pTt.js +0 -1
- package/dist/assets/model-asset-sections-CFvvihfx.css +0 -1
- package/dist/assets/model-asset-sections.service-CqSclZGY.js +0 -1
- package/dist/assets/module-mode-BH2R93XP.js +0 -2
- package/dist/assets/mount-canvas-ingest-root-D1z9i5B3.js +0 -2
- package/dist/assets/mount-dom-ingest-root-BAmmNxlm.js +0 -2
- package/dist/assets/mount-ingest-root-DYR0TMIt.js +0 -2
- package/dist/assets/mount-manifest-DdkFYdVA.js +0 -1
- package/dist/assets/mount-readiness-Ds0HvvLH.js +0 -4
- package/dist/assets/mount-three-ingest-root-DVbACDUy.js +0 -1
- package/dist/assets/network-observer.service-Ce83TdsU.js +0 -1
- package/dist/assets/network.utility-DFDul2Xb.js +0 -1
- package/dist/assets/object-marks-DwvIEBOK.js +0 -1
- package/dist/assets/pixi-authoring-adapter-BChknIdC.js +0 -1
- package/dist/assets/pixi-live-write-target-BjDsBQbp.js +0 -1
- package/dist/assets/play-mode-DICV4cKP.js +0 -22
- package/dist/assets/play.command-NHyi5rzF.js +0 -2
- package/dist/assets/pose-guard-DILO6gGq.js +0 -1
- package/dist/assets/presentation-BeNFBfKg.js +0 -1
- package/dist/assets/profiler.utility-Do2Bw7MY.js +0 -1
- package/dist/assets/project-provenance-4ldz-EOG.js +0 -1
- package/dist/assets/r3f-design-session-B5GsZI5M.js +0 -2
- package/dist/assets/react-canvas-navigation-Cp3cOHJa.js +0 -1
- package/dist/assets/react-inspector.service-Bm0OnanU.js +0 -1
- package/dist/assets/react-story-board-GaXqr03H.js +0 -1
- package/dist/assets/react-world-authoring-adapter-DOjv2pYm.js +0 -1
- package/dist/assets/reflection-probe-capture.inspector-DqSW9p1v.js +0 -1
- package/dist/assets/registry-CaCdF63N.js +0 -1
- package/dist/assets/root-seam-contract-CxLZaRio.js +0 -1
- package/dist/assets/run-selection-DzEkGesJ.js +0 -2
- package/dist/assets/scene-capture-0a-bTjT8.js +0 -1
- package/dist/assets/scene-document.service-CeDwVA7t.js +0 -2
- package/dist/assets/seeded-random-BgCwIAAU.js +0 -1
- package/dist/assets/stage-overlay-set-BGE03mqb.js +0 -1
- package/dist/assets/stage-presence-markers-DIP7YMcO.js +0 -1
- package/dist/assets/stage-transform-tools-BQB7EY4l.js +0 -1
- package/dist/assets/standard-viewport-dressing-BCA51Tum.js +0 -24
- package/dist/assets/state-watch.utility-CFG1Tu1m.js +0 -1
- package/dist/assets/story-documents-BTo90DiA.js +0 -3
- package/dist/assets/story-three-preview-R1JvrggS.js +0 -2
- package/dist/assets/studio-environment-DRxxq_QX.js +0 -2
- package/dist/assets/team-playtest.service-hLfjgScx.js +0 -1
- package/dist/assets/three-authoring-adapter-htbnVej2.js +0 -1
- package/dist/assets/three-authoring.service-BIQAtVdX.js +0 -2
- package/dist/assets/three-integration.service-CS8Nvbd2.js +0 -1
- package/dist/assets/three-projection-core-CG01r5Ta.js +0 -1
- package/dist/assets/three-viewport-presentation-B0z_cECu.js +0 -141
- package/dist/assets/tools-B_NJsk05.js +0 -1
- package/dist/assets/transform-mode-request-DzD9aUNA.js +0 -1
- package/dist/assets/transport-strip-CUjNltnb.js +0 -1
- package/dist/assets/transport.header-Bb4FpQ8J.js +0 -1
- package/dist/assets/tuples-DfWSY2tr.js +0 -1
- package/dist/assets/ui-board-document-CCiiXjX9.js +0 -2
- package/dist/assets/user-data-dHvLdpwM.js +0 -1
- package/dist/assets/viewport-door-Bj_ZIP85.js +0 -1
- package/dist/assets/worker-CC9Ug5Ei.js +0 -2
- package/dist/assets/workspace-arrangement-BdAlBwvd.js +0 -1
- package/dist/assets/world-documents-DBybpBq8.js +0 -1
- package/dist/assets/world-root-stage-binding-ZVYIgr74.js +0 -1
- package/dist/vgai-shared-react.json +0 -10
- package/dist/vgai-shared-three.json +0 -3
- package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
- package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
- package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
- /package/dist/assets/{vgai-shared-fontawesome-CU65D4Ij.js → volter-shared-fontawesome-CU65D4Ij.js} +0 -0
- /package/dist/assets/{vgai-shared-jsx-dev-runtime-DFDKL7fx.js → volter-shared-jsx-dev-runtime-DFDKL7fx.js} +0 -0
- /package/dist/assets/{vgai-shared-jsx-runtime-DIqBpTut.js → volter-shared-jsx-runtime-DIqBpTut.js} +0 -0
- /package/dist/assets/{vgai-shared-react-BT7rMc2H.js → volter-shared-react-BT7rMc2H.js} +0 -0
- /package/dist/assets/{vgai-shared-react-dom-DFajMqMT.js → volter-shared-react-dom-DFajMqMT.js} +0 -0
- /package/dist/assets/{vgai-shared-react-dom-client-S0ozfl6_.js → volter-shared-react-dom-client-S0ozfl6_.js} +0 -0
- /package/dist/assets/{vgai-shared-three-DH4yxKwt.js → volter-shared-three-DH4yxKwt.js} +0 -0
- /package/template/{.vgai → .volter}/assets.json +0 -0
- /package/template/{.vgai → .volter}/provenance.json +0 -0
package/template/IDIOMS.md
CHANGED
|
@@ -11,7 +11,7 @@ Legend: **ERROR** fails every run; **WARN** prints but fails only with
|
|
|
11
11
|
|
|
12
12
|
- The source is the document. Three roots are ordinary R3F TSX, Canvas roots
|
|
13
13
|
are ordinary Pixi/React source, and DOM roots are ordinary React. The world
|
|
14
|
-
node is the entity; no mirror ECS, registration layer, or
|
|
14
|
+
node is the entity; no mirror ECS, registration layer, or volter runtime API
|
|
15
15
|
belongs in gameplay components. **LOOK**
|
|
16
16
|
- A DOM HUD is a manifest `dom` root and reads the project's own React
|
|
17
17
|
context/store. A timer repeatedly copying game state into React state is a
|
|
@@ -60,7 +60,7 @@ Legend: **ERROR** fails every run; **WARN** prints but fails only with
|
|
|
60
60
|
behavior being judged. The tester's repertoire grows in the slice that adds
|
|
61
61
|
each mechanic. **LOOK**
|
|
62
62
|
- `src/tools/` is literal contribution TSX. The unfinished Tester/Data/Analytics stubs
|
|
63
|
-
emit `
|
|
63
|
+
emit `VOLTER_STUB_UNIMPLEMENTED`; replacing or honestly deleting the relevant
|
|
64
64
|
stub is required before completion. **ERROR E6**
|
|
65
65
|
- Tester holds live QA state, controller ownership, goals/mind, setup cheats,
|
|
66
66
|
and judgment readings. Analytics holds historical session data. Data holds
|
|
@@ -76,7 +76,7 @@ Legend: **ERROR** fails every run; **WARN** prints but fails only with
|
|
|
76
76
|
- Playtesting is interactive: arrange, direct the tester, advance sim time,
|
|
77
77
|
observe, read the log, redirect. No committed route, test file, test-runner
|
|
78
78
|
dependency, or test script belongs in a game project. **ERROR E12**
|
|
79
|
-
- Do not boot a private Playwright harness, reach through `window.
|
|
79
|
+
- Do not boot a private Playwright harness, reach through `window.__volter`, or
|
|
80
80
|
add `?bot=` boot plumbing. Use the editor-owned session and the game's
|
|
81
81
|
running modules. **ERROR E1–E4**
|
|
82
82
|
- Gameplay source must not accumulate for many commits before the first Play
|
package/template/LICENSE
CHANGED
|
@@ -2,13 +2,13 @@ MIT License
|
|
|
2
2
|
|
|
3
3
|
Copyright (c) 2026 Volter AI, Inc.
|
|
4
4
|
|
|
5
|
-
This MIT license covers the
|
|
5
|
+
This MIT license covers the Volter game-project template (this directory) — the
|
|
6
6
|
starter code scaffolded into your project. It is intentionally permissive so that
|
|
7
|
-
the game you build with
|
|
7
|
+
the game you build with Volter, and anything you generate from this template, is
|
|
8
8
|
YOURS, free of any obligations to us. You may relicense your generated game
|
|
9
9
|
under any terms you choose.
|
|
10
10
|
|
|
11
|
-
(The
|
|
11
|
+
(The Volter engine and tooling — everything outside this directory — are licensed
|
|
12
12
|
per component: Apache-2.0 core, AGPL-3.0 editor. See the repository LICENSE.md.)
|
|
13
13
|
|
|
14
14
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
package/template/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# VOLTER game project
|
|
2
2
|
|
|
3
|
-
This is a standalone game project created by
|
|
3
|
+
This is a standalone game project created by VOLTER. Describe the game you want
|
|
4
4
|
to a coding agent, or open the shared visual editor directly:
|
|
5
5
|
|
|
6
6
|
```bash
|
|
@@ -18,7 +18,7 @@ npm run dev # open/reuse this project's editor
|
|
|
18
18
|
npm run check-idioms # project architecture and completion diagnostics
|
|
19
19
|
npm run typecheck # game, editor contributions, Node config, and server
|
|
20
20
|
npm run validate # project files and React design states
|
|
21
|
-
npm run validate-manifest #
|
|
21
|
+
npm run validate-manifest # volter.project.json
|
|
22
22
|
npm run build # production game bundle
|
|
23
23
|
```
|
|
24
24
|
|
|
@@ -26,7 +26,7 @@ The `studio` addition (`game-editor create <name> --with studio`, or `--template
|
|
|
26
26
|
brings three development contributions; no other preset does. The files are:
|
|
27
27
|
`src/contributions/tester.inspector.tsx`, `src/contributions/data.document.tsx` and
|
|
28
28
|
`src/contributions/analytics.analytics.tsx`. They emit
|
|
29
|
-
`
|
|
29
|
+
`VOLTER_STUB_UNIMPLEMENTED`, so the editor console and `check-idioms` remain red
|
|
30
30
|
until the game supplies its own Tester, Data and Analytics surfaces (or deletes
|
|
31
31
|
Data because it genuinely has no authored content tables). Analytics must provide
|
|
32
32
|
game-specific analysis. The editor already provides session selection, playback
|
|
@@ -50,23 +50,23 @@ example must not silently erase the architecture it demonstrates.
|
|
|
50
50
|
Drive/read the running game through its own exported modules:
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
|
-
npm run
|
|
53
|
+
npm run volter -- eval 'return game.run(async ({ modules }) => { const bot = await modules("src/bot/tester-station.ts"); return bot.describeTester(); })'
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
Record through the same eval door while Play is running:
|
|
57
57
|
|
|
58
58
|
```bash
|
|
59
|
-
npm run
|
|
59
|
+
npm run volter -- eval 'return editor.recording.start({ fps: 30 })'
|
|
60
60
|
# direct the resident tester and advance simulation time
|
|
61
|
-
npm run
|
|
61
|
+
npm run volter -- eval 'return editor.recording.stop()'
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
Recordings are standard WebM files under `.
|
|
64
|
+
Recordings are standard WebM files under `.volter/recordings/`. Inspect and trim
|
|
65
65
|
them with ordinary `ffmpeg`/`ffprobe`; promote only reviewed evidence into
|
|
66
66
|
`media/`. Structured Gameplay Session logs live under `logs/play-*.jsonl` and
|
|
67
67
|
remain the durable Analytics source after Stop or reload.
|
|
68
68
|
|
|
69
|
-
The project manifest is `
|
|
69
|
+
The project manifest is `volter.project.json`. `ROADMAP.md` owns major feature
|
|
70
70
|
arcs; `DEVLOG.md` is the development journal. Coding agents begin with
|
|
71
71
|
`AGENTS.md`, which routes task-specific details to `.agents/` skills and the
|
|
72
72
|
project manual.
|
|
@@ -76,8 +76,8 @@ Editor runtime image for its engine version (`~/.volter/images/`), which
|
|
|
76
76
|
carries every package the template and the catalog's capabilities use; the
|
|
77
77
|
game is its own code. `package.json` still declares what the game uses, so
|
|
78
78
|
replacing the link with `npm install` gives a standalone installation.
|
|
79
|
-
`npm run
|
|
79
|
+
`npm run volter -- status` reports the product serving the active session.
|
|
80
80
|
|
|
81
|
-
Learn and manual: https://
|
|
81
|
+
Learn and manual: https://volter-learn.pages.dev
|
|
82
82
|
|
|
83
|
-
Hosted editor: https://
|
|
83
|
+
Hosted editor: https://volter-editor.pages.dev
|
package/template/check-idioms.ts
CHANGED
|
@@ -21,7 +21,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
21
21
|
// ERROR (exit 1 always) — unambiguous drift, one canonical fix each:
|
|
22
22
|
// E1. `playwright`/`@playwright/test` imported anywhere in the project —
|
|
23
23
|
// the resident tester (directed through its running game module via
|
|
24
|
-
// `
|
|
24
|
+
// `volter-game-editor eval`) is the ONE bot harness, and a
|
|
25
25
|
// hand-rolled browser boot is banned.
|
|
26
26
|
// VALUE imports only: a type-only import (`import type {Page}`, or
|
|
27
27
|
// an inline `{ type Page }` with no value specifier) binds nothing
|
|
@@ -30,18 +30,18 @@ import { fileURLToPath } from 'node:url';
|
|
|
30
30
|
// step normally needs, so the direct import is usually avoidable
|
|
31
31
|
// anyway.
|
|
32
32
|
// E2. package.json scripts invoking `playwright` directly.
|
|
33
|
-
// E3. `window.
|
|
33
|
+
// E3. `window.__volter` accessed in src/** (the bot/CLI consumer
|
|
34
34
|
// surface, not the authoring surface — export the state from a module).
|
|
35
35
|
// E4. `?bot=`-style query-param bot plumbing in src/** — the project's
|
|
36
36
|
// resident tester owns bot entry.
|
|
37
37
|
// E5. raw `Math.random()`/`Date.now()`/`performance.now()` in
|
|
38
38
|
// src/scripts/** gameplay code — ONLY when this project's OWN
|
|
39
|
-
//
|
|
39
|
+
// volter.project.json declares `determinism.seededRandom: true`; silent
|
|
40
40
|
// when undeclared (D15, T-D15.3's third enforcer leg — the other
|
|
41
41
|
// two, the engine-src permanent scan and the examples/ burn-down
|
|
42
42
|
// scan, live in the engine repo's own test suite; see
|
|
43
43
|
// packages/engine/test/gameplay-rng-ban.test.ts).
|
|
44
|
-
// E6. `
|
|
44
|
+
// E6. `VOLTER_STUB_UNIMPLEMENTED` remains in src/tools/** or src/contributions/** — this
|
|
45
45
|
// is the starter's explicit unfinished-work sentinel, so a completion
|
|
46
46
|
// check containing it cannot be green. Replace the Tester/Data/Analytics stub
|
|
47
47
|
// whole in the game's vocabulary; a game with no content tables may
|
|
@@ -105,7 +105,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
105
105
|
// E9 is the one rule that does NOT answer its question from the file tree
|
|
106
106
|
// alone: the R3F00x codes come from the editor's own source analyzer
|
|
107
107
|
// (`ui-source/r3f-project-contracts.ts`), the same pass validate-on-save and
|
|
108
|
-
// `
|
|
108
|
+
// `volter-game-editor status` report from. It is loaded OFFLINE — the analyzer is a pure
|
|
109
109
|
// `(code, file) => diagnostics` function over `typescript`, with no dev
|
|
110
110
|
// server, browser or editor session anywhere in it — through this project's
|
|
111
111
|
// own `@editor/*` tsconfig mapping, so check-idioms never requires a running
|
|
@@ -117,7 +117,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
117
117
|
// incomplete). This is intentionally a dumb line/regex scanner, not an AST
|
|
118
118
|
// pass — it comment-strips PURE comment lines (lines whose trimmed text
|
|
119
119
|
// starts with `//`, `/*`, `*`, or is exactly `*/`) before matching rule
|
|
120
|
-
// patterns, so doc-comment prose that merely MENTIONS e.g. `window.
|
|
120
|
+
// patterns, so doc-comment prose that merely MENTIONS e.g. `window.__volter`
|
|
121
121
|
// doesn't trip a finding, but it does not understand string literals,
|
|
122
122
|
// template strings, or multi-statement lines. False positives are expected
|
|
123
123
|
// occasionally; suppress them with a reason rather than fighting the regex.
|
|
@@ -147,7 +147,7 @@ if (!existsSync(rootDir)) {
|
|
|
147
147
|
|
|
148
148
|
// This script's own resolved path — excluded from every scan so its rule
|
|
149
149
|
// regexes (which literally contain the strings they look for, e.g.
|
|
150
|
-
// 'colyseus.js', 'window.
|
|
150
|
+
// 'colyseus.js', 'window.__volter', '@playwright/test') never self-flag.
|
|
151
151
|
const SELF_PATH = resolve(fileURLToPath(import.meta.url));
|
|
152
152
|
|
|
153
153
|
// ---------------------------------------------------------------------------
|
|
@@ -166,7 +166,7 @@ const SKIP_DIRS = new Set([
|
|
|
166
166
|
'.github',
|
|
167
167
|
'dist',
|
|
168
168
|
'build',
|
|
169
|
-
'.
|
|
169
|
+
'.volter',
|
|
170
170
|
'coverage',
|
|
171
171
|
'.turbo',
|
|
172
172
|
]);
|
|
@@ -347,7 +347,7 @@ function checkPlaywrightImports(): void {
|
|
|
347
347
|
'error',
|
|
348
348
|
'bot-canonical',
|
|
349
349
|
`"${pkg}" imported — the resident tester, directed through the running game's own module, is the ONE bot harness; hand-rolled Playwright boots are banned.`,
|
|
350
|
-
"Drive the game through the live session (
|
|
350
|
+
"Drive the game through the live session (volter-game-editor eval + the running tester module), or take the Playwright types from '@volter/game-live' as a type-only import.",
|
|
351
351
|
);
|
|
352
352
|
}
|
|
353
353
|
}
|
|
@@ -380,7 +380,7 @@ function checkPackageJsonScripts(): void {
|
|
|
380
380
|
'error',
|
|
381
381
|
'bot-canonical',
|
|
382
382
|
`script "${name}" invokes playwright directly ("${cmd}") — this project has no Playwright lane to own a browser binary or config.`,
|
|
383
|
-
`Delete the "${name}" script — playtesting is the live session (
|
|
383
|
+
`Delete the "${name}" script — playtesting is the live session (volter-game-editor eval + the running tester module), not a script.`,
|
|
384
384
|
);
|
|
385
385
|
}
|
|
386
386
|
}
|
|
@@ -393,7 +393,7 @@ function checkPackageJsonScripts(): void {
|
|
|
393
393
|
* file enters an endless cycle of rewriting assertions and actions (owner
|
|
394
394
|
* ruling, 2026-08-21 — measured live: three assertion renegotiations in
|
|
395
395
|
* twenty minutes on one balance suite). The playtest loop is INTERACTIVE:
|
|
396
|
-
* `
|
|
396
|
+
* `volter-game-editor eval` + cheats set the situation, bot policy runs behavior, event
|
|
397
397
|
* logs are read on an interval, and the run is redirected live until the
|
|
398
398
|
* operator is satisfied. The play log (logs/play-*.jsonl) is the receipt. This
|
|
399
399
|
* rule keeps the furniture out so the cheapest path stays the sanctioned
|
|
@@ -403,7 +403,7 @@ function checkNoTestFurniture(): void {
|
|
|
403
403
|
'Delete it and playtest LIVE: eval + cheats set the situation, bot goals run behavior, the ' +
|
|
404
404
|
'event log is read on an interval, the run is redirected until satisfied; the play log ' +
|
|
405
405
|
'(logs/play-*.jsonl) is the receipt.';
|
|
406
|
-
const SKIP_DIRS = new Set(['node_modules', '.git', 'dist', '.
|
|
406
|
+
const SKIP_DIRS = new Set(['node_modules', '.git', 'dist', '.volter', 'logs', 'media', 'public']);
|
|
407
407
|
const testFile = /\.(test|spec)\.[cm]?[jt]sx?$/;
|
|
408
408
|
const walk = (dir: string): void => {
|
|
409
409
|
for (const entry of readdirSync(dir)) {
|
|
@@ -477,31 +477,31 @@ function checkNoTestFurniture(): void {
|
|
|
477
477
|
}
|
|
478
478
|
|
|
479
479
|
// ---------------------------------------------------------------------------
|
|
480
|
-
// E3 — window.
|
|
480
|
+
// E3 — window.__volter accessed in src/**
|
|
481
481
|
// ---------------------------------------------------------------------------
|
|
482
482
|
|
|
483
|
-
function
|
|
484
|
-
// Two-part, same-line heuristic rather than a single `window\.
|
|
483
|
+
function checkWindowVolter(): void {
|
|
484
|
+
// Two-part, same-line heuristic rather than a single `window\.__volter`
|
|
485
485
|
// regex: this codebase's OWN canonical way to reach the bridge (see
|
|
486
486
|
// @volter/game-live's game-client/client.ts) is a cast in between —
|
|
487
|
-
// `(window as unknown as {
|
|
488
|
-
// `.
|
|
489
|
-
// mentions the `window` token AND a bare `.
|
|
487
|
+
// `(window as unknown as { __volter?: ... }).__volter` — so `window` and
|
|
488
|
+
// `.__volter` are literal-adjacent only coincidentally. Flag any line that
|
|
489
|
+
// mentions the `window` token AND a bare `.__volter`/`['__volter']` property
|
|
490
490
|
// access. The negative lookahead on the dotted form keeps this off
|
|
491
|
-
// `
|
|
492
|
-
// are different, unrelated dev-only globals, not the frozen `window.
|
|
491
|
+
// `__volterScene`/`__volterCamera`/`__volterRender`/`__volterBatch` etc. — those
|
|
492
|
+
// are different, unrelated dev-only globals, not the frozen `window.__volter`
|
|
493
493
|
// debug-bridge shape (D18). A file-scoped `window` ALIAS on its own line
|
|
494
|
-
// (`const w = window as …; w['
|
|
494
|
+
// (`const w = window as …; w['__volter']`) is a known miss — this is a
|
|
495
495
|
// line-scan, not an AST pass.
|
|
496
496
|
const windowRe = /\bwindow\b/;
|
|
497
|
-
const
|
|
497
|
+
const volterAccessRe = /\.__volter(?![A-Za-z0-9_])|\[\s*['"]__volter['"]\s*\]/g;
|
|
498
498
|
for (const file of srcFiles) {
|
|
499
499
|
const { rawLines, blanked } = readFileText(file);
|
|
500
500
|
const blankedLines = blanked.split('\n');
|
|
501
501
|
blankedLines.forEach((line, i) => {
|
|
502
502
|
if (!windowRe.test(line)) return;
|
|
503
|
-
|
|
504
|
-
if (!
|
|
503
|
+
volterAccessRe.lastIndex = 0;
|
|
504
|
+
if (!volterAccessRe.test(line)) return;
|
|
505
505
|
addFinding(
|
|
506
506
|
file,
|
|
507
507
|
rawLines,
|
|
@@ -509,7 +509,7 @@ function checkWindowVgai(): void {
|
|
|
509
509
|
'E3',
|
|
510
510
|
'error',
|
|
511
511
|
'bot-canonical',
|
|
512
|
-
'window.
|
|
512
|
+
'window.__volter accessed directly in src/** — this is the bot/CLI consumer surface, not the authoring surface.',
|
|
513
513
|
'Read and drive the game through its own exported modules instead (game.run(({ modules }) => …)).',
|
|
514
514
|
);
|
|
515
515
|
});
|
|
@@ -550,7 +550,7 @@ function checkBotParam(): void {
|
|
|
550
550
|
* reads as "none" — validating its shape is validate-manifest.ts's job. */
|
|
551
551
|
function manifestDomRootEntries(): Set<string> {
|
|
552
552
|
const entries = new Set<string>();
|
|
553
|
-
const manifestPath = join(rootDir, '
|
|
553
|
+
const manifestPath = join(rootDir, 'volter.project.json');
|
|
554
554
|
if (!existsSync(manifestPath)) return entries;
|
|
555
555
|
try {
|
|
556
556
|
const manifest = JSON.parse(readFileSync(manifestPath, 'utf-8')) as {
|
|
@@ -710,9 +710,9 @@ function checkTriggerNameIdentity(): void {
|
|
|
710
710
|
// ---------------------------------------------------------------------------
|
|
711
711
|
// git-history plumbing shared by slice-proxy rules (W9)
|
|
712
712
|
// ---------------------------------------------------------------------------
|
|
713
|
-
// The
|
|
714
|
-
// pathspecs, threshold, silent-on-unaskable) as `
|
|
715
|
-
// bot-drift line — engine repo, packages/
|
|
713
|
+
// The volter CLI mirrors this exact measurement (source path, gameplay
|
|
714
|
+
// pathspecs, threshold, silent-on-unaskable) as `volter-game-editor status`'s ambient
|
|
715
|
+
// bot-drift line — engine repo, packages/volter-cli/src/instrumentation-signal.ts.
|
|
716
716
|
// If you change any of the three constants below, change them there too, or
|
|
717
717
|
// the ambient signal and this rule will disagree about whether a bot drifted.
|
|
718
718
|
|
|
@@ -848,7 +848,7 @@ function hasPlayEvidence(): boolean {
|
|
|
848
848
|
}
|
|
849
849
|
|
|
850
850
|
/** The scaffolder's own record of where this project came from
|
|
851
|
-
* (packages/create-
|
|
851
|
+
* (packages/create-volter-project/src/baseline.ts). W9's history ANCHOR.
|
|
852
852
|
*
|
|
853
853
|
* W7 anchors its window on a file's last commit; W9 does the same, and this
|
|
854
854
|
* is the file that means "this project began here". Anchoring matters: an
|
|
@@ -859,7 +859,7 @@ function hasPlayEvidence(): boolean {
|
|
|
859
859
|
* maintenance history, and a rule that shouts at our own reference material
|
|
860
860
|
* on every run is noise, not a tripwire. A project with no committed
|
|
861
861
|
* baseline cannot be asked when it started, so W9 stays silent there. */
|
|
862
|
-
const SCAFFOLD_BASELINE_SOURCE = '.
|
|
862
|
+
const SCAFFOLD_BASELINE_SOURCE = '.volter/scaffold-baseline.json';
|
|
863
863
|
|
|
864
864
|
/** Gameplay commits since the scaffold anchor, at or above which a project
|
|
865
865
|
* that has never been played is reported.
|
|
@@ -900,23 +900,23 @@ function checkPlayedBeforeAuthoring(): void {
|
|
|
900
900
|
'typecheck and unit tests cannot see: a blank canvas, an invisible mesh, a camera inside ' +
|
|
901
901
|
'the geometry.',
|
|
902
902
|
'Author in playable slices (AGENTS.md) — enter Play before writing the next slice: run ' +
|
|
903
|
-
'`npm run
|
|
903
|
+
'`npm run volter -- play`, look at the game, playtest live, then continue; reading the ' +
|
|
904
904
|
'code again does not count.',
|
|
905
905
|
);
|
|
906
906
|
}
|
|
907
907
|
|
|
908
908
|
// ---------------------------------------------------------------------------
|
|
909
909
|
// E5 — raw Math.random()/Date.now()/performance.now() in src/scripts/**,
|
|
910
|
-
// only when THIS project's own
|
|
910
|
+
// only when THIS project's own volter.project.json declares
|
|
911
911
|
// determinism.seededRandom (D15, T-D15.3's third enforcer leg).
|
|
912
912
|
// ---------------------------------------------------------------------------
|
|
913
913
|
|
|
914
|
-
/** Reads rootDir/
|
|
914
|
+
/** Reads rootDir/volter.project.json and reports whether it declares
|
|
915
915
|
* `determinism.seededRandom: true`. Missing/malformed manifests read as
|
|
916
916
|
* "not declared" (silent) — validating the manifest's own shape is
|
|
917
917
|
* validate-manifest.ts's job, not this scanner's. */
|
|
918
918
|
function projectDeclaresSeededRandom(): boolean {
|
|
919
|
-
const manifestPath = join(rootDir, '
|
|
919
|
+
const manifestPath = join(rootDir, 'volter.project.json');
|
|
920
920
|
if (!existsSync(manifestPath)) return false;
|
|
921
921
|
try {
|
|
922
922
|
const manifest = JSON.parse(readFileSync(manifestPath, 'utf-8')) as {
|
|
@@ -943,7 +943,7 @@ function checkDeterminismRng(): void {
|
|
|
943
943
|
'E5',
|
|
944
944
|
'error',
|
|
945
945
|
'gameplay-rng-ctx-random',
|
|
946
|
-
`raw "${m[1]}(" in src/scripts/** — this project's
|
|
946
|
+
`raw "${m[1]}(" in src/scripts/** — this project's volter.project.json declares ` +
|
|
947
947
|
'determinism.seededRandom, so ALL gameplay RNG/wall-clock reads must flow through ' +
|
|
948
948
|
'ctx.random, not raw Math.random()/Date.now()/performance.now().',
|
|
949
949
|
'Use ctx.random() (or ctx.random.stream(name) for an independent named stream) instead.',
|
|
@@ -957,7 +957,7 @@ function checkDeterminismRng(): void {
|
|
|
957
957
|
// ---------------------------------------------------------------------------
|
|
958
958
|
|
|
959
959
|
function checkUnconfiguredProjectTools(): void {
|
|
960
|
-
const sentinel = /\
|
|
960
|
+
const sentinel = /\bVOLTER_STUB_UNIMPLEMENTED\b/g;
|
|
961
961
|
const toolFiles = srcFiles.filter((file) => /^(src\/tools|src\/contributions)\//.test(relPath(file)));
|
|
962
962
|
for (const file of toolFiles) {
|
|
963
963
|
const { rawLines, blanked } = readFileText(file);
|
|
@@ -969,7 +969,7 @@ function checkUnconfiguredProjectTools(): void {
|
|
|
969
969
|
'E6',
|
|
970
970
|
'error',
|
|
971
971
|
'studio-surfaces-complete',
|
|
972
|
-
'
|
|
972
|
+
'VOLTER_STUB_UNIMPLEMENTED remains in an editor contribution — this is an explicit starter obligation, not a usable game-specific surface.',
|
|
973
973
|
"Rewrite the stub whole in this game's vocabulary and remove its warning. If this is the Data stub and the game genuinely has no authored content tables, delete the file.",
|
|
974
974
|
);
|
|
975
975
|
}
|
|
@@ -1087,7 +1087,7 @@ function loadR3fAnalyzer(): R3fAnalyzer | null {
|
|
|
1087
1087
|
*/
|
|
1088
1088
|
interface RegionSurfaces {
|
|
1089
1089
|
surfaces: ReadonlyMap<string, string>;
|
|
1090
|
-
/** This project's `
|
|
1090
|
+
/** This project's `volter.adapter.ts` declares a `regions` binding the static
|
|
1091
1091
|
* reader could not evaluate, so its `include` globs were not consulted.
|
|
1092
1092
|
* Carried rather than dropped: the editor's own loader EVALUATES that module
|
|
1093
1093
|
* and would honor those globs, so silence here means the two readers
|
|
@@ -1121,7 +1121,7 @@ function loadRegionSurfaces(): RegionSurfaces | null {
|
|
|
1121
1121
|
m: string,
|
|
1122
1122
|
a: string,
|
|
1123
1123
|
) => { regions: unknown[]; unreadable: boolean }
|
|
1124
|
-
)(read('
|
|
1124
|
+
)(read('volter.project.json'), read('volter.adapter.ts'));
|
|
1125
1125
|
const sources = srcFiles.map((file) => ({
|
|
1126
1126
|
path: relPath(file),
|
|
1127
1127
|
source: readFileSync(file, 'utf-8'),
|
|
@@ -1141,31 +1141,31 @@ function loadRegionSurfaces(): RegionSurfaces | null {
|
|
|
1141
1141
|
function checkAuthoringWarnings(): void {
|
|
1142
1142
|
const analyze = loadR3fAnalyzer();
|
|
1143
1143
|
if (!analyze) {
|
|
1144
|
-
// Silent for a folder that is not a
|
|
1144
|
+
// Silent for a folder that is not a volter-game-editor project at all — this scanner
|
|
1145
1145
|
// is pointed at scratch directories by its own tests and by curious
|
|
1146
1146
|
// agents, and a rule about a missing tsconfig mapping is a rule about a
|
|
1147
1147
|
// project. Inside a real project the mapping is scaffolded, so its
|
|
1148
1148
|
// absence is worth saying out loud rather than passing quietly.
|
|
1149
|
-
if (!existsSync(join(rootDir, '
|
|
1149
|
+
if (!existsSync(join(rootDir, 'volter.project.json'))) return;
|
|
1150
1150
|
addProjectFinding(
|
|
1151
1151
|
'E9',
|
|
1152
1152
|
'warn',
|
|
1153
1153
|
'authoring-warnings-zero',
|
|
1154
1154
|
'the R3F authoring analyzer could not be loaded, so authoring warnings were NOT checked — this run says nothing about them. It resolves through this project\'s tsconfig.json "@editor/*" path mapping.',
|
|
1155
|
-
'Restore the "@editor/*" mapping in tsconfig.json (it points at the engine checkout, or at node_modules/@volter/editor-core/src) and re-run. `npm run
|
|
1155
|
+
'Restore the "@editor/*" mapping in tsconfig.json (it points at the engine checkout, or at node_modules/@volter/editor-core/src) and re-run. `npm run volter -- status` reports the same counts from the live editor meanwhile.',
|
|
1156
1156
|
);
|
|
1157
1157
|
return;
|
|
1158
1158
|
}
|
|
1159
1159
|
|
|
1160
1160
|
const resolved = loadRegionSurfaces();
|
|
1161
1161
|
if (!resolved) {
|
|
1162
|
-
if (!existsSync(join(rootDir, '
|
|
1162
|
+
if (!existsSync(join(rootDir, 'volter.project.json'))) return;
|
|
1163
1163
|
addProjectFinding(
|
|
1164
1164
|
'E9',
|
|
1165
1165
|
'warn',
|
|
1166
1166
|
'authoring-warnings-zero',
|
|
1167
1167
|
"the region resolver could not be loaded, so no file could be attributed to this project's `three` region and authoring warnings were NOT checked — this run says nothing about them.",
|
|
1168
|
-
'Restore the "@editor/*" mapping in tsconfig.json (it points at the engine checkout, or at node_modules/@volter/editor-core/src) and re-run. `npm run
|
|
1168
|
+
'Restore the "@editor/*" mapping in tsconfig.json (it points at the engine checkout, or at node_modules/@volter/editor-core/src) and re-run. `npm run volter -- status` reports the same counts from the live editor meanwhile.',
|
|
1169
1169
|
);
|
|
1170
1170
|
return;
|
|
1171
1171
|
}
|
|
@@ -1175,7 +1175,7 @@ function checkAuthoringWarnings(): void {
|
|
|
1175
1175
|
'E9',
|
|
1176
1176
|
'warn',
|
|
1177
1177
|
'authoring-warnings-zero',
|
|
1178
|
-
"
|
|
1178
|
+
"volter.adapter.ts declares a `regions` binding that cannot be read statically, so its `include` globs were NOT consulted — any file those globs place is missing from this run, while the editor's own loader still honors them.",
|
|
1179
1179
|
'Write the regions as an array of object literals passed directly to defineAdapter({…}), with literal `id` and `include` values (not a hoisted const, not a spread).',
|
|
1180
1180
|
);
|
|
1181
1181
|
}
|
|
@@ -1349,7 +1349,7 @@ function checkPrefabStories(): void {
|
|
|
1349
1349
|
// ---------------------------------------------------------------------------
|
|
1350
1350
|
|
|
1351
1351
|
function manifestHasThreeRoot(): boolean {
|
|
1352
|
-
const manifestPath = join(rootDir, '
|
|
1352
|
+
const manifestPath = join(rootDir, 'volter.project.json');
|
|
1353
1353
|
if (!existsSync(manifestPath)) return false;
|
|
1354
1354
|
try {
|
|
1355
1355
|
const manifest = JSON.parse(readFileSync(manifestPath, 'utf-8')) as {
|
|
@@ -1448,7 +1448,7 @@ function checkSceneFolderContract(): void {
|
|
|
1448
1448
|
checkPlaywrightImports();
|
|
1449
1449
|
checkPackageJsonScripts();
|
|
1450
1450
|
checkNoTestFurniture();
|
|
1451
|
-
|
|
1451
|
+
checkWindowVolter();
|
|
1452
1452
|
checkBotParam();
|
|
1453
1453
|
checkPollingPump();
|
|
1454
1454
|
checkColyseusStaticImport();
|
|
@@ -1470,7 +1470,7 @@ const warnFindings = findings.filter((f) => f.severity === 'warn');
|
|
|
1470
1470
|
*
|
|
1471
1471
|
* Measured failure: a blind probe ran `typecheck` seven times and this scanner
|
|
1472
1472
|
* once, at minute 19, which turned every open finding into an end-of-build
|
|
1473
|
-
* scramble. `
|
|
1473
|
+
* scramble. `volter-game-editor status` — the command an agent polls constantly — reads this
|
|
1474
1474
|
* file and surfaces the open ERROR findings as an advisory count, so they are
|
|
1475
1475
|
* visible from the first status call while THIS script stays the gate.
|
|
1476
1476
|
*
|
|
@@ -1479,9 +1479,9 @@ const warnFindings = findings.filter((f) => f.severity === 'warn');
|
|
|
1479
1479
|
*/
|
|
1480
1480
|
function writeFindingsRecord(): void {
|
|
1481
1481
|
try {
|
|
1482
|
-
mkdirSync(join(rootDir, '.
|
|
1482
|
+
mkdirSync(join(rootDir, '.volter'), { recursive: true });
|
|
1483
1483
|
writeFileSync(
|
|
1484
|
-
join(rootDir, '.
|
|
1484
|
+
join(rootDir, '.volter', 'check-idioms.json'),
|
|
1485
1485
|
`${JSON.stringify(
|
|
1486
1486
|
{
|
|
1487
1487
|
at: new Date().toISOString(),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Plugin } from 'vite';
|
|
2
2
|
|
|
3
|
-
const MANIFEST_ENTRIES_ID = 'virtual:
|
|
3
|
+
const MANIFEST_ENTRIES_ID = 'virtual:volter-manifest-entries';
|
|
4
4
|
const RESOLVED_MANIFEST_ENTRIES_ID = `\0${MANIFEST_ENTRIES_ID}`;
|
|
5
5
|
|
|
6
6
|
function collectManifestEntries(manifest: unknown): string[] {
|
|
@@ -20,7 +20,7 @@ function collectManifestEntries(manifest: unknown): string[] {
|
|
|
20
20
|
|
|
21
21
|
for (const entry of entries) {
|
|
22
22
|
if (entry.startsWith('/') || entry.includes('\\') || entry.split('/').includes('..')) {
|
|
23
|
-
throw new Error(`
|
|
23
|
+
throw new Error(`volter.project.json world entry must be project-relative: ${entry}`);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -31,18 +31,31 @@ function collectManifestEntries(manifest: unknown): string[] {
|
|
|
31
31
|
* Render imports for the manifest's exact `roots[].entry` declarations.
|
|
32
32
|
* The manifest—not a filename convention—is the only discovery source.
|
|
33
33
|
*/
|
|
34
|
+
function declaresCanvasRoot(manifest: unknown): boolean {
|
|
35
|
+
const roots = manifest && typeof manifest === 'object' ? (manifest as { roots?: unknown }).roots : undefined;
|
|
36
|
+
return (
|
|
37
|
+
Array.isArray(roots) &&
|
|
38
|
+
roots.some((root) => root && typeof root === 'object' && (root as { adapter?: unknown }).adapter === 'canvas')
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
34
42
|
export function renderManifestEntryModule(manifest: unknown): string {
|
|
35
43
|
const entries = collectManifestEntries(manifest);
|
|
36
44
|
const imports = entries.map(
|
|
37
45
|
(entry, index) => `import * as entry${index} from ${JSON.stringify(`/${entry}`)};`,
|
|
38
46
|
);
|
|
39
47
|
const members = entries.map((entry, index) => `${JSON.stringify(entry)}: entry${index}`);
|
|
40
|
-
|
|
48
|
+
// Pixi rides only with a declared `canvas` root: its mount (and the two packages it imports)
|
|
49
|
+
// is `src/canvas-mount.ts`, which only such a project carries.
|
|
50
|
+
const canvas = declaresCanvasRoot(manifest)
|
|
51
|
+
? `export { mountCanvasRoot } from "/src/canvas-mount.ts";`
|
|
52
|
+
: 'export const mountCanvasRoot = undefined;';
|
|
53
|
+
return `${imports.join('\n')}\nexport const manifestEntryModules = {${members.join(',')}};\n${canvas}\n`;
|
|
41
54
|
}
|
|
42
55
|
|
|
43
56
|
export function manifestEntryModulesPlugin(manifest: unknown): Plugin {
|
|
44
57
|
return {
|
|
45
|
-
name: '
|
|
58
|
+
name: 'volter:manifest-entry-modules',
|
|
46
59
|
resolveId(id) {
|
|
47
60
|
return id === MANIFEST_ENTRIES_ID ? RESOLVED_MANIFEST_ENTRIES_ID : undefined;
|
|
48
61
|
},
|
package/template/package.json
CHANGED
|
@@ -8,14 +8,14 @@
|
|
|
8
8
|
"node": ">=22.0.0"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
|
-
"
|
|
11
|
+
"volter": "volter-game-editor",
|
|
12
12
|
"dev": "volter-game-editor edit .",
|
|
13
13
|
"dev:standalone": "vite",
|
|
14
14
|
"build": "tsc && vite build",
|
|
15
15
|
"preview": "vite preview",
|
|
16
16
|
"postinstall": "node scripts/patch-drei-stats-gl.mjs",
|
|
17
17
|
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.tools.json && tsc --noEmit -p tsconfig.node.json && tsc --noEmit -p server/tsconfig.json",
|
|
18
|
-
"validate-manifest": "npx tsx validate-manifest.ts
|
|
18
|
+
"validate-manifest": "npx tsx validate-manifest.ts volter.project.json",
|
|
19
19
|
"check-idioms": "npx tsx check-idioms.ts .",
|
|
20
20
|
"server": "npx tsx --tsconfig server/tsconfig.json server/main.ts"
|
|
21
21
|
},
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
"@colyseus/sdk": "^0.17.34",
|
|
25
25
|
"@react-three/drei": "^10.7.7",
|
|
26
26
|
"@react-three/fiber": "^9.6.1",
|
|
27
|
-
"@volter/editor-project": "^0.5.
|
|
28
|
-
"@volter/game-runtime": "^0.5.
|
|
29
|
-
"@volter/threejs-runtime": "^0.5.
|
|
27
|
+
"@volter/editor-project": "^0.5.69",
|
|
28
|
+
"@volter/game-runtime": "^0.5.69",
|
|
29
|
+
"@volter/threejs-runtime": "^0.5.69",
|
|
30
30
|
"react": "~19.2.4",
|
|
31
31
|
"react-dom": "~19.2.4",
|
|
32
32
|
"three": "^0.180.0",
|
|
@@ -40,13 +40,13 @@
|
|
|
40
40
|
"@types/react-dom": "^19.2.3",
|
|
41
41
|
"@types/three": "^0.180.0",
|
|
42
42
|
"@vitejs/plugin-react": "^5.1.4",
|
|
43
|
-
"@volter/editor-core": "^0.5.
|
|
44
|
-
"@volter/editor-game": "^0.5.
|
|
45
|
-
"@volter/editor-live": "^0.5.
|
|
46
|
-
"@volter/editor-sdk": "^0.5.
|
|
47
|
-
"@volter/editor-threejs": "^0.5.
|
|
48
|
-
"@volter/game-editor": "^0.5.
|
|
49
|
-
"@volter/game-live": "^0.5.
|
|
43
|
+
"@volter/editor-core": "^0.5.69",
|
|
44
|
+
"@volter/editor-game": "^0.5.69",
|
|
45
|
+
"@volter/editor-live": "^0.5.69",
|
|
46
|
+
"@volter/editor-sdk": "^0.5.69",
|
|
47
|
+
"@volter/editor-threejs": "^0.5.69",
|
|
48
|
+
"@volter/game-editor": "^0.5.69",
|
|
49
|
+
"@volter/game-live": "^0.5.69",
|
|
50
50
|
"colyseus": "^0.17.8",
|
|
51
51
|
"storybook": "10.6.0",
|
|
52
52
|
"tsx": "^4.23.0",
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* scaffolded project so a multiplayer game can prove itself headlessly:
|
|
6
6
|
* a test under `tests/logic/` seats two peers and drives them. Driving a
|
|
7
7
|
* second peer against the
|
|
8
|
-
* RUNNING game is a different job, and its door is `
|
|
8
|
+
* RUNNING game is a different job, and its door is `volter-game-editor eval`.
|
|
9
9
|
*
|
|
10
10
|
* Starts the REAL `startColyseus` bootstrap (`./colyseus-setup.js`) with the
|
|
11
11
|
* shipped room registry (`./rooms.js` — `ArenaRoom` + `GameRoom`) on an
|
package/template/server/main.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* `npm run server` entry point — boots the Colyseus multiplayer server
|
|
3
3
|
* (rooms.ts's registry, on ws://localhost:2567).
|
|
4
4
|
*
|
|
5
|
-
* The project runs it as its `server` configuration (`
|
|
5
|
+
* The project runs it as its `server` configuration (`volter.project.json`), and Play starts it
|
|
6
6
|
* through `play + server`, before the game's client half (`src/net/`) joins `game_room`. Both
|
|
7
7
|
* arrive with the `server` addition; a project without it keeps these rooms and has neither.
|
|
8
8
|
*
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
import { startColyseus } from './colyseus-setup.js';
|
|
30
30
|
import { rooms } from './rooms.js';
|
|
31
31
|
|
|
32
|
-
// The editor's `server` configuration sets
|
|
32
|
+
// The editor's `server` configuration sets VOLTER_ROOM_MONITOR so its Network inspector can read
|
|
33
33
|
// the server's side through Colyseus Monitor; a production start leaves it unset.
|
|
34
|
-
const handle = await startColyseus({ rooms, monitor: process.env['
|
|
34
|
+
const handle = await startColyseus({ rooms, monitor: process.env['VOLTER_ROOM_MONITOR'] === '1' }).catch((err: NodeJS.ErrnoException) => {
|
|
35
35
|
// The refusal below already says everything a reader needs; a raw stack
|
|
36
36
|
// around it would be noise.
|
|
37
37
|
if (err?.code !== 'EADDRINUSE') throw err;
|
|
@@ -43,7 +43,7 @@ const handle = await startColyseus({ rooms, monitor: process.env['VGAI_ROOM_MONI
|
|
|
43
43
|
console.error(
|
|
44
44
|
'Colyseus: the server port is already in use — this server did not start.\n' +
|
|
45
45
|
' Another `npm run server` in a second terminal is the likely holder. Stop\n' +
|
|
46
|
-
' whatever holds the port and re-run (`
|
|
46
|
+
' whatever holds the port and re-run (`volter-game-editor sessions` lists live editors).',
|
|
47
47
|
);
|
|
48
48
|
process.exit(1);
|
|
49
49
|
});
|