@volter/game-editor 0.5.112 → 0.5.114
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 +22 -22
- package/catalog/entries/blender.json +2 -2
- package/catalog/entries/music.json +2 -2
- package/dist/.vite/manifest.json +2148 -2148
- package/dist/assets/{AssetBudgetPanel-CS7ZI_fl.js → AssetBudgetPanel-C2cPjuBg.js} +3 -3
- package/dist/assets/{AudioViewer-CY9_Kan-.js → AudioViewer-Bpo_jpIi.js} +1 -1
- package/dist/assets/{CanvasBoardDocument-BjZoTK6D.js → CanvasBoardDocument-DwBIeMZ4.js} +1 -1
- package/dist/assets/{CanvasSceneViewport-DeR3_1AA.js → CanvasSceneViewport-BNdmWk-Z.js} +1 -1
- package/dist/assets/{ColorInput-cUgzv-Yb.js → ColorInput-BDfmeGV7.js} +1 -1
- package/dist/assets/{ColorPicker-t_gPuWp3.js → ColorPicker-CirredSr.js} +1 -1
- package/dist/assets/{EntityModelDocument-DD20VRB1.js → EntityModelDocument-CVSuhql6.js} +1 -1
- package/dist/assets/{EnvironmentAssetDocument-DPP31WlD.js → EnvironmentAssetDocument-zoSJqmVn.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-B7GUZ-hT.js → GameplaySessionTimeline-CXuEu0EC.js} +1 -1
- package/dist/assets/{ImageViewer-DoGiU35U.js → ImageViewer-BlwxCH_J.js} +1 -1
- package/dist/assets/InspectorObjectPreview-BIP7icp4.js +1 -0
- package/dist/assets/{JsonAssetDocument-D60ZsaMt.js → JsonAssetDocument-Bca1OEvU.js} +1 -1
- package/dist/assets/{LiveModuleDocument-DgATfffN.js → LiveModuleDocument-BKw3vGr0.js} +1 -1
- package/dist/assets/{LutAssetDocument-TqkOwza4.js → LutAssetDocument-Cg-37y7Y.js} +1 -1
- package/dist/assets/{ModelAssetDocument-CQYaSgxx.js → ModelAssetDocument-DMj74VoY.js} +1 -1
- package/dist/assets/{NonThreeAuthoringBootstrap-C_-L79eQ.js → NonThreeAuthoringBootstrap-CTZ5QGOi.js} +1 -1
- package/dist/assets/{Object3DDocumentToolbar-qIMDecnO.js → Object3DDocumentToolbar-YqAXNX73.js} +1 -1
- package/dist/assets/Object3DDocumentViewport-BAFF8tXA.js +2 -0
- package/dist/assets/{Object3DPreview-CZgMSJQY.js → Object3DPreview-DhldNd5m.js} +1 -1
- package/dist/assets/{OnlineAssetDetail-ZHJxugJF.js → OnlineAssetDetail-ClT4eFxW.js} +1 -1
- package/dist/assets/{PlayBar-DHlWPuDt.js → PlayBar-Siahnvsw.js} +1 -1
- package/dist/assets/{QuarksAssetDocument-DYhJk658.js → QuarksAssetDocument-BCJCpXzv.js} +1 -1
- package/dist/assets/{ReactCanvasControls-Ce-agzJD.js → ReactCanvasControls-C2Dg7PAS.js} +1 -1
- package/dist/assets/{RootSelectionOverlay-D3xZf8h-.js → RootSelectionOverlay-B76QTxXQ.js} +1 -1
- package/dist/assets/{ShaderAssetDocument-DEs2FP13.js → ShaderAssetDocument-BC_bMDIb.js} +1 -1
- package/dist/assets/{ShadowEditor-DlOYuGTo.js → ShadowEditor-BmMIsUKh.js} +1 -1
- package/dist/assets/{SourceAssetViewer-Du1oHWvc.js → SourceAssetViewer-Cq0O9fPd.js} +1 -1
- package/dist/assets/{StageHost-CUd0YsCX.js → StageHost-DL-rn1xw.js} +2 -2
- package/dist/assets/{StoryPreviewMount-DP-ZfmY0.js → StoryPreviewMount-Bb6bAFFD.js} +1 -1
- package/dist/assets/{ThreeBoardDocument-9PCg7zJ6.js → ThreeBoardDocument-DVKtb195.js} +2 -2
- package/dist/assets/{ThreeIsolationSceneContent-B-SvHGhu.js → ThreeIsolationSceneContent-Cgn5gNZK.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-C34aT5oQ.js → ToolObject3DPreview-CC6zmX0_.js} +1 -1
- package/dist/assets/{Toolbar-BpZsr2pY.js → Toolbar-CtuKETND.js} +1 -1
- package/dist/assets/{TransientHint-CUErZ8FD.js → TransientHint-BznxmBhK.js} +1 -1
- package/dist/assets/{VideoViewer-DzzNCYKb.js → VideoViewer-Bf8CFBye.js} +1 -1
- package/dist/assets/{ViewportShadingMenu-X3qf9Hi-.js → ViewportShadingMenu-CHI1Ybps.js} +1 -1
- package/dist/assets/{active-ingest-DF5-9w3C.js → active-ingest-CdkBLhUn.js} +2 -2
- package/dist/assets/{animation-clock-BKPEWto9.js → animation-clock-iXNr3pAB.js} +1 -1
- package/dist/assets/{animation-mixers.service-CVTFDk6U.js → animation-mixers.service-44VFyY6S.js} +1 -1
- package/dist/assets/{animation-timeline.utility-YBGv194P.js → animation-timeline.utility-Dc7J3kL7.js} +1 -1
- package/dist/assets/{asset-budget-asset.menu-CczhHlQi.js → asset-budget-asset.menu-2A17aYDp.js} +1 -1
- package/dist/assets/{asset-budget.action-CSVqpVst.js → asset-budget.action-D5zTxlwK.js} +1 -1
- package/dist/assets/{asset-budget.document-IGdh6nQk.js → asset-budget.document-BnfZWG-Z.js} +1 -1
- package/dist/assets/{asset-budget.menu-kCjwqAsZ.js → asset-budget.menu-B80Zj_Gc.js} +1 -1
- package/dist/assets/{asset-editor-persistence-Ci4EpN5C.js → asset-editor-persistence-CDltpHCs.js} +1 -1
- package/dist/assets/{asset-loaders-C6ObO9GN.js → asset-loaders-CNaS8TZG.js} +1 -1
- package/dist/assets/{asset-preview-OCdcmead.js → asset-preview-DJuOkxhj.js} +1 -1
- package/dist/assets/{audio-unlock.service-BuHPJHzd.js → audio-unlock.service-BrBhpJMC.js} +1 -1
- package/dist/assets/{audio.utility-BnRaN02j.js → audio.utility-B4-eoTPZ.js} +1 -1
- package/dist/assets/autoplay.service-CFvofovm.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-2CpWwj18.js → babylon-authoring-adapter-vZdL2Gto.js} +1 -1
- package/dist/assets/{binding-resolver-sJUPnlmt.js → binding-resolver-OJ_J6yIE.js} +2 -2
- package/dist/assets/blender-emscripten-engine-CRz1C2s0.js +2 -0
- package/dist/assets/{blender-node-editor.document-BzxU2yPF.js → blender-node-editor.document-BDczfFxt.js} +1 -1
- package/dist/assets/{blender-properties-tab-DqwlnB4h.js → blender-properties-tab-CjgK0Bbk.js} +1 -1
- package/dist/assets/{blender-runtime-host-FT4zUerb.js → blender-runtime-host-Dlc9w0Zh.js} +2 -2
- package/dist/assets/{blender-runtime-skin-B9EzZYzy.js → blender-runtime-skin-D1UM12LE.js} +1 -1
- package/dist/assets/{blender-runtime.document-DGyaIS95.js → blender-runtime.document-CCV5Y9OE.js} +1 -1
- package/dist/assets/{blender-screenshot.menu-CFSAUaXM.js → blender-screenshot.menu-C36rWtiC.js} +1 -1
- package/dist/assets/{blender-timeline.document-BRwMmxud.js → blender-timeline.document-lk_PIJob.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-DC6azebM.js → blender-uv-editor.document-CTmIU4Kh.js} +1 -1
- package/dist/assets/{blender-version.status-B_XeE25m.js → blender-version.status-DJlu7qr4.js} +1 -1
- package/dist/assets/{blender-wali-engine-BI5dGBuY.js → blender-wali-engine-BmVwcYs-.js} +1 -1
- package/dist/assets/{blender.command-B6Xsvgk-.js → blender.command-DzCCQQOZ.js} +1 -1
- package/dist/assets/{board-guides-DeE34w2f.js → board-guides-BlBRZmTQ.js} +1 -1
- package/dist/assets/{bridge.command-D1fDSd-y.js → bridge.command-ClY9S8Un.js} +3 -3
- package/dist/assets/{browserAll-CkIz4Usm.js → browserAll-Mv9lBgrZ.js} +1 -1
- package/dist/assets/{build-player.document-mhapyzFw.js → build-player.document-Cy7MEpas.js} +1 -1
- package/dist/assets/{build-profiles.document-C9tqgW2N.js → build-profiles.document-WaCFbiLP.js} +1 -1
- package/dist/assets/{build-progress.status-B-6wgBYl.js → build-progress.status-DTcmGi_P.js} +1 -1
- package/dist/assets/{build-session-zss_dsN6.js → build-session-DbpKkNJV.js} +1 -1
- package/dist/assets/{build.action-kn5_JNp6.js → build.action-C2j5_dxu.js} +1 -1
- package/dist/assets/{build.command-B-kLNXtL.js → build.command-DioIRVgu.js} +1 -1
- package/dist/assets/{build.header-z4kVTqas.js → build.header-BzewhRVE.js} +1 -1
- package/dist/assets/{build.menu-CAHSlu8I.js → build.menu-BzXblcjm.js} +1 -1
- package/dist/assets/{build.service-D78ycPY6.js → build.service-nY7pgo8P.js} +1 -1
- package/dist/assets/{camera-BFXEOyzN.js → camera-C4iahwRu.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-vDtwgr9q.js → camera-runtime.inspector-0hl6Lpc7.js} +1 -1
- package/dist/assets/{canvas-design-mount-pYTxi6Tf.js → canvas-design-mount-ZR59B_S-.js} +3 -3
- package/dist/assets/{canvas-entry-runtime-BQ96Hfic.js → canvas-entry-runtime-DfwjEnac.js} +2 -2
- package/dist/assets/{canvas-preview-frames-DbRCTACs.js → canvas-preview-frames-BK9lbVhI.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-DcUFRvDV.js → canvas-story-capture.service-BB37SSiy.js} +2 -2
- package/dist/assets/{capability-coverage-CIZYoMxx.js → capability-coverage-BbGACSQ7.js} +1 -1
- package/dist/assets/{collaboration-presence-DjXNSi22.js → collaboration-presence-Bsr8DNTC.js} +1 -1
- package/dist/assets/{collider-9ZEPrzF2.js → collider-CNgw-tJm.js} +1 -1
- package/dist/assets/{component-board.service-CaSa-D7M.js → component-board.service-ABJTCD9U.js} +2 -2
- package/dist/assets/{component-board.service-B1OgIIgM.js → component-board.service-BkvLOF6E.js} +2 -2
- package/dist/assets/{component-board.service-Bro2VYuK.js → component-board.service-DrGTgtOW.js} +2 -2
- package/dist/assets/{component-contracts.service-C3HArGNL.js → component-contracts.service-AJNTJQUd.js} +1 -1
- package/dist/assets/{component-instance-root-CSxVbFxZ.js → component-instance-root-DSo9btvO.js} +1 -1
- package/dist/assets/{component-verbs.command-OLMgi8Wm.js → component-verbs.command-DAZikwtn.js} +1 -1
- package/dist/assets/{component-verbs.service-D0v3hXfp.js → component-verbs.service-CbmTNwUC.js} +1 -1
- package/dist/assets/{config-DrdlIQsH.js → config-ByW2y5rs.js} +2 -2
- package/dist/assets/{configurations-Jl5IODND.js → configurations-LzOt_ui9.js} +1 -1
- package/dist/assets/{connection.status-ykEJcQf4.js → connection.status-fh7qO4aP.js} +1 -1
- package/dist/assets/{constraints.inspector-DgjEYgnn.js → constraints.inspector-BILU-OeN.js} +1 -1
- package/dist/assets/{content-bounds-Bu-Q6apF.js → content-bounds-kt7VKpcn.js} +1 -1
- package/dist/assets/{contract-system-adapters-B6eqb9n_.js → contract-system-adapters-Cozx6nCn.js} +1 -1
- package/dist/assets/{coverage.service-CxeNaEHo.js → coverage.service-CswPRFnJ.js} +1 -1
- package/dist/assets/{create-runtime-CsLlOfpz.js → create-runtime-CNEjmtin.js} +1 -1
- package/dist/assets/{curve-BokfkJEd.js → curve-BKb_W-u_.js} +1 -1
- package/dist/assets/{data-asset-DFywc4eI.js → data-asset-C39Y1A_d.js} +1 -1
- package/dist/assets/{data-ref-C28YL2QH.js → data-ref-tKY-R3JG.js} +1 -1
- package/dist/assets/{debug-bridge-Clli9FXl.js → debug-bridge-CLBVU34P.js} +1 -1
- package/dist/assets/{debug-registry-qBwZnzAK.js → debug-registry-PtCg-gAQ.js} +1 -1
- package/dist/assets/{deferred-ingest-play-5TJ3EX3-.js → deferred-ingest-play-DlgkyiVk.js} +2 -2
- package/dist/assets/{design-time-canvas-mount-C-Sgmncv.js → design-time-canvas-mount-DlS15mlk.js} +2 -2
- package/dist/assets/{design-time-layers-3WbCfh8m.js → design-time-layers-BSk9iy6A.js} +1 -1
- package/dist/assets/{design-time-mount.service-BRSrgijn.js → design-time-mount.service-bV28BtPG.js} +2 -2
- package/dist/assets/{design-time-mount.service-Cqnd96xc.js → design-time-mount.service-yeuApmeU.js} +2 -2
- package/dist/assets/{design-time-react-mount-tfrs7iak.js → design-time-react-mount-7EgUpZDW.js} +1 -1
- package/dist/assets/{document-preview-three-Db6R6gQi.js → document-preview-three-DcVcoC1y.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-DZzbuOO3.js → dom-authoring-adapter-Dnjvh9yG.js} +1 -1
- package/dist/assets/{draco3d-Czugbe_O.js → draco3d-3EapKinA.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-BeqIdnXi.js → edit-mode-audio.service-ffiNgJwH.js} +1 -1
- package/dist/assets/{edit-mode-authoring-9JCc-tmi.js → edit-mode-authoring-BEqEkXIT.js} +1 -1
- package/dist/assets/{edit-mode-networking.service-Ce7-Dimc.js → edit-mode-networking.service-9uQLb9Fc.js} +1 -1
- package/dist/assets/{editor-api-DJHTUJU8.js → editor-api-TexfN2js.js} +1 -1
- package/dist/assets/{editor-layers-G1sSDqkZ.js → editor-layers-DB9_uFyw.js} +1 -1
- package/dist/assets/{editor-shell-store-COqthmhH.js → editor-shell-store-DAFZw7de.js} +1 -1
- package/dist/assets/{entity-object-NNBB_27h.js → entity-object-CG32Sh-D.js} +1 -1
- package/dist/assets/{extend-D1vXQ0I3.js → extend-BJCYmdCg.js} +1 -1
- package/dist/assets/{fork-menu-Cmvt4hG1.js → fork-menu-B0CAnsQ0.js} +1 -1
- package/dist/assets/{frame-debugger-store-BKPuWqqo.js → frame-debugger-store-DRPBji06.js} +1 -1
- package/dist/assets/{game-contract-seams-hCeLHp_F.js → game-contract-seams-D3jp9kfH.js} +1 -1
- package/dist/assets/{game-css-scope-transform-D5ZBSyAS.js → game-css-scope-transform-CNq9C0a8.js} +1 -1
- package/dist/assets/{game-document.service-CtaIz0B3.js → game-document.service-Ikp3u-8X.js} +1 -1
- package/dist/assets/{game-eval.command-BwnCBWgL.js → game-eval.command-DR0dtfPa.js} +1 -1
- package/dist/assets/{game-module-access-BaoHzqz9.js → game-module-access-DceYIduW.js} +1 -1
- package/dist/assets/{game-network-Wrv2_SU7.js → game-network-DOCCFwtp.js} +3 -3
- package/dist/assets/{gameplay-export-DJszZP0E.js → gameplay-export-BfVqSEgT.js} +1 -1
- package/dist/assets/{gameplay-replay-C2RzNnue.js → gameplay-replay-D9quLJQt.js} +1 -1
- package/dist/assets/{gameplay.command-DAYIk5M8.js → gameplay.command-CVuLo_kD.js} +1 -1
- package/dist/assets/{generation-jobs-DfQDSsoI.js → generation-jobs-dFYEPPwC.js} +1 -1
- package/dist/assets/{generation.service-D5QfoQ-i.js → generation.service-DtP2HZFd.js} +1 -1
- package/dist/assets/{generations-DEibFD1b.js → generations-BqaARHQz.js} +1 -1
- package/dist/assets/{generations.status-BK-TCO78.js → generations.status-DpyocrDb.js} +1 -1
- package/dist/assets/{hierarchy-marks-h4VpO3kJ.js → hierarchy-marks-Ducimsnh.js} +1 -1
- package/dist/assets/{hosted-asset-materialization-DBuwc0IQ.js → hosted-asset-materialization-CibGdw61.js} +1 -1
- package/dist/assets/{index-DM2Q_NCo.js → index-4Vg6KHJs.js} +1 -1
- package/dist/assets/{index-ND4SO5al.js → index-BMshF0VP.js} +1 -1
- package/dist/assets/{index-BTWJgxhy.js → index-BaM5nplw.js} +1 -1
- package/dist/assets/{index-DrdQBy-G.js → index-CKoL9Z8h.js} +1 -1
- package/dist/assets/{index-BtHKXtaM.js → index-Cs_hnykK.js} +8 -8
- package/dist/assets/{index-MT_--_xJ.js → index-CyN2UjMe.js} +1 -1
- package/dist/assets/{index-DE_7syhj.js → index-DMA-GnGs.js} +1 -1
- package/dist/assets/{index-gAgw9-nn.js → index-Df0th-r3.js} +1 -1
- package/dist/assets/{index-Csfe5jM_.js → index-M1-SoN0U.js} +2 -2
- package/dist/assets/{inference-diagnostics-BQL1PsrA.js → inference-diagnostics-aOHTUQ5I.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-PiZJrSff.js → ingest-boot-viewport-J9SqqmBi.js} +1 -1
- package/dist/assets/{ingest-siblings-CBFovixA.js → ingest-siblings-DI-4N8EJ.js} +1 -1
- package/dist/assets/{ingest-source-persistence-PtmAk0XP.js → ingest-source-persistence-BlQ86Ezy.js} +1 -1
- package/dist/assets/{ingest.service-Dj7vHa0S.js → ingest.service-DGJl6Kg1.js} +1 -1
- package/dist/assets/{inspect-5CiZi9Fe.js → inspect-CSzAyD3t.js} +1 -1
- package/dist/assets/instances.command-DCKGMDy5.js +1 -0
- package/dist/assets/{json-history-resource-DVZTZBEI.js → json-history-resource-C5lzztrI.js} +1 -1
- package/dist/assets/{layered-pick-D16c7649.js → layered-pick-Da3YPGWE.js} +1 -1
- package/dist/assets/{light-RLn_u9nj.js → light-D9BNM9LO.js} +1 -1
- package/dist/assets/{live-project-verbs-DAqM2TEV.js → live-project-verbs-CeLmddwY.js} +1 -1
- package/dist/assets/{machine.document-1Pyec5Pa.js → machine.document-D9RIS2J1.js} +1 -1
- package/dist/assets/{machines.finder-AR1csJ4o.js → machines.finder-B_-K7mbg.js} +1 -1
- package/dist/assets/{material-CbAhx7b0.js → material-Di4_5UR9.js} +1 -1
- package/dist/assets/{material-factory-_2cVLgWp.js → material-factory-Cdk5ozUy.js} +1 -1
- package/dist/assets/{mesh-BsIfE30r.js → mesh-B3l7POsp.js} +1 -1
- package/dist/assets/{model-asset-sections.service-y4vzx4AO.js → model-asset-sections.service-wBLLtK1P.js} +1 -1
- package/dist/assets/{model-inspection-CF65KROh.js → model-inspection-QwuuTlfj.js} +1 -1
- package/dist/assets/{model-thumbnail-DrTWM9U2.js → model-thumbnail-BXNwjwVQ.js} +1 -1
- package/dist/assets/{models.finder-BcSV8mtS.js → models.finder-BlvEy8zN.js} +1 -1
- package/dist/assets/{module-mode-_u8oyIyA.js → module-mode-DJJCSruV.js} +2 -2
- package/dist/assets/{mount-canvas-ingest-root-C_aM-VbZ.js → mount-canvas-ingest-root-BKB4WIx_.js} +2 -2
- package/dist/assets/{mount-dom-ingest-root-CgUdURHO.js → mount-dom-ingest-root-PRkBWUWu.js} +2 -2
- package/dist/assets/{mount-ingest-root-eVQIQKsK.js → mount-ingest-root-CQLOfg6j.js} +2 -2
- package/dist/assets/{mount-manifest-CX_NmRV8.js → mount-manifest-GP2eO4t9.js} +1 -1
- package/dist/assets/{mount-three-ingest-root-DAiKCFQL.js → mount-three-ingest-root-T3wn7mca.js} +1 -1
- package/dist/assets/{mounted-authoring-BS6EFeEC.js → mounted-authoring-Db9gY4N3.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-DyODLBUp.js → mounted-story-viewport-source-C9HGOm_J.js} +1 -1
- package/dist/assets/{native-debug-module-n6JKSj78.js → native-debug-module-QRchsh2v.js} +1 -1
- package/dist/assets/{navigation-CTPtBc3X.js → navigation-C-8TPzHJ.js} +1 -1
- package/dist/assets/{navmesh.menu-B9usrrET.js → navmesh.menu-D0aY0A-x.js} +1 -1
- package/dist/assets/{navmesh.service-CFVngRKP.js → navmesh.service-CZ7uSgkz.js} +1 -1
- package/dist/assets/network-observer.service-CD9z9tBp.js +1 -0
- package/dist/assets/{network.utility-CEVHCC-T.js → network.utility-BOHNhfSD.js} +1 -1
- package/dist/assets/{object3d-document-session-registry-BD9lZKTC.js → object3d-document-session-registry-PE-4fjz1.js} +2 -2
- package/dist/assets/{oid-transform-ChoYb7se.js → oid-transform-B32kPrkS.js} +1 -1
- package/dist/assets/{particles-D1k_uYOX.js → particles-DkCd4wzc.js} +1 -1
- package/dist/assets/{pixi-authoring-adapter-Bcr97UEH.js → pixi-authoring-adapter-Cz6GKyRX.js} +1 -1
- package/dist/assets/{pixi-live-write-target-C4pMf1zd.js → pixi-live-write-target-Dvo0ZrpJ.js} +1 -1
- package/dist/assets/{play.command-CBDjMxJA.js → play.command-jRmgmt62.js} +2 -2
- package/dist/assets/{presentation-B__NA0OV.js → presentation-BWLM0Zst.js} +1 -1
- package/dist/assets/{product-DqjQLeDp.js → product-NPUDoYQp.js} +1 -1
- package/dist/assets/{profiler.action-Bn_bRMzI.js → profiler.action-BdEeMmlP.js} +1 -1
- package/dist/assets/{profiler.menu-D32ofOXP.js → profiler.menu-DmaIMEQp.js} +1 -1
- package/dist/assets/{profiler.utility-CcVo_nj3.js → profiler.utility-BqCXFtf4.js} +1 -1
- package/dist/assets/{project-authoring-session-Ii_9aeKq.js → project-authoring-session-DWdfTjb4.js} +2 -2
- package/dist/assets/{properties-bone-constraints.inspector-BwLwy_UY.js → properties-bone-constraints.inspector-Do18oyXm.js} +1 -1
- package/dist/assets/{properties-bone.inspector-CBEwOhSA.js → properties-bone.inspector-DHRW9Zdy.js} +1 -1
- package/dist/assets/{properties-collection.inspector-Wahf0FZg.js → properties-collection.inspector-B_ZqDhIB.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-DqMhNk_O.js → properties-constraints.inspector-DGUezsPF.js} +1 -1
- package/dist/assets/{properties-data.inspector-NVNCDhx-.js → properties-data.inspector-DW6_t8_e.js} +1 -1
- package/dist/assets/{properties-material.inspector-JfwRrUdy.js → properties-material.inspector-CjK7oKK4.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-Tk3IilPm.js → properties-modifiers.inspector-BzIR7FjM.js} +1 -1
- package/dist/assets/{properties-object.inspector-Cw4CUuAF.js → properties-object.inspector-3fsVkAFS.js} +1 -1
- package/dist/assets/{properties-output.inspector-C_wjNYov.js → properties-output.inspector-D1zWlLWX.js} +1 -1
- package/dist/assets/{properties-particles.inspector-Buo2ZpHN.js → properties-particles.inspector-CwNWZhyR.js} +1 -1
- package/dist/assets/{properties-physics.inspector-ByZi8Or5.js → properties-physics.inspector-BnmFQq_i.js} +1 -1
- package/dist/assets/{properties-render.inspector-BDfZbd_W.js → properties-render.inspector-Di2qTS4q.js} +1 -1
- package/dist/assets/{properties-scene.inspector-BPxDKg8t.js → properties-scene.inspector-1UZaXfw2.js} +1 -1
- package/dist/assets/{properties-texture.inspector-CZinkXCt.js → properties-texture.inspector-BaV5U-Qu.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-edNGGTIE.js → properties-view-layer.inspector-DxW9C8im.js} +1 -1
- package/dist/assets/{properties-world.inspector-tybDOQ6m.js → properties-world.inspector-Cb8cuI2F.js} +1 -1
- package/dist/assets/{r3f-design-session-DWqMahmm.js → r3f-design-session-kg4aFo9v.js} +2 -2
- package/dist/assets/{r3f-physics-binding-DJWWVb2L.js → r3f-physics-binding-C37YJGMW.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-DvsbKTqD.js → r3f-source-authoring-adapter-ZKBMZbYR.js} +1 -1
- package/dist/assets/{react-canvas-navigation-Ci7wZxOU.js → react-canvas-navigation-DgndsFAo.js} +1 -1
- package/dist/assets/{react-inspector.service-vd4Nv39L.js → react-inspector.service-9bE0o_8D.js} +1 -1
- package/dist/assets/{react-story-board-D5JuJe6T.js → react-story-board-CCITskgO.js} +1 -1
- package/dist/assets/{react-three-rapier.esm-C07hrtTz.js → react-three-rapier.esm-CIOYSgKg.js} +1 -1
- package/dist/assets/{react-world-authoring-adapter--B_eNa53.js → react-world-authoring-adapter-DK4jMqyN.js} +1 -1
- package/dist/assets/{realm-services-BufVaH0e.js → realm-services-BAZP9e8H.js} +1 -1
- package/dist/assets/{reflection-probe-capture.inspector-CrcJgFmm.js → reflection-probe-capture.inspector-BOCEOfun.js} +1 -1
- package/dist/assets/{registry-n6zpDtMt.js → registry-PeJ-uX3W.js} +1 -1
- package/dist/assets/{relative-import-specifier-DeO_c8Rd.js → relative-import-specifier-BfGfJFJZ.js} +1 -1
- package/dist/assets/{render-env-DPBJB_Zs.js → render-env-ChDPR7QW.js} +1 -1
- package/dist/assets/{render-features-OSq2gvE-.js → render-features-BIgyjcOC.js} +1 -1
- package/dist/assets/{render-settings-DI6s6dkY.js → render-settings-C7hqpFnK.js} +1 -1
- package/dist/assets/{resolve-three-aaZ0_3_R.js → resolve-three-Dpd-fg3k.js} +3 -3
- package/dist/assets/{root-seam-contract-DetyPFnV.js → root-seam-contract-Crgu32u5.js} +1 -1
- package/dist/assets/{run-selection-Du9C46du.js → run-selection-xpSMOXG0.js} +1 -1
- package/dist/assets/{scene-capture-R9tSJXya.js → scene-capture-D1sFvwyj.js} +1 -1
- package/dist/assets/{scene-document.service-DOepV8nF.js → scene-document.service-BM50fy1J.js} +2 -2
- package/dist/assets/{scene-framing-DF5fdjup.js → scene-framing-BX1UTrnD.js} +1 -1
- package/dist/assets/{seeded-random-ClUBbE4z.js → seeded-random-C85bEVkS.js} +1 -1
- package/dist/assets/{setup-renderer-e3Gw3GCt.js → setup-renderer-DcKuhISr.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-C-ZF3osD.js → source-object3d-authoring-adapter-h3b7vPiK.js} +1 -1
- package/dist/assets/{source-persistence-backend-CgzJz-Nd.js → source-persistence-backend-DgTsuLXb.js} +1 -1
- package/dist/assets/{stage-keyboard-BeVDWo3u.js → stage-keyboard-BI4HOf1S.js} +1 -1
- package/dist/assets/{stage-overlay-set-CN_VJVOD.js → stage-overlay-set-Cssqqj_A.js} +1 -1
- package/dist/assets/{stage-presence-markers-D3YOz3QD.js → stage-presence-markers-7odF6Jqg.js} +1 -1
- package/dist/assets/{stage-transform-tools-i3abixoE.js → stage-transform-tools-CtyYmuLT.js} +1 -1
- package/dist/assets/{standard-viewport-dressing-g7JaXFSz.js → standard-viewport-dressing-C0D_Lkzi.js} +1 -1
- package/dist/assets/{state-watch.action-CMNQTE_k.js → state-watch.action-BjfXq_IH.js} +1 -1
- package/dist/assets/{state-watch.menu-mDeNuWPA.js → state-watch.menu-BRJo7Z-c.js} +1 -1
- package/dist/assets/{state-watch.utility-D3ffYxH0.js → state-watch.utility-D_swl2pz.js} +1 -1
- package/dist/assets/{story-capture-A7ucdmi7.js → story-capture-CMY7BKUL.js} +1 -1
- package/dist/assets/{story-documents-CpHqzA2E.js → story-documents-BwW_Ypnc.js} +1 -1
- package/dist/assets/{story-documents.service-DUzmFkmA.js → story-documents.service-B6YGoAas.js} +1 -1
- package/dist/assets/{story-documents.service-Bx3MD6eL.js → story-documents.service-DpNKV5ve.js} +1 -1
- package/dist/assets/{story-media-presence-C95sCmez.js → story-media-presence-DgTM3l4X.js} +1 -1
- package/dist/assets/{story-pixi-preview-DbFtKMCD.js → story-pixi-preview-anB4NVfT.js} +1 -1
- package/dist/assets/{story-presentation-DYqHAZtU.js → story-presentation-Cm5Vl6Oh.js} +1 -1
- package/dist/assets/{story-three-preview-CjX3xQGB.js → story-three-preview-BOD7-hxP.js} +2 -2
- package/dist/assets/{studio-environment-CGs1x_nY.js → studio-environment-Bg-I7fM-.js} +1 -1
- package/dist/assets/{surface-state-JGVYDKMD.js → surface-state-DUwBtx3k.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-BdiNUmPv.js → syntactic-prop-specs-Bmxu19np.js} +1 -1
- package/dist/assets/{team-playtest.service-DInVIyoo.js → team-playtest.service-CGh7mX2E.js} +1 -1
- package/dist/assets/{three-CJS1cirl.js → three-CWmJa1qe.js} +1 -1
- package/dist/assets/{three-authoring-adapter-ByfM7SyY.js → three-authoring-adapter-CwQ2Hl3O.js} +1 -1
- package/dist/assets/three-authoring.service-CSdBG8i-.js +2 -0
- package/dist/assets/{three-ingest-runtime-DVG3znKA.js → three-ingest-runtime-Drh7DqsE.js} +1 -1
- package/dist/assets/{three-integration-DJnFy0Cl.js → three-integration-D9SLXYnU.js} +2 -2
- package/dist/assets/three-integration.service-W2S36XB9.js +1 -0
- package/dist/assets/{three-projection-core-CMkmMelq.js → three-projection-core-BxrVlHmD.js} +1 -1
- package/dist/assets/{three-state-DmHIPM-S.js → three-state-kIB-8XUB.js} +1 -1
- package/dist/assets/{three-story-capture.service-CZuvnzF1.js → three-story-capture.service-C8l6znQN.js} +2 -2
- package/dist/assets/{three-story-model-pj_bgW6q.js → three-story-model-DzqvFyFn.js} +1 -1
- package/dist/assets/{three-viewport-presentation-CpAAmxco.js → three-viewport-presentation-2yL9mtBn.js} +1 -1
- package/dist/assets/{transform-mode-request-BfzK1zvK.js → transform-mode-request-CwuDcUbZ.js} +1 -1
- package/dist/assets/{transport-strip-BwiOBZmO.js → transport-strip-BK2izTHN.js} +1 -1
- package/dist/assets/transport.header-BB3O8i1G.js +1 -0
- package/dist/assets/{tuples-BC2McJBb.js → tuples-DBc-K60w.js} +1 -1
- package/dist/assets/{ui-board-document-BJ1Jg2vO.js → ui-board-document-DM7FjXkv.js} +2 -2
- package/dist/assets/{user-data-Bs7kEKQL.js → user-data-B0afWRON.js} +1 -1
- package/dist/assets/{utility-view-state-DTBJVdax.js → utility-view-state-BqtZzIZO.js} +1 -1
- package/dist/assets/{viewport-door-BUBAxV2L.js → viewport-door-DXf2BTtM.js} +1 -1
- package/dist/assets/{viewport-root-presentation-BXafmwmW.js → viewport-root-presentation-DMXg0y2c.js} +1 -1
- package/dist/assets/{viewport-surface-status-BwUnSN5n.js → viewport-surface-status-Cb9tNbMn.js} +1 -1
- package/dist/assets/{webworkerAll-CHyvX6z5.js → webworkerAll-SNqnnw8n.js} +1 -1
- package/dist/assets/worker-BXLmYZTK.js +2 -0
- package/dist/assets/{workspace-arrangement-BvzC4AGK.js → workspace-arrangement-4Fa_8tpk.js} +1 -1
- package/dist/assets/{world-documents-DJBVXKeD.js → world-documents-D_jW5Rdo.js} +1 -1
- package/dist/assets/{world-root-stage-binding-BTcrTX0_.js → world-root-stage-binding-jICg_fta.js} +1 -1
- package/dist/assets/{xstate-animation-binding-LT8ofYof.js → xstate-animation-binding-D99r_COR.js} +1 -1
- package/dist/assets/{xstate-animation-meta-D22igH0b.js → xstate-animation-meta-DKGLnaIK.js} +1 -1
- package/dist-node/cli.js +367 -102
- package/package.json +16 -16
- package/dist/assets/InspectorObjectPreview-BQlnDG4E.js +0 -1
- package/dist/assets/Object3DDocumentViewport-DrDZRf2L.js +0 -2
- package/dist/assets/autoplay.service-CQlRBjxq.js +0 -1
- package/dist/assets/blender-emscripten-engine-DLuEIFE4.js +0 -2
- package/dist/assets/instances.command-CUn5hmvz.js +0 -1
- package/dist/assets/network-observer.service-B6NW-U1D.js +0 -1
- package/dist/assets/three-authoring.service-DVwuHTMg.js +0 -2
- package/dist/assets/three-integration.service-CJGC8wFY.js +0 -1
- package/dist/assets/transport.header-DvOge8Mb.js +0 -1
- package/dist/assets/worker-CQkYvnTL.js +0 -2
package/dist-node/cli.js
CHANGED
|
@@ -102,6 +102,7 @@ var init_client = __esm({
|
|
|
102
102
|
TRANSPORT_RETRY_DELAY_MS2 = 400;
|
|
103
103
|
EditorClient2 = class {
|
|
104
104
|
baseUrl;
|
|
105
|
+
fetchOverride;
|
|
105
106
|
/**
|
|
106
107
|
* The running game's debug plane — see {@link GameDebugDoor}. It rides the
|
|
107
108
|
* SAME `/__editor/command` relay every other method here uses (relay cases
|
|
@@ -131,7 +132,7 @@ var init_client = __esm({
|
|
|
131
132
|
);
|
|
132
133
|
}
|
|
133
134
|
const unknownOptions = Object.keys(opts ?? {}).filter(
|
|
134
|
-
(key) => key !== "url" && key !== "onEnvelope" && key !== "transport"
|
|
135
|
+
(key) => key !== "url" && key !== "onEnvelope" && key !== "transport" && key !== "fetch"
|
|
135
136
|
);
|
|
136
137
|
if (unknownOptions.length > 0) {
|
|
137
138
|
throw new Error(
|
|
@@ -139,6 +140,7 @@ var init_client = __esm({
|
|
|
139
140
|
);
|
|
140
141
|
}
|
|
141
142
|
this.baseUrl = (opts?.url ?? DEFAULT_URL2).replace(/\/$/, "");
|
|
143
|
+
this.fetchOverride = opts?.fetch;
|
|
142
144
|
this.onEnvelope = opts?.onEnvelope ?? null;
|
|
143
145
|
this.transport = opts?.transport ?? null;
|
|
144
146
|
this.game = {
|
|
@@ -187,7 +189,7 @@ var init_client = __esm({
|
|
|
187
189
|
signal: AbortSignal.timeout(deadlineMs)
|
|
188
190
|
};
|
|
189
191
|
commandDispatcher = deadlineMs > UNDICI_DEFAULT_HEADERS_TIMEOUT_MS2 ? createDispatcher2(deadlineMs + 3e4) : void 0;
|
|
190
|
-
res = await dispatchFetch2(url, init, commandDispatcher);
|
|
192
|
+
res = this.fetchOverride ? await this.fetchOverride(url, init) : await dispatchFetch2(url, init, commandDispatcher);
|
|
191
193
|
break;
|
|
192
194
|
} catch (error) {
|
|
193
195
|
await commandDispatcher?.destroy?.();
|
|
@@ -202,7 +204,7 @@ var init_client = __esm({
|
|
|
202
204
|
const { code, detail } = describeFetchFailure2(error);
|
|
203
205
|
if (options?.retryTransport === true && !retried && RETRYABLE_TRANSPORT_CODES2.has(code)) {
|
|
204
206
|
retried = true;
|
|
205
|
-
await new Promise((
|
|
207
|
+
await new Promise((resolve13) => setTimeout(resolve13, TRANSPORT_RETRY_DELAY_MS2));
|
|
206
208
|
continue;
|
|
207
209
|
}
|
|
208
210
|
throw new EditorCommandError2(
|
|
@@ -1098,7 +1100,7 @@ var init_client = __esm({
|
|
|
1098
1100
|
*/
|
|
1099
1101
|
async httpFetch(url, init, dispatcher) {
|
|
1100
1102
|
try {
|
|
1101
|
-
return await dispatchFetch2(url, init, dispatcher);
|
|
1103
|
+
return this.fetchOverride ? await this.fetchOverride(url, init) : await dispatchFetch2(url, init, dispatcher);
|
|
1102
1104
|
} catch (error) {
|
|
1103
1105
|
if (error?.name === "TimeoutError") throw error;
|
|
1104
1106
|
const { code, detail } = describeFetchFailure2(error);
|
|
@@ -1212,13 +1214,11 @@ var init_BUNDLE = __esm({
|
|
|
1212
1214
|
"../blender-engine/wasm/BUNDLE.json"() {
|
|
1213
1215
|
BUNDLE_default = {
|
|
1214
1216
|
blender: "5.2.0 LTS",
|
|
1215
|
-
source: "
|
|
1216
|
-
reviewedSource: "
|
|
1217
|
+
source: "e5d7eec67572dfc7c73f8f4d3f601d03442546f9",
|
|
1218
|
+
reviewedSource: "e5d7eec67572dfc7c73f8f4d3f601d03442546f9",
|
|
1217
1219
|
upstream: "fbe6228777e7d9afefcd61a413844e790ae75db7",
|
|
1218
1220
|
sourceRepository: "https://github.com/volter-ai/blender",
|
|
1219
|
-
sourceRecipe: "https://github.com/volter-ai/blender/blob/
|
|
1220
|
-
sourceRelease: "https://github.com/volter-ai/blender/releases/tag/blender-5.2.0-wasm.4",
|
|
1221
|
-
verification: "https://github.com/volter-ai/blender/releases/download/blender-5.2.0-wasm.4/VERIFICATION.json",
|
|
1221
|
+
sourceRecipe: "https://github.com/volter-ai/blender/blob/e5d7eec67572dfc7c73f8f4d3f601d03442546f9/build_files/emscripten/RELEASE.md",
|
|
1222
1222
|
factoryEngine: "BLENDER_EEVEE",
|
|
1223
1223
|
files: {
|
|
1224
1224
|
"blender_browser.js": "raw",
|
|
@@ -1231,8 +1231,8 @@ var init_BUNDLE = __esm({
|
|
|
1231
1231
|
sha256: "0c63c29e7d4b1ba1fce4e94057778b0757767b25ea4f6f01d329e99351568f30"
|
|
1232
1232
|
},
|
|
1233
1233
|
"blender_browser.wasm": {
|
|
1234
|
-
bytes:
|
|
1235
|
-
sha256: "
|
|
1234
|
+
bytes: 86317655,
|
|
1235
|
+
sha256: "0ba94ac8388de893bcec4da70516aea69128addaa490ef27f17ca06262ee6546"
|
|
1236
1236
|
},
|
|
1237
1237
|
"blender_browser.data": {
|
|
1238
1238
|
bytes: 52698568,
|
|
@@ -1245,8 +1245,8 @@ var init_BUNDLE = __esm({
|
|
|
1245
1245
|
sha256: "0c63c29e7d4b1ba1fce4e94057778b0757767b25ea4f6f01d329e99351568f30"
|
|
1246
1246
|
},
|
|
1247
1247
|
"blender_browser.wasm.br": {
|
|
1248
|
-
bytes:
|
|
1249
|
-
sha256: "
|
|
1248
|
+
bytes: 18596913,
|
|
1249
|
+
sha256: "64af23954e1911ffcb879f69a9e8c9bbd83b5531939b586228f44fcea8211e3b"
|
|
1250
1250
|
},
|
|
1251
1251
|
"blender_browser.data.br": {
|
|
1252
1252
|
bytes: 8056563,
|
|
@@ -1257,10 +1257,10 @@ var init_BUNDLE = __esm({
|
|
|
1257
1257
|
sha256: "4085e9336266cf66f061d4d5c962a5929cc96d5732c746b5c13ea05cd104a75b"
|
|
1258
1258
|
}
|
|
1259
1259
|
},
|
|
1260
|
-
note: "
|
|
1260
|
+
note: "Unreleased Stoneguard candidate. Clean source build at the named commit; Release -O3 objects and -O2 link, Emscripten 6.0.5. Focused geometry regression matches shipped engine across original, vertex edit and subdivision-level edit. Full historical battery is absent from current editor checkout; no full-battery claim.",
|
|
1261
1261
|
callTrampoline: "CPython 3.13.13 is compiled with PY_CALL_TRAMPOLINE for Blender CPython slot arity casts. This applies to CPython dispatch, not arbitrary indirect calls.",
|
|
1262
1262
|
engineIds: "The existing session registers Python render engines under CYCLES, BLENDER_EEVEE and BLENDER_WORKBENCH; the headless build permits built-in IDs to be shadowed.",
|
|
1263
|
-
exportDoor: "The source-owned bpy_web_export.cc exports Principled physical inputs, normal images, eight named UV layers and evaluated corner normals, and takes graph_materials/graph_images/graph_generated (a graph-drawn shader mix reduced to the one Principled BSDF it reaches, graph images at the door revisions with every UDIM tile, orco for deformed meshes whose graph reads Generated coordinates). A frame can defer its changed meshes and pictures (defer) for the caller to pull one at a time (export_mesh, export_image), each call freeing the previous one's columns and a picture it decoded; an undo step keeps the revisions when Blender kept the depsgraph (session_undo); Blender's CPU subdivision descriptor is released once a mesh is read; the memory door reports malloc in-use and free. Datablock revisions are keyed by session_uid. writefile.cc writes one copy of the document per save in the browser build.",
|
|
1263
|
+
exportDoor: "The source-owned bpy_web_export.cc exports Principled physical inputs, normal images, eight named UV layers and evaluated corner normals, and takes graph_materials/graph_images/graph_generated (a graph-drawn shader mix reduced to the one Principled BSDF it reaches, graph images at the door revisions with every UDIM tile, orco for deformed meshes whose graph reads Generated coordinates). A frame can defer its changed meshes and pictures (defer) for the caller to pull one at a time (export_mesh, export_image), each call freeing the previous one's columns and a picture it decoded; an undo step keeps the revisions when Blender kept the depsgraph (session_undo); Blender's CPU subdivision descriptor is released once a mesh is read; the memory door reports malloc in-use and free. Datablock revisions are keyed by session_uid. writefile.cc writes one copy of the document per save in the browser build. CPU evaluators adopt stencil tables without cloning; browser subdivision descriptors are released immediately after CPU tessellation/deformation.",
|
|
1264
1264
|
preloadedPayload: "releasePreloadedFileData releases the JS preload buffer after session ready. The measured working payload exclusions are retained."
|
|
1265
1265
|
};
|
|
1266
1266
|
}
|
|
@@ -2014,8 +2014,8 @@ __export(blender_mcp_exports, {
|
|
|
2014
2014
|
serveBlenderMcp: () => serveBlenderMcp
|
|
2015
2015
|
});
|
|
2016
2016
|
import { randomUUID } from "node:crypto";
|
|
2017
|
-
import { mkdirSync as
|
|
2018
|
-
import { dirname as
|
|
2017
|
+
import { mkdirSync as mkdirSync10, readFileSync as readFileSync12, writeFileSync as writeFileSync10 } from "node:fs";
|
|
2018
|
+
import { dirname as dirname8, relative as relative6, sep as sep3 } from "node:path";
|
|
2019
2019
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2020
2020
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
2021
2021
|
import {
|
|
@@ -2206,15 +2206,15 @@ var init_blender_mcp = __esm({
|
|
|
2206
2206
|
const bytes = Buffer.from(await spooled.arrayBuffer());
|
|
2207
2207
|
if (shipped === null) {
|
|
2208
2208
|
try {
|
|
2209
|
-
if (
|
|
2209
|
+
if (readFileSync12(entry.path).equals(bytes)) {
|
|
2210
2210
|
this.#seen.set(entry.path, stamp);
|
|
2211
2211
|
continue;
|
|
2212
2212
|
}
|
|
2213
2213
|
} catch (error) {
|
|
2214
2214
|
if (error.code !== "ENOENT") throw error;
|
|
2215
2215
|
}
|
|
2216
|
-
|
|
2217
|
-
|
|
2216
|
+
mkdirSync10(dirname8(entry.path), { recursive: true });
|
|
2217
|
+
writeFileSync10(entry.path, bytes);
|
|
2218
2218
|
} else {
|
|
2219
2219
|
const query = new URLSearchParams({
|
|
2220
2220
|
path: shipped,
|
|
@@ -2309,15 +2309,15 @@ var init_blender_mcp = __esm({
|
|
|
2309
2309
|
|
|
2310
2310
|
// node/cli.ts
|
|
2311
2311
|
import { parseArgs } from "node:util";
|
|
2312
|
-
import { dirname as
|
|
2313
|
-
import { spawn as
|
|
2312
|
+
import { dirname as dirname9, resolve as resolve12 } from "node:path";
|
|
2313
|
+
import { spawn as spawn4 } from "node:child_process";
|
|
2314
2314
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
2315
2315
|
|
|
2316
2316
|
// package.json
|
|
2317
2317
|
var package_default = {
|
|
2318
2318
|
name: "@volter/game-editor",
|
|
2319
2319
|
author: "Volter AI, Inc.",
|
|
2320
|
-
version: "0.5.
|
|
2320
|
+
version: "0.5.114",
|
|
2321
2321
|
publishConfig: {
|
|
2322
2322
|
access: "public"
|
|
2323
2323
|
},
|
|
@@ -2366,22 +2366,22 @@ var package_default = {
|
|
|
2366
2366
|
}
|
|
2367
2367
|
},
|
|
2368
2368
|
dependencies: {
|
|
2369
|
-
"@volter/editor-core": "0.5.
|
|
2370
|
-
"@volter/editor-game": "0.5.
|
|
2371
|
-
"@volter/editor-react": "0.5.
|
|
2372
|
-
"@volter/editor-threejs": "0.5.
|
|
2373
|
-
"@volter/editor-xstate": "0.5.
|
|
2374
|
-
"@volter/editor-blender": "0.1.
|
|
2375
|
-
"@volter/dawproject": "0.5.
|
|
2376
|
-
"@volter/editor-dawproject": "0.5.
|
|
2377
|
-
"@volter/blender-engine": "0.1.
|
|
2378
|
-
"@volter/editor-project": "0.5.
|
|
2379
|
-
"@volter/editor-sdk": "0.5.
|
|
2380
|
-
"@volter/editor-live": "0.5.
|
|
2381
|
-
"@volter/game-live": "0.5.
|
|
2369
|
+
"@volter/editor-core": "0.5.114",
|
|
2370
|
+
"@volter/editor-game": "0.5.114",
|
|
2371
|
+
"@volter/editor-react": "0.5.114",
|
|
2372
|
+
"@volter/editor-threejs": "0.5.114",
|
|
2373
|
+
"@volter/editor-xstate": "0.5.114",
|
|
2374
|
+
"@volter/editor-blender": "0.1.54",
|
|
2375
|
+
"@volter/dawproject": "0.5.114",
|
|
2376
|
+
"@volter/editor-dawproject": "0.5.114",
|
|
2377
|
+
"@volter/blender-engine": "0.1.52",
|
|
2378
|
+
"@volter/editor-project": "0.5.114",
|
|
2379
|
+
"@volter/editor-sdk": "0.5.114",
|
|
2380
|
+
"@volter/editor-live": "0.5.114",
|
|
2381
|
+
"@volter/game-live": "0.5.114",
|
|
2382
2382
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
2383
|
-
"@volter/game-runtime": "0.5.
|
|
2384
|
-
"@volter/threejs-runtime": "0.5.
|
|
2383
|
+
"@volter/game-runtime": "0.5.114",
|
|
2384
|
+
"@volter/threejs-runtime": "0.5.114",
|
|
2385
2385
|
undici: "7.29.1",
|
|
2386
2386
|
typescript: "5.9.3",
|
|
2387
2387
|
"@colyseus/schema": "^4.0.14",
|
|
@@ -6600,7 +6600,7 @@ function killEditorSessionProcess(pid, signal = "SIGTERM") {
|
|
|
6600
6600
|
async function waitForPidExit(pid, timeoutMs) {
|
|
6601
6601
|
const deadline = Date.now() + timeoutMs;
|
|
6602
6602
|
while (pidAlive(pid) && Date.now() < deadline) {
|
|
6603
|
-
await new Promise((
|
|
6603
|
+
await new Promise((resolve13) => setTimeout(resolve13, 50));
|
|
6604
6604
|
}
|
|
6605
6605
|
return !pidAlive(pid);
|
|
6606
6606
|
}
|
|
@@ -7470,7 +7470,105 @@ async function currentPageErrors(serverUrl) {
|
|
|
7470
7470
|
}
|
|
7471
7471
|
}
|
|
7472
7472
|
|
|
7473
|
-
// ../editor-core/dist/server/chunk-
|
|
7473
|
+
// ../editor-core/dist/server/chunk-T7N5AXLU.js
|
|
7474
|
+
var HOSTED_ATTACHMENT_PATH = "/__editor-hosted";
|
|
7475
|
+
var HOSTED_ATTACHMENT_FRAGMENT = "volter-editor-attach";
|
|
7476
|
+
var HOSTED_MESSAGE_BYTES = 32 * 1024 * 1024;
|
|
7477
|
+
var HOSTED_REQUEST_BYTES = 1024 * 1024;
|
|
7478
|
+
function isHostedRequest(value) {
|
|
7479
|
+
if (!value || typeof value !== "object") return false;
|
|
7480
|
+
const v = value;
|
|
7481
|
+
return v["type"] === "request" && typeof v["id"] === "string" && /^[a-zA-Z0-9-]{1,80}$/.test(v["id"]) && typeof v["path"] === "string" && /^\/__editor\/[a-zA-Z0-9_/?=&%.-]+$/.test(v["path"]) && !v["path"].includes("..") && (v["method"] === "GET" || v["method"] === "POST") && (v["body"] === void 0 || typeof v["body"] === "string" && new TextEncoder().encode(v["body"]).length <= HOSTED_REQUEST_BYTES);
|
|
7482
|
+
}
|
|
7483
|
+
function hostedSocketUrl(endpoint) {
|
|
7484
|
+
const url = new URL(endpoint);
|
|
7485
|
+
if (url.protocol !== "https:" && !(url.protocol === "http:" && ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname)))
|
|
7486
|
+
throw new Error("Hosted attachments require HTTPS (or local loopback HTTP).");
|
|
7487
|
+
url.protocol = url.protocol === "https:" ? "wss:" : "ws:";
|
|
7488
|
+
return url.href;
|
|
7489
|
+
}
|
|
7490
|
+
async function connectHostedAttachment(attachment) {
|
|
7491
|
+
const socket = new WebSocket(hostedSocketUrl(attachment.endpoint));
|
|
7492
|
+
const pending = /* @__PURE__ */ new Map();
|
|
7493
|
+
let state = {};
|
|
7494
|
+
const ready = new Promise((resolve13, reject) => {
|
|
7495
|
+
const timer = setTimeout(() => {
|
|
7496
|
+
reject(new Error("Hosted attachment did not answer."));
|
|
7497
|
+
socket.close();
|
|
7498
|
+
}, 15e3);
|
|
7499
|
+
socket.addEventListener("open", () => socket.send(JSON.stringify({ type: "auth", role: "client", token: attachment.token })));
|
|
7500
|
+
socket.addEventListener("message", (event) => {
|
|
7501
|
+
try {
|
|
7502
|
+
const value = JSON.parse(String(event.data));
|
|
7503
|
+
if (value.type === "ready") {
|
|
7504
|
+
state = value.state ?? {};
|
|
7505
|
+
clearTimeout(timer);
|
|
7506
|
+
resolve13();
|
|
7507
|
+
} else if (value.type === "state") state = value.state ?? {};
|
|
7508
|
+
else if (value.type === "response") {
|
|
7509
|
+
const call = pending.get(value.id);
|
|
7510
|
+
if (!call) return;
|
|
7511
|
+
pending.delete(value.id);
|
|
7512
|
+
call.cleanup();
|
|
7513
|
+
if (value.error) call.reject(new Error(value.error));
|
|
7514
|
+
else call.resolve(new Response([204, 205, 304].includes(value.status) ? null : value.body, {
|
|
7515
|
+
status: value.status,
|
|
7516
|
+
headers: { "content-type": "application/json" }
|
|
7517
|
+
}));
|
|
7518
|
+
} else if (value.type === "error") {
|
|
7519
|
+
clearTimeout(timer);
|
|
7520
|
+
reject(new Error(value.error));
|
|
7521
|
+
socket.close();
|
|
7522
|
+
}
|
|
7523
|
+
} catch (error) {
|
|
7524
|
+
clearTimeout(timer);
|
|
7525
|
+
reject(error);
|
|
7526
|
+
socket.close();
|
|
7527
|
+
}
|
|
7528
|
+
});
|
|
7529
|
+
socket.addEventListener("close", () => {
|
|
7530
|
+
clearTimeout(timer);
|
|
7531
|
+
reject(new Error("Hosted attachment disconnected."));
|
|
7532
|
+
for (const call of pending.values()) {
|
|
7533
|
+
call.cleanup();
|
|
7534
|
+
call.reject(new Error("Hosted attachment disconnected; the request was not replayed."));
|
|
7535
|
+
}
|
|
7536
|
+
pending.clear();
|
|
7537
|
+
});
|
|
7538
|
+
socket.addEventListener("error", () => {
|
|
7539
|
+
clearTimeout(timer);
|
|
7540
|
+
reject(new Error("Hosted attachment connection failed."));
|
|
7541
|
+
});
|
|
7542
|
+
});
|
|
7543
|
+
await ready;
|
|
7544
|
+
const remoteFetch = async (input, init) => {
|
|
7545
|
+
const request = new Request(input, init);
|
|
7546
|
+
const url = new URL(request.url);
|
|
7547
|
+
const message = { type: "request", id: crypto.randomUUID(), path: url.pathname + url.search, method: request.method };
|
|
7548
|
+
if (request.body) message.body = await request.text();
|
|
7549
|
+
if (!isHostedRequest(message)) throw new Error("Hosted attachment only carries bounded editor HTTP requests.");
|
|
7550
|
+
request.signal.throwIfAborted();
|
|
7551
|
+
return await new Promise((resolve13, reject) => {
|
|
7552
|
+
const abort = () => {
|
|
7553
|
+
pending.delete(message.id);
|
|
7554
|
+
if (socket.readyState === WebSocket.OPEN) socket.send(JSON.stringify({ type: "cancel", id: message.id }));
|
|
7555
|
+
reject(new Error("Hosted request cancelled; any completed mutation is not undone."));
|
|
7556
|
+
};
|
|
7557
|
+
if (socket.readyState !== WebSocket.OPEN) {
|
|
7558
|
+
reject(new Error("Hosted attachment is disconnected."));
|
|
7559
|
+
return;
|
|
7560
|
+
}
|
|
7561
|
+
pending.set(message.id, { resolve: resolve13, reject, cleanup: () => request.signal.removeEventListener("abort", abort) });
|
|
7562
|
+
request.signal.addEventListener("abort", abort, { once: true });
|
|
7563
|
+
socket.send(JSON.stringify(message));
|
|
7564
|
+
});
|
|
7565
|
+
};
|
|
7566
|
+
return { fetch: remoteFetch, get state() {
|
|
7567
|
+
return state;
|
|
7568
|
+
}, close: () => socket.close() };
|
|
7569
|
+
}
|
|
7570
|
+
|
|
7571
|
+
// ../editor-core/dist/server/chunk-7GX6XNCW.js
|
|
7474
7572
|
import { Agent, fetch as nodeFetch } from "undici";
|
|
7475
7573
|
function createDispatcher(timeoutMs) {
|
|
7476
7574
|
return new Agent({ headersTimeout: timeoutMs, bodyTimeout: timeoutMs });
|
|
@@ -7546,6 +7644,7 @@ var RETRYABLE_TRANSPORT_CODES = /* @__PURE__ */ new Set([
|
|
|
7546
7644
|
var TRANSPORT_RETRY_DELAY_MS = 400;
|
|
7547
7645
|
var EditorClient = class {
|
|
7548
7646
|
baseUrl;
|
|
7647
|
+
fetchOverride;
|
|
7549
7648
|
/**
|
|
7550
7649
|
* The running game's debug plane — see {@link GameDebugDoor}. It rides the
|
|
7551
7650
|
* SAME `/__editor/command` relay every other method here uses (relay cases
|
|
@@ -7575,7 +7674,7 @@ var EditorClient = class {
|
|
|
7575
7674
|
);
|
|
7576
7675
|
}
|
|
7577
7676
|
const unknownOptions = Object.keys(opts ?? {}).filter(
|
|
7578
|
-
(key) => key !== "url" && key !== "onEnvelope" && key !== "transport"
|
|
7677
|
+
(key) => key !== "url" && key !== "onEnvelope" && key !== "transport" && key !== "fetch"
|
|
7579
7678
|
);
|
|
7580
7679
|
if (unknownOptions.length > 0) {
|
|
7581
7680
|
throw new Error(
|
|
@@ -7583,6 +7682,7 @@ var EditorClient = class {
|
|
|
7583
7682
|
);
|
|
7584
7683
|
}
|
|
7585
7684
|
this.baseUrl = (opts?.url ?? DEFAULT_URL).replace(/\/$/, "");
|
|
7685
|
+
this.fetchOverride = opts?.fetch;
|
|
7586
7686
|
this.onEnvelope = opts?.onEnvelope ?? null;
|
|
7587
7687
|
this.transport = opts?.transport ?? null;
|
|
7588
7688
|
this.game = {
|
|
@@ -7631,7 +7731,7 @@ var EditorClient = class {
|
|
|
7631
7731
|
signal: AbortSignal.timeout(deadlineMs)
|
|
7632
7732
|
};
|
|
7633
7733
|
commandDispatcher = deadlineMs > UNDICI_DEFAULT_HEADERS_TIMEOUT_MS ? createDispatcher(deadlineMs + 3e4) : void 0;
|
|
7634
|
-
res = await dispatchFetch(url, init, commandDispatcher);
|
|
7734
|
+
res = this.fetchOverride ? await this.fetchOverride(url, init) : await dispatchFetch(url, init, commandDispatcher);
|
|
7635
7735
|
break;
|
|
7636
7736
|
} catch (error) {
|
|
7637
7737
|
await commandDispatcher?.destroy?.();
|
|
@@ -7646,7 +7746,7 @@ var EditorClient = class {
|
|
|
7646
7746
|
const { code, detail } = describeFetchFailure(error);
|
|
7647
7747
|
if (options?.retryTransport === true && !retried && RETRYABLE_TRANSPORT_CODES.has(code)) {
|
|
7648
7748
|
retried = true;
|
|
7649
|
-
await new Promise((
|
|
7749
|
+
await new Promise((resolve13) => setTimeout(resolve13, TRANSPORT_RETRY_DELAY_MS));
|
|
7650
7750
|
continue;
|
|
7651
7751
|
}
|
|
7652
7752
|
throw new EditorCommandError(
|
|
@@ -8542,7 +8642,7 @@ var EditorClient = class {
|
|
|
8542
8642
|
*/
|
|
8543
8643
|
async httpFetch(url, init, dispatcher) {
|
|
8544
8644
|
try {
|
|
8545
|
-
return await dispatchFetch(url, init, dispatcher);
|
|
8645
|
+
return this.fetchOverride ? await this.fetchOverride(url, init) : await dispatchFetch(url, init, dispatcher);
|
|
8546
8646
|
} catch (error) {
|
|
8547
8647
|
if (error?.name === "TimeoutError") throw error;
|
|
8548
8648
|
const { code, detail } = describeFetchFailure(error);
|
|
@@ -8736,7 +8836,85 @@ function relayCommandTimeoutMs(type) {
|
|
|
8736
8836
|
return isRelayCommandType(type) ? RELAY_COMMANDS[type].timeoutMs : DEFAULT_RELAY_COMMAND_TIMEOUT_MS;
|
|
8737
8837
|
}
|
|
8738
8838
|
|
|
8739
|
-
// ../editor-core/dist/server/
|
|
8839
|
+
// ../editor-core/dist/server/chunk-TMIV3AST.js
|
|
8840
|
+
import { spawn as spawn3 } from "node:child_process";
|
|
8841
|
+
var OPENER_STDERR_CAP_BYTES = 2048;
|
|
8842
|
+
var OPENER_EXIT_WATCH_TIMEOUT_MS = 2e4;
|
|
8843
|
+
function spawnOpener(cmd, cmdArgs, fallback) {
|
|
8844
|
+
let child;
|
|
8845
|
+
try {
|
|
8846
|
+
child = spawn3(cmd, cmdArgs, { stdio: ["ignore", "ignore", "pipe"], detached: true });
|
|
8847
|
+
} catch (err) {
|
|
8848
|
+
console.error(`volter: auto-open via ${cmd} failed: ${err.message}`);
|
|
8849
|
+
fallback?.();
|
|
8850
|
+
return;
|
|
8851
|
+
}
|
|
8852
|
+
const stderrChunks = [];
|
|
8853
|
+
let stderrBytes = 0;
|
|
8854
|
+
child.stderr?.on("data", (chunk) => {
|
|
8855
|
+
if (stderrBytes >= OPENER_STDERR_CAP_BYTES) return;
|
|
8856
|
+
const remaining = OPENER_STDERR_CAP_BYTES - stderrBytes;
|
|
8857
|
+
const slice = chunk.length > remaining ? chunk.subarray(0, remaining) : chunk;
|
|
8858
|
+
stderrChunks.push(slice);
|
|
8859
|
+
stderrBytes += slice.length;
|
|
8860
|
+
});
|
|
8861
|
+
child.on("error", (err) => {
|
|
8862
|
+
console.error(`volter: auto-open via ${cmd} failed to launch: ${err.message}`);
|
|
8863
|
+
fallback?.();
|
|
8864
|
+
});
|
|
8865
|
+
child.on("exit", (code) => {
|
|
8866
|
+
if (code !== null && code !== 0) {
|
|
8867
|
+
const stderr = Buffer.concat(stderrChunks).toString("utf8").trim();
|
|
8868
|
+
console.error(`volter: auto-open via ${cmd} exited ${code}: ${stderr}`);
|
|
8869
|
+
fallback?.();
|
|
8870
|
+
}
|
|
8871
|
+
});
|
|
8872
|
+
child.unref();
|
|
8873
|
+
const pipeTimeout = setTimeout(() => {
|
|
8874
|
+
child.stderr?.destroy();
|
|
8875
|
+
}, OPENER_EXIT_WATCH_TIMEOUT_MS);
|
|
8876
|
+
pipeTimeout.unref();
|
|
8877
|
+
}
|
|
8878
|
+
|
|
8879
|
+
// ../editor-core/dist/server/chunk-VIML3FNI.js
|
|
8880
|
+
import { existsSync as existsSync7, readFileSync as readFileSync8 } from "node:fs";
|
|
8881
|
+
function isWSL() {
|
|
8882
|
+
if (process.platform !== "linux") return false;
|
|
8883
|
+
try {
|
|
8884
|
+
return readFileSync8("/proc/version", "utf8").toLowerCase().includes("microsoft");
|
|
8885
|
+
} catch {
|
|
8886
|
+
return false;
|
|
8887
|
+
}
|
|
8888
|
+
}
|
|
8889
|
+
function openBrowserUrl(browserUrl, options) {
|
|
8890
|
+
if (process.platform === "darwin") {
|
|
8891
|
+
spawnOpener("open", options?.background === true ? ["-g", browserUrl] : [browserUrl]);
|
|
8892
|
+
} else if (process.platform === "win32") {
|
|
8893
|
+
spawnOpener("cmd", ["/c", "start", "", browserUrl]);
|
|
8894
|
+
} else if (isWSL()) {
|
|
8895
|
+
const interop = process.env["WSL_INTEROP"];
|
|
8896
|
+
if (interop && !existsSync7(interop)) {
|
|
8897
|
+
console.error(
|
|
8898
|
+
`[volter-editor] cannot open a browser from this shell \u2014 the WSL interop socket (${interop}) is gone, so Windows executables cannot launch. Open ${browserUrl} from any regular terminal or browser instead.`
|
|
8899
|
+
);
|
|
8900
|
+
return;
|
|
8901
|
+
}
|
|
8902
|
+
spawnOpener(
|
|
8903
|
+
"explorer.exe",
|
|
8904
|
+
[browserUrl],
|
|
8905
|
+
() => spawnOpener("powershell.exe", ["-NoProfile", "-Command", `Start-Process '${browserUrl}'`])
|
|
8906
|
+
);
|
|
8907
|
+
} else {
|
|
8908
|
+
spawnOpener("xdg-open", [browserUrl]);
|
|
8909
|
+
}
|
|
8910
|
+
}
|
|
8911
|
+
|
|
8912
|
+
// ../editor-core/dist/server/chunk-2HZZ3DF7.js
|
|
8913
|
+
import { createHash as createHash4 } from "node:crypto";
|
|
8914
|
+
import { mkdirSync as mkdirSync7, readFileSync as readFileSync9, writeFileSync as writeFileSync7, rmSync as rmSync4, existsSync as existsSync8 } from "node:fs";
|
|
8915
|
+
import { homedir as homedir4 } from "node:os";
|
|
8916
|
+
import { dirname as dirname6, join as join9, resolve as resolve8 } from "node:path";
|
|
8917
|
+
import { LiveEditor, LiveTools } from "@volter/editor-live";
|
|
8740
8918
|
import { connect, unconnectedBindings } from "@volter/editor-live";
|
|
8741
8919
|
var NOISE = /* @__PURE__ */ new Set(["constructor", "then", "catch", "finally"]);
|
|
8742
8920
|
var FUNCTION_NOISE = /* @__PURE__ */ new Set(["length", "name", "prototype", "arguments", "caller"]);
|
|
@@ -8839,14 +9017,14 @@ var TOOL_CONTRIBUTION_SUFFIXES = [
|
|
|
8839
9017
|
".service"
|
|
8840
9018
|
];
|
|
8841
9019
|
var CONTROLLER_DISCONNECTED_MESSAGE = "The editor tab controlling this command disconnected before reporting a result.";
|
|
8842
|
-
async function control(command, verb, argument, reason, scope) {
|
|
9020
|
+
async function control(command, verb, argument, reason, scope, attachment) {
|
|
8843
9021
|
if (verb === "eval" && argument === "--list") {
|
|
8844
9022
|
const unconnected = { ...unconnectedBindings(), session: { port: 0, projectRoot: process.cwd() } };
|
|
8845
9023
|
console.log(formatSurface(command, { ...unconnected, ...scope?.(unconnected) }));
|
|
8846
9024
|
return;
|
|
8847
9025
|
}
|
|
8848
|
-
const live = await connect();
|
|
8849
|
-
const client = new EditorClient({ url: `http://127.0.0.1:${live.session.port}` });
|
|
9026
|
+
const live = attachment?.live ?? await connect();
|
|
9027
|
+
const client = attachment?.client ?? new EditorClient({ url: `http://127.0.0.1:${live.session.port}` });
|
|
8850
9028
|
if (verb === "close") {
|
|
8851
9029
|
const session = (await verifiedSessions(live.session.port)).find((s) => s.port === live.session.port && s.project === live.session.projectRoot && s.registered);
|
|
8852
9030
|
if (!session?.pid) throw new Error("Cannot close a session without verified process ownership.");
|
|
@@ -8891,13 +9069,97 @@ async function control(command, verb, argument, reason, scope) {
|
|
|
8891
9069
|
process.exitCode = 1;
|
|
8892
9070
|
}
|
|
8893
9071
|
}
|
|
9072
|
+
var HOSTED_USAGE = "hosted attach <https-url> | hosted status | hosted eval <JavaScript> | hosted screenshot <file.png> | hosted detach";
|
|
9073
|
+
function stateFile() {
|
|
9074
|
+
const key = createHash4("sha256").update(resolve8(process.cwd())).digest("hex");
|
|
9075
|
+
return join9(homedir4(), ".local", "state", "volter-editor", "hosted", `${key}.json`);
|
|
9076
|
+
}
|
|
9077
|
+
async function hostedControl(command, args) {
|
|
9078
|
+
const [verb, argument] = args;
|
|
9079
|
+
if (args.length > (verb === "attach" || verb === "eval" || verb === "screenshot" ? 2 : 1)) throw new Error(HOSTED_USAGE);
|
|
9080
|
+
const file = stateFile();
|
|
9081
|
+
if (verb === "attach") {
|
|
9082
|
+
if (!argument) throw new Error(HOSTED_USAGE);
|
|
9083
|
+
if (existsSync8(file)) throw new Error("This directory already has a hosted attachment. Use hosted status or hosted detach; attaching never opens a duplicate tab.");
|
|
9084
|
+
const page = new URL(argument);
|
|
9085
|
+
if (page.username || page.password || page.hash) throw new Error("Use the hosted page URL without credentials or a fragment.");
|
|
9086
|
+
hostedSocketUrl(page.href);
|
|
9087
|
+
const response = await fetch(new URL(HOSTED_ATTACHMENT_PATH, page), {
|
|
9088
|
+
method: "POST",
|
|
9089
|
+
headers: { "content-type": "application/json" },
|
|
9090
|
+
body: JSON.stringify({ page: page.href }),
|
|
9091
|
+
signal: AbortSignal.timeout(15e3),
|
|
9092
|
+
redirect: "error"
|
|
9093
|
+
});
|
|
9094
|
+
if (!response.ok) throw new Error(`Hosted attachment refused (${response.status}): ${(await response.text()).slice(0, 500)}`);
|
|
9095
|
+
const created = await response.json();
|
|
9096
|
+
if (created.page !== page.href || new URL(created.endpoint).origin !== page.origin || !/^[a-f0-9]{64}$/.test(created.clientToken) || !/^[a-f0-9]{64}$/.test(created.workerToken)) throw new Error("Invalid hosted attachment response.");
|
|
9097
|
+
const common = { id: created.id, endpoint: created.endpoint, page: created.page, expiresAt: created.expiresAt };
|
|
9098
|
+
mkdirSync7(dirname6(file), { recursive: true, mode: 448 });
|
|
9099
|
+
writeFileSync7(file, JSON.stringify({ ...common, token: created.clientToken }), { mode: 384, flag: "wx" });
|
|
9100
|
+
page.hash = new URLSearchParams({ [HOSTED_ATTACHMENT_FRAGMENT]: JSON.stringify({ ...common, token: created.workerToken }) }).toString();
|
|
9101
|
+
openBrowserUrl(page.href, { background: true });
|
|
9102
|
+
console.log(`Opening hosted editor: ${created.page}
|
|
9103
|
+
Use ${command} hosted status from this directory. Attachment expires ${new Date(created.expiresAt).toISOString()}.`);
|
|
9104
|
+
return;
|
|
9105
|
+
}
|
|
9106
|
+
if (!["status", "eval", "screenshot", "detach"].includes(verb ?? "")) throw new Error(HOSTED_USAGE);
|
|
9107
|
+
let attachment;
|
|
9108
|
+
try {
|
|
9109
|
+
attachment = JSON.parse(readFileSync9(file, "utf8"));
|
|
9110
|
+
} catch {
|
|
9111
|
+
throw new Error(`No hosted attachment in this directory. Run ${command} hosted attach <https-url>.`);
|
|
9112
|
+
}
|
|
9113
|
+
if (verb === "detach") {
|
|
9114
|
+
const socket = new WebSocket(hostedSocketUrl(attachment.endpoint));
|
|
9115
|
+
await new Promise((done) => {
|
|
9116
|
+
const timer = setTimeout(() => {
|
|
9117
|
+
socket.close();
|
|
9118
|
+
done();
|
|
9119
|
+
}, 5e3);
|
|
9120
|
+
socket.addEventListener("open", () => socket.send(JSON.stringify({ type: "auth", role: "client", token: attachment.token })));
|
|
9121
|
+
socket.addEventListener("message", (event) => {
|
|
9122
|
+
if (JSON.parse(String(event.data)).type === "ready") socket.send(JSON.stringify({ type: "revoke" }));
|
|
9123
|
+
});
|
|
9124
|
+
socket.addEventListener("close", () => {
|
|
9125
|
+
clearTimeout(timer);
|
|
9126
|
+
done();
|
|
9127
|
+
});
|
|
9128
|
+
socket.addEventListener("error", () => {
|
|
9129
|
+
clearTimeout(timer);
|
|
9130
|
+
done();
|
|
9131
|
+
});
|
|
9132
|
+
});
|
|
9133
|
+
rmSync4(file);
|
|
9134
|
+
console.log("Hosted attachment removed. The browser document is preserved.");
|
|
9135
|
+
return;
|
|
9136
|
+
}
|
|
9137
|
+
const remote = await connectHostedAttachment(attachment);
|
|
9138
|
+
try {
|
|
9139
|
+
if (verb === "status" && remote.state["phase"] !== "ready") {
|
|
9140
|
+
console.log(JSON.stringify(remote.state, null, 2));
|
|
9141
|
+
return;
|
|
9142
|
+
}
|
|
9143
|
+
const client = new EditorClient({ url: "http://127.0.0.1", fetch: remote.fetch });
|
|
9144
|
+
const live = { editor: new LiveEditor(client), tools: new LiveTools(client), session: { port: 0, projectRoot: attachment.page } };
|
|
9145
|
+
if (verb === "screenshot") {
|
|
9146
|
+
if (!argument?.endsWith(".png")) throw new Error("hosted screenshot requires an output .png path.");
|
|
9147
|
+
const shot = await live.editor.screenshot();
|
|
9148
|
+
if (shot.mimeType !== "image/png") throw new Error("Editor did not return a PNG viewport.");
|
|
9149
|
+
writeFileSync7(resolve8(argument), Buffer.from(shot.base64, "base64"));
|
|
9150
|
+
console.log(resolve8(argument));
|
|
9151
|
+
} else await control(command, verb, argument, void 0, void 0, { live, client });
|
|
9152
|
+
} finally {
|
|
9153
|
+
remote.close();
|
|
9154
|
+
}
|
|
9155
|
+
}
|
|
8894
9156
|
|
|
8895
9157
|
// ../editor-core/dist/server/launcher/session-verbs.js
|
|
8896
|
-
import { existsSync as
|
|
8897
|
-
import { basename as basename3, dirname as
|
|
9158
|
+
import { existsSync as existsSync9, mkdirSync as mkdirSync8, readFileSync as readFileSync10, statSync as statSync4, writeFileSync as writeFileSync8 } from "node:fs";
|
|
9159
|
+
import { basename as basename3, dirname as dirname7, join as join23, resolve as resolve23 } from "node:path";
|
|
8898
9160
|
import { setTimeout as delay2 } from "node:timers/promises";
|
|
8899
9161
|
import { resolveSession } from "@volter/editor-live";
|
|
8900
|
-
import { isAbsolute as isAbsolute4, join as
|
|
9162
|
+
import { isAbsolute as isAbsolute4, join as join10, relative as relative5, resolve as resolve9 } from "node:path";
|
|
8901
9163
|
var DEFAULT_RESTART_TIMINGS = {
|
|
8902
9164
|
reachableBudgetMs: 15e3,
|
|
8903
9165
|
probeIntervalMs: 250,
|
|
@@ -9048,9 +9310,9 @@ function classifyScreenshotTarget(target) {
|
|
|
9048
9310
|
}
|
|
9049
9311
|
function resolveModelTarget(target, options) {
|
|
9050
9312
|
const { cwd, projectRoot, exists } = options;
|
|
9051
|
-
const candidates = [
|
|
9313
|
+
const candidates = [resolve9(cwd, target)];
|
|
9052
9314
|
if (target.startsWith("/") && projectRoot) {
|
|
9053
|
-
candidates.push(
|
|
9315
|
+
candidates.push(join10(projectRoot, target), join10(projectRoot, "public", target));
|
|
9054
9316
|
}
|
|
9055
9317
|
const file = candidates.find((candidate) => exists(candidate));
|
|
9056
9318
|
if (file === void 0) {
|
|
@@ -9280,7 +9542,7 @@ async function screenshot(target, options) {
|
|
|
9280
9542
|
const resolved = resolveModelTarget(classified.path, {
|
|
9281
9543
|
cwd: process.cwd(),
|
|
9282
9544
|
projectRoot: session.projectRoot,
|
|
9283
|
-
exists: (path) =>
|
|
9545
|
+
exists: (path) => existsSync9(path) && statSync4(path).isFile()
|
|
9284
9546
|
});
|
|
9285
9547
|
if ("error" in resolved) throw new Error(resolved.error);
|
|
9286
9548
|
await assertUnambiguousTarget(session.client, classified.path, resolved.file);
|
|
@@ -9290,7 +9552,7 @@ async function screenshot(target, options) {
|
|
|
9290
9552
|
return moduleLook(session.client, session.projectRoot, classified.path, flags);
|
|
9291
9553
|
case "entity": {
|
|
9292
9554
|
const asFile = resolve23(process.cwd(), classified.entityId);
|
|
9293
|
-
if (
|
|
9555
|
+
if (existsSync9(asFile) && statSync4(asFile).isFile()) await assertUnambiguousTarget(session.client, classified.entityId, asFile);
|
|
9294
9556
|
const resolved = resolveEntityTarget(classified.entityId, await liveEntityRows(session.client));
|
|
9295
9557
|
if ("error" in resolved) throw new Error(resolved.error);
|
|
9296
9558
|
return assetLabLook(session.client, { entityId: resolved.entityId }, flags, screenshotPath(session.projectRoot, resolved.entityId), "scene");
|
|
@@ -9310,8 +9572,8 @@ async function sessionLook(client, projectRoot) {
|
|
|
9310
9572
|
capture2 = await client.captureGame({ refreshStarvedFrame: true });
|
|
9311
9573
|
loopRecoveryFrame = true;
|
|
9312
9574
|
}
|
|
9313
|
-
|
|
9314
|
-
|
|
9575
|
+
mkdirSync8(dirname7(outPath), { recursive: true });
|
|
9576
|
+
writeFileSync8(outPath, Buffer.from(capture2.base64, "base64"));
|
|
9315
9577
|
console.log(outPath);
|
|
9316
9578
|
if (capture2.flatness?.degenerate === true && capture2.flatness.warning !== void 0) console.error(`warning \u2014 ${capture2.flatness.warning}`);
|
|
9317
9579
|
if (loopRecoveryFrame || capture2.loopRecoveryFrame === true) {
|
|
@@ -9322,8 +9584,8 @@ async function sessionLook(client, projectRoot) {
|
|
|
9322
9584
|
return;
|
|
9323
9585
|
}
|
|
9324
9586
|
const capture = await client.captureActiveDocument();
|
|
9325
|
-
|
|
9326
|
-
|
|
9587
|
+
mkdirSync8(dirname7(outPath), { recursive: true });
|
|
9588
|
+
writeFileSync8(outPath, Buffer.from(capture.base64, "base64"));
|
|
9327
9589
|
console.log(outPath);
|
|
9328
9590
|
console.error(`${capture.document.title} (${capture.document.kind}${capture.document.sourcePath ? `, ${capture.document.sourcePath}` : ""}) \u2014 ${capture.source}`);
|
|
9329
9591
|
}
|
|
@@ -9344,10 +9606,10 @@ async function assetLabLook(client, source, flags, outputDirectory, defaultStage
|
|
|
9344
9606
|
...flags.width === void 0 ? {} : { width: flags.width },
|
|
9345
9607
|
...flags.height === void 0 ? {} : { height: flags.height }
|
|
9346
9608
|
};
|
|
9347
|
-
|
|
9609
|
+
mkdirSync8(outputDirectory, { recursive: true });
|
|
9348
9610
|
if (flags.compare !== void 0) {
|
|
9349
9611
|
if (flags.shots !== void 0) throw new Error("--compare cannot be combined with --shots");
|
|
9350
|
-
const refBytes =
|
|
9612
|
+
const refBytes = readFileSync10(resolve23(flags.compare));
|
|
9351
9613
|
const maxRefBytes = 32 * 1024 * 1024;
|
|
9352
9614
|
if (refBytes.byteLength > maxRefBytes) throw new Error(`--compare reference GLB must be ${maxRefBytes / 1024 / 1024} MiB or less.`);
|
|
9353
9615
|
const capture2 = await client.captureAssetComparePreview(source, refBytes.toString("base64"), dimensions);
|
|
@@ -9355,7 +9617,7 @@ async function assetLabLook(client, source, flags, outputDirectory, defaultStage
|
|
|
9355
9617
|
for (const view of capture2.views) {
|
|
9356
9618
|
iou[view.view] = view.iou;
|
|
9357
9619
|
for (const [suffix, image] of [["overlay", view.overlay], ["asset", view.asset], ["ref", view.ref]]) {
|
|
9358
|
-
|
|
9620
|
+
writeFileSync8(join23(outputDirectory, `compare-${view.view}-${suffix}.png`), Buffer.from(image.base64, "base64"));
|
|
9359
9621
|
}
|
|
9360
9622
|
}
|
|
9361
9623
|
console.log(JSON.stringify({ compare: { iou } }));
|
|
@@ -9375,18 +9637,18 @@ async function assetLabLook(client, source, flags, outputDirectory, defaultStage
|
|
|
9375
9637
|
const warnings = new Map((capture2.warnings ?? []).map((warning) => [warning.label, warning]));
|
|
9376
9638
|
for (const image of capture2.shots) {
|
|
9377
9639
|
const file = join23(outputDirectory, `${image.label}.png`);
|
|
9378
|
-
|
|
9640
|
+
writeFileSync8(file, Buffer.from(image.base64, "base64"));
|
|
9379
9641
|
const warning = warnings.get(image.label);
|
|
9380
9642
|
if (warning) console.warn(`WARNING ${file}: ${warning.message}`);
|
|
9381
9643
|
}
|
|
9382
|
-
|
|
9644
|
+
writeFileSync8(join23(outputDirectory, "contact-sheet.png"), Buffer.from(capture2.contactSheet.base64, "base64"));
|
|
9383
9645
|
const empty = capture2.warnings?.length ?? 0;
|
|
9384
9646
|
console.log(`Shot set '${flags.shots}' preview (${capture2.shots.length} shots${empty > 0 ? `, ${empty} EMPTY \u2014 see the warnings above` : ""}) written to ${outputDirectory}`);
|
|
9385
9647
|
return;
|
|
9386
9648
|
}
|
|
9387
9649
|
const capture = await client.captureAssetPreview(source, { ...dimensions, ...defaultStage === void 0 ? {} : { stage: defaultStage } });
|
|
9388
|
-
for (const image of capture.views)
|
|
9389
|
-
|
|
9650
|
+
for (const image of capture.views) writeFileSync8(join23(outputDirectory, `${image.view}.png`), Buffer.from(image.base64, "base64"));
|
|
9651
|
+
writeFileSync8(join23(outputDirectory, "contact-sheet.png"), Buffer.from(capture.contactSheet.base64, "base64"));
|
|
9390
9652
|
console.log(`${join23(outputDirectory, "contact-sheet.png")} \u2190 every view on one sheet`);
|
|
9391
9653
|
console.log(` per-view frames beside it: ${capture.views.map((image) => `${image.view}.png`).join(" ")}`);
|
|
9392
9654
|
if (capture.orientation && capture.orientation.yawDegrees !== 0) {
|
|
@@ -9445,21 +9707,21 @@ async function moduleLook(client, projectRoot, modulePath, flags) {
|
|
|
9445
9707
|
|
|
9446
9708
|
// node/capabilities.ts
|
|
9447
9709
|
import { execFileSync as execFileSync5 } from "node:child_process";
|
|
9448
|
-
import { existsSync as
|
|
9449
|
-
import { join as
|
|
9710
|
+
import { existsSync as existsSync10 } from "node:fs";
|
|
9711
|
+
import { join as join11, resolve as resolve10 } from "node:path";
|
|
9450
9712
|
import { findProjectRootFrom } from "@volter/editor-live";
|
|
9451
9713
|
var CAPABILITY_OPTIONS = {
|
|
9452
9714
|
project: { type: "string" },
|
|
9453
9715
|
"dry-run": { type: "boolean" },
|
|
9454
9716
|
json: { type: "boolean" }
|
|
9455
9717
|
};
|
|
9456
|
-
var catalogDir =
|
|
9718
|
+
var catalogDir = join11(productRoot, "catalog");
|
|
9457
9719
|
function runCapabilityCommand(verb, ids, options) {
|
|
9458
9720
|
const dryRun = options["dry-run"] === true;
|
|
9459
9721
|
const json = options.json === true;
|
|
9460
9722
|
const log = console.log;
|
|
9461
9723
|
const emit = (value) => log(JSON.stringify(value, null, 2));
|
|
9462
|
-
const projectDir = findProjectRootFrom(
|
|
9724
|
+
const projectDir = findProjectRootFrom(resolve10(options.project ?? process.cwd()));
|
|
9463
9725
|
const catalog = readCatalog(catalogDir);
|
|
9464
9726
|
if (verb === "add" && ids.length === 0) {
|
|
9465
9727
|
const installed = new Set(projectDir ? readCatalogStatus(projectDir, catalogDir).installed : []);
|
|
@@ -9530,7 +9792,7 @@ Use \`git diff\` to see your changes, then port what you want from the new versi
|
|
|
9530
9792
|
resolveDependencySpec: (name, spec) => checkoutPackageSpec(name, monoRoot) ?? spec,
|
|
9531
9793
|
installDependencies: (dependencyNames) => {
|
|
9532
9794
|
if (usesRuntimeImage(projectDir)) {
|
|
9533
|
-
const missing = dependencyNames.filter((name) => !
|
|
9795
|
+
const missing = dependencyNames.filter((name) => !existsSync10(join11(projectDir, "node_modules", ...name.split("/"), "package.json")));
|
|
9534
9796
|
if (missing.length > 0) throw new Error(`The runtime image lacks ${missing.join(", ")}; this capability needs a game that installs its own dependencies.`);
|
|
9535
9797
|
return;
|
|
9536
9798
|
}
|
|
@@ -9571,24 +9833,24 @@ ${report.writtenFiles.map((path) => ` ${path}`).join("\n")}`);
|
|
|
9571
9833
|
import { execFileSync as execFileSync6 } from "node:child_process";
|
|
9572
9834
|
import {
|
|
9573
9835
|
createWriteStream as createWriteStream2,
|
|
9574
|
-
existsSync as
|
|
9575
|
-
mkdirSync as
|
|
9576
|
-
readFileSync as
|
|
9836
|
+
existsSync as existsSync11,
|
|
9837
|
+
mkdirSync as mkdirSync9,
|
|
9838
|
+
readFileSync as readFileSync11,
|
|
9577
9839
|
renameSync as renameSync3,
|
|
9578
|
-
rmSync as
|
|
9579
|
-
writeFileSync as
|
|
9840
|
+
rmSync as rmSync5,
|
|
9841
|
+
writeFileSync as writeFileSync9
|
|
9580
9842
|
} from "node:fs";
|
|
9581
|
-
import { homedir as
|
|
9582
|
-
import { isAbsolute as isAbsolute5, join as
|
|
9843
|
+
import { homedir as homedir5 } from "node:os";
|
|
9844
|
+
import { isAbsolute as isAbsolute5, join as join12, resolve as resolve11 } from "node:path";
|
|
9583
9845
|
var WORKBENCH_LOCATOR_PATH2 = ".volter/workbench.json";
|
|
9584
9846
|
var RELEASE_RECORD2 = "BUILD.json";
|
|
9585
|
-
var SOURCES_LAUNCHER2 =
|
|
9847
|
+
var SOURCES_LAUNCHER2 = join12("scripts", "code-server.sh");
|
|
9586
9848
|
var OVERLAY_RECORD2 = ".volter-overlay.json";
|
|
9587
9849
|
function writeWorkbenchDeclaration2(projectRoot, workbenchDir) {
|
|
9588
|
-
|
|
9589
|
-
|
|
9590
|
-
|
|
9591
|
-
`${JSON.stringify({ workbench:
|
|
9850
|
+
mkdirSync9(join12(projectRoot, ".volter"), { recursive: true });
|
|
9851
|
+
writeFileSync9(
|
|
9852
|
+
join12(projectRoot, WORKBENCH_LOCATOR_PATH2),
|
|
9853
|
+
`${JSON.stringify({ workbench: resolve11(workbenchDir) }, null, 2)}
|
|
9592
9854
|
`
|
|
9593
9855
|
);
|
|
9594
9856
|
}
|
|
@@ -9596,8 +9858,8 @@ function machinePlatform2() {
|
|
|
9596
9858
|
return `${process.platform}-${process.arch}`;
|
|
9597
9859
|
}
|
|
9598
9860
|
function resolveWorkbench2(dir, expectedProduct) {
|
|
9599
|
-
const root =
|
|
9600
|
-
const resolved =
|
|
9861
|
+
const root = resolve11(dir);
|
|
9862
|
+
const resolved = existsSync11(join12(root, RELEASE_RECORD2)) ? resolveRelease2(root) : existsSync11(join12(root, SOURCES_LAUNCHER2)) ? resolveSources2(root) : null;
|
|
9601
9863
|
if (resolved === null) {
|
|
9602
9864
|
throw new Error(
|
|
9603
9865
|
`${root} is neither a Code-OSS release nor a fork checkout: it carries no ${RELEASE_RECORD2} (the record scripts/workbench/build-release.mjs writes beside its tarball) and no ${SOURCES_LAUNCHER2}. Name the directory the release was extracted into, or the fork checkout itself.`
|
|
@@ -9613,11 +9875,11 @@ function resolveWorkbench2(dir, expectedProduct) {
|
|
|
9613
9875
|
return resolved;
|
|
9614
9876
|
}
|
|
9615
9877
|
function resolveRelease2(dir) {
|
|
9616
|
-
const record =
|
|
9878
|
+
const record = join12(dir, RELEASE_RECORD2);
|
|
9617
9879
|
const cut = `node scripts/workbench/build-release.mjs --product <id> --platform ${machinePlatform2()} --checkout <fork dir> --out ${dir}`;
|
|
9618
9880
|
let parsed;
|
|
9619
9881
|
try {
|
|
9620
|
-
parsed = JSON.parse(
|
|
9882
|
+
parsed = JSON.parse(readFileSync11(record, "utf8"));
|
|
9621
9883
|
} catch (error) {
|
|
9622
9884
|
throw new Error(`${record} could not be read: ${String(error)}`);
|
|
9623
9885
|
}
|
|
@@ -9641,13 +9903,13 @@ function resolveRelease2(dir) {
|
|
|
9641
9903
|
node scripts/workbench/build-release.mjs --product ${product} --platform ${machine} --checkout <fork dir>`
|
|
9642
9904
|
);
|
|
9643
9905
|
}
|
|
9644
|
-
const packageRoot =
|
|
9645
|
-
const serverBinPath =
|
|
9646
|
-
if (!
|
|
9906
|
+
const packageRoot = join12(dir, target);
|
|
9907
|
+
const serverBinPath = join12(packageRoot, serverBin);
|
|
9908
|
+
if (!existsSync11(serverBinPath)) {
|
|
9647
9909
|
const tarball = typeof parsed["tarball"] === "string" ? parsed["tarball"] : `${target}-<commit>.tar.gz`;
|
|
9648
9910
|
throw new Error(
|
|
9649
9911
|
`${dir} records ${target}, but ${serverBinPath} is not there \u2014 the tarball has not been extracted beside ${RELEASE_RECORD2}. Run:
|
|
9650
|
-
tar -xzf ${
|
|
9912
|
+
tar -xzf ${join12(dir, tarball)} -C ${dir}`
|
|
9651
9913
|
);
|
|
9652
9914
|
}
|
|
9653
9915
|
return { kind: "release", dir, commit, product, serverBin: serverBinPath, cwd: packageRoot };
|
|
@@ -9661,8 +9923,8 @@ function resolveSources2(dir) {
|
|
|
9661
9923
|
`${dir} carries ${SOURCES_LAUNCHER2}, so it reads as a Code-OSS fork checkout, but \`git rev-parse HEAD\` there failed (${error instanceof Error ? error.message : String(error)}). A checkout's commit is the only record of which fork this workbench is.`
|
|
9662
9924
|
);
|
|
9663
9925
|
}
|
|
9664
|
-
const marker =
|
|
9665
|
-
if (!
|
|
9926
|
+
const marker = join12(dir, OVERLAY_RECORD2);
|
|
9927
|
+
if (!existsSync11(marker)) {
|
|
9666
9928
|
throw new Error(
|
|
9667
9929
|
`${dir} is a Code-OSS checkout with no volter overlay: ${OVERLAY_RECORD2} is not there, so nothing of the editor is compiled into it and the workbench would come up as plain Code-OSS. Overlay and compile it:
|
|
9668
9930
|
node scripts/workbench/dev.mjs --checkout ${dir} --product <model-editor|game-editor>`
|
|
@@ -9670,7 +9932,7 @@ function resolveSources2(dir) {
|
|
|
9670
9932
|
}
|
|
9671
9933
|
let product;
|
|
9672
9934
|
try {
|
|
9673
|
-
product = JSON.parse(
|
|
9935
|
+
product = JSON.parse(readFileSync11(marker, "utf8"))["product"];
|
|
9674
9936
|
} catch (error) {
|
|
9675
9937
|
throw new Error(`${marker} could not be read: ${String(error)}`);
|
|
9676
9938
|
}
|
|
@@ -9684,11 +9946,11 @@ function resolveSources2(dir) {
|
|
|
9684
9946
|
dir,
|
|
9685
9947
|
commit,
|
|
9686
9948
|
product,
|
|
9687
|
-
serverBin:
|
|
9949
|
+
serverBin: join12(dir, SOURCES_LAUNCHER2),
|
|
9688
9950
|
cwd: dir
|
|
9689
9951
|
};
|
|
9690
9952
|
}
|
|
9691
|
-
var WORKBENCH_CACHE_ROOT2 =
|
|
9953
|
+
var WORKBENCH_CACHE_ROOT2 = join12(homedir5(), ".volter", "workbenches");
|
|
9692
9954
|
|
|
9693
9955
|
// node/cli.ts
|
|
9694
9956
|
var PRODUCT3 = { packageName: package_default.name, id: "game-editor", displayName: package_default.volter.product.displayName, command: Object.keys(package_default.bin)[0] };
|
|
@@ -9732,15 +9994,18 @@ try {
|
|
|
9732
9994
|
volter-game-editor eval <JavaScript> | --list # { editor, game, page, tools, session } in scope
|
|
9733
9995
|
volter-game-editor play | stop | restart
|
|
9734
9996
|
volter-game-editor ${SCREENSHOT_USAGE}
|
|
9997
|
+
volter-game-editor ${HOSTED_USAGE}
|
|
9735
9998
|
volter-game-editor sessions | project | projects
|
|
9736
9999
|
volter-game-editor open <path>
|
|
9737
10000
|
volter-game-editor add [id...] | remove <id...> | outdated [--project <path>] [--dry-run] [--json]
|
|
9738
10001
|
volter-game-editor blender-mcp # stdio MCP transport to Blender in the editor`);
|
|
10002
|
+
} else if (verb === "hosted") {
|
|
10003
|
+
await hostedControl(PRODUCT3.command, positionals.slice(1));
|
|
9739
10004
|
} else if (verb === "blender-mcp") {
|
|
9740
10005
|
if (positionals.length !== 1) throw new Error("Usage: volter-game-editor blender-mcp");
|
|
9741
|
-
let project =
|
|
10006
|
+
let project = resolve12(process.cwd());
|
|
9742
10007
|
while (!hasManifest(project)) {
|
|
9743
|
-
const parent =
|
|
10008
|
+
const parent = dirname9(project);
|
|
9744
10009
|
if (parent === project) throw new Error("Run volter-game-editor blender-mcp inside a game project.");
|
|
9745
10010
|
project = parent;
|
|
9746
10011
|
}
|
|
@@ -9753,7 +10018,7 @@ try {
|
|
|
9753
10018
|
} catch {
|
|
9754
10019
|
}
|
|
9755
10020
|
await new Promise((done, fail2) => {
|
|
9756
|
-
const child =
|
|
10021
|
+
const child = spawn4(process.execPath, [fileURLToPath2(import.meta.url), "edit", project], {
|
|
9757
10022
|
cwd: project,
|
|
9758
10023
|
stdio: ["ignore", 2, 2],
|
|
9759
10024
|
env: process.env
|
|
@@ -9804,14 +10069,14 @@ try {
|
|
|
9804
10069
|
if (!isScaffoldAddition(value)) throw new Error(`--with must name additions from: ${SCAFFOLD_ADDITIONS.join(", ")} \u2014 got "${value}"`);
|
|
9805
10070
|
additions.push(value);
|
|
9806
10071
|
}
|
|
9807
|
-
if (values.workbench) resolveWorkbench2(
|
|
10072
|
+
if (values.workbench) resolveWorkbench2(resolve12(values.workbench), PRODUCT3.id);
|
|
9808
10073
|
await createGameProject({
|
|
9809
10074
|
name: folder.split(/[\\/]/).at(-1),
|
|
9810
|
-
targetDir:
|
|
10075
|
+
targetDir: resolve12(folder),
|
|
9811
10076
|
additions,
|
|
9812
10077
|
...values.template === void 0 ? {} : { template: values.template }
|
|
9813
10078
|
});
|
|
9814
|
-
if (values.workbench) writeWorkbenchDeclaration2(
|
|
10079
|
+
if (values.workbench) writeWorkbenchDeclaration2(resolve12(folder), resolve12(values.workbench));
|
|
9815
10080
|
}
|
|
9816
10081
|
await launch(folder, PRODUCT3, {
|
|
9817
10082
|
...values.workbench ? { workbench: values.workbench } : {},
|