@volter/cyclotron 0.5.212 → 0.5.213

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 (598) hide show
  1. package/BUNDLED_NOTICES +375 -2995
  2. package/README.md +9 -5
  3. package/dist/.vite/manifest.json +529 -1764
  4. package/dist/assets/AudioViewer-B5pkIGXS.js +1 -0
  5. package/dist/assets/ImageViewer-BPVLEEQ2.js +1 -0
  6. package/dist/assets/JsonAssetDocument-DuVW9del.js +2 -0
  7. package/dist/assets/ProjectAuthoringBootstrap-CZJz4Svb.js +2 -0
  8. package/dist/assets/SourceAssetViewer-LwHBW53R.js +1 -0
  9. package/dist/assets/VideoViewer-Bfjjp4zH.js +1 -0
  10. package/dist/assets/{client-Dj2xr2fw.js → client-BLXKEWrR.js} +1 -1
  11. package/dist/assets/{index-Bc73pJIv.js → index-BKjLHm6K.js} +131 -131
  12. package/dist/assets/index-CJcVFJ-l.css +1 -0
  13. package/dist/assets/product-CaIfLQVS.js +1 -0
  14. package/dist/assets/story-capture-C3xmgE62.js +1 -0
  15. package/dist/assets/volter-sdk-DT0xmh2J.js +1407 -0
  16. package/dist/assets/volter-sdk-activation-events-B-WERmWU.js +1 -0
  17. package/dist/assets/volter-sdk-active-project-DvEsy8Q6.js +1 -0
  18. package/dist/assets/volter-sdk-adapter-editor-config-CQ5V6W-o.js +1 -0
  19. package/dist/assets/volter-sdk-animation-animation-clock-Cy7j_2qF.js +1 -0
  20. package/dist/assets/volter-sdk-animation-stage-transport-DoUDq6Gb.js +1 -0
  21. package/dist/assets/volter-sdk-api-base-Dr1bx5e0.js +1 -0
  22. package/dist/assets/volter-sdk-api-project-open-D4nPvIPU.js +1 -0
  23. package/dist/assets/volter-sdk-api-project-source-DoO7WBwQ.js +1 -0
  24. package/dist/assets/volter-sdk-api-settings-BEHgO5wf.js +1 -0
  25. package/dist/assets/volter-sdk-asset-capabilities-CGkNwaAe.js +1 -0
  26. package/dist/assets/volter-sdk-asset-document-write-policy-CzWM1HhK.js +1 -0
  27. package/dist/assets/volter-sdk-asset-editor-context-BkSK1vL1.js +1 -0
  28. package/dist/assets/volter-sdk-asset-thumbnails-zSmJgI_x.js +1 -0
  29. package/dist/assets/volter-sdk-asset-viewers-B-ICvlkR.js +1 -0
  30. package/dist/assets/volter-sdk-asset-workflow-project-content-C6Ow0R-F.js +1 -0
  31. package/dist/assets/volter-sdk-authoring-active-adapter-CKuWwxgH.js +1 -0
  32. package/dist/assets/volter-sdk-authoring-boundary-authoring-adapter-DTwFKBkS.js +1 -0
  33. package/dist/assets/volter-sdk-authoring-composite-authoring-adapter-iRSbSHpV.js +1 -0
  34. package/dist/assets/volter-sdk-authoring-consumer-actions-DK9-B-wg.js +1 -0
  35. package/dist/assets/volter-sdk-authoring-design-time-mount-registry-BQnWcBVe.js +1 -0
  36. package/dist/assets/volter-sdk-authoring-design-time-roots-BKSmkD7_.js +1 -0
  37. package/dist/assets/volter-sdk-authoring-layered-pick-C-YvuxEG.js +1 -0
  38. package/dist/assets/volter-sdk-authoring-no-authoring-adapter-Cv9DD6G0.js +1 -0
  39. package/dist/assets/volter-sdk-authoring-panel-authoring-BLOrFs8L.js +1 -0
  40. package/dist/assets/volter-sdk-authoring-react-design-canvas-style-Dr9i31o5.js +1 -0
  41. package/dist/assets/{volter-sdk-authoring-react-story-board-aeiEUlbU.js → volter-sdk-authoring-react-story-board-BlCQQM-8.js} +1 -1
  42. package/dist/assets/volter-sdk-authoring-seam-evidence-CjetY_ZG.js +1 -0
  43. package/dist/assets/volter-sdk-authoring-selection-scope-BxmbC71H.js +1 -0
  44. package/dist/assets/volter-sdk-authoring-shell-document-ops-DDb8oGx9.js +1 -0
  45. package/dist/assets/volter-sdk-authoring-stage-root-B50LLhnJ.js +1 -0
  46. package/dist/assets/volter-sdk-authoring-story-board-chrome-fit-BVV9fbcw.js +1 -0
  47. package/dist/assets/{volter-sdk-authoring-viewport-tool-context-DzsD6JQH.js → volter-sdk-authoring-viewport-tool-context-cQafPSkT.js} +1 -1
  48. package/dist/assets/volter-sdk-authoring-viewport-tool-owner-BppqL4f_.js +1 -0
  49. package/dist/assets/volter-sdk-authoring-world-session-state-BlpdiKod.js +1 -0
  50. package/dist/assets/volter-sdk-bitmap-label-BbtGPWgP.js +1 -0
  51. package/dist/assets/{volter-sdk-breakpoint-state-BPnDN_XU.js → volter-sdk-breakpoint-state-DCFuSvgm.js} +1 -1
  52. package/dist/assets/volter-sdk-bytes-codec-CrNeVT4e.js +1 -0
  53. package/dist/assets/volter-sdk-cancellation-reason-ByOH3mlF.js +1 -0
  54. package/dist/assets/volter-sdk-canvas-frames-BU8Rqr4J.js +1 -0
  55. package/dist/assets/volter-sdk-capture-size-D4cNT2XC.js +1 -0
  56. package/dist/assets/volter-sdk-chrome-registry-qHUiDauw.js +1 -0
  57. package/dist/assets/volter-sdk-command-result-text-2wzEhQ5t.js +1 -0
  58. package/dist/assets/volter-sdk-commands-C4RgHEOa.js +1 -0
  59. package/dist/assets/volter-sdk-component-board-registry-6gFZBkTP.js +1 -0
  60. package/dist/assets/volter-sdk-components-AssetEditorShell-CQVLedvW.js +1 -0
  61. package/dist/assets/volter-sdk-components-InspectorCanvasPreview-CN5ROhNT.js +1 -0
  62. package/dist/assets/volter-sdk-components-SurfaceStateOverlay-Cc9Ov1Ol.js +1 -0
  63. package/dist/assets/{volter-sdk-components-AssetEditorShell-BJL1am3b.js → volter-sdk-components-Toolbar-ZoV9Yq_A.js} +1 -1
  64. package/dist/assets/volter-sdk-components-TransientHint-BML2V3uu.js +1 -0
  65. package/dist/assets/volter-sdk-components-inspector-preview-section-BhDjhUyz.js +1 -0
  66. package/dist/assets/volter-sdk-components-use-after-paint-BVSO4qjV.js +1 -0
  67. package/dist/assets/volter-sdk-components-workspace-history-CThvGfsY.js +1 -0
  68. package/dist/assets/volter-sdk-content-entry-source-registry-CJLVq3tC.js +1 -0
  69. package/dist/assets/volter-sdk-contribution-surfaces-CeEDmriM.js +1 -0
  70. package/dist/assets/volter-sdk-contributions-x6j41XZp.js +1 -0
  71. package/dist/assets/volter-sdk-coverage-design-time-surfaces-D-tNGazo.js +1 -0
  72. package/dist/assets/volter-sdk-creation-site-registry-64gyrZPD.js +1 -0
  73. package/dist/assets/volter-sdk-css-numeric-style-CXeWqAoG.js +1 -0
  74. package/dist/assets/volter-sdk-declared-tools-BAzHxyUW.js +1 -0
  75. package/dist/assets/{volter-sdk-document-areas-x47hqeuC.js → volter-sdk-document-areas-4DXjy0el.js} +1 -1
  76. package/dist/assets/volter-sdk-document-layer-B4VYMPZ9.js +1 -0
  77. package/dist/assets/volter-sdk-document-open-registry-BLDMaEoN.js +1 -0
  78. package/dist/assets/volter-sdk-document-play-extension-Dv3fyS6K.js +1 -0
  79. package/dist/assets/volter-sdk-document-probe-drBhAyza.js +1 -0
  80. package/dist/assets/volter-sdk-document-stage-sessions-CtI9anAf.js +1 -0
  81. package/dist/assets/volter-sdk-document-viewports-BO0N7VyN.js +1 -0
  82. package/dist/assets/volter-sdk-editor-commands-BJ9Otxzu.js +1 -0
  83. package/dist/assets/volter-sdk-editor-console-BaGgfWmH.js +1 -0
  84. package/dist/assets/volter-sdk-editor-document-probe-D0ZhaXHx.js +1 -0
  85. package/dist/assets/volter-sdk-editor-mode-B07FDozS.js +1 -0
  86. package/dist/assets/volter-sdk-editor-runtime-D00Du7hG.js +1 -0
  87. package/dist/assets/volter-sdk-editor-server-response-C6kOPAsW.js +1 -0
  88. package/dist/assets/volter-sdk-editor-session-attribution-CggpIFb4.js +1 -0
  89. package/dist/assets/volter-sdk-editor-view-DEMsxlaT.js +1 -0
  90. package/dist/assets/volter-sdk-environment-images-OQtFG1kA.js +1 -0
  91. package/dist/assets/volter-sdk-extension-script-DanTHcyo.js +1 -0
  92. package/dist/assets/volter-sdk-eyedropper-session-BfVXtjzc.js +1 -0
  93. package/dist/assets/volter-sdk-files-file-provider-CXL6oCMd.js +1 -0
  94. package/dist/assets/volter-sdk-files-project-files-SBAE37py.js +1 -0
  95. package/dist/assets/volter-sdk-framed-document-capture-7TnE8pn1.js +1 -0
  96. package/dist/assets/volter-sdk-framed-document-driver-C0K3-SRt.js +1 -0
  97. package/dist/assets/volter-sdk-hierarchy-component-marks-BmJEMvvO.js +1 -0
  98. package/dist/assets/volter-sdk-hierarchy-kind-icon-CrwdpecY.js +1 -0
  99. package/dist/assets/{volter-sdk-hierarchy-node-rows-CNCdvWZM.js → volter-sdk-hierarchy-node-rows-FcK7_ULi.js} +1 -1
  100. package/dist/assets/{volter-sdk-hierarchy-projection-BXet4MmW.js → volter-sdk-hierarchy-projection-CKzUOZUa.js} +1 -1
  101. package/dist/assets/volter-sdk-hierarchy-row-media-Czg40Ddi.js +1 -0
  102. package/dist/assets/volter-sdk-hierarchy-row-model-BGzmcywF.js +1 -0
  103. package/dist/assets/volter-sdk-hierarchy-rows-VAI0psTR.js +1 -0
  104. package/dist/assets/volter-sdk-hierarchy-walk-CaVqG7v2.js +1 -0
  105. package/dist/assets/volter-sdk-history-history-delegate-DH_xBvdh.js +1 -0
  106. package/dist/assets/volter-sdk-history-history-service-D0n0Gl5Z.js +1 -0
  107. package/dist/assets/volter-sdk-history-persistence-coordinator-CcywAFdm.js +1 -0
  108. package/dist/assets/volter-sdk-history-resource-registry-DMTlnwGv.js +1 -0
  109. package/dist/assets/volter-sdk-history-snapshot-store-BVh1DtBp.js +1 -0
  110. package/dist/assets/volter-sdk-history-source-history-backend-ulJ-65tX.js +1 -0
  111. package/dist/assets/volter-sdk-hmr-registration-group-DvMQVKyO.js +1 -0
  112. package/dist/assets/volter-sdk-hmr-stable-react-context-BMVr5YVk.js +1 -0
  113. package/dist/assets/volter-sdk-host-D765Py2w.js +1 -0
  114. package/dist/assets/{volter-sdk-hotkeys-D8xO5kx0.js → volter-sdk-hotkeys-TesTKdAZ.js} +1 -1
  115. package/dist/assets/{volter-sdk-index-CTFkHN4C.js → volter-sdk-index-BABXozHr.js} +1 -1
  116. package/dist/assets/volter-sdk-inference-diagnostics-CsDbQ0M5.js +1 -0
  117. package/dist/assets/volter-sdk-inspection-document-subject-BMRD77Va.js +1 -0
  118. package/dist/assets/volter-sdk-inspection-group-icons-Wpz-YhkE.js +1 -0
  119. package/dist/assets/volter-sdk-inspection-model-BVOyStdc.js +1 -0
  120. package/dist/assets/volter-sdk-inspection-node-media-B8AL8_3F.js +1 -0
  121. package/dist/assets/volter-sdk-inspection-null-subject-d5bQZCbS.js +1 -0
  122. package/dist/assets/volter-sdk-inspector-property-grouping-BqrZkwo4.js +1 -0
  123. package/dist/assets/volter-sdk-inspector-section-registry-C6U15zvC.js +1 -0
  124. package/dist/assets/volter-sdk-js-heap-CcOnY0kf.js +1 -0
  125. package/dist/assets/{volter-sdk-keymap-presets-Vq8J3DoG.js → volter-sdk-keymap-presets-CSM-jVcZ.js} +1 -1
  126. package/dist/assets/volter-sdk-layout-arrangements-DHA3uifx.js +1 -0
  127. package/dist/assets/volter-sdk-layouts-4v9ECCn9.js +1 -0
  128. package/dist/assets/volter-sdk-light-explorer-model-CPuZjpiR.js +1 -0
  129. package/dist/assets/volter-sdk-live-seam-evidence-B_RyDaOp.js +1 -0
  130. package/dist/assets/volter-sdk-live-session-registry-C6gHroaH.js +1 -0
  131. package/dist/assets/{volter-sdk-manifest-project-DIThdJ0z.js → volter-sdk-manifest-project-CVVUDDuL.js} +1 -1
  132. package/dist/assets/volter-sdk-mount-css-scope-DaJoEo3v.js +1 -0
  133. package/dist/assets/volter-sdk-mount-failure-report-Cm92oiGJ.js +1 -0
  134. package/dist/assets/volter-sdk-native-selection-style-Bp4IBnA4.js +1 -0
  135. package/dist/assets/volter-sdk-photograph-notice-C6_gZGpW.js +1 -0
  136. package/dist/assets/volter-sdk-play-camera-flight-SwlYhOxW.js +1 -0
  137. package/dist/assets/volter-sdk-product-command-G8kKVJ-i.js +1 -0
  138. package/dist/assets/volter-sdk-progress-4GGmPvZn.js +1 -0
  139. package/dist/assets/volter-sdk-project-module-changes-DIrDIHeD.js +1 -0
  140. package/dist/assets/volter-sdk-project-module-url-BuAUWpus.js +1 -0
  141. package/dist/assets/volter-sdk-project-output-roots-BON7FOwQ.js +1 -0
  142. package/dist/assets/{volter-sdk-project-tab-census-Cos8L4lu.js → volter-sdk-project-tab-census-CO06UOh-.js} +1 -1
  143. package/dist/assets/volter-sdk-renderer-resource-counts-2kLiD8_S.js +1 -0
  144. package/dist/assets/volter-sdk-scoped-project-css-DA63CYkM.js +1 -0
  145. package/dist/assets/volter-sdk-selection-CSUq7EiY.js +1 -0
  146. package/dist/assets/volter-sdk-served-url-B_MypeId.js +1 -0
  147. package/dist/assets/volter-sdk-settings-settings-provider-CJuWxTB5.js +1 -0
  148. package/dist/assets/volter-sdk-settings-store-CEFKDj0h.js +1 -0
  149. package/dist/assets/volter-sdk-shell-store-Cl4sX9p4.js +1 -0
  150. package/dist/assets/volter-sdk-shell-store-door-DGjybg0J.js +1 -0
  151. package/dist/assets/volter-sdk-source-conflict-CV8Gk053.js +1 -0
  152. package/dist/assets/volter-sdk-stage-context-Cb0SaYhi.js +1 -0
  153. package/dist/assets/volter-sdk-stage-invalidation-VlBciYA0.js +1 -0
  154. package/dist/assets/volter-sdk-stage-store-registry-BpIy_QKq.js +1 -0
  155. package/dist/assets/{volter-sdk-startup-failure-CtJyTS-2.js → volter-sdk-startup-failure-C_8H4xuP.js} +1 -1
  156. package/dist/assets/{volter-sdk-stories-StoryPreviewMount-DjhZUmf-.js → volter-sdk-stories-StoryPreviewMount-BUX42gIR.js} +1 -1
  157. package/dist/assets/volter-sdk-stories-compose-project-stories-CkSd4Si5.js +1 -0
  158. package/dist/assets/volter-sdk-stories-scope-Dndn7MD8.js +1 -0
  159. package/dist/assets/volter-sdk-stories-story-declared-medium-Byi4XWeJ.js +1 -0
  160. package/dist/assets/volter-sdk-stories-story-dom-runtime-BS1VPvJ6.js +1 -0
  161. package/dist/assets/volter-sdk-stories-story-grouping-CpNh4cUf.js +1 -0
  162. package/dist/assets/{volter-sdk-story-document-openers-Df7Tcu2n.js → volter-sdk-story-document-openers-Ba5jQqay.js} +1 -1
  163. package/dist/assets/volter-sdk-surface-state-BhQ45ars.js +1 -0
  164. package/dist/assets/volter-sdk-tab-census-D0r0s37y.js +1 -0
  165. package/dist/assets/volter-sdk-tool-contribution-convention-JCXL6f2w.js +1 -0
  166. package/dist/assets/volter-sdk-transform-mode-request-Cwk_Kyty.js +1 -0
  167. package/dist/assets/volter-sdk-transient-hint-BOfFzAV8.js +1 -0
  168. package/dist/assets/{volter-sdk-types-BOfYN_tN.js → volter-sdk-types-CkT8l5N_.js} +1 -1
  169. package/dist/assets/volter-sdk-ui-source-file-region-resolver-Cfza3eEl.js +1 -0
  170. package/dist/assets/{volter-sdk-ui-source-inspect-gofMOHNR.js → volter-sdk-ui-source-inspect-CEjmAN75.js} +1 -1
  171. package/dist/assets/{volter-sdk-ui-source-source-write-backend-BgVis1yZ.js → volter-sdk-ui-source-source-write-backend-0njgRdI6.js} +1 -1
  172. package/dist/assets/volter-sdk-ui-source-tier-source-write-backend-CpsxorYU.js +1 -0
  173. package/dist/assets/volter-sdk-viewport-activation-timings-B3hRTu3A.js +1 -0
  174. package/dist/assets/volter-sdk-viewport-editor-controls-DDBd-VqO.js +1 -0
  175. package/dist/assets/volter-sdk-viewport-presentation-DRhiAH1h.js +1 -0
  176. package/dist/assets/volter-sdk-volter-contributions-nlGXjgJZ.js +1 -0
  177. package/dist/assets/volter-sdk-wait-until-CMvYQmO8.js +1 -0
  178. package/dist/assets/volter-sdk-widgets-design-system-BJOyO8sO.js +1 -0
  179. package/dist/assets/volter-sdk-widgets-editor-appearance-eVtkxsIm.js +1 -0
  180. package/dist/assets/volter-sdk-widgets-editor-material-BoQP_5SK.js +1 -0
  181. package/dist/assets/volter-sdk-widgets-icon-set-registry-CP0D74kc.js +1 -0
  182. package/dist/assets/volter-sdk-widgets-index-De34FpYu.js +1 -0
  183. package/dist/assets/volter-sdk-widgets-inspector-widgets-AlignmentGrid-_GjMjIGb.js +1 -0
  184. package/dist/assets/volter-sdk-widgets-inspector-widgets-AssetSlotPicker-B7vN7BEd.js +1 -0
  185. package/dist/assets/volter-sdk-widgets-inspector-widgets-BorderEditor-E2J8cpyT.js +1 -0
  186. package/dist/assets/volter-sdk-widgets-inspector-widgets-ColorPicker-D6TERGKs.js +1 -0
  187. package/dist/assets/volter-sdk-widgets-inspector-widgets-CurveEditor-CXR8n-CA.js +1 -0
  188. package/dist/assets/{volter-sdk-widgets-inspector-widgets-FilterEditor-DKkdim3n.js → volter-sdk-widgets-inspector-widgets-FilterEditor-CDvfWY4Q.js} +1 -1
  189. package/dist/assets/volter-sdk-widgets-inspector-widgets-FontPicker-BgpW8FW8.js +1 -0
  190. package/dist/assets/volter-sdk-widgets-inspector-widgets-GradientEditor-DOOBkXjY.js +1 -0
  191. package/dist/assets/volter-sdk-widgets-inspector-widgets-ScrubbableInput-1NXWR_gB.js +1 -0
  192. package/dist/assets/volter-sdk-widgets-inspector-widgets-ShadowEditor-Cd2-HwFn.js +1 -0
  193. package/dist/assets/volter-sdk-widgets-inspector-widgets-color-utils-C4HuSjFu.js +1 -0
  194. package/dist/assets/volter-sdk-widgets-inspector-widgets-curve-utils-DUU2CCtc.js +1 -0
  195. package/dist/assets/volter-sdk-widgets-inspector-widgets-index-D5kwrOUQ.js +1 -0
  196. package/dist/assets/volter-sdk-widgets-inspector-widgets-shared-CkFN2SUn.js +1 -0
  197. package/dist/assets/volter-sdk-widgets-interactive-edit-scope-DynpKMMZ.js +1 -0
  198. package/dist/assets/{volter-sdk-widgets-palette-colors-Byzw9YHf.js → volter-sdk-widgets-palette-colors-DhL1I42R.js} +1 -1
  199. package/dist/assets/volter-sdk-widgets-patterns-Dialog-EUtcZi0Y.js +1 -0
  200. package/dist/assets/volter-sdk-widgets-patterns-Fields-Bl_eaBej.js +1 -0
  201. package/dist/assets/volter-sdk-widgets-patterns-List--NE_1N5-.js +1 -0
  202. package/dist/assets/volter-sdk-widgets-patterns-StateSurface-BHXpv7qi.js +1 -0
  203. package/dist/assets/volter-sdk-widgets-patterns-Surfaces-BdKa5HGV.js +1 -0
  204. package/dist/assets/volter-sdk-widgets-patterns-Tabs-sFV7f1UP.js +1 -0
  205. package/dist/assets/volter-sdk-widgets-patterns-Toolbar-CIr5Cs49.js +1 -0
  206. package/dist/assets/volter-sdk-widgets-patterns-Tree-C2YHfddf.js +1 -0
  207. package/dist/assets/volter-sdk-widgets-primitives-AnchoredMenu-DCclspnW.js +1 -0
  208. package/dist/assets/volter-sdk-widgets-primitives-Button-B0YxR4ea.js +1 -0
  209. package/dist/assets/volter-sdk-widgets-primitives-ColorInput-B1_SLTuc.js +1 -0
  210. package/dist/assets/volter-sdk-widgets-primitives-DraftTextInput-CpHzPdt8.js +1 -0
  211. package/dist/assets/volter-sdk-widgets-primitives-EditorIcon-Dw4knhya.js +1 -0
  212. package/dist/assets/volter-sdk-widgets-primitives-FormControls-BAbRanmE.js +1 -0
  213. package/dist/assets/volter-sdk-widgets-primitives-HoverPreview-Cj7jKNd4.js +1 -0
  214. package/dist/assets/volter-sdk-widgets-primitives-JsonInput-C0DCI5bE.js +1 -0
  215. package/dist/assets/volter-sdk-widgets-primitives-Layout-gT4Z6mtt.js +1 -0
  216. package/dist/assets/volter-sdk-widgets-primitives-Menu-9EESAp9m.js +1 -0
  217. package/dist/assets/volter-sdk-widgets-primitives-NumberInput-Dk-5zqJ8.js +1 -0
  218. package/dist/assets/volter-sdk-widgets-primitives-Panel-BQWJF-Pb.js +1 -0
  219. package/dist/assets/volter-sdk-widgets-primitives-SectionHeader-DXvmafCK.js +1 -0
  220. package/dist/assets/volter-sdk-widgets-primitives-Text-yBrdWK2w.js +1 -0
  221. package/dist/assets/volter-sdk-widgets-primitives-ThemeRootPortal-CRhefpUL.js +1 -0
  222. package/dist/assets/volter-sdk-widgets-primitives-Tooltip-D5Kcb-ZC.js +1 -0
  223. package/dist/assets/volter-sdk-widgets-primitives-Vec3Input-DiG6PEIe.js +1 -0
  224. package/dist/assets/volter-sdk-widgets-primitives-clamp-to-viewport-DhnSxXVK.js +1 -0
  225. package/dist/assets/volter-sdk-widgets-primitives-editor-icons-e65mgyAk.js +1 -0
  226. package/dist/assets/volter-sdk-widgets-primitives-panel-header-styles-BVL0mN8g.js +1 -0
  227. package/dist/assets/volter-sdk-widgets-theme-C-_RU9Ov.js +1 -0
  228. package/dist/assets/volter-sdk-widgets-z-index-CrJJXeKL.js +1 -0
  229. package/dist/assets/volter-sdk-worker-call-metrics-BTfmngck.js +1 -0
  230. package/dist/assets/{volter-sdk-workspace-core-utilities-BaAh2Ei8.js → volter-sdk-workspace-core-utilities-DtHGK9PF.js} +1 -1
  231. package/dist/assets/volter-sdk-workspace-document-ids-COULA7c6.js +1 -0
  232. package/dist/assets/volter-sdk-workspace-document-registry-6m5csVP7.js +1 -0
  233. package/dist/assets/volter-sdk-workspace-document-restore-M8ifJMou.js +1 -0
  234. package/dist/assets/{volter-sdk-workspace-host-commands-72RdJeW4.js → volter-sdk-workspace-host-commands-8Qzej--P.js} +1 -1
  235. package/dist/assets/volter-sdk-workspace-static-panels-Ckk7qUuS.js +1 -0
  236. package/dist/assets/volter-sdk-workspace-status-registry-BdU0dZAt.js +1 -0
  237. package/dist/assets/volter-sdk-workspace-utility-registry-BHxymD2l.js +1 -0
  238. package/dist/assets/volter-sdk-world-canvas-viewport-state-CHO8s9gE.js +1 -0
  239. package/dist/assets/volter-sdk-world-pan-state-C-9xgzAh.js +1 -0
  240. package/dist/assets/volter-sdk-write-pipe-CJHg7J4i.js +1 -0
  241. package/dist/assets/{volter-shared-fontawesome-B-OhfZs4.js → volter-shared-fontawesome-BEv9WEZj.js} +1 -1
  242. package/dist/assets/{volter-shared-jsx-dev-runtime-akPt_-OI.js → volter-shared-jsx-dev-runtime-domcKDU3.js} +1 -1
  243. package/dist/assets/{volter-shared-jsx-runtime-CKQtDN6l.js → volter-shared-jsx-runtime-Cu7pVW-1.js} +1 -1
  244. package/dist/assets/{volter-shared-react-STQK0zHl.js → volter-shared-react-BLHga76C.js} +1 -1
  245. package/dist/assets/volter-shared-react-dom-client-vi6WsWu2.js +1 -0
  246. package/dist/assets/{volter-shared-react-dom-2aA0eyQg.js → volter-shared-react-dom-kzJVGsQd.js} +1 -1
  247. package/dist/assets/volter-shared-three-BWbOWtM5.js +4220 -0
  248. package/dist/volter-shared-modules.json +225 -225
  249. package/dist/volter-shared-react.json +6 -6
  250. package/dist/volter-shared-three.json +1 -1
  251. package/dist-node/cli.js +182 -127
  252. package/dist-node/create.js +18 -21
  253. package/package.json +16 -16
  254. package/src/index.ts +1 -2
  255. package/src/product-id.d.ts +4 -0
  256. package/starter/AGENTS.md +132 -157
  257. package/starter/game/levels/MainLevel.tsx +24 -0
  258. package/starter/game/prefabs/ground/Ground.tsx +24 -0
  259. package/starter/game/{levels → prefabs/ground}/ground.blend +0 -0
  260. package/starter/game/prefabs/ground/ground.glb +0 -0
  261. package/starter/game/prefabs/ground/ground.py +106 -0
  262. package/dist/assets/AudioViewer-EMpvKC-X.js +0 -1
  263. package/dist/assets/BVHLoader-CpdLvOHd.js +0 -1
  264. package/dist/assets/ColladaLoader-D1GMlAA9.js +0 -3
  265. package/dist/assets/EntityModelDocument-rYF-p8Fo.js +0 -1
  266. package/dist/assets/EnvironmentAssetDocument-DfykWLLS.js +0 -1
  267. package/dist/assets/FBXLoader-DKZ0UD3F.js +0 -1
  268. package/dist/assets/ImageViewer-B0OqXrVU.js +0 -1
  269. package/dist/assets/InspectorObjectPreview-CwCqdv76.js +0 -1
  270. package/dist/assets/JsonAssetDocument-PzzxK-v9.js +0 -2
  271. package/dist/assets/LiveModuleDocument-Bq9J5nMx.js +0 -1
  272. package/dist/assets/LutAssetDocument-CyzgDCYJ.js +0 -1
  273. package/dist/assets/MTLLoader-BOaPmAvY.js +0 -2
  274. package/dist/assets/ModelAssetDocument-8he5iZqV.js +0 -1
  275. package/dist/assets/OBJLoader-BLg7dmPe.js +0 -5
  276. package/dist/assets/Object3DDocumentToolbar-CLfEn5i-.js +0 -1
  277. package/dist/assets/Object3DDocumentToolbar-WK1RY6Gg.css +0 -1
  278. package/dist/assets/OrbitControls-DxYDYiEc.js +0 -1
  279. package/dist/assets/PLYLoader-bAg6lYzP.js +0 -2
  280. package/dist/assets/ProjectAuthoringBootstrap-FVTj-Ag9.js +0 -2
  281. package/dist/assets/QuarksAssetDocument-DBJQXZ9u.js +0 -2
  282. package/dist/assets/RectAreaLightUniformsLib-CQLblkbI.js +0 -1
  283. package/dist/assets/STLLoader-C8jImL_t.js +0 -1
  284. package/dist/assets/ShaderAssetDocument-C3QolcYl.js +0 -12
  285. package/dist/assets/SourceAssetViewer-xB9kAyPa.js +0 -1
  286. package/dist/assets/StageHost-BZBLHaPe.css +0 -1
  287. package/dist/assets/StageHost-xYvmzMBo.js +0 -1231
  288. package/dist/assets/TDSLoader-DLNvOc6c.js +0 -1
  289. package/dist/assets/ToolObject3DPreview-4XgGyXTu.js +0 -2
  290. package/dist/assets/VideoViewer-BruuQyu3.js +0 -1
  291. package/dist/assets/ViewportShadingMenu-amXbnRtl.js +0 -1
  292. package/dist/assets/animation-mixers.service-Ce1JMqA2.js +0 -1
  293. package/dist/assets/animation-timeline.utility-CzsUvu3v.js +0 -1
  294. package/dist/assets/asset-preview-CtqauM13.js +0 -4
  295. package/dist/assets/basis_transcoder-VXdx5NbI.wasm +0 -0
  296. package/dist/assets/basis_transcoder-o4Hde_L7.js +0 -19
  297. package/dist/assets/blender-base64-Cxqc4R5f.js +0 -1
  298. package/dist/assets/blender-display-shaders-BPmHILFy.lut +0 -0
  299. package/dist/assets/blender-emscripten-engine-Bl_j9xEY.js +0 -26
  300. package/dist/assets/blender-motion-worker-CtT2cV3V.js +0 -1
  301. package/dist/assets/blender-node-editor.document-lj1qK5Vu.js +0 -1
  302. package/dist/assets/blender-outliner-model-BqLWEXta.js +0 -7359
  303. package/dist/assets/blender-properties-model-DD-2sMKx.js +0 -1
  304. package/dist/assets/blender-properties-tab-BmudfsC3.js +0 -3
  305. package/dist/assets/blender-runtime.document-IVSATTnk.js +0 -13
  306. package/dist/assets/blender-screenshot.service-BRgdtDQC.js +0 -1
  307. package/dist/assets/blender-timeline.document-8jLaNF31.js +0 -1
  308. package/dist/assets/blender-uv-editor.document-BVcA7mi2.js +0 -1
  309. package/dist/assets/blender-version.status-B43F7DzT.js +0 -2
  310. package/dist/assets/blender-wali-engine-xLHhm0KZ.js +0 -2
  311. package/dist/assets/blender.environment-CG-pC7sk.js +0 -1
  312. package/dist/assets/blender.keymap-pRN8nlCs.js +0 -1
  313. package/dist/assets/blender.page-BYbkmFDE.js +0 -3
  314. package/dist/assets/blender.status-CcKJxsZ1.js +0 -1
  315. package/dist/assets/blender.style-DuFonR-j.js +0 -1
  316. package/dist/assets/chat.page-DzuAKPGP.js +0 -1
  317. package/dist/assets/city-EkhAOo5s.exr +0 -0
  318. package/dist/assets/courtyard-DqlebbpC.exr +0 -0
  319. package/dist/assets/draco_decoder-C32yEggz.wasm +0 -0
  320. package/dist/assets/draco_decoder-Z1_iN-Ht.wasm +0 -0
  321. package/dist/assets/draco_decoder-fzg4nYZr.js +0 -34
  322. package/dist/assets/draco_wasm_wrapper-DxJM36Ib.js +0 -117
  323. package/dist/assets/draco_wasm_wrapper-fZCQGLGb.js +0 -116
  324. package/dist/assets/editor-presentation-activity-CqJH4G9t.js +0 -1
  325. package/dist/assets/forest-P_CQY3b_.exr +0 -0
  326. package/dist/assets/index-C4uuH2ZE.css +0 -1
  327. package/dist/assets/index-DlAJXb_f.js +0 -952
  328. package/dist/assets/interior-Bo_lba15.exr +0 -0
  329. package/dist/assets/linear-resolve-B-MA5O31.js +0 -400
  330. package/dist/assets/live-mixers-B-bwLZ7c.js +0 -1
  331. package/dist/assets/maya.style-C3zx8RC5.js +0 -1
  332. package/dist/assets/model-inspection-_SFE7cp7.js +0 -1
  333. package/dist/assets/model.layout-CX-vaeBh.js +0 -1
  334. package/dist/assets/models.finder-DcOx-jsM.js +0 -1
  335. package/dist/assets/mtoon0-BNRZGBf8.blend +0 -0
  336. package/dist/assets/mtoon1-EgrxQlCc.blend +0 -0
  337. package/dist/assets/mtoon1_outline-xuubMJ8J.blend +0 -0
  338. package/dist/assets/mtoon_auto_setup-BF1c8USg.blend +0 -0
  339. package/dist/assets/night-CvV4Gybt.exr +0 -0
  340. package/dist/assets/object3d-document-session-registry-DvgzaByQ.js +0 -2
  341. package/dist/assets/output-pass-Bw2FZb8e.js +0 -85
  342. package/dist/assets/play-mode-BGq1Hn-c.js +0 -1
  343. package/dist/assets/play.page-DB2UjY0o.js +0 -1
  344. package/dist/assets/product-OBHh_Udv.js +0 -1
  345. package/dist/assets/properties-bone-constraints.inspector-NWLfoFX1.js +0 -1
  346. package/dist/assets/properties-bone.inspector-DybmNdBB.js +0 -1
  347. package/dist/assets/properties-collection.inspector-Cg7Jq6yG.js +0 -1
  348. package/dist/assets/properties-constraints.inspector-DY--pvLo.js +0 -1
  349. package/dist/assets/properties-data.inspector-CP1lurLb.js +0 -1
  350. package/dist/assets/properties-material.inspector-K8Qx5wr9.js +0 -1
  351. package/dist/assets/properties-modifiers.inspector-DOfP-8mX.js +0 -1
  352. package/dist/assets/properties-object.inspector-sqx6qMyu.js +0 -1
  353. package/dist/assets/properties-output.inspector-CUYUEC6S.js +0 -1
  354. package/dist/assets/properties-particles.inspector-oAWorORY.js +0 -1
  355. package/dist/assets/properties-physics.inspector-CQIHdcOy.js +0 -1
  356. package/dist/assets/properties-render.inspector-XTzdYo4u.js +0 -1
  357. package/dist/assets/properties-scene.inspector-BytOBuw9.js +0 -1
  358. package/dist/assets/properties-texture.inspector-2WNelhHG.js +0 -1
  359. package/dist/assets/properties-view-layer.inspector-DVSdqosc.js +0 -1
  360. package/dist/assets/properties-world.inspector-CHHm7g3j.js +0 -1
  361. package/dist/assets/regions-BlV6hTFd.js +0 -1
  362. package/dist/assets/sculpt.layout-BkvEflSA.js +0 -1
  363. package/dist/assets/session-addons-KcG0o7Xc.js +0 -76898
  364. package/dist/assets/shading.layout-V9LTFaVk.js +0 -1
  365. package/dist/assets/sky-precompute-worker-CPGW9t_C.js +0 -1
  366. package/dist/assets/spark.module-Cc-ZVx5e.js +0 -12120
  367. package/dist/assets/stage-keyboard-Rgvt63qI.js +0 -1
  368. package/dist/assets/stage-overlay-set-juTRuk99.js +0 -1
  369. package/dist/assets/stage-presence-markers-XsGUs3S-.js +0 -1
  370. package/dist/assets/stage-transform-tools-BE7m4omf.js +0 -1
  371. package/dist/assets/standard-viewport-dressing-asIXnD-w.js +0 -24
  372. package/dist/assets/std-scene-level-DeiReu6Z.js +0 -13
  373. package/dist/assets/std-scene.document-DyWMJhxA.js +0 -1
  374. package/dist/assets/story-capture-Y8_YS5DC.js +0 -1
  375. package/dist/assets/studio-CysTBGIb.exr +0 -0
  376. package/dist/assets/substance.style-CoQdG-kF.js +0 -1
  377. package/dist/assets/sunrise-Dj0psFrf.exr +0 -0
  378. package/dist/assets/sunset-Bw3x2Bot.exr +0 -0
  379. package/dist/assets/texture.layout-DASpHVht.js +0 -1
  380. package/dist/assets/three.module-JoAAxMWl.js +0 -4220
  381. package/dist/assets/three.page-Dy2q5JEV.js +0 -2
  382. package/dist/assets/transparent_z_write-xIRcVb2w.blend +0 -0
  383. package/dist/assets/transport-strip-cKO8FHd1.js +0 -1
  384. package/dist/assets/uv-editing.layout-CF_54oSA.js +0 -1
  385. package/dist/assets/volter-sdk-D8o6TU4A.js +0 -1407
  386. package/dist/assets/volter-sdk-activation-events-DVerKSly.js +0 -1
  387. package/dist/assets/volter-sdk-active-project-f6toeBI4.js +0 -1
  388. package/dist/assets/volter-sdk-adapter-editor-config-DpARQ4TT.js +0 -1
  389. package/dist/assets/volter-sdk-animation-animation-clock-BGyYYQu-.js +0 -1
  390. package/dist/assets/volter-sdk-animation-stage-transport-DWmyow46.js +0 -1
  391. package/dist/assets/volter-sdk-api-base-jDs2XVgE.js +0 -1
  392. package/dist/assets/volter-sdk-api-project-open-BAXokZLA.js +0 -1
  393. package/dist/assets/volter-sdk-api-project-source-D6FB4SmO.js +0 -1
  394. package/dist/assets/volter-sdk-api-settings-DqgndoPA.js +0 -1
  395. package/dist/assets/volter-sdk-asset-capabilities-B5mXIYBM.js +0 -1
  396. package/dist/assets/volter-sdk-asset-document-write-policy-B5aaFAwu.js +0 -1
  397. package/dist/assets/volter-sdk-asset-editor-context-BjtZQVgF.js +0 -1
  398. package/dist/assets/volter-sdk-asset-thumbnails-CROlpqPM.js +0 -1
  399. package/dist/assets/volter-sdk-asset-viewers-BejvElAX.js +0 -1
  400. package/dist/assets/volter-sdk-asset-workflow-project-content-D8h-TsJc.js +0 -1
  401. package/dist/assets/volter-sdk-authoring-active-adapter-DhKlZbyW.js +0 -1
  402. package/dist/assets/volter-sdk-authoring-boundary-authoring-adapter-xlppcGid.js +0 -1
  403. package/dist/assets/volter-sdk-authoring-composite-authoring-adapter-BfalSuB8.js +0 -1
  404. package/dist/assets/volter-sdk-authoring-consumer-actions-Hl6xkGAq.js +0 -1
  405. package/dist/assets/volter-sdk-authoring-design-time-mount-registry-2ZssbtYd.js +0 -1
  406. package/dist/assets/volter-sdk-authoring-design-time-roots-BNNZdEog.js +0 -1
  407. package/dist/assets/volter-sdk-authoring-layered-pick-AsUoH85M.js +0 -1
  408. package/dist/assets/volter-sdk-authoring-no-authoring-adapter-BX6sVPQX.js +0 -1
  409. package/dist/assets/volter-sdk-authoring-panel-authoring-BRs7fYSJ.js +0 -1
  410. package/dist/assets/volter-sdk-authoring-react-design-canvas-style-CdjO9_22.js +0 -1
  411. package/dist/assets/volter-sdk-authoring-seam-evidence-D58d2whR.js +0 -1
  412. package/dist/assets/volter-sdk-authoring-selection-scope-tqpilIPR.js +0 -1
  413. package/dist/assets/volter-sdk-authoring-shell-document-ops-ryosWWqt.js +0 -1
  414. package/dist/assets/volter-sdk-authoring-stage-root-yn7zP1QC.js +0 -1
  415. package/dist/assets/volter-sdk-authoring-story-board-chrome-fit-DgAAtVo8.js +0 -1
  416. package/dist/assets/volter-sdk-authoring-viewport-tool-owner-zIgbNhiQ.js +0 -1
  417. package/dist/assets/volter-sdk-authoring-world-session-state-DriMgIzp.js +0 -1
  418. package/dist/assets/volter-sdk-bitmap-label-Cwzw278F.js +0 -1
  419. package/dist/assets/volter-sdk-bytes-codec-CF2kvi68.js +0 -1
  420. package/dist/assets/volter-sdk-cancellation-reason-BQvS02ja.js +0 -1
  421. package/dist/assets/volter-sdk-canvas-frames-BkjDC0or.js +0 -1
  422. package/dist/assets/volter-sdk-capture-size-B3uOMPdw.js +0 -1
  423. package/dist/assets/volter-sdk-chrome-registry-Be1q89aJ.js +0 -1
  424. package/dist/assets/volter-sdk-command-result-text-DdPWoVLu.js +0 -1
  425. package/dist/assets/volter-sdk-commands-DI54EGoY.js +0 -1
  426. package/dist/assets/volter-sdk-component-board-registry-DtTf1V5m.js +0 -1
  427. package/dist/assets/volter-sdk-components-InspectorCanvasPreview-DpOxql_B.js +0 -1
  428. package/dist/assets/volter-sdk-components-SurfaceStateOverlay-BQ9KTVV1.js +0 -1
  429. package/dist/assets/volter-sdk-components-Toolbar-C6bwDRIc.js +0 -1
  430. package/dist/assets/volter-sdk-components-TransientHint-D3wtJ4fg.js +0 -1
  431. package/dist/assets/volter-sdk-components-inspector-preview-section-D1DnmKLE.js +0 -1
  432. package/dist/assets/volter-sdk-components-use-after-paint-ZgZgfmSR.js +0 -1
  433. package/dist/assets/volter-sdk-components-workspace-history-IZTWOoYh.js +0 -1
  434. package/dist/assets/volter-sdk-content-entry-source-registry-DV4a0g9R.js +0 -1
  435. package/dist/assets/volter-sdk-contribution-surfaces-BAzaKN1S.js +0 -1
  436. package/dist/assets/volter-sdk-contributions-D2D_badr.js +0 -1
  437. package/dist/assets/volter-sdk-coverage-design-time-surfaces-WtyoVY81.js +0 -1
  438. package/dist/assets/volter-sdk-creation-site-registry-DEJua1VB.js +0 -1
  439. package/dist/assets/volter-sdk-css-numeric-style-D1aEQUuP.js +0 -1
  440. package/dist/assets/volter-sdk-declared-tools-bEg2ZQju.js +0 -1
  441. package/dist/assets/volter-sdk-document-open-registry-BUdLp-BZ.js +0 -1
  442. package/dist/assets/volter-sdk-document-play-extension-BdtD2FcX.js +0 -1
  443. package/dist/assets/volter-sdk-document-probe-CvSMoXNj.js +0 -1
  444. package/dist/assets/volter-sdk-document-stage-sessions-BHE1T4gT.js +0 -1
  445. package/dist/assets/volter-sdk-document-viewports-BJqFXfe4.js +0 -1
  446. package/dist/assets/volter-sdk-editor-commands-CsYQVabs.js +0 -1
  447. package/dist/assets/volter-sdk-editor-console-lUTMRzeI.js +0 -1
  448. package/dist/assets/volter-sdk-editor-document-probe-BHRNXR9L.js +0 -1
  449. package/dist/assets/volter-sdk-editor-mode-BgYsrjin.js +0 -1
  450. package/dist/assets/volter-sdk-editor-runtime-CTy0Dw7-.js +0 -1
  451. package/dist/assets/volter-sdk-editor-server-response-oN9Horql.js +0 -1
  452. package/dist/assets/volter-sdk-editor-session-attribution-Ddoo0-e6.js +0 -1
  453. package/dist/assets/volter-sdk-editor-view-DEdcNl3N.js +0 -1
  454. package/dist/assets/volter-sdk-environment-images-Cbyno2vh.js +0 -1
  455. package/dist/assets/volter-sdk-extension-script-eemVEaFY.js +0 -1
  456. package/dist/assets/volter-sdk-eyedropper-session-BL5ceME-.js +0 -1
  457. package/dist/assets/volter-sdk-files-file-provider-D1vbGyMw.js +0 -1
  458. package/dist/assets/volter-sdk-files-project-files-CP9k503M.js +0 -1
  459. package/dist/assets/volter-sdk-framed-document-capture-DmqG4gUx.js +0 -1
  460. package/dist/assets/volter-sdk-framed-document-driver-B1ZAcb9l.js +0 -1
  461. package/dist/assets/volter-sdk-hierarchy-component-marks-DjtdLv04.js +0 -1
  462. package/dist/assets/volter-sdk-hierarchy-kind-icon-Dwlq9_xw.js +0 -1
  463. package/dist/assets/volter-sdk-hierarchy-row-media-CnFXPw4O.js +0 -1
  464. package/dist/assets/volter-sdk-hierarchy-row-model-TWxtUUdN.js +0 -1
  465. package/dist/assets/volter-sdk-hierarchy-rows-3Hl6K3Br.js +0 -1
  466. package/dist/assets/volter-sdk-hierarchy-walk-DvIomDWH.js +0 -1
  467. package/dist/assets/volter-sdk-history-history-delegate-RfZBUw9Y.js +0 -1
  468. package/dist/assets/volter-sdk-history-history-service-BWYajIYW.js +0 -1
  469. package/dist/assets/volter-sdk-history-persistence-coordinator-CmebAufQ.js +0 -1
  470. package/dist/assets/volter-sdk-history-resource-registry-CgjY-ErS.js +0 -1
  471. package/dist/assets/volter-sdk-history-snapshot-store-6Cq4Qau6.js +0 -1
  472. package/dist/assets/volter-sdk-history-source-history-backend-CilZiNDq.js +0 -1
  473. package/dist/assets/volter-sdk-hmr-registration-group-idNaexWq.js +0 -1
  474. package/dist/assets/volter-sdk-hmr-stable-react-context-DhY9rjD6.js +0 -1
  475. package/dist/assets/volter-sdk-host-BcQCyyIe.js +0 -1
  476. package/dist/assets/volter-sdk-inference-diagnostics-c4Aju1Jg.js +0 -1
  477. package/dist/assets/volter-sdk-inspection-document-subject-i64BmR5X.js +0 -1
  478. package/dist/assets/volter-sdk-inspection-group-icons-CWwhjZWt.js +0 -1
  479. package/dist/assets/volter-sdk-inspection-model-BgZVa_7l.js +0 -1
  480. package/dist/assets/volter-sdk-inspection-node-media-DNYb7ZDG.js +0 -1
  481. package/dist/assets/volter-sdk-inspection-null-subject-hK6kZbB7.js +0 -1
  482. package/dist/assets/volter-sdk-inspector-property-grouping-B-4_nVMm.js +0 -1
  483. package/dist/assets/volter-sdk-inspector-section-registry-DIYAa_rQ.js +0 -1
  484. package/dist/assets/volter-sdk-js-heap-DDws540T.js +0 -1
  485. package/dist/assets/volter-sdk-layout-arrangements-DdjnA7ET.js +0 -1
  486. package/dist/assets/volter-sdk-layouts-DcV6NQNu.js +0 -1
  487. package/dist/assets/volter-sdk-light-explorer-model-BoB1GjBo.js +0 -1
  488. package/dist/assets/volter-sdk-live-seam-evidence-BOvNn-o8.js +0 -1
  489. package/dist/assets/volter-sdk-live-session-registry--ftGWuRg.js +0 -1
  490. package/dist/assets/volter-sdk-mount-css-scope-BTi-3JA9.js +0 -1
  491. package/dist/assets/volter-sdk-mount-failure-report-BeR90-6n.js +0 -1
  492. package/dist/assets/volter-sdk-native-selection-style-70aZpb0m.js +0 -1
  493. package/dist/assets/volter-sdk-photograph-notice-BwuWgyiq.js +0 -1
  494. package/dist/assets/volter-sdk-play-camera-flight-CaSiTxDt.js +0 -1
  495. package/dist/assets/volter-sdk-product-command-Cf1utO0M.js +0 -1
  496. package/dist/assets/volter-sdk-project-module-changes-CIKyvjy2.js +0 -1
  497. package/dist/assets/volter-sdk-project-module-url-XzZmS9zs.js +0 -1
  498. package/dist/assets/volter-sdk-project-output-roots-B4bC82T9.js +0 -1
  499. package/dist/assets/volter-sdk-renderer-resource-counts-S3R39qoy.js +0 -1
  500. package/dist/assets/volter-sdk-scoped-project-css-Ch7LkU2q.js +0 -1
  501. package/dist/assets/volter-sdk-selection-C2gFhPip.js +0 -1
  502. package/dist/assets/volter-sdk-served-url-DxzhEpXR.js +0 -1
  503. package/dist/assets/volter-sdk-serving-engine-BclAA7ZZ.js +0 -1
  504. package/dist/assets/volter-sdk-settings-settings-provider-DGc5Xf46.js +0 -1
  505. package/dist/assets/volter-sdk-settings-store-Bmx-a8f0.js +0 -1
  506. package/dist/assets/volter-sdk-shell-store-door-CQlHDF_i.js +0 -1
  507. package/dist/assets/volter-sdk-shell-store-e-X3-CSz.js +0 -1
  508. package/dist/assets/volter-sdk-source-conflict-DEn0Z5Vq.js +0 -1
  509. package/dist/assets/volter-sdk-stage-context-CwBngGWz.js +0 -1
  510. package/dist/assets/volter-sdk-stage-invalidation-Bt1Gs-b2.js +0 -1
  511. package/dist/assets/volter-sdk-stage-store-registry-DtSMhopZ.js +0 -1
  512. package/dist/assets/volter-sdk-stories-compose-project-stories-DfgTy2Bp.js +0 -1
  513. package/dist/assets/volter-sdk-stories-scope-4lTT6I0H.js +0 -1
  514. package/dist/assets/volter-sdk-stories-story-declared-medium-BFcKINTP.js +0 -1
  515. package/dist/assets/volter-sdk-stories-story-dom-runtime-wAz1MhyJ.js +0 -1
  516. package/dist/assets/volter-sdk-stories-story-grouping-bVoaiX0-.js +0 -1
  517. package/dist/assets/volter-sdk-surface-keyboard-5u3olsPL.js +0 -1
  518. package/dist/assets/volter-sdk-surface-state-F5vfsPyq.js +0 -1
  519. package/dist/assets/volter-sdk-tab-census-B95O0nem.js +0 -1
  520. package/dist/assets/volter-sdk-tool-contribution-convention-k_AVbxWl.js +0 -1
  521. package/dist/assets/volter-sdk-transform-mode-request-CKhq0gIu.js +0 -1
  522. package/dist/assets/volter-sdk-transient-hint-DQMQ2_Y5.js +0 -1
  523. package/dist/assets/volter-sdk-ui-source-file-region-resolver-2Gw755Lw.js +0 -1
  524. package/dist/assets/volter-sdk-ui-source-tier-source-write-backend-BsEnWjJv.js +0 -1
  525. package/dist/assets/volter-sdk-viewport-activation-timings--7x_AkVR.js +0 -1
  526. package/dist/assets/volter-sdk-viewport-editor-controls-CFuNGxo6.js +0 -1
  527. package/dist/assets/volter-sdk-viewport-presentation-CoiYwzFE.js +0 -1
  528. package/dist/assets/volter-sdk-volter-contributions-DjgbZdIJ.js +0 -1
  529. package/dist/assets/volter-sdk-wait-until-DRdtM37d.js +0 -1
  530. package/dist/assets/volter-sdk-widgets-design-system-CPmOMXke.js +0 -1
  531. package/dist/assets/volter-sdk-widgets-editor-appearance-B4Q93899.js +0 -1
  532. package/dist/assets/volter-sdk-widgets-editor-material-C6dqUruc.js +0 -1
  533. package/dist/assets/volter-sdk-widgets-icon-set-registry-BOtjeU-M.js +0 -1
  534. package/dist/assets/volter-sdk-widgets-index-C2FSk2KK.js +0 -1
  535. package/dist/assets/volter-sdk-widgets-inspector-widgets-AlignmentGrid-ClaWmFsj.js +0 -1
  536. package/dist/assets/volter-sdk-widgets-inspector-widgets-AssetSlotPicker-DIoRDT6D.js +0 -1
  537. package/dist/assets/volter-sdk-widgets-inspector-widgets-BorderEditor-BcsoJNaT.js +0 -1
  538. package/dist/assets/volter-sdk-widgets-inspector-widgets-ColorPicker-p_xfUT04.js +0 -1
  539. package/dist/assets/volter-sdk-widgets-inspector-widgets-CurveEditor-RbGdt95N.js +0 -1
  540. package/dist/assets/volter-sdk-widgets-inspector-widgets-FontPicker-DxdmydaC.js +0 -1
  541. package/dist/assets/volter-sdk-widgets-inspector-widgets-GradientEditor-DZ0Z3l2P.js +0 -1
  542. package/dist/assets/volter-sdk-widgets-inspector-widgets-ScrubbableInput-Byy_M7hB.js +0 -1
  543. package/dist/assets/volter-sdk-widgets-inspector-widgets-ShadowEditor-C9aPdbrZ.js +0 -1
  544. package/dist/assets/volter-sdk-widgets-inspector-widgets-color-utils-BJStispK.js +0 -1
  545. package/dist/assets/volter-sdk-widgets-inspector-widgets-curve-utils-C_5eRE_F.js +0 -1
  546. package/dist/assets/volter-sdk-widgets-inspector-widgets-index-BA3S0eIV.js +0 -1
  547. package/dist/assets/volter-sdk-widgets-inspector-widgets-shared-DHHUQexs.js +0 -1
  548. package/dist/assets/volter-sdk-widgets-interactive-edit-scope-CjuUPrEv.js +0 -1
  549. package/dist/assets/volter-sdk-widgets-patterns-Dialog-CQggdCbk.js +0 -1
  550. package/dist/assets/volter-sdk-widgets-patterns-Fields-D38At0E9.js +0 -1
  551. package/dist/assets/volter-sdk-widgets-patterns-List-ewRDByTO.js +0 -1
  552. package/dist/assets/volter-sdk-widgets-patterns-StateSurface-C8YqnN-5.js +0 -1
  553. package/dist/assets/volter-sdk-widgets-patterns-Surfaces-BjFrm6Mc.js +0 -1
  554. package/dist/assets/volter-sdk-widgets-patterns-Tabs-JZq1ce4h.js +0 -1
  555. package/dist/assets/volter-sdk-widgets-patterns-Toolbar-Bf61fc1T.js +0 -1
  556. package/dist/assets/volter-sdk-widgets-patterns-Tree-CwuVbaxj.js +0 -1
  557. package/dist/assets/volter-sdk-widgets-primitives-AnchoredMenu-Ch2ujeLH.js +0 -1
  558. package/dist/assets/volter-sdk-widgets-primitives-Button-d2WNMADR.js +0 -1
  559. package/dist/assets/volter-sdk-widgets-primitives-ColorInput-DP0WkwNs.js +0 -1
  560. package/dist/assets/volter-sdk-widgets-primitives-DraftTextInput-D1g1A89b.js +0 -1
  561. package/dist/assets/volter-sdk-widgets-primitives-EditorIcon-DAjALCvl.js +0 -1
  562. package/dist/assets/volter-sdk-widgets-primitives-FormControls-KBDCYHsT.js +0 -1
  563. package/dist/assets/volter-sdk-widgets-primitives-HoverPreview-D2qUt6_z.js +0 -1
  564. package/dist/assets/volter-sdk-widgets-primitives-JsonInput-DLs3kN1L.js +0 -1
  565. package/dist/assets/volter-sdk-widgets-primitives-Layout-DshSsm_4.js +0 -1
  566. package/dist/assets/volter-sdk-widgets-primitives-Menu-Ch-3iDys.js +0 -1
  567. package/dist/assets/volter-sdk-widgets-primitives-NumberInput-pdAN4aF3.js +0 -1
  568. package/dist/assets/volter-sdk-widgets-primitives-Panel-BNFSUDwP.js +0 -1
  569. package/dist/assets/volter-sdk-widgets-primitives-SectionHeader-5Hv-rso1.js +0 -1
  570. package/dist/assets/volter-sdk-widgets-primitives-Text-CtWC8t_L.js +0 -1
  571. package/dist/assets/volter-sdk-widgets-primitives-ThemeRootPortal-h0iinIvj.js +0 -1
  572. package/dist/assets/volter-sdk-widgets-primitives-Tooltip-Cllx19nM.js +0 -1
  573. package/dist/assets/volter-sdk-widgets-primitives-Vec3Input-CurGarFa.js +0 -1
  574. package/dist/assets/volter-sdk-widgets-primitives-clamp-to-viewport-0YxAdd5O.js +0 -1
  575. package/dist/assets/volter-sdk-widgets-primitives-editor-icons-ExQE8_SP.js +0 -1
  576. package/dist/assets/volter-sdk-widgets-primitives-panel-header-styles-DGmxyx4E.js +0 -1
  577. package/dist/assets/volter-sdk-widgets-theme-DOfZnIVM.js +0 -1
  578. package/dist/assets/volter-sdk-widgets-z-index-BpB2pf-w.js +0 -1
  579. package/dist/assets/volter-sdk-worker-call-metrics-Cdo-WjAp.js +0 -1
  580. package/dist/assets/volter-sdk-workspace-document-ids-CWVlaP7n.js +0 -1
  581. package/dist/assets/volter-sdk-workspace-document-registry-DoKaj8Fe.js +0 -1
  582. package/dist/assets/volter-sdk-workspace-document-restore-BOPAH61D.js +0 -1
  583. package/dist/assets/volter-sdk-workspace-static-panels-DZr1Q4n1.js +0 -1
  584. package/dist/assets/volter-sdk-workspace-status-registry-pIvpW3QR.js +0 -1
  585. package/dist/assets/volter-sdk-workspace-utility-registry-BRzyLcLs.js +0 -1
  586. package/dist/assets/volter-sdk-world-canvas-viewport-state-DeMws4Bu.js +0 -1
  587. package/dist/assets/volter-sdk-world-pan-state-Dpul1S4k.js +0 -1
  588. package/dist/assets/volter-sdk-write-pipe-vbjHAGKf.js +0 -1
  589. package/dist/assets/volter-shared-react-dom-client-B6uCXsbq.js +0 -1
  590. package/dist/assets/volter-shared-three-DSLGcAKx.js +0 -1
  591. package/dist/assets/worker-DeeaIXW_.js +0 -10
  592. package/src/contributions.d.ts +0 -9
  593. package/starter/game/client/index.tsx +0 -52
  594. package/starter/game/levels/GroundEnvironment.tsx +0 -15
  595. package/starter/game/levels/GroundLevel.tsx +0 -35
  596. package/starter/game/levels/ground.canvas.ts +0 -11
  597. package/starter/game/levels/ground.glb +0 -0
  598. package/starter/game/levels/ground.py +0 -142
package/dist-node/cli.js CHANGED
@@ -815,7 +815,7 @@ __export(blender_mcp_exports, {
815
815
  });
816
816
  import { randomUUID } from "node:crypto";
817
817
  import { mkdirSync as mkdirSync6, readFileSync as readFileSync7, writeFileSync as writeFileSync5 } from "node:fs";
818
- import { delimiter, dirname as dirname7, isAbsolute as isAbsolute3, relative as relative7, sep as sep4 } from "node:path";
818
+ import { delimiter, dirname as dirname7, isAbsolute as isAbsolute3, relative as relative7, sep as sep5 } from "node:path";
819
819
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
820
820
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
821
821
  import {
@@ -825,8 +825,9 @@ import {
825
825
  ListToolsRequestSchema
826
826
  } from "@modelcontextprotocol/sdk/types.js";
827
827
  import { EditorClient as EditorClient4 } from "@volter/live/client";
828
+ import { sessionFetch as sessionFetch4 } from "@volter/live/registry-format";
828
829
  function projectRelative(project, absolute) {
829
- const rel = relative7(project, absolute).split(sep4).join("/");
830
+ const rel = relative7(project, absolute).split(sep5).join("/");
830
831
  if (rel === "" || rel.startsWith("../")) return null;
831
832
  return rel;
832
833
  }
@@ -1026,7 +1027,7 @@ var init_blender_mcp = __esm({
1026
1027
  const shipped = projectPath !== null && projectOutputRootOf(projectPath) === "public" ? projectPath : null;
1027
1028
  const transferId = randomUUID();
1028
1029
  await tab.commandHeld("blender-read-file", { path: entry.path, transferId });
1029
- const spooled = await fetch(`${await tab.origin()}/__editor/blender-file?id=${transferId}`);
1030
+ const spooled = await sessionFetch4(`${await tab.origin()}/__editor/blender-file?id=${transferId}`);
1030
1031
  if (!spooled.ok) throw new Error(`Transfer of ${entry.path} failed: ${spooled.status}`);
1031
1032
  const bytes = Buffer.from(await spooled.arrayBuffer());
1032
1033
  if (shipped === null) {
@@ -1050,7 +1051,7 @@ var init_blender_mcp = __esm({
1050
1051
  });
1051
1052
  if (typeof listing.document === "string" && listing.document !== "")
1052
1053
  query.append("inputs", listing.document);
1053
- const recorded = await fetch(`${await tab.origin()}/__editor/blender-output?${query}`, {
1054
+ const recorded = await sessionFetch4(`${await tab.origin()}/__editor/blender-output?${query}`, {
1054
1055
  method: "POST",
1055
1056
  body: new Uint8Array(bytes)
1056
1057
  });
@@ -1132,12 +1133,12 @@ __export(render_movie_exports, {
1132
1133
  });
1133
1134
  import { randomUUID as randomUUID2 } from "node:crypto";
1134
1135
  import { copyFileSync, mkdirSync as mkdirSync7, unlinkSync } from "node:fs";
1135
- import { dirname as dirname8, isAbsolute as isAbsolute4, join as join11, relative as relative8, sep as sep5 } from "node:path";
1136
+ import { dirname as dirname8, isAbsolute as isAbsolute4, join as join11, relative as relative8, sep as sep6 } from "node:path";
1136
1137
  import { connect as connect6 } from "@volter/live";
1137
1138
  async function renderProjectMovie(projectRoot, options) {
1138
1139
  const within = relative8(projectRoot, options.out);
1139
1140
  const inProject = within !== "" && !within.startsWith("..") && !isAbsolute4(within);
1140
- const written = inProject ? within.split(sep5).join("/") : `.volter/renders/${randomUUID2()}.webm`;
1141
+ const written = inProject ? within.split(sep6).join("/") : `.volter/renders/${randomUUID2()}.webm`;
1141
1142
  const from = frameOrMarker(options.from);
1142
1143
  const to = frameOrMarker(options.to);
1143
1144
  if (options.composition !== void 0 && (typeof from === "string" || typeof to === "string"))
@@ -1216,7 +1217,7 @@ var package_default = {
1216
1217
  name: "@volter/cyclotron",
1217
1218
  publisher: "volter",
1218
1219
  author: "Volter AI, Inc.",
1219
- version: "0.5.212",
1220
+ version: "0.5.213",
1220
1221
  publishConfig: {
1221
1222
  access: "public"
1222
1223
  },
@@ -1284,31 +1285,31 @@ var package_default = {
1284
1285
  adapterRequired: true,
1285
1286
  workbench: {
1286
1287
  "darwin-arm64": {
1287
- release: "cyclotron-4a7cd45e4186-78f596095cf0-darwin-arm64",
1288
- tarballSha256: "f32ac81bcc072d7b84591affdead5dbb62621eb7480b8b89acece5d274e63624"
1288
+ release: "cyclotron-624490512f0c-0ba7394f05b2-darwin-arm64",
1289
+ tarballSha256: "4b752c3abd5595e2e4f7ae4d750b78d2f3c1a0da98140a8ee04c89893689a836"
1289
1290
  },
1290
1291
  "linux-x64": {
1291
- release: "cyclotron-4782d9a281ef-5b6840f8c154-linux-x64",
1292
- tarballSha256: "5fe9b6965453ad47a140f6ca939fbbc56a5b7ab9b2aec4b125d7d31f5adea5f9"
1292
+ release: "cyclotron-624490512f0c-0ba7394f05b2-linux-x64",
1293
+ tarballSha256: "6028c6d71df09bbb67ee90b936fc80fdc429d5ef0b1c78db07a6c39d9a4b2e1c"
1293
1294
  },
1294
1295
  "win32-x64": {
1295
- release: "cyclotron-4782d9a281ef-5b6840f8c154-win32-x64",
1296
- tarballSha256: "c623156000dff25c6dbb4d88992b4a3d4d5a7aeb42a1882f1b9e20c8f496df04"
1296
+ release: "cyclotron-624490512f0c-0ba7394f05b2-win32-x64",
1297
+ tarballSha256: "57e8fa6dbc439de5fba7da35fa17c710644d465842bd967c8ba7f1e73fcbee2f"
1297
1298
  }
1298
1299
  }
1299
1300
  }
1300
1301
  }
1301
1302
  },
1302
1303
  dependencies: {
1303
- "@volter/editor-core": "0.5.212",
1304
- "@volter/editor-blender": "0.1.151",
1305
- "@volter/editor-threejs": "0.5.212",
1306
- "@volter/chat": "0.5.212",
1307
- "@volter/blender-engine": "0.1.149",
1308
- "@volter/project": "0.5.212",
1309
- "@volter/sdk": "0.5.212",
1310
- "@volter/live": "0.5.212",
1311
- "@volter/play": "0.5.212",
1304
+ "@volter/editor-core": "0.5.213",
1305
+ "@volter/editor-blender": "0.1.152",
1306
+ "@volter/editor-threejs": "0.5.213",
1307
+ "@volter/chat": "0.5.213",
1308
+ "@volter/blender-engine": "0.1.150",
1309
+ "@volter/project": "0.5.213",
1310
+ "@volter/sdk": "0.5.213",
1311
+ "@volter/live": "0.5.213",
1312
+ "@volter/play": "0.5.213",
1312
1313
  three: "^0.186.1",
1313
1314
  "@modelcontextprotocol/sdk": "1.32.1",
1314
1315
  typescript: "5.9.3",
@@ -15290,6 +15291,9 @@ function run(program, args, cwd, what) {
15290
15291
  function stdNew(std, folder, name) {
15291
15292
  return run(process.execPath, [std, "new", folder, "--name", name], dirname(folder), "std new");
15292
15293
  }
15294
+ function stdUpgrade(std, folder) {
15295
+ return run(process.execPath, [std, "upgrade", folder], folder, "std upgrade");
15296
+ }
15293
15297
  function gameStd(project, args) {
15294
15298
  const std = join2(project, "node_modules", "@volter-ai", "std-dev", "bin", "std.js");
15295
15299
  if (!existsSync2(std)) throw new Error(`${project} has no @volter-ai/std-dev installed (node_modules/@volter-ai/std-dev): run \`pnpm install\` there.`);
@@ -15339,8 +15343,8 @@ var EXAMPLES = {
15339
15343
  dependencies: { i18next: "~26.7.2" },
15340
15344
  /** The goal the game's `play` scripts name in place of the starter's. */
15341
15345
  goal: "win",
15342
- /** std's starter files the example has no use for: its ground level, its walking characters and its chat. */
15343
- removes: ["levels/GroundLevel.tsx", "client/characters.tsx", "client/chat.tsx"]
15346
+ /** std's starter files the example has no use for: its main level, its walking characters and its chat. */
15347
+ removes: ["levels/MainLevel.tsx", "client/characters.tsx", "client/chat.tsx"]
15344
15348
  }
15345
15349
  };
15346
15350
  var isExample = (id) => Object.hasOwn(EXAMPLES, id);
@@ -15606,7 +15610,7 @@ async function startupProject(create, { cwd = process.cwd(), home = homedir() }
15606
15610
 
15607
15611
  // node/chat.ts
15608
15612
  import { connect } from "@volter/live";
15609
- import { readLiveRegisteredSessions } from "@volter/live/registry-format";
15613
+ import { sessionFetch } from "@volter/live/registry-format";
15610
15614
  var CHAT_USAGE = "chat status | chat send <prompt> | chat stop";
15611
15615
  var SEND_CONFIRM_MS = 8e3;
15612
15616
  async function chat(args) {
@@ -15630,15 +15634,10 @@ async function chat(args) {
15630
15634
  throw new Error("Chat is waiting on an approval in the editor. Answer it there (or use chat stop), then send.");
15631
15635
  }
15632
15636
  if (action === "send" && state.busy) {
15633
- const entry = readLiveRegisteredSessions().find((s) => s.port === session.port);
15634
15637
  const origin = `http://127.0.0.1:${session.port}`;
15635
- const response = await fetch(`${origin}/__editor/harness-chat/steer`, {
15638
+ const response = await sessionFetch(`${origin}/__editor/harness-chat/steer`, {
15636
15639
  method: "POST",
15637
- headers: {
15638
- "Content-Type": "application/json",
15639
- Origin: origin,
15640
- ...entry?.controlSecret ? { "x-volter-editor-control": entry.controlSecret } : {}
15641
- },
15640
+ headers: { "Content-Type": "application/json", Origin: origin },
15642
15641
  body: JSON.stringify({ text: prompt })
15643
15642
  });
15644
15643
  const said2 = await response.json().catch(() => null);
@@ -15693,14 +15692,13 @@ async function chat(args) {
15693
15692
 
15694
15693
  // node/play-log.ts
15695
15694
  import { connect as connect2 } from "@volter/live";
15696
- var PLAY_LOG_USAGE = "play-log [--since <simTime>] [--kind <kind>] [--document <id>] [--json]";
15695
+ var PLAY_LOG_USAGE = "play-log [--since <simTime>] [--kind <kind>] [--json]";
15697
15696
  async function playLog(options) {
15698
15697
  const since = options.since === void 0 ? void 0 : Number(options.since);
15699
15698
  if (since !== void 0 && !Number.isFinite(since))
15700
15699
  throw new Error(`--since takes simulation seconds, a number; it was given ${options.since}.`);
15701
15700
  const live = await connect2();
15702
- const { ok: _ok, ...reading } = await live.editor.contributedVerb("model-play-log", {
15703
- ...options.document === void 0 ? {} : { documentId: options.document },
15701
+ const { ok: _ok, ...reading } = await live.editor.contributedVerb("play-log", {
15704
15702
  ...since === void 0 ? {} : { since },
15705
15703
  ...options.kind === void 0 ? {} : { kind: options.kind }
15706
15704
  });
@@ -15709,11 +15707,10 @@ async function playLog(options) {
15709
15707
  return;
15710
15708
  }
15711
15709
  if (reading.script === null) {
15712
- console.log(options.document === void 0 ? "Nothing has played since the editor page loaded." : `${options.document} has not played since the editor page loaded${reading.documents.length ? `; logs: ${reading.documents.join(", ")}` : ""}.`);
15710
+ console.log("Nothing has played since the editor page loaded.");
15713
15711
  return;
15714
15712
  }
15715
15713
  const kept = reading.total - reading.dropped;
15716
- if (reading.documents.length > 1) console.log(`Logs: ${reading.documents.join(", ")}; this is ${reading.documentId}'s (--document picks another).`);
15717
15714
  console.log(`Play log of ${reading.script}: ${reading.playing ? "playing" : "stopped"} at ${reading.simT.toFixed(3)}s, tick ${reading.tick}; ${kept} of ${reading.total} entries kept${reading.dropped ? ` (the oldest ${reading.dropped} dropped)` : ""}, ${reading.entries.length} shown.`);
15718
15715
  for (const entry of reading.entries)
15719
15716
  console.log(`${entry.simT.toFixed(3).padStart(10)}s #${String(entry.tick).padEnd(6)} ${entry.kind}${entry.facts ? ` ${JSON.stringify(entry.facts)}` : ""}`);
@@ -15726,6 +15723,7 @@ import { join as join5, relative as relative3, resolve as resolve4 } from "node:
15726
15723
  var ADD_PLAY_USAGE = "add-play [folder] # make this project a volter-ai/std game: std new into it, its models moved to levels/";
15727
15724
  var MERGED = ["package.json", ".gitignore", "tsconfig.json"];
15728
15725
  var ASIDE = join5(".volter", "add-play");
15726
+ var LEVEL_FINDER = "{ finder: 'stdLevelDocuments', include: ['levels/**/*.tsx', 'levels/**/*.blend'] }";
15729
15727
  function projectOf(folder) {
15730
15728
  let dir = resolve4(folder);
15731
15729
  while (!existsSync5(join5(dir, MANIFEST_FILENAME))) {
@@ -15799,11 +15797,11 @@ ${missing.join("\n")}
15799
15797
  const adapterPath = join5(project, "editor", "volter.adapter.ts");
15800
15798
  if (existsSync5(adapterPath)) {
15801
15799
  const adapter = await readFile3(adapterPath, "utf8");
15802
- const next = adapter.replace(/include: \['src\/models\/\*\*\/\*\.blend'\]/, "include: ['levels/**/*.blend', 'prefabs/**/*.blend']").replace(/default: 'model:src\/models\/([^'/]+\.blend)'/, "default: 'model:levels/$1'");
15803
- if (next.includes("include: ['levels/**/*.blend', 'prefabs/**/*.blend']")) {
15800
+ const next = adapter.replace(/include: \['src\/models\/\*\*\/\*\.blend'\] \}/, `include: ['levels/**/*.blend', 'prefabs/**/*.blend'] }, ${LEVEL_FINDER}`).replace(/default: 'model:src\/models\/[^'/]+\.blend', /, "");
15801
+ if (next.includes(LEVEL_FINDER)) {
15804
15802
  await writeFile2(adapterPath, next);
15805
- said2.push("editor/volter.adapter.ts: its documents are levels/**/*.blend and prefabs/**/*.blend");
15806
- } else said2.push("editor/volter.adapter.ts has a shape this command does not edit: make its modelsFromBlendFiles finder include ['levels/**/*.blend', 'prefabs/**/*.blend']");
15803
+ said2.push("editor/volter.adapter.ts: its documents are levels/**/*.blend, prefabs/**/*.blend and each level, and it opens on the main level");
15804
+ } else said2.push(`editor/volter.adapter.ts has a shape this command does not edit: make its modelsFromBlendFiles finder include ['levels/**/*.blend', 'prefabs/**/*.blend'], add ${LEVEL_FINDER}, and drop its default`);
15807
15805
  }
15808
15806
  const nodeModules = join5(project, "node_modules");
15809
15807
  if (existsSync5(nodeModules) && lstatSync(nodeModules).isSymbolicLink()) await unlink(nodeModules);
@@ -15874,9 +15872,9 @@ function joinNegativeValues(args, options) {
15874
15872
 
15875
15873
  // node/play.ts
15876
15874
  import { connect as connect4 } from "@volter/live";
15877
- var PLAY_USAGE = "play [state] | play play|stop|pause|resume|restart | play step [count] | play speed <0.25|0.5|1|2|4> | play mode [game|animation] | play autoplay on [<goal>] | play autoplay off [--document <id>]";
15875
+ var PLAY_USAGE = "play [state] | play play|stop|pause|resume|restart | play step [count] | play speed <0.25|0.5|1|2|4> | play players [1-8] | play mode [game|animation] | play autoplay on [<goal>] | play autoplay off";
15878
15876
  var BARE = /* @__PURE__ */ new Set(["state", "play", "stop", "pause", "resume", "restart"]);
15879
- async function play(args, document) {
15877
+ async function play(args) {
15880
15878
  const [verb = "state", value, ...rest] = args;
15881
15879
  const usage = () => {
15882
15880
  throw new Error(`Usage: ${COMMAND} ${PLAY_USAGE}`);
@@ -15891,78 +15889,68 @@ async function play(args, document) {
15891
15889
  } else if (verb === "speed") {
15892
15890
  if (value === void 0) usage();
15893
15891
  commandArgs = { speed: value };
15892
+ } else if (verb === "players") {
15893
+ if (value !== void 0) commandArgs = { players: value };
15894
15894
  } else if (verb === "autoplay") {
15895
15895
  if (value !== "on" && value !== "off") usage();
15896
15896
  commandArgs = { on: value === "on", ...goal !== void 0 ? { goal } : {} };
15897
15897
  } else if (verb === "mode") {
15898
15898
  if (value !== void 0) commandArgs = { mode: value };
15899
15899
  } else usage();
15900
- if (document !== void 0) commandArgs = { ...commandArgs, document };
15901
15900
  const { editor } = await connect4();
15902
- if (document !== void 0 && (verb === "play" || verb === "restart")) {
15903
- const opened = await editor.open(document.replace(/^document:/, "")).catch((error50) => {
15904
- throw new Error(`Play cannot bring ${document} forward to play it: ${error50 instanceof Error ? error50.message : String(error50)}`);
15905
- });
15906
- if (opened.documentId !== document) throw new Error(`Play cannot bring ${document} forward to play it: opening it brought ${opened.documentId} forward.`);
15907
- }
15908
- const state = (args2) => editor.command("volter.model-play.state", args2);
15909
- const answer = await onceOnScreen(() => editor.command(`volter.model-play.${verb}`, commandArgs)).catch((error50) => afterLostAnswer(error50, verb, commandArgs, state));
15901
+ const state = () => editor.command("volter.play.state");
15902
+ const answer = await editor.command(`volter.play.${verb}`, commandArgs).catch((error50) => afterLostAnswer(error50, verb, state));
15910
15903
  if (verb === "stop") return stopped(answer, state);
15904
+ if (verb === "autoplay" && value === "on") return goalEnded(answer, state);
15911
15905
  if (verb !== "play" && verb !== "restart") return answer;
15912
15906
  return startedOrRefused(answer, state);
15913
15907
  }
15914
15908
  function stopped(first, state) {
15915
15909
  return untilState(first, state, (current) => current.playing !== true, "Stop asked; waiting for Play to end");
15916
15910
  }
15911
+ function goalEnded(first, state) {
15912
+ return untilState(
15913
+ first,
15914
+ state,
15915
+ (current) => !/: playing$/.test(current.autoplay?.state ?? ""),
15916
+ "Autoplay is on; waiting for std to say how the goal ended",
15917
+ `each bot's end is in \`${COMMAND} play-log --kind outcome\` as it comes`
15918
+ );
15919
+ }
15917
15920
  var IDEMPOTENT = /* @__PURE__ */ new Set(["state", "play", "stop"]);
15918
- async function afterLostAnswer(error50, verb, args, state) {
15921
+ async function afterLostAnswer(error50, verb, state) {
15919
15922
  const said2 = error50 instanceof Error ? error50.message : String(error50);
15920
15923
  if (!/never reached the editor/.test(said2) || !IDEMPOTENT.has(verb)) throw error50;
15921
- const read = await state(args?.["document"] !== void 0 ? { document: args["document"] } : {});
15924
+ const read = await state();
15922
15925
  if (verb === "play" && read.playing === true || verb === "stop" && read.playing === false || verb === "state") return read;
15923
15926
  throw error50;
15924
15927
  }
15925
- var OPENING_LIMIT_MS = 6e5;
15926
- async function onceOnScreen(ask) {
15927
- const began = Date.now();
15928
- for (; ; ) {
15929
- try {
15930
- return await ask();
15931
- } catch (error50) {
15932
- const said2 = error50 instanceof Error ? error50.message : String(error50);
15933
- const opening = / is still opening: /.exec(said2);
15934
- if (opening === null || Date.now() - began > OPENING_LIMIT_MS) throw error50;
15935
- console.error(`${said2.slice(0, opening.index).replace(/^.*\s(?=\S+$)/, "")} is still opening; waiting for it to be on screen (${Math.round((Date.now() - began) / 1e3)}s).`);
15936
- }
15937
- }
15938
- }
15939
15928
  var PROGRESS_EVERY_MS = 1e4;
15940
15929
  function startedOrRefused(first, state) {
15941
- const documentId = first.document;
15942
15930
  return untilState(first, state, (current) => {
15943
15931
  const failure = current.clock?.failure;
15944
15932
  if (typeof failure === "string" && failure !== "")
15945
15933
  throw new Error(
15946
15934
  `Play did not start: ${failure}
15947
- The play log has the entry: ${COMMAND} play-log --kind script-error${documentId ? ` --document ${documentId}` : ""}`
15935
+ The play log has the entry: ${COMMAND} play-log --kind script-error`
15948
15936
  );
15949
15937
  if (current.playing === false) throw new Error(`Play switched itself off before a game started; \`${COMMAND} console\` says why.`);
15950
15938
  return current.clock?.running === true;
15951
15939
  }, "Play is on; waiting for a player's page to join");
15952
15940
  }
15953
- async function untilState(first, state, done, waiting) {
15941
+ var FRAMES_HINT = "The tab draws frames only while it is visible \u2014 is it hidden or minimised?";
15942
+ async function untilState(first, state, done, waiting, hint = FRAMES_HINT) {
15954
15943
  let current = first;
15955
- const args = current.document === void 0 ? {} : { document: current.document };
15956
15944
  const began = Date.now();
15957
15945
  let saidAt = began;
15958
15946
  while (!done(current)) {
15959
15947
  const now = Date.now();
15960
15948
  if (now - saidAt >= PROGRESS_EVERY_MS) {
15961
15949
  saidAt = now;
15962
- console.error(`${waiting} (${Math.round((now - began) / 1e3)}s). The tab draws frames only while it is visible \u2014 is it hidden or minimised?`);
15950
+ console.error(`${waiting} (${Math.round((now - began) / 1e3)}s). ${hint}`);
15963
15951
  }
15964
15952
  await new Promise((resolve10) => setTimeout(resolve10, 250));
15965
- current = await state(args);
15953
+ current = await state();
15966
15954
  }
15967
15955
  return current;
15968
15956
  }
@@ -16204,7 +16192,7 @@ var __export2 = (target, all) => {
16204
16192
  __defProp2(target, name, { get: all[name], enumerable: true });
16205
16193
  };
16206
16194
 
16207
- // ../editor-core/dist/server/chunk-7GCNCWQ6.js
16195
+ // ../editor-core/dist/server/chunk-APPU5D4H.js
16208
16196
  import { existsSync as existsSync8, readFileSync as readFileSync3, realpathSync, statSync as statSync2 } from "node:fs";
16209
16197
  import { join as join8, sep as sep3 } from "node:path";
16210
16198
  import {
@@ -16219,7 +16207,7 @@ import {
16219
16207
  } from "@volter/live/product-locator";
16220
16208
  import { existsSync as existsSync22 } from "node:fs";
16221
16209
  import { join as join22 } from "node:path";
16222
- import { installedPackageDir as installedPackageDir2 } from "@volter/live/installed-package";
16210
+ import { sessionFetch as sessionFetch2 } from "@volter/live/registry-format";
16223
16211
  var DEFAULT_RELAY_COMMAND_TIMEOUT_MS = 5e3;
16224
16212
  var noDerivedRefresh = (timeoutMs = DEFAULT_RELAY_COMMAND_TIMEOUT_MS) => ({
16225
16213
  timeoutMs,
@@ -30014,7 +30002,8 @@ var DocumentEntrySchema = external_exports2.object({
30014
30002
  authorable: external_exports2.boolean(),
30015
30003
  reach: SceneReachSchema,
30016
30004
  source: SceneSourceSchema.optional(),
30017
- finder: external_exports2.string().min(1).optional()
30005
+ finder: external_exports2.string().min(1).optional(),
30006
+ opensUnwritten: external_exports2.boolean().optional()
30018
30007
  }).strict();
30019
30008
  var AdapterDocumentTableSchema = external_exports2.object({
30020
30009
  entries: external_exports2.array(DocumentEntrySchema).optional(),
@@ -30153,7 +30142,7 @@ async function waitForOwnEditorServer(opts) {
30153
30142
  intervalMs = 300,
30154
30143
  progressIntervalMs = 2e4,
30155
30144
  onProgress,
30156
- fetchImpl = fetch
30145
+ fetchImpl = sessionFetch2
30157
30146
  } = opts;
30158
30147
  const startedAt = Date.now();
30159
30148
  const deadline = startedAt + timeoutMs;
@@ -30197,7 +30186,6 @@ function describeEditorBootFailure(outcome, ctx) {
30197
30186
  }
30198
30187
  return `The editor for ${ctx.project} has not answered ${ctx.serverUrl}/ within ${Math.round(ctx.timeoutMs / 1e3)}s, and its process is still running.${occupied} A project's FIRST editor boot is the slow one \u2014 it pays Vite's cold dependency optimization into ${ctx.project}/node_modules/.vite-editor, and later boots reuse it. From ${ctx.project}, re-run \`${npx} edit .\`: the retry starts from whatever that first boot already cached.${logs}`;
30199
30188
  }
30200
- var CONTROLLER_DISCONNECTED_MESSAGE = "The editor tab controlling this command disconnected before reporting a result.";
30201
30189
 
30202
30190
  // ../editor-core/dist/server/chunk-DWXQPOKZ.js
30203
30191
  var HOSTED_ATTACHMENT_PATH = "/__editor-hosted";
@@ -30329,8 +30317,8 @@ import { createRequire as createRequire2 } from "node:module";
30329
30317
  import { closeSync, existsSync as existsSync9, mkdirSync as mkdirSync3, openSync, readFileSync as readFileSync32, realpathSync as realpathSync2, rmSync as rmSync2 } from "node:fs";
30330
30318
  import { join as join32, resolve as resolve22 } from "node:path";
30331
30319
  import { resolveProductForProject as resolveProductForProject3 } from "@volter/live/product-locator";
30332
- import { resolveWorkbenchForProject, workbenchUrl } from "@volter/live/workbench-locator";
30333
- import { announceEditorLaunch, waitForPendingEditorLaunch } from "@volter/live/registry-format";
30320
+ import { resolveWorkbenchForProject } from "@volter/live/workbench-locator";
30321
+ import { announceEditorLaunch, registeredConnectionToken, sessionFetch as sessionFetch22, waitForPendingEditorLaunch } from "@volter/live/registry-format";
30334
30322
  import { createHash as createHash2 } from "node:crypto";
30335
30323
  import { mkdirSync, readFileSync as readFileSync4, renameSync, rmdirSync, statSync as statSync3, writeFileSync } from "node:fs";
30336
30324
  import { homedir as homedir2 } from "node:os";
@@ -30341,16 +30329,20 @@ import { realpathSync as realpathSync3 } from "node:fs";
30341
30329
  import { isAbsolute, relative as relative6, resolve as resolve7 } from "node:path";
30342
30330
  import {
30343
30331
  pidAlive,
30344
- readLiveRegisteredSessions as readLiveRegisteredSessions2,
30345
- servedProjectAnswer
30332
+ readLiveRegisteredSessions,
30333
+ servedProjectAnswer,
30334
+ sessionFetch as sessionFetch3
30346
30335
  } from "@volter/live/registry-format";
30347
30336
  import { execFileSync as execFileSync22 } from "node:child_process";
30348
30337
  import { createServer } from "node:net";
30349
30338
  import { execFileSync as execFileSync3 } from "node:child_process";
30350
30339
  import { mkdirSync as mkdirSync2, readFileSync as readFileSync22, rmSync, writeFileSync as writeFileSync2 } from "node:fs";
30351
30340
  import { join as join23 } from "node:path";
30341
+ import { CONNECTION_TOKEN_COOKIE } from "@volter/live/registry-format";
30342
+ import { projectKey } from "@volter/live/workbench-locator";
30352
30343
  import { connect as connect5, NO_SESSION_FOR_PROJECT, SESSION_MANIFEST_UNREADABLE, unconnectedBindings, withEditorMemberHints } from "@volter/live";
30353
30344
  import { EditorClient as EditorClient2 } from "@volter/live/client";
30345
+ import { installedPackageDir as installedPackageDir2 } from "@volter/live/installed-package";
30354
30346
  import { createHash as createHash32 } from "node:crypto";
30355
30347
  import { mkdirSync as mkdirSync4, readFileSync as readFileSync5, writeFileSync as writeFileSync3, rmSync as rmSync3, existsSync as existsSync32 } from "node:fs";
30356
30348
  import { homedir as homedir3 } from "node:os";
@@ -30366,6 +30358,7 @@ import { basename, dirname as dirname32, join as join62, resolve as resolve52 }
30366
30358
  import { setTimeout as delay } from "node:timers/promises";
30367
30359
  import { resolveSession } from "@volter/live";
30368
30360
  import { EditorClient as EditorClient3 } from "@volter/live/client";
30361
+ import { sessionFetch as sessionFetch32 } from "@volter/live/registry-format";
30369
30362
  import { isAbsolute as isAbsolute2, join as join52, relative as relative22, resolve as resolve42 } from "node:path";
30370
30363
  function hash3(value) {
30371
30364
  return createHash3("sha256").update(value).digest("hex").slice(0, 24);
@@ -30588,11 +30581,11 @@ function resolveFramePorts(projectRoot, session, registryFile) {
30588
30581
  };
30589
30582
  }
30590
30583
  function liveSessions() {
30591
- return readLiveRegisteredSessions2();
30584
+ return readLiveRegisteredSessions();
30592
30585
  }
30593
30586
  async function fetchEditorSession(port) {
30594
30587
  try {
30595
- const res = await fetch(`http://127.0.0.1:${port}/__editor/project`, {
30588
+ const res = await sessionFetch3(`http://127.0.0.1:${port}/__editor/project`, {
30596
30589
  signal: AbortSignal.timeout(5e3)
30597
30590
  });
30598
30591
  if (!res.ok) return void 0;
@@ -30622,7 +30615,7 @@ async function fetchEditorSession(port) {
30622
30615
  }
30623
30616
  async function fetchSessionWorkbench(serverUrl) {
30624
30617
  try {
30625
- const res = await fetch(`${serverUrl}/__editor/state`, {
30618
+ const res = await sessionFetch3(`${serverUrl}/__editor/state`, {
30626
30619
  signal: AbortSignal.timeout(3e3)
30627
30620
  });
30628
30621
  if (!res.ok) return null;
@@ -30657,7 +30650,7 @@ async function waitForSessionWorkbench(serverUrl) {
30657
30650
  }
30658
30651
  async function fetchEditorState(serverUrl) {
30659
30652
  try {
30660
- const res = await fetch(`${serverUrl}/__editor/state`, {
30653
+ const res = await sessionFetch3(`${serverUrl}/__editor/state`, {
30661
30654
  signal: AbortSignal.timeout(3e3)
30662
30655
  });
30663
30656
  if (!res.ok) return EMPTY_EDITOR_STATE;
@@ -30671,7 +30664,8 @@ async function fetchEditorState(serverUrl) {
30671
30664
  commandListener: typeof tab["commandListener"] === "string" ? tab["commandListener"] : null,
30672
30665
  unresponsive: tab["unresponsive"] === true,
30673
30666
  route: typeof tab["route"] === "string" ? tab["route"] : null,
30674
- state: typeof tab["state"] === "string" ? tab["state"] : null
30667
+ state: typeof tab["state"] === "string" ? tab["state"] : null,
30668
+ recovery: parseRecovery(tab["recovery"])
30675
30669
  };
30676
30670
  })
30677
30671
  };
@@ -30679,20 +30673,30 @@ async function fetchEditorState(serverUrl) {
30679
30673
  return EMPTY_EDITOR_STATE;
30680
30674
  }
30681
30675
  }
30676
+ function parseRecovery(raw) {
30677
+ if (raw === null || typeof raw !== "object") return null;
30678
+ const record3 = raw;
30679
+ return typeof record3["state"] === "string" && typeof record3["because"] === "string" ? { state: record3["state"], because: record3["because"] } : null;
30680
+ }
30682
30681
  var EMPTY_EDITOR_STATE = {
30683
30682
  editorsConnected: 0,
30684
30683
  lastIndexRequestAt: null,
30685
30684
  tabs: []
30686
30685
  };
30687
30686
  function commandReadyTabs(snapshot) {
30688
- return snapshot.tabs.filter((tab) => tab.commandListener === "ready").length;
30687
+ return snapshot.tabs.filter((tab) => tab.commandListener === "ready" && tab.recovery?.state !== "reloading").length;
30689
30688
  }
30690
30689
  function unresponsiveTab(snapshot) {
30691
- return snapshot.tabs.find((tab) => tab.unresponsive) ?? null;
30690
+ return snapshot.tabs.find(
30691
+ (tab) => tab.unresponsive && tab.recovery?.state !== "reloading" || tab.recovery?.state === "unanswered" && tab.commandListener !== "ready"
30692
+ ) ?? null;
30693
+ }
30694
+ function unansweredRecovery(snapshot) {
30695
+ return snapshot.tabs.find((tab) => tab.recovery?.state === "unanswered" && tab.commandListener !== "ready")?.recovery?.because ?? null;
30692
30696
  }
30693
30697
  async function requestEditorTabEnsure(serverUrl, open) {
30694
30698
  try {
30695
- const res = await fetch(`${serverUrl}/__editor/tab/ensure`, {
30699
+ const res = await sessionFetch3(`${serverUrl}/__editor/tab/ensure`, {
30696
30700
  method: "POST",
30697
30701
  headers: { "Content-Type": "application/json" },
30698
30702
  body: JSON.stringify({ open }),
@@ -30728,6 +30732,7 @@ async function waitForVerifiedEditorOpen(serverUrl, opts) {
30728
30732
  let browserArrived = false;
30729
30733
  let toldSlow = false;
30730
30734
  let lastProgressAt = openAttemptAt;
30735
+ let recoveryCounted = false;
30731
30736
  for (; ; ) {
30732
30737
  const snapshot = await fetchEditorState(serverUrl);
30733
30738
  const ready = commandReadyTabs(snapshot);
@@ -30739,6 +30744,10 @@ async function waitForVerifiedEditorOpen(serverUrl, opts) {
30739
30744
  browserArrived = true;
30740
30745
  }
30741
30746
  const now = Date.now();
30747
+ if (!recoveryCounted && snapshot.tabs.some((tab) => tab.recovery !== null && tab.recovery.state !== "unanswered")) {
30748
+ recoveryCounted = true;
30749
+ totalDeadline = Math.max(totalDeadline, now + totalTimeoutMs - initialTimeoutMs);
30750
+ }
30742
30751
  if (unresponsiveTab(snapshot) !== null) return { status: "stuck" };
30743
30752
  if (!browserArrived && now >= initialDeadline && !toldSlow && now < arrivalDeadline) {
30744
30753
  toldSlow = true;
@@ -30988,6 +30997,12 @@ async function reapRecordedWorkbenchServer(projectRoot, port) {
30988
30997
  rmSync(recordPath(projectRoot), { force: true });
30989
30998
  return true;
30990
30999
  }
31000
+ var CONNECTION_TOKEN_QUERY = "tkn";
31001
+ function withConnectionToken(pageUrl, token) {
31002
+ const url3 = new URL(pageUrl);
31003
+ url3.searchParams.set(CONNECTION_TOKEN_QUERY, token);
31004
+ return url3.toString();
31005
+ }
30991
31006
  var VIEW_BUILD_USAGE = "view build [folder] --out <dir> --workbench <vscode-web dir>";
30992
31007
  async function viewBuild(...args) {
30993
31008
  const specifier = new URL("./view-build.js", import.meta.resolve("@volter/editor-core/launcher")).href;
@@ -31015,11 +31030,7 @@ async function launch(folder, launching, options = {}) {
31015
31030
  const serverUrl2 = `http://127.0.0.1:${verdict.session.port}`;
31016
31031
  const running = await waitForSessionWorkbench(serverUrl2);
31017
31032
  if (running.product !== launching.id) throw new Error(`This project is open in ${running.product}; close that session before opening ${launching.displayName}.`);
31018
- const state = await fetch(`${serverUrl2}/__editor/state`, { signal: AbortSignal.timeout(5e3) }).then((r) => r.json());
31019
- const pageUrl = state.workbenchUrl;
31020
- if (typeof pageUrl !== "string" || !pageUrl) {
31021
- throw new Error("The running editor did not report its workbench URL. Its server log names the page to open.");
31022
- }
31033
+ const pageUrl = await sessionPageUrl(serverUrl2, launching.command);
31023
31034
  console.log(pageUrl);
31024
31035
  await refuseIncompatibleProject(serverUrl2, launching.command, !!options.noOpen);
31025
31036
  await ensureTab(serverUrl2, !!options.noOpen, pageUrl, launching.displayName);
@@ -31067,7 +31078,7 @@ async function launch(folder, launching, options = {}) {
31067
31078
  });
31068
31079
  if (outcome.status !== "ready") throw new Error(describeEditorBootFailure(outcome, { serverUrl, project, port, timeoutMs: DEFAULT_EDITOR_BOOT_TIMEOUT_MS, logPath, command: launching.command }));
31069
31080
  await waitForSessionWorkbench(serverUrl);
31070
- const pageUrl = workbenchUrl(proxyPort, project);
31081
+ const pageUrl = await sessionPageUrl(serverUrl, launching.command);
31071
31082
  console.log(`${launching.displayName}: ${pageUrl}`);
31072
31083
  console.log(`Logs: ${logPath}`);
31073
31084
  await refuseIncompatibleProject(serverUrl, launching.command, !!options.noOpen);
@@ -31076,6 +31087,20 @@ async function launch(folder, launching, options = {}) {
31076
31087
  clearLaunch();
31077
31088
  }
31078
31089
  }
31090
+ async function sessionPageUrl(serverUrl, command) {
31091
+ const token = registeredConnectionToken(Number(new URL(serverUrl).port));
31092
+ if (token === null) {
31093
+ throw new Error(
31094
+ `The session at ${serverUrl} has no connection token in the session registry, so nothing can reach it. Run \`${command} close\` and \`${command} edit\` again.`
31095
+ );
31096
+ }
31097
+ const state = await sessionFetch22(`${serverUrl}/__editor/state`, { signal: AbortSignal.timeout(5e3) }).then((r) => r.json());
31098
+ const pageUrl = state.workbenchUrl;
31099
+ if (typeof pageUrl !== "string" || !pageUrl) {
31100
+ throw new Error("The running editor did not report its workbench URL. Its server log names the page to open.");
31101
+ }
31102
+ return withConnectionToken(pageUrl, token);
31103
+ }
31079
31104
  async function startSession(entry, project, logPath, env) {
31080
31105
  if (process.platform !== "win32") {
31081
31106
  const log = openSync(logPath, "a", 384);
@@ -31153,7 +31178,7 @@ async function prepareSession(folder, launching) {
31153
31178
  async function refuseIncompatibleProject(serverUrl, command, noOpen) {
31154
31179
  const read = async () => {
31155
31180
  try {
31156
- const response = await fetch(`${serverUrl}/__editor/state`, { signal: AbortSignal.timeout(5e3) });
31181
+ const response = await sessionFetch22(`${serverUrl}/__editor/state`, { signal: AbortSignal.timeout(5e3) });
31157
31182
  if (!response.ok) return null;
31158
31183
  const refusal2 = (await response.json()).projectCompatibility;
31159
31184
  return refusal2 && typeof refusal2.error === "string" ? refusal2 : null;
@@ -31226,6 +31251,8 @@ ${refused.map((message) => ` ${message}`).join("\n")}`);
31226
31251
  throw new Error(`Editor page did not start:
31227
31252
  ${outcome.refused.map((message) => ` ${message}`).join("\n")}`);
31228
31253
  if (outcome.status !== "connected") {
31254
+ const unanswered = outcome.status === "stuck" ? unansweredRecovery(await fetchEditorState(serverUrl)) : null;
31255
+ if (unanswered !== null) throw new Error(`Editor page arrived but did not become ready: ${unanswered}.`);
31229
31256
  const said2 = outcome.status === "never-arrived" ? [] : await currentPageErrors(serverUrl);
31230
31257
  const safariAtEnd = outcome.status === "never-arrived" ? safari : "";
31231
31258
  throw new Error(
@@ -31239,7 +31266,7 @@ async function startupRefusals(serverUrl, since = 0) {
31239
31266
  if (state.tabs.length === 0 || state.tabs.some((tab) => tab.commandListener === "ready")) return [];
31240
31267
  if (!state.tabs.every((tab) => tab.route === "no-project")) return [];
31241
31268
  try {
31242
- const response = await fetch(new URL("/__editor/console?all=1", serverUrl), { signal: AbortSignal.timeout(3e3) });
31269
+ const response = await sessionFetch22(new URL("/__editor/console?all=1", serverUrl), { signal: AbortSignal.timeout(3e3) });
31243
31270
  if (!response.ok) return [];
31244
31271
  const body = await response.json();
31245
31272
  const newest = body.entries.filter((entry) => entry.severity === "error" && entry.message.startsWith("Startup failed") && entry.lastAt >= since).sort((a, b) => b.lastAt - a.lastAt)[0];
@@ -31250,7 +31277,7 @@ async function startupRefusals(serverUrl, since = 0) {
31250
31277
  }
31251
31278
  async function currentPageErrors(serverUrl) {
31252
31279
  try {
31253
- const response = await fetch(new URL("/__editor/console?all=1", serverUrl), { signal: AbortSignal.timeout(3e3) });
31280
+ const response = await sessionFetch22(new URL("/__editor/console?all=1", serverUrl), { signal: AbortSignal.timeout(3e3) });
31254
31281
  if (!response.ok) return [];
31255
31282
  const body = await response.json();
31256
31283
  if (!body.currentLoadId) return [];
@@ -31322,6 +31349,8 @@ var COMMON_TASKS = [
31322
31349
  ["Capture to a file", "const shot = await editor.captureEditorChrome({ region: 'play' }); (await import('node:fs')).writeFileSync('shot.png', Buffer.from(shot.base64, 'base64'))"],
31323
31350
  ["", "region 'document': the document as the person sees it, overlays included; 'play': the live Play frame and its UI"],
31324
31351
  ["Open a document", "return await editor.open('<document id>')"],
31352
+ ["Find an asset to start from", "return await editor.assetLibrary.search({ source: 'local', type: 'model', q: '<words>' })"],
31353
+ ["", "then editor.assetLibrary.files({ source, id }) and editor.assetLibrary.download({ source, id, name, url, format })"],
31325
31354
  ["Hold a key in Play", "return await editor.document.key('w', { code: 'KeyW', holdMs: 1500 })"],
31326
31355
  ["Read the running document's state", "return await editor.document.query('[aria-label]', { limit: 20 })"],
31327
31356
  ["", "the running document's DOM, its HUD included: show the state you need to read there (text or data-* attributes)"]
@@ -31343,14 +31372,16 @@ function formatSurface(command, bindings) {
31343
31372
  for (const [task, code] of COMMON_TASKS) lines.push(` ${task.padEnd(width)}${task === "" ? " " : ""}${code}`);
31344
31373
  return lines.join("\n");
31345
31374
  }
31375
+ var CONTROLLER_DISCONNECTED_MESSAGE = "The editor tab controlling this command disconnected before reporting a result.";
31346
31376
  var OPENER_STDERR_CAP_BYTES = 2048;
31347
31377
  var OPENER_EXIT_WATCH_TIMEOUT_MS = 2e4;
31378
+ var redact = (text2) => text2.replace(/(https?:\/\/[^\s?#'"]*)[?#][^\s'"]*/g, "$1");
31348
31379
  function spawnOpener(cmd, cmdArgs, fallback) {
31349
31380
  let child;
31350
31381
  try {
31351
31382
  child = spawn22(cmd, cmdArgs, { windowsHide: true, stdio: ["ignore", "ignore", "pipe"], detached: true });
31352
31383
  } catch (err) {
31353
- console.error(`volter: auto-open via ${cmd} failed: ${err.message}`);
31384
+ console.error(redact(`volter: auto-open via ${cmd} failed: ${err.message}`));
31354
31385
  fallback?.();
31355
31386
  return;
31356
31387
  }
@@ -31364,13 +31395,13 @@ function spawnOpener(cmd, cmdArgs, fallback) {
31364
31395
  stderrBytes += slice.length;
31365
31396
  });
31366
31397
  child.on("error", (err) => {
31367
- console.error(`volter: auto-open via ${cmd} failed to launch: ${err.message}`);
31398
+ console.error(redact(`volter: auto-open via ${cmd} failed to launch: ${err.message}`));
31368
31399
  fallback?.();
31369
31400
  });
31370
31401
  child.on("exit", (code) => {
31371
31402
  if (code !== null && code !== 0) {
31372
31403
  const stderr = Buffer.concat(stderrChunks).toString("utf8").trim();
31373
- console.error(`volter: auto-open via ${cmd} exited ${code}: ${stderr}`);
31404
+ console.error(redact(`volter: auto-open via ${cmd} exited ${code}: ${stderr}`));
31374
31405
  fallback?.();
31375
31406
  }
31376
31407
  });
@@ -31413,6 +31444,11 @@ function macHttpsHandler(home) {
31413
31444
  return void 0;
31414
31445
  }
31415
31446
  }
31447
+ var POWERSHELL_SINGLE_QUOTES = /['\u2018-\u201b]/g;
31448
+ function powershellStart(url3) {
31449
+ const command = `Start-Process '${url3.replace(POWERSHELL_SINGLE_QUOTES, (quote) => quote + quote)}'`;
31450
+ return ["-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-EncodedCommand", Buffer.from(command, "utf16le").toString("base64")];
31451
+ }
31416
31452
  function openBrowserUrl(browserUrl, options) {
31417
31453
  if (process.platform === "darwin") {
31418
31454
  const background = options?.background === true ? ["-g"] : [];
@@ -31420,20 +31456,17 @@ function openBrowserUrl(browserUrl, options) {
31420
31456
  if (app) spawnOpener("open", [...background, "-a", app, browserUrl], () => spawnOpener("open", [...background, browserUrl]));
31421
31457
  else spawnOpener("open", [...background, browserUrl]);
31422
31458
  } else if (process.platform === "win32") {
31423
- spawnOpener("cmd", ["/c", "start", "", browserUrl]);
31459
+ spawnOpener("powershell.exe", powershellStart(browserUrl));
31424
31460
  } else if (isWSL()) {
31425
31461
  const interop = process.env["WSL_INTEROP"];
31426
31462
  if (interop && !existsSync23(interop)) {
31463
+ const page = new URL(browserUrl);
31427
31464
  console.error(
31428
- `[volter-editor] cannot open a browser from this shell \u2014 the WSL interop socket (${interop}) is gone, so Windows executables cannot launch. Open ${browserUrl} from any regular terminal or browser instead.`
31465
+ `[volter-editor] cannot open a browser from this shell \u2014 the WSL interop socket (${interop}) is gone, so Windows executables cannot launch. Open ${page.origin}${page.pathname} (the full address its command printed) from any regular terminal or browser instead.`
31429
31466
  );
31430
31467
  return;
31431
31468
  }
31432
- spawnOpener(
31433
- "explorer.exe",
31434
- [browserUrl],
31435
- () => spawnOpener("powershell.exe", ["-NoProfile", "-Command", `Start-Process '${browserUrl}'`])
31436
- );
31469
+ spawnOpener("explorer.exe", [browserUrl], () => spawnOpener("powershell.exe", powershellStart(browserUrl)));
31437
31470
  } else {
31438
31471
  spawnOpener("xdg-open", [browserUrl]);
31439
31472
  }
@@ -31737,7 +31770,7 @@ ${said2.map((message) => ` ${message}`).join("\n")}` : `; \`${command} console\
31737
31770
  var NO_PAGE_DEAD_END_MS = 1e4;
31738
31771
  async function currentLoadId(url3) {
31739
31772
  try {
31740
- const response = await fetch(new URL("/__editor/console?all=1", url3), { signal: AbortSignal.timeout(3e3) });
31773
+ const response = await sessionFetch32(new URL("/__editor/console?all=1", url3), { signal: AbortSignal.timeout(3e3) });
31741
31774
  if (!response.ok) return null;
31742
31775
  const body = await response.json();
31743
31776
  return body.currentLoadId;
@@ -31885,9 +31918,9 @@ function jsonLayout(raw) {
31885
31918
  // node/project-upgrade.ts
31886
31919
  import { existsSync as existsSync10, lstatSync as lstatSync2, statSync as statSync4 } from "node:fs";
31887
31920
  import { readFile as readFile4, rename as rename2, rm as rm3, writeFile as writeFile3 } from "node:fs/promises";
31888
- import { dirname as dirname6, join as join10, resolve as resolve8 } from "node:path";
31921
+ import { dirname as dirname6, join as join10, resolve as resolve8, sep as sep4 } from "node:path";
31889
31922
  import { EDITOR_SESSION_DISCOVERY_TIMEOUT_MS, HttpSessionDiscovery } from "@volter/live/discovery";
31890
- import { readLiveRegisteredSessions as readLiveRegisteredSessions3 } from "@volter/live/registry-format";
31923
+ import { readLiveRegisteredSessions as readLiveRegisteredSessions2 } from "@volter/live/registry-format";
31891
31924
 
31892
31925
  // ../project/src/semver.ts
31893
31926
  var EXACT_SEMVER = /^(\d+)\.(\d+)\.(\d+)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;
@@ -31905,7 +31938,7 @@ function compareSemver(a, b) {
31905
31938
  }
31906
31939
 
31907
31940
  // node/project-upgrade.ts
31908
- var UPGRADE_USAGE = "upgrade [version] # move this project's @volter packages and its engine pin to one release (default: latest)";
31941
+ var UPGRADE_USAGE = "upgrade [version] # move this project's @volter packages and its engine pin to one release (default: latest), and a std game's std to the pinned one";
31909
31942
  function declaredVersion(spec) {
31910
31943
  const bare = spec?.replace(/^[\^~=v]+/, "");
31911
31944
  return bare !== void 0 && EXACT_VERSION.test(bare) ? bare : null;
@@ -31987,9 +32020,9 @@ function npmView(spec) {
31987
32020
  });
31988
32021
  });
31989
32022
  }
31990
- async function readRelease(product, requested) {
32023
+ async function readRelease(product, requested, own) {
31991
32024
  const running = JSON.parse(await readFile4(join10(product.dir, "package.json"), "utf8"));
31992
- if (requested === running.version) return { version: running.version, dependencies: running.dependencies ?? {} };
32025
+ if (own || requested === running.version) return { version: running.version, dependencies: running.dependencies ?? {} };
31993
32026
  const spec = `${product.packageName}@${requested ?? "latest"}`;
31994
32027
  try {
31995
32028
  return await npmView(spec);
@@ -32010,7 +32043,7 @@ async function editorOpenOn(project) {
32010
32043
  return false;
32011
32044
  }
32012
32045
  };
32013
- const registered = readLiveRegisteredSessions3();
32046
+ const registered = readLiveRegisteredSessions2();
32014
32047
  if (registered.length === 0) return false;
32015
32048
  if (registered.some((session) => isHere(session.project))) return true;
32016
32049
  const answered = await new HttpSessionDiscovery().listSessions(EDITOR_SESSION_DISCOVERY_TIMEOUT_MS);
@@ -32033,7 +32066,15 @@ async function upgradeProject(product, requested) {
32033
32066
  }
32034
32067
  const packagePath = join10(project, "package.json");
32035
32068
  if (!existsSync10(packagePath)) throw new Error(`${project} has no package.json to upgrade.`);
32036
- const release = await readRelease(product, requested);
32069
+ const packageRaw = await readFile4(packagePath, "utf8");
32070
+ const pkg = JSON.parse(packageRaw);
32071
+ const declaredProduct = pkg.dependencies?.[product.packageName] ?? pkg.devDependencies?.[product.packageName];
32072
+ const onCheckout = declaredProduct?.startsWith("link:") === true;
32073
+ const running = checkoutRoot();
32074
+ const linkedTo = onCheckout ? resolve8(project, declaredProduct.slice("link:".length)) : null;
32075
+ if (linkedTo !== null && (requested !== void 0 || running === null || !linkedTo.startsWith(`${running}${sep4}`)))
32076
+ throw new Error(`${project} is on the packages of a ${product.packageName} checkout (${declaredProduct}), which move with that checkout: run ${projectLine(product.command, "upgrade")} there, with no version, so the checkout's own ${product.command} runs it.`);
32077
+ const release = await readRelease(product, requested, onCheckout);
32037
32078
  const engine = release.dependencies["@volter/editor-core"];
32038
32079
  const kit = release.dependencies["@volter/project"];
32039
32080
  if (!engine || !kit)
@@ -32041,8 +32082,6 @@ async function upgradeProject(product, requested) {
32041
32082
  const changed = [];
32042
32083
  const kept = [];
32043
32084
  const warnings = [];
32044
- const packageRaw = await readFile4(packagePath, "utf8");
32045
- const pkg = JSON.parse(packageRaw);
32046
32085
  const previousKit = pkg.devDependencies?.["@volter/project"] ?? pkg.dependencies?.["@volter/project"];
32047
32086
  const currentProduct = declaredVersion(pkg.dependencies?.[product.packageName] ?? pkg.devDependencies?.[product.packageName]);
32048
32087
  for (const section of ["peerDependencies", "optionalDependencies"]) {
@@ -32054,12 +32093,13 @@ async function upgradeProject(product, requested) {
32054
32093
  const members = Array.isArray(pkg.workspaces) ? pkg.workspaces : Array.isArray(pkg.workspaces.packages) ? pkg.workspaces.packages : [];
32055
32094
  kept.push(`workspace members${members.length > 0 ? ` (${members.map(String).join(", ")})` : ""} are not upgraded: run ${projectLine(product.command, "upgrade")} in each member that is a project`);
32056
32095
  }
32096
+ if (onCheckout) kept.push(`package.json keeps its link: rows: they are the checkout's own packages, at ${product.packageName}@${release.version}`);
32057
32097
  let packagesChanged = false;
32058
32098
  for (const section of ["dependencies", "devDependencies"]) {
32059
32099
  const declared = pkg[section];
32060
32100
  if (!declared) continue;
32061
32101
  for (const [name, current] of Object.entries(declared)) {
32062
- if (!name.startsWith("@volter/")) continue;
32102
+ if (!name.startsWith("@volter/") || current.startsWith("link:")) continue;
32063
32103
  const target = name === product.packageName ? release.version : release.dependencies[name] ?? (current === previousKit || kitVersion(current) !== null && kitVersion(current) === kitVersion(previousKit) ? kit : void 0);
32064
32104
  if (target === void 0) {
32065
32105
  kept.push(`package.json keeps ${name}@${current}: ${product.packageName}@${release.version} does not name it`);
@@ -32077,7 +32117,9 @@ async function upgradeProject(product, requested) {
32077
32117
  const pinned = manifest.engine?.["version"];
32078
32118
  const pinChanged = pinned !== engine;
32079
32119
  const backwards = currentProduct !== null ? compareSemver(release.version, currentProduct) === -1 ? `${product.packageName}@${currentProduct}` : null : typeof pinned === "string" && compareSemver(engine, pinned) === -1 ? `engine ${pinned}` : null;
32080
- if (backwards !== null) {
32120
+ if (backwards !== null && onCheckout)
32121
+ warnings.push(`This moves the engine pin BACKWARDS, from ${backwards} to the checkout's own engine ${engine}, the one its links run.`);
32122
+ else if (backwards !== null) {
32081
32123
  if (requested === void 0)
32082
32124
  throw new Error(
32083
32125
  `${product.packageName}@latest is ${release.version} (engine ${engine}), older than the ${backwards} this project is on, so upgrading to it would move the project backwards. Nothing was changed. To go back on purpose, name the version: ${projectLine(product.command, `upgrade ${release.version}`)}.`
@@ -32097,23 +32139,38 @@ async function upgradeProject(product, requested) {
32097
32139
  })();
32098
32140
  const locks = packagesChanged && !linked ? (await Promise.all([join10(project, "package-lock.json"), join10(project, "node_modules", ".package-lock.json")].map(lockWithoutVolter))).filter((lock) => lock !== null) : [];
32099
32141
  if (locks.length > 0) changed.push("package-lock.json: its @volter rows dropped, so npm install resolves the new ones");
32142
+ const stdGame = existsSync10(join10(project, "std.json"));
32143
+ const packed = stdGame && existsSync10(join10(project, "std-packages"));
32144
+ const std = packed && checkoutRoot() !== null ? pinnedStd("upgrade") : null;
32145
+ if (packed && std === null)
32146
+ kept.push("std-packages/ keeps its packs: this Cyclotron is installed from npm and carries no std to pack them from");
32100
32147
  await writeAll([
32101
32148
  ...packagesChanged ? [{ path: packagePath, content: jsonLayout(packageRaw)(pkg), original: packageRaw }] : [],
32102
32149
  ...pinChanged ? [{ path: manifestPath, content: jsonLayout(manifestRaw)(manifest), original: manifestRaw }] : [],
32103
32150
  ...locks
32104
32151
  ]);
32152
+ if (std !== null) {
32153
+ try {
32154
+ await stdUpgrade(std, project);
32155
+ } catch (error50) {
32156
+ const written = changed.length > 0 ? ` These were written before it: ${changed.join("; ")}.` : "";
32157
+ throw new Error(`std's own upgrade failed, and the game keeps its std packs: ${error50 instanceof Error ? error50.message : String(error50)}.${written}`);
32158
+ }
32159
+ changed.push(`std-packages/: std's packages packed again from the std this ${product.command} pins (std upgrade)`);
32160
+ }
32105
32161
  for (const line of warnings) console.warn(`! ${line}`);
32106
32162
  console.log(changed.length > 0 ? `Upgraded ${project} to ${product.packageName}@${release.version} (engine ${engine}):` : `${project} is already on ${product.packageName}@${release.version} (engine ${engine}).`);
32107
32163
  for (const line of changed) console.log(` + ${line}`);
32108
32164
  if (kept.length > 0) console.log("Left as it was:");
32109
32165
  for (const line of kept) console.log(` = ${line}`);
32110
- const [npm, npx] = process.platform === "win32" ? ["npm.cmd", "npx.cmd"] : ["npm", "npx"];
32166
+ const [npm, npx] = process.platform === "win32" ? [stdGame ? "pnpm.cmd" : "npm.cmd", "npx.cmd"] : [stdGame ? "pnpm" : "npm", "npx"];
32167
+ const installs = packagesChanged || std !== null;
32111
32168
  if (changed.length === 0) {
32112
32169
  console.log(`If you ran this because an editor refused the project, that editor is another installation: open the project with its own, \`${npx} --no-install ${product.command} edit .\` in ${project}.`);
32113
32170
  return;
32114
32171
  }
32115
32172
  console.log(`Next, in ${project}, one line at a time:`);
32116
- if (packagesChanged) {
32173
+ if (installs) {
32117
32174
  if (await editorOpenOn(project))
32118
32175
  console.log(` ${npx} --no-install ${product.command} close`);
32119
32176
  if (!linked) console.log(` ${npm} install`);
@@ -32142,7 +32199,6 @@ try {
32142
32199
  "existing-session": { type: "boolean" },
32143
32200
  since: { type: "string" },
32144
32201
  kind: { type: "string" },
32145
- document: { type: "string" },
32146
32202
  json: { type: "boolean" },
32147
32203
  from: { type: "string" },
32148
32204
  to: { type: "string" },
@@ -32163,7 +32219,6 @@ try {
32163
32219
  for (const key of ["since", "kind"])
32164
32220
  if (values[key] !== void 0 && verb !== "play-log") throw new Error(`--${key} belongs to play-log.`);
32165
32221
  if (values.json !== void 0 && verb !== "play-log" && verb !== "sessions") throw new Error("--json belongs to play-log and sessions.");
32166
- if (values.document !== void 0 && verb !== "play-log" && verb !== "play") throw new Error("--document belongs to play-log and play.");
32167
32222
  for (const [owner, options2] of [["capture", CAPTURE_OPTIONS], ["camera", CAMERA_OPTIONS]])
32168
32223
  for (const key of Object.keys(options2))
32169
32224
  if (values[key] !== void 0 && verb !== owner && !(key === "out" && (verb === "view" || verb === "render-movie")) && !(key === "force" && verb === "export" && (positionals[1] === "component" || positionals[1] === "level"))) throw new Error(`--${key} belongs to ${owner}.`);
@@ -32199,7 +32254,7 @@ try {
32199
32254
  ${PRODUCT.command} open <path>
32200
32255
  ${PRODUCT.command} blender-mcp [--existing-session] # stdio MCP; optionally refuse editor startup`);
32201
32256
  } else if (verb === "play") {
32202
- console.log(JSON.stringify(await play(positionals.slice(1), values.document), null, 2));
32257
+ console.log(JSON.stringify(await play(positionals.slice(1)), null, 2));
32203
32258
  } else if (verb === "chat") {
32204
32259
  console.log(JSON.stringify(await chat(positionals.slice(1)), null, 2));
32205
32260
  } else if (verb === "view") {