@volter/cyclotron 0.0.0-stage → 0.5.192
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 +6877 -0
- package/LICENSE +670 -0
- package/LICENSE-BLENDER +1409 -0
- package/LICENSE-MCP +21 -0
- package/NOTICE +20 -0
- package/README.md +91 -2
- package/dist/.vite/manifest.json +5432 -0
- package/dist/assets/BVHLoader-Dxn1IBPh.js +1 -0
- package/dist/assets/ColladaLoader-FWjhft-R.js +3 -0
- package/dist/assets/EntityModelDocument-KYkNDaSy.js +1 -0
- package/dist/assets/EnvironmentAssetDocument-Bn36-K03.js +1 -0
- package/dist/assets/FBXLoader-B6D0-2sM.js +1 -0
- package/dist/assets/InspectorObjectPreview-CQMs9zha.js +1 -0
- package/dist/assets/LineSegments2-D1_2s-N-.js +370 -0
- package/dist/assets/LiveModuleDocument-ye1IT-i6.js +2 -0
- package/dist/assets/LutAssetDocument-CouZZubV.js +1 -0
- package/dist/assets/MTLLoader-BwtVpZY2.js +2 -0
- package/dist/assets/ModelAssetDocument-SpE-ctRj.js +1 -0
- package/dist/assets/NonThreeAuthoringBootstrap-BAe_hy9t.js +1 -0
- package/dist/assets/OBJLoader-Cwe-BN99.js +5 -0
- package/dist/assets/Object3DDocumentToolbar-Bfm-RTS8.js +1 -0
- package/dist/assets/Object3DPreview-C4Ai3BNI.js +2 -0
- package/dist/assets/OrbitControls-Cn2q_IQK.js +1 -0
- package/dist/assets/PLYLoader-DOl6qb2a.js +2 -0
- package/dist/assets/QuarksAssetDocument-CqYjSnLo.js +2 -0
- package/dist/assets/RectAreaLightUniformsLib-CobhIWNK.js +1 -0
- package/dist/assets/STLLoader-B5YpfCGT.js +1 -0
- package/dist/assets/ShaderAssetDocument-BBT3ENGG.js +1 -0
- package/dist/assets/StageHost-qZAn6HZ3.js +1179 -0
- package/dist/assets/TDSLoader-BdQ2M2WU.js +1 -0
- package/dist/assets/ToolObject3DPreview-ClIcOYFk.js +1 -0
- package/dist/assets/ViewportShadingMenu-DmM-Odyl.js +1 -0
- package/dist/assets/animation-mixers.service-CsBdF1O3.js +1 -0
- package/dist/assets/animation-timeline.utility-DRfepAbV.js +1 -0
- package/dist/assets/anthropic-DwpKRVGM.svg +1 -0
- package/dist/assets/asset-preview-jtcCFntF.js +4 -0
- package/dist/assets/blender-display-shaders-BpnqnkG8.lut +0 -0
- package/dist/assets/blender-emscripten-engine-DEk9HdR1.js +2 -0
- package/dist/assets/blender-motion-worker-CtT2cV3V.js +1 -0
- package/dist/assets/blender-node-editor.document-Bi2T12bG.js +1 -0
- package/dist/assets/blender-properties-model-Yj49RcLm.js +1 -0
- package/dist/assets/blender-properties-tab-Dtap7p2U.js +3 -0
- package/dist/assets/blender-runtime-host-CMI7ldx1.js +17 -0
- package/dist/assets/blender-runtime.document-D0NB4iPR.js +13 -0
- package/dist/assets/blender-screenshot.menu-D0-n31XK.js +1 -0
- package/dist/assets/blender-timeline.document-_1xorgQ6.js +1 -0
- package/dist/assets/blender-uv-editor.document-Dki4Ui-b.js +1 -0
- package/dist/assets/blender-version.status-DlBU0k-r.js +1 -0
- package/dist/assets/blender-wali-engine-D2ymLooc.js +2 -0
- package/dist/assets/blender.command-BcpIwWTF.js +1 -0
- package/dist/assets/blender.environment-CG-pC7sk.js +1 -0
- package/dist/assets/blender.keymap-BmOBRY7p.js +1 -0
- package/dist/assets/blender.status-B1L-FZyU.js +1 -0
- package/dist/assets/blender.style-DaIh9SiA.js +1 -0
- package/dist/assets/city-EkhAOo5s.exr +0 -0
- package/dist/assets/clip-planes-CmZu3QTO.js +8 -0
- package/dist/assets/content-bounds-Dg9hT5Gp.js +85 -0
- package/dist/assets/courtyard-DqlebbpC.exr +0 -0
- package/dist/assets/forest-P_CQY3b_.exr +0 -0
- package/dist/assets/icon-BkiLD9ed.png +0 -0
- package/dist/assets/index-7vd2obXq.js +3 -0
- package/dist/assets/index-BP6wv2A0.js +5 -0
- package/dist/assets/index-BRLA7zdc.js +7 -0
- package/dist/assets/index-BxW3iIJI.js +952 -0
- package/dist/assets/index-CnvSS9lU.js +2 -0
- package/dist/assets/index-DYNMP0kE.js +1 -0
- package/dist/assets/index-Dz8qGBZc.js +13 -0
- package/dist/assets/index-Fv4R0cYr.js +1 -0
- package/dist/assets/index-f-MQ14bP.js +1 -0
- package/dist/assets/index-ux8XhRyW.js +1 -0
- package/dist/assets/interior-Bo_lba15.exr +0 -0
- package/dist/assets/live-mixers-B-bwLZ7c.js +1 -0
- package/dist/assets/model-inspection-jRplyguX.js +1 -0
- package/dist/assets/model.layout-BpZE1W9V.js +1 -0
- package/dist/assets/models.finder-jvcjSDNd.js +1 -0
- package/dist/assets/night-CvV4Gybt.exr +0 -0
- package/dist/assets/object3d-document-session-registry-_NnPOZmk.js +2 -0
- package/dist/assets/openai-DHNKzFtc.svg +1 -0
- package/dist/assets/play-mode-DljPhCBr.js +7208 -0
- package/dist/assets/png-encode.worker-E8zk28Vl.js +1 -0
- package/dist/assets/product-BxXXdFxI.css +1 -0
- package/dist/assets/product-Dcs9ogdH.js +14 -0
- package/dist/assets/properties-bone-constraints.inspector-sNOrOqmn.js +1 -0
- package/dist/assets/properties-bone.inspector-DrRAhkXh.js +1 -0
- package/dist/assets/properties-collection.inspector-D2bNhLqd.js +1 -0
- package/dist/assets/properties-constraints.inspector-CGTEqVBY.js +1 -0
- package/dist/assets/properties-data.inspector-nwiHdy4s.js +1 -0
- package/dist/assets/properties-material.inspector-CPW_Te19.js +1 -0
- package/dist/assets/properties-modifiers.inspector-CsIgxGPe.js +1 -0
- package/dist/assets/properties-object.inspector-Cwx4QctT.js +1 -0
- package/dist/assets/properties-output.inspector-CgChOQat.js +1 -0
- package/dist/assets/properties-particles.inspector-B8j59UFB.js +1 -0
- package/dist/assets/properties-physics.inspector-ComSsHn6.js +1 -0
- package/dist/assets/properties-render.inspector-BTqY-F5-.js +1 -0
- package/dist/assets/properties-scene.inspector-C-R7eu1o.js +1 -0
- package/dist/assets/properties-texture.inspector-CFmTTdHS.js +1 -0
- package/dist/assets/properties-view-layer.inspector-BvMUCTd_.js +1 -0
- package/dist/assets/properties-world.inspector-Dpb6EWk8.js +1 -0
- package/dist/assets/react-18-BDYozTc0.js +1 -0
- package/dist/assets/regions-DWeEBnE2.js +1 -0
- package/dist/assets/sculpt.layout-D-K5cLw6.js +1 -0
- package/dist/assets/session-C0OdhDD8.js +5393 -0
- package/dist/assets/shading.layout-CZZHKBer.js +1 -0
- package/dist/assets/sky-precompute-worker-CPGW9t_C.js +1 -0
- package/dist/assets/spark.module-GpLuSFtI.js +12120 -0
- package/dist/assets/stage-keyboard-Cjy_uKPi.js +1 -0
- package/dist/assets/stage-overlay-set-BV78wZfK.js +1 -0
- package/dist/assets/stage-presence-markers-CJVuC1Vh.js +1 -0
- package/dist/assets/stage-transform-tools-B21BRk-L.js +1 -0
- package/dist/assets/standard-viewport-dressing-zXbS_1ew.js +24 -0
- package/dist/assets/studio-CysTBGIb.exr +0 -0
- package/dist/assets/sunrise-Dj0psFrf.exr +0 -0
- package/dist/assets/sunset-Bw3x2Bot.exr +0 -0
- package/dist/assets/texture.layout-DASpHVht.js +1 -0
- package/dist/assets/three-integration.service-Bfy6rPSh.js +2 -0
- package/dist/assets/three.module-dk_BdrjN.js +3840 -0
- package/dist/assets/uv-editing.layout-A8RA-cbM.js +1 -0
- package/dist/assets/volter-sdk-BwU3fa6G.js +2358 -0
- package/dist/assets/volter-sdk-account-BlUZdl9g.js +1 -0
- package/dist/assets/volter-sdk-client-C_pM7u8F.js +1 -0
- package/dist/assets/volter-sdk-contributions-CyyzzsHD.js +1 -0
- package/dist/assets/volter-sdk-css-numeric-style-B404pZI8.js +1 -0
- package/dist/assets/volter-sdk-document-probe-DAjYzNFt.js +1 -0
- package/dist/assets/volter-sdk-editor-view-suHsPgK2.js +1 -0
- package/dist/assets/volter-sdk-host-58UWGff-.js +1 -0
- package/dist/assets/volter-sdk-http-transport.browser-VJksIuNN.js +1 -0
- package/dist/assets/volter-sdk-index-DQpzb0WD.js +1 -0
- package/dist/assets/volter-sdk-kit-CapabilityCoverageSection-C41uHAFx.js +1 -0
- package/dist/assets/volter-sdk-kit-account-client-BnrRHdPV.js +1 -0
- package/dist/assets/volter-sdk-kit-action-registry-Co0Hbo6i.js +1 -0
- package/dist/assets/volter-sdk-kit-active-product-7gseHcVz.js +1 -0
- package/dist/assets/volter-sdk-kit-active-project-Bmrlj0XL.js +1 -0
- package/dist/assets/volter-sdk-kit-adapter-editor-config-DqGAdw2_.js +1 -0
- package/dist/assets/volter-sdk-kit-adapter-observation-Y-Cr3BiX.js +1 -0
- package/dist/assets/volter-sdk-kit-animation-animation-clock-BYmBGV0P.js +1 -0
- package/dist/assets/volter-sdk-kit-animation-stage-transport-CY7-VoVp.js +1 -0
- package/dist/assets/volter-sdk-kit-api-assets-CRsoN16p.js +1 -0
- package/dist/assets/volter-sdk-kit-api-base-Dw9L5xJS.js +1 -0
- package/dist/assets/volter-sdk-kit-api-build-BapF1Knc.js +1 -0
- package/dist/assets/volter-sdk-kit-api-logs-ClNHtQ6y.js +1 -0
- package/dist/assets/volter-sdk-kit-api-project-identity-CLam3F93.js +1 -0
- package/dist/assets/volter-sdk-kit-api-project-open-D9BK6gAR.js +1 -0
- package/dist/assets/volter-sdk-kit-api-project-source-B4ZDf1-O.js +1 -0
- package/dist/assets/volter-sdk-kit-api-project-state-Q0gbhHMy.js +1 -0
- package/dist/assets/volter-sdk-kit-api-relay-CEs5T2gc.js +1 -0
- package/dist/assets/volter-sdk-kit-api-settings-DQhJJaCN.js +1 -0
- package/dist/assets/volter-sdk-kit-api-themes-CK0mpUed.js +1 -0
- package/dist/assets/volter-sdk-kit-api-worktrees-CZAcA-yg.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-capabilities-BH2tqp_X.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-compare-core-CO4rbaNo.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-editor-context-Crd2QR_x.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-events-Cfuds14S.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-inspector-actions-BOh3j-zP.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-selection-UhfuT50E.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-selection-viewer-registry-EWMtCoHo.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-thumbnails-CzMUys7a.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-viewers-Cf_KVYEv.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-import-jobs-CBNjRa8N.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-_i8-7mdV.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-backend-C20xqeUO.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-materialization-report-Dech0lQC.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-pack-manifest-pPS9qzPW.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-audio-preview-player-0wPh24zI.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-audio-waveform-BAY5AA4K.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-cloud-asset-client-DRc8hWEO.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-hosted-asset-materialization-BW7Al90A.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-image-view-scale-DNIgToKY.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-ledger-write-lock-DT7NxaAG.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-pixi-spritesheet-F0tDOvEn.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-preview-resource-lifetime-BvmHntAY.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-project-asset-commands-Dar362Gf.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-project-content-DAMV_NEZ.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-thumbnail-system-D9b6o-CL.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-active-adapter-BZ9hzFLG.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-active-systems-Cpbjxaoi.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-adapter-key-CNJDTSi4.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-authoring-asset-url-BnteIxrT.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-bootstrap-state-DMaoNrQW.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-boundary-authoring-adapter-DBAwTDuf.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-canvas-scene-guides-DWrvby2w.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-composite-authoring-adapter-C4-Kp99J.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-consumer-actions-CBBDoLEX.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-design-time-layers-DuxPqGrN.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-design-time-mount-registry-Div61xFj.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-edit-mode-authoring-lp1HgOZY.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-empty-project-authoring-DESJUilA.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-instance-source-menu-Yw8ilOpP.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-layered-pick-CnFv-JJ4.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-mounted-root-subjects-BG3VV4R2.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-no-authoring-adapter-DdsbWdzA.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-object3d-document-persistence-Cz3dTWOm.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-panel-authoring-CVVMuMz7.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-project-authoring-session-Dr97ZYKO.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-provenance-B5PenuKN.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-react-canvas-navigation-C-FLncdT.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-react-design-canvas-style-mWGHuhfC.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-react-story-board-BJdVcnM0.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-seam-evidence-kaO6Kcw3.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-selection-scope-MaPGsoaC.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-shell-document-ops-fzF3ajnE.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-story-board-chrome-fit-BmaeUc2Q.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-three-root-_Iik8VOw.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-viewport-tool-context-BMaVuFyB.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-viewport-tool-owner-D7gzEf8Y.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-world-session-state-DHU1uP-A.js +1 -0
- package/dist/assets/volter-sdk-kit-availability-tick-mnrfOjCO.js +1 -0
- package/dist/assets/volter-sdk-kit-bitmap-label-tfpyi7Ai.js +1 -0
- package/dist/assets/volter-sdk-kit-boot-routing-BHPc5GLo.js +1 -0
- package/dist/assets/volter-sdk-kit-breakpoint-state-Db1oqXJX.js +1 -0
- package/dist/assets/volter-sdk-kit-build-identity-BTQ1Xdpa.js +1 -0
- package/dist/assets/volter-sdk-kit-bytes-codec-DvWCmxma.js +1 -0
- package/dist/assets/volter-sdk-kit-cancellation-reason-BEjzQjCf.js +1 -0
- package/dist/assets/volter-sdk-kit-canvas-frames-BJEuXRrc.js +1 -0
- package/dist/assets/volter-sdk-kit-capture-camera-pose-YJBoQ23O.js +1 -0
- package/dist/assets/volter-sdk-kit-capture-size-EmnVLs8n.js +1 -0
- package/dist/assets/volter-sdk-kit-chrome-registry-Cs0k1OX1.js +1 -0
- package/dist/assets/volter-sdk-kit-chrome-slot-registry-BwDDbLjQ.js +1 -0
- package/dist/assets/volter-sdk-kit-collaboration-client-C2jtyYW3.js +1 -0
- package/dist/assets/volter-sdk-kit-collaboration-presence-D3UftauX.js +1 -0
- package/dist/assets/volter-sdk-kit-command-dispatch-BZWUjbx5.js +1 -0
- package/dist/assets/volter-sdk-kit-command-listener-CfFEgEYh.js +1 -0
- package/dist/assets/volter-sdk-kit-command-registry-CxqLDZ_t.js +1 -0
- package/dist/assets/volter-sdk-kit-component-board-registry-wPpm4hz2.js +1 -0
- package/dist/assets/volter-sdk-kit-component-states-registry-DUnoMxYg.js +1 -0
- package/dist/assets/volter-sdk-kit-components-AlignToolbar-kgkYRPYY.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ApplicationMenus-DSUoF1z8.js +1 -0
- package/dist/assets/volter-sdk-kit-components-AssetEditorShell-BsmfaAE9.js +1 -0
- package/dist/assets/volter-sdk-kit-components-AssetInspectorToolSection-GxYRyjBh.js +1 -0
- package/dist/assets/volter-sdk-kit-components-BoardRulers-XXJ7RCz4.js +1 -0
- package/dist/assets/volter-sdk-kit-components-CanvasAddNodeDialogs-DSg-5iRY.js +1 -0
- package/dist/assets/volter-sdk-kit-components-CanvasSceneViewport-C8suTPNd.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ChromeSlot-kgnOcXb4.js +1 -0
- package/dist/assets/volter-sdk-kit-components-CodeView-8_n22zvN.js +1 -0
- package/dist/assets/volter-sdk-kit-components-CompactInspectorShell-DkR_oNfI.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ConsolePanel-DiI4aQRP.js +1 -0
- package/dist/assets/volter-sdk-kit-components-GameplaySessionTimeline-BwzyAzUn.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectionProjection-Cz94_Rt7.js +1 -0
- package/dist/assets/volter-sdk-kit-components-Inspector-BPFGLp3d.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorCanvasPreview-CA1NTcqw.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorFieldsSection-BuwRGDJ0.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorStoriesSection-BsVaquIj.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorToolSection-Di0bMd01.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorTransformSection-_E4Y2mdm.js +1 -0
- package/dist/assets/volter-sdk-kit-components-LightExplorerPanel-4D34umvc.js +1 -0
- package/dist/assets/volter-sdk-kit-components-MediaProperties-BtpXA40W.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ProjectHeader-COVqavbg.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ReactCanvasControls-lvb140oy.js +1 -0
- package/dist/assets/volter-sdk-kit-components-RootSelectionOverlay-BWDtha0N.js +1 -0
- package/dist/assets/volter-sdk-kit-components-RootTextEditor-E99FydcX.js +1 -0
- package/dist/assets/volter-sdk-kit-components-SaveStatus-DolfRGCT.js +1 -0
- package/dist/assets/volter-sdk-kit-components-SurfaceStateOverlay-BHtKccFF.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ToolContributionSurfaces-D02jF-QD.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ToolHost-xY2N5GR3.js +1 -0
- package/dist/assets/volter-sdk-kit-components-Toolbar-XTw72bRl.js +1 -0
- package/dist/assets/volter-sdk-kit-components-TransientHint-LyCJ6M5h.js +1 -0
- package/dist/assets/volter-sdk-kit-components-VersionControlSection-CaUBgU7Q.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ViewportOverlaysMenu-DJm0Vtra.js +1 -0
- package/dist/assets/volter-sdk-kit-components-VolterLogo-7QJN2Aue.js +1 -0
- package/dist/assets/volter-sdk-kit-components-WorktreeSwitcher-Cm6EQlo9.js +1 -0
- package/dist/assets/volter-sdk-kit-components-account-documents-C1w8-N3m.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-documents-o5P9hniy.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-editor-persistence-DLsU0r1E.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-selection-section-BYEwJfLy.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-thumbnails-C-LgDd2_.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-AudioViewer-BR48_QX5.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-GenericJsonViewer-C9IP9LWM.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-ImageViewer-Dffdgv60.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-JsonAssetDocument-ChmgYQAP.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-OnlineAssetDetail-Bdpm--Jx.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-SourceAssetViewer-DdJX9xCd.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-SpritesheetSpriteView-DYXAuujE.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-VideoViewer-6xqrjETd.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-shader-source-cHZlxpZt.js +1 -0
- package/dist/assets/volter-sdk-kit-components-board-guides-7WFdaGRg.js +1 -0
- package/dist/assets/volter-sdk-kit-components-canvas-scene-hotkeys-CnxAX0SN.js +1 -0
- package/dist/assets/volter-sdk-kit-components-canvas-temporary-pivot-CtpM87Bn.js +1 -0
- package/dist/assets/volter-sdk-kit-components-core-utilities-CHVzLxwg.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-preview-section-B8TaQyFK.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-revert-label-BNzoXVNS.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-selection-BpPShgrU.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-stories-gating-DiH66VA6.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-transform-CmjteW7M.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-transform-subject-DrIk_jIn.js +1 -0
- package/dist/assets/volter-sdk-kit-components-kind-documents-BK3KZxJA.js +1 -0
- package/dist/assets/volter-sdk-kit-components-primitives-DraftColorInput-1nPD0Wmj.js +1 -0
- package/dist/assets/volter-sdk-kit-components-project-tool-documents-DJ4Ucdcc.js +1 -0
- package/dist/assets/volter-sdk-kit-components-scene-documents-D0S3Ip8u.js +1 -0
- package/dist/assets/volter-sdk-kit-components-status-contributions-CnD50KDE.js +1 -0
- package/dist/assets/volter-sdk-kit-components-tool-documents-CFPlSwI0.js +1 -0
- package/dist/assets/volter-sdk-kit-components-tool-schema-form-DDm00y0g.js +1 -0
- package/dist/assets/volter-sdk-kit-components-use-after-paint-DvCjTL4J.js +1 -0
- package/dist/assets/volter-sdk-kit-components-use-project-image-assets-C2yOGb4T.js +1 -0
- package/dist/assets/volter-sdk-kit-components-workspace-history-cK1qO4Ko.js +1 -0
- package/dist/assets/volter-sdk-kit-components-world-documents-Ca0Kvd6F.js +1 -0
- package/dist/assets/volter-sdk-kit-components-world-overlay-gestures-D9tS4EXa.js +1 -0
- package/dist/assets/volter-sdk-kit-composite-screenshot-DrxN3o4m.js +1 -0
- package/dist/assets/volter-sdk-kit-content-entry-source-registry-WrKmcDj4.js +1 -0
- package/dist/assets/volter-sdk-kit-contribution-surfaces-DkZ0OqGh.js +1 -0
- package/dist/assets/volter-sdk-kit-coverage-canvas-reveal-C8pETRas.js +1 -0
- package/dist/assets/volter-sdk-kit-coverage-design-time-surfaces-BEEt0Akm.js +1 -0
- package/dist/assets/volter-sdk-kit-coverage-ontology-invariants-Bxd6b-Me.js +1 -0
- package/dist/assets/volter-sdk-kit-coverage-session-vitals-C_KOh0vV.js +1 -0
- package/dist/assets/volter-sdk-kit-creation-site-registry-xToT1mgQ.js +1 -0
- package/dist/assets/volter-sdk-kit-delegate-harness-registry-BQ2Z3x4u.js +1 -0
- package/dist/assets/volter-sdk-kit-document-areas-BoFteXyg.js +1 -0
- package/dist/assets/volter-sdk-kit-document-context-registry-DCltdAwX.js +1 -0
- package/dist/assets/volter-sdk-kit-document-open-registry-nUKbpgXi.js +1 -0
- package/dist/assets/volter-sdk-kit-document-play-extension-LhA9YSwP.js +1 -0
- package/dist/assets/volter-sdk-kit-document-preview-source-BjKu56A5.js +1 -0
- package/dist/assets/volter-sdk-kit-document-renderer-session-CmO67Fns.js +1 -0
- package/dist/assets/volter-sdk-kit-document-stage-sessions-DhjElggV.js +1 -0
- package/dist/assets/volter-sdk-kit-document-viewports-JkYxkBPk.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-api-CkTONSnh.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-chrome-capture-Ryy6MFML.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-commands-A6xFbhNt.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-console-CfXqiRHJ.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-current-view-Blu4WXH4.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-document-probe-DLQ4_TGz.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-git-client-79qLddTa.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-hotkeys-Bf8x8pPR.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-lease-DnDA6DTK.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-lease-view-DnYNNuac.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-mode-TyppF_mm.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-notifications-DbJyIY8R.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-presence-CDht_mUS.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-presentation-activity-BAw4OBGu.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-presentation-notice-vPwlLZpU.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-runtime-BM50QyRE.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-server-response-BMR_IEYq.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-session-attribution-GlzM29Xi.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-session-mode-zTS3Hh7x.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-state-facets-iq5aCQYy.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-view-presentation-D-Zr2xsr.js +1 -0
- package/dist/assets/volter-sdk-kit-environment-images-BBbuCQN0.js +1 -0
- package/dist/assets/volter-sdk-kit-eyedropper-session-CVQTFAKM.js +1 -0
- package/dist/assets/volter-sdk-kit-files-file-provider-DnQAC1u2.js +1 -0
- package/dist/assets/volter-sdk-kit-files-project-files-CwASwqrX.js +1 -0
- package/dist/assets/volter-sdk-kit-finders-index-CclbaymG.js +1 -0
- package/dist/assets/volter-sdk-kit-finders-scenes-from-entrypoint-selection-B17U2yvo.js +1 -0
- package/dist/assets/volter-sdk-kit-frame-frame-parts-VVzfs78H.js +1 -0
- package/dist/assets/volter-sdk-kit-framed-document-capture-Cha1yjuL.js +1 -0
- package/dist/assets/volter-sdk-kit-game-surface-defaults-CsAR7C_G.js +1 -0
- package/dist/assets/volter-sdk-kit-gameplay-export-state-D2gCoh9n.js +1 -0
- package/dist/assets/volter-sdk-kit-gameplay-replay-DkkfYYwX.js +1 -0
- package/dist/assets/volter-sdk-kit-gameplay-session-time-Dht9eZ_4.js +1 -0
- package/dist/assets/volter-sdk-kit-gameplay-sessions-CCOOL4Eg.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-component-marks-CTw2KFgo.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-internals-D8gRo1WQ.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-kind-icon-D0OctdvL.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-menu-registry-DwA4Z2A9.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-node-rows-BGNi2kxs.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-panel-view-Bb1EP0Bk.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-projection-BtCzTzOY.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-row-media-CnHgcQM8.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-row-model-l7Qbe9Dk.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-rows-C20aO3up.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-walk-CE_FQf5c.js +1 -0
- package/dist/assets/volter-sdk-kit-history-editor-session-CS5IwxZx.js +1 -0
- package/dist/assets/volter-sdk-kit-history-history-commands-VU0Tf0lj.js +1 -0
- package/dist/assets/volter-sdk-kit-history-history-delegate-ZQwI-0MR.js +1 -0
- package/dist/assets/volter-sdk-kit-history-history-limit-notices-BrhHiRSY.js +1 -0
- package/dist/assets/volter-sdk-kit-history-history-service-BZ4AidfS.js +1 -0
- package/dist/assets/volter-sdk-kit-history-persistence-coordinator-Bpi3os_u.js +1 -0
- package/dist/assets/volter-sdk-kit-history-project-file-history-hDI70zmi.js +1 -0
- package/dist/assets/volter-sdk-kit-history-project-root-history-backends-BAfTGdrX.js +1 -0
- package/dist/assets/volter-sdk-kit-history-resource-registry-CGjyTLt-.js +1 -0
- package/dist/assets/volter-sdk-kit-history-snapshot-store-BgZ7Byks.js +1 -0
- package/dist/assets/volter-sdk-kit-history-source-history-backend-B25Z4lQz.js +1 -0
- package/dist/assets/volter-sdk-kit-hmr-registration-group-CiEUgAw2.js +1 -0
- package/dist/assets/volter-sdk-kit-hmr-stable-react-context-AymxVJvR.js +1 -0
- package/dist/assets/volter-sdk-kit-hotkeys-DlADec38.js +1 -0
- package/dist/assets/volter-sdk-kit-inference-diagnostics-GA9FnyOh.js +1 -0
- package/dist/assets/volter-sdk-kit-initial-project-zsKWa81T.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-active-subject-qZ5hTw90.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-active-surface-PhQ5uNsI.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-compose-subject-BgSCqJ-r.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-display-D8Nr6_ES.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-document-subject-DGznaZh-.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-game-subject-N0AxqX7G.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-model-hQetv0U9.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-node-media-fGRDtgJj.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-null-subject-ClNE9x2e.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-serialize-CpExrPTA.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-use-active-inspection-CRPvV320.js +1 -0
- package/dist/assets/volter-sdk-kit-inspector-presentation-BFfpxT4_.js +1 -0
- package/dist/assets/volter-sdk-kit-inspector-property-grouping-o7vgYhKg.js +1 -0
- package/dist/assets/volter-sdk-kit-inspector-section-registry-R5_0mSBl.js +1 -0
- package/dist/assets/volter-sdk-kit-instance-source-actions-B0lePqHO.js +1 -0
- package/dist/assets/volter-sdk-kit-js-heap-BpRVEyaI.js +1 -0
- package/dist/assets/volter-sdk-kit-key-actions-BEL1ou9N.js +1 -0
- package/dist/assets/volter-sdk-kit-keymap-presets-Qdpmq1MJ.js +1 -0
- package/dist/assets/volter-sdk-kit-layout-policy-CoLfPtzo.js +1 -0
- package/dist/assets/volter-sdk-kit-light-explorer-model-lqJF5X7X.js +1 -0
- package/dist/assets/volter-sdk-kit-live-canvas-frame-DdlhSZOw.js +1 -0
- package/dist/assets/volter-sdk-kit-live-document-MPCQkIxv.js +1 -0
- package/dist/assets/volter-sdk-kit-live-gesture-lock-BGiQikS-.js +1 -0
- package/dist/assets/volter-sdk-kit-live-seam-evidence-HsOKXOM-.js +1 -0
- package/dist/assets/volter-sdk-kit-live-session-registry-DPshp-zS.js +1 -0
- package/dist/assets/volter-sdk-kit-live-transition-SzISwcSc.js +1 -0
- package/dist/assets/volter-sdk-kit-manifest-project-BaQmD3cM.js +1 -0
- package/dist/assets/volter-sdk-kit-module-fetch-diagnosis-DVmHXvNS.js +1 -0
- package/dist/assets/volter-sdk-kit-mount-failure-report-Dk4LNPuk.js +1 -0
- package/dist/assets/volter-sdk-kit-native-selection-style-Bz3kzLsL.js +1 -0
- package/dist/assets/volter-sdk-kit-object3d-document-write-policy-yZfQc3Ch.js +1 -0
- package/dist/assets/volter-sdk-kit-packaged-runtime-Bofk4pL5.js +1 -0
- package/dist/assets/volter-sdk-kit-performance-profiler-BCQbvJC2.js +1 -0
- package/dist/assets/volter-sdk-kit-performance-sources-DmFnsOyy.js +1 -0
- package/dist/assets/volter-sdk-kit-photograph-notice-Ba8RTcKf.js +1 -0
- package/dist/assets/volter-sdk-kit-play-boot-phase-BtZNGfEm.js +1 -0
- package/dist/assets/volter-sdk-kit-play-camera-flight-DyDq7TW9.js +1 -0
- package/dist/assets/volter-sdk-kit-presentation-surface-CcUgETps.js +1 -0
- package/dist/assets/volter-sdk-kit-product-command-CTGtMf--.js +1 -0
- package/dist/assets/volter-sdk-kit-project-adapter-CncSm07i.js +1 -0
- package/dist/assets/volter-sdk-kit-project-asset-refresh-ff5GvzjI.js +1 -0
- package/dist/assets/volter-sdk-kit-project-asset-roots-2I55e0Tl.js +1 -0
- package/dist/assets/volter-sdk-kit-project-local-state-CoOxczZf.js +1 -0
- package/dist/assets/volter-sdk-kit-project-manager-CXwXszeS.js +1 -0
- package/dist/assets/volter-sdk-kit-project-module-changes-Df7bwGJA.js +1 -0
- package/dist/assets/volter-sdk-kit-project-module-split-CoOXmcMq.js +1 -0
- package/dist/assets/volter-sdk-kit-project-provenance-CsWz3dFr.js +1 -0
- package/dist/assets/volter-sdk-kit-project-ready-CEngokqw.js +1 -0
- package/dist/assets/volter-sdk-kit-project-shape-Bnk7IlEF.js +1 -0
- package/dist/assets/volter-sdk-kit-project-tools-CIrlsLd2.js +1 -0
- package/dist/assets/volter-sdk-kit-readiness-8iK1xUw-.js +1 -0
- package/dist/assets/volter-sdk-kit-renderer-resource-counts-BRlynwAB.js +1 -0
- package/dist/assets/volter-sdk-kit-reported-play-state-CdpNf7iS.js +1 -0
- package/dist/assets/volter-sdk-kit-resolve-contributed-command-CAPTMDEe.js +1 -0
- package/dist/assets/volter-sdk-kit-resolve-relative-specifier-CQavCIRh.js +1 -0
- package/dist/assets/volter-sdk-kit-retained-document-states-CkXz8CLe.js +1 -0
- package/dist/assets/volter-sdk-kit-scene-document-plan-C29w0uq_.js +1 -0
- package/dist/assets/volter-sdk-kit-scene-live-open-fodeYzCv.js +1 -0
- package/dist/assets/volter-sdk-kit-scoped-game-css-C2WRruBw.js +1 -0
- package/dist/assets/volter-sdk-kit-served-url-C17qOcC3.js +1 -0
- package/dist/assets/volter-sdk-kit-session-close-BKSX8DPi.js +1 -0
- package/dist/assets/volter-sdk-kit-session-tombstone-CQ1abA0T.js +1 -0
- package/dist/assets/volter-sdk-kit-settings-settings-provider-Drp8Ja5S.js +1 -0
- package/dist/assets/volter-sdk-kit-settings-store-DVv602rH.js +1 -0
- package/dist/assets/volter-sdk-kit-shell-store-Dwkc4LeK.js +1 -0
- package/dist/assets/volter-sdk-kit-shell-store-door-D6VAgShZ.js +1 -0
- package/dist/assets/volter-sdk-kit-source-conflict-BsgmQDuR.js +1 -0
- package/dist/assets/volter-sdk-kit-stage-context-CF3ATuJX.js +1 -0
- package/dist/assets/volter-sdk-kit-stage-invalidation-D1EKNjPS.js +1 -0
- package/dist/assets/volter-sdk-kit-stage-store-registry-DMqC8KJA.js +1 -0
- package/dist/assets/volter-sdk-kit-startup-failure-CJjXtSxT.js +1 -0
- package/dist/assets/volter-sdk-kit-state-report-deferral-BZ1Gll2x.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-host-files-storage-BeBBCrF4.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-http-storage-DMwE4aCU.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-index-85BJsCgw.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-mem-storage-Cp5EThww.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-path-lock-BEHmTQkG.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-paths-GkBBUtDn.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-StoryPreviewMount-D07t88Iu.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-compose-project-stories-BAw1haKj.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-prefabs-finder-EMDMwLXg.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-prefabs-from-stories-CEQekPVJ.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-project-story-regions-m9-rTkrt.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-scope-PLybjgWr.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-capture-B3uLpufo.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-declared-medium-D92bJmIo.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-discovery-DtaxRT_i.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-dom-runtime-BjR7PW3K.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-grouping-BibwARwc.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-presentation-DaweRLV-.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-registry-BuTw7T27.js +1 -0
- package/dist/assets/volter-sdk-kit-story-document-openers-COzuCirA.js +1 -0
- package/dist/assets/volter-sdk-kit-story-thumbnails-DsLqdnDq.js +1 -0
- package/dist/assets/volter-sdk-kit-surface-keyboard-RiClmb_a.js +1 -0
- package/dist/assets/volter-sdk-kit-surface-state-DjeLKyCd.js +1 -0
- package/dist/assets/volter-sdk-kit-system-seam-evidence-omzWuzNM.js +1 -0
- package/dist/assets/volter-sdk-kit-tab-census-C8mQ0l9z.js +1 -0
- package/dist/assets/volter-sdk-kit-tab-lifecycle-client-28DSypwI.js +1 -0
- package/dist/assets/volter-sdk-kit-theme-library-DCToyXQ0.js +1 -0
- package/dist/assets/volter-sdk-kit-theme-preference-Dc-_5b1n.js +1 -0
- package/dist/assets/volter-sdk-kit-three-viewport-presentation-1LxA9rSc.js +1 -0
- package/dist/assets/volter-sdk-kit-tool-contribution-play--JvesPkN.js +1 -0
- package/dist/assets/volter-sdk-kit-tool-loader-LTQw0aL4.js +1 -0
- package/dist/assets/volter-sdk-kit-transform-mode-request-BY9JxShG.js +1 -0
- package/dist/assets/volter-sdk-kit-transient-hint-CM0bpYj2.js +1 -0
- package/dist/assets/volter-sdk-kit-transport-strip-5bUygAkv.js +1 -0
- package/dist/assets/volter-sdk-kit-ui-source-file-region-resolver-CQMWmqhP.js +1 -0
- package/dist/assets/volter-sdk-kit-ui-source-inspect-CfayTFdC.js +1 -0
- package/dist/assets/volter-sdk-kit-ui-source-source-write-backend-DzQseyn4.js +1 -0
- package/dist/assets/volter-sdk-kit-ui-source-tier-source-write-backend-3NgYZbUE.js +1 -0
- package/dist/assets/volter-sdk-kit-user-local-state-BZf1C-cO.js +1 -0
- package/dist/assets/volter-sdk-kit-viewport-activation-timings-C-7ETz2q.js +1 -0
- package/dist/assets/volter-sdk-kit-viewport-editor-controls-f4cwlOWa.js +1 -0
- package/dist/assets/volter-sdk-kit-viewport-presentation-Il1TLCMT.js +1 -0
- package/dist/assets/volter-sdk-kit-viewport-surface-status-CXyJJGil.js +1 -0
- package/dist/assets/volter-sdk-kit-wait-until-D3i87ehY.js +1 -0
- package/dist/assets/volter-sdk-kit-worker-call-metrics-DAK8SW-7.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-areas-DxhakPE3.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-aux-commands-j3FyV7Rh.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-available-documents-DS5ZkDU4.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-core-utilities-BbuDHrHq.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-document-ids-Bm3qMqdx.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-document-registry-CfkdJLBO.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-document-restore-BqBMoUhE.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-host-commands-BC-mYI2s.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-persistence-gate-CN-Z9G7V.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-play-utilities-C5iNgpyt.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-presets-B6MKS0jx.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-regions-DZevxGmg.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-static-panels-CUVjETSY.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-status-registry-Cim_nGuV.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-storage-B9Vf07gg.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-style-yCExFcBd.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-utility-commands-C3a_TCq8.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-utility-registry-CmYswBtf.js +1 -0
- package/dist/assets/volter-sdk-kit-world-adoption-1Q7uBdLI.js +1 -0
- package/dist/assets/volter-sdk-kit-world-canvas-viewport-state-DaZzYmQU.js +1 -0
- package/dist/assets/volter-sdk-kit-world-document-routing-d9K0XNhN.js +1 -0
- package/dist/assets/volter-sdk-kit-world-pan-state-Bui5iuls.js +1 -0
- package/dist/assets/volter-sdk-kit-write-pipe-BMOSwffA.js +1 -0
- package/dist/assets/volter-sdk-layout-arrangements-DMEnPpvu.js +1 -0
- package/dist/assets/volter-sdk-layouts-DKIqaCd4.js +1 -0
- package/dist/assets/volter-sdk-selection-DM8JuNxQ.js +1 -0
- package/dist/assets/volter-sdk-session-command-table-G119qBvl.js +1 -0
- package/dist/assets/volter-sdk-session-editor-brand-DCHKPDxT.js +1 -0
- package/dist/assets/volter-sdk-session-editor-compatibility-B165I_B1.js +1 -0
- package/dist/assets/volter-sdk-session-editor-control-protocol-DwV-576_.js +1 -0
- package/dist/assets/volter-sdk-session-entrypoint-selection-readers-D88QrS-p.js +1 -0
- package/dist/assets/volter-sdk-session-game-css-scope-UkCRVi6L.js +1 -0
- package/dist/assets/volter-sdk-session-project-module-url-B49W1ltn.js +1 -0
- package/dist/assets/volter-sdk-session-relative-path-guard-Bk6lCH4Z.js +1 -0
- package/dist/assets/volter-sdk-session-tool-contribution-convention-QXzdw52f.js +1 -0
- package/dist/assets/volter-sdk-types-yKC1STwH.js +1 -0
- package/dist/assets/volter-sdk-views-CLPSu14j.js +1 -0
- package/dist/assets/volter-sdk-widgets-design-system-842xdooz.js +1 -0
- package/dist/assets/volter-sdk-widgets-editor-appearance-CoihkoDV.js +1 -0
- package/dist/assets/volter-sdk-widgets-editor-material-B4PbVOyD.js +1 -0
- package/dist/assets/volter-sdk-widgets-icon-set-registry-DzBkVTxs.js +1 -0
- package/dist/assets/volter-sdk-widgets-index-DRlEnpTD.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-AlignmentGrid-DKC7RjtF.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-AssetSlotPicker-CGyznIv-.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-BorderEditor-C74QsfSH.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ColorPicker-Czwcm_Fi.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-CurveEditor-Tij7lXpB.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-FilterEditor-CY45gPqT.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-FontPicker-BnGlrZAL.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-GradientEditor-uN_3-0Hz.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ScrubbableInput-kk1HfmXA.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ShadowEditor-OuqeQbiU.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-color-utils-BArl9zsg.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-curve-utils-C9xyDCr6.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-index-DCEai530.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-shared-CJSGOgSm.js +1 -0
- package/dist/assets/volter-sdk-widgets-interactive-edit-scope-6PmN1jnt.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Dialog-CnuLoAXX.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Fields-wFJZE-ci.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-List-DNL6_6To.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-StateSurface-Ih0mzWk7.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Surfaces-07TRSs2c.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Tabs-BKYsTo--.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Toolbar-BxOrCYIs.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Tree-BfYgX2pa.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-AnchoredMenu-BgHf-cYK.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Button-BUrjXrb8.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-ColorInput-BiRkft3M.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-DraftTextInput-B1KK1N_R.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-EditorIcon-CP8wT6d7.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-FormControls-ScHBA1o4.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-HoverPreview-CSS-glOy.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-JsonInput-C0TAVCVh.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Layout-CfLBd5Or.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Menu-C-Wd4QZF.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-NumberInput-sPbmhEcp.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Panel-CssQZiuw.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-SectionHeader-CCbuJZbe.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Text-CnnND9sI.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-ThemeRootPortal-DmN1LfqW.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Tooltip-D9uLAtac.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Vec3Input-CbkOGVMc.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-banner-tones-D4w8jWDq.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-clamp-to-viewport-DUn6HqOF.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-editor-icons-Dw62jIE_.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-panel-header-styles-BsPj50mE.js +1 -0
- package/dist/assets/volter-sdk-widgets-theme-CWND6gaS.js +1 -0
- package/dist/assets/volter-sdk-widgets-z-index-CAROhwsS.js +1 -0
- package/dist/assets/volter-shared-fontawesome-CU2fjApc.js +1 -0
- package/dist/assets/volter-shared-jsx-dev-runtime-CSjBZz-G.js +1 -0
- package/dist/assets/volter-shared-jsx-runtime-BfW1mwnX.js +1 -0
- package/dist/assets/volter-shared-react-B7X6VYnC.js +1 -0
- package/dist/assets/volter-shared-react-dom-DjKMQVYW.js +1 -0
- package/dist/assets/volter-shared-react-dom-client-76WJXUTi.js +1 -0
- package/dist/assets/volter-shared-three-wYzUWvH9.js +1 -0
- package/dist/assets/worker-D1j8wqVo.js +4 -0
- package/dist/volter-shared-react.json +10 -0
- package/dist/volter-shared-sdk.json +462 -0
- package/dist/volter-shared-three.json +3 -0
- package/dist-node/cli.js +21181 -0
- package/dist-node/create.js +14272 -0
- package/package.json +84 -4
- package/presets.mjs +2 -0
- package/src/contributions.d.ts +4 -0
- package/src/index.ts +10 -0
- package/starter/AGENTS.md +400 -0
- package/starter/CLAUDE.md +1 -0
- package/starter/cube.blend +0 -0
- package/starter/cube.py +82 -0
- package/starter/package.json +9 -0
- package/starter/race-state.ts +22 -0
- package/starter/track.blend +0 -0
- package/starter/track.play.ts +343 -0
- package/starter/track.py +324 -0
- package/starter/ui/game.stories.tsx +12 -0
- package/starter/ui/game.tsx +10 -0
- package/starter/ui/race-hud.tsx +29 -0
package/package.json
CHANGED
|
@@ -1,6 +1,86 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volter/cyclotron",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"author": "Volter AI, Inc.",
|
|
4
|
+
"version": "0.5.192",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"type": "module",
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=24"
|
|
11
|
+
},
|
|
12
|
+
"license": "AGPL-3.0-only AND GPL-3.0-or-later AND MIT",
|
|
13
|
+
"description": "A free, open-source game editor by VideoGame AI using Blender 5.2 compiled to WebAssembly, Code-OSS, three.js, TypeScript and React.",
|
|
14
|
+
"keywords": [
|
|
15
|
+
"blender",
|
|
16
|
+
"three.js",
|
|
17
|
+
"game editor",
|
|
18
|
+
"webassembly",
|
|
19
|
+
"code-oss",
|
|
20
|
+
"react",
|
|
21
|
+
"mcp",
|
|
22
|
+
"codex",
|
|
23
|
+
"claude-code"
|
|
24
|
+
],
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git+https://github.com/volter-ai/editor.git",
|
|
28
|
+
"directory": "packages/cyclotron"
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"README.md",
|
|
32
|
+
"dist",
|
|
33
|
+
"src",
|
|
34
|
+
"LICENSE",
|
|
35
|
+
"LICENSE-BLENDER",
|
|
36
|
+
"NOTICE",
|
|
37
|
+
"dist-node",
|
|
38
|
+
"presets.mjs",
|
|
39
|
+
"starter",
|
|
40
|
+
"LICENSE-MCP",
|
|
41
|
+
"BUNDLED_NOTICES"
|
|
42
|
+
],
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "vite build --config vite.config.ts",
|
|
45
|
+
"build:node": "node scripts/build-node.mjs",
|
|
46
|
+
"typecheck": "tsc -p tsconfig.node.json",
|
|
47
|
+
"test": "npm run build:node && node --test test/first-run.test.mjs"
|
|
48
|
+
},
|
|
49
|
+
"volter": {
|
|
50
|
+
"product": {
|
|
51
|
+
"entry": "./src/index.ts",
|
|
52
|
+
"displayName": "Volter Cyclotron",
|
|
53
|
+
"install": "npx @volter/cyclotron create my-game",
|
|
54
|
+
"colorTheme": "dark",
|
|
55
|
+
"upgrade": true,
|
|
56
|
+
"workbench": {
|
|
57
|
+
"darwin-arm64": {
|
|
58
|
+
"release": "cyclotron-f16dc165c0df-336473f30026-darwin-arm64",
|
|
59
|
+
"tarballSha256": "e7cbbbcd353057db1a0490888a3b300b3020d97f9fd8b4bb4aa7d6bfe9e36319"
|
|
60
|
+
},
|
|
61
|
+
"linux-x64": {
|
|
62
|
+
"release": "cyclotron-f16dc165c0df-336473f30026-linux-x64",
|
|
63
|
+
"tarballSha256": "54759a22c26ce8f6dfd0a155bbf0ee86013ca2d8b5f3648713d1cc1e313b6afc"
|
|
64
|
+
},
|
|
65
|
+
"win32-x64": {
|
|
66
|
+
"release": "cyclotron-f16dc165c0df-336473f30026-win32-x64",
|
|
67
|
+
"tarballSha256": "28e2995d1a28490be99064cce9898a98e95ff2f053279cf694e9df1f9393fa1a"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"dependencies": {
|
|
73
|
+
"@volter/editor-core": "0.5.192",
|
|
74
|
+
"@volter/editor-blender": "0.1.131",
|
|
75
|
+
"@volter/editor-threejs": "0.5.192",
|
|
76
|
+
"@volter/blender-engine": "0.1.129",
|
|
77
|
+
"@volter/editor-project": "0.5.192",
|
|
78
|
+
"@volter/editor-sdk": "0.5.192",
|
|
79
|
+
"@volter/editor-live": "0.5.192",
|
|
80
|
+
"@modelcontextprotocol/sdk": "1.32.1",
|
|
81
|
+
"undici": "7.29.1"
|
|
82
|
+
},
|
|
83
|
+
"bin": {
|
|
84
|
+
"cyclotron": "./dist-node/cli.js"
|
|
85
|
+
}
|
|
86
|
+
}
|
package/presets.mjs
ADDED
package/src/index.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import blender from 'volter:contributions/@volter/editor-blender';
|
|
2
|
+
import threejs from 'volter:contributions/@volter/editor-threejs';
|
|
3
|
+
import { product } from '@volter/editor-core/frame/product';
|
|
4
|
+
|
|
5
|
+
export const { mountVolter } = product({
|
|
6
|
+
id: 'cyclotron',
|
|
7
|
+
packages: { '@volter/editor-blender': blender, '@volter/editor-threejs': threejs },
|
|
8
|
+
look: 'blender',
|
|
9
|
+
workspace: 'model',
|
|
10
|
+
});
|
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
# Cyclotron project
|
|
2
|
+
|
|
3
|
+
This project opens in Volter Cyclotron. Blender runs in the editor's live
|
|
4
|
+
worker; the project-local `blender` MCP server connects to that same session.
|
|
5
|
+
|
|
6
|
+
## You are working in front of an audience
|
|
7
|
+
|
|
8
|
+
A person is watching this editor window the whole time you work, the way they
|
|
9
|
+
would watch someone build at a desk beside them. What they see on screen is your
|
|
10
|
+
work; a file written off screen or a long silent run of commands looks to them
|
|
11
|
+
like nothing is happening. Make every action legible to them:
|
|
12
|
+
|
|
13
|
+
- Show before you change. Open and frame the document you are about to edit
|
|
14
|
+
before reading packages, writing scripts or running Blender code against it.
|
|
15
|
+
- Build in small steps they can follow, and show each step's result before the
|
|
16
|
+
next. Never leave the starter placeholder on screen while the real work
|
|
17
|
+
happens elsewhere.
|
|
18
|
+
- Say what you are doing and why in Chat as you go, in a sentence they can read
|
|
19
|
+
while watching, and keep a readable plan with the current step beside the
|
|
20
|
+
work (see "Keep the work visible to a person watching").
|
|
21
|
+
- Check what they actually see: inspect editor captures for framing and for text
|
|
22
|
+
they can read at normal size, and fix what is cut off, tilted or cramped.
|
|
23
|
+
|
|
24
|
+
Research the project as you need it, but keep it short between visible steps;
|
|
25
|
+
the person should rarely wait more than a minute without seeing the work move.
|
|
26
|
+
|
|
27
|
+
### Your first minute
|
|
28
|
+
|
|
29
|
+
1. Say in Chat, in a sentence or two, what you are going to build.
|
|
30
|
+
2. Open the document you will work in and frame it:
|
|
31
|
+
`npx --no-install cyclotron camera --position x,y,z --target x,y,z`
|
|
32
|
+
(Blender metres, Z up). For a game in a models-only project, run
|
|
33
|
+
`npx --no-install cyclotron add-play` first, then `npm install`,
|
|
34
|
+
and reload the editor once as `add-play` says, before your first build step.
|
|
35
|
+
3. Put the `Build Notes` board beside the work with the plan and current step.
|
|
36
|
+
4. Check what the person sees:
|
|
37
|
+
`npx --no-install cyclotron capture --region document`.
|
|
38
|
+
|
|
39
|
+
Only then read packages or write scripts. The editor nudges you in Chat when
|
|
40
|
+
nothing visible has changed for a minute during your turn; treat that as the
|
|
41
|
+
person asking what is happening.
|
|
42
|
+
|
|
43
|
+
## Match the requested result
|
|
44
|
+
|
|
45
|
+
Read the request and inspect the project before choosing a workflow. Continue
|
|
46
|
+
in the current project and preserve user-authored content and manual edits.
|
|
47
|
+
Replace unused scaffold placeholders as the requested result calls for.
|
|
48
|
+
|
|
49
|
+
- **A model or asset:** author the requested object in `src/models/*.blend`.
|
|
50
|
+
Check its silhouette, proportions, topology, materials, dimensions and origin
|
|
51
|
+
from several useful angles. Keep its organization suitable for reuse.
|
|
52
|
+
- **A scene or environment:** compose the requested set of objects in a saved
|
|
53
|
+
`.blend` document. Address layout, scale relationships, materials, lighting
|
|
54
|
+
and the intended viewpoints; add cameras when the requested shot needs them.
|
|
55
|
+
A game-like reference can describe a static scene. Implement playable behavior
|
|
56
|
+
when the user asks for a working game or interactive mechanics.
|
|
57
|
+
- **An animation or interactive model:** implement the requested motion or
|
|
58
|
+
interaction and preview it in the editor. Inspect representative poses or
|
|
59
|
+
moments, and verify the requested controls and transitions.
|
|
60
|
+
- **A working game:** follow the gameplay workflow below, including live Play,
|
|
61
|
+
autoplay and manual controls. Match the mechanics and success/failure behavior
|
|
62
|
+
to the requested game.
|
|
63
|
+
- **UI or a HUD:** follow the React UI workflow below. A standalone screen needs
|
|
64
|
+
its own visual and interaction checks; UI attached to a game also needs checks
|
|
65
|
+
during Play.
|
|
66
|
+
- **An edit or repair:** inspect the existing result first and change the
|
|
67
|
+
requested parts. Capture its existing appearance before visual edits and use
|
|
68
|
+
it as a reference for continuity. For behavior-only, setup or diagnostic
|
|
69
|
+
work, focus on the requested behavior; the image-reference
|
|
70
|
+
steps apply when designing or changing appearance.
|
|
71
|
+
|
|
72
|
+
## Author in the live editor
|
|
73
|
+
|
|
74
|
+
Apply this section to models, scenes and the Blender parts of games.
|
|
75
|
+
|
|
76
|
+
- `src/models/*.blend` are the saved documents, including full scenes.
|
|
77
|
+
`*.py` beside them record how they were authored. Editing a script alone does
|
|
78
|
+
not update the document.
|
|
79
|
+
- Inspect the open scene with `get_scene_info` and `get_object_info` before
|
|
80
|
+
changing it. Rerunning a script that clears the scene replaces existing work.
|
|
81
|
+
Update scripts to preserve user edits and the `References` and `Notes` collections when
|
|
82
|
+
rebuilding procedural content.
|
|
83
|
+
- For procedural changes, update the relevant `.py` and execute it through
|
|
84
|
+
`execute_blender_code` in the project Blender MCP, running the file itself:
|
|
85
|
+
`exec(open("<project root>/src/models/<name>.py").read())`, with the root the
|
|
86
|
+
tool's description names (source files you just wrote are in place when the
|
|
87
|
+
call runs; keep scripts out of dot-directories, `node_modules`, `dist`,
|
|
88
|
+
`coverage` and `logs`, which are not copied in). Pass the user's request
|
|
89
|
+
verbatim as `user_prompt` when the tool asks for it. Use the existing editor
|
|
90
|
+
session rather than a separate Blender process. If the tool says Blender is
|
|
91
|
+
editing another document, wait and retry, then switch to another document
|
|
92
|
+
and back or run `editor.reloadPage()` in eval; do not build through `eval`
|
|
93
|
+
instead.
|
|
94
|
+
- Orient procedural closed-mesh faces outward and inspect their exterior in
|
|
95
|
+
Rendered shading before building many copies. Recalculate normals when needed.
|
|
96
|
+
- Verify object properties and inspect screenshots after meaningful changes.
|
|
97
|
+
The editor autosaves edits to the open `.blend`; confirm the saved file
|
|
98
|
+
before reporting completion. Arbitrary Python execution creates an undo step,
|
|
99
|
+
so prefer the inspection tools for reads.
|
|
100
|
+
- Blender coordinates are metres with Z up. The glTF exporter converts to Y up.
|
|
101
|
+
Preserve the existing script license headers.
|
|
102
|
+
- Blender mounts project files at the project's actual absolute filesystem
|
|
103
|
+
path. Use that path for image loads, saves and exports; `/project` is not an
|
|
104
|
+
alias. Derive it from the project folder rather than guessing a virtual root.
|
|
105
|
+
- For large scenes, build mesh data in batches and reuse meshes/materials.
|
|
106
|
+
Thousands of separate `bpy.ops` primitive and modifier calls can keep the
|
|
107
|
+
editor's Blender worker occupied for minutes. Inspect worker-call timing in
|
|
108
|
+
`status().tabs[].census` and let an active call finish before retrying it.
|
|
109
|
+
|
|
110
|
+
## Keep the work visible to a person watching
|
|
111
|
+
|
|
112
|
+
Apply this throughout authoring, not only when taking a screenshot or presenting
|
|
113
|
+
the finished result. Someone watching the editor should be able to see what you
|
|
114
|
+
are changing, why, and how far along it is.
|
|
115
|
+
|
|
116
|
+
- Before changing an asset, open its live document and frame the relevant work
|
|
117
|
+
at a useful scale and angle. Keep that view visible while editing source or
|
|
118
|
+
running Blender operations. After each meaningful change, show the result
|
|
119
|
+
before moving on; do not leave a placeholder, an unrelated document or an
|
|
120
|
+
obstructed view on screen while building elsewhere.
|
|
121
|
+
- Arrange the layout for the current task. Use a whole-object view and a detail
|
|
122
|
+
view when helpful, show the reference beside the work, and show React UI work
|
|
123
|
+
in the UI canvas. For gameplay, keep the running game and HUD visible during
|
|
124
|
+
observation. Use the model's View → Area → Vertical Split when two 3D views
|
|
125
|
+
help; each area has its own camera. Preserve deliberate human layout and
|
|
126
|
+
camera changes, and avoid needless switching or cramped panels.
|
|
127
|
+
- At the start of substantial work, store a concise plan as an internal Blender
|
|
128
|
+
Text data-block named `Build Notes`, with a fake user so it survives saving.
|
|
129
|
+
Keep a readable version visible beside the work, such as Text objects in a
|
|
130
|
+
`Notes` collection; an embedded text buffer alone is not visible in this
|
|
131
|
+
editor's 3D viewport. Include the current step, pending steps, and verified
|
|
132
|
+
completed steps with their completion times. Update both versions at real
|
|
133
|
+
milestones. Preserve these notes across procedural rebuilds and reopening.
|
|
134
|
+
Read the actual words in an editor capture at the normal viewing size;
|
|
135
|
+
adjust text size, framing and foreground/background contrast until legible.
|
|
136
|
+
- Keep authoring notes outside the intended shot and out of rendered/exported
|
|
137
|
+
assets and gameplay. Verify this in the actual output; `hide_render` alone
|
|
138
|
+
does not guarantee every export or Play path excludes an object.
|
|
139
|
+
- Before the first substantial build, inspect an editor capture that shows
|
|
140
|
+
the work, reference and readable current-step notes together. Creating a
|
|
141
|
+
reference or notes collection does not satisfy this if it is offscreen,
|
|
142
|
+
behind the camera or too small to read. When the target camera excludes
|
|
143
|
+
them, use a second authoring view for reference and notes, and keep the
|
|
144
|
+
working view framed on the asset. Recheck this arrangement before each
|
|
145
|
+
substantial build step; retain it while comparing the clean target shot.
|
|
146
|
+
- Prefer bounded visible milestones over one long opaque build. While an
|
|
147
|
+
operation is busy, leave the relevant work and its current-step note visible
|
|
148
|
+
and explain what is running. Inspect meaningful editor captures to check
|
|
149
|
+
framing, reference and note legibility; do not claim progress or completion
|
|
150
|
+
before the corresponding result is verified.
|
|
151
|
+
|
|
152
|
+
## Understand the references
|
|
153
|
+
|
|
154
|
+
- Inspect the supplied images, videos, written specifications, linked sources
|
|
155
|
+
and relevant existing project assets. Open the actual content rather than
|
|
156
|
+
inferring it from filenames or descriptions. Read written constraints and
|
|
157
|
+
inspect multiple useful moments in motion references. If a reference is
|
|
158
|
+
inaccessible, state that limitation rather than claiming to have inspected it.
|
|
159
|
+
- Derive appearance directly from the references: composition and camera,
|
|
160
|
+
silhouette and proportions, relative scale, palette, material finish,
|
|
161
|
+
texture detail, lighting and shadows, background, and UI placement and density.
|
|
162
|
+
Record a concise working interpretation for your own comparison; the user
|
|
163
|
+
should not need to spell out what is visible in their reference.
|
|
164
|
+
- Combine references according to their purpose: an image may define style,
|
|
165
|
+
a video motion and timing, and a specification mechanics or dimensions.
|
|
166
|
+
The user's explicit changes take precedence. Preserve unaffected details
|
|
167
|
+
from existing work. Ask only when conflicting references or a missing detail
|
|
168
|
+
materially prevent progress; use reasonable assumptions for other gaps.
|
|
169
|
+
- Requests for original or different characters and objects change their
|
|
170
|
+
identities, not the reference's art style. Preserve proportions, curvature,
|
|
171
|
+
material finish, surface detail and lighting unless the user requests a
|
|
172
|
+
different treatment. A stylized reference still has a specific visual style.
|
|
173
|
+
- Distinguish visible evidence from assumptions. A still image does not prove
|
|
174
|
+
controls, collisions, unseen geometry or gameplay rules. Infer appropriate
|
|
175
|
+
conventions from the requested kind of result, then verify implemented
|
|
176
|
+
behavior in the editor. Do not promise an unseen feature based on an image.
|
|
177
|
+
|
|
178
|
+
## Visual references
|
|
179
|
+
|
|
180
|
+
- Use supplied visual references for the requested model, scene, game or UI.
|
|
181
|
+
Reuse relevant existing references when continuing a project. Extract useful
|
|
182
|
+
frames from video references for side-by-side comparison. For new visual
|
|
183
|
+
work with no image reference and an available image-generation tool, generate a
|
|
184
|
+
reference from the user's requested appearance before building. If that tool
|
|
185
|
+
is unavailable, tell the user and continue using their description.
|
|
186
|
+
- Save references in the project's `references/` folder and add them to the
|
|
187
|
+
live Blender scene as named image Empties in a `References` collection.
|
|
188
|
+
Arrange them beside the work for comparison, with their viewport display
|
|
189
|
+
enabled. Pack the images into the `.blend` so they survive reopening;
|
|
190
|
+
preserve the original files too.
|
|
191
|
+
- Capture and inspect the visible editor document with
|
|
192
|
+
`editor.captureEditorChrome({ region: 'document' })` for side-by-side
|
|
193
|
+
comparisons. Image Empties are editor overlays and may be absent from render
|
|
194
|
+
captures such as `get_viewport_screenshot`. Use that MCP tool for clean 3D
|
|
195
|
+
views, and the editor capture to verify the reference is actually visible.
|
|
196
|
+
- Compare composition, silhouette, proportions, colors and materials after
|
|
197
|
+
meaningful visual changes, then correct visible differences. For UI work,
|
|
198
|
+
also open the reference as an editor image document alongside the UI canvas.
|
|
199
|
+
- Choose capture scope deliberately. A full editor-page capture shows authoring,
|
|
200
|
+
chat and panels; a game comparison needs the composed 3D scene and React UI
|
|
201
|
+
in `editor.captureEditorChrome({ region: 'play' })` when using Model Play.
|
|
202
|
+
That capture uses the live Play frame and includes its React HUD; a document
|
|
203
|
+
capture also includes the surrounding authoring viewport. A raw game-canvas
|
|
204
|
+
capture omits the React UI.
|
|
205
|
+
Label these separately when saving evidence. Editor chrome capture reconstructs
|
|
206
|
+
DOM and canvas pixels; it is not a browser/CDP or desktop screenshot.
|
|
207
|
+
|
|
208
|
+
## Establish the visual match first
|
|
209
|
+
|
|
210
|
+
For new visual work, match the requested view before adding behavior. For a new
|
|
211
|
+
game, this first pass is the authored 3D scene and React UI, composed as a static
|
|
212
|
+
game screenshot; movement, scoring, opponents and item logic come afterward.
|
|
213
|
+
For a behavior-only repair, preserve the established appearance.
|
|
214
|
+
|
|
215
|
+
- Match the reference's aspect ratio, crop, camera angle, perspective and object
|
|
216
|
+
scale. Capture the actual composed scene and UI at comparable resolution;
|
|
217
|
+
editor chrome and unrelated panels are outside this comparison. Use the real
|
|
218
|
+
3D model and React components, keeping the reference beside the scene.
|
|
219
|
+
For Model Play, declare the reference dimensions in the project's `resolution`
|
|
220
|
+
so the game frame and camera keep that aspect ratio as editor panels resize.
|
|
221
|
+
- Seek the closest practical pixel and color match. Compare large shapes and
|
|
222
|
+
their screen positions first, then regional colors, brightness, contrast,
|
|
223
|
+
saturation, shadows and highlights, and finally texture and small details.
|
|
224
|
+
Use aligned overlays, difference images or sampled colors when available,
|
|
225
|
+
alongside direct visual inspection. Account for explicitly requested changes.
|
|
226
|
+
Judge the rendered silhouettes, curvature, proportions and surface detail,
|
|
227
|
+
as well as which objects are present. Preserve the reference's fidelity
|
|
228
|
+
unless the user requests a different treatment; a simpler interpretation
|
|
229
|
+
does not resolve a visible mismatch.
|
|
230
|
+
- Compare images in a consistent display color space. Inspect texture color
|
|
231
|
+
spaces, renderer output, exposure and tone mapping when colors differ;
|
|
232
|
+
do not compensate for a rendering-pipeline defect by repainting the assets.
|
|
233
|
+
- Capture, compare and revise the model, materials, lighting, camera and UI
|
|
234
|
+
until visible mismatches are resolved before implementing gameplay. If an
|
|
235
|
+
editor or renderer limitation prevents the match, identify it and report the
|
|
236
|
+
blocker instead of burying the mismatch under additional mechanics. Recheck
|
|
237
|
+
the reference view after behavior is added.
|
|
238
|
+
- Before moving to gameplay, save and inspect a comparison of the reference
|
|
239
|
+
and static scene with React UI at matching crop, aspect ratio and resolution.
|
|
240
|
+
Track capture, comparison and visual match as separate results. Saving a
|
|
241
|
+
comparison proves the images were captured; it does not prove a match.
|
|
242
|
+
Record the largest remaining differences in shape, screen position, regional
|
|
243
|
+
color, lighting and UI scale in Build Notes, with actual observations rather
|
|
244
|
+
than a list of categories. Use pixel measurements for representative regions
|
|
245
|
+
and landmark positions when available. Resolve those differences or
|
|
246
|
+
report the specific rendering limitation before checking off the visual pass.
|
|
247
|
+
Support a claimed renderer limitation with a focused comparison or reproduction.
|
|
248
|
+
Continue correcting authorable geometry, framing, materials and UI differences.
|
|
249
|
+
Keep this milestone pending while those differences remain. Continue the
|
|
250
|
+
visual work before adding gameplay instead of checking off object coverage
|
|
251
|
+
as a completed visual match. Calling the result a stylized recreation or
|
|
252
|
+
simpler interpretation does not satisfy a request to match the reference.
|
|
253
|
+
|
|
254
|
+
## Working games
|
|
255
|
+
|
|
256
|
+
- Complete the visual pass above before implementing gameplay for a new game.
|
|
257
|
+
- Implement and run the game inside the editor. Continue an existing game's
|
|
258
|
+
runtime and source organization. For a new model-based game,
|
|
259
|
+
use the `playable` template; in an existing models-only project run
|
|
260
|
+
`npx --no-install cyclotron add-play` (it never overwrites files).
|
|
261
|
+
Its `src/models/*.play.ts` scripts implement
|
|
262
|
+
gameplay; the Play control runs them on a detached copy of the model.
|
|
263
|
+
When extending an existing model-based project, declare `@volter/editor-model-play`
|
|
264
|
+
and the React/UI dependencies with compatible project versions, and add the
|
|
265
|
+
UI root as needed. Preserve its models, source and settings.
|
|
266
|
+
- Register your bot with `play.autoplay(controller)`; never bind autoplay to a
|
|
267
|
+
game key or start it yourself; the person turns it on in the Game panel (or
|
|
268
|
+
you, with `play autoplay on`). The controller is a plain function called
|
|
269
|
+
before each `update` while autoplay is on, given `{ dt, simT, tick, keys }`
|
|
270
|
+
(`keys` are the person's), and returns the `KeyboardEvent.code` keys it holds
|
|
271
|
+
for that update; they are merged into `keys`, so the bot drives through the
|
|
272
|
+
same movement, collision and scoring code as manual play. Autoplay is off at
|
|
273
|
+
every Play and Restart, and any key or click in the game hands control back
|
|
274
|
+
to the person (`autoplay-off` with `by: 'takeover'` in the play log).
|
|
275
|
+
- Keep a gameplay log while the game runs; without it, autoplay is a black box
|
|
276
|
+
and a final position or screenshot cannot tell you what went wrong. Use the
|
|
277
|
+
play script's built-in log, `play.log(kind, facts)`: it stamps each entry
|
|
278
|
+
with simulation time and tick, keeps a bounded history, and records Play
|
|
279
|
+
start, stop, script reloads and script errors itself. Give each entry a kind
|
|
280
|
+
and the facts needed to explain it: phase changes and
|
|
281
|
+
restarts; autoplay's decisions and the inputs it held; manual inputs that
|
|
282
|
+
start an action; contacts that matter (landing on, leaving or being pushed
|
|
283
|
+
by a surface, by object name); checkpoints, pickups, score and inventory
|
|
284
|
+
changes; deaths, failures and finishes with their cause and position. Log
|
|
285
|
+
transitions rather than every frame, so a full run stays readable.
|
|
286
|
+
- Read the gameplay log with `npx --no-install cyclotron play-log
|
|
287
|
+
[--since <simTime>] [--kind <kind>]` during and after each autoplay or manual
|
|
288
|
+
run, and explain what happened from it before
|
|
289
|
+
changing code: where autoplay stalled or died and why, and whether that is a
|
|
290
|
+
level, physics or controller problem. `console.log` lines do not reach the
|
|
291
|
+
session's console feed (only warnings and errors do), so the play log is
|
|
292
|
+
what you can read back. Keep logging read-only: it must not change
|
|
293
|
+
timing, inputs or game state.
|
|
294
|
+
- Run autoplay in Play (`play autoplay on`) and observe representative actions, objectives,
|
|
295
|
+
progression and any relevant failure/restart behavior. Exercise manual
|
|
296
|
+
controls too. Inspect runtime errors and game state alongside screenshots;
|
|
297
|
+
a still image alone does not verify gameplay.
|
|
298
|
+
- Observe a complete session through every relevant participant's terminal
|
|
299
|
+
state. Check finish, failure and post-finish clearance as appropriate. Use
|
|
300
|
+
the actual Restart control and complete another session; reset every entity's
|
|
301
|
+
position, movement, progression, inventory, effects and terminal state.
|
|
302
|
+
Stop/Play alone does not verify the game's restart behavior.
|
|
303
|
+
- During active gameplay, verify pause freezes simulation time, entity state,
|
|
304
|
+
effects and inventory. Gameplay input while paused must preserve that state;
|
|
305
|
+
resume must restore normal controls. Presenting another editor document can
|
|
306
|
+
stop Model Play and does not verify an in-game pause.
|
|
307
|
+
- Verify manual controls through representative continuous play, including
|
|
308
|
+
turning, braking and the game's special actions. Inspect movement while a
|
|
309
|
+
key is held when testing sustained actions such as reverse; a stopped sample
|
|
310
|
+
after release is insufficient. Use public controls and observational game
|
|
311
|
+
state, rather than private state writes that skip the behavior being checked.
|
|
312
|
+
- Make meaningful race or game state observable through the live HUD or a
|
|
313
|
+
read-only public inspection surface: phase, simulation time, participant
|
|
314
|
+
positions and signed movement, progression, terminal states and inventory
|
|
315
|
+
as applicable. Observation must not bypass normal controls or mutate state.
|
|
316
|
+
- Capture and inspect the running game at the start, during representative
|
|
317
|
+
actions and after gameplay or visual changes. Include the HUD in these
|
|
318
|
+
captures using the visible editor document. Fix observed problems, play again
|
|
319
|
+
and report what was actually observed.
|
|
320
|
+
|
|
321
|
+
## React UI
|
|
322
|
+
|
|
323
|
+
- Build HUDs, menus and screens as React components in `src/ui/`. A game's
|
|
324
|
+
DOM root is `src/ui/game.tsx`; the playable template includes the required
|
|
325
|
+
React/UI tools and manifest root. Existing projects need `react`, `react-dom`,
|
|
326
|
+
`@volter/editor-ui` and `@volter/editor-react`, with compatible project versions.
|
|
327
|
+
Declare the UI story region in `volter.adapter.ts` (the playable template uses
|
|
328
|
+
`regionIncludes.ui` for `src/ui/**/*.tsx`). Preserve the project's other content.
|
|
329
|
+
- Add `.stories.tsx` states and open them in the editor's UI canvas/component
|
|
330
|
+
board. Show representative states such as normal, empty, error and active
|
|
331
|
+
states as appropriate, and inspect their screenshots and interactions.
|
|
332
|
+
Reveal the board through the ordinary eval door with
|
|
333
|
+
`editor.present({ version: 1, document: { kind: 'workspace', id: 'workspace:ui-components' } })`.
|
|
334
|
+
The board becomes available after UI story discovery; read console errors if
|
|
335
|
+
it is missing. A declared UI root alone does not supply component stories.
|
|
336
|
+
- Give the intended initial state an explicit default and inspect opening the
|
|
337
|
+
canvas without selecting a story. Keep previews deterministic and isolated:
|
|
338
|
+
a timer in one mounted preview must not advance it into another state or
|
|
339
|
+
change another preview. Inspect each selected state's pixels and interactions,
|
|
340
|
+
and keep its entities, inventory and results consistent with the real game.
|
|
341
|
+
- For a game HUD, verify the same components over the running game and check
|
|
342
|
+
they reflect live game state. For standalone UI, verify its own interactions
|
|
343
|
+
and state changes in the UI canvas.
|
|
344
|
+
|
|
345
|
+
## Session controls
|
|
346
|
+
|
|
347
|
+
Drive this editor through its public SDK/CLI and project Blender MCP. Keep the
|
|
348
|
+
existing editor session and native Chat; private browser automation or a separate
|
|
349
|
+
browser profile would bypass the user's actual authoring experience.
|
|
350
|
+
Work in the authored project's source and assets. Diagnose and report failures
|
|
351
|
+
in editor/runtime dependencies to their owning repository; preserve installed
|
|
352
|
+
packages rather than patching them inside the project.
|
|
353
|
+
|
|
354
|
+
Source, manifest and reference edits update the running editor through its normal
|
|
355
|
+
watchers. Inspect the current document and console before attempting recovery.
|
|
356
|
+
Open model documents with `editor.open("model:src/models/example.blend")`.
|
|
357
|
+
Blender files are Model documents: use their `model:` document IDs with
|
|
358
|
+
`editor.open`. `openAsset` opens generic assets such as images and audio; supplying
|
|
359
|
+
`"model"` as its kind does not turn a `.blend` into the live Blender document.
|
|
360
|
+
Closing the entire editor also ends its hosted AI runtime and can abort your own
|
|
361
|
+
turn. Recover the document or page through its scoped controls, and preserve the
|
|
362
|
+
active conversation when diagnosing a problem.
|
|
363
|
+
Do not call `editor.reloadPage()` just to reveal new files, UI boards, references
|
|
364
|
+
or gameplay scripts. A page reload interrupts the visible editor and its chat;
|
|
365
|
+
reserve it for an explicitly requested reload or a diagnosed problem that needs it.
|
|
366
|
+
|
|
367
|
+
The project-local CLI is `npx --no-install cyclotron`: `status`,
|
|
368
|
+
`console`, `eval --list`, and `chat status` expose the current editor and AI
|
|
369
|
+
session. `chat send "your prompt"` sends to the same visible conversation;
|
|
370
|
+
`chat stop` stops its current turn. Inspect the transcript and pending requests
|
|
371
|
+
for the outcome. A dispatch receipt does not mean an edit has completed.
|
|
372
|
+
In `eval`, explicitly `return` any result you need to inspect; for example,
|
|
373
|
+
`eval 'return await editor.currentView()'`. Read `eval --list` for available
|
|
374
|
+
objects rather than assuming globals from another tool runner.
|
|
375
|
+
If the project uses a Volter World, run app and test commands through that World.
|
|
376
|
+
|
|
377
|
+
Common commands, all through `npx --no-install cyclotron`:
|
|
378
|
+
`camera --position x,y,z --target x,y,z [--fov n]` poses the open document's
|
|
379
|
+
view in Blender metres, Z up. In eval, `editor.present({ version: 1, viewport:
|
|
380
|
+
{ camera } })` takes stage space, Y up: a Blender point (x, y, z) is
|
|
381
|
+
`{ x, y: z, z: -y }`, so prefer the `camera` command, which converts for you.
|
|
382
|
+
`capture --region document|play [--out file.png [--force]]` saves what the person sees (default under
|
|
383
|
+
`.volter/captures/`); `add-play` makes a models project playable; `play-log`
|
|
384
|
+
reads the running game's log. The Game panel's controls, each printing its state:
|
|
385
|
+
`play autoplay on|off` switches the game's bot (the Game panel's Autoplay toggle);
|
|
386
|
+
`play pause` holds the game (no `update` calls; its clock stops);
|
|
387
|
+
`play resume` lets it run again;
|
|
388
|
+
`play step [count]` runs one 1/60 s update of a paused game per count;
|
|
389
|
+
`play speed 0.25|0.5|1|2|4` scales the `dt` the script is handed;
|
|
390
|
+
`play restart` begins again on a fresh copy of the model, the clock at zero;
|
|
391
|
+
`play mode game|movie` swaps the bottom area between the Game panel and the Timeline.
|
|
392
|
+
In a play script, recolour or fade an object with
|
|
393
|
+
`play.tint(object, color)` and `play.setOpacity(object, value)`: Blender meshes
|
|
394
|
+
carry one material per slot and the presenter reapplies its own materials, so
|
|
395
|
+
editing `mesh.material.color` does not show.
|
|
396
|
+
|
|
397
|
+
Keep the project clean. Once the real document exists, remove the template
|
|
398
|
+
placeholder (`cube.blend`, `cube.py`) unless the person is using it. Put your
|
|
399
|
+
own helper scripts and evidence images under `.volter/scratch/`, not in the
|
|
400
|
+
project's source folders, and do not leave them behind as project files.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
Binary file
|
package/starter/cube.py
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
|
+
#
|
|
3
|
+
# THIS FILE IS GPL, AND THE REST OF YOUR PROJECT IS NOT.
|
|
4
|
+
#
|
|
5
|
+
# It drives `bpy`, Blender's Python API. The Blender Foundation's stated
|
|
6
|
+
# position — their licence page, under "Add-ons (Python scripts)" — is that
|
|
7
|
+
# the API "is an integral part of the software" and that the GPL "therefore
|
|
8
|
+
# requires that such scripts (if published) are being shared under a GPL
|
|
9
|
+
# compliant license". So a bpy script is a derivative work of Blender, and
|
|
10
|
+
# this one is licensed GNU General Public License version 3 or later,
|
|
11
|
+
# exercising Blender's own "or later".
|
|
12
|
+
#
|
|
13
|
+
# WHAT THIS DOES NOT TOUCH. `cube.blend` beside this file is YOURS, and so is
|
|
14
|
+
# anything you export from it — glTF, GLB, renders. That is the Foundation's
|
|
15
|
+
# position too, on the same page under "Your Artwork": what you make with
|
|
16
|
+
# Blender is your sole property, "including the .blend files and other data
|
|
17
|
+
# files Blender can write". Every other file the template gave you is MIT.
|
|
18
|
+
# This licence reaches this script and nothing else.
|
|
19
|
+
#
|
|
20
|
+
# If you would rather not carry it: delete this file. The `.blend` is the
|
|
21
|
+
# document — this is only the recorded source of how it was made — and
|
|
22
|
+
# nothing in the project reads this script at runtime. If you write your own
|
|
23
|
+
# bpy scripts, the Foundation's position applies to them on the same terms;
|
|
24
|
+
# it is not a rule of ours and is not ours to waive, because the copyright in
|
|
25
|
+
# Blender is Blender's authors'.
|
|
26
|
+
#
|
|
27
|
+
# Copyright 2026 Volter AI, Inc.
|
|
28
|
+
|
|
29
|
+
"""The starter model — the bpy that made `cube.blend`, and its SOURCE.
|
|
30
|
+
|
|
31
|
+
A model is Blender data: `cube.blend` beside this file is the document the
|
|
32
|
+
editor opens, and this is the script that authored it. Run it again and you
|
|
33
|
+
get the same file; edit it and re-run it, or open the `.blend` and model in
|
|
34
|
+
Blender's own Edit Mode — both are authoring, and the `.blend` is the truth
|
|
35
|
+
either way.
|
|
36
|
+
|
|
37
|
+
Run it through the session's Blender, from this project:
|
|
38
|
+
|
|
39
|
+
# The agent uses the blender server declared in .mcp.json. It starts
|
|
40
|
+
# Node with this project's installed Cyclotron CLI (no npm/bin shim).
|
|
41
|
+
# Or, in a live editor session:
|
|
42
|
+
# editor.blender('blender-execute', { code: open('src/models/cube.py').read() })
|
|
43
|
+
|
|
44
|
+
The session saves the open document about a second after the last call, so a
|
|
45
|
+
script that models is a script that saves.
|
|
46
|
+
|
|
47
|
+
Coordinates are metres, Z is up (Blender's), and the exporter converts to the
|
|
48
|
+
game's Y-up on the way to glTF.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
import bpy
|
|
52
|
+
|
|
53
|
+
# ONE DATABLOCK, AT THE ORIGIN. A model file holds the model, not a set: the
|
|
54
|
+
# factory startup's Light and Camera belong to a scene, and a model that
|
|
55
|
+
# carries them exports them too.
|
|
56
|
+
for obj in list(bpy.data.objects):
|
|
57
|
+
bpy.data.objects.remove(obj, do_unlink=True)
|
|
58
|
+
for mesh in list(bpy.data.meshes):
|
|
59
|
+
bpy.data.meshes.remove(mesh)
|
|
60
|
+
# Materials too, or a re-run appends `Material.001` beside the one it made
|
|
61
|
+
# last time and the Shader Editor shows whichever slot happens to be active.
|
|
62
|
+
for material in list(bpy.data.materials):
|
|
63
|
+
bpy.data.materials.remove(material)
|
|
64
|
+
|
|
65
|
+
# Blender opens on a cube; so does this. `size` is the full width, so 1.0 is
|
|
66
|
+
# a 1 m box — the starter's own scale, not the factory cube's 2 m.
|
|
67
|
+
bpy.ops.mesh.primitive_cube_add(size=1.0, location=(0.0, 0.0, 0.0))
|
|
68
|
+
cube = bpy.context.active_object
|
|
69
|
+
cube.name = "Cube"
|
|
70
|
+
cube.data.name = "Cube"
|
|
71
|
+
|
|
72
|
+
# AND BLENDER'S OWN DEFAULT MATERIAL, because Blender's own default cube has
|
|
73
|
+
# one. Without it the Shading workspace opens on `Shader Editor · No material`
|
|
74
|
+
# with nothing drawn and nothing a person can click to change that — its one
|
|
75
|
+
# control, Use Nodes, correctly refuses, because this view inspects a node
|
|
76
|
+
# tree and never writes one (walk 3, beat 4). `materials.new` leaves
|
|
77
|
+
# `use_nodes` FALSE, which is a material the header names and the canvas still
|
|
78
|
+
# cannot draw; setting it True is what builds the pair Blender builds —
|
|
79
|
+
# Principled BSDF into Material Output, 2 nodes and 37 sockets.
|
|
80
|
+
material = bpy.data.materials.new(name="Material")
|
|
81
|
+
material.use_nodes = True
|
|
82
|
+
cube.data.materials.append(material)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Copyright 2026 Volter AI, Inc.
|
|
3
|
+
/** One race's state, shared by its play script and React DOM root in one mount. */
|
|
4
|
+
export interface RaceState {
|
|
5
|
+
readonly lap: number;
|
|
6
|
+
readonly lapTime: number;
|
|
7
|
+
readonly lastLap: number;
|
|
8
|
+
readonly speed: number;
|
|
9
|
+
readonly fps: number;
|
|
10
|
+
readonly airborne: boolean;
|
|
11
|
+
}
|
|
12
|
+
let state: RaceState = { lap: 1, lapTime: 0, lastLap: 0, speed: 0, fps: 0, airborne: false };
|
|
13
|
+
const listeners = new Set<() => void>();
|
|
14
|
+
export const getRaceState = (): RaceState => state;
|
|
15
|
+
export const subscribeRaceState = (listener: () => void): (() => void) => {
|
|
16
|
+
listeners.add(listener);
|
|
17
|
+
return () => { listeners.delete(listener); };
|
|
18
|
+
};
|
|
19
|
+
export function publishRaceState(next: RaceState): void {
|
|
20
|
+
state = next;
|
|
21
|
+
for (const listener of [...listeners]) listener();
|
|
22
|
+
}
|
|
Binary file
|