@forgeax/view 0.5.0-dev.13604.c415409c3b9d → 0.5.0-dev.13619.c20ebf66cef4
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/README.md +50 -6
- package/dist/build-revision.json +1 -1
- package/dist/modules/backend.mjs +34 -34
- package/dist/modules/browser.mjs +55 -49
- package/dist/modules/chunks/{chunk-B6QUJ33G.mjs → chunk-25PFC2DY.mjs} +3 -3
- package/dist/modules/chunks/{chunk-6KM24NH6.mjs → chunk-3Y5WN22T.mjs} +3 -3
- package/dist/modules/chunks/chunk-3Y5WN22T.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs → chunk-43L37UYV.mjs} +6 -6
- package/dist/modules/chunks/{chunk-FNRGLCZW.mjs → chunk-4RTL3LS3.mjs} +36 -10
- package/dist/modules/chunks/chunk-4RTL3LS3.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-WVU3CQ62.mjs → chunk-4ZI5DFBR.mjs} +3 -3
- package/dist/modules/chunks/{chunk-47RJSHLM.mjs → chunk-5HJ336VM.mjs} +3 -3
- package/dist/modules/chunks/{chunk-PVP5YBNR.mjs → chunk-5N5FDO5Y.mjs} +2 -2
- package/dist/modules/chunks/{chunk-APD2EWSZ.mjs → chunk-5PZL6W3F.mjs} +2 -2
- package/dist/modules/chunks/{chunk-LZ57Y73Z.mjs → chunk-5SHQXSSM.mjs} +9 -7
- package/dist/modules/chunks/chunk-5SHQXSSM.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-KI4WGTWL.mjs → chunk-5WVRCLHN.mjs} +2 -2
- package/dist/modules/chunks/{chunk-YNHEYXDG.mjs → chunk-7MQIGD6Q.mjs} +3 -3
- package/dist/modules/chunks/{chunk-F5RLQAPN.mjs → chunk-7YWMB7HV.mjs} +3 -3
- package/dist/modules/chunks/{chunk-FICPCJKR.mjs → chunk-A22PJUZM.mjs} +3 -3
- package/dist/modules/chunks/{chunk-P5XMFZY4.mjs → chunk-A7HXBQUG.mjs} +2 -2
- package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs → chunk-AOD6XLJC.mjs} +3 -3
- package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs.map → chunk-AOD6XLJC.mjs.map} +2 -2
- package/dist/modules/chunks/{chunk-HRKW766Y.mjs → chunk-AZHCKPUL.mjs} +2 -2
- package/dist/modules/chunks/chunk-BJTFQQQR.mjs +13 -0
- package/dist/modules/chunks/chunk-BJTFQQQR.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-6I7RY73G.mjs → chunk-CEB76QBE.mjs} +4 -4
- package/dist/modules/chunks/{chunk-VKNIYV2W.mjs → chunk-CRPXFJ6K.mjs} +202 -35
- package/dist/modules/chunks/chunk-CRPXFJ6K.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-U64FRQKP.mjs → chunk-CVIF6DYH.mjs} +3 -3
- package/dist/modules/chunks/{chunk-DWT3TA6M.mjs → chunk-CYQ7BITZ.mjs} +9 -8
- package/dist/modules/chunks/chunk-CYQ7BITZ.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-OQXDADAS.mjs → chunk-D3GX7HWI.mjs} +6 -6
- package/dist/modules/chunks/chunk-D3GX7HWI.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-XQYF2P6M.mjs → chunk-D3ISMGT6.mjs} +7 -7
- package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs → chunk-DC3PU6SO.mjs} +2 -2
- package/dist/modules/chunks/{chunk-4T3D67CS.mjs → chunk-DJKXBCZH.mjs} +7 -7
- package/dist/modules/chunks/{chunk-E3PJGTLI.mjs → chunk-DX4M6LZH.mjs} +5 -5
- package/dist/modules/chunks/{chunk-IZAHIOFU.mjs → chunk-EOW4JGVV.mjs} +6 -6
- package/dist/modules/chunks/{chunk-U5R6MVM4.mjs → chunk-EQRDY5CQ.mjs} +2 -2
- package/dist/modules/chunks/{chunk-7IGFAI5H.mjs → chunk-EW7VMNZA.mjs} +5 -5
- package/dist/modules/chunks/{chunk-FMCHH5R4.mjs → chunk-FSSKCXPL.mjs} +3 -3
- package/dist/modules/chunks/{chunk-357UOBAS.mjs → chunk-FSYQ3LBQ.mjs} +2 -2
- package/dist/modules/chunks/{chunk-D25SR5FS.mjs → chunk-FVSDKOXR.mjs} +3 -3
- package/dist/modules/chunks/{chunk-XMP4THLF.mjs → chunk-J7QRK3FU.mjs} +4 -4
- package/dist/modules/chunks/{chunk-D57DDEV2.mjs → chunk-JE4N575J.mjs} +5 -5
- package/dist/modules/chunks/{chunk-ZIDEETK4.mjs → chunk-JKDBKS7P.mjs} +3 -3
- package/dist/modules/chunks/{chunk-U5J7OTEB.mjs → chunk-K4C5WOTT.mjs} +3 -3
- package/dist/modules/chunks/{chunk-QUFVUMSY.mjs → chunk-KOBAWLZL.mjs} +2 -2
- package/dist/modules/chunks/{chunk-CX5WREJC.mjs → chunk-KY2AWNDR.mjs} +2 -2
- package/dist/modules/chunks/{chunk-RJVOH7G2.mjs → chunk-L24HPIQP.mjs} +27 -27
- package/dist/modules/chunks/{chunk-27XASYEH.mjs → chunk-LCVL3V5U.mjs} +17 -11
- package/dist/modules/chunks/chunk-LCVL3V5U.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-PJFFCRRD.mjs → chunk-LOVO3P2Q.mjs} +2 -2
- package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs → chunk-M66NDY35.mjs} +3 -3
- package/dist/modules/chunks/{chunk-EZSGDSCC.mjs → chunk-M7XSCLYV.mjs} +18 -4
- package/dist/modules/chunks/chunk-M7XSCLYV.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-YLCJNKIW.mjs → chunk-MFEFV3YF.mjs} +70 -30
- package/dist/modules/chunks/chunk-MFEFV3YF.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-55F55BQY.mjs → chunk-MUBV2LNK.mjs} +3 -3
- package/dist/modules/chunks/{chunk-M6S5YA6X.mjs → chunk-NHNPQ3ZS.mjs} +3 -3
- package/dist/modules/chunks/{chunk-STQPRNEO.mjs → chunk-NSPN5OQ5.mjs} +2 -2
- package/dist/modules/chunks/{chunk-XE6ITXHT.mjs → chunk-NZ4N7AVG.mjs} +2 -2
- package/dist/modules/chunks/{chunk-KAGFU64Y.mjs → chunk-OGFZB75B.mjs} +2 -2
- package/dist/modules/chunks/{chunk-EWSCJF77.mjs → chunk-OS7BK3FO.mjs} +2 -2
- package/dist/modules/chunks/{chunk-HWZCLROY.mjs → chunk-P27F2TZN.mjs} +248 -42
- package/dist/modules/chunks/chunk-P27F2TZN.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-5W7SC5D4.mjs → chunk-P2Y73QJJ.mjs} +11 -1
- package/dist/modules/chunks/{chunk-5W7SC5D4.mjs.map → chunk-P2Y73QJJ.mjs.map} +2 -2
- package/dist/modules/chunks/{chunk-U6UMATPV.mjs → chunk-P3ZW2T37.mjs} +3 -3
- package/dist/modules/chunks/{chunk-INTTYJVW.mjs → chunk-PHCUCHVL.mjs} +2 -2
- package/dist/modules/chunks/{chunk-JK7K7RG3.mjs → chunk-QNJL265P.mjs} +4 -4
- package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs → chunk-QNSUBUZF.mjs} +1 -1
- package/dist/modules/chunks/{chunk-5YTMN435.mjs → chunk-QNUBIFAY.mjs} +13 -3
- package/dist/modules/chunks/chunk-QNUBIFAY.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-TXLD7JI5.mjs → chunk-QQP7ZGQD.mjs} +2 -2
- package/dist/modules/chunks/{chunk-E3Z7GLFU.mjs → chunk-QYJZ3SOV.mjs} +12 -1
- package/dist/modules/chunks/chunk-QYJZ3SOV.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-PZIAKZJC.mjs → chunk-R6MT6F3T.mjs} +3 -3
- package/dist/modules/chunks/{chunk-P4UPH74B.mjs → chunk-RGM4S2BE.mjs} +3 -3
- package/dist/modules/chunks/{chunk-AGVLPYVE.mjs → chunk-SKZC6VTV.mjs} +2 -2
- package/dist/modules/chunks/{chunk-4D3Q7K44.mjs → chunk-SSVRSFTX.mjs} +2 -2
- package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs → chunk-TFBSEYKW.mjs} +3 -3
- package/dist/modules/chunks/{chunk-K2QZRFLE.mjs → chunk-TPLT4PBX.mjs} +4 -4
- package/dist/modules/chunks/{chunk-5PHAXNFO.mjs → chunk-U5LBMAG3.mjs} +3 -3
- package/dist/modules/chunks/{chunk-46UEGAXY.mjs → chunk-V4SOFUJI.mjs} +6 -6
- package/dist/modules/chunks/{chunk-IJPWKKIU.mjs → chunk-VD3C4DYT.mjs} +14 -13
- package/dist/modules/chunks/chunk-VD3C4DYT.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-YFQGSDK3.mjs → chunk-VD4QU7KY.mjs} +2 -2
- package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs → chunk-WC6NGMGI.mjs} +3 -3
- package/dist/modules/chunks/{chunk-H256DQT6.mjs → chunk-XOZ5EMNY.mjs} +2 -2
- package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs → chunk-XXJ32F5P.mjs} +3 -3
- package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs → chunk-Y4SFATAM.mjs} +6 -6
- package/dist/modules/chunks/{chunk-SRYQLFBV.mjs → chunk-ZKFH7EMU.mjs} +2 -2
- package/dist/modules/chunks/{chunk-CKYXAT7H.mjs → chunk-ZRG7LDCA.mjs} +2 -2
- package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs → chunk-ZW7LLDOL.mjs} +2 -2
- package/dist/modules/cli-contributions.mjs +14 -14
- package/dist/modules/cli.mjs +5 -5
- package/dist/modules/command-executor.mjs +3 -3
- package/dist/modules/embedded.mjs +82 -42
- package/dist/modules/embedded.mjs.map +2 -2
- package/dist/modules/extension-bridge.mjs +4 -4
- package/dist/modules/frontend-root.mjs +46 -46
- package/dist/modules/index.mjs +71 -65
- package/dist/modules/index.mjs.map +1 -1
- package/dist/modules/pages/scene.mjs +5 -5
- package/dist/modules/plugin.mjs +35 -35
- package/dist/modules/plugins/asset/frontend.mjs +10 -10
- package/dist/modules/plugins/asset/identity.mjs +9 -9
- package/dist/modules/plugins/asset/ui.mjs +3 -3
- package/dist/modules/plugins/content-browser/frontend.mjs +3 -3
- package/dist/modules/plugins/content-browser/identity.mjs +2 -2
- package/dist/modules/plugins/content-browser/ui.mjs +3 -3
- package/dist/modules/plugins/display/api.mjs +1 -1
- package/dist/modules/plugins/display/backend.mjs +4 -4
- package/dist/modules/plugins/display/frontend.mjs +5 -5
- package/dist/modules/plugins/display/identity.mjs +2 -2
- package/dist/modules/plugins/display/ui.mjs +3 -3
- package/dist/modules/plugins/inspector/frontend.mjs +3 -3
- package/dist/modules/plugins/inspector/identity.mjs +2 -2
- package/dist/modules/plugins/inspector/ui.mjs +3 -3
- package/dist/modules/plugins/material/frontend.mjs +10 -10
- package/dist/modules/plugins/material/identity.mjs +9 -9
- package/dist/modules/plugins/material/ui.mjs +10 -10
- package/dist/modules/plugins/mesh/frontend.mjs +10 -10
- package/dist/modules/plugins/mesh/identity.mjs +9 -9
- package/dist/modules/plugins/mesh/ui.mjs +10 -10
- package/dist/modules/plugins/plugins/api.mjs +4 -4
- package/dist/modules/plugins/plugins/backend.mjs +7 -7
- package/dist/modules/plugins/plugins/cli.mjs +5 -5
- package/dist/modules/plugins/plugins/frontend.mjs +3 -3
- package/dist/modules/plugins/plugins/identity.mjs +2 -2
- package/dist/modules/plugins/plugins/runtime.mjs +6 -6
- package/dist/modules/plugins/plugins/ui/panel.mjs +3 -3
- package/dist/modules/plugins/plugins/ui.mjs +4 -4
- package/dist/modules/plugins/scene/frontend.mjs +5 -5
- package/dist/modules/plugins/scene/identity.mjs +2 -2
- package/dist/modules/plugins/scene-tree/frontend.mjs +3 -3
- package/dist/modules/plugins/scene-tree/identity.mjs +2 -2
- package/dist/modules/plugins/scene-tree/ui.mjs +3 -3
- package/dist/modules/plugins/texture/frontend.mjs +10 -10
- package/dist/modules/plugins/texture/identity.mjs +9 -9
- package/dist/modules/plugins/texture/ui.mjs +10 -10
- package/dist/modules/plugins/viewport/frontend.mjs +12 -12
- package/dist/modules/plugins/viewport/identity.mjs +2 -2
- package/dist/modules/plugins/viewport/presentation.mjs +4 -4
- package/dist/modules/plugins/viewport/schema.mjs +2 -2
- package/dist/modules/plugins/viewport/workspace-shell.mjs +9 -9
- package/dist/modules/product.mjs +35 -35
- package/dist/modules/shell/frontend.mjs +1 -1
- package/dist/modules/viewer/catalog/backend.mjs +31 -31
- package/dist/modules/viewer/catalog/frontend.mjs +42 -42
- package/dist/modules/viewer/catalog/shared.mjs +20 -20
- package/dist/modules/viewer/catalog.mjs +51 -51
- package/dist/modules/viewer/cli.mjs +10 -10
- package/dist/modules/viewer-host/frontend.mjs +48 -48
- package/dist/modules/viewer-host/page-registry.mjs +6 -6
- package/dist/modules/viewer-host.mjs +7 -7
- package/dist/modules/viewer.mjs +51 -51
- package/dist/modules/workspace/api.mjs +1 -1
- package/dist/modules/workspace/backend.mjs +10 -10
- package/dist/modules/workspace/broker.mjs +9 -9
- package/dist/modules/workspace/cli.mjs +2 -2
- package/dist/modules/workspace/client.mjs +3 -3
- package/dist/modules/workspace/command-error.mjs +2 -2
- package/dist/modules/workspace/contract.mjs +7 -1
- package/dist/modules/workspace/engine-adapter.mjs +3 -3
- package/dist/modules/workspace/extension-bridge.mjs +4 -4
- package/dist/modules/workspace/frontend-plugin.mjs +8 -8
- package/dist/modules/workspace/frontend.mjs +9 -9
- package/dist/modules/workspace/page-title.mjs +3 -3
- package/dist/modules/workspace/presentation.mjs +4 -4
- package/dist/modules/workspace/preview-surface.mjs +7 -7
- package/dist/modules/workspace/project-session.mjs +2 -2
- package/dist/modules/workspace/render-resize-sync.mjs +2 -2
- package/dist/modules/workspace/resident.mjs +4 -4
- package/dist/modules/workspace/resource-open.mjs +5 -5
- package/dist/modules/workspace/resource-page.mjs +8 -8
- package/dist/modules/workspace/tool-runtime.mjs +7 -5
- package/dist/modules/workspace/view-trace.mjs +3 -3
- package/dist/modules/workspace/workspace-recovery.mjs +4 -4
- package/dist/modules/workspace/workspace-state.mjs +2 -2
- package/dist/modules/workspace-frontend.mjs +8 -8
- package/dist/viewer/assets/{embedded-DXSSFAyM.js → embedded-BZSPh0if.js} +2 -2
- package/dist/viewer/assets/{embedded-DXSSFAyM.js.map → embedded-BZSPh0if.js.map} +1 -1
- package/dist/viewer/assets/main-CmJEE-8D.js +22 -0
- package/dist/viewer/assets/main-CmJEE-8D.js.map +1 -0
- package/dist/viewer/assets/panels-ui-Cm3As_jE.js +12 -0
- package/dist/viewer/assets/panels-ui-Cm3As_jE.js.map +1 -0
- package/dist/viewer/assets/style-CcYzhsIZ.css +2 -0
- package/dist/viewer/index.html +3 -3
- package/dist/viewer/panels.js +1 -1
- package/package.json +2 -2
- package/scripts/verify-runtime-content-engine.mjs +7 -4
- package/skills/forgeax-view-cli/SKILL.md +4 -0
- package/dist/modules/chunks/chunk-27XASYEH.mjs.map +0 -7
- package/dist/modules/chunks/chunk-5YTMN435.mjs.map +0 -7
- package/dist/modules/chunks/chunk-6KM24NH6.mjs.map +0 -7
- package/dist/modules/chunks/chunk-DWT3TA6M.mjs.map +0 -7
- package/dist/modules/chunks/chunk-E3Z7GLFU.mjs.map +0 -7
- package/dist/modules/chunks/chunk-EZSGDSCC.mjs.map +0 -7
- package/dist/modules/chunks/chunk-FNRGLCZW.mjs.map +0 -7
- package/dist/modules/chunks/chunk-HWZCLROY.mjs.map +0 -7
- package/dist/modules/chunks/chunk-IJPWKKIU.mjs.map +0 -7
- package/dist/modules/chunks/chunk-LZ57Y73Z.mjs.map +0 -7
- package/dist/modules/chunks/chunk-OQXDADAS.mjs.map +0 -7
- package/dist/modules/chunks/chunk-QELNKFSI.mjs +0 -10
- package/dist/modules/chunks/chunk-QELNKFSI.mjs.map +0 -7
- package/dist/modules/chunks/chunk-VKNIYV2W.mjs.map +0 -7
- package/dist/modules/chunks/chunk-YLCJNKIW.mjs.map +0 -7
- package/dist/viewer/assets/main-CI6ZQziX.js +0 -22
- package/dist/viewer/assets/main-CI6ZQziX.js.map +0 -1
- package/dist/viewer/assets/panels-ui-CfUtl68h.js +0 -12
- package/dist/viewer/assets/panels-ui-CfUtl68h.js.map +0 -1
- package/dist/viewer/assets/style-gOtSMZif.css +0 -2
- /package/dist/modules/chunks/{chunk-B6QUJ33G.mjs.map → chunk-25PFC2DY.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs.map → chunk-43L37UYV.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-WVU3CQ62.mjs.map → chunk-4ZI5DFBR.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-47RJSHLM.mjs.map → chunk-5HJ336VM.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-PVP5YBNR.mjs.map → chunk-5N5FDO5Y.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-APD2EWSZ.mjs.map → chunk-5PZL6W3F.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-KI4WGTWL.mjs.map → chunk-5WVRCLHN.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-YNHEYXDG.mjs.map → chunk-7MQIGD6Q.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-F5RLQAPN.mjs.map → chunk-7YWMB7HV.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-FICPCJKR.mjs.map → chunk-A22PJUZM.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-P5XMFZY4.mjs.map → chunk-A7HXBQUG.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-HRKW766Y.mjs.map → chunk-AZHCKPUL.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-6I7RY73G.mjs.map → chunk-CEB76QBE.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-U64FRQKP.mjs.map → chunk-CVIF6DYH.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-XQYF2P6M.mjs.map → chunk-D3ISMGT6.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs.map → chunk-DC3PU6SO.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-4T3D67CS.mjs.map → chunk-DJKXBCZH.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-E3PJGTLI.mjs.map → chunk-DX4M6LZH.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-IZAHIOFU.mjs.map → chunk-EOW4JGVV.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-U5R6MVM4.mjs.map → chunk-EQRDY5CQ.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-7IGFAI5H.mjs.map → chunk-EW7VMNZA.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-FMCHH5R4.mjs.map → chunk-FSSKCXPL.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-357UOBAS.mjs.map → chunk-FSYQ3LBQ.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-D25SR5FS.mjs.map → chunk-FVSDKOXR.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-XMP4THLF.mjs.map → chunk-J7QRK3FU.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-D57DDEV2.mjs.map → chunk-JE4N575J.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-ZIDEETK4.mjs.map → chunk-JKDBKS7P.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-U5J7OTEB.mjs.map → chunk-K4C5WOTT.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-QUFVUMSY.mjs.map → chunk-KOBAWLZL.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-CX5WREJC.mjs.map → chunk-KY2AWNDR.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-RJVOH7G2.mjs.map → chunk-L24HPIQP.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-PJFFCRRD.mjs.map → chunk-LOVO3P2Q.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs.map → chunk-M66NDY35.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-55F55BQY.mjs.map → chunk-MUBV2LNK.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-M6S5YA6X.mjs.map → chunk-NHNPQ3ZS.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-STQPRNEO.mjs.map → chunk-NSPN5OQ5.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-XE6ITXHT.mjs.map → chunk-NZ4N7AVG.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-KAGFU64Y.mjs.map → chunk-OGFZB75B.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-EWSCJF77.mjs.map → chunk-OS7BK3FO.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-U6UMATPV.mjs.map → chunk-P3ZW2T37.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-INTTYJVW.mjs.map → chunk-PHCUCHVL.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-JK7K7RG3.mjs.map → chunk-QNJL265P.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs.map → chunk-QNSUBUZF.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-TXLD7JI5.mjs.map → chunk-QQP7ZGQD.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-PZIAKZJC.mjs.map → chunk-R6MT6F3T.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-P4UPH74B.mjs.map → chunk-RGM4S2BE.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-AGVLPYVE.mjs.map → chunk-SKZC6VTV.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-4D3Q7K44.mjs.map → chunk-SSVRSFTX.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs.map → chunk-TFBSEYKW.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-K2QZRFLE.mjs.map → chunk-TPLT4PBX.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-5PHAXNFO.mjs.map → chunk-U5LBMAG3.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-46UEGAXY.mjs.map → chunk-V4SOFUJI.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-YFQGSDK3.mjs.map → chunk-VD4QU7KY.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs.map → chunk-WC6NGMGI.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-H256DQT6.mjs.map → chunk-XOZ5EMNY.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs.map → chunk-XXJ32F5P.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs.map → chunk-Y4SFATAM.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-SRYQLFBV.mjs.map → chunk-ZKFH7EMU.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-CKYXAT7H.mjs.map → chunk-ZRG7LDCA.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs.map → chunk-ZW7LLDOL.mjs.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/view-workspace-core/src/broker.ts", "../../../packages/view-workspace-core/src/file-preview.ts"],
|
|
4
|
-
"sourcesContent": ["import type { EngineWorkspaceRuntime, EngineWorkspacePreview, EngineWorkspacePlay, EngineWorkspaceProjectHandle, EngineWorkspaceCameraResult } from '@forgeax/engine/app';\nimport type { ToolApi, ToolCallerIdentity } from '@forgeax/engine-tool-runtime';\nimport type { WorkspaceAsset, WorkspaceInspection, WorkspaceOpenRequest, WorkspaceSceneSelection, WorkspaceState, WorkspacePreview, WorkspaceRequest, WorkspaceResourceOpen, WorkspaceTab } from './contract.ts';\nimport type { HostTransportServer } from '@forgeax/engine-host/transport';\nimport { workspaceDiagnosticRecord } from './command-error.ts';\nimport { randomUUID } from 'node:crypto';\nimport { runWorkspaceToolApi } from './tool-runtime.ts';\nimport {\n VIEW_DISPLAY_TAB_ID, VIEW_WORKSPACE_TAB_ID, VIEW_WORKSPACE_API_VERSION,\n VIEW_FILE_GET_SERVICE, VIEW_WORKSPACE_SERVICES, VIEW_WORKSPACE_STATE_TOPIC, VIEW_WORKSPACE_OPERATIONS,\n assertWorkspaceRequest, cloneWorkspaceValue, requireWorkspaceString,\n serializeWorkspaceState, serializeWorkspaceAsset, serializeWorkspaceInspection,\n serializeWorkspaceOpenRequest, workspaceCapabilities, workspaceError,\n workspaceUiFingerprint,\n} from './contract.ts';\nimport { createWorkspaceId } from './id.ts';\nimport {\n editorSceneTargetIds,\n isEditorWorkspaceAsset,\n isTypePreviewAsset,\n logResourceOpen,\n selectEditorWorkspacePreview,\n summarizeResourceAsset,\n} from './resource-open.ts';\nimport { readWorkspaceFilePreview } from './file-preview.ts';\nimport {\n isWorkspaceTargetRecoveryCode,\n resolveWorkspaceFailure,\n resolveWorkspaceReopenRoot,\n} from './workspace-recovery.ts';\n\nexport type WorkspaceAuthorization = (input: { clientId: string; operation: string; request: Pick<WorkspaceRequest, 'operation' | 'args' | 'clientId'> & Partial<WorkspaceRequest>; caller?: ToolCallerIdentity; signal?: AbortSignal }) => boolean | Promise<boolean>;\nexport type WorkspaceCallContext = { signal?: AbortSignal; caller?: ToolCallerIdentity; clientId?: string; token?: string; requestId?: string };\nexport type BrokerOptions = { engine?: EngineWorkspaceRuntime; toolApi?: ToolApi; display?: () => { state?: string; occupancy?: Pick<WorkspaceTab, 'run' | 'target' | 'targetId'> | null } | undefined; accessToken?: string; authorize?: WorkspaceAuthorization };\ntype Args = Record<string, unknown>;\ntype WorkspaceDomainResult = Partial<EngineWorkspaceCameraResult> & { assets?: WorkspaceAsset[]; inspection?: WorkspaceInspection; preview?: WorkspacePreview; asset?: WorkspaceAsset; target?: WorkspacePreview['target']; entityId?: string | null };\n\nconst ENGINE_SOURCE = 'engine-workspace';\nconst UI_OPERATIONS = Object.freeze<Record<string, (workspace: ViewWorkspaceBroker, args: Args, context: WorkspaceCallContext) => unknown>>({\n 'target.select': (workspace, args) => workspace.selectTarget(args),\n 'tabs.get': (workspace) => workspace.snapshot(),\n 'tabs.select': (workspace, args) => workspace.selectTab(args),\n 'scene.select': (workspace, args, context) => workspace.selectSceneEntity(args, context),\n 'scene.pick': (workspace, args, context) => workspace.pickSceneEntity(args, context),\n 'scene.clear': (workspace, args, context) => workspace.clearSceneSelection(args, context),\n});\n\n/** View bindings and display snapshots. Engine owns all project and target resources. */\nexport class ViewWorkspaceBroker {\n declare readonly engine: EngineWorkspaceRuntime | undefined;\n declare readonly toolApi: ToolApi | undefined;\n declare readonly display: NonNullable<BrokerOptions['display']>;\n declare readonly accessToken: string;\n declare readonly authorize: WorkspaceAuthorization | undefined;\n declare selectedTabId: string;\n declare targetBinding: 'editor' | 'play';\n declare editorTargetId: string | undefined;\n declare previewTargetId: string | undefined;\n declare playOwner: EngineWorkspacePlay | undefined;\n declare projectOwner: EngineWorkspaceProjectHandle | undefined;\n declare previewOwner: EngineWorkspacePreview | EngineWorkspacePlay | undefined;\n declare revision: number;\n declare listeners: Set<(state: WorkspaceState) => void>;\n declare assets: WorkspaceAsset[] | null;\n declare inspection: WorkspaceInspection | null;\n declare openRequest: WorkspaceOpenRequest | null;\n declare openRequestSequence: number;\n declare resourceOpens: Map<string, WorkspaceResourceOpen>;\n declare sceneSelection: WorkspaceSceneSelection | null;\n declare selectionAbort: AbortController | undefined;\n declare previewProjection: (WorkspacePreview & Pick<EngineWorkspacePreview, 'presentation'>) | null;\n declare workspaceTargetLost: boolean;\n declare catalogEpoch: number;\n declare disposing: boolean;\n declare publishFingerprint: string;\n constructor({ engine, toolApi, display = () => undefined, accessToken = randomUUID(), authorize }: BrokerOptions = {}) {\n this.engine = engine;\n this.toolApi = toolApi;\n this.display = display;\n this.accessToken = accessToken;\n this.authorize = authorize;\n this.selectedTabId = VIEW_WORKSPACE_TAB_ID;\n this.targetBinding = 'editor';\n this.editorTargetId = undefined;\n this.playOwner = undefined;\n this.revision = 0;\n this.listeners = new Set<(state: WorkspaceState) => void>();\n this.assets = null;\n this.inspection = null;\n this.openRequest = null;\n this.openRequestSequence = 0;\n this.resourceOpens = new Map();\n this.sceneSelection = null;\n this.selectionAbort?.abort();\n this.previewProjection = null;\n this.projectOwner = undefined;\n this.previewOwner = undefined;\n this.workspaceTargetLost = false;\n this.catalogEpoch = -1;\n this.disposing = false;\n this.publishFingerprint = '';\n }\n\n get project() { return this.engine?.project?.project ?? null; }\n get projectTarget() { return this.engine?.project?.target ?? null; }\n get preview() { this.syncBindings(); return this.previewProjection; }\n\n previews() { return this.engine?.previews ?? (this.engine?.preview ? [this.engine.preview] : []); }\n classifiedPreviews() {\n return this.previews().map((preview) => ({\n target: preview.target,\n asset: this.hydrateAsset(preview.asset),\n }));\n }\n editorPreview() {\n const live = this.previews();\n const selected = selectEditorWorkspacePreview(this.classifiedPreviews(), this.editorTargetId);\n if (!selected) return undefined;\n return live.find((preview) => String(preview.target.targetId) === String(selected.target.targetId));\n }\n boundTarget() {\n if (this.targetBinding === 'play') {\n const play = this.engine?.play;\n return play?.phase === 'running' ? play : undefined;\n }\n return this.previews().find(preview => preview.target.targetId === this.previewTargetId) ?? this.editorPreview();\n }\n hydrateAsset(asset: WorkspaceAsset | null | undefined) {\n if (!asset?.guid) return asset ?? null;\n if (asset.kind) return asset;\n const catalog = Array.isArray(this.assets)\n ? this.assets.find((entry) => entry.guid === asset.guid)\n : undefined;\n if (!catalog?.kind) return asset;\n return { ...asset, kind: catalog.kind, name: asset.name ?? catalog.name };\n }\n selectTarget({ targetId }: Args = {}) {\n if (targetId === this.engine?.play?.target.targetId) this.targetBinding = 'play';\n else {\n const preview = this.previews().find((entry) => entry.target.targetId === targetId);\n if (!preview) throw workspaceError('view-workspace-target-mismatch', 'An existing preview or Play target', 'Refresh tabs.get.');\n this.targetBinding = 'editor';\n this.previewTargetId = targetId as string;\n if (isEditorWorkspaceAsset(this.hydrateAsset(preview.asset))) this.editorTargetId = String(targetId);\n }\n this.changed();\n return this.snapshot();\n }\n syncBindings() {\n if (this.playOwner !== this.engine?.play) {\n this.playOwner = this.engine?.play;\n this.targetBinding = this.playOwner ? 'play' : 'editor';\n if (!this.playOwner) this.previewTargetId = this.editorPreview()?.target.targetId;\n }\n if (this.projectOwner !== this.engine?.project) {\n this.projectOwner = this.engine?.project;\n this.assets = null;\n this.inspection = null;\n this.openRequest = null;\n this.openRequestSequence = 0;\n this.resourceOpens = new Map();\n this.editorTargetId = undefined;\n this.sceneSelection = null;\n this.selectionAbort?.abort();\n }\n if (this.previewOwner !== this.boundTarget()) {\n this.previewOwner = this.boundTarget();\n this.sceneSelection = null;\n this.selectionAbort?.abort();\n this.previewProjection = this.previewOwner ? {\n target: this.previewOwner.target, asset: this.previewOwner.asset,\n presentation: this.previewOwner.presentation,\n assetBinding: this.previewOwner.assetBinding,\n } : null;\n }\n }\n\n snapshot(): WorkspaceState {\n this.syncBindings();\n const display = this.display?.();\n return serializeWorkspaceState({\n revision: this.revision, selectedTabId: this.selectedTabId,\n tabs: [\n { tabId: VIEW_DISPLAY_TAB_ID, kind: 'display', selected: this.selectedTabId === VIEW_DISPLAY_TAB_ID,\n state: display?.state, run: display?.occupancy?.run, target: display?.occupancy?.target,\n targetId: display?.occupancy?.targetId },\n { tabId: VIEW_WORKSPACE_TAB_ID, kind: 'workspace', selected: this.selectedTabId === VIEW_WORKSPACE_TAB_ID,\n state: this.previewProjection ? 'previewing' : this.project ? 'project-open' : 'empty',\n ...(this.previewProjection?.target ?? this.projectTarget ? { target: this.previewProjection?.target ?? this.projectTarget } : {}) },\n ],\n project: this.project, projectTarget: this.projectTarget,\n ...(this.engine?.project?.phase === undefined ? {} : { projectPhase: this.engine.project.phase }),\n ...(this.engine?.project?.browserGeneration === undefined ? {} : { browserGeneration: this.engine.project.browserGeneration }),\n assets: this.assets,\n preview: this.previewProjection && { ...this.previewProjection, target: this.boundTarget()!.target, asset: this.hydrateAsset(this.previewProjection.asset), assetBinding: this.boundTarget()!.assetBinding },\n editorPreview: this.editorPreview() ? { target: this.editorPreview()!.target, asset: this.hydrateAsset(this.editorPreview()!.asset), assetBinding: this.editorPreview()!.assetBinding } : null,\n previews: this.previews().map(preview => ({ target: preview.target, asset: this.hydrateAsset(preview.asset), assetBinding: preview.assetBinding })),\n play: this.engine?.play ? { target: this.engine.play.target, phase: this.engine.play.phase } : null,\n targetBinding: this.targetBinding,\n inspection: this.inspection,\n openRequest: this.openRequest,\n resourceOpens: Object.fromEntries(this.resourceOpens),\n sceneSelection: this.sceneSelection,\n workspaceTargetLost: this.workspaceTargetLost,\n });\n }\n\n changed() {\n const current = this.snapshot();\n const fingerprint = workspaceUiFingerprint(current);\n if (fingerprint === this.publishFingerprint) return;\n this.revision += 1;\n const state = this.snapshot();\n this.publishFingerprint = workspaceUiFingerprint(state);\n for (const listener of this.listeners) { try { listener(state); } catch { /* UI observers do not own operations. */ } }\n }\n subscribe(listener: (state: WorkspaceState) => void) {\n this.listeners.add(listener);\n const state = this.snapshot();\n this.publishFingerprint ||= workspaceUiFingerprint(state);\n listener(state);\n return () => this.listeners.delete(listener);\n }\n capabilities() {\n const descriptions = this.toolApi?.list().filter(record => record.callable && (record.owner.sourceId === ENGINE_SOURCE || record.descriptor.id.startsWith('view.display.')))\n .map(record => ({ id: record.descriptor.id.replace(/^(engine|view)\\./, ''), path: record.descriptor.path, title: record.descriptor.title, summary: record.descriptor.summary, inputSchema: record.descriptor.inputSchema, outputSchema: record.descriptor.outputSchema })) ?? [];\n const operations = [...Object.keys(UI_OPERATIONS), ...descriptions.map(item => item.id),\n ...VIEW_WORKSPACE_OPERATIONS.filter(id => id.startsWith('plugins.') && this.toolApi?.describe(id, 'view-backend').some(record => record.callable))]\n .filter(id => VIEW_WORKSPACE_OPERATIONS.includes(id));\n return { ...workspaceCapabilities({ ready: !!this.engine && !this.disposing, headed: this.projectTarget?.headed === true, operations }), descriptions };\n }\n async authorizeRequest(request: WorkspaceRequest, caller?: ToolCallerIdentity) {\n if (this.disposing) throw workspaceError('view-workspace-stopping', 'View bindings to remain available', 'Reconnect to the backend.');\n if (request.token !== this.accessToken || (this.authorize && !await this.authorize({ clientId: request.clientId, operation: request.operation, request, caller }))) {\n throw workspaceError('view-workspace-unauthorized', 'an authorized workspace connection', 'Connect with the issued token.', { clientId: request.clientId });\n }\n }\n async call(rawRequest: unknown, { signal, caller }: WorkspaceCallContext = {}) {\n const request = assertWorkspaceRequest(rawRequest);\n await this.authorizeRequest(request, caller);\n const ui = UI_OPERATIONS[request.operation];\n if (ui) return ui(this, request.args, { signal, caller, clientId: request.clientId });\n if (request.operation === 'project.reopen') {\n return this.reopenProject(request.args, {\n signal,\n caller,\n clientId: request.clientId,\n token: request.token,\n requestId: request.requestId,\n });\n }\n return this.invoke(request.operation, request.args, { signal, caller, clientId: request.clientId, token: request.token, requestId: request.requestId });\n }\n async invoke(operation: string, args: Args = {}, { signal, caller, clientId = 'view-owner', token, requestId }: WorkspaceCallContext = {}) {\n const { tabId, ...input } = args;\n if (tabId !== undefined) this.assertWorkspaceTab(tabId);\n const inspector = operation.startsWith('plugins.');\n const presentation = operation.startsWith('display.');\n const id = inspector ? operation : `${presentation ? 'view' : 'engine'}.${operation}`;\n const sourceId = inspector || presentation ? 'view-backend' : ENGINE_SOURCE;\n const owner = this.toolApi?.describe(id, sourceId).find(record => record.callable)?.owner;\n if (!owner) throw workspaceError('view-workspace-operation-unavailable', `Engine operation ${operation} to be installed`, 'Enable the Engine capability; UI plugins do not provide domain APIs.', { operation });\n this.syncBindings();\n const play = this.engine?.play;\n if (operation === 'play.stop' && this.targetBinding === 'play' && play &&\n input.targetId === play.target.targetId && input.targetGeneration === play.target.generation) {\n // Revoke Game panel observations before Engine closes their command channel.\n // Keep the presented Play owner and its iframe until the cleanup ACK arrives.\n this.targetBinding = 'editor';\n this.previewTargetId = this.editorPreview()?.target.targetId;\n this.changed();\n }\n const requestedPreview = [...this.previews(), this.engine?.play].find(preview => preview?.target.targetId === input.targetId);\n const terminal = await this.toolApi!.run<WorkspaceDomainResult>(id, inspector ? {\n apiVersion: 'forgeax.view.inspector/1', operation, args: input, ...input, clientId, token, requestId,\n } : presentation ? input : { ...input, clientId }, { sourceId, providerId: owner.providerId, generation: owner.generation, caller, signal }).terminal;\n if (terminal.outcome === 'failed') {\n const resolved = resolveWorkspaceFailure(terminal.failure);\n const addressesWorkspace = input.targetId === undefined ||\n [this.projectTarget, this.editorPreview()?.target].some(target => target &&\n target.targetId === input.targetId &&\n (input.targetGeneration === undefined || target.generation === input.targetGeneration));\n if (isWorkspaceTargetRecoveryCode(resolved.code) && addressesWorkspace) {\n this.workspaceTargetLost = true;\n }\n // Engine can revoke a target before its asynchronous close completes and\n // publishes state. Reconcile the actual binding before returning a late\n // query failure, so observers can revoke their obsolete requests.\n this.changed();\n throw workspaceError(resolved.code, resolved.expected, resolved.hint, resolved.detail);\n }\n const result = terminal.result;\n if (Array.isArray(result?.assets)) this.assets = result.assets.map(asset => serializeWorkspaceAsset({ ...asset, ...(asset.ddc || !asset.cookReceiptUrl ? {} : { ddc: { receiptUrl: asset.cookReceiptUrl } }) }));\n if (result?.inspection) this.inspection = serializeWorkspaceInspection(result.inspection);\n if (operation === 'asset.open') this.bindOpenedAsset(result, input.guid);\n if (operation === 'preview.close' && input.targetId != null && String(input.targetId) === this.editorTargetId) {\n this.editorTargetId = undefined;\n }\n this.syncBindings();\n if (operation === 'asset.open') this.recordOpenRequest({ requestId, result, guid: input.guid });\n if ((operation.startsWith('camera.') || operation === 'target.control') && this.previewProjection && this.boundTarget() === requestedPreview) {\n this.previewProjection.camera = result?.camera;\n this.previewProjection.cameraVersion = result?.version;\n this.previewProjection.interaction = result?.interaction ?? null;\n }\n if (!['scene-tree.get', 'entity.inspect', 'workspace.get', 'preview.capture'].includes(operation)) this.changed();\n if (['project.open', 'project.close', 'project.reopen', 'asset.open', 'preview.close', 'camera.abort', 'play.start', 'play.ready', 'play.stop'].includes(operation)) {\n if (operation === 'project.open' || operation === 'project.reopen') this.workspaceTargetLost = false;\n return this.snapshot();\n }\n if (operation.startsWith('camera.')) return { ...cloneWorkspaceValue(result), apiVersion: VIEW_WORKSPACE_API_VERSION, target: requestedPreview?.target };\n if (operation === 'assets.list') return { ...cloneWorkspaceValue(result), assets: this.assets };\n return cloneWorkspaceValue(result);\n }\n assertWorkspaceTab(tabId: unknown) {\n requireWorkspaceString(tabId, 'tabId');\n if (tabId !== VIEW_WORKSPACE_TAB_ID) throw workspaceError('view-workspace-tab-read-only', 'the Editor binding', 'Address AI execution through the Engine run API.', { tabId });\n }\n selectTab({ tabId }: Args = {}) {\n if (![VIEW_DISPLAY_TAB_ID, VIEW_WORKSPACE_TAB_ID].includes(tabId as string)) throw workspaceError('view-workspace-tab-not-found', 'an existing tab', 'Refresh tabs.get.', { tabId });\n this.selectedTabId = tabId as string; this.changed(); return this.snapshot();\n }\n async selectSceneEntity(args: Args = {}, context?: WorkspaceCallContext) {\n const entityId = requireWorkspaceString(args.entityId, 'entityId');\n return this.changeSceneSelection(args, context, () => ({ entityId, label: args.label }));\n }\n pickSceneEntity(args: Args = {}, context?: WorkspaceCallContext) {\n return this.changeSceneSelection(args, context, async requestContext => {\n const result = await this.invoke('target.pick', args, requestContext) as { entityId?: string | null };\n if (result?.entityId === null) return null;\n const entityId = requireWorkspaceString(result?.entityId, 'pick.entityId');\n return { entityId };\n });\n }\n clearSceneSelection(args: Args = {}, context?: WorkspaceCallContext) {\n return this.changeSceneSelection(args, context, () => null);\n }\n async changeSceneSelection({ tabId, targetId, targetGeneration }: Args = {}, context: WorkspaceCallContext | undefined, resolveSelection: (context: WorkspaceCallContext) => { entityId: string; label?: unknown } | null | Promise<{ entityId: string; label?: unknown } | null>) {\n if (tabId !== undefined) this.assertWorkspaceTab(tabId);\n this.syncBindings();\n const requested = this.boundTarget();\n if (!requested || requested.target.targetId !== targetId || requested.target.generation !== targetGeneration) throw workspaceError('view-workspace-selection-stale', 'The bound target and generation', 'Select the target before changing its selection.');\n this.selectionAbort?.abort();\n const controller = new AbortController();\n this.selectionAbort = controller;\n const signal = context?.signal ? AbortSignal.any([context.signal, controller.signal]) : controller.signal;\n const requestContext = { ...context, signal };\n const assertCurrent = () => {\n signal.throwIfAborted();\n if (this.boundTarget() !== requested) throw workspaceError('view-workspace-selection-stale', 'The same selected target', 'Refresh the hierarchy.');\n };\n const selection = await resolveSelection(requestContext);\n assertCurrent();\n const { entityId, label } = selection ?? {};\n if (selection) {\n const result = await this.invoke('entity.inspect', { entityId, targetId, targetGeneration }, requestContext) as { entityId?: string };\n assertCurrent();\n if (result?.entityId !== entityId) throw workspaceError(\n 'view-workspace-selection-stale', 'The inspected entity on the same target', 'Refresh the hierarchy before selecting.');\n }\n await this.invoke('entity.highlight', { ...(selection ? { entityId } : {}), targetId, targetGeneration }, requestContext);\n assertCurrent();\n this.sceneSelection = selection ? { primary: { entityId: entityId!, ...(label === undefined ? {} : { label: String(label) }) }, targetId: requested.target.targetId, targetGeneration: requested.target.generation } : null;\n this.changed();\n return this.snapshot();\n }\n openProject(args: Args, context?: WorkspaceCallContext) { return this.invoke('project.open', args, context); }\n async reopenProject(args: Args = {}, context?: WorkspaceCallContext) {\n const root = resolveWorkspaceReopenRoot(this.snapshot(), args.root);\n const { tabId, ...rest } = args;\n return this.openProject({ ...rest, root, ...(tabId === undefined ? {} : { tabId }) }, context);\n }\n closeProject(args: Args, context?: WorkspaceCallContext) { return this.invoke('project.close', args, context); }\n listAssets(args: Args, context?: WorkspaceCallContext) { return this.invoke('assets.list', args, context); }\n inspectAsset(args: Args, context?: WorkspaceCallContext) { return this.invoke('asset.inspect', args, context); }\n rebuildAssetSource(args: Args, { mode = 'rebuild', ...context }: WorkspaceCallContext & { mode?: 'rebuild' | 'cold-cook' } = {}) { return this.invoke(`asset-source.${mode}`, args, context); }\n bindOpenedAsset(result: WorkspaceDomainResult, guid: unknown) {\n this.targetBinding = 'editor';\n const kind = this.hydrateAsset(result?.preview?.asset)?.kind\n ?? this.hydrateAsset(result?.asset)?.kind\n ?? this.assets?.find((entry) => entry?.guid === guid)?.kind;\n if (kind && !isTypePreviewAsset({ kind, guid: typeof guid === 'string' ? guid : '' })) {\n const targetId = result?.preview?.target?.targetId\n ?? result?.target?.targetId\n ?? this.previews().find((entry) => this.hydrateAsset(entry.asset)?.guid === guid)?.target?.targetId;\n if (targetId != null) {\n this.editorTargetId = String(targetId);\n this.previewTargetId = this.editorTargetId;\n }\n return;\n }\n const editorId = this.editorPreview()?.target?.targetId;\n if (editorId !== undefined) this.previewTargetId = editorId;\n }\n recordOpenRequest({ requestId, result, guid }: { requestId?: string; result: WorkspaceDomainResult; guid?: unknown }) {\n const requested = typeof guid === 'string' && guid.trim() !== '' ? guid : undefined;\n const editor = this.editorPreview();\n const editorIds = editorSceneTargetIds(\n this.classifiedPreviews(),\n editor ? { target: editor.target, asset: this.hydrateAsset(editor.asset) } : undefined,\n );\n const extras = this.previews().filter((entry) =>\n entry?.target?.targetId && !editorIds.has(String(entry.target.targetId)),\n );\n const preview = [result?.preview, ...extras].find((entry) =>\n entry?.target &&\n !editorIds.has(String(entry.target.targetId)) &&\n (!entry.asset || requested === undefined || entry.asset.guid === requested),\n );\n const catalogAsset = requested && Array.isArray(this.assets)\n ? this.assets.find((entry) => entry?.guid === requested && entry?.kind)\n : undefined;\n const asset = [\n this.hydrateAsset(result?.preview?.asset),\n this.hydrateAsset(result?.asset),\n this.hydrateAsset(preview?.asset),\n catalogAsset,\n ].find((candidate) =>\n candidate?.guid &&\n candidate?.kind &&\n (requested === undefined || candidate.guid === requested),\n );\n if (!asset?.guid || !asset?.kind) {\n logResourceOpen('open-request-skipped', {\n reason: 'asset-kind-unavailable',\n requested: requested ?? null,\n resultPreview: summarizeResourceAsset(result?.preview?.asset),\n resultAsset: summarizeResourceAsset(result?.asset),\n extraPreview: summarizeResourceAsset(preview?.asset),\n extraPreviewCount: extras.length,\n catalog: summarizeResourceAsset(catalogAsset),\n editorTargetId: this.editorTargetId ?? null,\n }, { level: 'warn' });\n return;\n }\n this.openRequestSequence += 1;\n const inspection =\n result?.inspection?.guid === asset.guid\n ? result.inspection\n : (this.inspection?.guid === asset.guid ? this.inspection : undefined);\n const previewMatches = preview?.target && (!preview.asset || preview.asset.guid === asset.guid);\n const recordedPreview = previewMatches ? { asset, target: preview.target } : undefined;\n this.openRequest = serializeWorkspaceOpenRequest({\n requestId: typeof requestId === 'string' && requestId.trim() !== ''\n ? requestId\n : createWorkspaceId('open'),\n sequence: this.openRequestSequence,\n asset,\n preview: recordedPreview,\n ...(inspection === undefined ? {} : { inspection }),\n });\n this.resourceOpens.set(asset.kind, {\n asset,\n preview: recordedPreview,\n });\n logResourceOpen('open-request-recorded', {\n requestId: this.openRequest.requestId,\n sequence: this.openRequest.sequence,\n asset: summarizeResourceAsset(this.openRequest.asset),\n hasPreview: Boolean(this.openRequest.preview?.target),\n previewTargetId: this.openRequest.preview?.target?.targetId ?? null,\n });\n }\n openAsset(args: Args, context?: WorkspaceCallContext) { return this.invoke('asset.open', args, context); }\n closePreview(args: Args, context?: WorkspaceCallContext) { return this.invoke('preview.close', args, context); }\n capture(args: Args, context?: WorkspaceCallContext) { return this.invoke('preview.capture', args, context); }\n resizePreview(args: Args, context?: WorkspaceCallContext) { return this.invoke('preview.resize', args, context); }\n getCamera(args: Args, context?: WorkspaceCallContext) { return this.invoke('camera.get', args, context); }\n beginCamera(args: Args, context?: WorkspaceCallContext) { return this.invoke('camera.begin', { ...args, interactionId: args.interactionId ?? randomUUID() }, context); }\n updateCamera(args: Args, context?: WorkspaceCallContext) { return this.invoke('camera.update', args, context); }\n commitCamera(args: Args, context?: WorkspaceCallContext) { return this.invoke('camera.commit', args, context); }\n abortCamera(args: Args, context?: WorkspaceCallContext) { return this.invoke('camera.abort', args, context); }\n getSceneTree(args: Args, context?: WorkspaceCallContext) { return this.invoke('scene-tree.get', args, context); }\n async revokeConnection(connectionId: unknown) {\n if (typeof connectionId !== 'string') return;\n for (const preview of [this.engine?.preview, this.engine?.play]) {\n if (!preview) continue;\n // The target may already be gone together with its browser page; revoking\n // its input connection is best-effort cleanup, not a failure.\n try {\n const result = await preview.revokeConnection?.({ targetId: preview.target.targetId, connectionId }) as EngineWorkspaceCameraResult | undefined;\n this.syncBindings();\n if (this.previewOwner === preview && this.previewProjection && result) {\n this.previewProjection.interaction = result.interaction ?? null;\n this.previewProjection.cameraVersion = result.version;\n }\n } catch {\n // A lost target owns its own teardown.\n }\n }\n this.changed();\n }\n /**\n * Reset per-page UI session state when a new View frontend page is admitted.\n * The open project and its Engine session stay; everything the previous page\n * accumulated after project.open returns to the just-opened state, so a\n * refreshed page's first snapshot does not inherit the old page's history.\n */\n resetPageSession() {\n if (this.disposing) return;\n this.selectedTabId = VIEW_WORKSPACE_TAB_ID;\n this.targetBinding = 'editor';\n this.previewTargetId = undefined;\n this.inspection = null;\n this.openRequest = null;\n this.openRequestSequence = 0;\n this.resourceOpens = new Map();\n this.sceneSelection = null;\n this.selectionAbort?.abort();\n this.selectionAbort = undefined;\n // Rebuild the preview projection from the editor target so camera and\n // interaction state held for the previous page are not carried over.\n this.previewOwner = undefined;\n this.syncBindings();\n this.changed();\n // A refresh detaches the browser but keeps the project server. This probe\n // waits for the replacement page when one is starting, and still marks a\n // terminal loss through the existing recovery path.\n const project = this.project;\n if (project) {\n void this.invoke('assets.list', { projectId: project.id }).catch(() => {});\n }\n }\n registerTransport(transport: HostTransportServer, { routeThroughTools = false } = {}) {\n const capabilities = transport.register(VIEW_WORKSPACE_SERVICES.capabilities, () => this.capabilities());\n const call = transport.register<WorkspaceRequest, unknown>(VIEW_WORKSPACE_SERVICES.call, async ({ payload, signal, caller }) => {\n try {\n return routeThroughTools\n ? await runWorkspaceToolApi(this.toolApi!, {\n operation: `view.workspace.${payload.operation}`, args: payload.args,\n clientId: payload.clientId, token: payload.token, requestId: payload.requestId,\n caller, signal, sourceId: 'view-workspace',\n })\n : await this.call(payload, { signal, caller });\n }\n catch (error) {\n const failure = workspaceDiagnosticRecord(error);\n if (typeof failure.code !== 'string' || !failure.code.startsWith('view-')) throw error;\n throw Object.assign(new Error(String(failure.message)), { name: 'HostAssemblyError', code: 'host-transport-failure',\n expected: failure.expected, hint: failure.hint, detail: { ...workspaceDiagnosticRecord(failure.detail), remoteCode: failure.code } });\n }\n });\n const fileGet = transport.register<{ path?: unknown }, unknown>(VIEW_FILE_GET_SERVICE, async ({ payload }) => {\n try { return await readWorkspaceFilePreview(this, payload); }\n catch (error) {\n const failure = workspaceDiagnosticRecord(error);\n if (typeof failure.code !== 'string' || !failure.code.startsWith('view-')) throw error;\n throw Object.assign(new Error(String(failure.message)), { name: 'HostAssemblyError', code: 'host-transport-failure',\n expected: failure.expected, hint: failure.hint, detail: { ...workspaceDiagnosticRecord(failure.detail), remoteCode: failure.code } });\n }\n });\n const subscription = this.subscribe(state => transport.publish(VIEW_WORKSPACE_STATE_TOPIC, state));\n const observer = transport.connect();\n const engineSubscription = observer.subscribe<{ catalogEpoch?: number }>('engine.workspace.state', (snapshot) => {\n const epoch = snapshot && typeof snapshot.catalogEpoch === 'number' ? snapshot.catalogEpoch : undefined;\n if (epoch === undefined || epoch <= this.catalogEpoch) {\n this.changed();\n return;\n }\n this.catalogEpoch = epoch;\n const project = this.project;\n if (!project) return;\n const lost = this.workspaceTargetLost;\n void this.invoke('assets.list', { projectId: project.id }).catch(() => {\n this.workspaceTargetLost = lost;\n });\n });\n return () => { capabilities(); call(); fileGet(); subscription(); engineSubscription(); observer.close(); };\n }\n async dispose() { this.selectionAbort?.abort(); this.disposing = true; this.listeners.clear(); }\n}\n", "import { readFile, stat } from 'node:fs/promises';\nimport { extname, isAbsolute, relative, resolve } from 'node:path';\n\nimport type { WorkspaceProject } from './contract.ts';\nimport { workspaceError } from './contract.ts';\n\n/**\n * Editor `/api/files` classify() equivalent. Unknown extensions are text so\n * `.pack.json` / `.pack.ts` / `.ts` / `.js` decode as UTF-8. Binary kinds skip\n * decode and leave `content` unset \u2014 the preview then shows the no-text note.\n */\nconst EXT_KIND: Readonly<Record<string, { kind: string; mime: string }>> = Object.freeze({\n '.png': { kind: 'image', mime: 'image/png' },\n '.jpg': { kind: 'image', mime: 'image/jpeg' },\n '.jpeg': { kind: 'image', mime: 'image/jpeg' },\n '.gif': { kind: 'image', mime: 'image/gif' },\n '.webp': { kind: 'image', mime: 'image/webp' },\n '.avif': { kind: 'image', mime: 'image/avif' },\n '.bmp': { kind: 'image', mime: 'image/bmp' },\n '.ico': { kind: 'image', mime: 'image/x-icon' },\n '.svg': { kind: 'image', mime: 'image/svg+xml' },\n '.mp3': { kind: 'audio', mime: 'audio/mpeg' },\n '.wav': { kind: 'audio', mime: 'audio/wav' },\n '.ogg': { kind: 'audio', mime: 'audio/ogg' },\n '.m4a': { kind: 'audio', mime: 'audio/mp4' },\n '.flac': { kind: 'audio', mime: 'audio/flac' },\n '.aac': { kind: 'audio', mime: 'audio/aac' },\n '.mp4': { kind: 'video', mime: 'video/mp4' },\n '.webm': { kind: 'video', mime: 'video/webm' },\n '.mov': { kind: 'video', mime: 'video/quicktime' },\n '.glb': { kind: 'model', mime: 'model/gltf-binary' },\n '.gltf': { kind: 'model', mime: 'model/gltf+json' },\n '.fbx': { kind: 'model', mime: 'application/octet-stream' },\n '.ttf': { kind: 'binary', mime: 'font/ttf' },\n '.otf': { kind: 'binary', mime: 'font/otf' },\n '.woff': { kind: 'binary', mime: 'font/woff' },\n '.woff2': { kind: 'binary', mime: 'font/woff2' },\n});\n\n/** Inline data URLs for browser media preview in the content browser. */\nexport const MAX_BINARY_PREVIEW_BYTES = 10 * 1024 * 1024;\n\nconst BINARY_PREVIEW_KINDS = new Set(['image', 'audio', 'video', 'binary']);\n\nexport function classifyFile(path: string) {\n const ext = extname(path).toLowerCase();\n return EXT_KIND[ext] ?? { kind: 'text', mime: 'text/plain; charset=utf-8' };\n}\n\nexport function resolveProjectFilePath(root: unknown, input: unknown) {\n if (typeof root !== 'string' || root.trim() === '') return null;\n if (typeof input !== 'string' || input.length === 0 || input.includes('\\0')) return null;\n const rootAbs = resolve(root);\n const abs = isAbsolute(input) ? resolve(input) : resolve(rootAbs, input);\n const rel = relative(rootAbs, abs);\n if (rel === '' || rel.startsWith('..') || isAbsolute(rel)) return null;\n const normalized = rel.split(/[/\\\\]/).join('/');\n if (normalized === '.forgeax/ddc' || normalized.startsWith('.forgeax/ddc/')) return null;\n return { abs, rel: normalized };\n}\n\nexport async function readFilePreview(absPath: string, rel: string) {\n let info;\n try {\n info = await stat(absPath);\n } catch {\n throw new Error('not found');\n }\n if (info.isDirectory()) throw new Error('is a directory');\n const ext = extname(rel).toLowerCase();\n const { kind, mime } = classifyFile(rel);\n const base = { path: rel, kind, mime, size: info.size, mtime: info.mtimeMs };\n if (kind === 'text') {\n const content = await readFile(absPath, 'utf8');\n return { ...base, content };\n }\n if (kind === 'image' && ext === '.svg') {\n const content = await readFile(absPath, 'utf8');\n return { ...base, content };\n }\n if (BINARY_PREVIEW_KINDS.has(kind)) {\n if (info.size > MAX_BINARY_PREVIEW_BYTES) return base;\n const buffer = await readFile(absPath);\n return { ...base, dataUrl: `data:${mime};base64,${buffer.toString('base64')}` };\n }\n return base;\n}\n\nexport async function readWorkspaceFilePreview(workspace: { project?: WorkspaceProject | null } | undefined, payload: { path?: unknown } = {}) {\n const root = workspace?.project?.root;\n if (typeof root !== 'string' || root.trim() === '') {\n throw workspaceError(\n 'view-workspace-project-closed',\n 'an open project',\n 'Open a project before previewing source files.',\n );\n }\n const resolved = resolveProjectFilePath(root, payload?.path);\n if (!resolved) {\n throw workspaceError(\n 'view-workspace-invalid-args',\n 'path to be a file inside the open project',\n 'Provide a project-relative or in-project absolute path.',\n { field: 'path' },\n );\n }\n try {\n return await readFilePreview(resolved.abs, resolved.rel);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.startsWith('is a directory')) {\n throw workspaceError(\n 'view-workspace-invalid-args',\n 'a file path',\n message,\n { path: resolved.rel },\n );\n }\n throw workspaceError(\n 'view-workspace-file-not-found',\n 'the file to exist in the open project',\n 'Refresh the content browser and retry.',\n { path: resolved.rel },\n );\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["view-revision:revision", "../../../packages/viewer/src/catalog-shared.ts"],
|
|
4
|
-
"sourcesContent": ["export default \"1803fe06a4440233ec0495ef340afc9f8b0e350ce211dd66b15412f48dfecad1\"", "import type { ViewFrontendConfig } from './config.ts';\nimport type { EngineWorkspaceProvider } from '@forgeax/engine/app';\nimport type { ViewPlatform, CarrierCapabilities } from '@forgeax/view-plugin-display/carrier-contract';\nimport type { ViewWorkspaceBroker } from '@forgeax/view-workspace-core/broker';\nexport type ViewBackendProductConfig = {\n platform?: ViewPlatform; capabilities?: Partial<CarrierCapabilities>; workspaceEngine?: EngineWorkspaceProvider;\n workspaceAccessToken?: string; workspaceAuthorize?: NonNullable<ConstructorParameters<typeof ViewWorkspaceBroker>[0]>['authorize'];\n};\nimport buildRevision from './build-identity.ts';\nimport * as display from '@forgeax/view-plugin-display/identity';\nimport * as plugins from '@forgeax/view-plugin-plugins/identity';\nimport * as inspector from '@forgeax/view-plugin-inspector/identity';\nimport * as contentBrowser from '@forgeax/view-plugin-content-browser/identity';\nimport * as sceneTree from '@forgeax/view-plugin-scene-tree/identity';\nimport * as material from '@forgeax/view-plugin-material/identity';\nimport * as mesh from '@forgeax/view-plugin-mesh/identity';\nimport * as texture from '@forgeax/view-plugin-texture/identity';\nimport * as asset from '@forgeax/view-plugin-asset/identity';\nimport * as viewport from '@forgeax/view-plugin-viewport/identity';\nimport * as scene from '@forgeax/view-plugin-scene/identity';\n\nimport { SHELL_MODULE, SHELL_PLUGIN_ID } from './plugins/shell-identity.ts';\nimport { PRESENTATION_MODULE, PRESENTATION_PLUGIN_ID } from '@forgeax/view-plugin-viewport/presentation-identity';\n\nexport const VIEW_PLUGIN_VERSION = '0.2.0';\nexport const VIEW_FRONTEND_ROOT_PROGRAM = '@forgeax/view/frontend-root';\nexport const VIEW_FRONTEND_MODULE = Object.freeze({ specifier: VIEW_FRONTEND_ROOT_PROGRAM });\n\nexport function viewFrontendRoot(frontendConfig: ViewFrontendConfig | undefined, disabledPages: readonly string[] = []) {\n return Object.freeze({\n program: VIEW_FRONTEND_ROOT_PROGRAM,\n codeRevision: buildRevision,\n config: { frontendConfig, disabledPages },\n });\n}\n\nexport const VIEW_WORKSPACE_CORE = Object.freeze({\n BACKEND_PLUGIN_ID: 'forgeax.view.service.workspace.backend',\n FRONTEND_PLUGIN_ID: 'forgeax.view.service.workspace-client.frontend',\n BACKEND_MODULE: '@forgeax/view-workspace-core/backend',\n FRONTEND_MODULE: '@forgeax/view/workspace-frontend',\n});\n\nexport const VIEW_PRODUCT_PLUGINS = Object.freeze([\n scene,\n display,\n viewport,\n contentBrowser,\n plugins,\n inspector,\n sceneTree,\n material,\n mesh,\n texture,\n asset,\n]);\n\n/** Static native composition. Pack assets own game plugin identity; View owns only its UI policy. */\nexport function createViewProductPlan({ backendConfig, frontendConfig, disabledPages = [] }: { backendConfig?: ViewBackendProductConfig; frontendConfig?: ViewFrontendConfig; disabledPages?: readonly string[] } = {}) {\n const pages = new Set<string>(VIEW_PRODUCT_PLUGINS.map(plugin => plugin.PAGE_TYPE));\n for (const page of disabledPages) {\n if (!pages.has(page)) throw new TypeError(`Unknown View page: ${page}`);\n }\n const disabled = new Set(disabledPages);\n const displayBackendConfig = {\n platform: backendConfig?.platform,\n capabilities: backendConfig?.capabilities,\n };\n const workspaceBackendConfig = {\n workspaceEngine: backendConfig?.workspaceEngine,\n workspaceAccessToken: backendConfig?.workspaceAccessToken,\n workspaceAuthorize: backendConfig?.workspaceAuthorize,\n capabilities: backendConfig?.capabilities,\n };\n const backend = [\n { id: VIEW_WORKSPACE_CORE.BACKEND_PLUGIN_ID, module: VIEW_WORKSPACE_CORE.BACKEND_MODULE, config: workspaceBackendConfig },\n { id: display.BACKEND_PLUGIN_ID, module: display.BACKEND_MODULE, config: displayBackendConfig },\n { id: plugins.BACKEND_PLUGIN_ID, module: plugins.BACKEND_MODULE, config: {} },\n ];\n const frontend = [\n { id: SHELL_PLUGIN_ID, module: SHELL_MODULE },\n { id: VIEW_WORKSPACE_CORE.FRONTEND_PLUGIN_ID, module: VIEW_WORKSPACE_CORE.FRONTEND_MODULE },\n ...(!disabled.has(scene.PAGE_TYPE) ? [{ id: scene.FRONTEND_PLUGIN_ID, module: scene.FRONTEND_MODULE }] : []),\n { id: PRESENTATION_PLUGIN_ID, module: PRESENTATION_MODULE },\n ...VIEW_PRODUCT_PLUGINS.filter(plugin => plugin !== scene && !disabled.has(plugin.PAGE_TYPE))\n .map(plugin => ({ id: plugin.FRONTEND_PLUGIN_ID, module: plugin.FRONTEND_MODULE })),\n ];\n return Object.freeze({\n backend: Object.freeze(backend),\n frontend: Object.freeze(frontend),\n frontendConfig,\n disabledPages: Object.freeze([...disabled]),\n });\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAO,mBAAQ;;;ACwBR,IAAM,sBAAsB;AAC5B,IAAM,6BAA6B;AACnC,IAAM,uBAAuB,OAAO,OAAO,EAAE,WAAW,2BAA2B,CAAC;AAEpF,SAAS,iBAAiB,gBAAgD,gBAAmC,CAAC,GAAG;AACtH,SAAO,OAAO,OAAO;AAAA,IACnB,SAAS;AAAA,IACT,cAAc;AAAA,IACd,QAAQ,EAAE,gBAAgB,cAAc;AAAA,EAC1C,CAAC;AACH;AAEO,IAAM,sBAAsB,OAAO,OAAO;AAAA,EAC/C,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,iBAAiB;AACnB,CAAC;AAEM,IAAM,uBAAuB,OAAO,OAAO;AAAA,EAChDA;AAAA,EACA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AACF,CAAC;AAGM,SAAS,sBAAsB,EAAE,eAAe,gBAAgB,gBAAgB,CAAC,EAAE,IAA0H,CAAC,GAAG;AACtN,QAAM,QAAQ,IAAI,IAAY,qBAAqB,IAAI,YAAU,OAAO,SAAS,CAAC;AAClF,aAAW,QAAQ,eAAe;AAChC,QAAI,CAAC,MAAM,IAAI,IAAI,EAAG,OAAM,IAAI,UAAU,sBAAsB,IAAI,EAAE;AAAA,EACxE;AACA,QAAM,WAAW,IAAI,IAAI,aAAa;AACtC,QAAM,uBAAuB;AAAA,IAC3B,UAAU,eAAe;AAAA,IACzB,cAAc,eAAe;AAAA,EAC/B;AACA,QAAM,yBAAyB;AAAA,IAC7B,iBAAiB,eAAe;AAAA,IAChC,sBAAsB,eAAe;AAAA,IACrC,oBAAoB,eAAe;AAAA,IACnC,cAAc,eAAe;AAAA,EAC/B;AACA,QAAM,UAAU;AAAA,IACd,EAAE,IAAI,oBAAoB,mBAAmB,QAAQ,oBAAoB,gBAAgB,QAAQ,uBAAuB;AAAA,IACxH,EAAE,IAAY,mBAAmB,QAAgB,gBAAgB,QAAQ,qBAAqB;AAAA,IAC9F,EAAE,IAAYC,oBAAmB,QAAgBC,iBAAgB,QAAQ,CAAC,EAAE;AAAA,EAC9E;AACA,QAAM,WAAW;AAAA,IACf,EAAE,IAAI,iBAAiB,QAAQ,aAAa;AAAA,IAC5C,EAAE,IAAI,oBAAoB,oBAAoB,QAAQ,oBAAoB,gBAAgB;AAAA,IAC1F,GAAI,CAAC,SAAS,IAAU,SAAS,IAAI,CAAC,EAAE,IAAU,oBAAoB,QAAc,gBAAgB,CAAC,IAAI,CAAC;AAAA,IAC1G,EAAE,IAAI,wBAAwB,QAAQ,oBAAoB;AAAA,IAC1D,GAAG,qBAAqB,OAAO,YAAU,WAAWF,sBAAS,CAAC,SAAS,IAAI,OAAO,SAAS,CAAC,EACzF,IAAI,aAAW,EAAE,IAAI,OAAO,oBAAoB,QAAQ,OAAO,gBAAgB,EAAE;AAAA,EACtF;AACA,SAAO,OAAO,OAAO;AAAA,IACnB,SAAS,OAAO,OAAO,OAAO;AAAA,IAC9B,UAAU,OAAO,OAAO,QAAQ;AAAA,IAChC;AAAA,IACA,eAAe,OAAO,OAAO,CAAC,GAAG,QAAQ,CAAC;AAAA,EAC5C,CAAC;AACH;",
|
|
6
|
-
"names": ["identity_exports", "BACKEND_PLUGIN_ID", "BACKEND_MODULE"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/plugins/backend.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Fiber, Plugin } from '@forgeax/engine-plugin';\nimport type { BackendHost, BackendHostOptions } from '@forgeax/engine-host/backend';\nimport type { HostAssembly } from '@forgeax/engine-host/protocol';\nimport type { DevKitWorkspacePluginOptions } from '@forgeax/engine/devkit';\nimport type { ViewBackendProductConfig } from '@forgeax/view-viewer/catalog/shared';\nimport type { ViewFrontendConfig } from '@forgeax/view-viewer/config';\nimport type { ViewPlatform } from '@forgeax/view-plugin-display/carrier-contract';\nimport { workspaceDiagnosticRecord } from '@forgeax/view-workspace-core/command-error';\nexport type ViewBackendOptions = ViewBackendProductConfig & {\n platform?: ViewPlatform & { start?: () => void | Promise<void> };\n frontendConfig?: ViewFrontendConfig; disabledPages?: readonly string[];\n engineHost?: BackendHost; workspacePlugin?: Plugin<DevKitWorkspacePluginOptions>;\n workspaceOptions?: Omit<DevKitWorkspacePluginOptions, 'hostBinding' | 'provider'>;\n onActivationReport?: BackendHostOptions['onActivationReport'];\n workspaceServer?: boolean; workspaceHost?: string; workspacePort?: number;\n workspacePath?: string; staticRoot?: string | URL;\n};\nimport { randomUUID } from 'node:crypto';\nimport { startNativePlugin } from '@forgeax/engine-plugin';\nimport { createBackendHost } from '@forgeax/engine-host/backend';\nimport { createHostAssembly } from '@forgeax/engine-host/protocol';\nimport { createViewProductPlan, viewFrontendRoot, VIEW_FRONTEND_MODULE } from '@forgeax/view-viewer/catalog/shared';\nimport { VIEW_PRODUCT_BACKEND_CATALOG } from '@forgeax/view-viewer/catalog/backend';\nimport { startViewHostServer } from '@forgeax/view-workspace-core/resident';\n\nexport function createViewPlatformBinding(platform: ViewPlatform) {\n if (!platform || typeof platform.createPage !== 'function') {\n throw new TypeError('View platform binding requires platform.createPage');\n }\n let disposal: Promise<void> | undefined;\n return {\n createPage: platform.createPage.bind(platform),\n ...(typeof platform.getCapabilities === 'function'\n ? { getCapabilities: platform.getCapabilities.bind(platform) }\n : {}),\n ...(typeof platform.dispose === 'function' ? { dispose: () => disposal ??= Promise.resolve().then(() => platform.dispose?.()) } : {}),\n };\n}\n\nexport function createViewHostBinding({ backendHost, frontendAssembly }: { backendHost?: BackendHost; frontendAssembly?: HostAssembly } = {}) {\n if (!backendHost || !frontendAssembly) {\n throw new TypeError('View Host binding requires a backend Host and a frontend root assembly');\n }\n return Object.freeze({\n backend: backendHost,\n frontendAssembly,\n frontendModule: VIEW_FRONTEND_MODULE,\n });\n}\n\n/** The embedding helper owns View Fibers; a supplied BackendHost remains borrowed. */\nexport async function createViewBackend({ platform, capabilities, frontendConfig, disabledPages, workspaceEngine, workspaceAccessToken, workspaceAuthorize, engineHost, workspacePlugin, workspaceOptions, onActivationReport, workspaceServer = true, workspaceHost = '127.0.0.1', workspacePort = 0, workspacePath, staticRoot }: ViewBackendOptions = {}) {\n const platformBinding = platform ? createViewPlatformBinding(platform) : undefined;\n let platformStarted = false;\n let backendHost: BackendHost | undefined;\n let workspaceFiber: Fiber | undefined;\n let resident: Awaited<ReturnType<typeof startViewHostServer>> | undefined;\n const fibers: Fiber[] = [];\n let disposal: Promise<void> | undefined;\n const dispose = () => disposal ??= (async () => {\n const failures: unknown[] = [];\n for (const release of [\n () => resident?.close(), ...fibers.toReversed().map(fiber => () => fiber.dispose()),\n () => workspaceFiber?.dispose(), () => !engineHost && backendHost?.dispose(),\n () => platformStarted && platformBinding?.dispose?.(),\n ]) {\n try { await release(); } catch (error) { failures.push(error); }\n }\n if (failures.length) throw new AggregateError(failures, 'View cleanup failed');\n })();\n try {\n platformStarted = platform !== undefined;\n await platform?.start?.();\n const token = workspaceAccessToken ?? randomUUID();\n const config = {\n ...(frontendConfig ?? {}),\n displayCarrier: platform !== undefined,\n workspace: {\n ...(frontendConfig?.workspace ?? {}),\n clientId: frontendConfig?.workspace?.clientId ?? 'view-frontend',\n token,\n },\n };\n const plan = createViewProductPlan({\n backendConfig: {\n ...(platform ? { platform: platformBinding } : {}),\n capabilities: capabilities ?? platform?.getCapabilities?.(),\n workspaceEngine,\n workspaceAccessToken: token,\n workspaceAuthorize,\n },\n frontendConfig: config,\n disabledPages,\n });\n const frontendAssembly = createHostAssembly({\n root: viewFrontendRoot(config, plan.disabledPages),\n });\n const selectedWorkspacePlugin = workspacePlugin ??\n (workspaceEngine ? (await import('@forgeax/engine/devkit')).devKitWorkspacePlugin : undefined);\n backendHost = engineHost ?? await createBackendHost({\n assembly: frontendAssembly,\n onActivationReport,\n });\n if (selectedWorkspacePlugin) {\n if (engineHost) throw new TypeError('Install the workspace plugin on the owner before borrowing a Host');\n const started = await startNativePlugin(backendHost.context, selectedWorkspacePlugin, {\n ...workspaceOptions,\n ...(workspaceAuthorize === undefined ? {} : { authorize: ({ operation, args, caller, signal }: Parameters<NonNullable<DevKitWorkspacePluginOptions['authorize']>>[0]) => {\n const id = operation.replace(/^engine\\./, '');\n const clientId = caller?.sourceId ?? (typeof workspaceDiagnosticRecord(args).clientId === 'string' ? String(workspaceDiagnosticRecord(args).clientId) : 'view-owner');\n return workspaceAuthorize({ operation: id, clientId, caller, signal, request: { operation: id, args: workspaceDiagnosticRecord(args), clientId } });\n } }),\n ...(workspaceEngine === undefined ? {} : { provider: workspaceEngine }),\n runAccess: 'observe',\n hostBinding: createViewHostBinding({ backendHost, frontendAssembly }),\n });\n if (!started.ok) throw started.error;\n workspaceFiber = started.value;\n }\n for (const component of plan.backend) {\n const record = VIEW_PRODUCT_BACKEND_CATALOG.get(component.module);\n if (!record) throw new Error(`View backend program is missing: ${component.module}`);\n const { default: plugin } = await record.load();\n const started = await startNativePlugin(backendHost.context, plugin, component.config);\n if (!started.ok) throw started.error;\n fibers.push(started.value);\n }\n const workspaceCore = backendHost.context.get('viewWorkspaceCore');\n if (!workspaceCore) throw new Error('View backend did not activate workspace core');\n if (workspaceServer) {\n resident = await startViewHostServer({\n backendHost,\n accessToken: backendHost.context.get('viewWorkspaceAccessToken'),\n host: workspaceHost,\n port: workspacePort,\n onClientConnect: (caller) => {\n if (engineHost) engineHost.bindProjection(caller, { assembly: frontendAssembly });\n workspaceCore.resetPageSession();\n },\n onClientDisconnect: (caller) => workspaceCore.revokeConnection(caller.connectionId),\n ...(workspacePath === undefined ? {} : { path: workspacePath }),\n ...(staticRoot === undefined ? {} : { staticRoot }),\n ...(config.layout === undefined ? {} : { frontendConfig: { layout: config.layout } }),\n });\n }\n return Object.freeze({\n backendHost,\n broker: backendHost.context.get('viewBroker', false),\n carrier: backendHost.context.get('viewCarrier', false),\n workspaceCore,\n workspaceAccessToken: backendHost.context.get('viewWorkspaceAccessToken'),\n ...(resident === undefined ? {} : {\n workspaceServer: resident,\n workspaceEndpoint: resident.endpoint,\n workspaceUrl: resident.url,\n workspaceFrontendEndpoint: resident.frontendEndpoint,\n workspaceFrontendUrl: resident.frontendUrl,\n workspaceFrontendTicket: resident.frontendTicket,\n }),\n assembly: backendHost.assembly,\n hostBinding: createViewHostBinding({ backendHost, frontendAssembly }),\n dispose,\n });\n } catch (error) {\n try { await dispose(); }\n catch (cleanup) { throw new AggregateError([error, cleanup], 'View startup and cleanup failed'); }\n throw error;\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/view-workspace-core/src/frontend-plugin.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Plugin } from '@forgeax/engine-plugin';\nimport type { HostTransportClient } from '@forgeax/engine-host/transport';\nimport type { FrontendConfig } from './frontend-contract.ts';\nimport type { ViewWorkspaceClient } from './client.ts';\nexport type CoreFrontendConfig = FrontendConfig & { window?: Window & typeof globalThis; workspace?: { endpoint?: string; token: string; clientId: string; frontendTicket?: string } };\ndeclare module '@forgeax/engine-plugin' { interface EngineContextServices { viewOperationClient?: ViewWorkspaceClient; } }\nimport { createHostWebSocketClient } from '@forgeax/engine-host/transport';\nimport { createViewWorkspaceClient, workspaceBrowserEndpoint } from './client.ts';\nimport { createProjectSession } from './project-session.ts';\nimport { logResourceOpen, observeWorkspaceOpenRequests } from './resource-open.ts';\nimport { initViewTraceFromEnvironment, wrapViewWorkspaceClient } from './view-trace.ts';\n\nexport const viewWorkspaceCoreFrontendPlugin: Plugin.Object<CoreFrontendConfig> = {\n name: 'forgeax.view.service.workspace-client.frontend',\n provide: ['viewOperationClient'],\n async apply(ctx, config = {}) {\n ctx.effect(initViewTraceFromEnvironment);\n const lifetime = new AbortController();\n // Cordis emits removal before waiting for an asynchronous apply to settle.\n // Cancel pending I/O then, so ordinary effect cleanup can finish.\n ctx.on('internal/plugin', fiber => {\n if (fiber === ctx.fiber && fiber.uid === null) lifetime.abort();\n });\n ctx.effect(() => () => lifetime.abort());\n const pageHost = config.pageHost ?? ctx.get?.('pageHost', false);\n const workspace = config.workspace;\n const window = config.window ?? globalThis;\n const configuredTransport = ctx.get?.('hostTransport', false);\n let transport: HostTransportClient | undefined = configuredTransport && 'request' in configuredTransport ? configuredTransport : undefined;\n if (workspace?.endpoint) {\n const url = workspaceBrowserEndpoint(workspace.endpoint, workspace.token, window.location?.href, 'frontend', workspace.frontendTicket);\n let socket!: WebSocket;\n let ownedTransport: HostTransportClient | undefined;\n let disposed = false;\n ctx.effect(() => {\n socket = new window.WebSocket(url);\n const close = () => {\n disposed = true;\n if (ownedTransport) ownedTransport.close('View workspace client disposed');\n else socket.close(1000, 'View workspace client disposed');\n };\n lifetime.signal.addEventListener('abort', close, { once: true });\n return () => { lifetime.signal.removeEventListener('abort', close); close(); };\n });\n try { ownedTransport = await createHostWebSocketClient(socket); }\n catch (error) { if (lifetime.signal.aborted) return; throw error; }\n if (disposed) { ownedTransport.close('View workspace client disposed'); return; }\n transport = ownedTransport;\n }\n const rawClient =\n transport && workspace?.clientId && workspace?.token\n ? createViewWorkspaceClient({\n transport,\n clientId: workspace.clientId,\n token: workspace.token,\n })\n : undefined;\n const client = wrapViewWorkspaceClient(rawClient);\n if (lifetime.signal.aborted) return;\n if (rawClient && (config.window ?? globalThis).location) {\n const session = createProjectSession(rawClient, { window: config.window ?? globalThis });\n rawClient.projectSession = session;\n const dispose = () => session.dispose();\n lifetime.signal.addEventListener('abort', dispose, { once: true });\n ctx.effect(() => () => { lifetime.signal.removeEventListener('abort', dispose); dispose(); });\n // A headed document must finish exact-target recovery before its\n // plugins can construct an App. The View entry has no Engine workspace\n // surface, so let its Shell activate while a cold project opens.\n if (new URL(window.location.href).searchParams.has('forgeaxWorkspaceTarget'))\n await session.ready;\n }\n if (lifetime.signal.aborted) return;\n ctx.provide('viewOperationClient', client);\n if (pageHost?.openResource && client) {\n logResourceOpen('open-request-observer-wired', {});\n const stop = observeWorkspaceOpenRequests(client, (request) => pageHost.openResource(request));\n ctx.effect(() => stop);\n } else {\n logResourceOpen('open-request-observer-skipped', {\n hasPageHost: Boolean(pageHost),\n hasOpenResource: Boolean(pageHost?.openResource),\n hasClient: Boolean(client),\n }, { level: 'warn' });\n }\n },\n};\n\nexport default viewWorkspaceCoreFrontendPlugin;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAMA,SAAS,iCAAiC;AAMnC,IAAM,kCAAqE;AAAA,EAChF,MAAM;AAAA,EACN,SAAS,CAAC,qBAAqB;AAAA,EAC/B,MAAM,MAAM,KAAK,SAAS,CAAC,GAAG;AAC5B,QAAI,OAAO,4BAA4B;AACvC,UAAM,WAAW,IAAI,gBAAgB;AAGrC,QAAI,GAAG,mBAAmB,WAAS;AACjC,UAAI,UAAU,IAAI,SAAS,MAAM,QAAQ,KAAM,UAAS,MAAM;AAAA,IAChE,CAAC;AACD,QAAI,OAAO,MAAM,MAAM,SAAS,MAAM,CAAC;AACvC,UAAM,WAAW,OAAO,YAAY,IAAI,MAAM,YAAY,KAAK;AAC/D,UAAM,YAAY,OAAO;AACzB,UAAM,SAAS,OAAO,UAAU;AAChC,UAAM,sBAAsB,IAAI,MAAM,iBAAiB,KAAK;AAC5D,QAAI,YAA6C,uBAAuB,aAAa,sBAAsB,sBAAsB;AACjI,QAAI,WAAW,UAAU;AACvB,YAAM,MAAM,yBAAyB,UAAU,UAAU,UAAU,OAAO,OAAO,UAAU,MAAM,YAAY,UAAU,cAAc;AACrI,UAAI;AACJ,UAAI;AACJ,UAAI,WAAW;AACf,UAAI,OAAO,MAAM;AACf,iBAAS,IAAI,OAAO,UAAU,GAAG;AACjC,cAAM,QAAQ,MAAM;AAClB,qBAAW;AACX,cAAI,eAAgB,gBAAe,MAAM,gCAAgC;AAAA,cACpE,QAAO,MAAM,KAAM,gCAAgC;AAAA,QAC1D;AACA,iBAAS,OAAO,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AAC/D,eAAO,MAAM;AAAE,mBAAS,OAAO,oBAAoB,SAAS,KAAK;AAAG,gBAAM;AAAA,QAAG;AAAA,MAC/E,CAAC;AACD,UAAI;AAAE,yBAAiB,MAAM,0BAA0B,MAAM;AAAA,MAAG,SACzD,OAAO;AAAE,YAAI,SAAS,OAAO,QAAS;AAAQ,cAAM;AAAA,MAAO;AAClE,UAAI,UAAU;AAAE,uBAAe,MAAM,gCAAgC;AAAG;AAAA,MAAQ;AAChF,kBAAY;AAAA,IACd;AACA,UAAM,YACJ,aAAa,WAAW,YAAY,WAAW,QAC3C,0BAA0B;AAAA,MACxB;AAAA,MACA,UAAU,UAAU;AAAA,MACpB,OAAO,UAAU;AAAA,IACnB,CAAC,IACD;AACN,UAAM,SAAS,wBAAwB,SAAS;AAChD,QAAI,SAAS,OAAO,QAAS;AAC7B,QAAI,cAAc,OAAO,UAAU,YAAY,UAAU;AACvD,YAAM,UAAU,qBAAqB,WAAW,EAAE,QAAQ,OAAO,UAAU,WAAW,CAAC;AACvF,gBAAU,iBAAiB;AAC3B,YAAM,UAAU,MAAM,QAAQ,QAAQ;AACtC,eAAS,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AACjE,UAAI,OAAO,MAAM,MAAM;AAAE,iBAAS,OAAO,oBAAoB,SAAS,OAAO;AAAG,gBAAQ;AAAA,MAAG,CAAC;AAI5F,UAAI,IAAI,IAAI,OAAO,SAAS,IAAI,EAAE,aAAa,IAAI,wBAAwB;AACzE,cAAM,QAAQ;AAAA,IAClB;AACA,QAAI,SAAS,OAAO,QAAS;AAC7B,QAAI,QAAQ,uBAAuB,MAAM;AACzC,QAAI,UAAU,gBAAgB,QAAQ;AACpC,sBAAgB,+BAA+B,CAAC,CAAC;AACjD,YAAM,OAAO,6BAA6B,QAAQ,CAAC,YAAY,SAAS,aAAa,OAAO,CAAC;AAC7F,UAAI,OAAO,MAAM,IAAI;AAAA,IACvB,OAAO;AACL,sBAAgB,iCAAiC;AAAA,QAC/C,aAAa,QAAQ,QAAQ;AAAA,QAC7B,iBAAiB,QAAQ,UAAU,YAAY;AAAA,QAC/C,WAAW,QAAQ,MAAM;AAAA,MAC3B,GAAG,EAAE,OAAO,OAAO,CAAC;AAAA,IACtB;AAAA,EACF;AACF;AAEA,IAAO,0BAAQ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
// packages/view-workspace-core/src/api.ts
|
|
2
|
-
var VIEW_WORKSPACE_CORE_OPERATION_DESCRIPTIONS = Object.freeze([
|
|
3
|
-
{ id: "tabs.get", path: ["tabs", "get"], summary: "Read View bindings and Engine target identities." },
|
|
4
|
-
{ id: "tabs.select", path: ["tabs", "select"], summary: "Select a View page." }
|
|
5
|
-
]);
|
|
6
|
-
|
|
7
|
-
export {
|
|
8
|
-
VIEW_WORKSPACE_CORE_OPERATION_DESCRIPTIONS
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=chunk-QELNKFSI.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/view-workspace-core/src/api.ts"],
|
|
4
|
-
"sourcesContent": ["export const VIEW_WORKSPACE_CORE_OPERATION_DESCRIPTIONS = Object.freeze([\n { id: 'tabs.get', path: ['tabs', 'get'], summary: 'Read View bindings and Engine target identities.' },\n { id: 'tabs.select', path: ['tabs', 'select'], summary: 'Select a View page.' },\n]);\n"],
|
|
5
|
-
"mappings": ";AAAO,IAAM,6CAA6C,OAAO,OAAO;AAAA,EACtE,EAAE,IAAI,YAAY,MAAM,CAAC,QAAQ,KAAK,GAAG,SAAS,mDAAmD;AAAA,EACrG,EAAE,IAAI,eAAe,MAAM,CAAC,QAAQ,QAAQ,GAAG,SAAS,sBAAsB;AAChF,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|