@volter/game-editor 0.5.113 → 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 +2162 -2162
- package/dist/assets/{AssetBudgetPanel-YOmIrgrb.js → AssetBudgetPanel-C2cPjuBg.js} +3 -3
- package/dist/assets/{AudioViewer-bTwqa-Sq.js → AudioViewer-Bpo_jpIi.js} +1 -1
- package/dist/assets/{CanvasBoardDocument-DH0GumqR.js → CanvasBoardDocument-DwBIeMZ4.js} +1 -1
- package/dist/assets/{CanvasSceneViewport-GSbXiEc2.js → CanvasSceneViewport-BNdmWk-Z.js} +1 -1
- package/dist/assets/{ColorInput-CM13COOy.js → ColorInput-BDfmeGV7.js} +1 -1
- package/dist/assets/{ColorPicker-EVo4ngxp.js → ColorPicker-CirredSr.js} +1 -1
- package/dist/assets/{EntityModelDocument-BTYbMslU.js → EntityModelDocument-CVSuhql6.js} +1 -1
- package/dist/assets/{EnvironmentAssetDocument-CxncdHY1.js → EnvironmentAssetDocument-zoSJqmVn.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-PDuA7cCk.js → GameplaySessionTimeline-CXuEu0EC.js} +1 -1
- package/dist/assets/{ImageViewer-Dr9tOsGR.js → ImageViewer-BlwxCH_J.js} +1 -1
- package/dist/assets/InspectorObjectPreview-BIP7icp4.js +1 -0
- package/dist/assets/{JsonAssetDocument-95S-d0FJ.js → JsonAssetDocument-Bca1OEvU.js} +1 -1
- package/dist/assets/{LiveModuleDocument-tqAYWVCZ.js → LiveModuleDocument-BKw3vGr0.js} +1 -1
- package/dist/assets/{LutAssetDocument-DOpqQnUe.js → LutAssetDocument-Cg-37y7Y.js} +1 -1
- package/dist/assets/{ModelAssetDocument-DrWymVJX.js → ModelAssetDocument-DMj74VoY.js} +1 -1
- package/dist/assets/{NonThreeAuthoringBootstrap-Gnetb5kf.js → NonThreeAuthoringBootstrap-CTZ5QGOi.js} +1 -1
- package/dist/assets/{Object3DDocumentToolbar-LEaER56N.js → Object3DDocumentToolbar-YqAXNX73.js} +1 -1
- package/dist/assets/Object3DDocumentViewport-BAFF8tXA.js +2 -0
- package/dist/assets/{Object3DPreview-CI9SLEn2.js → Object3DPreview-DhldNd5m.js} +1 -1
- package/dist/assets/{OnlineAssetDetail-C1_UGp0X.js → OnlineAssetDetail-ClT4eFxW.js} +1 -1
- package/dist/assets/{PlayBar-BqFW5mT2.js → PlayBar-Siahnvsw.js} +1 -1
- package/dist/assets/{QuarksAssetDocument-B1-XXOIo.js → QuarksAssetDocument-BCJCpXzv.js} +1 -1
- package/dist/assets/{ReactCanvasControls-BF1bVCnc.js → ReactCanvasControls-C2Dg7PAS.js} +1 -1
- package/dist/assets/{RootSelectionOverlay-BF32ngZd.js → RootSelectionOverlay-B76QTxXQ.js} +1 -1
- package/dist/assets/{ShaderAssetDocument-Dp1QXqID.js → ShaderAssetDocument-BC_bMDIb.js} +1 -1
- package/dist/assets/{ShadowEditor-4Db4i5w5.js → ShadowEditor-BmMIsUKh.js} +1 -1
- package/dist/assets/{SourceAssetViewer-BmlLDth6.js → SourceAssetViewer-Cq0O9fPd.js} +1 -1
- package/dist/assets/{StageHost-BQL5IEe5.js → StageHost-DL-rn1xw.js} +2 -2
- package/dist/assets/{StoryPreviewMount-wz2HTXNK.js → StoryPreviewMount-Bb6bAFFD.js} +1 -1
- package/dist/assets/{ThreeBoardDocument-DEAY51YS.js → ThreeBoardDocument-DVKtb195.js} +2 -2
- package/dist/assets/{ThreeIsolationSceneContent-BTsDcsEk.js → ThreeIsolationSceneContent-Cgn5gNZK.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-DwuMA8jQ.js → ToolObject3DPreview-CC6zmX0_.js} +1 -1
- package/dist/assets/{Toolbar-D1TipTFF.js → Toolbar-CtuKETND.js} +1 -1
- package/dist/assets/{TransientHint-DzC7ZR7m.js → TransientHint-BznxmBhK.js} +1 -1
- package/dist/assets/{VideoViewer-Dh6AS4So.js → VideoViewer-Bf8CFBye.js} +1 -1
- package/dist/assets/{ViewportShadingMenu-B3YlrMIP.js → ViewportShadingMenu-CHI1Ybps.js} +1 -1
- package/dist/assets/{active-ingest-DyPN4pXx.js → active-ingest-CdkBLhUn.js} +2 -2
- package/dist/assets/{animation-clock-Cgc__YFh.js → animation-clock-iXNr3pAB.js} +1 -1
- package/dist/assets/{animation-mixers.service-gxCtRrOy.js → animation-mixers.service-44VFyY6S.js} +1 -1
- package/dist/assets/{animation-timeline.utility-DB9Ux44B.js → animation-timeline.utility-Dc7J3kL7.js} +1 -1
- package/dist/assets/{asset-budget-asset.menu-B00KTyex.js → asset-budget-asset.menu-2A17aYDp.js} +1 -1
- package/dist/assets/{asset-budget.action-DBNBL_EX.js → asset-budget.action-D5zTxlwK.js} +1 -1
- package/dist/assets/{asset-budget.document-BdNi2KSS.js → asset-budget.document-BnfZWG-Z.js} +1 -1
- package/dist/assets/{asset-budget.menu-B5ac_4XU.js → asset-budget.menu-B80Zj_Gc.js} +1 -1
- package/dist/assets/{asset-editor-persistence-BB9WAcxO.js → asset-editor-persistence-CDltpHCs.js} +1 -1
- package/dist/assets/{asset-loaders-BIr1M5-7.js → asset-loaders-CNaS8TZG.js} +1 -1
- package/dist/assets/{asset-preview-SYBnd0Vm.js → asset-preview-DJuOkxhj.js} +1 -1
- package/dist/assets/{audio-unlock.service-DzxNWnKh.js → audio-unlock.service-BrBhpJMC.js} +1 -1
- package/dist/assets/{audio.utility-B-NT_pSF.js → audio.utility-B4-eoTPZ.js} +1 -1
- package/dist/assets/autoplay.service-CFvofovm.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-ClEvING-.js → babylon-authoring-adapter-vZdL2Gto.js} +1 -1
- package/dist/assets/{binding-resolver-DrkSEcWH.js → binding-resolver-OJ_J6yIE.js} +2 -2
- package/dist/assets/{blender-node-editor.document-BLudqWaR.js → blender-node-editor.document-BDczfFxt.js} +1 -1
- package/dist/assets/{blender-properties-tab-CgQrdCmF.js → blender-properties-tab-CjgK0Bbk.js} +1 -1
- package/dist/assets/{blender-runtime-host-DzGwnLBS.js → blender-runtime-host-Dlc9w0Zh.js} +1 -1
- package/dist/assets/{blender-runtime-skin-C2nxKTQ1.js → blender-runtime-skin-D1UM12LE.js} +1 -1
- package/dist/assets/{blender-runtime.document-DF4Kd_X3.js → blender-runtime.document-CCV5Y9OE.js} +1 -1
- package/dist/assets/{blender-screenshot.menu-CgmIjtZz.js → blender-screenshot.menu-C36rWtiC.js} +1 -1
- package/dist/assets/{blender-timeline.document-C4mTn6aP.js → blender-timeline.document-lk_PIJob.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-CJAzjOUQ.js → blender-uv-editor.document-CTmIU4Kh.js} +1 -1
- package/dist/assets/{blender-version.status-D7gCX70i.js → blender-version.status-DJlu7qr4.js} +1 -1
- package/dist/assets/{blender.command-B6fKa6tA.js → blender.command-DzCCQQOZ.js} +1 -1
- package/dist/assets/{board-guides-CxjOETvX.js → board-guides-BlBRZmTQ.js} +1 -1
- package/dist/assets/{bridge.command-a-jcQB8T.js → bridge.command-ClY9S8Un.js} +3 -3
- package/dist/assets/{browserAll-BuXe7m07.js → browserAll-Mv9lBgrZ.js} +1 -1
- package/dist/assets/{build-player.document-BD0PnuJ8.js → build-player.document-Cy7MEpas.js} +1 -1
- package/dist/assets/{build-profiles.document-CVkrs6H4.js → build-profiles.document-WaCFbiLP.js} +1 -1
- package/dist/assets/{build-progress.status-FeI4UjwE.js → build-progress.status-DTcmGi_P.js} +1 -1
- package/dist/assets/{build-session-DgvoUFRy.js → build-session-DbpKkNJV.js} +1 -1
- package/dist/assets/{build.action-De0QZn5x.js → build.action-C2j5_dxu.js} +1 -1
- package/dist/assets/{build.command-Etx4MsuF.js → build.command-DioIRVgu.js} +1 -1
- package/dist/assets/{build.header-CrYpkM9P.js → build.header-BzewhRVE.js} +1 -1
- package/dist/assets/{build.menu-DblGKZpN.js → build.menu-BzXblcjm.js} +1 -1
- package/dist/assets/{build.service-CnNOfCLi.js → build.service-nY7pgo8P.js} +1 -1
- package/dist/assets/{camera-BfeEfKS0.js → camera-C4iahwRu.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-Cz9u-_ud.js → camera-runtime.inspector-0hl6Lpc7.js} +1 -1
- package/dist/assets/{canvas-design-mount-Dw9d5RCT.js → canvas-design-mount-ZR59B_S-.js} +3 -3
- package/dist/assets/{canvas-entry-runtime-C2NiPlg5.js → canvas-entry-runtime-DfwjEnac.js} +2 -2
- package/dist/assets/{canvas-preview-frames-DgjyhrhI.js → canvas-preview-frames-BK9lbVhI.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-DJNBPJ5i.js → canvas-story-capture.service-BB37SSiy.js} +2 -2
- package/dist/assets/{capability-coverage-DR7JrSFb.js → capability-coverage-BbGACSQ7.js} +1 -1
- package/dist/assets/{collaboration-presence-CANQ_L1j.js → collaboration-presence-Bsr8DNTC.js} +1 -1
- package/dist/assets/{collider-DfVDH8FN.js → collider-CNgw-tJm.js} +1 -1
- package/dist/assets/{component-board.service-CeMs1Lk8.js → component-board.service-ABJTCD9U.js} +2 -2
- package/dist/assets/{component-board.service-kbY79QZo.js → component-board.service-BkvLOF6E.js} +2 -2
- package/dist/assets/{component-board.service-DVoLrHrs.js → component-board.service-DrGTgtOW.js} +2 -2
- package/dist/assets/{component-contracts.service-MNL4lwbm.js → component-contracts.service-AJNTJQUd.js} +1 -1
- package/dist/assets/{component-instance-root-Cau6CbHE.js → component-instance-root-DSo9btvO.js} +1 -1
- package/dist/assets/{component-verbs.command-qIVRD_Xw.js → component-verbs.command-DAZikwtn.js} +1 -1
- package/dist/assets/{component-verbs.service-B5JxoJav.js → component-verbs.service-CbmTNwUC.js} +1 -1
- package/dist/assets/{config-RCXzlzsa.js → config-ByW2y5rs.js} +2 -2
- package/dist/assets/{configurations-IGbOtv8A.js → configurations-LzOt_ui9.js} +1 -1
- package/dist/assets/{connection.status-ByfpCgpC.js → connection.status-fh7qO4aP.js} +1 -1
- package/dist/assets/{constraints.inspector-uzln0fl-.js → constraints.inspector-BILU-OeN.js} +1 -1
- package/dist/assets/{content-bounds-D-AXJalq.js → content-bounds-kt7VKpcn.js} +1 -1
- package/dist/assets/{contract-system-adapters-DFS6S5jR.js → contract-system-adapters-Cozx6nCn.js} +1 -1
- package/dist/assets/{coverage.service-CVsV-Ujp.js → coverage.service-CswPRFnJ.js} +1 -1
- package/dist/assets/{create-runtime-SfhwBdX4.js → create-runtime-CNEjmtin.js} +1 -1
- package/dist/assets/{curve-o1Gq54K5.js → curve-BKb_W-u_.js} +1 -1
- package/dist/assets/{data-asset-BHGaqife.js → data-asset-C39Y1A_d.js} +1 -1
- package/dist/assets/{data-ref-BAsRympT.js → data-ref-tKY-R3JG.js} +1 -1
- package/dist/assets/{debug-bridge-CP_QGmkP.js → debug-bridge-CLBVU34P.js} +1 -1
- package/dist/assets/{debug-registry-CKJW2aaQ.js → debug-registry-PtCg-gAQ.js} +1 -1
- package/dist/assets/{deferred-ingest-play-NdjNkEVn.js → deferred-ingest-play-DlgkyiVk.js} +2 -2
- package/dist/assets/{design-time-canvas-mount-DkXsU3H1.js → design-time-canvas-mount-DlS15mlk.js} +2 -2
- package/dist/assets/{design-time-layers-BV3mP1Sf.js → design-time-layers-BSk9iy6A.js} +1 -1
- package/dist/assets/{design-time-mount.service-BrbX9-Z0.js → design-time-mount.service-bV28BtPG.js} +2 -2
- package/dist/assets/{design-time-mount.service-BFusXbnS.js → design-time-mount.service-yeuApmeU.js} +2 -2
- package/dist/assets/{design-time-react-mount-BYKVfWQS.js → design-time-react-mount-7EgUpZDW.js} +1 -1
- package/dist/assets/{document-preview-three-BOP4aWm7.js → document-preview-three-DcVcoC1y.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-R0NT6Dgv.js → dom-authoring-adapter-Dnjvh9yG.js} +1 -1
- package/dist/assets/{draco3d-B28c7B_w.js → draco3d-3EapKinA.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-D4hfjqDu.js → edit-mode-audio.service-ffiNgJwH.js} +1 -1
- package/dist/assets/{edit-mode-authoring-FKyNiefy.js → edit-mode-authoring-BEqEkXIT.js} +1 -1
- package/dist/assets/{edit-mode-networking.service-BixjLG2r.js → edit-mode-networking.service-9uQLb9Fc.js} +1 -1
- package/dist/assets/{editor-api-B8AYtjAH.js → editor-api-TexfN2js.js} +1 -1
- package/dist/assets/{editor-layers-L_zFs_uY.js → editor-layers-DB9_uFyw.js} +1 -1
- package/dist/assets/{editor-shell-store-DOiPmqow.js → editor-shell-store-DAFZw7de.js} +1 -1
- package/dist/assets/{entity-object-CvrkMcCz.js → entity-object-CG32Sh-D.js} +1 -1
- package/dist/assets/{extend-Kvra-g2p.js → extend-BJCYmdCg.js} +1 -1
- package/dist/assets/{fork-menu-BuRnpNg9.js → fork-menu-B0CAnsQ0.js} +1 -1
- package/dist/assets/{frame-debugger-store-Bz-SsB7V.js → frame-debugger-store-DRPBji06.js} +1 -1
- package/dist/assets/{game-contract-seams-gtPhkpZH.js → game-contract-seams-D3jp9kfH.js} +1 -1
- package/dist/assets/{game-css-scope-transform-BJ-6sqe3.js → game-css-scope-transform-CNq9C0a8.js} +1 -1
- package/dist/assets/{game-document.service-Dtsjp-QD.js → game-document.service-Ikp3u-8X.js} +1 -1
- package/dist/assets/{game-eval.command-Bx_q6yCj.js → game-eval.command-DR0dtfPa.js} +1 -1
- package/dist/assets/{game-module-access-C8FuQkAK.js → game-module-access-DceYIduW.js} +1 -1
- package/dist/assets/{game-network-BfrYV3Wu.js → game-network-DOCCFwtp.js} +3 -3
- package/dist/assets/{gameplay-export-CagiJo3l.js → gameplay-export-BfVqSEgT.js} +1 -1
- package/dist/assets/{gameplay-replay-BGDvgIWD.js → gameplay-replay-D9quLJQt.js} +1 -1
- package/dist/assets/{gameplay.command-C1gvtyuv.js → gameplay.command-CVuLo_kD.js} +1 -1
- package/dist/assets/{generation-jobs-B3vV9DA5.js → generation-jobs-dFYEPPwC.js} +1 -1
- package/dist/assets/{generation.service-CAQ3QEXE.js → generation.service-DtP2HZFd.js} +1 -1
- package/dist/assets/{generations-maNAZ6ie.js → generations-BqaARHQz.js} +1 -1
- package/dist/assets/{generations.status-BHOoDM64.js → generations.status-DpyocrDb.js} +1 -1
- package/dist/assets/{hierarchy-marks-BBOKHySh.js → hierarchy-marks-Ducimsnh.js} +1 -1
- package/dist/assets/{hosted-asset-materialization-1nbID23w.js → hosted-asset-materialization-CibGdw61.js} +1 -1
- package/dist/assets/{index-D7-TEN6k.js → index-4Vg6KHJs.js} +1 -1
- package/dist/assets/{index-DV2EMzou.js → index-BMshF0VP.js} +1 -1
- package/dist/assets/{index-BNk1xsv9.js → index-BaM5nplw.js} +1 -1
- package/dist/assets/{index-BUrCxsh5.js → index-CKoL9Z8h.js} +1 -1
- package/dist/assets/{index-DxZ4l0Lx.js → index-Cs_hnykK.js} +8 -8
- package/dist/assets/{index-CIQueasL.js → index-CyN2UjMe.js} +1 -1
- package/dist/assets/{index-CokH1Dgb.js → index-DMA-GnGs.js} +1 -1
- package/dist/assets/{index-y3CKXb3j.js → index-Df0th-r3.js} +1 -1
- package/dist/assets/{index-2-K3RgL5.js → index-M1-SoN0U.js} +2 -2
- package/dist/assets/{inference-diagnostics-5lf-ZIbs.js → inference-diagnostics-aOHTUQ5I.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-D4jEOuoN.js → ingest-boot-viewport-J9SqqmBi.js} +1 -1
- package/dist/assets/{ingest-siblings-FkhDSlt8.js → ingest-siblings-DI-4N8EJ.js} +1 -1
- package/dist/assets/{ingest-source-persistence-Ci1cjdJ9.js → ingest-source-persistence-BlQ86Ezy.js} +1 -1
- package/dist/assets/{ingest.service-DCcj8m5Y.js → ingest.service-DGJl6Kg1.js} +1 -1
- package/dist/assets/{inspect-CR7QdMOn.js → inspect-CSzAyD3t.js} +1 -1
- package/dist/assets/instances.command-DCKGMDy5.js +1 -0
- package/dist/assets/{json-history-resource-C5b3fL6s.js → json-history-resource-C5lzztrI.js} +1 -1
- package/dist/assets/{layered-pick-BxRnQHJy.js → layered-pick-Da3YPGWE.js} +1 -1
- package/dist/assets/{light-DCa8P1uY.js → light-D9BNM9LO.js} +1 -1
- package/dist/assets/{live-project-verbs-De2cikPw.js → live-project-verbs-CeLmddwY.js} +1 -1
- package/dist/assets/{machine.document-ZHRCTuWw.js → machine.document-D9RIS2J1.js} +1 -1
- package/dist/assets/{machines.finder-_EknWXAa.js → machines.finder-B_-K7mbg.js} +1 -1
- package/dist/assets/{material-CKTGcoVC.js → material-Di4_5UR9.js} +1 -1
- package/dist/assets/{material-factory-Dqmsa3qq.js → material-factory-Cdk5ozUy.js} +1 -1
- package/dist/assets/{mesh-D7E7Tpno.js → mesh-B3l7POsp.js} +1 -1
- package/dist/assets/{model-asset-sections.service-BODa7-eZ.js → model-asset-sections.service-wBLLtK1P.js} +1 -1
- package/dist/assets/{model-inspection-C3HZSfTa.js → model-inspection-QwuuTlfj.js} +1 -1
- package/dist/assets/{model-thumbnail-DU5Hb25u.js → model-thumbnail-BXNwjwVQ.js} +1 -1
- package/dist/assets/{models.finder-DGHllLJN.js → models.finder-BlvEy8zN.js} +1 -1
- package/dist/assets/{module-mode-D94Fe5TK.js → module-mode-DJJCSruV.js} +2 -2
- package/dist/assets/{mount-canvas-ingest-root-C7z5voqs.js → mount-canvas-ingest-root-BKB4WIx_.js} +2 -2
- package/dist/assets/{mount-dom-ingest-root-DQe5ADSt.js → mount-dom-ingest-root-PRkBWUWu.js} +2 -2
- package/dist/assets/{mount-ingest-root-Cux7Vat0.js → mount-ingest-root-CQLOfg6j.js} +2 -2
- package/dist/assets/{mount-manifest-DA9vvNwK.js → mount-manifest-GP2eO4t9.js} +1 -1
- package/dist/assets/{mount-three-ingest-root-DdLSbSi_.js → mount-three-ingest-root-T3wn7mca.js} +1 -1
- package/dist/assets/{mounted-authoring-CdPS27uW.js → mounted-authoring-Db9gY4N3.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-smY_3Xvs.js → mounted-story-viewport-source-C9HGOm_J.js} +1 -1
- package/dist/assets/{native-debug-module-D3XVzf2G.js → native-debug-module-QRchsh2v.js} +1 -1
- package/dist/assets/{navigation-BL2K8g78.js → navigation-C-8TPzHJ.js} +1 -1
- package/dist/assets/{navmesh.menu-yn3UhjtF.js → navmesh.menu-D0aY0A-x.js} +1 -1
- package/dist/assets/{navmesh.service-Be0ucoLP.js → navmesh.service-CZ7uSgkz.js} +1 -1
- package/dist/assets/network-observer.service-CD9z9tBp.js +1 -0
- package/dist/assets/{network.utility-7WMTdKbC.js → network.utility-BOHNhfSD.js} +1 -1
- package/dist/assets/{object3d-document-session-registry-BOhbeWPh.js → object3d-document-session-registry-PE-4fjz1.js} +2 -2
- package/dist/assets/{oid-transform-D1XfG014.js → oid-transform-B32kPrkS.js} +1 -1
- package/dist/assets/{particles-Cry0sotq.js → particles-DkCd4wzc.js} +1 -1
- package/dist/assets/{pixi-authoring-adapter-D4r0NNmF.js → pixi-authoring-adapter-Cz6GKyRX.js} +1 -1
- package/dist/assets/{pixi-live-write-target-CBs8-AZJ.js → pixi-live-write-target-Dvo0ZrpJ.js} +1 -1
- package/dist/assets/{play.command-Dr0f3V-I.js → play.command-jRmgmt62.js} +2 -2
- package/dist/assets/{presentation-DZPpkAZH.js → presentation-BWLM0Zst.js} +1 -1
- package/dist/assets/{product-Ds7m0MXl.js → product-NPUDoYQp.js} +1 -1
- package/dist/assets/{profiler.action-hX-xAN1Q.js → profiler.action-BdEeMmlP.js} +1 -1
- package/dist/assets/{profiler.menu-DII7IA6d.js → profiler.menu-DmaIMEQp.js} +1 -1
- package/dist/assets/{profiler.utility-BaEdm9wI.js → profiler.utility-BqCXFtf4.js} +1 -1
- package/dist/assets/{project-authoring-session-0PLEfHVB.js → project-authoring-session-DWdfTjb4.js} +2 -2
- package/dist/assets/{properties-bone-constraints.inspector-bnTZA2Sx.js → properties-bone-constraints.inspector-Do18oyXm.js} +1 -1
- package/dist/assets/{properties-bone.inspector-Ba_BALxK.js → properties-bone.inspector-DHRW9Zdy.js} +1 -1
- package/dist/assets/{properties-collection.inspector-BB7SCk6k.js → properties-collection.inspector-B_ZqDhIB.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-QvPC5CKU.js → properties-constraints.inspector-DGUezsPF.js} +1 -1
- package/dist/assets/{properties-data.inspector-C8DURz4h.js → properties-data.inspector-DW6_t8_e.js} +1 -1
- package/dist/assets/{properties-material.inspector-BevMJr27.js → properties-material.inspector-CjK7oKK4.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-Y5pMiksE.js → properties-modifiers.inspector-BzIR7FjM.js} +1 -1
- package/dist/assets/{properties-object.inspector-CQ42THXn.js → properties-object.inspector-3fsVkAFS.js} +1 -1
- package/dist/assets/{properties-output.inspector-Bt_7itt6.js → properties-output.inspector-D1zWlLWX.js} +1 -1
- package/dist/assets/{properties-particles.inspector-Bh8XwGWa.js → properties-particles.inspector-CwNWZhyR.js} +1 -1
- package/dist/assets/{properties-physics.inspector-C9Kg9opR.js → properties-physics.inspector-BnmFQq_i.js} +1 -1
- package/dist/assets/{properties-render.inspector-D0QyE0hB.js → properties-render.inspector-Di2qTS4q.js} +1 -1
- package/dist/assets/{properties-scene.inspector-1MvLgJS8.js → properties-scene.inspector-1UZaXfw2.js} +1 -1
- package/dist/assets/{properties-texture.inspector-DEavbeV5.js → properties-texture.inspector-BaV5U-Qu.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-CLgXfOvJ.js → properties-view-layer.inspector-DxW9C8im.js} +1 -1
- package/dist/assets/{properties-world.inspector-Czxm5_qb.js → properties-world.inspector-Cb8cuI2F.js} +1 -1
- package/dist/assets/{r3f-design-session-Ds-Lh4CE.js → r3f-design-session-kg4aFo9v.js} +2 -2
- package/dist/assets/{r3f-physics-binding-Ddy2AMqs.js → r3f-physics-binding-C37YJGMW.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-IyBCACL1.js → r3f-source-authoring-adapter-ZKBMZbYR.js} +1 -1
- package/dist/assets/{react-canvas-navigation-DJjAqkef.js → react-canvas-navigation-DgndsFAo.js} +1 -1
- package/dist/assets/{react-inspector.service-CSk2kWPq.js → react-inspector.service-9bE0o_8D.js} +1 -1
- package/dist/assets/{react-story-board-Bcx-zIef.js → react-story-board-CCITskgO.js} +1 -1
- package/dist/assets/{react-three-rapier.esm-1NxU3dq9.js → react-three-rapier.esm-CIOYSgKg.js} +1 -1
- package/dist/assets/{react-world-authoring-adapter-OePxORCc.js → react-world-authoring-adapter-DK4jMqyN.js} +1 -1
- package/dist/assets/{realm-services-DpinxOxM.js → realm-services-BAZP9e8H.js} +1 -1
- package/dist/assets/{reflection-probe-capture.inspector-C_6oDrHo.js → reflection-probe-capture.inspector-BOCEOfun.js} +1 -1
- package/dist/assets/{registry-BS9FkzwE.js → registry-PeJ-uX3W.js} +1 -1
- package/dist/assets/{relative-import-specifier-D6hnbTcT.js → relative-import-specifier-BfGfJFJZ.js} +1 -1
- package/dist/assets/{render-env-C1fESfcu.js → render-env-ChDPR7QW.js} +1 -1
- package/dist/assets/{render-features-DHKbJ7Fz.js → render-features-BIgyjcOC.js} +1 -1
- package/dist/assets/{render-settings-ClSYLEFT.js → render-settings-C7hqpFnK.js} +1 -1
- package/dist/assets/{resolve-three-Bbo0SWwc.js → resolve-three-Dpd-fg3k.js} +3 -3
- package/dist/assets/{root-seam-contract-XS-29MWj.js → root-seam-contract-Crgu32u5.js} +1 -1
- package/dist/assets/{run-selection-DLf4qvaj.js → run-selection-xpSMOXG0.js} +1 -1
- package/dist/assets/{scene-capture-L3kI0vHP.js → scene-capture-D1sFvwyj.js} +1 -1
- package/dist/assets/{scene-document.service-BghK8Rt9.js → scene-document.service-BM50fy1J.js} +2 -2
- package/dist/assets/{scene-framing-BWych0aQ.js → scene-framing-BX1UTrnD.js} +1 -1
- package/dist/assets/{seeded-random-Ce4p3AkI.js → seeded-random-C85bEVkS.js} +1 -1
- package/dist/assets/{setup-renderer-DxcHRzSg.js → setup-renderer-DcKuhISr.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-CUFQCDZj.js → source-object3d-authoring-adapter-h3b7vPiK.js} +1 -1
- package/dist/assets/{source-persistence-backend-BsZyLz63.js → source-persistence-backend-DgTsuLXb.js} +1 -1
- package/dist/assets/{stage-keyboard-Bfxkwdni.js → stage-keyboard-BI4HOf1S.js} +1 -1
- package/dist/assets/{stage-overlay-set-bbNN2SNO.js → stage-overlay-set-Cssqqj_A.js} +1 -1
- package/dist/assets/{stage-presence-markers-C8xYcF2L.js → stage-presence-markers-7odF6Jqg.js} +1 -1
- package/dist/assets/{stage-transform-tools-p5sisbub.js → stage-transform-tools-CtyYmuLT.js} +1 -1
- package/dist/assets/{standard-viewport-dressing-I7UKATya.js → standard-viewport-dressing-C0D_Lkzi.js} +1 -1
- package/dist/assets/{state-watch.action-CAqCjd3J.js → state-watch.action-BjfXq_IH.js} +1 -1
- package/dist/assets/{state-watch.menu-DWN-p-a3.js → state-watch.menu-BRJo7Z-c.js} +1 -1
- package/dist/assets/{state-watch.utility-CMGyVLnH.js → state-watch.utility-D_swl2pz.js} +1 -1
- package/dist/assets/{story-capture-BGhtcQBF.js → story-capture-CMY7BKUL.js} +1 -1
- package/dist/assets/{story-documents-DaK12Qjv.js → story-documents-BwW_Ypnc.js} +1 -1
- package/dist/assets/{story-documents.service-CMNLzj5f.js → story-documents.service-B6YGoAas.js} +1 -1
- package/dist/assets/{story-documents.service-fChFb24G.js → story-documents.service-DpNKV5ve.js} +1 -1
- package/dist/assets/{story-media-presence-2zp3uRLL.js → story-media-presence-DgTM3l4X.js} +1 -1
- package/dist/assets/{story-pixi-preview-hxfq6ofD.js → story-pixi-preview-anB4NVfT.js} +1 -1
- package/dist/assets/{story-presentation-C_FXa1VN.js → story-presentation-Cm5Vl6Oh.js} +1 -1
- package/dist/assets/{story-three-preview-uQ3ADzPv.js → story-three-preview-BOD7-hxP.js} +2 -2
- package/dist/assets/{studio-environment-B1C4moYZ.js → studio-environment-Bg-I7fM-.js} +1 -1
- package/dist/assets/{surface-state-BZNvmNKu.js → surface-state-DUwBtx3k.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-BA6l20Yy.js → syntactic-prop-specs-Bmxu19np.js} +1 -1
- package/dist/assets/{team-playtest.service-C5Vi2OJZ.js → team-playtest.service-CGh7mX2E.js} +1 -1
- package/dist/assets/{three-oA8NOIIL.js → three-CWmJa1qe.js} +1 -1
- package/dist/assets/{three-authoring-adapter-BckRZAFC.js → three-authoring-adapter-CwQ2Hl3O.js} +1 -1
- package/dist/assets/three-authoring.service-CSdBG8i-.js +2 -0
- package/dist/assets/{three-ingest-runtime-DZKrRIHE.js → three-ingest-runtime-Drh7DqsE.js} +1 -1
- package/dist/assets/{three-integration-iaJQ46tu.js → three-integration-D9SLXYnU.js} +2 -2
- package/dist/assets/three-integration.service-W2S36XB9.js +1 -0
- package/dist/assets/{three-projection-core-BDAHFfdE.js → three-projection-core-BxrVlHmD.js} +1 -1
- package/dist/assets/{three-state-BV7x8kw3.js → three-state-kIB-8XUB.js} +1 -1
- package/dist/assets/{three-story-capture.service-CaUSNiDk.js → three-story-capture.service-C8l6znQN.js} +2 -2
- package/dist/assets/{three-story-model-B6IgeeuY.js → three-story-model-DzqvFyFn.js} +1 -1
- package/dist/assets/{three-viewport-presentation-CKn-D0y1.js → three-viewport-presentation-2yL9mtBn.js} +1 -1
- package/dist/assets/{transform-mode-request-APlKqsfP.js → transform-mode-request-CwuDcUbZ.js} +1 -1
- package/dist/assets/{transport-strip-C-sBBXum.js → transport-strip-BK2izTHN.js} +1 -1
- package/dist/assets/transport.header-BB3O8i1G.js +1 -0
- package/dist/assets/{tuples-vz7GNWYe.js → tuples-DBc-K60w.js} +1 -1
- package/dist/assets/{ui-board-document-C5xsL6QI.js → ui-board-document-DM7FjXkv.js} +2 -2
- package/dist/assets/{user-data-BWhINAlG.js → user-data-B0afWRON.js} +1 -1
- package/dist/assets/{utility-view-state-DUssk2Y5.js → utility-view-state-BqtZzIZO.js} +1 -1
- package/dist/assets/{viewport-door-D_nXAmUt.js → viewport-door-DXf2BTtM.js} +1 -1
- package/dist/assets/{viewport-root-presentation-DKZfgm-u.js → viewport-root-presentation-DMXg0y2c.js} +1 -1
- package/dist/assets/{viewport-surface-status-BK9OGt3f.js → viewport-surface-status-Cb9tNbMn.js} +1 -1
- package/dist/assets/{webworkerAll-Du9ligfF.js → webworkerAll-SNqnnw8n.js} +1 -1
- package/dist/assets/{workspace-arrangement-BgwQc-qT.js → workspace-arrangement-4Fa_8tpk.js} +1 -1
- package/dist/assets/{world-documents-DeHr136o.js → world-documents-D_jW5Rdo.js} +1 -1
- package/dist/assets/{world-root-stage-binding-BM10opvf.js → world-root-stage-binding-jICg_fta.js} +1 -1
- package/dist/assets/{xstate-animation-binding-B_oh3YqN.js → xstate-animation-binding-D99r_COR.js} +1 -1
- package/dist/assets/{xstate-animation-meta-DJXYGNX1.js → xstate-animation-meta-DKGLnaIK.js} +1 -1
- package/dist-node/cli.js +358 -91
- package/package.json +16 -16
- package/dist/assets/InspectorObjectPreview-CmjfAk0I.js +0 -1
- package/dist/assets/Object3DDocumentViewport-CgifoYVE.js +0 -2
- package/dist/assets/autoplay.service-BOi_pnfg.js +0 -1
- package/dist/assets/instances.command-BvUqb2mS.js +0 -1
- package/dist/assets/network-observer.service-BS91UFhk.js +0 -1
- package/dist/assets/three-authoring.service-K1UPw3op.js +0 -2
- package/dist/assets/three-integration.service-DYpZ_rFP.js +0 -1
- package/dist/assets/transport.header-CxVZN4ZW.js +0 -1
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);
|
|
@@ -2012,8 +2014,8 @@ __export(blender_mcp_exports, {
|
|
|
2012
2014
|
serveBlenderMcp: () => serveBlenderMcp
|
|
2013
2015
|
});
|
|
2014
2016
|
import { randomUUID } from "node:crypto";
|
|
2015
|
-
import { mkdirSync as
|
|
2016
|
-
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";
|
|
2017
2019
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2018
2020
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
2019
2021
|
import {
|
|
@@ -2204,15 +2206,15 @@ var init_blender_mcp = __esm({
|
|
|
2204
2206
|
const bytes = Buffer.from(await spooled.arrayBuffer());
|
|
2205
2207
|
if (shipped === null) {
|
|
2206
2208
|
try {
|
|
2207
|
-
if (
|
|
2209
|
+
if (readFileSync12(entry.path).equals(bytes)) {
|
|
2208
2210
|
this.#seen.set(entry.path, stamp);
|
|
2209
2211
|
continue;
|
|
2210
2212
|
}
|
|
2211
2213
|
} catch (error) {
|
|
2212
2214
|
if (error.code !== "ENOENT") throw error;
|
|
2213
2215
|
}
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
+
mkdirSync10(dirname8(entry.path), { recursive: true });
|
|
2217
|
+
writeFileSync10(entry.path, bytes);
|
|
2216
2218
|
} else {
|
|
2217
2219
|
const query = new URLSearchParams({
|
|
2218
2220
|
path: shipped,
|
|
@@ -2307,15 +2309,15 @@ var init_blender_mcp = __esm({
|
|
|
2307
2309
|
|
|
2308
2310
|
// node/cli.ts
|
|
2309
2311
|
import { parseArgs } from "node:util";
|
|
2310
|
-
import { dirname as
|
|
2311
|
-
import { spawn as
|
|
2312
|
+
import { dirname as dirname9, resolve as resolve12 } from "node:path";
|
|
2313
|
+
import { spawn as spawn4 } from "node:child_process";
|
|
2312
2314
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
2313
2315
|
|
|
2314
2316
|
// package.json
|
|
2315
2317
|
var package_default = {
|
|
2316
2318
|
name: "@volter/game-editor",
|
|
2317
2319
|
author: "Volter AI, Inc.",
|
|
2318
|
-
version: "0.5.
|
|
2320
|
+
version: "0.5.114",
|
|
2319
2321
|
publishConfig: {
|
|
2320
2322
|
access: "public"
|
|
2321
2323
|
},
|
|
@@ -2364,22 +2366,22 @@ var package_default = {
|
|
|
2364
2366
|
}
|
|
2365
2367
|
},
|
|
2366
2368
|
dependencies: {
|
|
2367
|
-
"@volter/editor-core": "0.5.
|
|
2368
|
-
"@volter/editor-game": "0.5.
|
|
2369
|
-
"@volter/editor-react": "0.5.
|
|
2370
|
-
"@volter/editor-threejs": "0.5.
|
|
2371
|
-
"@volter/editor-xstate": "0.5.
|
|
2372
|
-
"@volter/editor-blender": "0.1.
|
|
2373
|
-
"@volter/dawproject": "0.5.
|
|
2374
|
-
"@volter/editor-dawproject": "0.5.
|
|
2375
|
-
"@volter/blender-engine": "0.1.
|
|
2376
|
-
"@volter/editor-project": "0.5.
|
|
2377
|
-
"@volter/editor-sdk": "0.5.
|
|
2378
|
-
"@volter/editor-live": "0.5.
|
|
2379
|
-
"@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",
|
|
2380
2382
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
2381
|
-
"@volter/game-runtime": "0.5.
|
|
2382
|
-
"@volter/threejs-runtime": "0.5.
|
|
2383
|
+
"@volter/game-runtime": "0.5.114",
|
|
2384
|
+
"@volter/threejs-runtime": "0.5.114",
|
|
2383
2385
|
undici: "7.29.1",
|
|
2384
2386
|
typescript: "5.9.3",
|
|
2385
2387
|
"@colyseus/schema": "^4.0.14",
|
|
@@ -6598,7 +6600,7 @@ function killEditorSessionProcess(pid, signal = "SIGTERM") {
|
|
|
6598
6600
|
async function waitForPidExit(pid, timeoutMs) {
|
|
6599
6601
|
const deadline = Date.now() + timeoutMs;
|
|
6600
6602
|
while (pidAlive(pid) && Date.now() < deadline) {
|
|
6601
|
-
await new Promise((
|
|
6603
|
+
await new Promise((resolve13) => setTimeout(resolve13, 50));
|
|
6602
6604
|
}
|
|
6603
6605
|
return !pidAlive(pid);
|
|
6604
6606
|
}
|
|
@@ -7468,7 +7470,105 @@ async function currentPageErrors(serverUrl) {
|
|
|
7468
7470
|
}
|
|
7469
7471
|
}
|
|
7470
7472
|
|
|
7471
|
-
// ../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
|
|
7472
7572
|
import { Agent, fetch as nodeFetch } from "undici";
|
|
7473
7573
|
function createDispatcher(timeoutMs) {
|
|
7474
7574
|
return new Agent({ headersTimeout: timeoutMs, bodyTimeout: timeoutMs });
|
|
@@ -7544,6 +7644,7 @@ var RETRYABLE_TRANSPORT_CODES = /* @__PURE__ */ new Set([
|
|
|
7544
7644
|
var TRANSPORT_RETRY_DELAY_MS = 400;
|
|
7545
7645
|
var EditorClient = class {
|
|
7546
7646
|
baseUrl;
|
|
7647
|
+
fetchOverride;
|
|
7547
7648
|
/**
|
|
7548
7649
|
* The running game's debug plane — see {@link GameDebugDoor}. It rides the
|
|
7549
7650
|
* SAME `/__editor/command` relay every other method here uses (relay cases
|
|
@@ -7573,7 +7674,7 @@ var EditorClient = class {
|
|
|
7573
7674
|
);
|
|
7574
7675
|
}
|
|
7575
7676
|
const unknownOptions = Object.keys(opts ?? {}).filter(
|
|
7576
|
-
(key) => key !== "url" && key !== "onEnvelope" && key !== "transport"
|
|
7677
|
+
(key) => key !== "url" && key !== "onEnvelope" && key !== "transport" && key !== "fetch"
|
|
7577
7678
|
);
|
|
7578
7679
|
if (unknownOptions.length > 0) {
|
|
7579
7680
|
throw new Error(
|
|
@@ -7581,6 +7682,7 @@ var EditorClient = class {
|
|
|
7581
7682
|
);
|
|
7582
7683
|
}
|
|
7583
7684
|
this.baseUrl = (opts?.url ?? DEFAULT_URL).replace(/\/$/, "");
|
|
7685
|
+
this.fetchOverride = opts?.fetch;
|
|
7584
7686
|
this.onEnvelope = opts?.onEnvelope ?? null;
|
|
7585
7687
|
this.transport = opts?.transport ?? null;
|
|
7586
7688
|
this.game = {
|
|
@@ -7629,7 +7731,7 @@ var EditorClient = class {
|
|
|
7629
7731
|
signal: AbortSignal.timeout(deadlineMs)
|
|
7630
7732
|
};
|
|
7631
7733
|
commandDispatcher = deadlineMs > UNDICI_DEFAULT_HEADERS_TIMEOUT_MS ? createDispatcher(deadlineMs + 3e4) : void 0;
|
|
7632
|
-
res = await dispatchFetch(url, init, commandDispatcher);
|
|
7734
|
+
res = this.fetchOverride ? await this.fetchOverride(url, init) : await dispatchFetch(url, init, commandDispatcher);
|
|
7633
7735
|
break;
|
|
7634
7736
|
} catch (error) {
|
|
7635
7737
|
await commandDispatcher?.destroy?.();
|
|
@@ -7644,7 +7746,7 @@ var EditorClient = class {
|
|
|
7644
7746
|
const { code, detail } = describeFetchFailure(error);
|
|
7645
7747
|
if (options?.retryTransport === true && !retried && RETRYABLE_TRANSPORT_CODES.has(code)) {
|
|
7646
7748
|
retried = true;
|
|
7647
|
-
await new Promise((
|
|
7749
|
+
await new Promise((resolve13) => setTimeout(resolve13, TRANSPORT_RETRY_DELAY_MS));
|
|
7648
7750
|
continue;
|
|
7649
7751
|
}
|
|
7650
7752
|
throw new EditorCommandError(
|
|
@@ -8540,7 +8642,7 @@ var EditorClient = class {
|
|
|
8540
8642
|
*/
|
|
8541
8643
|
async httpFetch(url, init, dispatcher) {
|
|
8542
8644
|
try {
|
|
8543
|
-
return await dispatchFetch(url, init, dispatcher);
|
|
8645
|
+
return this.fetchOverride ? await this.fetchOverride(url, init) : await dispatchFetch(url, init, dispatcher);
|
|
8544
8646
|
} catch (error) {
|
|
8545
8647
|
if (error?.name === "TimeoutError") throw error;
|
|
8546
8648
|
const { code, detail } = describeFetchFailure(error);
|
|
@@ -8734,7 +8836,85 @@ function relayCommandTimeoutMs(type) {
|
|
|
8734
8836
|
return isRelayCommandType(type) ? RELAY_COMMANDS[type].timeoutMs : DEFAULT_RELAY_COMMAND_TIMEOUT_MS;
|
|
8735
8837
|
}
|
|
8736
8838
|
|
|
8737
|
-
// ../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";
|
|
8738
8918
|
import { connect, unconnectedBindings } from "@volter/editor-live";
|
|
8739
8919
|
var NOISE = /* @__PURE__ */ new Set(["constructor", "then", "catch", "finally"]);
|
|
8740
8920
|
var FUNCTION_NOISE = /* @__PURE__ */ new Set(["length", "name", "prototype", "arguments", "caller"]);
|
|
@@ -8837,14 +9017,14 @@ var TOOL_CONTRIBUTION_SUFFIXES = [
|
|
|
8837
9017
|
".service"
|
|
8838
9018
|
];
|
|
8839
9019
|
var CONTROLLER_DISCONNECTED_MESSAGE = "The editor tab controlling this command disconnected before reporting a result.";
|
|
8840
|
-
async function control(command, verb, argument, reason, scope) {
|
|
9020
|
+
async function control(command, verb, argument, reason, scope, attachment) {
|
|
8841
9021
|
if (verb === "eval" && argument === "--list") {
|
|
8842
9022
|
const unconnected = { ...unconnectedBindings(), session: { port: 0, projectRoot: process.cwd() } };
|
|
8843
9023
|
console.log(formatSurface(command, { ...unconnected, ...scope?.(unconnected) }));
|
|
8844
9024
|
return;
|
|
8845
9025
|
}
|
|
8846
|
-
const live = await connect();
|
|
8847
|
-
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}` });
|
|
8848
9028
|
if (verb === "close") {
|
|
8849
9029
|
const session = (await verifiedSessions(live.session.port)).find((s) => s.port === live.session.port && s.project === live.session.projectRoot && s.registered);
|
|
8850
9030
|
if (!session?.pid) throw new Error("Cannot close a session without verified process ownership.");
|
|
@@ -8889,13 +9069,97 @@ async function control(command, verb, argument, reason, scope) {
|
|
|
8889
9069
|
process.exitCode = 1;
|
|
8890
9070
|
}
|
|
8891
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
|
+
}
|
|
8892
9156
|
|
|
8893
9157
|
// ../editor-core/dist/server/launcher/session-verbs.js
|
|
8894
|
-
import { existsSync as
|
|
8895
|
-
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";
|
|
8896
9160
|
import { setTimeout as delay2 } from "node:timers/promises";
|
|
8897
9161
|
import { resolveSession } from "@volter/editor-live";
|
|
8898
|
-
import { isAbsolute as isAbsolute4, join as
|
|
9162
|
+
import { isAbsolute as isAbsolute4, join as join10, relative as relative5, resolve as resolve9 } from "node:path";
|
|
8899
9163
|
var DEFAULT_RESTART_TIMINGS = {
|
|
8900
9164
|
reachableBudgetMs: 15e3,
|
|
8901
9165
|
probeIntervalMs: 250,
|
|
@@ -9046,9 +9310,9 @@ function classifyScreenshotTarget(target) {
|
|
|
9046
9310
|
}
|
|
9047
9311
|
function resolveModelTarget(target, options) {
|
|
9048
9312
|
const { cwd, projectRoot, exists } = options;
|
|
9049
|
-
const candidates = [
|
|
9313
|
+
const candidates = [resolve9(cwd, target)];
|
|
9050
9314
|
if (target.startsWith("/") && projectRoot) {
|
|
9051
|
-
candidates.push(
|
|
9315
|
+
candidates.push(join10(projectRoot, target), join10(projectRoot, "public", target));
|
|
9052
9316
|
}
|
|
9053
9317
|
const file = candidates.find((candidate) => exists(candidate));
|
|
9054
9318
|
if (file === void 0) {
|
|
@@ -9278,7 +9542,7 @@ async function screenshot(target, options) {
|
|
|
9278
9542
|
const resolved = resolveModelTarget(classified.path, {
|
|
9279
9543
|
cwd: process.cwd(),
|
|
9280
9544
|
projectRoot: session.projectRoot,
|
|
9281
|
-
exists: (path) =>
|
|
9545
|
+
exists: (path) => existsSync9(path) && statSync4(path).isFile()
|
|
9282
9546
|
});
|
|
9283
9547
|
if ("error" in resolved) throw new Error(resolved.error);
|
|
9284
9548
|
await assertUnambiguousTarget(session.client, classified.path, resolved.file);
|
|
@@ -9288,7 +9552,7 @@ async function screenshot(target, options) {
|
|
|
9288
9552
|
return moduleLook(session.client, session.projectRoot, classified.path, flags);
|
|
9289
9553
|
case "entity": {
|
|
9290
9554
|
const asFile = resolve23(process.cwd(), classified.entityId);
|
|
9291
|
-
if (
|
|
9555
|
+
if (existsSync9(asFile) && statSync4(asFile).isFile()) await assertUnambiguousTarget(session.client, classified.entityId, asFile);
|
|
9292
9556
|
const resolved = resolveEntityTarget(classified.entityId, await liveEntityRows(session.client));
|
|
9293
9557
|
if ("error" in resolved) throw new Error(resolved.error);
|
|
9294
9558
|
return assetLabLook(session.client, { entityId: resolved.entityId }, flags, screenshotPath(session.projectRoot, resolved.entityId), "scene");
|
|
@@ -9308,8 +9572,8 @@ async function sessionLook(client, projectRoot) {
|
|
|
9308
9572
|
capture2 = await client.captureGame({ refreshStarvedFrame: true });
|
|
9309
9573
|
loopRecoveryFrame = true;
|
|
9310
9574
|
}
|
|
9311
|
-
|
|
9312
|
-
|
|
9575
|
+
mkdirSync8(dirname7(outPath), { recursive: true });
|
|
9576
|
+
writeFileSync8(outPath, Buffer.from(capture2.base64, "base64"));
|
|
9313
9577
|
console.log(outPath);
|
|
9314
9578
|
if (capture2.flatness?.degenerate === true && capture2.flatness.warning !== void 0) console.error(`warning \u2014 ${capture2.flatness.warning}`);
|
|
9315
9579
|
if (loopRecoveryFrame || capture2.loopRecoveryFrame === true) {
|
|
@@ -9320,8 +9584,8 @@ async function sessionLook(client, projectRoot) {
|
|
|
9320
9584
|
return;
|
|
9321
9585
|
}
|
|
9322
9586
|
const capture = await client.captureActiveDocument();
|
|
9323
|
-
|
|
9324
|
-
|
|
9587
|
+
mkdirSync8(dirname7(outPath), { recursive: true });
|
|
9588
|
+
writeFileSync8(outPath, Buffer.from(capture.base64, "base64"));
|
|
9325
9589
|
console.log(outPath);
|
|
9326
9590
|
console.error(`${capture.document.title} (${capture.document.kind}${capture.document.sourcePath ? `, ${capture.document.sourcePath}` : ""}) \u2014 ${capture.source}`);
|
|
9327
9591
|
}
|
|
@@ -9342,10 +9606,10 @@ async function assetLabLook(client, source, flags, outputDirectory, defaultStage
|
|
|
9342
9606
|
...flags.width === void 0 ? {} : { width: flags.width },
|
|
9343
9607
|
...flags.height === void 0 ? {} : { height: flags.height }
|
|
9344
9608
|
};
|
|
9345
|
-
|
|
9609
|
+
mkdirSync8(outputDirectory, { recursive: true });
|
|
9346
9610
|
if (flags.compare !== void 0) {
|
|
9347
9611
|
if (flags.shots !== void 0) throw new Error("--compare cannot be combined with --shots");
|
|
9348
|
-
const refBytes =
|
|
9612
|
+
const refBytes = readFileSync10(resolve23(flags.compare));
|
|
9349
9613
|
const maxRefBytes = 32 * 1024 * 1024;
|
|
9350
9614
|
if (refBytes.byteLength > maxRefBytes) throw new Error(`--compare reference GLB must be ${maxRefBytes / 1024 / 1024} MiB or less.`);
|
|
9351
9615
|
const capture2 = await client.captureAssetComparePreview(source, refBytes.toString("base64"), dimensions);
|
|
@@ -9353,7 +9617,7 @@ async function assetLabLook(client, source, flags, outputDirectory, defaultStage
|
|
|
9353
9617
|
for (const view of capture2.views) {
|
|
9354
9618
|
iou[view.view] = view.iou;
|
|
9355
9619
|
for (const [suffix, image] of [["overlay", view.overlay], ["asset", view.asset], ["ref", view.ref]]) {
|
|
9356
|
-
|
|
9620
|
+
writeFileSync8(join23(outputDirectory, `compare-${view.view}-${suffix}.png`), Buffer.from(image.base64, "base64"));
|
|
9357
9621
|
}
|
|
9358
9622
|
}
|
|
9359
9623
|
console.log(JSON.stringify({ compare: { iou } }));
|
|
@@ -9373,18 +9637,18 @@ async function assetLabLook(client, source, flags, outputDirectory, defaultStage
|
|
|
9373
9637
|
const warnings = new Map((capture2.warnings ?? []).map((warning) => [warning.label, warning]));
|
|
9374
9638
|
for (const image of capture2.shots) {
|
|
9375
9639
|
const file = join23(outputDirectory, `${image.label}.png`);
|
|
9376
|
-
|
|
9640
|
+
writeFileSync8(file, Buffer.from(image.base64, "base64"));
|
|
9377
9641
|
const warning = warnings.get(image.label);
|
|
9378
9642
|
if (warning) console.warn(`WARNING ${file}: ${warning.message}`);
|
|
9379
9643
|
}
|
|
9380
|
-
|
|
9644
|
+
writeFileSync8(join23(outputDirectory, "contact-sheet.png"), Buffer.from(capture2.contactSheet.base64, "base64"));
|
|
9381
9645
|
const empty = capture2.warnings?.length ?? 0;
|
|
9382
9646
|
console.log(`Shot set '${flags.shots}' preview (${capture2.shots.length} shots${empty > 0 ? `, ${empty} EMPTY \u2014 see the warnings above` : ""}) written to ${outputDirectory}`);
|
|
9383
9647
|
return;
|
|
9384
9648
|
}
|
|
9385
9649
|
const capture = await client.captureAssetPreview(source, { ...dimensions, ...defaultStage === void 0 ? {} : { stage: defaultStage } });
|
|
9386
|
-
for (const image of capture.views)
|
|
9387
|
-
|
|
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"));
|
|
9388
9652
|
console.log(`${join23(outputDirectory, "contact-sheet.png")} \u2190 every view on one sheet`);
|
|
9389
9653
|
console.log(` per-view frames beside it: ${capture.views.map((image) => `${image.view}.png`).join(" ")}`);
|
|
9390
9654
|
if (capture.orientation && capture.orientation.yawDegrees !== 0) {
|
|
@@ -9443,21 +9707,21 @@ async function moduleLook(client, projectRoot, modulePath, flags) {
|
|
|
9443
9707
|
|
|
9444
9708
|
// node/capabilities.ts
|
|
9445
9709
|
import { execFileSync as execFileSync5 } from "node:child_process";
|
|
9446
|
-
import { existsSync as
|
|
9447
|
-
import { join as
|
|
9710
|
+
import { existsSync as existsSync10 } from "node:fs";
|
|
9711
|
+
import { join as join11, resolve as resolve10 } from "node:path";
|
|
9448
9712
|
import { findProjectRootFrom } from "@volter/editor-live";
|
|
9449
9713
|
var CAPABILITY_OPTIONS = {
|
|
9450
9714
|
project: { type: "string" },
|
|
9451
9715
|
"dry-run": { type: "boolean" },
|
|
9452
9716
|
json: { type: "boolean" }
|
|
9453
9717
|
};
|
|
9454
|
-
var catalogDir =
|
|
9718
|
+
var catalogDir = join11(productRoot, "catalog");
|
|
9455
9719
|
function runCapabilityCommand(verb, ids, options) {
|
|
9456
9720
|
const dryRun = options["dry-run"] === true;
|
|
9457
9721
|
const json = options.json === true;
|
|
9458
9722
|
const log = console.log;
|
|
9459
9723
|
const emit = (value) => log(JSON.stringify(value, null, 2));
|
|
9460
|
-
const projectDir = findProjectRootFrom(
|
|
9724
|
+
const projectDir = findProjectRootFrom(resolve10(options.project ?? process.cwd()));
|
|
9461
9725
|
const catalog = readCatalog(catalogDir);
|
|
9462
9726
|
if (verb === "add" && ids.length === 0) {
|
|
9463
9727
|
const installed = new Set(projectDir ? readCatalogStatus(projectDir, catalogDir).installed : []);
|
|
@@ -9528,7 +9792,7 @@ Use \`git diff\` to see your changes, then port what you want from the new versi
|
|
|
9528
9792
|
resolveDependencySpec: (name, spec) => checkoutPackageSpec(name, monoRoot) ?? spec,
|
|
9529
9793
|
installDependencies: (dependencyNames) => {
|
|
9530
9794
|
if (usesRuntimeImage(projectDir)) {
|
|
9531
|
-
const missing = dependencyNames.filter((name) => !
|
|
9795
|
+
const missing = dependencyNames.filter((name) => !existsSync10(join11(projectDir, "node_modules", ...name.split("/"), "package.json")));
|
|
9532
9796
|
if (missing.length > 0) throw new Error(`The runtime image lacks ${missing.join(", ")}; this capability needs a game that installs its own dependencies.`);
|
|
9533
9797
|
return;
|
|
9534
9798
|
}
|
|
@@ -9569,24 +9833,24 @@ ${report.writtenFiles.map((path) => ` ${path}`).join("\n")}`);
|
|
|
9569
9833
|
import { execFileSync as execFileSync6 } from "node:child_process";
|
|
9570
9834
|
import {
|
|
9571
9835
|
createWriteStream as createWriteStream2,
|
|
9572
|
-
existsSync as
|
|
9573
|
-
mkdirSync as
|
|
9574
|
-
readFileSync as
|
|
9836
|
+
existsSync as existsSync11,
|
|
9837
|
+
mkdirSync as mkdirSync9,
|
|
9838
|
+
readFileSync as readFileSync11,
|
|
9575
9839
|
renameSync as renameSync3,
|
|
9576
|
-
rmSync as
|
|
9577
|
-
writeFileSync as
|
|
9840
|
+
rmSync as rmSync5,
|
|
9841
|
+
writeFileSync as writeFileSync9
|
|
9578
9842
|
} from "node:fs";
|
|
9579
|
-
import { homedir as
|
|
9580
|
-
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";
|
|
9581
9845
|
var WORKBENCH_LOCATOR_PATH2 = ".volter/workbench.json";
|
|
9582
9846
|
var RELEASE_RECORD2 = "BUILD.json";
|
|
9583
|
-
var SOURCES_LAUNCHER2 =
|
|
9847
|
+
var SOURCES_LAUNCHER2 = join12("scripts", "code-server.sh");
|
|
9584
9848
|
var OVERLAY_RECORD2 = ".volter-overlay.json";
|
|
9585
9849
|
function writeWorkbenchDeclaration2(projectRoot, workbenchDir) {
|
|
9586
|
-
|
|
9587
|
-
|
|
9588
|
-
|
|
9589
|
-
`${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)}
|
|
9590
9854
|
`
|
|
9591
9855
|
);
|
|
9592
9856
|
}
|
|
@@ -9594,8 +9858,8 @@ function machinePlatform2() {
|
|
|
9594
9858
|
return `${process.platform}-${process.arch}`;
|
|
9595
9859
|
}
|
|
9596
9860
|
function resolveWorkbench2(dir, expectedProduct) {
|
|
9597
|
-
const root =
|
|
9598
|
-
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;
|
|
9599
9863
|
if (resolved === null) {
|
|
9600
9864
|
throw new Error(
|
|
9601
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.`
|
|
@@ -9611,11 +9875,11 @@ function resolveWorkbench2(dir, expectedProduct) {
|
|
|
9611
9875
|
return resolved;
|
|
9612
9876
|
}
|
|
9613
9877
|
function resolveRelease2(dir) {
|
|
9614
|
-
const record =
|
|
9878
|
+
const record = join12(dir, RELEASE_RECORD2);
|
|
9615
9879
|
const cut = `node scripts/workbench/build-release.mjs --product <id> --platform ${machinePlatform2()} --checkout <fork dir> --out ${dir}`;
|
|
9616
9880
|
let parsed;
|
|
9617
9881
|
try {
|
|
9618
|
-
parsed = JSON.parse(
|
|
9882
|
+
parsed = JSON.parse(readFileSync11(record, "utf8"));
|
|
9619
9883
|
} catch (error) {
|
|
9620
9884
|
throw new Error(`${record} could not be read: ${String(error)}`);
|
|
9621
9885
|
}
|
|
@@ -9639,13 +9903,13 @@ function resolveRelease2(dir) {
|
|
|
9639
9903
|
node scripts/workbench/build-release.mjs --product ${product} --platform ${machine} --checkout <fork dir>`
|
|
9640
9904
|
);
|
|
9641
9905
|
}
|
|
9642
|
-
const packageRoot =
|
|
9643
|
-
const serverBinPath =
|
|
9644
|
-
if (!
|
|
9906
|
+
const packageRoot = join12(dir, target);
|
|
9907
|
+
const serverBinPath = join12(packageRoot, serverBin);
|
|
9908
|
+
if (!existsSync11(serverBinPath)) {
|
|
9645
9909
|
const tarball = typeof parsed["tarball"] === "string" ? parsed["tarball"] : `${target}-<commit>.tar.gz`;
|
|
9646
9910
|
throw new Error(
|
|
9647
9911
|
`${dir} records ${target}, but ${serverBinPath} is not there \u2014 the tarball has not been extracted beside ${RELEASE_RECORD2}. Run:
|
|
9648
|
-
tar -xzf ${
|
|
9912
|
+
tar -xzf ${join12(dir, tarball)} -C ${dir}`
|
|
9649
9913
|
);
|
|
9650
9914
|
}
|
|
9651
9915
|
return { kind: "release", dir, commit, product, serverBin: serverBinPath, cwd: packageRoot };
|
|
@@ -9659,8 +9923,8 @@ function resolveSources2(dir) {
|
|
|
9659
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.`
|
|
9660
9924
|
);
|
|
9661
9925
|
}
|
|
9662
|
-
const marker =
|
|
9663
|
-
if (!
|
|
9926
|
+
const marker = join12(dir, OVERLAY_RECORD2);
|
|
9927
|
+
if (!existsSync11(marker)) {
|
|
9664
9928
|
throw new Error(
|
|
9665
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:
|
|
9666
9930
|
node scripts/workbench/dev.mjs --checkout ${dir} --product <model-editor|game-editor>`
|
|
@@ -9668,7 +9932,7 @@ function resolveSources2(dir) {
|
|
|
9668
9932
|
}
|
|
9669
9933
|
let product;
|
|
9670
9934
|
try {
|
|
9671
|
-
product = JSON.parse(
|
|
9935
|
+
product = JSON.parse(readFileSync11(marker, "utf8"))["product"];
|
|
9672
9936
|
} catch (error) {
|
|
9673
9937
|
throw new Error(`${marker} could not be read: ${String(error)}`);
|
|
9674
9938
|
}
|
|
@@ -9682,11 +9946,11 @@ function resolveSources2(dir) {
|
|
|
9682
9946
|
dir,
|
|
9683
9947
|
commit,
|
|
9684
9948
|
product,
|
|
9685
|
-
serverBin:
|
|
9949
|
+
serverBin: join12(dir, SOURCES_LAUNCHER2),
|
|
9686
9950
|
cwd: dir
|
|
9687
9951
|
};
|
|
9688
9952
|
}
|
|
9689
|
-
var WORKBENCH_CACHE_ROOT2 =
|
|
9953
|
+
var WORKBENCH_CACHE_ROOT2 = join12(homedir5(), ".volter", "workbenches");
|
|
9690
9954
|
|
|
9691
9955
|
// node/cli.ts
|
|
9692
9956
|
var PRODUCT3 = { packageName: package_default.name, id: "game-editor", displayName: package_default.volter.product.displayName, command: Object.keys(package_default.bin)[0] };
|
|
@@ -9730,15 +9994,18 @@ try {
|
|
|
9730
9994
|
volter-game-editor eval <JavaScript> | --list # { editor, game, page, tools, session } in scope
|
|
9731
9995
|
volter-game-editor play | stop | restart
|
|
9732
9996
|
volter-game-editor ${SCREENSHOT_USAGE}
|
|
9997
|
+
volter-game-editor ${HOSTED_USAGE}
|
|
9733
9998
|
volter-game-editor sessions | project | projects
|
|
9734
9999
|
volter-game-editor open <path>
|
|
9735
10000
|
volter-game-editor add [id...] | remove <id...> | outdated [--project <path>] [--dry-run] [--json]
|
|
9736
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));
|
|
9737
10004
|
} else if (verb === "blender-mcp") {
|
|
9738
10005
|
if (positionals.length !== 1) throw new Error("Usage: volter-game-editor blender-mcp");
|
|
9739
|
-
let project =
|
|
10006
|
+
let project = resolve12(process.cwd());
|
|
9740
10007
|
while (!hasManifest(project)) {
|
|
9741
|
-
const parent =
|
|
10008
|
+
const parent = dirname9(project);
|
|
9742
10009
|
if (parent === project) throw new Error("Run volter-game-editor blender-mcp inside a game project.");
|
|
9743
10010
|
project = parent;
|
|
9744
10011
|
}
|
|
@@ -9751,7 +10018,7 @@ try {
|
|
|
9751
10018
|
} catch {
|
|
9752
10019
|
}
|
|
9753
10020
|
await new Promise((done, fail2) => {
|
|
9754
|
-
const child =
|
|
10021
|
+
const child = spawn4(process.execPath, [fileURLToPath2(import.meta.url), "edit", project], {
|
|
9755
10022
|
cwd: project,
|
|
9756
10023
|
stdio: ["ignore", 2, 2],
|
|
9757
10024
|
env: process.env
|
|
@@ -9802,14 +10069,14 @@ try {
|
|
|
9802
10069
|
if (!isScaffoldAddition(value)) throw new Error(`--with must name additions from: ${SCAFFOLD_ADDITIONS.join(", ")} \u2014 got "${value}"`);
|
|
9803
10070
|
additions.push(value);
|
|
9804
10071
|
}
|
|
9805
|
-
if (values.workbench) resolveWorkbench2(
|
|
10072
|
+
if (values.workbench) resolveWorkbench2(resolve12(values.workbench), PRODUCT3.id);
|
|
9806
10073
|
await createGameProject({
|
|
9807
10074
|
name: folder.split(/[\\/]/).at(-1),
|
|
9808
|
-
targetDir:
|
|
10075
|
+
targetDir: resolve12(folder),
|
|
9809
10076
|
additions,
|
|
9810
10077
|
...values.template === void 0 ? {} : { template: values.template }
|
|
9811
10078
|
});
|
|
9812
|
-
if (values.workbench) writeWorkbenchDeclaration2(
|
|
10079
|
+
if (values.workbench) writeWorkbenchDeclaration2(resolve12(folder), resolve12(values.workbench));
|
|
9813
10080
|
}
|
|
9814
10081
|
await launch(folder, PRODUCT3, {
|
|
9815
10082
|
...values.workbench ? { workbench: values.workbench } : {},
|