@forgeax/view 0.5.0-dev.13619.c20ebf66cef4 → 0.5.0-dev.13713.d28c4863d779

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.
Files changed (258) hide show
  1. package/README.md +19 -5
  2. package/dist/build-revision.json +1 -1
  3. package/dist/modules/backend.mjs +33 -33
  4. package/dist/modules/browser.mjs +49 -49
  5. package/dist/modules/chunks/{chunk-OS7BK3FO.mjs → chunk-2CMCY54A.mjs} +2 -2
  6. package/dist/modules/chunks/{chunk-NHNPQ3ZS.mjs → chunk-2RUKPDIE.mjs} +4 -4
  7. package/dist/modules/chunks/{chunk-NHNPQ3ZS.mjs.map → chunk-2RUKPDIE.mjs.map} +1 -1
  8. package/dist/modules/chunks/{chunk-CYQ7BITZ.mjs → chunk-3FBX3P3H.mjs} +6 -6
  9. package/dist/modules/chunks/{chunk-VD4QU7KY.mjs → chunk-45WL24XN.mjs} +2 -2
  10. package/dist/modules/chunks/{chunk-FSSKCXPL.mjs → chunk-4FYKRL46.mjs} +3 -3
  11. package/dist/modules/chunks/{chunk-Y4SFATAM.mjs → chunk-4MJHVZMB.mjs} +6 -6
  12. package/dist/modules/chunks/{chunk-D3ISMGT6.mjs → chunk-5HVXQEO3.mjs} +7 -7
  13. package/dist/modules/chunks/{chunk-J7QRK3FU.mjs → chunk-66LM6NO6.mjs} +4 -4
  14. package/dist/modules/chunks/{chunk-RGM4S2BE.mjs → chunk-6C4OCCYB.mjs} +12 -12
  15. package/dist/modules/chunks/{chunk-RGM4S2BE.mjs.map → chunk-6C4OCCYB.mjs.map} +1 -1
  16. package/dist/modules/chunks/{chunk-QNSUBUZF.mjs → chunk-6J27SWMY.mjs} +1 -1
  17. package/dist/modules/chunks/{chunk-QNJL265P.mjs → chunk-6VK7HB4X.mjs} +4 -4
  18. package/dist/modules/chunks/{chunk-AZHCKPUL.mjs → chunk-6WZZ7TIC.mjs} +2 -2
  19. package/dist/modules/chunks/{chunk-A22PJUZM.mjs → chunk-7DFCIN3T.mjs} +3 -3
  20. package/dist/modules/chunks/{chunk-A22PJUZM.mjs.map → chunk-7DFCIN3T.mjs.map} +1 -1
  21. package/dist/modules/chunks/{chunk-CVIF6DYH.mjs → chunk-7MWZK7HS.mjs} +3 -3
  22. package/dist/modules/chunks/{chunk-7YWMB7HV.mjs → chunk-A7OGXJAV.mjs} +3 -3
  23. package/dist/modules/chunks/{chunk-KOBAWLZL.mjs → chunk-AUINYWZP.mjs} +2 -2
  24. package/dist/modules/chunks/{chunk-R6MT6F3T.mjs → chunk-B24VYGHV.mjs} +3 -3
  25. package/dist/modules/chunks/{chunk-ZKFH7EMU.mjs → chunk-BIUWJROZ.mjs} +3 -3
  26. package/dist/modules/chunks/{chunk-ZKFH7EMU.mjs.map → chunk-BIUWJROZ.mjs.map} +2 -2
  27. package/dist/modules/chunks/{chunk-M66NDY35.mjs → chunk-C2AMOM7H.mjs} +3 -3
  28. package/dist/modules/chunks/{chunk-EOW4JGVV.mjs → chunk-C3WVSJZF.mjs} +6 -6
  29. package/dist/modules/chunks/{chunk-TFBSEYKW.mjs → chunk-CAXCOZ7Y.mjs} +3 -3
  30. package/dist/modules/chunks/{chunk-P27F2TZN.mjs → chunk-CN6YN4HP.mjs} +10 -10
  31. package/dist/modules/chunks/chunk-CN6YN4HP.mjs.map +7 -0
  32. package/dist/modules/chunks/{chunk-25PFC2DY.mjs → chunk-CXFQME65.mjs} +3 -3
  33. package/dist/modules/chunks/{chunk-VD3C4DYT.mjs → chunk-CYOLEAAY.mjs} +13 -13
  34. package/dist/modules/chunks/{chunk-VD3C4DYT.mjs.map → chunk-CYOLEAAY.mjs.map} +1 -1
  35. package/dist/modules/chunks/{chunk-P3ZW2T37.mjs → chunk-CYU3WWN6.mjs} +3 -3
  36. package/dist/modules/chunks/{chunk-SKZC6VTV.mjs → chunk-D2LZIQE2.mjs} +2 -2
  37. package/dist/modules/chunks/{chunk-QNUBIFAY.mjs → chunk-DC5JP46Y.mjs} +2 -2
  38. package/dist/modules/chunks/{chunk-7MQIGD6Q.mjs → chunk-DOU4MNMQ.mjs} +3 -3
  39. package/dist/modules/chunks/{chunk-JKDBKS7P.mjs → chunk-E4G4HDOC.mjs} +3 -3
  40. package/dist/modules/chunks/{chunk-XXJ32F5P.mjs → chunk-EZAJ66NW.mjs} +3 -3
  41. package/dist/modules/chunks/{chunk-5PZL6W3F.mjs → chunk-FIWL6TQS.mjs} +2 -2
  42. package/dist/modules/chunks/{chunk-K4C5WOTT.mjs → chunk-FSSARTVM.mjs} +3 -3
  43. package/dist/modules/chunks/{chunk-5HJ336VM.mjs → chunk-FXXPWAXM.mjs} +3 -3
  44. package/dist/modules/chunks/{chunk-43L37UYV.mjs → chunk-G2QCXN56.mjs} +6 -6
  45. package/dist/modules/chunks/{chunk-DJKXBCZH.mjs → chunk-GRDCA6LD.mjs} +8 -8
  46. package/dist/modules/chunks/{chunk-DJKXBCZH.mjs.map → chunk-GRDCA6LD.mjs.map} +1 -1
  47. package/dist/modules/chunks/{chunk-4ZI5DFBR.mjs → chunk-GUVUL6D2.mjs} +3 -3
  48. package/dist/modules/chunks/{chunk-MFEFV3YF.mjs → chunk-I32EONBF.mjs} +2 -2
  49. package/dist/modules/chunks/{chunk-DX4M6LZH.mjs → chunk-IGIELQZ2.mjs} +5 -5
  50. package/dist/modules/chunks/{chunk-U5LBMAG3.mjs → chunk-IMDR26Y3.mjs} +3 -3
  51. package/dist/modules/chunks/{chunk-MUBV2LNK.mjs → chunk-JVOHFCI4.mjs} +3 -3
  52. package/dist/modules/chunks/{chunk-CEB76QBE.mjs → chunk-KCM7ZCQ3.mjs} +5 -5
  53. package/dist/modules/chunks/chunk-KCM7ZCQ3.mjs.map +7 -0
  54. package/dist/modules/chunks/{chunk-TPLT4PBX.mjs → chunk-KJTMDFFX.mjs} +4 -4
  55. package/dist/modules/chunks/{chunk-WC6NGMGI.mjs → chunk-KPLESRQY.mjs} +3 -3
  56. package/dist/modules/chunks/{chunk-ZW7LLDOL.mjs → chunk-KUOWDTI6.mjs} +2 -2
  57. package/dist/modules/chunks/{chunk-BJTFQQQR.mjs → chunk-L6IHUN7X.mjs} +2 -2
  58. package/dist/modules/chunks/chunk-L6IHUN7X.mjs.map +7 -0
  59. package/dist/modules/chunks/{chunk-PHCUCHVL.mjs → chunk-LBQ6DFMP.mjs} +2 -2
  60. package/dist/modules/chunks/{chunk-DC3PU6SO.mjs → chunk-LVWHM3UN.mjs} +2 -2
  61. package/dist/modules/chunks/{chunk-JE4N575J.mjs → chunk-MDQMARAN.mjs} +6 -6
  62. package/dist/modules/chunks/{chunk-JE4N575J.mjs.map → chunk-MDQMARAN.mjs.map} +2 -2
  63. package/dist/modules/chunks/{chunk-NSPN5OQ5.mjs → chunk-MLXRIWJA.mjs} +2 -2
  64. package/dist/modules/chunks/{chunk-FVSDKOXR.mjs → chunk-N2SH3JGI.mjs} +3 -3
  65. package/dist/modules/chunks/{chunk-5WVRCLHN.mjs → chunk-N7NXZ6R3.mjs} +4 -4
  66. package/dist/modules/chunks/{chunk-5WVRCLHN.mjs.map → chunk-N7NXZ6R3.mjs.map} +2 -2
  67. package/dist/modules/chunks/{chunk-EW7VMNZA.mjs → chunk-O5QX6H3U.mjs} +5 -5
  68. package/dist/modules/chunks/{chunk-4RTL3LS3.mjs → chunk-PCQNUFDL.mjs} +7 -7
  69. package/dist/modules/chunks/chunk-PCQNUFDL.mjs.map +7 -0
  70. package/dist/modules/chunks/{chunk-V4SOFUJI.mjs → chunk-Q7M7VUOZ.mjs} +6 -6
  71. package/dist/modules/chunks/{chunk-NZ4N7AVG.mjs → chunk-QB33CMEU.mjs} +2 -2
  72. package/dist/modules/chunks/{chunk-QYJZ3SOV.mjs → chunk-QJHQN6OD.mjs} +5 -5
  73. package/dist/modules/chunks/chunk-QJHQN6OD.mjs.map +7 -0
  74. package/dist/modules/chunks/{chunk-OGFZB75B.mjs → chunk-QW2VT3XB.mjs} +2 -2
  75. package/dist/modules/chunks/{chunk-EQRDY5CQ.mjs → chunk-RFTLGEB5.mjs} +2 -2
  76. package/dist/modules/chunks/{chunk-CRPXFJ6K.mjs → chunk-RYYKMDNI.mjs} +3 -3
  77. package/dist/modules/chunks/{chunk-A7HXBQUG.mjs → chunk-SFB5BDTB.mjs} +2 -2
  78. package/dist/modules/chunks/{chunk-SSVRSFTX.mjs → chunk-SNICHQJP.mjs} +2 -2
  79. package/dist/modules/chunks/{chunk-KY2AWNDR.mjs → chunk-SPGFO2TA.mjs} +2 -2
  80. package/dist/modules/chunks/{chunk-XOZ5EMNY.mjs → chunk-TMPTVIAP.mjs} +2 -2
  81. package/dist/modules/chunks/{chunk-D3GX7HWI.mjs → chunk-UWJYROKS.mjs} +5 -5
  82. package/dist/modules/chunks/{chunk-AOD6XLJC.mjs → chunk-UZH2664E.mjs} +2 -2
  83. package/dist/modules/chunks/{chunk-ZRG7LDCA.mjs → chunk-VC4OEPDH.mjs} +2 -2
  84. package/dist/modules/chunks/{chunk-L24HPIQP.mjs → chunk-VKWEA6NG.mjs} +27 -27
  85. package/dist/modules/chunks/{chunk-5SHQXSSM.mjs → chunk-VSJOW7J4.mjs} +5 -5
  86. package/dist/modules/chunks/{chunk-5N5FDO5Y.mjs → chunk-WFM434WJ.mjs} +2 -2
  87. package/dist/modules/chunks/{chunk-QQP7ZGQD.mjs → chunk-WJNASQF2.mjs} +2 -2
  88. package/dist/modules/chunks/{chunk-FSYQ3LBQ.mjs → chunk-XUNDH3E7.mjs} +2 -2
  89. package/dist/modules/chunks/{chunk-LOVO3P2Q.mjs → chunk-YDARD4EP.mjs} +2 -2
  90. package/dist/modules/chunks/{chunk-LCVL3V5U.mjs → chunk-YU3HRQX7.mjs} +4 -4
  91. package/dist/modules/chunks/{chunk-M7XSCLYV.mjs → chunk-ZRE7BDDB.mjs} +15 -4
  92. package/dist/modules/chunks/chunk-ZRE7BDDB.mjs.map +7 -0
  93. package/dist/modules/cli-contributions.mjs +14 -14
  94. package/dist/modules/cli.mjs +5 -5
  95. package/dist/modules/command-executor.mjs +3 -3
  96. package/dist/modules/embedded.mjs +28 -28
  97. package/dist/modules/extension-bridge.mjs +4 -4
  98. package/dist/modules/frontend-root.mjs +46 -46
  99. package/dist/modules/index.mjs +64 -64
  100. package/dist/modules/pages/scene.mjs +5 -5
  101. package/dist/modules/plugin.mjs +34 -34
  102. package/dist/modules/plugins/asset/frontend.mjs +10 -10
  103. package/dist/modules/plugins/asset/identity.mjs +9 -9
  104. package/dist/modules/plugins/asset/ui.mjs +3 -3
  105. package/dist/modules/plugins/content-browser/frontend.mjs +3 -3
  106. package/dist/modules/plugins/content-browser/identity.mjs +2 -2
  107. package/dist/modules/plugins/content-browser/ui.mjs +3 -3
  108. package/dist/modules/plugins/display/backend.mjs +3 -3
  109. package/dist/modules/plugins/display/frontend.mjs +5 -5
  110. package/dist/modules/plugins/display/identity.mjs +2 -2
  111. package/dist/modules/plugins/display/ui.mjs +3 -3
  112. package/dist/modules/plugins/inspector/frontend.mjs +3 -3
  113. package/dist/modules/plugins/inspector/identity.mjs +2 -2
  114. package/dist/modules/plugins/inspector/ui.mjs +3 -3
  115. package/dist/modules/plugins/material/frontend.mjs +10 -10
  116. package/dist/modules/plugins/material/identity.mjs +9 -9
  117. package/dist/modules/plugins/material/ui.mjs +10 -10
  118. package/dist/modules/plugins/mesh/frontend.mjs +10 -10
  119. package/dist/modules/plugins/mesh/identity.mjs +9 -9
  120. package/dist/modules/plugins/mesh/ui.mjs +10 -10
  121. package/dist/modules/plugins/plugins/api.mjs +4 -4
  122. package/dist/modules/plugins/plugins/backend.mjs +7 -7
  123. package/dist/modules/plugins/plugins/cli.mjs +5 -5
  124. package/dist/modules/plugins/plugins/frontend.mjs +3 -3
  125. package/dist/modules/plugins/plugins/identity.mjs +2 -2
  126. package/dist/modules/plugins/plugins/runtime.mjs +6 -6
  127. package/dist/modules/plugins/plugins/ui/panel.mjs +3 -3
  128. package/dist/modules/plugins/plugins/ui.mjs +4 -4
  129. package/dist/modules/plugins/scene/frontend.mjs +5 -5
  130. package/dist/modules/plugins/scene/identity.mjs +2 -2
  131. package/dist/modules/plugins/scene-tree/frontend.mjs +3 -3
  132. package/dist/modules/plugins/scene-tree/identity.mjs +2 -2
  133. package/dist/modules/plugins/scene-tree/ui.mjs +3 -3
  134. package/dist/modules/plugins/texture/frontend.mjs +10 -10
  135. package/dist/modules/plugins/texture/identity.mjs +9 -9
  136. package/dist/modules/plugins/texture/ui.mjs +10 -10
  137. package/dist/modules/plugins/viewport/frontend.mjs +12 -12
  138. package/dist/modules/plugins/viewport/identity.mjs +2 -2
  139. package/dist/modules/plugins/viewport/presentation.mjs +4 -4
  140. package/dist/modules/plugins/viewport/schema.mjs +2 -2
  141. package/dist/modules/plugins/viewport/workspace-shell.mjs +9 -9
  142. package/dist/modules/product.mjs +34 -34
  143. package/dist/modules/shell/frontend.mjs +1 -1
  144. package/dist/modules/viewer/catalog/backend.mjs +30 -30
  145. package/dist/modules/viewer/catalog/frontend.mjs +42 -42
  146. package/dist/modules/viewer/catalog/shared.mjs +20 -20
  147. package/dist/modules/viewer/catalog.mjs +50 -50
  148. package/dist/modules/viewer/cli.mjs +10 -10
  149. package/dist/modules/viewer-host/frontend.mjs +48 -48
  150. package/dist/modules/viewer-host/page-registry.mjs +6 -6
  151. package/dist/modules/viewer-host.mjs +6 -6
  152. package/dist/modules/viewer.mjs +50 -50
  153. package/dist/modules/workspace/api.mjs +1 -1
  154. package/dist/modules/workspace/backend.mjs +10 -10
  155. package/dist/modules/workspace/broker.mjs +9 -9
  156. package/dist/modules/workspace/cli.mjs +2 -2
  157. package/dist/modules/workspace/client.mjs +3 -3
  158. package/dist/modules/workspace/command-error.mjs +2 -2
  159. package/dist/modules/workspace/contract.mjs +1 -1
  160. package/dist/modules/workspace/engine-adapter.mjs +3 -3
  161. package/dist/modules/workspace/extension-bridge.mjs +4 -4
  162. package/dist/modules/workspace/frontend-plugin.mjs +8 -8
  163. package/dist/modules/workspace/frontend.mjs +9 -9
  164. package/dist/modules/workspace/page-title.mjs +3 -3
  165. package/dist/modules/workspace/presentation.mjs +4 -4
  166. package/dist/modules/workspace/preview-surface.mjs +7 -7
  167. package/dist/modules/workspace/project-session.mjs +2 -2
  168. package/dist/modules/workspace/render-resize-sync.mjs +2 -2
  169. package/dist/modules/workspace/resident.mjs +4 -4
  170. package/dist/modules/workspace/resource-open.mjs +5 -5
  171. package/dist/modules/workspace/resource-page.mjs +8 -8
  172. package/dist/modules/workspace/tool-runtime.mjs +3 -3
  173. package/dist/modules/workspace/view-trace.mjs +3 -3
  174. package/dist/modules/workspace/workspace-recovery.mjs +4 -4
  175. package/dist/modules/workspace/workspace-state.mjs +2 -2
  176. package/dist/modules/workspace-frontend.mjs +8 -8
  177. package/dist/viewer/assets/{embedded-BZSPh0if.js → embedded-BKEAtUD6.js} +2 -2
  178. package/dist/viewer/assets/{embedded-BZSPh0if.js.map → embedded-BKEAtUD6.js.map} +1 -1
  179. package/dist/viewer/assets/{main-CmJEE-8D.js → main-BQrn6wsa.js} +5 -5
  180. package/dist/viewer/assets/main-BQrn6wsa.js.map +1 -0
  181. package/dist/viewer/assets/{panels-lazy-DqCwhGd9.js → panels-lazy-C_Cs-76A.js} +2 -2
  182. package/dist/viewer/assets/{panels-lazy-DqCwhGd9.js.map → panels-lazy-C_Cs-76A.js.map} +1 -1
  183. package/dist/viewer/assets/{panels-ui-Cm3As_jE.js → panels-ui-DEDHJLuE.js} +5 -5
  184. package/dist/viewer/assets/panels-ui-DEDHJLuE.js.map +1 -0
  185. package/dist/viewer/assets/{wgpu_wasm--oeqTwVY.js → wgpu_wasm-cNR5izZM.js} +126 -0
  186. package/dist/viewer/assets/{wgpu_wasm_bg-WoZ1YI1I.wasm → wgpu_wasm_bg-Dps0jNcQ.wasm} +0 -0
  187. package/dist/viewer/index.html +3 -3
  188. package/dist/viewer/panels.js +1 -1
  189. package/package.json +2 -2
  190. package/skills/forgeax-view-cli/SKILL.md +7 -0
  191. package/dist/modules/chunks/chunk-4RTL3LS3.mjs.map +0 -7
  192. package/dist/modules/chunks/chunk-BJTFQQQR.mjs.map +0 -7
  193. package/dist/modules/chunks/chunk-CEB76QBE.mjs.map +0 -7
  194. package/dist/modules/chunks/chunk-M7XSCLYV.mjs.map +0 -7
  195. package/dist/modules/chunks/chunk-P27F2TZN.mjs.map +0 -7
  196. package/dist/modules/chunks/chunk-QYJZ3SOV.mjs.map +0 -7
  197. package/dist/viewer/assets/main-CmJEE-8D.js.map +0 -1
  198. package/dist/viewer/assets/panels-ui-Cm3As_jE.js.map +0 -1
  199. /package/dist/modules/chunks/{chunk-OS7BK3FO.mjs.map → chunk-2CMCY54A.mjs.map} +0 -0
  200. /package/dist/modules/chunks/{chunk-CYQ7BITZ.mjs.map → chunk-3FBX3P3H.mjs.map} +0 -0
  201. /package/dist/modules/chunks/{chunk-VD4QU7KY.mjs.map → chunk-45WL24XN.mjs.map} +0 -0
  202. /package/dist/modules/chunks/{chunk-FSSKCXPL.mjs.map → chunk-4FYKRL46.mjs.map} +0 -0
  203. /package/dist/modules/chunks/{chunk-Y4SFATAM.mjs.map → chunk-4MJHVZMB.mjs.map} +0 -0
  204. /package/dist/modules/chunks/{chunk-D3ISMGT6.mjs.map → chunk-5HVXQEO3.mjs.map} +0 -0
  205. /package/dist/modules/chunks/{chunk-J7QRK3FU.mjs.map → chunk-66LM6NO6.mjs.map} +0 -0
  206. /package/dist/modules/chunks/{chunk-QNSUBUZF.mjs.map → chunk-6J27SWMY.mjs.map} +0 -0
  207. /package/dist/modules/chunks/{chunk-QNJL265P.mjs.map → chunk-6VK7HB4X.mjs.map} +0 -0
  208. /package/dist/modules/chunks/{chunk-AZHCKPUL.mjs.map → chunk-6WZZ7TIC.mjs.map} +0 -0
  209. /package/dist/modules/chunks/{chunk-CVIF6DYH.mjs.map → chunk-7MWZK7HS.mjs.map} +0 -0
  210. /package/dist/modules/chunks/{chunk-7YWMB7HV.mjs.map → chunk-A7OGXJAV.mjs.map} +0 -0
  211. /package/dist/modules/chunks/{chunk-KOBAWLZL.mjs.map → chunk-AUINYWZP.mjs.map} +0 -0
  212. /package/dist/modules/chunks/{chunk-R6MT6F3T.mjs.map → chunk-B24VYGHV.mjs.map} +0 -0
  213. /package/dist/modules/chunks/{chunk-M66NDY35.mjs.map → chunk-C2AMOM7H.mjs.map} +0 -0
  214. /package/dist/modules/chunks/{chunk-EOW4JGVV.mjs.map → chunk-C3WVSJZF.mjs.map} +0 -0
  215. /package/dist/modules/chunks/{chunk-TFBSEYKW.mjs.map → chunk-CAXCOZ7Y.mjs.map} +0 -0
  216. /package/dist/modules/chunks/{chunk-25PFC2DY.mjs.map → chunk-CXFQME65.mjs.map} +0 -0
  217. /package/dist/modules/chunks/{chunk-P3ZW2T37.mjs.map → chunk-CYU3WWN6.mjs.map} +0 -0
  218. /package/dist/modules/chunks/{chunk-SKZC6VTV.mjs.map → chunk-D2LZIQE2.mjs.map} +0 -0
  219. /package/dist/modules/chunks/{chunk-QNUBIFAY.mjs.map → chunk-DC5JP46Y.mjs.map} +0 -0
  220. /package/dist/modules/chunks/{chunk-7MQIGD6Q.mjs.map → chunk-DOU4MNMQ.mjs.map} +0 -0
  221. /package/dist/modules/chunks/{chunk-JKDBKS7P.mjs.map → chunk-E4G4HDOC.mjs.map} +0 -0
  222. /package/dist/modules/chunks/{chunk-XXJ32F5P.mjs.map → chunk-EZAJ66NW.mjs.map} +0 -0
  223. /package/dist/modules/chunks/{chunk-5PZL6W3F.mjs.map → chunk-FIWL6TQS.mjs.map} +0 -0
  224. /package/dist/modules/chunks/{chunk-K4C5WOTT.mjs.map → chunk-FSSARTVM.mjs.map} +0 -0
  225. /package/dist/modules/chunks/{chunk-5HJ336VM.mjs.map → chunk-FXXPWAXM.mjs.map} +0 -0
  226. /package/dist/modules/chunks/{chunk-43L37UYV.mjs.map → chunk-G2QCXN56.mjs.map} +0 -0
  227. /package/dist/modules/chunks/{chunk-4ZI5DFBR.mjs.map → chunk-GUVUL6D2.mjs.map} +0 -0
  228. /package/dist/modules/chunks/{chunk-MFEFV3YF.mjs.map → chunk-I32EONBF.mjs.map} +0 -0
  229. /package/dist/modules/chunks/{chunk-DX4M6LZH.mjs.map → chunk-IGIELQZ2.mjs.map} +0 -0
  230. /package/dist/modules/chunks/{chunk-U5LBMAG3.mjs.map → chunk-IMDR26Y3.mjs.map} +0 -0
  231. /package/dist/modules/chunks/{chunk-MUBV2LNK.mjs.map → chunk-JVOHFCI4.mjs.map} +0 -0
  232. /package/dist/modules/chunks/{chunk-TPLT4PBX.mjs.map → chunk-KJTMDFFX.mjs.map} +0 -0
  233. /package/dist/modules/chunks/{chunk-WC6NGMGI.mjs.map → chunk-KPLESRQY.mjs.map} +0 -0
  234. /package/dist/modules/chunks/{chunk-ZW7LLDOL.mjs.map → chunk-KUOWDTI6.mjs.map} +0 -0
  235. /package/dist/modules/chunks/{chunk-PHCUCHVL.mjs.map → chunk-LBQ6DFMP.mjs.map} +0 -0
  236. /package/dist/modules/chunks/{chunk-DC3PU6SO.mjs.map → chunk-LVWHM3UN.mjs.map} +0 -0
  237. /package/dist/modules/chunks/{chunk-NSPN5OQ5.mjs.map → chunk-MLXRIWJA.mjs.map} +0 -0
  238. /package/dist/modules/chunks/{chunk-FVSDKOXR.mjs.map → chunk-N2SH3JGI.mjs.map} +0 -0
  239. /package/dist/modules/chunks/{chunk-EW7VMNZA.mjs.map → chunk-O5QX6H3U.mjs.map} +0 -0
  240. /package/dist/modules/chunks/{chunk-V4SOFUJI.mjs.map → chunk-Q7M7VUOZ.mjs.map} +0 -0
  241. /package/dist/modules/chunks/{chunk-NZ4N7AVG.mjs.map → chunk-QB33CMEU.mjs.map} +0 -0
  242. /package/dist/modules/chunks/{chunk-OGFZB75B.mjs.map → chunk-QW2VT3XB.mjs.map} +0 -0
  243. /package/dist/modules/chunks/{chunk-EQRDY5CQ.mjs.map → chunk-RFTLGEB5.mjs.map} +0 -0
  244. /package/dist/modules/chunks/{chunk-CRPXFJ6K.mjs.map → chunk-RYYKMDNI.mjs.map} +0 -0
  245. /package/dist/modules/chunks/{chunk-A7HXBQUG.mjs.map → chunk-SFB5BDTB.mjs.map} +0 -0
  246. /package/dist/modules/chunks/{chunk-SSVRSFTX.mjs.map → chunk-SNICHQJP.mjs.map} +0 -0
  247. /package/dist/modules/chunks/{chunk-KY2AWNDR.mjs.map → chunk-SPGFO2TA.mjs.map} +0 -0
  248. /package/dist/modules/chunks/{chunk-XOZ5EMNY.mjs.map → chunk-TMPTVIAP.mjs.map} +0 -0
  249. /package/dist/modules/chunks/{chunk-D3GX7HWI.mjs.map → chunk-UWJYROKS.mjs.map} +0 -0
  250. /package/dist/modules/chunks/{chunk-AOD6XLJC.mjs.map → chunk-UZH2664E.mjs.map} +0 -0
  251. /package/dist/modules/chunks/{chunk-ZRG7LDCA.mjs.map → chunk-VC4OEPDH.mjs.map} +0 -0
  252. /package/dist/modules/chunks/{chunk-L24HPIQP.mjs.map → chunk-VKWEA6NG.mjs.map} +0 -0
  253. /package/dist/modules/chunks/{chunk-5SHQXSSM.mjs.map → chunk-VSJOW7J4.mjs.map} +0 -0
  254. /package/dist/modules/chunks/{chunk-5N5FDO5Y.mjs.map → chunk-WFM434WJ.mjs.map} +0 -0
  255. /package/dist/modules/chunks/{chunk-QQP7ZGQD.mjs.map → chunk-WJNASQF2.mjs.map} +0 -0
  256. /package/dist/modules/chunks/{chunk-FSYQ3LBQ.mjs.map → chunk-XUNDH3E7.mjs.map} +0 -0
  257. /package/dist/modules/chunks/{chunk-LOVO3P2Q.mjs.map → chunk-YDARD4EP.mjs.map} +0 -0
  258. /package/dist/modules/chunks/{chunk-LCVL3V5U.mjs.map → chunk-YU3HRQX7.mjs.map} +0 -0
@@ -821,6 +821,34 @@ export class RhiWgpuQueue {
821
821
  const ptr = this.__destroy_into_raw();
822
822
  wasm.__wbg_rhiwgpuqueue_free(ptr, 0);
823
823
  }
824
+ /**
825
+ * `queue.copyExternalImageToTexture(...)` flat-args form, mirroring
826
+ * writeTexture: the texture is borrowed so its JS pointer survives.
827
+ * WebGL2 has no `texture_external`, so video and canvas sources reach
828
+ * sampled textures only through this copy.
829
+ * @param {any} source
830
+ * @param {number} source_origin_x
831
+ * @param {number} source_origin_y
832
+ * @param {boolean} flip_y
833
+ * @param {RhiWgpuTexture} texture
834
+ * @param {number} mip_level
835
+ * @param {number} origin_x
836
+ * @param {number} origin_y
837
+ * @param {number} origin_z
838
+ * @param {number} aspect
839
+ * @param {boolean} display_p3
840
+ * @param {boolean} premultiplied_alpha
841
+ * @param {number} size_width
842
+ * @param {number} size_height
843
+ * @param {number} size_depth
844
+ */
845
+ copyExternalImageToTexture(source, source_origin_x, source_origin_y, flip_y, texture, mip_level, origin_x, origin_y, origin_z, aspect, display_p3, premultiplied_alpha, size_width, size_height, size_depth) {
846
+ _assertClass(texture, RhiWgpuTexture);
847
+ const ret = wasm.rhiwgpuqueue_copyExternalImageToTexture(this.__wbg_ptr, source, source_origin_x, source_origin_y, flip_y, texture.__wbg_ptr, mip_level, origin_x, origin_y, origin_z, aspect, display_p3, premultiplied_alpha, size_width, size_height, size_depth);
848
+ if (ret[1]) {
849
+ throw takeFromExternrefTable0(ret[0]);
850
+ }
851
+ }
824
852
  /**
825
853
  * @param {Array<any>} buffers
826
854
  */
@@ -2359,6 +2387,26 @@ function __wbg_get_imports() {
2359
2387
  const ret = arg0[arg1];
2360
2388
  return ret;
2361
2389
  },
2390
+ __wbg_height_393f1c4e4e4c0469: function(arg0) {
2391
+ const ret = arg0.height;
2392
+ return ret;
2393
+ },
2394
+ __wbg_height_4758eef353c25bbc: function(arg0) {
2395
+ const ret = arg0.height;
2396
+ return ret;
2397
+ },
2398
+ __wbg_height_9edadb8dd6231945: function(arg0) {
2399
+ const ret = arg0.height;
2400
+ return ret;
2401
+ },
2402
+ __wbg_height_aef2a2eb10d0d530: function(arg0) {
2403
+ const ret = arg0.height;
2404
+ return ret;
2405
+ },
2406
+ __wbg_height_c03c0f550edd8863: function(arg0) {
2407
+ const ret = arg0.height;
2408
+ return ret;
2409
+ },
2362
2410
  __wbg_includes_0ec85e8f9acc8cac: function(arg0, arg1, arg2) {
2363
2411
  const ret = arg0.includes(arg1, arg2);
2364
2412
  return ret;
@@ -2383,6 +2431,56 @@ function __wbg_get_imports() {
2383
2431
  const ret = result;
2384
2432
  return ret;
2385
2433
  },
2434
+ __wbg_instanceof_HtmlImageElement_491672dffc711dd2: function(arg0) {
2435
+ let result;
2436
+ try {
2437
+ result = arg0 instanceof HTMLImageElement;
2438
+ } catch (_) {
2439
+ result = false;
2440
+ }
2441
+ const ret = result;
2442
+ return ret;
2443
+ },
2444
+ __wbg_instanceof_HtmlVideoElement_47753cce6403a53c: function(arg0) {
2445
+ let result;
2446
+ try {
2447
+ result = arg0 instanceof HTMLVideoElement;
2448
+ } catch (_) {
2449
+ result = false;
2450
+ }
2451
+ const ret = result;
2452
+ return ret;
2453
+ },
2454
+ __wbg_instanceof_ImageBitmap_978cd0345c96f59d: function(arg0) {
2455
+ let result;
2456
+ try {
2457
+ result = arg0 instanceof ImageBitmap;
2458
+ } catch (_) {
2459
+ result = false;
2460
+ }
2461
+ const ret = result;
2462
+ return ret;
2463
+ },
2464
+ __wbg_instanceof_ImageData_67574703a56e9f41: function(arg0) {
2465
+ let result;
2466
+ try {
2467
+ result = arg0 instanceof ImageData;
2468
+ } catch (_) {
2469
+ result = false;
2470
+ }
2471
+ const ret = result;
2472
+ return ret;
2473
+ },
2474
+ __wbg_instanceof_OffscreenCanvas_55f621c0555607ff: function(arg0) {
2475
+ let result;
2476
+ try {
2477
+ result = arg0 instanceof OffscreenCanvas;
2478
+ } catch (_) {
2479
+ result = false;
2480
+ }
2481
+ const ret = result;
2482
+ return ret;
2483
+ },
2386
2484
  __wbg_instanceof_Uint32Array_6aece1e91fed8df4: function(arg0) {
2387
2485
  let result;
2388
2486
  try {
@@ -2910,12 +3008,40 @@ function __wbg_get_imports() {
2910
3008
  __wbg_vertexAttribPointer_85566c79cb366300: function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {
2911
3009
  arg0.vertexAttribPointer(arg1 >>> 0, arg2, arg3 >>> 0, arg4 !== 0, arg5, arg6);
2912
3010
  },
3011
+ __wbg_videoHeight_5d213235c6116abb: function(arg0) {
3012
+ const ret = arg0.videoHeight;
3013
+ return ret;
3014
+ },
3015
+ __wbg_videoWidth_527fa69158ca4289: function(arg0) {
3016
+ const ret = arg0.videoWidth;
3017
+ return ret;
3018
+ },
2913
3019
  __wbg_viewport_3c149d0c6435f0ed: function(arg0, arg1, arg2, arg3, arg4) {
2914
3020
  arg0.viewport(arg1, arg2, arg3, arg4);
2915
3021
  },
2916
3022
  __wbg_viewport_c25030cfbe3cddf4: function(arg0, arg1, arg2, arg3, arg4) {
2917
3023
  arg0.viewport(arg1, arg2, arg3, arg4);
2918
3024
  },
3025
+ __wbg_width_0501569208b20317: function(arg0) {
3026
+ const ret = arg0.width;
3027
+ return ret;
3028
+ },
3029
+ __wbg_width_113c4af498e36672: function(arg0) {
3030
+ const ret = arg0.width;
3031
+ return ret;
3032
+ },
3033
+ __wbg_width_14ddc8f4e1a3dcbe: function(arg0) {
3034
+ const ret = arg0.width;
3035
+ return ret;
3036
+ },
3037
+ __wbg_width_e987166926c3367c: function(arg0) {
3038
+ const ret = arg0.width;
3039
+ return ret;
3040
+ },
3041
+ __wbg_width_ef1b207dc2488a66: function(arg0) {
3042
+ const ret = arg0.width;
3043
+ return ret;
3044
+ },
2919
3045
  __wbindgen_cast_0000000000000001: function(arg0, arg1) {
2920
3046
  // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 1619, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.
2921
3047
  const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5989510ce0f9510c___convert__closures_____invoke___wasm_bindgen_5989510ce0f9510c___JsValue__core_f4ce2b6cc8c3b44d___result__Result_____wasm_bindgen_5989510ce0f9510c___JsError___true_);
@@ -4,10 +4,10 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>ForgeaX View</title>
7
- <script type="module" crossorigin src="/assets/main-CmJEE-8D.js"></script>
7
+ <script type="module" crossorigin src="/assets/main-BQrn6wsa.js"></script>
8
8
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-S-ySWqyJ.js">
9
- <link rel="modulepreload" crossorigin href="/assets/panels-lazy-DqCwhGd9.js">
10
- <link rel="modulepreload" crossorigin href="/assets/panels-ui-Cm3As_jE.js">
9
+ <link rel="modulepreload" crossorigin href="/assets/panels-lazy-C_Cs-76A.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/panels-ui-DEDHJLuE.js">
11
11
  <link rel="stylesheet" crossorigin href="/assets/style-CcYzhsIZ.css">
12
12
  </head>
13
13
  <body>
@@ -1,2 +1,2 @@
1
- import{n as e}from"./assets/rolldown-runtime-S-ySWqyJ.js";import{a as t,c as n,d as r,f as i,i as a,l as o,m as s,n as c,o as l,p as u,r as d,s as f,t as p,u as m}from"./assets/panels-ui-Cm3As_jE.js";var h=e({mountAssetPropertiesPanel:()=>t,mountContentBrowserPanel:()=>s,mountInspectorPanel:()=>u,mountMaterialPanel:()=>m,mountMaterialPreviewPanel:()=>r,mountMaterialPropertiesPanel:()=>i,mountMeshPreviewPanel:()=>n,mountMeshPropertiesPanel:()=>o,mountPluginsPanel:()=>a,mountProfilerPanel:()=>p,mountRhiDebugPanel:()=>c,mountSceneTreePanel:()=>d,mountTexturePreviewPanel:()=>l,mountTexturePropertiesPanel:()=>f});export{t as mountAssetPropertiesPanel,s as mountContentBrowserPanel,u as mountInspectorPanel,m as mountMaterialPanel,r as mountMaterialPreviewPanel,i as mountMaterialPropertiesPanel,n as mountMeshPreviewPanel,o as mountMeshPropertiesPanel,a as mountPluginsPanel,p as mountProfilerPanel,c as mountRhiDebugPanel,d as mountSceneTreePanel,l as mountTexturePreviewPanel,f as mountTexturePropertiesPanel,h as t};
1
+ import{n as e}from"./assets/rolldown-runtime-S-ySWqyJ.js";import{a as t,c as n,d as r,f as i,i as a,l as o,m as s,n as c,o as l,p as u,r as d,s as f,t as p,u as m}from"./assets/panels-ui-DEDHJLuE.js";var h=e({mountAssetPropertiesPanel:()=>t,mountContentBrowserPanel:()=>s,mountInspectorPanel:()=>u,mountMaterialPanel:()=>m,mountMaterialPreviewPanel:()=>r,mountMaterialPropertiesPanel:()=>i,mountMeshPreviewPanel:()=>n,mountMeshPropertiesPanel:()=>o,mountPluginsPanel:()=>a,mountProfilerPanel:()=>p,mountRhiDebugPanel:()=>c,mountSceneTreePanel:()=>d,mountTexturePreviewPanel:()=>l,mountTexturePropertiesPanel:()=>f});export{t as mountAssetPropertiesPanel,s as mountContentBrowserPanel,u as mountInspectorPanel,m as mountMaterialPanel,r as mountMaterialPreviewPanel,i as mountMaterialPropertiesPanel,n as mountMeshPreviewPanel,o as mountMeshPropertiesPanel,a as mountPluginsPanel,p as mountProfilerPanel,c as mountRhiDebugPanel,d as mountSceneTreePanel,l as mountTexturePreviewPanel,f as mountTexturePropertiesPanel,h as t};
2
2
  //# sourceMappingURL=panels.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgeax/view",
3
- "version": "0.5.0-dev.13619.c20ebf66cef4",
3
+ "version": "0.5.0-dev.13713.d28c4863d779",
4
4
  "type": "module",
5
5
  "description": "An optional display host for ForgeaX CLI runs",
6
6
  "files": [
@@ -19,7 +19,7 @@
19
19
  "registry": "https://registry.npmjs.org/"
20
20
  },
21
21
  "dependencies": {
22
- "@forgeax/engine": "0.5.0-dev.13619.c20ebf66cef4",
22
+ "@forgeax/engine": "0.5.0-dev.13713.d28c4863d779",
23
23
  "dockview": "^6.6.1",
24
24
  "lucide-react": "^0.460.0",
25
25
  "playwright": "1.63.0",
@@ -16,6 +16,13 @@ description: >-
16
16
 
17
17
  ## Find the live contract
18
18
 
19
+ Public ToolApi IDs are also CLI paths: `view.workspace.pack.reveal` becomes
20
+ `forgeax view workspace pack reveal`; pass its argument object through `--input`.
21
+ `view.workspace.summary.get` reads bounded workspace facts. The running Engine
22
+ backend discovers these current owner descriptors without mounting new plugins.
23
+ The standalone workspace client uses relative IDs (`pack.reveal`, `summary.get`).
24
+
25
+
19
26
  Read `@forgeax/view/workspace/contract` for operation names and request shape
20
27
  (`packages/view-workspace-core/src/contract.ts` in this repository). For
21
28
  programmatic clients, call
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../packages/view-workspace-core/src/client.ts"],
4
- "sourcesContent": ["import type { HostTransportClient, HostRequestOptions } from '@forgeax/engine-host/transport';\nimport type { EngineWorkspaceCameraInput, EngineWorkspaceCameraResult, EngineWorkspaceTargetTools } from '@forgeax/engine/app';\nimport type { WorkspaceState, WorkspaceSummary, WorkspacePages, WorkspacePackReveal, WorkspacePackRevealResult, WorkspaceInspection, WorkspaceAsset } from './contract.ts';\nimport type { ProjectSession } from './project-session.ts';\nimport { workspaceDiagnosticRecord } from './command-error.ts';\nexport type WorkspaceCallOptions = HostRequestOptions & { requestId?: string; reportError?: boolean };\nexport type WorkspaceTargetOptions = WorkspaceCallOptions & { tabId?: string; targetId?: string; targetGeneration?: number };\nexport type WorkspaceOptions = WorkspaceTargetOptions & Partial<EngineWorkspaceCameraInput> & {\n label?: string; root?: string; projectId?: string; expectedTargetId?: string | null; expectedTargetState?: string;\n expectedRevision?: string; width?: number; height?: number; reason?: string; offset?: number; limit?: number; revision?: string;\n sourceId?: string; sourceGeneration?: number; sinceRevision?: number;\n};\nexport type WorkspaceTransport = Pick<HostTransportClient, 'request'> & Partial<Pick<HostTransportClient, 'subscribe' | 'onDisconnect' | 'close' | 'connected'>>;\nexport type WorkspaceClientOptions = { transport: WorkspaceTransport; clientId: string; token?: string };\nimport {\n VIEW_WORKSPACE_SERVICES,\n VIEW_WORKSPACE_STATE_TOPIC,\n ViewWorkspaceError,\n createWorkspaceRequest,\n requireWorkspaceString,\n} from './contract.ts';\nimport { reportWorkspaceCommandError } from './command-error.ts';\nconst VIEW_INSPECTOR_TOPIC = 'forgeax.view.inspector.changed';\n\nexport function workspaceBrowserEndpoint(endpoint: string, token: string, baseHref?: string, role?: string, frontendTicket?: string) {\n requireWorkspaceString(endpoint, 'endpoint');\n requireWorkspaceString(token, 'token');\n const url = new URL(endpoint, baseHref);\n if (url.protocol !== 'ws:' && url.protocol !== 'wss:') throw new TypeError('View frontend endpoint must use ws: or wss:');\n url.searchParams.set('token', token);\n if (role !== undefined) url.searchParams.set('role', role);\n if (role === 'frontend' && frontendTicket !== undefined) url.searchParams.set('frontendTicket', frontendTicket);\n return url.toString();\n}\n\nfunction decodeWorkspaceTransportError(error: unknown) {\n if (error instanceof ViewWorkspaceError) return error;\n const record = workspaceDiagnosticRecord(error);\n const detail = workspaceDiagnosticRecord(record.detail);\n const transportCode = record.code;\n const remoteCode =\n typeof detail.remoteCode === 'string'\n ? detail.remoteCode\n : undefined;\n const code = [transportCode, remoteCode].find(\n (candidate) => typeof candidate === 'string' && candidate.startsWith('view-'),\n );\n if (typeof code !== 'string') return error;\n const message = typeof record.message === 'string' && record.message.trim() !== ''\n ? record.message\n : String(error);\n return new ViewWorkspaceError(\n code,\n typeof record.expected === 'string' ? record.expected : message,\n typeof record.hint === 'string' ? record.hint : message,\n {\n ...(record.detail && typeof detail === 'object' ? detail : {}),\n transportCode,\n ...(remoteCode === undefined ? {} : { remoteCode }),\n ...(typeof record.name === 'string' ? { name: record.name } : {}),\n },\n );\n}\n\n/**\n * Typed client used by both the View frontend and an independent CLI process.\n * It has no local domain state: every operation goes through the Engine Host\n * workspace service and every returned value is the backend authority's value.\n */\nexport class ViewWorkspaceClient {\n declare readonly transport: WorkspaceTransport;\n declare readonly clientId: string;\n declare readonly token: string | undefined;\n declare projectSession?: ProjectSession;\n constructor({ transport, clientId, token }: Partial<WorkspaceClientOptions> = {}) {\n if (!transport || typeof transport.request !== 'function') {\n throw new TypeError('View workspace client requires an Engine Host transport');\n }\n this.transport = transport;\n this.clientId = requireWorkspaceString(clientId, 'clientId');\n this.token = token === undefined ? undefined : requireWorkspaceString(token, 'token');\n }\n\n call<T = unknown>(operation: string, args: Record<string, unknown> = {}, { signal, generation, requestId, reportError }: WorkspaceCallOptions = {}): Promise<T> {\n const request = createWorkspaceRequest(operation, args, {\n clientId: this.clientId,\n token: this.token,\n requestId,\n });\n return Promise.resolve()\n .then(() => this.transport.request<typeof request, T>(VIEW_WORKSPACE_SERVICES.call, request, { signal, generation }))\n .catch((error) => {\n const decoded = decodeWorkspaceTransportError(error);\n if (reportError !== false) reportWorkspaceCommandError(decoded, { operation, signal });\n throw decoded;\n });\n }\n\n sources<T = unknown>(options: WorkspaceOptions = {}) {\n return this.call<T>('plugins.sources', {}, options);\n }\n\n inspectPlugins<T = unknown>(options: WorkspaceOptions = {}) {\n // generation identifies the inspected source, not the workspace transport service.\n const { signal, requestId, ...args } = options;\n return this.call<T>('plugins.inspect', args, { signal, requestId });\n }\n\n watchPlugins<T = unknown>(options: WorkspaceOptions = {}) {\n const { signal, requestId, ...args } = options;\n return this.call<T>('plugins.watch', args, { signal, requestId });\n }\n\n capabilities(options: WorkspaceOptions = {}) {\n return this.transport.request(VIEW_WORKSPACE_SERVICES.capabilities, undefined, options);\n }\n\n getState(options: WorkspaceCallOptions = {}) {\n return this.call<WorkspaceState>('tabs.get', {}, options);\n }\n\n getSummary(options: WorkspaceCallOptions = {}) {\n return this.call<WorkspaceSummary>('workspace.summary', {}, options);\n }\n\n listPages(options: WorkspaceCallOptions = {}) {\n return this.call<WorkspacePages>('pages.list', {}, options);\n }\n\n revealPack(input: WorkspacePackReveal, options: WorkspaceCallOptions = {}) {\n return this.call<WorkspacePackRevealResult>('pack.reveal', input, options);\n }\n\n selectTab(tabId: string, options: WorkspaceCallOptions = {}) {\n return this.call<WorkspaceState>('tabs.select', { tabId }, options);\n }\n\n selectSceneEntity(entityId: string, { label, tabId, targetId, targetGeneration, ...options }: WorkspaceOptions = {}) {\n return this.call<WorkspaceState>(\n 'scene.select',\n {\n entityId, targetId, targetGeneration,\n ...(tabId === undefined ? {} : { tabId }),\n ...(label === undefined ? {} : { label }),\n },\n options,\n );\n }\n\n clearSceneSelection({ tabId, targetId, targetGeneration, ...options }: WorkspaceOptions = {}) {\n return this.call<WorkspaceState>('scene.clear', { targetId, targetGeneration, ...(tabId === undefined ? {} : { tabId }) }, options);\n }\n\n openProject(root: string, { tabId, expectedTargetId, ...options }: WorkspaceOptions = {}) {\n return this.call<WorkspaceState>('project.open', { root, tabId, ...(expectedTargetId === undefined ? {} : { expectedTargetId }) }, options);\n }\n\n reopenProject({ root, tabId, expectedTargetId, expectedTargetState, ...options }: WorkspaceOptions = {}) {\n return this.call<WorkspaceState>(\n 'project.reopen',\n {\n ...(root === undefined ? {} : { root }),\n ...(tabId === undefined ? {} : { tabId }),\n ...(expectedTargetId === undefined ? {} : { expectedTargetId }),\n ...(expectedTargetState === undefined ? {} : { expectedTargetState }),\n },\n options,\n );\n }\n\n closeProject(projectId: string | undefined, { tabId, ...options }: WorkspaceOptions = {}) {\n return this.call<WorkspaceState>('project.close', { projectId, tabId }, options);\n }\n\n listAssets(projectId: string, { tabId, targetId, targetGeneration, ...options }: WorkspaceOptions = {}) {\n return this.call<{ assets: WorkspaceAsset[] }>('assets.list', {\n projectId, tabId,\n ...(targetId === undefined ? {} : { targetId }),\n ...(targetGeneration === undefined ? {} : { targetGeneration }),\n }, options);\n }\n\n inspectAsset(guid: string, { projectId, tabId, targetId, targetGeneration, ...options }: WorkspaceOptions = {}) {\n return this.call<{ inspection: WorkspaceInspection }>('asset.inspect', {\n guid, tabId,\n ...(projectId === undefined ? {} : { projectId }),\n ...(targetId === undefined ? {} : { targetId }),\n ...(targetGeneration === undefined ? {} : { targetGeneration }),\n }, options);\n }\n\n rebuildAssetSource(guid: string, { projectId, tabId, targetId, targetGeneration, expectedRevision, requestId, ...options }: WorkspaceOptions = {}) {\n return this.call(\n 'asset-source.rebuild',\n {\n guid,\n tabId,\n ...(projectId === undefined ? {} : { projectId }),\n ...(targetId === undefined ? {} : { targetId }),\n ...(targetGeneration === undefined ? {} : { targetGeneration }),\n ...(expectedRevision === undefined ? {} : { expectedRevision }),\n ...(requestId === undefined ? {} : { requestId }),\n },\n options,\n );\n }\n\n coldCookAssetSource(guid: string, { projectId, tabId, targetId, targetGeneration, expectedRevision, requestId, ...options }: WorkspaceOptions = {}) {\n return this.call(\n 'asset-source.cold-cook',\n {\n guid,\n tabId,\n ...(projectId === undefined ? {} : { projectId }),\n ...(targetId === undefined ? {} : { targetId }),\n ...(targetGeneration === undefined ? {} : { targetGeneration }),\n ...(expectedRevision === undefined ? {} : { expectedRevision }),\n ...(requestId === undefined ? {} : { requestId }),\n },\n options,\n );\n }\n\n openAsset(guid: string, { projectId, width, height, tabId, targetId, targetGeneration, ...options }: WorkspaceOptions = {}) {\n return this.call(\n 'asset.open',\n {\n guid,\n tabId,\n ...(projectId === undefined ? {} : { projectId }),\n ...(targetId === undefined ? {} : { targetId }),\n ...(targetGeneration === undefined ? {} : { targetGeneration }),\n ...(width === undefined ? {} : { width }),\n ...(height === undefined ? {} : { height }),\n },\n options,\n );\n }\n\n closePreview({ targetId, targetGeneration, tabId, ...options }: WorkspaceOptions = {}) {\n return this.call(\n 'preview.close',\n { tabId, targetGeneration, ...(targetId === undefined ? {} : { targetId }) },\n options,\n );\n }\n\n capture(options: WorkspaceOptions = {}) {\n const { signal, generation, requestId, reportError, targetId, targetGeneration, tabId, ...args } = options;\n return this.call(\n 'preview.capture',\n { tabId, targetGeneration, ...(targetId === undefined ? {} : { targetId }), ...args },\n { signal, generation, requestId, ...(reportError === undefined ? {} : { reportError }) },\n );\n }\n\n resizePreview({ targetId, targetGeneration, width, height, tabId, ...options }: WorkspaceOptions = {}) {\n return this.call(\n 'preview.resize',\n {\n tabId,\n targetGeneration,\n ...(targetId === undefined ? {} : { targetId }),\n width,\n height,\n },\n options,\n );\n }\n\n getCamera({ targetId, targetGeneration, tabId, ...options }: WorkspaceOptions = {}) {\n return this.call<EngineWorkspaceCameraResult>('camera.get', { tabId, targetGeneration, ...(targetId === undefined ? {} : { targetId }) }, options);\n }\n\n beginCamera({ targetId, targetGeneration, baseVersion, interactionId, tabId, ...options }: WorkspaceOptions = {}) {\n return this.call<EngineWorkspaceCameraResult>(\n 'camera.begin',\n {\n tabId,\n targetGeneration,\n ...(targetId === undefined ? {} : { targetId }),\n baseVersion,\n ...(interactionId === undefined ? {} : { interactionId }),\n },\n options,\n );\n }\n\n updateCamera({ targetId, targetGeneration, interactionId, camera, input, tabId, ...options }: WorkspaceOptions = {}) {\n return this.call<EngineWorkspaceCameraResult>(\n 'camera.update',\n {\n tabId,\n targetGeneration,\n targetId,\n interactionId,\n ...(camera === undefined ? {} : { camera }),\n ...(input === undefined ? {} : { input }),\n },\n options,\n );\n }\n\n commitCamera({ targetId, targetGeneration, interactionId, operationId, expectedVersion, camera, tabId, ...options }: WorkspaceOptions = {}) {\n return this.call<EngineWorkspaceCameraResult>(\n 'camera.commit',\n { tabId, targetId, targetGeneration, interactionId, operationId, expectedVersion, camera },\n options,\n );\n }\n\n abortCamera({ targetId, targetGeneration, interactionId, reason, tabId, ...options }: WorkspaceOptions = {}) {\n return this.call<EngineWorkspaceCameraResult>(\n 'camera.abort',\n {\n tabId,\n targetGeneration,\n targetId,\n interactionId,\n ...(reason === undefined ? {} : { reason }),\n },\n options,\n );\n }\n\n getSceneTree({ projectId, targetId, targetGeneration, tabId, offset, limit, revision, ...options }: WorkspaceOptions = {}) {\n return this.call<Awaited<ReturnType<EngineWorkspaceTargetTools['tree']>>>(\n 'scene-tree.get',\n {\n tabId,\n ...(projectId === undefined ? {} : { projectId }),\n ...(targetId === undefined ? {} : { targetId }),\n ...(targetGeneration === undefined ? {} : { targetGeneration }),\n ...(offset === undefined ? {} : { offset }),\n ...(limit === undefined ? {} : { limit }),\n ...(revision === undefined ? {} : { revision }),\n },\n options,\n );\n }\n\n subscribe(listener: (state: WorkspaceState) => void) {\n if (typeof this.transport.subscribe !== 'function') return () => {};\n return this.transport.subscribe(VIEW_WORKSPACE_STATE_TOPIC, listener);\n }\n\n subscribeInspector(listener: (value: unknown) => void) {\n return this.transport.subscribe?.(VIEW_INSPECTOR_TOPIC, listener) ?? (() => {});\n }\n\n onDisconnect(listener: Parameters<HostTransportClient['onDisconnect']>[0]) {\n return this.transport.onDisconnect?.(listener) ?? (() => {});\n }\n\n close(reason?: unknown) {\n this.transport.close?.(reason);\n }\n}\n\nexport function createViewWorkspaceClient(options: WorkspaceClientOptions) {\n return new ViewWorkspaceClient(options);\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/api.ts"],
4
- "sourcesContent": ["export const VIEW_WORKSPACE_CORE_OPERATION_DESCRIPTIONS = Object.freeze([\n { id: 'workspace.summary', path: ['workspace', 'summary'], summary: 'Read bounded project, phase and target identities.' },\n { id: 'pages.list', path: ['pages', 'list'], summary: 'Read bounded identities and target summaries for connected View pages.' },\n { id: 'pack.reveal', path: ['pack', 'reveal'], summary: 'Reveal one exact Pack revision in one connected View page and wait for a visible receipt.' },\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,qBAAqB,MAAM,CAAC,aAAa,SAAS,GAAG,SAAS,qDAAqD;AAAA,EACzH,EAAE,IAAI,cAAc,MAAM,CAAC,SAAS,MAAM,GAAG,SAAS,yEAAyE;AAAA,EAC/H,EAAE,IAAI,eAAe,MAAM,CAAC,QAAQ,QAAQ,GAAG,SAAS,4FAA4F;AAAA,EACpJ,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
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli-contributions.ts"],
4
- "sourcesContent": ["import type { ViewCliOptions } from '@forgeax/view-viewer/config';\nimport { contract } from './commands.ts';\nimport {\n createViewCliContributions as createProductCliContributions,\n VIEW_CLI_CONTRIBUTION_ID,\n} from '@forgeax/view-viewer/cli';\n\nimport { runViewProjectOpen } from './view-project-open.ts';\nimport {\n runViewStartInteractive,\n runViewStatus,\n runViewStop,\n} from './view-start.ts';\nimport { workspaceCoreCliContributions } from '@forgeax/view-workspace-core/cli';\n\nexport { VIEW_CLI_CONTRIBUTION_ID };\n\nexport function createViewHostCliContributions() {\n const executors = {\n start: runViewStartInteractive,\n status: runViewStatus,\n stop: runViewStop,\n projectOpen: runViewProjectOpen,\n };\n return Object.freeze(contract.commands.map(command => ({\n id: `forgeax.${command.id}`, path: command.path, summary: command.summary, ...('exportName' in command ? { run: executors[command.exportName] } : {}),\n })));\n}\n\nfunction hasWorkspaceCapabilities(options?: ViewCliOptions) {\n return Array.isArray(options?.capabilities) || (options?.capabilities !== undefined && 'operations' in options.capabilities && Array.isArray(options.capabilities.operations));\n}\n\nfunction filterCapabilities(contributions: typeof workspaceCoreCliContributions, options?: ViewCliOptions) {\n const declared = Array.isArray(options?.capabilities)\n ? options.capabilities\n : options?.capabilities && 'operations' in options.capabilities ? options.capabilities.operations : undefined;\n if (!Array.isArray(declared)) return contributions;\n const operations = new Set(declared);\n return contributions.filter(({ operation }) => operations.has(operation));\n}\n\n/** Compose package lifecycle and explicitly active workspace/product commands. */\nexport function createViewCliContributions(options?: ViewCliOptions) {\n return Object.freeze([\n ...createViewHostCliContributions(),\n ...(hasWorkspaceCapabilities(options)\n ? filterCapabilities(workspaceCoreCliContributions, options)\n : []),\n ...createProductCliContributions(options),\n ]);\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAiBO,SAAS,iCAAiC;AAC/C,QAAM,YAAY;AAAA,IAChB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AACA,SAAO,OAAO,OAAO,SAAS,SAAS,IAAI,cAAY;AAAA,IACrD,IAAI,WAAW,QAAQ,EAAE;AAAA,IAAI,MAAM,QAAQ;AAAA,IAAM,SAAS,QAAQ;AAAA,IAAS,GAAI,gBAAgB,UAAU,EAAE,KAAK,UAAU,QAAQ,UAAU,EAAE,IAAI,CAAC;AAAA,EACrJ,EAAE,CAAC;AACL;AAEA,SAAS,yBAAyB,SAA0B;AAC1D,SAAO,MAAM,QAAQ,SAAS,YAAY,KAAM,SAAS,iBAAiB,UAAa,gBAAgB,QAAQ,gBAAgB,MAAM,QAAQ,QAAQ,aAAa,UAAU;AAC9K;AAEA,SAAS,mBAAmB,eAAqD,SAA0B;AACzG,QAAM,WAAW,MAAM,QAAQ,SAAS,YAAY,IAChD,QAAQ,eACR,SAAS,gBAAgB,gBAAgB,QAAQ,eAAe,QAAQ,aAAa,aAAa;AACtG,MAAI,CAAC,MAAM,QAAQ,QAAQ,EAAG,QAAO;AACrC,QAAM,aAAa,IAAI,IAAI,QAAQ;AACnC,SAAO,cAAc,OAAO,CAAC,EAAE,UAAU,MAAM,WAAW,IAAI,SAAS,CAAC;AAC1E;AAGO,SAASA,4BAA2B,SAA0B;AACnE,SAAO,OAAO,OAAO;AAAA,IACnB,GAAG,+BAA+B;AAAA,IAClC,GAAI,yBAAyB,OAAO,IAChC,mBAAmB,+BAA+B,OAAO,IACzD,CAAC;AAAA,IACL,GAAG,2BAA8B,OAAO;AAAA,EAC1C,CAAC;AACH;",
6
- "names": ["createViewCliContributions"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../packages/view-workspace-core/src/tool-runtime.ts"],
4
- "sourcesContent": ["import type { ToolApi, ToolApiRunOptions, ToolRuntimeError, ToolSchema, JsonValue } from '@forgeax/engine-tool-runtime';\nimport type { WorkspaceRequest } from './contract.ts';\nimport type { ViewWorkspaceBroker } from './broker.ts';\nimport { workspaceDiagnosticRecord } from './command-error.ts';\nexport type WorkspaceOperation = { id: string; operation?: string; path?: readonly string[]; title?: string; summary?: string };\nimport { defineTool, toolJsonSchema } from '@forgeax/engine-tool-runtime';\n\nimport {\n VIEW_WORKSPACE_API_VERSION,\n ViewWorkspaceError,\n cloneWorkspaceValue,\n workspaceError,\n} from './contract.ts';\n\nfunction safeClone<T>(value: T) {\n try {\n return cloneWorkspaceValue(value);\n } catch {\n return null;\n }\n}\n\nexport function workspaceToolValue(value: unknown) {\n return { ok: true, value: safeClone(value) };\n}\n\nfunction toolFailureError(failure: ToolRuntimeError) {\n const detail = workspaceDiagnosticRecord(failure?.detail);\n const code = [detail?.code, detail?.remoteCode].find(\n (candidate) => typeof candidate === 'string' && candidate.startsWith('view-'),\n );\n const payload = detail?.payload ?? detail?.detail;\n const diagnostic =\n (typeof failure?.hint === 'string' && failure.hint.trim() !== '' ? failure.hint : undefined)\n ?? (typeof failure?.expected === 'string' && failure.expected.trim() !== '' ? failure.expected : undefined)\n ?? (failure === undefined || failure === null ? undefined : String(failure));\n if (typeof code === 'string') {\n return workspaceError(\n code,\n typeof detail.expected === 'string' ? detail.expected : failure.expected,\n typeof detail.hint === 'string' ? detail.hint : diagnostic,\n {\n failure: safeClone(failure) ?? { failure },\n ...(payload && typeof payload === 'object' ? { cause: payload } : {}),\n },\n );\n }\n return workspaceError(\n 'view-workspace-provider-failed',\n typeof failure?.expected === 'string' ? failure.expected : diagnostic,\n diagnostic,\n { failure: safeClone(failure) ?? { failure } },\n );\n}\n\nexport async function runWorkspaceToolApi(\n api: ToolApi,\n {\n operation,\n args,\n clientId,\n token,\n requestId,\n caller,\n signal,\n providerId,\n generation,\n sourceId = 'view-backend',\n apiVersion = VIEW_WORKSPACE_API_VERSION,\n }: ToolApiRunOptions & { operation: string; args?: Record<string, unknown>; clientId: string; token?: string; requestId?: string; apiVersion?: string },\n) {\n const run = api.run(\n operation,\n {\n apiVersion,\n operation,\n ...args,\n args,\n clientId,\n token,\n requestId,\n },\n { sourceId, providerId, generation, caller, signal },\n );\n const terminal = await run.terminal;\n if (terminal.outcome === 'failed') throw toolFailureError(terminal.failure);\n const result = workspaceDiagnosticRecord(terminal.result);\n if (result.ok === false) {\n const error = workspaceDiagnosticRecord(result.error);\n throw workspaceError(\n typeof error.code === 'string' ? error.code : 'view-workspace-provider-failed',\n typeof error.expected === 'string' ? error.expected : undefined,\n typeof error.hint === 'string' ? error.hint : undefined,\n workspaceDiagnosticRecord(error.detail),\n );\n }\n return terminal.result;\n}\n\nexport function defineWorkspaceOperations(operations: readonly WorkspaceOperation[]) {\n return Object.freeze(\n operations.map((operation) =>\n Object.freeze({\n path: operation.id.split('.'),\n title: operation.id,\n summary: `View workspace operation ${operation.id}.`,\n ...operation,\n }),\n ),\n );\n}\n\nexport function createWorkspaceToolContributions(workspace: Pick<ViewWorkspaceBroker, 'call'>, operations: ReturnType<typeof defineWorkspaceOperations>) {\n const schema: ToolSchema<unknown> = {\n parse(value: unknown) {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? { ok: true, value: value as WorkspaceRequest }\n : { ok: false, error: 'workspace API arguments must be an object' };\n },\n describe: 'JSON object accepted by the View workspace operation.',\n };\n return operations.map((description) =>\n defineTool(\n {\n id: description.id,\n path: description.path,\n title: description.title,\n summary: description.summary,\n realm: 'host',\n argsSchema: schema,\n resultSchema: toolJsonSchema({}),\n inputSchema: { type: 'object' },\n outputSchema: {},\n evidence: [],\n },\n async (input, context) => {\n const envelope = input as WorkspaceRequest;\n try {\n return workspaceToolValue(\n await workspace.call(\n {\n apiVersion: VIEW_WORKSPACE_API_VERSION,\n operation: description.operation ?? description.id,\n clientId: envelope.clientId,\n requestId: envelope.requestId,\n args: envelope.args,\n ...(envelope.token === undefined ? {} : { token: envelope.token }),\n },\n { signal: context.signal, caller: context.caller },\n ),\n );\n } catch (error) {\n if (error instanceof ViewWorkspaceError) {\n return {\n ok: false,\n error: {\n code: error.code,\n expected: error.expected,\n hint: error.hint,\n detail: safeClone(error.detail) as JsonValue,\n },\n };\n }\n throw error;\n }\n },\n ),\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/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, WorkspaceSummary, WorkspacePages, WorkspacePackReveal, WorkspacePreview, WorkspaceRequest, WorkspaceResourceOpen, WorkspaceTab } from './contract.ts';\nimport type { HostCallerIdentity, 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_PACK_SOURCES_SERVICE, VIEW_PACK_REVEAL_TOPIC, VIEW_PACK_REVEAL_ACK_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 PackSourceListing = { sources: readonly { sourcePath: string; revision?: string; packageId?: string; outputs: readonly { guid: string; kind: string; sourceKey?: string }[]; diagnostic?: { code: string; hint: string } }[]; hasMore: boolean };\nexport type BrokerOptions = { engine?: EngineWorkspaceRuntime; projectIntent?: () => string | undefined; engineForCaller?: (caller?: ToolCallerIdentity, targetId?: string) => EngineWorkspaceRuntime | undefined; toolApi?: ToolApi; display?: (caller?: ToolCallerIdentity) => { state?: string; occupancy?: Pick<WorkspaceTab, 'run' | 'target' | 'targetId'> | null } | undefined; accessToken?: string; authorize?: WorkspaceAuthorization; packSources?: (projectRoot: string) => Promise<PackSourceListing> };\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 'workspace.summary': (workspace) => workspace.summary(),\n 'pages.list': (workspace) => workspace.pages(),\n 'pack.reveal': (workspace, args, context) => workspace.revealPack({\n projectId: requireWorkspaceString(args.projectId, 'projectId'),\n sourcePath: requireWorkspaceString(args.sourcePath, 'sourcePath'),\n revision: requireWorkspaceString(args.revision, 'revision'),\n ...(args.packageId === undefined ? {} : { packageId: requireWorkspaceString(args.packageId, 'packageId') }),\n ...(args.connectionId === undefined ? {} : { connectionId: requireWorkspaceString(args.connectionId, 'connectionId') }),\n }, context.signal),\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});\nconst PAGE_OPERATIONS = new Set([\n 'tabs.get', 'tabs.select', 'target.select', 'scene.select', 'scene.pick', 'scene.clear',\n 'asset.open', 'preview.close', 'play.start', 'play.ready', 'play.stop',\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 engineForCaller: BrokerOptions['engineForCaller'];\n declare readonly projectIntent: BrokerOptions['projectIntent'];\n declare readonly caller: ToolCallerIdentity | 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 readonly packSources: BrokerOptions['packSources'];\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 declare readonly pageSessions: Map<string, { broker: ViewWorkspaceBroker; unsubscribe: () => void }>;\n declare transport?: HostTransportServer;\n declare readonly pendingReveals: Map<string, { connectionId: string; projectId: string; sourcePath: string; revision: string; settle: (value: unknown) => void }>;\n constructor({ engine, engineForCaller, projectIntent, toolApi, display = () => undefined, accessToken = randomUUID(), authorize, packSources }: BrokerOptions = {}, caller?: ToolCallerIdentity) {\n this.engine = engine;\n this.engineForCaller = engineForCaller;\n this.projectIntent = projectIntent;\n this.caller = caller;\n this.toolApi = toolApi;\n this.display = display;\n this.accessToken = accessToken;\n this.authorize = authorize;\n this.packSources = packSources;\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 this.pageSessions = new Map();\n this.pendingReveals = new Map();\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 summary(): WorkspaceSummary {\n const project = this.project;\n const previews = this.previews();\n const projectTarget = this.projectTarget && this.engine?.preview?.target.targetId === this.projectTarget.targetId\n ? this.engine.preview.target : this.projectTarget;\n const active = [\n ...(projectTarget ? [{ target: projectTarget, role: 'project' as const }] : []),\n ...(this.engine?.play ? [{ target: this.engine.play.target, role: 'play' as const }] : []),\n ];\n const targets = [...active, ...previews.slice(0, Math.max(0, 16 - active.length))\n .map(preview => ({ target: preview.target, role: 'preview' as const }))];\n return {\n revision: this.revision,\n project: project ? { id: project.id, root: project.root, name: project.name } : null,\n projectPhase: this.engine?.project?.phase ?? null,\n browserGeneration: this.engine?.project?.browserGeneration ?? null,\n targets: targets.map(({ target, role }) => ({\n targetId: target.targetId, ...(target.generation === undefined ? {} : { generation: target.generation }), role,\n })),\n hasMoreTargets: active.length + previews.length > 16,\n };\n }\n\n pages(): WorkspacePages {\n const entries = [...this.pageSessions.entries()];\n return { pages: entries.slice(0, 16).map(([connectionId, page]) => ({ connectionId, ...page.broker.summary() })),\n hasMorePages: entries.length > 16 };\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.project && this.projectIntent?.() ? { projectIntent: { root: this.projectIntent()! } } : {}),\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 = {}): Promise<unknown> {\n const request = assertWorkspaceRequest(rawRequest);\n if (request.operation === 'pages.list' || request.operation === 'pack.reveal') {\n await this.authorizeRequest(request, caller);\n return UI_OPERATIONS[request.operation](this, request.args, { signal, caller, clientId: request.clientId });\n }\n const page = caller?.connectionId && this.pageSessions.get(caller.connectionId);\n if (page) return page.broker.call(rawRequest, { signal, caller });\n await this.authorizeRequest(request, caller);\n if (PAGE_OPERATIONS.has(request.operation) && this.pageSessions.size > 0) {\n if (this.pageSessions.size !== 1) throw workspaceError('view-page-ambiguous',\n 'one View page for this page operation', 'Select the exact View page before retrying.');\n return this.pageSessions.values().next().value!.broker.call(request, { signal, caller });\n }\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 caller ??= this.caller;\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 if (this.caller && !inspector && !presentation && !operation.startsWith('run.') && input.targetId === undefined && this.projectTarget)\n input.targetId = this.projectTarget.targetId;\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 if (!this.pageSessions.has(connectionId) && ![...this.pendingReveals.values()].some(pending => pending.connectionId === connectionId)) return;\n for (const [requestId, pending] of this.pendingReveals) {\n if (pending.connectionId !== connectionId) continue;\n this.pendingReveals.delete(requestId);\n pending.settle({ ok: false, code: 'view-page-gone', requestId });\n }\n const page = this.pageSessions.get(connectionId);\n if (page) {\n this.pageSessions.delete(connectionId);\n page.unsubscribe();\n await page.broker.dispose();\n }\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 /** One accepted View frontend owns one presentation projection and event stream. */\n attachPageSession(caller: HostCallerIdentity, transport: HostTransportServer) {\n const engine = this.engineForCaller ? this.engineForCaller(caller) : this.engine;\n const projectTarget = engine?.project?.target;\n const projectCaller = projectTarget && caller.sourceId === `forgeax-workspace:${projectTarget.sessionId}:${projectTarget.targetId}`;\n if (caller.kind !== 'frontend' || (caller.sourceId !== 'view-frontend' && !projectCaller) || this.pageSessions.has(caller.connectionId)) return;\n const broker = new ViewWorkspaceBroker({\n engine, toolApi: this.toolApi, display: () => this.display(caller),\n ...(this.engineForCaller && caller.sourceId === 'view-frontend'\n ? { projectIntent: () => this.project?.root } : {}),\n accessToken: this.accessToken, authorize: this.authorize, packSources: this.packSources,\n }, caller);\n broker.snapshot();\n if (engine === this.engine) broker.assets = this.assets;\n const unsubscribe = broker.subscribe(state => transport.publish(VIEW_WORKSPACE_STATE_TOPIC, state, { connectionId: caller.connectionId }));\n this.pageSessions.set(caller.connectionId, { broker, unsubscribe });\n }\n publishPageSessions() {\n for (const { broker } of this.pageSessions.values()) {\n broker.snapshot();\n if (broker.engine === this.engine && this.assets !== null) broker.assets = this.assets;\n broker.changed();\n }\n }\n async revealPack(input: WorkspacePackReveal, signal?: AbortSignal) {\n const transport = this.transport;\n if (!transport) return { ok: false, code: 'view-page-unavailable' };\n if (signal?.aborted) return { ok: false, code: 'view-reveal-cancelled' };\n const candidates = [...this.pageSessions.keys()];\n if (!input.connectionId && candidates.length !== 1)\n return { ok: false, code: candidates.length ? 'view-page-ambiguous' : 'view-page-unavailable', candidates };\n const connectionId = input.connectionId ?? candidates[0];\n const page = this.pageSessions.get(connectionId);\n if (!page) return { ok: false, code: 'view-page-gone' };\n const project = page.broker.project;\n if (!project || project.id !== input.projectId) return { ok: false, code: 'view-project-stale' };\n if (!this.packSources) return { ok: false, code: 'view-pack-sources-unavailable' };\n const source = (await this.packSources(project.root)).sources.find(row => row.sourcePath === input.sourcePath);\n if (signal?.aborted) return { ok: false, code: 'view-reveal-cancelled' };\n if (!source || source.revision !== input.revision || (input.packageId && source.packageId !== input.packageId))\n return { ok: false, code: 'view-pack-stale' };\n const requestId = randomUUID();\n const intent = { requestId, connectionId, projectId: input.projectId,\n sourcePath: input.sourcePath, revision: input.revision,\n ...(source.packageId ? { packageId: source.packageId } : {}) };\n return new Promise<unknown>(resolve => {\n const retire = (code: string) => {\n this.pendingReveals.delete(requestId);\n transport.publish(VIEW_PACK_REVEAL_TOPIC, { ...intent, cancelled: true }, { connectionId });\n settle({ ok: false, code, requestId });\n };\n const cancel = () => {\n retire('view-reveal-cancelled');\n };\n const settle = (value: unknown) => {\n clearTimeout(timeout);\n signal?.removeEventListener('abort', cancel);\n resolve(value);\n };\n const timeout = setTimeout(() => {\n retire('view-reveal-timeout');\n }, 12000);\n timeout.unref?.();\n this.pendingReveals.set(requestId, { connectionId, projectId: input.projectId, sourcePath: input.sourcePath,\n revision: input.revision, settle });\n signal?.addEventListener('abort', cancel, { once: true });\n transport.publish(VIEW_PACK_REVEAL_TOPIC, intent, { connectionId });\n });\n }\n registerTransport(transport: HostTransportServer, { routeThroughTools = false } = {}) {\n this.transport = transport;\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 // The top-level View URL connects as view-frontend. Once a project\n // opens, its full View shell lives on the exact Engine target page.\n // That caller may connect before the project handle is published,\n // so admit it on its first workspace request as well as connect.\n this.attachPageSession(caller, transport);\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, caller }) => {\n try { return await readWorkspaceFilePreview(this.pageSessions.get(caller.connectionId)?.broker ?? 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 packSources = transport.register<{ projectId?: unknown }, unknown>(VIEW_PACK_SOURCES_SERVICE, async ({ payload, caller }) => {\n const project = (this.pageSessions.get(caller.connectionId)?.broker ?? this).project;\n if (!project || payload?.projectId !== project.id) throw workspaceError('view-project-stale', 'the currently open project', 'Refresh the workspace before listing Pack sources.');\n if (!this.packSources) throw workspaceError('view-pack-sources-unavailable', 'an installed Pack source provider', 'Update the View Host Pack.');\n return this.packSources(project.root);\n });\n const revealAck = transport.register<{ requestId?: unknown; shown?: unknown; projectId?: unknown; sourcePath?: unknown; revision?: unknown; reason?: unknown }, unknown>(VIEW_PACK_REVEAL_ACK_SERVICE, async ({ payload, caller }) => {\n const requestId = typeof payload?.requestId === 'string' ? payload.requestId : '';\n const pending = this.pendingReveals.get(requestId);\n if (!pending || pending.connectionId !== caller.connectionId) return { ok: false, code: 'view-reveal-stale' };\n if (pending.projectId !== payload.projectId || pending.sourcePath !== payload.sourcePath || pending.revision !== payload.revision)\n return { ok: false, code: 'view-reveal-identity-mismatch' };\n const page = this.pageSessions.get(caller.connectionId);\n const project = page?.broker.project;\n const source = project && this.packSources\n ? (await this.packSources(project.root)).sources.find(row => row.sourcePath === pending.sourcePath) : undefined;\n // A visible old card cannot confirm a changed source, project or retired page.\n if (this.pendingReveals.get(requestId) !== pending) return { ok: false, code: 'view-reveal-stale' };\n if (!project || project.id !== pending.projectId || source?.revision !== pending.revision) {\n this.pendingReveals.delete(requestId);\n pending.settle({ ok: false, code: 'view-reveal-stale', requestId });\n return { ok: false, code: 'view-reveal-stale' };\n }\n this.pendingReveals.delete(requestId);\n pending.settle({ ok: payload.shown === true, code: payload.shown === true ? 'shown' : 'view-reveal-not-shown',\n requestId, connectionId: caller.connectionId, projectId: payload.projectId,\n sourcePath: payload.sourcePath, revision: payload.revision,\n ...(typeof payload.reason === 'string' ? { reason: payload.reason.slice(0, 160) } : {}) });\n return { ok: true };\n });\n const subscription = this.subscribe(state => transport.publish(VIEW_WORKSPACE_STATE_TOPIC, state, {\n excludeConnectionIds: [...this.pageSessions.keys()],\n }));\n const removeConnect = transport.onClientConnect(caller => this.attachPageSession(caller, transport));\n const removeDisconnect = transport.onClientDisconnect(caller => { void this.revokeConnection(caller.connectionId); });\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 this.publishPageSessions();\n return;\n }\n this.catalogEpoch = epoch;\n for (const broker of [this, ...[...this.pageSessions.values()].map(page => page.broker)]) {\n broker.catalogEpoch = epoch;\n const project = broker.project;\n if (!project || (broker.engine?.project?.phase !== undefined && broker.engine.project.phase !== 'running')) continue;\n const lost = broker.workspaceTargetLost;\n void broker.invoke('assets.list', { projectId: project.id }).catch(() => {\n broker.workspaceTargetLost = lost;\n }).finally(() => broker.changed());\n }\n this.publishPageSessions();\n });\n return () => { if (this.transport === transport) this.transport = undefined; capabilities(); call(); fileGet(); packSources(); revealAck(); subscription(); removeConnect(); removeDisconnect(); engineSubscription(); observer.close(); };\n }\n async dispose() {\n this.selectionAbort?.abort(); this.disposing = true; this.listeners.clear();\n for (const [requestId, pending] of this.pendingReveals) {\n this.pendingReveals.delete(requestId);\n pending.settle({ ok: false, code: 'view-page-gone', requestId });\n }\n for (const [connectionId, page] of this.pageSessions) {\n this.pageSessions.delete(connectionId);\n page.unsubscribe();\n await page.broker.dispose();\n }\n }\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": ["resolve"]
7
- }