@forgeax/view 0.5.0-dev.13604.c415409c3b9d → 0.5.0-dev.13619.c20ebf66cef4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/README.md +50 -6
  2. package/dist/build-revision.json +1 -1
  3. package/dist/modules/backend.mjs +34 -34
  4. package/dist/modules/browser.mjs +55 -49
  5. package/dist/modules/chunks/{chunk-B6QUJ33G.mjs → chunk-25PFC2DY.mjs} +3 -3
  6. package/dist/modules/chunks/{chunk-6KM24NH6.mjs → chunk-3Y5WN22T.mjs} +3 -3
  7. package/dist/modules/chunks/chunk-3Y5WN22T.mjs.map +7 -0
  8. package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs → chunk-43L37UYV.mjs} +6 -6
  9. package/dist/modules/chunks/{chunk-FNRGLCZW.mjs → chunk-4RTL3LS3.mjs} +36 -10
  10. package/dist/modules/chunks/chunk-4RTL3LS3.mjs.map +7 -0
  11. package/dist/modules/chunks/{chunk-WVU3CQ62.mjs → chunk-4ZI5DFBR.mjs} +3 -3
  12. package/dist/modules/chunks/{chunk-47RJSHLM.mjs → chunk-5HJ336VM.mjs} +3 -3
  13. package/dist/modules/chunks/{chunk-PVP5YBNR.mjs → chunk-5N5FDO5Y.mjs} +2 -2
  14. package/dist/modules/chunks/{chunk-APD2EWSZ.mjs → chunk-5PZL6W3F.mjs} +2 -2
  15. package/dist/modules/chunks/{chunk-LZ57Y73Z.mjs → chunk-5SHQXSSM.mjs} +9 -7
  16. package/dist/modules/chunks/chunk-5SHQXSSM.mjs.map +7 -0
  17. package/dist/modules/chunks/{chunk-KI4WGTWL.mjs → chunk-5WVRCLHN.mjs} +2 -2
  18. package/dist/modules/chunks/{chunk-YNHEYXDG.mjs → chunk-7MQIGD6Q.mjs} +3 -3
  19. package/dist/modules/chunks/{chunk-F5RLQAPN.mjs → chunk-7YWMB7HV.mjs} +3 -3
  20. package/dist/modules/chunks/{chunk-FICPCJKR.mjs → chunk-A22PJUZM.mjs} +3 -3
  21. package/dist/modules/chunks/{chunk-P5XMFZY4.mjs → chunk-A7HXBQUG.mjs} +2 -2
  22. package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs → chunk-AOD6XLJC.mjs} +3 -3
  23. package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs.map → chunk-AOD6XLJC.mjs.map} +2 -2
  24. package/dist/modules/chunks/{chunk-HRKW766Y.mjs → chunk-AZHCKPUL.mjs} +2 -2
  25. package/dist/modules/chunks/chunk-BJTFQQQR.mjs +13 -0
  26. package/dist/modules/chunks/chunk-BJTFQQQR.mjs.map +7 -0
  27. package/dist/modules/chunks/{chunk-6I7RY73G.mjs → chunk-CEB76QBE.mjs} +4 -4
  28. package/dist/modules/chunks/{chunk-VKNIYV2W.mjs → chunk-CRPXFJ6K.mjs} +202 -35
  29. package/dist/modules/chunks/chunk-CRPXFJ6K.mjs.map +7 -0
  30. package/dist/modules/chunks/{chunk-U64FRQKP.mjs → chunk-CVIF6DYH.mjs} +3 -3
  31. package/dist/modules/chunks/{chunk-DWT3TA6M.mjs → chunk-CYQ7BITZ.mjs} +9 -8
  32. package/dist/modules/chunks/chunk-CYQ7BITZ.mjs.map +7 -0
  33. package/dist/modules/chunks/{chunk-OQXDADAS.mjs → chunk-D3GX7HWI.mjs} +6 -6
  34. package/dist/modules/chunks/chunk-D3GX7HWI.mjs.map +7 -0
  35. package/dist/modules/chunks/{chunk-XQYF2P6M.mjs → chunk-D3ISMGT6.mjs} +7 -7
  36. package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs → chunk-DC3PU6SO.mjs} +2 -2
  37. package/dist/modules/chunks/{chunk-4T3D67CS.mjs → chunk-DJKXBCZH.mjs} +7 -7
  38. package/dist/modules/chunks/{chunk-E3PJGTLI.mjs → chunk-DX4M6LZH.mjs} +5 -5
  39. package/dist/modules/chunks/{chunk-IZAHIOFU.mjs → chunk-EOW4JGVV.mjs} +6 -6
  40. package/dist/modules/chunks/{chunk-U5R6MVM4.mjs → chunk-EQRDY5CQ.mjs} +2 -2
  41. package/dist/modules/chunks/{chunk-7IGFAI5H.mjs → chunk-EW7VMNZA.mjs} +5 -5
  42. package/dist/modules/chunks/{chunk-FMCHH5R4.mjs → chunk-FSSKCXPL.mjs} +3 -3
  43. package/dist/modules/chunks/{chunk-357UOBAS.mjs → chunk-FSYQ3LBQ.mjs} +2 -2
  44. package/dist/modules/chunks/{chunk-D25SR5FS.mjs → chunk-FVSDKOXR.mjs} +3 -3
  45. package/dist/modules/chunks/{chunk-XMP4THLF.mjs → chunk-J7QRK3FU.mjs} +4 -4
  46. package/dist/modules/chunks/{chunk-D57DDEV2.mjs → chunk-JE4N575J.mjs} +5 -5
  47. package/dist/modules/chunks/{chunk-ZIDEETK4.mjs → chunk-JKDBKS7P.mjs} +3 -3
  48. package/dist/modules/chunks/{chunk-U5J7OTEB.mjs → chunk-K4C5WOTT.mjs} +3 -3
  49. package/dist/modules/chunks/{chunk-QUFVUMSY.mjs → chunk-KOBAWLZL.mjs} +2 -2
  50. package/dist/modules/chunks/{chunk-CX5WREJC.mjs → chunk-KY2AWNDR.mjs} +2 -2
  51. package/dist/modules/chunks/{chunk-RJVOH7G2.mjs → chunk-L24HPIQP.mjs} +27 -27
  52. package/dist/modules/chunks/{chunk-27XASYEH.mjs → chunk-LCVL3V5U.mjs} +17 -11
  53. package/dist/modules/chunks/chunk-LCVL3V5U.mjs.map +7 -0
  54. package/dist/modules/chunks/{chunk-PJFFCRRD.mjs → chunk-LOVO3P2Q.mjs} +2 -2
  55. package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs → chunk-M66NDY35.mjs} +3 -3
  56. package/dist/modules/chunks/{chunk-EZSGDSCC.mjs → chunk-M7XSCLYV.mjs} +18 -4
  57. package/dist/modules/chunks/chunk-M7XSCLYV.mjs.map +7 -0
  58. package/dist/modules/chunks/{chunk-YLCJNKIW.mjs → chunk-MFEFV3YF.mjs} +70 -30
  59. package/dist/modules/chunks/chunk-MFEFV3YF.mjs.map +7 -0
  60. package/dist/modules/chunks/{chunk-55F55BQY.mjs → chunk-MUBV2LNK.mjs} +3 -3
  61. package/dist/modules/chunks/{chunk-M6S5YA6X.mjs → chunk-NHNPQ3ZS.mjs} +3 -3
  62. package/dist/modules/chunks/{chunk-STQPRNEO.mjs → chunk-NSPN5OQ5.mjs} +2 -2
  63. package/dist/modules/chunks/{chunk-XE6ITXHT.mjs → chunk-NZ4N7AVG.mjs} +2 -2
  64. package/dist/modules/chunks/{chunk-KAGFU64Y.mjs → chunk-OGFZB75B.mjs} +2 -2
  65. package/dist/modules/chunks/{chunk-EWSCJF77.mjs → chunk-OS7BK3FO.mjs} +2 -2
  66. package/dist/modules/chunks/{chunk-HWZCLROY.mjs → chunk-P27F2TZN.mjs} +248 -42
  67. package/dist/modules/chunks/chunk-P27F2TZN.mjs.map +7 -0
  68. package/dist/modules/chunks/{chunk-5W7SC5D4.mjs → chunk-P2Y73QJJ.mjs} +11 -1
  69. package/dist/modules/chunks/{chunk-5W7SC5D4.mjs.map → chunk-P2Y73QJJ.mjs.map} +2 -2
  70. package/dist/modules/chunks/{chunk-U6UMATPV.mjs → chunk-P3ZW2T37.mjs} +3 -3
  71. package/dist/modules/chunks/{chunk-INTTYJVW.mjs → chunk-PHCUCHVL.mjs} +2 -2
  72. package/dist/modules/chunks/{chunk-JK7K7RG3.mjs → chunk-QNJL265P.mjs} +4 -4
  73. package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs → chunk-QNSUBUZF.mjs} +1 -1
  74. package/dist/modules/chunks/{chunk-5YTMN435.mjs → chunk-QNUBIFAY.mjs} +13 -3
  75. package/dist/modules/chunks/chunk-QNUBIFAY.mjs.map +7 -0
  76. package/dist/modules/chunks/{chunk-TXLD7JI5.mjs → chunk-QQP7ZGQD.mjs} +2 -2
  77. package/dist/modules/chunks/{chunk-E3Z7GLFU.mjs → chunk-QYJZ3SOV.mjs} +12 -1
  78. package/dist/modules/chunks/chunk-QYJZ3SOV.mjs.map +7 -0
  79. package/dist/modules/chunks/{chunk-PZIAKZJC.mjs → chunk-R6MT6F3T.mjs} +3 -3
  80. package/dist/modules/chunks/{chunk-P4UPH74B.mjs → chunk-RGM4S2BE.mjs} +3 -3
  81. package/dist/modules/chunks/{chunk-AGVLPYVE.mjs → chunk-SKZC6VTV.mjs} +2 -2
  82. package/dist/modules/chunks/{chunk-4D3Q7K44.mjs → chunk-SSVRSFTX.mjs} +2 -2
  83. package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs → chunk-TFBSEYKW.mjs} +3 -3
  84. package/dist/modules/chunks/{chunk-K2QZRFLE.mjs → chunk-TPLT4PBX.mjs} +4 -4
  85. package/dist/modules/chunks/{chunk-5PHAXNFO.mjs → chunk-U5LBMAG3.mjs} +3 -3
  86. package/dist/modules/chunks/{chunk-46UEGAXY.mjs → chunk-V4SOFUJI.mjs} +6 -6
  87. package/dist/modules/chunks/{chunk-IJPWKKIU.mjs → chunk-VD3C4DYT.mjs} +14 -13
  88. package/dist/modules/chunks/chunk-VD3C4DYT.mjs.map +7 -0
  89. package/dist/modules/chunks/{chunk-YFQGSDK3.mjs → chunk-VD4QU7KY.mjs} +2 -2
  90. package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs → chunk-WC6NGMGI.mjs} +3 -3
  91. package/dist/modules/chunks/{chunk-H256DQT6.mjs → chunk-XOZ5EMNY.mjs} +2 -2
  92. package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs → chunk-XXJ32F5P.mjs} +3 -3
  93. package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs → chunk-Y4SFATAM.mjs} +6 -6
  94. package/dist/modules/chunks/{chunk-SRYQLFBV.mjs → chunk-ZKFH7EMU.mjs} +2 -2
  95. package/dist/modules/chunks/{chunk-CKYXAT7H.mjs → chunk-ZRG7LDCA.mjs} +2 -2
  96. package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs → chunk-ZW7LLDOL.mjs} +2 -2
  97. package/dist/modules/cli-contributions.mjs +14 -14
  98. package/dist/modules/cli.mjs +5 -5
  99. package/dist/modules/command-executor.mjs +3 -3
  100. package/dist/modules/embedded.mjs +82 -42
  101. package/dist/modules/embedded.mjs.map +2 -2
  102. package/dist/modules/extension-bridge.mjs +4 -4
  103. package/dist/modules/frontend-root.mjs +46 -46
  104. package/dist/modules/index.mjs +71 -65
  105. package/dist/modules/index.mjs.map +1 -1
  106. package/dist/modules/pages/scene.mjs +5 -5
  107. package/dist/modules/plugin.mjs +35 -35
  108. package/dist/modules/plugins/asset/frontend.mjs +10 -10
  109. package/dist/modules/plugins/asset/identity.mjs +9 -9
  110. package/dist/modules/plugins/asset/ui.mjs +3 -3
  111. package/dist/modules/plugins/content-browser/frontend.mjs +3 -3
  112. package/dist/modules/plugins/content-browser/identity.mjs +2 -2
  113. package/dist/modules/plugins/content-browser/ui.mjs +3 -3
  114. package/dist/modules/plugins/display/api.mjs +1 -1
  115. package/dist/modules/plugins/display/backend.mjs +4 -4
  116. package/dist/modules/plugins/display/frontend.mjs +5 -5
  117. package/dist/modules/plugins/display/identity.mjs +2 -2
  118. package/dist/modules/plugins/display/ui.mjs +3 -3
  119. package/dist/modules/plugins/inspector/frontend.mjs +3 -3
  120. package/dist/modules/plugins/inspector/identity.mjs +2 -2
  121. package/dist/modules/plugins/inspector/ui.mjs +3 -3
  122. package/dist/modules/plugins/material/frontend.mjs +10 -10
  123. package/dist/modules/plugins/material/identity.mjs +9 -9
  124. package/dist/modules/plugins/material/ui.mjs +10 -10
  125. package/dist/modules/plugins/mesh/frontend.mjs +10 -10
  126. package/dist/modules/plugins/mesh/identity.mjs +9 -9
  127. package/dist/modules/plugins/mesh/ui.mjs +10 -10
  128. package/dist/modules/plugins/plugins/api.mjs +4 -4
  129. package/dist/modules/plugins/plugins/backend.mjs +7 -7
  130. package/dist/modules/plugins/plugins/cli.mjs +5 -5
  131. package/dist/modules/plugins/plugins/frontend.mjs +3 -3
  132. package/dist/modules/plugins/plugins/identity.mjs +2 -2
  133. package/dist/modules/plugins/plugins/runtime.mjs +6 -6
  134. package/dist/modules/plugins/plugins/ui/panel.mjs +3 -3
  135. package/dist/modules/plugins/plugins/ui.mjs +4 -4
  136. package/dist/modules/plugins/scene/frontend.mjs +5 -5
  137. package/dist/modules/plugins/scene/identity.mjs +2 -2
  138. package/dist/modules/plugins/scene-tree/frontend.mjs +3 -3
  139. package/dist/modules/plugins/scene-tree/identity.mjs +2 -2
  140. package/dist/modules/plugins/scene-tree/ui.mjs +3 -3
  141. package/dist/modules/plugins/texture/frontend.mjs +10 -10
  142. package/dist/modules/plugins/texture/identity.mjs +9 -9
  143. package/dist/modules/plugins/texture/ui.mjs +10 -10
  144. package/dist/modules/plugins/viewport/frontend.mjs +12 -12
  145. package/dist/modules/plugins/viewport/identity.mjs +2 -2
  146. package/dist/modules/plugins/viewport/presentation.mjs +4 -4
  147. package/dist/modules/plugins/viewport/schema.mjs +2 -2
  148. package/dist/modules/plugins/viewport/workspace-shell.mjs +9 -9
  149. package/dist/modules/product.mjs +35 -35
  150. package/dist/modules/shell/frontend.mjs +1 -1
  151. package/dist/modules/viewer/catalog/backend.mjs +31 -31
  152. package/dist/modules/viewer/catalog/frontend.mjs +42 -42
  153. package/dist/modules/viewer/catalog/shared.mjs +20 -20
  154. package/dist/modules/viewer/catalog.mjs +51 -51
  155. package/dist/modules/viewer/cli.mjs +10 -10
  156. package/dist/modules/viewer-host/frontend.mjs +48 -48
  157. package/dist/modules/viewer-host/page-registry.mjs +6 -6
  158. package/dist/modules/viewer-host.mjs +7 -7
  159. package/dist/modules/viewer.mjs +51 -51
  160. package/dist/modules/workspace/api.mjs +1 -1
  161. package/dist/modules/workspace/backend.mjs +10 -10
  162. package/dist/modules/workspace/broker.mjs +9 -9
  163. package/dist/modules/workspace/cli.mjs +2 -2
  164. package/dist/modules/workspace/client.mjs +3 -3
  165. package/dist/modules/workspace/command-error.mjs +2 -2
  166. package/dist/modules/workspace/contract.mjs +7 -1
  167. package/dist/modules/workspace/engine-adapter.mjs +3 -3
  168. package/dist/modules/workspace/extension-bridge.mjs +4 -4
  169. package/dist/modules/workspace/frontend-plugin.mjs +8 -8
  170. package/dist/modules/workspace/frontend.mjs +9 -9
  171. package/dist/modules/workspace/page-title.mjs +3 -3
  172. package/dist/modules/workspace/presentation.mjs +4 -4
  173. package/dist/modules/workspace/preview-surface.mjs +7 -7
  174. package/dist/modules/workspace/project-session.mjs +2 -2
  175. package/dist/modules/workspace/render-resize-sync.mjs +2 -2
  176. package/dist/modules/workspace/resident.mjs +4 -4
  177. package/dist/modules/workspace/resource-open.mjs +5 -5
  178. package/dist/modules/workspace/resource-page.mjs +8 -8
  179. package/dist/modules/workspace/tool-runtime.mjs +7 -5
  180. package/dist/modules/workspace/view-trace.mjs +3 -3
  181. package/dist/modules/workspace/workspace-recovery.mjs +4 -4
  182. package/dist/modules/workspace/workspace-state.mjs +2 -2
  183. package/dist/modules/workspace-frontend.mjs +8 -8
  184. package/dist/viewer/assets/{embedded-DXSSFAyM.js → embedded-BZSPh0if.js} +2 -2
  185. package/dist/viewer/assets/{embedded-DXSSFAyM.js.map → embedded-BZSPh0if.js.map} +1 -1
  186. package/dist/viewer/assets/main-CmJEE-8D.js +22 -0
  187. package/dist/viewer/assets/main-CmJEE-8D.js.map +1 -0
  188. package/dist/viewer/assets/panels-ui-Cm3As_jE.js +12 -0
  189. package/dist/viewer/assets/panels-ui-Cm3As_jE.js.map +1 -0
  190. package/dist/viewer/assets/style-CcYzhsIZ.css +2 -0
  191. package/dist/viewer/index.html +3 -3
  192. package/dist/viewer/panels.js +1 -1
  193. package/package.json +2 -2
  194. package/scripts/verify-runtime-content-engine.mjs +7 -4
  195. package/skills/forgeax-view-cli/SKILL.md +4 -0
  196. package/dist/modules/chunks/chunk-27XASYEH.mjs.map +0 -7
  197. package/dist/modules/chunks/chunk-5YTMN435.mjs.map +0 -7
  198. package/dist/modules/chunks/chunk-6KM24NH6.mjs.map +0 -7
  199. package/dist/modules/chunks/chunk-DWT3TA6M.mjs.map +0 -7
  200. package/dist/modules/chunks/chunk-E3Z7GLFU.mjs.map +0 -7
  201. package/dist/modules/chunks/chunk-EZSGDSCC.mjs.map +0 -7
  202. package/dist/modules/chunks/chunk-FNRGLCZW.mjs.map +0 -7
  203. package/dist/modules/chunks/chunk-HWZCLROY.mjs.map +0 -7
  204. package/dist/modules/chunks/chunk-IJPWKKIU.mjs.map +0 -7
  205. package/dist/modules/chunks/chunk-LZ57Y73Z.mjs.map +0 -7
  206. package/dist/modules/chunks/chunk-OQXDADAS.mjs.map +0 -7
  207. package/dist/modules/chunks/chunk-QELNKFSI.mjs +0 -10
  208. package/dist/modules/chunks/chunk-QELNKFSI.mjs.map +0 -7
  209. package/dist/modules/chunks/chunk-VKNIYV2W.mjs.map +0 -7
  210. package/dist/modules/chunks/chunk-YLCJNKIW.mjs.map +0 -7
  211. package/dist/viewer/assets/main-CI6ZQziX.js +0 -22
  212. package/dist/viewer/assets/main-CI6ZQziX.js.map +0 -1
  213. package/dist/viewer/assets/panels-ui-CfUtl68h.js +0 -12
  214. package/dist/viewer/assets/panels-ui-CfUtl68h.js.map +0 -1
  215. package/dist/viewer/assets/style-gOtSMZif.css +0 -2
  216. /package/dist/modules/chunks/{chunk-B6QUJ33G.mjs.map → chunk-25PFC2DY.mjs.map} +0 -0
  217. /package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs.map → chunk-43L37UYV.mjs.map} +0 -0
  218. /package/dist/modules/chunks/{chunk-WVU3CQ62.mjs.map → chunk-4ZI5DFBR.mjs.map} +0 -0
  219. /package/dist/modules/chunks/{chunk-47RJSHLM.mjs.map → chunk-5HJ336VM.mjs.map} +0 -0
  220. /package/dist/modules/chunks/{chunk-PVP5YBNR.mjs.map → chunk-5N5FDO5Y.mjs.map} +0 -0
  221. /package/dist/modules/chunks/{chunk-APD2EWSZ.mjs.map → chunk-5PZL6W3F.mjs.map} +0 -0
  222. /package/dist/modules/chunks/{chunk-KI4WGTWL.mjs.map → chunk-5WVRCLHN.mjs.map} +0 -0
  223. /package/dist/modules/chunks/{chunk-YNHEYXDG.mjs.map → chunk-7MQIGD6Q.mjs.map} +0 -0
  224. /package/dist/modules/chunks/{chunk-F5RLQAPN.mjs.map → chunk-7YWMB7HV.mjs.map} +0 -0
  225. /package/dist/modules/chunks/{chunk-FICPCJKR.mjs.map → chunk-A22PJUZM.mjs.map} +0 -0
  226. /package/dist/modules/chunks/{chunk-P5XMFZY4.mjs.map → chunk-A7HXBQUG.mjs.map} +0 -0
  227. /package/dist/modules/chunks/{chunk-HRKW766Y.mjs.map → chunk-AZHCKPUL.mjs.map} +0 -0
  228. /package/dist/modules/chunks/{chunk-6I7RY73G.mjs.map → chunk-CEB76QBE.mjs.map} +0 -0
  229. /package/dist/modules/chunks/{chunk-U64FRQKP.mjs.map → chunk-CVIF6DYH.mjs.map} +0 -0
  230. /package/dist/modules/chunks/{chunk-XQYF2P6M.mjs.map → chunk-D3ISMGT6.mjs.map} +0 -0
  231. /package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs.map → chunk-DC3PU6SO.mjs.map} +0 -0
  232. /package/dist/modules/chunks/{chunk-4T3D67CS.mjs.map → chunk-DJKXBCZH.mjs.map} +0 -0
  233. /package/dist/modules/chunks/{chunk-E3PJGTLI.mjs.map → chunk-DX4M6LZH.mjs.map} +0 -0
  234. /package/dist/modules/chunks/{chunk-IZAHIOFU.mjs.map → chunk-EOW4JGVV.mjs.map} +0 -0
  235. /package/dist/modules/chunks/{chunk-U5R6MVM4.mjs.map → chunk-EQRDY5CQ.mjs.map} +0 -0
  236. /package/dist/modules/chunks/{chunk-7IGFAI5H.mjs.map → chunk-EW7VMNZA.mjs.map} +0 -0
  237. /package/dist/modules/chunks/{chunk-FMCHH5R4.mjs.map → chunk-FSSKCXPL.mjs.map} +0 -0
  238. /package/dist/modules/chunks/{chunk-357UOBAS.mjs.map → chunk-FSYQ3LBQ.mjs.map} +0 -0
  239. /package/dist/modules/chunks/{chunk-D25SR5FS.mjs.map → chunk-FVSDKOXR.mjs.map} +0 -0
  240. /package/dist/modules/chunks/{chunk-XMP4THLF.mjs.map → chunk-J7QRK3FU.mjs.map} +0 -0
  241. /package/dist/modules/chunks/{chunk-D57DDEV2.mjs.map → chunk-JE4N575J.mjs.map} +0 -0
  242. /package/dist/modules/chunks/{chunk-ZIDEETK4.mjs.map → chunk-JKDBKS7P.mjs.map} +0 -0
  243. /package/dist/modules/chunks/{chunk-U5J7OTEB.mjs.map → chunk-K4C5WOTT.mjs.map} +0 -0
  244. /package/dist/modules/chunks/{chunk-QUFVUMSY.mjs.map → chunk-KOBAWLZL.mjs.map} +0 -0
  245. /package/dist/modules/chunks/{chunk-CX5WREJC.mjs.map → chunk-KY2AWNDR.mjs.map} +0 -0
  246. /package/dist/modules/chunks/{chunk-RJVOH7G2.mjs.map → chunk-L24HPIQP.mjs.map} +0 -0
  247. /package/dist/modules/chunks/{chunk-PJFFCRRD.mjs.map → chunk-LOVO3P2Q.mjs.map} +0 -0
  248. /package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs.map → chunk-M66NDY35.mjs.map} +0 -0
  249. /package/dist/modules/chunks/{chunk-55F55BQY.mjs.map → chunk-MUBV2LNK.mjs.map} +0 -0
  250. /package/dist/modules/chunks/{chunk-M6S5YA6X.mjs.map → chunk-NHNPQ3ZS.mjs.map} +0 -0
  251. /package/dist/modules/chunks/{chunk-STQPRNEO.mjs.map → chunk-NSPN5OQ5.mjs.map} +0 -0
  252. /package/dist/modules/chunks/{chunk-XE6ITXHT.mjs.map → chunk-NZ4N7AVG.mjs.map} +0 -0
  253. /package/dist/modules/chunks/{chunk-KAGFU64Y.mjs.map → chunk-OGFZB75B.mjs.map} +0 -0
  254. /package/dist/modules/chunks/{chunk-EWSCJF77.mjs.map → chunk-OS7BK3FO.mjs.map} +0 -0
  255. /package/dist/modules/chunks/{chunk-U6UMATPV.mjs.map → chunk-P3ZW2T37.mjs.map} +0 -0
  256. /package/dist/modules/chunks/{chunk-INTTYJVW.mjs.map → chunk-PHCUCHVL.mjs.map} +0 -0
  257. /package/dist/modules/chunks/{chunk-JK7K7RG3.mjs.map → chunk-QNJL265P.mjs.map} +0 -0
  258. /package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs.map → chunk-QNSUBUZF.mjs.map} +0 -0
  259. /package/dist/modules/chunks/{chunk-TXLD7JI5.mjs.map → chunk-QQP7ZGQD.mjs.map} +0 -0
  260. /package/dist/modules/chunks/{chunk-PZIAKZJC.mjs.map → chunk-R6MT6F3T.mjs.map} +0 -0
  261. /package/dist/modules/chunks/{chunk-P4UPH74B.mjs.map → chunk-RGM4S2BE.mjs.map} +0 -0
  262. /package/dist/modules/chunks/{chunk-AGVLPYVE.mjs.map → chunk-SKZC6VTV.mjs.map} +0 -0
  263. /package/dist/modules/chunks/{chunk-4D3Q7K44.mjs.map → chunk-SSVRSFTX.mjs.map} +0 -0
  264. /package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs.map → chunk-TFBSEYKW.mjs.map} +0 -0
  265. /package/dist/modules/chunks/{chunk-K2QZRFLE.mjs.map → chunk-TPLT4PBX.mjs.map} +0 -0
  266. /package/dist/modules/chunks/{chunk-5PHAXNFO.mjs.map → chunk-U5LBMAG3.mjs.map} +0 -0
  267. /package/dist/modules/chunks/{chunk-46UEGAXY.mjs.map → chunk-V4SOFUJI.mjs.map} +0 -0
  268. /package/dist/modules/chunks/{chunk-YFQGSDK3.mjs.map → chunk-VD4QU7KY.mjs.map} +0 -0
  269. /package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs.map → chunk-WC6NGMGI.mjs.map} +0 -0
  270. /package/dist/modules/chunks/{chunk-H256DQT6.mjs.map → chunk-XOZ5EMNY.mjs.map} +0 -0
  271. /package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs.map → chunk-XXJ32F5P.mjs.map} +0 -0
  272. /package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs.map → chunk-Y4SFATAM.mjs.map} +0 -0
  273. /package/dist/modules/chunks/{chunk-SRYQLFBV.mjs.map → chunk-ZKFH7EMU.mjs.map} +0 -0
  274. /package/dist/modules/chunks/{chunk-CKYXAT7H.mjs.map → chunk-ZRG7LDCA.mjs.map} +0 -0
  275. /package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs.map → chunk-ZW7LLDOL.mjs.map} +0 -0
@@ -1,86 +1,86 @@
1
1
  import {
2
2
  frontend_default as frontend_default11
3
- } from "./chunk-E3PJGTLI.mjs";
3
+ } from "./chunk-DX4M6LZH.mjs";
4
4
  import {
5
5
  frontend_default as frontend_default10
6
- } from "./chunk-YNHEYXDG.mjs";
6
+ } from "./chunk-7MQIGD6Q.mjs";
7
7
  import {
8
8
  frontend_default as frontend_default8
9
- } from "./chunk-U64FRQKP.mjs";
9
+ } from "./chunk-CVIF6DYH.mjs";
10
10
  import {
11
11
  frontend_default as frontend_default9
12
- } from "./chunk-U6UMATPV.mjs";
12
+ } from "./chunk-P3ZW2T37.mjs";
13
13
  import {
14
14
  frontend_default as frontend_default6
15
- } from "./chunk-YFQGSDK3.mjs";
15
+ } from "./chunk-VD4QU7KY.mjs";
16
16
  import {
17
17
  frontend_default as frontend_default7
18
- } from "./chunk-ZHO2G4JR.mjs";
18
+ } from "./chunk-XXJ32F5P.mjs";
19
19
  import {
20
20
  frontend_default as frontend_default4
21
- } from "./chunk-CX5WREJC.mjs";
21
+ } from "./chunk-KY2AWNDR.mjs";
22
22
  import {
23
23
  frontend_default as frontend_default5
24
- } from "./chunk-TTRUYO7Q.mjs";
24
+ } from "./chunk-AOD6XLJC.mjs";
25
25
  import {
26
26
  frontend_default as frontend_default2
27
- } from "./chunk-F5RLQAPN.mjs";
27
+ } from "./chunk-7YWMB7HV.mjs";
28
28
  import {
29
29
  frontend_default as frontend_default3
30
- } from "./chunk-4D3Q7K44.mjs";
30
+ } from "./chunk-SSVRSFTX.mjs";
31
31
  import {
32
32
  frontend_plugin_default
33
- } from "./chunk-OQXDADAS.mjs";
33
+ } from "./chunk-D3GX7HWI.mjs";
34
34
  import {
35
35
  VIEW_PLUGIN_VERSION,
36
36
  VIEW_PRODUCT_PLUGINS,
37
37
  VIEW_WORKSPACE_CORE
38
- } from "./chunk-IJPWKKIU.mjs";
38
+ } from "./chunk-VD3C4DYT.mjs";
39
39
  import {
40
40
  FRONTEND_MODULE as FRONTEND_MODULE9
41
- } from "./chunk-D25SR5FS.mjs";
41
+ } from "./chunk-FVSDKOXR.mjs";
42
42
  import {
43
43
  FRONTEND_MODULE
44
- } from "./chunk-AGVLPYVE.mjs";
44
+ } from "./chunk-SKZC6VTV.mjs";
45
45
  import {
46
46
  FRONTEND_MODULE as FRONTEND_MODULE2
47
- } from "./chunk-EWSCJF77.mjs";
47
+ } from "./chunk-OS7BK3FO.mjs";
48
48
  import {
49
49
  FRONTEND_MODULE as FRONTEND_MODULE7
50
- } from "./chunk-X4NNZ5X6.mjs";
50
+ } from "./chunk-M66NDY35.mjs";
51
51
  import {
52
52
  FRONTEND_MODULE as FRONTEND_MODULE8
53
- } from "./chunk-FMCHH5R4.mjs";
53
+ } from "./chunk-FSSKCXPL.mjs";
54
54
  import {
55
55
  FRONTEND_MODULE as FRONTEND_MODULE5
56
- } from "./chunk-STQPRNEO.mjs";
56
+ } from "./chunk-NSPN5OQ5.mjs";
57
57
  import {
58
58
  FRONTEND_MODULE as FRONTEND_MODULE6
59
- } from "./chunk-PZIAKZJC.mjs";
59
+ } from "./chunk-R6MT6F3T.mjs";
60
60
  import {
61
61
  FRONTEND_MODULE as FRONTEND_MODULE3
62
- } from "./chunk-QUFVUMSY.mjs";
62
+ } from "./chunk-KOBAWLZL.mjs";
63
63
  import {
64
64
  FRONTEND_MODULE as FRONTEND_MODULE4
65
- } from "./chunk-HRKW766Y.mjs";
65
+ } from "./chunk-AZHCKPUL.mjs";
66
66
  import {
67
67
  FRONTEND_MODULE as FRONTEND_MODULE10
68
- } from "./chunk-H256DQT6.mjs";
68
+ } from "./chunk-XOZ5EMNY.mjs";
69
69
  import {
70
70
  presentation_default
71
- } from "./chunk-APD2EWSZ.mjs";
71
+ } from "./chunk-5PZL6W3F.mjs";
72
72
  import {
73
73
  PRESENTATION_MODULE
74
74
  } from "./chunk-J5B4LX5H.mjs";
75
75
  import {
76
76
  frontend_default
77
- } from "./chunk-WVU3CQ62.mjs";
77
+ } from "./chunk-4ZI5DFBR.mjs";
78
78
  import {
79
79
  FRONTEND_MODULE as FRONTEND_MODULE11
80
- } from "./chunk-P5XMFZY4.mjs";
80
+ } from "./chunk-A7HXBQUG.mjs";
81
81
  import {
82
82
  shell_default
83
- } from "./chunk-ZGOGO7SS.mjs";
83
+ } from "./chunk-QNSUBUZF.mjs";
84
84
  import {
85
85
  SHELL_MODULE
86
86
  } from "./chunk-QAXALJEY.mjs";
@@ -132,4 +132,4 @@ for (const [name, plugin] of [[SHELL_MODULE, shell_default], [PRESENTATION_MODUL
132
132
  export {
133
133
  VIEW_PRODUCT_FRONTEND_CATALOG
134
134
  };
135
- //# sourceMappingURL=chunk-RJVOH7G2.mjs.map
135
+ //# sourceMappingURL=chunk-L24HPIQP.mjs.map
@@ -1,14 +1,15 @@
1
1
  import {
2
2
  ViewWorkspaceBroker
3
- } from "./chunk-HWZCLROY.mjs";
3
+ } from "./chunk-P27F2TZN.mjs";
4
4
  import {
5
5
  createWorkspaceToolContributions,
6
- defineWorkspaceOperations
7
- } from "./chunk-EZSGDSCC.mjs";
6
+ defineWorkspaceOperations,
7
+ workspaceToolValue
8
+ } from "./chunk-M7XSCLYV.mjs";
8
9
  import {
9
10
  VIEW_WORKSPACE_OPERATIONS,
10
11
  createWorkspaceRequest
11
- } from "./chunk-E3Z7GLFU.mjs";
12
+ } from "./chunk-QYJZ3SOV.mjs";
12
13
 
13
14
  // packages/view-workspace-core/src/backend.ts
14
15
  import { registerTools } from "@forgeax/engine/plugin";
@@ -22,10 +23,12 @@ var viewWorkspaceCoreBackendPlugin = {
22
23
  apply(ctx, config = {}) {
23
24
  const workspace = new ViewWorkspaceBroker({
24
25
  engine: ctx.get?.("engineWorkspace", false),
26
+ engineForCaller: ctx.get?.("engineWorkspaceForCaller", false),
25
27
  toolApi: ctx.get?.("toolApi", false),
26
- display: () => ctx.get?.("viewStatus", false)?.(),
28
+ display: (caller) => ctx.get?.("viewStatus", false)?.(caller),
27
29
  accessToken: config.workspaceAccessToken,
28
- authorize: config.workspaceAuthorize
30
+ authorize: config.workspaceAuthorize,
31
+ packSources: config.packSources
29
32
  });
30
33
  const toolApi = ctx.get?.("toolApi", false);
31
34
  const operations = defineWorkspaceOperations(VIEW_WORKSPACE_OPERATIONS.map((operation) => ({
@@ -44,10 +47,13 @@ var viewWorkspaceCoreBackendPlugin = {
44
47
  inputSchema: { type: "object" },
45
48
  outputSchema: {},
46
49
  evidence: []
47
- }, (input, context) => workspace.call(createWorkspaceRequest(input.operation, input.args ?? {}, {
48
- clientId: "view-cli",
49
- token: workspace.accessToken
50
- }), { signal: context.signal, caller: context.caller })));
50
+ }, async (input, context) => {
51
+ const result = await workspace.call(createWorkspaceRequest(input.operation, input.args ?? {}, {
52
+ clientId: "view-cli",
53
+ token: workspace.accessToken
54
+ }), { signal: context.signal, caller: context.caller });
55
+ return workspaceToolValue(result);
56
+ }));
51
57
  const revokeTools = toolApi ? registerTools(ctx, tools, {
52
58
  sourceId: "view-workspace",
53
59
  module: "@forgeax/view-workspace-core/backend",
@@ -75,4 +81,4 @@ export {
75
81
  viewWorkspaceCoreBackendPlugin,
76
82
  backend_default
77
83
  };
78
- //# sourceMappingURL=chunk-27XASYEH.mjs.map
84
+ //# sourceMappingURL=chunk-LCVL3V5U.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/view-workspace-core/src/backend.ts"],
4
+ "sourcesContent": ["import type { Context } from '@forgeax/engine-plugin';\nimport type { ToolContribution } from '@forgeax/engine-tool-runtime';\nimport type { BrokerOptions, WorkspaceAuthorization } from './broker.ts';\nexport type WorkspaceBackendConfig = { workspaceAccessToken?: string; workspaceAuthorize?: WorkspaceAuthorization; packSources?: BrokerOptions['packSources'] };\ndeclare module '@forgeax/engine-plugin' { interface EngineContextServices { viewWorkspaceCore: ViewWorkspaceBroker; viewWorkspaceAccessToken: string; } }\nimport { ViewWorkspaceBroker } from './broker.ts';\nimport { registerTools } from '@forgeax/engine-plugin';\nimport { defineTool, toolJsonSchema } from '@forgeax/engine-tool-runtime';\nimport { VIEW_WORKSPACE_OPERATIONS, createWorkspaceRequest } from './contract.ts';\nimport { createWorkspaceToolContributions, defineWorkspaceOperations, workspaceToolValue } from './tool-runtime.ts';\n\nexport const VIEW_WORKSPACE_CORE_PLUGIN_ID = 'forgeax.view.service.workspace.backend';\nexport const VIEW_WORKSPACE_CORE_MODULE = '@forgeax/view-workspace-core/backend';\n\nexport const viewWorkspaceCoreBackendPlugin = {\n name: VIEW_WORKSPACE_CORE_PLUGIN_ID,\n inject: ['toolApi'],\n provide: ['viewWorkspaceCore', 'viewWorkspaceAccessToken'],\n apply(ctx: Context, config: WorkspaceBackendConfig = {}) {\n const workspace = new ViewWorkspaceBroker({\n engine: ctx.get?.('engineWorkspace', false),\n engineForCaller: ctx.get?.('engineWorkspaceForCaller', false),\n toolApi: ctx.get?.('toolApi', false),\n display: caller => ctx.get?.('viewStatus', false)?.(caller),\n accessToken: config.workspaceAccessToken,\n authorize: config.workspaceAuthorize,\n packSources: config.packSources,\n });\n const toolApi = ctx.get?.('toolApi', false);\n const operations = defineWorkspaceOperations(VIEW_WORKSPACE_OPERATIONS.map(operation => ({\n id: `view.workspace.${operation}`,\n operation,\n })));\n const tools: ToolContribution[] = createWorkspaceToolContributions(workspace, operations);\n tools.push(defineTool({\n id: 'view.workspace.call', path: ['view', 'workspace', 'call'],\n title: 'Call View workspace API', summary: 'Call an operation on the running View workspace.',\n realm: 'host',\n argsSchema: toolJsonSchema({ type: 'object', properties: { operation: { type: 'string' }, args: { type: 'object' }, root: { type: 'string' } }, required: ['operation'], additionalProperties: false }),\n resultSchema: toolJsonSchema({}), inputSchema: { type: 'object' }, outputSchema: {}, evidence: [],\n }, async (input, context) => {\n const result = await workspace.call(createWorkspaceRequest((input as { operation: string }).operation, (input as { args?: Record<string, unknown> }).args ?? {}, {\n clientId: 'view-cli', token: workspace.accessToken,\n }), { signal: context.signal, caller: context.caller });\n return workspaceToolValue(result);\n }));\n const revokeTools = toolApi ? registerTools(ctx, tools, {\n sourceId: 'view-workspace', module: '@forgeax/view-workspace-core/backend', realm: 'host',\n }) : undefined;\n const connection = ctx.get?.('hostTransport', false);\n const transport = connection && 'register' in connection ? connection : undefined;\n const unregister = transport ? workspace.registerTransport(transport, {\n routeThroughTools: Boolean(revokeTools),\n }) : undefined;\n ctx.provide('viewWorkspaceCore', workspace);\n ctx.provide('viewWorkspaceAccessToken', workspace.accessToken);\n ctx.effect(() => async () => { unregister?.(); await revokeTools?.(); await workspace.dispose(); });\n },\n};\nexport default viewWorkspaceCoreBackendPlugin;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;AAMA,SAAS,qBAAqB;AAC9B,SAAS,YAAY,sBAAsB;AAIpC,IAAM,gCAAgC;AACtC,IAAM,6BAA6B;AAEnC,IAAM,iCAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,QAAQ,CAAC,SAAS;AAAA,EAClB,SAAS,CAAC,qBAAqB,0BAA0B;AAAA,EACzD,MAAM,KAAc,SAAiC,CAAC,GAAG;AACvD,UAAM,YAAY,IAAI,oBAAoB;AAAA,MACxC,QAAQ,IAAI,MAAM,mBAAmB,KAAK;AAAA,MAC1C,iBAAiB,IAAI,MAAM,4BAA4B,KAAK;AAAA,MAC5D,SAAS,IAAI,MAAM,WAAW,KAAK;AAAA,MACnC,SAAS,YAAU,IAAI,MAAM,cAAc,KAAK,IAAI,MAAM;AAAA,MAC1D,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,aAAa,OAAO;AAAA,IACtB,CAAC;AACD,UAAM,UAAU,IAAI,MAAM,WAAW,KAAK;AAC1C,UAAM,aAAa,0BAA0B,0BAA0B,IAAI,gBAAc;AAAA,MACvF,IAAI,kBAAkB,SAAS;AAAA,MAC/B;AAAA,IACF,EAAE,CAAC;AACH,UAAM,QAA4B,iCAAiC,WAAW,UAAU;AACxF,UAAM,KAAK,WAAW;AAAA,MACpB,IAAI;AAAA,MAAuB,MAAM,CAAC,QAAQ,aAAa,MAAM;AAAA,MAC7D,OAAO;AAAA,MAA2B,SAAS;AAAA,MAC3C,OAAO;AAAA,MACP,YAAY,eAAe,EAAE,MAAM,UAAU,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,GAAG,MAAM,EAAE,MAAM,SAAS,GAAG,MAAM,EAAE,MAAM,SAAS,EAAE,GAAG,UAAU,CAAC,WAAW,GAAG,sBAAsB,MAAM,CAAC;AAAA,MACtM,cAAc,eAAe,CAAC,CAAC;AAAA,MAAG,aAAa,EAAE,MAAM,SAAS;AAAA,MAAG,cAAc,CAAC;AAAA,MAAG,UAAU,CAAC;AAAA,IAClG,GAAG,OAAO,OAAO,YAAY;AAC3B,YAAM,SAAS,MAAM,UAAU,KAAK,uBAAwB,MAAgC,WAAY,MAA6C,QAAQ,CAAC,GAAG;AAAA,QAC/J,UAAU;AAAA,QAAY,OAAO,UAAU;AAAA,MACzC,CAAC,GAAG,EAAE,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,CAAC;AACtD,aAAO,mBAAmB,MAAM;AAAA,IAClC,CAAC,CAAC;AACF,UAAM,cAAc,UAAU,cAAc,KAAK,OAAO;AAAA,MACtD,UAAU;AAAA,MAAkB,QAAQ;AAAA,MAAwC,OAAO;AAAA,IACrF,CAAC,IAAI;AACL,UAAM,aAAa,IAAI,MAAM,iBAAiB,KAAK;AACnD,UAAM,YAAY,cAAc,cAAc,aAAa,aAAa;AACxE,UAAM,aAAa,YAAY,UAAU,kBAAkB,WAAW;AAAA,MACpE,mBAAmB,QAAQ,WAAW;AAAA,IACxC,CAAC,IAAI;AACL,QAAI,QAAQ,qBAAqB,SAAS;AAC1C,QAAI,QAAQ,4BAA4B,UAAU,WAAW;AAC7D,QAAI,OAAO,MAAM,YAAY;AAAE,mBAAa;AAAG,YAAM,cAAc;AAAG,YAAM,UAAU,QAAQ;AAAA,IAAG,CAAC;AAAA,EACpG;AACF;AACA,IAAO,kBAAQ;",
6
+ "names": []
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VIEW_WORKSPACE_TAB_ID
3
- } from "./chunk-E3Z7GLFU.mjs";
3
+ } from "./chunk-QYJZ3SOV.mjs";
4
4
 
5
5
  // packages/view-workspace-core/src/render-resize-sync.ts
6
6
  var DEFAULT_DEBOUNCE_MS = 100;
@@ -70,4 +70,4 @@ export {
70
70
  attachPreviewRenderResizeSync,
71
71
  attachViewportRenderResizeSync
72
72
  };
73
- //# sourceMappingURL=chunk-PJFFCRRD.mjs.map
73
+ //# sourceMappingURL=chunk-LOVO3P2Q.mjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  RESOURCE_PREVIEW_LAYOUT,
3
3
  RESOURCE_PROPERTIES_LAYOUT
4
- } from "./chunk-KX2WU5Z6.mjs";
4
+ } from "./chunk-WC6NGMGI.mjs";
5
5
  import {
6
6
  VIEW_PAGE_TYPES
7
- } from "./chunk-E3Z7GLFU.mjs";
7
+ } from "./chunk-QYJZ3SOV.mjs";
8
8
  import {
9
9
  __export
10
10
  } from "./chunk-FLGC65SR.mjs";
@@ -74,4 +74,4 @@ export {
74
74
  PROPERTIES_TITLE_I18N_KEY,
75
75
  identity_exports
76
76
  };
77
- //# sourceMappingURL=chunk-X4NNZ5X6.mjs.map
77
+ //# sourceMappingURL=chunk-M66NDY35.mjs.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  workspaceDiagnosticRecord
3
- } from "./chunk-U5R6MVM4.mjs";
3
+ } from "./chunk-EQRDY5CQ.mjs";
4
4
  import {
5
5
  VIEW_WORKSPACE_API_VERSION,
6
6
  ViewWorkspaceError,
7
7
  cloneWorkspaceValue,
8
8
  workspaceError
9
- } from "./chunk-E3Z7GLFU.mjs";
9
+ } from "./chunk-QYJZ3SOV.mjs";
10
10
 
11
11
  // packages/view-workspace-core/src/tool-runtime.ts
12
12
  import { defineTool, toolJsonSchema } from "@forgeax/engine/tool-runtime";
@@ -17,6 +17,9 @@ function safeClone(value) {
17
17
  return null;
18
18
  }
19
19
  }
20
+ function workspaceToolValue(value) {
21
+ return { ok: true, value: safeClone(value) };
22
+ }
20
23
  function toolFailureError(failure) {
21
24
  const detail = workspaceDiagnosticRecord(failure?.detail);
22
25
  const code = [detail?.code, detail?.remoteCode].find(
@@ -70,6 +73,16 @@ async function runWorkspaceToolApi(api, {
70
73
  );
71
74
  const terminal = await run.terminal;
72
75
  if (terminal.outcome === "failed") throw toolFailureError(terminal.failure);
76
+ const result = workspaceDiagnosticRecord(terminal.result);
77
+ if (result.ok === false) {
78
+ const error = workspaceDiagnosticRecord(result.error);
79
+ throw workspaceError(
80
+ typeof error.code === "string" ? error.code : "view-workspace-provider-failed",
81
+ typeof error.expected === "string" ? error.expected : void 0,
82
+ typeof error.hint === "string" ? error.hint : void 0,
83
+ workspaceDiagnosticRecord(error.detail)
84
+ );
85
+ }
73
86
  return terminal.result;
74
87
  }
75
88
  function defineWorkspaceOperations(operations) {
@@ -108,7 +121,7 @@ function createWorkspaceToolContributions(workspace, operations) {
108
121
  async (input, context) => {
109
122
  const envelope = input;
110
123
  try {
111
- return safeClone(
124
+ return workspaceToolValue(
112
125
  await workspace.call(
113
126
  {
114
127
  apiVersion: VIEW_WORKSPACE_API_VERSION,
@@ -141,8 +154,9 @@ function createWorkspaceToolContributions(workspace, operations) {
141
154
  }
142
155
 
143
156
  export {
157
+ workspaceToolValue,
144
158
  runWorkspaceToolApi,
145
159
  defineWorkspaceOperations,
146
160
  createWorkspaceToolContributions
147
161
  };
148
- //# sourceMappingURL=chunk-EZSGDSCC.mjs.map
162
+ //# sourceMappingURL=chunk-M7XSCLYV.mjs.map
@@ -0,0 +1,7 @@
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
+ }
@@ -4,13 +4,13 @@ import {
4
4
  import {
5
5
  createDisplayApiTools,
6
6
  runViewToolApi
7
- } from "./chunk-6KM24NH6.mjs";
7
+ } from "./chunk-3Y5WN22T.mjs";
8
8
  import {
9
9
  BACKEND_MODULE,
10
10
  BACKEND_PLUGIN_ID,
11
11
  VIEW_STATUS_SERVICE,
12
12
  VIEW_STATUS_TOPIC
13
- } from "./chunk-AGVLPYVE.mjs";
13
+ } from "./chunk-SKZC6VTV.mjs";
14
14
  import {
15
15
  createViewCarrierAdapter
16
16
  } from "./chunk-JU5PV2T2.mjs";
@@ -98,14 +98,44 @@ async function installRunObserver(ctx) {
98
98
  if (!transport || !("register" in transport)) throw new Error("Display backend requires a server transport");
99
99
  const api = ctx.get("toolApi");
100
100
  if (!api) throw new Error("Display backend requires ToolApi");
101
- let binding = null;
102
- let snapshot = { status: "idle", binding, observation: null };
101
+ const createSession = () => ({
102
+ binding: null,
103
+ snapshot: { status: "idle", binding: null, observation: null },
104
+ controller: new AbortController()
105
+ });
106
+ const ordinary = createSession();
107
+ const pages = /* @__PURE__ */ new Map();
103
108
  let disposed = false;
104
- let timer;
105
- let controller = new AbortController();
106
- const refresh = async () => {
107
- const selected = binding;
108
- const signal = controller.signal;
109
+ const pageId = (caller) => {
110
+ if (caller?.kind !== "frontend") return void 0;
111
+ if (caller.sourceId === "view-frontend") return caller.connectionId;
112
+ const resolve = ctx.get?.("engineWorkspaceForCaller", false);
113
+ const target = (resolve ? resolve(caller) : ctx.get?.("engineWorkspace", false))?.project?.target;
114
+ return target && caller.sourceId === `forgeax-workspace:${target.sessionId}:${target.targetId}` ? caller.connectionId : void 0;
115
+ };
116
+ const sessionFor = (caller) => {
117
+ const id = pageId(caller);
118
+ if (!id) return ordinary;
119
+ let session = pages.get(id);
120
+ if (!session) {
121
+ session = createSession();
122
+ pages.set(id, session);
123
+ }
124
+ return session;
125
+ };
126
+ const publish = (session, connectionId) => transport.publish(
127
+ VIEW_STATUS_TOPIC,
128
+ session.snapshot,
129
+ connectionId ? { connectionId } : { excludeConnectionIds: [...pages.keys()] }
130
+ );
131
+ const stopSession = (session) => {
132
+ session.controller.abort();
133
+ clearTimeout(session.timer);
134
+ session.timer = void 0;
135
+ };
136
+ const refresh = async (session, connectionId) => {
137
+ const selected = session.binding;
138
+ const signal = session.controller.signal;
109
139
  if (disposed || !selected || signal.aborted) return;
110
140
  try {
111
141
  const owner = api.describe("engine.run.observe", "engine-workspace").find((record) => record.callable)?.owner;
@@ -117,32 +147,40 @@ async function installRunObserver(ctx) {
117
147
  generation: owner.generation,
118
148
  signal
119
149
  }).terminal;
120
- if (disposed || signal.aborted || binding !== selected) return;
150
+ if (disposed || signal.aborted || session.binding !== selected) return;
121
151
  if (terminal.outcome === "failed") throw new Error(terminal.failure.hint);
122
152
  const observation = terminal.result;
123
- snapshot = observation.status?.runId === selected.runId ? { status: observation.status?.phase === "ready" ? "running" : observation.status?.phase ?? "idle", binding, observation } : { status: "unavailable", binding, observation: null, error: "The bound run is no longer active. Bind the new run explicitly." };
153
+ session.snapshot = observation.status?.runId === selected.runId ? { status: observation.status?.phase === "ready" ? "running" : observation.status?.phase ?? "idle", binding: selected, observation } : { status: "unavailable", binding: selected, observation: null, error: "The bound run is no longer active. Bind the new run explicitly." };
124
154
  }
125
155
  } catch (error) {
126
- if (!signal.aborted && binding === selected) snapshot = { status: "unavailable", binding, observation: null, error: String(error) };
156
+ if (!signal.aborted && session.binding === selected) session.snapshot = { status: "unavailable", binding: selected, observation: null, error: String(error) };
127
157
  } finally {
128
- if (!disposed && !signal.aborted && binding === selected) {
129
- transport.publish(VIEW_STATUS_TOPIC, snapshot);
130
- timer = setTimeout(refresh, 1e3);
131
- timer.unref?.();
158
+ if (!disposed && !signal.aborted && session.binding === selected) {
159
+ publish(session, connectionId);
160
+ session.timer = setTimeout(() => void refresh(session, connectionId), 1e3);
161
+ session.timer.unref?.();
132
162
  }
133
163
  }
134
164
  };
135
- const status = () => snapshot;
136
- const unregister = transport.register(VIEW_STATUS_SERVICE, status);
137
- const tools = createDisplayApiTools({ handshake: status, bind({ root, runId }) {
138
- controller.abort();
139
- clearTimeout(timer);
140
- controller = new AbortController();
141
- binding = root === null ? null : { root: root.trim(), runId: runId.trim() };
142
- snapshot = { status: binding ? "connecting" : "idle", binding, observation: null };
143
- transport.publish(VIEW_STATUS_TOPIC, snapshot);
144
- void refresh();
145
- return snapshot;
165
+ const status = (caller) => sessionFor(caller).snapshot;
166
+ const unregister = transport.register(VIEW_STATUS_SERVICE, ({ caller }) => status(caller));
167
+ const removeDisconnect = transport.onClientDisconnect((caller) => {
168
+ const id = caller.connectionId;
169
+ const session = pages.get(id);
170
+ if (!session) return;
171
+ pages.delete(id);
172
+ stopSession(session);
173
+ });
174
+ const tools = createDisplayApiTools({ handshake: status, bind({ root, runId }, caller) {
175
+ const session = sessionFor(caller);
176
+ stopSession(session);
177
+ session.controller = new AbortController();
178
+ session.binding = root === null ? null : { root: root.trim(), runId: runId.trim() };
179
+ session.snapshot = { status: session.binding ? "connecting" : "idle", binding: session.binding, observation: null };
180
+ const id = pageId(caller);
181
+ publish(session, id);
182
+ void refresh(session, id);
183
+ return session.snapshot;
146
184
  } });
147
185
  const provider = api.registerProvider({
148
186
  providerId: `view-observer:${ctx.fiber.uid}`,
@@ -155,8 +193,10 @@ async function installRunObserver(ctx) {
155
193
  ctx.provide("viewCapabilities", { ready: true, supportsPage: false });
156
194
  ctx.effect(() => async () => {
157
195
  disposed = true;
158
- controller.abort();
159
- clearTimeout(timer);
196
+ stopSession(ordinary);
197
+ for (const session of pages.values()) stopSession(session);
198
+ pages.clear();
199
+ removeDisconnect();
160
200
  unregister();
161
201
  await provider.revoke("View observer disposed");
162
202
  });
@@ -165,4 +205,4 @@ async function installRunObserver(ctx) {
165
205
  export {
166
206
  backend_default
167
207
  };
168
- //# sourceMappingURL=chunk-YLCJNKIW.mjs.map
208
+ //# sourceMappingURL=chunk-MFEFV3YF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/view-plugin-display/src/backend.ts"],
4
+ "sourcesContent": ["import type { Context } from '@forgeax/engine-plugin';\nimport type { Dispose } from '@forgeax/view-workspace-core/frontend-contract';\nimport type { ViewPlatform, CarrierCapabilities } from './carrier-contract.ts';\nimport type { DisplayStatusInput, RunBinding, RunObservation } from './status.ts';\nimport type { ToolExecutionOwner } from '@forgeax/engine-tool-runtime';\nimport type { ToolCallerIdentity } from '@forgeax/engine-tool-runtime';\nexport type DisplayBackendConfig = { platform?: ViewPlatform; capabilities?: Partial<CarrierCapabilities> };\ndeclare module '@forgeax/engine-plugin' { interface EngineContextServices { viewBroker: ViewResourceBroker; viewCarrier: ReturnType<typeof createViewCarrierAdapter>; viewCapabilities: Partial<CarrierCapabilities>; viewStatus: (caller?: ToolCallerIdentity) => DisplayStatusInput | ReturnType<ViewResourceBroker['handshake']> } }\nimport { registerTools } from '@forgeax/engine-plugin';\nimport { ViewResourceBroker } from './page-broker.ts';\nimport { createViewCarrierAdapter } from './carrier-adapter.ts';\nimport { runViewToolApi } from './tool-runtime.ts';\nimport {\n BACKEND_PLUGIN_ID,\n BACKEND_MODULE,\n VIEW_STATUS_SERVICE,\n VIEW_STATUS_TOPIC,\n} from './identity.ts';\nimport { createDisplayApiTools } from './api.ts';\n\nfunction bindPlatform(platform: ViewPlatform) {\n return {\n createPage: platform.createPage.bind(platform),\n ...(typeof platform.getCapabilities === 'function'\n ? { getCapabilities: platform.getCapabilities.bind(platform) }\n : {}),\n ...(typeof platform.dispose === 'function' ? { dispose: platform.dispose.bind(platform) } : {}),\n };\n}\n\nconst viewDisplayBackendPlugin = {\n name: BACKEND_PLUGIN_ID,\n inject: ['viewWorkspaceCore', 'toolApi'],\n provide: ['viewCapabilities', 'viewStatus'],\n async apply(ctx: Context, config: DisplayBackendConfig = {}) {\n if (!config.platform) return installRunObserver(ctx);\n const broker = new ViewResourceBroker({\n platform: bindPlatform(config.platform),\n capabilities: config.capabilities,\n });\n const carrier = createViewCarrierAdapter({\n broker,\n attachTarget(target) {\n const page = broker.getPage(target);\n return {\n page,\n execution: broker.getExecution(target),\n close: async (reason = 'engine-release') => { await broker.release(target, reason); },\n };\n },\n });\n const status = () => broker.handshake();\n const nativeTransport = ctx.get?.('hostTransport', false);\n const transport = nativeTransport && 'register' in nativeTransport ? nativeTransport : undefined;\n const unsubscribeStatus = broker.subscribe((snapshot) => {\n transport?.publish?.(VIEW_STATUS_TOPIC, snapshot);\n });\n const toolApi = ctx.get?.('toolApi', false);\n const workspace = ctx.get('viewWorkspaceCore');\n const statusTools = toolApi ? createDisplayApiTools(broker) : undefined;\n const statusProviderId = `view-display-status:${String(ctx.fiber.uid)}`;\n let revokeTools: Dispose | undefined;\n let unregisterStatus: (() => void) | undefined;\n let statusOwner: ToolExecutionOwner | undefined;\n ctx.effect(() => async () => {\n unregisterStatus?.();\n unsubscribeStatus();\n await revokeTools?.();\n await broker.dispose();\n });\n if (toolApi && statusTools) {\n revokeTools = registerTools(ctx, statusTools, {\n providerId: statusProviderId,\n sourceId: 'view-backend',\n module: BACKEND_MODULE,\n realm: 'host',\n });\n statusOwner = toolApi.describe(statusTools[0]?.descriptor.id, 'view-backend')[0]?.owner;\n }\n unregisterStatus = transport?.register?.(VIEW_STATUS_SERVICE, ({ payload, signal, caller }) =>\n statusOwner === undefined\n ? broker.handshake()\n : runViewToolApi(toolApi!, {\n operation: statusTools![0].descriptor.id,\n args: payload ?? {},\n signal,\n caller,\n providerId: statusOwner.providerId,\n generation: statusOwner.generation,\n }),\n );\n ctx.provide('viewBroker', broker);\n ctx.provide('viewCarrier', carrier);\n ctx.provide('viewCapabilities', broker.capabilities);\n ctx.provide('viewStatus', status);\n },\n};\n\nexport default viewDisplayBackendPlugin;\n\n/** Observe cached Engine output; this plugin never owns or drives a run. */\nasync function installRunObserver(ctx: Context) {\n const transport = ctx.get('hostTransport');\n if (!transport || !('register' in transport)) throw new Error('Display backend requires a server transport');\n const api = ctx.get('toolApi');\n if (!api) throw new Error('Display backend requires ToolApi');\n type Session = {\n binding: RunBinding | null;\n snapshot: DisplayStatusInput;\n controller: AbortController;\n timer?: ReturnType<typeof setTimeout>;\n };\n const createSession = (): Session => ({\n binding: null, snapshot: { status: 'idle', binding: null, observation: null },\n controller: new AbortController(),\n });\n const ordinary = createSession();\n const pages = new Map<string, Session>();\n let disposed = false;\n const pageId = (caller?: ToolCallerIdentity) => {\n if (caller?.kind !== 'frontend') return undefined;\n if (caller.sourceId === 'view-frontend') return caller.connectionId;\n const resolve = ctx.get?.('engineWorkspaceForCaller', false);\n const target = (resolve ? resolve(caller) : ctx.get?.('engineWorkspace', false))?.project?.target;\n return target && caller.sourceId === `forgeax-workspace:${target.sessionId}:${target.targetId}`\n ? caller.connectionId : undefined;\n };\n const sessionFor = (caller?: ToolCallerIdentity) => {\n const id = pageId(caller);\n if (!id) return ordinary;\n let session = pages.get(id);\n if (!session) { session = createSession(); pages.set(id, session); }\n return session;\n };\n const publish = (session: Session, connectionId?: string) => transport.publish(VIEW_STATUS_TOPIC, session.snapshot,\n connectionId ? { connectionId } : { excludeConnectionIds: [...pages.keys()] });\n const stopSession = (session: Session) => { session.controller.abort(); clearTimeout(session.timer); session.timer = undefined; };\n const refresh = async (session: Session, connectionId?: string) => {\n const selected = session.binding;\n const signal = session.controller.signal;\n if (disposed || !selected || signal.aborted) return;\n try {\n const owner = api.describe('engine.run.observe', 'engine-workspace').find(record => record.callable)?.owner;\n if (!owner) throw new Error('Engine run observation is unavailable.');\n else {\n const terminal = await api.run('engine.run.observe', { root: selected.root }, {\n sourceId: 'engine-workspace', providerId: owner.providerId, generation: owner.generation, signal,\n }).terminal;\n if (disposed || signal.aborted || session.binding !== selected) return;\n if (terminal.outcome === 'failed') throw new Error(terminal.failure.hint);\n const observation = terminal.result as RunObservation;\n session.snapshot = observation.status?.runId === selected.runId\n ? { status: observation.status?.phase === 'ready' ? 'running' : observation.status?.phase ?? 'idle', binding: selected, observation }\n : { status: 'unavailable', binding: selected, observation: null, error: 'The bound run is no longer active. Bind the new run explicitly.' };\n }\n } catch (error) {\n if (!signal.aborted && session.binding === selected) session.snapshot = { status: 'unavailable', binding: selected, observation: null, error: String(error) };\n } finally {\n if (!disposed && !signal.aborted && session.binding === selected) {\n publish(session, connectionId);\n session.timer = setTimeout(() => void refresh(session, connectionId), 1000);\n session.timer.unref?.();\n }\n }\n };\n const status = (caller?: ToolCallerIdentity) => sessionFor(caller).snapshot;\n const unregister = transport.register(VIEW_STATUS_SERVICE, ({ caller }) => status(caller));\n const removeDisconnect = transport.onClientDisconnect((caller) => {\n const id = caller.connectionId;\n const session = pages.get(id);\n if (!session) return;\n pages.delete(id);\n stopSession(session);\n });\n const tools = createDisplayApiTools({ handshake: status, bind({ root, runId }, caller) {\n const session = sessionFor(caller);\n stopSession(session);\n session.controller = new AbortController();\n session.binding = root === null ? null : { root: root.trim(), runId: runId!.trim() };\n session.snapshot = { status: session.binding ? 'connecting' : 'idle', binding: session.binding, observation: null };\n const id = pageId(caller);\n publish(session, id);\n void refresh(session, id);\n return session.snapshot;\n } });\n const provider = api.registerProvider({\n providerId: `view-observer:${ctx.fiber.uid}`, sourceId: 'view-backend', realm: 'host',\n module: BACKEND_MODULE, tools,\n });\n ctx.provide('viewStatus', status);\n ctx.provide('viewCapabilities', { ready: true, supportsPage: false });\n ctx.effect(() => async () => {\n disposed = true;\n stopSession(ordinary);\n for (const session of pages.values()) stopSession(session);\n pages.clear();\n removeDisconnect();\n unregister();\n await provider.revoke('View observer disposed');\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  viewInspectorBackendPlugin
3
- } from "./chunk-7IGFAI5H.mjs";
3
+ } from "./chunk-EW7VMNZA.mjs";
4
4
  import {
5
5
  BACKEND_MODULE,
6
6
  BACKEND_PLUGIN_ID
7
- } from "./chunk-EWSCJF77.mjs";
7
+ } from "./chunk-OS7BK3FO.mjs";
8
8
 
9
9
  // packages/view-plugin-plugins/src/backend.ts
10
10
  var VIEW_PLUGINS_PLUGIN_ID = BACKEND_PLUGIN_ID;
@@ -32,4 +32,4 @@ export {
32
32
  viewPluginsListBackendPlugin,
33
33
  backend_default
34
34
  };
35
- //# sourceMappingURL=chunk-55F55BQY.mjs.map
35
+ //# sourceMappingURL=chunk-MUBV2LNK.mjs.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createViewWorkspaceClient
3
- } from "./chunk-FNRGLCZW.mjs";
3
+ } from "./chunk-4RTL3LS3.mjs";
4
4
  import {
5
5
  VIEW_FILE_GET_SERVICE,
6
6
  VIEW_WORKSPACE_DOMAIN_OPERATIONS,
7
7
  VIEW_WORKSPACE_SERVICES,
8
8
  requireWorkspaceString,
9
9
  workspaceError
10
- } from "./chunk-E3Z7GLFU.mjs";
10
+ } from "./chunk-QYJZ3SOV.mjs";
11
11
 
12
12
  // packages/view-workspace-core/src/extension-bridge.ts
13
13
  var VIEW_EXTENSION_ID = "@forgeax-extension/view";
@@ -90,4 +90,4 @@ export {
90
90
  createViewExtensionTransport,
91
91
  createViewExtensionWorkspaceClient
92
92
  };
93
- //# sourceMappingURL=chunk-M6S5YA6X.mjs.map
93
+ //# sourceMappingURL=chunk-NHNPQ3ZS.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VIEW_PAGE_TYPES
3
- } from "./chunk-E3Z7GLFU.mjs";
3
+ } from "./chunk-QYJZ3SOV.mjs";
4
4
  import {
5
5
  __export
6
6
  } from "./chunk-FLGC65SR.mjs";
@@ -39,4 +39,4 @@ export {
39
39
  TITLE_I18N_KEY,
40
40
  identity_exports
41
41
  };
42
- //# sourceMappingURL=chunk-STQPRNEO.mjs.map
42
+ //# sourceMappingURL=chunk-NSPN5OQ5.mjs.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-YCMZAYBM.mjs";
4
4
  import {
5
5
  VIEW_WORKSPACE_TAB_ID
6
- } from "./chunk-E3Z7GLFU.mjs";
6
+ } from "./chunk-QYJZ3SOV.mjs";
7
7
 
8
8
  // src/view-project-open.ts
9
9
  import { realpath } from "node:fs/promises";
@@ -116,4 +116,4 @@ export {
116
116
  openViewProject,
117
117
  runViewProjectOpen
118
118
  };
119
- //# sourceMappingURL=chunk-XE6ITXHT.mjs.map
119
+ //# sourceMappingURL=chunk-NZ4N7AVG.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  workspaceDiagnosticRecord
3
- } from "./chunk-U5R6MVM4.mjs";
3
+ } from "./chunk-EQRDY5CQ.mjs";
4
4
 
5
5
  // packages/view-workspace-core/src/view-trace.ts
6
6
  var TRACE_KEY = "forgeax.view.trace";
@@ -805,4 +805,4 @@ export {
805
805
  tracePresentationAttach,
806
806
  traceSyncTargetSurfaces
807
807
  };
808
- //# sourceMappingURL=chunk-KAGFU64Y.mjs.map
808
+ //# sourceMappingURL=chunk-OGFZB75B.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VIEW_PAGE_TYPES
3
- } from "./chunk-E3Z7GLFU.mjs";
3
+ } from "./chunk-QYJZ3SOV.mjs";
4
4
  import {
5
5
  __export
6
6
  } from "./chunk-FLGC65SR.mjs";
@@ -44,4 +44,4 @@ export {
44
44
  TITLE_I18N_KEY,
45
45
  identity_exports
46
46
  };
47
- //# sourceMappingURL=chunk-EWSCJF77.mjs.map
47
+ //# sourceMappingURL=chunk-OS7BK3FO.mjs.map