@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,144 @@
1
+ /**
2
+ * WHICH ROOTS THE ACTIVE AUTHORING SURFACE PRESENTS LIVE — the host's own
3
+ * answer to "what is mounted, and through which adapter".
4
+ *
5
+ * It lived in `coverage/root-coverage.ts` because the per-root coverage report
6
+ * was its first reader, and it stayed there long after a second one appeared.
7
+ * It is not a grade: the vitals' `presented three roots` invariant ("a scene
8
+ * has one root", `coverage/ontology-invariants.ts`) asks it, the Hierarchy and
9
+ * the gizmo work over exactly these subjects, and a host with no game skew
10
+ * loaded still has every one of them. So it is the authoring seam's, beside
11
+ * `active-adapter.ts` whose override it reads — and the coverage report that
12
+ * grades these subjects can leave the host without taking the question with
13
+ * it.
14
+ */
15
+
16
+ import type { AuthoringAdapter } from '@volter/editor-project/adapter';
17
+ import type { AdapterSurface } from '@volter/editor-project/adapter/adapter-surface';
18
+ import { liveSurface } from '../live-session-registry';
19
+ import { projectAdapterFacet } from '../project-adapter';
20
+ import {
21
+ activeWorkspaceDocument,
22
+ activeWorkspaceDocumentSelection,
23
+ } from '../workspace-document-registry';
24
+ import { getAuthoringOverride } from './active-adapter';
25
+ import { CompositeAuthoringAdapter } from './composite-authoring-adapter';
26
+
27
+ /** One mounted root, as this module needs to see it. Structural on purpose: the
28
+ * composite hands these over, and a test can build one by hand. */
29
+ export interface MountedRootSubject {
30
+ readonly worldId: string;
31
+ readonly surface: AdapterSurface | null;
32
+ readonly adapter: AuthoringAdapter;
33
+ }
34
+
35
+ const SURFACE_KINDS: readonly string[] = ['three', 'canvas', 'dom'];
36
+
37
+ /**
38
+ * A root that DECLARES it has no live editing surface here — the disclosure
39
+ * adapter (`AuthoringProvenance.source === 'boundary'`) a manifest-declared
40
+ * world wears while its real mount is still assembling, or after that mount was
41
+ * suspended or failed.
42
+ *
43
+ * It is NOT a coverage subject. Grading a disclosure against the provider
44
+ * contract prints "this root exposes no <provider> provider" fourteen times
45
+ * about a surface that does not exist yet — a snapshot that is false the moment
46
+ * it is taken and, because the console sync forwards warnings to the server's
47
+ * unresolved ledger, then stands there forever beside the real post-mount
48
+ * report.
49
+ *
50
+ * MEASURED on a canvas ingest: opening the project installs the edit-mode
51
+ * composite with a Boundary child for the ingest root
52
+ * (`authoring/edit-mode-authoring.ts`), and the mount then spends SECONDS
53
+ * awaiting the Game document, the capture window — a budget of VISIBLE time,
54
+ * 8s by default, which PARKS while the tab is hidden
55
+ * (`ingest/capture-wait-report.ts`) — and the stage settle, before
56
+ * `setActiveAuthoring` swaps the live adapter in
57
+ * (`ingest/mount-canvas-ingest-root.ts`). The vitals sampler runs every 5s
58
+ * (`coverage/session-vitals.ts`), so an ordinary reload lands inside that
59
+ * window and files "16 of 30 seams are MISSING" against a session that reports
60
+ * zero editor gaps seconds later.
61
+ *
62
+ * The stand-down is principled rather than timed: no debounce, no delay, no
63
+ * game id. Provenance is the adapter's OWN statement of what its rows project
64
+ * (rule zero — the shell reads the field, it never infers truth from adapter
65
+ * identity), and "declared world with no live editing surface here" is the
66
+ * adapter saying the mount has not attached. Coverage over an unattached mount
67
+ * is not a measurement.
68
+ *
69
+ * A root that mounted and honestly publishes nothing is the OPPOSITE case and
70
+ * stays a subject: `authoring/no-authoring-adapter.ts` declares no provenance
71
+ * at all, because "this root has no authoring surface" is a real, standing
72
+ * capability gap that the report exists to keep loud.
73
+ */
74
+ function isBoundaryDisclosure(adapter: AuthoringAdapter): boolean {
75
+ return adapter.provenance?.source === 'boundary';
76
+ }
77
+
78
+ /** The composite's `kind` string as a surface, or `null` when it is not one of
79
+ * the three the host hands out — in which case NOTHING is excused (see
80
+ * `CapabilityCoverageFacts.surface`). */
81
+ function asSurface(kind: string): AdapterSurface | null {
82
+ return SURFACE_KINDS.includes(kind) ? (kind as AdapterSurface) : null;
83
+ }
84
+
85
+ /**
86
+ * Every root the active authoring surface presents LIVE, or `[]` when nothing is
87
+ * mounted.
88
+ *
89
+ * A composite lists its children; a bare adapter IS the one root. `role:
90
+ * 'surface'` children are skipped: they are adapter-owned content INSIDE a
91
+ * root (a nested board, a scene-UI seam), not roots the manifest declared, and
92
+ * grading them against the full contract would invent gaps for things that were
93
+ * never meant to be roots. {@link isBoundaryDisclosure} children are skipped for
94
+ * the sibling reason: they are worlds the editor has DISCLOSED, not mounted.
95
+ */
96
+ export function mountedRootSubjects(): readonly MountedRootSubject[] {
97
+ // An isolation document is a real Edit mount owned by one declared region,
98
+ // even though it deliberately does not replace the composition-wide active
99
+ // adapter. Its workspace binding is the same adapter Hierarchy, Inspector,
100
+ // and writes use; its descriptor carries the owning root. Measure that pair
101
+ // first so coverage describes the surface the author is actually editing.
102
+ const documentSelection = activeWorkspaceDocumentSelection();
103
+ const documentRootId = activeWorkspaceDocument()?.descriptor.provenance?.rootId;
104
+ const documentRegion = documentRootId
105
+ ? projectAdapterFacet()?.regions.find((region) => region.id === documentRootId)
106
+ : undefined;
107
+ const documentSubject =
108
+ documentSelection?.adapter && documentRootId && documentRegion
109
+ ? {
110
+ worldId: documentRootId,
111
+ surface: documentRegion.surface,
112
+ adapter: documentSelection.adapter,
113
+ }
114
+ : null;
115
+ const active = getAuthoringOverride();
116
+ if (!active) return documentSubject ? [documentSubject] : [];
117
+ if (active instanceof CompositeAuthoringAdapter) {
118
+ const subjects = active
119
+ .childAdapters()
120
+ .filter((child) => child.role === 'world' && !isBoundaryDisclosure(child.adapter))
121
+ .map((child) => ({
122
+ worldId: child.worldId,
123
+ surface: asSurface(child.kind),
124
+ adapter: child.adapter,
125
+ }));
126
+ if (!documentSubject) return subjects;
127
+ return [documentSubject, ...subjects.filter((subject) => subject.worldId !== documentRootId)];
128
+ }
129
+ if (isBoundaryDisclosure(active)) return documentSubject ? [documentSubject] : [];
130
+ // A bare (non-composite) active adapter still HAS a surface — a live ingest
131
+ // session states its render substrate outright, and `IngestKind` and
132
+ // `AdapterSurface` are the same three words by construction. Leaving this
133
+ // `null` reported the canvas N-A trio (assetSubject/text/colorSample) as
134
+ // gaps on every bare canvas mount, while the surface-aware ingest door
135
+ // called the same three rows `na` — two doors disagreeing about one mount.
136
+ // No live ingest ⇒ `null` stays, and nothing is excused (the deliberate
137
+ // cheap-direction-to-be-wrong).
138
+ const activeSubject = {
139
+ worldId: 'root',
140
+ surface: liveSurface(),
141
+ adapter: active,
142
+ };
143
+ return documentSubject ? [documentSubject, activeSubject] : [activeSubject];
144
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * NoAuthoringAdapter — what the editor can honestly offer over a mounted root
3
+ * that exposes no authoring surface at all.
4
+ *
5
+ * A `{ module }` adapter is free to publish nothing authorable: it mounts, it
6
+ * draws, and the host has no tree to bind the hierarchy/inspector/gizmo to.
7
+ * Rather than hide that root, or fabricate a surface for it, this adapter
8
+ * advertises exactly what is true — one informational hierarchy node and all
9
+ * `capabilities` false — so the editor's generic panels render an honest
10
+ * nothing-to-author state instead of pretending to edit.
11
+ */
12
+
13
+ import type {
14
+ AuthoringAdapter,
15
+ AuthoringCapabilities,
16
+ EditorNode,
17
+ HierarchyProvider,
18
+ } from '@volter/editor-project/adapter';
19
+ import type { EditorShellStore } from '../editor-shell-store';
20
+
21
+ /** The one hierarchy row this adapter publishes. Exported because it is a
22
+ * MESSAGE, not an entity: a surface that lists entities (the command palette)
23
+ * has to be able to tell it apart from a thing a person can select. */
24
+ export const NO_AUTHORING_ID = 'no-authoring:root';
25
+
26
+ export function makeNoAuthoringAdapter(store: EditorShellStore, label: string): AuthoringAdapter {
27
+ const node: EditorNode = {
28
+ id: NO_AUTHORING_ID,
29
+ label,
30
+ secondaryLabel: 'No authoring surface',
31
+ role: 'boundary',
32
+ kind: 'object',
33
+ parentId: null,
34
+ childIds: [],
35
+ };
36
+ const hierarchy: HierarchyProvider = {
37
+ roots: () => [node],
38
+ node: (id) => (id === NO_AUTHORING_ID ? node : null),
39
+ // No `object3D`/`idForObject3D`: there is no reachable Object3D to offer.
40
+ };
41
+ const capabilities: AuthoringCapabilities = {
42
+ transform: false,
43
+ inspectorFields: false,
44
+ persist: false,
45
+ };
46
+ return {
47
+ capabilities,
48
+ hierarchy,
49
+ selection: {
50
+ get: () => [...store.selectedEntityIds],
51
+ set: (ids) => store.selectMultiple(ids),
52
+ },
53
+ subscribe: (listener) => store.subscribe(listener),
54
+ };
55
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * The shipped NO-SELECTION subjects (`inspection/null-subject.ts` is the
3
+ * seam; `main.tsx` imports this module for its import-time registration).
4
+ *
5
+ * With nothing selected, the inspector shows NOTHING (owner, 2026-08-07) —
6
+ * no box, no hint, no scene-global settings. A surface earns an empty-state
7
+ * subject only when its empty space IS a real thing: the one shipped case is
8
+ * an open Asset Lab document, where clicking empty space means "the
9
+ * document", and the box shows the document's own identity and sections.
10
+ * Every other surface's honest answer is `null`, which unmounts the box
11
+ * entirely (`inspection/null-subject.ts`'s no-provider contract).
12
+ *
13
+ * Scene-GLOBAL affordances do not ride the empty state: the navmesh
14
+ * bake/clear verbs live in the Debug menu (`components/ApplicationMenus.tsx`),
15
+ * dispatched through the same `navmesh-actions.ts` events as always.
16
+ */
17
+
18
+ import { getActiveAssetEditorContext } from '../asset-editor-context';
19
+ import { documentInspectionSubject } from '../inspection/document-subject';
20
+ import { registerNullSubjectProvider } from '../inspection/null-subject';
21
+ import { activeWorkspaceDocumentId } from '../workspace-document-registry';
22
+
23
+ /**
24
+ * An open asset document's empty state: the DOCUMENT itself. Pick a part
25
+ * inside it and the ordinary selection path composes that part's subject
26
+ * through the document's own adapter; pick nothing and this is what the
27
+ * document says it is — its name, its kind, its provenance, and whatever
28
+ * sections it declared (`components/AssetEditorShell.tsx` publishes the
29
+ * description to `inspection/document-subject.ts`).
30
+ */
31
+ registerNullSubjectProvider({
32
+ match: (ctx) => ctx.surface === 'asset-lab',
33
+ describe: () => {
34
+ const context = getActiveAssetEditorContext();
35
+ if (!context) return null;
36
+ const published = documentInspectionSubject();
37
+ // Only THIS document's subject. A stale publication from a document that
38
+ // has since been closed is not what the human is looking at — the honest
39
+ // fallback is the document's identity alone.
40
+ return published?.documentId === context.documentId
41
+ ? published.subject
42
+ : {
43
+ id: context.documentId,
44
+ title: context.title,
45
+ kindLabel: context.type,
46
+ sections: [],
47
+ };
48
+ },
49
+ });
50
+
51
+ /**
52
+ * ANY active document's own subject — the general case the Asset Lab provider
53
+ * above is the specialized one of.
54
+ *
55
+ * A document that stands behind no authoring adapter still has things to say
56
+ * about what you picked inside it, and `publishDocumentInspectionSubject` is
57
+ * where it says them. Until this existed the only READER was keyed on the
58
+ * `asset-lab` surface, so the 2D components board published a picked frame's
59
+ * identity into a holder nothing ever consulted and a human clicked frame
60
+ * after frame against an empty panel (runhuman pass 92). The match is
61
+ * document identity and nothing more, the same test
62
+ * `inspection/game-subject.ts` makes.
63
+ *
64
+ * Registered AFTER the Asset Lab provider so first-match-wins keeps that
65
+ * surface's fallback-to-document-identity behavior, which this deliberately
66
+ * does not have: a document that published nothing is describing no subject,
67
+ * and an empty inspector is the honest answer.
68
+ */
69
+ registerNullSubjectProvider({
70
+ match: () => {
71
+ const published = documentInspectionSubject();
72
+ return published !== null && published.documentId === activeWorkspaceDocumentId();
73
+ },
74
+ describe: () => documentInspectionSubject()?.subject ?? null,
75
+ });
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Generic Asset Lab persistence. Project code serializes its own native
3
+ * document into ordinary files; this host-side bridge owns transaction
4
+ * ordering, checksum preflight, compensation, and canonical undo/redo.
5
+ */
6
+
7
+ import type {
8
+ ToolObject3DDocumentPersistence,
9
+ ToolObject3DDocumentState,
10
+ } from '@volter/editor-sdk/contributions';
11
+ import type { HistoryService } from '../history/history-service';
12
+ import {
13
+ getProjectFileHistory,
14
+ type HistoryFileBackend,
15
+ type ProjectFileMutation,
16
+ type ProjectFileMutationSession,
17
+ } from '../history/project-file-history';
18
+ import { getProjectResourceHistoryBackend } from '../history/project-root-history-backends';
19
+ import { runWritePipe, type WriteAck, type WriteResolution } from './write-pipe';
20
+
21
+ export interface OpenObject3DDocumentPersistenceOptions {
22
+ readonly binding: ToolObject3DDocumentPersistence;
23
+ readonly document: ToolObject3DDocumentState;
24
+ readonly history: HistoryService;
25
+ readonly backend?: HistoryFileBackend;
26
+ }
27
+
28
+ async function serializeObject3DDocument(
29
+ binding: ToolObject3DDocumentPersistence,
30
+ document: ToolObject3DDocumentState,
31
+ ): Promise<ProjectFileMutation[]> {
32
+ if (binding.resources.length === 0) {
33
+ throw new Error('An Object3D document persistence binding must own at least one resource.');
34
+ }
35
+ const changes: ProjectFileMutation[] = [];
36
+ for (const resource of binding.resources) {
37
+ changes.push({
38
+ path: resource.path,
39
+ data: await resource.serialize(document),
40
+ contentType: resource.contentType ?? 'application/octet-stream',
41
+ });
42
+ }
43
+ return changes;
44
+ }
45
+
46
+ export interface Object3DDocumentPersistenceSession {
47
+ /** Commit through the one persistence pipe, and answer for THIS commit.
48
+ * `persisted: false` means the serializers produced the bytes already on
49
+ * disk and nothing moved — a real outcome, not a failure (a failure throws). */
50
+ commit(document: ToolObject3DDocumentState, label?: string): Promise<WriteAck>;
51
+ }
52
+
53
+ /** Where an Asset Lab document's bytes go — the binding's own resource paths,
54
+ * which is the finest-grained honest answer this lane has. */
55
+ function destinationOf(binding: ToolObject3DDocumentPersistence): string {
56
+ return binding.resources.map((resource) => resource.path).join(' + ');
57
+ }
58
+
59
+ /**
60
+ * Establish the exact serialized bytes represented by a newly mounted native
61
+ * document. Every later commit is checked against that mount-time baseline,
62
+ * so a stale HMR module can never overwrite a newer sidecar on disk.
63
+ */
64
+ export async function openObject3DDocumentPersistence(
65
+ options: OpenObject3DDocumentPersistenceOptions,
66
+ ): Promise<Object3DDocumentPersistenceSession> {
67
+ const { binding, document, history } = options;
68
+ const files = getProjectFileHistory(
69
+ history,
70
+ options.backend ?? getProjectResourceHistoryBackend(),
71
+ 'asset-lab-document',
72
+ );
73
+ const session: ProjectFileMutationSession = await files.openMutationSession(
74
+ await serializeObject3DDocument(binding, document),
75
+ );
76
+ return {
77
+ // THE ONE PIPE, this lane's plug: resolve (a binding with resources is a
78
+ // real destination) → write (serialize + the file-mutation transaction) →
79
+ // record (that transaction IS the history entry, so nothing more).
80
+ commit: (nextDocument, requestedLabel) =>
81
+ runWritePipe({
82
+ resolve: (): WriteResolution => ({
83
+ reaches: 'writer',
84
+ // The document's own file is the anchor: no source literal addresses
85
+ // it, and project code serializes the record the editor edited.
86
+ anchorKind: 'data-record',
87
+ destination: destinationOf(binding),
88
+ write: async () => {
89
+ // Check the mount-time bytes BEFORE entering project code. HMR can
90
+ // invalidate a serializer's module-local state; a newer file must
91
+ // still receive the canonical content-conflict refusal, never that
92
+ // incidental serializer error and never an overwrite.
93
+ await session.assertUnchanged();
94
+ // Serialize before entering history: a failing project serializer
95
+ // writes nothing and cannot advance the open-document checksum
96
+ // baseline.
97
+ const changes = await serializeObject3DDocument(binding, nextDocument);
98
+ const label =
99
+ requestedLabel?.trim() || binding.label?.trim() || 'Edit Asset Lab Document';
100
+ return session.mutate(changes, { label });
101
+ },
102
+ }),
103
+ record: () => undefined,
104
+ }),
105
+ };
106
+ }
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Lightweight registry for live Object3D document sessions.
3
+ *
4
+ * State/control readers only need to find a session that some document has
5
+ * already constructed. Keeping this map beside the implementation made every
6
+ * reader load the implementation's postprocessing, skeleton, outline and
7
+ * diagnostic-rendering graph during a plain Scene boot. The class remains the
8
+ * native session type; this module owns only its live identities.
9
+ */
10
+ import type { Object3DDocumentSession } from './object3d-document-session';
11
+
12
+ const sessions = new Map<string, Object3DDocumentSession>();
13
+ const announcedStages = new Map<string, number>();
14
+ const preparations = new Map<string, () => Promise<void>>();
15
+ let registryVersion = 0;
16
+ const registryListeners = new Set<() => void>();
17
+
18
+ function notifyRegistry(): void {
19
+ registryVersion++;
20
+ for (const listener of registryListeners) listener();
21
+ }
22
+
23
+ export function registerObject3DDocumentSession(session: Object3DDocumentSession): () => void {
24
+ sessions.set(session.documentId, session);
25
+ notifyRegistry();
26
+ return () => {
27
+ if (sessions.get(session.documentId) !== session) return;
28
+ sessions.delete(session.documentId);
29
+ notifyRegistry();
30
+ };
31
+ }
32
+
33
+ export function object3DDocumentSession(documentId: string): Object3DDocumentSession | null {
34
+ return sessions.get(documentId) ?? null;
35
+ }
36
+
37
+ /** Async source-backed documents refresh their graph before a requested view
38
+ * is presented. The callback owns its build and failure semantics. */
39
+ export function registerObject3DDocumentPreparation(
40
+ documentId: string,
41
+ prepare: () => Promise<void>,
42
+ ): () => void {
43
+ preparations.set(documentId, prepare);
44
+ return () => {
45
+ if (preparations.get(documentId) === prepare) preparations.delete(documentId);
46
+ };
47
+ }
48
+
49
+ export async function prepareObject3DDocument(documentId: string): Promise<void> {
50
+ await preparations.get(documentId)?.();
51
+ }
52
+
53
+ /**
54
+ * A DOCUMENT'S STAGE ANNOUNCES ITSELF AS IT RENDERS, before the session it
55
+ * will register exists — the fact an opener's `ready` needs and cannot get
56
+ * from anywhere else.
57
+ *
58
+ * MEASURED 2026-09-19 (phase 1 unit 16): whether a document mounts an Object3D
59
+ * session is a fact of its MOUNT, never of its address. Three `bird`/`humanoid`/
60
+ * `walking-castle` Builder documents open through the `tool` address and mount
61
+ * one (`catalog/project-source/src/contributions/builder-document.tsx:66`)
62
+ * while `data`, `asset-budget` and nine other `workspace.document`
63
+ * contributions at the same address do not; a `source` asset mounts one only
64
+ * when its module is a model builder (`asset-viewers/SourceAssetViewer.tsx:256`)
65
+ * and a `json` asset only when its content is a three.quarks system
66
+ * (`asset-viewers/JsonAssetDocument.tsx:64`). A host that waited by ADDRESS
67
+ * would hang the whole `DOCUMENT_REGISTRATION_TIMEOUT_MS` on every flat
68
+ * document at that address and then refuse a document that was never wrong —
69
+ * which is why the readiness rule the presenter held could not simply be
70
+ * copied kind-side. The announcement is made by the ONE host component every
71
+ * chromed stage goes through, so no lane is recognised by name.
72
+ *
73
+ * Announcing is idempotent and counted: several mounts for one document id
74
+ * (a revision swap keyed on `viewerKey`) overlap, and the last release is the
75
+ * one that clears it.
76
+ */
77
+ export function announceObject3DDocumentStage(documentId: string): () => void {
78
+ announcedStages.set(documentId, (announcedStages.get(documentId) ?? 0) + 1);
79
+ let released = false;
80
+ return () => {
81
+ if (released) return;
82
+ released = true;
83
+ const open = (announcedStages.get(documentId) ?? 0) - 1;
84
+ if (open > 0) announcedStages.set(documentId, open);
85
+ else announcedStages.delete(documentId);
86
+ };
87
+ }
88
+
89
+ /** Whether a stage for this document has begun mounting. The WAIT that reads
90
+ * it is `document-context-registry.ts`'s, deliberately not here: this module
91
+ * sits on `StageHost.tsx`'s own pinned closure, and a poll helper's import
92
+ * edge grew that pin by one (measured). */
93
+ export function object3DDocumentStageAnnounced(documentId: string): boolean {
94
+ return (announcedStages.get(documentId) ?? 0) > 0;
95
+ }
96
+
97
+ /** Every live CHROMED document session — the ones that own a toolbar, an
98
+ * inspector context and a performance source. This is a presentation registry,
99
+ * not the Edit-static one: whether a surface's CONTENT time is held is asked of
100
+ * `coverage/design-time-surfaces.ts`, which every mount publishes into
101
+ * (chromeless preview cards included). */
102
+ export function allObject3DDocumentSessions(): readonly Object3DDocumentSession[] {
103
+ return [...sessions.values()];
104
+ }
105
+
106
+ export function subscribeObject3DDocumentSessions(listener: () => void): () => void {
107
+ registryListeners.add(listener);
108
+ return () => registryListeners.delete(listener);
109
+ }
110
+
111
+ export function object3DDocumentSessionsVersion(): number {
112
+ return registryVersion;
113
+ }
114
+
115
+ export function __resetObject3DDocumentSessionsForTest(): void {
116
+ sessions.clear();
117
+ preparations.clear();
118
+ announcedStages.clear();
119
+ notifyRegistry();
120
+ }