@forgeax/view 0.5.0-dev.13604.c415409c3b9d → 0.5.0-dev.13713.d28c4863d779

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/README.md +67 -9
  2. package/dist/build-revision.json +1 -1
  3. package/dist/modules/backend.mjs +34 -34
  4. package/dist/modules/browser.mjs +55 -49
  5. package/dist/modules/chunks/{chunk-EWSCJF77.mjs → chunk-2CMCY54A.mjs} +2 -2
  6. package/dist/modules/chunks/{chunk-M6S5YA6X.mjs → chunk-2RUKPDIE.mjs} +4 -4
  7. package/dist/modules/chunks/{chunk-M6S5YA6X.mjs.map → chunk-2RUKPDIE.mjs.map} +1 -1
  8. package/dist/modules/chunks/{chunk-DWT3TA6M.mjs → chunk-3FBX3P3H.mjs} +9 -8
  9. package/dist/modules/chunks/chunk-3FBX3P3H.mjs.map +7 -0
  10. package/dist/modules/chunks/{chunk-6KM24NH6.mjs → chunk-3Y5WN22T.mjs} +3 -3
  11. package/dist/modules/chunks/chunk-3Y5WN22T.mjs.map +7 -0
  12. package/dist/modules/chunks/{chunk-YFQGSDK3.mjs → chunk-45WL24XN.mjs} +2 -2
  13. package/dist/modules/chunks/{chunk-FMCHH5R4.mjs → chunk-4FYKRL46.mjs} +3 -3
  14. package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs → chunk-4MJHVZMB.mjs} +6 -6
  15. package/dist/modules/chunks/{chunk-XQYF2P6M.mjs → chunk-5HVXQEO3.mjs} +7 -7
  16. package/dist/modules/chunks/{chunk-XMP4THLF.mjs → chunk-66LM6NO6.mjs} +4 -4
  17. package/dist/modules/chunks/{chunk-P4UPH74B.mjs → chunk-6C4OCCYB.mjs} +12 -12
  18. package/dist/modules/chunks/{chunk-P4UPH74B.mjs.map → chunk-6C4OCCYB.mjs.map} +1 -1
  19. package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs → chunk-6J27SWMY.mjs} +1 -1
  20. package/dist/modules/chunks/{chunk-JK7K7RG3.mjs → chunk-6VK7HB4X.mjs} +4 -4
  21. package/dist/modules/chunks/{chunk-HRKW766Y.mjs → chunk-6WZZ7TIC.mjs} +2 -2
  22. package/dist/modules/chunks/{chunk-FICPCJKR.mjs → chunk-7DFCIN3T.mjs} +3 -3
  23. package/dist/modules/chunks/{chunk-FICPCJKR.mjs.map → chunk-7DFCIN3T.mjs.map} +1 -1
  24. package/dist/modules/chunks/{chunk-U64FRQKP.mjs → chunk-7MWZK7HS.mjs} +3 -3
  25. package/dist/modules/chunks/{chunk-F5RLQAPN.mjs → chunk-A7OGXJAV.mjs} +3 -3
  26. package/dist/modules/chunks/{chunk-QUFVUMSY.mjs → chunk-AUINYWZP.mjs} +2 -2
  27. package/dist/modules/chunks/{chunk-PZIAKZJC.mjs → chunk-B24VYGHV.mjs} +3 -3
  28. package/dist/modules/chunks/{chunk-SRYQLFBV.mjs → chunk-BIUWJROZ.mjs} +3 -3
  29. package/dist/modules/chunks/{chunk-SRYQLFBV.mjs.map → chunk-BIUWJROZ.mjs.map} +2 -2
  30. package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs → chunk-C2AMOM7H.mjs} +3 -3
  31. package/dist/modules/chunks/{chunk-IZAHIOFU.mjs → chunk-C3WVSJZF.mjs} +6 -6
  32. package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs → chunk-CAXCOZ7Y.mjs} +3 -3
  33. package/dist/modules/chunks/{chunk-HWZCLROY.mjs → chunk-CN6YN4HP.mjs} +251 -45
  34. package/dist/modules/chunks/chunk-CN6YN4HP.mjs.map +7 -0
  35. package/dist/modules/chunks/{chunk-B6QUJ33G.mjs → chunk-CXFQME65.mjs} +3 -3
  36. package/dist/modules/chunks/{chunk-IJPWKKIU.mjs → chunk-CYOLEAAY.mjs} +14 -13
  37. package/dist/modules/chunks/chunk-CYOLEAAY.mjs.map +7 -0
  38. package/dist/modules/chunks/{chunk-U6UMATPV.mjs → chunk-CYU3WWN6.mjs} +3 -3
  39. package/dist/modules/chunks/{chunk-AGVLPYVE.mjs → chunk-D2LZIQE2.mjs} +2 -2
  40. package/dist/modules/chunks/{chunk-5YTMN435.mjs → chunk-DC5JP46Y.mjs} +13 -3
  41. package/dist/modules/chunks/chunk-DC5JP46Y.mjs.map +7 -0
  42. package/dist/modules/chunks/{chunk-YNHEYXDG.mjs → chunk-DOU4MNMQ.mjs} +3 -3
  43. package/dist/modules/chunks/{chunk-ZIDEETK4.mjs → chunk-E4G4HDOC.mjs} +3 -3
  44. package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs → chunk-EZAJ66NW.mjs} +3 -3
  45. package/dist/modules/chunks/{chunk-APD2EWSZ.mjs → chunk-FIWL6TQS.mjs} +2 -2
  46. package/dist/modules/chunks/{chunk-U5J7OTEB.mjs → chunk-FSSARTVM.mjs} +3 -3
  47. package/dist/modules/chunks/{chunk-47RJSHLM.mjs → chunk-FXXPWAXM.mjs} +3 -3
  48. package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs → chunk-G2QCXN56.mjs} +6 -6
  49. package/dist/modules/chunks/{chunk-4T3D67CS.mjs → chunk-GRDCA6LD.mjs} +8 -8
  50. package/dist/modules/chunks/{chunk-4T3D67CS.mjs.map → chunk-GRDCA6LD.mjs.map} +1 -1
  51. package/dist/modules/chunks/{chunk-WVU3CQ62.mjs → chunk-GUVUL6D2.mjs} +3 -3
  52. package/dist/modules/chunks/{chunk-YLCJNKIW.mjs → chunk-I32EONBF.mjs} +70 -30
  53. package/dist/modules/chunks/chunk-I32EONBF.mjs.map +7 -0
  54. package/dist/modules/chunks/{chunk-E3PJGTLI.mjs → chunk-IGIELQZ2.mjs} +5 -5
  55. package/dist/modules/chunks/{chunk-5PHAXNFO.mjs → chunk-IMDR26Y3.mjs} +3 -3
  56. package/dist/modules/chunks/{chunk-55F55BQY.mjs → chunk-JVOHFCI4.mjs} +3 -3
  57. package/dist/modules/chunks/{chunk-6I7RY73G.mjs → chunk-KCM7ZCQ3.mjs} +5 -5
  58. package/dist/modules/chunks/chunk-KCM7ZCQ3.mjs.map +7 -0
  59. package/dist/modules/chunks/{chunk-K2QZRFLE.mjs → chunk-KJTMDFFX.mjs} +4 -4
  60. package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs → chunk-KPLESRQY.mjs} +3 -3
  61. package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs → chunk-KUOWDTI6.mjs} +2 -2
  62. package/dist/modules/chunks/chunk-L6IHUN7X.mjs +13 -0
  63. package/dist/modules/chunks/chunk-L6IHUN7X.mjs.map +7 -0
  64. package/dist/modules/chunks/{chunk-INTTYJVW.mjs → chunk-LBQ6DFMP.mjs} +2 -2
  65. package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs → chunk-LVWHM3UN.mjs} +2 -2
  66. package/dist/modules/chunks/{chunk-D57DDEV2.mjs → chunk-MDQMARAN.mjs} +6 -6
  67. package/dist/modules/chunks/{chunk-D57DDEV2.mjs.map → chunk-MDQMARAN.mjs.map} +2 -2
  68. package/dist/modules/chunks/{chunk-STQPRNEO.mjs → chunk-MLXRIWJA.mjs} +2 -2
  69. package/dist/modules/chunks/{chunk-D25SR5FS.mjs → chunk-N2SH3JGI.mjs} +3 -3
  70. package/dist/modules/chunks/{chunk-KI4WGTWL.mjs → chunk-N7NXZ6R3.mjs} +4 -4
  71. package/dist/modules/chunks/{chunk-KI4WGTWL.mjs.map → chunk-N7NXZ6R3.mjs.map} +2 -2
  72. package/dist/modules/chunks/{chunk-7IGFAI5H.mjs → chunk-O5QX6H3U.mjs} +5 -5
  73. package/dist/modules/chunks/{chunk-5W7SC5D4.mjs → chunk-P2Y73QJJ.mjs} +11 -1
  74. package/dist/modules/chunks/{chunk-5W7SC5D4.mjs.map → chunk-P2Y73QJJ.mjs.map} +2 -2
  75. package/dist/modules/chunks/{chunk-FNRGLCZW.mjs → chunk-PCQNUFDL.mjs} +39 -13
  76. package/dist/modules/chunks/chunk-PCQNUFDL.mjs.map +7 -0
  77. package/dist/modules/chunks/{chunk-46UEGAXY.mjs → chunk-Q7M7VUOZ.mjs} +6 -6
  78. package/dist/modules/chunks/{chunk-XE6ITXHT.mjs → chunk-QB33CMEU.mjs} +2 -2
  79. package/dist/modules/chunks/{chunk-E3Z7GLFU.mjs → chunk-QJHQN6OD.mjs} +15 -4
  80. package/dist/modules/chunks/chunk-QJHQN6OD.mjs.map +7 -0
  81. package/dist/modules/chunks/{chunk-KAGFU64Y.mjs → chunk-QW2VT3XB.mjs} +2 -2
  82. package/dist/modules/chunks/{chunk-U5R6MVM4.mjs → chunk-RFTLGEB5.mjs} +2 -2
  83. package/dist/modules/chunks/{chunk-VKNIYV2W.mjs → chunk-RYYKMDNI.mjs} +202 -35
  84. package/dist/modules/chunks/chunk-RYYKMDNI.mjs.map +7 -0
  85. package/dist/modules/chunks/{chunk-P5XMFZY4.mjs → chunk-SFB5BDTB.mjs} +2 -2
  86. package/dist/modules/chunks/{chunk-4D3Q7K44.mjs → chunk-SNICHQJP.mjs} +2 -2
  87. package/dist/modules/chunks/{chunk-CX5WREJC.mjs → chunk-SPGFO2TA.mjs} +2 -2
  88. package/dist/modules/chunks/{chunk-H256DQT6.mjs → chunk-TMPTVIAP.mjs} +2 -2
  89. package/dist/modules/chunks/{chunk-OQXDADAS.mjs → chunk-UWJYROKS.mjs} +6 -6
  90. package/dist/modules/chunks/chunk-UWJYROKS.mjs.map +7 -0
  91. package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs → chunk-UZH2664E.mjs} +3 -3
  92. package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs.map → chunk-UZH2664E.mjs.map} +2 -2
  93. package/dist/modules/chunks/{chunk-CKYXAT7H.mjs → chunk-VC4OEPDH.mjs} +2 -2
  94. package/dist/modules/chunks/{chunk-RJVOH7G2.mjs → chunk-VKWEA6NG.mjs} +27 -27
  95. package/dist/modules/chunks/{chunk-LZ57Y73Z.mjs → chunk-VSJOW7J4.mjs} +9 -7
  96. package/dist/modules/chunks/chunk-VSJOW7J4.mjs.map +7 -0
  97. package/dist/modules/chunks/{chunk-PVP5YBNR.mjs → chunk-WFM434WJ.mjs} +2 -2
  98. package/dist/modules/chunks/{chunk-TXLD7JI5.mjs → chunk-WJNASQF2.mjs} +2 -2
  99. package/dist/modules/chunks/{chunk-357UOBAS.mjs → chunk-XUNDH3E7.mjs} +2 -2
  100. package/dist/modules/chunks/{chunk-PJFFCRRD.mjs → chunk-YDARD4EP.mjs} +2 -2
  101. package/dist/modules/chunks/{chunk-27XASYEH.mjs → chunk-YU3HRQX7.mjs} +17 -11
  102. package/dist/modules/chunks/chunk-YU3HRQX7.mjs.map +7 -0
  103. package/dist/modules/chunks/{chunk-EZSGDSCC.mjs → chunk-ZRE7BDDB.mjs} +30 -5
  104. package/dist/modules/chunks/chunk-ZRE7BDDB.mjs.map +7 -0
  105. package/dist/modules/cli-contributions.mjs +14 -14
  106. package/dist/modules/cli.mjs +5 -5
  107. package/dist/modules/command-executor.mjs +3 -3
  108. package/dist/modules/embedded.mjs +82 -42
  109. package/dist/modules/embedded.mjs.map +2 -2
  110. package/dist/modules/extension-bridge.mjs +4 -4
  111. package/dist/modules/frontend-root.mjs +46 -46
  112. package/dist/modules/index.mjs +71 -65
  113. package/dist/modules/index.mjs.map +1 -1
  114. package/dist/modules/pages/scene.mjs +5 -5
  115. package/dist/modules/plugin.mjs +35 -35
  116. package/dist/modules/plugins/asset/frontend.mjs +10 -10
  117. package/dist/modules/plugins/asset/identity.mjs +9 -9
  118. package/dist/modules/plugins/asset/ui.mjs +3 -3
  119. package/dist/modules/plugins/content-browser/frontend.mjs +3 -3
  120. package/dist/modules/plugins/content-browser/identity.mjs +2 -2
  121. package/dist/modules/plugins/content-browser/ui.mjs +3 -3
  122. package/dist/modules/plugins/display/api.mjs +1 -1
  123. package/dist/modules/plugins/display/backend.mjs +4 -4
  124. package/dist/modules/plugins/display/frontend.mjs +5 -5
  125. package/dist/modules/plugins/display/identity.mjs +2 -2
  126. package/dist/modules/plugins/display/ui.mjs +3 -3
  127. package/dist/modules/plugins/inspector/frontend.mjs +3 -3
  128. package/dist/modules/plugins/inspector/identity.mjs +2 -2
  129. package/dist/modules/plugins/inspector/ui.mjs +3 -3
  130. package/dist/modules/plugins/material/frontend.mjs +10 -10
  131. package/dist/modules/plugins/material/identity.mjs +9 -9
  132. package/dist/modules/plugins/material/ui.mjs +10 -10
  133. package/dist/modules/plugins/mesh/frontend.mjs +10 -10
  134. package/dist/modules/plugins/mesh/identity.mjs +9 -9
  135. package/dist/modules/plugins/mesh/ui.mjs +10 -10
  136. package/dist/modules/plugins/plugins/api.mjs +4 -4
  137. package/dist/modules/plugins/plugins/backend.mjs +7 -7
  138. package/dist/modules/plugins/plugins/cli.mjs +5 -5
  139. package/dist/modules/plugins/plugins/frontend.mjs +3 -3
  140. package/dist/modules/plugins/plugins/identity.mjs +2 -2
  141. package/dist/modules/plugins/plugins/runtime.mjs +6 -6
  142. package/dist/modules/plugins/plugins/ui/panel.mjs +3 -3
  143. package/dist/modules/plugins/plugins/ui.mjs +4 -4
  144. package/dist/modules/plugins/scene/frontend.mjs +5 -5
  145. package/dist/modules/plugins/scene/identity.mjs +2 -2
  146. package/dist/modules/plugins/scene-tree/frontend.mjs +3 -3
  147. package/dist/modules/plugins/scene-tree/identity.mjs +2 -2
  148. package/dist/modules/plugins/scene-tree/ui.mjs +3 -3
  149. package/dist/modules/plugins/texture/frontend.mjs +10 -10
  150. package/dist/modules/plugins/texture/identity.mjs +9 -9
  151. package/dist/modules/plugins/texture/ui.mjs +10 -10
  152. package/dist/modules/plugins/viewport/frontend.mjs +12 -12
  153. package/dist/modules/plugins/viewport/identity.mjs +2 -2
  154. package/dist/modules/plugins/viewport/presentation.mjs +4 -4
  155. package/dist/modules/plugins/viewport/schema.mjs +2 -2
  156. package/dist/modules/plugins/viewport/workspace-shell.mjs +9 -9
  157. package/dist/modules/product.mjs +35 -35
  158. package/dist/modules/shell/frontend.mjs +1 -1
  159. package/dist/modules/viewer/catalog/backend.mjs +31 -31
  160. package/dist/modules/viewer/catalog/frontend.mjs +42 -42
  161. package/dist/modules/viewer/catalog/shared.mjs +20 -20
  162. package/dist/modules/viewer/catalog.mjs +51 -51
  163. package/dist/modules/viewer/cli.mjs +10 -10
  164. package/dist/modules/viewer-host/frontend.mjs +48 -48
  165. package/dist/modules/viewer-host/page-registry.mjs +6 -6
  166. package/dist/modules/viewer-host.mjs +7 -7
  167. package/dist/modules/viewer.mjs +51 -51
  168. package/dist/modules/workspace/api.mjs +1 -1
  169. package/dist/modules/workspace/backend.mjs +10 -10
  170. package/dist/modules/workspace/broker.mjs +9 -9
  171. package/dist/modules/workspace/cli.mjs +2 -2
  172. package/dist/modules/workspace/client.mjs +3 -3
  173. package/dist/modules/workspace/command-error.mjs +2 -2
  174. package/dist/modules/workspace/contract.mjs +7 -1
  175. package/dist/modules/workspace/engine-adapter.mjs +3 -3
  176. package/dist/modules/workspace/extension-bridge.mjs +4 -4
  177. package/dist/modules/workspace/frontend-plugin.mjs +8 -8
  178. package/dist/modules/workspace/frontend.mjs +9 -9
  179. package/dist/modules/workspace/page-title.mjs +3 -3
  180. package/dist/modules/workspace/presentation.mjs +4 -4
  181. package/dist/modules/workspace/preview-surface.mjs +7 -7
  182. package/dist/modules/workspace/project-session.mjs +2 -2
  183. package/dist/modules/workspace/render-resize-sync.mjs +2 -2
  184. package/dist/modules/workspace/resident.mjs +4 -4
  185. package/dist/modules/workspace/resource-open.mjs +5 -5
  186. package/dist/modules/workspace/resource-page.mjs +8 -8
  187. package/dist/modules/workspace/tool-runtime.mjs +7 -5
  188. package/dist/modules/workspace/view-trace.mjs +3 -3
  189. package/dist/modules/workspace/workspace-recovery.mjs +4 -4
  190. package/dist/modules/workspace/workspace-state.mjs +2 -2
  191. package/dist/modules/workspace-frontend.mjs +8 -8
  192. package/dist/viewer/assets/{embedded-DXSSFAyM.js → embedded-BKEAtUD6.js} +2 -2
  193. package/dist/viewer/assets/{embedded-DXSSFAyM.js.map → embedded-BKEAtUD6.js.map} +1 -1
  194. package/dist/viewer/assets/main-BQrn6wsa.js +22 -0
  195. package/dist/viewer/assets/main-BQrn6wsa.js.map +1 -0
  196. package/dist/viewer/assets/{panels-lazy-DqCwhGd9.js → panels-lazy-C_Cs-76A.js} +2 -2
  197. package/dist/viewer/assets/{panels-lazy-DqCwhGd9.js.map → panels-lazy-C_Cs-76A.js.map} +1 -1
  198. package/dist/viewer/assets/panels-ui-DEDHJLuE.js +12 -0
  199. package/dist/viewer/assets/panels-ui-DEDHJLuE.js.map +1 -0
  200. package/dist/viewer/assets/style-CcYzhsIZ.css +2 -0
  201. package/dist/viewer/assets/{wgpu_wasm--oeqTwVY.js → wgpu_wasm-cNR5izZM.js} +126 -0
  202. package/dist/viewer/assets/{wgpu_wasm_bg-WoZ1YI1I.wasm → wgpu_wasm_bg-Dps0jNcQ.wasm} +0 -0
  203. package/dist/viewer/index.html +4 -4
  204. package/dist/viewer/panels.js +1 -1
  205. package/package.json +2 -2
  206. package/scripts/verify-runtime-content-engine.mjs +7 -4
  207. package/skills/forgeax-view-cli/SKILL.md +11 -0
  208. package/dist/modules/chunks/chunk-27XASYEH.mjs.map +0 -7
  209. package/dist/modules/chunks/chunk-5YTMN435.mjs.map +0 -7
  210. package/dist/modules/chunks/chunk-6I7RY73G.mjs.map +0 -7
  211. package/dist/modules/chunks/chunk-6KM24NH6.mjs.map +0 -7
  212. package/dist/modules/chunks/chunk-DWT3TA6M.mjs.map +0 -7
  213. package/dist/modules/chunks/chunk-E3Z7GLFU.mjs.map +0 -7
  214. package/dist/modules/chunks/chunk-EZSGDSCC.mjs.map +0 -7
  215. package/dist/modules/chunks/chunk-FNRGLCZW.mjs.map +0 -7
  216. package/dist/modules/chunks/chunk-HWZCLROY.mjs.map +0 -7
  217. package/dist/modules/chunks/chunk-IJPWKKIU.mjs.map +0 -7
  218. package/dist/modules/chunks/chunk-LZ57Y73Z.mjs.map +0 -7
  219. package/dist/modules/chunks/chunk-OQXDADAS.mjs.map +0 -7
  220. package/dist/modules/chunks/chunk-QELNKFSI.mjs +0 -10
  221. package/dist/modules/chunks/chunk-QELNKFSI.mjs.map +0 -7
  222. package/dist/modules/chunks/chunk-VKNIYV2W.mjs.map +0 -7
  223. package/dist/modules/chunks/chunk-YLCJNKIW.mjs.map +0 -7
  224. package/dist/viewer/assets/main-CI6ZQziX.js +0 -22
  225. package/dist/viewer/assets/main-CI6ZQziX.js.map +0 -1
  226. package/dist/viewer/assets/panels-ui-CfUtl68h.js +0 -12
  227. package/dist/viewer/assets/panels-ui-CfUtl68h.js.map +0 -1
  228. package/dist/viewer/assets/style-gOtSMZif.css +0 -2
  229. /package/dist/modules/chunks/{chunk-EWSCJF77.mjs.map → chunk-2CMCY54A.mjs.map} +0 -0
  230. /package/dist/modules/chunks/{chunk-YFQGSDK3.mjs.map → chunk-45WL24XN.mjs.map} +0 -0
  231. /package/dist/modules/chunks/{chunk-FMCHH5R4.mjs.map → chunk-4FYKRL46.mjs.map} +0 -0
  232. /package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs.map → chunk-4MJHVZMB.mjs.map} +0 -0
  233. /package/dist/modules/chunks/{chunk-XQYF2P6M.mjs.map → chunk-5HVXQEO3.mjs.map} +0 -0
  234. /package/dist/modules/chunks/{chunk-XMP4THLF.mjs.map → chunk-66LM6NO6.mjs.map} +0 -0
  235. /package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs.map → chunk-6J27SWMY.mjs.map} +0 -0
  236. /package/dist/modules/chunks/{chunk-JK7K7RG3.mjs.map → chunk-6VK7HB4X.mjs.map} +0 -0
  237. /package/dist/modules/chunks/{chunk-HRKW766Y.mjs.map → chunk-6WZZ7TIC.mjs.map} +0 -0
  238. /package/dist/modules/chunks/{chunk-U64FRQKP.mjs.map → chunk-7MWZK7HS.mjs.map} +0 -0
  239. /package/dist/modules/chunks/{chunk-F5RLQAPN.mjs.map → chunk-A7OGXJAV.mjs.map} +0 -0
  240. /package/dist/modules/chunks/{chunk-QUFVUMSY.mjs.map → chunk-AUINYWZP.mjs.map} +0 -0
  241. /package/dist/modules/chunks/{chunk-PZIAKZJC.mjs.map → chunk-B24VYGHV.mjs.map} +0 -0
  242. /package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs.map → chunk-C2AMOM7H.mjs.map} +0 -0
  243. /package/dist/modules/chunks/{chunk-IZAHIOFU.mjs.map → chunk-C3WVSJZF.mjs.map} +0 -0
  244. /package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs.map → chunk-CAXCOZ7Y.mjs.map} +0 -0
  245. /package/dist/modules/chunks/{chunk-B6QUJ33G.mjs.map → chunk-CXFQME65.mjs.map} +0 -0
  246. /package/dist/modules/chunks/{chunk-U6UMATPV.mjs.map → chunk-CYU3WWN6.mjs.map} +0 -0
  247. /package/dist/modules/chunks/{chunk-AGVLPYVE.mjs.map → chunk-D2LZIQE2.mjs.map} +0 -0
  248. /package/dist/modules/chunks/{chunk-YNHEYXDG.mjs.map → chunk-DOU4MNMQ.mjs.map} +0 -0
  249. /package/dist/modules/chunks/{chunk-ZIDEETK4.mjs.map → chunk-E4G4HDOC.mjs.map} +0 -0
  250. /package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs.map → chunk-EZAJ66NW.mjs.map} +0 -0
  251. /package/dist/modules/chunks/{chunk-APD2EWSZ.mjs.map → chunk-FIWL6TQS.mjs.map} +0 -0
  252. /package/dist/modules/chunks/{chunk-U5J7OTEB.mjs.map → chunk-FSSARTVM.mjs.map} +0 -0
  253. /package/dist/modules/chunks/{chunk-47RJSHLM.mjs.map → chunk-FXXPWAXM.mjs.map} +0 -0
  254. /package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs.map → chunk-G2QCXN56.mjs.map} +0 -0
  255. /package/dist/modules/chunks/{chunk-WVU3CQ62.mjs.map → chunk-GUVUL6D2.mjs.map} +0 -0
  256. /package/dist/modules/chunks/{chunk-E3PJGTLI.mjs.map → chunk-IGIELQZ2.mjs.map} +0 -0
  257. /package/dist/modules/chunks/{chunk-5PHAXNFO.mjs.map → chunk-IMDR26Y3.mjs.map} +0 -0
  258. /package/dist/modules/chunks/{chunk-55F55BQY.mjs.map → chunk-JVOHFCI4.mjs.map} +0 -0
  259. /package/dist/modules/chunks/{chunk-K2QZRFLE.mjs.map → chunk-KJTMDFFX.mjs.map} +0 -0
  260. /package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs.map → chunk-KPLESRQY.mjs.map} +0 -0
  261. /package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs.map → chunk-KUOWDTI6.mjs.map} +0 -0
  262. /package/dist/modules/chunks/{chunk-INTTYJVW.mjs.map → chunk-LBQ6DFMP.mjs.map} +0 -0
  263. /package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs.map → chunk-LVWHM3UN.mjs.map} +0 -0
  264. /package/dist/modules/chunks/{chunk-STQPRNEO.mjs.map → chunk-MLXRIWJA.mjs.map} +0 -0
  265. /package/dist/modules/chunks/{chunk-D25SR5FS.mjs.map → chunk-N2SH3JGI.mjs.map} +0 -0
  266. /package/dist/modules/chunks/{chunk-7IGFAI5H.mjs.map → chunk-O5QX6H3U.mjs.map} +0 -0
  267. /package/dist/modules/chunks/{chunk-46UEGAXY.mjs.map → chunk-Q7M7VUOZ.mjs.map} +0 -0
  268. /package/dist/modules/chunks/{chunk-XE6ITXHT.mjs.map → chunk-QB33CMEU.mjs.map} +0 -0
  269. /package/dist/modules/chunks/{chunk-KAGFU64Y.mjs.map → chunk-QW2VT3XB.mjs.map} +0 -0
  270. /package/dist/modules/chunks/{chunk-U5R6MVM4.mjs.map → chunk-RFTLGEB5.mjs.map} +0 -0
  271. /package/dist/modules/chunks/{chunk-P5XMFZY4.mjs.map → chunk-SFB5BDTB.mjs.map} +0 -0
  272. /package/dist/modules/chunks/{chunk-4D3Q7K44.mjs.map → chunk-SNICHQJP.mjs.map} +0 -0
  273. /package/dist/modules/chunks/{chunk-CX5WREJC.mjs.map → chunk-SPGFO2TA.mjs.map} +0 -0
  274. /package/dist/modules/chunks/{chunk-H256DQT6.mjs.map → chunk-TMPTVIAP.mjs.map} +0 -0
  275. /package/dist/modules/chunks/{chunk-CKYXAT7H.mjs.map → chunk-VC4OEPDH.mjs.map} +0 -0
  276. /package/dist/modules/chunks/{chunk-RJVOH7G2.mjs.map → chunk-VKWEA6NG.mjs.map} +0 -0
  277. /package/dist/modules/chunks/{chunk-PVP5YBNR.mjs.map → chunk-WFM434WJ.mjs.map} +0 -0
  278. /package/dist/modules/chunks/{chunk-TXLD7JI5.mjs.map → chunk-WJNASQF2.mjs.map} +0 -0
  279. /package/dist/modules/chunks/{chunk-357UOBAS.mjs.map → chunk-XUNDH3E7.mjs.map} +0 -0
  280. /package/dist/modules/chunks/{chunk-PJFFCRRD.mjs.map → chunk-YDARD4EP.mjs.map} +0 -0
package/README.md CHANGED
@@ -276,10 +276,51 @@ loop and retains the World, tools and renderer; explicit hidden capture still
276
276
  uses that same App. Revealing the page restores layout and rendering. Independent
277
277
  game and Play execution keep their own lifetimes and are not paused by View.
278
278
 
279
- The Content Browser presents the Engine catalog; selection inspects read-only
280
- asset metadata and double-click opens the exact Engine preview. Assets from
279
+ The Content Browser joins the Engine catalog with Pack's bounded source index.
280
+ `summary.get` is the bounded workspace query for external status readers:
281
+ it exposes project identity, phase, browser generation, revision and at most 16
282
+ target identities, with a `hasMoreTargets` flag. It does not serialize catalog
283
+ assets, resource opens or page selection. The full `tabs.get` snapshot remains
284
+ the View UI state contract.
285
+ `pages.list` separately returns at most 16 connected page IDs with their bounded
286
+ workspace summaries. `pack.reveal` is a public workspace operation: the same
287
+ project/source revision and optional page ID can be submitted through the API,
288
+ `forgeax view workspace call`, or another client adapter. Its result is a
289
+ visible-page receipt or an explicit non-action failure; no adapter owns reveal.
290
+ Zero-output and malformed Pack sources remain file cards with diagnostics, and
291
+ one-output Packs retain their source parent. Activating a Pack only expands it;
292
+ selecting a specific output opens the existing Engine preview route. Assets from
281
293
  `.pack.ts` show their Catalog `sourceKey` when present; GUIDs remain their
282
- operation identity. Hierarchy and Inspector use the optional live target tools
294
+ operation identity. A page-scoped Pack reveal checks project/source revision,
295
+ targets one authenticated frontend connection, and accepts `shown` only after
296
+ the Editor, Content Browser Dock panel and Pack card are visible. Workspace
297
+ selection/open requests and Display run binding belong to that frontend
298
+ connection; disconnect retires its projection and pending reveal.
299
+ Reveal temporarily admits only the addressed Pack through the current filters.
300
+ Search and filter preferences stay intact; manual navigation cancels the focus.
301
+ Request cancellation and timeout retire the pending receipt and notify the exact
302
+ frontend to stop remaining asynchronous navigation. A late visible acknowledgment
303
+ cannot complete a cancelled request; an old cancellation cannot cancel a newer reveal.
304
+ The entry URL uses `view-frontend`; after a project opens, the full View shell
305
+ uses the exact `forgeax-workspace:<sessionId>:<targetId>` caller of the current
306
+ headed project target. Both are page sessions, while other Engine target callers
307
+ cannot claim the View page. Each fresh entry document opens its own Engine
308
+ session from the confirmed project intent; it does not copy another document's
309
+ headed target URL. Each target still owns one accepted browser caller. Refresh
310
+ retains that target and replaces only its browser generation. View selection,
311
+ resource opens and Display bindings belong to the exact frontend connection.
312
+ The Pack receipt rechecks the source revision and project at acknowledgment.
313
+
314
+ > [!NOTE]
315
+ > A page-less CLI client can still use page operations such as `tabs.get`,
316
+ > `scene.select`, and `asset.open` when exactly one View frontend is connected;
317
+ > the Broker directs those calls to that page's session. With multiple pages,
318
+ > these operations return `view-page-ambiguous` before changing page or Engine
319
+ > state. `summary.get` and Engine project facts remain shared reads.
320
+ > Use `pages.list` to choose an exact page, then `pack.reveal` to direct a
321
+ > revision-bound Pack navigation. Both operations have CLI entry points.
322
+
323
+ Hierarchy and Inspector use the optional live target tools
283
324
  plugin, reporting capability errors when absent. `dev:ui` starts a private
284
325
  fixture Host and serves the same Viewer code path as `dev`. Its catalog and
285
326
  scene responses arrive through the Host workspace API. Use
@@ -700,11 +741,14 @@ const api = await connectViewWorkspace({
700
741
  const tabId = 'forgeax-user-workspace';
701
742
  const state = await api.openProject(projectRoot, { tabId });
702
743
  const projectId = state.project.id;
703
- const { assets } = await api.listAssets(projectId, { tabId });
744
+ const targetId = state.projectTarget.targetId;
745
+ const targetGeneration = state.projectTarget.generation;
746
+ const target = { projectId, tabId, targetId, targetGeneration };
747
+ const { assets } = await api.listAssets(projectId, target);
704
748
  const scene = assets.find((asset) => asset.kind === 'scene');
705
749
  if (scene) {
706
- await api.inspectAsset(scene.guid, { projectId, tabId });
707
- await api.openAsset(scene.guid, { projectId, tabId });
750
+ await api.inspectAsset(scene.guid, target);
751
+ await api.openAsset(scene.guid, target);
708
752
  }
709
753
  ```
710
754
 
@@ -714,8 +758,8 @@ Authored-asset operations are projections of Engine CLI / ScriptablePack / ToolC
714
758
  |:--|:--|:--|
715
759
  | `assets.list` | DevKit `assetList({ root })` / existing `listAssets` → `PackEntry[]` | session catalog snapshot, including optional `sourceKey` |
716
760
  | `asset.inspect` | DevKit `assetInspect({ root, subject })` plus ScriptablePack `inspect(sourcePath)` / gateway `inspect-meta` | session inspection of PackEntry + `ScriptablePackMetaJson` |
717
- | `asset-source.rebuild` | ScriptablePack `rebuild(sourcePath, 'rebuild')` / gateway `rebuild` / ToolClient `asset-source.rebuild` | forwarding + CAS `expectedRevision` |
718
- | `asset-source.cold-cook` | ScriptablePack `rebuild(sourcePath, 'cold-cook')` / gateway `cold-cook` / ToolClient `asset-source.cold-cook` | forwarding + CAS `expectedRevision` |
761
+ | `asset.source.rebuild` | ScriptablePack `rebuild(sourcePath, 'rebuild')` / gateway `rebuild` / ToolClient `asset.source.rebuild` | forwarding + CAS `expectedRevision` |
762
+ | `asset.source.cold-cook` | ScriptablePack `rebuild(sourcePath, 'cold-cook')` / gateway `cold-cook` / ToolClient `asset.source.cold-cook` | forwarding + CAS `expectedRevision` |
719
763
 
720
764
  Codex edits `pack.ts` through the workspace files. The browser shell places the `sourcePath`-grouped Engine catalog and exact viewport on the left, and a **read-only** Engine meta inspector on the right (`packageId`, `importer`, `subAssets`, `cookReceiptUrl`). `Rebuild` / `Cold-cook` only forward Engine cook. Selecting an already-previewed GUID inspects again and does not open a second preview surface. Missing Engine methods fail closed with `view-engine-capability-unavailable`. Engine revision conflicts surface as `pack-source-revision-conflict`.
721
765
 
@@ -748,7 +792,7 @@ const workspaceEngine = {
748
792
  assetInspect: (input) => assetInspectCommand({ root: input.root, subject: input.subject }),
749
793
  openPreview,
750
794
  pack: scriptablePackAuthoringPort, // inspect / preflight / rebuild
751
- tools: toolClient, // ToolClient.run('asset-source.rebuild' | 'asset-source.cold-cook')
795
+ tools: toolClient, // ToolClient.run('asset.source.rebuild' | 'asset.source.cold-cook')
752
796
  };
753
797
  const view = await startView({ platform, workspaceEngine });
754
798
  ```
@@ -833,3 +877,17 @@ metadata alone is not sufficient build identity.
833
877
 
834
878
  The required project dialog is modeless: Scene still requires a confirmed project,
835
879
  while artifact pages and workspace navigation remain available before opening one.
880
+
881
+ ## Public operation naming
882
+
883
+ Resource segments and actions retain the same order across API, CLI and MCP.
884
+ The View ToolApi ID `view.workspace.pack.reveal` is the CLI path
885
+ `forgeax view workspace pack reveal`; its relative workspace API operation is
886
+ `pack.reveal`. Read workspace facts with `summary.get` /
887
+ `forgeax view workspace summary get`. The authenticated backend CLI accepts
888
+ `--input` containing the ordinary operation arguments and uses the same owner
889
+ authorization. Frontend requests retain the versioned workspace envelope.
890
+ Engine-owned source operations use `asset.source.rebuild` and
891
+ `asset.source.cold-cook`; scene-tree queries use `scene.tree.get`.
892
+ CLI contribution metadata uses the actual operation ID without a second
893
+ `forgeax.` prefix or duplicate inspector namespace.
@@ -1 +1 @@
1
- {"codeRevision":"1803fe06a4440233ec0495ef340afc9f8b0e350ce211dd66b15412f48dfecad1","viewerDigest":"20561802de9394166c9b84b8d6909d09e6c4940e20735f0f12f854374a228d9a"}
1
+ {"codeRevision":"d9f8f160baa8c79a98e292a9cfeb82afd6b984ce9994c42ebf2e4e7ce2c72a91","viewerDigest":"c2a8f0d729c9c6f35f59548d9432fc158b5424e24db7d2be69e2a07b103af02b"}
@@ -2,45 +2,45 @@ import {
2
2
  createViewBackend,
3
3
  createViewHostBinding,
4
4
  createViewPlatformBinding
5
- } from "./chunks/chunk-LZ57Y73Z.mjs";
6
- import "./chunks/chunk-XQYF2P6M.mjs";
7
- import "./chunks/chunk-YLCJNKIW.mjs";
5
+ } from "./chunks/chunk-VSJOW7J4.mjs";
6
+ import "./chunks/chunk-5HVXQEO3.mjs";
7
+ import "./chunks/chunk-I32EONBF.mjs";
8
8
  import "./chunks/chunk-GQANC3HH.mjs";
9
9
  import "./chunks/chunk-YY4G5LVX.mjs";
10
- import "./chunks/chunk-6KM24NH6.mjs";
11
- import "./chunks/chunk-27XASYEH.mjs";
12
- import "./chunks/chunk-HWZCLROY.mjs";
13
- import "./chunks/chunk-55F55BQY.mjs";
14
- import "./chunks/chunk-U5J7OTEB.mjs";
15
- import "./chunks/chunk-IJPWKKIU.mjs";
16
- import "./chunks/chunk-D25SR5FS.mjs";
17
- import "./chunks/chunk-AGVLPYVE.mjs";
18
- import "./chunks/chunk-7IGFAI5H.mjs";
19
- import "./chunks/chunk-OKQ5RBKO.mjs";
20
- import "./chunks/chunk-EZSGDSCC.mjs";
21
- import "./chunks/chunk-EWSCJF77.mjs";
22
- import "./chunks/chunk-X4NNZ5X6.mjs";
23
- import "./chunks/chunk-FMCHH5R4.mjs";
24
- import "./chunks/chunk-STQPRNEO.mjs";
25
- import "./chunks/chunk-PZIAKZJC.mjs";
26
- import "./chunks/chunk-QUFVUMSY.mjs";
27
- import "./chunks/chunk-HRKW766Y.mjs";
28
- import "./chunks/chunk-KX2WU5Z6.mjs";
29
- import "./chunks/chunk-B6QUJ33G.mjs";
30
- import "./chunks/chunk-PJFFCRRD.mjs";
10
+ import "./chunks/chunk-3Y5WN22T.mjs";
11
+ import "./chunks/chunk-YU3HRQX7.mjs";
12
+ import "./chunks/chunk-CN6YN4HP.mjs";
13
+ import "./chunks/chunk-JVOHFCI4.mjs";
14
+ import "./chunks/chunk-FSSARTVM.mjs";
15
+ import "./chunks/chunk-CYOLEAAY.mjs";
16
+ import "./chunks/chunk-N2SH3JGI.mjs";
17
+ import "./chunks/chunk-D2LZIQE2.mjs";
18
+ import "./chunks/chunk-O5QX6H3U.mjs";
19
+ import "./chunks/chunk-LVWHM3UN.mjs";
20
+ import "./chunks/chunk-ZRE7BDDB.mjs";
21
+ import "./chunks/chunk-2CMCY54A.mjs";
22
+ import "./chunks/chunk-C2AMOM7H.mjs";
23
+ import "./chunks/chunk-4FYKRL46.mjs";
24
+ import "./chunks/chunk-MLXRIWJA.mjs";
25
+ import "./chunks/chunk-B24VYGHV.mjs";
26
+ import "./chunks/chunk-AUINYWZP.mjs";
27
+ import "./chunks/chunk-6WZZ7TIC.mjs";
28
+ import "./chunks/chunk-KPLESRQY.mjs";
29
+ import "./chunks/chunk-CXFQME65.mjs";
30
+ import "./chunks/chunk-YDARD4EP.mjs";
31
31
  import "./chunks/chunk-IM3H4F4X.mjs";
32
- import "./chunks/chunk-K2QZRFLE.mjs";
33
- import "./chunks/chunk-H256DQT6.mjs";
32
+ import "./chunks/chunk-KJTMDFFX.mjs";
33
+ import "./chunks/chunk-TMPTVIAP.mjs";
34
34
  import "./chunks/chunk-QW3ZY2AD.mjs";
35
- import "./chunks/chunk-FNRGLCZW.mjs";
36
- import "./chunks/chunk-5YTMN435.mjs";
37
- import "./chunks/chunk-ZIDEETK4.mjs";
38
- import "./chunks/chunk-KAGFU64Y.mjs";
39
- import "./chunks/chunk-U5R6MVM4.mjs";
35
+ import "./chunks/chunk-PCQNUFDL.mjs";
36
+ import "./chunks/chunk-DC5JP46Y.mjs";
37
+ import "./chunks/chunk-E4G4HDOC.mjs";
38
+ import "./chunks/chunk-QW2VT3XB.mjs";
39
+ import "./chunks/chunk-RFTLGEB5.mjs";
40
40
  import "./chunks/chunk-J5B4LX5H.mjs";
41
- import "./chunks/chunk-P5XMFZY4.mjs";
42
- import "./chunks/chunk-TXLD7JI5.mjs";
43
- import "./chunks/chunk-E3Z7GLFU.mjs";
41
+ import "./chunks/chunk-SFB5BDTB.mjs";
42
+ import "./chunks/chunk-WJNASQF2.mjs";
43
+ import "./chunks/chunk-QJHQN6OD.mjs";
44
44
  import "./chunks/chunk-4XEXLHX4.mjs";
45
45
  import "./chunks/chunk-QAXALJEY.mjs";
46
46
  import "./chunks/chunk-JU5PV2T2.mjs";
@@ -6,41 +6,41 @@ import {
6
6
  VIEW_EXTENSION_ID,
7
7
  createViewExtensionTransport,
8
8
  createViewExtensionWorkspaceClient
9
- } from "./chunks/chunk-M6S5YA6X.mjs";
9
+ } from "./chunks/chunk-2RUKPDIE.mjs";
10
10
  import {
11
11
  connectViewFrontend,
12
12
  mountViewViewer,
13
13
  mountViewWorkspace
14
- } from "./chunks/chunk-D2RCKG7Q.mjs";
15
- import "./chunks/chunk-XMP4THLF.mjs";
16
- import "./chunks/chunk-RJVOH7G2.mjs";
17
- import "./chunks/chunk-E3PJGTLI.mjs";
18
- import "./chunks/chunk-YNHEYXDG.mjs";
19
- import "./chunks/chunk-U64FRQKP.mjs";
20
- import "./chunks/chunk-U6UMATPV.mjs";
21
- import "./chunks/chunk-YFQGSDK3.mjs";
22
- import "./chunks/chunk-ZHO2G4JR.mjs";
23
- import "./chunks/chunk-CX5WREJC.mjs";
24
- import "./chunks/chunk-TTRUYO7Q.mjs";
25
- import "./chunks/chunk-F5RLQAPN.mjs";
14
+ } from "./chunks/chunk-G2QCXN56.mjs";
15
+ import "./chunks/chunk-66LM6NO6.mjs";
16
+ import "./chunks/chunk-VKWEA6NG.mjs";
17
+ import "./chunks/chunk-IGIELQZ2.mjs";
18
+ import "./chunks/chunk-DOU4MNMQ.mjs";
19
+ import "./chunks/chunk-7MWZK7HS.mjs";
20
+ import "./chunks/chunk-CYU3WWN6.mjs";
21
+ import "./chunks/chunk-45WL24XN.mjs";
22
+ import "./chunks/chunk-EZAJ66NW.mjs";
23
+ import "./chunks/chunk-SPGFO2TA.mjs";
24
+ import "./chunks/chunk-UZH2664E.mjs";
25
+ import "./chunks/chunk-A7OGXJAV.mjs";
26
26
  import {
27
27
  ViewWorkspaceInputController,
28
28
  ViewWorkspaceShell,
29
29
  createBrowserPagePresentation
30
- } from "./chunks/chunk-4T3D67CS.mjs";
31
- import "./chunks/chunk-4D3Q7K44.mjs";
32
- import "./chunks/chunk-PVP5YBNR.mjs";
30
+ } from "./chunks/chunk-GRDCA6LD.mjs";
31
+ import "./chunks/chunk-SNICHQJP.mjs";
32
+ import "./chunks/chunk-WFM434WJ.mjs";
33
33
  import {
34
34
  createViewSlotRegistry
35
35
  } from "./chunks/chunk-GQOXQ4AV.mjs";
36
- import "./chunks/chunk-INTTYJVW.mjs";
36
+ import "./chunks/chunk-LBQ6DFMP.mjs";
37
37
  import "./chunks/chunk-Q2NO32WU.mjs";
38
- import "./chunks/chunk-OQXDADAS.mjs";
39
- import "./chunks/chunk-IJPWKKIU.mjs";
40
- import "./chunks/chunk-D25SR5FS.mjs";
38
+ import "./chunks/chunk-UWJYROKS.mjs";
39
+ import "./chunks/chunk-CYOLEAAY.mjs";
40
+ import "./chunks/chunk-N2SH3JGI.mjs";
41
41
  import {
42
42
  DISPLAY_SURFACE_ID
43
- } from "./chunks/chunk-AGVLPYVE.mjs";
43
+ } from "./chunks/chunk-D2LZIQE2.mjs";
44
44
  import {
45
45
  VIEW_INSPECTOR_API_VERSION,
46
46
  VIEW_INSPECTOR_OPERATIONS,
@@ -50,41 +50,44 @@ import {
50
50
  ViewInspectorPanel,
51
51
  createInspectorRequest,
52
52
  createViewInspectorToolContributions
53
- } from "./chunks/chunk-7IGFAI5H.mjs";
54
- import "./chunks/chunk-OKQ5RBKO.mjs";
55
- import "./chunks/chunk-EZSGDSCC.mjs";
56
- import "./chunks/chunk-EWSCJF77.mjs";
57
- import "./chunks/chunk-X4NNZ5X6.mjs";
58
- import "./chunks/chunk-FMCHH5R4.mjs";
59
- import "./chunks/chunk-STQPRNEO.mjs";
60
- import "./chunks/chunk-PZIAKZJC.mjs";
61
- import "./chunks/chunk-QUFVUMSY.mjs";
62
- import "./chunks/chunk-HRKW766Y.mjs";
63
- import "./chunks/chunk-KX2WU5Z6.mjs";
64
- import "./chunks/chunk-B6QUJ33G.mjs";
65
- import "./chunks/chunk-PJFFCRRD.mjs";
53
+ } from "./chunks/chunk-O5QX6H3U.mjs";
54
+ import "./chunks/chunk-LVWHM3UN.mjs";
55
+ import "./chunks/chunk-ZRE7BDDB.mjs";
56
+ import "./chunks/chunk-2CMCY54A.mjs";
57
+ import "./chunks/chunk-C2AMOM7H.mjs";
58
+ import "./chunks/chunk-4FYKRL46.mjs";
59
+ import "./chunks/chunk-MLXRIWJA.mjs";
60
+ import "./chunks/chunk-B24VYGHV.mjs";
61
+ import "./chunks/chunk-AUINYWZP.mjs";
62
+ import "./chunks/chunk-6WZZ7TIC.mjs";
63
+ import "./chunks/chunk-KPLESRQY.mjs";
64
+ import "./chunks/chunk-CXFQME65.mjs";
65
+ import "./chunks/chunk-YDARD4EP.mjs";
66
66
  import "./chunks/chunk-IM3H4F4X.mjs";
67
- import "./chunks/chunk-K2QZRFLE.mjs";
68
- import "./chunks/chunk-H256DQT6.mjs";
67
+ import "./chunks/chunk-KJTMDFFX.mjs";
68
+ import "./chunks/chunk-TMPTVIAP.mjs";
69
69
  import "./chunks/chunk-QW3ZY2AD.mjs";
70
70
  import {
71
71
  ViewWorkspaceClient,
72
72
  createViewWorkspaceClient
73
- } from "./chunks/chunk-FNRGLCZW.mjs";
74
- import "./chunks/chunk-5YTMN435.mjs";
75
- import "./chunks/chunk-ZIDEETK4.mjs";
76
- import "./chunks/chunk-KAGFU64Y.mjs";
77
- import "./chunks/chunk-U5R6MVM4.mjs";
78
- import "./chunks/chunk-APD2EWSZ.mjs";
79
- import "./chunks/chunk-357UOBAS.mjs";
73
+ } from "./chunks/chunk-PCQNUFDL.mjs";
74
+ import "./chunks/chunk-DC5JP46Y.mjs";
75
+ import "./chunks/chunk-E4G4HDOC.mjs";
76
+ import "./chunks/chunk-QW2VT3XB.mjs";
77
+ import "./chunks/chunk-RFTLGEB5.mjs";
78
+ import "./chunks/chunk-FIWL6TQS.mjs";
79
+ import "./chunks/chunk-XUNDH3E7.mjs";
80
80
  import "./chunks/chunk-J5B4LX5H.mjs";
81
- import "./chunks/chunk-WVU3CQ62.mjs";
82
- import "./chunks/chunk-CKYXAT7H.mjs";
83
- import "./chunks/chunk-P5XMFZY4.mjs";
84
- import "./chunks/chunk-TXLD7JI5.mjs";
81
+ import "./chunks/chunk-GUVUL6D2.mjs";
82
+ import "./chunks/chunk-VC4OEPDH.mjs";
83
+ import "./chunks/chunk-SFB5BDTB.mjs";
84
+ import "./chunks/chunk-WJNASQF2.mjs";
85
85
  import {
86
86
  VIEW_DISPLAY_TAB_ID,
87
87
  VIEW_FILE_GET_SERVICE,
88
+ VIEW_PACK_REVEAL_ACK_SERVICE,
89
+ VIEW_PACK_REVEAL_TOPIC,
90
+ VIEW_PACK_SOURCES_SERVICE,
88
91
  VIEW_PAGE_TYPES,
89
92
  VIEW_WORKSPACE_API_VERSION,
90
93
  VIEW_WORKSPACE_COOK_MODES,
@@ -115,9 +118,9 @@ import {
115
118
  workspaceError,
116
119
  workspaceInspectionFactRows,
117
120
  workspaceUiFingerprint
118
- } from "./chunks/chunk-E3Z7GLFU.mjs";
121
+ } from "./chunks/chunk-QJHQN6OD.mjs";
119
122
  import "./chunks/chunk-4XEXLHX4.mjs";
120
- import "./chunks/chunk-ZGOGO7SS.mjs";
123
+ import "./chunks/chunk-6J27SWMY.mjs";
121
124
  import "./chunks/chunk-QAXALJEY.mjs";
122
125
  import "./chunks/chunk-FLGC65SR.mjs";
123
126
  export {
@@ -131,6 +134,9 @@ export {
131
134
  VIEW_INSPECTOR_SERVICES,
132
135
  VIEW_INSPECTOR_TOPIC,
133
136
  VIEW_LAYOUT_HOST_ID,
137
+ VIEW_PACK_REVEAL_ACK_SERVICE,
138
+ VIEW_PACK_REVEAL_TOPIC,
139
+ VIEW_PACK_SOURCES_SERVICE,
134
140
  VIEW_PAGE_TYPES,
135
141
  VIEW_WORKSPACE_API_VERSION,
136
142
  VIEW_WORKSPACE_COOK_MODES,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VIEW_PAGE_TYPES
3
- } from "./chunk-E3Z7GLFU.mjs";
3
+ } from "./chunk-QJHQN6OD.mjs";
4
4
  import {
5
5
  __export
6
6
  } from "./chunk-FLGC65SR.mjs";
@@ -44,4 +44,4 @@ export {
44
44
  TITLE_I18N_KEY,
45
45
  identity_exports
46
46
  };
47
- //# sourceMappingURL=chunk-EWSCJF77.mjs.map
47
+ //# sourceMappingURL=chunk-2CMCY54A.mjs.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createViewWorkspaceClient
3
- } from "./chunk-FNRGLCZW.mjs";
3
+ } from "./chunk-PCQNUFDL.mjs";
4
4
  import {
5
5
  VIEW_FILE_GET_SERVICE,
6
6
  VIEW_WORKSPACE_DOMAIN_OPERATIONS,
7
7
  VIEW_WORKSPACE_SERVICES,
8
8
  requireWorkspaceString,
9
9
  workspaceError
10
- } from "./chunk-E3Z7GLFU.mjs";
10
+ } from "./chunk-QJHQN6OD.mjs";
11
11
 
12
12
  // packages/view-workspace-core/src/extension-bridge.ts
13
13
  var VIEW_EXTENSION_ID = "@forgeax-extension/view";
@@ -16,7 +16,7 @@ var VIEW_EXTENSION_CAPABILITIES = Object.freeze({
16
16
  author: "view.workspace.author",
17
17
  inspect: "view.plugins.read"
18
18
  });
19
- var AUTHORING_OPERATIONS = /* @__PURE__ */ new Set(["asset-source.rebuild", "asset-source.cold-cook"]);
19
+ var AUTHORING_OPERATIONS = /* @__PURE__ */ new Set(["asset.source.rebuild", "asset.source.cold-cook"]);
20
20
  var WORKSPACE_OPERATIONS = new Set(VIEW_WORKSPACE_DOMAIN_OPERATIONS);
21
21
  function requiredCapability(service, request) {
22
22
  const operation = request && typeof request === "object" && "operation" in request ? request.operation : void 0;
@@ -90,4 +90,4 @@ export {
90
90
  createViewExtensionTransport,
91
91
  createViewExtensionWorkspaceClient
92
92
  };
93
- //# sourceMappingURL=chunk-M6S5YA6X.mjs.map
93
+ //# sourceMappingURL=chunk-2RUKPDIE.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../packages/view-workspace-core/src/extension-bridge.ts"],
4
- "sourcesContent": ["import type { HostRequestOptions } from '@forgeax/engine-host/transport';\nimport type { WorkspaceRequest } from './contract.ts';\nexport type ViewExtensionInvoke = (input: { extensionId: string; capability: string; service: string; request: unknown; signal?: AbortSignal; generation?: number }) => unknown | Promise<unknown>;\nexport type ViewExtensionOptions = { invoke: ViewExtensionInvoke; extensionId?: string; capabilities?: readonly string[] };\nimport { VIEW_FILE_GET_SERVICE, VIEW_WORKSPACE_SERVICES, VIEW_WORKSPACE_DOMAIN_OPERATIONS, workspaceError, requireWorkspaceString } from './contract.ts';\nimport { createViewWorkspaceClient } from './client.ts';\n\nexport const VIEW_EXTENSION_ID = '@forgeax-extension/view';\nexport const VIEW_EXTENSION_CAPABILITIES = Object.freeze({\n read: 'view.workspace.read',\n author: 'view.workspace.author',\n inspect: 'view.plugins.read',\n});\n\nconst AUTHORING_OPERATIONS = new Set(['asset-source.rebuild', 'asset-source.cold-cook']);\nconst WORKSPACE_OPERATIONS = new Set(VIEW_WORKSPACE_DOMAIN_OPERATIONS);\n\nfunction requiredCapability(service: string, request: unknown) {\n const operation = request && typeof request === 'object' && 'operation' in request ? request.operation : undefined;\n if (service === VIEW_WORKSPACE_SERVICES.call) {\n if (typeof operation !== 'string' || !WORKSPACE_OPERATIONS.has(operation)) {\n throw workspaceError(\n 'view-extension-operation-unknown',\n 'operation to be declared by the View workspace contract',\n 'Refresh the View extension capability descriptor.',\n { operation },\n );\n }\n return AUTHORING_OPERATIONS.has(operation)\n ? VIEW_EXTENSION_CAPABILITIES.author\n : VIEW_EXTENSION_CAPABILITIES.read;\n }\n if (service === VIEW_WORKSPACE_SERVICES.capabilities) return VIEW_EXTENSION_CAPABILITIES.read;\n if (service === VIEW_FILE_GET_SERVICE) return VIEW_EXTENSION_CAPABILITIES.read;\n throw workspaceError(\n 'view-extension-service-unknown',\n 'service to be declared by the View extension contract',\n 'Use the typed View workspace client rather than a raw Host service name.',\n { service },\n );\n}\n\n/**\n * Browser-side adapter for an Editor-issued, session-bound View capability.\n * The host authenticates the iframe; this transport never receives or forwards\n * the resident Host endpoint or its bearer token.\n */\nexport function createViewExtensionTransport({\n invoke,\n extensionId = VIEW_EXTENSION_ID,\n capabilities = [],\n}: Partial<ViewExtensionOptions> = {}) {\n if (typeof invoke !== 'function') {\n throw new TypeError('View extension transport requires a host capability invoke function');\n }\n if (extensionId !== VIEW_EXTENSION_ID) {\n throw new TypeError(`View extension transport only admits ${VIEW_EXTENSION_ID}`);\n }\n const granted = new Set(capabilities);\n return Object.freeze({\n request<TPayload, TResult>(service: string, request: TPayload, options: HostRequestOptions = {}): Promise<TResult> {\n const capability = requiredCapability(service, request);\n if (!granted.has(capability)) {\n return Promise.reject(workspaceError(\n 'view-extension-capability-denied',\n `the ${capability} capability to be granted`,\n 'Install or re-authorize the View extension with the required permission.',\n { extensionId, capability, service, operation: (request as Partial<WorkspaceRequest> | undefined)?.operation },\n ));\n }\n const { signal, generation } = options;\n return Promise.resolve(invoke({\n extensionId,\n capability,\n service,\n request,\n ...(signal === undefined ? {} : { signal }),\n ...(generation === undefined ? {} : { generation }),\n })) as Promise<TResult>;\n },\n close() {},\n });\n}\n\nexport function createViewExtensionWorkspaceClient({ invoke, capabilities, clientId }: Partial<ViewExtensionOptions> & { clientId?: string } = {}) {\n return createViewWorkspaceClient({\n transport: createViewExtensionTransport({ invoke, capabilities }),\n clientId: requireWorkspaceString(clientId, 'clientId'),\n });\n}\n"],
4
+ "sourcesContent": ["import type { HostRequestOptions } from '@forgeax/engine-host/transport';\nimport type { WorkspaceRequest } from './contract.ts';\nexport type ViewExtensionInvoke = (input: { extensionId: string; capability: string; service: string; request: unknown; signal?: AbortSignal; generation?: number }) => unknown | Promise<unknown>;\nexport type ViewExtensionOptions = { invoke: ViewExtensionInvoke; extensionId?: string; capabilities?: readonly string[] };\nimport { VIEW_FILE_GET_SERVICE, VIEW_WORKSPACE_SERVICES, VIEW_WORKSPACE_DOMAIN_OPERATIONS, workspaceError, requireWorkspaceString } from './contract.ts';\nimport { createViewWorkspaceClient } from './client.ts';\n\nexport const VIEW_EXTENSION_ID = '@forgeax-extension/view';\nexport const VIEW_EXTENSION_CAPABILITIES = Object.freeze({\n read: 'view.workspace.read',\n author: 'view.workspace.author',\n inspect: 'view.plugins.read',\n});\n\nconst AUTHORING_OPERATIONS = new Set(['asset.source.rebuild', 'asset.source.cold-cook']);\nconst WORKSPACE_OPERATIONS = new Set(VIEW_WORKSPACE_DOMAIN_OPERATIONS);\n\nfunction requiredCapability(service: string, request: unknown) {\n const operation = request && typeof request === 'object' && 'operation' in request ? request.operation : undefined;\n if (service === VIEW_WORKSPACE_SERVICES.call) {\n if (typeof operation !== 'string' || !WORKSPACE_OPERATIONS.has(operation)) {\n throw workspaceError(\n 'view-extension-operation-unknown',\n 'operation to be declared by the View workspace contract',\n 'Refresh the View extension capability descriptor.',\n { operation },\n );\n }\n return AUTHORING_OPERATIONS.has(operation)\n ? VIEW_EXTENSION_CAPABILITIES.author\n : VIEW_EXTENSION_CAPABILITIES.read;\n }\n if (service === VIEW_WORKSPACE_SERVICES.capabilities) return VIEW_EXTENSION_CAPABILITIES.read;\n if (service === VIEW_FILE_GET_SERVICE) return VIEW_EXTENSION_CAPABILITIES.read;\n throw workspaceError(\n 'view-extension-service-unknown',\n 'service to be declared by the View extension contract',\n 'Use the typed View workspace client rather than a raw Host service name.',\n { service },\n );\n}\n\n/**\n * Browser-side adapter for an Editor-issued, session-bound View capability.\n * The host authenticates the iframe; this transport never receives or forwards\n * the resident Host endpoint or its bearer token.\n */\nexport function createViewExtensionTransport({\n invoke,\n extensionId = VIEW_EXTENSION_ID,\n capabilities = [],\n}: Partial<ViewExtensionOptions> = {}) {\n if (typeof invoke !== 'function') {\n throw new TypeError('View extension transport requires a host capability invoke function');\n }\n if (extensionId !== VIEW_EXTENSION_ID) {\n throw new TypeError(`View extension transport only admits ${VIEW_EXTENSION_ID}`);\n }\n const granted = new Set(capabilities);\n return Object.freeze({\n request<TPayload, TResult>(service: string, request: TPayload, options: HostRequestOptions = {}): Promise<TResult> {\n const capability = requiredCapability(service, request);\n if (!granted.has(capability)) {\n return Promise.reject(workspaceError(\n 'view-extension-capability-denied',\n `the ${capability} capability to be granted`,\n 'Install or re-authorize the View extension with the required permission.',\n { extensionId, capability, service, operation: (request as Partial<WorkspaceRequest> | undefined)?.operation },\n ));\n }\n const { signal, generation } = options;\n return Promise.resolve(invoke({\n extensionId,\n capability,\n service,\n request,\n ...(signal === undefined ? {} : { signal }),\n ...(generation === undefined ? {} : { generation }),\n })) as Promise<TResult>;\n },\n close() {},\n });\n}\n\nexport function createViewExtensionWorkspaceClient({ invoke, capabilities, clientId }: Partial<ViewExtensionOptions> & { clientId?: string } = {}) {\n return createViewWorkspaceClient({\n transport: createViewExtensionTransport({ invoke, capabilities }),\n clientId: requireWorkspaceString(clientId, 'clientId'),\n });\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;AAOO,IAAM,oBAAoB;AAC1B,IAAM,8BAA8B,OAAO,OAAO;AAAA,EACvD,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AACX,CAAC;AAED,IAAM,uBAAuB,oBAAI,IAAI,CAAC,wBAAwB,wBAAwB,CAAC;AACvF,IAAM,uBAAuB,IAAI,IAAI,gCAAgC;AAErE,SAAS,mBAAmB,SAAiB,SAAkB;AAC7D,QAAM,YAAY,WAAW,OAAO,YAAY,YAAY,eAAe,UAAU,QAAQ,YAAY;AACzG,MAAI,YAAY,wBAAwB,MAAM;AAC5C,QAAI,OAAO,cAAc,YAAY,CAAC,qBAAqB,IAAI,SAAS,GAAG;AACzE,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,UAAU;AAAA,MACd;AAAA,IACF;AACA,WAAO,qBAAqB,IAAI,SAAS,IACrC,4BAA4B,SAC5B,4BAA4B;AAAA,EAClC;AACA,MAAI,YAAY,wBAAwB,aAAc,QAAO,4BAA4B;AACzF,MAAI,YAAY,sBAAuB,QAAO,4BAA4B;AAC1E,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,EAAE,QAAQ;AAAA,EACZ;AACF;AAOO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA,cAAc;AAAA,EACd,eAAe,CAAC;AAClB,IAAmC,CAAC,GAAG;AACrC,MAAI,OAAO,WAAW,YAAY;AAChC,UAAM,IAAI,UAAU,qEAAqE;AAAA,EAC3F;AACA,MAAI,gBAAgB,mBAAmB;AACrC,UAAM,IAAI,UAAU,wCAAwC,iBAAiB,EAAE;AAAA,EACjF;AACA,QAAM,UAAU,IAAI,IAAI,YAAY;AACpC,SAAO,OAAO,OAAO;AAAA,IACnB,QAA2B,SAAiB,SAAmB,UAA8B,CAAC,GAAqB;AACjH,YAAM,aAAa,mBAAmB,SAAS,OAAO;AACtD,UAAI,CAAC,QAAQ,IAAI,UAAU,GAAG;AAC5B,eAAO,QAAQ,OAAO;AAAA,UACpB;AAAA,UACA,OAAO,UAAU;AAAA,UACjB;AAAA,UACA,EAAE,aAAa,YAAY,SAAS,WAAY,SAAmD,UAAU;AAAA,QAC/G,CAAC;AAAA,MACH;AACA,YAAM,EAAE,QAAQ,WAAW,IAAI;AAC/B,aAAO,QAAQ,QAAQ,OAAO;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,QACzC,GAAI,eAAe,SAAY,CAAC,IAAI,EAAE,WAAW;AAAA,MACnD,CAAC,CAAC;AAAA,IACJ;AAAA,IACA,QAAQ;AAAA,IAAC;AAAA,EACX,CAAC;AACH;AAEO,SAAS,mCAAmC,EAAE,QAAQ,cAAc,SAAS,IAA2D,CAAC,GAAG;AACjJ,SAAO,0BAA0B;AAAA,IAC/B,WAAW,6BAA6B,EAAE,QAAQ,aAAa,CAAC;AAAA,IAChE,UAAU,uBAAuB,UAAU,UAAU;AAAA,EACvD,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -4,13 +4,13 @@ import {
4
4
  import {
5
5
  openViewProject,
6
6
  viewProjectOpenError
7
- } from "./chunk-XE6ITXHT.mjs";
7
+ } from "./chunk-QB33CMEU.mjs";
8
8
  import {
9
9
  VIEW_PRODUCT_BACKEND_CATALOG
10
- } from "./chunk-XQYF2P6M.mjs";
10
+ } from "./chunk-5HVXQEO3.mjs";
11
11
  import {
12
12
  startViewHostServer
13
- } from "./chunk-U5J7OTEB.mjs";
13
+ } from "./chunk-FSSARTVM.mjs";
14
14
  import {
15
15
  resolveProjectIntent,
16
16
  withProjectIntent
@@ -19,10 +19,10 @@ import {
19
19
  VIEW_FRONTEND_MODULE,
20
20
  createViewProductPlan,
21
21
  viewFrontendRoot
22
- } from "./chunk-IJPWKKIU.mjs";
22
+ } from "./chunk-CYOLEAAY.mjs";
23
23
  import {
24
24
  workspaceDiagnosticRecord
25
- } from "./chunk-U5R6MVM4.mjs";
25
+ } from "./chunk-RFTLGEB5.mjs";
26
26
 
27
27
  // src/plugins/product.ts
28
28
  import { randomUUID } from "node:crypto";
@@ -32,6 +32,7 @@ import { existsSync } from "node:fs";
32
32
  import { createHostAssembly } from "@forgeax/engine/host/protocol";
33
33
  import { defineTool, toolJsonSchema } from "@forgeax/engine/tool-runtime";
34
34
  import { registerTools, startNativePlugin } from "@forgeax/engine/plugin";
35
+ import { listPackSources } from "@forgeax/engine/pack/build";
35
36
  var ownerArgs = toolJsonSchema({ type: "object", properties: { root: { type: "string" } }, additionalProperties: false });
36
37
  var startArgs = toolJsonSchema({ type: "object", properties: {
37
38
  root: { type: "string" },
@@ -148,7 +149,7 @@ var product_default = {
148
149
  };
149
150
  const plan = createViewProductPlan({
150
151
  disabledPages: config.disabledPages,
151
- backendConfig: { workspaceAccessToken: token },
152
+ backendConfig: { workspaceAccessToken: token, packSources: listPackSources },
152
153
  frontendConfig
153
154
  });
154
155
  const installation = {
@@ -174,7 +175,7 @@ var product_default = {
174
175
  staticRoot: config.staticRoot ?? builtRoot,
175
176
  frontendConfig,
176
177
  ...core === void 0 ? {} : {
177
- onClientConnect: () => core.resetPageSession(),
178
+ onClientConnect: (caller) => core.attachPageSession(caller, host.transport),
178
179
  onClientDisconnect: (caller) => core.revokeConnection(caller.connectionId)
179
180
  }
180
181
  });
@@ -283,4 +284,4 @@ var product_default = {
283
284
  export {
284
285
  product_default
285
286
  };
286
- //# sourceMappingURL=chunk-DWT3TA6M.mjs.map
287
+ //# sourceMappingURL=chunk-3FBX3P3H.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/plugins/product.ts"],
4
+ "sourcesContent": ["import type { Context, Fiber } from '@forgeax/engine-plugin';\nimport type {} from '@forgeax/engine/devkit';\nimport type { HostRootDescriptor } from '@forgeax/engine-host/protocol';\nimport type { ToolJsonSchema, ToolSchema } from '@forgeax/engine-tool-runtime';\nimport type { ViewWorkspaceBroker } from '@forgeax/view-workspace-core/broker';\nimport type { ViewFrontendConfig } from '@forgeax/view-viewer/config';\nimport { workspaceDiagnosticRecord } from '@forgeax/view-workspace-core/command-error';\nexport type ViewProductConfig = { disabledPages?: readonly string[]; staticRoot?: string; frontendConfig?: Pick<ViewFrontendConfig, 'layout'>; frontend?: { root?: Partial<HostRootDescriptor>; module?: string } };\ntype LifecycleArgs = { root?: string; project?: string; frontendConfig?: Pick<ViewFrontendConfig, 'layout'> };\nimport { randomUUID } from 'node:crypto';\nimport { createRequire } from 'node:module';\nimport { dirname, join, resolve } from 'node:path';\nimport { existsSync } from 'node:fs';\nimport { createHostAssembly } from '@forgeax/engine-host/protocol';\nimport { defineTool, toolJsonSchema } from '@forgeax/engine-tool-runtime';\nimport { registerTools, startNativePlugin } from '@forgeax/engine-plugin';\nimport { createViewProductPlan, viewFrontendRoot, VIEW_FRONTEND_MODULE } from '@forgeax/view-viewer/catalog/shared';\nimport { listPackSources } from '@forgeax/engine-pack/build';\nimport { VIEW_PRODUCT_BACKEND_CATALOG } from '@forgeax/view-viewer/catalog/backend';\nimport { startViewHostServer } from '@forgeax/view-workspace-core/resident';\n\nimport { openViewProject, viewProjectOpenError } from '../view-project-open.ts';\nimport { resolveProjectIntent, withProjectIntent } from '../view-start.ts';\nimport { viewStartFrontendConfigSchema } from '../commands.ts';\n\nconst ownerArgs = toolJsonSchema({ type: 'object', properties: { root: { type: 'string' } }, additionalProperties: false });\nconst startArgs = toolJsonSchema({ type: 'object', properties: {\n root: { type: 'string' }, project: { type: 'string' },\n frontendConfig: viewStartFrontendConfigSchema,\n}, additionalProperties: false });\nconst projectOpenSchema = {\n type: 'object',\n properties: { root: { type: 'string' }, project: { type: 'string' } },\n required: ['project'],\n additionalProperties: false,\n} satisfies ToolJsonSchema;\n\nfunction readWorkspaceCore(owner?: Context) {\n if (!owner || typeof owner.get !== 'function') return undefined;\n try {\n const value = owner.get('viewWorkspaceCore', false);\n return value && typeof value.openProject === 'function' && typeof value.snapshot === 'function' ? value : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction installedViewStaticRoot(projectRoot: string) {\n try {\n const pluginEntry = createRequire(join(projectRoot, 'forge.json')).resolve('@forgeax/view/plugin');\n const staticRoot = resolve(dirname(pluginEntry), '../viewer');\n return existsSync(join(staticRoot, 'index.html')) ? staticRoot : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction projectFailure(error: unknown) {\n const record = workspaceDiagnosticRecord(error);\n const hint = typeof record.hint === 'string' ? record.hint : typeof record.message === 'string' ? record.message : String(error);\n return {\n ok: false,\n error: {\n code: typeof record.code === 'string' ? record.code : 'view-project-open-failed',\n expected: typeof record.expected === 'string' ? record.expected : hint,\n hint,\n ...(record.detail === undefined ? {} : { detail: record.detail }),\n },\n };\n}\n\nfunction projectSuccess(body: Awaited<ReturnType<typeof openViewProject>>) {\n return {\n ok: true,\n value: {\n ok: true,\n alreadyOpen: body.alreadyOpen === true,\n ...(body.viewerUrl === undefined ? {} : { viewerUrl: body.viewerUrl }),\n project: body.project,\n projectTarget: body.projectTarget,\n },\n };\n}\n\n/** Installed on Engine's resident Host. View owns only its plugin Fibers and sockets. */\nexport default {\n name: 'forgeax.view',\n inject: ['devkitBackend', 'engineWorkspace', 'toolApi'],\n async apply(ctx: Context, config: ViewProductConfig = {}) {\n const { host } = ctx.devkitBackend;\n let fiber: Fiber | undefined;\n let server: Awaited<ReturnType<typeof startViewHostServer>> | undefined;\n let serverEffect: ReturnType<Context['effect']> | undefined;\n let failure: ReturnType<typeof failed> | undefined;\n const failed = (error: unknown) => {\n const record = workspaceDiagnosticRecord(error);\n return ({\n code: typeof record.code === 'string' ? record.code : 'view-cleanup-failed',\n expected: typeof record.expected === 'string' ? record.expected : 'View-owned contributions to finish cleanup',\n hint: typeof record.hint === 'string' ? record.hint : typeof record.message === 'string' ? record.message : String(error),\n cleanup: workspaceDiagnosticRecord(record.detail).cleanup ?? 'failed',\n }); };\n let workspaceCore: ViewWorkspaceBroker | undefined;\n let openAbort: AbortController | undefined;\n let sessionEpoch = 0;\n let queue: Promise<unknown> = Promise.resolve();\n const enqueue = <T>(execute: () => T | Promise<T>) => {\n const result = queue.then(execute);\n queue = result.catch(() => {});\n return result;\n };\n const status = () => failure ? { phase: 'failed', error: failure } : ({ phase: server ? 'ready' : 'stopped', ...(server ? { url: server.viewerUrl } : {}) });\n const stop = async () => {\n if (failure) throw new Error(`${failure.code}: ${failure.hint}`);\n sessionEpoch += 1;\n openAbort?.abort();\n openAbort = undefined;\n workspaceCore = undefined;\n try { await serverEffect?.(); await server?.close(); await fiber?.dispose(); }\n catch (error) { failure = failed(error); throw error; }\n fiber = undefined;\n server = undefined;\n return status();\n };\n const start = async (args: LifecycleArgs = {}) => {\n if (failure) throw new Error(`${failure.code}: ${failure.hint}`);\n const project = resolveProjectIntent(args.project === undefined ? [] : ['--project', args.project], ctx.devkitBackend.root);\n if (fiber) return withProjectIntent(status(), project);\n const token = randomUUID();\n const workspaceClient = { clientId: 'view-frontend', token, resourceBrowser: true };\n const layout = args.frontendConfig?.layout ?? config.frontendConfig?.layout;\n const frontendConfig: ViewFrontendConfig = {\n embedded: true,\n workspace: workspaceClient,\n ...(layout === undefined ? {} : { layout }),\n };\n const plan = createViewProductPlan({\n disabledPages: config.disabledPages,\n backendConfig: { workspaceAccessToken: token, packSources: listPackSources },\n frontendConfig,\n });\n const installation = {\n name: 'forgeax.view.product',\n provide: ['devkitWorkspaceFrontend'],\n async apply(owner: Context) {\n for (const component of plan.backend) {\n const record = VIEW_PRODUCT_BACKEND_CATALOG.get(component.module);\n if (!record) throw new Error(`View backend program is missing: ${component.module}`);\n const module = await record.load();\n await (await owner.plugin(module.default, component.config)).await();\n }\n const builtRoot = config.staticRoot ? undefined : installedViewStaticRoot(\n ctx.devkitBackend.hostPackageRoot ?? ctx.devkitBackend.root,\n );\n if (!config.staticRoot && !builtRoot) throw new Error('View UI is not built. Build or install the View package before starting it.');\n // The launcher is the parent fiber. Cordis get walks ancestors, so the\n // broker provided by this installation is read here and kept for the tool.\n workspaceCore = readWorkspaceCore(owner);\n const core = workspaceCore;\n serverEffect = owner.effect(async () => {\n const ownedServer = await startViewHostServer({\n backendHost: host,\n accessToken: token,\n staticRoot: config.staticRoot ?? builtRoot,\n frontendConfig,\n ...(core === undefined ? {} : {\n onClientConnect: (caller) => core.attachPageSession(caller, host.transport),\n onClientDisconnect: (caller) => core.revokeConnection(caller.connectionId),\n }),\n });\n server = ownedServer;\n return () => ownedServer.close();\n });\n await serverEffect;\n Object.assign(workspaceClient, { endpoint: server!.frontendEndpoint, frontendTicket: server!.frontendTicket });\n const frontendRoot = viewFrontendRoot(frontendConfig, plan.disabledPages);\n const assembly = createHostAssembly({ root: config.frontend ? { ...frontendRoot, ...config.frontend.root, config: frontendRoot.config } : frontendRoot });\n owner.provide('devkitWorkspaceFrontend', { assembly, module: config.frontend?.module ?? VIEW_FRONTEND_MODULE });\n const removeAdmission = host.transport.onClientConnect(caller => {\n if (caller.kind === 'frontend' && caller.sourceId === 'view-frontend') {\n host.bindProjection(caller, { assembly });\n }\n });\n owner.effect(() => removeAdmission);\n },\n };\n const started = await startNativePlugin(ctx, installation);\n if (!started.ok) {\n workspaceCore = undefined;\n if (workspaceDiagnosticRecord(started.error.detail).cleanup !== 'completed') failure = failed(started.error);\n else server = undefined;\n throw Object.assign(new Error(`${started.error.code}: ${started.error.hint}`), started.error);\n }\n fiber = started.value;\n return withProjectIntent(status(), project);\n };\n\n const openProject = async (args: LifecycleArgs = {}, epoch = sessionEpoch) => {\n const stopped = () => projectFailure(viewProjectOpenError(\n 'view-not-started',\n 'View has stopped. Run forgeax view start again when needed.',\n ));\n if (epoch !== sessionEpoch || !server || !workspaceCore) {\n return projectFailure(viewProjectOpenError(\n 'view-not-started',\n epoch !== sessionEpoch\n ? 'View has stopped. Run forgeax view start again when needed.'\n : 'Run forgeax backend start, then forgeax view start.',\n ));\n }\n const project = typeof args.project === 'string' ? args.project : '';\n const controller = new AbortController();\n openAbort = controller;\n try {\n if (epoch !== sessionEpoch || controller.signal.aborted) return stopped();\n const body = await openViewProject(workspaceCore, project, {\n signal: controller.signal,\n viewerUrl: server.viewerUrl,\n });\n if (epoch !== sessionEpoch || controller.signal.aborted) return stopped();\n return projectSuccess(body);\n } catch (error) {\n if (epoch !== sessionEpoch || controller.signal.aborted) return stopped();\n return projectFailure(error);\n } finally {\n if (openAbort === controller) openAbort = undefined;\n }\n };\n const lifecycleTool = (operation: string, execute: (args: LifecycleArgs) => unknown, { before, argsSchema = ownerArgs }: { before?: () => void; argsSchema?: ToolSchema<unknown> } = {}) => defineTool<unknown, unknown>({\n id: `view.${operation}`, path: ['view', operation], title: `View ${operation}`,\n summary: `${operation} the optional View interface on the existing Engine backend.`, realm: 'host',\n argsSchema, resultSchema: toolJsonSchema({ type: 'object' }), inputSchema: { type: 'object' }, outputSchema: { type: 'object' }, evidence: [],\n }, (args) => {\n before?.();\n return enqueue(() => execute(args as LifecycleArgs));\n });\n const tools = [\n lifecycleTool('start', start, { argsSchema: startArgs }),\n lifecycleTool('status', status),\n lifecycleTool('stop', stop, { before: () => { sessionEpoch += 1; openAbort?.abort(); } }),\n defineTool<unknown, unknown>({\n id: 'view.project.open',\n path: ['view', 'project', 'open'],\n title: 'Open View project',\n summary: 'Open an editor project on the running View and return its headed document URL.',\n realm: 'host',\n argsSchema: toolJsonSchema(projectOpenSchema),\n resultSchema: toolJsonSchema({ type: 'object' }),\n inputSchema: projectOpenSchema,\n outputSchema: { type: 'object' },\n evidence: [],\n }, (args) => {\n const epoch = sessionEpoch;\n return enqueue(() => openProject(args as LifecycleArgs, epoch));\n }),\n ];\n const revoke = registerTools(ctx, tools, { sourceId: 'view-launcher', module: '@forgeax/view/plugin', realm: 'host' });\n ctx.effect(() => async () => { await revoke(); await queue; await stop(); });\n },\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -44,7 +44,7 @@ function createViewStatusToolContributions(broker, description) {
44
44
  outputSchema: { type: "object" },
45
45
  evidence: []
46
46
  },
47
- async () => broker.handshake()
47
+ async (_args, context) => broker.handshake(context.caller)
48
48
  )
49
49
  ];
50
50
  }
@@ -85,7 +85,7 @@ function createDisplayApiTools(broker) {
85
85
  inputSchema: bindingInput,
86
86
  outputSchema: { type: "object" },
87
87
  evidence: []
88
- }, (args) => broker.bind(args))] : []
88
+ }, (args, context) => broker.bind(args, context.caller))] : []
89
89
  ];
90
90
  }
91
91
 
@@ -94,4 +94,4 @@ export {
94
94
  DISPLAY_STATUS_OPERATION_DESCRIPTION,
95
95
  createDisplayApiTools
96
96
  };
97
- //# sourceMappingURL=chunk-6KM24NH6.mjs.map
97
+ //# sourceMappingURL=chunk-3Y5WN22T.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/view-plugin-display/src/tool-runtime.ts", "../../../packages/view-plugin-display/src/api.ts"],
4
+ "sourcesContent": ["import type { ToolApi, ToolCallerIdentity, ToolRuntimeError, ToolSchema, ToolDescriptor } from '@forgeax/engine-tool-runtime';\nimport { defineTool } from '@forgeax/engine-tool-runtime';\n\nexport const VIEW_STATUS_OPERATION = 'view.display.status';\n\nfunction toolFailureError(failure: ToolRuntimeError) {\n const diagnostic =\n (typeof failure?.hint === 'string' && failure.hint.trim() !== '' ? failure.hint : undefined)\n ?? (typeof failure?.expected === 'string' && failure.expected.trim() !== '' ? failure.expected : undefined);\n const detail = failure.detail && typeof failure.detail === 'object' && !Array.isArray(failure.detail) ? failure.detail as Record<string, unknown> : {};\n return Object.assign(new Error(diagnostic ?? String(failure ?? 'view-status-provider-failed')), { name: 'ViewToolError', code: detail.code ?? detail.remoteCode ?? failure.code, expected: failure.expected, hint: failure.hint ?? diagnostic, detail: failure.detail ?? { failure } });\n}\n\nexport async function runViewToolApi(\n api: ToolApi,\n { operation, args = {}, caller, signal, providerId, generation }: { operation: string; args?: unknown; caller?: ToolCallerIdentity; signal?: AbortSignal; providerId?: string; generation?: number },\n) {\n const run = api.run(operation, args, {\n sourceId: 'view-backend',\n providerId,\n generation,\n caller,\n signal,\n });\n const terminal = await run.terminal;\n if (terminal.outcome === 'failed') throw toolFailureError(terminal.failure);\n return terminal.result;\n}\n\nexport function createViewStatusToolContributions(broker: { handshake: (caller?: ToolCallerIdentity) => object | Promise<object> }, description: Pick<ToolDescriptor, \"id\" | \"path\" | \"title\" | \"summary\">) {\n const argsSchema: ToolSchema<object> = {\n parse(value) {\n return value === undefined || (value !== null && typeof value === 'object' && !Array.isArray(value))\n ? { ok: true, value: value ?? {} }\n : { ok: false, error: 'View status arguments must be an object' };\n },\n describe: 'JSON object accepted by the read-only View status operation.',\n };\n const resultSchema: ToolSchema<object> = {\n parse(value) {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? { ok: true, value }\n : { ok: false, error: 'View status result must be an object' };\n },\n describe: 'JSON object returned by the View status operation.',\n };\n return [\n defineTool<unknown, object>(\n {\n id: description.id,\n path: description.path,\n title: description.title,\n summary: description.summary,\n realm: 'host',\n argsSchema,\n resultSchema,\n inputSchema: { type: 'object' },\n outputSchema: { type: 'object' },\n evidence: [],\n },\n async (_args, context) => broker.handshake(context.caller),\n ),\n ];\n}\n", "import type { ToolCallerIdentity, ToolSchema } from '@forgeax/engine-tool-runtime';\nimport type { DisplayStatusInput } from './status.ts';\nexport type DisplayBindArgs = { root: null; runId?: string } | { root: string; runId: string };\nexport type DisplayService = { handshake: (caller?: ToolCallerIdentity) => object | Promise<object>; bind?: (input: DisplayBindArgs, caller?: ToolCallerIdentity) => DisplayStatusInput };\nimport { createViewStatusToolContributions } from './tool-runtime.ts';\nimport { defineTool, toolJsonSchema } from '@forgeax/engine-tool-runtime';\nexport const DISPLAY_STATUS_OPERATION_DESCRIPTION = Object.freeze({\n id: 'view.display.status',\n path: ['view', 'display', 'status'],\n title: 'View status',\n summary: 'Read the current View display and workspace status.',\n});\n\nconst bindingInput = {\n type: 'object',\n properties: { root: { type: ['string', 'null'] }, runId: { type: 'string', minLength: 1 } },\n required: ['root'], additionalProperties: false,\n};\nconst bindingArgs: ToolSchema<DisplayBindArgs> = {\n describe: JSON.stringify(bindingInput),\n parse(value: unknown) {\n const input = value as Partial<DisplayBindArgs> | null;\n const valid = value && typeof value === 'object' && !Array.isArray(value)\n && Object.keys(value).every(key => key === 'root' || key === 'runId')\n && (input?.root === null || (typeof input?.root === 'string' && input?.root.trim()\n && typeof input?.runId === 'string' && input?.runId.trim()));\n return valid ? { ok: true, value: value as DisplayBindArgs } : { ok: false, error: 'Provide root and exact runId, or null root to disconnect.' };\n },\n};\n\n/** API (Tool) contributions for the display product plugin. */\nexport function createDisplayApiTools(broker: DisplayService) {\n return [\n ...createViewStatusToolContributions(broker, DISPLAY_STATUS_OPERATION_DESCRIPTION),\n ...(broker.bind ? [defineTool<unknown, unknown>({\n id: 'view.display.bind', path: ['view', 'display', 'bind'], title: 'Bind observed run',\n summary: 'Observe one explicit Engine run independently of the Editor project; null root disconnects.',\n realm: 'host',\n argsSchema: bindingArgs,\n resultSchema: toolJsonSchema({ type: 'object' }), inputSchema: bindingInput, outputSchema: { type: 'object' }, evidence: [],\n }, (args, context) => broker.bind!(args as DisplayBindArgs, context.caller))] : []),\n ];\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["defineTool"]
7
+ }
@@ -5,7 +5,7 @@ import {
5
5
  PANEL_LAYOUT,
6
6
  SLOT,
7
7
  TITLE_I18N_KEY
8
- } from "./chunk-STQPRNEO.mjs";
8
+ } from "./chunk-MLXRIWJA.mjs";
9
9
 
10
10
  // packages/view-plugin-scene-tree/src/frontend.ts
11
11
  var VIEW_SCENE_TREE_FRONTEND_PLUGIN_ID = FRONTEND_PLUGIN_ID;
@@ -39,4 +39,4 @@ export {
39
39
  viewSceneTreeFrontendPlugin,
40
40
  frontend_default
41
41
  };
42
- //# sourceMappingURL=chunk-YFQGSDK3.mjs.map
42
+ //# sourceMappingURL=chunk-45WL24XN.mjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  RESOURCE_PREVIEW_LAYOUT,
3
3
  RESOURCE_PROPERTIES_LAYOUT
4
- } from "./chunk-KX2WU5Z6.mjs";
4
+ } from "./chunk-KPLESRQY.mjs";
5
5
  import {
6
6
  VIEW_PAGE_TYPES
7
- } from "./chunk-E3Z7GLFU.mjs";
7
+ } from "./chunk-QJHQN6OD.mjs";
8
8
  import {
9
9
  __export
10
10
  } from "./chunk-FLGC65SR.mjs";
@@ -74,4 +74,4 @@ export {
74
74
  PROPERTIES_TITLE_I18N_KEY,
75
75
  identity_exports
76
76
  };
77
- //# sourceMappingURL=chunk-FMCHH5R4.mjs.map
77
+ //# sourceMappingURL=chunk-4FYKRL46.mjs.map