@volter/game-editor 0.5.67 → 0.5.69

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 (568) hide show
  1. package/BUNDLED_NOTICES +10954 -5077
  2. package/LICENSE +1 -1
  3. package/LICENSE-BLENDER +2 -2
  4. package/NOTICE +2 -2
  5. package/additions/canvas/package.json +8 -0
  6. package/additions/canvas/src/canvas-mount.ts +46 -0
  7. package/additions/canvas/src/scene2d.tsx +18 -0
  8. package/catalog/entries/bake.json +1 -1
  9. package/catalog/entries/blender.json +3 -3
  10. package/catalog/entries/music.json +6 -6
  11. package/catalog/project-source/LICENSE +1 -1
  12. package/catalog/project-source/src/contributions/bake.kind.ts +2 -2
  13. package/catalog/project-source/src/contributions/builder-document.tsx +1 -1
  14. package/catalog/project-source/src/contributions/builder-ui.tsx +3 -3
  15. package/catalog/project-source/src/contributions/module-source.ts +4 -4
  16. package/catalog/project-source/src/lib/music/music-player.ts +18 -12
  17. package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +59 -59
  18. package/catalog/project-source/src/lib/static-batch/Frozen.tsx +1 -1
  19. package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +1 -1
  20. package/catalog/project-source/src/tools/bake-preview.tool.ts +9 -9
  21. package/dist/.vite/manifest.json +4106 -3965
  22. package/dist/assets/{AssetBudgetPanel-x_FNJbfZ.js → AssetBudgetPanel-BMR3AQhc.js} +10 -10
  23. package/dist/assets/AudioViewer-DESxi7pU.js +1 -0
  24. package/dist/assets/CanvasBoardDocument-Q_nrYFlB.js +1 -0
  25. package/dist/assets/CanvasSceneViewport-WZMoKy_F.js +1 -0
  26. package/dist/assets/ColorInput-C2EK-OnD.js +1 -0
  27. package/dist/assets/{EntityModelDocument-CzUHsH9E.js → EntityModelDocument-B_4ENTCq.js} +1 -1
  28. package/dist/assets/{EnvironmentAssetDocument-ByEB7_4A.js → EnvironmentAssetDocument-BZBp6OFJ.js} +1 -1
  29. package/dist/assets/{GameplaySessionTimeline-dhG-oiqd.js → GameplaySessionTimeline-1ivaucpv.js} +1 -1
  30. package/dist/assets/ImageViewer-D16OExYu.js +1 -0
  31. package/dist/assets/{InspectorCanvasPreview-CEr_Kxna.js → InspectorCanvasPreview-BrFjhoiD.js} +1 -1
  32. package/dist/assets/InspectorObjectPreview-CY5xVsPR.js +1 -0
  33. package/dist/assets/JsonAssetDocument-CvjTlcdr.js +2 -0
  34. package/dist/assets/{LiveModuleDocument-DL8QHSlk.js → LiveModuleDocument-ne1o9giX.js} +1 -1
  35. package/dist/assets/{LutAssetDocument-BImiug2M.js → LutAssetDocument-Cp0v-O7q.js} +1 -1
  36. package/dist/assets/ModelAssetDocument-Ceu7OIN9.js +1 -0
  37. package/dist/assets/{NonThreeAuthoringBootstrap-B40qmGGS.js → NonThreeAuthoringBootstrap-DiElZf-e.js} +1 -1
  38. package/dist/assets/Object3DDocumentToolbar-BLNamqii.js +1 -0
  39. package/dist/assets/Object3DDocumentViewport-D6QoHfa_.js +2 -0
  40. package/dist/assets/{Object3DPreview-ClYDoH2L.js → Object3DPreview-ZVokr044.js} +1 -1
  41. package/dist/assets/OnlineAssetDetail-Dnckd7zB.js +1 -0
  42. package/dist/assets/PlayBar-DsMitSgy.js +1 -0
  43. package/dist/assets/{QuarksAssetDocument-B-VOj-n4.js → QuarksAssetDocument-B5J8uHFM.js} +1 -1
  44. package/dist/assets/ReactCanvasControls-CmfvxJYY.js +1 -0
  45. package/dist/assets/RootSelectionOverlay-BWsNiSuM.js +1 -0
  46. package/dist/assets/{ShaderAssetDocument-Kn8IvRGV.js → ShaderAssetDocument-CT7XzsZq.js} +5 -5
  47. package/dist/assets/ShadowEditor-YO5KEfnz.js +1 -0
  48. package/dist/assets/{SourceAssetViewer-CLQ95VSD.js → SourceAssetViewer-FSLup2km.js} +1 -1
  49. package/dist/assets/StageHost-DYfGYwvq.js +2 -0
  50. package/dist/assets/{StoryPreviewMount-D2lg37et.js → StoryPreviewMount-BhvT5QlB.js} +1 -1
  51. package/dist/assets/ThreeBoardDocument-B-z2nwnH.js +2 -0
  52. package/dist/assets/{ThreeIsolationSceneContent-DbYIylZQ.js → ThreeIsolationSceneContent-B5pU4Y6k.js} +1 -1
  53. package/dist/assets/{ToolObject3DPreview-WEi6C9uU.js → ToolObject3DPreview-VtraiQ4Q.js} +1 -1
  54. package/dist/assets/Toolbar-M62Gob9T.js +1 -0
  55. package/dist/assets/{TransientHint-BpDLhRLd.js → TransientHint-Cc40mHWE.js} +1 -1
  56. package/dist/assets/VideoViewer-BxcUwXQm.js +1 -0
  57. package/dist/assets/ViewportShadingMenu-BoMPnTVh.js +1 -0
  58. package/dist/assets/active-ingest-0QjJWb7i.js +3 -0
  59. package/dist/assets/{animation-clock-Bm80XdqP.js → animation-clock-BXEwUJtz.js} +1 -1
  60. package/dist/assets/animation-mixers.service-C-Ko4KzM.js +1 -0
  61. package/dist/assets/animation-timeline.utility-Bl15-rYb.js +1 -0
  62. package/dist/assets/{asset-budget-asset.menu-CEgP0Kiw.js → asset-budget-asset.menu-BUa3g0Wy.js} +1 -1
  63. package/dist/assets/{asset-budget.action-D4R1c3wi.js → asset-budget.action-Dl5eVPIo.js} +1 -1
  64. package/dist/assets/{asset-budget.document-Syzjn1U1.js → asset-budget.document-DJylQ-0h.js} +1 -1
  65. package/dist/assets/{asset-budget.menu-BbRiqXeM.js → asset-budget.menu-BJtvNMLj.js} +1 -1
  66. package/dist/assets/asset-editor-persistence-BIbf5u0Q.js +1 -0
  67. package/dist/assets/asset-loaders-DoNflsHL.js +2 -0
  68. package/dist/assets/{asset-preview-B1tDziF1.js → asset-preview-DxlSdRZn.js} +1 -1
  69. package/dist/assets/{audio-unlock.service-ucMfCVBw.js → audio-unlock.service-CTaiyXF9.js} +1 -1
  70. package/dist/assets/audio.utility-CEmNc68t.js +1 -0
  71. package/dist/assets/autoplay.service-BZLSUyL8.js +1 -0
  72. package/dist/assets/{babylon-authoring-adapter-C8mFMXSr.js → babylon-authoring-adapter-BZvV2bz_.js} +1 -1
  73. package/dist/assets/binding-resolver-DGbk9_XR.js +2 -0
  74. package/dist/assets/blender-emscripten-engine-B7lfg-RX.js +2 -0
  75. package/dist/assets/{blender-node-editor.document-C1YmwWls.js → blender-node-editor.document-wXJobGNH.js} +1 -1
  76. package/dist/assets/{blender-properties-tab-B8lyjgj3.js → blender-properties-tab-7GFf80ev.js} +1 -1
  77. package/dist/assets/{blender-runtime-host-CyQlImSR.js → blender-runtime-host-CILxrx5T.js} +2 -2
  78. package/dist/assets/{blender-runtime-skin-BK7ShZ6z.js → blender-runtime-skin-Cd5lQYsC.js} +7 -7
  79. package/dist/assets/{blender-runtime.document-B0nVQs0P.js → blender-runtime.document-C0r_R49S.js} +7 -7
  80. package/dist/assets/{blender-timeline.document-CMcdE2CK.js → blender-timeline.document-BaISZMBc.js} +1 -1
  81. package/dist/assets/{blender-uv-editor.document-CjqNo4sZ.js → blender-uv-editor.document-CT_fsyyA.js} +1 -1
  82. package/dist/assets/blender-version.status-DzEx7u7k.js +1 -0
  83. package/dist/assets/blender-wali-engine-DOiQCBXH.js +2 -0
  84. package/dist/assets/{blender.command-C6NmRBo5.js → blender.command-DdiKd8mZ.js} +1 -1
  85. package/dist/assets/blender.keymap-BmOBRY7p.js +1 -0
  86. package/dist/assets/blender.status-BMETIbb2.js +1 -0
  87. package/dist/assets/board-guides-CjHQ9Ynm.js +1 -0
  88. package/dist/assets/body-marks-C1LxJtQb.js +1 -0
  89. package/dist/assets/bridge.command-DXUeavn5.js +3 -0
  90. package/dist/assets/{browserAll-lF_dLQVz.js → browserAll-Dg46xT22.js} +1 -1
  91. package/dist/assets/build-player.document-BHwVV3K0.js +1 -0
  92. package/dist/assets/build-profiles.document-HkpS-Kxa.js +2 -0
  93. package/dist/assets/build-progress.status-u1J0Rm1D.js +1 -0
  94. package/dist/assets/build-session-BLboUUbw.js +9 -0
  95. package/dist/assets/{build.action-DRX2IcYt.js → build.action-C00DL83N.js} +1 -1
  96. package/dist/assets/{build.command-BGvLaLG0.js → build.command-Cjk_NY75.js} +1 -1
  97. package/dist/assets/build.header-BWNmNWFT.js +1 -0
  98. package/dist/assets/{build.menu-UenrjPWS.js → build.menu-BBYtqCIq.js} +1 -1
  99. package/dist/assets/{build.service-BIUoTY6l.js → build.service-DOU15tKN.js} +1 -1
  100. package/dist/assets/{camera-DrvaM47S.js → camera-7DGyYW7Y.js} +1 -1
  101. package/dist/assets/{camera-runtime.inspector-CjJALNO8.js → camera-runtime.inspector-n-jiOR-3.js} +1 -1
  102. package/dist/assets/canvas-design-mount-CSRHU-ag.js +6 -0
  103. package/dist/assets/canvas-entry-runtime-BST8yRuK.js +2 -0
  104. package/dist/assets/{canvas-preview-frames-C0QTagA3.js → canvas-preview-frames-Cja32aW2.js} +1 -1
  105. package/dist/assets/{canvas-story-capture.service-Dgjr-rT1.js → canvas-story-capture.service-D5R5HJ8n.js} +2 -2
  106. package/dist/assets/capability-coverage-ByWftxk4.js +7 -0
  107. package/dist/assets/{collaboration-presence-BVIQuN1l.js → collaboration-presence-D6MC9xJN.js} +1 -1
  108. package/dist/assets/{collider-C7SbIYKY.js → collider-B78EcUc9.js} +1 -1
  109. package/dist/assets/{component-board.service-BEsFAw4_.js → component-board.service-BaQI5Oas.js} +2 -2
  110. package/dist/assets/component-board.service-CkjrsD8x.js +2 -0
  111. package/dist/assets/{component-board.service-CWFaGMCO.js → component-board.service-Dvjz_g-x.js} +2 -2
  112. package/dist/assets/component-contracts.service-C3-AXQp7.js +1 -0
  113. package/dist/assets/component-instance-root-DLI40MiB.js +1 -0
  114. package/dist/assets/{component-verbs.command-oNtGgzQL.js → component-verbs.command-Brr_WcaR.js} +1 -1
  115. package/dist/assets/component-verbs.service-DC2sC3j3.js +1 -0
  116. package/dist/assets/{config-_wCzzlM_.js → config-BI_7osdR.js} +3 -3
  117. package/dist/assets/{configurations-BXU4GGbV.js → configurations-XP9YLkrt.js} +1 -1
  118. package/dist/assets/connection.status-BhRwcFx0.js +1 -0
  119. package/dist/assets/{constraint-5KLYpGm7.js → constraint-Bp1l8hY-.js} +1 -1
  120. package/dist/assets/constraints.inspector-Dm1cycK3.js +1 -0
  121. package/dist/assets/{content-bounds-BeuIXKYu.js → content-bounds-DROIchTa.js} +1 -1
  122. package/dist/assets/{contract-system-adapters-Bic_7sev.js → contract-system-adapters-Cn7OW_ay.js} +1 -1
  123. package/dist/assets/coverage.service-l42ty7lr.js +3 -0
  124. package/dist/assets/create-runtime-B_uTwsmi.js +3 -0
  125. package/dist/assets/curve-THOUsg-j.js +1 -0
  126. package/dist/assets/{data-asset-DfQ2Pjse.js → data-asset-DAANayR6.js} +1 -1
  127. package/dist/assets/data-check-core-CHqar_E8.js +1 -0
  128. package/dist/assets/data-ref-CN34UeVw.js +1 -0
  129. package/dist/assets/debug-bridge-BD1XVAIB.js +1 -0
  130. package/dist/assets/debug-registry-ggQWxtu-.js +1 -0
  131. package/dist/assets/{deferred-ingest-play-BdR4qGk6.js → deferred-ingest-play-B2JUlwlT.js} +2 -2
  132. package/dist/assets/{design-time-canvas-mount-DPQeHSN2.js → design-time-canvas-mount-as9cN9I6.js} +2 -2
  133. package/dist/assets/design-time-layers-BRseeSmV.js +1 -0
  134. package/dist/assets/{design-time-mount.service-Ks-5Wkcs.js → design-time-mount.service-BTVu3yKo.js} +2 -2
  135. package/dist/assets/{design-time-mount.service-Ca-DZGFV.js → design-time-mount.service-DKvc7lVK.js} +2 -2
  136. package/dist/assets/design-time-react-mount-C7rB56QD.js +1 -0
  137. package/dist/assets/{document-preview-three-DThkjI1S.js → document-preview-three-CxmRhCcV.js} +1 -1
  138. package/dist/assets/{dom-authoring-adapter-BrLU8IJ_.js → dom-authoring-adapter-L8OzXfmE.js} +1 -1
  139. package/dist/assets/{draco3d-B2cwv46o.js → draco3d-BjNuXv66.js} +1 -1
  140. package/dist/assets/{edit-mode-audio.service-D4ITNbsm.js → edit-mode-audio.service-BwI5u845.js} +1 -1
  141. package/dist/assets/edit-mode-authoring-D5f7aHHl.js +1 -0
  142. package/dist/assets/{edit-mode-networking.service-BNv-FTRh.js → edit-mode-networking.service-DqP_4lbI.js} +1 -1
  143. package/dist/assets/editor-api-BM7H_F4G.js +1 -0
  144. package/dist/assets/{editor-layers-BDJnAAzj.js → editor-layers-D-CTUqco.js} +1 -1
  145. package/dist/assets/editor-presentation-activity-CqJH4G9t.js +1 -0
  146. package/dist/assets/{editor-shell-store-ChLcVeNB.js → editor-shell-store-DHVWS8cE.js} +1 -1
  147. package/dist/assets/{entity-object-JmYMfLsx.js → entity-object-MKYemTFM.js} +1 -1
  148. package/dist/assets/{extend-Cc-nEa_A.js → extend-BrgqZiMY.js} +1 -1
  149. package/dist/assets/fork-menu-DE2MK3Nq.js +1 -0
  150. package/dist/assets/{frame-debugger-store-DaCbAYSW.js → frame-debugger-store-BXoLKTdZ.js} +1 -1
  151. package/dist/assets/game-audio-BeCyd0Ha.js +1 -0
  152. package/dist/assets/{game-contract-seams-BnPFGLll.js → game-contract-seams-tyKDsfaP.js} +1 -1
  153. package/dist/assets/{game-css-scope-transform-D_p7cVgW.js → game-css-scope-transform-DcjrwtVc.js} +2 -2
  154. package/dist/assets/game-document.service-CTb2itHQ.js +1 -0
  155. package/dist/assets/game-eval.command-CpDKXOQU.js +2 -0
  156. package/dist/assets/game-module-access-BTInp2NG.js +1 -0
  157. package/dist/assets/game-network-DW5ARz4R.js +22 -0
  158. package/dist/assets/{gameplay-export-BzYzLZPi.js → gameplay-export-cHk3v9y-.js} +1 -1
  159. package/dist/assets/gameplay-replay-HRenPTtU.js +1 -0
  160. package/dist/assets/gameplay.command-DcY2lKKX.js +1 -0
  161. package/dist/assets/generation-CdOATubd.css +1 -0
  162. package/dist/assets/{generation-jobs-BZhOMrp-.js → generation-jobs-CJBehuUp.js} +1 -1
  163. package/dist/assets/generation.service-BMOc-C9i.js +1 -0
  164. package/dist/assets/{generations-DVDht_31.js → generations-ssgVOe_6.js} +1 -1
  165. package/dist/assets/generations.status-B_SmPReI.js +1 -0
  166. package/dist/assets/hierarchy-marks-BuCO8Ke-.js +1 -0
  167. package/dist/assets/hierarchy-marks-CsTaTkc7.js +1 -0
  168. package/dist/assets/hosted-asset-materialization-CiXZI85V.js +2 -0
  169. package/dist/assets/{ibl-override-material-CiKkaOTW.js → ibl-override-material-CMo_a49U.js} +1 -1
  170. package/dist/assets/index-B0S4fQQV.js +1 -0
  171. package/dist/assets/{index-C3Pw-9So.js → index-B9bd4k-t.js} +1 -1
  172. package/dist/assets/index-BMxv2MNV.js +1 -0
  173. package/dist/assets/{index-DUZeuA7g.js → index-Bm4_DmRO.js} +1 -1
  174. package/dist/assets/{index-cNc-iFbq.js → index-BvBlIRwM.js} +1 -1
  175. package/dist/assets/{index-Ck3JFh48.js → index-BweKDdi_.js} +1 -1
  176. package/dist/assets/{index-BRJMIUK0.js → index-C5ZAyrKq.js} +346 -345
  177. package/dist/assets/index-CPiRKiDC.css +1 -0
  178. package/dist/assets/index-CfpGZrbC.js +1 -0
  179. package/dist/assets/index-Czvj6whv.js +1 -0
  180. package/dist/assets/{index-SS9EugVg.js → index-DgPDGGSV.js} +2 -2
  181. package/dist/assets/{inference-diagnostics-xecGdohW.js → inference-diagnostics-DLt9ql9I.js} +1 -1
  182. package/dist/assets/{ingest-boot-viewport-DAt8WFSy.js → ingest-boot-viewport-BXVXjYpG.js} +1 -1
  183. package/dist/assets/ingest-siblings-DWJ7OGB_.js +1 -0
  184. package/dist/assets/ingest-source-persistence-6ShMoSCa.js +1 -0
  185. package/dist/assets/ingest.service-BBbX8ibg.js +1 -0
  186. package/dist/assets/{inspect-Dr4qvDpJ.js → inspect-Cz3Zyx_1.js} +1 -1
  187. package/dist/assets/inspection-D8fZOHCM.js +1 -0
  188. package/dist/assets/instances.command-BrdlngrL.js +1 -0
  189. package/dist/assets/{json-history-resource-DwS10tqD.js → json-history-resource-Uqrihfc8.js} +1 -1
  190. package/dist/assets/layered-pick-CAVQMPI7.js +1 -0
  191. package/dist/assets/{light-DcFqVCmv.js → light-CqzsCWeJ.js} +1 -1
  192. package/dist/assets/{live-project-verbs-C3LzprCe.js → live-project-verbs-CdFmLYOo.js} +1 -1
  193. package/dist/assets/{machine.document-BzZxubYQ.js → machine.document-DRIFOVaa.js} +1 -1
  194. package/dist/assets/{machines.finder-BR02bfVG.js → machines.finder-DPCT6few.js} +1 -1
  195. package/dist/assets/material-BVApn1V_.js +1 -0
  196. package/dist/assets/{material-factory-COz7qZhC.js → material-factory-B_75xxFD.js} +1 -1
  197. package/dist/assets/{mesh-DcmO-mWI.js → mesh-DdA3mExo.js} +1 -1
  198. package/dist/assets/model-asset-sections-D1uxOu2v.css +1 -0
  199. package/dist/assets/model-asset-sections.service-CJnSIckZ.js +1 -0
  200. package/dist/assets/{model-inspection-CXHxrafK.js → model-inspection-DvspbmJl.js} +1 -1
  201. package/dist/assets/{model-thumbnail-BEKPWg4l.js → model-thumbnail-BmQs-h6t.js} +1 -1
  202. package/dist/assets/{models.finder-c1I0tp2M.js → models.finder-Qv_Hsccy.js} +1 -1
  203. package/dist/assets/module-mode-MJ4Gbsry.js +2 -0
  204. package/dist/assets/mount-canvas-ingest-root-BxtM8OaB.js +2 -0
  205. package/dist/assets/mount-dom-ingest-root-pGatqO46.js +2 -0
  206. package/dist/assets/mount-ingest-root-C7jb-mCl.js +2 -0
  207. package/dist/assets/mount-manifest-BfoHBuzn.js +1 -0
  208. package/dist/assets/mount-readiness-DyAd17pe.js +4 -0
  209. package/dist/assets/mount-three-ingest-root-Boa5mcaF.js +1 -0
  210. package/dist/assets/{mounted-authoring-Clftxx0x.js → mounted-authoring-DxMISwvR.js} +1 -1
  211. package/dist/assets/{mounted-story-viewport-source-B4-eAYGI.js → mounted-story-viewport-source-DfnLxI1f.js} +1 -1
  212. package/dist/assets/{native-debug-module-2_HVupdg.js → native-debug-module-BlrALjM3.js} +1 -1
  213. package/dist/assets/{navigation-CH3-zr1n.js → navigation-CqG5o5AR.js} +1 -1
  214. package/dist/assets/{navmesh.menu-Dfi-Pk-8.js → navmesh.menu-D4TdVDhe.js} +1 -1
  215. package/dist/assets/{navmesh.service-Cz7QFY-M.js → navmesh.service-DWKT5ruQ.js} +1 -1
  216. package/dist/assets/network-observer.service-ZRAquNq4.js +1 -0
  217. package/dist/assets/network.utility-DjeOEvAY.js +1 -0
  218. package/dist/assets/object-marks-BnvSuCTt.js +1 -0
  219. package/dist/assets/{object3d-authoring-subject-BDrxd1GA.js → object3d-authoring-subject-XccsO0xG.js} +1 -1
  220. package/dist/assets/{object3d-document-session-registry-DJDEDM0p.js → object3d-document-session-registry-CMRJdFp6.js} +2 -2
  221. package/dist/assets/{oid-transform-D5Kxt6ij.js → oid-transform-DaA6yW6o.js} +1 -1
  222. package/dist/assets/{particles-vRp0Lf3o.js → particles-DsQRcDBY.js} +1 -1
  223. package/dist/assets/{performance-profiler-OwnXQX0M.js → performance-profiler-CMbwGBuk.js} +1 -1
  224. package/dist/assets/pixi-authoring-adapter-BoBt8bB5.js +1 -0
  225. package/dist/assets/pixi-live-write-target-CYZgvC6U.js +1 -0
  226. package/dist/assets/play.command-D9JGJP-e.js +2 -0
  227. package/dist/assets/pose-guard-CLabLSzf.js +1 -0
  228. package/dist/assets/presentation-COhHQdmR.js +1 -0
  229. package/dist/assets/{product-CxmUIxmr.js → product-CaRGoiIH.js} +1 -1
  230. package/dist/assets/{profiler.action-Dzy9DuAc.js → profiler.action-Cz7HYWjh.js} +1 -1
  231. package/dist/assets/{profiler.menu-jLDO3U6N.js → profiler.menu-D5aR_FBy.js} +1 -1
  232. package/dist/assets/profiler.utility-KwxlIPKb.js +1 -0
  233. package/dist/assets/{project-authoring-session-C3eusefK.js → project-authoring-session-DKXHVwxO.js} +2 -2
  234. package/dist/assets/project-provenance-BGnJXJwa.js +1 -0
  235. package/dist/assets/{properties-bone-constraints.inspector-B_PbSMV7.js → properties-bone-constraints.inspector-Bo-sU8eR.js} +1 -1
  236. package/dist/assets/{properties-bone.inspector-CMDEQuBd.js → properties-bone.inspector-BQiWplQv.js} +1 -1
  237. package/dist/assets/{properties-collection.inspector-D7Ay8yRj.js → properties-collection.inspector-C5BnR-GE.js} +1 -1
  238. package/dist/assets/{properties-constraints.inspector-DS1fZgXK.js → properties-constraints.inspector-CyheU12R.js} +1 -1
  239. package/dist/assets/{properties-data.inspector-k2pGN2Mp.js → properties-data.inspector-CkycARja.js} +1 -1
  240. package/dist/assets/{properties-material.inspector-Bb3yAGUx.js → properties-material.inspector-Bl_PUmY-.js} +1 -1
  241. package/dist/assets/{properties-modifiers.inspector-BcJfe-Wy.js → properties-modifiers.inspector-j7SnOxQq.js} +1 -1
  242. package/dist/assets/{properties-object.inspector-CUSfXJuq.js → properties-object.inspector-DcR3MGLK.js} +1 -1
  243. package/dist/assets/{properties-output.inspector-BTVW2kn1.js → properties-output.inspector-BLjw6K4b.js} +1 -1
  244. package/dist/assets/{properties-particles.inspector-Cw0fxx3B.js → properties-particles.inspector-BUIm2-Jf.js} +1 -1
  245. package/dist/assets/{properties-physics.inspector-C-0bD2bu.js → properties-physics.inspector-DNvRcxb6.js} +1 -1
  246. package/dist/assets/{properties-render.inspector-C8D5UpjX.js → properties-render.inspector-8FMZ-qoZ.js} +1 -1
  247. package/dist/assets/{properties-scene.inspector-HjK6QHGg.js → properties-scene.inspector-Dx7_z75k.js} +1 -1
  248. package/dist/assets/{properties-texture.inspector-CckZgUaI.js → properties-texture.inspector-WT15951-.js} +1 -1
  249. package/dist/assets/{properties-view-layer.inspector-C1ajtVSk.js → properties-view-layer.inspector-P7VNTdqr.js} +1 -1
  250. package/dist/assets/{properties-world.inspector-BiT_EdT-.js → properties-world.inspector-B3t1q8TF.js} +1 -1
  251. package/dist/assets/r3f-design-session-lsbFnoWH.js +2 -0
  252. package/dist/assets/{r3f-physics-binding-DzrbpqjM.js → r3f-physics-binding-Cx8yhuwt.js} +1 -1
  253. package/dist/assets/{r3f-source-authoring-adapter-DbbeRcvt.js → r3f-source-authoring-adapter-jH3G0TeH.js} +2 -2
  254. package/dist/assets/react-canvas-navigation-B_gOe3CI.js +1 -0
  255. package/dist/assets/react-inspector.service-CZf1vfdX.js +1 -0
  256. package/dist/assets/react-story-board-CCm2Opwn.js +1 -0
  257. package/dist/assets/{react-three-rapier.esm-U8J7g6tH.js → react-three-rapier.esm-CHXGG51p.js} +1 -1
  258. package/dist/assets/react-world-authoring-adapter-CnzxMtYz.js +1 -0
  259. package/dist/assets/{realm-services-CnY105XU.js → realm-services-Do9J6nsb.js} +1 -1
  260. package/dist/assets/reflection-probe-capture.inspector-BAjjIybz.js +1 -0
  261. package/dist/assets/{reflection-probe-BHNGwVyz.js → reflection-probe-sIto9mh0.js} +1 -1
  262. package/dist/assets/registry-Xnduk02T.js +1 -0
  263. package/dist/assets/{relative-import-specifier-BFKIWEWs.js → relative-import-specifier-CPFTrxi4.js} +1 -1
  264. package/dist/assets/{render-env-BkKZ4uMA.js → render-env-YJlI8K0i.js} +1 -1
  265. package/dist/assets/{render-features-rxbawsRb.js → render-features-DMSV2qKJ.js} +1 -1
  266. package/dist/assets/{render-settings-DS5leCed.js → render-settings-CRyDhHyz.js} +1 -1
  267. package/dist/assets/{resolve-three-CVnMRHxw.js → resolve-three-D27rMc37.js} +19 -19
  268. package/dist/assets/root-seam-contract-gjWUd5uu.js +1 -0
  269. package/dist/assets/run-selection-B0jOdyYt.js +2 -0
  270. package/dist/assets/scene-capture-Di9cM1p4.js +1 -0
  271. package/dist/assets/scene-document.service-XxGs4HHE.js +2 -0
  272. package/dist/assets/{scene-framing-BQt72ZCw.js → scene-framing-DkZKDwH3.js} +1 -1
  273. package/dist/assets/{scene-index--lRWLEmW.js → scene-index-DHeKmalD.js} +1 -1
  274. package/dist/assets/{scene-query-s1y04OVB.js → scene-query-ByZtXA2m.js} +1 -1
  275. package/dist/assets/seeded-random-BJthDRMu.js +1 -0
  276. package/dist/assets/{session-CTXsU1lK.js → session-x8E_NJk2.js} +34 -34
  277. package/dist/assets/{setup-renderer-Cwkl1Ar6.js → setup-renderer-F9mG7t6r.js} +1 -1
  278. package/dist/assets/{source-object3d-authoring-adapter-DF679Ncb.js → source-object3d-authoring-adapter-CvmFpSUj.js} +1 -1
  279. package/dist/assets/{source-persistence-backend-CwLYVPXj.js → source-persistence-backend-au3WtEn6.js} +1 -1
  280. package/dist/assets/{spark-renderer-lifecycle-DfYpvEJa.js → spark-renderer-lifecycle-B6Axb6jm.js} +1 -1
  281. package/dist/assets/{stage-keyboard-B8BEW592.js → stage-keyboard-BQkndG_D.js} +1 -1
  282. package/dist/assets/stage-overlay-set-g6eWhuRv.js +1 -0
  283. package/dist/assets/stage-presence-markers-0CDfO5f4.js +1 -0
  284. package/dist/assets/stage-transform-tools-BzPl7OIo.js +1 -0
  285. package/dist/assets/standard-viewport-dressing-BW-dM_1h.js +24 -0
  286. package/dist/assets/{state-watch.action-DnR5Zjr-.js → state-watch.action-Z1nQ5awu.js} +1 -1
  287. package/dist/assets/{state-watch.menu-wYLCLsAw.js → state-watch.menu-CQHGUF3W.js} +1 -1
  288. package/dist/assets/state-watch.utility-DCIg2i79.js +1 -0
  289. package/dist/assets/{story-capture-BmnwHGDV.js → story-capture-BIrjDKeY.js} +1 -1
  290. package/dist/assets/story-documents-BvG2xeaR.js +3 -0
  291. package/dist/assets/{story-documents.service-B6v7Z-WE.js → story-documents.service-DOSEa3ja.js} +1 -1
  292. package/dist/assets/{story-documents.service-yagl1wGp.js → story-documents.service-y1m7XGMJ.js} +1 -1
  293. package/dist/assets/{story-media-presence-BqRMu572.js → story-media-presence-HLV-KaMj.js} +1 -1
  294. package/dist/assets/{story-pixi-preview-Da6afqLg.js → story-pixi-preview-CMhho2gG.js} +1 -1
  295. package/dist/assets/{story-presentation-DMSYRWaz.js → story-presentation-CYhVv8Ku.js} +1 -1
  296. package/dist/assets/story-three-preview-CgcLF5lE.js +2 -0
  297. package/dist/assets/{structural-ids-Br2zjINh.js → structural-ids-BOo2BRoY.js} +1 -1
  298. package/dist/assets/studio-environment-R9qXUUcC.js +2 -0
  299. package/dist/assets/{surface-state-1lTOi8FD.js → surface-state-D8Qnowo6.js} +1 -1
  300. package/dist/assets/{syntactic-prop-specs-eiQXwMIc.js → syntactic-prop-specs-8gkBuc5j.js} +1 -1
  301. package/dist/assets/team-playtest.service-BBMZ2iyk.js +1 -0
  302. package/dist/assets/{three-TCuY32m_.js → three-DiL6vMXq.js} +1 -1
  303. package/dist/assets/three-authoring-adapter-CkLR2zGf.js +1 -0
  304. package/dist/assets/three-authoring.service-CovhlCGx.js +2 -0
  305. package/dist/assets/{three-ingest-runtime-B7rtg3QE.js → three-ingest-runtime-CwTqAHgX.js} +1 -1
  306. package/dist/assets/{three-integration-BdN5Nhsg.js → three-integration-DXOFI88n.js} +2 -2
  307. package/dist/assets/three-integration.service-rCAqpqSp.js +1 -0
  308. package/dist/assets/three-projection-core-B7Lf8tOp.js +1 -0
  309. package/dist/assets/{three-state-DwFE3ay2.js → three-state-BCACvUtm.js} +1 -1
  310. package/dist/assets/{three-story-capture.service-CvpV3v5a.js → three-story-capture.service-rTFKNtHA.js} +2 -2
  311. package/dist/assets/{three-story-model-C2r2BuiA.js → three-story-model-BjKr7OMn.js} +1 -1
  312. package/dist/assets/three-viewport-presentation-CBzvc2v2.js +141 -0
  313. package/dist/assets/tools-DfctM216.js +1 -0
  314. package/dist/assets/transform-mode-request-DlEApNrA.js +1 -0
  315. package/dist/assets/transport-strip-xCg94CuI.js +1 -0
  316. package/dist/assets/transport.header-BRtdky0x.js +1 -0
  317. package/dist/assets/{trigger-volume-DP0G1VBe.js → trigger-volume-BLkHmfm9.js} +1 -1
  318. package/dist/assets/tuples-BDz3wbQL.js +1 -0
  319. package/dist/assets/ui-board-document-DvbK_HVN.js +2 -0
  320. package/dist/assets/{user-data-Bpj7diUS.js → user-data-C84W0V47.js} +1 -1
  321. package/dist/assets/user-data-CODoGZqA.js +1 -0
  322. package/dist/assets/{utility-view-state-CAfbFbKQ.js → utility-view-state-CDRxZSo-.js} +1 -1
  323. package/dist/assets/viewport-door-BARIpMu-.js +1 -0
  324. package/dist/assets/{viewport-root-presentation-vgxsTyj4.js → viewport-root-presentation-hRLF0BeO.js} +1 -1
  325. package/dist/assets/{viewport-surface-status-cwCiBGa7.js → viewport-surface-status-TUfhXKR9.js} +1 -1
  326. package/dist/assets/{webworkerAll-Cm3gTjWi.js → webworkerAll-PJtcQ1FD.js} +1 -1
  327. package/dist/assets/worker-BtXrsgFy.js +2 -0
  328. package/dist/assets/workspace-arrangement-DqG5sUns.js +1 -0
  329. package/dist/assets/world-documents-D69XaqUX.js +1 -0
  330. package/dist/assets/world-root-stage-binding-BgZWZEuD.js +1 -0
  331. package/dist/assets/{xstate-animation-binding-BGLxcZT_.js → xstate-animation-binding-CIyLzGHs.js} +1 -1
  332. package/dist/assets/{xstate-animation-meta-D_T441Ru.js → xstate-animation-meta-CbYWup3R.js} +1 -1
  333. package/dist/volter-shared-react.json +10 -0
  334. package/dist/volter-shared-three.json +3 -0
  335. package/dist-node/cli.js +253 -210
  336. package/dist-node/create.js +103 -82
  337. package/package.json +23 -20
  338. package/src/contributions.d.ts +1 -1
  339. package/src/index.ts +10 -10
  340. package/starter/cube.py +1 -1
  341. package/template/.agents/references/project-manual.md +17 -17
  342. package/template/.agents/skills/editor/SKILL.md +6 -6
  343. package/template/.agents/skills/editor/agents/openai.yaml +3 -3
  344. package/template/.agents/skills/editor/references/editor-control.md +62 -62
  345. package/template/{.claude/skills/vgai-3d-models → .agents/skills/volter-3d-models}/SKILL.md +3 -3
  346. package/template/{.github/skills/vgai-ingest-existing-game → .agents/skills/volter-ingest-existing-game}/SKILL.md +2 -2
  347. package/template/.agents/skills/{vgai-music → volter-music}/SKILL.md +35 -11
  348. package/template/{.claude/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/SKILL.md +9 -9
  349. package/template/.agents/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  350. package/template/{.github/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
  351. package/template/.claude/skills/editor/SKILL.md +6 -6
  352. package/template/.claude/skills/editor/agents/openai.yaml +3 -3
  353. package/template/.claude/skills/editor/references/editor-control.md +62 -62
  354. package/template/{.agents/skills/vgai-3d-models → .claude/skills/volter-3d-models}/SKILL.md +3 -3
  355. package/template/{.agents/skills/vgai-ingest-existing-game → .claude/skills/volter-ingest-existing-game}/SKILL.md +2 -2
  356. package/template/{.github/skills/vgai-threejs-authoring → .claude/skills/volter-threejs-authoring}/SKILL.md +9 -9
  357. package/template/.claude/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  358. package/template/.claude/skills/{vgai-threejs-authoring → volter-threejs-authoring}/references/helper-catalog.md +1 -1
  359. package/template/.github/copilot-instructions.md +1 -1
  360. package/template/.github/skills/editor/SKILL.md +6 -6
  361. package/template/.github/skills/editor/agents/openai.yaml +3 -3
  362. package/template/.github/skills/editor/references/editor-control.md +62 -62
  363. package/template/.github/skills/{vgai-3d-models → volter-3d-models}/SKILL.md +3 -3
  364. package/template/{.claude/skills/vgai-ingest-existing-game → .github/skills/volter-ingest-existing-game}/SKILL.md +2 -2
  365. package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/SKILL.md +9 -9
  366. package/template/.github/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  367. package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
  368. package/template/.mcp.json +3 -3
  369. package/template/AGENTS.md +24 -23
  370. package/template/DEVLOG.md +1 -1
  371. package/template/IDIOMS.md +3 -3
  372. package/template/LICENSE +3 -3
  373. package/template/README.md +12 -12
  374. package/template/check-idioms.ts +51 -51
  375. package/template/manifest-entry-modules-plugin.ts +17 -4
  376. package/template/package.json +12 -12
  377. package/template/server/loopback.ts +1 -1
  378. package/template/server/main.ts +4 -4
  379. package/template/server/rooms/arena-room.ts +8 -8
  380. package/template/server/rooms/game-room.ts +8 -8
  381. package/template/server/rooms.ts +2 -2
  382. package/template/src/bot/QaTester.tsx +1 -1
  383. package/template/src/bot/bot-station.ts +2 -2
  384. package/template/src/bot/tester-station.ts +1 -1
  385. package/template/src/contributions/README.md +1 -1
  386. package/template/src/contributions/analytics.analytics.tsx +1 -1
  387. package/template/src/contributions/data.document.tsx +2 -2
  388. package/template/src/contributions/pages.finder.ts +1 -1
  389. package/template/src/contributions/tester.inspector.tsx +2 -2
  390. package/template/src/contributions/use-game-modules.ts +1 -1
  391. package/template/src/input.ts +2 -2
  392. package/template/src/lib/reflections/volume-reflection-material.ts +59 -59
  393. package/template/src/lib/static-batch/Frozen.tsx +1 -1
  394. package/template/src/lib/static-batch/mutation-watch.ts +1 -1
  395. package/template/src/main.ts +58 -6
  396. package/template/src/manifest-entry-modules.d.ts +12 -1
  397. package/template/src/prefabs/HeroBox.stories.tsx +1 -1
  398. package/template/src/world.tsx +1 -1
  399. package/template/tsconfig.json +1 -1
  400. package/template/validate-manifest.ts +3 -3
  401. package/template/vite.config.ts +11 -11
  402. package/template/{vgai.adapter.ts → volter.adapter.ts} +1 -1
  403. package/template/{vgai.project.json → volter.project.json} +2 -2
  404. package/template-dotfiles/gitignore +27 -27
  405. package/workbench/src/media/game-cover.css +11 -11
  406. package/workbench/src/product.contribution.ts +28 -28
  407. package/workbench/src/{vgaiGameSkew.ts → volterGameSkew.ts} +16 -16
  408. package/dist/assets/AudioViewer-BDPqHDfU.js +0 -1
  409. package/dist/assets/CanvasBoardDocument-mxL0oJ3N.js +0 -1
  410. package/dist/assets/CanvasSceneViewport-C_mapCwC.js +0 -1
  411. package/dist/assets/ColorInput-QUPS1pEB.js +0 -1
  412. package/dist/assets/ImageViewer-tlVvkdM4.js +0 -1
  413. package/dist/assets/InspectorObjectPreview-W-y079DS.js +0 -1
  414. package/dist/assets/JsonAssetDocument-CPmcWFPW.js +0 -2
  415. package/dist/assets/ModelAssetDocument-De1HKuxG.js +0 -1
  416. package/dist/assets/Object3DDocumentToolbar-Cks81kCS.js +0 -1
  417. package/dist/assets/Object3DDocumentViewport-DCwiSY3O.js +0 -2
  418. package/dist/assets/OnlineAssetDetail-CNuwSQRQ.js +0 -1
  419. package/dist/assets/PlayBar-bT8Xdrap.js +0 -1
  420. package/dist/assets/ReactCanvasControls-CnJrPj-B.js +0 -1
  421. package/dist/assets/RootSelectionOverlay-CpaGluQu.js +0 -1
  422. package/dist/assets/ShadowEditor-CVtMlALn.js +0 -1
  423. package/dist/assets/StageHost-B89HKcvd.js +0 -2
  424. package/dist/assets/ThreeBoardDocument-BAgHrbtu.js +0 -2
  425. package/dist/assets/Toolbar-DkTHnQto.js +0 -1
  426. package/dist/assets/VideoViewer-DMV8lf4P.js +0 -1
  427. package/dist/assets/ViewportShadingMenu-CXPi6fl8.js +0 -1
  428. package/dist/assets/active-ingest-DA426a81.js +0 -3
  429. package/dist/assets/adapter-runtime-bindings-4cmsRvRh.js +0 -2
  430. package/dist/assets/animation-mixers.service-DK64IuYq.js +0 -1
  431. package/dist/assets/animation-timeline.utility-D-g0zrOl.js +0 -1
  432. package/dist/assets/asset-editor-persistence-BGWIqZdk.js +0 -1
  433. package/dist/assets/asset-loaders-C0KQI5eY.js +0 -2
  434. package/dist/assets/audio.utility-BmE9WMUg.js +0 -1
  435. package/dist/assets/autoplay.service-CjPnv3QW.js +0 -1
  436. package/dist/assets/binding-resolver-dE0GnZT5.js +0 -2
  437. package/dist/assets/blender-emscripten-engine-BeWFjMn-.js +0 -2
  438. package/dist/assets/blender-version.status-OsFoc9SA.js +0 -1
  439. package/dist/assets/blender-wali-engine-da698rDf.js +0 -2
  440. package/dist/assets/blender.keymap-_rF_vRX8.js +0 -1
  441. package/dist/assets/blender.status-ujwGU6dU.js +0 -1
  442. package/dist/assets/board-guides-BEKPgD9M.js +0 -1
  443. package/dist/assets/body-marks-RKb_LTwL.js +0 -1
  444. package/dist/assets/bridge.command-BF00Iefm.js +0 -3
  445. package/dist/assets/build-profiles.document-CqNrDdh9.js +0 -2
  446. package/dist/assets/build-progress.status-Bo1ZgJcb.js +0 -1
  447. package/dist/assets/build-session-GZcSAfPN.js +0 -9
  448. package/dist/assets/build.header-Bt1kwHWl.js +0 -1
  449. package/dist/assets/canvas-design-mount-BbLW_Nci.js +0 -6
  450. package/dist/assets/canvas-entry-runtime-UNYuSfG0.js +0 -2
  451. package/dist/assets/capability-coverage-DZ-onC5j.js +0 -7
  452. package/dist/assets/component-board.service-q_TM9BCw.js +0 -2
  453. package/dist/assets/component-contracts.service-CPbfXE1h.js +0 -1
  454. package/dist/assets/component-instance-root-B0C5oNEm.js +0 -1
  455. package/dist/assets/component-verbs.service-CnA11bJq.js +0 -1
  456. package/dist/assets/connection.status-Yvt0bX0r.js +0 -1
  457. package/dist/assets/constraints.inspector-4r8jWq5a.js +0 -1
  458. package/dist/assets/coverage.service-DcpEoBuf.js +0 -3
  459. package/dist/assets/create-runtime-DBfUy0SO.js +0 -3
  460. package/dist/assets/curve-DVd18iAX.js +0 -1
  461. package/dist/assets/data-check-core-CQEjuFyt.js +0 -1
  462. package/dist/assets/data-ref-CWnkj-HX.js +0 -1
  463. package/dist/assets/debug-bridge-D3_-EgRE.js +0 -1
  464. package/dist/assets/debug-registry-P0_YQGWd.js +0 -1
  465. package/dist/assets/design-time-layers-ChswRUJt.js +0 -1
  466. package/dist/assets/design-time-react-mount-C85KfXOd.js +0 -1
  467. package/dist/assets/edit-mode-authoring-DeCxPcHM.js +0 -1
  468. package/dist/assets/editor-api-BFTIRlWa.js +0 -1
  469. package/dist/assets/editor-presentation-activity-C7SNSmTd.js +0 -1
  470. package/dist/assets/entry-adjudication-Dc18TIqT.js +0 -1
  471. package/dist/assets/fork-menu-DpKqRhF5.js +0 -1
  472. package/dist/assets/game-audio-CaGKzia4.js +0 -1
  473. package/dist/assets/game-document.service-Chmt4065.js +0 -1
  474. package/dist/assets/game-eval.command-DRSvOJ_1.js +0 -2
  475. package/dist/assets/game-module-access-o3iXZpCA.js +0 -1
  476. package/dist/assets/game-network-Ct2FQYmu.js +0 -1
  477. package/dist/assets/gameplay-replay-BwdxV4oF.js +0 -1
  478. package/dist/assets/gameplay.command-Boqv1hnc.js +0 -1
  479. package/dist/assets/generation-DhwCUHPf.css +0 -1
  480. package/dist/assets/generation.service-o9aXlsx4.js +0 -1
  481. package/dist/assets/generations.status-BvzgHlyk.js +0 -1
  482. package/dist/assets/hierarchy-marks-BLPfSIym.js +0 -1
  483. package/dist/assets/hierarchy-marks-Cc_3lxw6.js +0 -1
  484. package/dist/assets/hosted-asset-materialization-BpbnhJac.js +0 -2
  485. package/dist/assets/index-0Lm0Nf1M.css +0 -1
  486. package/dist/assets/index-BHoAKyAC.js +0 -1
  487. package/dist/assets/index-BeK4RPgj.js +0 -1
  488. package/dist/assets/index-C1c3eOmm.js +0 -1
  489. package/dist/assets/index.module-Ycad3DJq.js +0 -1
  490. package/dist/assets/ingest-siblings-BtiEXLnh.js +0 -1
  491. package/dist/assets/ingest-source-persistence-Dmdo-UBp.js +0 -1
  492. package/dist/assets/ingest.service-vbCucMz7.js +0 -1
  493. package/dist/assets/inspection-CObLhnrs.js +0 -1
  494. package/dist/assets/instances.command-BwayrqNm.js +0 -1
  495. package/dist/assets/layered-pick-kiQf53t5.js +0 -1
  496. package/dist/assets/material-B_V78pTt.js +0 -1
  497. package/dist/assets/model-asset-sections-CFvvihfx.css +0 -1
  498. package/dist/assets/model-asset-sections.service-CqSclZGY.js +0 -1
  499. package/dist/assets/module-mode-BH2R93XP.js +0 -2
  500. package/dist/assets/mount-canvas-ingest-root-D1z9i5B3.js +0 -2
  501. package/dist/assets/mount-dom-ingest-root-BAmmNxlm.js +0 -2
  502. package/dist/assets/mount-ingest-root-DYR0TMIt.js +0 -2
  503. package/dist/assets/mount-manifest-DdkFYdVA.js +0 -1
  504. package/dist/assets/mount-readiness-Ds0HvvLH.js +0 -4
  505. package/dist/assets/mount-three-ingest-root-DVbACDUy.js +0 -1
  506. package/dist/assets/network-observer.service-Ce83TdsU.js +0 -1
  507. package/dist/assets/network.utility-DFDul2Xb.js +0 -1
  508. package/dist/assets/object-marks-DwvIEBOK.js +0 -1
  509. package/dist/assets/pixi-authoring-adapter-BChknIdC.js +0 -1
  510. package/dist/assets/pixi-live-write-target-BjDsBQbp.js +0 -1
  511. package/dist/assets/play-mode-DICV4cKP.js +0 -22
  512. package/dist/assets/play.command-NHyi5rzF.js +0 -2
  513. package/dist/assets/pose-guard-DILO6gGq.js +0 -1
  514. package/dist/assets/presentation-BeNFBfKg.js +0 -1
  515. package/dist/assets/profiler.utility-Do2Bw7MY.js +0 -1
  516. package/dist/assets/project-provenance-4ldz-EOG.js +0 -1
  517. package/dist/assets/r3f-design-session-B5GsZI5M.js +0 -2
  518. package/dist/assets/react-canvas-navigation-Cp3cOHJa.js +0 -1
  519. package/dist/assets/react-inspector.service-Bm0OnanU.js +0 -1
  520. package/dist/assets/react-story-board-GaXqr03H.js +0 -1
  521. package/dist/assets/react-world-authoring-adapter-DOjv2pYm.js +0 -1
  522. package/dist/assets/reflection-probe-capture.inspector-DqSW9p1v.js +0 -1
  523. package/dist/assets/registry-CaCdF63N.js +0 -1
  524. package/dist/assets/root-seam-contract-CxLZaRio.js +0 -1
  525. package/dist/assets/run-selection-DzEkGesJ.js +0 -2
  526. package/dist/assets/scene-capture-0a-bTjT8.js +0 -1
  527. package/dist/assets/scene-document.service-CeDwVA7t.js +0 -2
  528. package/dist/assets/seeded-random-BgCwIAAU.js +0 -1
  529. package/dist/assets/stage-overlay-set-BGE03mqb.js +0 -1
  530. package/dist/assets/stage-presence-markers-DIP7YMcO.js +0 -1
  531. package/dist/assets/stage-transform-tools-BQB7EY4l.js +0 -1
  532. package/dist/assets/standard-viewport-dressing-BCA51Tum.js +0 -24
  533. package/dist/assets/state-watch.utility-CFG1Tu1m.js +0 -1
  534. package/dist/assets/story-documents-BTo90DiA.js +0 -3
  535. package/dist/assets/story-three-preview-R1JvrggS.js +0 -2
  536. package/dist/assets/studio-environment-DRxxq_QX.js +0 -2
  537. package/dist/assets/team-playtest.service-hLfjgScx.js +0 -1
  538. package/dist/assets/three-authoring-adapter-htbnVej2.js +0 -1
  539. package/dist/assets/three-authoring.service-BIQAtVdX.js +0 -2
  540. package/dist/assets/three-integration.service-CS8Nvbd2.js +0 -1
  541. package/dist/assets/three-projection-core-CG01r5Ta.js +0 -1
  542. package/dist/assets/three-viewport-presentation-B0z_cECu.js +0 -141
  543. package/dist/assets/tools-B_NJsk05.js +0 -1
  544. package/dist/assets/transform-mode-request-DzD9aUNA.js +0 -1
  545. package/dist/assets/transport-strip-CUjNltnb.js +0 -1
  546. package/dist/assets/transport.header-Bb4FpQ8J.js +0 -1
  547. package/dist/assets/tuples-DfWSY2tr.js +0 -1
  548. package/dist/assets/ui-board-document-CCiiXjX9.js +0 -2
  549. package/dist/assets/user-data-dHvLdpwM.js +0 -1
  550. package/dist/assets/viewport-door-Bj_ZIP85.js +0 -1
  551. package/dist/assets/worker-CC9Ug5Ei.js +0 -2
  552. package/dist/assets/workspace-arrangement-BdAlBwvd.js +0 -1
  553. package/dist/assets/world-documents-DBybpBq8.js +0 -1
  554. package/dist/assets/world-root-stage-binding-ZVYIgr74.js +0 -1
  555. package/dist/vgai-shared-react.json +0 -10
  556. package/dist/vgai-shared-three.json +0 -3
  557. package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  558. package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  559. package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  560. /package/dist/assets/{vgai-shared-fontawesome-CU65D4Ij.js → volter-shared-fontawesome-CU65D4Ij.js} +0 -0
  561. /package/dist/assets/{vgai-shared-jsx-dev-runtime-DFDKL7fx.js → volter-shared-jsx-dev-runtime-DFDKL7fx.js} +0 -0
  562. /package/dist/assets/{vgai-shared-jsx-runtime-DIqBpTut.js → volter-shared-jsx-runtime-DIqBpTut.js} +0 -0
  563. /package/dist/assets/{vgai-shared-react-BT7rMc2H.js → volter-shared-react-BT7rMc2H.js} +0 -0
  564. /package/dist/assets/{vgai-shared-react-dom-DFajMqMT.js → volter-shared-react-dom-DFajMqMT.js} +0 -0
  565. /package/dist/assets/{vgai-shared-react-dom-client-S0ozfl6_.js → volter-shared-react-dom-client-S0ozfl6_.js} +0 -0
  566. /package/dist/assets/{vgai-shared-three-DH4yxKwt.js → volter-shared-three-DH4yxKwt.js} +0 -0
  567. /package/template/{.vgai → .volter}/assets.json +0 -0
  568. /package/template/{.vgai → .volter}/provenance.json +0 -0
@@ -1 +0,0 @@
1
- import{D as v}from"./debug-registry-P0_YQGWd.js";import{r as _}from"./play-mode-DICV4cKP.js";const D="vgai-debug",T=100,E=50,k=100,P=60,b=2e3,V="the host loop reported liveness 'loop-starved' and this session has no way to drive ticks — no recent rAF progress was observed. Check `vgai status` for the separate visibility readings; foreground/reload the editor, or start play to wire the run-ticks target, then retry.";async function L(n,s,d){const i=()=>n.state("time"),c=i();let l=c.tick,u=0,g=0;for(;;){const r=i();if(r.simSeconds-c.simSeconds>=s)return{stalled:!1};if(r.loopLiveness==="loop-starved"){if(!d)return{stalled:!0,starvedWithoutDriver:!0};if(g>=b)return{stalled:!0};g+=1;const e=s-(r.simSeconds-c.simSeconds),t=r.fixedDt,o=t!==void 0&&Number.isFinite(t)&&t>0?Math.max(1,Math.ceil(e/t-1e-9)):1;d(Math.min(P,o));const a=i();if(a.tick===r.tick&&a.simSeconds===r.simSeconds)return{stalled:!0};l=a.tick,u=0,await Promise.resolve();continue}if(u=r.tick===l?u+1:0,l=r.tick,u>=k)return{stalled:!0};await new Promise(e=>setTimeout(e,E))}}function h(){return typeof window<"u"}function S(n){return new URLSearchParams(n.search).get(D)==="1"}function A(n){return n.debug?.allowInProduction===!0}function I(n){const{registry:s,manifest:d}=n,i=s.adapter,c=[];function l(e){c.push(e),c.length>T&&c.shift()}const u=e=>{l(e.message||String(e.error))},g=e=>{l(`Unhandled promise rejection: ${String(e.reason)}`)};n.window.addEventListener?.("error",u),n.window.addEventListener?.("unhandledrejection",g);function r(e,t){const o=s.getVirtualInputTarget(t);if(!o)throw new v("DEBUG_INPUT_UNAVAILABLE",`debug bridge: ${e}() has no virtual-input target wired — no root entry exports \`debug.input\` (the game's own input door), or none has mounted yet`);return o}return{version:1,providers:i.providers,state:i.state,stateAll:i.stateAll,commands:i.commands,events:i.events,async invoke(e,t){if(!A(d))throw new v("DEBUG_COMMANDS_UNSUPPORTED",`debug: command "${e}" invocation refused — production build without debug.allowInProduction (D18)`,{name:e});return i.invoke(e,t)},input:{setVirtualAction:(e,t,o)=>r("setVirtualAction",o).setVirtualAction(e,t),tapVirtualAction:(e,t)=>r("tapVirtualAction",t).tapVirtualAction(e),clearVirtualActions:e=>r("clearVirtualActions",e).clearVirtualActions(),scheduleActionAtTick:(e,t,o,a)=>r("scheduleActionAtTick",a).scheduleActionAtTick(e,t,o),startRecording:e=>r("startRecording",e).startInputRecording(),stopRecording:e=>r("stopRecording",e).stopInputRecording(),isRecording:e=>r("isRecording",e).isInputRecording(),injectPointerDelta:(e,t,o)=>r("injectPointerDelta",o).injectPointerDelta(e,t),injectPointerPosition:(e,t,o)=>r("injectPointerPosition",o).injectPointerPosition(e,t)},snapshot(e){return{time:i.state("time"),state:i.stateAll(),events:i.events(e),pageErrors:c.slice()}},runTicks(e,t){const o=s.getRunTicksTarget();if(!o)throw new v("DEBUG_RUN_TICKS_UNAVAILABLE","debug bridge: runTicks() has no run-ticks target wired — no Game has mounted yet");o.runTicks(e,t)},runTicksSettled(e,t){return _(s,e,t)},async holdFor(e,t,o){const a=r("holdFor",o),w=a.setVirtualAction(e,!0);if(!w.delivered)return a.clearVirtualActions(),w.reason!==void 0?{delivered:!1,reason:w.reason}:{delivered:!1};const f=s.getRunTicksTarget(),{stalled:m,starvedWithoutDriver:p}=await L(i,t,f?R=>f.runTicks(R,{render:"last"}):void 0);return a.clearVirtualActions(),m?{delivered:!1,reason:p?V:"play stopped during hold"}:{delivered:!0}},uninstall(){n.window.removeEventListener?.("error",u),n.window.removeEventListener?.("unhandledrejection",g),delete n.window.__vgai}}}function U(n){const s=n.url??(h()?window.location:void 0);if(!s||!S(s))return;const d=n.window??(h()?window:void 0);if(!d)return;if(!A(n.manifest)){console.warn("[debug] ?vgai-debug=1 ignored: production build without debug.allowInProduction (D18)");return}const i=I({registry:n.registry,manifest:n.manifest,window:d});return d.__vgai=i,i}export{V as H,U as m,L as w};
@@ -1 +0,0 @@
1
- import{e7 as L}from"./index-BRJMIUK0.js";function B(o){const s=Symbol.for(`@vgai/game-runtime/game-scoped/${o}`);return{set(u,d){Object.defineProperty(u,s,{configurable:!0,enumerable:!1,value:d})},get(u){return u[s]??null}}}class c extends Error{code;data;constructor(s,u,d){super(u),this.name="DebugError",this.code=s,this.data=d}}const T="ctx.debug.registerStateProvider(name, fn) — see the template example component";function P(o){if(o instanceof Error){const s={causeName:o.name,causeMessage:o.message};return o.stack===void 0?s:{...s,causeStack:o.stack}}return{causeName:typeof o,causeMessage:String(o)}}const q=1e4;function y(o,s,u,d){o.has(s)||(o.add(s),console.warn(`[debug] ${u} "${s}" re-registered (world "${d}")`))}function V(o){const s=new Map,u=new Map,d=new Set,S=new Set,m=[],R=500;let p=0,I=!1;const _=new Map,w=new Map,l=new Map;let E=null;const D=new Set;let b=null;const g=new Map;let N=0;function C(e){if(e!==void 0){if(!l.has(e))throw new c("DEBUG_INPUT_WORLD_NOT_FOUND",`debug: no input door wired for world "${e}" — registered: `+(l.size?[...l.keys()].join(", "):"(none)"),{worldId:e,registered:[...l.keys()]});return e}return h(l.keys())}function h(e){const t=[...e];if(t.length===0)return null;const r=o.getDefaultRootId?.()??null;return r!==null&&t.includes(r)?r:t[0]}s.set("time",{fn:()=>({simSeconds:o.getSimT(),tick:o.getTick(),loopLiveness:o.getLoopLiveness?.()??null,...o.getFixedDt===void 0?{}:{fixedDt:o.getFixedDt()}}),tier:"observable",worldId:"__engine__",builtin:!0}),s.set("input.actions",{fn:()=>{const e=h(_.keys());return(e?_.get(e):void 0)?.()??[]},tier:"observable",worldId:"__engine__",builtin:!0}),s.set("input.trace",{fn:()=>{const e=h(w.keys());return(e?w.get(e):void 0)?.()??{version:1,seed:null,fixedDt:null,ticks:[]}},tier:"observable",worldId:"__engine__",builtin:!0});function O(e,t,r,i){const n=s.get(t);if(n?.builtin)throw new c("DEBUG_BUILTIN_RESERVED",`debug: "${t}" is a built-in state provider (registered by "${n.worldId}") — built-in names cannot be registered over from a world`,{name:t,registered:n.worldId});if(n){if(n.worldId!==e)throw new c("DEBUG_NAME_COLLISION",`debug: state provider "${t}" is registered by both world "${n.worldId}" and world "${e}" — each provider name must be unique across live roots`,{name:t,roots:[n.worldId,e]});y(d,t,"provider",e)}s.set(t,{fn:r,tier:i,worldId:e,builtin:!1})}function A(e,t,r,i){if(r.locus===void 0&&I)throw new c("DEBUG_COMMAND_LOCUS_REQUIRED","this project declares a Colyseus room — declare locus: 'client' | 'server' so fixtures mutate authoritative state, not client prediction",{name:t,worldId:e});const n=u.get(t);if(n){if(n.worldId!==e)throw new c("DEBUG_NAME_COLLISION",`debug: command "${t}" is registered by both world "${n.worldId}" and world "${e}" — each command name must be unique across live roots`,{name:t,roots:[n.worldId,e]});y(S,t,"command",e)}u.set(t,{description:r.description,argsSchema:r.args,locus:r.locus,fn:i,worldId:e})}function k(e,t){p+=1,m.push({tick:o.getTick(),simT:o.getSimT(),event:e,detail:t,seq:p}),m.length>R&&m.shift()}function $(e){return e===void 0?m.slice():m.filter(t=>t.seq>e)}function G(e,t){if(!b)throw new c("DEBUG_COMMAND_FAILED",`debug: command "${e}" is locus:'server' but no Colyseus room is attached (call ctx.debug.attachRoom(room) once your game joins its room)`,{reason:"no room connection"});const r=`dbg-${++N}`,i=b;return new Promise((n,a)=>{const f=setTimeout(()=>{g.delete(r),a(new c("DEBUG_COMMAND_FAILED",`debug: command "${e}" (requestId "${r}") timed out waiting for the server`,{reason:"server timeout"}))},q);g.set(r,{resolve:n,reject:a,timer:f}),i.send("__vgai:debugCommand",{name:e,args:t,requestId:r})})}let v=null;function U(e){v?.(),b=e;const t=e.onMessage("__vgai:debugCommandResult",i=>{const n=i,a=n?.requestId;if(a===void 0)return;const f=g.get(a);f&&(g.delete(a),clearTimeout(f.timer),n?.ok?f.resolve(n.result):f.reject(new c("DEBUG_COMMAND_FAILED",`debug: server command failed: ${String(n?.error)}`,{cause:n?.error})))}),r=()=>{if(v===r){v=null,b===e&&(b=null),typeof t=="function"&&t();for(const[i,n]of g)clearTimeout(n.timer),n.reject(new c("DEBUG_COMMAND_FAILED",`debug: command (requestId "${i}") failed — its room was detached before a reply arrived`,{reason:"no room connection"}));g.clear()}};return v=r,r}return{adapter:{providers(){return[...s.entries()].map(([e,t])=>({name:e,tier:t.tier}))},state(e){const t=s.get(e);if(!t)throw new c("STATE_PROVIDER_NOT_FOUND",`debug: no state provider registered under "${e}"`,{registered:[...s.keys()],registrationHint:T});return t.fn()},stateAll(){const e={};for(const[t,r]of s)try{e[t]=r.fn()}catch(i){e[t]={__error:String(i)}}return e},commands(){return[...u.entries()].map(([e,t])=>({name:e,description:t.description,argsJsonSchema:t.argsSchema?L(t.argsSchema,{unrepresentable:"any"}):void 0,locus:t.locus??"client"}))},async invoke(e,t){const r=u.get(e);if(!r)throw new c("DEBUG_COMMAND_NOT_REGISTERED",`debug: no command registered under "${e}"`,{registered:[...u.keys()],registrationHint:T});let i=t;if(r.argsSchema){const n=r.argsSchema.safeParse(t);if(!n.success)throw new c("DEBUG_COMMAND_ARGS_INVALID",`debug: command "${e}" received invalid args`,{issues:n.error.issues});i=n.data}if((r.locus??"client")==="server")return G(e,i);try{return await r.fn(...i)}catch(n){const a=P(n);throw new c("DEBUG_COMMAND_FAILED",`debug: command "${e}" threw: ${a.causeMessage}`,{cause:n,...a})}},events(e){return $(e)}},forRoot(e){return{registerStateProvider(t,r,i){O(e,t,r,i?.tier??"observable")},registerCommand(t,r,i){A(e,t,r,i)},emit(t,r){k(t,r)},attachRoom(t){return U(t)}}},strip(e){for(const[t,r]of s)r.builtin||e!==void 0&&r.worldId!==e||(s.delete(t),d.delete(t));for(const[t,r]of u)e!==void 0&&r.worldId!==e||(u.delete(t),S.delete(t))},setRoomDeclared(e){I=e},setInputActionsSource(e,t){_.set(e,t)},setInputTraceSource(e,t){w.set(e,t)},setVirtualInputTarget(e,t){l.set(e,t)},getVirtualInputTarget(e){const t=C(e);return t!==null?l.get(t)??null:null},setRunTicksTarget(e){E=e},getRunTicksTarget(){return E},registerWorldSettledProbe(e){return D.add(e),()=>{D.delete(e)}},worldSettled(){for(const e of D)try{if(!e())return!1}catch{return!1}return!0},getGameTick(){return o.getTick()}}}const M=B("debug-registry");function j(o,s){M.set(o,s)}function H(o){return M.get(o)??null}export{c as D,V as a,B as c,H as g,j as r};
@@ -1 +0,0 @@
1
- import{stackOrder as se}from"./root-stacking-BEd9ZvxC.js";import{dA as ie,dB as de,dC as le,dp as ae,au as ue,dD as L,bo as fe,M as P,bn as pe,az as ce,dE as we,ds as he,dq as ge}from"./index-BRJMIUK0.js";import{B as S,q as N}from"./edit-mode-authoring-DeCxPcHM.js";import{s as ye,d as I,a as me}from"./design-time-mount-registry-DUpXCg1U.js";import{d as Ie,s as be,g as ve,e as Se}from"./react-story-board-GaXqr03H.js";const H=new Map;function J(n,r){return`${n}\0${r}`}function Be(n,r){return H.get(J(n,r))}function $e(n,r,o){H.set(J(n,r),o)}const ke=1;function K(n){const r=[];for(const{worldId:o,adapter:d}of n.childAdapters()){if(!(d instanceof S))continue;const a=d.inspector.get(o,"kind");if(a!=="dom"&&a!=="canvas"||d.inspector.get(o,"reason")!==void 0)continue;const b=d.inspector.get(o,"adapter");b?.startsWith("ingest")||b?.startsWith("module")||r.push({worldId:o,kind:a,path:d.inspector.get(o,"path"),zOrder:Number(d.inspector.get(o,"zOrder")??0),pausable:d.inspector.get(o,"pausable")!==!1})}return r}function De(n){return K(n)}const Ce="ui-components-board";function $(n,r){return n.childAdapters().some(o=>o.worldId===r)}function je(){return{worldId:Ce,kind:"dom",path:void 0,zOrder:0,pausable:!0}}function U(n,r,o="dom"){const d=ce(r)?"none":"block";n.style.display=d,n.style.pointerEvents=I(o)?.alwaysInteractive||we(r)?"auto":"none";for(const a of Array.from(n.parentElement?.children??[]))a instanceof HTMLElement&&a.dataset.vgaiStoryBoardChromeFor===r&&(a.style.display=d)}function Re(n,r,o,d){const{worldId:a}=r,s=document.createElement("div");return s.dataset.worldId=a,s.dataset.vgaiRootSurface="true",d&&(s.dataset.vgaiCanvasScene="true"),s.style.position="absolute",s.style.top="0",s.style.left="0",s.style.width="100%",s.style.height="100%",s.style.zIndex=String(o),s.style.contain="layout paint",s.style.cssText+="font: initial; color: initial; letter-spacing: normal; word-spacing: normal; text-align: start; text-indent: 0; text-transform: none; white-space: normal; direction: ltr;",U(s,a,r.kind),D(s),n.appendChild(s),s}function D(n){if(n.dataset.vgaiCanvasScene==="true"){n.style.transform="",n.style.width="100%",n.style.height="100%";return}if(n.style.transform=he(ge())??"",n.style.transformOrigin="0 0",n.dataset.vgaiReactStoryBoard==="true")return;const r=ve();n.style.width=r.width===null?"100%":`${r.width}px`,n.style.height=r.height===null?"100%":`${r.height}px`}const E=new Map;function Ve(n,r,o,d,a,s,b){s?s.canvasSceneView.reset():ie(),Se();const k=ue();if(!s&&k?.config.resolution&&Ie(k.config.resolution.width,k.config.resolution.height),o.playState!=="stopped"){let e=!1,t=!1;const i=o.subscribe(()=>{e||t||o.playState!=="stopped"||(t=!0,e||N())});return()=>{e=!0,i()}}const j=k?.rootPath,z=d?[...d]:K(r);if(z.length===0||!j)return()=>{};const X=j,g=se(z.map(e=>({id:e.worldId,zOrder:e.zOrder}))).map(e=>z.find(t=>t.worldId===e.id)),V=new Map(g.map(e=>[e.worldId,e])),u=new Map,y=new Map,C=new Map,R=new Set,O=new Set,T=new Set;let h=!1,p=!1,A=!1;function W(){for(const e of y.values())try{e()}catch(t){P.error(`[design-time-layers] dispose failed: ${t}`,"authoring")}y.clear();for(const e of u.values())e.remove();u.clear();for(const e of g)a?.(e.worldId,null)}function Y(){W();for(const e of R){const t=V.get(e);if(!t)continue;const i={id:t.worldId,kind:t.kind,entryOrScenePath:t.path,zOrder:t.zOrder,pausable:t.pausable};r.replaceChild(e,new S(o,i,"Design-time layer suspended by play mode — Stop restores it."))}R.clear(),o.notifyIngestEdit()}function M(e,t,i){const l=I(e.kind);if(!l){O.add(e.worldId);return}O.delete(e.worldId);const f=(C.get(e.worldId)??0)+1;C.set(e.worldId,f);const c=Re(n,e,ke+t,!!s);u.set(e.worldId,c);const x={projectRootPath:X,store:o,...s?{view:s.canvasSceneView}:{},...b?{activationDocumentId:b}:{}},q=E.get(e.worldId),B=(async()=>(q&&await q,l.mount(e,c,x)))().then(w=>{if(h||p||C.get(e.worldId)!==f){w.dispose();return}if(w.adapter)$(r,e.worldId)&&(r.replaceChild(e.worldId,w.adapter),R.add(e.worldId)),a?.(e.worldId,w.adapter);else if(w.pick){const v={id:e.worldId,kind:e.kind,entryOrScenePath:e.path,zOrder:e.zOrder,pausable:e.pausable};r.replaceChild(e.worldId,new S(o,v,void 0,w.pick)),R.add(e.worldId)}y.set(e.worldId,w.dispose),L(e.worldId),o.notifyIngestEdit(),i?.()}).catch(w=>{if(C.get(e.worldId)!==f||(i?.(),c.remove(),u.get(e.worldId)===c&&u.delete(e.worldId),h||p))return;const v=fe(w);P.error(`[design-time-layers] world "${e.worldId}" (${e.kind}) failed to mount: ${v}`,"authoring");const ne={id:e.worldId,kind:e.kind,entryOrScenePath:e.path,zOrder:e.zOrder,pausable:e.pausable};a?.(e.worldId,null),$(r,e.worldId)&&r.replaceChild(e.worldId,new S(o,ne,v)),pe({worldId:e.worldId,kind:e.kind,identity:l.identity,message:v}),o.notifyIngestEdit()});E.set(e.worldId,B),B.then(()=>{E.get(e.worldId)===B&&E.delete(e.worldId)})}g.forEach((e,t)=>{M(e,t)});function Z(e,t){const i=y.get(e.worldId);y.delete(e.worldId);const l=u.get(e.worldId);u.delete(e.worldId),M(e,t,()=>{const c=u.get(e.worldId);if(c&&(c.style.visibility=""),i)try{i()}catch(x){P.error(`[design-time-layers] re-projection dispose failed: ${x}`,"authoring")}l?.remove()});const f=u.get(e.worldId);f&&f!==l&&(f.style.visibility="hidden")}function G(e,t){const i=y.get(e.worldId);if(y.delete(e.worldId),i)try{i()}catch(f){P.error(`[design-time-layers] remount dispose failed: ${f}`,"authoring")}const l=u.get(e.worldId);l&&(l.remove(),u.delete(e.worldId)),M(e,t)}const m=new Map;function F(){for(const[e,t]of m)I(e.kind)!==e&&(t(),m.delete(e));for(const e of me()){if(m.has(e)||I(e.kind)!==e||!g.some(l=>l.kind===e.kind))continue;const t=[],i=l=>()=>{h||p||o.playState!=="stopped"||g.forEach((f,c)=>{f.kind===e.kind&&l(f,c)})};e.remountWhen&&t.push(e.remountWhen(i(G))),e.reprojectWhen&&t.push(e.reprojectWhen(i(Z))),m.set(e,()=>{for(const l of t)l()})}}F();const Q=ye(()=>{h||p||o.playState!=="stopped"||(g.forEach((e,t)=>{O.has(e.worldId)&&I(e.kind)&&(T.delete(e.worldId),L(e.worldId),M(e,t))}),F())}),_=()=>{if(h||p)return;let e=!1;for(const t of g){if(!O.has(t.worldId)||T.has(t.worldId)||I(t.kind)||(T.add(t.worldId),!$(r,t.worldId)))continue;const i={id:t.worldId,kind:t.kind,entryOrScenePath:t.path,zOrder:t.zOrder,pausable:t.pausable};r.replaceChild(t.worldId,new S(o,i,`No package in this editor registered a design-time mount for a "${t.kind}" world, so there is nothing here to author it with.`)),e=!0}e&&o.notifyIngestEdit()},ee=de(_);le()&&_();const te=ae(()=>{for(const e of u.values())D(e)}),oe=be(()=>{for(const e of u.values())D(e)}),re=o.subscribe(()=>{if(!p&&o.playState!=="stopped"){p=!0,Y();return}if(p&&!A&&o.playState==="stopped"&&!h){A=!0,h||N();return}if(!p)for(const[e,t]of u)U(t,e,V.get(e)?.kind??"dom")});return()=>{h=!0;for(const e of m.values())e();m.clear(),Q(),ee(),re(),te(),oe(),W()}}export{$e as a,De as d,Ve as m,je as p,Be as r};
@@ -1 +0,0 @@
1
- import{r as it,a as at}from"./design-time-layers-ChswRUJt.js";import{fh as st,b7 as lt,fY as ut,fZ as dt,M as E,f_ as mt,f$ as Y,bo as q,dw as U,ak as ct,eQ as z,al as $,dj as pt,cf as ft,g0 as H}from"./index-BRJMIUK0.js";import{h as ht,d as gt,g as bt}from"./react-story-board-GaXqr03H.js";import{C as wt}from"./crash-null-boundary-v3a0uEgw.js";import{r as yt,a as St}from"./realm-services-CnY105XU.js";import{r as It}from"./react-root-BHA-cdrW.js";import{m as Rt}from"./StoryPreviewMount-D2lg37et.js";import{c as vt,s as Mt}from"./story-presentation-DMSYRWaz.js";import{d as Pt}from"./three-story-model-C2r2BuiA.js";import{c as Ct}from"./inspect-Dr4qvDpJ.js";import{R as J}from"./react-world-authoring-adapter-DOjv2pYm.js";import"./root-stacking-BEd9ZvxC.js";import"./edit-mode-authoring-DeCxPcHM.js";import"./design-time-mount-registry-DUpXCg1U.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./canvas-entry-runtime-UNYuSfG0.js";import"./debug-registry-P0_YQGWd.js";import"./three-ingest-runtime-B7rtg3QE.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./inference-diagnostics-xecGdohW.js";import"./board-guides-BEKPgD9M.js";import"./relative-import-specifier-BFKIWEWs.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./writer-tw6EcuVO.js";function Et(e){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="svg"||o==="SVG"||o==="PICTURE")return!0;const r=getComputedStyle(e);if(r.visibility==="hidden"||r.display==="none")return!1;if(xt(r.backgroundColor)||r.backgroundImage&&r.backgroundImage!=="none"||r.boxShadow&&r.boxShadow!=="none"||r.borderStyle!=="none"&&r.borderStyle!==""&&(parseFloat(r.borderTopWidth)>0||parseFloat(r.borderRightWidth)>0||parseFloat(r.borderBottomWidth)>0||parseFloat(r.borderLeftWidth)>0))return!0;for(const n of e.childNodes)if(n.nodeType===Node.TEXT_NODE&&(n.textContent??"").trim()!=="")return!0;return!1}function xt(e){if(!e||e==="transparent")return!1;const o=/^rgba\(\s*[\d.]+\s*,\s*[\d.]+\s*,\s*[\d.]+\s*,\s*([\d.]+)\s*\)$/.exec(e);return o?parseFloat(o[1])>0:!0}function Nt(e,o=r=>r.getBoundingClientRect()){const r=o(e),n=e.offsetWidth;if(r.width<=0||n<=0)return null;const s=r.width/n;let d=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,y=Number.NEGATIVE_INFINITY;for(const p of e.querySelectorAll("*")){if(!Et(p))continue;const m=o(p);m.width<=0||m.height<=0||(d=Math.min(d,(m.left-r.left)/s),c=Math.min(c,(m.top-r.top)/s),i=Math.max(i,(m.right-r.left)/s),y=Math.max(y,(m.bottom-r.top)/s))}return i<=d||y<=c?null:{x:d,y:c,width:i-d,height:y-c}}let x=!1;function kt(e,o){if(!e)return;H({adapter:e,seam:"editor.stories.apply",stage:"effect",detail:`the design board applied portable story ${o}`,run:()=>e.stories.apply(o,o)});const r=e.selection;r&&H({adapter:e,seam:"editor.selection.set",stage:"effect",detail:`the design board selected portable story ${o}`,run:()=>r.set([o])})}let Q=!1;async function Ft(){if(Q)return;Q=!0;const e=bt();if(!(e.width!==null||e.height!==null))try{const o=await ft("vgai.project.json");if(!o)return;const r=JSON.parse(o),n=r.resolution?.width,s=r.resolution?.height;if(typeof n!="number"||typeof s!="number"||n<64||s<64||n>4096||s>4096)return;gt(n,s)}catch{}}function Tt(e,o){return{id:e,surface:"dom",description:void 0,adapter:{type:"builtin",identity:"dom",surface:"dom"},entry:o,zOrder:0,pausable:!0,loop:"gated"}}async function At(e,o){try{const r=await St(o,pt());return{ok:!0,Entry:await It(e,r)}}catch(r){return{ok:!1,error:r}}}async function be(e,o,r){const{projectRootPath:n,store:s,activationDocumentId:d}=r;x?x=!1:await st({rootPath:n});const c=lt(),i=Pt(c),y=e.path,p=y?await At(Tt(e.worldId,y),n):{ok:!1,error:new Error(`design-time react layer "${e.worldId}": no \`entry\` declared — nothing to mount.`)},m=p.ok?ut(p.Entry):void 0,Z=m?dt(m,e.path):null,j=i.find(g=>g.id===Z?.id)??null;if(i.length>0){const g=it(n,e.worldId),R=i.find(t=>t.id===g)??j??i[0];e.path&&!j&&E.warn(`[design-time-layers] React root "${e.worldId}" has no story naming its entry component${m?` "${m}"`:""} — the board opens on "${R.label}". Give a *.stories.tsx a \`meta.component\` of this root's entry component to choose its default preview.`,"authoring");let k=!1,P=null,F=null;const T=new Map,D=vt(i);await Ft();const l=ht(o,i.map(t=>({id:t.id,label:t.label,modulePath:t.modulePath,...t.title?{title:t.title}:{},parameters:t.parameters,...t.globals?{globals:t.globals}:{},...t.viewportLocked!==void 0?{viewportLocked:t.viewportLocked}:{}})),R.id,(t,u)=>{F=u,kt(P,t)},Mt(i,D)),_=t=>{if(k)return;const u=l.frames.get(t.id);if(!u)return;if(t.parameters?.layout==="fullscreen"){l.setMeasuredFrame(t.id,null);return}const a={width:u.content.offsetWidth,height:u.content.offsetHeight},h=a.width>0?Nt(u.content):null;if(!h){l.setMeasuredFrame(t.id,null);return}const C=8,S=48;let b=Math.max(0,h.x-C),w=Math.max(0,h.y-C),v=Math.min(a.width,h.x+h.width+C),M=Math.min(a.height,h.y+h.height+C);if(v-b<S){const A=(S-(v-b))/2;b=Math.max(0,b-A),v=Math.min(a.width,b+S)}if(M-w<S){const A=(S-(M-w))/2;w=Math.max(0,w-A),M=Math.min(a.height,w+S)}if(v-b>=a.width*.9&&M-w>=a.height*.9){l.setMeasuredFrame(t.id,null);return}l.setMeasuredFrame(t.id,{frame:{width:Math.round(v-b),height:Math.round(M-w)},mount:a,offset:{x:Math.round(b),y:Math.round(w)}})},rt=t=>{setTimeout(()=>_(t),0),setTimeout(()=>_(t),1e3)},G=async(t,u=t.args)=>{const f=l.frames.get(t.id)?.content;if(f){try{const a=await Rt(f,t.modulePath,t.name,t.Component,u);if(!a)return;if(k){a.unmount();return}T.set(t.id,a),l.clearError(t.id),rt(t)}catch(a){const h=q(a);l.setError(t.id,h),E.error(`[design-time-layers] React root "${e.worldId}" failed mounting portable story "${t.name}": ${h}`,"authoring")}s.notifyIngestEdit()}};await Promise.all(i.map(t=>G(t))),l.setNote(mt().note),g&&l.activate(R.id,!0);const L=new Map(i.map(t=>[t.id,t])),nt={tagName:"DIV",get children(){return l.activeContent().children},getAttribute:t=>o.getAttribute(t),getBoundingClientRect:()=>o.getBoundingClientRect(),get style(){return o.style},get textContent(){return l.activeContent().textContent}},O=await Y();return P=new J(nt,s,{...O?{writeBackend:O}:{},designTokens:()=>{const t=l.activeContent(),u=t.closest?.("[data-vgai-game-styles]")??t.querySelector?.("[data-vgai-game-styles]")??t;return Ct(getComputedStyle(u))},assetRoot:o,portableStories:i.map(t=>({id:t.id,label:t.label,args:t.args,name:t.name,modulePath:t.modulePath})),portableHierarchy:D,activePortableStoryId:R.id,onPortableStoryApplied:t=>{const u=(t?L.get(t):null)??R;at(n,e.worldId,u.id);const f=F;F=null,l.activate(u.id,f===null||f==="zoom")},onPortableStoryArgsChanged:(t,u)=>{const f=L.get(t);f&&G(f,u).catch(a=>{E.error(`[design-time-layers] React root "${e.worldId}" failed updating portable story "${f.name}" args: ${q(a)}`,"authoring")})}}),d&&requestAnimationFrame(()=>U(d)),{adapter:P,dispose:()=>{k=!0,P.disposeReactRootAdapter();for(const t of T.values())t.unmount();T.clear(),l.dispose()}}}if(!p.ok)throw p.error instanceof Error?p.error:new Error(String(p.error));E.warn(`[design-time-layers] React root "${e.worldId}" has no portable CSF preview — the project declares no UI stories. Add a *.stories.tsx; give it a \`meta.component\` of this root's entry component${m?` (${m}, ${e.path})`:""} to make it this root’s default preview. Falling back to rendering the entry bare.`,"authoring");const K=p.Entry,{createElement:B,createRoot:tt,flushSync:et}=await yt(),N=tt(o),ot=g=>{N.render(B(wt,{key:"__entry__",onCaught:g,children:B(K)}))};let I=null;if(et(()=>{ot(g=>{I=g})}),I!==null)throw N.unmount(),I instanceof Error?I:new Error(String(I));const V=await Y(),W=new J(o,s,{...V?{writeBackend:V}:{}});return d&&requestAnimationFrame(()=>U(d)),{adapter:W,dispose:()=>{W.disposeReactRootAdapter(),N.unmount()}}}function X(){return $().map(e=>e.ok?e.stories.map(o=>o.id).join(","):`!${e.modulePath}`).join("|")}function we(e){let o=z()?$():null,r=o===null?null:X(),n=null;const s=ct(()=>{if(!z())return;const d=$(),c=X();if(o===null){o=d,r=c;return}const i=c!==r;o=d,r=c,i&&(n!==null&&clearTimeout(n),n=setTimeout(()=>{n=null,x=!0,e(),setTimeout(()=>{x=!1},0)},250))});return()=>{n!==null&&clearTimeout(n),n=null,s()}}export{be as mountReactDesignLayer,we as reprojectWhenStoriesRepublish};
@@ -1 +0,0 @@
1
- import{gd as z,M as p,a8 as I,ge as P,gf as N,ay as H,gg as C,br as f,b1 as F,gh as g,gi as _,gj as W,gk as $,au as B,gl as O,gm as D,gn as M,go as A,bq as x,gp as T}from"./index-BRJMIUK0.js";const q={transform:!1,inspectorFields:!1,persist:!1};class G{capabilities=q;provenance={source:"boundary",label:"read-only",detail:"Declared world without a live editing surface in this viewport — disclosed, not simulated; rows are read-only."};world;reason;store;pickable;constructor(e,r,n,i){this.store=e,this.world=r,this.reason=n??null,i&&(this.pickable={pick:i})}get disclosure(){return this.reason}get label(){return this.world.entryOrScenePath?.split("/").pop()??this.world.id}get node(){return{id:this.world.id,label:this.label,secondaryLabel:this.reason?"Unavailable":"Read-only",role:"boundary",kind:this.world.kind,parentId:null,childIds:[]}}hierarchy={roots:()=>[this.node],node:e=>e===this.world.id?this.node:null};selection={get:()=>[...this.store.selectedEntityIds],set:e=>this.store.selectMultiple(e)};inspector={properties:e=>{if(e!==this.world.id)return[];const r=[{path:"kind",label:"Kind",type:"string",readonly:!0}];return this.world.adapter!==void 0&&r.push({path:"adapter",label:"Adapter",type:"string",readonly:!0}),this.world.entryOrScenePath!==void 0&&r.push({path:"path",label:"Entry / Scene",type:"string",readonly:!0}),r.push({path:"zOrder",label:"Z Order",type:"number",readonly:!0},{path:"pausable",label:"Pausable",type:"boolean",readonly:!0}),this.reason&&r.push({path:"reason",label:"Reason",type:"string",readonly:!0}),r},get:(e,r)=>{if(e===this.world.id)switch(r){case"kind":return this.world.kind;case"adapter":return this.world.adapter;case"path":return this.world.entryOrScenePath;case"zOrder":return this.world.zOrder;case"pausable":return this.world.pausable;case"reason":return this.reason??void 0;default:return}},set:(e,r,n)=>{}}}const u=new WeakMap,V=new Set;function R(){for(const t of V)t()}function J(t){const e=(u.get(t)?.generation??0)+1;return u.set(t,{generation:e,settled:!1}),R(),()=>{const r=u.get(t);!r||r.generation!==e||r.settled||(u.set(t,{generation:e,settled:!0}),R())}}const L="(invalid manifest)";let v=!1,b=!1,w=!1,l=null;function h(){if(b||w||!v||!l)return;b=!0;const t=l;queueMicrotask(()=>{if(b=!1,l!==t){h();return}v=!1,w=!0,Promise.resolve().then(t).catch(e=>{p.error(`Edit-mode rebuild failed: ${e instanceof Error?e.message:String(e)}`,"authoring")}).finally(()=>{w=!1,h()})})}function re(t){return l=t,h(),()=>{l===t&&(l=null)}}function ne(){v=!0,h()}const K=new Set(["three","canvas","dom"]);function d(t){return typeof t=="string"?t:void 0}function U(t){const e=t.world;if(!e||typeof e!="object")return;const r=d(e.entry);if(r)return{entry:r,export:d(e.export)}}function Z(t){if(t!=null){if(typeof t=="string")return t;if(typeof t=="object"){const e=t;if(typeof e.module=="string")return`module:${e.module}`;const r=e.ingest;if(r&&typeof r=="object")return"ingest"}}}function Q(t){if(!t||typeof t!="object")return null;const e=t.roots;return e===void 0||!Array.isArray(e)?null:{roots:e.map((n,i)=>{const s=n&&typeof n=="object"?n:{},a=s.zOrder,o=s.pausable;return{id:d(s.id)??`(world ${i})`,surface:(typeof s.adapter=="string"?d(s.adapter):void 0)??d(s.adapter&&typeof s.adapter=="object"?s.adapter.surface:void 0)??"(missing adapter surface)",adapter:Z(s.adapter),scene:d(s.scene),entry:d(s.entry),zOrder:typeof a=="number"?a:void 0,pausable:typeof o=="boolean"?o:void 0,dev:s.dev===!0,world:U(s)}})}}function X(t){return K.has(t.surface)?!t.scene&&!t.entry?`World "${t.id}" declares neither \`scene\` nor \`entry\` — nothing to mount.`:null:`Unknown world surface "${t.surface}" — expected one of: three, canvas, react.`}function c(t,e){const r=t.roots;if(Array.isArray(r))return r.find(n=>!!n&&typeof n=="object"&&n.id===e)}function E(t,e){return c(t,e)}class Y{raw;synthesizedValue;store;fileHistory;unsubscribeHistory;constructor(e,r,n){this.raw=e,this.synthesizedValue=r,this.store=n;const i=n.projectHistory;this.fileHistory=i?F(i,g(),"project-manifest"):null,this.unsubscribeHistory=this.fileHistory?this.fileHistory.subscribeAll(s=>{s==="vgai.project.json"&&g().readBytes(s).then(a=>JSON.parse(new TextDecoder().decode(a))).then(a=>{for(const o of Object.keys(this.raw))delete this.raw[o];Object.assign(this.raw,a),this.store.notifyIngestEdit()}).catch(()=>{})}):null}getGameName(){const e=this.raw.name;return typeof e=="string"?e:""}get synthesized(){return this.synthesizedValue}setGameName(e){this.raw.name=e,this.persist("Rename Game")}getRootContentSource(e){const r=c(this.raw,e);if(!r)return;const n=r.scene;if(typeof n=="string")return`Scene · ${n}`;const i=r.entry;return typeof i=="string"?`Entry · ${i}`:"Adapter-owned runtime content"}getRootZOrder(e){const r=c(this.raw,e)?.zOrder;return typeof r=="number"?r:0}setRootZOrder(e,r){const n=E(this.raw,e);n&&(n.zOrder=r,this.persist("Change World Order"))}getRootPausable(e){const r=c(this.raw,e)?.pausable;return typeof r=="boolean"?r:!0}setRootPausable(e,r){const n=E(this.raw,e);n&&(n.pausable=r,this.persist("Change World Pausing"))}async materialize(){const e=await this.write("Create Game Manifest");return e&&(this.synthesizedValue=!1),e}dispose(){this.unsubscribeHistory?.()}persist(e){this.synthesized||this.write(e)}async write(e){const r=JSON.stringify(this.raw,null,2);try{if(this.fileHistory)return await this.fileHistory.write("vgai.project.json",r,{label:e,kind:"manifest",contentType:"application/json"}),this.store.notifyIngestEdit(),!0;const n=async()=>{const i=await fetch("/__editor/manifest",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:"vgai.project.json",content:r,..._()})});W(i,"Write vgai.project.json failed"),i.ok||await $(i,{label:"Write vgai.project.json",attempted:{"vgai.project.json":r},reapply:n})};return await n(),this.store.notifyIngestEdit(),!0}catch(n){return this.fileHistory&&g().readBytes("vgai.project.json").then(i=>JSON.parse(new TextDecoder().decode(i))).then(i=>{for(const s of Object.keys(this.raw))delete this.raw[s];Object.assign(this.raw,i),this.store.notifyIngestEdit()}).catch(()=>{}),p.error(`Failed to write vgai.project.json: ${n}`,"project"),!1}}}let m=null;function ee(t,e,r){const n=I(e).map(o=>{const y=o.zOrder??0,j=P(o.surface);if(j)return{worldId:o.id,kind:o.surface,adapter:j(t,o.id),zOrder:y};const S=X(o),k={id:o.id,kind:o.surface,adapter:o.adapter,entryOrScenePath:o.scene??o.entry,zOrder:y,pausable:o.pausable??!0};return{worldId:o.id,kind:o.surface,adapter:new G(t,k,S??void 0),zOrder:y}}),i=r&&n.length>=1?new Y(r.raw,r.synthesized,t):void 0;m=i??null;const s=N(B()?.config),a=new H(n,i,s);if(n.length>=1){if(O()&&!D())return p.warn("Edit-mode authoring not installed: a foreign session (ingest/play) owns the authoring override.","authoring"),a;C(a),f(a),t.notifyIngestEdit()}else if(!O()){const o=x(t,"No world yet","Declare a root in vgai.project.json");M(o),f(o),t.notifyIngestEdit()}return a}function ie(t){t&&A()===t&&f(null);const e=T();e&&A()===e&&f(null),M(null),m?.dispose(),m=null}async function se(t){const e=J(t);let r,n;try{const i=await z(),s=i!==null&&Q(i);if(s)r=s,n={raw:i,synthesized:!1};else throw new Error("manifest has no `roots` array (zero roots is fine; a missing field is not)")}catch(i){const s=i instanceof Error?i.message:String(i);p.error(`Failed to load vgai.project.json: ${s}`,"project"),r={roots:[{id:"manifest",surface:L,adapter:s}]}}try{return ee(t,r,n)}finally{e()}}export{G as B,L as I,re as b,ie as e,se as i,Q as p,ne as q};
@@ -1 +0,0 @@
1
- import{O as e,X as r,bz as i,bA as a,bB as p,bC as m}from"./index-BRJMIUK0.js";import{bD as Ut,bE as qt,bF as Bt,bG as Jt,bH as Mt,bI as Vt,bJ as Xt,a$ as Yt,bK as Zt,bL as zt,bM as Kt,bN as Nt,bO as Qt,aY as _t,bP as te,bQ as ee,bR as re,bS as oe,bT as se,bU as ie,bV as ae,bW as pe,bX as me,bY as ne,bZ as ce,b_ as le,b$ as de,c0 as be,c1 as ge,c2 as ue,c3 as Ee,c4 as Se,c5 as ye,c6 as Pe,c7 as je,c8 as fe,c9 as he,ca as ve,cb as Ae,cc as ke,cd as Ce,ce as Re,cf as we,cg as Fe,ch as Te,ci as xe,cj as Le,ck as De,cl as Ge,cm as We,cn as $e,aZ as Oe,co as Ie,cp as He,cq as Ue,cr as qe,cs as Be,ct as Je,cu as Me}from"./index-BRJMIUK0.js";import{m as Xe,o as Ye,q as Ze}from"./play-mode-DICV4cKP.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./adapter-runtime-bindings-4cmsRvRh.js";import"./native-debug-module-2_HVupdg.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-P0_YQGWd.js";import"./contract-system-adapters-Bic_7sev.js";import"./game-contract-seams-BnPFGLll.js";import"./seeded-random-BgCwIAAU.js";import"./game-audio-CaGKzia4.js";import"./game-network-Ct2FQYmu.js";import"./index-OZVqp6xS.js";import"./index-Da9JhEvW.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./index-bQE2NA0D.js";import"./live-project-verbs-C3LzprCe.js";import"./capability-coverage-DZ-onC5j.js";import"./edit-mode-authoring-DeCxPcHM.js";import"./json-history-resource-DwS10tqD.js";import"./binding-resolver-dE0GnZT5.js";import"./adapter-surface-Y37Nzcyw.js";import"./entry-adjudication-Dc18TIqT.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./realm-services-CnY105XU.js";import"./canvas-entry-runtime-UNYuSfG0.js";import"./three-ingest-runtime-B7rtg3QE.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./relative-path-guard-GiM7Lsz8.js";import"./react-root-BHA-cdrW.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./active-ingest-DA426a81.js";import"./ingest-source-persistence-Dmdo-UBp.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-vgxsTyj4.js";import"./mounted-authoring-Clftxx0x.js";import"./entity-object-JmYMfLsx.js";import"./user-data-Bpj7diUS.js";import"./workspace-arrangement-BdAlBwvd.js";import"./three-contract-Dkt6PmWY.js";import"./three-TCuY32m_.js";import"./editor-layers-BDJnAAzj.js";import"./component-instance-root-B0C5oNEm.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./three-authoring-adapter-htbnVej2.js";import"./source-persistence-backend-CwLYVPXj.js";import"./three-projection-core-CG01r5Ta.js";import"./body-marks-RKb_LTwL.js";import"./user-data-dHvLdpwM.js";import"./object-marks-DwvIEBOK.js";import"./structural-ids-Br2zjINh.js";import"./object3d-authoring-subject-BDrxd1GA.js";import"./r3f-physics-binding-DzrbpqjM.js";import"./deferred-ingest-play-BdR4qGk6.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-DOjv2pYm.js";import"./board-guides-BEKPgD9M.js";import"./relative-import-specifier-BFKIWEWs.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-Dr4qvDpJ.js";import"./inference-diagnostics-xecGdohW.js";import"./writer-tw6EcuVO.js";import"./three-state-DwFE3ay2.js";import"./editor-shell-store-ChLcVeNB.js";import"./output-pass-HurwNl0G.js";import"./viewport-door-Bj_ZIP85.js";async function Wt(){try{const t=await fetch(`${e}/examples`);return(await r(t,`GET ${e}/examples failed`)).examples}catch{return[]}}function $t(t){return t.startsWith("/")?t:`${e}/learn-thumbnail?file=${encodeURIComponent(t)}`}async function Ot(){const t=await fetch(`${e}/templates`);return(await r(t,`GET ${e}/templates failed`)).templates}export{Ut as AssetDeliveryError,m as abortGameplayRecordingSink,qt as adaptProjectFolder,Bt as appendGameplayRecordingAsset,a as appendGameplayRecordingChunk,Jt as appendGameplayRecordingDomEvents,Mt as archiveEditorWorktree,Vt as assetDeliveryIssueMessage,i as beginGameplayRecordingSink,Xt as browseFolder,Yt as captureProjectAssetHistory,Zt as connectEvents,zt as connectTabPresence,Kt as createEditorWorktree,Nt as createProject,Qt as delegateEditorTask,_t as downloadOnlineAsset,Xe as endLogSession,p as finishGameplayRecordingSink,Ye as flushLogEntries,te as getAssetLibraryCategories,ee as getCurrentServerProject,re as getDownloadUrl,oe as getDownloadedAssetPath,se as getEditorCompatibility,ie as getEditorRepositoryPresence,ae as getEditorSessionWorktreeIdentity,pe as getLauncherSettings,me as getOnlineAssetFiles,ne as getOnlineAssetPreview,ce as getServerValidationLog,le as inspectProjectFolder,$t as learnThumbnailUrl,de as listAssets,be as listDelegateHarnesses,ge as listEditorWorktrees,Wt as listExamples,ue as listProjectComponents,Ee as listProjectSourceFiles,Se as listRecentProjects,Ot as listTemplates,ye as loadDownloadedAssets,Pe as loadEditorState,je as onAssetDownloaded,fe as openEditorWorktree,he as openProjectOnServer,ve as pollEditorLeaseIdentity,Ae as probeCurrentServerProject,ke as probeProjectFile,Ce as projectFileExists,Re as readProjectSourceText,we as readProjectTextFile,Fe as removeRecentProject,Te as reportCommandListener,xe as reportCommandReceived,Le as reportCommandResult,De as reportEditorState,Ge as reportPlayBootPhase,We as reportTabRoute,$e as requireEditorCompatibility,Oe as restoreProjectAssetHistory,Ie as revealInFinder,He as saveEditorState,Ue as saveFile,qe as saveThumbnail,Be as searchOnlineAssets,Ze as startLogSession,Je as stopEditorWorktreeSession,Me as updateLauncherSettings};
@@ -1 +0,0 @@
1
- const t={hostActive:!0,listeners:new Set};function o(){return t.hostActive&&(typeof document>"u"||!document.hidden)}function n(){for(const e of t.listeners)e()}const i=typeof document<"u"&&document.referrer?new URL(document.referrer).origin:null;function r(e){window.parent===window||e.source!==window.parent||!i||e.origin!==i||e.data?.type!=="vgai:embed-activity"||typeof e.data.active!="boolean"||t.hostActive!==e.data.active&&(t.hostActive=e.data.active,n())}function d(e){return t.listeners.add(e),()=>{t.listeners.delete(e)}}typeof window<"u"&&(window.addEventListener("message",r),document.addEventListener("visibilitychange",n),window.parent!==window&&i&&window.parent.postMessage({type:"vgai:request-embed-activity"},i));export{o as i,d as s};
@@ -1 +0,0 @@
1
- import{e9 as T,u as z,by as ie,L as ae,gW as le}from"./index-BRJMIUK0.js";import{r as F}from"./index-nmcBqr7Y.js";import{staticBatchSkipReason as ce,materialMergeSignature as ue}from"./structural-signature-Dc7skRiy.js";import{fd as de}from"./three.core-3arARmh6.js";import{f as fe,c as me,a as pe,b as he}from"./webgl-frame-capture-DdJkM2mi.js";import{g as ge}from"./debug-registry-P0_YQGWd.js";import{y as we,f as ye,e as Ee,n as be,g as Re}from"./events-156d8d12.esm-CYeuVCYr.js";const Q=40,X=30;function Z(e){const r=e;return r.isMesh||r.isSkinnedMesh?r:null}function x(e){const r=e.geometry;if(!r)return 0;const t=r.getIndex?.()??null,s=r.getAttribute?.("position")??null,o=t?t.count:s?.count??0,a=e.isInstancedMesh?e.count??1:1;return Math.round(o/3)*a}function B(e,r){if(!e.visible)return;const t=Z(e);t&&r(t);for(const s of e.children)B(s,r)}const v="(unnamed)";function L(e,r="(scene)"){const t=new Map;let s=0,o=0;if(!e.visible)return{root:r,totalMeshes:0,totalTriangles:0,subtreeCount:0,subtrees:[]};const a=(l,c)=>{B(c,m=>{const p=x(m),n=t.get(l)??{meshes:0,triangles:0};n.meshes+=1,n.triangles+=p,t.set(l,n),s+=1,o+=p})},d=Z(e);if(d){const l=x(d);t.set(e.name||r,{meshes:1,triangles:l}),s+=1,o+=l}for(const l of e.children)a(l.name||v,l);const u=[...t.entries()].map(([l,c])=>({name:l,meshes:c.meshes,triangles:c.triangles})).sort((l,c)=>c.triangles-l.triangles||c.meshes-l.meshes);return{root:r,totalMeshes:s,totalTriangles:o,subtreeCount:u.length,subtrees:u.slice(0,Q)}}function W(e,r){if(e.name===r)return e;for(const t of e.children){const s=W(t,r);if(s)return s}return null}function ve(e){const r=new Map;let t=0;B(e,a=>{if(a.isInstancedMesh)return;const d=a.geometry;if(!d)return;const u=a.material,l=Array.isArray(u)?u.map(p=>p.uuid).join("+"):u?.uuid??"none",c=`${d.uuid}/${l}`;t+=1;const m=r.get(c);if(m){m.meshes+=1;return}r.set(c,{meshes:1,triangles:x(a),example:`${a.parent?.name||v}/${a.name||v}`})});const s=[...r.values()].sort((a,d)=>d.meshes-a.meshes),o=s.slice(0,X);return{plainMeshes:t,familyCount:s.length,top:o,meshesInTop:o.reduce((a,d)=>a+d.meshes,0)}}function G(e){const r=new Map,t={},s=[];let o=0;const a=(n,i)=>{if(!n.visible)return!1;const f=ce(n);if(f==="opted-out")return t["opted-out"]=(t["opted-out"]??0)+1,!1;if(f===null){const w=n,_=w.material,M=`${ue(_)}|${n.castShadow?1:0}${n.receiveShadow?1:0}`;o+=1,s.push({key:M,subtree:i});const C=r.get(M);C?C.meshes+=1:r.set(M,{meshes:1,triangles:x(w),example:`${n.parent?.name||v}/${n.name||v}`})}else f!=="not-a-mesh"&&(t[f]=(t[f]??0)+1);return!0},d=(n,i)=>{if(a(n,i))for(const f of n.children)d(f,i)};if(a(e,e.name||v))for(const n of e.children)d(n,n.name||v);const u=new Set([...r.entries()].filter(([,n])=>n.meshes>=2).map(([n])=>n)),l=new Map;let c=0;for(const n of s)u.has(n.key)&&(c+=1,l.set(n.subtree,(l.get(n.subtree)??0)+1));const m=[...r.values()].sort((n,i)=>i.meshes-n.meshes),p=m.slice(0,X);return{plainMeshes:o,familyCount:m.length,top:p,meshesInTop:p.reduce((n,i)=>n+i.meshes,0),collapsible:c,skipped:t,bySubtree:[...l.entries()].map(([n,i])=>({name:n,collapsible:i})).sort((n,i)=>i.collapsible-n.collapsible).slice(0,Q)}}const ee="render.submit",Me=["input","prePhysics","physics","postPhysics","gameLogic","animation"],Ce=300,Se=50,_e=.05,Ae=.1;function Te(e,r,t){const s=e-r-t;return{totalMs:e,renderMs:r,simMs:t,otherMs:s,text:`${e.toFixed(0)}ms = render ${r.toFixed(0)} + sim ${t.toFixed(0)} + other ${s.toFixed(0)}`}}function Fe(){return{lastFrameId:0,lastPresentAt:null,pendingSimMs:0,frameTimeMs:null,renderCpuMs:null,drawCalls:null,triangles:null,renderPasses:null,worstCurrentMs:0,worstPreviousMs:0,worstWindowFrames:0,lastHitch:null,presentedFrames:0}}function Pe(e,r){let t=0;for(const s of e.phases)r.includes(s.name)&&(t+=s.ms);return t}function xe(e){for(const r of e.phases)if(r.name===ee)return r.ms;return null}function K(e,r,t){return e===null?r:e*(1-t)+r*t}function Ie(e,r){if(r.id<=e.lastFrameId)return!1;e.lastFrameId=r.id,r.render.renderPasses!==null&&(e.drawCalls=r.render.drawCalls,e.triangles=r.render.triangles,e.renderPasses=r.render.renderPasses),e.pendingSimMs+=Pe(r,Me);const t=xe(r);if(t===null)return!1;const s=e.pendingSimMs;e.pendingSimMs=0,e.presentedFrames+=1,e.renderCpuMs=K(e.renderCpuMs,t,Ae);const o=e.lastPresentAt;if(e.lastPresentAt=r.timestamp,o===null)return!0;const a=r.timestamp-o;return e.frameTimeMs=K(e.frameTimeMs,a,_e),a>e.worstCurrentMs&&(e.worstCurrentMs=a),e.worstWindowFrames+=1,e.worstWindowFrames>=Ce&&(e.worstPreviousMs=e.worstCurrentMs,e.worstCurrentMs=0,e.worstWindowFrames=0),a>=Se&&(e.lastHitch=Te(a,t,s)),!0}function P(e,r){if(e===null)return null;const t=10**r;return Math.round(e*t)/t}function De(e){const r=P(e.frameTimeMs,2),t=Math.max(e.worstCurrentMs,e.worstPreviousMs);return{frameTimeMs:r,fps:r!==null&&r>0?P(1e3/r,1):null,drawCalls:e.drawCalls,triangles:e.triangles,renderCpuMs:P(e.renderCpuMs,2),renderPasses:e.renderPasses,worstFrameMs:e.frameTimeMs===null?null:P(t,2),lastHitch:e.lastHitch,presentedFrames:e.presentedFrames}}function $e(e){const r=Fe(),t=e.subscribe(()=>{const o=e.getSnapshot().frames.at(-1);o&&Ie(r,o)});let s=!1;return{read:()=>De(r),dispose(){s||(s=!0,t())}}}const ke=500,Le=.5,Oe=.4,Ne=120;function O(e){return e.toLocaleString("en-US")}function He(e){const{drawCalls:r,census:t,structural:s}=e;if(r===null||r<ke)return null;const{collapsible:o}=s;if(o<r*Le)return null;const a=new Set(t.subtrees.map(p=>p.name)),d=s.bySubtree[0],u=d&&d.collapsible>=o*Oe&&a.has(d.name)?d.name:null,l=u===null?"<Frozen>":`<Frozen name="${u}">`,c=u===null?"spread across the scene":`mostly under "${u}"`,m=`[static-batch] ${O(r)} draw calls this frame; ~${O(o)} meshes are repeats of ${O(s.familyCount)} structural families, ${c}. If that scenery is mount-static — nothing under it moves, re-colours or unmounts after mount — one wrapper collapses it to a few draws: wrap it in ${l}…</Frozen> (vgai add static-batch). Reactive scenery goes outside the wrapper, and a subtree that must stay unbatched declares it: userData={{ staticBatch: false }}.`;return{drawCalls:r,collapsible:o,subtree:u,fix:l,message:m}}const re="__vgaiStaticBatchAdvised";function We(){return globalThis[re]===!0}function Be(e){console.warn(e)}function Ve(e,r=Be){return We()?!1:(globalThis[re]=!0,r(e.message),!0)}const N="render.vitals",je="render.census",Ue="render.families",ze="render.toggle",Ge="render.dpr",Ke="render.dpr: this world has no WebGL renderer (headless mount), so there is no pixel ratio to change. The other render.* commands still work — they read the scene graph.";function Ye(e){const{registry:r,worldId:t,profiler:s,scene:o,renderer:a}=e;if(r.adapter.providers().some(i=>i.name===N))return console.warn(`[render-vitals] world "${t}" did not get the ${N} door: another live world already owns it (the names are fixed, so the first three root to mount wins). Its draws still fold into the readings — the profiler is game-scoped — but render.census/families/toggle address the owning root. If this world IS the current one, the previous mount was torn down AFTER this one seeded and its strip() took the door with it.`),null;const u=$e(s),l=r.forRoot(t);l.registerStateProvider(N,()=>u.read()),l.registerCommand(je,{description:"Visible meshes and triangles per subtree — the address book behind the draw-call reading. Pass a subtree name (as listed by a previous census) to drill into it.",args:T([z().optional()]),locus:"client"},i=>{if(i===void 0||i==="")return L(o);const f=W(o,i);if(!f)throw new Error(`render.census: no node named "${i}" in this world. Run render.census with no argument to list the addressable subtrees.`);return L(f,i)}),l.registerCommand(Ue,{description:"Meshes grouped by shared (geometry, material) identity, largest group first — the instancing shortlist for a draw-call diet. `structural` is the same scan keyed by VALUE instead of object identity: what would collapse under a <Frozen> wrapper (vgai add static-batch) even when every mesh carries its own inline material.",args:T([]),locus:"client"},()=>({...ve(o),structural:G(o)})),l.registerCommand(ze,{description:"Show/hide a named subtree (as listed by render.census) and read render.vitals again — the difference is what that subtree costs.",args:T([z()]),locus:"client"},i=>{const f=W(o,i);if(!f)throw new Error(`render.toggle: no node named "${i}" in this world. Run render.census to list the addressable subtrees.`);return f.visible=!f.visible,{name:i,visible:f.visible}}),l.registerCommand(Ge,{description:"Set the renderer pixel ratio (retina default is ~2) to probe GPU fill cost — render CPU that does not move when the drawing buffer shrinks was never fill-bound.",args:T([ie().positive().max(8)]),locus:"client"},i=>{if(!a)throw new Error(Ke);const f=a.getSize(new de);return a.setPixelRatio(i),a.setSize(f.x,f.y,!1),{pixelRatio:a.getPixelRatio(),drawingBuffer:{width:a.domElement.width,height:a.domElement.height}}});let c=null,m=!1;const p=()=>{if(m||u.read().presentedFrames<Ne)return;m=!0,c?.(),c=null;const i=He({drawCalls:u.read().drawCalls,census:L(o),structural:G(o)});i&&Ve(i)};c=s.subscribe(p);let n=!1;return{vitals:u,dispose(){n||(n=!0,c?.(),c=null,u.dispose())}}}const qe={};function Je(e){return qe?.VITE_VGAI_DEV_BUILD==="true"}const Y=new WeakMap;function Qe(e){const r=Y.get(e.Component);if(r)return r;class t extends e.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(o){this.props.onError(o)}render(){return this.state.failed?null:this.props.children}}return Y.set(e.Component,t),t}function Xe(e,r,t){const{createElement:s,Fragment:o,useEffect:a,createRoot:d,extend:u,advance:l,flushSync:c}=t,m=Qe(t),p=s(r);return{id:e,async mount(n){u(n.three);const i=n.game?ge(n.game):null,f=n.surface.canvas,w=d(f);let _;const M=new Promise(h=>{_=h});let C;const te=new Promise(h=>{C=h});function ne(){return a(C,[]),null}await w.configure({gl:n.renderer,shadows:n.renderer.shadowMap?.enabled??!1,frameloop:"never",size:{width:n.surface.width,height:n.surface.height,top:0,left:0},...n.headless?{}:{events:t.events},onCreated:h=>_(h)});const se=s(o,null,p,s(ne,{key:"vgai-mount-effects-ready"})),A=await new Promise((h,E)=>{const b=R=>{k(),w.unmount(),i?.strip(e),E(new Error(`three world "${e}": fiber crashed before its first commit — ${R}`))},g=R=>{b(R.message)},$=setTimeout(()=>{k(),w.unmount(),i?.strip(e),E(new Error(`three world "${e}": onCreated did not fire within 10s — the R3F tree never reached its first commit (mount() fails loudly instead of hanging)`))},1e4),k=()=>{clearTimeout($),typeof window<"u"&&window.removeEventListener("error",g)};typeof window<"u"&&window.addEventListener("error",g),w.render(s(m,{onError:R=>b(R.message)},se)),Promise.all([M,te]).then(([R])=>{k(),h(R)})});A.clock.autoStart=!1,A.clock.stop();const y=()=>A.get();let I=null;if(!n.headless&&n.game&&Je()){if(n.game.profiler.enabled=!0,!i)throw new Error(`three world "${e}": mounted Game has no debug registry.`);I=Ye({registry:i,worldId:e,profiler:n.game.profiler,scene:y().scene,renderer:n.renderer})}const oe=typeof n.renderer.getContext=="function"?n.renderer.getContext():void 0,V=fe(n.headless??!1,oe),j=V?me(V):null,S=j?pe({capture:j,scene:A.scene,memory:()=>he(y().scene,n.renderer.info)}):null,U=i?{debug:i.adapter}:{};S&&(U.renderDebug=S.adapter);let D=0;return{kind:"three",get scene(){return y().scene},get camera(){return y().camera},drivesOwnLoop:!1,updateCadence:"display",systems:U,systemScope:y().scene,update(h){D+=h;const E=y();try{S?.beforeRender();const b=n.game?.profiler;if(!b?.enabled){l(D,!0,E);return}const g=n.renderer.info,$=g?.render.frame??0;b.beginPhase();try{l(D,!0,E)}finally{b.endPhase(ee)}g&&b.reportRender({gpuMs:null,drawCalls:g.render.calls,triangles:g.render.triangles,geometries:g.memory.geometries,textures:g.memory.textures,renderPasses:g.render.frame-$})}finally{S?.afterRender()}},resize(h,E){y().setSize(h,E)},dispose(){S?.dispose(),c(()=>w.unmount()),I?.dispose(),I=null,i?.strip(e)}}}}}function q(e,r,t){const s=e;return typeof s?.default=="function"?Xe(r,s.default,t):null}const Ze={createElement:F.createElement,Fragment:F.Fragment,Component:F.Component,useEffect:F.useEffect,createRoot:ye,extend:Ee,advance:be,flushSync:we,events:Re};let H=null;const er=["createElement","Fragment","Component","useEffect","createR3FRoot","extendThree","advance","flushSync","events"];async function rr(){const e=await import(le),r=er.filter(t=>e[t]===void 0);if(r.length>0||typeof e.projectThree!="object"||e.projectThree===null)throw new Error(`The packaged runtime's synthetic R3F module did not export ${[...r,...e.projectThree?[]:["projectThree"]].join(", ")} — see R3F_DOORWAY in vite-plugin-module-doorways.ts.`);return{runtime:{createElement:e.createElement,Fragment:e.Fragment,Component:e.Component,useEffect:e.useEffect,createRoot:e.createR3FRoot,extend:e.extendThree,advance:e.advance,flushSync:e.flushSync,events:e.events},projectThree:e.projectThree}}function tr(e,r){return{id:e.id,mount(t){return e.mount({...t,three:r})}}}async function J(e,r){if(!await ae())return q(e,r,Ze);H||(H=rr());const{runtime:t,projectThree:s}=await H,o=q(e,r,t);return o?tr(o,s):null}function nr(e){if(e===null||typeof e!="object")return!1;const r=e;return typeof r.id=="string"&&r.id.length>0&&typeof r.mount=="function"}async function dr(e,r,t){const s=t?.namedExport;if(s!==void 0){const o=e[s];if(typeof o!="function")throw new Error(`three root "${r}": ${t?.entryPath??"the entry module"} has no exported component "${s}" (manifest \`world.export\`) — it exports ${Object.keys(e).join(", ")||"(nothing)"}.`);return J({default:o},r)}return nr(e.adapter)?e.adapter:J(e,r)}export{dr as a};
@@ -1 +0,0 @@
1
- import{fn as s,fo as c,av as o,di as u}from"./index-BRJMIUK0.js";import{E as h,a as E,F as g,c as m}from"./instance-fork-actions-D3sRzS3K.js";import{t as i}from"./editor-shell-store-ChLcVeNB.js";function l(e,t){return s(e,t)}function F(e,t){const n=o(e.shell);return E(n.hierarchy.node(t),l(n,t),t)}let r=null;function O(){r||(r=c(({nodeId:e,store:t})=>F(i(t),e),({nodeId:e,store:t})=>{const n=l(o(t),e);return[{label:h,action:()=>{n?.extractComponent?.(e).then(u)}}]}))}function b(){r?.(),r=null}function f(e,t){return s(e,t)}function p(e,t){const n=o(e.shell);return m(n.hierarchy.node(t),f(n,t),t)}let a=null;function A(){a||(a=c(({nodeId:e,store:t})=>p(i(t),e),({nodeId:e,store:t})=>{const n=f(o(t),e);return[{label:g,action:()=>{n?.forkComponent?.(e).then(u)}}]}))}function C(){a?.(),a=null}export{l as a,A as b,C as c,O as e,f as i,b as u};
@@ -1 +0,0 @@
1
- const c=new Set;function f(){for(const t of c){const n=t.deref();if(!n||n.state==="closed"){c.delete(t);continue}n.state==="suspended"&&n.resume()}}function y(){const t=window;if(t.__vgaiAudioUnlock)return;t.__vgaiAudioUnlock=!0;const n=window.AudioContext;typeof n=="function"&&(window.AudioContext=class extends n{constructor(...i){super(...i),c.add(new WeakRef(this)),h.add(this)}},k(),window.addEventListener("pointerdown",f,{capture:!0}),window.addEventListener("keydown",f,{capture:!0}))}const u=new WeakMap,h=new WeakSet;let p=!1;const d=new WeakMap,l=new Set,w=new WeakMap;let m=0;function a(t){if(t instanceof AudioDestinationNode)return"destination";let n=w.get(t);return n||(n=`n${++m}`,w.set(t,n),l.add(new WeakRef(t))),n}function k(){const t=AudioNode.prototype.connect,n=AudioNode.prototype.disconnect,i=o=>{let e=u.get(o);return e||(e=o.createGain(),e.gain.value=p?0:1,t.call(e,o.destination),u.set(o,e)),e},s=o=>o instanceof AudioDestinationNode&&h.has(o.context)?i(o.context):o;AudioNode.prototype.connect=function(...o){const[e,...A]=o;if(e instanceof AudioNode&&u.get(this.context)!==this){a(this),a(e);let r=d.get(this);r||d.set(this,r=new Set),r.add(e)}const g=t.call(this,s(e),...A);return e instanceof AudioDestinationNode?e:g},AudioNode.prototype.disconnect=function(...o){const[e]=o;return e===void 0||typeof e=="number"?d.delete(this):e instanceof AudioNode&&d.get(this)?.delete(e),n.call(this,...o.length?[s(e),...o.slice(1)]:[])}}function N(t){p=t;for(const n of c){const i=n.deref()&&u.get(n.deref());i&&(i.gain.value=t?0:1)}}function v(){const t=[];let n=!1;for(const i of l){const s=i.deref();if(!s){l.delete(i);continue}const o=[...d.get(s)??[]];o.some(e=>e instanceof AudioDestinationNode)&&(n=!0),t.push({id:a(s),type:s.constructor.name,outputs:o.map(a),state:s.context.state})}return n&&t.push({id:"destination",type:"AudioDestinationNode",label:"Output",outputs:[]}),t}const b={resume:f,setMuted:N,isMuted:()=>p,graphSnapshot:v};export{y as i,b as o};
@@ -1 +0,0 @@
1
- import{kT as ht,kU as be,kV as gt,d2 as vt,J as K,kW as yt,kX as we,kY as xt,kZ as Se,Z as H,$ as ue,k_ as bt,k$ as wt,cR as J,cS as G,l0 as St,l1 as jt,a3 as de,l2 as Et,aI as $e,l3 as Mt,l4 as It,eE as Te,au as ze,fR as Rt,fS as Ct,fT as Dt,fU as Pt,q as ie,ad as h,M as kt,gE as At,gF as je,gH as Ft,ga as _t,eO as Ne,l5 as $t,cU as Tt,l6 as zt,p as Oe}from"./index-BRJMIUK0.js";import{a as s}from"./jsx-runtime-DPjLkJKQ.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{u as Nt,d as Ot,c as Gt}from"./frame-debugger-store-DaCbAYSW.js";import{m as Vt}from"./audio-meter-Cddyq1vI.js";import{p as Ge}from"./utility-view-state-CAfbFbKQ.js";import{P as Ht}from"./PlayBar-bT8Xdrap.js";import{a as Ee,r as Lt,f as Bt,R as Ut}from"./presentation-BeNFBfKg.js";import{setUserData as Ve}from"./user-data-dHvLdpwM.js";import{E as pe,F as Wt,G as ne,H as qt,I as He,J as Le,K as Be,L as Ue,v as Kt,w as Xt,M as me,u as Y,N as Yt,O as Zt,P as Jt,Q as se,R as We,S as Me,T as qe,U as Qt,V as Ke,i as en,W as tn,X as Ie,Y as nn,a as Xe,Z as sn}from"./play-mode-DICV4cKP.js";import{aq as on,cp as Ye,aI as rn,bX as an,ey as ln,bh as fe,co as Re,s as cn,fo as U,bV as un,N as Ze,M as Ce,dg as dn,df as pn}from"./three.core-3arARmh6.js";import{e as mn,S as fn}from"./surface-state-1lTOi8FD.js";import{d as hn}from"./surface-content-Dg9Kkazf.js";import{a as gn,R as Je}from"./active-ingest-DA426a81.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./configurations-BXU4GGbV.js";import"./run-selection-DzEkGesJ.js";import"./ingest-source-persistence-Dmdo-UBp.js";import"./capability-coverage-DZ-onC5j.js";import"./game-contract-seams-BnPFGLll.js";import"./object-marks-DwvIEBOK.js";import"./adapter-runtime-bindings-4cmsRvRh.js";import"./native-debug-module-2_HVupdg.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-P0_YQGWd.js";import"./contract-system-adapters-Bic_7sev.js";import"./seeded-random-BgCwIAAU.js";import"./game-audio-CaGKzia4.js";import"./game-network-Ct2FQYmu.js";import"./index-OZVqp6xS.js";import"./index-Da9JhEvW.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./three.module-BLhyNg0e.js";import"./index-bQE2NA0D.js";import"./live-project-verbs-C3LzprCe.js";import"./edit-mode-authoring-DeCxPcHM.js";import"./json-history-resource-DwS10tqD.js";import"./binding-resolver-dE0GnZT5.js";import"./adapter-surface-Y37Nzcyw.js";import"./entry-adjudication-Dc18TIqT.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./realm-services-CnY105XU.js";import"./canvas-entry-runtime-UNYuSfG0.js";import"./three-ingest-runtime-B7rtg3QE.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./relative-path-guard-GiM7Lsz8.js";import"./react-root-BHA-cdrW.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./pixi-story-model-DNkfnWUV.js";import"./viewport-root-presentation-vgxsTyj4.js";import"./mounted-authoring-Clftxx0x.js";import"./entity-object-JmYMfLsx.js";import"./user-data-Bpj7diUS.js";import"./workspace-arrangement-BdAlBwvd.js";import"./three-contract-Dkt6PmWY.js";import"./three-TCuY32m_.js";import"./editor-layers-BDJnAAzj.js";import"./component-instance-root-B0C5oNEm.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./three-authoring-adapter-htbnVej2.js";import"./source-persistence-backend-CwLYVPXj.js";import"./three-projection-core-CG01r5Ta.js";import"./body-marks-RKb_LTwL.js";import"./structural-ids-Br2zjINh.js";import"./object3d-authoring-subject-BDrxd1GA.js";import"./r3f-physics-binding-DzrbpqjM.js";import"./deferred-ingest-play-BdR4qGk6.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-DOjv2pYm.js";import"./board-guides-BEKPgD9M.js";import"./relative-import-specifier-BFKIWEWs.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-Dr4qvDpJ.js";import"./inference-diagnostics-xecGdohW.js";import"./writer-tw6EcuVO.js";import"./three-state-DwFE3ay2.js";import"./editor-shell-store-ChLcVeNB.js";import"./output-pass-HurwNl0G.js";import"./viewport-door-Bj_ZIP85.js";const Qe=8,oe=1e3/60;function vn(e,t=Qe){return!(e>0)||t<=0?0:Math.min(t,Math.max(1,Math.round(Vt(e)/100*t)))}function De(e,t){const n=e.filter(a=>a.id>t),o=n.at(-1)?.id??t,i=n.map(a=>a.intervalMs).filter(a=>Number.isFinite(a)&&a>0).sort((a,m)=>a-m);if(i.length===0)return{frameId:o,intervalMs:null};const l=Math.floor((i.length-1)*.95);return{frameId:o,intervalMs:i[l]??null}}function yn(e){const t=e.slice(-3);return t.slice(-2).length===2&&t.slice(-2).every(n=>n>=50)?"danger":t.length===3&&t.every(n=>n>oe*1.05)?"warning":"normal"}function xn(e,t,n,o=50){if(e.length===0||t<=0||n<=0)return"";const i=Math.max(1,e.length-1);return e.map((l,a)=>{const m=a/i*t,d=Math.min(1,Math.max(0,l/o)),g=n-d*n;return`${m.toFixed(1)},${g.toFixed(1)}`}).join(" ")}const et="muted",Pe={enabled:!1,recording:!1,fps:0,cpuMs:0,p95Ms:0,p99Ms:0,frames:[],phases:[],systems:[],components:[],render:{gpuMs:null,drawCalls:0,triangles:0,geometries:0,textures:0,renderPasses:0}};function ke(){return St(et)===!0}function bn(e){jt(et,e)}function wn(e,t){const n=t.find(i=>i.id==="master")?.level;if(!e.isMuted()&&n!==void 0)return n;const o=t.filter(i=>i.id!=="master").map(i=>i.level);return o.length>0?Math.max(...o):n??0}function Sn(){const e=K();r.useSyncExternalStore(e.subscribe,e.getShellSnapshot??e.getSnapshot);const t=e.playState==="playing",[n,o]=r.useState(!1),[i,l]=r.useState(0),[a,m]=r.useState(!1),[d,g]=r.useState(!1),[u,T]=r.useState(ke),R=r.useRef(ke()),E=r.useRef(new WeakMap),x=r.useRef(null),C=r.useSyncExternalStore(yt,we,we),v=xt();r.useEffect(()=>{const p=R.current||!t;for(const f of Se())E.current.get(f)!==p&&(f.setMuted(p),E.current.set(f,p))},[C,t]),r.useEffect(()=>{if(!v){l(0),m(!1),g(!1);return}const p=v.acquireMeters?.()??null;g(p!==null);const f=()=>{m(v.isMuted()),l(p?wn(v,p.read()):0)};f();const k=setInterval(f,100);return()=>{clearInterval(k),p?.dispose()}},[v]);const M=()=>{const p=!R.current,f=p||!t;for(const k of Se())k.resume?.(),k.setMuted(f),E.current.set(k,f);R.current=p,T(p),bn(p),m(f)},D=vn(i),z=v&&a&&!u&&!t?" (not playing)":"",P=v?a?"Audio muted":i>0?"Audio playing":"Audio quiet":"Audio unavailable";return s.jsxs("div",{className:"vgai-header-audio","data-muted":a||void 0,"data-available":!!v,children:[s.jsxs(H,{ref:x,type:"button",variant:"ghost",size:"compact",className:"vgai-header-telemetry-button","data-testid":"header-audio-telemetry","aria-label":`${P}; open audio controls`,"aria-haspopup":"menu","aria-expanded":n,title:`${P}${z}${d?"":" · level metering unavailable"}`,onClick:()=>o(p=>!p),children:[s.jsx(ue,{icon:a?bt:wt,size:"sm"}),s.jsx("span",{className:"vgai-audio-vu","aria-hidden":"true",children:Array.from({length:Qe},(p,f)=>s.jsx("i",{"data-filled":f<D||void 0},f))})]}),n&&s.jsx(J,{anchorRef:x,onDismiss:()=>o(!1),gap:3,children:s.jsx(G,{onClick:()=>{M(),o(!1)},children:u?"Unmute audio":"Mute audio"})})]})}function jn(){const e=Nt(),t=e?.profiler??null,[n,o]=r.useState(Pe),[i,l]=r.useState([]);r.useEffect(()=>{if(!t){o(Pe),l([]);return}const R=t.telemetryEnabled;t.telemetryEnabled=!0;const E=t.getSnapshot(),x=De(E.frames,0);let C=x.frameId;o(E),l(x.intervalMs===null?[]:[x.intervalMs]);let v=null;const M=()=>{v=null;const z=t.getSnapshot(),P=De(z.frames,C);C=P.frameId,o(z);const p=P.intervalMs;p!==null&&l(f=>[...f,p].slice(-24))},D=t.subscribe(()=>{v===null&&(v=setTimeout(M,500))});return()=>{D(),v!==null&&clearTimeout(v),R||(t.telemetryEnabled=!1)}},[t]);const a=i.at(-1)??null,m=xn(i,72,18),d=a?Math.round(1e3/a):n.fps>0?Math.round(n.fps):null,g=a??(n.fps>0?1e3/n.fps:null),u=yn(i),T=e?`${e.label}: ${d??"—"} FPS · ${g?.toFixed(1)??"—"} ms frame time · open Profiler`:"The active document has no live render loop to profile";return s.jsxs(H,{type:"button",variant:"ghost",size:"compact",className:"vgai-header-telemetry-button vgai-header-performance","data-testid":"header-performance-telemetry","data-performance-tone":u,disabled:!e,"aria-label":T,title:T,onClick:()=>Ge.open("profiler"),children:[s.jsxs("svg",{className:"vgai-performance-graph","aria-hidden":"true",viewBox:"0 0 72 18",width:"72",height:"18",children:[s.jsx("line",{className:"vgai-performance-budget",x1:"0",x2:"72",y1:18-oe/50*18,y2:18-oe/50*18}),m&&s.jsx("polyline",{className:"vgai-performance-sparkline",points:m})]}),s.jsxs("span",{className:"vgai-performance-readout",children:[s.jsxs("strong",{className:"vgai-header-fps",children:[d??"—"," FPS"]}),s.jsxs("span",{className:"vgai-header-frame-ms",children:[g?.toFixed(1)??"—"," ms"]})]})]})}function En(){return r.useSyncExternalStore(ht,be,be),gt().telemetry==="hidden"?null:s.jsxs(vt,{className:"vgai-header-telemetry vgai-chrome-island vgai-glass-island","data-island-scale":"compact",align:"center",gap:1,children:[s.jsx(Sn,{}),s.jsx(jn,{})]})}let Z=!1,re=0,w=null,N=null;const Mn=new on(1,1,1,16,1,!0),In=new Ye({color:2280686,transparent:!0,opacity:.45,side:rn,depthWrite:!1}),Rn=new an({color:16755200,transparent:!0,opacity:.9}),Cn=new ln(.12,12,8),Dn=new Ye({color:16755200,depthWrite:!1}),Pn=16724804,kn=2280686;let $=[];function Ae(){return Z}function An(e){e!==Z&&(Z=e,e?re=requestAnimationFrame(tt):(cancelAnimationFrame(re),$n()))}function tt(){if(!Z)return;re=requestAnimationFrame(tt);const e=pe(),t=e?de().navigation?.crowdAgents?.()??[]:[];if(e!==N&&(N&&w&&N.remove(w),N=e,e&&(w||(w=new fe,w.name="crowd-debug-draw",Ve(w,"editorHelper",!0)),e.add(w))),!(!w||!e)){Fn(w,t.length);for(let n=0;n<t.length;n++)_n($[n],t[n])}}function Fn(e,t){for(;$.length<t;){const n=new fe,o=In.clone(),i=new Re(Mn,o),l=new cn(new U(1,0,0),new U,1,16755200),a=new un(new Ze,Rn),m=new Re(Cn,Dn);n.add(i),n.add(l),e.add(n),e.add(a),e.add(m),$.push({root:n,cylinder:i,cylinderMaterial:o,arrow:l,path:a,target:m})}for(;$.length>t;){const n=$.pop();e.remove(n.root),e.remove(n.path),e.remove(n.target),n.arrow.dispose(),n.path.geometry.dispose(),n.cylinderMaterial.dispose()}}function _n(e,t){e.root.position.set(t.position.x,t.position.y,t.position.z),e.cylinder.scale.set(t.radius,t.height,t.radius),e.cylinder.position.y=t.height/2,e.cylinderMaterial.color.setHex(t.state==="invalid"?Pn:kn);const n=t.corners??[];n.length>0?(e.path.visible=!0,e.path.geometry.setFromPoints([new U(t.position.x,t.position.y+.05,t.position.z),...n.map(i=>new U(i.x,i.y+.05,i.z))])):e.path.visible=!1,t.target&&n.length>0?(e.target.visible=!0,e.target.position.set(t.target.x,t.target.y+.05,t.target.z)):e.target.visible=!1;const o=Math.hypot(t.velocity.x,t.velocity.y,t.velocity.z);o>.01?(e.arrow.visible=!0,e.arrow.position.y=t.height/2,e.arrow.setDirection(new U(t.velocity.x/o,t.velocity.y/o,t.velocity.z/o)),e.arrow.setLength(Math.max(o*.5,.2))):e.arrow.visible=!1}function $n(){if(w){N?.remove(w);for(const e of $)e.arrow.dispose();w.clear()}$=[],w=null,N=null}function Tn({onPresetChange:e}){const[t,n]=r.useState(!1),o=r.useRef(null),i=He(),l=i.kind==="fit";return s.jsxs("div",{className:"vgai-playbar-popover-anchor",children:[s.jsxs(H,{ref:o,variant:"ghost",size:"comfortable","aria-haspopup":"menu","aria-expanded":t,"aria-controls":t?"vgai-device-preset-menu":void 0,"data-testid":"device-preset-picker",onClick:()=>n(a=>!a),title:"Device preview — constrain the game to a device resolution + DPR. Phone/tablet presets show the safe area, set --vgai-safe-area-inset-top/right/bottom/left CSS vars on the game mount, and send mouse input as touch.",children:[s.jsx(ue,{icon:Et,size:"md"}),s.jsx($e,{variant:"code",children:l?"Device":`${i.width}×${i.height}`})]}),t&&s.jsxs(J,{id:"vgai-device-preset-menu",anchorRef:o,className:"vgai-resolution-menu",gap:4,onDismiss:()=>n(!1),children:[Wt.map(a=>s.jsx(G,{role:"menuitemradio","aria-checked":a.id===i.id,"data-testid":`device-preset-${a.id}`,onSelect:()=>{e(a),n(!1)},children:a.label},a.id)),s.jsxs(G,{role:"menuitemcheckbox","aria-checked":ne(),"data-testid":"device-touch-toggle",onSelect:()=>qt(!ne()),children:[ne()?"✓ ":" ","Pointer as touch"]})]})]})}function zn(){const e=Mt(()=>It()??null),n=Ot(e)?.capture===!0;return s.jsx(H,{type:"button",size:"compact",variant:"ghost","data-testid":"game-capture-frame",className:"vgai-frame-capture-game-button",disabled:!n,title:n?"Capture one rendered frame and open the Frame debugger":"No render-debug adapter registered for this world — frame capture is unavailable",onClick:()=>{Gt(e),Ge.open("frame")},children:"Capture frame"})}let nt={label:"Fill",width:null,height:null},ae=1,st=0;const le=new Set;function V(){st++;for(const e of le)e()}function it(e){return le.add(e),()=>{le.delete(e)}}const ot=()=>st;function rt(){return nt}function at(e){nt=e,V()}function lt(e,t){return e.width!==null||!t?e:{label:`Project — ${t.width}×${t.height}`,width:t.width,height:t.height}}function Nn(e){return e?[lt({label:"Fill",width:null,height:null},e),...Ee.filter(t=>t.width!==null)]:Ee}function ct(e){Le(e.id),at(e.width===null||e.height===null?{label:"Fill",width:null,height:null}:{label:e.label,width:e.width,height:e.height})}function On(e){e!==ae&&(ae=e,V())}function Gn(){return ae}function ut(e){return Array.from(e.children).filter(t=>t.dataset?.vgaiRootSurface==="true")}function Vn(e,t,n){for(const o of t)o.contains(e)||e.appendChild(o);if(n)for(const o of ut(n))e.appendChild(o)}function Hn({name:e}){return s.jsx("div",{"data-testid":"game-instance-name",style:{flex:"0 0 auto",padding:"3px 10px",background:h.surface.chrome,color:h.content.primary,borderBottom:`1px solid ${h.boundary.default}`,fontSize:11,fontWeight:600,userSelect:"none"},children:e})}function dt({name:e,testId:t,borderLeft:n,focused:o,onFocus:i,children:l}){return s.jsxs("div",{"data-testid":t,"data-focused":o||void 0,onPointerDownCapture:i,style:{flex:1,minWidth:0,height:"100%",display:"flex",flexDirection:"column",overflow:"hidden",position:"relative",cursor:i&&!o?"pointer":void 0,...n?{borderLeft:`1px solid ${h.boundary.default}`}:{}},children:[s.jsx(Hn,{name:e}),s.jsx("div",{style:{flex:1,minHeight:0,position:"relative",display:"flex",alignItems:"center",justifyContent:"center"},children:l}),o&&s.jsx("div",{"aria-hidden":!0,style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:40,border:`2px solid ${h.accent.default}`,boxShadow:`inset 0 0 0 1px ${h.accent.default}`}})]})}function Ln({index:e}){const t=r.useRef(null),n=qe(e+1),o=r.useSyncExternalStore(Ke,en),[i,l]=r.useState(null),a=r.useSyncExternalStore(me,Y);return r.useEffect(()=>{const m=t.current;if(!m||!o)return;let d=null,g=!1;return tn(m,n).then(u=>{g?Ie(u):(d=u,l(u))},u=>{kt.error(`Failed to mount ${n}: ${u}`,"play-mode")}),()=>{g=!0,l(null),d&&Ie(d)}},[e,o]),s.jsx(dt,{name:n,testId:`game-instance-slot-${e+1}`,borderLeft:!0,focused:i!=null&&a===i,onFocus:i?()=>We(i):void 0,children:s.jsx("div",{ref:t,"data-vgai-instance-viewport":"",style:{position:"absolute",inset:0}})})}function Bn({style:e}){const t=r.useSyncExternalStore(Te,ze),o=K().playState!=="stopped",i=r.useRef(null);r.useSyncExternalStore(it,ot),r.useSyncExternalStore(Be,Ue);const l=r.useSyncExternalStore(Kt,Xt),a=l>0,m=r.useSyncExternalStore(me,Y),d=He(),g=rt(),[u,T]=r.useState({width:0,height:0}),[R,E]=r.useState(0),x=r.useRef(null),C=r.useSyncExternalStore(Rt,Ct),v=r.useSyncExternalStore(Dt,Pt),M=Qt(),D=gn(),z=M.length>0?M.map(c=>c.rootId):D?[D.worldId]:C.filter(c=>c.mechanism==="host-mount").map(c=>c.rootId),P=!!(x.current&&hn(x.current)),p=M.length>0?M.some(c=>c.hasRenderableContent):P,f=M.length>0||D!==null,k=o?mn({surface:"Game",rootIds:z,phase:f?"ready":"loading",content:f?p?"present":"empty":"unknown",readiness:C,failures:v}):null;r.useEffect(()=>{if(!o||!f||p)return;const c=window.setTimeout(()=>E(y=>y+1),250);return()=>window.clearTimeout(c)},[R,p,o,f]),r.useEffect(()=>{const c=i.current;if(!c||typeof MutationObserver>"u")return;const y=new MutationObserver(()=>E(I=>I+1));return y.observe(c,{childList:!0,subtree:!0,characterData:!0}),()=>y.disconnect()},[]),r.useEffect(()=>{const c=Yt();c.width!==null&&(ct(c),V())},[]);const Q=r.useRef([]),he=r.useCallback(c=>{if(c===x.current)return;!c&&x.current&&(Q.current=ut(x.current)),c&&(Vn(c,Q.current,x.current),Q.current=[]);const y=x.current;x.current=c,c?ie().workspace.liveDocument.setContainer(c):y&&ie().workspace.liveDocument.releaseContainer(y),c?Zt(c):y&&Jt(y)},[]);r.useEffect(()=>{const c=i.current;if(!c)return;const y=new ResizeObserver(([I])=>{if(!I)return;const{width:X,height:xe}=I.contentRect;T(te=>te.width===X&&te.height===xe?te:{width:X,height:xe})});return y.observe(c),()=>y.disconnect()},[]);const mt=t?.config.resolution,A=Lt(g,mt),ge=A.kind==="fill",ft=ge||a,L=A.kind==="logical"?A.width:null,B=A.kind==="logical"?A.height:null,ve=d.dpr;r.useEffect(()=>{const c=ve??nn();a?u.width>0&&u.height>0&&se(u.width/(l+1),u.height,c):L===null||B===null?u.width>0&&u.height>0&&se(u.width,u.height,c):se(L,B,c)},[L,B,u.width,u.height,ve,o,a,l]);const ee=Bt(u,{width:L??0,height:B??0},{allowUpscale:A.kind==="logical"&&A.allowUpscale}),F=ge?1:ee.scale;r.useEffect(()=>{On(F)},[F]);const b=d.safeArea,ye={"--vgai-safe-area-inset-top":`${b?.top??0}px`,"--vgai-safe-area-inset-right":`${b?.right??0}px`,"--vgai-safe-area-inset-bottom":`${b?.bottom??0}px`,"--vgai-safe-area-inset-left":`${b?.left??0}px`};return s.jsx("div",{style:{overflow:"hidden",position:"relative",flexDirection:"column",...e},children:s.jsxs("div",{ref:i,style:{flex:1,overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center",position:"relative"},children:[(()=>{const c=ft?s.jsx("div",{ref:he,"data-testid":"game-runtime-container","aria-hidden":"true",style:{position:"absolute",inset:0,...o?{}:{visibility:"hidden"},...ye}},"game-mount-fill"):s.jsxs("div",{style:{position:"relative",width:ee.width,height:ee.height,overflow:"hidden",...o?{}:{visibility:"hidden"}},children:[s.jsx("div",{ref:he,"data-testid":"game-runtime-container","aria-hidden":"true",style:{width:L??0,height:B??0,transformOrigin:"top left",transform:`scale(${F})`,...ye}}),b&&s.jsx("div",{"data-testid":"device-safe-area-overlay",style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:2},children:[["top",b.top,{top:0,left:0,right:0,height:b.top*F}],["bottom",b.bottom,{bottom:0,left:0,right:0,height:b.bottom*F}],["left",b.left,{top:0,bottom:0,left:0,width:b.left*F}],["right",b.right,{top:0,bottom:0,right:0,width:b.right*F}]].map(([y,I,X])=>I>0?s.jsx("div",{"data-testid":`device-safe-area-${y}`,style:{position:"absolute",...X,background:h.semantic.dangerFaint,boxShadow:`inset 0 0 0 1px ${h.semantic.dangerMuted}`}},y):null)})]},"game-mount-device");return a?s.jsxs(s.Fragment,{children:[s.jsx(dt,{name:qe(0),testId:"game-instance-slot-0",focused:m===Me(),onFocus:()=>We(Me()),children:c}),Array.from({length:l},(y,I)=>s.jsx(Ln,{index:I},I))]}):c})(),!o&&s.jsxs("div",{"data-testid":"game-stopped-placeholder",style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:6,background:h.surface.shell,color:h.content.dim,fontSize:11,pointerEvents:"none"},children:[s.jsx("span",{style:{color:h.content.primary,fontSize:13},children:"Game is stopped"}),s.jsx("span",{children:"Press Play to start the composed runtime."})]}),o&&s.jsx(fn,{explanation:k,testId:"game-surface-status",style:{zIndex:30,background:h.surface.shell}})]})})}function Fe(){return Xe().map(({id:e,name:t})=>`${e}\0${t}`).join("")}function Un({instanceId:e}){const t=K();r.useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot);const n=r.useSyncExternalStore(me,Y,Y),[,o]=r.useState(0);r.useEffect(()=>{const g=window.setInterval(()=>o(u=>u+1),250);return()=>window.clearInterval(g)},[]);const i=Je(e),l=zt(),a=i?(i.loop.activeTimeouts??0)+(i.loop.activeIntervals??0)+(i.loop.activeAnimationFrames??0)+i.loop.pending:0,m=i?i.listeners.window+i.listeners.document:0,d=[["Mount",e],["Simulation",t.playState==="paused"?"Paused":"Running"],["Input",n===e?"Keyboard focus":"Inactive"],["Input events",i?`${i.loop.input??0} observed · ${i.loop.inputBlocked??0} blocked`:"Not measured"],["Network",l?l.getConnectionState?.()??"Not reported by this adapter":"Not registered"],["Owned callbacks",String(a)],["Owned listeners",String(m)],["Realm globals",String(i?.globals??0)],["Browser storage",i?`Shared origin · ${i.storage.local.reads+i.storage.session.reads} reads · ${i.storage.local.writes+i.storage.session.writes} writes`:"Shared origin"]];return s.jsx("div",{role:"none",style:{display:"grid",gridTemplateColumns:"112px minmax(120px, 1fr)",gap:"4px 12px",padding:"8px 10px",fontSize:10,lineHeight:"15px"},children:d.map(([g,u])=>s.jsxs("div",{style:{display:"contents"},children:[s.jsx("span",{style:{color:h.content.dim},children:g}),s.jsx("span",{style:{color:h.content.primary,fontFamily:g==="Mount"?h.typography.mono:void 0,overflow:"hidden",textOverflow:"ellipsis"},children:u})]},g))})}function Wn(){r.useSyncExternalStore(Ke,Fe,Fe),r.useSyncExternalStore(At,je,je);const e=Xe(),t=Ft(),n=e.find(d=>d.id===t)??e[0],[o,i]=r.useState(!1),l=r.useRef(null);if(e.length<2||!n)return null;const m=(Je(n.id)?.loop.firedWhileHeld??0)>0;return s.jsxs("div",{className:"vgai-playbar-popover-anchor",children:[s.jsxs(H,{ref:l,variant:"ghost",size:"compact","aria-haspopup":"menu","aria-expanded":o,onClick:()=>i(d=>!d),title:`Runtime instruments inspect ${n.name}; agent-addressed commands are unchanged`,children:[s.jsx(ue,{icon:_t,size:"sm",style:{color:m?h.semantic.warning:void 0}}),s.jsxs($e,{variant:"code",children:["Inspect ",n.name]}),s.jsx(Ne,{direction:"down"})]}),o&&s.jsxs(J,{anchorRef:l,gap:3,onDismiss:()=>i(!1),style:{minWidth:270},children:[e.map(d=>s.jsxs(G,{role:"menuitemradio","aria-checked":d.id===n.id,onSelect:()=>$t(d.id),children:[d.id===n.id?"✓ ":" ",d.name]},d.id)),s.jsx(Tt,{}),s.jsx(Un,{instanceId:n.id})]})]})}let q=!1,ce=0,S=null,O=null,W=null,j=null,_=0;function _e(){return q}function qn(e){e!==q&&(q=e,e?ce=requestAnimationFrame(pt):(cancelAnimationFrame(ce),W?.setDebugDrawEnabled?.(!1),Zn()))}function pt(){if(!q)return;ce=requestAnimationFrame(pt);const e=pe(),t=e?Oe(de().physics):null;if(t!==W&&(W?.setDebugDrawEnabled?.(!1),W=t,t?.setDebugDrawEnabled?.(!0)),Kn(e),!S||!e)return;const n=t?.contactPoints?.()??null;Xn(S,n)}function Kn(e){e!==O&&(O&&S&&O.remove(S),O=e,e&&(S||(S=new fe,S.name="physics-debug-draw",Ve(S,"editorHelper",!0)),e.add(S)))}function Xn(e,t){const n=t?t.length/3:0;if(!j){_=64;const l=new Ze;l.setAttribute("position",new Ce(new Float32Array(_*3),3));const a=new dn({color:16724821,size:10,sizeAttenuation:!1,depthTest:!1,transparent:!0,opacity:.95});j=new pn(l,a),j.renderOrder=999,j.frustumCulled=!1,e.add(j)}const o=j.geometry;if(n>_){for(;_<n;)_*=2;o.setAttribute("position",new Ce(new Float32Array(_*3),3))}const i=o.getAttribute("position");t&&n>0&&i.array.set(t),i.needsUpdate=!0,o.setDrawRange(0,n),j.visible=n>0}function Yn(){const e=pe(),n=(e?Oe(de().physics):null)?.debugDraw?.()??null;let o=!1;n&&e&&e.traverse(a=>{a===n&&(o=!0)});const i=n?.geometry.getAttribute("position"),l=j?.geometry.drawRange.count??0;return{enabled:q,wireframeInScene:o,wireframeVisible:n?.visible??!1,wireframeVertexCount:i?.count??0,contactMarkerCount:j?.visible&&Number.isFinite(l)?l:0}}typeof window<"u"&&(window.__vgaiPhysicsDebug=Yn);function Zn(){S&&(O?.remove(S),j&&(j.geometry.dispose(),j.material.dispose()),S.clear()),j=null,_=0,S=null,O=null,W=null}function Jn(){const[e,t]=r.useState(!1),n=r.useRef(null);return s.jsxs("div",{style:{position:"relative"},children:[s.jsxs(H,{ref:n,type:"button",variant:"outline",size:"compact","data-testid":"game-debug-menu","aria-haspopup":"menu","aria-expanded":e,"aria-controls":e?"vgai-game-debug-menu":void 0,onClick:()=>t(o=>!o),children:[s.jsx("span",{children:"Debug"}),s.jsx(Ne,{direction:"down"})]}),e&&s.jsxs(J,{id:"vgai-game-debug-menu",anchorRef:n,gap:3,onDismiss:()=>t(!1),style:{minWidth:190},children:[s.jsxs(G,{onClick:()=>{An(!Ae()),V()},children:[Ae()?"✓ ":" ","Crowd debug draw"]}),s.jsxs(G,{onClick:()=>{qn(!_e()),V()},children:[_e()?"✓ ":" ","Physics debug draw"]})]})]})}function Qn(e){const t=r.useSyncExternalStore(Te,ze),n=K();return r.useSyncExternalStore(n.subscribe,n.getShellSnapshot??n.getSnapshot),r.useSyncExternalStore(it,ot),r.useSyncExternalStore(Be,Ue),s.jsxs("div",{"data-testid":"game-doc-toolbar",style:{display:"grid",alignItems:"center",gridTemplateColumns:"minmax(0, 1fr) auto minmax(0, 1fr)",width:"100%",gap:6,padding:"2px 8px"},children:[s.jsxs("div",{style:{display:"flex",alignItems:"center",minWidth:0,overflow:"auto"},children:[s.jsx(Wn,{}),s.jsx(Tn,{onPresetChange:o=>{ct(o),V()}}),s.jsx(Ut,{resolution:lt(rt(),t?.config.resolution),options:Nn(t?.config.resolution),onResolutionChange:o=>{Le(sn),at(o)},scale:Gn(),title:"Change game resolution"}),s.jsx(Jn,{}),n.playState!=="stopped"&&s.jsx(zn,{})]}),s.jsx(Ht,{placement:"runtime"}),s.jsx("div",{style:{display:"flex",justifyContent:"flex-end",minWidth:0},children:s.jsx(En,{})})]})}function es(e){const t=K();r.useSyncExternalStore(t.subscribe,t.getShellSnapshot??t.getSnapshot);const n=t.playState!=="stopped";return s.jsxs("div",{style:{flex:1,position:"relative",display:"flex",flexDirection:"column"},children:[s.jsx(Bn,{style:{flex:1,position:"relative",display:"flex",flexDirection:"column",pointerEvents:"auto",...t.playState==="playing"?{outline:`2px solid ${h.semantic.success}`,outlineOffset:-2}:n?{outline:`2px solid ${h.semantic.warning}`,outlineOffset:-2}:{}}}),t.playState==="paused"&&s.jsx("div",{"data-testid":"game-paused-notice",style:{position:"absolute",left:"50%",top:12,transform:"translateX(-50%)",padding:"6px 12px",borderRadius:6,background:"rgba(0,0,0,.72)",color:h.content.primary,fontSize:12,letterSpacing:".04em",pointerEvents:"none",zIndex:2},children:"Paused by the editor — press ▶ Play to resume (Escape pauses)"})]})}const zi="workspace.service";function Ni(){return ie().workspace.liveDocument.register({Content:es,Toolbar:Qn})}export{zi as point,Ni as start};
@@ -1,2 +0,0 @@
1
- import{createGameModuleResolver as k,setFocusedInstanceProvider as M}from"./game-module-access-o3iXZpCA.js";import{n as d}from"./command-results-CUQD49AB.js";import{i as g}from"./active-ingest-DA426a81.js";import{i as y,t as h,u as w}from"./play-mode-DICV4cKP.js";import"./index-BRJMIUK0.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./game-contract-seams-BnPFGLll.js";import"./capability-coverage-DZ-onC5j.js";import"./ingest-source-persistence-Dmdo-UBp.js";import"./contract-system-adapters-Bic_7sev.js";import"./adapter-runtime-bindings-4cmsRvRh.js";import"./native-debug-module-2_HVupdg.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-P0_YQGWd.js";import"./seeded-random-BgCwIAAU.js";import"./game-audio-CaGKzia4.js";import"./game-network-Ct2FQYmu.js";import"./index-OZVqp6xS.js";import"./index-Da9JhEvW.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./index-bQE2NA0D.js";import"./live-project-verbs-C3LzprCe.js";import"./edit-mode-authoring-DeCxPcHM.js";import"./json-history-resource-DwS10tqD.js";import"./binding-resolver-dE0GnZT5.js";import"./adapter-surface-Y37Nzcyw.js";import"./entry-adjudication-Dc18TIqT.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./realm-services-CnY105XU.js";import"./canvas-entry-runtime-UNYuSfG0.js";import"./three-ingest-runtime-B7rtg3QE.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./relative-path-guard-GiM7Lsz8.js";import"./react-root-BHA-cdrW.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-vgxsTyj4.js";import"./mounted-authoring-Clftxx0x.js";import"./entity-object-JmYMfLsx.js";import"./user-data-Bpj7diUS.js";import"./workspace-arrangement-BdAlBwvd.js";import"./three-contract-Dkt6PmWY.js";import"./three-TCuY32m_.js";import"./editor-layers-BDJnAAzj.js";import"./component-instance-root-B0C5oNEm.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./three-authoring-adapter-htbnVej2.js";import"./source-persistence-backend-CwLYVPXj.js";import"./three-projection-core-CG01r5Ta.js";import"./body-marks-RKb_LTwL.js";import"./user-data-dHvLdpwM.js";import"./object-marks-DwvIEBOK.js";import"./structural-ids-Br2zjINh.js";import"./object3d-authoring-subject-BDrxd1GA.js";import"./r3f-physics-binding-DzrbpqjM.js";import"./deferred-ingest-play-BdR4qGk6.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-DOjv2pYm.js";import"./board-guides-BEKPgD9M.js";import"./relative-import-specifier-BFKIWEWs.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-Dr4qvDpJ.js";import"./inference-diagnostics-xecGdohW.js";import"./writer-tw6EcuVO.js";import"./three-state-DwFE3ay2.js";import"./editor-shell-store-ChLcVeNB.js";import"./output-pass-HurwNl0G.js";import"./viewport-door-Bj_ZIP85.js";class E extends Error{member;supported;constructor(e,r,o){super(`playwright-shim: ${e}.${r} is not supported by the in-page shim. Supported ${e} members: ${o.join(", ")}. This shim is DOM-only — canvas gameplay input must use game.input.*, while React-only DOM games may use Page keyboard/locator input. See packages/editor/src/playwright-shim.ts for the full supported subset and the wire's closure-capture limitation.`),this.name="PageShimUnsupportedError",this.member=r,this.supported=o}}function b(t,e){const r=Object.keys(t);return new Proxy(t,{get(o,i,n){if(typeof i=="symbol"||i in o)return Reflect.get(o,i,n);throw new E(e,i,r)}})}function m(t){return t.replace(/\s+/g," ").trim()}function O(t){const e=t.tagName.toLowerCase();if(e==="button")return"button";if(e==="a"&&t.hasAttribute("href"))return"link";if(/^h[1-6]$/.test(e))return"heading";if(e==="textarea")return"textbox";if(e==="select")return"combobox";if(e==="img")return"img";if(e==="input"){const r=(t.getAttribute("type")??"text").toLowerCase();return r==="button"||r==="submit"||r==="reset"?"button":r==="checkbox"?"checkbox":r==="radio"?"radio":"textbox"}return null}function v(t){return t.getAttribute("role")??O(t)}function S(t){const e=t.getAttribute("aria-label");return e&&e.trim()?m(e):m(t.textContent??"")}function T(t,e){if(e===void 0)return!0;const r=S(t);return e instanceof RegExp?e.test(r):r===e}function x(t,e,r){return Array.from(t.querySelectorAll("*")).filter(i=>v(i)===e&&T(i,r?.name))}function I(t,e){const r=Array.from(t.querySelectorAll("*")).filter(n=>n.tagName!=="SCRIPT"&&n.tagName!=="STYLE"),o=n=>{const s=m(n.textContent??"");return s.length===0?!1:e instanceof RegExp?e.test(s):s.includes(e)},i=r.filter(o);return i.filter(n=>!i.some(s=>s!==n&&n.contains(s)))}function C(t,e){return Array.from(t.querySelectorAll("[data-testid]")).filter(r=>{const o=r.getAttribute("data-testid")??"";return e instanceof RegExp?e.test(o):o===e})}function L(t){if(!(t instanceof HTMLElement))return!0;if(t.hidden)return!1;const e=getComputedStyle(t);return e.display!=="none"&&e.visibility!=="hidden"&&e.opacity!=="0"}function _(t){const e=t.getBoundingClientRect?.()??{left:0,top:0,width:0,height:0},r=e.left+e.width/2,o=e.top+e.height/2,i={bubbles:!0,cancelable:!0,clientX:r,clientY:o,button:0};typeof PointerEvent<"u"&&t.dispatchEvent(new PointerEvent("pointerdown",{...i,pointerId:1,isPrimary:!0})),t.dispatchEvent(new MouseEvent("mousedown",i)),typeof PointerEvent<"u"&&t.dispatchEvent(new PointerEvent("pointerup",{...i,pointerId:1,isPrimary:!0})),t.dispatchEvent(new MouseEvent("mouseup",i)),t.dispatchEvent(new MouseEvent("click",i))}function N(t){const e=t instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:HTMLInputElement.prototype,r=Object.getOwnPropertyDescriptor(e,"value");return o=>{r?.set?r.set.call(t,o):t.value=o}}function G(t,e){if(!(t instanceof HTMLInputElement)&&!(t instanceof HTMLTextAreaElement))throw new Error(`playwright-shim: fill() target is not an <input>/<textarea> (got <${t.tagName.toLowerCase()}>)`);t.focus(),N(t)(e),t.dispatchEvent(new Event("input",{bubbles:!0})),t.dispatchEvent(new Event("change",{bubbles:!0}))}const l=new Set(["Alt","Control","Meta","Shift"]);function p(t){return t!=="ControlOrMeta"?t:/Mac|iPhone|iPad/.test(navigator.platform)?"Meta":"Control"}function B(t){return/^[a-z]$/i.test(t)?`Key${t.toUpperCase()}`:/^[0-9]$/.test(t)?`Digit${t}`:t===" "?"Space":t}function K(t){const e=document.activeElement;return e instanceof HTMLElement&&t.contains(e)?e:t}function f(t,e,r,o){K(t).dispatchEvent(new KeyboardEvent(e,{key:r,code:B(r),bubbles:!0,cancelable:!0,altKey:o.has("Alt"),ctrlKey:o.has("Control"),metaKey:o.has("Meta"),shiftKey:o.has("Shift")}))}function F(t){const e=new Set,r=async i=>{const n=p(i);e.add(n),f(t,"keydown",n,e)},o=async i=>{const n=p(i);f(t,"keyup",n,e),e.delete(n)};return{down:r,up:o,async press(i){const n=i.split("+").map(p),s=n.filter(c=>l.has(c)),a=n.find(c=>!l.has(c));for(const c of s)await r(c);a&&(await r(a),await o(a));for(const c of s.reverse())await o(c)}}}function R(t){const e=[];function r(o,i){const n=v(o);if(n){const a=S(o);e.push(`${" ".repeat(i)}- ${n}${a?` "${a}"`:""}`)}const s=n?i+1:i;for(const a of Array.from(o.children))r(a,s)}for(const o of Array.from(t.children))r(o,0);return e.join(`
2
- `)}function u(t,e){const r=i=>{const n=t()[0];if(!n)throw new Error(`playwright-shim: ${i}() found no element for ${e}`);return n};return b({async click(){_(r("click"))},async fill(i){G(r("fill"),i)},async textContent(){const i=t()[0];return i?i.textContent??null:null},async evaluate(i,n){return i(r("evaluate"),n)},async count(){return t().length},async waitFor(i){const n=i?.timeout??5e3,s=i?.state??"visible",a=Date.now()+n;for(;;){const c=t()[0];if(c&&(s==="attached"||L(c)))return;if(Date.now()>=a)throw new Error(`playwright-shim: waitFor() timed out after ${n}ms waiting for ${e} to be ${s}`);await new Promise(P=>setTimeout(P,50))}},first(){return u(()=>t().slice(0,1),`${e}.first()`)},nth(i){return u(()=>{const n=t()[i];return n?[n]:[]},`${e}.nth(${i})`)},async ariaSnapshot(){return R(r("ariaSnapshot"))}},"Locator")}async function D(t,e){if(typeof t=="function")return t(e);if(typeof t=="string")return new Function("arg",`return (${t})(arg)`)(e);throw new Error("playwright-shim: evaluate() requires a function or a function-source string")}function A(t){const e={keyboard:F(t),evaluate:async(r,o)=>D(r,o),locator:r=>u(()=>Array.from(t.querySelectorAll(r)),`locator(${JSON.stringify(r)})`),getByRole:(r,o)=>u(()=>x(t,r,o),`getByRole(${JSON.stringify(r)}${o?.name!==void 0?`, {name: ${JSON.stringify(String(o.name))}}`:""})`),getByText:r=>u(()=>I(t,r),`getByText(${JSON.stringify(String(r))})`),getByTestId:r=>u(()=>C(t,r),`getByTestId(${JSON.stringify(String(r))})`),click:async r=>{await e.locator(r).click()},fill:async(r,o)=>{await e.locator(r).fill(o)},ariaSnapshot:async()=>R(t)};return b(e,"Page")}const Ee="workspace.command";typeof window<"u"&&(M(w),window.__vgaiGameEval=async(t,e)=>{const r=await $({src:t,...e===void 0?{}:{instance:e}});if(!r.ok)throw new Error(r.error??"game-eval failed");return r.data?.result??null});async function $(t){if(!y()&&!g())return d();const e=t.src;if(typeof e!="string")return{ok:!1,error:`game-eval requires a string "src" (the step's toString())`};const r=h();if(!r)return{ok:!1,error:"game-eval: no play-mode game container is mounted yet",data:{code:"GAME_EVAL_ERROR"}};const o=t.instance,i=typeof o=="string"?o:void 0;let n;try{n=new Function("scope",`return (${e})(scope)`)}catch(a){return{ok:!1,error:`game-eval: failed to reconstruct the step function from source — ${a instanceof Error?a.message:String(a)}`,data:{code:"GAME_EVAL_ERROR"}}}const s={page:A(r),modules:k(i),instanceId:i??w()};try{const a=await n(s),c=a===void 0?null:a;try{JSON.stringify(c)}catch{return{ok:!1,error:`game-eval: the step returned an unserializable value (${Object.prototype.toString.call(c)}) — return plain data (numbers, strings, arrays, plain objects), not live module objects.`,data:{code:"GAME_EVAL_UNSERIALIZABLE"}}}return{ok:!0,data:{result:c}}}catch(a){return{ok:!1,error:`game-eval step failed: ${a instanceof Error?a.stack??a.message:String(a)}`,data:{code:"GAME_EVAL_ERROR"}}}}async function H(t){if(!y()&&!g())return d();const e=t.src;if(typeof e!="string")return{ok:!1,error:`page-script requires a string "src" (the step's toString())`};const r=h();if(!r)return{ok:!1,error:"page-script: no play-mode game container is mounted yet",data:{code:"PAGE_SCRIPT_ERROR"}};let o;try{o=new Function("page",`return (${e})(page)`)}catch(n){return{ok:!1,error:`page-script: failed to reconstruct the step function from source — ${n instanceof Error?n.message:String(n)}`,data:{code:"PAGE_SCRIPT_ERROR"}}}const i=A(r);try{const n=await o(i);return{ok:!0,data:{result:n===void 0?null:n}}}catch(n){return n instanceof E?{ok:!1,error:n.message,data:{code:"PAGE_SHIM_UNSUPPORTED",member:n.member,supported:[...n.supported]}}:{ok:!1,error:`page-script: step threw — ${n instanceof Error?n.message:String(n)}`,data:{code:"PAGE_SCRIPT_ERROR"}}}}const be={"game-eval":{timeoutMs:6e4,derivedRefresh:"always",handle:$},"page-script":{timeoutMs:6e4,derivedRefresh:"always",handle:H}};export{be as commands,Ee as point};
@@ -1 +0,0 @@
1
- import{B as d}from"./index-BRJMIUK0.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const l="vgai-mount";let i=null;function u(t){return globalThis.__vgaiGameModuleUrls?.(t)??[]}function S(t){i=t}function h(t){const o=t.replace(/^\/+/,"");if(!o.startsWith("src/")||/[?#]/.test(o))throw new Error(`modules("${t}"): pass the project-relative served path, starting "src/" with its real extension and no query — e.g. modules("src/sim/host.ts").`);return o}function m(t){const o=u(t).flatMap(r=>{const{pathname:e,searchParams:a}=new URL(r);if(a.get(l)!==t)return[];const s=e.lastIndexOf("/src/");return s===-1?[]:[e.slice(s+1)]});return[...new Set(o)].sort()}function b(t){const o=r=>p(r,w(r,t));return Object.defineProperty(o,"loaded",{enumerable:!0,get:()=>{const r=t??i?.();return r?m(r):[]}}),o}const f=new Set(["then","catch","finally","constructor","toJSON"]);function p(t,o){return new Proxy(o,{get(r,e){if(e==="then"||e==="catch"||e==="finally")return Reflect.get(r,e).bind(r);if(typeof e=="symbol"||f.has(e))return Reflect.get(r,e);throw new Error(`modules("${t}") returns a PROMISE — it dynamic-imports the running mount's own copy of that module — so \`.${String(e)}\` reads a promise, not your export. Await it: \`const m = await modules("${t}"); m.${String(e)}\` (and make the \`game.run\` callback \`async\`).`)}})}async function w(t,o){const r=h(t),e=o??i?.();if(!e)throw new Error(`modules(): no play instance is mounted — enter Play first (${d("play")}).`);const a=`/${r}`,s=u(e).find(n=>{const c=new URL(n);return c.pathname.endsWith(a)&&c.searchParams.get(l)===e});if(!s){const n=m(e);throw new Error(`modules("${t}"): the running mount has not loaded that module (nothing to reach — a module the game never imported has no live instance). Loaded project modules (also readable as modules.loaded): ${n.join(", ")||"(none yet — play first)"}`)}try{return await import(s)}catch(n){throw new Error(`modules("${t}") could not load ${s} — the path must be the exact served file (check the extension: .ts vs .tsx). ${n instanceof Error?n.message:String(n)}`)}}export{b as createGameModuleResolver,w as importGameModule,m as loadedGameModulePaths,h as normalizeGameModulePath,S as setFocusedInstanceProvider};
@@ -1 +0,0 @@
1
- import{S as B,u as N,p as z}from"./index-OZVqp6xS.js";import{decode as d,encode as x}from"./index-Da9JhEvW.js";const R=10,D=11,k=12,S=13,W=14,J=15,P=17,M=18,A=2e3,u=[],_=new WeakMap,y=new WeakMap;let I={latencyMs:0,jitterMs:0,packetLoss:0};function $(e,t,s){const{latencyMs:n,jitterMs:o}=I,r=performance.now(),i=t==="in"?e.dueIn:e.dueOut;if(n<=0&&o<=0&&i<=r){s();return}const c=Math.max(i,r+n+Math.random()*o);t==="in"?e.dueIn=c:e.dueOut=c,setTimeout(s,c-r)}const w=new Map,p=[];let L=0;const O=new Set;let g={start:0,msgsIn:0,msgsOut:0,bytesIn:0,bytesOut:0},h={msgsIn:0,msgsOut:0,bytesIn:0,bytesOut:0};function f(){for(const e of O)e()}function E(e){const t=e-g.start;t<1e3||(h=t<2e3?{...g}:{msgsIn:0,msgsOut:0,bytesIn:0,bytesOut:0},g={start:e,msgsIn:0,msgsOut:0,bytesIn:0,bytesOut:0})}function a(e,t,s,n,o){const r=Date.now();E(r),t==="in"?(g.msgsIn+=1,g.bytesIn+=n):(g.msgsOut+=1,g.bytesOut+=n);let i=e.types.get(s);i||(i={type:s,countIn:0,countOut:0,bytesIn:0,bytesOut:0},e.types.set(s,i)),t==="in"?(i.countIn+=1,i.bytesIn+=n):(i.countOut+=1,i.bytesOut+=n),o!==void 0&&(i.last=o),L+=1,p.push({seq:L,time:performance.now(),direction:t,type:s,size:n}),p.length>A&&p.splice(0,p.length-A)}function b(e,t){const s=e;return d.stringCheck(s,t)?d.string(s,t):String(d.number(s,t))}function G(e,t){const s=t[0],n={offset:1},o=t;try{if(s===R)d.utf8Read(o,n,t[n.offset++]),d.utf8Read(o,n,t[n.offset++])==="schema"&&!e.serializer&&(e.serializer=new B,t.byteLength>n.offset&&e.serializer.handshake(t,n)),e.state="connected",e.joinedAt??=Date.now(),a(e,"in","join",t.byteLength);else if(s===D){const r=d.number(o,n),i=d.string(o,n);e.error=`${r}: ${i}`,e.state="error",a(e,"in","error",t.byteLength)}else if(s===k)a(e,"in","leave",t.byteLength);else if(s===W)e.serializer?.setState(t,n),e.stateBytes=t.byteLength,a(e,"in","state",t.byteLength);else if(s===J)e.serializer?.patch(t,n),e.patches+=1,e.patchBytes+=t.byteLength,a(e,"in","patch",t.byteLength);else if(s===S){const r=b(t,n),i=t.byteLength>n.offset?N(t,{start:n.offset}):void 0;a(e,"in",r,t.byteLength,i)}else if(s===P)a(e,"in",b(t,n),t.byteLength);else if(s===M){e.pingSentAt!==null&&(e.rttMs=Math.round(performance.now()-e.pingSentAt)),e.pingSentAt=null;const r=y.get(e);y.delete(e),r&&e.rttMs!==null&&r(e.rttMs),a(e,"in","ping",t.byteLength)}}catch(r){e.error||(e.error=`the editor could not read a frame (code ${s}): ${String(r)}`)}f()}function q(e,t){const s=t instanceof Uint8Array?t:t instanceof ArrayBuffer?new Uint8Array(t):ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):null;if(!s||s.byteLength===0)return;const n=s[0],o={offset:1};try{if(n===S){const r=b(s,o),i=s.byteLength>o.offset?N(s,{start:o.offset}):void 0;a(e,"out",r,s.byteLength,i)}else n===P?a(e,"out",b(s,o),s.byteLength):n===M?(e.pingSentAt=performance.now(),a(e,"out","ping",s.byteLength)):n===R?a(e,"out","join",s.byteLength):n===k&&a(e,"out","leave",s.byteLength)}catch{}f()}function F(e){let t;try{t=new URL(e,location.href)}catch{return null}const s=t.searchParams.get("sessionId"),n=t.pathname.split("/").filter(Boolean);if(!s||n.length<2)return null;const o=n[n.length-1];return{processId:n[n.length-2],roomId:o,sessionId:s,endpoint:`${t.protocol}//${t.host}`}}function V(e,t){const s=F(t);if(!s)return;const n={...s,state:"connecting",joinedAt:null,closedAt:null,closeCode:null,error:null,serializer:null,pingSentAt:null,rttMs:null,stateBytes:0,patches:0,patchBytes:0,types:new Map,socket:e,dueIn:0,dueOut:0};u.push(n),_.set(e,n),e.addEventListener("message",r=>{r.data instanceof ArrayBuffer&&G(n,new Uint8Array(r.data))}),e.addEventListener("close",r=>{n.state="disconnected",n.closedAt=Date.now(),n.closeCode=r.code,f()}),e.addEventListener("error",()=>{n.state="error",n.error??="the socket reported an error",f()});const o=e.send.bind(e);e.send=r=>{q(n,r),$(n,"out",()=>{e.readyState===e.OPEN&&o(r)})},f()}function Y(e,t){const s=typeof e=="string"?e:e instanceof URL?e.href:e.url;/\/matchmake\//.test(s)&&t.clone().json().then(n=>{const o=n.room??n;typeof o.roomId=="string"&&typeof o.name=="string"&&(w.set(o.roomId,o.name),f())}).catch(()=>{})}function Z(){const e=window;if(e.__vgaiNetworkObserver)return;e.__vgaiNetworkObserver=!0;const t=window.WebSocket;if(typeof t=="function"){const n=class extends t{constructor(o,r){super(o,r),V(this,String(o))}set onmessage(o){const r=_.get(this);super.onmessage=o&&r?i=>$(r,"in",()=>o.call(this,i)):o}get onmessage(){return super.onmessage}};window.WebSocket=n}const s=window.fetch;typeof s=="function"&&(window.fetch=async(n,o)=>{const r=await s(n,o);return Y(n,r),r})}function j(e){if(typeof e=="string")return e;if(typeof e=="function")return"schema";if(e&&typeof e=="object"){const[t,s]=Object.entries(e)[0]??[];if(t)return`${t}<${j(s)}>`}return"unknown"}function H(e,t){let s=e,n=null,o=null;for(const r of t){if(s==null)return null;const i=s.constructor?.[Symbol.metadata];if(i&&typeof i[r]=="number")o=i[i[r]]?.type??null,n=o&&typeof o=="object"?Object.values(o)[0]:null,s=s[r];else{o=n,n=null;const c=s;s=c.get?c.get(String(r)):c.at?c.at(Number(r)):void 0}}return o===null?null:j(o)}function U(e){return`${e.endpoint.replace(/^ws/,"http")}/monitor/api`}async function T(e){const t=await fetch(e).catch(()=>null);return!t||!t.ok?null:await t.json().catch(()=>null)}async function m(e,t,s,n){const o=l();if(!o)throw new Error("No room is observed.");const r=new URLSearchParams({roomId:n??o.roomId,method:e,args:JSON.stringify(t)}),i=await fetch(`${U(o)}/room/call?${r}`);if(i.status===404)throw new Error(`The room server serves no Monitor view, so ${s} has nowhere to go (its \`server\` configuration sets VGAI_ROOM_MONITOR=1).`);if(!i.ok)throw new Error(`The room server refused ${s} (${i.status}).`)}function l(){for(let e=u.length-1;e>=0;e-=1)if(u[e].state!=="disconnected")return u[e];return u[u.length-1]??null}function K(e){const t=e?.serializer?.getState();return t?.toJSON?t.toJSON():t}function C(){return E(Date.now()),{msgsInPerSec:h.msgsIn,msgsOutPerSec:h.msgsOut,bytesInPerSec:h.bytesIn,bytesOutPerSec:h.bytesOut}}const ee={peers(){return u.filter(e=>e.state==="connected").map(e=>({id:e.sessionId,label:`${w.get(e.roomId)??e.roomId} (this client)`}))},networkId:()=>null,authority:()=>"server",editable:()=>!1,getConnectionState(){return l()?.state??"disconnected"},getRoomInfo(){const e=l();return e?{roomId:e.roomId,sessionId:e.sessionId,roomName:w.get(e.roomId)??""}:null},getReplicationStats(){const t=l()?.serializer?.decoder?.root?.refs,s=C();return{entities:t?.size??0,msgsInPerSec:s.msgsInPerSec,msgsOutPerSec:s.msgsOutPerSec}},subscribe(e){return O.add(e),()=>{O.delete(e)}},getStateSnapshot:()=>K(l()),messageEvents(e=0){return p.filter(t=>t.seq>e)},getRates:C,sendMessage(e,t){const s=l();if(!s||s.state!=="connected")throw new Error("No room is connected to send into.");const n=new Uint8Array(6+e.length*3);n[0]=S;const o={offset:1};x.string(n,e,o);const r=t===void 0?new Uint8Array(0):new Uint8Array(z(t)),i=new Uint8Array(o.offset+r.byteLength);i.set(n.subarray(0,o.offset)),i.set(r,o.offset),s.socket.send(i)},getConditioning:()=>({...I}),setConditioning(e){I={latencyMs:Math.max(0,e.latencyMs),jitterMs:Math.max(0,e.jitterMs),packetLoss:0},f()},getConditioningLimits:()=>({packetLoss:"A WebSocket is reliable and ordered: a lost packet is resent, so loss is not simulated here."}),ping(){const e=l();return!e||e.state!=="connected"?Promise.reject(new Error("No room is connected to ping.")):new Promise((t,s)=>{y.set(e,t),setTimeout(()=>{y.get(e)===t&&(y.delete(e),s(new Error("The server did not answer the ping within 5 s.")))},5e3),e.socket.send(new Uint8Array([M]))})},async inspectServer(e){const t=l();if(!t)return null;const s=U(t),n=await T(`${s}/`);if(!n)return null;const o=e??t.roomId,r=await T(`${s}/room?roomId=${encodeURIComponent(o)}`),i=c=>{const v=Number(c);return Number.isFinite(v)?v:null};return{rooms:(n.rooms??[]).map(c=>({roomId:c.roomId,name:c.name,clients:c.clients,maxClients:i(c.maxClients),locked:c.locked===!0,elapsedMs:c.elapsedTime??0})),connections:n.connections??0,cpuPercent:typeof n.cpu=="number"&&Number.isFinite(n.cpu)?n.cpu:null,memory:n.memory?.usedMemMb!==void 0&&n.memory.totalMemMb!==void 0?{usedMb:n.memory.usedMemMb,totalMb:n.memory.totalMemMb}:null,room:r?{roomId:o,clients:(r.clients??[]).map(c=>({sessionId:c.sessionId,elapsedMs:c.elapsedTime})),stateBytes:r.stateSize??0,...r.state!==void 0?{state:r.state}:{}}:null}},disconnectClient:(e,t)=>m("_forceClientDisconnect",[e],"the disconnect",t),editServerState:(e,t,s)=>m("_editStateProperty",[e,t],"the state edit",s),deleteServerState:(e,t)=>m("_deleteStateProperty",[e],"the state delete",t),sendToClient:(e,t,s,n)=>m("_sendMessageToClient",[e,t,s],"the send",n),broadcast:(e,t,s)=>m("broadcast",[e,t],"the broadcast",s),disposeRoom:e=>m("disconnect",[],"the dispose",e),clearTraffic(){for(const e of u)e.types.clear(),e.patches=0,e.patchBytes=0;f()},stateFieldType(e){return H(l()?.serializer?.getState(),e)},getTrafficByType(){const e=l();return e?[...e.types.values()].map(({type:t,countIn:s,countOut:n,bytesIn:o,bytesOut:r})=>({type:t,countIn:s,countOut:n,bytesIn:o,bytesOut:r})):[]},getServerConfig(){const e=l();if(!e)return null;const t=w.get(e.roomId);return t?{endpoint:e.endpoint,roomName:t}:{endpoint:e.endpoint}}};export{Z as i,ee as o};
@@ -1 +0,0 @@
1
- import{R as N,E as P}from"./rrweb-Cd2ifIRP.js";import{O as C,Q as L,U as O,V as U}from"./index-BRJMIUK0.js";import{B as F,O as B,W as D,C as I,Q as A,I as W,a as $,U as H,A as V,b as q}from"./output-DK8waum9.js";function x(e,r){const o=new URLSearchParams({replay:e,file:r});return`${C}/recording/replay-file?${o}`}async function T(e,r){const o=await fetch(x(e,r));if(!o.ok)throw new Error(`could not load replay ${r}: HTTP ${o.status}`);return o.text()}function z(e){return new Promise((r,o)=>{const s=new FileReader;s.onload=()=>r(String(s.result)),s.onerror=()=>o(s.error??new Error("could not read replay asset")),s.readAsDataURL(e)})}async function j(e){let r=await T(e,"events.json");const o=new Set(r.match(/https:\/\/replay-assets\.invalid\/\d{6}\.(?:png|jpg|webp|gif|svg)/g)??[]),s=await Promise.all([...o].map(async a=>{const i=a.split("/").at(-1),n=await fetch(x(e,`assets/${i}`));if(!n.ok)throw new Error(`could not load replay asset ${i}`);return[a,await z(await n.blob())]}));for(const[a,i]of s)r=r.replaceAll(a,i);const t=JSON.parse(r);if(!Array.isArray(t)||t.length===0)throw new Error("replay contains no DOM events");return t}function G(e,r,o){return Math.max(0,e.videoStartEpochMs+o-r[0].timestamp)}function Q(e,r,o){const s=e.videoStartEpochMs+o;let t={rect:e.canvas,drawingWidth:e.canvas.drawingWidth,drawingHeight:e.canvas.drawingHeight};for(const a of r){if(a.timestamp>s)break;a.type===P.Custom&&a.data.tag==="vgai-canvas-layout"&&a.data.payload&&typeof a.data.payload=="object"&&"rect"in a.data.payload&&"drawingWidth"in a.data.payload&&"drawingHeight"in a.data.payload&&(t=a.data.payload)}return t}async function _(e,r){await new Promise((o,s)=>{const t=()=>{clearTimeout(n),e.removeEventListener("loadeddata",a),e.removeEventListener("error",i)},a=()=>{t(),o()},i=()=>{t(),s(new Error("replay video failed to load"))},n=setTimeout(()=>{t(),s(new Error("replay video load timed out"))},15e3);e.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA?a():(e.addEventListener("loadeddata",a,{once:!0}),e.addEventListener("error",i,{once:!0}))}),!(Math.abs(e.currentTime-r)<.001)&&await new Promise((o,s)=>{const t=()=>{clearTimeout(n),e.removeEventListener("seeked",a),e.removeEventListener("error",i)},a=()=>{t(),o()},i=()=>{t(),s(new Error("replay video seek failed"))},n=setTimeout(()=>{t(),s(new Error("replay video seek timed out"))},15e3);e.addEventListener("seeked",a,{once:!0}),e.addEventListener("error",i,{once:!0}),e.currentTime=r})}async function J(e){e.fonts.size>0&&e.fonts.status!=="loaded"&&await Promise.race([e.fonts.ready.then(()=>{}),new Promise(r=>setTimeout(r,3e3))]),await Promise.all(Array.from(e.images,r=>r.decode().catch(()=>{})))}async function S(e,r){const[o,s]=await Promise.all([T(e,"manifest.json"),j(e)]),t=JSON.parse(o);if(t.status!=="complete"||t.format!=="canvas-dom"||t.version!==1||!t.capture||typeof t.capture.durationMs!="number")throw new Error("replay manifest is incomplete or unsupported");const a=document.createElement("div");a.setAttribute("data-vgai-replay-block",""),Object.assign(a.style,{position:"fixed",left:"-100000px",top:"0",width:`${t.viewport.width}px`,height:`${t.viewport.height}px`,overflow:"hidden",pointerEvents:"none"});const i=document.createElement("div");a.append(i),document.body.append(a);const n=document.createElement("video");n.muted=!0,n.preload="auto",n.playsInline=!0,n.src=x(e,"video"),a.append(n);let w;try{w=new N(s,{root:i,showWarning:!1,showDebug:!1,mouseTail:!1,UNSAFE_replayCanvas:!0,insertStyleRules:["[data-vgai-replay-video] { visibility: hidden !important; }"]});const f=w;return await r({manifest:t,async render(u){const h=Math.max(0,Math.min(u,t.capture.durationMs));await _(n,h/1e3),f.pause(G(t,s,h)),await J(f.iframe.contentDocument);const y=f.getMirror().getNode(t.canvas.nodeId),p=f.getMirror().getNode(t.surfaceNodeId);if(!y||y.tagName!=="CANVAS")throw new Error("replay canvas placeholder is unavailable");if(!p||typeof p.getBoundingClientRect!="function")throw new Error("replay game surface is unavailable");const c=y,g=p;c.setAttribute("data-vgai-root-surface","true");const E=Q(t,s,h);c.width=E.drawingWidth,c.height=E.drawingHeight;const d=c.getContext("2d");if(!d)throw new Error("replay canvas has no 2D context");return d.drawImage(n,0,0,c.width,c.height),c.style.setProperty("visibility","visible","important"),g}})}finally{n.pause(),w?.destroy(),n.removeAttribute("src"),n.load(),a.remove()}}async function Z(e,r){return S(e,async({manifest:o,render:s})=>{const t=Math.max(0,Math.min(r,o.capture.durationMs)),a=await s(t),i=await L(a),n=a.getBoundingClientRect();return{...i,replayPath:e,positionMs:t,width:Math.max(1,Math.round(n.width)),height:Math.max(1,Math.round(n.height))}})}async function ee(e){const r=e.fps??30;if(!Number.isInteger(r)||r<1||r>60)throw new Error("replay export fps must be an integer from 1 to 60");return S(e.replayPath,async({manifest:o,render:s})=>{const t=e.startMs??0,a=e.endMs??o.capture.durationMs;if(!Number.isFinite(t)||!Number.isFinite(a)||t<0||a<=t||a>o.capture.durationMs||a-t>3e5)throw new Error("replay export requires a valid recorded interval of at most five minutes");const i=t/1e3,n=a/1e3,w=Math.ceil((n-i)*r),f=await s(t),u=document.createElement("canvas"),h=f.getBoundingClientRect();u.width=Math.max(1,Math.round(h.width)),u.height=Math.max(1,Math.round(h.height));const y={width:u.width,height:u.height},p=new F,c=new B({target:p,format:new D}),g=new I(u,{codec:"vp9",quality:new A({bitrate:3e6})});c.addVideoTrack(g,{frameRate:r});const E=new W({source:new H(x(e.replayPath,"video")),formats:[$]});try{const d=await E.getPrimaryAudioTrack();if(o.capture.audio&&!d)throw new Error("recorded audio track is missing");const M=d?new V({codec:"opus",quality:new A({bitrate:128e3})}):null;M&&c.addAudioTrack(M),await c.start();const R=async()=>{if(!(!M||!d)){for await(const l of new q(d).samples(i,n))try{const m=Math.max(0,Math.ceil((i-l.timestamp)*l.sampleRate)),v=Math.min(l.numberOfFrames,Math.ceil((n-l.timestamp)*l.sampleRate));if(v<=m)continue;const b=l.trim(m,v);try{b.setTimestamp(Math.max(0,b.timestamp-i)),await M.add(b)}finally{b.close()}}finally{l.close()}M.close()}},k=async()=>{const l=O();for(let m=0;m<w;m++){const v=m/r;await U(await s(t+v*1e3),u,{size:y,snapshots:l}),await g.add(v,Math.min(1/r,n-i-v),{keyFrame:m%(r*2)===0})}g.close()};if(await Promise.all([R(),k()]),await c.finalize(),!p.buffer)throw new Error("replay encoder produced no output");return{blob:new Blob([p.buffer],{type:"video/webm"}),frames:w,fps:r,durationMs:a-t,...y,audio:d!==null}}catch(d){throw c.state!=="finalized"&&await c.cancel(),d}finally{E.dispose()}})}export{Z as c,ee as e};
@@ -1 +0,0 @@
1
- import{a3 as a}from"./index-BRJMIUK0.js";import{s as n,n as s}from"./command-results-CUQD49AB.js";import{g as m,i as p}from"./play-mode-DICV4cKP.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./adapter-runtime-bindings-4cmsRvRh.js";import"./native-debug-module-2_HVupdg.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-P0_YQGWd.js";import"./contract-system-adapters-Bic_7sev.js";import"./game-contract-seams-BnPFGLll.js";import"./seeded-random-BgCwIAAU.js";import"./game-audio-CaGKzia4.js";import"./game-network-Ct2FQYmu.js";import"./index-OZVqp6xS.js";import"./index-Da9JhEvW.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./index-bQE2NA0D.js";import"./live-project-verbs-C3LzprCe.js";import"./capability-coverage-DZ-onC5j.js";import"./edit-mode-authoring-DeCxPcHM.js";import"./json-history-resource-DwS10tqD.js";import"./binding-resolver-dE0GnZT5.js";import"./adapter-surface-Y37Nzcyw.js";import"./entry-adjudication-Dc18TIqT.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./realm-services-CnY105XU.js";import"./canvas-entry-runtime-UNYuSfG0.js";import"./three-ingest-runtime-B7rtg3QE.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./relative-path-guard-GiM7Lsz8.js";import"./react-root-BHA-cdrW.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./active-ingest-DA426a81.js";import"./ingest-source-persistence-Dmdo-UBp.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-vgxsTyj4.js";import"./mounted-authoring-Clftxx0x.js";import"./entity-object-JmYMfLsx.js";import"./user-data-Bpj7diUS.js";import"./workspace-arrangement-BdAlBwvd.js";import"./three-contract-Dkt6PmWY.js";import"./three-TCuY32m_.js";import"./editor-layers-BDJnAAzj.js";import"./component-instance-root-B0C5oNEm.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./three-authoring-adapter-htbnVej2.js";import"./source-persistence-backend-CwLYVPXj.js";import"./three-projection-core-CG01r5Ta.js";import"./body-marks-RKb_LTwL.js";import"./user-data-dHvLdpwM.js";import"./object-marks-DwvIEBOK.js";import"./structural-ids-Br2zjINh.js";import"./object3d-authoring-subject-BDrxd1GA.js";import"./r3f-physics-binding-DzrbpqjM.js";import"./deferred-ingest-play-BdR4qGk6.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-DOjv2pYm.js";import"./board-guides-BEKPgD9M.js";import"./relative-import-specifier-BFKIWEWs.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-Dr4qvDpJ.js";import"./inference-diagnostics-xecGdohW.js";import"./writer-tw6EcuVO.js";import"./three-state-DwFE3ay2.js";import"./editor-shell-store-ChLcVeNB.js";import"./output-pass-HurwNl0G.js";import"./viewport-door-Bj_ZIP85.js";const Ve="workspace.command",Be={"list-gameplay-state":{derivedRefresh:"if-content-changed",handle:()=>{const e=a().debug;return e?{ok:!0,data:{providers:e.providers()}}:p()?{ok:!0,data:{providers:[]}}:s()}},"inspect-gameplay-state":{derivedRefresh:"if-content-changed",handle:e=>{const t=a().debug;if(!t)return p()?{ok:!0,data:{state:null}}:s();const r=e.keys;try{const o={};if(r&&r.length>0)for(const i of r)o[i]=t.state(i);else Object.assign(o,t.stateAll());return{ok:!0,data:{state:o}}}catch(o){return n(o)}}},"list-debug-commands":{derivedRefresh:"if-content-changed",handle:()=>{const e=a().debug;return e?{ok:!0,data:{commands:e.commands()}}:p()?{ok:!0,data:{commands:[]}}:s()}},"invoke-debug-command":{derivedRefresh:"always",handle:async e=>{const t=a().debug;if(!t)return p()?{ok:!1,error:`debug: no command registered under "${e.name}" — this game exposes no debug adapter`,data:{code:"DEBUG_COMMAND_NOT_REGISTERED",registered:[]}}:s();try{return{ok:!0,data:{result:await t.invoke(e.name,e.args??[])}}}catch(r){return n(r)}}},"inject-input":{derivedRefresh:"none",handle:e=>{const t=m();if(!t)return{ok:!1,error:"not in play mode — start play before injecting input"};let r;try{r=t.getInputTarget(e.worldId)}catch(o){return n(o)}if(!r)return{ok:!1,error:"this play session has no input door: no root entry exports `debug.input`"};try{if(e.kind==="action"){const i=e.atTick;return typeof i=="number"?(r.scheduleActionAtTick(i,e.action,e.value),{ok:!0,data:{scheduled:!0,tick:i}}):{ok:!0,data:r.setVirtualAction(e.action,e.value)}}const o=e.sourceId;switch(e.kind){case"axis":r.injectAxis(o,e.value);break;case"vector2":r.injectVector2(o,e.value);break;case"pointerDelta":r.injectPointerDelta(o,e.value);break;case"pointerPosition":r.injectPointerPosition(o,e.value);break;default:return{ok:!1,error:`unknown injection kind "${e.kind}"`}}return{ok:!0,data:{delivered:!0}}}catch(o){return n(o)}}},"set-time-scale":{derivedRefresh:"none",handle:e=>{const t=m();return t?(t.loop.timeScale=e.timeScale,{ok:!0,data:{timeScale:t.loop.timeScale}}):{ok:!1,error:"not in play mode — start play before setting time-scale"}}},"set-seed":{derivedRefresh:"none",handle:e=>{const t=m();return t?t.determinismDeclared?t.random?(t.random.reseed(e.seed),{ok:!0,data:{seed:t.random.seed}}):{ok:!1,error:"this play session has no first-party ctx.random to reseed"}:{ok:!1,error:"this project's manifest does not declare determinism.seededRandom — play.seed.set has no documented contract to reseed against (D15)",data:{code:"DETERMINISM_NOT_DECLARED"}}:{ok:!1,error:"not in play mode — start play before setting the seed"}}},"run-ticks":{derivedRefresh:"none",handle:async e=>{const t=m();if(!t)return{ok:!1,error:"not in play mode — start play before running ticks"};if(!t.runTicks)return{ok:!1,error:"this play session has no first-party Game to run ticks on",data:{code:"RUN_TICKS_UNAVAILABLE"}};try{const r=e.n,o=e.render;return t.runTicksSettled?await t.runTicksSettled(r,o?{render:o}:void 0):t.runTicks(r,o?{render:o}:void 0),{ok:!0}}catch(r){return n(r)}}}};export{Be as commands,Ve as point};
@@ -1 +0,0 @@
1
- .vgai-generation-gallery{display:flex;height:100%;flex-direction:column;color:var(--vgai-content-primary);container-type:size}.vgai-generation-gallery .vgai-toolbar{flex:0 0 auto}.vgai-generation-gallery-bar{gap:var(--vgai-space-2)}.vgai-generation-gallery-alert{margin:var(--vgai-space-3)}.vgai-generation-gallery-empty{margin:auto;max-width:420px;text-align:center}.vgai-generation-grid{display:grid;min-height:0;flex:1;align-content:start;gap:var(--vgai-space-3);padding:var(--vgai-space-3);overflow-y:auto;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));grid-auto-rows:max-content}@container (max-width: 380px){.vgai-generation-grid{grid-template-columns:1fr}}.vgai-generation-card{display:flex;flex-direction:column;overflow:hidden;border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-md);background:var(--vgai-surface-panel)}.vgai-generation-card[data-state=failed],.vgai-generation-card[data-state=save-failed]{border-color:var(--vgai-danger-muted)}.vgai-generation-card[data-state=ready]{border-color:var(--vgai-boundary-strong)}.vgai-generation-card-media{display:grid;flex-shrink:0;height:160px;max-height:160px;gap:var(--vgai-stroke-active);background:var(--vgai-bg-inset);grid-template-columns:1fr}.vgai-generation-card-media[data-outputs="2"],.vgai-generation-card-media[data-outputs="3"],.vgai-generation-card-media[data-outputs="4"]{grid-template-columns:1fr 1fr}.vgai-generation-output{display:flex;min-width:0;min-height:0;align-items:center;justify-content:center;overflow:hidden;padding:var(--vgai-space-1)}.vgai-generation-output-media{display:block;width:100%;height:100%;max-width:100%;max-height:100%;border-radius:var(--vgai-radius-sm);object-fit:contain}.vgai-generation-output .vgai-generation-output-open.vgai-btn{display:flex;width:100%;height:100%;max-height:100%;min-height:0;align-items:center;justify-content:center;padding:0;border:0;background:transparent;cursor:zoom-in}video.vgai-generation-output-media{width:100%}.vgai-generation-output-audio{display:flex;width:100%;height:100%;flex-direction:column;align-items:center;justify-content:center;gap:var(--vgai-space-2);padding:var(--vgai-space-2)}.vgai-generation-output-audio audio{width:100%}.vgai-generation-output-file{display:flex;flex-direction:column;align-items:center;gap:var(--vgai-space-2);padding:var(--vgai-space-3);color:var(--vgai-content-muted);text-align:center;overflow-wrap:anywhere}.vgai-generation-state-media{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--vgai-space-2);padding:var(--vgai-space-3);text-align:center}.vgai-generation-progress{width:70%;height:4px;accent-color:var(--vgai-accent)}.vgai-generation-card-body{display:flex;min-width:0;flex-direction:column;gap:var(--vgai-space-1);padding:var(--vgai-space-3)}.vgai-generation-card-heading{display:flex;min-width:0;align-items:center;gap:var(--vgai-space-2)}.vgai-generation-card-heading>.vgai-text{min-width:0;flex:1}.vgai-generation-chip{flex:0 0 auto}.vgai-generation-chip[data-state=ready]{color:var(--vgai-success);border-color:var(--vgai-success-muted)}.vgai-generation-chip[data-state=failed],.vgai-generation-chip[data-state=save-failed]{color:var(--vgai-danger);border-color:var(--vgai-danger-muted)}.vgai-generation-chip[data-state=queued],.vgai-generation-chip[data-state=running],.vgai-generation-chip[data-state=saving],.vgai-generation-chip[data-state=new]{color:var(--vgai-accent);border-color:var(--vgai-accent-muted)}.vgai-generation-card-prompt{display:-webkit-box;margin:var(--vgai-space-1) 0 0;overflow:hidden;color:var(--vgai-content-dim);font-size:var(--vgai-font-sm);line-height:var(--vgai-leading-normal);-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2}.vgai-generation-card-alert{margin-top:var(--vgai-space-2);font-size:var(--vgai-font-sm)}.vgai-generation-card-actions{display:flex;flex-wrap:wrap;gap:var(--vgai-space-2);margin-top:var(--vgai-space-2)}@container (max-height: 300px){.vgai-generation-card-media{height:96px}.vgai-generation-card-prompt{display:none}}
@@ -1 +0,0 @@
1
- import{jR as V,jS as Y,fi as O,dB as D,gS as E,jT as Q,jU as b,aK as X,Z as p,gU as Z,fu as H,jV as ee,jW as te,jX as w,jY as ne,jZ as ae,j_ as re,j$ as ie,k0 as oe,k1 as se,d4 as le,aI as h,iz as ce,eG as P,ij as R,e1 as B,M as de,$ as _,g3 as ue,k2 as ge,k3 as me,k4 as pe,gP as ve,k5 as fe,b4 as he,k6 as xe,fc as ye,a5 as Ce,fe as Ne}from"./index-BRJMIUK0.js";import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{r as u}from"./index-nmcBqr7Y.js";import{m as je}from"./model-thumbnail-BEKPWg4l.js";import"./index-CtzuWnCS.js";import{s as T,g as x,c as M,f as U,i as Ee,b as z,p as Se,r as J,d as ke,e as Te,m as $e,h as Ae,j as be,a as we}from"./generation-jobs-BZhOMrp-.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./renderer-ownership-BovSEcLv.js";import"./studio-environment-DRxxq_QX.js";import"./user-data-Bpj7diUS.js";import"./workspace-arrangement-BdAlBwvd.js";import"./KTX2Loader-CaqVE6nY.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";function y(e){switch(e.status){case"queued":return"queued";case"running":return"running";case"failed":return"failed";case"cancelled":return"cancelled";default:return e.acceptedAt?"ready":e.accept?e.pollError?"save-failed":"saving":"no-asset"}}function F(e){const n=y(e);return n!=="queued"&&n!=="running"&&n!=="saving"}function L(e,n){return e.status==="succeeded"&&!!e.accept&&!e.acceptedAt&&!!(e.pollError??n)}const $={queued:"Queued",running:"Running",saving:"Saving","save-failed":"Couldn't save",ready:"In project","no-asset":"No file",failed:"Failed",cancelled:"Cancelled"},Re=new Map([...["png","jpg","jpeg","webp","gif","avif","svg","bmp"].map(e=>[e,"image"]),...["mp4","webm","ogv","mov","m4v"].map(e=>[e,"video"]),...["mp3","wav","ogg","oga","m4a","flac","aac"].map(e=>[e,"audio"]),...["glb","gltf","fbx","obj","stl","ply","dae","3ds","usdz","spz"].map(e=>[e,"model"])]);function Ge(e){const n=e.slice(e.lastIndexOf("/")+1).toLowerCase(),a=n.lastIndexOf(".");return a>0?n.slice(a+1):""}function q(e){return(e.outputPaths??[]).map(n=>{const a=V.find(r=>n.startsWith(`${r}/`)),i=a?Y(a,n.slice(a.length+1)):null;return{path:n,name:n.slice(n.lastIndexOf("/")+1),kind:Re.get(Ge(n))??"file",url:i}})}function G(e,n){const a=e.trim();return a.length<=n?a:`${a.slice(0,n-1).trimEnd()}…`}function j(e){const n=De(e);if(n)return n;const a=q(e);if(a.length===0)return G(e.label,64);const i=a[0],r=Oe(i.path);return a.length>1?r?`${r} · ${a.length} files`:`${a.length} files`:Ie.test(i.name)?r?`${r}/${i.name}`:G(e.label,64):i.name}const Ie=/^(image|video|audio|model|panorama|output)(-\d+)?\./;function Oe(e){const n=e.split("/").slice(-2,-1)[0];return n?/^[0-9a-f]{8,}$/i.test(n)||/^[0-9a-f-]{16,}$/i.test(n)?null:n:null}function De(e){const n=e.accept?.input;if(!n||typeof n!="object")return null;const a=n.outputName;return typeof a=="string"&&a.trim().length>0?a.trim():null}function Pe(e){for(const n of[e.accept?.input,e.poll.input]){const a=W(n,0);if(a)return a}return null}function W(e,n){if(n>3||typeof e!="object"||e===null)return null;const a=e,i=a.prompt;if(typeof i=="string"&&i.trim().length>0)return i.trim();for(const r of Object.values(a)){const l=W(r,n+1);if(l)return l}return null}function I(e){return e.operation}function Be(e){return e.mode==="managed"?"VGAI subscription":e.mode==="direct"?"Your provider key":"Mock"}function _e(e){return e.route==="mock"?"Free · mock":e.route==="managed"?e.settledCredits!==void 0?`${e.settledCredits} credits`:e.estimatedCredits!==void 0?`Up to ${e.estimatedCredits} credits`:"Credit estimate unavailable":e.settledAmount!==void 0?`$${e.settledAmount.toFixed(3)}`:e.estimatedAmount!==void 0?`Up to $${e.estimatedAmount.toFixed(3)}`:"USD estimate unavailable"}function Me(e){return e.route==="mock"?!0:e.route==="managed"?e.settledCredits!==void 0:e.settledAmount!==void 0}function Ue(e){const n=Math.floor((Date.now()-Date.parse(e))/6e4);if(!Number.isFinite(n)||n<1)return"just now";if(n<60)return`${n}m ago`;const a=Math.floor(n/60);if(a<24)return`${a}h ago`;const i=Math.floor(a/24);return i<7?`${i}d ago`:`${Math.floor(i/7)}w ago`}const S="generation:",ze="generation:create";function Je(e){return e.route==="mock"?"Free mock":e.route==="managed"?e.settledCredits!==void 0?`${e.settledCredits} credits settled`:e.estimatedCredits!==void 0?`Up to ${e.estimatedCredits} credits`:"VGAI subscription · estimate unavailable":e.settledAmount!==void 0?`$${e.settledAmount.toFixed(3)} settled`:e.estimatedAmount!==void 0?`Up to $${e.estimatedAmount.toFixed(3)}`:"BYOK · estimate unavailable"}function K(e){return O({id:`${S}${e.id}`,title:e.label,kind:"generation",workspaceRole:"authored-subject",provenance:{origin:`${e.provider}:${e.externalId}`},Content:qe,closeable:!0,presentation:()=>({kind:"generation",id:e.id})})}function k(){return O({id:ze,title:"Create Asset",kind:"generation",workspaceRole:"workspace-task",provenance:{origin:"registered generation tools"},Content:Fe,closeable:!0,presentation:()=>({kind:"generation",id:"create"})})}function Fe(){u.useSyncExternalStore(D,E),u.useSyncExternalStore(Q,b,b);const e=ee(),[n,a]=u.useState(""),i=n.trim().toLowerCase(),r=E().filter(s=>s.point==="workspace.document"&&s.tool?.generation?.role==="submit").filter(s=>i?[s.title,s.tool?.generation?.provider,s.tool?.summary,s.tool?.description].filter(Boolean).some(c=>String(c).toLowerCase().includes(i)):!0),l=new Map;for(const s of r){const c=s.tool?.generation?.provider??"other";l.set(c,[...l.get(c)??[],s])}return t.jsxs("div",{className:"vgai-tool-page","data-testid":"generation-create-catalog",children:[t.jsxs("header",{className:"vgai-tool-header",children:[t.jsx("div",{className:"vgai-tool-eyebrow",children:"Installed provider extensions"}),t.jsx("h2",{className:"vgai-tool-title",children:"Create an asset"}),t.jsxs("p",{className:"vgai-tool-description",children:["Choose a native provider operation. Mock, managed, and BYOK execution remain explicit in the operation you open. Current default: ",e.preferredRoute,"."]})]}),t.jsx(X,{type:"search","aria-label":"Search generation tools",placeholder:"Search operations or providers…",value:n,onChange:s=>a(s.target.value)}),[...l.entries()].map(([s,c])=>t.jsxs("section",{className:"vgai-tool-card",children:[t.jsx("h3",{className:"vgai-tool-section-title",children:s}),t.jsx("div",{className:"vgai-generation-create-grid",children:c.map(g=>t.jsxs(p,{variant:"ghost",className:"vgai-generation-create-card",onClick:()=>Z(g.id),children:[t.jsx("strong",{children:g.title}),t.jsx("span",{children:g.tool?.summary})]},g.id))})]},s)),r.length===0&&t.jsx("div",{className:"vgai-generation-document-empty",children:"No installed generation operation matches this search."})]})}function Le({job:e,result:n,documentId:a,active:i}){u.useSyncExternalStore(D,E),u.useSyncExternalStore(te,w,w);const r=ne(e.poll.tool,e,n);if(!r)return t.jsx("pre",{className:"vgai-generation-native-result",children:JSON.stringify(n,null,2)});const l=r.Component;return t.jsx(ae,{file:r.file,children:t.jsx(l,{tool:r.tool,contributionId:r.id,client:se(),surfaces:re,account:oe(),play:ie(),documentId:a,active:i,job:e,result:n})})}function qe({documentId:e,active:n}){const{jobs:a}=u.useSyncExternalStore(T,x,x),i=e.startsWith(S)?e.slice(S.length):e,r=a.find(d=>d.id===i),[l,s]=u.useState(),[c,g]=u.useState(!1),[o,m]=u.useState(null),[v,f]=u.useState(!1),C=async d=>{g(!0),m(null);try{s(await Ee(d))}catch(N){m(N instanceof Error?N.message:String(N))}finally{g(!1)}};if(u.useEffect(()=>{r&&C(r)},[r?.id,r?.status]),!r)return t.jsx("div",{className:"vgai-generation-document-empty",children:"This generation is no longer in project activity."});const A=o??(y(r)==="save-failed"?`Could not save into the project: ${r.pollError}`:null);return t.jsxs("div",{className:"vgai-generation-document","data-status":r.status,children:[t.jsxs("header",{className:"vgai-generation-document-header",children:[t.jsxs("div",{children:[t.jsxs("div",{className:"vgai-tool-eyebrow",children:[r.provider," · ",r.operation]}),t.jsx("h2",{className:"vgai-tool-title",children:r.label}),t.jsxs("div",{className:"vgai-generation-job-meta",children:[$[y(r)]," · ",Je(r.billing)]})]}),t.jsxs("div",{className:"vgai-tool-actions",children:[t.jsx(p,{size:"compact",variant:"ghost",disabled:c,onClick:()=>void C(r),children:c?"Refreshing…":"Refresh"}),L(r,o)&&t.jsx(p,{size:"compact",variant:"primary",disabled:v,onClick:()=>{f(!0),m(null),M(r).catch(d=>m(d instanceof Error?d.message:String(d))).finally(()=>f(!1))},children:v?"Saving…":"Retry save"})]})]}),r.message&&t.jsx("div",{className:"vgai-tool-status",children:r.message}),A&&t.jsx("div",{className:"vgai-tool-status","data-tone":"error",role:"alert",children:A}),t.jsx("section",{className:"vgai-generation-result","aria-label":"Generation result",children:l===void 0?t.jsx("div",{className:"vgai-generation-document-empty",children:c?"Loading provider result…":"No provider result is available yet."}):t.jsx(Le,{job:r,result:l,documentId:e,active:n})}),r.outputPaths&&r.outputPaths.length>0&&t.jsxs("section",{className:"vgai-generation-output-paths",children:[t.jsx("strong",{children:"Project assets"}),r.outputPaths.map(d=>t.jsx("code",{children:d},d))]}),F(r)&&t.jsx("div",{className:"vgai-generation-document-footer",children:t.jsx(p,{size:"compact",variant:"ghost",disabled:v,onClick:()=>{f(!0),U(r.id).then(()=>H(e)).catch(d=>m(d instanceof Error?d.message:String(d))).finally(()=>f(!1))},children:"Remove from activity"})})]})}function We({output:e,onOpen:n}){const a=e.url;if(a&&e.kind==="image"){const i=t.jsx("img",{className:"vgai-generation-output-media",src:a,alt:e.name,loading:"lazy"});return n?t.jsx(p,{variant:"ghost",className:"vgai-generation-output-open",onClick:n,"aria-label":`Open ${e.name}`,children:i}):i}return a&&e.kind==="video"?t.jsx("video",{className:"vgai-generation-output-media",src:a,controls:!0,preload:"metadata",playsInline:!0,title:e.name}):a&&e.kind==="audio"?t.jsxs("div",{className:"vgai-generation-output-audio",children:[t.jsx(ge,{url:a,name:e.name}),t.jsx("audio",{src:a,controls:!0,preload:"metadata",title:e.name})]}):e.url&&e.kind==="model"&&je(e.url)?t.jsx(me,{url:e.url}):t.jsxs("div",{className:"vgai-generation-output-file",children:[t.jsx(_,{icon:e.kind==="model"?pe:ve}),t.jsx(h,{variant:"caption",tone:"muted",children:e.name}),n&&t.jsx(p,{size:"compact",variant:"ghost",onClick:n,children:"Open file"})]})}const Ke={queued:"loading",running:"loading",saving:"loading","save-failed":"error",ready:"success","no-asset":"neutral",failed:"error",cancelled:"neutral"},Ve={queued:e=>e.queuePosition===void 0?"Waiting for the provider to start.":`Position ${e.queuePosition} in the provider queue.`,running:e=>e.message??"The provider is working on it.",saving:()=>"Downloading the finished output into this project.","save-failed":e=>e.pollError??"The finished output could not be saved.",ready:()=>"Saved into this project.","no-asset":()=>"The operation finished without a file this project can hold.",failed:e=>e.message??"The provider reported a failure.",cancelled:()=>"This generation was cancelled."};function Ye({job:e,state:n}){const a=n==="queued"||n==="running"||n==="saving",i=n==="failed"||n==="save-failed";return t.jsxs("div",{className:"vgai-generation-state-media","data-state":n,children:[t.jsx(P,{compact:!0,tone:Ke[n],...i?{icon:t.jsx(_,{icon:ue})}:{},title:$[n],description:Ve[n](e)}),a&&t.jsx("progress",{className:"vgai-generation-progress","aria-label":`${e.label} progress`,...n==="running"&&e.progress!==void 0?{value:e.progress,max:1}:{}})]})}function Qe({job:e,busy:n,error:a,run:i}){return t.jsxs("div",{className:"vgai-generation-card-actions",children:[L(e,a)&&t.jsx(p,{size:"compact",variant:"primary",disabled:n,onClick:()=>i(()=>M(e)),children:n?"Saving…":"Retry save"}),t.jsx(p,{size:"compact",variant:"ghost",onClick:()=>K(e),children:"Details"}),F(e)&&t.jsx(p,{size:"compact",variant:"ghost",disabled:n,onClick:()=>i(()=>U(e.id)),children:"Remove"})]})}function Xe({job:e,busy:n,error:a,run:i}){const r=y(e),l=q(e),s=Pe(e),c=Te(e),g=o=>{if(!o.url)return;const m=fe(he(o.name));if(m)return()=>xe(o.url,m)};return t.jsxs("article",{className:"vgai-generation-card","data-state":r,"aria-busy":z(e),"aria-label":j(e),onClickCapture:()=>{c&&$e(e.id).catch(o=>{de.warn(`Could not mark generation as seen: ${o instanceof Error?o.message:String(o)}`,"generations")})},children:[t.jsx("div",{className:"vgai-generation-card-media","data-outputs":Math.min(l.length,4),children:l.length===0?t.jsx(Ye,{job:e,state:r}):l.map(o=>t.jsx("div",{className:"vgai-generation-output",title:o.path,children:t.jsx(We,{output:o,onOpen:g(o)})},o.path))}),t.jsxs("div",{className:"vgai-generation-card-body",children:[t.jsxs("div",{className:"vgai-generation-card-heading",children:[t.jsx(h,{variant:"label",truncate:!0,title:j(e),children:j(e)}),t.jsxs(R,{className:"vgai-generation-chip","data-state":r,children:[$[r],r==="running"&&e.progress!==void 0?` · ${Math.round(e.progress*100)}%`:""]}),c&&t.jsx(R,{className:"vgai-generation-chip","data-state":"new",children:"New"})]}),t.jsxs(h,{variant:"caption",tone:"muted",truncate:!0,title:I(e),children:[e.provider," · ",I(e)]}),t.jsxs(h,{variant:"caption",tone:"dim",children:[_e(e.billing),Me(e.billing)?"":" (est.)"," · ",Be(e)," ·"," ",Ue(e.updatedAt)]}),s&&t.jsx("p",{className:"vgai-generation-card-prompt",title:s,children:s}),(a??e.pollError)&&t.jsx(B,{tone:a||r==="save-failed"?"error":"warning",className:"vgai-generation-card-alert",children:a??(r==="save-failed"?`Could not save into the project: ${e.pollError}`:`Polling will retry: ${e.pollError}`)}),t.jsx(Qe,{job:e,busy:n,error:a,run:i})]})]})}function Ze(){const{jobs:e}=u.useSyncExternalStore(T,x,x),[n,a]=u.useState(null),[i,r]=u.useState({}),l=e.filter(z).length,s=e.filter(o=>y(o)==="saving").length,c=async(o,m)=>{a(o),r(v=>{const f={...v};return delete f[o],f});try{await m()}catch(v){const f=v instanceof Error?v.message:String(v);r(C=>({...C,[o]:f}))}finally{a(null)}},g=ke();return t.jsxs("div",{className:"vgai-generation-gallery",children:[t.jsxs(le,{label:"Generations",compact:!0,className:"vgai-generation-gallery-bar",children:[t.jsx(h,{variant:"label",children:"Generations"}),t.jsxs(h,{variant:"caption",tone:"muted",children:[e.length," ",e.length===1?"generation":"generations",l>0?` · ${l} running`:"",s>0?` · ${s} saving`:""]}),t.jsx(ce,{}),t.jsx(p,{size:"compact",variant:"ghost",onClick:()=>void Se().then(J),children:"Refresh"}),t.jsx(p,{size:"compact",variant:"primary",onClick:()=>k(),children:"New asset"})]}),g&&t.jsx(B,{tone:"error",className:"vgai-generation-gallery-alert",children:g}),e.length===0?t.jsx(P,{className:"vgai-generation-gallery-empty",title:"No generated assets yet",description:"Preview generated images, video, audio and models here. Create an asset to get started.",action:t.jsx(p,{size:"compact",variant:"primary",onClick:()=>k(),children:"New asset"})}):t.jsx("section",{className:"vgai-generation-grid","aria-label":"Generated assets",children:e.map(o=>t.jsx(Xe,{job:o,busy:n===o.id,error:i[o.id]??null,run:m=>void c(o.id,m)},o.id))})]})}const kt="workspace.service",He="generation";function et(){const e=we(x().jobs);return e>0?{count:e,severity:"info"}:null}function Tt(){const e=[Ae(),ye({...Ce.generations,order:15,Content:Ze,badge:et,subscribeBadge:T,badgeSnapshot:be,visibleByDefault:!1,closeable:!0}),Ne({id:He,owner:"@volter/editor-game/generation",open:(n,a)=>{if(a.id==="create")return k();const i=x().jobs.find(r=>r.id===a.id);return i?K(i):null},settle:J})];return()=>{for(const n of e)n()}}export{kt as point,Tt as start};
@@ -1 +0,0 @@
1
- import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{Z as r,q as a,a5 as i}from"./index-BRJMIUK0.js";import{r as u}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{s as c,g as e,a as p,b as m}from"./generation-jobs-BZhOMrp-.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";const I="workspace.status",$="Generations",C="left",T=24;function U(){const{jobs:s}=u.useSyncExternalStore(c,e,e),n=p(s),t=s.filter(m).length;return o.jsxs(r,{type:"button",variant:"ghost",size:"compact",className:"vgai-status-action","data-testid":"status-generations","aria-label":`Generations, ${n} unseen, ${t} running`,title:`${n} unseen generation results, ${t} running — open Generations`,onClick:()=>a().workspace.showUtility(i.generations.id),children:["Generations · ",n,t>0?` · ${t} running`:""]})}export{C as align,U as default,T as order,I as point,$ as title};
@@ -1 +0,0 @@
1
- import{getObjectMark as o,setObjectMark as e}from"./object-marks-DwvIEBOK.js";function a(t,n){e(t,"vgaiComponentRoot",n)}function r(t){const n=o(t,"vgaiComponentRoot");return typeof n=="string"&&n?n:void 0}function u(t){return r(t)!==void 0}function m(t){e(t,"vgaiBuiltInternal",!0)}function c(t){return o(t,"vgaiBuiltInternal")===!0}export{r as componentRootName,c as isBuiltInternal,u as isComponentRoot,m as markBuiltInternal,a as markComponentRoot};
@@ -1 +0,0 @@
1
- import{g as o}from"./workspace-arrangement-BdAlBwvd.js";function r(t){const n=o(t,"vgaiComponentRoot");return typeof n=="string"&&n?n:void 0}function i(t){return o(t,"vgaiBuiltInternal")===!0}export{r as c,i};
@@ -1,2 +0,0 @@
1
- import{kt as k,u as l,r as y,ku as P,t as b,b0 as T}from"./index-BRJMIUK0.js";import{i as x}from"./relative-path-guard-GiM7Lsz8.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const d=".vgai/assets.json",E=y({key:l().min(1),license:l().min(1).optional(),sourceHash:l().regex(/^sha256-[a-f0-9]{64}$/,'sourceHash must be "sha256-<64 hex>"').optional(),materializedAt:l().datetime()}).strict(),O=k(l().min(1),E);function z(e){if(!/^[a-f0-9]{64}$/.test(e))throw new Error(`Not a sha256 digest, refusing to record it as a sourceHash: ${e}`);return`sha256-${e}`}function m(e){const t=e.replaceAll("\\","/").replace(/^\.\//,"").replace(/^\/+/,"");if(!t)throw new Error("An asset ledger path cannot be empty.");if(!x(t))throw new Error(`An asset ledger path cannot escape the project: ${e}`);return t}function _(e){return O.parse(e)}function D(e){if(e==null||e.trim()==="")return{};let t;try{t=JSON.parse(e)}catch(s){throw new Error(`${d} is not valid JSON: ${String(s)}`)}return _(t)}function I(e,t,s){const r=m(t),n=E.parse(s),a={...e,[r]:n},i={};for(const u of Object.keys(a).sort())i[u]=a[u];return i}function M(e){const t={};for(const s of Object.keys(e).sort())t[s]=e[s];return`${JSON.stringify(t,null,2)}
2
- `}function U(e,t,s){const r=globalThis.navigator?.locks;return r?r.request(`vgai:${e}:${P(t)}`,s):s()}const H=1e4,N=15;function j(){return globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random()}`}async function R(e,t,s={}){const r=s.staleAfterMs??H,n=s.retryDelayMs??N,a=s.now??Date.now,i=s.sleep??(o=>new Promise(c=>setTimeout(c,o))),u=s.token??j;for(;;){const o=JSON.stringify({at:a(),owner:s.owner??"unknown",token:u()});if(await e.createIfAbsent(o))try{return await t()}finally{await e.removeIfHeldBy(o)}const c=await e.read();if(c!==null){if(a()-B(c)>r){await e.removeIfHeldBy(c);continue}await i(n)}}}function B(e){try{const t=JSON.parse(e);return typeof t.at=="number"?t.at:0}catch{return 0}}function J(){const e=new Map;return(t,s)=>{const n=(e.get(t)??Promise.resolve()).then(s,s),a=n.then(()=>{},()=>{});return e.set(t,a),a.then(()=>{e.get(t)===a&&e.delete(t)}),n}}async function S(e){return await e.exists(d)?D(await e.read(d)):{}}async function F(e,t){await e.write(d,M(t))}const f=`${d}.lock`,C=J(),A=new WeakMap;let $=0;function K(e){const t=A.get(e);if(t!==void 0)return t;$+=1;const s=`${e.id}#${$}`;return A.set(e,s),s}async function W(e,t){const s={key:t.key,...t.license?{license:t.license}:{},...t.sourceSha256?{sourceHash:z(t.sourceSha256)}:{},materializedAt:t.materializedAt??new Date().toISOString()};await C(K(e),()=>R({createIfAbsent:r=>e.writeIfAbsent(f,r),read:async()=>await e.exists(f)?e.read(f):null,removeIfHeldBy:r=>U(e.id,f,async()=>{await e.exists(f)&&await e.read(f)===r&&await e.remove(f)})},async()=>{const r=await S(e);await F(e,I(r,m(t.destPath),s))},{owner:e.id}))}const G=y({key:l().regex(/^[^:]+:.+$/,'An asset key must be "source:id"'),dest:l().min(1),sha256:l().regex(/^[a-f0-9]{64}$/,"A pack entry must pin the sha256 of its bytes as 64 lowercase hex digits")}).strict(),Y=y({packs:k(l().min(1),b(G))}).strict();function q(e){return Y.parse(e)}function V(e){const t=[],s=new Map;for(const[r,n]of Object.entries(e.packs))for(const a of n){const i=s.get(a.dest);if(i!==void 0)throw new Error(`Two packs declare the same destination "${a.dest}": "${i}" and "${r}".`);s.set(a.dest,r),t.push({...a,pack:r})}return t}const w="asset-manifest.json",v="https://vgai-asset-library.aaron-0ed.workers.dev";function L(e){return(e.baseUrl??v).replace(/\/+$/,"")}function Q(e){return e.signal?{signal:e.signal}:{}}async function X(e,t={}){const s=L(t),r=await fetch(`${s}/v1/assets/${encodeURIComponent(e)}`,Q(t));if(!r.ok)return null;const n=await r.json();return!n||typeof n!="object"||!Array.isArray(n.files)?null:n}function Z(e,t,s,r){return`${L(e?{baseUrl:e}:{})}/v1/assets/${encodeURIComponent(t)}/files/${s}`}async function he(e,t={}){const s=await ee(e),r={declared:s.length,materialized:[],alreadyPresent:[],failed:[]};if(s.length===0)return r;const n=await S(e);for(const a of s){if(t.signal?.aborted)break;if(n[m(a.dest)]&&await e.exists(a.dest)){r.alreadyPresent.push(a),t.onProgress?.(a,"already-present");continue}try{await te(e,a,t),r.materialized.push(a),t.onProgress?.(a,"materialized")}catch(i){r.failed.push({entry:a,reason:i instanceof Error?i.message:String(i)}),t.onProgress?.(a,"failed")}}return r}async function ee(e){if(!await e.exists(w))return[];const t=await e.read(w);let s;try{s=JSON.parse(t)}catch(r){throw new Error(`${w} is not valid JSON: ${r instanceof Error?r.message:String(r)}`)}return V(q(s))}async function te(e,t,s){const r=await se(t,s);await e.write(t.dest,r.bytes),await W(e,{destPath:t.dest,key:t.key,license:r.license,sourceSha256:t.sha256})}async function se(e,t={}){const s=e.key.indexOf(":");if(s<0)throw new Error(`Malformed asset key "${e.key}" (expected "source:id").`);const r=e.key.slice(0,s),n=e.key.slice(s+1);if(r!=="local")throw new Error(`Asset key "${e.key}": only the "local" (cloud-hosted) source can be materialized from the cloud worker.`);const a=t.baseUrl??v,i=t.signal?{baseUrl:a,signal:t.signal}:{baseUrl:a},u=await X(n,i);if(!u)throw new Error(`"${e.key}" is not hosted by the cloud asset library.`);const o=u.files[0];if(!o)throw new Error(`"${e.key}" has no files in the cloud library.`);if(o.dependencies.length>0)throw new Error(`"${e.key}" has ${o.dependencies.length} dependency file(s) — a pack entry names exactly one destination file.`);if(o.main.sha256!==e.sha256)throw new Error(`"${e.key}" → ${e.dest}: the cloud library reports sha256:${o.main.sha256} but ${w} pins sha256:${e.sha256}. Nothing was fetched or written; the pin is only re-cut by a reviewed change to the declaration.`);const c=Z(a,n,0),h=await fetch(c,t.signal?{signal:t.signal}:{});if(!h.ok)throw new Error(`${c} returned ${h.status} ${h.statusText}.`);const g=new Uint8Array(await h.arrayBuffer()),p=await T(g);if(p!==e.sha256)throw new Error(`"${e.key}" → ${e.dest}: ${c} delivered sha256:${p} but the declaration pins sha256:${e.sha256}. Nothing was written.`);return{bytes:g,license:u.license}}export{w as ASSET_MANIFEST_PATH,se as fetchVerifiedPackEntry,he as materializeDeclaredAssetPacks};