@forgeax/view 0.2.1-beta-20260924075842

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 (585) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +742 -0
  3. package/dist/modules/backend.mjs +54 -0
  4. package/dist/modules/backend.mjs.map +7 -0
  5. package/dist/modules/browser.mjs +180 -0
  6. package/dist/modules/browser.mjs.map +7 -0
  7. package/dist/modules/carrier-contract.mjs +38 -0
  8. package/dist/modules/carrier-contract.mjs.map +7 -0
  9. package/dist/modules/carrier.mjs +13 -0
  10. package/dist/modules/carrier.mjs.map +7 -0
  11. package/dist/modules/chunks/chunk-2ASWB6IX.mjs +225 -0
  12. package/dist/modules/chunks/chunk-2ASWB6IX.mjs.map +7 -0
  13. package/dist/modules/chunks/chunk-2IJKOG2F.mjs +801 -0
  14. package/dist/modules/chunks/chunk-2IJKOG2F.mjs.map +7 -0
  15. package/dist/modules/chunks/chunk-2K3BBJ5S.mjs +9 -0
  16. package/dist/modules/chunks/chunk-2K3BBJ5S.mjs.map +7 -0
  17. package/dist/modules/chunks/chunk-32GD5LL6.mjs +482 -0
  18. package/dist/modules/chunks/chunk-32GD5LL6.mjs.map +7 -0
  19. package/dist/modules/chunks/chunk-3B4KFAEC.mjs +10 -0
  20. package/dist/modules/chunks/chunk-3B4KFAEC.mjs.map +7 -0
  21. package/dist/modules/chunks/chunk-46O5WX43.mjs +25 -0
  22. package/dist/modules/chunks/chunk-46O5WX43.mjs.map +7 -0
  23. package/dist/modules/chunks/chunk-47J5JXAB.mjs +237 -0
  24. package/dist/modules/chunks/chunk-47J5JXAB.mjs.map +7 -0
  25. package/dist/modules/chunks/chunk-4BXQOUDQ.mjs +17 -0
  26. package/dist/modules/chunks/chunk-4BXQOUDQ.mjs.map +7 -0
  27. package/dist/modules/chunks/chunk-4GQWYU2V.mjs +126 -0
  28. package/dist/modules/chunks/chunk-4GQWYU2V.mjs.map +7 -0
  29. package/dist/modules/chunks/chunk-4N5X2PRQ.mjs +48 -0
  30. package/dist/modules/chunks/chunk-4N5X2PRQ.mjs.map +7 -0
  31. package/dist/modules/chunks/chunk-4WXD2KYX.mjs +56 -0
  32. package/dist/modules/chunks/chunk-4WXD2KYX.mjs.map +7 -0
  33. package/dist/modules/chunks/chunk-6ZWWVAZK.mjs +468 -0
  34. package/dist/modules/chunks/chunk-6ZWWVAZK.mjs.map +7 -0
  35. package/dist/modules/chunks/chunk-73UZNRHN.mjs +296 -0
  36. package/dist/modules/chunks/chunk-73UZNRHN.mjs.map +7 -0
  37. package/dist/modules/chunks/chunk-7ITLCRND.mjs +10 -0
  38. package/dist/modules/chunks/chunk-7ITLCRND.mjs.map +7 -0
  39. package/dist/modules/chunks/chunk-7TGVWKH7.mjs +59 -0
  40. package/dist/modules/chunks/chunk-7TGVWKH7.mjs.map +7 -0
  41. package/dist/modules/chunks/chunk-7URFF53W.mjs +42 -0
  42. package/dist/modules/chunks/chunk-7URFF53W.mjs.map +7 -0
  43. package/dist/modules/chunks/chunk-7YSDRIFN.mjs +14 -0
  44. package/dist/modules/chunks/chunk-7YSDRIFN.mjs.map +7 -0
  45. package/dist/modules/chunks/chunk-AAFVCQPK.mjs +52 -0
  46. package/dist/modules/chunks/chunk-AAFVCQPK.mjs.map +7 -0
  47. package/dist/modules/chunks/chunk-AEK7ZESQ.mjs +18 -0
  48. package/dist/modules/chunks/chunk-AEK7ZESQ.mjs.map +7 -0
  49. package/dist/modules/chunks/chunk-AL6ZWIEU.mjs +42 -0
  50. package/dist/modules/chunks/chunk-AL6ZWIEU.mjs.map +7 -0
  51. package/dist/modules/chunks/chunk-ALT7XVMQ.mjs +73 -0
  52. package/dist/modules/chunks/chunk-ALT7XVMQ.mjs.map +7 -0
  53. package/dist/modules/chunks/chunk-ASI2HBE6.mjs +116 -0
  54. package/dist/modules/chunks/chunk-ASI2HBE6.mjs.map +7 -0
  55. package/dist/modules/chunks/chunk-ATWGCH7I.mjs +174 -0
  56. package/dist/modules/chunks/chunk-ATWGCH7I.mjs.map +7 -0
  57. package/dist/modules/chunks/chunk-C45U6IIY.mjs +692 -0
  58. package/dist/modules/chunks/chunk-C45U6IIY.mjs.map +7 -0
  59. package/dist/modules/chunks/chunk-C7R3YRA7.mjs +98 -0
  60. package/dist/modules/chunks/chunk-C7R3YRA7.mjs.map +7 -0
  61. package/dist/modules/chunks/chunk-CRMICXKN.mjs +87 -0
  62. package/dist/modules/chunks/chunk-CRMICXKN.mjs.map +7 -0
  63. package/dist/modules/chunks/chunk-CUH2G6UF.mjs +81 -0
  64. package/dist/modules/chunks/chunk-CUH2G6UF.mjs.map +7 -0
  65. package/dist/modules/chunks/chunk-D7GWRZLL.mjs +77 -0
  66. package/dist/modules/chunks/chunk-D7GWRZLL.mjs.map +7 -0
  67. package/dist/modules/chunks/chunk-DBWUIBE3.mjs +10 -0
  68. package/dist/modules/chunks/chunk-DBWUIBE3.mjs.map +7 -0
  69. package/dist/modules/chunks/chunk-DQWVWWUU.mjs +77 -0
  70. package/dist/modules/chunks/chunk-DQWVWWUU.mjs.map +7 -0
  71. package/dist/modules/chunks/chunk-DZZ2WFEU.mjs +122 -0
  72. package/dist/modules/chunks/chunk-DZZ2WFEU.mjs.map +7 -0
  73. package/dist/modules/chunks/chunk-E4UIAN26.mjs +58 -0
  74. package/dist/modules/chunks/chunk-E4UIAN26.mjs.map +7 -0
  75. package/dist/modules/chunks/chunk-EJGBVKFE.mjs +77 -0
  76. package/dist/modules/chunks/chunk-EJGBVKFE.mjs.map +7 -0
  77. package/dist/modules/chunks/chunk-EPSTTHWV.mjs +173 -0
  78. package/dist/modules/chunks/chunk-EPSTTHWV.mjs.map +7 -0
  79. package/dist/modules/chunks/chunk-ER7T6QJ3.mjs +64 -0
  80. package/dist/modules/chunks/chunk-ER7T6QJ3.mjs.map +7 -0
  81. package/dist/modules/chunks/chunk-FD4BAJ6K.mjs +389 -0
  82. package/dist/modules/chunks/chunk-FD4BAJ6K.mjs.map +7 -0
  83. package/dist/modules/chunks/chunk-FJM6WWIY.mjs +80 -0
  84. package/dist/modules/chunks/chunk-FJM6WWIY.mjs.map +7 -0
  85. package/dist/modules/chunks/chunk-FKCQYDLX.mjs +162 -0
  86. package/dist/modules/chunks/chunk-FKCQYDLX.mjs.map +7 -0
  87. package/dist/modules/chunks/chunk-FLGC65SR.mjs +10 -0
  88. package/dist/modules/chunks/chunk-FLGC65SR.mjs.map +7 -0
  89. package/dist/modules/chunks/chunk-FMCACPX5.mjs +289 -0
  90. package/dist/modules/chunks/chunk-FMCACPX5.mjs.map +7 -0
  91. package/dist/modules/chunks/chunk-FOBRLUQV.mjs +51 -0
  92. package/dist/modules/chunks/chunk-FOBRLUQV.mjs.map +7 -0
  93. package/dist/modules/chunks/chunk-FV3DSKZB.mjs +33 -0
  94. package/dist/modules/chunks/chunk-FV3DSKZB.mjs.map +7 -0
  95. package/dist/modules/chunks/chunk-G7BAFAGO.mjs +98 -0
  96. package/dist/modules/chunks/chunk-G7BAFAGO.mjs.map +7 -0
  97. package/dist/modules/chunks/chunk-GQBZMCTK.mjs +145 -0
  98. package/dist/modules/chunks/chunk-GQBZMCTK.mjs.map +7 -0
  99. package/dist/modules/chunks/chunk-GYWIY7AL.mjs +131 -0
  100. package/dist/modules/chunks/chunk-GYWIY7AL.mjs.map +7 -0
  101. package/dist/modules/chunks/chunk-H3KNBALD.mjs +256 -0
  102. package/dist/modules/chunks/chunk-H3KNBALD.mjs.map +7 -0
  103. package/dist/modules/chunks/chunk-H3M22JDL.mjs +144 -0
  104. package/dist/modules/chunks/chunk-H3M22JDL.mjs.map +7 -0
  105. package/dist/modules/chunks/chunk-HES3DNTM.mjs +40 -0
  106. package/dist/modules/chunks/chunk-HES3DNTM.mjs.map +7 -0
  107. package/dist/modules/chunks/chunk-I5BFP7SS.mjs +2392 -0
  108. package/dist/modules/chunks/chunk-I5BFP7SS.mjs.map +7 -0
  109. package/dist/modules/chunks/chunk-IGRMZYRD.mjs +15 -0
  110. package/dist/modules/chunks/chunk-IGRMZYRD.mjs.map +7 -0
  111. package/dist/modules/chunks/chunk-IKNGC766.mjs +321 -0
  112. package/dist/modules/chunks/chunk-IKNGC766.mjs.map +7 -0
  113. package/dist/modules/chunks/chunk-IVHNYKZB.mjs +35 -0
  114. package/dist/modules/chunks/chunk-IVHNYKZB.mjs.map +7 -0
  115. package/dist/modules/chunks/chunk-JHOURMYW.mjs +101 -0
  116. package/dist/modules/chunks/chunk-JHOURMYW.mjs.map +7 -0
  117. package/dist/modules/chunks/chunk-JURXMRFA.mjs +282 -0
  118. package/dist/modules/chunks/chunk-JURXMRFA.mjs.map +7 -0
  119. package/dist/modules/chunks/chunk-JWZIREC3.mjs +18 -0
  120. package/dist/modules/chunks/chunk-JWZIREC3.mjs.map +7 -0
  121. package/dist/modules/chunks/chunk-KHRTIZ56.mjs +1400 -0
  122. package/dist/modules/chunks/chunk-KHRTIZ56.mjs.map +7 -0
  123. package/dist/modules/chunks/chunk-KLJZZ23J.mjs +102 -0
  124. package/dist/modules/chunks/chunk-KLJZZ23J.mjs.map +7 -0
  125. package/dist/modules/chunks/chunk-KNBAYU5I.mjs +49 -0
  126. package/dist/modules/chunks/chunk-KNBAYU5I.mjs.map +7 -0
  127. package/dist/modules/chunks/chunk-KSZNCFU4.mjs +125 -0
  128. package/dist/modules/chunks/chunk-KSZNCFU4.mjs.map +7 -0
  129. package/dist/modules/chunks/chunk-L45W6KM6.mjs +158 -0
  130. package/dist/modules/chunks/chunk-L45W6KM6.mjs.map +7 -0
  131. package/dist/modules/chunks/chunk-LERMYZRC.mjs +239 -0
  132. package/dist/modules/chunks/chunk-LERMYZRC.mjs.map +7 -0
  133. package/dist/modules/chunks/chunk-LKJCXYSJ.mjs +91 -0
  134. package/dist/modules/chunks/chunk-LKJCXYSJ.mjs.map +7 -0
  135. package/dist/modules/chunks/chunk-MBS3EICT.mjs +25 -0
  136. package/dist/modules/chunks/chunk-MBS3EICT.mjs.map +7 -0
  137. package/dist/modules/chunks/chunk-MUOQZPVH.mjs +609 -0
  138. package/dist/modules/chunks/chunk-MUOQZPVH.mjs.map +7 -0
  139. package/dist/modules/chunks/chunk-MVEPGFSB.mjs +1 -0
  140. package/dist/modules/chunks/chunk-MVEPGFSB.mjs.map +7 -0
  141. package/dist/modules/chunks/chunk-NBJKLWJ5.mjs +42 -0
  142. package/dist/modules/chunks/chunk-NBJKLWJ5.mjs.map +7 -0
  143. package/dist/modules/chunks/chunk-NBLGKTEM.mjs +86 -0
  144. package/dist/modules/chunks/chunk-NBLGKTEM.mjs.map +7 -0
  145. package/dist/modules/chunks/chunk-NI7CS3I2.mjs +110 -0
  146. package/dist/modules/chunks/chunk-NI7CS3I2.mjs.map +7 -0
  147. package/dist/modules/chunks/chunk-NJH2OJFC.mjs +2113 -0
  148. package/dist/modules/chunks/chunk-NJH2OJFC.mjs.map +7 -0
  149. package/dist/modules/chunks/chunk-OBK4LIJB.mjs +20 -0
  150. package/dist/modules/chunks/chunk-OBK4LIJB.mjs.map +7 -0
  151. package/dist/modules/chunks/chunk-PEUT3FW7.mjs +1 -0
  152. package/dist/modules/chunks/chunk-PEUT3FW7.mjs.map +7 -0
  153. package/dist/modules/chunks/chunk-PRZOWPDN.mjs +66 -0
  154. package/dist/modules/chunks/chunk-PRZOWPDN.mjs.map +7 -0
  155. package/dist/modules/chunks/chunk-Q4RXBGQS.mjs +55 -0
  156. package/dist/modules/chunks/chunk-Q4RXBGQS.mjs.map +7 -0
  157. package/dist/modules/chunks/chunk-QBHBKOIL.mjs +55 -0
  158. package/dist/modules/chunks/chunk-QBHBKOIL.mjs.map +7 -0
  159. package/dist/modules/chunks/chunk-QD6CCRMG.mjs +20 -0
  160. package/dist/modules/chunks/chunk-QD6CCRMG.mjs.map +7 -0
  161. package/dist/modules/chunks/chunk-QF4V23GW.mjs +39 -0
  162. package/dist/modules/chunks/chunk-QF4V23GW.mjs.map +7 -0
  163. package/dist/modules/chunks/chunk-QK6W7MJO.mjs +42 -0
  164. package/dist/modules/chunks/chunk-QK6W7MJO.mjs.map +7 -0
  165. package/dist/modules/chunks/chunk-QL7V6DK7.mjs +34 -0
  166. package/dist/modules/chunks/chunk-QL7V6DK7.mjs.map +7 -0
  167. package/dist/modules/chunks/chunk-QLBQQKRI.mjs +25 -0
  168. package/dist/modules/chunks/chunk-QLBQQKRI.mjs.map +7 -0
  169. package/dist/modules/chunks/chunk-QLZQGZDC.mjs +418 -0
  170. package/dist/modules/chunks/chunk-QLZQGZDC.mjs.map +7 -0
  171. package/dist/modules/chunks/chunk-QSKQZGK7.mjs +1625 -0
  172. package/dist/modules/chunks/chunk-QSKQZGK7.mjs.map +7 -0
  173. package/dist/modules/chunks/chunk-QURKBAG4.mjs +25 -0
  174. package/dist/modules/chunks/chunk-QURKBAG4.mjs.map +7 -0
  175. package/dist/modules/chunks/chunk-R274XBEH.mjs +53 -0
  176. package/dist/modules/chunks/chunk-R274XBEH.mjs.map +7 -0
  177. package/dist/modules/chunks/chunk-R4I4JEY5.mjs +77 -0
  178. package/dist/modules/chunks/chunk-R4I4JEY5.mjs.map +7 -0
  179. package/dist/modules/chunks/chunk-RR6L6VVR.mjs +9 -0
  180. package/dist/modules/chunks/chunk-RR6L6VVR.mjs.map +7 -0
  181. package/dist/modules/chunks/chunk-RXF7SBBZ.mjs +125 -0
  182. package/dist/modules/chunks/chunk-RXF7SBBZ.mjs.map +7 -0
  183. package/dist/modules/chunks/chunk-SR66S6EJ.mjs +138 -0
  184. package/dist/modules/chunks/chunk-SR66S6EJ.mjs.map +7 -0
  185. package/dist/modules/chunks/chunk-SSQMQJ52.mjs +27 -0
  186. package/dist/modules/chunks/chunk-SSQMQJ52.mjs.map +7 -0
  187. package/dist/modules/chunks/chunk-TP26TASL.mjs +20 -0
  188. package/dist/modules/chunks/chunk-TP26TASL.mjs.map +7 -0
  189. package/dist/modules/chunks/chunk-TSAEK5P3.mjs +50 -0
  190. package/dist/modules/chunks/chunk-TSAEK5P3.mjs.map +7 -0
  191. package/dist/modules/chunks/chunk-UAY27HT3.mjs +68 -0
  192. package/dist/modules/chunks/chunk-UAY27HT3.mjs.map +7 -0
  193. package/dist/modules/chunks/chunk-UDLIWGWS.mjs +103 -0
  194. package/dist/modules/chunks/chunk-UDLIWGWS.mjs.map +7 -0
  195. package/dist/modules/chunks/chunk-UDVQHPWV.mjs +89 -0
  196. package/dist/modules/chunks/chunk-UDVQHPWV.mjs.map +7 -0
  197. package/dist/modules/chunks/chunk-UM23W3G7.mjs +237 -0
  198. package/dist/modules/chunks/chunk-UM23W3G7.mjs.map +7 -0
  199. package/dist/modules/chunks/chunk-VDZJWEAA.mjs +214 -0
  200. package/dist/modules/chunks/chunk-VDZJWEAA.mjs.map +7 -0
  201. package/dist/modules/chunks/chunk-VIGOJWSO.mjs +42 -0
  202. package/dist/modules/chunks/chunk-VIGOJWSO.mjs.map +7 -0
  203. package/dist/modules/chunks/chunk-VY3S5BWI.mjs +284 -0
  204. package/dist/modules/chunks/chunk-VY3S5BWI.mjs.map +7 -0
  205. package/dist/modules/chunks/chunk-VZXGRZYU.mjs +47 -0
  206. package/dist/modules/chunks/chunk-VZXGRZYU.mjs.map +7 -0
  207. package/dist/modules/chunks/chunk-W5DMQZB5.mjs +42 -0
  208. package/dist/modules/chunks/chunk-W5DMQZB5.mjs.map +7 -0
  209. package/dist/modules/chunks/chunk-WOMHSTVZ.mjs +918 -0
  210. package/dist/modules/chunks/chunk-WOMHSTVZ.mjs.map +7 -0
  211. package/dist/modules/chunks/chunk-XFQT7XCG.mjs +42 -0
  212. package/dist/modules/chunks/chunk-XFQT7XCG.mjs.map +7 -0
  213. package/dist/modules/chunks/chunk-XJZEVRYX.mjs +98 -0
  214. package/dist/modules/chunks/chunk-XJZEVRYX.mjs.map +7 -0
  215. package/dist/modules/chunks/chunk-XUYFV23R.mjs +317 -0
  216. package/dist/modules/chunks/chunk-XUYFV23R.mjs.map +7 -0
  217. package/dist/modules/chunks/chunk-Y5HXCPPQ.mjs +58 -0
  218. package/dist/modules/chunks/chunk-Y5HXCPPQ.mjs.map +7 -0
  219. package/dist/modules/chunks/chunk-YTHGRKGI.mjs +147 -0
  220. package/dist/modules/chunks/chunk-YTHGRKGI.mjs.map +7 -0
  221. package/dist/modules/chunks/chunk-YVQSDKAO.mjs +341 -0
  222. package/dist/modules/chunks/chunk-YVQSDKAO.mjs.map +7 -0
  223. package/dist/modules/chunks/chunk-YYXQDUVT.mjs +123 -0
  224. package/dist/modules/chunks/chunk-YYXQDUVT.mjs.map +7 -0
  225. package/dist/modules/chunks/chunk-ZFXZ2NUI.mjs +142 -0
  226. package/dist/modules/chunks/chunk-ZFXZ2NUI.mjs.map +7 -0
  227. package/dist/modules/chunks/chunk-ZLNWF4ET.mjs +9 -0
  228. package/dist/modules/chunks/chunk-ZLNWF4ET.mjs.map +7 -0
  229. package/dist/modules/chunks/chunk-ZLU5QW2O.mjs +9 -0
  230. package/dist/modules/chunks/chunk-ZLU5QW2O.mjs.map +7 -0
  231. package/dist/modules/chunks/chunk-ZNZPYE2V.mjs +28 -0
  232. package/dist/modules/chunks/chunk-ZNZPYE2V.mjs.map +7 -0
  233. package/dist/modules/chunks/core-564N45MO.mjs +7480 -0
  234. package/dist/modules/chunks/core-564N45MO.mjs.map +7 -0
  235. package/dist/modules/chunks/css-BKH4SVJG.mjs +8 -0
  236. package/dist/modules/chunks/css-BKH4SVJG.mjs.map +7 -0
  237. package/dist/modules/chunks/engine-javascript-PDVIGNGR.mjs +3241 -0
  238. package/dist/modules/chunks/engine-javascript-PDVIGNGR.mjs.map +7 -0
  239. package/dist/modules/chunks/github-dark-default-6HVTHEWF.mjs +8 -0
  240. package/dist/modules/chunks/github-dark-default-6HVTHEWF.mjs.map +7 -0
  241. package/dist/modules/chunks/github-light-default-LAXRA6XL.mjs +8 -0
  242. package/dist/modules/chunks/github-light-default-LAXRA6XL.mjs.map +7 -0
  243. package/dist/modules/chunks/glsl-UC3YWUD2.mjs +18 -0
  244. package/dist/modules/chunks/glsl-UC3YWUD2.mjs.map +7 -0
  245. package/dist/modules/chunks/html-FRVIUV63.mjs +19 -0
  246. package/dist/modules/chunks/html-FRVIUV63.mjs.map +7 -0
  247. package/dist/modules/chunks/javascript-LN3OC7S2.mjs +8 -0
  248. package/dist/modules/chunks/javascript-LN3OC7S2.mjs.map +7 -0
  249. package/dist/modules/chunks/json-5CUGWTOP.mjs +11 -0
  250. package/dist/modules/chunks/json-5CUGWTOP.mjs.map +7 -0
  251. package/dist/modules/chunks/json5-YZQI5VNO.mjs +11 -0
  252. package/dist/modules/chunks/json5-YZQI5VNO.mjs.map +7 -0
  253. package/dist/modules/chunks/jsonc-SWID6VOZ.mjs +11 -0
  254. package/dist/modules/chunks/jsonc-SWID6VOZ.mjs.map +7 -0
  255. package/dist/modules/chunks/jsx-A7RDCLJO.mjs +11 -0
  256. package/dist/modules/chunks/jsx-A7RDCLJO.mjs.map +7 -0
  257. package/dist/modules/chunks/markdown-QTCU5KP5.mjs +11 -0
  258. package/dist/modules/chunks/markdown-QTCU5KP5.mjs.map +7 -0
  259. package/dist/modules/chunks/python-LAZONBIB.mjs +11 -0
  260. package/dist/modules/chunks/python-LAZONBIB.mjs.map +7 -0
  261. package/dist/modules/chunks/rust-XWTPJFJO.mjs +11 -0
  262. package/dist/modules/chunks/rust-XWTPJFJO.mjs.map +7 -0
  263. package/dist/modules/chunks/scss-CFXRHUUW.mjs +15 -0
  264. package/dist/modules/chunks/scss-CFXRHUUW.mjs.map +7 -0
  265. package/dist/modules/chunks/shellscript-OHO3LCVU.mjs +11 -0
  266. package/dist/modules/chunks/shellscript-OHO3LCVU.mjs.map +7 -0
  267. package/dist/modules/chunks/toml-IOHFZJ5B.mjs +11 -0
  268. package/dist/modules/chunks/toml-IOHFZJ5B.mjs.map +7 -0
  269. package/dist/modules/chunks/tsx-2E6WNX2E.mjs +11 -0
  270. package/dist/modules/chunks/tsx-2E6WNX2E.mjs.map +7 -0
  271. package/dist/modules/chunks/typescript-PBKAS54P.mjs +11 -0
  272. package/dist/modules/chunks/typescript-PBKAS54P.mjs.map +7 -0
  273. package/dist/modules/chunks/wgsl-PS6QPRLZ.mjs +11 -0
  274. package/dist/modules/chunks/wgsl-PS6QPRLZ.mjs.map +7 -0
  275. package/dist/modules/chunks/xml-JECR2ACB.mjs +18 -0
  276. package/dist/modules/chunks/xml-JECR2ACB.mjs.map +7 -0
  277. package/dist/modules/chunks/yaml-P2SV4LOE.mjs +11 -0
  278. package/dist/modules/chunks/yaml-P2SV4LOE.mjs.map +7 -0
  279. package/dist/modules/cli-contributions.mjs +32 -0
  280. package/dist/modules/cli-contributions.mjs.map +7 -0
  281. package/dist/modules/cli.mjs +14 -0
  282. package/dist/modules/cli.mjs.map +7 -0
  283. package/dist/modules/command-executor.mjs +65 -0
  284. package/dist/modules/command-executor.mjs.map +7 -0
  285. package/dist/modules/commands.mjs +10 -0
  286. package/dist/modules/commands.mjs.map +7 -0
  287. package/dist/modules/embedded.mjs +18608 -0
  288. package/dist/modules/embedded.mjs.map +7 -0
  289. package/dist/modules/extension-bridge.mjs +18 -0
  290. package/dist/modules/extension-bridge.mjs.map +7 -0
  291. package/dist/modules/frontend-root.mjs +61 -0
  292. package/dist/modules/frontend-root.mjs.map +7 -0
  293. package/dist/modules/index.mjs +784 -0
  294. package/dist/modules/index.mjs.map +7 -0
  295. package/dist/modules/page.mjs +45 -0
  296. package/dist/modules/page.mjs.map +7 -0
  297. package/dist/modules/pages/scene.mjs +18 -0
  298. package/dist/modules/pages/scene.mjs.map +7 -0
  299. package/dist/modules/plugin.mjs +56 -0
  300. package/dist/modules/plugin.mjs.map +7 -0
  301. package/dist/modules/plugins/asset/frontend.mjs +23 -0
  302. package/dist/modules/plugins/asset/frontend.mjs.map +7 -0
  303. package/dist/modules/plugins/asset/i18n.mjs +15 -0
  304. package/dist/modules/plugins/asset/i18n.mjs.map +7 -0
  305. package/dist/modules/plugins/asset/identity.mjs +42 -0
  306. package/dist/modules/plugins/asset/identity.mjs.map +7 -0
  307. package/dist/modules/plugins/asset/schema.mjs +10 -0
  308. package/dist/modules/plugins/asset/schema.mjs.map +7 -0
  309. package/dist/modules/plugins/asset/ui.mjs +16 -0
  310. package/dist/modules/plugins/asset/ui.mjs.map +7 -0
  311. package/dist/modules/plugins/content-browser/frontend.mjs +17 -0
  312. package/dist/modules/plugins/content-browser/frontend.mjs.map +7 -0
  313. package/dist/modules/plugins/content-browser/i18n.mjs +15 -0
  314. package/dist/modules/plugins/content-browser/i18n.mjs.map +7 -0
  315. package/dist/modules/plugins/content-browser/identity.mjs +22 -0
  316. package/dist/modules/plugins/content-browser/identity.mjs.map +7 -0
  317. package/dist/modules/plugins/content-browser/schema.mjs +12 -0
  318. package/dist/modules/plugins/content-browser/schema.mjs.map +7 -0
  319. package/dist/modules/plugins/content-browser/ui.mjs +15 -0
  320. package/dist/modules/plugins/content-browser/ui.mjs.map +7 -0
  321. package/dist/modules/plugins/display/api.mjs +10 -0
  322. package/dist/modules/plugins/display/api.mjs.map +7 -0
  323. package/dist/modules/plugins/display/backend.mjs +16 -0
  324. package/dist/modules/plugins/display/backend.mjs.map +7 -0
  325. package/dist/modules/plugins/display/carrier-contract.mjs +38 -0
  326. package/dist/modules/plugins/display/carrier-contract.mjs.map +7 -0
  327. package/dist/modules/plugins/display/carrier.mjs +13 -0
  328. package/dist/modules/plugins/display/carrier.mjs.map +7 -0
  329. package/dist/modules/plugins/display/effects.mjs +8 -0
  330. package/dist/modules/plugins/display/effects.mjs.map +7 -0
  331. package/dist/modules/plugins/display/frontend.mjs +14 -0
  332. package/dist/modules/plugins/display/frontend.mjs.map +7 -0
  333. package/dist/modules/plugins/display/i18n.mjs +58 -0
  334. package/dist/modules/plugins/display/i18n.mjs.map +7 -0
  335. package/dist/modules/plugins/display/identity.mjs +30 -0
  336. package/dist/modules/plugins/display/identity.mjs.map +7 -0
  337. package/dist/modules/plugins/display/page-broker.mjs +12 -0
  338. package/dist/modules/plugins/display/page-broker.mjs.map +7 -0
  339. package/dist/modules/plugins/display/schema.mjs +40 -0
  340. package/dist/modules/plugins/display/schema.mjs.map +7 -0
  341. package/dist/modules/plugins/display/ui.mjs +9 -0
  342. package/dist/modules/plugins/display/ui.mjs.map +7 -0
  343. package/dist/modules/plugins/inspector/frontend.mjs +17 -0
  344. package/dist/modules/plugins/inspector/frontend.mjs.map +7 -0
  345. package/dist/modules/plugins/inspector/i18n.mjs +15 -0
  346. package/dist/modules/plugins/inspector/i18n.mjs.map +7 -0
  347. package/dist/modules/plugins/inspector/identity.mjs +22 -0
  348. package/dist/modules/plugins/inspector/identity.mjs.map +7 -0
  349. package/dist/modules/plugins/inspector/schema.mjs +12 -0
  350. package/dist/modules/plugins/inspector/schema.mjs.map +7 -0
  351. package/dist/modules/plugins/inspector/ui.mjs +16 -0
  352. package/dist/modules/plugins/inspector/ui.mjs.map +7 -0
  353. package/dist/modules/plugins/material/frontend.mjs +25 -0
  354. package/dist/modules/plugins/material/frontend.mjs.map +7 -0
  355. package/dist/modules/plugins/material/i18n.mjs +15 -0
  356. package/dist/modules/plugins/material/i18n.mjs.map +7 -0
  357. package/dist/modules/plugins/material/identity.mjs +60 -0
  358. package/dist/modules/plugins/material/identity.mjs.map +7 -0
  359. package/dist/modules/plugins/material/schema.mjs +47 -0
  360. package/dist/modules/plugins/material/schema.mjs.map +7 -0
  361. package/dist/modules/plugins/material/ui.mjs +28 -0
  362. package/dist/modules/plugins/material/ui.mjs.map +7 -0
  363. package/dist/modules/plugins/mesh/frontend.mjs +23 -0
  364. package/dist/modules/plugins/mesh/frontend.mjs.map +7 -0
  365. package/dist/modules/plugins/mesh/i18n.mjs +15 -0
  366. package/dist/modules/plugins/mesh/i18n.mjs.map +7 -0
  367. package/dist/modules/plugins/mesh/identity.mjs +54 -0
  368. package/dist/modules/plugins/mesh/identity.mjs.map +7 -0
  369. package/dist/modules/plugins/mesh/schema.mjs +10 -0
  370. package/dist/modules/plugins/mesh/schema.mjs.map +7 -0
  371. package/dist/modules/plugins/mesh/ui.mjs +26 -0
  372. package/dist/modules/plugins/mesh/ui.mjs.map +7 -0
  373. package/dist/modules/plugins/plugins/api.mjs +11 -0
  374. package/dist/modules/plugins/plugins/api.mjs.map +7 -0
  375. package/dist/modules/plugins/plugins/backend.mjs +21 -0
  376. package/dist/modules/plugins/plugins/backend.mjs.map +7 -0
  377. package/dist/modules/plugins/plugins/cli.mjs +12 -0
  378. package/dist/modules/plugins/plugins/cli.mjs.map +7 -0
  379. package/dist/modules/plugins/plugins/frontend.mjs +17 -0
  380. package/dist/modules/plugins/plugins/frontend.mjs.map +7 -0
  381. package/dist/modules/plugins/plugins/i18n.mjs +15 -0
  382. package/dist/modules/plugins/plugins/i18n.mjs.map +7 -0
  383. package/dist/modules/plugins/plugins/identity.mjs +26 -0
  384. package/dist/modules/plugins/plugins/identity.mjs.map +7 -0
  385. package/dist/modules/plugins/plugins/runtime.mjs +50 -0
  386. package/dist/modules/plugins/plugins/runtime.mjs.map +7 -0
  387. package/dist/modules/plugins/plugins/schema.mjs +12 -0
  388. package/dist/modules/plugins/plugins/schema.mjs.map +7 -0
  389. package/dist/modules/plugins/plugins/ui/panel.mjs +14 -0
  390. package/dist/modules/plugins/plugins/ui/panel.mjs.map +7 -0
  391. package/dist/modules/plugins/plugins/ui.mjs +15 -0
  392. package/dist/modules/plugins/plugins/ui.mjs.map +7 -0
  393. package/dist/modules/plugins/scene/frontend.mjs +18 -0
  394. package/dist/modules/plugins/scene/frontend.mjs.map +7 -0
  395. package/dist/modules/plugins/scene/identity.mjs +14 -0
  396. package/dist/modules/plugins/scene/identity.mjs.map +7 -0
  397. package/dist/modules/plugins/scene-tree/frontend.mjs +17 -0
  398. package/dist/modules/plugins/scene-tree/frontend.mjs.map +7 -0
  399. package/dist/modules/plugins/scene-tree/i18n.mjs +15 -0
  400. package/dist/modules/plugins/scene-tree/i18n.mjs.map +7 -0
  401. package/dist/modules/plugins/scene-tree/identity.mjs +22 -0
  402. package/dist/modules/plugins/scene-tree/identity.mjs.map +7 -0
  403. package/dist/modules/plugins/scene-tree/schema.mjs +12 -0
  404. package/dist/modules/plugins/scene-tree/schema.mjs.map +7 -0
  405. package/dist/modules/plugins/scene-tree/ui.mjs +16 -0
  406. package/dist/modules/plugins/scene-tree/ui.mjs.map +7 -0
  407. package/dist/modules/plugins/texture/frontend.mjs +23 -0
  408. package/dist/modules/plugins/texture/frontend.mjs.map +7 -0
  409. package/dist/modules/plugins/texture/i18n.mjs +15 -0
  410. package/dist/modules/plugins/texture/i18n.mjs.map +7 -0
  411. package/dist/modules/plugins/texture/identity.mjs +54 -0
  412. package/dist/modules/plugins/texture/identity.mjs.map +7 -0
  413. package/dist/modules/plugins/texture/schema.mjs +10 -0
  414. package/dist/modules/plugins/texture/schema.mjs.map +7 -0
  415. package/dist/modules/plugins/texture/ui.mjs +26 -0
  416. package/dist/modules/plugins/texture/ui.mjs.map +7 -0
  417. package/dist/modules/plugins/viewport/frontend.mjs +27 -0
  418. package/dist/modules/plugins/viewport/frontend.mjs.map +7 -0
  419. package/dist/modules/plugins/viewport/identity.mjs +28 -0
  420. package/dist/modules/plugins/viewport/identity.mjs.map +7 -0
  421. package/dist/modules/plugins/viewport/presentation-identity.mjs +10 -0
  422. package/dist/modules/plugins/viewport/presentation-identity.mjs.map +7 -0
  423. package/dist/modules/plugins/viewport/presentation.mjs +18 -0
  424. package/dist/modules/plugins/viewport/presentation.mjs.map +7 -0
  425. package/dist/modules/plugins/viewport/schema.mjs +18 -0
  426. package/dist/modules/plugins/viewport/schema.mjs.map +7 -0
  427. package/dist/modules/plugins/viewport/workspace-shell.mjs +29 -0
  428. package/dist/modules/plugins/viewport/workspace-shell.mjs.map +7 -0
  429. package/dist/modules/shell/contract.mjs +10 -0
  430. package/dist/modules/shell/contract.mjs.map +7 -0
  431. package/dist/modules/shell/frontend.mjs +14 -0
  432. package/dist/modules/shell/frontend.mjs.map +7 -0
  433. package/dist/modules/shell/layout-zones.mjs +20 -0
  434. package/dist/modules/shell/layout-zones.mjs.map +7 -0
  435. package/dist/modules/start-cli.mjs +57 -0
  436. package/dist/modules/start-cli.mjs.map +7 -0
  437. package/dist/modules/start.mjs +18 -0
  438. package/dist/modules/start.mjs.map +7 -0
  439. package/dist/modules/viewer/catalog/backend.mjs +47 -0
  440. package/dist/modules/viewer/catalog/backend.mjs.map +7 -0
  441. package/dist/modules/viewer/catalog/frontend.mjs +55 -0
  442. package/dist/modules/viewer/catalog/frontend.mjs.map +7 -0
  443. package/dist/modules/viewer/catalog/shared.mjs +43 -0
  444. package/dist/modules/viewer/catalog/shared.mjs.map +7 -0
  445. package/dist/modules/viewer/catalog.mjs +85 -0
  446. package/dist/modules/viewer/catalog.mjs.map +7 -0
  447. package/dist/modules/viewer/cli.mjs +23 -0
  448. package/dist/modules/viewer/cli.mjs.map +7 -0
  449. package/dist/modules/viewer-host/frontend.mjs +65 -0
  450. package/dist/modules/viewer-host/frontend.mjs.map +7 -0
  451. package/dist/modules/viewer-host/page-registry.mjs +27 -0
  452. package/dist/modules/viewer-host/page-registry.mjs.map +7 -0
  453. package/dist/modules/viewer-host/slot-registry.mjs +8 -0
  454. package/dist/modules/viewer-host/slot-registry.mjs.map +7 -0
  455. package/dist/modules/viewer-host.mjs +43 -0
  456. package/dist/modules/viewer-host.mjs.map +7 -0
  457. package/dist/modules/viewer.mjs +85 -0
  458. package/dist/modules/viewer.mjs.map +7 -0
  459. package/dist/modules/workspace/adopt-surface.mjs +16 -0
  460. package/dist/modules/workspace/adopt-surface.mjs.map +7 -0
  461. package/dist/modules/workspace/api.mjs +8 -0
  462. package/dist/modules/workspace/api.mjs.map +7 -0
  463. package/dist/modules/workspace/backend.mjs +23 -0
  464. package/dist/modules/workspace/backend.mjs.map +7 -0
  465. package/dist/modules/workspace/broker.mjs +16 -0
  466. package/dist/modules/workspace/broker.mjs.map +7 -0
  467. package/dist/modules/workspace/cli.mjs +9 -0
  468. package/dist/modules/workspace/cli.mjs.map +7 -0
  469. package/dist/modules/workspace/client.mjs +15 -0
  470. package/dist/modules/workspace/client.mjs.map +7 -0
  471. package/dist/modules/workspace/command-error.mjs +16 -0
  472. package/dist/modules/workspace/command-error.mjs.map +7 -0
  473. package/dist/modules/workspace/contract.mjs +71 -0
  474. package/dist/modules/workspace/contract.mjs.map +7 -0
  475. package/dist/modules/workspace/demo-client.mjs +127 -0
  476. package/dist/modules/workspace/demo-client.mjs.map +7 -0
  477. package/dist/modules/workspace/engine-adapter.mjs +16 -0
  478. package/dist/modules/workspace/engine-adapter.mjs.map +7 -0
  479. package/dist/modules/workspace/engine-presentation.mjs +10 -0
  480. package/dist/modules/workspace/engine-presentation.mjs.map +7 -0
  481. package/dist/modules/workspace/extension-bridge.mjs +18 -0
  482. package/dist/modules/workspace/extension-bridge.mjs.map +7 -0
  483. package/dist/modules/workspace/frontend-plugin.mjs +18 -0
  484. package/dist/modules/workspace/frontend-plugin.mjs.map +7 -0
  485. package/dist/modules/workspace/frontend.mjs +29 -0
  486. package/dist/modules/workspace/frontend.mjs.map +7 -0
  487. package/dist/modules/workspace/id.mjs +8 -0
  488. package/dist/modules/workspace/id.mjs.map +7 -0
  489. package/dist/modules/workspace/inspection-presentation.mjs +12 -0
  490. package/dist/modules/workspace/inspection-presentation.mjs.map +7 -0
  491. package/dist/modules/workspace/locale-bridge.mjs +14 -0
  492. package/dist/modules/workspace/locale-bridge.mjs.map +7 -0
  493. package/dist/modules/workspace/page-title.mjs +13 -0
  494. package/dist/modules/workspace/page-title.mjs.map +7 -0
  495. package/dist/modules/workspace/presentation.mjs +18 -0
  496. package/dist/modules/workspace/presentation.mjs.map +7 -0
  497. package/dist/modules/workspace/preview-surface.mjs +17 -0
  498. package/dist/modules/workspace/preview-surface.mjs.map +7 -0
  499. package/dist/modules/workspace/project-session.mjs +18 -0
  500. package/dist/modules/workspace/project-session.mjs.map +7 -0
  501. package/dist/modules/workspace/render-resize-sync.mjs +12 -0
  502. package/dist/modules/workspace/render-resize-sync.mjs.map +7 -0
  503. package/dist/modules/workspace/resident.mjs +16 -0
  504. package/dist/modules/workspace/resident.mjs.map +7 -0
  505. package/dist/modules/workspace/resource-open.mjs +34 -0
  506. package/dist/modules/workspace/resource-open.mjs.map +7 -0
  507. package/dist/modules/workspace/resource-page.mjs +27 -0
  508. package/dist/modules/workspace/resource-page.mjs.map +7 -0
  509. package/dist/modules/workspace/tool-runtime.mjs +14 -0
  510. package/dist/modules/workspace/tool-runtime.mjs.map +7 -0
  511. package/dist/modules/workspace/view-trace.mjs +60 -0
  512. package/dist/modules/workspace/view-trace.mjs.map +7 -0
  513. package/dist/modules/workspace/workspace-client-connection.mjs +22 -0
  514. package/dist/modules/workspace/workspace-client-connection.mjs.map +7 -0
  515. package/dist/modules/workspace/workspace-recovery.mjs +35 -0
  516. package/dist/modules/workspace/workspace-recovery.mjs.map +7 -0
  517. package/dist/modules/workspace/workspace-state.mjs +12 -0
  518. package/dist/modules/workspace/workspace-state.mjs.map +7 -0
  519. package/dist/modules/workspace-frontend.mjs +17 -0
  520. package/dist/modules/workspace-frontend.mjs.map +7 -0
  521. package/dist/viewer/assets/chunk-CilyBKbf.js +1 -0
  522. package/dist/viewer/assets/core-DSQma37-.js +13 -0
  523. package/dist/viewer/assets/core-DSQma37-.js.map +1 -0
  524. package/dist/viewer/assets/css-Bq1BXecw.js +2 -0
  525. package/dist/viewer/assets/css-Bq1BXecw.js.map +1 -0
  526. package/dist/viewer/assets/css-CWQWazmX.js +1 -0
  527. package/dist/viewer/assets/embedded-D4ZDx--W.js +2 -0
  528. package/dist/viewer/assets/embedded-D4ZDx--W.js.map +1 -0
  529. package/dist/viewer/assets/engine-javascript-BvokIV9O.js +142 -0
  530. package/dist/viewer/assets/engine-javascript-BvokIV9O.js.map +1 -0
  531. package/dist/viewer/assets/github-dark-default-DaDlj-WZ.js +2 -0
  532. package/dist/viewer/assets/github-dark-default-DaDlj-WZ.js.map +1 -0
  533. package/dist/viewer/assets/github-light-default-BqhWxAZd.js +2 -0
  534. package/dist/viewer/assets/github-light-default-BqhWxAZd.js.map +1 -0
  535. package/dist/viewer/assets/glsl-BJgVnv11.js +2 -0
  536. package/dist/viewer/assets/glsl-BJgVnv11.js.map +1 -0
  537. package/dist/viewer/assets/html-AaaHGGyt.js +2 -0
  538. package/dist/viewer/assets/html-AaaHGGyt.js.map +1 -0
  539. package/dist/viewer/assets/javascript-BX9W64FE.js +1 -0
  540. package/dist/viewer/assets/javascript-DQODvD07.js +2 -0
  541. package/dist/viewer/assets/javascript-DQODvD07.js.map +1 -0
  542. package/dist/viewer/assets/json-CpcIDpT7.js +2 -0
  543. package/dist/viewer/assets/json-CpcIDpT7.js.map +1 -0
  544. package/dist/viewer/assets/json5-Czq4A7dk.js +2 -0
  545. package/dist/viewer/assets/json5-Czq4A7dk.js.map +1 -0
  546. package/dist/viewer/assets/jsonc-BXDfCMmu.js +2 -0
  547. package/dist/viewer/assets/jsonc-BXDfCMmu.js.map +1 -0
  548. package/dist/viewer/assets/jsx-DAWscEnf.js +2 -0
  549. package/dist/viewer/assets/jsx-DAWscEnf.js.map +1 -0
  550. package/dist/viewer/assets/main-C-2CHTN_.js +15 -0
  551. package/dist/viewer/assets/main-C-2CHTN_.js.map +1 -0
  552. package/dist/viewer/assets/markdown-Cx1FMNw-.js +2 -0
  553. package/dist/viewer/assets/markdown-Cx1FMNw-.js.map +1 -0
  554. package/dist/viewer/assets/panels-entry-Ddhfjgf0.js +46 -0
  555. package/dist/viewer/assets/panels-entry-Ddhfjgf0.js.map +1 -0
  556. package/dist/viewer/assets/python-CYPKjWV9.js +2 -0
  557. package/dist/viewer/assets/python-CYPKjWV9.js.map +1 -0
  558. package/dist/viewer/assets/rust-0e5cNx_V.js +2 -0
  559. package/dist/viewer/assets/rust-0e5cNx_V.js.map +1 -0
  560. package/dist/viewer/assets/scss-B-aKzLbT.js +2 -0
  561. package/dist/viewer/assets/scss-B-aKzLbT.js.map +1 -0
  562. package/dist/viewer/assets/shellscript-CpXD-pSm.js +2 -0
  563. package/dist/viewer/assets/shellscript-CpXD-pSm.js.map +1 -0
  564. package/dist/viewer/assets/style-ClttNKZk.css +2 -0
  565. package/dist/viewer/assets/styles-BXozhwiU.js +11 -0
  566. package/dist/viewer/assets/styles-BXozhwiU.js.map +1 -0
  567. package/dist/viewer/assets/toml-GmchYTXa.js +2 -0
  568. package/dist/viewer/assets/toml-GmchYTXa.js.map +1 -0
  569. package/dist/viewer/assets/tsx-Crj1Bi53.js +2 -0
  570. package/dist/viewer/assets/tsx-Crj1Bi53.js.map +1 -0
  571. package/dist/viewer/assets/typescript-xi0cSHCO.js +2 -0
  572. package/dist/viewer/assets/typescript-xi0cSHCO.js.map +1 -0
  573. package/dist/viewer/assets/wgsl-BoEPRo9U.js +2 -0
  574. package/dist/viewer/assets/wgsl-BoEPRo9U.js.map +1 -0
  575. package/dist/viewer/assets/xml-B8JqQrMD.js +2 -0
  576. package/dist/viewer/assets/xml-B8JqQrMD.js.map +1 -0
  577. package/dist/viewer/assets/yaml-DsIB85X9.js +2 -0
  578. package/dist/viewer/assets/yaml-DsIB85X9.js.map +1 -0
  579. package/dist/viewer/index.html +15 -0
  580. package/dist/viewer/panels.js +1 -0
  581. package/host.pack.json +13 -0
  582. package/package.json +174 -0
  583. package/skills/forgeax-view-cli/SKILL.md +74 -0
  584. package/skills/forgeax-view-start/SKILL.md +202 -0
  585. package/skills/forgeax-view-start/scripts/start-view.mjs +202 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/view-workspace-core/src/broker.mjs", "../../../packages/view-workspace-core/src/file-preview.mjs"],
4
+ "sourcesContent": ["import { randomUUID } from 'node:crypto';\nimport { runWorkspaceToolApi } from './tool-runtime.mjs';\nimport {\n VIEW_DISPLAY_TAB_ID, VIEW_WORKSPACE_TAB_ID, VIEW_WORKSPACE_API_VERSION,\n VIEW_FILE_GET_SERVICE, VIEW_WORKSPACE_SERVICES, VIEW_WORKSPACE_STATE_TOPIC, VIEW_WORKSPACE_OPERATIONS,\n assertWorkspaceRequest, cloneWorkspaceValue, requireWorkspaceString,\n serializeWorkspaceState, serializeWorkspaceAsset, serializeWorkspaceInspection,\n serializeWorkspaceOpenRequest, workspaceCapabilities, workspaceError,\n workspaceUiFingerprint,\n} from './contract.mjs';\nimport { createWorkspaceId } from './id.mjs';\nimport {\n editorSceneTargetIds,\n isEditorWorkspaceAsset,\n isTypePreviewAsset,\n logResourceOpen,\n selectEditorWorkspacePreview,\n summarizeResourceAsset,\n} from './resource-open.mjs';\nimport { readWorkspaceFilePreview } from './file-preview.mjs';\nimport {\n isWorkspaceTargetRecoveryCode,\n resolveWorkspaceFailure,\n resolveWorkspaceReopenRoot,\n} from './workspace-recovery.mjs';\n\nconst ENGINE_SOURCE = 'engine-workspace';\nconst UI_OPERATIONS = Object.freeze({\n 'target.select': (workspace, args) => workspace.selectTarget(args),\n 'tabs.get': (workspace) => workspace.snapshot(),\n 'tabs.select': (workspace, args) => workspace.selectTab(args),\n 'scene.select': (workspace, args, context) => workspace.selectSceneEntity(args, context),\n 'scene.pick': (workspace, args, context) => workspace.pickSceneEntity(args, context),\n 'scene.clear': (workspace, args, context) => workspace.clearSceneSelection(args, context),\n});\n\n/** View bindings and display snapshots. Engine owns all project and target resources. */\nexport class ViewWorkspaceBroker {\n constructor({ engine, toolApi, display = () => undefined, accessToken = randomUUID(), authorize } = {}) {\n this.engine = engine;\n this.toolApi = toolApi;\n this.display = display;\n this.accessToken = accessToken;\n this.authorize = authorize;\n this.selectedTabId = VIEW_WORKSPACE_TAB_ID;\n this.targetBinding = 'editor';\n this.editorTargetId = undefined;\n this.playOwner = undefined;\n this.revision = 0;\n this.listeners = new Set();\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.disposing = false;\n this.publishFingerprint = '';\n }\n\n get project() { return this.engine?.project?.project ?? null; }\n get projectTarget() { return this.engine?.project?.target ?? null; }\n get preview() { this.syncBindings(); return this.previewProjection; }\n\n previews() { return this.engine?.previews ?? (this.engine?.preview ? [this.engine.preview] : []); }\n classifiedPreviews() {\n return this.previews().map((preview) => ({\n target: preview.target,\n asset: this.hydrateAsset(preview.asset),\n }));\n }\n editorPreview() {\n const live = this.previews();\n const selected = selectEditorWorkspacePreview(this.classifiedPreviews(), this.editorTargetId);\n if (!selected) return undefined;\n return live.find((preview) => String(preview.target.targetId) === String(selected.target.targetId));\n }\n boundTarget() { return this.targetBinding === 'play' ? this.engine?.play : this.previews().find(preview => preview.target.targetId === this.previewTargetId) ?? this.editorPreview(); }\n hydrateAsset(asset) {\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 } = {}) {\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;\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 } : null;\n }\n }\n\n snapshot() {\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 assets: this.assets,\n preview: this.previewProjection && { ...this.previewProjection, target: this.boundTarget().target, asset: this.hydrateAsset(this.previewProjection.asset) },\n editorPreview: this.editorPreview() ? { target: this.editorPreview().target, asset: this.hydrateAsset(this.editorPreview().asset) } : null,\n previews: this.previews().map(preview => ({ target: preview.target, asset: this.hydrateAsset(preview.asset) })),\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) {\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, caller) {\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, { signal, caller } = {}) {\n const request = assertWorkspaceRequest(rawRequest);\n await this.authorizeRequest(request, caller);\n const ui = UI_OPERATIONS[request.operation];\n if (ui) return ui(this, request.args, { signal, caller, clientId: request.clientId });\n if (request.operation === 'project.reopen') {\n return this.reopenProject(request.args, {\n signal,\n caller,\n clientId: request.clientId,\n token: request.token,\n requestId: request.requestId,\n });\n }\n return this.invoke(request.operation, request.args, { signal, caller, clientId: request.clientId, token: request.token, requestId: request.requestId });\n }\n async invoke(operation, args = {}, { signal, caller, clientId = 'view-owner', token, requestId } = {}) {\n const { tabId, ...input } = args;\n if (tabId !== undefined) this.assertWorkspaceTab(tabId);\n const inspector = operation.startsWith('plugins.');\n const presentation = operation.startsWith('display.');\n const id = inspector ? operation : `${presentation ? 'view' : 'engine'}.${operation}`;\n const sourceId = inspector || presentation ? 'view-backend' : ENGINE_SOURCE;\n const owner = this.toolApi?.describe(id, sourceId).find(record => record.callable)?.owner;\n if (!owner) throw workspaceError('view-workspace-operation-unavailable', `Engine operation ${operation} to be installed`, 'Enable the Engine capability; UI plugins do not provide domain APIs.', { operation });\n const requestedPreview = [...this.previews(), this.engine?.play].find(preview => preview?.target.targetId === input.targetId);\n const terminal = await this.toolApi.run(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) {\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 } = {}) {\n if (![VIEW_DISPLAY_TAB_ID, VIEW_WORKSPACE_TAB_ID].includes(tabId)) throw workspaceError('view-workspace-tab-not-found', 'an existing tab', 'Refresh tabs.get.', { tabId });\n this.selectedTabId = tabId; this.changed(); return this.snapshot();\n }\n async selectSceneEntity(args = {}, context) {\n requireWorkspaceString(args.entityId, 'entityId');\n return this.changeSceneSelection(args, context, () => args);\n }\n pickSceneEntity(args = {}, context) {\n return this.changeSceneSelection(args, context, async requestContext => {\n const result = await this.invoke('target.pick', args, requestContext);\n if (result?.entityId === null) return null;\n requireWorkspaceString(result?.entityId, 'pick.entityId');\n return { entityId: result.entityId };\n });\n }\n clearSceneSelection(args = {}, context) {\n return this.changeSceneSelection(args, context, () => null);\n }\n async changeSceneSelection({ tabId, targetId, targetGeneration } = {}, context, resolveSelection) {\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);\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, ...(label === undefined ? {} : { label: String(label) }) }, targetId, targetGeneration } : null;\n this.changed();\n return this.snapshot();\n }\n openProject(args, context) { return this.invoke('project.open', args, context); }\n async reopenProject(args = {}, context) {\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, context) { return this.invoke('project.close', args, context); }\n listAssets(args, context) { return this.invoke('assets.list', args, context); }\n inspectAsset(args, context) { return this.invoke('asset.inspect', args, context); }\n rebuildAssetSource(args, { mode = 'rebuild', ...context } = {}) { return this.invoke(`asset-source.${mode}`, args, context); }\n bindOpenedAsset(result, guid) {\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 })) {\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 } = {}) {\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, context) { return this.invoke('asset.open', args, context); }\n closePreview(args, context) { return this.invoke('preview.close', args, context); }\n capture(args, context) { return this.invoke('preview.capture', args, context); }\n resizePreview(args, context) { return this.invoke('preview.resize', args, context); }\n getCamera(args, context) { return this.invoke('camera.get', args, context); }\n beginCamera(args, context) { return this.invoke('camera.begin', { ...args, interactionId: args.interactionId ?? randomUUID() }, context); }\n updateCamera(args, context) { return this.invoke('camera.update', args, context); }\n commitCamera(args, context) { return this.invoke('camera.commit', args, context); }\n abortCamera(args, context) { return this.invoke('camera.abort', args, context); }\n getSceneTree(args, context) { return this.invoke('scene-tree.get', args, context); }\n async revokeConnection(connectionId) {\n if (typeof connectionId !== 'string') return;\n for (const preview of [this.engine?.preview, this.engine?.play]) {\n if (!preview) continue;\n // The target may already be gone together with its browser page; revoking\n // its input connection is best-effort cleanup, not a failure.\n try {\n const result = await preview.revokeConnection?.({ targetId: preview.target.targetId, connectionId });\n this.syncBindings();\n if (this.previewOwner === preview && this.previewProjection && result) {\n this.previewProjection.interaction = result.interaction ?? null;\n this.previewProjection.cameraVersion = result.version;\n }\n } catch {\n // A lost target owns its own teardown.\n }\n }\n this.changed();\n }\n /**\n * Reset per-page UI session state when a new View frontend page is admitted.\n * The open project and its Engine session stay; everything the previous page\n * accumulated after project.open returns to the just-opened state, so a\n * refreshed page's first snapshot does not inherit the old page's history.\n */\n resetPageSession() {\n if (this.disposing) return;\n this.selectedTabId = VIEW_WORKSPACE_TAB_ID;\n this.targetBinding = 'editor';\n this.previewTargetId = undefined;\n this.inspection = null;\n this.openRequest = null;\n this.openRequestSequence = 0;\n this.resourceOpens = new Map();\n this.sceneSelection = null;\n this.selectionAbort?.abort();\n this.selectionAbort = undefined;\n // Rebuild the preview projection from the editor target so camera and\n // interaction state held for the previous page are not carried over.\n this.previewOwner = undefined;\n this.syncBindings();\n this.changed();\n // A refreshed page may have destroyed the Engine workspace session along\n // with its browser page. Probe the session so a lost target surfaces as\n // workspaceTargetLost through the existing recovery path instead of\n // waiting for the next user operation to fail.\n const project = this.project;\n if (project) {\n void this.invoke('assets.list', { projectId: project.id }).catch(() => {});\n }\n }\n registerTransport(transport, { routeThroughTools = false } = {}) {\n const capabilities = transport.register(VIEW_WORKSPACE_SERVICES.capabilities, () => this.capabilities());\n const call = transport.register(VIEW_WORKSPACE_SERVICES.call, async ({ payload, signal, caller }) => {\n try {\n return routeThroughTools\n ? await runWorkspaceToolApi(this.toolApi, {\n operation: `view.workspace.${payload.operation}`, args: payload.args,\n clientId: payload.clientId, token: payload.token, requestId: payload.requestId,\n caller, signal, sourceId: 'view-workspace',\n })\n : await this.call(payload, { signal, caller });\n }\n catch (error) {\n if (!error.code?.startsWith('view-')) throw error;\n throw Object.assign(new Error(error.message), { name: 'HostAssemblyError', code: 'host-transport-failure',\n expected: error.expected, hint: error.hint, detail: { ...error.detail, remoteCode: error.code } });\n }\n });\n const fileGet = transport.register(VIEW_FILE_GET_SERVICE, async ({ payload }) => {\n try { return await readWorkspaceFilePreview(this, payload); }\n catch (error) {\n if (!error.code?.startsWith('view-')) throw error;\n throw Object.assign(new Error(error.message), { name: 'HostAssemblyError', code: 'host-transport-failure',\n expected: error.expected, hint: error.hint, detail: { ...error.detail, remoteCode: error.code } });\n }\n });\n const subscription = this.subscribe(state => transport.publish(VIEW_WORKSPACE_STATE_TOPIC, state));\n const observer = transport.connect();\n const engineSubscription = observer.subscribe('engine.workspace.state', () => this.changed());\n return () => { capabilities(); call(); fileGet(); subscription(); engineSubscription(); observer.close(); };\n }\n async dispose() { this.selectionAbort?.abort(); this.disposing = true; this.listeners.clear(); }\n}\n", "import { readFile, stat } from 'node:fs/promises';\nimport { extname, isAbsolute, relative, resolve } from 'node:path';\n\nimport { workspaceError } from './contract.mjs';\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 = 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) {\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, input) {\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, rel) {\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, payload = {}) {\n const root = workspace?.project?.root;\n if (typeof root !== 'string' || root.trim() === '') {\n throw workspaceError(\n 'view-workspace-project-closed',\n 'an open project',\n 'Open a project before previewing source files.',\n );\n }\n const resolved = resolveProjectFilePath(root, payload?.path);\n if (!resolved) {\n throw workspaceError(\n 'view-workspace-invalid-args',\n 'path to be a file inside the open project',\n 'Provide a project-relative or in-project absolute path.',\n { field: 'path' },\n );\n }\n try {\n return await readFilePreview(resolved.abs, resolved.rel);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.startsWith('is a directory')) {\n throw workspaceError(\n 'view-workspace-invalid-args',\n 'a file path',\n message,\n { path: resolved.rel },\n );\n }\n throw workspaceError(\n 'view-workspace-file-not-found',\n 'the file to exist in the open project',\n 'Refresh the content browser and retry.',\n { path: resolved.rel },\n );\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,98 @@
1
+ // packages/view-workspace-core/src/adopt-surface.mjs
2
+ var SCENE_SHELL_ID = "app-shell";
3
+ function readSceneShell(document) {
4
+ return document?.getElementById?.(SCENE_SHELL_ID) ?? null;
5
+ }
6
+ function placeSurface(container, surface, { replace = false } = {}) {
7
+ if (!container || !surface || surface.parentNode === container) return false;
8
+ if (container.isConnected === false) return false;
9
+ if (replace && typeof container.replaceChildren === "function") {
10
+ container.replaceChildren(surface);
11
+ return true;
12
+ }
13
+ container.append?.(surface);
14
+ return true;
15
+ }
16
+ function keepSurfaceInContainer({
17
+ document,
18
+ getContainer,
19
+ getSurface,
20
+ replace = false,
21
+ onPlace,
22
+ poll = false
23
+ } = {}) {
24
+ let stopped = false;
25
+ const sync = () => {
26
+ if (stopped) return;
27
+ const container = getContainer?.();
28
+ const surface = getSurface?.();
29
+ if (!container || !surface || container.isConnected === false) return;
30
+ if (!placeSurface(container, surface, { replace })) return;
31
+ onPlace?.(surface, container);
32
+ };
33
+ sync();
34
+ const root = document?.documentElement ?? document?.body;
35
+ const Observer = document?.defaultView?.MutationObserver ?? globalThis.MutationObserver;
36
+ const win = document?.defaultView ?? globalThis;
37
+ let observer;
38
+ let raf = 0;
39
+ if (root && typeof Observer === "function") {
40
+ observer = new Observer(sync);
41
+ observer.observe(root, { childList: true, subtree: true });
42
+ }
43
+ if (poll && typeof win.requestAnimationFrame === "function") {
44
+ const tick = () => {
45
+ if (stopped) return;
46
+ sync();
47
+ raf = win.requestAnimationFrame(tick);
48
+ };
49
+ raf = win.requestAnimationFrame(tick);
50
+ }
51
+ return () => {
52
+ stopped = true;
53
+ observer?.disconnect();
54
+ if (raf) win.cancelAnimationFrame?.(raf);
55
+ };
56
+ }
57
+ function watchUntilReady({ document, probe } = {}) {
58
+ let stopped = false;
59
+ const win = document?.defaultView ?? globalThis;
60
+ const Observer = document?.defaultView?.MutationObserver ?? globalThis.MutationObserver;
61
+ let observer;
62
+ let raf = 0;
63
+ const stop = () => {
64
+ if (stopped) return;
65
+ stopped = true;
66
+ observer?.disconnect();
67
+ if (raf) win.cancelAnimationFrame?.(raf);
68
+ };
69
+ const tick = () => {
70
+ if (stopped) return;
71
+ if (probe?.()) stop();
72
+ };
73
+ tick();
74
+ if (stopped) return stop;
75
+ const root = document?.documentElement ?? document?.body;
76
+ if (root && typeof Observer === "function") {
77
+ observer = new Observer(tick);
78
+ observer.observe(root, { childList: true, subtree: true });
79
+ }
80
+ if (typeof win.requestAnimationFrame === "function") {
81
+ const loop = () => {
82
+ if (stopped) return;
83
+ tick();
84
+ raf = win.requestAnimationFrame(loop);
85
+ };
86
+ raf = win.requestAnimationFrame(loop);
87
+ }
88
+ return stop;
89
+ }
90
+
91
+ export {
92
+ SCENE_SHELL_ID,
93
+ readSceneShell,
94
+ placeSurface,
95
+ keepSurfaceInContainer,
96
+ watchUntilReady
97
+ };
98
+ //# sourceMappingURL=chunk-C7R3YRA7.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/view-workspace-core/src/adopt-surface.mjs"],
4
+ "sourcesContent": ["export const SCENE_SHELL_ID = 'app-shell';\n\nexport function readSceneShell(document) {\n return document?.getElementById?.(SCENE_SHELL_ID) ?? null;\n}\n\nexport function placeSurface(container, surface, { replace = false } = {}) {\n if (!container || !surface || surface.parentNode === container) return false;\n // Engine createApp(canvas) requires isConnected. Never pull a live node into\n // a detached View host (Dock/page not mounted yet).\n if (container.isConnected === false) return false;\n if (replace && typeof container.replaceChildren === 'function') {\n container.replaceChildren(surface);\n return true;\n }\n container.append?.(surface);\n return true;\n}\n\n/**\n * Keep a live Engine node inside a View container regardless of which DOM\n * appears first. Re-adopts if the node is moved back to body/parking.\n */\nexport function keepSurfaceInContainer({\n document,\n getContainer,\n getSurface,\n replace = false,\n onPlace,\n poll = false,\n} = {}) {\n let stopped = false;\n const sync = () => {\n if (stopped) return;\n const container = getContainer?.();\n const surface = getSurface?.();\n if (!container || !surface || container.isConnected === false) return;\n if (!placeSurface(container, surface, { replace })) return;\n onPlace?.(surface, container);\n };\n sync();\n const root = document?.documentElement ?? document?.body;\n const Observer = document?.defaultView?.MutationObserver ?? globalThis.MutationObserver;\n const win = document?.defaultView ?? globalThis;\n let observer;\n let raf = 0;\n if (root && typeof Observer === 'function') {\n observer = new Observer(sync);\n observer.observe(root, { childList: true, subtree: true });\n }\n if (poll && typeof win.requestAnimationFrame === 'function') {\n const tick = () => {\n if (stopped) return;\n sync();\n raf = win.requestAnimationFrame(tick);\n };\n raf = win.requestAnimationFrame(tick);\n }\n return () => {\n stopped = true;\n observer?.disconnect();\n if (raf) win.cancelAnimationFrame?.(raf);\n };\n}\n\nexport function watchUntilReady({ document, probe } = {}) {\n let stopped = false;\n const win = document?.defaultView ?? globalThis;\n const Observer = document?.defaultView?.MutationObserver ?? globalThis.MutationObserver;\n let observer;\n let raf = 0;\n const stop = () => {\n if (stopped) return;\n stopped = true;\n observer?.disconnect();\n if (raf) win.cancelAnimationFrame?.(raf);\n };\n const tick = () => {\n if (stopped) return;\n if (probe?.()) stop();\n };\n tick();\n if (stopped) return stop;\n const root = document?.documentElement ?? document?.body;\n if (root && typeof Observer === 'function') {\n observer = new Observer(tick);\n observer.observe(root, { childList: true, subtree: true });\n }\n if (typeof win.requestAnimationFrame === 'function') {\n const loop = () => {\n if (stopped) return;\n tick();\n raf = win.requestAnimationFrame(loop);\n };\n raf = win.requestAnimationFrame(loop);\n }\n return stop;\n}\n"],
5
+ "mappings": ";AAAO,IAAM,iBAAiB;AAEvB,SAAS,eAAe,UAAU;AACvC,SAAO,UAAU,iBAAiB,cAAc,KAAK;AACvD;AAEO,SAAS,aAAa,WAAW,SAAS,EAAE,UAAU,MAAM,IAAI,CAAC,GAAG;AACzE,MAAI,CAAC,aAAa,CAAC,WAAW,QAAQ,eAAe,UAAW,QAAO;AAGvE,MAAI,UAAU,gBAAgB,MAAO,QAAO;AAC5C,MAAI,WAAW,OAAO,UAAU,oBAAoB,YAAY;AAC9D,cAAU,gBAAgB,OAAO;AACjC,WAAO;AAAA,EACT;AACA,YAAU,SAAS,OAAO;AAC1B,SAAO;AACT;AAMO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,OAAO;AACT,IAAI,CAAC,GAAG;AACN,MAAI,UAAU;AACd,QAAM,OAAO,MAAM;AACjB,QAAI,QAAS;AACb,UAAM,YAAY,eAAe;AACjC,UAAM,UAAU,aAAa;AAC7B,QAAI,CAAC,aAAa,CAAC,WAAW,UAAU,gBAAgB,MAAO;AAC/D,QAAI,CAAC,aAAa,WAAW,SAAS,EAAE,QAAQ,CAAC,EAAG;AACpD,cAAU,SAAS,SAAS;AAAA,EAC9B;AACA,OAAK;AACL,QAAM,OAAO,UAAU,mBAAmB,UAAU;AACpD,QAAM,WAAW,UAAU,aAAa,oBAAoB,WAAW;AACvE,QAAM,MAAM,UAAU,eAAe;AACrC,MAAI;AACJ,MAAI,MAAM;AACV,MAAI,QAAQ,OAAO,aAAa,YAAY;AAC1C,eAAW,IAAI,SAAS,IAAI;AAC5B,aAAS,QAAQ,MAAM,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAAA,EAC3D;AACA,MAAI,QAAQ,OAAO,IAAI,0BAA0B,YAAY;AAC3D,UAAM,OAAO,MAAM;AACjB,UAAI,QAAS;AACb,WAAK;AACL,YAAM,IAAI,sBAAsB,IAAI;AAAA,IACtC;AACA,UAAM,IAAI,sBAAsB,IAAI;AAAA,EACtC;AACA,SAAO,MAAM;AACX,cAAU;AACV,cAAU,WAAW;AACrB,QAAI,IAAK,KAAI,uBAAuB,GAAG;AAAA,EACzC;AACF;AAEO,SAAS,gBAAgB,EAAE,UAAU,MAAM,IAAI,CAAC,GAAG;AACxD,MAAI,UAAU;AACd,QAAM,MAAM,UAAU,eAAe;AACrC,QAAM,WAAW,UAAU,aAAa,oBAAoB,WAAW;AACvE,MAAI;AACJ,MAAI,MAAM;AACV,QAAM,OAAO,MAAM;AACjB,QAAI,QAAS;AACb,cAAU;AACV,cAAU,WAAW;AACrB,QAAI,IAAK,KAAI,uBAAuB,GAAG;AAAA,EACzC;AACA,QAAM,OAAO,MAAM;AACjB,QAAI,QAAS;AACb,QAAI,QAAQ,EAAG,MAAK;AAAA,EACtB;AACA,OAAK;AACL,MAAI,QAAS,QAAO;AACpB,QAAM,OAAO,UAAU,mBAAmB,UAAU;AACpD,MAAI,QAAQ,OAAO,aAAa,YAAY;AAC1C,eAAW,IAAI,SAAS,IAAI;AAC5B,aAAS,QAAQ,MAAM,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAAA,EAC3D;AACA,MAAI,OAAO,IAAI,0BAA0B,YAAY;AACnD,UAAM,OAAO,MAAM;AACjB,UAAI,QAAS;AACb,WAAK;AACL,YAAM,IAAI,sBAAsB,IAAI;AAAA,IACtC;AACA,UAAM,IAAI,sBAAsB,IAAI;AAAA,EACtC;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,87 @@
1
+ // packages/view-plugin-content-browser/src/schema.mjs
2
+ var CONTENT_BROWSER_UI_SCHEMA_VERSION = "forgeax.view.content-browser.ui/1";
3
+ var CONTENT_BROWSER_ACTIONS = Object.freeze({
4
+ search: "content-browser.search",
5
+ navigate: "content-browser.navigate",
6
+ navigateBack: "content-browser.navigate.back",
7
+ navigateForward: "content-browser.navigate.forward",
8
+ refresh: "content-browser.refresh",
9
+ setView: "content-browser.view.set",
10
+ setThumbnailSize: "content-browser.thumbnail-size.set",
11
+ setFilter: "content-browser.filter.set",
12
+ setSort: "content-browser.sort.set",
13
+ select: "content-browser.select",
14
+ activate: "content-browser.activate",
15
+ toggleFavorite: "content-browser.favorite.toggle",
16
+ toggleSourceGroup: "content-browser.source-group.toggle",
17
+ toggleDetailPanel: "content-browser.detail-panel.toggle",
18
+ togglePackExpansion: "content-browser.pack.expand.toggle",
19
+ showContextMenu: "content-browser.context-menu.show",
20
+ copyPath: "content-browser.copy-path"
21
+ });
22
+ var CONTENT_BROWSER_MODEL_SCHEMA = Object.freeze({
23
+ $id: CONTENT_BROWSER_UI_SCHEMA_VERSION,
24
+ type: "object",
25
+ required: ["projectLabel", "folder", "view", "files", "folders"],
26
+ properties: {
27
+ projectLabel: { type: "string" },
28
+ folder: { type: "string" },
29
+ view: { enum: ["grid", "list", "column"] },
30
+ thumbnailSize: { type: "number", minimum: 48, maximum: 200 },
31
+ detailPanelOpen: { type: "boolean" },
32
+ favorites: { type: "array", items: { type: "string" } },
33
+ expandedPacks: { type: "array", items: { type: "string" } },
34
+ folders: {
35
+ type: "array",
36
+ items: {
37
+ type: "object",
38
+ required: ["type", "path", "name", "childCount"],
39
+ properties: {
40
+ type: { const: "folder" },
41
+ path: { type: "string" },
42
+ name: { type: "string" },
43
+ childCount: { type: "number" }
44
+ }
45
+ }
46
+ },
47
+ files: {
48
+ type: "array",
49
+ items: {
50
+ type: "object",
51
+ required: ["type", "path", "name", "family", "assets"],
52
+ properties: {
53
+ type: { const: "file" },
54
+ path: { type: "string" },
55
+ name: { type: "string" },
56
+ family: {
57
+ enum: ["code", "config", "doc", "scene", "pack", "meta", "image", "audio", "model", "font", "ui", "data", "other"]
58
+ },
59
+ isAssetPackage: { type: "boolean" },
60
+ assets: {
61
+ type: "array",
62
+ items: {
63
+ type: "object",
64
+ required: ["type", "guid", "kind", "name", "packPath"],
65
+ properties: {
66
+ type: { const: "asset" },
67
+ guid: { type: "string" },
68
+ kind: { type: "string" },
69
+ name: { type: "string" },
70
+ packPath: { type: "string" },
71
+ estimatedSize: { type: "number" },
72
+ packModifiedAt: { type: "number" }
73
+ }
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
80
+ });
81
+
82
+ export {
83
+ CONTENT_BROWSER_UI_SCHEMA_VERSION,
84
+ CONTENT_BROWSER_ACTIONS,
85
+ CONTENT_BROWSER_MODEL_SCHEMA
86
+ };
87
+ //# sourceMappingURL=chunk-CRMICXKN.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/view-plugin-content-browser/src/schema.mjs"],
4
+ "sourcesContent": ["export const CONTENT_BROWSER_UI_SCHEMA_VERSION = 'forgeax.view.content-browser.ui/1';\n\nexport const CONTENT_BROWSER_ACTIONS = Object.freeze({\n search: 'content-browser.search',\n navigate: 'content-browser.navigate',\n navigateBack: 'content-browser.navigate.back',\n navigateForward: 'content-browser.navigate.forward',\n refresh: 'content-browser.refresh',\n setView: 'content-browser.view.set',\n setThumbnailSize: 'content-browser.thumbnail-size.set',\n setFilter: 'content-browser.filter.set',\n setSort: 'content-browser.sort.set',\n select: 'content-browser.select',\n activate: 'content-browser.activate',\n toggleFavorite: 'content-browser.favorite.toggle',\n toggleSourceGroup: 'content-browser.source-group.toggle',\n toggleDetailPanel: 'content-browser.detail-panel.toggle',\n togglePackExpansion: 'content-browser.pack.expand.toggle',\n showContextMenu: 'content-browser.context-menu.show',\n copyPath: 'content-browser.copy-path',\n});\n\nexport const CONTENT_BROWSER_MODEL_SCHEMA = Object.freeze({\n $id: CONTENT_BROWSER_UI_SCHEMA_VERSION,\n type: 'object',\n required: ['projectLabel', 'folder', 'view', 'files', 'folders'],\n properties: {\n projectLabel: { type: 'string' },\n folder: { type: 'string' },\n view: { enum: ['grid', 'list', 'column'] },\n thumbnailSize: { type: 'number', minimum: 48, maximum: 200 },\n detailPanelOpen: { type: 'boolean' },\n favorites: { type: 'array', items: { type: 'string' } },\n expandedPacks: { type: 'array', items: { type: 'string' } },\n folders: {\n type: 'array',\n items: {\n type: 'object',\n required: ['type', 'path', 'name', 'childCount'],\n properties: {\n type: { const: 'folder' },\n path: { type: 'string' },\n name: { type: 'string' },\n childCount: { type: 'number' },\n },\n },\n },\n files: {\n type: 'array',\n items: {\n type: 'object',\n required: ['type', 'path', 'name', 'family', 'assets'],\n properties: {\n type: { const: 'file' },\n path: { type: 'string' },\n name: { type: 'string' },\n family: {\n enum: ['code', 'config', 'doc', 'scene', 'pack', 'meta', 'image', 'audio', 'model', 'font', 'ui', 'data', 'other'],\n },\n isAssetPackage: { type: 'boolean' },\n assets: {\n type: 'array',\n items: {\n type: 'object',\n required: ['type', 'guid', 'kind', 'name', 'packPath'],\n properties: {\n type: { const: 'asset' },\n guid: { type: 'string' },\n kind: { type: 'string' },\n name: { type: 'string' },\n packPath: { type: 'string' },\n estimatedSize: { type: 'number' },\n packModifiedAt: { type: 'number' },\n },\n },\n },\n },\n },\n },\n },\n});\n"],
5
+ "mappings": ";AAAO,IAAM,oCAAoC;AAE1C,IAAM,0BAA0B,OAAO,OAAO;AAAA,EACnD,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,UAAU;AACZ,CAAC;AAEM,IAAM,+BAA+B,OAAO,OAAO;AAAA,EACxD,KAAK;AAAA,EACL,MAAM;AAAA,EACN,UAAU,CAAC,gBAAgB,UAAU,QAAQ,SAAS,SAAS;AAAA,EAC/D,YAAY;AAAA,IACV,cAAc,EAAE,MAAM,SAAS;AAAA,IAC/B,QAAQ,EAAE,MAAM,SAAS;AAAA,IACzB,MAAM,EAAE,MAAM,CAAC,QAAQ,QAAQ,QAAQ,EAAE;AAAA,IACzC,eAAe,EAAE,MAAM,UAAU,SAAS,IAAI,SAAS,IAAI;AAAA,IAC3D,iBAAiB,EAAE,MAAM,UAAU;AAAA,IACnC,WAAW,EAAE,MAAM,SAAS,OAAO,EAAE,MAAM,SAAS,EAAE;AAAA,IACtD,eAAe,EAAE,MAAM,SAAS,OAAO,EAAE,MAAM,SAAS,EAAE;AAAA,IAC1D,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,CAAC,QAAQ,QAAQ,QAAQ,YAAY;AAAA,QAC/C,YAAY;AAAA,UACV,MAAM,EAAE,OAAO,SAAS;AAAA,UACxB,MAAM,EAAE,MAAM,SAAS;AAAA,UACvB,MAAM,EAAE,MAAM,SAAS;AAAA,UACvB,YAAY,EAAE,MAAM,SAAS;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,CAAC,QAAQ,QAAQ,QAAQ,UAAU,QAAQ;AAAA,QACrD,YAAY;AAAA,UACV,MAAM,EAAE,OAAO,OAAO;AAAA,UACtB,MAAM,EAAE,MAAM,SAAS;AAAA,UACvB,MAAM,EAAE,MAAM,SAAS;AAAA,UACvB,QAAQ;AAAA,YACN,MAAM,CAAC,QAAQ,UAAU,OAAO,SAAS,QAAQ,QAAQ,SAAS,SAAS,SAAS,QAAQ,MAAM,QAAQ,OAAO;AAAA,UACnH;AAAA,UACA,gBAAgB,EAAE,MAAM,UAAU;AAAA,UAClC,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,OAAO;AAAA,cACL,MAAM;AAAA,cACN,UAAU,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,UAAU;AAAA,cACrD,YAAY;AAAA,gBACV,MAAM,EAAE,OAAO,QAAQ;AAAA,gBACvB,MAAM,EAAE,MAAM,SAAS;AAAA,gBACvB,MAAM,EAAE,MAAM,SAAS;AAAA,gBACvB,MAAM,EAAE,MAAM,SAAS;AAAA,gBACvB,UAAU,EAAE,MAAM,SAAS;AAAA,gBAC3B,eAAe,EAAE,MAAM,SAAS;AAAA,gBAChC,gBAAgB,EAAE,MAAM,SAAS;AAAA,cACnC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,81 @@
1
+ import {
2
+ BROWSER_CARRIER,
3
+ FALLBACK_REASONS,
4
+ VIEW_CARRIER,
5
+ VIEW_PROTOCOL_VERSION,
6
+ browserFallback,
7
+ createLeaseRequest
8
+ } from "./chunk-GQBZMCTK.mjs";
9
+
10
+ // packages/view-plugin-display/src/carrier-adapter.mjs
11
+ var ViewCarrierAdapter = class {
12
+ constructor({ broker, attachTarget } = {}) {
13
+ if (!broker || typeof broker.allocate !== "function" || typeof broker.release !== "function") {
14
+ throw new TypeError("View carrier adapter requires the in-process View resource broker");
15
+ }
16
+ this.broker = broker;
17
+ this.attachTarget = attachTarget;
18
+ }
19
+ async select(input, { signal } = {}) {
20
+ const request = createLeaseRequest(input);
21
+ if (request.headless) return browserFallback(FALLBACK_REASONS.HEADLESS_REQUESTED);
22
+ const decision = await this.broker.allocate(request, { signal });
23
+ return decision.carrier === VIEW_CARRIER ? { ...decision, carrier: "borrowed" } : decision;
24
+ }
25
+ async release(decision, reason = "engine-release") {
26
+ if (!decision || decision.carrier !== "borrowed") return { released: false, reason: "not-borrowed" };
27
+ return decision.release(reason);
28
+ }
29
+ /**
30
+ * Optional local-process attachment hook. No browser connection implementation
31
+ * is hidden here; the Engine browser layer supplies its public attachment
32
+ * implementation and receives the exact allocated target handle.
33
+ */
34
+ async attach(decision) {
35
+ if (!decision || decision.carrier !== "borrowed") return decision;
36
+ if (typeof this.attachTarget !== "function") {
37
+ throw new Error("Engine adapter must provide attachTarget for View pages");
38
+ }
39
+ const attached = await this.attachTarget(decision.target);
40
+ if (!attached || typeof attached !== "object" || !attached.page || !attached.execution || typeof attached.close !== "function") {
41
+ throw new TypeError(
42
+ "View attachTarget must return an explicit owner page, execution realm, and close handle"
43
+ );
44
+ }
45
+ if (attached.execution.kind === "frame") {
46
+ const surface = attached.page.locator(attached.execution.surfaceSelector);
47
+ const identity = await surface.evaluate((element) => ({
48
+ id: element.id,
49
+ leaseId: element.dataset.forgeaxViewLeaseId,
50
+ generation: element.dataset.forgeaxViewGeneration
51
+ }));
52
+ if (identity.id !== decision.target.surfaceId || identity.leaseId !== decision.target.leaseId || identity.generation !== String(decision.target.generation)) {
53
+ await attached.close("view-surface-identity-mismatch");
54
+ throw new Error("View display surface no longer owns the selected lease");
55
+ }
56
+ }
57
+ return {
58
+ page: attached.page,
59
+ target: decision.target,
60
+ execution: attached.execution,
61
+ close: attached.close
62
+ };
63
+ }
64
+ };
65
+ function createViewCarrierAdapter(options) {
66
+ return new ViewCarrierAdapter(options);
67
+ }
68
+ var VIEW_ENGINE_CARRIER_CONTRACT = Object.freeze({
69
+ carrier: "borrowed",
70
+ fallbackCarrier: BROWSER_CARRIER,
71
+ protocolVersion: VIEW_PROTOCOL_VERSION,
72
+ targetIdentity: "leaseId + targetId + surfaceId + run identity + generation",
73
+ ownership: "Engine owns attachment, navigation, observation, capture, and service lifetime"
74
+ });
75
+
76
+ export {
77
+ ViewCarrierAdapter,
78
+ createViewCarrierAdapter,
79
+ VIEW_ENGINE_CARRIER_CONTRACT
80
+ };
81
+ //# sourceMappingURL=chunk-CUH2G6UF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/view-plugin-display/src/carrier-adapter.mjs"],
4
+ "sourcesContent": ["import {\n FALLBACK_REASONS,\n BROWSER_CARRIER,\n VIEW_CARRIER,\n VIEW_PROTOCOL_VERSION,\n browserFallback,\n createLeaseRequest,\n} from './carrier-contract.mjs';\n\n/**\n * The narrow Engine-facing seam. Engine owns browser attachment, navigation,\n * observation, capture, and service lifetime; this adapter only selects and\n * releases a View carrier by its authenticated target identity.\n */\nexport class ViewCarrierAdapter {\n constructor({ broker, attachTarget } = {}) {\n if (!broker || typeof broker.allocate !== 'function' || typeof broker.release !== 'function') {\n throw new TypeError('View carrier adapter requires the in-process View resource broker');\n }\n this.broker = broker;\n this.attachTarget = attachTarget;\n }\n\n async select(input, { signal } = {}) {\n const request = createLeaseRequest(input);\n // A headless request must not even touch the View broker.\n if (request.headless) return browserFallback(FALLBACK_REASONS.HEADLESS_REQUESTED);\n // The broker is the sole carrier authority. It owns admission, target\n // identity, capability checks, and the exact platform lease.\n const decision = await this.broker.allocate(request, { signal });\n return decision.carrier === VIEW_CARRIER\n ? { ...decision, carrier: 'borrowed' }\n : decision;\n }\n\n async release(decision, reason = 'engine-release') {\n if (!decision || decision.carrier !== 'borrowed') return { released: false, reason: 'not-borrowed' };\n return decision.release(reason);\n }\n\n /**\n * Optional local-process attachment hook. No browser connection implementation\n * is hidden here; the Engine browser layer supplies its public attachment\n * implementation and receives the exact allocated target handle.\n */\n async attach(decision) {\n if (!decision || decision.carrier !== 'borrowed') return decision;\n if (typeof this.attachTarget !== 'function') {\n throw new Error('Engine adapter must provide attachTarget for View pages');\n }\n const attached = await this.attachTarget(decision.target);\n if (\n !attached ||\n typeof attached !== 'object' ||\n !attached.page ||\n !attached.execution ||\n typeof attached.close !== 'function'\n ) {\n throw new TypeError(\n 'View attachTarget must return an explicit owner page, execution realm, and close handle',\n );\n }\n if (attached.execution.kind === 'frame') {\n const surface = attached.page.locator(attached.execution.surfaceSelector);\n const identity = await surface.evaluate((element) => ({\n id: element.id,\n leaseId: element.dataset.forgeaxViewLeaseId,\n generation: element.dataset.forgeaxViewGeneration,\n }));\n if (identity.id !== decision.target.surfaceId ||\n identity.leaseId !== decision.target.leaseId ||\n identity.generation !== String(decision.target.generation)) {\n await attached.close('view-surface-identity-mismatch');\n throw new Error('View display surface no longer owns the selected lease');\n }\n }\n return {\n page: attached.page,\n target: decision.target,\n execution: attached.execution,\n close: attached.close,\n };\n }\n}\n\nexport function createViewCarrierAdapter(options) {\n return new ViewCarrierAdapter(options);\n}\n\nexport const VIEW_ENGINE_CARRIER_CONTRACT = Object.freeze({\n carrier: 'borrowed',\n fallbackCarrier: BROWSER_CARRIER,\n protocolVersion: VIEW_PROTOCOL_VERSION,\n targetIdentity: 'leaseId + targetId + surfaceId + run identity + generation',\n ownership: 'Engine owns attachment, navigation, observation, capture, and service lifetime',\n});\n"],
5
+ "mappings": ";;;;;;;;;;AAcO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAAY,EAAE,QAAQ,aAAa,IAAI,CAAC,GAAG;AACzC,QAAI,CAAC,UAAU,OAAO,OAAO,aAAa,cAAc,OAAO,OAAO,YAAY,YAAY;AAC5F,YAAM,IAAI,UAAU,mEAAmE;AAAA,IACzF;AACA,SAAK,SAAS;AACd,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,MAAM,OAAO,OAAO,EAAE,OAAO,IAAI,CAAC,GAAG;AACnC,UAAM,UAAU,mBAAmB,KAAK;AAExC,QAAI,QAAQ,SAAU,QAAO,gBAAgB,iBAAiB,kBAAkB;AAGhF,UAAM,WAAW,MAAM,KAAK,OAAO,SAAS,SAAS,EAAE,OAAO,CAAC;AAC/D,WAAO,SAAS,YAAY,eACxB,EAAE,GAAG,UAAU,SAAS,WAAW,IACnC;AAAA,EACN;AAAA,EAEA,MAAM,QAAQ,UAAU,SAAS,kBAAkB;AACjD,QAAI,CAAC,YAAY,SAAS,YAAY,WAAY,QAAO,EAAE,UAAU,OAAO,QAAQ,eAAe;AACnG,WAAO,SAAS,QAAQ,MAAM;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,UAAU;AACrB,QAAI,CAAC,YAAY,SAAS,YAAY,WAAY,QAAO;AACzD,QAAI,OAAO,KAAK,iBAAiB,YAAY;AAC3C,YAAM,IAAI,MAAM,yDAAyD;AAAA,IAC3E;AACA,UAAM,WAAW,MAAM,KAAK,aAAa,SAAS,MAAM;AACxD,QACE,CAAC,YACD,OAAO,aAAa,YACpB,CAAC,SAAS,QACV,CAAC,SAAS,aACV,OAAO,SAAS,UAAU,YAC1B;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,QAAI,SAAS,UAAU,SAAS,SAAS;AACvC,YAAM,UAAU,SAAS,KAAK,QAAQ,SAAS,UAAU,eAAe;AACxE,YAAM,WAAW,MAAM,QAAQ,SAAS,CAAC,aAAa;AAAA,QACpD,IAAI,QAAQ;AAAA,QACZ,SAAS,QAAQ,QAAQ;AAAA,QACzB,YAAY,QAAQ,QAAQ;AAAA,MAC9B,EAAE;AACF,UAAI,SAAS,OAAO,SAAS,OAAO,aAChC,SAAS,YAAY,SAAS,OAAO,WACrC,SAAS,eAAe,OAAO,SAAS,OAAO,UAAU,GAAG;AAC9D,cAAM,SAAS,MAAM,gCAAgC;AACrD,cAAM,IAAI,MAAM,wDAAwD;AAAA,MAC1E;AAAA,IACF;AACA,WAAO;AAAA,MACL,MAAM,SAAS;AAAA,MACf,QAAQ,SAAS;AAAA,MACjB,WAAW,SAAS;AAAA,MACpB,OAAO,SAAS;AAAA,IAClB;AAAA,EACF;AACF;AAEO,SAAS,yBAAyB,SAAS;AAChD,SAAO,IAAI,mBAAmB,OAAO;AACvC;AAEO,IAAM,+BAA+B,OAAO,OAAO;AAAA,EACxD,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,WAAW;AACb,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,77 @@
1
+ import {
2
+ RESOURCE_PREVIEW_LAYOUT,
3
+ RESOURCE_PROPERTIES_LAYOUT
4
+ } from "./chunk-YYXQDUVT.mjs";
5
+ import {
6
+ VIEW_PAGE_TYPES
7
+ } from "./chunk-32GD5LL6.mjs";
8
+ import {
9
+ __export
10
+ } from "./chunk-FLGC65SR.mjs";
11
+
12
+ // packages/view-plugin-texture/src/identity.mjs
13
+ var identity_exports = {};
14
+ __export(identity_exports, {
15
+ FRONTEND_MODULE: () => FRONTEND_MODULE,
16
+ FRONTEND_PLUGIN_ID: () => FRONTEND_PLUGIN_ID,
17
+ PAGE_ORDER: () => PAGE_ORDER,
18
+ PAGE_PRIORITY: () => PAGE_PRIORITY,
19
+ PAGE_TITLE_I18N_KEY: () => PAGE_TITLE_I18N_KEY,
20
+ PAGE_TYPE: () => PAGE_TYPE,
21
+ PLUGIN_ID: () => PLUGIN_ID,
22
+ PREVIEW_ICON: () => PREVIEW_ICON,
23
+ PREVIEW_LAYOUT: () => PREVIEW_LAYOUT,
24
+ PREVIEW_PANEL: () => PREVIEW_PANEL,
25
+ PREVIEW_SLOT: () => PREVIEW_SLOT,
26
+ PREVIEW_TITLE_I18N_KEY: () => PREVIEW_TITLE_I18N_KEY,
27
+ PROPERTIES_ICON: () => PROPERTIES_ICON,
28
+ PROPERTIES_LAYOUT: () => PROPERTIES_LAYOUT,
29
+ PROPERTIES_PANEL: () => PROPERTIES_PANEL,
30
+ PROPERTIES_SLOT: () => PROPERTIES_SLOT,
31
+ PROPERTIES_TITLE_I18N_KEY: () => PROPERTIES_TITLE_I18N_KEY,
32
+ RESOURCE_KINDS: () => RESOURCE_KINDS,
33
+ RESOURCE_SELECTOR: () => RESOURCE_SELECTOR
34
+ });
35
+ var PLUGIN_ID = "forgeax.view.texture";
36
+ var FRONTEND_PLUGIN_ID = "forgeax.view.page.texture.frontend";
37
+ var FRONTEND_MODULE = "@forgeax/view/plugins/texture/frontend";
38
+ var PAGE_TYPE = VIEW_PAGE_TYPES.texture;
39
+ var PAGE_TITLE_I18N_KEY = "view.pages.texture";
40
+ var PAGE_ORDER = 32;
41
+ var PREVIEW_SLOT = "texture-preview";
42
+ var PROPERTIES_SLOT = "texture-properties";
43
+ var RESOURCE_KINDS = Object.freeze(["texture", "image"]);
44
+ var RESOURCE_SELECTOR = Object.freeze({ kinds: RESOURCE_KINDS });
45
+ var PAGE_PRIORITY = 20;
46
+ var PREVIEW_LAYOUT = RESOURCE_PREVIEW_LAYOUT;
47
+ var PROPERTIES_LAYOUT = RESOURCE_PROPERTIES_LAYOUT;
48
+ var PREVIEW_PANEL = "TexturePreview";
49
+ var PROPERTIES_PANEL = "TextureProperties";
50
+ var PREVIEW_ICON = "image";
51
+ var PROPERTIES_ICON = "detail";
52
+ var PREVIEW_TITLE_I18N_KEY = "view.slots.texturePreview";
53
+ var PROPERTIES_TITLE_I18N_KEY = "view.slots.textureProperties";
54
+
55
+ export {
56
+ PLUGIN_ID,
57
+ FRONTEND_PLUGIN_ID,
58
+ FRONTEND_MODULE,
59
+ PAGE_TYPE,
60
+ PAGE_TITLE_I18N_KEY,
61
+ PAGE_ORDER,
62
+ PREVIEW_SLOT,
63
+ PROPERTIES_SLOT,
64
+ RESOURCE_KINDS,
65
+ RESOURCE_SELECTOR,
66
+ PAGE_PRIORITY,
67
+ PREVIEW_LAYOUT,
68
+ PROPERTIES_LAYOUT,
69
+ PREVIEW_PANEL,
70
+ PROPERTIES_PANEL,
71
+ PREVIEW_ICON,
72
+ PROPERTIES_ICON,
73
+ PREVIEW_TITLE_I18N_KEY,
74
+ PROPERTIES_TITLE_I18N_KEY,
75
+ identity_exports
76
+ };
77
+ //# sourceMappingURL=chunk-D7GWRZLL.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/view-plugin-texture/src/identity.mjs"],
4
+ "sourcesContent": ["import { VIEW_PAGE_TYPES } from '@forgeax/view-workspace-core/contract';\nimport {\n RESOURCE_PREVIEW_LAYOUT,\n RESOURCE_PROPERTIES_LAYOUT,\n} from '@forgeax/view-workspace-core/resource-page';\n\nexport const PLUGIN_ID = 'forgeax.view.texture';\nexport const FRONTEND_PLUGIN_ID = 'forgeax.view.page.texture.frontend';\nexport const FRONTEND_MODULE = '@forgeax/view/plugins/texture/frontend';\nexport const PAGE_TYPE = VIEW_PAGE_TYPES.texture;\nexport const PAGE_TITLE_I18N_KEY = 'view.pages.texture';\nexport const PAGE_ORDER = 32;\nexport const PREVIEW_SLOT = 'texture-preview';\nexport const PROPERTIES_SLOT = 'texture-properties';\nexport const RESOURCE_KINDS = Object.freeze(['texture', 'image']);\nexport const RESOURCE_SELECTOR = Object.freeze({ kinds: RESOURCE_KINDS });\nexport const PAGE_PRIORITY = 20;\nexport const PREVIEW_LAYOUT = RESOURCE_PREVIEW_LAYOUT;\nexport const PROPERTIES_LAYOUT = RESOURCE_PROPERTIES_LAYOUT;\nexport const PREVIEW_PANEL = 'TexturePreview';\nexport const PROPERTIES_PANEL = 'TextureProperties';\nexport const PREVIEW_ICON = 'image';\nexport const PROPERTIES_ICON = 'detail';\nexport const PREVIEW_TITLE_I18N_KEY = 'view.slots.texturePreview';\nexport const PROPERTIES_TITLE_I18N_KEY = 'view.slots.textureProperties';\n"],
5
+ "mappings": ";;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,IAAM,YAAY;AAClB,IAAM,qBAAqB;AAC3B,IAAM,kBAAkB;AACxB,IAAM,YAAY,gBAAgB;AAClC,IAAM,sBAAsB;AAC5B,IAAM,aAAa;AACnB,IAAM,eAAe;AACrB,IAAM,kBAAkB;AACxB,IAAM,iBAAiB,OAAO,OAAO,CAAC,WAAW,OAAO,CAAC;AACzD,IAAM,oBAAoB,OAAO,OAAO,EAAE,OAAO,eAAe,CAAC;AACjE,IAAM,gBAAgB;AACtB,IAAM,iBAAiB;AACvB,IAAM,oBAAoB;AAC1B,IAAM,gBAAgB;AACtB,IAAM,mBAAmB;AACzB,IAAM,eAAe;AACrB,IAAM,kBAAkB;AACxB,IAAM,yBAAyB;AAC/B,IAAM,4BAA4B;",
6
+ "names": []
7
+ }