@volter/editor-core 0.5.57

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 (719) hide show
  1. package/BUNDLED_NOTICES +1527 -0
  2. package/LICENSE +686 -0
  3. package/LICENSE-APACHE +202 -0
  4. package/NOTICE +18 -0
  5. package/README.md +24 -0
  6. package/dist/build/chunk-JS4D4XZ3.js +175 -0
  7. package/dist/build/chunk-JS4D4XZ3.js.map +7 -0
  8. package/dist/build/vite-plugin-product-contributions.js +100 -0
  9. package/dist/build/vite-plugin-product-contributions.js.map +7 -0
  10. package/dist/build/vite-plugin-shared-react.js +25 -0
  11. package/dist/build/vite-plugin-shared-react.js.map +7 -0
  12. package/dist/build/vite-plugin-shared-three.js +86 -0
  13. package/dist/build/vite-plugin-shared-three.js.map +7 -0
  14. package/dist/server/chunk-KMJC7AGO.js +98 -0
  15. package/dist/server/chunk-KMJC7AGO.js.map +7 -0
  16. package/dist/server/chunk-PSILUMGS.js +46 -0
  17. package/dist/server/chunk-PSILUMGS.js.map +7 -0
  18. package/dist/server/frame-proxy.js +255 -0
  19. package/dist/server/frame-proxy.js.map +7 -0
  20. package/dist/server/open-browser.js +53 -0
  21. package/dist/server/open-browser.js.map +7 -0
  22. package/dist/server/process-shutdown.js +127 -0
  23. package/dist/server/process-shutdown.js.map +7 -0
  24. package/dist/server/session-registry.js +141 -0
  25. package/dist/server/session-registry.js.map +7 -0
  26. package/dist/server/spawn-opener.js +11 -0
  27. package/dist/server/spawn-opener.js.map +7 -0
  28. package/dist/server/worktree-identity.js +11 -0
  29. package/dist/server/worktree-identity.js.map +7 -0
  30. package/dist-server/packaged.mjs +88816 -0
  31. package/package.json +118 -0
  32. package/scripts/build-plugins.mjs +14 -0
  33. package/scripts/build-server.mjs +26 -0
  34. package/scripts/build-session.mjs +9 -0
  35. package/server/account-credentials.ts +60 -0
  36. package/server/account-service.ts +1434 -0
  37. package/server/adapter-region-includes.ts +47 -0
  38. package/server/asset-catalog-v2.ts +175 -0
  39. package/server/asset-history-snapshots.ts +196 -0
  40. package/server/asset-ledger-store.ts +195 -0
  41. package/server/asset-library-routes.ts +1595 -0
  42. package/server/blender-wasm-artifact.ts +430 -0
  43. package/server/boot-timings.ts +106 -0
  44. package/server/canonical-path.ts +50 -0
  45. package/server/checkout-workspace-preflight.ts +349 -0
  46. package/server/cloud-asset-catalog.ts +158 -0
  47. package/server/coding-inference-launch.ts +237 -0
  48. package/server/collaboration-account-client.ts +202 -0
  49. package/server/collaboration-attribution.ts +122 -0
  50. package/server/collaboration-session.ts +934 -0
  51. package/server/comfyui-bridge.ts +248 -0
  52. package/server/console-ledger.ts +499 -0
  53. package/server/creation-site-transform.ts +304 -0
  54. package/server/creation-site-write.ts +648 -0
  55. package/server/data-file-serialize.ts +158 -0
  56. package/server/editor-brand-html.ts +72 -0
  57. package/server/editor-control-socket.ts +366 -0
  58. package/server/editor-server-options.ts +190 -0
  59. package/server/editor-server.ts +1483 -0
  60. package/server/editor-sse.ts +352 -0
  61. package/server/engine-provenance.ts +169 -0
  62. package/server/engine-source-restart.ts +117 -0
  63. package/server/frame-bridge.ts +115 -0
  64. package/server/frame-proxy.ts +490 -0
  65. package/server/frame-workbench.ts +259 -0
  66. package/server/frontend-handoff.ts +229 -0
  67. package/server/game-globals-shadow.ts +113 -0
  68. package/server/gameplay-session-retention.ts +149 -0
  69. package/server/gameplay-sessions.ts +123 -0
  70. package/server/generation-jobs.ts +201 -0
  71. package/server/generation-reconciler.ts +137 -0
  72. package/server/generative-execution-context.ts +59 -0
  73. package/server/git-workflow.ts +612 -0
  74. package/server/harness-chat-caller.ts +36 -0
  75. package/server/harness-chat-service.ts +1681 -0
  76. package/server/idle-shutdown.ts +170 -0
  77. package/server/js-profiling-policy.ts +52 -0
  78. package/server/launcher-settings.ts +84 -0
  79. package/server/local-asset-catalog.ts +410 -0
  80. package/server/managed-account-defaults.ts +22 -0
  81. package/server/mock-control-plane.ts +540 -0
  82. package/server/model-import-conversion.ts +345 -0
  83. package/server/native-credential-store.ts +162 -0
  84. package/server/open-browser.ts +118 -0
  85. package/server/packaged.ts +1192 -0
  86. package/server/play-stall.ts +126 -0
  87. package/server/process-shutdown.ts +218 -0
  88. package/server/product-presets.ts +55 -0
  89. package/server/project-build-artifact.ts +95 -0
  90. package/server/project-components.ts +100 -0
  91. package/server/project-dependency-invalidation.ts +114 -0
  92. package/server/project-file-scan.ts +235 -0
  93. package/server/project-hmr-files.ts +215 -0
  94. package/server/project-install-roots.ts +210 -0
  95. package/server/project-kinds.ts +71 -0
  96. package/server/project-mcp-servers.ts +82 -0
  97. package/server/project-module-freshness.ts +109 -0
  98. package/server/project-module-instance.ts +375 -0
  99. package/server/project-optimize-deps-entries.ts +827 -0
  100. package/server/project-output-writer.ts +679 -0
  101. package/server/project-package-origin.ts +63 -0
  102. package/server/project-root-surface.ts +831 -0
  103. package/server/project-scratch-path.ts +47 -0
  104. package/server/project-script-hmr.ts +619 -0
  105. package/server/project-serving-plugins.ts +236 -0
  106. package/server/project-tools.ts +653 -0
  107. package/server/project-validation.ts +250 -0
  108. package/server/project-verbs.ts +127 -0
  109. package/server/project-view.ts +52 -0
  110. package/server/project-watch.ts +1134 -0
  111. package/server/project-work-coordinator.ts +288 -0
  112. package/server/provider-credentials.ts +331 -0
  113. package/server/recent-projects-store.ts +98 -0
  114. package/server/redact-secrets.ts +71 -0
  115. package/server/repository-presence.ts +267 -0
  116. package/server/routes/account.ts +357 -0
  117. package/server/routes/agents.ts +60 -0
  118. package/server/routes/assets.ts +154 -0
  119. package/server/routes/build.ts +13 -0
  120. package/server/routes/collaboration.ts +595 -0
  121. package/server/routes/configurations.ts +419 -0
  122. package/server/routes/context.ts +264 -0
  123. package/server/routes/control-plane.ts +1811 -0
  124. package/server/routes/logs.ts +272 -0
  125. package/server/routes/project-identity.ts +302 -0
  126. package/server/routes/project-open.ts +429 -0
  127. package/server/routes/project-source.ts +686 -0
  128. package/server/routes/project-state.ts +383 -0
  129. package/server/routes/relay.ts +1029 -0
  130. package/server/routes/route-helpers.ts +29 -0
  131. package/server/routes/served-modules.ts +138 -0
  132. package/server/routes/session-tabs.ts +196 -0
  133. package/server/routes/settings.ts +121 -0
  134. package/server/routes/share-control.ts +486 -0
  135. package/server/routes/themes.ts +116 -0
  136. package/server/routes/tools.ts +230 -0
  137. package/server/routes/worktrees.ts +595 -0
  138. package/server/scoped-game-css.ts +461 -0
  139. package/server/server-utils.ts +1194 -0
  140. package/server/session-product.ts +112 -0
  141. package/server/session-registry.ts +230 -0
  142. package/server/share-claims.ts +138 -0
  143. package/server/share-host.ts +526 -0
  144. package/server/share-session-gateway.ts +1362 -0
  145. package/server/share-tunnel.ts +123 -0
  146. package/server/spawn-opener.ts +74 -0
  147. package/server/support/play/log-format.ts +76 -0
  148. package/server/support/play/session-record.ts +199 -0
  149. package/server/support/project/build-discipline.ts +718 -0
  150. package/server/support/project/inspection-node.ts +119 -0
  151. package/server/support/project/log-naming.ts +54 -0
  152. package/server/support/project/provenance.ts +290 -0
  153. package/server/support/project/run-name.ts +18 -0
  154. package/server/support/project/session-journal.ts +830 -0
  155. package/server/support/project/shared.ts +327 -0
  156. package/server/tab-bootstrap.ts +62 -0
  157. package/server/tab-heartbeat.ts +477 -0
  158. package/server/tab-lifecycle.ts +550 -0
  159. package/server/tab-presence.ts +1508 -0
  160. package/server/team-agent-mirror.ts +95 -0
  161. package/server/twin-auth.ts +138 -0
  162. package/server/vendored-lock-recorder.ts +968 -0
  163. package/server/worktree-identity.ts +121 -0
  164. package/server/worktree-management.ts +398 -0
  165. package/server/worktree-retention.d.mts +13 -0
  166. package/server/worktree-retention.mjs +205 -0
  167. package/src/EditorContext.tsx +169 -0
  168. package/src/account.ts +333 -0
  169. package/src/action-registry.ts +532 -0
  170. package/src/active-product.ts +74 -0
  171. package/src/active-project.ts +155 -0
  172. package/src/adapter-editor-config.ts +25 -0
  173. package/src/adapter-observation.ts +49 -0
  174. package/src/animation/stage-transport.ts +379 -0
  175. package/src/animation/three-clips-subject.ts +172 -0
  176. package/src/api/asset-library-wire.ts +45 -0
  177. package/src/api/assets.ts +365 -0
  178. package/src/api/base.ts +10 -0
  179. package/src/api/build.ts +99 -0
  180. package/src/api/git-wire.ts +56 -0
  181. package/src/api/logs.ts +92 -0
  182. package/src/api/project-identity.ts +74 -0
  183. package/src/api/project-open.ts +355 -0
  184. package/src/api/project-source.ts +162 -0
  185. package/src/api/project-state.ts +107 -0
  186. package/src/api/relay.ts +268 -0
  187. package/src/api/settings.ts +36 -0
  188. package/src/api/themes.ts +45 -0
  189. package/src/api/worktrees.ts +257 -0
  190. package/src/asset-compare-core.ts +171 -0
  191. package/src/asset-compare.ts +294 -0
  192. package/src/asset-editor-context.tsx +100 -0
  193. package/src/asset-events.ts +97 -0
  194. package/src/asset-inspector-actions.ts +87 -0
  195. package/src/asset-preview-framing.ts +357 -0
  196. package/src/asset-preview.ts +2802 -0
  197. package/src/asset-selection-viewer-registry.ts +113 -0
  198. package/src/asset-selection.ts +133 -0
  199. package/src/asset-workflow/asset-capabilities.ts +344 -0
  200. package/src/asset-workflow/asset-import-jobs.ts +106 -0
  201. package/src/asset-workflow/asset-ledger-backend.ts +126 -0
  202. package/src/asset-workflow/asset-ledger.ts +156 -0
  203. package/src/asset-workflow/asset-materialization-report.ts +140 -0
  204. package/src/asset-workflow/asset-pack-manifest.ts +320 -0
  205. package/src/asset-workflow/asset-types.ts +142 -0
  206. package/src/asset-workflow/asset-workflow-quality.ts +61 -0
  207. package/src/asset-workflow/audio-preview-player.ts +193 -0
  208. package/src/asset-workflow/audio-waveform.ts +22 -0
  209. package/src/asset-workflow/cloud-asset-client.ts +263 -0
  210. package/src/asset-workflow/folder-preview.ts +345 -0
  211. package/src/asset-workflow/hosted-asset-materialization.ts +236 -0
  212. package/src/asset-workflow/image-view-scale.ts +32 -0
  213. package/src/asset-workflow/import-contract.ts +124 -0
  214. package/src/asset-workflow/ledger-write-lock.ts +244 -0
  215. package/src/asset-workflow/model-inspection.ts +818 -0
  216. package/src/asset-workflow/pixi-spritesheet.ts +197 -0
  217. package/src/asset-workflow/preview-resource-lifetime.ts +44 -0
  218. package/src/asset-workflow/project-asset-commands.ts +23 -0
  219. package/src/asset-workflow/project-asset-health.ts +139 -0
  220. package/src/asset-workflow/project-asset-operations.ts +154 -0
  221. package/src/asset-workflow/project-asset-roots.ts +68 -0
  222. package/src/asset-workflow/project-content.ts +288 -0
  223. package/src/asset-workflow/project-source-index.ts +550 -0
  224. package/src/asset-workflow/thumbnail-system.ts +256 -0
  225. package/src/authoring/active-adapter.ts +199 -0
  226. package/src/authoring/active-systems.ts +422 -0
  227. package/src/authoring/adapter-key.ts +18 -0
  228. package/src/authoring/authoring-asset-url.ts +27 -0
  229. package/src/authoring/bootstrap-state.ts +49 -0
  230. package/src/authoring/boundary-authoring-adapter.ts +184 -0
  231. package/src/authoring/breakpoint-state.ts +43 -0
  232. package/src/authoring/canvas-scene-guides.ts +76 -0
  233. package/src/authoring/component-instance-root.ts +171 -0
  234. package/src/authoring/composite-authoring-adapter.ts +2110 -0
  235. package/src/authoring/consumer-actions.ts +520 -0
  236. package/src/authoring/css-numeric-style.ts +97 -0
  237. package/src/authoring/design-time-layers.ts +849 -0
  238. package/src/authoring/design-time-mount-registry.ts +235 -0
  239. package/src/authoring/design-time-settle.ts +343 -0
  240. package/src/authoring/edit-mode-authoring.ts +619 -0
  241. package/src/authoring/eyedropper-session.ts +60 -0
  242. package/src/authoring/instance-source-menu-register.ts +13 -0
  243. package/src/authoring/instance-source-menu.ts +135 -0
  244. package/src/authoring/layered-pick.ts +183 -0
  245. package/src/authoring/live-gesture-lock.ts +50 -0
  246. package/src/authoring/live-object-transform.ts +62 -0
  247. package/src/authoring/mount-failure-report.ts +154 -0
  248. package/src/authoring/mounted-root-subjects.ts +144 -0
  249. package/src/authoring/no-authoring-adapter.ts +55 -0
  250. package/src/authoring/null-inspection-subjects.tsx +75 -0
  251. package/src/authoring/object3d-document-persistence.ts +106 -0
  252. package/src/authoring/object3d-document-session-registry.ts +120 -0
  253. package/src/authoring/object3d-document-session.ts +1326 -0
  254. package/src/authoring/object3d-gesture-controller.ts +113 -0
  255. package/src/authoring/panel-authoring.ts +121 -0
  256. package/src/authoring/prefab-instance-inspector-section.tsx +237 -0
  257. package/src/authoring/prefab-instance-section-model.ts +55 -0
  258. package/src/authoring/project-authoring-session.ts +105 -0
  259. package/src/authoring/provenance.ts +99 -0
  260. package/src/authoring/quarks-particle-systems.ts +19 -0
  261. package/src/authoring/react-canvas-navigation.ts +255 -0
  262. package/src/authoring/react-design-canvas-style.ts +20 -0
  263. package/src/authoring/react-story-board.ts +937 -0
  264. package/src/authoring/selection-scope.ts +195 -0
  265. package/src/authoring/shell-document-ops.ts +169 -0
  266. package/src/authoring/shell-object3d-document-write-policy.ts +108 -0
  267. package/src/authoring/shell-viewport-policy.ts +48 -0
  268. package/src/authoring/source-object3d-authoring-adapter.ts +526 -0
  269. package/src/authoring/stories-scope.ts +35 -0
  270. package/src/authoring/story-board-chrome-fit.ts +107 -0
  271. package/src/authoring/story-board-presentation.ts +111 -0
  272. package/src/authoring/three-projection-core.ts +226 -0
  273. package/src/authoring/viewport-pick-context.ts +40 -0
  274. package/src/authoring/viewport-raycast.ts +240 -0
  275. package/src/authoring/viewport-tool-context.ts +73 -0
  276. package/src/authoring/world-canvas-viewport-state.ts +35 -0
  277. package/src/authoring/world-hidden-viewport.ts +152 -0
  278. package/src/authoring/world-pan-state.ts +198 -0
  279. package/src/authoring/world-session-state.ts +101 -0
  280. package/src/authoring/write-pipe.ts +173 -0
  281. package/src/availability-tick.ts +66 -0
  282. package/src/bitmap-label.ts +120 -0
  283. package/src/blender-tab-metrics.ts +161 -0
  284. package/src/board-open-actions.ts +20 -0
  285. package/src/boot-routing.ts +391 -0
  286. package/src/build-identity.ts +15 -0
  287. package/src/bytes-codec.ts +62 -0
  288. package/src/camera-authoring.ts +175 -0
  289. package/src/cancellation-reason.ts +58 -0
  290. package/src/canvas-preview-frames.ts +482 -0
  291. package/src/capture-camera-pose.ts +77 -0
  292. package/src/chrome-registry.ts +159 -0
  293. package/src/chrome-slot-registry.ts +91 -0
  294. package/src/collaboration-client.ts +264 -0
  295. package/src/collaboration-presence.ts +41 -0
  296. package/src/command-dispatch.ts +19 -0
  297. package/src/command-listener.ts +2743 -0
  298. package/src/command-registry.ts +70 -0
  299. package/src/component-board-registry.ts +205 -0
  300. package/src/component-states-registry.ts +200 -0
  301. package/src/components/AgentPresentationNotice.tsx +75 -0
  302. package/src/components/AlignToolbar.tsx +204 -0
  303. package/src/components/AppRoot.tsx +394 -0
  304. package/src/components/ApplicationMenus.tsx +415 -0
  305. package/src/components/AssetBrowser.tsx +2843 -0
  306. package/src/components/AssetEditorShell.tsx +216 -0
  307. package/src/components/AssetInspectorToolSection.tsx +124 -0
  308. package/src/components/BoardRulers.tsx +354 -0
  309. package/src/components/CameraInfo.tsx +81 -0
  310. package/src/components/CanvasSceneViewport.tsx +556 -0
  311. package/src/components/CapabilityCoverageSection.tsx +185 -0
  312. package/src/components/CenterDocuments.tsx +22 -0
  313. package/src/components/ChromeSlot.tsx +20 -0
  314. package/src/components/CodeView.tsx +470 -0
  315. package/src/components/CollaborationHeaderControl.css +74 -0
  316. package/src/components/CompactInspectorCard.tsx +190 -0
  317. package/src/components/CompactInspectorShell.tsx +39 -0
  318. package/src/components/ConsolePanel.css +55 -0
  319. package/src/components/ConsolePanel.tsx +270 -0
  320. package/src/components/DefaultEditorLayout.tsx +106 -0
  321. package/src/components/DocumentHeaderStrip.tsx +96 -0
  322. package/src/components/DocumentShelfRail.tsx +45 -0
  323. package/src/components/DocumentThumbnail.tsx +345 -0
  324. package/src/components/EditorLeaseGuard.tsx +372 -0
  325. package/src/components/ErrorBanner.tsx +123 -0
  326. package/src/components/FolderPreviewTile.tsx +159 -0
  327. package/src/components/GameHierarchy.tsx +3842 -0
  328. package/src/components/GameplaySessionTimeline.tsx +295 -0
  329. package/src/components/InspectionProjection.tsx +968 -0
  330. package/src/components/Inspector.tsx +233 -0
  331. package/src/components/InspectorCanvasPreview.tsx +35 -0
  332. package/src/components/InspectorFieldsSection.tsx +290 -0
  333. package/src/components/InspectorObjectPreview.tsx +57 -0
  334. package/src/components/InspectorStoriesSection.tsx +92 -0
  335. package/src/components/InspectorToolSection.tsx +96 -0
  336. package/src/components/InspectorTransformSection.tsx +245 -0
  337. package/src/components/LightExplorerPanel.tsx +433 -0
  338. package/src/components/MediaProperties.tsx +145 -0
  339. package/src/components/NonThreeAuthoringBootstrap.tsx +19 -0
  340. package/src/components/Object3DDocumentToolbar.css +100 -0
  341. package/src/components/Object3DDocumentToolbar.tsx +454 -0
  342. package/src/components/Object3DDocumentViewport.tsx +58 -0
  343. package/src/components/ProjectHeader.css +617 -0
  344. package/src/components/ProjectHeader.tsx +328 -0
  345. package/src/components/ProjectLayout.tsx +249 -0
  346. package/src/components/ReactCanvasControls.tsx +284 -0
  347. package/src/components/RootSelectionOverlay.tsx +3162 -0
  348. package/src/components/RootTextEditor.tsx +79 -0
  349. package/src/components/SaveStatus.tsx +70 -0
  350. package/src/components/StageHost.tsx +1954 -0
  351. package/src/components/StageOverlays.tsx +21 -0
  352. package/src/components/StartupErrorScreen.tsx +76 -0
  353. package/src/components/StartupLoadingScreen.tsx +65 -0
  354. package/src/components/StatsOverlay.tsx +78 -0
  355. package/src/components/SurfaceStateOverlay.tsx +24 -0
  356. package/src/components/ToolContributionSurfaces.tsx +65 -0
  357. package/src/components/ToolHost.tsx +370 -0
  358. package/src/components/ToolObject3DPreview.tsx +39 -0
  359. package/src/components/Toolbar.tsx +595 -0
  360. package/src/components/TransientHint.tsx +44 -0
  361. package/src/components/TransportStrip.tsx +174 -0
  362. package/src/components/VersionControlSection.tsx +470 -0
  363. package/src/components/VgaiLogo.css +83 -0
  364. package/src/components/VgaiLogo.tsx +35 -0
  365. package/src/components/ViewportControlsHint.tsx +60 -0
  366. package/src/components/ViewportFurniture.tsx +401 -0
  367. package/src/components/ViewportOverlay.tsx +145 -0
  368. package/src/components/ViewportOverlaysMenu.tsx +153 -0
  369. package/src/components/ViewportShadingMenu.tsx +300 -0
  370. package/src/components/ViewportViewMenu.tsx +101 -0
  371. package/src/components/WorkspaceDocumentSurface.tsx +204 -0
  372. package/src/components/WorkspaceUtilitySurface.tsx +22 -0
  373. package/src/components/WorktreeSwitcher.css +239 -0
  374. package/src/components/WorktreeSwitcher.tsx +890 -0
  375. package/src/components/account-documents.tsx +1162 -0
  376. package/src/components/asset-documents.tsx +812 -0
  377. package/src/components/asset-editor-persistence.ts +216 -0
  378. package/src/components/asset-selection-section.tsx +535 -0
  379. package/src/components/asset-thumbnails.tsx +312 -0
  380. package/src/components/asset-viewers/AudioViewer.tsx +201 -0
  381. package/src/components/asset-viewers/EntityModelDocument.tsx +122 -0
  382. package/src/components/asset-viewers/EnvironmentAssetDocument.tsx +440 -0
  383. package/src/components/asset-viewers/GenericJsonViewer.tsx +102 -0
  384. package/src/components/asset-viewers/ImageViewer.tsx +300 -0
  385. package/src/components/asset-viewers/JsonAssetDocument.tsx +93 -0
  386. package/src/components/asset-viewers/LiveModuleDocument.tsx +417 -0
  387. package/src/components/asset-viewers/LutAssetDocument.tsx +444 -0
  388. package/src/components/asset-viewers/ModelAssetDocument.tsx +105 -0
  389. package/src/components/asset-viewers/Object3DPreview.tsx +359 -0
  390. package/src/components/asset-viewers/OnlineAssetDetail.tsx +421 -0
  391. package/src/components/asset-viewers/PasteboardModuleDocument.tsx +67 -0
  392. package/src/components/asset-viewers/QuarksAssetDocument.tsx +526 -0
  393. package/src/components/asset-viewers/ShaderAssetDocument.tsx +743 -0
  394. package/src/components/asset-viewers/SourceAssetViewer.tsx +281 -0
  395. package/src/components/asset-viewers/SpritesheetSpriteView.tsx +102 -0
  396. package/src/components/asset-viewers/VideoViewer.tsx +101 -0
  397. package/src/components/asset-viewers/shader-source.ts +144 -0
  398. package/src/components/asset-workflow.css +731 -0
  399. package/src/components/board-guides.ts +150 -0
  400. package/src/components/compact-inspector.css +539 -0
  401. package/src/components/core-utilities.tsx +90 -0
  402. package/src/components/editor-notifications.css +40 -0
  403. package/src/components/engine-workspace.css +274 -0
  404. package/src/components/inspector-preview-section.tsx +238 -0
  405. package/src/components/inspector-property-grouping.ts +64 -0
  406. package/src/components/inspector-revert-label.ts +20 -0
  407. package/src/components/inspector-selection.ts +42 -0
  408. package/src/components/inspector-stories-gating.ts +171 -0
  409. package/src/components/inspector-transform-subject.ts +11 -0
  410. package/src/components/inspector-transform.ts +75 -0
  411. package/src/components/kind-documents.tsx +500 -0
  412. package/src/components/palette-action-publisher.tsx +140 -0
  413. package/src/components/primitives/DraftColorInput.tsx +74 -0
  414. package/src/components/product-shell.css +1829 -0
  415. package/src/components/project-tool-documents.tsx +410 -0
  416. package/src/components/scene-documents.tsx +223 -0
  417. package/src/components/stage-keyboard.tsx +37 -0
  418. package/src/components/stage-overlay-set.tsx +107 -0
  419. package/src/components/stage-presence-markers.ts +478 -0
  420. package/src/components/standard-viewport-dressing.ts +417 -0
  421. package/src/components/status-contributions.tsx +403 -0
  422. package/src/components/tool-documents.tsx +309 -0
  423. package/src/components/tool-schema-form.tsx +262 -0
  424. package/src/components/use-after-paint.ts +41 -0
  425. package/src/components/use-project-image-assets.ts +86 -0
  426. package/src/components/viewport-header-controls.css +90 -0
  427. package/src/components/viewport-surface-status.tsx +55 -0
  428. package/src/components/workspace-history.ts +32 -0
  429. package/src/components/workspace-static-panel-registry.tsx +152 -0
  430. package/src/components/workspace-surfaces.css +621 -0
  431. package/src/components/world-documents.tsx +586 -0
  432. package/src/components/world-overlay-gestures.ts +1694 -0
  433. package/src/composite-screenshot.ts +1641 -0
  434. package/src/console-sync.ts +131 -0
  435. package/src/constraint-helper.ts +338 -0
  436. package/src/content-entry-source-registry.ts +184 -0
  437. package/src/coverage/authoring-seam-evidence.ts +300 -0
  438. package/src/coverage/canvas-reveal.ts +192 -0
  439. package/src/coverage/design-time-surfaces.ts +101 -0
  440. package/src/coverage/live-seam-evidence.ts +11 -0
  441. package/src/coverage/ontology-invariants.ts +466 -0
  442. package/src/coverage/session-vitals.ts +501 -0
  443. package/src/coverage/system-seam-evidence.ts +72 -0
  444. package/src/crash-null-boundary.ts +36 -0
  445. package/src/creation-site-edit.ts +1479 -0
  446. package/src/creation-site-registry.ts +160 -0
  447. package/src/delegate-harness-registry.ts +143 -0
  448. package/src/document-context-registry.ts +177 -0
  449. package/src/document-open-registry.ts +200 -0
  450. package/src/document-preview-source.ts +20 -0
  451. package/src/document-renderer-session.ts +138 -0
  452. package/src/editor-api.ts +46 -0
  453. package/src/editor-chrome-capture.ts +139 -0
  454. package/src/editor-commands.ts +164 -0
  455. package/src/editor-console.ts +563 -0
  456. package/src/editor-current-view.ts +82 -0
  457. package/src/editor-document-probe.ts +881 -0
  458. package/src/editor-git-client.ts +115 -0
  459. package/src/editor-host-door.ts +462 -0
  460. package/src/editor-hotkeys.ts +842 -0
  461. package/src/editor-lease-view.ts +39 -0
  462. package/src/editor-lease.ts +415 -0
  463. package/src/editor-mode.ts +19 -0
  464. package/src/editor-notifications.ts +140 -0
  465. package/src/editor-presence.ts +563 -0
  466. package/src/editor-presentation-activity.ts +50 -0
  467. package/src/editor-presentation-notice.ts +42 -0
  468. package/src/editor-runtime.tsx +145 -0
  469. package/src/editor-server-response.ts +86 -0
  470. package/src/editor-session-attribution.ts +75 -0
  471. package/src/editor-session-mode.ts +54 -0
  472. package/src/editor-shell-store.ts +1304 -0
  473. package/src/editor-state-facets.ts +74 -0
  474. package/src/editor-styles.css +33 -0
  475. package/src/editor-view-presentation.ts +810 -0
  476. package/src/editor-viewport.ts +5302 -0
  477. package/src/entity-lod.ts +31 -0
  478. package/src/entity-object.ts +91 -0
  479. package/src/files/file-provider.ts +62 -0
  480. package/src/files/project-files.ts +264 -0
  481. package/src/finders/index.ts +136 -0
  482. package/src/finders/scenes-from-entrypoint-selection.ts +387 -0
  483. package/src/frame/bridge.tsx +1408 -0
  484. package/src/frame/product.ts +77 -0
  485. package/src/gameplay-dom-recording.ts +319 -0
  486. package/src/gameplay-export-state.ts +14 -0
  487. package/src/gameplay-replay.ts +417 -0
  488. package/src/gameplay-session-time.ts +9 -0
  489. package/src/gameplay-sessions.ts +204 -0
  490. package/src/harness-chat-types.ts +253 -0
  491. package/src/hierarchy-component-marks.ts +298 -0
  492. package/src/hierarchy-drop.ts +91 -0
  493. package/src/hierarchy-expansion-state.ts +80 -0
  494. package/src/hierarchy-header-slot.ts +52 -0
  495. package/src/hierarchy-internals.ts +197 -0
  496. package/src/hierarchy-kind-icon.ts +217 -0
  497. package/src/hierarchy-mark-reader.ts +73 -0
  498. package/src/hierarchy-menu-registry.ts +67 -0
  499. package/src/hierarchy-node-rows.ts +307 -0
  500. package/src/hierarchy-panel-view.ts +280 -0
  501. package/src/hierarchy-projection.ts +76 -0
  502. package/src/hierarchy-row-cache.ts +243 -0
  503. package/src/hierarchy-row-model.ts +308 -0
  504. package/src/hierarchy-rows.ts +11 -0
  505. package/src/hierarchy-walk.ts +86 -0
  506. package/src/history/editor-session.ts +25 -0
  507. package/src/history/history-commands.ts +147 -0
  508. package/src/history/history-delegate.ts +163 -0
  509. package/src/history/history-limit-notices.ts +43 -0
  510. package/src/history/history-service.ts +1173 -0
  511. package/src/history/persistence-coordinator.ts +35 -0
  512. package/src/history/project-file-history.ts +386 -0
  513. package/src/history/project-root-history-backends.ts +139 -0
  514. package/src/history/resource-registry.ts +209 -0
  515. package/src/history/snapshot-store.ts +103 -0
  516. package/src/history/source-history-backend.ts +546 -0
  517. package/src/history/types.ts +124 -0
  518. package/src/hmr-registration-group.ts +67 -0
  519. package/src/hmr-stable-react-context.ts +23 -0
  520. package/src/hotkeys.ts +188 -0
  521. package/src/inference-diagnostics.ts +69 -0
  522. package/src/initial-project.ts +80 -0
  523. package/src/inspection/active-subject.ts +578 -0
  524. package/src/inspection/active-surface.ts +142 -0
  525. package/src/inspection/compose.ts +1064 -0
  526. package/src/inspection/display.ts +170 -0
  527. package/src/inspection/document-subject.ts +109 -0
  528. package/src/inspection/game-subject.ts +85 -0
  529. package/src/inspection/model.ts +542 -0
  530. package/src/inspection/null-subject.ts +115 -0
  531. package/src/inspection/serialize.ts +357 -0
  532. package/src/inspection/use-active-inspection.ts +180 -0
  533. package/src/inspector-presentation.ts +201 -0
  534. package/src/inspector-section-registry.ts +221 -0
  535. package/src/instance-source-actions.ts +163 -0
  536. package/src/instanced-presentation.ts +164 -0
  537. package/src/js-heap.ts +71 -0
  538. package/src/key-actions.ts +91 -0
  539. package/src/keymap-presets.ts +401 -0
  540. package/src/layout-policy.ts +31 -0
  541. package/src/learn-links.ts +73 -0
  542. package/src/light-explorer-model.ts +134 -0
  543. package/src/live-canvas-frame.ts +55 -0
  544. package/src/live-document.ts +279 -0
  545. package/src/live-module-source.ts +230 -0
  546. package/src/live-session-registry.ts +220 -0
  547. package/src/live-transition.ts +633 -0
  548. package/src/manifest-project.ts +107 -0
  549. package/src/model-thumbnail.ts +523 -0
  550. package/src/native-selection-style.ts +202 -0
  551. package/src/object3d-document-write-policy.ts +137 -0
  552. package/src/packaged-runtime.ts +108 -0
  553. package/src/palettes/maya.palette.json +57 -0
  554. package/src/palettes/substance.palette.json +57 -0
  555. package/src/pasteboard-module.ts +81 -0
  556. package/src/performance-profiler.ts +367 -0
  557. package/src/performance-sources.ts +69 -0
  558. package/src/play-boot-phase.ts +145 -0
  559. package/src/presentation-surface.ts +248 -0
  560. package/src/project-adapter.ts +1143 -0
  561. package/src/project-asset-refresh.ts +26 -0
  562. package/src/project-declaration-refresh.ts +31 -0
  563. package/src/project-local-state.ts +118 -0
  564. package/src/project-manager.ts +243 -0
  565. package/src/project-module-changes.ts +163 -0
  566. package/src/project-module-split.ts +266 -0
  567. package/src/project-provenance.ts +115 -0
  568. package/src/project-ready.ts +42 -0
  569. package/src/project-session-reset.ts +67 -0
  570. package/src/project-shape.ts +68 -0
  571. package/src/project-tool-discovery.ts +66 -0
  572. package/src/project-tools.ts +107 -0
  573. package/src/project-work-types.ts +149 -0
  574. package/src/projection/three.ts +898 -0
  575. package/src/projection/types.ts +44 -0
  576. package/src/readiness.ts +113 -0
  577. package/src/reflection-probe-helper.ts +142 -0
  578. package/src/reported-play-state.ts +90 -0
  579. package/src/resolve-relative-specifier.ts +33 -0
  580. package/src/scene-document-plan.ts +315 -0
  581. package/src/scene-framing.ts +315 -0
  582. package/src/scene-live-open.ts +210 -0
  583. package/src/scene-view-fog.ts +89 -0
  584. package/src/scoped-game-css.ts +152 -0
  585. package/src/session-orphan-record.ts +193 -0
  586. package/src/session-tombstone.ts +126 -0
  587. package/src/settings/settings-provider.ts +82 -0
  588. package/src/settings-store.ts +345 -0
  589. package/src/shared-view-restore.ts +42 -0
  590. package/src/shell-store-door.ts +45 -0
  591. package/src/source-conflict.ts +122 -0
  592. package/src/spatial-handle-visuals.ts +332 -0
  593. package/src/stage-context.ts +341 -0
  594. package/src/stage-store-registry.ts +63 -0
  595. package/src/stale-chunk-recovery.ts +34 -0
  596. package/src/state-report-deferral.ts +73 -0
  597. package/src/storage/host-files-storage.ts +97 -0
  598. package/src/storage/http-storage.ts +174 -0
  599. package/src/storage/index.ts +75 -0
  600. package/src/storage/mem-storage.ts +149 -0
  601. package/src/storage/path-lock.ts +44 -0
  602. package/src/storage/paths.ts +26 -0
  603. package/src/storage/types.ts +116 -0
  604. package/src/stories/StoryComponentThumbnail.tsx +184 -0
  605. package/src/stories/StoryPreviewMount.tsx +306 -0
  606. package/src/stories/component-content-source.tsx +106 -0
  607. package/src/stories/component-states-source.ts +78 -0
  608. package/src/stories/compose-project-stories.ts +255 -0
  609. package/src/stories/pixi-story-model.ts +30 -0
  610. package/src/stories/prefabs-finder.ts +54 -0
  611. package/src/stories/prefabs-from-stories.ts +182 -0
  612. package/src/stories/project-story-discovery.ts +78 -0
  613. package/src/stories/project-story-regions.ts +24 -0
  614. package/src/stories/story-actions.ts +54 -0
  615. package/src/stories/story-capture-command.ts +124 -0
  616. package/src/stories/story-capture.ts +584 -0
  617. package/src/stories/story-declared-medium.ts +126 -0
  618. package/src/stories/story-discovery.ts +176 -0
  619. package/src/stories/story-document-openers.ts +36 -0
  620. package/src/stories/story-dom-runtime.ts +78 -0
  621. package/src/stories/story-grouping.ts +111 -0
  622. package/src/stories/story-lane.ts +88 -0
  623. package/src/stories/story-mount-turn.ts +27 -0
  624. package/src/stories/story-opener.ts +260 -0
  625. package/src/stories/story-pixi-preview.ts +408 -0
  626. package/src/stories/story-presentation.ts +215 -0
  627. package/src/stories/story-registry.ts +517 -0
  628. package/src/stories/story-three-preview.ts +807 -0
  629. package/src/stories/three-story-model.ts +96 -0
  630. package/src/story-three-preview-runtime.ts +56 -0
  631. package/src/surface-keyboard.ts +112 -0
  632. package/src/surface-state.ts +124 -0
  633. package/src/tab-bootstrap.js +628 -0
  634. package/src/tab-census.ts +198 -0
  635. package/src/tab-lifecycle-client.ts +196 -0
  636. package/src/theme-library.ts +844 -0
  637. package/src/theme-preference.ts +378 -0
  638. package/src/theme.css +3437 -0
  639. package/src/three-viewport/bone-selection-highlight.ts +119 -0
  640. package/src/three-viewport/camera-fit.ts +41 -0
  641. package/src/three-viewport/interactive-renderer.ts +132 -0
  642. package/src/three-viewport/selection-brackets.ts +310 -0
  643. package/src/three-viewport/selection-outline.ts +183 -0
  644. package/src/three-viewport/skeleton-helper.ts +61 -0
  645. package/src/three-viewport/source-color.ts +167 -0
  646. package/src/three-viewport/studio-environment.ts +96 -0
  647. package/src/three-viewport-presentation.ts +23 -0
  648. package/src/tool-contribution-play.ts +74 -0
  649. package/src/tool-loader.ts +1798 -0
  650. package/src/transform-mode-request.ts +57 -0
  651. package/src/transient-hint.ts +78 -0
  652. package/src/trigger-volume-helper.ts +116 -0
  653. package/src/ui-source/adapter-region-includes.ts +241 -0
  654. package/src/ui-source/ensure-import.ts +132 -0
  655. package/src/ui-source/file-region-resolver.ts +302 -0
  656. package/src/ui-source/inspect.ts +775 -0
  657. package/src/ui-source/oid-transform.ts +1845 -0
  658. package/src/ui-source/plan-csf-story.ts +196 -0
  659. package/src/ui-source/plan-extract-component.ts +421 -0
  660. package/src/ui-source/plan-fork-component.ts +621 -0
  661. package/src/ui-source/plan-named-style.ts +95 -0
  662. package/src/ui-source/plan-source-edit.ts +353 -0
  663. package/src/ui-source/r3f-contract-resolver.ts +327 -0
  664. package/src/ui-source/r3f-diagnostic-index.ts +165 -0
  665. package/src/ui-source/r3f-environment-binding.ts +133 -0
  666. package/src/ui-source/r3f-joint-binding.ts +251 -0
  667. package/src/ui-source/r3f-lod-binding.ts +91 -0
  668. package/src/ui-source/r3f-particle-binding.ts +235 -0
  669. package/src/ui-source/r3f-physics-binding.ts +483 -0
  670. package/src/ui-source/r3f-project-contracts.ts +444 -0
  671. package/src/ui-source/relative-import-specifier.ts +34 -0
  672. package/src/ui-source/reparent-guard.ts +544 -0
  673. package/src/ui-source/source-edit-request.ts +97 -0
  674. package/src/ui-source/source-write-backend.ts +618 -0
  675. package/src/ui-source/syntactic-prop-specs.ts +296 -0
  676. package/src/ui-source/tier-source-write-backend.ts +279 -0
  677. package/src/ui-source/ts-ast.ts +171 -0
  678. package/src/ui-source/utility-class-support.ts +169 -0
  679. package/src/ui-source/write-component-default.ts +133 -0
  680. package/src/ui-source/writer.ts +1989 -0
  681. package/src/viewport-activation-timings.ts +840 -0
  682. package/src/viewport-authoring-policy.ts +186 -0
  683. package/src/viewport-controls-hint.ts +57 -0
  684. package/src/viewport-door.ts +237 -0
  685. package/src/viewport-shading-boundary.ts +12 -0
  686. package/src/vite-error-surface.ts +141 -0
  687. package/src/wait-until.ts +37 -0
  688. package/src/workspace-areas.ts +156 -0
  689. package/src/workspace-aux-commands.ts +11 -0
  690. package/src/workspace-available-documents.ts +127 -0
  691. package/src/workspace-core-utilities.ts +31 -0
  692. package/src/workspace-document-ids.ts +59 -0
  693. package/src/workspace-document-registry.ts +612 -0
  694. package/src/workspace-document-restore.ts +145 -0
  695. package/src/workspace-host-commands.ts +141 -0
  696. package/src/workspace-persistence-gate.ts +40 -0
  697. package/src/workspace-play-utilities.ts +44 -0
  698. package/src/workspace-presets.ts +425 -0
  699. package/src/workspace-regions.ts +294 -0
  700. package/src/workspace-state-persistence.ts +536 -0
  701. package/src/workspace-static-panels.ts +73 -0
  702. package/src/workspace-status-registry.ts +121 -0
  703. package/src/workspace-style.ts +239 -0
  704. package/src/workspace-utility-commands.ts +74 -0
  705. package/src/workspace-utility-registry.ts +263 -0
  706. package/src/workspace-viewport-rect.ts +97 -0
  707. package/src/world-adoption.ts +115 -0
  708. package/src/world-document-routing.ts +104 -0
  709. package/vite-plugin-creation-site-write.ts +184 -0
  710. package/vite-plugin-creation-site.ts +80 -0
  711. package/vite-plugin-game-static.ts +303 -0
  712. package/vite-plugin-module-doorways.ts +336 -0
  713. package/vite-plugin-product-contributions.ts +197 -0
  714. package/vite-plugin-project-game-static.ts +125 -0
  715. package/vite-plugin-project-jsx-js.ts +65 -0
  716. package/vite-plugin-project-root-absolute-assets.ts +359 -0
  717. package/vite-plugin-shared-react.ts +420 -0
  718. package/vite-plugin-shared-three.ts +203 -0
  719. package/vite-plugin-ui-oid.ts +2106 -0
@@ -0,0 +1,20 @@
1
+ import type { EditorCameraState } from '@volter/editor-sdk';
2
+
3
+ export const DOCUMENT_PREVIEW_WIDTH = 320;
4
+ export const DOCUMENT_PREVIEW_HEIGHT = 180;
5
+ export const DOCUMENT_PREVIEW_RECIPE = 'document-preview-v4';
6
+
7
+ export interface DocumentPreviewCaptureRequest {
8
+ readonly width: number;
9
+ readonly height: number;
10
+ readonly camera?: EditorCameraState | undefined;
11
+ }
12
+
13
+ /** The document owner supplies pixels and dependency identity; the host owns
14
+ * scheduling, disk cache, visibility priority, and tile state. */
15
+ export interface DocumentPreviewSource {
16
+ /** Stable identity for source and imported-dependency state. */
17
+ revision(): string;
18
+ subscribe(listener: () => void): () => void;
19
+ capture(request: DocumentPreviewCaptureRequest): Promise<string>;
20
+ }
@@ -0,0 +1,138 @@
1
+ import {
2
+ isEditorPresentationActive,
3
+ subscribeEditorPresentationActivity,
4
+ } from './editor-presentation-activity';
5
+
6
+ /**
7
+ * The frame-loop + renderer lifetime for one Object3D document viewport.
8
+ *
9
+ * Deactivate ≠ dispose.
10
+ *
11
+ * The layout host keeps every open document mounted. A tab
12
+ * flip only flips `active`. Destroying the `WebGLRenderer` on deactivate is
13
+ * a full context teardown + recreate on the next flip — measured live on
14
+ * `examples/third-person` at 4296 ms for the first 3D-board activation and
15
+ * 4015 ms for the second (doctor `--timings-only`). Pause the RAF loop
16
+ * instead; the canvas keeps its last frame and the program cache / IBL bake
17
+ * survive. Real document CLOSE unmounts the host, and {@link dispose} is the
18
+ * one path that frees the context.
19
+ */
20
+
21
+ export class DocumentRendererSession {
22
+ private rafId = 0;
23
+ private running = false;
24
+ private disposed = false;
25
+ private active = false;
26
+ private readonly unsubscribeActivity: () => void;
27
+
28
+ constructor(
29
+ private readonly frame: (time: number, resumed: boolean) => void,
30
+ private readonly releaseRenderer: () => void,
31
+ ) {
32
+ this.unsubscribeActivity = subscribeEditorPresentationActivity(() => this.syncActivity());
33
+ }
34
+
35
+ get isDisposed(): boolean {
36
+ return this.disposed;
37
+ }
38
+
39
+ get isRunning(): boolean {
40
+ return this.running;
41
+ }
42
+
43
+ /**
44
+ * Tab flip. `false` pauses the loop and keeps the GPU surface. `true`
45
+ * resumes it. Neither constructs nor disposes a renderer.
46
+ */
47
+ setActive(active: boolean): void {
48
+ if (this.disposed) return;
49
+ this.active = active;
50
+ this.syncActivity();
51
+ }
52
+
53
+ private syncActivity(): void {
54
+ if (this.active && isEditorPresentationActive()) this.start();
55
+ else this.stop();
56
+ }
57
+
58
+ /** Resizing clears the drawing buffer. Repaint immediately while visible;
59
+ * a suspended document redraws as soon as its presentation resumes. */
60
+ redraw(): void {
61
+ if (this.running && !this.disposed && isEditorPresentationActive()) {
62
+ this.guardedFrame(performance.now());
63
+ }
64
+ }
65
+
66
+ /** The one teardown path — document CLOSE / host unmount. */
67
+ dispose(): void {
68
+ this.stop();
69
+ if (this.disposed) return;
70
+ this.disposed = true;
71
+ this.unsubscribeActivity();
72
+ this.releaseRenderer();
73
+ }
74
+
75
+ private start(): void {
76
+ if (this.disposed || this.running) return;
77
+ this.running = true;
78
+ // A tab activation is a direct request to present this document. Draw one
79
+ // frame in the activation turn, then join the browser's animation clock.
80
+ // Waiting for the first rAF made a visible tab inherit Chromium's former
81
+ // background cadence (the 1 Hz signature) even when the page itself was
82
+ // visible; users saw the old canvas for that whole interval. Subsequent
83
+ // presentation remains ordinary rAF-driven work.
84
+ // Let content reset its delta baseline without advancing by the hidden interval.
85
+ this.guardedFrame(performance.now(), true);
86
+ if (!this.running || this.disposed) return;
87
+ this.rafId = requestAnimationFrame(this.tick);
88
+ }
89
+
90
+ /** The last frame's failure text, so a persistent fault narrates ONCE
91
+ * rather than sixty times a second, and a recovered loop resets. */
92
+ private lastFrameFailure: string | null = null;
93
+
94
+ /**
95
+ * One frame, and the loop survives it. A throw out of a rAF callback used
96
+ * to be the end of this document's presentation: the exception left
97
+ * `tick` before it rescheduled, so the stage froze on whatever it last
98
+ * drew and nothing said why. Measured (2026-09-04, the mesh document's
99
+ * session swap): three's "Cannot read properties of null (reading
100
+ * 'precision')" from one frame drawn between a disposed overlay and the
101
+ * scene swap killed the stage for the rest of the session. The frame's
102
+ * failure goes to the console WITH its stack — that is what reaches the
103
+ * doors — and the next frame is drawn, because a transient race recovers
104
+ * on its own and a persistent fault is still better shown than frozen.
105
+ */
106
+ private guardedFrame(time: number, resumed = false): void {
107
+ try {
108
+ this.frame(time, resumed);
109
+ this.lastFrameFailure = null;
110
+ } catch (caught) {
111
+ const text = caught instanceof Error ? caught.message : String(caught);
112
+ if (text !== this.lastFrameFailure) {
113
+ this.lastFrameFailure = text;
114
+ // biome-ignore lint/suspicious/noConsole: a document frame that threw must narrate itself
115
+ console.error('[document renderer] a frame threw; the loop continues:', caught);
116
+ }
117
+ }
118
+ }
119
+
120
+ private stop(): void {
121
+ this.running = false;
122
+ if (this.rafId !== 0) {
123
+ cancelAnimationFrame(this.rafId);
124
+ this.rafId = 0;
125
+ }
126
+ }
127
+
128
+ private readonly tick = (time: number): void => {
129
+ if (!this.running || this.disposed) return;
130
+ if (!isEditorPresentationActive()) {
131
+ this.stop();
132
+ return;
133
+ }
134
+ this.guardedFrame(time);
135
+ if (!this.running || this.disposed) return;
136
+ this.rafId = requestAnimationFrame(this.tick);
137
+ };
138
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Editor server SDK.
3
+ *
4
+ * All frontend code should use this module instead of calling fetch()/EventSource
5
+ * with raw endpoint URLs.
6
+ *
7
+ * The project's `public/` file operations (`listAssets`, `saveFile`) are routed
8
+ * through the backend-agnostic `StorageBackend` (see ./storage): `HttpStorage`
9
+ * over the same `/__editor/*` routes, wrapped by the frame's file door once
10
+ * that lands. The remaining endpoints are NOT `public/` file ops — the
11
+ * launcher's own reads, the play-log writes, the asset library, and the
12
+ * user-triggered actions (`createProject`, `browseFolder`,
13
+ * `openProjectOnServer`, `revealInFinder`, `startExport`,
14
+ * `downloadOnlineAsset`).
15
+ */
16
+
17
+ export type { EditorEventSource } from './editor-presence';
18
+ export { connectEvents, connectTabPresence, reportTabRoute } from './editor-presence';
19
+
20
+ // ---------------------------------------------------------------------------
21
+ // The families. This path stays the ONE import site for the editor server SDK
22
+ // — every name below was exported from here before the split and still is, so
23
+ // no caller changed. What changed is that a reader looking for "how does the
24
+ // editor talk to the worktree board" now opens `api/worktrees.ts` instead of
25
+ // scrolling an 1,900-line file.
26
+ // ---------------------------------------------------------------------------
27
+
28
+ // `./api/agents` is DELIBERATELY NOT RE-EXPORTED HERE (phase 1 unit 22). It is
29
+ // the page-side client for the coding-harness routes, and `@vgai/agents`'s
30
+ // modules have always imported `@editor/api/agents` directly rather than
31
+ // through this barrel — so the family's claim above ("every name was exported
32
+ // from here before the split and still is") was already not how its one
33
+ // consumer reads it. What the row bought instead was a static edge from every
34
+ // importer of this file into the agents lane's whole wire, which is what held
35
+ // four files in the editor's eager closure after the last host caller left.
36
+ // The rule is unit 13's, found on the view presenter: a door every package
37
+ // calls must not carry every lane's implementation.
38
+ export * from './api/assets';
39
+ export * from './api/build';
40
+ export * from './api/logs';
41
+ export * from './api/project-identity';
42
+ export * from './api/project-open';
43
+ export * from './api/project-source';
44
+ export * from './api/project-state';
45
+ export * from './api/relay';
46
+ export * from './api/worktrees';
@@ -0,0 +1,139 @@
1
+ /**
2
+ * THE CHROME-CAPTURE DOOR: photograph the editor PAGE — every panel, every
3
+ * tab strip, the Inspector, the viewport inside it — as the person is seeing
4
+ * it. `vgai screenshot editor` / `editor.captureEditorChrome()`.
5
+ *
6
+ * WHY IT EXISTS. Every other capture door photographs a SUBJECT: the running
7
+ * game, the active document, the Scene viewport, a model. None photographs
8
+ * the editor itself, so a contribution author — human or agent — could not
9
+ * run the sighted render→look→revise loop on a panel through the product, and
10
+ * every dev-surface wave so far was built blind, on DOM probes (WORK.md, "The
11
+ * chrome-capture door"). A skin, a workspace arrangement or a new region
12
+ * cannot be judged at all without this.
13
+ *
14
+ * HOW. The same compositor the active-document door uses
15
+ * (`composite-screenshot.ts`), pointed at `#editor-chrome-root` — the ONE
16
+ * theme scope (ARCHITECTURE-CORE §Editor chrome) — with `includeDocumentStyles`
17
+ * on, so the design system's stylesheet rides the clone and chrome
18
+ * photographs as it appears. Three kinds of canvas sit inside that root and
19
+ * only one of them can be read late:
20
+ *
21
+ * - the Scene viewport's canvas has no `preserveDrawingBuffer`; its pixels
22
+ * come from its registered presenter, including camera preview and helpers;
23
+ * the store's offscreen render is the fallback before registration;
24
+ * - an Asset Lab 3D document's canvas is the same story through its
25
+ * session (`Object3DDocumentSession.captureImage`);
26
+ * - a live game or Pixi canvas goes through the one `canvasFrame` seam
27
+ * every pixel door shares (`live-canvas-frame.ts`).
28
+ *
29
+ * Everything else reads directly. A canvas this module cannot recognise or
30
+ * re-render photographs as the browser hands it back — possibly black — and
31
+ * `layers.canvases` says how many were drawn, so a reader can tell a black
32
+ * panel from a missing one.
33
+ */
34
+
35
+ import type { EditorView } from '@volter/editor-sdk';
36
+ import { allObject3DDocumentSessions } from './authoring/object3d-document-session-registry';
37
+ import { type CompositeCapture, capturePlayComposite } from './composite-screenshot';
38
+ import { currentEditorView } from './editor-current-view';
39
+ import type { EditorShellStore } from './editor-shell-store';
40
+ import { liveCanvasFrame } from './live-canvas-frame';
41
+
42
+ export const EDITOR_CHROME_ROOT_ID = 'editor-chrome-root';
43
+
44
+ export interface EditorChromeCapture extends CompositeCapture {
45
+ /** The view the page was showing when the frame was taken. */
46
+ view: EditorView;
47
+ /** The frame's own size, in OUTPUT pixels. */
48
+ size: { width: number; height: number };
49
+ /** Output pixels per CSS pixel — what one pixel of {@link size} is. A
50
+ * reference frame captured on a 2x display is judged against `scale: 2`. */
51
+ scale: number;
52
+ }
53
+
54
+ export interface EditorChromeCaptureOptions {
55
+ /**
56
+ * Output pixels per CSS pixel. Defaults to the page's own
57
+ * `devicePixelRatio`, so the default frame is the pixels the display holds.
58
+ *
59
+ * A stroke weight, a 1 px border or a glyph edge cannot be judged below the
60
+ * resolution it is being compared against — on a DPR-1 monitor the default
61
+ * is 1 and a reference captured at 2x is only comparable if this is asked
62
+ * for explicitly. It scales the DOM leg by rasterizing it through a viewBox
63
+ * (crisp at any factor); canvases are limited by their own backing store and
64
+ * are upscaled past it.
65
+ */
66
+ scale?: number;
67
+ }
68
+
69
+ /** A data URL as something `drawImage` accepts. */
70
+ async function imageOf(dataUrl: string): Promise<HTMLImageElement> {
71
+ const image = new Image();
72
+ image.src = dataUrl;
73
+ await image.decode();
74
+ return image;
75
+ }
76
+
77
+ /**
78
+ * Same-frame pixels for every canvas the page holds — the seam described in
79
+ * the header. `null` means "read the canvas directly".
80
+ */
81
+ function chromeCanvasFrame(store: EditorShellStore, scale: number) {
82
+ return async (canvas: HTMLCanvasElement): Promise<CanvasImageSource | null> => {
83
+ // The re-render fallbacks below draw at a size WE choose, so they are asked
84
+ // for the frame's own scale — a 2x capture whose viewport had to be
85
+ // re-rendered gets a 2x render, not a 1x one stretched. The presented-frame
86
+ // paths above them hand back the live buffer at its own backing-store size,
87
+ // which is the ceiling those legs have.
88
+ const size = {
89
+ width: Math.max(1, Math.round(canvas.clientWidth * scale)),
90
+ height: Math.max(1, Math.round(canvas.clientHeight * scale)),
91
+ };
92
+ if (store.viewportCanvas() === canvas) {
93
+ const presented = await liveCanvasFrame(canvas);
94
+ if (presented) return presented;
95
+ const dataUrl = store.captureViewportImage(size);
96
+ return dataUrl ? imageOf(dataUrl) : null;
97
+ }
98
+ for (const session of allObject3DDocumentSessions()) {
99
+ if (session.renderer.domElement !== canvas) continue;
100
+ // The PRESENTED frame first: everything the host drew over the
101
+ // document's own render — the compass above all — lives only in the
102
+ // default framebuffer, and `captureImage` is an offscreen re-render of
103
+ // the subject alone (see `requestPresentedFrame`). Falling back to it
104
+ // keeps a stopped loop photographable.
105
+ const presented = await session.requestPresentedFrame();
106
+ if (presented) return presented;
107
+ const dataUrl = session.captureImage(size);
108
+ return dataUrl ? imageOf(dataUrl) : null;
109
+ }
110
+ return liveCanvasFrame(canvas);
111
+ };
112
+ }
113
+
114
+ /** Photograph the editor page. Throws, by name, when the chrome root is not
115
+ * mounted — a page that is not the editor has nothing to photograph. */
116
+ export async function captureEditorChrome(
117
+ store: EditorShellStore,
118
+ options?: EditorChromeCaptureOptions,
119
+ ): Promise<EditorChromeCapture> {
120
+ const root = document.getElementById(EDITOR_CHROME_ROOT_ID);
121
+ if (!root) {
122
+ throw new Error(
123
+ `The editor chrome root (#${EDITOR_CHROME_ROOT_ID}) is not mounted, so there is no editor ` +
124
+ 'page to photograph.',
125
+ );
126
+ }
127
+ const scale = options?.scale ?? window.devicePixelRatio ?? 1;
128
+ const rect = root.getBoundingClientRect();
129
+ const size = {
130
+ width: Math.max(1, Math.round(rect.width * scale)),
131
+ height: Math.max(1, Math.round(rect.height * scale)),
132
+ };
133
+ const composite = await capturePlayComposite(root, {
134
+ canvasFrame: chromeCanvasFrame(store, scale),
135
+ includeDocumentStyles: true,
136
+ size,
137
+ });
138
+ return { ...composite, view: currentEditorView(store), size, scale };
139
+ }
@@ -0,0 +1,164 @@
1
+ /**
2
+ * THE EDITOR'S COMMANDS: the ONE table of what its palette actions ARE, and
3
+ * the ONE door to running a command by id.
4
+ *
5
+ * 1. **The ACTION TABLE.** What the palette lists, published as DATA so the
6
+ * frame can register one VS Code command plus one
7
+ * `MenuId.CommandPalette` item per entry — which is what makes ⌘⇧P list
8
+ * OUR actions with OUR labels. `components/palette-action-publisher.tsx`
9
+ * is its one author.
10
+ *
11
+ * ## Why this is published at RUNTIME and the keymap is GENERATED
12
+ *
13
+ * The chords are a generated built-in extension because a keybinding rule
14
+ * registered after `workbench.common.main.ts` has loaded is INERT, and the
15
+ * chords are package data known at build time. Neither half holds here,
16
+ * measured 2026-09-19:
17
+ *
18
+ * - A MENU ITEM registered late is not inert. `MenuRegistry` fires
19
+ * `onDidChangeMenu` and the palette rebuilds its picks on every open
20
+ * (`commandsQuickAccess.ts`'s `getGlobalCommandPicks`), which is how
21
+ * every extension-contributed command reaches ⌘⇧P.
22
+ * - The table is not static. Its ids are a different namespace from the
23
+ * keymap's (`editor.undo` here, `edit.undo` there), several labels are
24
+ * templated per selection (`View Through <camera name>`), and the
25
+ * entity, tool-document, board-open and package-contributed (`tool:*`)
26
+ * entries do not exist until something mounts or a package loads.
27
+ *
28
+ * So the generator is left alone and the frame reads a live table instead.
29
+ *
30
+ * 2. **`editor.command(id, args)`**, the door a product surface drives a VIEW
31
+ * through. `editor.document.*` reaches only the ACTIVE CENTRE DOCUMENT by
32
+ * its own contract, so every drawer utility — Console, Profiler, Network,
33
+ * the node editor — was undrivable until this existed; a walk looking for
34
+ * one tried `editor.view`, `editor.frame` and `editor.present` in turn and
35
+ * was refused by each, because there was no door.
36
+ *
37
+ * It is the frame's `ICommandService.executeCommand`, installed by the
38
+ * contribution, so ANY workbench command id is reachable — ours and
39
+ * upstream's alike. That is the point of running inside a workbench.
40
+ * Before the executor lands, a `vgai.<view>.<verb>` id still resolves off
41
+ * `@volter/editor-sdk/views` — the same table the frame's command would have
42
+ * called — and any OTHER id is refused BY NAME, because a silent nothing
43
+ * is how an agent concludes a command "did not work".
44
+ */
45
+ /**
46
+ * How the frame opens ITS palette when one of our own actions asks for one
47
+ * (`view.commandPalette`, whose chord U6 left unbound under the frame because
48
+ * ⌘K is VS Code's chord prefix). Installed by the contribution after the
49
+ * bridge has mounted; absent, the action is refused rather than silently
50
+ * toggling a palette nobody renders.
51
+ */
52
+ let paletteOpener: (() => void) | null = null;
53
+
54
+ export function setPaletteOpener(open: (() => void) | null): void {
55
+ paletteOpener = open;
56
+ }
57
+
58
+ /** Open the command palette. `false` before the opener lands — the window
59
+ * between the bridge mounting and the contribution's `setPaletteOpener`. */
60
+ export function openCommandPalette(): boolean {
61
+ if (!paletteOpener) return false;
62
+ paletteOpener();
63
+ return true;
64
+ }
65
+
66
+ export interface PaletteActionEntry {
67
+ readonly id: string;
68
+ readonly label: string;
69
+ /** `action` | `entity` | `asset`, as `action-registry.ts` spells it. */
70
+ readonly category: string;
71
+ readonly run: () => void | Promise<void>;
72
+ }
73
+
74
+ let entries: readonly PaletteActionEntry[] = [];
75
+ let entriesVersion = 0;
76
+ const entryListeners = new Set<() => void>();
77
+
78
+ /**
79
+ * Publish the table the palette would list. Called from the editor's own
80
+ * tree (`components/palette-action-publisher.tsx`) so the hooks that build it
81
+ * — the shell store, the history commands, the contributed-chrome version —
82
+ * are read exactly where React reads them, rather than reached for out of
83
+ * band. The array is replaced, never merged: the builders return the whole
84
+ * live set each time.
85
+ */
86
+ export function publishPaletteActions(next: readonly PaletteActionEntry[]): void {
87
+ entries = next;
88
+ entriesVersion++;
89
+ for (const listener of entryListeners) listener();
90
+ }
91
+
92
+ /** Every palette action the editor currently offers. */
93
+ export function paletteActions(): readonly PaletteActionEntry[] {
94
+ return entries;
95
+ }
96
+
97
+ export function paletteActionsVersion(): number {
98
+ return entriesVersion;
99
+ }
100
+
101
+ export function subscribePaletteActions(listener: () => void): () => void {
102
+ entryListeners.add(listener);
103
+ return () => entryListeners.delete(listener);
104
+ }
105
+
106
+ /**
107
+ * Run one palette action by id — the door the workbench's own command calls.
108
+ * `false` means the editor no longer has that entry (a selection changed, a
109
+ * tool document closed, a package unloaded), which the caller reports by name
110
+ * rather than swallowing.
111
+ */
112
+ export function invokePaletteAction(id: string): boolean {
113
+ const entry = entries.find((candidate) => candidate.id === id);
114
+ if (!entry) return false;
115
+ void entry.run();
116
+ return true;
117
+ }
118
+
119
+ /**
120
+ * The workbench's command service, handed over by the contribution once it has
121
+ * one. Installed AFTER the bridge mounts, for the reason every other seam
122
+ * here states: a `ServicesAccessor` is valid only inside the synchronous part
123
+ * of a command's invocation.
124
+ */
125
+ let commandExecutor: ((id: string, args?: unknown) => unknown) | null = null;
126
+
127
+ export function setCommandExecutor(run: ((id: string, args?: unknown) => unknown) | null): void {
128
+ commandExecutor = run;
129
+ }
130
+
131
+ /** The `vgai.<view>.<verb>` shape the views registry keys, and the ONLY id
132
+ * shape standalone can answer. */
133
+ const VIEW_VERB_COMMAND = /^vgai\.([^.]+)\.(.+)$/;
134
+
135
+ /**
136
+ * Run a command by id — `editor.command(id, args)`'s one implementation.
137
+ *
138
+ * The workbench's `ICommandService` when it has landed; before that, the
139
+ * views registry, reached through a DYNAMIC import so a module only a
140
+ * `vgai eval` reaches never joins the editor entry's static closure.
141
+ *
142
+ * A refusal is always BY NAME. `invokeViewVerb` names the view's whole
143
+ * vocabulary when it does not carry the verb (that refusal is the VIEW's, and
144
+ * moving it here would put it somewhere the view does not draw), and an id
145
+ * that is not a view verb at all is refused with the shape that would have
146
+ * worked.
147
+ */
148
+ export async function executeCommand(id: string, args?: unknown): Promise<unknown> {
149
+ if (commandExecutor) return await commandExecutor(id, args);
150
+ const parts = VIEW_VERB_COMMAND.exec(id);
151
+ if (!parts) {
152
+ throw new Error(
153
+ `No command "${id}". Without the Code-OSS frame there is no command service, so the ` +
154
+ "only commands this editor answers are a view's own verbs, spelled " +
155
+ 'vgai.<view>.<verb> (for example vgai.blender-node-view.view-all).',
156
+ );
157
+ }
158
+ const { invokeViewVerb } = await import('@volter/editor-sdk/views');
159
+ return invokeViewVerb(
160
+ parts[1] as string,
161
+ parts[2] as string,
162
+ args as Record<string, unknown> | undefined,
163
+ );
164
+ }