@volter/game-editor 0.5.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BUNDLED_NOTICES +11228 -0
- package/LICENSE +686 -0
- package/LICENSE-BLENDER +1409 -0
- package/LICENSE-MCP +21 -0
- package/NOTICE +21 -0
- package/catalog/entries/audio.json +14 -0
- package/catalog/entries/bake.json +36 -0
- package/catalog/entries/blender.json +17 -0
- package/catalog/entries/react-root.json +24 -0
- package/catalog/entries/reflections.json +29 -0
- package/catalog/entries/static-batch.json +25 -0
- package/catalog/project-source/LICENSE +37 -0
- package/catalog/project-source/src/contributions/bake.kind.ts +40 -0
- package/catalog/project-source/src/contributions/builder-document.tsx +65 -0
- package/catalog/project-source/src/contributions/builder-state.ts +27 -0
- package/catalog/project-source/src/contributions/builder-ui.tsx +61 -0
- package/catalog/project-source/src/contributions/module-source.ts +502 -0
- package/catalog/project-source/src/contributions/pages.finder.ts +61 -0
- package/catalog/project-source/src/lib/audio/sfx.ts +255 -0
- package/catalog/project-source/src/lib/bake/asset-seed.ts +128 -0
- package/catalog/project-source/src/lib/bake/bake-schema.ts +65 -0
- package/catalog/project-source/src/lib/bake/clip-layering.ts +203 -0
- package/catalog/project-source/src/lib/bake/gltf-bake.ts +657 -0
- package/catalog/project-source/src/lib/bake/mesh-slice.ts +157 -0
- package/catalog/project-source/src/lib/bake/node-image.ts +463 -0
- package/catalog/project-source/src/lib/bake/object3d-bake.ts +121 -0
- package/catalog/project-source/src/lib/bake/object3d-lifecycle.ts +15 -0
- package/catalog/project-source/src/lib/bake/object3d-source.ts +8 -0
- package/catalog/project-source/src/lib/bake/params.ts +75 -0
- package/catalog/project-source/src/lib/bake/rest-relative-animation.ts +217 -0
- package/catalog/project-source/src/lib/bake/use-model.ts +95 -0
- package/catalog/project-source/src/lib/react-root/index.ts +20 -0
- package/catalog/project-source/src/lib/react-root/react-root-adapter.tsx +57 -0
- package/catalog/project-source/src/lib/reflections/ReflectionProbe.tsx +201 -0
- package/catalog/project-source/src/lib/reflections/index.ts +19 -0
- package/catalog/project-source/src/lib/reflections/probe-controller.ts +75 -0
- package/catalog/project-source/src/lib/reflections/reflection-probe-registry.ts +402 -0
- package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +416 -0
- package/catalog/project-source/src/lib/static-batch/Frozen.tsx +91 -0
- package/catalog/project-source/src/lib/static-batch/freeze.ts +579 -0
- package/catalog/project-source/src/lib/static-batch/index.ts +44 -0
- package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +149 -0
- package/catalog/project-source/src/lib/static-batch/shadow-cache.ts +171 -0
- package/catalog/project-source/src/tools/bake-module.tool.ts +139 -0
- package/catalog/project-source/src/tools/bake-preview.tool.ts +475 -0
- package/dist/.vite/manifest.json +8304 -0
- package/dist/assets/AssetBudgetPanel-J9--TZPU.js +23 -0
- package/dist/assets/AudioViewer-CR7333fe.js +1 -0
- package/dist/assets/BVHLoader-6bQIXhMX.js +1 -0
- package/dist/assets/BufferGeometryUtils-Nz37EVXf.js +1 -0
- package/dist/assets/CCDIKSolver-CD7vLpsK.js +1 -0
- package/dist/assets/CSS3DRenderer-CL7ABLVK.js +1 -0
- package/dist/assets/CanvasSceneViewport-Bpi6gVTC.js +1 -0
- package/dist/assets/ColladaLoader-aVOPIsCh.js +3 -0
- package/dist/assets/ColorInput-DQBNrW-K.js +1 -0
- package/dist/assets/ConvexGeometry-CAzXlPVG.js +1 -0
- package/dist/assets/ConvexHull-BINCESFp.js +1 -0
- package/dist/assets/CopyShader-BzTUYzf6.js +24 -0
- package/dist/assets/DecalGeometry-160KRdfg.js +1 -0
- package/dist/assets/EXRLoader-Cdans_oJ.js +1 -0
- package/dist/assets/EffectComposer-DQxfsXBZ.js +1 -0
- package/dist/assets/EntityModelDocument-Ccvw66N9.js +1 -0
- package/dist/assets/EnvironmentAssetDocument-Dg-Qq6O6.js +1 -0
- package/dist/assets/FBXLoader-B4MoUtAn.js +1 -0
- package/dist/assets/Fbo-Dz-Soul3.js +1 -0
- package/dist/assets/FontLoader-CvGoVI5a.js +2 -0
- package/dist/assets/GLTFExporter-HgrCle4L.js +1 -0
- package/dist/assets/GameplaySessionTimeline-B52W3FVZ.js +1 -0
- package/dist/assets/Gltf-UHVWKz65.js +2 -0
- package/dist/assets/HDRLoader-THU88oVD.js +5 -0
- package/dist/assets/ImageViewer-Tn7s_MnW.js +1 -0
- package/dist/assets/InspectorCanvasPreview-CEr_Kxna.js +1 -0
- package/dist/assets/InspectorObjectPreview-CVejvLRg.js +1 -0
- package/dist/assets/JsonAssetDocument-C7VGcLhu.js +3 -0
- package/dist/assets/LineSegments2-CsOpKSiM.js +370 -0
- package/dist/assets/MTLLoader-_Xzd4_0p.js +2 -0
- package/dist/assets/MarchingCubes-Bsp4wrzd.js +1 -0
- package/dist/assets/MeshBVH-BiDHDcu-.js +1 -0
- package/dist/assets/ModelAssetDocument-F5GACirk.js +1 -0
- package/dist/assets/NonThreeAuthoringBootstrap-C3woOMxX.js +1 -0
- package/dist/assets/OBJLoader-BhIC6Hwo.js +5 -0
- package/dist/assets/Object3DDocumentViewport-DB7T0NTl.js +2 -0
- package/dist/assets/Object3DPreview-DL8oi7Xs.js +2 -0
- package/dist/assets/OnlineAssetDetail-C6z9RvYK.js +2 -0
- package/dist/assets/OrbitControls-CM3bPray.js +1 -0
- package/dist/assets/OrbitControls-DLpayAaK.js +1 -0
- package/dist/assets/OrthographicCamera-bQozawrh.js +1 -0
- package/dist/assets/PLYLoader-DYQqs5Ik.js +2 -0
- package/dist/assets/PerspectiveCamera-CQ2lh01o.js +1 -0
- package/dist/assets/PlayBar-BR-Vg3Jb.js +2 -0
- package/dist/assets/RGBELoader-BgBcQv8j.js +1 -0
- package/dist/assets/RectAreaLightUniformsLib-CMMoWfll.js +1 -0
- package/dist/assets/RenderPass-DPrn-Uky.js +1 -0
- package/dist/assets/ResolutionPicker-C67vs1F3.js +1 -0
- package/dist/assets/RootSelectionOverlay-BZPlxmXU.js +1 -0
- package/dist/assets/RoundedBox-BDGBg6QZ.js +1 -0
- package/dist/assets/RoundedBoxGeometry-CyUuYPfW.js +1 -0
- package/dist/assets/STLLoader-Dyv3lsxY.js +1 -0
- package/dist/assets/SelectionBox-D_75KrNW.js +1 -0
- package/dist/assets/ShaderPass-QYRpPuFJ.js +1 -0
- package/dist/assets/ShadowEditor-DkImwu1Y.js +1 -0
- package/dist/assets/SimplifyModifier-C8ayvRzd.js +1 -0
- package/dist/assets/SkeletonUtils-Cps8GOC6.js +1 -0
- package/dist/assets/Sky-CQKCgYDs.js +154 -0
- package/dist/assets/SourceAssetViewer-2SWQoUut.js +12 -0
- package/dist/assets/StageHost-BN-IoTef.js +2 -0
- package/dist/assets/StoryPreviewMount-DjyxRCXu.js +1 -0
- package/dist/assets/TDSLoader-D_T8XJ81.js +1 -0
- package/dist/assets/TextGeometry-DOWAEUV0.js +1 -0
- package/dist/assets/ThreeBoardDocument-CVncZyIq.js +2 -0
- package/dist/assets/ThreeIsolationSceneContent-C8C8whSF.js +1 -0
- package/dist/assets/ToolObject3DPreview-BRoDWe4Q.js +1 -0
- package/dist/assets/TrackballControls-DfznuQTh.js +1 -0
- package/dist/assets/TransientHint-BB1fwrvK.js +1 -0
- package/dist/assets/UnrealBloomPass-CR-cS_K5.js +83 -0
- package/dist/assets/VideoViewer-C6kocgIU.js +1 -0
- package/dist/assets/_commonjsHelpers-D6-XlEtG.js +1 -0
- package/dist/assets/active-ingest-CT6jSGhr.js +3 -0
- package/dist/assets/adapter-surface-Y37Nzcyw.js +1 -0
- package/dist/assets/after-paint-CB4bz1-e.js +1 -0
- package/dist/assets/agx-base-srgb-BjWZJgrZ.lut +0 -0
- package/dist/assets/agx-look-medium-high-contrast-D5F_ob1L.lut +0 -0
- package/dist/assets/agx-look-punchy-dxsnycNs.lut +0 -0
- package/dist/assets/animation-clock-CnjZqfJp.js +1 -0
- package/dist/assets/asset-budget-asset.menu-Di3KiQCd.js +1 -0
- package/dist/assets/asset-budget.action-DCzzcuTh.js +1 -0
- package/dist/assets/asset-budget.document-BWU8wnVW.js +1 -0
- package/dist/assets/asset-budget.menu-BGZpT_31.js +1 -0
- package/dist/assets/asset-editor-persistence-BBaONOJt.js +1 -0
- package/dist/assets/asset-loaders-BOy5Ss8k.js +2 -0
- package/dist/assets/asset-parse-error-BHMwBRU3.js +3 -0
- package/dist/assets/assets-BuSoGjBX.js +1 -0
- package/dist/assets/audio-meter-CyiToeUW.js +1 -0
- package/dist/assets/audio-unlock.service-CfUgUQVy.js +1 -0
- package/dist/assets/audio.utility-C6K6jem8.js +1 -0
- package/dist/assets/authoring-CgcOFhGS.js +1 -0
- package/dist/assets/autoplay.service-BZBGNSvt.js +1 -0
- package/dist/assets/axe-LkjAB6Lv.js +30 -0
- package/dist/assets/babylon-authoring-adapter-CL02gWDn.js +1 -0
- package/dist/assets/binding-Bmxqznjk.js +1 -0
- package/dist/assets/binding-identity-DcTpbvyg.js +1 -0
- package/dist/assets/binding-resolver-Dsh-6Vor.js +2 -0
- package/dist/assets/blender-emscripten-engine-9ZIRYNhe.js +2 -0
- package/dist/assets/blender-node-editor.document-iIDkB9sI.js +1 -0
- package/dist/assets/blender-properties-tab-C5CyPydi.js +3 -0
- package/dist/assets/blender-runtime-host-BpBwGv7r.js +4 -0
- package/dist/assets/blender-runtime-skin-DyQ9B6CR.js +7140 -0
- package/dist/assets/blender-runtime.document-lIYhhPtv.js +8 -0
- package/dist/assets/blender-timeline.document-77fx96N7.js +1 -0
- package/dist/assets/blender-uv-editor.document-fsT7B4gV.js +1 -0
- package/dist/assets/blender-version.status-o6dBm3n6.js +1 -0
- package/dist/assets/blender-wali-engine-wTOcrOMC.js +2 -0
- package/dist/assets/blender.command-BtJeWk-A.js +1 -0
- package/dist/assets/blender.keymap-GAQgeklK.js +1 -0
- package/dist/assets/blender.status-ujwGU6dU.js +1 -0
- package/dist/assets/blender.style-Dcem5f_T.js +1 -0
- package/dist/assets/board-guides-DziKSTss.js +1 -0
- package/dist/assets/body-marks-h_xDxiDE.js +1 -0
- package/dist/assets/bridge.command-o5gDNEwa.js +3 -0
- package/dist/assets/browserAll-DeWblVez.js +1 -0
- package/dist/assets/build-profiles.document-kW8iw8Xj.js +2 -0
- package/dist/assets/build-progress.status-BNRLytg2.js +1 -0
- package/dist/assets/build-session-C_sg3CEn.js +9 -0
- package/dist/assets/build.action-lYjTLb7K.js +1 -0
- package/dist/assets/build.command-DIGgUPU_.js +1 -0
- package/dist/assets/build.header-CKajx5U3.js +1 -0
- package/dist/assets/build.menu-BdU0QXny.js +1 -0
- package/dist/assets/build.service-CbBAyeu3.js +1 -0
- package/dist/assets/bus-mixer-CGfWDP3C.js +1 -0
- package/dist/assets/camera-KEsKvOL7.js +1 -0
- package/dist/assets/camera-runtime.inspector-B7unX4g1.js +1 -0
- package/dist/assets/canvas-entry-runtime-SfBxaR9M.js +2 -0
- package/dist/assets/capability-coverage-Czas4C18.js +7 -0
- package/dist/assets/chrome-trace-YZHMz60-.js +1 -0
- package/dist/assets/client-DNXj_opT.js +25 -0
- package/dist/assets/clip-planes-CnAI6DZn.js +1 -0
- package/dist/assets/collaboration-presence-DLoZ7EA3.js +1 -0
- package/dist/assets/collider-Bw0mXlsW.js +1 -0
- package/dist/assets/collider-dimensions-9xoFADXN.js +1 -0
- package/dist/assets/collision-system-DpNUJRJ3.js +1 -0
- package/dist/assets/command-results-CUQD49AB.js +1 -0
- package/dist/assets/component-board-registry-DrIa2csL.js +1 -0
- package/dist/assets/component-board.service-DCwcUssB.js +2 -0
- package/dist/assets/component-board.service-DidCyM4O.js +2 -0
- package/dist/assets/component-verbs.command-7xzfjGMZ.js +1 -0
- package/dist/assets/component-verbs.service-Bv9jId3q.js +1 -0
- package/dist/assets/config-CEZk921y.js +6 -0
- package/dist/assets/configurations-DTBMdaTL.js +1 -0
- package/dist/assets/connection.status-BifnQdOs.js +1 -0
- package/dist/assets/console-bridge-CHcb-xk5.js +1 -0
- package/dist/assets/constraint-De8f1Uiq.js +1 -0
- package/dist/assets/constraints.inspector-B9U9Yj-u.js +1 -0
- package/dist/assets/countdown-timer-CUm74dom.js +1 -0
- package/dist/assets/coverage.service-VTX5Mcsx.js +3 -0
- package/dist/assets/crash-null-boundary-v3a0uEgw.js +1 -0
- package/dist/assets/create-runtime-CVCc1BDx.js +1 -0
- package/dist/assets/curve-7Q79VgU4.js +1 -0
- package/dist/assets/data-asset-4hjS642k.js +5 -0
- package/dist/assets/data-check-core-CQEjuFyt.js +1 -0
- package/dist/assets/data-ref-CQI28C0D.js +1 -0
- package/dist/assets/debug-bridge-CCohG-d-.js +1 -0
- package/dist/assets/debug-registry-Dgvitx8M.js +1 -0
- package/dist/assets/defaults-DKiBJCPN.js +1 -0
- package/dist/assets/deferred-commands-CEMmvL47.js +1 -0
- package/dist/assets/deferred-ingest-play-DCJi_Pgu.js +2 -0
- package/dist/assets/design-time-layers-wYgOTgni.js +1 -0
- package/dist/assets/design-time-mount-registry-DUpXCg1U.js +1 -0
- package/dist/assets/design-time-mount.service-BzY21e1F.js +2 -0
- package/dist/assets/design-time-react-mount-DM9WLrF2.js +1 -0
- package/dist/assets/dev-build-gDYrq68M.js +1 -0
- package/dist/assets/directional-shadow-fit-BVkOKAv2.js +1 -0
- package/dist/assets/document-preview-three-Kbg2GCLm.js +1 -0
- package/dist/assets/dom-authoring-adapter-CY8C7f4T.js +1 -0
- package/dist/assets/draco3d-BBUTcNkz.js +1 -0
- package/dist/assets/draco_decoder-DsQ12WqX.wasm +0 -0
- package/dist/assets/draco_encoder-2Tcju8Ns.wasm +0 -0
- package/dist/assets/edit-mode-audio.service-Bzetwd5B.js +1 -0
- package/dist/assets/edit-mode-authoring-B47TfLqu.js +1 -0
- package/dist/assets/edit-mode-networking.service-YCX6RRb_.js +1 -0
- package/dist/assets/editor-api-BoJIcyZG.js +1 -0
- package/dist/assets/editor-port-C_FeBdeV.js +1 -0
- package/dist/assets/editor-presentation-activity-C7SNSmTd.js +1 -0
- package/dist/assets/entry-adjudication-Cq8Yeb74.js +1 -0
- package/dist/assets/environment-capture-7himRh2L.js +1 -0
- package/dist/assets/esbuild-BHljloGq.wasm +0 -0
- package/dist/assets/events-156d8d12.esm-ErOhDXXB.js +36 -0
- package/dist/assets/extend-B-eOccUm.js +36 -0
- package/dist/assets/extends-CF3RwP-h.js +1 -0
- package/dist/assets/eyedropper-session-bjPXnfeX.js +1 -0
- package/dist/assets/fflate.module-DPuTF8aG.js +6 -0
- package/dist/assets/filmic-srgb-Ct35FIH6.lut +0 -0
- package/dist/assets/first-party-audio-system-DxnGJOER.js +1 -0
- package/dist/assets/first-party-navigation-system-CL5Bquub.js +1 -0
- package/dist/assets/fork-menu-BoVyw2Wu.js +1 -0
- package/dist/assets/frame-debugger-store-D1Mf_5up.js +1 -0
- package/dist/assets/frame-delta-D2nsw_Ht.js +1 -0
- package/dist/assets/frame-pacing-D5acoOzO.js +1 -0
- package/dist/assets/frame-selector-cache-cCeUbcjG.js +1 -0
- package/dist/assets/game-DHOZVb-7.js +1 -0
- package/dist/assets/game-contract-seams-a5YXejOu.js +1 -0
- package/dist/assets/game-css-scope-transform-Eng4wS8E.js +33 -0
- package/dist/assets/game-document.service-DbRfx2V0.js +1 -0
- package/dist/assets/game-eval.command-D-7Dxbj_.js +2 -0
- package/dist/assets/game-input-seams-CIQdetRw.js +1 -0
- package/dist/assets/game-loop-CZvXlY00.js +1 -0
- package/dist/assets/game-module-access-B2mFxv-i.js +1 -0
- package/dist/assets/game.layout-CBASrvQu.js +1 -0
- package/dist/assets/gameplay-export-BoKXm51x.js +1 -0
- package/dist/assets/gameplay-replay-e5umMlXv.js +1 -0
- package/dist/assets/gameplay-rng-trap-CTNhm-UW.js +3 -0
- package/dist/assets/gameplay.command-DxcVYX6F.js +1 -0
- package/dist/assets/generation-DhwCUHPf.css +1 -0
- package/dist/assets/generation-jobs-BQrXbGp_.js +1 -0
- package/dist/assets/generation.service-CDIgObuw.js +1 -0
- package/dist/assets/generations-DzUogZsM.js +1 -0
- package/dist/assets/generations.status-CgOUBCum.js +1 -0
- package/dist/assets/hierarchy-marks-BLPfSIym.js +1 -0
- package/dist/assets/host-pointer-DbGSCjE9.js +1 -0
- package/dist/assets/hosted-asset-materialization-CiIvWkGU.js +2 -0
- package/dist/assets/ibl-override-material-BlmCxFKq.js +6 -0
- package/dist/assets/index-96FBF1Oj.js +1 -0
- package/dist/assets/index-BAWkB0dv.js +1 -0
- package/dist/assets/index-BDnS2b6S.js +1 -0
- package/dist/assets/index-BHp07vN0.js +2 -0
- package/dist/assets/index-BMxv2MNV.js +1 -0
- package/dist/assets/index-BP6wv2A0.js +5 -0
- package/dist/assets/index-BcCBqgM_.js +952 -0
- package/dist/assets/index-Bge9JUr6.js +1 -0
- package/dist/assets/index-BjTCPEQ7.js +134 -0
- package/dist/assets/index-BncK9THk.js +1 -0
- package/dist/assets/index-CJbYy-CF.js +3 -0
- package/dist/assets/index-CVCb_ImQ.js +1 -0
- package/dist/assets/index-CZd9o7Lu.js +1 -0
- package/dist/assets/index-CanA16PU.js +2 -0
- package/dist/assets/index-CinJrH5C.js +9 -0
- package/dist/assets/index-CtzuWnCS.js +1 -0
- package/dist/assets/index-D2fNXpHa.css +1 -0
- package/dist/assets/index-DUpHH6JR.js +3120 -0
- package/dist/assets/index-DUqP1RMl.js +1 -0
- package/dist/assets/index-D_NuPfjr.js +9 -0
- package/dist/assets/index-Da9JhEvW.js +25 -0
- package/dist/assets/index-DgapqSPi.js +7 -0
- package/dist/assets/index-FUuS4qwW.js +562 -0
- package/dist/assets/index-GIL7oGEO.js +4894 -0
- package/dist/assets/index-IEjydI9d.js +1 -0
- package/dist/assets/index-OrYXPk3Z.js +487 -0
- package/dist/assets/index-V1R-e5Bd.js +1 -0
- package/dist/assets/index-bQE2NA0D.js +1 -0
- package/dist/assets/index-gHZae-lw.js +13 -0
- package/dist/assets/index-mjWQmGhM.js +1 -0
- package/dist/assets/index-nmcBqr7Y.js +1 -0
- package/dist/assets/inference-diagnostics-Dhmtfbq_.js +1 -0
- package/dist/assets/ingest-BbYMC2vQ.js +1 -0
- package/dist/assets/ingest-boot-viewport-D5rI_Kk_.js +1 -0
- package/dist/assets/ingest-siblings-Bop2kqVl.js +1 -0
- package/dist/assets/ingest-source-persistence-C_6Hiyra.js +1 -0
- package/dist/assets/ingest.service-BTDnQfM1.js +1 -0
- package/dist/assets/input-manager-DH_hGW6d.js +1 -0
- package/dist/assets/input-router-BNQvtIqw.js +1 -0
- package/dist/assets/inspect-BZfi3mmo.js +1 -0
- package/dist/assets/inspection-CObLhnrs.js +1 -0
- package/dist/assets/instance-fork-actions-D3sRzS3K.js +1 -0
- package/dist/assets/instances.command-D6UkZNO8.js +1 -0
- package/dist/assets/instruments-CKR02Y8I.js +1 -0
- package/dist/assets/json-history-resource-BbxllWfV.js +1 -0
- package/dist/assets/jsx-runtime-DPjLkJKQ.js +9 -0
- package/dist/assets/light-D-_wsKTq.js +1 -0
- package/dist/assets/light-camera-factory-CWbbe9gI.js +1 -0
- package/dist/assets/lil-gui.module.min-BF55BEwA.js +10 -0
- package/dist/assets/live-behaviors-Bxq49Maz.js +1 -0
- package/dist/assets/live-gesture-lock-DJbrjOqf.js +1 -0
- package/dist/assets/loader-CaF_I7Yt.js +1 -0
- package/dist/assets/logger-Dqis-7W1.js +1 -0
- package/dist/assets/loop-gate-report-N52EWFGD.js +1 -0
- package/dist/assets/matcap-texture-CVfalpWT.js +1 -0
- package/dist/assets/material-CpAdjDxn.js +1 -0
- package/dist/assets/material-factory-Bz6h__6g.js +1 -0
- package/dist/assets/mesh-B3WPtNKO.js +1 -0
- package/dist/assets/mesh-shadow-CZnXrw_l.js +1 -0
- package/dist/assets/mikktspace.module-DO88SLib.js +1 -0
- package/dist/assets/model-asset-sections-CFvvihfx.css +1 -0
- package/dist/assets/model-asset-sections.service-CHhFS3ZX.js +1 -0
- package/dist/assets/model.layout-BJUEQYUI.js +1 -0
- package/dist/assets/models.finder-G2jQgIRu.js +1 -0
- package/dist/assets/module-mode-DVBLT9d-.js +2 -0
- package/dist/assets/mount-canvas-ingest-root-DDuAWf_C.js +2 -0
- package/dist/assets/mount-dom-ingest-root-D_EiBgpn.js +2 -0
- package/dist/assets/mount-game-6t9cKNo4.js +1 -0
- package/dist/assets/mount-ingest-root-glv2SSWf.js +2 -0
- package/dist/assets/mount-manifest-CGVxhmAw.js +1 -0
- package/dist/assets/mount-readiness-Ds0HvvLH.js +4 -0
- package/dist/assets/mount-three-ingest-root-hrUt9VVU.js +1 -0
- package/dist/assets/mounted-authoring-Dmg5xmhP.js +1 -0
- package/dist/assets/mounted-story-viewport-source-DjP6RA9U.js +1 -0
- package/dist/assets/native-debug-module-CWicoSGD.js +1 -0
- package/dist/assets/native-entry-surface-BE8LJNdu.js +1 -0
- package/dist/assets/navigation-CIiCx-SM.js +1 -0
- package/dist/assets/navmesh-workflow-store-Cmnm57TB.js +1 -0
- package/dist/assets/navmesh.menu-CAKiH8PW.js +1 -0
- package/dist/assets/navmesh.service-jgDWlgj1.js +1 -0
- package/dist/assets/network.utility-CEu5nHf7.js +1 -0
- package/dist/assets/object-marks-DwvIEBOK.js +1 -0
- package/dist/assets/object3d-authoring-subject-CH5sI2oP.js +1 -0
- package/dist/assets/output-DK8waum9.js +195 -0
- package/dist/assets/particles-Y626p22p.js +1 -0
- package/dist/assets/particles-factory-DnLOHXT8.js +1 -0
- package/dist/assets/pasteboard-materialize-BqSS4QzV.js +20 -0
- package/dist/assets/pasteboard.action-DU3UHtJG.js +2 -0
- package/dist/assets/performance-profiler-D_Jey87L.js +1 -0
- package/dist/assets/physics-registry-B2Jkp8e6.js +1 -0
- package/dist/assets/physics-registry-CUB9cT9p.js +1 -0
- package/dist/assets/pixi-authoring-adapter-CjibysC3.js +1 -0
- package/dist/assets/pixi-live-write-target-DuWydlWb.js +1 -0
- package/dist/assets/pixi-primitive-DlWbUPN9.js +1 -0
- package/dist/assets/pixi-react-root-factory-DYsznYRQ.js +1 -0
- package/dist/assets/pixi-story-model-DNkfnWUV.js +1 -0
- package/dist/assets/pixi-transform-channels-VjdohT11.js +1 -0
- package/dist/assets/play-mode-BFU2PCkG.js +22 -0
- package/dist/assets/play.command-BpqqLqkq.js +2 -0
- package/dist/assets/playtest-BXIL1JEF.js +1 -0
- package/dist/assets/pose-guard-6Osb2cFu.js +1 -0
- package/dist/assets/presentation-BPP5pXeQ.js +1 -0
- package/dist/assets/product-DFhyARJj.js +1 -0
- package/dist/assets/profiler.action-CaXJDp3t.js +1 -0
- package/dist/assets/profiler.menu-BIMF6Bi4.js +1 -0
- package/dist/assets/profiler.utility-BExw9wBO.js +1 -0
- package/dist/assets/project-authoring-session-Bnt6icLr.js +2 -0
- package/dist/assets/project-provenance-BoP3nrle.js +1 -0
- package/dist/assets/prompt-labels-DSMdM2_B.js +1 -0
- package/dist/assets/properties-bone-constraints.inspector-ByT6p7S-.js +1 -0
- package/dist/assets/properties-bone.inspector-z4qJwKO5.js +1 -0
- package/dist/assets/properties-collection.inspector-D0_3ijWU.js +1 -0
- package/dist/assets/properties-constraints.inspector-CESzjuls.js +1 -0
- package/dist/assets/properties-data.inspector-hG8Wgyzb.js +1 -0
- package/dist/assets/properties-material.inspector-CzY0JCQ6.js +1 -0
- package/dist/assets/properties-modifiers.inspector-3dDhwf7g.js +1 -0
- package/dist/assets/properties-object.inspector-CiarfxkT.js +1 -0
- package/dist/assets/properties-output.inspector-DKJxmKSD.js +1 -0
- package/dist/assets/properties-particles.inspector-CCEdYWGm.js +1 -0
- package/dist/assets/properties-physics.inspector-B2c0KUyA.js +1 -0
- package/dist/assets/properties-render.inspector-Bcm0HLRW.js +1 -0
- package/dist/assets/properties-scene.inspector-PIM_eTb_.js +1 -0
- package/dist/assets/properties-texture.inspector-CgFlnyr8.js +1 -0
- package/dist/assets/properties-view-layer.inspector-DGjF_Aqo.js +1 -0
- package/dist/assets/properties-world.inspector-CrMvaRvB.js +1 -0
- package/dist/assets/r3f-design-session-D-4yyDO9.js +2 -0
- package/dist/assets/r3f-physics-binding-BBo8oma9.js +1 -0
- package/dist/assets/r3f-root-factory-z9llD1OU.js +1 -0
- package/dist/assets/r3f-source-authoring-adapter-w6Bc60K-.js +13 -0
- package/dist/assets/rapier-physics-adapter-CaZqWLu0.js +1 -0
- package/dist/assets/rapier-physics-bridge-CMoeVo3Y.js +1 -0
- package/dist/assets/react-18-By2b4xR9.js +1 -0
- package/dist/assets/react-inspector.service-B_neRnSK.js +1 -0
- package/dist/assets/react-root-CEz5NTck.js +1 -0
- package/dist/assets/react-story-board-BDDwiE2H.js +1 -0
- package/dist/assets/react-three-fiber.esm-CycrbDlA.js +1 -0
- package/dist/assets/react-three-rapier.esm-CEfKpvxT.js +1 -0
- package/dist/assets/react-world-authoring-adapter-DmrwM3py.js +1 -0
- package/dist/assets/realm-services-CobQsq_X.js +1 -0
- package/dist/assets/rebind-controller-Dtq19Vb3.js +1 -0
- package/dist/assets/recast-navigation.wasm-compat-Dsoa_MD-.js +1 -0
- package/dist/assets/reflection-probe-Don-M3Fj.js +1 -0
- package/dist/assets/reflection-probe-capture.inspector-CmFUoJCx.js +1 -0
- package/dist/assets/register-render-vitals-BiZk29b2.js +1 -0
- package/dist/assets/registry-02YZjMNp.js +1 -0
- package/dist/assets/relative-path-guard-GiM7Lsz8.js +1 -0
- package/dist/assets/render-audio-control-vMRlePWb.js +1 -0
- package/dist/assets/render-batch-system-0vq7p0VC.js +1 -0
- package/dist/assets/render-census-BrQX_CXv.js +1 -0
- package/dist/assets/render-control-Df3yTiyr.js +1 -0
- package/dist/assets/render-env-D2IV2x5k.js +1 -0
- package/dist/assets/render-features-CPQ_e568.js +1 -0
- package/dist/assets/render-seed-DF4JHy7P.js +1 -0
- package/dist/assets/render-settings-Bw4W9SYF.js +1 -0
- package/dist/assets/render-vitals-BZ5HtvMi.js +1 -0
- package/dist/assets/renderer-config-BqG4O8i9.js +1 -0
- package/dist/assets/resolve-three-SZE_WWUM.js +702 -0
- package/dist/assets/root-seam-contract-Z0VWX3Bk.js +1 -0
- package/dist/assets/rrweb-Cd2ifIRP.js +142 -0
- package/dist/assets/run-ticks-settled-C4ksViyA.js +1 -0
- package/dist/assets/runtime-inspection-l2iFQSsg.js +1 -0
- package/dist/assets/scene-capture-BQKzU0NT.js +1 -0
- package/dist/assets/scene-capture-CGYF-Viw.js +1 -0
- package/dist/assets/scene-document.service-qkDjUrlP.js +2 -0
- package/dist/assets/scene-framing-Cat0GtyJ.js +1 -0
- package/dist/assets/scene-index-B6BZOHMk.js +1 -0
- package/dist/assets/scene-query-C7_N-TpI.js +1 -0
- package/dist/assets/schema-kl9-2B_J.js +1 -0
- package/dist/assets/sculpt.layout-zJF55yCR.js +1 -0
- package/dist/assets/seeded-random-i3mtgBKZ.js +1 -0
- package/dist/assets/session-CZ5JPg-z.js +4877 -0
- package/dist/assets/setup-audio-S8GQF91f.js +1 -0
- package/dist/assets/setup-particles-GCXlnkj_.js +1 -0
- package/dist/assets/setup-physics-BeZ7-LKD.js +1 -0
- package/dist/assets/setup-renderer-DVXaSGin.js +1587 -0
- package/dist/assets/shading.layout-DULYZV6M.js +1 -0
- package/dist/assets/sim-clock-CLflx7kg.js +1 -0
- package/dist/assets/sky-precompute-worker-ChN7J87v.js +1 -0
- package/dist/assets/soft-particle-depth-DGvfQDi1.js +1 -0
- package/dist/assets/source-object3d-authoring-adapter-B-L6Ha6f.js +1 -0
- package/dist/assets/source-persistence-backend-C-aR-B_Y.js +1 -0
- package/dist/assets/spark-renderer-lifecycle-ynWESJcv.js +1 -0
- package/dist/assets/spark.module-4pXQoz5d.js +12120 -0
- package/dist/assets/stage-invalidation-DBg3C3Ta.js +1 -0
- package/dist/assets/stage-keyboard-n-5kKH-m.js +1 -0
- package/dist/assets/stage-overlay-set-B9zp2sLB.js +1 -0
- package/dist/assets/stage-presence-markers-DiGI6A45.js +1 -0
- package/dist/assets/standard-viewport-dressing-CzjAe_0A.js +7 -0
- package/dist/assets/state-bridge-DLP1jLRW.js +1 -0
- package/dist/assets/state-watch.action-BOvQR2qt.js +1 -0
- package/dist/assets/state-watch.menu-CNLvDeeY.js +1 -0
- package/dist/assets/state-watch.utility-Bg1tTTQU.js +1 -0
- package/dist/assets/static-batch-advisor-B13QEH7d.js +1 -0
- package/dist/assets/stats.module-BL02l9NC.js +1 -0
- package/dist/assets/story-arg-descriptors-Ek86ExX7.js +1 -0
- package/dist/assets/story-capture-_gC8dXV-.js +1 -0
- package/dist/assets/story-documents--TDLaPeL.js +3 -0
- package/dist/assets/story-documents.service-BiS_YbNQ.js +1 -0
- package/dist/assets/story-documents.service-CxOPYJ2j.js +1 -0
- package/dist/assets/story-media-presence-BHzk2IV5.js +1 -0
- package/dist/assets/story-mount-turn-DFRTj5hi.js +1 -0
- package/dist/assets/story-pixi-preview-BUrOJZXS.js +1 -0
- package/dist/assets/story-presentation-j2AVN-mK.js +1 -0
- package/dist/assets/story-three-preview-BHEDZzcl.js +2 -0
- package/dist/assets/structural-ids-Dc-7rEwi.js +1 -0
- package/dist/assets/structural-signature-0w-i_ats.js +1 -0
- package/dist/assets/surface-content-Dg9Kkazf.js +1 -0
- package/dist/assets/surface-state-DaxyruCj.js +3 -0
- package/dist/assets/system-adapters-rIC8FSGP.js +1 -0
- package/dist/assets/system-runner-DkOjxEBt.js +1 -0
- package/dist/assets/system-slot-E2mEdiih.js +1 -0
- package/dist/assets/team-playtest.service-DqOinFVA.js +1 -0
- package/dist/assets/texture.layout-DASpHVht.js +1 -0
- package/dist/assets/three-CDSueJyJ.js +1 -0
- package/dist/assets/three-authoring-adapter-CmSQ3Vui.js +1 -0
- package/dist/assets/three-authoring.service-iuHLwtf1.js +2 -0
- package/dist/assets/three-ingest-runtime-QzDYk6tU.js +1 -0
- package/dist/assets/three-projection-core-BmKMZ-nf.js +1 -0
- package/dist/assets/three-viewport-presentation-QBQpSdMh.js +1 -0
- package/dist/assets/three.module-D396a9Mn.js +3840 -0
- package/dist/assets/three.quarks.esm-B1C61jGo.js +1039 -0
- package/dist/assets/tools-B_NJsk05.js +1 -0
- package/dist/assets/transform-writer-BhBBTx33.js +1 -0
- package/dist/assets/transport.header-B-6HQlU2.js +1 -0
- package/dist/assets/trigger-volume-BNK2XzPL.js +1 -0
- package/dist/assets/tuples-CIQ4Bn1U.js +1 -0
- package/dist/assets/tween.module-DciWpAG6.js +1 -0
- package/dist/assets/ui-board-document-Bwtt--xp.js +2 -0
- package/dist/assets/unexported-game-trap-Dm1JYKHy.js +2 -0
- package/dist/assets/unmanaged-root-detector-B8CpbkSN.js +2 -0
- package/dist/assets/upstream-pin-BdgRH6ID.js +1 -0
- package/dist/assets/use-data-Dzq-MytE.js +1 -0
- package/dist/assets/use-live-actor-state-DErbWQWF.js +1 -0
- package/dist/assets/use-selection-DbR73-xd.js +1 -0
- package/dist/assets/user-data-BB2Of6Ht.js +1 -0
- package/dist/assets/utility-view-state-BHypxA33.js +1 -0
- package/dist/assets/uv-editing.layout-BEKHxmHw.js +1 -0
- package/dist/assets/vgai-shared-fontawesome-CU65D4Ij.js +1 -0
- package/dist/assets/vgai-shared-jsx-dev-runtime-DFDKL7fx.js +1 -0
- package/dist/assets/vgai-shared-jsx-runtime-DIqBpTut.js +1 -0
- package/dist/assets/vgai-shared-react-BT7rMc2H.js +1 -0
- package/dist/assets/vgai-shared-react-dom-DFajMqMT.js +1 -0
- package/dist/assets/vgai-shared-react-dom-client-S0ozfl6_.js +1 -0
- package/dist/assets/vgai-shared-three-Bc5PvpLM.js +1 -0
- package/dist/assets/viewport-pick-context-DkawXbEi.js +1 -0
- package/dist/assets/viewport-root-presentation-CWsE56K6.js +1 -0
- package/dist/assets/viewport-shading-BuA88e_A.js +1 -0
- package/dist/assets/viewport-shading-boundary-B_-_gABg.js +82 -0
- package/dist/assets/viewport-surface-status-B3om4Kcf.js +1 -0
- package/dist/assets/vision_bundle-DX0dWqEa.js +15 -0
- package/dist/assets/voxel-surface-DtcsSWRL.js +1 -0
- package/dist/assets/wav-encode-D31zWF6O.js +1 -0
- package/dist/assets/webgl-frame-capture-FlF9zQmW.js +1 -0
- package/dist/assets/webgl-gpu-timer-D3YX7RaD.js +1 -0
- package/dist/assets/webworkerAll-CM2o_dnz.js +1 -0
- package/dist/assets/worker-UrMcrc5_.js +2 -0
- package/dist/assets/world-documents-147tiFZe.js +1 -0
- package/dist/assets/world-root-stage-binding-vwTrtBz6.js +1 -0
- package/dist/assets/world-state-BWG-IcOd.js +1 -0
- package/dist/assets/writer-B-KovzkA.js +5 -0
- package/dist/assets/xstate-animation-binding-Brd0NST6.js +1 -0
- package/dist/assets/xstate-animation-meta-Q3u9zh_m.js +1 -0
- package/dist/assets/xstate-behavior.action-B8UluFBK.js +1 -0
- package/dist/assets/xstate-behavior.document-CKAsE45I.js +1 -0
- package/dist/assets/xstate-behavior.inspector-vJJyuifc.js +1 -0
- package/dist/assets/xstate-behavior.menu-BXbPICIh.js +1 -0
- package/dist/assets/xstate-inspection-BsZv8LS9.js +1 -0
- package/dist/vgai-shared-react.json +10 -0
- package/dist/vgai-shared-three.json +3 -0
- package/dist-node/cli.js +9320 -0
- package/dist-node/create.js +3239 -0
- package/package.json +91 -0
- package/presets.mjs +2 -0
- package/src/contributions.d.ts +4 -0
- package/src/index.ts +38 -0
- package/starter/cube.blend +0 -0
- package/starter/cube.py +81 -0
- package/template/.agents/references/project-manual.md +341 -0
- package/template/.agents/skills/editor/SKILL.md +53 -0
- package/template/.agents/skills/editor/agents/openai.yaml +4 -0
- package/template/.agents/skills/editor/references/editor-control.md +363 -0
- package/template/.agents/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.agents/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.agents/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.agents/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.claude/skills/editor/SKILL.md +53 -0
- package/template/.claude/skills/editor/agents/openai.yaml +4 -0
- package/template/.claude/skills/editor/references/editor-control.md +363 -0
- package/template/.claude/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.claude/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.claude/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.claude/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.github/copilot-instructions.md +6 -0
- package/template/.github/skills/editor/SKILL.md +53 -0
- package/template/.github/skills/editor/agents/openai.yaml +4 -0
- package/template/.github/skills/editor/references/editor-control.md +363 -0
- package/template/.github/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.github/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.github/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.github/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.mcp.json +12 -0
- package/template/.vgai/assets.json +1 -0
- package/template/.vgai/provenance.json +4 -0
- package/template/.volter/tracker/validation/.preset.base.mts +178 -0
- package/template/.volter/tracker/validation/preset.mts +186 -0
- package/template/.volter/tracker/visualizer/.extension.base.tsx +14 -0
- package/template/.volter/tracker/visualizer/extension.tsx +14 -0
- package/template/.volter/tracker-config.json +17 -0
- package/template/AGENTS.md +176 -0
- package/template/CLAUDE.md +1 -0
- package/template/DEVLOG.md +20 -0
- package/template/IDIOMS.md +118 -0
- package/template/LICENSE +30 -0
- package/template/README.md +83 -0
- package/template/ROADMAP.md +20 -0
- package/template/asset-manifest.json +3 -0
- package/template/check-idioms.ts +1533 -0
- package/template/index.html +18 -0
- package/template/manifest-entry-modules-plugin.ts +53 -0
- package/template/package.json +62 -0
- package/template/public/jsm/libs/basis/basis_transcoder.js +19 -0
- package/template/public/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/template/public/jsm/libs/draco/gltf/draco_decoder.js +33 -0
- package/template/public/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/template/public/jsm/libs/draco/gltf/draco_encoder.js +33 -0
- package/template/public/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
- package/template/public/shaders/daylight-sky.frag.glsl +15 -0
- package/template/public/shaders/daylight-sky.vert.glsl +7 -0
- package/template/scripts/patch-drei-stats-gl.mjs +35 -0
- package/template/server/colyseus-setup.ts +111 -0
- package/template/server/loopback.ts +76 -0
- package/template/server/main.ts +78 -0
- package/template/server/rooms/arena-room.ts +488 -0
- package/template/server/rooms/game-room.ts +274 -0
- package/template/server/rooms.ts +15 -0
- package/template/server/tsconfig.json +19 -0
- package/template/src/bot/QaTester.tsx +35 -0
- package/template/src/bot/behaviors.ts +203 -0
- package/template/src/bot/bot-station.ts +192 -0
- package/template/src/bot/tester-run.ts +238 -0
- package/template/src/bot/tester-station.ts +193 -0
- package/template/src/components/environment/DaylightSky.tsx +54 -0
- package/template/src/components/environment/Ground.tsx +129 -0
- package/template/src/components/environment/SceneAtmosphere.tsx +14 -0
- package/template/src/components/environment/SoftGroundShadow.tsx +62 -0
- package/template/src/components/environment/SunShadowFit.tsx +141 -0
- package/template/src/contributions/README.md +98 -0
- package/template/src/contributions/analytics.analytics.tsx +26 -0
- package/template/src/contributions/data.document.tsx +35 -0
- package/template/src/contributions/pages.finder.ts +61 -0
- package/template/src/contributions/tester.inspector.tsx +64 -0
- package/template/src/contributions/use-game-modules.ts +80 -0
- package/template/src/data/README.md +17 -0
- package/template/src/input.ts +97 -0
- package/template/src/lib/audio/capability.json +4 -0
- package/template/src/lib/audio/sfx.ts +255 -0
- package/template/src/lib/react-root/capability.json +4 -0
- package/template/src/lib/react-root/index.ts +20 -0
- package/template/src/lib/react-root/react-root-adapter.tsx +57 -0
- package/template/src/lib/reflections/ReflectionProbe.tsx +201 -0
- package/template/src/lib/reflections/capability.json +4 -0
- package/template/src/lib/reflections/index.ts +19 -0
- package/template/src/lib/reflections/probe-controller.ts +75 -0
- package/template/src/lib/reflections/reflection-probe-registry.ts +402 -0
- package/template/src/lib/reflections/volume-reflection-material.ts +416 -0
- package/template/src/lib/static-batch/Frozen.tsx +91 -0
- package/template/src/lib/static-batch/capability.json +4 -0
- package/template/src/lib/static-batch/freeze.ts +579 -0
- package/template/src/lib/static-batch/index.ts +44 -0
- package/template/src/lib/static-batch/mutation-watch.ts +149 -0
- package/template/src/lib/static-batch/shadow-cache.ts +171 -0
- package/template/src/main.ts +63 -0
- package/template/src/manifest-entry-modules.d.ts +3 -0
- package/template/src/prefabs/HeroBox.stories.tsx +23 -0
- package/template/src/prefabs/HeroBox.tsx +35 -0
- package/template/src/scenes/MainScene.tsx +77 -0
- package/template/src/world.tsx +87 -0
- package/template/tsconfig.json +35 -0
- package/template/tsconfig.node.json +32 -0
- package/template/tsconfig.tools.json +22 -0
- package/template/validate-asset-content.ts +27 -0
- package/template/validate-assets.ts +60 -0
- package/template/validate-manifest.ts +55 -0
- package/template/vgai.adapter.ts +76 -0
- package/template/vgai.project.json +24 -0
- package/template/vite.config.ts +247 -0
- package/template-dotfiles/gitignore +63 -0
- package/workbench/src/media/game-cover.css +83 -0
- package/workbench/src/product.contribution.ts +188 -0
- package/workbench/src/vgaiGameSkew.ts +276 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
// The editor's lane (src/contributions/**, src/tools/**) — their own program, WITHOUT
|
|
3
|
+
// src/world.tsx: see the base tsconfig's "exclude" note (fiber's JSX
|
|
4
|
+
// augmentation must not mix with the editor design-system's polymorphic
|
|
5
|
+
// primitives these tools import via @editor/*).
|
|
6
|
+
//
|
|
7
|
+
// `exclude` MUST be reset here. `extends` inherits the base config's
|
|
8
|
+
// `exclude: ["src/tools", "src/contributions"]`, and exclude beats include — inheriting it makes
|
|
9
|
+
// this program compile ZERO files while still exiting 0, so every tool file
|
|
10
|
+
// is silently untypechecked. `npm run typecheck` cannot tell you: a program
|
|
11
|
+
// with no files is a PASSING program.
|
|
12
|
+
//
|
|
13
|
+
// Tools are NODE code (see src/contributions/module-source.ts's header) — the base
|
|
14
|
+
// config's browser-only `types: ["vite/client"]` is why they had to be
|
|
15
|
+
// excluded from it in the first place, so add node here.
|
|
16
|
+
"extends": "./tsconfig.json",
|
|
17
|
+
"compilerOptions": {
|
|
18
|
+
"types": ["vite/client", "node"]
|
|
19
|
+
},
|
|
20
|
+
"include": ["src/tools", "src/contributions"],
|
|
21
|
+
"exclude": []
|
|
22
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { InputMapFileSchema } from '@volter/game-runtime/input/schema';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Content validation for the project's structured input-map asset. Models,
|
|
6
|
+
* materials, animation, images, and audio use their ecosystem-native formats
|
|
7
|
+
* and are validated by their own loaders/tooling rather than vgai JSON schemas.
|
|
8
|
+
*/
|
|
9
|
+
export const ASSET_CONTENT_EXTENSIONS = ['.inputmap.json'] as const;
|
|
10
|
+
|
|
11
|
+
export function validateAssetContentFile(path: string): string[] {
|
|
12
|
+
let raw: unknown;
|
|
13
|
+
try {
|
|
14
|
+
raw = JSON.parse(readFileSync(path, 'utf-8'));
|
|
15
|
+
} catch (reason) {
|
|
16
|
+
return [`${path}: invalid JSON — ${reason instanceof Error ? reason.message : String(reason)}`];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (!path.endsWith('.inputmap.json')) {
|
|
20
|
+
throw new Error(
|
|
21
|
+
`validateAssetContentFile: "${path}" is not a supported structured asset (${ASSET_CONTENT_EXTENSIONS.join(', ')})`,
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
const result = InputMapFileSchema.safeParse(raw);
|
|
25
|
+
if (result.success) return [];
|
|
26
|
+
return result.error.issues.map((issue) => `${path}: ${issue.path.join('.')}: ${issue.message}`);
|
|
27
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { existsSync, readdirSync, statSync } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { ASSET_CONTENT_EXTENSIONS, validateAssetContentFile } from './validate-asset-content';
|
|
4
|
+
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Usage: npx tsx validate-assets.ts [folder]
|
|
7
|
+
//
|
|
8
|
+
// Content-parses every fetched-asset file under <folder>/public/ through the
|
|
9
|
+
// engine's own Zod schema — the same one the runtime rejects a malformed
|
|
10
|
+
// input map with, so a present-but-invalid `.inputmap.json` fails here instead
|
|
11
|
+
// of at load. Defaults to the current
|
|
12
|
+
// working directory.
|
|
13
|
+
//
|
|
14
|
+
// Shipped IN the project template so every scaffolded game gets a working
|
|
15
|
+
// `npm run validate-assets`; the engine is imported via the published
|
|
16
|
+
// the runtime packages' subpath exports, which resolve in both this monorepo and a
|
|
17
|
+
// generated project.
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
|
|
20
|
+
const args = process.argv.slice(2);
|
|
21
|
+
const rootDir = resolve(args[0] ?? '.');
|
|
22
|
+
const publicDir = join(rootDir, 'public');
|
|
23
|
+
|
|
24
|
+
if (!existsSync(publicDir)) {
|
|
25
|
+
console.error(`No public/ directory found in ${rootDir}`);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function collectFiles(dir: string, ext: string): string[] {
|
|
30
|
+
const result: string[] = [];
|
|
31
|
+
if (!existsSync(dir)) return result;
|
|
32
|
+
for (const entry of readdirSync(dir)) {
|
|
33
|
+
const full = join(dir, entry);
|
|
34
|
+
if (statSync(full).isDirectory()) {
|
|
35
|
+
result.push(...collectFiles(full, ext));
|
|
36
|
+
} else if (entry.endsWith(ext)) {
|
|
37
|
+
result.push(full);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const errors: string[] = [];
|
|
44
|
+
const assetContentFiles = ASSET_CONTENT_EXTENSIONS.flatMap((ext) => collectFiles(publicDir, ext));
|
|
45
|
+
for (const path of assetContentFiles) {
|
|
46
|
+
errors.push(...validateAssetContentFile(path));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (errors.length > 0) {
|
|
50
|
+
console.error(`Asset validation failed with ${errors.length} error(s):\n`);
|
|
51
|
+
for (const err of errors) {
|
|
52
|
+
console.error(` ${err}`);
|
|
53
|
+
}
|
|
54
|
+
process.exit(1);
|
|
55
|
+
} else {
|
|
56
|
+
console.log(
|
|
57
|
+
`Validated ${assetContentFiles.length} asset file(s) ` +
|
|
58
|
+
`(.inputmap.json) in ${rootDir} — all OK`,
|
|
59
|
+
);
|
|
60
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { dirname, resolve } from 'node:path';
|
|
2
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
3
|
+
import { contributedKindModulePaths, registerKindModule } from '@volter/editor-project/manifest/kind-modules';
|
|
4
|
+
import { loadGameManifestFile } from '@volter/editor-project/manifest/load-file';
|
|
5
|
+
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Usage: npx tsx validate-manifest.ts [manifestPath...]
|
|
8
|
+
//
|
|
9
|
+
// Single source of truth for game-manifest validation, shipped IN the
|
|
10
|
+
// project template (mirrors validate-assets.ts) so every scaffolded game
|
|
11
|
+
// gets a working `npm run validate-manifest`. Validates each given
|
|
12
|
+
// `vgai.project.json` path via `loadGameManifestFile` (parse -> cross-field
|
|
13
|
+
// checks -> resolution) and prints the
|
|
14
|
+
// resolved adapter-root list (id, adapter identity) on success. Any failure
|
|
15
|
+
// prints a descriptive error and
|
|
16
|
+
// exits 1.
|
|
17
|
+
//
|
|
18
|
+
// Defaults to THIS template's own manifest (`vgai.project.json`, a sibling of
|
|
19
|
+
// this script) when no path is given, so `npm run validate-manifest` works
|
|
20
|
+
// out of the box both from the monorepo root and from a scaffolded project.
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
|
|
23
|
+
const defaultManifestPath = fileURLToPath(new URL('./vgai.project.json', import.meta.url));
|
|
24
|
+
|
|
25
|
+
const args = process.argv.slice(2);
|
|
26
|
+
const manifestPaths = args.length > 0 ? args.map((p) => resolve(p)) : [defaultManifestPath];
|
|
27
|
+
|
|
28
|
+
let hadError = false;
|
|
29
|
+
|
|
30
|
+
for (const manifestPath of manifestPaths) {
|
|
31
|
+
try {
|
|
32
|
+
// The project's own configuration kinds register first (ARCHITECTURE-CORE
|
|
33
|
+
// §The project model): this script runs under tsx, so it can evaluate them.
|
|
34
|
+
for (const modulePath of contributedKindModulePaths(dirname(manifestPath))) {
|
|
35
|
+
registerKindModule(await import(pathToFileURL(modulePath).href), modulePath);
|
|
36
|
+
}
|
|
37
|
+
const resolved = loadGameManifestFile(manifestPath);
|
|
38
|
+
console.log(
|
|
39
|
+
`${manifestPath}: OK — "${resolved.name}" v${resolved.version} (engine ${resolved.engine.version})`,
|
|
40
|
+
);
|
|
41
|
+
for (const root of resolved.roots) {
|
|
42
|
+
console.log(` root "${root.id}" adapter=${root.adapter.identity}`);
|
|
43
|
+
}
|
|
44
|
+
} catch (e) {
|
|
45
|
+
hadError = true;
|
|
46
|
+
console.error(`${manifestPath}: FAILED`);
|
|
47
|
+
console.error(` ${e instanceof Error ? e.message : String(e)}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (hadError) {
|
|
52
|
+
process.exit(1);
|
|
53
|
+
} else {
|
|
54
|
+
console.log(`Validated ${manifestPaths.length} manifest(s) — all OK`);
|
|
55
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This game's ADAPTER — the server side of the editor protocol.
|
|
3
|
+
*
|
|
4
|
+
* The editor is a universal CLIENT of a fixed protocol, and every game
|
|
5
|
+
* supplies its own adapter: a statically evaluable binding table mapping this
|
|
6
|
+
* project's regions to the libraries that serve them, its document table, and
|
|
7
|
+
* whatever it declares about itself. An adapter's SIZE measures this game's
|
|
8
|
+
* distance from native — which is why yours fits on a screen.
|
|
9
|
+
*
|
|
10
|
+
* Regions are derived mechanically from `vgai.project.json`'s `roots[]` — add
|
|
11
|
+
* a root to the manifest and its region appears here for free, with no edit to
|
|
12
|
+
* this file. `regionIncludes` states the PARAMETERS that derivation cannot
|
|
13
|
+
* produce: which source files each region owns beyond its entry's import reach.
|
|
14
|
+
* The rule stays selected; only the parameters are declared.
|
|
15
|
+
*
|
|
16
|
+
* WHY THAT TABLE IS NOT OPTIONAL. A file's region normally comes from which
|
|
17
|
+
* root's import closure reaches it — but reach is what the dev server's module
|
|
18
|
+
* graph holds AT THAT MOMENT, and a prefab opened through its own colocated
|
|
19
|
+
* story is reached from nothing. The editor stamps one source-id attribute per
|
|
20
|
+
* file (`userData-oid` for the R3F reconciler, `data-oid` for react-dom), and
|
|
21
|
+
* `data-oid` on a THREE object is not a degraded stamp: fiber pierces the dash,
|
|
22
|
+
* writes `object.data`, and THROWS the next time that object is applied to. So
|
|
23
|
+
* every directory of this game's R3F source says so here, once, and the answer
|
|
24
|
+
* stops depending on which module the browser asked for first. Add a component
|
|
25
|
+
* folder that renders R3F and add it to this list; the editor names the file
|
|
26
|
+
* and this fix (`OID001`/`OID003`) if you forget.
|
|
27
|
+
*
|
|
28
|
+
* What else IS stated below is this game's own document table — scenes and
|
|
29
|
+
* prefabs are its first two kinds; a page, a model, a bake are kinds the same
|
|
30
|
+
* way — because only
|
|
31
|
+
* this game knows where its scenes are declared:
|
|
32
|
+
*
|
|
33
|
+
* - `scenesFromEntrypointSelection` reads `src/world.tsx`'s module-level
|
|
34
|
+
* `const scenes = { … }` swap slot and answers one entry per key. That
|
|
35
|
+
* reference is LOAD-BEARING — the world itself mounts through it — so it
|
|
36
|
+
* cannot drift the way a `src/scenes/` folder convention can. Every entry
|
|
37
|
+
* becomes a viewport document in the editor, and `default` is the one open
|
|
38
|
+
* when the project opens.
|
|
39
|
+
* - `prefabsFromStories` reads the colocated portable-CSF stories: a
|
|
40
|
+
* component is a placeable prefab exactly when a story's `meta.component`
|
|
41
|
+
* names it.
|
|
42
|
+
*
|
|
43
|
+
* Drop `selection` (and name no region) for a world that mounts ONE
|
|
44
|
+
* composition with no swap slot; the finder then answers with the single-scene
|
|
45
|
+
* degenerate table instead.
|
|
46
|
+
*
|
|
47
|
+
* Unknown keys are rejected by name — this file is validated the moment it is
|
|
48
|
+
* evaluated, so a typo fails here rather than becoming silence in the editor.
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
import { defineAdapter } from '@volter/editor-project/adapter/adapter-module';
|
|
52
|
+
|
|
53
|
+
export default defineAdapter({
|
|
54
|
+
regionIncludes: {
|
|
55
|
+
// Every `.tsx` under these folders renders on the `world` root's `three`
|
|
56
|
+
// surface. Scoped to `.tsx` on purpose: the declaration places JSX modules
|
|
57
|
+
// on a reconciler, and the plain `.ts` beside them (a capability's math, a
|
|
58
|
+
// shared state helper an overlay also imports) renders nothing at all.
|
|
59
|
+
world: {
|
|
60
|
+
include: [
|
|
61
|
+
'src/components/**/*.tsx',
|
|
62
|
+
'src/prefabs/**/*.tsx',
|
|
63
|
+
'src/scenes/**/*.tsx',
|
|
64
|
+
'src/lib/reflections/**/*.tsx',
|
|
65
|
+
'src/lib/static-batch/**/*.tsx',
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
documents: {
|
|
70
|
+
find: [
|
|
71
|
+
{ finder: 'scenesFromEntrypointSelection', regions: ['world'], selection: 'scenes' },
|
|
72
|
+
{ finder: 'prefabsFromStories' },
|
|
73
|
+
],
|
|
74
|
+
default: 'main',
|
|
75
|
+
},
|
|
76
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./node_modules/@volter/editor-project/schemas/vgai-project.schema.json",
|
|
3
|
+
"manifestVersion": 2,
|
|
4
|
+
"name": "My Game",
|
|
5
|
+
"appId": "com.example.mygame",
|
|
6
|
+
"version": "0.1.0",
|
|
7
|
+
"engine": {
|
|
8
|
+
"version": "0.5.57"
|
|
9
|
+
},
|
|
10
|
+
"resolution": {
|
|
11
|
+
"width": 1280,
|
|
12
|
+
"height": 720
|
|
13
|
+
},
|
|
14
|
+
"configurations": [
|
|
15
|
+
{ "id": "web", "kind": "bundle", "script": "build", "args": ["--base", "./"] }
|
|
16
|
+
],
|
|
17
|
+
"roots": [
|
|
18
|
+
{
|
|
19
|
+
"id": "world",
|
|
20
|
+
"adapter": "three",
|
|
21
|
+
"entry": "src/world.tsx"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { defineConfig } from 'vite';
|
|
4
|
+
// Config-relative TS imports get bundled the same way — that is what lets the
|
|
5
|
+
// project's executable Zod schemas reach the build-time check below.
|
|
6
|
+
import { manifestEntryModulesPlugin } from './manifest-entry-modules-plugin';
|
|
7
|
+
import manifest from './vgai.project.json';
|
|
8
|
+
|
|
9
|
+
/** A vgai runtime package served as SOURCE, the way the editor serves it. */
|
|
10
|
+
const packageSource = (name: string) =>
|
|
11
|
+
path.join(path.dirname(createRequire(import.meta.url).resolve(`${name}/package.json`)), 'src');
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Run-4 dry-run friction #2 — auto-detect drvfs the SAME way the editor dev
|
|
15
|
+
* server does (`packages/editor/server/server-utils.ts`'s
|
|
16
|
+
* `resolveWatcherPollOptions`, and `dev.ts`'s own `projectOnDrvfs` check):
|
|
17
|
+
* on WSL, a project living on a Windows drive (`/mnt/<drive>/…`) never fires
|
|
18
|
+
* inotify, so without polling this standalone server (`npm run dev:standalone`)
|
|
19
|
+
* silently misses every external file edit — the same failure mode
|
|
20
|
+
* `dev.ts`'s comment documents for the editor. Before this fix, this file
|
|
21
|
+
* read ONLY `VGAI_WATCH_POLL`, so a project on drvfs polled in the editor
|
|
22
|
+
* but NOT in the standalone server — the two disagreed for no reason a
|
|
23
|
+
* developer could see.
|
|
24
|
+
*
|
|
25
|
+
* The editor's server utilities are not part of the project's package
|
|
26
|
+
* contract, so this
|
|
27
|
+
* duplicates the tiny drvfs check rather than reaching across a package
|
|
28
|
+
* boundary that doesn't exist here — same contract as the editor's own
|
|
29
|
+
* helper: `VGAI_WATCH_POLL=0` forces polling off anywhere, `=1`/`=<ms>`
|
|
30
|
+
* forces it on with that interval, unset auto-enables on a drvfs mount.
|
|
31
|
+
*/
|
|
32
|
+
function resolveWatchOption(): { usePolling: true; interval: number } | undefined {
|
|
33
|
+
const raw = process.env['VGAI_WATCH_POLL'];
|
|
34
|
+
if (raw !== undefined && raw !== '') {
|
|
35
|
+
if (raw === '0') return undefined;
|
|
36
|
+
const ms = Number(raw);
|
|
37
|
+
return { usePolling: true, interval: Number.isFinite(ms) && ms > 1 ? ms : 1000 };
|
|
38
|
+
}
|
|
39
|
+
const onDrvfs = process.platform === 'linux' && /^\/mnt\/[a-z]\//i.test(__dirname);
|
|
40
|
+
return onDrvfs ? { usePolling: true, interval: 1000 } : undefined;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* `VITE_ALLOWED_HOSTS` — `all` allows any Host header, a comma list allows
|
|
45
|
+
* exactly those, unset leaves Vite's own default alone.
|
|
46
|
+
*
|
|
47
|
+
* Returned as a SPREADABLE fragment rather than a value, because the "unset"
|
|
48
|
+
* case must omit the key entirely: this project compiles under
|
|
49
|
+
* `exactOptionalPropertyTypes`, where `allowedHosts: undefined` is a type
|
|
50
|
+
* error against `ServerOptions`'s optional `allowedHosts?: true | string[]`.
|
|
51
|
+
* Vite reads an absent key and an explicitly-undefined one identically, so
|
|
52
|
+
* the spread is behavior-preserving and the types now agree.
|
|
53
|
+
*/
|
|
54
|
+
function resolveAllowedHosts(): { allowedHosts?: true | string[] } {
|
|
55
|
+
const raw = process.env['VITE_ALLOWED_HOSTS'];
|
|
56
|
+
if (raw === 'all') return { allowedHosts: true };
|
|
57
|
+
const hosts = raw?.split(',').filter(Boolean);
|
|
58
|
+
return hosts ? { allowedHosts: hosts } : {};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export default defineConfig({
|
|
62
|
+
// Build-path validation (build-only): every
|
|
63
|
+
// registered data asset must still parse through its schema (the EXACT
|
|
64
|
+
// parse defineData runs at load), every `"file#key"` ref must resolve, and
|
|
65
|
+
// no `src/tools/` module may reach the shipped bundle (§4: tools are
|
|
66
|
+
// editor-only — never serve testers a build with dev/cheat surfaces).
|
|
67
|
+
// The AUTOMATIC JSX runtime, set here rather than left to tsconfig.
|
|
68
|
+
//
|
|
69
|
+
// This project has no `@vitejs/plugin-react`; Vite's built-in esbuild does
|
|
70
|
+
// the JSX transform, and it picks the runtime from the tsconfig nearest the
|
|
71
|
+
// FILE. That covers `src/**`, but the vgai runtime packages are served as
|
|
72
|
+
// source out of their installed directories (see the aliases below), where
|
|
73
|
+
// the project's tsconfig does not reach — so their `.tsx` (e.g.
|
|
74
|
+
// `src/lib/react-root/react-root-adapter.tsx (formerly engine)`) compiled with the CLASSIC runtime, emitting
|
|
75
|
+
// bare `React.createElement` calls into a module that never imports React.
|
|
76
|
+
// The scaffold's game page died on `ReferenceError: React is not defined`.
|
|
77
|
+
esbuild: { jsx: 'automatic' },
|
|
78
|
+
plugins: [manifestEntryModulesPlugin(manifest)],
|
|
79
|
+
resolve: {
|
|
80
|
+
alias: {
|
|
81
|
+
'@volter/editor-project': packageSource('@volter/editor-project'),
|
|
82
|
+
'@volter/threejs-runtime': packageSource('@volter/threejs-runtime'),
|
|
83
|
+
'@volter/game-runtime': packageSource('@volter/game-runtime'),
|
|
84
|
+
},
|
|
85
|
+
// react/react-dom dedupe (GH #123): the aliases above resolve
|
|
86
|
+
// at the SOURCE-LINKED runtime checkout, so when Vite bundles the
|
|
87
|
+
// game runtime's react bridge module (`src/react/world-state.tsx` — the
|
|
88
|
+
// `<WorldProvider>` / `useWorldState` HUD bridge), module resolution walks
|
|
89
|
+
// up from THAT file and finds the CHECKOUT's `node_modules/react` — a
|
|
90
|
+
// different physical copy (often a different version) than this
|
|
91
|
+
// project's own. Two Reacts in one page means the Context object
|
|
92
|
+
// `WorldProvider` creates is not the one this project's tree looks up
|
|
93
|
+
// via `useContext`, so the documented HUD pattern crashes with "Invalid
|
|
94
|
+
// hook call" / "Cannot read properties of null (reading 'useContext')"
|
|
95
|
+
// on first render.
|
|
96
|
+
// `dedupe` forces Vite to collapse both import paths onto a single
|
|
97
|
+
// physical copy. Same fix, same reasoning, already applied for the
|
|
98
|
+
// identical dual-instance failure in this repo's own root
|
|
99
|
+
// `vite.config.ts` and in `examples/r3f-first-party/vite.config.ts`.
|
|
100
|
+
// '@react-three/fiber' joined the list with the D24 R3F default world:
|
|
101
|
+
// `src/world.tsx`'s drei imports and the source-served
|
|
102
|
+
// `@volter/game-runtime/world3d-react` adapter must agree on ONE fiber instance, or
|
|
103
|
+
// drei's hooks can't see the adapter's R3F root context and the fiber
|
|
104
|
+
// crashes pre-commit with "R3F: Hooks can only be used within the
|
|
105
|
+
// Canvas component!" (standalone-page-only — the editor's own server
|
|
106
|
+
// already optimizes fiber uniformly; browser-lane proof: 37-template-default-
|
|
107
|
+
// world's standalone test).
|
|
108
|
+
dedupe: ['react', 'react-dom', 'three', '@react-three/fiber', 'pixi.js', '@pixi/react'],
|
|
109
|
+
},
|
|
110
|
+
optimizeDeps: {
|
|
111
|
+
// Top-level `esbuild.jsx` does not govern dependency optimization. The
|
|
112
|
+
// installed `@volter/game-runtime/world3d-react` entry contains TSX, so its cold
|
|
113
|
+
// prebundle needs the automatic runtime too or it emits a bare `React`.
|
|
114
|
+
esbuildOptions: { jsx: 'automatic' },
|
|
115
|
+
// Pre-bundle deps that are only reached through the dynamically imported
|
|
116
|
+
// example modules (or injected by the JSX transform, like the React
|
|
117
|
+
// runtimes) so Vite does not discover them at runtime, re-optimize, and
|
|
118
|
+
// hard-reload the standalone runtime the first time a game selects them —
|
|
119
|
+
// that mid-session reload resets `window.__vgaiScene`/the menu out from
|
|
120
|
+
// under whatever is driving the page (the dep-optimize-reload flake the
|
|
121
|
+
// 04 spec hit: the first cold select of `editor-tutorial` reloaded on
|
|
122
|
+
// `react/jsx-dev-runtime`). Verified against a cold scaffold: with these
|
|
123
|
+
// listed, a full sweep of the switcher games triggers zero page reloads.
|
|
124
|
+
include: [
|
|
125
|
+
// BARE `react`/`react-dom`, not just the jsx-runtime subpaths below.
|
|
126
|
+
// The engine is served as SOURCE to a scaffolded project, so Vite's
|
|
127
|
+
// startup dep scan does not walk far enough to discover engine modules
|
|
128
|
+
// that do `import { createElement } from 'react'`. Unoptimized, Vite
|
|
129
|
+
// serves React's raw CJS `index.js`, which has no named ESM exports, and
|
|
130
|
+
// the game page dies before boot with
|
|
131
|
+
// The requested module '/node_modules/react/index.js' does not
|
|
132
|
+
// provide an export named 'createElement'
|
|
133
|
+
// A fresh scaffold + a live bot run hit exactly this against
|
|
134
|
+
// the published 0.5.1 CLI: the shipped bot failed on its own
|
|
135
|
+
// scaffold. Listing them here forces the same pre-bundle pass as the
|
|
136
|
+
// subpaths, which also keeps them in ONE React instance (see `dedupe`
|
|
137
|
+
// above) rather than a second copy behind a different optimized chunk.
|
|
138
|
+
'react',
|
|
139
|
+
'react-dom',
|
|
140
|
+
'react/jsx-runtime',
|
|
141
|
+
'react/jsx-dev-runtime',
|
|
142
|
+
'react-dom/client',
|
|
143
|
+
// Reached through the generated manifest-entry module after startup;
|
|
144
|
+
// listing them prevents a first-boot optimizer reload.
|
|
145
|
+
'three',
|
|
146
|
+
'zod',
|
|
147
|
+
// The R3F default world: prebundle fiber and drei in the SAME
|
|
148
|
+
// optimizer pass so they share one fiber chunk — and so the
|
|
149
|
+
// source-served `@volter/game-runtime/world3d-react` adapter's bare fiber import
|
|
150
|
+
// rewrites to that same chunk. Split instances = drei hooks outside
|
|
151
|
+
// the adapter's root context (see the dedupe note above).
|
|
152
|
+
'@react-three/fiber',
|
|
153
|
+
'@react-three/drei',
|
|
154
|
+
],
|
|
155
|
+
// `@volter/game-runtime/runtime/mount-game` must stay SOURCE, or the adapter registry
|
|
156
|
+
// splits into two instances and nothing mounts.
|
|
157
|
+
//
|
|
158
|
+
// The registry is module-level state shared by `mount-game` (which reads
|
|
159
|
+
// it) and whatever registers a factory into it — for `dom` roots that is
|
|
160
|
+
// now `src/lib/react-root` (the `react-root` capability), which used to be
|
|
161
|
+
// the engine package's own `react/root-adapter`.
|
|
162
|
+
//
|
|
163
|
+
// The original split: that engine file was a `.tsx` the optimizer REFUSES
|
|
164
|
+
// ("Cannot optimize dependency"), so it was always served as source, while
|
|
165
|
+
// `mount-game` is a `.ts` under `node_modules` the optimizer happily
|
|
166
|
+
// pre-bundled — giving the two halves separate copies of the registry.
|
|
167
|
+
// `main.ts` registered into one and `mountGameFromManifest` read the
|
|
168
|
+
// other, so a default scaffold died with `root "ui" has no registered
|
|
169
|
+
// adapter factory` and rendered an empty page.
|
|
170
|
+
//
|
|
171
|
+
// Now that the registering file is PROJECT source, both it and `main.ts`
|
|
172
|
+
// resolve `@volter/game-runtime/runtime/mount-game` the same way, so the specific split
|
|
173
|
+
// above can no longer form. The exclusion stays anyway: it is what pins
|
|
174
|
+
// this registry to ONE instance regardless of which capability registers
|
|
175
|
+
// into it, and a project that swaps React for Vue here must not have to
|
|
176
|
+
// rediscover this. Cheap insurance against a failure whose symptom is a
|
|
177
|
+
// blank page.
|
|
178
|
+
exclude: ['@volter/game-runtime/runtime/mount-game'],
|
|
179
|
+
},
|
|
180
|
+
server: {
|
|
181
|
+
port: 5180,
|
|
182
|
+
// Fail loudly instead of silently rebinding to 5181+ if 5180 is still
|
|
183
|
+
// held by a lingering prior instance. Without this, a stale server left
|
|
184
|
+
// over from an earlier run answers the NEW server's readiness
|
|
185
|
+
// probe (which targets the fixed 5180 URL) while the real new instance
|
|
186
|
+
// sits on a different port nobody is talking to -- a hazard previously
|
|
187
|
+
// observed causing a browser-lane spec to hang waiting on the wrong server. See
|
|
188
|
+
// packages/editor/e2e/helpers/server.ts's `startStandaloneServer`.
|
|
189
|
+
strictPort: true,
|
|
190
|
+
// Poll for file changes instead of relying on inotify — AUTO-ENABLED on
|
|
191
|
+
// WSL when the project lives on a Windows drive (/mnt/c, drvfs: inotify
|
|
192
|
+
// never fires there), or edits to src/data/ or src/ generally silently never
|
|
193
|
+
// hot-reload into the running game.
|
|
194
|
+
// `VGAI_WATCH_POLL` is an explicit override (`=0` off anywhere, `=1`/
|
|
195
|
+
// `=<ms>` on anywhere) — see `resolveWatchOption` above, which the
|
|
196
|
+
// EDITOR dev server's own auto-detect mirrors, so one behavior covers
|
|
197
|
+
// both surfaces without the developer having to set anything. Safe to
|
|
198
|
+
// enable here: this standalone server only watches the project tree,
|
|
199
|
+
// which is small.
|
|
200
|
+
//
|
|
201
|
+
// VGAI_NO_WATCH=1 (set by a harness driving this page):
|
|
202
|
+
// disable watching entirely — a mid-run Vite reload resets
|
|
203
|
+
// `window.__vgai`/whatever is driving the standalone page out from under
|
|
204
|
+
// an in-flight run (the hollowstone reload-kills-the-run
|
|
205
|
+
// lesson). Mutually exclusive with the poll option (same `server.watch`
|
|
206
|
+
// key) — NO_WATCH wins when both would otherwise apply.
|
|
207
|
+
...(process.env['VGAI_NO_WATCH']
|
|
208
|
+
? { watch: null }
|
|
209
|
+
: // Watch source; never watch output: a build (`npm run build`,
|
|
210
|
+
// `vercel build`) rewriting dist/ or .vercel/output/ inside the
|
|
211
|
+
// project root would otherwise read as a source change and reload
|
|
212
|
+
// the page out from under an in-flight run.
|
|
213
|
+
{ watch: { ...resolveWatchOption(), ignored: ['**/.vercel/**', '**/dist/**'] } }),
|
|
214
|
+
...resolveAllowedHosts(),
|
|
215
|
+
},
|
|
216
|
+
build: {
|
|
217
|
+
target: 'es2022',
|
|
218
|
+
// The engine has several independently cacheable heavyweight domains. Keep
|
|
219
|
+
// them out of one 4+ MiB entry chunk so browsers can fetch/cache them in
|
|
220
|
+
// parallel and a change to game code does not invalidate every vendor byte.
|
|
221
|
+
// 2.25 MiB is the measured raw ceiling for the largest unavoidable vendor
|
|
222
|
+
// domain (Rapier); a game/engine chunk reaching it still warns.
|
|
223
|
+
chunkSizeWarningLimit: 2304,
|
|
224
|
+
rollupOptions: {
|
|
225
|
+
output: {
|
|
226
|
+
manualChunks(id) {
|
|
227
|
+
if (!id.includes('/node_modules/')) return undefined;
|
|
228
|
+
if (id.includes('/@dimforge/rapier3d')) return 'vendor-physics';
|
|
229
|
+
if (id.includes('/three/') || id.includes('/postprocessing/')) return 'vendor-three';
|
|
230
|
+
if (id.includes('/three.quarks/') || id.includes('/quarks.core/')) {
|
|
231
|
+
return 'vendor-particles';
|
|
232
|
+
}
|
|
233
|
+
if (id.includes('/recast-navigation')) return 'vendor-navigation';
|
|
234
|
+
if (id.includes('/react/') || id.includes('/react-dom/') || id.includes('/scheduler/')) {
|
|
235
|
+
return 'vendor-react';
|
|
236
|
+
}
|
|
237
|
+
if (id.includes('/tone/') || id.includes('/standardized-audio-context/')) {
|
|
238
|
+
return 'vendor-audio';
|
|
239
|
+
}
|
|
240
|
+
if (id.includes('/xstate/') || id.includes('/gsap/')) return 'vendor-animation';
|
|
241
|
+
if (id.includes('/colyseus') || id.includes('/@colyseus/')) return 'vendor-network';
|
|
242
|
+
return undefined;
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
});
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Dependencies
|
|
2
|
+
node_modules
|
|
3
|
+
|
|
4
|
+
# Build output
|
|
5
|
+
dist/
|
|
6
|
+
dist-server/
|
|
7
|
+
*.local
|
|
8
|
+
|
|
9
|
+
# Vite cache
|
|
10
|
+
.vite/
|
|
11
|
+
|
|
12
|
+
# The editor's machine-local state. The rest of .vgai/ (overlays, thumbnail,
|
|
13
|
+
# provenance, generations, assets) is project data and is committed.
|
|
14
|
+
.vgai/editor-state.json
|
|
15
|
+
.vgai/session.json
|
|
16
|
+
.vgai/collaboration.json
|
|
17
|
+
.vgai/workbench.json
|
|
18
|
+
.vgai/captures/
|
|
19
|
+
.vgai/tmp/
|
|
20
|
+
.vgai/last-run/
|
|
21
|
+
.vgai/prev-run/
|
|
22
|
+
.vgai/screenshots/
|
|
23
|
+
.vgai/recordings/
|
|
24
|
+
.vgai/check-idioms.json
|
|
25
|
+
.vgai/tripwire-gate.json
|
|
26
|
+
|
|
27
|
+
# Session and Play logs
|
|
28
|
+
logs/
|
|
29
|
+
*.jsonl
|
|
30
|
+
|
|
31
|
+
# Playwright / test output
|
|
32
|
+
test-results/
|
|
33
|
+
playwright-report/
|
|
34
|
+
.playwright-mcp/
|
|
35
|
+
|
|
36
|
+
# OS junk
|
|
37
|
+
.DS_Store
|
|
38
|
+
Thumbs.db
|
|
39
|
+
|
|
40
|
+
# Local env files
|
|
41
|
+
.env
|
|
42
|
+
.env.local
|
|
43
|
+
.env.*.local
|
|
44
|
+
|
|
45
|
+
# ztrack (added by ztrack init)
|
|
46
|
+
.volter/tracker/tracker.sqlite
|
|
47
|
+
.volter/tracker/tracker.sqlite-*
|
|
48
|
+
.volter/tracker/tracker.sqlite.lock
|
|
49
|
+
.volter/tracker/local-store.json
|
|
50
|
+
.volter/agent-dispatch/
|
|
51
|
+
.volter/github/
|
|
52
|
+
.volter/sync/
|
|
53
|
+
.volter/.ztrack-loop.json
|
|
54
|
+
.volter/.ztrack-loop-iter-*
|
|
55
|
+
.volter/.ztrack-loop-exempt-*
|
|
56
|
+
.volter/.ztrack-loop-capped.json
|
|
57
|
+
# ztrack also writes .volter/tracker/.gitignore covering the audit files below.
|
|
58
|
+
# Restated here because npm strips every nested .gitignore from a package
|
|
59
|
+
# tarball (the same fact `restorePackagedTemplateDotfiles` exists for), so a
|
|
60
|
+
# project scaffolded from the PACKAGED editor never receives that file.
|
|
61
|
+
.volter/tracker/.audit.jsonl
|
|
62
|
+
.volter/tracker/.audit-state.json
|
|
63
|
+
.volter/tracker/.audit.lock
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/* THE GAME EDITOR'S OWN SPLASH — what this product draws into the kit's opening cover
|
|
2
|
+
(`VgaiProduct.cover`, `packages/editor/workbench/src/vgaiCover.ts`).
|
|
3
|
+
|
|
4
|
+
IT SPELLS CLASSIC'S PALETTE, for the same reason the model editor's spells Blender's: the
|
|
5
|
+
cover paints BEFORE any theme extension is registered — the web workbench's first frame is
|
|
6
|
+
the page config's `initialColorTheme` — so a splash written against `--vscode-*` would wear
|
|
7
|
+
the workbench's default dark for exactly the seconds it exists instead of this product's
|
|
8
|
+
look. Classic is the editor's own Graphite and it ships no theme extension at all, so these
|
|
9
|
+
values come from `@vgai/editor-sdk`'s `widgets/theme.ts`, named beside them:
|
|
10
|
+
|
|
11
|
+
#1a1a1a GRAPHITE_BG[0] surface.shell — the window's outermost band
|
|
12
|
+
#242424 GRAPHITE_BG[1] surface.panel
|
|
13
|
+
#c5c8ce GRAPHITE_TEXT[1] content.primary
|
|
14
|
+
#9aa0a6 GRAPHITE_TEXT[2] content.muted
|
|
15
|
+
#333333 GRAPHITE_BORDER[1] boundary.default
|
|
16
|
+
#579eff GRAPHITE_ACCENT accent.default
|
|
17
|
+
|
|
18
|
+
Nothing here names a font: Classic is the workbench's own UI font, which is what this
|
|
19
|
+
product wearing no look extension means. */
|
|
20
|
+
|
|
21
|
+
.vgai-game-cover {
|
|
22
|
+
position: absolute;
|
|
23
|
+
inset: 0;
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
align-items: center;
|
|
27
|
+
justify-content: center;
|
|
28
|
+
gap: 10px;
|
|
29
|
+
background: #1a1a1a;
|
|
30
|
+
color: #c5c8ce;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* THE MARK: a play triangle inside the panel surface — the one glyph this product's whole
|
|
34
|
+
transport is built around. Inline SVG in the product's own markup, so there is no image to
|
|
35
|
+
fetch and the first frame is the first frame. */
|
|
36
|
+
.vgai-game-cover-mark {
|
|
37
|
+
width: 56px;
|
|
38
|
+
height: 56px;
|
|
39
|
+
opacity: 0.92;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.vgai-game-cover-title {
|
|
43
|
+
font-size: 26px;
|
|
44
|
+
font-weight: 600;
|
|
45
|
+
letter-spacing: 0.02em;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.vgai-game-cover-folder {
|
|
49
|
+
font-size: 12px;
|
|
50
|
+
color: #9aa0a6;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* Indeterminate ON PURPOSE: this product knows WHAT it is waiting for and not how far along it
|
|
54
|
+
is, and a bar that invented a percentage would be a lie a person can see. */
|
|
55
|
+
.vgai-game-cover-rail {
|
|
56
|
+
position: relative;
|
|
57
|
+
width: 220px;
|
|
58
|
+
height: 2px;
|
|
59
|
+
margin-top: 6px;
|
|
60
|
+
overflow: hidden;
|
|
61
|
+
background: #333333;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.vgai-game-cover-rail::after {
|
|
65
|
+
content: "";
|
|
66
|
+
position: absolute;
|
|
67
|
+
top: 0;
|
|
68
|
+
bottom: 0;
|
|
69
|
+
width: 40%;
|
|
70
|
+
background: #579eff;
|
|
71
|
+
animation: vgai-game-cover-travel 1.25s ease-in-out infinite;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@keyframes vgai-game-cover-travel {
|
|
75
|
+
0% { left: -40%; }
|
|
76
|
+
100% { left: 100%; }
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.vgai-game-cover-state {
|
|
80
|
+
font-size: 11px;
|
|
81
|
+
min-height: 14px;
|
|
82
|
+
color: #9aa0a6;
|
|
83
|
+
}
|