@volter/sdk 0.0.0-stage → 0.5.203

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 (523) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +20 -0
  3. package/README.md +38 -3
  4. package/package.json +510 -4
  5. package/src/account.ts +210 -0
  6. package/src/chrome.ts +88 -0
  7. package/src/client.ts +1646 -0
  8. package/src/commands.ts +66 -0
  9. package/src/contributions.ts +619 -0
  10. package/src/css-numeric-style.ts +97 -0
  11. package/src/document-probe.ts +282 -0
  12. package/src/editor-view.ts +225 -0
  13. package/src/extension.ts +40 -0
  14. package/src/generations.ts +178 -0
  15. package/src/host.ts +1157 -0
  16. package/src/http-transport.browser.ts +14 -0
  17. package/src/http-transport.node.ts +19 -0
  18. package/src/index.ts +131 -0
  19. package/src/kit/CapabilityCoverageSection.tsx +185 -0
  20. package/src/kit/account-client.ts +333 -0
  21. package/src/kit/action-registry.ts +317 -0
  22. package/src/kit/active-product.ts +76 -0
  23. package/src/kit/active-project.ts +155 -0
  24. package/src/kit/adapter-editor-config.ts +25 -0
  25. package/src/kit/adapter-module.ts +7 -0
  26. package/src/kit/adapter-observation.ts +49 -0
  27. package/src/kit/animation/animation-clock.ts +479 -0
  28. package/src/kit/animation/stage-transport.ts +385 -0
  29. package/src/kit/api/assets.ts +365 -0
  30. package/src/kit/api/project-open.ts +355 -0
  31. package/src/kit/api/project-source.ts +180 -0
  32. package/src/kit/api/project-state.ts +110 -0
  33. package/src/kit/api/relay.ts +270 -0
  34. package/src/kit/api/themes.ts +45 -0
  35. package/src/kit/api-asset-library-wire.ts +45 -0
  36. package/src/kit/api-base.ts +10 -0
  37. package/src/kit/api-build.ts +99 -0
  38. package/src/kit/api-git-wire.ts +56 -0
  39. package/src/kit/api-logs.ts +92 -0
  40. package/src/kit/api-project-identity.ts +74 -0
  41. package/src/kit/api-settings.ts +36 -0
  42. package/src/kit/api-worktrees.ts +205 -0
  43. package/src/kit/asset-capabilities.ts +344 -0
  44. package/src/kit/asset-compare-core.ts +171 -0
  45. package/src/kit/asset-editor-context.tsx +101 -0
  46. package/src/kit/asset-events.ts +96 -0
  47. package/src/kit/asset-inspector-actions.ts +87 -0
  48. package/src/kit/asset-selection-viewer-registry.ts +113 -0
  49. package/src/kit/asset-selection.ts +146 -0
  50. package/src/kit/asset-thumbnails.ts +25 -0
  51. package/src/kit/asset-viewers.ts +115 -0
  52. package/src/kit/asset-workflow/asset-import-jobs.ts +106 -0
  53. package/src/kit/asset-workflow/asset-ledger-backend.ts +126 -0
  54. package/src/kit/asset-workflow/asset-ledger.ts +156 -0
  55. package/src/kit/asset-workflow/asset-materialization-report.ts +140 -0
  56. package/src/kit/asset-workflow/asset-pack-manifest.ts +320 -0
  57. package/src/kit/asset-workflow/asset-types.ts +142 -0
  58. package/src/kit/asset-workflow/audio-preview-player.ts +193 -0
  59. package/src/kit/asset-workflow/audio-waveform.ts +22 -0
  60. package/src/kit/asset-workflow/cloud-asset-client.ts +263 -0
  61. package/src/kit/asset-workflow/hosted-asset-materialization.ts +236 -0
  62. package/src/kit/asset-workflow/image-view-scale.ts +31 -0
  63. package/src/kit/asset-workflow/import-contract.ts +124 -0
  64. package/src/kit/asset-workflow/ledger-write-lock.ts +244 -0
  65. package/src/kit/asset-workflow/pixi-spritesheet.ts +197 -0
  66. package/src/kit/asset-workflow/preview-resource-lifetime.ts +44 -0
  67. package/src/kit/asset-workflow/project-asset-commands.ts +20 -0
  68. package/src/kit/asset-workflow/project-content.ts +288 -0
  69. package/src/kit/asset-workflow/project-source-index.ts +545 -0
  70. package/src/kit/asset-workflow/thumbnail-system.ts +256 -0
  71. package/src/kit/authoring/active-adapter.ts +200 -0
  72. package/src/kit/authoring/active-systems.ts +422 -0
  73. package/src/kit/authoring/adapter-key.ts +18 -0
  74. package/src/kit/authoring/authoring-asset-url.ts +27 -0
  75. package/src/kit/authoring/bootstrap-state.ts +49 -0
  76. package/src/kit/authoring/boundary-authoring-adapter.ts +189 -0
  77. package/src/kit/authoring/canvas-scene-guides.ts +84 -0
  78. package/src/kit/authoring/composite-authoring-adapter.ts +2109 -0
  79. package/src/kit/authoring/consumer-actions.ts +531 -0
  80. package/src/kit/authoring/design-time-layers.ts +852 -0
  81. package/src/kit/authoring/design-time-mount-registry.ts +244 -0
  82. package/src/kit/authoring/edit-mode-authoring.ts +637 -0
  83. package/src/kit/authoring/empty-project-authoring.ts +22 -0
  84. package/src/kit/authoring/instance-source-menu.ts +135 -0
  85. package/src/kit/authoring/layered-pick.ts +185 -0
  86. package/src/kit/authoring/mounted-root-subjects.ts +146 -0
  87. package/src/kit/authoring/no-authoring-adapter.ts +59 -0
  88. package/src/kit/authoring/object3d-document-persistence.ts +122 -0
  89. package/src/kit/authoring/panel-authoring.ts +121 -0
  90. package/src/kit/authoring/project-authoring-session.ts +105 -0
  91. package/src/kit/authoring/provenance.ts +99 -0
  92. package/src/kit/authoring/react-canvas-navigation.ts +259 -0
  93. package/src/kit/authoring/react-design-canvas-style.ts +20 -0
  94. package/src/kit/authoring/react-story-board.ts +917 -0
  95. package/src/kit/authoring/selection-scope.ts +195 -0
  96. package/src/kit/authoring/shell-document-ops.ts +169 -0
  97. package/src/kit/authoring/story-board-chrome-fit.ts +107 -0
  98. package/src/kit/authoring/story-board-presentation.ts +111 -0
  99. package/src/kit/authoring/three-root.ts +67 -0
  100. package/src/kit/authoring/viewport-tool-context.ts +73 -0
  101. package/src/kit/authoring/viewport-tool-owner.ts +38 -0
  102. package/src/kit/authoring/world-session-state.ts +101 -0
  103. package/src/kit/authoring-seam-evidence.ts +300 -0
  104. package/src/kit/availability-tick.ts +66 -0
  105. package/src/kit/bitmap-label.ts +120 -0
  106. package/src/kit/boot-routing.ts +392 -0
  107. package/src/kit/breakpoint-state.ts +43 -0
  108. package/src/kit/build-identity.ts +16 -0
  109. package/src/kit/bytes-codec.ts +62 -0
  110. package/src/kit/cancellation-reason.ts +58 -0
  111. package/src/kit/canvas-frames.ts +88 -0
  112. package/src/kit/capture-camera-pose.ts +77 -0
  113. package/src/kit/capture-size.ts +88 -0
  114. package/src/kit/chrome-registry.ts +159 -0
  115. package/src/kit/chrome-slot-registry.ts +91 -0
  116. package/src/kit/collaboration-client.ts +264 -0
  117. package/src/kit/collaboration-presence.ts +41 -0
  118. package/src/kit/command-dispatch.ts +19 -0
  119. package/src/kit/command-listener.ts +2182 -0
  120. package/src/kit/command-registry.ts +71 -0
  121. package/src/kit/component-board-registry.ts +205 -0
  122. package/src/kit/component-states-registry.ts +199 -0
  123. package/src/kit/components/AlignToolbar.tsx +204 -0
  124. package/src/kit/components/ApplicationMenus.tsx +372 -0
  125. package/src/kit/components/AssetEditorShell.tsx +216 -0
  126. package/src/kit/components/AssetInspectorToolSection.tsx +124 -0
  127. package/src/kit/components/BoardRulers.tsx +354 -0
  128. package/src/kit/components/CanvasAddNodeDialogs.tsx +529 -0
  129. package/src/kit/components/CanvasSceneViewport.tsx +1195 -0
  130. package/src/kit/components/ChromeSlot.tsx +20 -0
  131. package/src/kit/components/CodeView.tsx +470 -0
  132. package/src/kit/components/CompactInspectorShell.tsx +39 -0
  133. package/src/kit/components/ConsolePanel.tsx +273 -0
  134. package/src/kit/components/GameplaySessionTimeline.tsx +295 -0
  135. package/src/kit/components/InspectionProjection.tsx +932 -0
  136. package/src/kit/components/Inspector.tsx +270 -0
  137. package/src/kit/components/InspectorCanvasPreview.tsx +35 -0
  138. package/src/kit/components/InspectorFieldsSection.tsx +290 -0
  139. package/src/kit/components/InspectorStoriesSection.tsx +92 -0
  140. package/src/kit/components/InspectorToolSection.tsx +96 -0
  141. package/src/kit/components/InspectorTransformSection.tsx +245 -0
  142. package/src/kit/components/LightExplorerPanel.tsx +433 -0
  143. package/src/kit/components/MediaProperties.tsx +145 -0
  144. package/src/kit/components/ProjectHeader.tsx +328 -0
  145. package/src/kit/components/ReactCanvasControls.tsx +358 -0
  146. package/src/kit/components/RootSelectionOverlay.tsx +3688 -0
  147. package/src/kit/components/RootTextEditor.tsx +79 -0
  148. package/src/kit/components/SaveStatus.tsx +70 -0
  149. package/src/kit/components/SurfaceCrashBoundary.tsx +105 -0
  150. package/src/kit/components/SurfaceStateOverlay.tsx +24 -0
  151. package/src/kit/components/ToolContributionSurfaces.tsx +49 -0
  152. package/src/kit/components/ToolHost.tsx +380 -0
  153. package/src/kit/components/Toolbar.tsx +811 -0
  154. package/src/kit/components/TransientHint.tsx +44 -0
  155. package/src/kit/components/VersionControlSection.tsx +470 -0
  156. package/src/kit/components/ViewportOverlaysMenu.tsx +177 -0
  157. package/src/kit/components/VolterLogo.tsx +18 -0
  158. package/src/kit/components/WorktreeSwitcher.tsx +712 -0
  159. package/src/kit/components/account-documents.tsx +1162 -0
  160. package/src/kit/components/asset-documents.tsx +794 -0
  161. package/src/kit/components/asset-editor-persistence.ts +216 -0
  162. package/src/kit/components/asset-selection-section.tsx +545 -0
  163. package/src/kit/components/asset-thumbnails.tsx +307 -0
  164. package/src/kit/components/asset-viewers/AudioViewer.tsx +201 -0
  165. package/src/kit/components/asset-viewers/GenericJsonViewer.tsx +102 -0
  166. package/src/kit/components/asset-viewers/ImageViewer.tsx +300 -0
  167. package/src/kit/components/asset-viewers/JsonAssetDocument.tsx +98 -0
  168. package/src/kit/components/asset-viewers/OnlineAssetDetail.tsx +426 -0
  169. package/src/kit/components/asset-viewers/SourceAssetViewer.tsx +356 -0
  170. package/src/kit/components/asset-viewers/SpritesheetSpriteView.tsx +102 -0
  171. package/src/kit/components/asset-viewers/VideoViewer.tsx +101 -0
  172. package/src/kit/components/asset-viewers/shader-source.ts +144 -0
  173. package/src/kit/components/board-guides.ts +150 -0
  174. package/src/kit/components/canvas-scene-hotkeys.ts +37 -0
  175. package/src/kit/components/canvas-temporary-pivot.ts +34 -0
  176. package/src/kit/components/core-utilities.tsx +94 -0
  177. package/src/kit/components/inspector-preview-section.tsx +223 -0
  178. package/src/kit/components/inspector-revert-label.ts +20 -0
  179. package/src/kit/components/inspector-selection.ts +42 -0
  180. package/src/kit/components/inspector-stories-gating.ts +171 -0
  181. package/src/kit/components/inspector-transform-subject.ts +11 -0
  182. package/src/kit/components/inspector-transform.ts +88 -0
  183. package/src/kit/components/kind-documents.tsx +544 -0
  184. package/src/kit/components/primitives/DraftColorInput.tsx +74 -0
  185. package/src/kit/components/project-tool-documents.tsx +402 -0
  186. package/src/kit/components/scene-documents.tsx +221 -0
  187. package/src/kit/components/status-contributions.tsx +407 -0
  188. package/src/kit/components/tool-documents.tsx +302 -0
  189. package/src/kit/components/tool-schema-form.tsx +262 -0
  190. package/src/kit/components/use-after-paint.ts +41 -0
  191. package/src/kit/components/use-project-image-assets.ts +86 -0
  192. package/src/kit/components/workspace-history.ts +32 -0
  193. package/src/kit/components/world-documents.tsx +570 -0
  194. package/src/kit/components/world-overlay-gestures.ts +1939 -0
  195. package/src/kit/composite-screenshot.ts +2238 -0
  196. package/src/kit/content-entry-source-registry.ts +184 -0
  197. package/src/kit/contribution-surfaces.ts +48 -0
  198. package/src/kit/coverage/canvas-reveal.ts +192 -0
  199. package/src/kit/coverage/design-time-surfaces.ts +101 -0
  200. package/src/kit/coverage/ontology-invariants.ts +466 -0
  201. package/src/kit/coverage/session-vitals.ts +503 -0
  202. package/src/kit/crash-null-boundary.ts +36 -0
  203. package/src/kit/creation-site-edit.ts +1491 -0
  204. package/src/kit/creation-site-registry.ts +160 -0
  205. package/src/kit/delegate-harness-registry.ts +134 -0
  206. package/src/kit/document-areas.ts +70 -0
  207. package/src/kit/document-context-registry.ts +193 -0
  208. package/src/kit/document-open-registry.ts +200 -0
  209. package/src/kit/document-play-extension.ts +221 -0
  210. package/src/kit/document-preview-source.ts +20 -0
  211. package/src/kit/document-renderer-session.ts +138 -0
  212. package/src/kit/document-stage-sessions.ts +26 -0
  213. package/src/kit/document-viewports.ts +120 -0
  214. package/src/kit/editor-api.ts +46 -0
  215. package/src/kit/editor-chrome-capture.ts +136 -0
  216. package/src/kit/editor-commands.ts +176 -0
  217. package/src/kit/editor-console.ts +580 -0
  218. package/src/kit/editor-current-view.ts +56 -0
  219. package/src/kit/editor-document-probe.ts +1166 -0
  220. package/src/kit/editor-git-client.ts +115 -0
  221. package/src/kit/editor-hotkeys.ts +728 -0
  222. package/src/kit/editor-lease-view.ts +39 -0
  223. package/src/kit/editor-lease.ts +415 -0
  224. package/src/kit/editor-mode.ts +19 -0
  225. package/src/kit/editor-notifications.ts +140 -0
  226. package/src/kit/editor-presence.ts +563 -0
  227. package/src/kit/editor-presentation-activity.ts +58 -0
  228. package/src/kit/editor-presentation-notice.ts +42 -0
  229. package/src/kit/editor-runtime.tsx +147 -0
  230. package/src/kit/editor-server-response.ts +86 -0
  231. package/src/kit/editor-session-attribution.ts +85 -0
  232. package/src/kit/editor-session-mode.ts +54 -0
  233. package/src/kit/editor-state-facets.ts +74 -0
  234. package/src/kit/editor-view-presentation.ts +777 -0
  235. package/src/kit/environment-images.ts +58 -0
  236. package/src/kit/eyedropper-session.ts +60 -0
  237. package/src/kit/files/file-provider.ts +62 -0
  238. package/src/kit/files/project-files.ts +270 -0
  239. package/src/kit/finders/index.ts +137 -0
  240. package/src/kit/finders/scenes-from-entrypoint-selection.ts +387 -0
  241. package/src/kit/frame/frame-parts.ts +30 -0
  242. package/src/kit/framed-document-capture.ts +34 -0
  243. package/src/kit/game-globals-prelude.ts +143 -0
  244. package/src/kit/game-surface-defaults.ts +33 -0
  245. package/src/kit/gameplay-dom-recording.ts +318 -0
  246. package/src/kit/gameplay-export-state.ts +14 -0
  247. package/src/kit/gameplay-replay.ts +417 -0
  248. package/src/kit/gameplay-session-time.ts +9 -0
  249. package/src/kit/gameplay-sessions.ts +204 -0
  250. package/src/kit/hierarchy-component-marks.ts +298 -0
  251. package/src/kit/hierarchy-internals.ts +197 -0
  252. package/src/kit/hierarchy-kind-icon.ts +217 -0
  253. package/src/kit/hierarchy-menu-registry.ts +67 -0
  254. package/src/kit/hierarchy-node-rows.ts +307 -0
  255. package/src/kit/hierarchy-panel-view.ts +280 -0
  256. package/src/kit/hierarchy-projection.ts +76 -0
  257. package/src/kit/hierarchy-row-media.ts +45 -0
  258. package/src/kit/hierarchy-row-model.ts +308 -0
  259. package/src/kit/hierarchy-rows.ts +11 -0
  260. package/src/kit/hierarchy-walk.ts +86 -0
  261. package/src/kit/history/editor-session.ts +25 -0
  262. package/src/kit/history/history-commands.ts +147 -0
  263. package/src/kit/history/history-delegate.ts +187 -0
  264. package/src/kit/history/history-limit-notices.ts +43 -0
  265. package/src/kit/history/history-service.ts +1189 -0
  266. package/src/kit/history/persistence-coordinator.ts +35 -0
  267. package/src/kit/history/project-file-history.ts +386 -0
  268. package/src/kit/history/project-root-history-backends.ts +139 -0
  269. package/src/kit/history/resource-registry.ts +209 -0
  270. package/src/kit/history/snapshot-store.ts +103 -0
  271. package/src/kit/history/source-history-backend.ts +546 -0
  272. package/src/kit/history-types.ts +124 -0
  273. package/src/kit/hmr-registration-group.ts +67 -0
  274. package/src/kit/hmr-stable-react-context.ts +23 -0
  275. package/src/kit/hotkeys.ts +190 -0
  276. package/src/kit/inference-diagnostics.ts +69 -0
  277. package/src/kit/initial-project.ts +80 -0
  278. package/src/kit/inspection/active-subject.ts +571 -0
  279. package/src/kit/inspection/active-surface.ts +142 -0
  280. package/src/kit/inspection/compose-subject.ts +1055 -0
  281. package/src/kit/inspection/compose.ts +7 -0
  282. package/src/kit/inspection/display.ts +171 -0
  283. package/src/kit/inspection/document-subject.ts +109 -0
  284. package/src/kit/inspection/game-subject.ts +85 -0
  285. package/src/kit/inspection/null-subject.ts +119 -0
  286. package/src/kit/inspection/serialize.ts +357 -0
  287. package/src/kit/inspection/use-active-inspection.ts +180 -0
  288. package/src/kit/inspection-model.ts +542 -0
  289. package/src/kit/inspection-node-media.ts +58 -0
  290. package/src/kit/inspector-presentation.ts +203 -0
  291. package/src/kit/inspector-property-grouping.ts +64 -0
  292. package/src/kit/inspector-section-registry.ts +221 -0
  293. package/src/kit/instance-source-actions.ts +163 -0
  294. package/src/kit/js-heap.ts +71 -0
  295. package/src/kit/key-actions.ts +91 -0
  296. package/src/kit/keymap-presets.ts +428 -0
  297. package/src/kit/layout-policy.ts +31 -0
  298. package/src/kit/light-explorer-model.ts +134 -0
  299. package/src/kit/live-canvas-frame.ts +55 -0
  300. package/src/kit/live-document.ts +296 -0
  301. package/src/kit/live-gesture-lock.ts +50 -0
  302. package/src/kit/live-seam-evidence.ts +11 -0
  303. package/src/kit/live-session-registry.ts +220 -0
  304. package/src/kit/live-transition.ts +391 -0
  305. package/src/kit/manifest-project.ts +107 -0
  306. package/src/kit/module-fetch-diagnosis.ts +192 -0
  307. package/src/kit/mount-failure-report.ts +154 -0
  308. package/src/kit/native-selection-style.ts +497 -0
  309. package/src/kit/object3d-document-write-policy.ts +137 -0
  310. package/src/kit/packaged-runtime.ts +108 -0
  311. package/src/kit/palettes/maya.palette.json +57 -0
  312. package/src/kit/palettes/substance.palette.json +57 -0
  313. package/src/kit/performance-profiler.ts +367 -0
  314. package/src/kit/performance-sources.ts +69 -0
  315. package/src/kit/photograph-notice.ts +141 -0
  316. package/src/kit/play-boot-phase.ts +166 -0
  317. package/src/kit/play-camera-flight.ts +35 -0
  318. package/src/kit/png-encode.worker.ts +26 -0
  319. package/src/kit/presentation-surface.ts +248 -0
  320. package/src/kit/product-command.ts +90 -0
  321. package/src/kit/project-adapter.ts +1140 -0
  322. package/src/kit/project-asset-refresh.ts +23 -0
  323. package/src/kit/project-asset-roots.ts +68 -0
  324. package/src/kit/project-local-state.ts +151 -0
  325. package/src/kit/project-manager.ts +243 -0
  326. package/src/kit/project-module-changes.ts +201 -0
  327. package/src/kit/project-module-split.ts +270 -0
  328. package/src/kit/project-play-layers.ts +25 -0
  329. package/src/kit/project-provenance.ts +115 -0
  330. package/src/kit/project-ready.ts +42 -0
  331. package/src/kit/project-shape.ts +68 -0
  332. package/src/kit/project-tools.ts +107 -0
  333. package/src/kit/projection-types.ts +44 -0
  334. package/src/kit/readiness.ts +113 -0
  335. package/src/kit/renderer-resource-counts.ts +27 -0
  336. package/src/kit/reported-play-state.ts +90 -0
  337. package/src/kit/resolve-contributed-command.ts +14 -0
  338. package/src/kit/resolve-relative-specifier.ts +33 -0
  339. package/src/kit/retained-document-states.ts +91 -0
  340. package/src/kit/scene-document-plan.ts +320 -0
  341. package/src/kit/scene-live-open.ts +210 -0
  342. package/src/kit/scoped-game-css.ts +152 -0
  343. package/src/kit/served-url.ts +5 -0
  344. package/src/kit/session-close.ts +17 -0
  345. package/src/kit/session-tombstone.ts +127 -0
  346. package/src/kit/settings/settings-provider.ts +82 -0
  347. package/src/kit/settings-store.ts +348 -0
  348. package/src/kit/shell-document-state.ts +27 -0
  349. package/src/kit/shell-store-door.ts +45 -0
  350. package/src/kit/shell-store.ts +722 -0
  351. package/src/kit/source-conflict.ts +122 -0
  352. package/src/kit/stage-context.ts +377 -0
  353. package/src/kit/stage-invalidation.ts +25 -0
  354. package/src/kit/stage-store-registry.ts +69 -0
  355. package/src/kit/startup-failure.ts +80 -0
  356. package/src/kit/state-report-deferral.ts +73 -0
  357. package/src/kit/storage/host-files-storage.ts +97 -0
  358. package/src/kit/storage/http-storage.ts +174 -0
  359. package/src/kit/storage/index.ts +75 -0
  360. package/src/kit/storage/mem-storage.ts +158 -0
  361. package/src/kit/storage/path-lock.ts +44 -0
  362. package/src/kit/storage/paths.ts +26 -0
  363. package/src/kit/storage-types.ts +127 -0
  364. package/src/kit/stories/StoryPreviewMount.tsx +306 -0
  365. package/src/kit/stories/compose-project-stories.ts +255 -0
  366. package/src/kit/stories/prefabs-finder.ts +54 -0
  367. package/src/kit/stories/prefabs-from-stories.ts +182 -0
  368. package/src/kit/stories/project-story-regions.ts +24 -0
  369. package/src/kit/stories/story-capture.ts +579 -0
  370. package/src/kit/stories/story-declared-medium.ts +126 -0
  371. package/src/kit/stories/story-discovery.ts +176 -0
  372. package/src/kit/stories/story-dom-runtime.ts +78 -0
  373. package/src/kit/stories/story-grouping.ts +111 -0
  374. package/src/kit/stories/story-mount-turn.ts +27 -0
  375. package/src/kit/stories/story-presentation.ts +215 -0
  376. package/src/kit/stories/story-preview-component.ts +7 -0
  377. package/src/kit/stories/story-registry.ts +530 -0
  378. package/src/kit/stories-scope.ts +35 -0
  379. package/src/kit/story-document-openers.ts +36 -0
  380. package/src/kit/story-thumbnails.ts +47 -0
  381. package/src/kit/surface-keyboard.ts +101 -0
  382. package/src/kit/surface-state.ts +135 -0
  383. package/src/kit/system-seam-evidence.ts +72 -0
  384. package/src/kit/tab-census.ts +202 -0
  385. package/src/kit/tab-lifecycle-client.ts +227 -0
  386. package/src/kit/theme-library.ts +897 -0
  387. package/src/kit/theme-preference.ts +429 -0
  388. package/src/kit/three-viewport-presentation.ts +23 -0
  389. package/src/kit/tool-contribution-play.ts +74 -0
  390. package/src/kit/tool-loader.ts +1918 -0
  391. package/src/kit/transform-mode-request.ts +66 -0
  392. package/src/kit/transient-hint.ts +78 -0
  393. package/src/kit/transport-strip.tsx +174 -0
  394. package/src/kit/ui-source/adapter-region-includes.ts +238 -0
  395. package/src/kit/ui-source/file-region-resolver.ts +302 -0
  396. package/src/kit/ui-source/inspect.ts +775 -0
  397. package/src/kit/ui-source/source-write-backend.ts +605 -0
  398. package/src/kit/ui-source/tier-source-write-backend.ts +279 -0
  399. package/src/kit/user-local-state.ts +105 -0
  400. package/src/kit/viewport-activation-timings.ts +840 -0
  401. package/src/kit/viewport-editor-controls.ts +22 -0
  402. package/src/kit/viewport-presentation.ts +668 -0
  403. package/src/kit/viewport-surface-status.tsx +55 -0
  404. package/src/kit/wait-until.ts +37 -0
  405. package/src/kit/worker-call-metrics.ts +166 -0
  406. package/src/kit/workspace-areas.ts +191 -0
  407. package/src/kit/workspace-aux-commands.ts +11 -0
  408. package/src/kit/workspace-available-documents.ts +142 -0
  409. package/src/kit/workspace-core-utilities.ts +31 -0
  410. package/src/kit/workspace-document-ids.ts +59 -0
  411. package/src/kit/workspace-document-registry.ts +624 -0
  412. package/src/kit/workspace-document-restore.ts +146 -0
  413. package/src/kit/workspace-host-commands.ts +141 -0
  414. package/src/kit/workspace-persistence-gate.ts +40 -0
  415. package/src/kit/workspace-play-utilities.ts +44 -0
  416. package/src/kit/workspace-presets.ts +446 -0
  417. package/src/kit/workspace-regions.ts +276 -0
  418. package/src/kit/workspace-static-panels.ts +73 -0
  419. package/src/kit/workspace-status-registry.ts +121 -0
  420. package/src/kit/workspace-storage.ts +35 -0
  421. package/src/kit/workspace-style.ts +226 -0
  422. package/src/kit/workspace-utility-commands.ts +74 -0
  423. package/src/kit/workspace-utility-registry.ts +263 -0
  424. package/src/kit/world-adoption-event.ts +23 -0
  425. package/src/kit/world-adoption.ts +115 -0
  426. package/src/kit/world-canvas-viewport-state.ts +35 -0
  427. package/src/kit/world-document-routing.ts +104 -0
  428. package/src/kit/world-pan-state.ts +198 -0
  429. package/src/kit/write-pipe.ts +173 -0
  430. package/src/layout-arrangements.ts +5 -0
  431. package/src/layouts.tsx +108 -0
  432. package/src/looks.ts +16 -0
  433. package/src/project/output-roots.ts +73 -0
  434. package/src/project/tab-census.ts +155 -0
  435. package/src/project-tool-catalog.ts +104 -0
  436. package/src/selection.tsx +107 -0
  437. package/src/services.ts +18 -0
  438. package/src/session/build-report.ts +22 -0
  439. package/src/session/collaboration-types.ts +262 -0
  440. package/src/session/command-table.ts +327 -0
  441. package/src/session/discovery.ts +100 -0
  442. package/src/session/editor-brand.ts +48 -0
  443. package/src/session/editor-compatibility.ts +317 -0
  444. package/src/session/editor-control-lifecycle.ts +68 -0
  445. package/src/session/editor-control-protocol.ts +5 -0
  446. package/src/session/entrypoint-selection-readers.ts +66 -0
  447. package/src/session/entrypoint-selection-source.ts +120 -0
  448. package/src/session/game-css-scope.ts +30 -0
  449. package/src/session/hosted-attachment.ts +225 -0
  450. package/src/session/limited-view.ts +82 -0
  451. package/src/session/product-create.ts +24 -0
  452. package/src/session/product-locator.ts +478 -0
  453. package/src/session/project-module-url.ts +242 -0
  454. package/src/session/project-serving.ts +164 -0
  455. package/src/session/project-upgrade.ts +403 -0
  456. package/src/session/registry-format.ts +210 -0
  457. package/src/session/relative-path-guard.ts +56 -0
  458. package/src/session/scoped-game-css.ts +461 -0
  459. package/src/session/source-glob.ts +15 -0
  460. package/src/session/tool-contribution-convention.ts +123 -0
  461. package/src/session/workbench-locator.ts +712 -0
  462. package/src/session.ts +41 -0
  463. package/src/share.ts +160 -0
  464. package/src/source-analysis.ts +28 -0
  465. package/src/source-authoring.ts +439 -0
  466. package/src/tools/errors.ts +91 -0
  467. package/src/tools/provider-execution.ts +70 -0
  468. package/src/tools/registry.ts +341 -0
  469. package/src/tools/types.ts +159 -0
  470. package/src/transport.ts +100 -0
  471. package/src/types.ts +1693 -0
  472. package/src/views.ts +164 -0
  473. package/src/widgets/design-system.ts +93 -0
  474. package/src/widgets/editor-appearance.ts +151 -0
  475. package/src/widgets/editor-material.ts +83 -0
  476. package/src/widgets/icon-set-registry.ts +105 -0
  477. package/src/widgets/index.ts +71 -0
  478. package/src/widgets/inspector-widgets/AlignmentGrid.tsx +182 -0
  479. package/src/widgets/inspector-widgets/AssetSlotPicker.tsx +123 -0
  480. package/src/widgets/inspector-widgets/BorderEditor.tsx +309 -0
  481. package/src/widgets/inspector-widgets/ColorPicker.tsx +549 -0
  482. package/src/widgets/inspector-widgets/CurveEditor.tsx +359 -0
  483. package/src/widgets/inspector-widgets/FilterEditor.tsx +108 -0
  484. package/src/widgets/inspector-widgets/FontPicker.tsx +191 -0
  485. package/src/widgets/inspector-widgets/GradientEditor.tsx +623 -0
  486. package/src/widgets/inspector-widgets/ScrubbableInput.tsx +180 -0
  487. package/src/widgets/inspector-widgets/ShadowEditor.tsx +319 -0
  488. package/src/widgets/inspector-widgets/color-utils.ts +201 -0
  489. package/src/widgets/inspector-widgets/curve-utils.ts +212 -0
  490. package/src/widgets/inspector-widgets/index.ts +25 -0
  491. package/src/widgets/inspector-widgets/shared.tsx +140 -0
  492. package/src/widgets/interactive-edit-scope.ts +33 -0
  493. package/src/widgets/patterns/Dialog.tsx +140 -0
  494. package/src/widgets/patterns/Fields.tsx +44 -0
  495. package/src/widgets/patterns/List.tsx +25 -0
  496. package/src/widgets/patterns/StateSurface.tsx +40 -0
  497. package/src/widgets/patterns/Surfaces.tsx +122 -0
  498. package/src/widgets/patterns/Tabs.tsx +80 -0
  499. package/src/widgets/patterns/Toolbar.tsx +72 -0
  500. package/src/widgets/patterns/Tree.tsx +72 -0
  501. package/src/widgets/primitives/AnchoredMenu.tsx +260 -0
  502. package/src/widgets/primitives/Button.tsx +62 -0
  503. package/src/widgets/primitives/ColorInput.tsx +78 -0
  504. package/src/widgets/primitives/DraftTextInput.tsx +63 -0
  505. package/src/widgets/primitives/EditorIcon.tsx +157 -0
  506. package/src/widgets/primitives/FormControls.tsx +88 -0
  507. package/src/widgets/primitives/HoverPreview.tsx +96 -0
  508. package/src/widgets/primitives/JsonInput.tsx +113 -0
  509. package/src/widgets/primitives/Layout.tsx +100 -0
  510. package/src/widgets/primitives/Menu.tsx +161 -0
  511. package/src/widgets/primitives/NumberInput.tsx +169 -0
  512. package/src/widgets/primitives/Panel.tsx +80 -0
  513. package/src/widgets/primitives/SectionHeader.tsx +77 -0
  514. package/src/widgets/primitives/Text.tsx +54 -0
  515. package/src/widgets/primitives/ThemeRootPortal.tsx +52 -0
  516. package/src/widgets/primitives/Tooltip.tsx +204 -0
  517. package/src/widgets/primitives/Vec3Input.tsx +70 -0
  518. package/src/widgets/primitives/banner-tones.ts +32 -0
  519. package/src/widgets/primitives/clamp-to-viewport.ts +44 -0
  520. package/src/widgets/primitives/editor-icons.ts +254 -0
  521. package/src/widgets/primitives/panel-header-styles.ts +42 -0
  522. package/src/widgets/theme.ts +2841 -0
  523. package/src/widgets/z-index.ts +25 -0
@@ -0,0 +1,242 @@
1
+ /**
2
+ * The ONE owner of every dev-server import URL the editor builds for a
3
+ * PROJECT-OWNED module (a root's `entry`, a `{ module }` adapter's module).
4
+ *
5
+ * WHY THIS MODULE EXISTS: PD-3, a SILENT CROSS-ROOT MODULE SPLIT
6
+ * -------------------------------------------------------------
7
+ * A Volter project declares several adapter roots, and two of them routinely
8
+ * import the SAME project module (the worked reference is a three root
9
+ * writing `arena-state.ts`'s module-level `let snapshot` each frame while a
10
+ * `dom` root's HUD reads it). Browser ES-module identity is per-URL, so the
11
+ * whole model only works while every root resolves that shared module to the
12
+ * BYTE-IDENTICAL url. Measured mechanism (vite 6.4.1, reproduced with a real
13
+ * dev server — see the PR body's probe):
14
+ *
15
+ * 1. The three root's entry was imported with a monotonic cache-buster
16
+ * (`?volter-play=<n>`) so a remount re-runs edited code. Every mount is
17
+ * therefore a url the browser has never fetched → a fresh transform.
18
+ * 2. The `dom` root's entry was imported at a BARE url with no buster at
19
+ * all. A remount re-issues the identical string, so `import()` resolves
20
+ * straight out of the browser's module registry — the dom root keeps the
21
+ * module graph of whatever mount FIRST evaluated it.
22
+ * 3. Editing a shared module HMR-invalidates it, and vite's import-analysis
23
+ * then appends `?t=<ts>` to it for every importer it re-transforms. So
24
+ * after the very first edit, the freshly-transformed three entry imports
25
+ * `…/arena-state.ts?t=T` while the cached dom entry still holds
26
+ * `…/arena-state.ts` — two urls, two evaluated instances, two copies of
27
+ * `let snapshot`. Nothing errors: the HUD reads its own copy's defaults
28
+ * forever while `game.state()` reports the three root's live one.
29
+ *
30
+ * THE GUARANTEE this module exists to make: every root entry of ONE mount is
31
+ * imported with the SAME mount-scoped buster, so all roots are transformed
32
+ * together and vite hands every one of them the same current `?t=` for every
33
+ * shared dep. `beginProjectMountEpoch()` is called once per composition
34
+ * resolve (`binding-resolver.ts`'s `resolveAllRootAdapters`); every entry url
35
+ * built for that mount reads the same epoch.
36
+ *
37
+ * Do not hand-build a `/@fs/…` url for a project entry anywhere else —
38
+ * `packages/editor/test/project-module-url-single-owner.test.ts` is the
39
+ * tripwire. The runtime backstop for whatever this misses is
40
+ * `project-module-split.ts`, which reports a split LOUDLY instead of letting
41
+ * the next one be silent again.
42
+ */
43
+
44
+ /**
45
+ * Build a `/@fs/<absolute path>` dev-server import URL WITHOUT a doubled
46
+ * leading slash (T6.2 slice 3 finding — see the "Report back" of that
47
+ * slice's dispatch). `projectRoot` is always an absolute path (it starts
48
+ * with `/`), so the naive `` `/@fs/${projectRoot}/...` `` template produces
49
+ * `/@fs//abs/olute/path/...` — cosmetically harmless on its own (Vite's
50
+ * `/@fs/` middleware tolerates it), UNTIL the SAME file is also reached via
51
+ * a DIFFERENT route: a react world's entry module's own STATIC relative
52
+ * import is rewritten by Vite's normal resolver into a SINGLE-slash,
53
+ * symlink-canonicalized `/@fs/` URL — a textually different string than
54
+ * this file's hand-built double-slash one. Browser ES module identity is
55
+ * per-URL, so the two builds of `/@fs/` string for the SAME file produced
56
+ * TWO SEPARATE module instances, each with its own module-level state — this
57
+ * is what `resolveDefaultReactAdapter`'s AC e2e (T6.2 slice 3) caught. The
58
+ * server-side half of this fix is `canonical-path.ts` (canonicalizes
59
+ * `projectRoot` itself so it agrees with Vite's own symlink-resolved form);
60
+ * this half removes the remaining single/double-slash divergence so the
61
+ * two strings are BYTE-IDENTICAL once `projectRoot` is canonical.
62
+ *
63
+ * Lives in a module of its own rather than beside the root resolver so every
64
+ * lane that needs a project import url — the realm's `/@fs` loader, the
65
+ * `{ module }` route, the ingest descriptors — reaches ONE owner without an
66
+ * import cycle. Before that, the three/pixi entry route hand-built a
67
+ * doubled-slash form of its own, which is precisely how one shared module came
68
+ * to be served twice under two urls.
69
+ */
70
+ export function fsImportPath(projectRoot: string, relativePath: string): string {
71
+ const root = projectRoot.endsWith('/') ? projectRoot.slice(0, -1) : projectRoot;
72
+ const rel = relativePath.startsWith('/') ? relativePath.slice(1) : relativePath;
73
+ // Windows canonical roots ('C:/…') carry no leading slash of their own —
74
+ // without inserting one the URL degenerates to '/@fsC:/…', which Vite
75
+ // serves as a 404. POSIX roots keep the concat form (root already starts
76
+ // with '/'), preserving the byte-identical contract described above.
77
+ return root.startsWith('/') ? `/@fs${root}/${rel}` : `/@fs/${root}/${rel}`;
78
+ }
79
+
80
+ /** Reuse Vite's exact update URL to verify evaluation without a second module
81
+ * instance. Vite emits afterUpdate even when importing the update failed.
82
+ */
83
+ export function viteUpdateImportPath(
84
+ update: {
85
+ acceptedPath: string;
86
+ timestamp: number;
87
+ explicitImportRequired?: boolean;
88
+ },
89
+ base = '/',
90
+ ): string {
91
+ const [file, query] = update.acceptedPath.split('?');
92
+ return (
93
+ base +
94
+ file!.slice(1) +
95
+ `?${update.explicitImportRequired ? 'import&' : ''}t=${update.timestamp}${query ? `&${query}` : ''}`
96
+ );
97
+ }
98
+
99
+ /** The query key every project ENTRY url carries. One name for every root's
100
+ * entry (it replaced the per-caller `?volter-play=` / `?volter-reload=` names,
101
+ * whose divergence was never meaningful and whose ABSENCE on the react route
102
+ * was PD-3 itself). */
103
+ export const PROJECT_MOUNT_QUERY = 'volter-mount';
104
+
105
+ /**
106
+ * The INGEST remount buster — deliberately NOT {@link PROJECT_MOUNT_QUERY}.
107
+ *
108
+ * `volter-mount` is the whole mount-instance machinery: the server rewrites the
109
+ * module's relative specifiers to carry the same stamp (a per-mount subgraph)
110
+ * and the gated-globals prelude keys the GAME REALM by its value. An ingest
111
+ * remount wants exactly one of those effects — a fresh evaluation of the
112
+ * entry, so its top-level boot re-runs — and none of the others: the ingest
113
+ * lane's readers (the contract shim's `window.volterGame`, the live plane, the
114
+ * evidence surface) all read the DEFAULT realm. Busting the ingest entry with
115
+ * `volter-mount` moved the shim's assignment into a per-epoch realm nobody
116
+ * reads: the game played while the editor's `status` command said "idle — commands/providers
117
+ * enumerate while playing" and the doctor read "declares no game-state
118
+ * providers" — measured on racing-game, 2026-08-22. A key the server does not
119
+ * interpret busts the URL and changes nothing else.
120
+ */
121
+ export const INGEST_REMOUNT_QUERY = 'volter-ingest-remount';
122
+
123
+ /**
124
+ * Optional play remount: serve this entry with its swap-slot const rewritten
125
+ * to `key`. Only the targeted region's entry carries these — siblings keep
126
+ * the shared `?volter-mount=` so PD-3 still holds. Kept in sync with the
127
+ * server plugin's literals by `project-module-instance.test.ts`.
128
+ */
129
+ export const PROJECT_SELECTION_QUERY = 'volter-selection';
130
+ export const PROJECT_SCENE_QUERY = 'volter-scene';
131
+
132
+ /** Isolation imports a screen CLASS. The matching server key is
133
+ * `ISOLATE_QUERY_KEY` — tripwired in `project-module-instance.test.ts`. */
134
+ export const PROJECT_ISOLATE_QUERY = 'volter-isolate';
135
+
136
+ /** Host-owned mount parameter: remount the entrypoint at a declared table key. */
137
+ export interface EntrypointSelectionOverride {
138
+ readonly selection: string;
139
+ readonly key: string;
140
+ }
141
+
142
+ let lastMountEpoch = 0;
143
+
144
+ /**
145
+ * A mount generation. Opaque on purpose: callers thread it, never construct or
146
+ * arithmetic it.
147
+ *
148
+ * It is also the INSTANCE IDENTITY for multi-instance authoring — two mounts
149
+ * at different epochs import every project module at different urls, and
150
+ * browser module identity is per-url, so their module graphs are genuinely
151
+ * separate (separate `let`s, separate class identities). See
152
+ * ARCHITECTURE-CORE §Observability "N INSTANCES of one project". That is the
153
+ * PD-3 guarantee read the other way round: same epoch ⇒ shared modules,
154
+ * different epoch ⇒ nothing shared.
155
+ */
156
+ export type ProjectMountEpoch = number;
157
+
158
+ /**
159
+ * Open a new mount generation. Called ONCE per composition resolve, before any
160
+ * root's entry is imported, so every root of that mount shares one buster (the
161
+ * guarantee in this module's header). Monotonic, so a remount always
162
+ * re-transforms every entry and therefore re-runs edited code.
163
+ *
164
+ * The returned epoch is THREADED to every url built for this mount. It is
165
+ * deliberately not readable from ambient state: a module-level "current epoch"
166
+ * makes isolation SEQUENTIAL — two concurrent resolves interleave their
167
+ * `begin` calls and each then builds urls with the other's generation, so the
168
+ * mounts silently share module instances. Passing the value is what makes N
169
+ * concurrent instances expressible at all.
170
+ */
171
+ export function beginProjectMountEpoch(): ProjectMountEpoch {
172
+ lastMountEpoch += 1;
173
+ return lastMountEpoch;
174
+ }
175
+
176
+ /**
177
+ * The dev-server import url for one root's `entry` (or a `{ module }`
178
+ * adapter's module) — `fsImportPath` plus the mount's own epoch. Two roots
179
+ * resolved in the SAME mount pass the same epoch and therefore get the same
180
+ * query, which is the whole point.
181
+ */
182
+ /**
183
+ * Import a scene CLASS as an Edit piece. The isolate query keys a module
184
+ * graph whose vendor `init();` is silenced — Play still boots the unstamped
185
+ * entry. Cache-busted per mount, same always-fresh discipline as design-time
186
+ * CSF (`stories/story-discovery.ts`).
187
+ */
188
+ export function isolationImportUrl(projectRoot: string, relativePath: string): string {
189
+ return `${fsImportPath(projectRoot, relativePath)}?${PROJECT_ISOLATE_QUERY}=1&t=${Date.now()}`;
190
+ }
191
+
192
+ /**
193
+ * The LIVE MODULE document's import url — a project `.ts`/`.tsx` module opened
194
+ * as an Asset Lab document that re-executes on every save
195
+ * (`components/asset-viewers/LiveModuleDocument.tsx`).
196
+ *
197
+ * Deliberately NOT {@link PROJECT_MOUNT_QUERY}, for the reason
198
+ * {@link INGEST_REMOUNT_QUERY} states: `volter-mount` is the whole
199
+ * mount-instance machinery (per-mount specifier rewriting, gated-globals
200
+ * realm keying). A model module is EDITOR-side content — it builds an
201
+ * `Object3D` for a document, it does not mount a game — so it wants exactly
202
+ * one of those effects, a fresh evaluation, and none of the others. A key the
203
+ * server does not interpret busts the url and changes nothing else.
204
+ *
205
+ * `revision` is the document's own rebuild counter, so consecutive saves each
206
+ * get a url the browser has never fetched. That is only half the freshness
207
+ * story and the smaller half: the dev server's `hotUpdate` hook has already
208
+ * stamped the changed file HMR-invalid across the project's subgraph
209
+ * (`server/project-script-hmr.ts`), so re-transforming this module also
210
+ * re-points every dependency of it at a fresh `?t=`. Busting the leaf alone
211
+ * would re-run the leaf against stale imports.
212
+ */
213
+ export function liveModuleImportUrl(
214
+ projectRoot: string,
215
+ relativePath: string,
216
+ revision: number,
217
+ ): string {
218
+ return `${fsImportPath(projectRoot, relativePath)}?volter-live-module=${revision}`;
219
+ }
220
+
221
+ let liveModuleRevision = Date.now();
222
+
223
+ /** A rebuild's import identity must outlive a component's local counter.
224
+ * Closing/reopening a document must never reuse its first cached module. */
225
+ export function beginLiveModuleRevision(): number {
226
+ liveModuleRevision = Math.max(liveModuleRevision + 1, Date.now());
227
+ return liveModuleRevision;
228
+ }
229
+
230
+ export function projectEntryImportUrl(
231
+ projectRoot: string,
232
+ entry: string,
233
+ epoch: ProjectMountEpoch,
234
+ selectionOverride?: EntrypointSelectionOverride,
235
+ ): string {
236
+ const base = `${fsImportPath(projectRoot, entry)}?${PROJECT_MOUNT_QUERY}=${epoch}`;
237
+ if (!selectionOverride) return base;
238
+ return (
239
+ `${base}&${PROJECT_SELECTION_QUERY}=${encodeURIComponent(selectionOverride.selection)}` +
240
+ `&${PROJECT_SCENE_QUERY}=${encodeURIComponent(selectionOverride.key)}`
241
+ );
242
+ }
@@ -0,0 +1,164 @@
1
+ /**
2
+ * THE PROJECT-SERVING DOOR — how an integration takes part in serving a project's own modules.
3
+ *
4
+ * A package the product composes may declare `package.json#volter.serving`: a built Node module
5
+ * (`.mjs`) whose `servingPlugins(services)` returns Vite plugins the session adds to the
6
+ * project's module graph. The browser half of an integration stays `volter.contributions`; this is
7
+ * its server half, for what only a transform over the project's source can do (a JSX identity
8
+ * stamp, an authoring route over the project's files). The kit names no integration: it reads the
9
+ * declaration from the product's composed packages, exactly as it reads `volter.contributions`.
10
+ *
11
+ * `services` are the kit's own server capabilities a serving module may use, so an integration
12
+ * never imports kit internals.
13
+ */
14
+
15
+ import type { ComponentContractAnalyzer } from '../source-analysis';
16
+ import type { R3fAuthoringDiagnostic, SourceDialectEvidence } from '../source-authoring';
17
+
18
+ /** The root surface a project module renders on, as the kit's region decision answers it. */
19
+ export interface ServedModuleSurface {
20
+ /** The identity attribute a JSX element on this surface carries. */
21
+ readonly attribute: 'data-oid' | 'userData-oid';
22
+ /** The declared surface, when a region placed the file; absent when nothing did. */
23
+ readonly surface?: 'three' | 'canvas' | 'dom';
24
+ /** Report the decision's diagnostics (a file stamped against its declaration) once. */
25
+ report(): void;
26
+ }
27
+
28
+ /** The collaboration record every source write is attributed and ordered through. */
29
+ export interface ServingCollaboration {
30
+ /** The revision the next write must expect. */
31
+ revision(): number;
32
+ /** Refuse a write whose author expected an older revision of these resources. */
33
+ assertSourceMutation(authorId: string, expectedRevision: number, resources: readonly string[]): void;
34
+ /** Record a write; `null` when the bytes were already recorded. */
35
+ recordSourceMutation(input: {
36
+ authorId: string;
37
+ source: 'editor';
38
+ resources: readonly { path: string; sha: string | null }[];
39
+ }): { revision: number } | null;
40
+ }
41
+
42
+ /** Bytes a tool produced for the shipped project (under `public/`), with what re-derives them. */
43
+ export interface ProjectOutputWrite {
44
+ /** Project-relative, under `public/`, no traversal. */
45
+ readonly path: string;
46
+ readonly content: Uint8Array;
47
+ /** The transport that wrote it, 1–64 characters. */
48
+ readonly source: string;
49
+ /** The session and revision that produced the bytes. */
50
+ readonly session: {
51
+ readonly id: string;
52
+ readonly port: number;
53
+ readonly revision: number;
54
+ readonly callId?: string;
55
+ };
56
+ /** Project-relative files the bytes were produced from. */
57
+ readonly inputs?: readonly string[];
58
+ }
59
+
60
+ export interface ProjectServingServices {
61
+ /** The editor estate a vendored game's writes are recorded against. */
62
+ readonly engineRoot: string;
63
+ /** The opened project's roots and the in-tree ingest roots: "is this the project's own code". */
64
+ readonly projectRoots: () => ReadonlySet<string>;
65
+ /** The project the session serves now; it can change after boot. */
66
+ readonly currentProjectRoot: () => string | undefined;
67
+ /** The region decision for `file`, over the served module graph. */
68
+ surfaceOf(file: string, code: string, moduleGraph: unknown, projectRoot?: string): ServedModuleSurface;
69
+ /** Bind the served graph an editor write invalidates (`configureServer`). */
70
+ bindModuleGraph(moduleGraph: unknown, projectRoot: () => string): void;
71
+ /** Write a project source file the way every editor write lands: a vendored file is recorded
72
+ * against its lock, and the modules it replaces are invalidated. Throws on a refusal. */
73
+ writeSource(file: string, code: string): void;
74
+ /** Settle a pending vendored write to `file` before it is read. */
75
+ settleSource(file: string): void;
76
+ /** The collaboration record for a project root. */
77
+ collaboration(projectRoot: string): ServingCollaboration;
78
+ /** Whether `error` is a collaboration conflict (a stale expected revision). */
79
+ isCollaborationConflict(error: unknown): boolean;
80
+ /**
81
+ * Write project resources as the project's one attributed, conflict-checked transaction
82
+ * (`request` supplies the author, as every kit write reads it). The collaboration revision it
83
+ * produced, or `null` when no session is recording. Throws what
84
+ * {@link answerProjectMutationError} answers.
85
+ */
86
+ commitProjectMutation(
87
+ request: unknown,
88
+ resources: readonly { readonly path: string; readonly content: string | Uint8Array | null }[],
89
+ ): Promise<{ readonly revision: number } | null>;
90
+ /** Answer a failed project mutation as every kit route does: a conflict is a structured 409. */
91
+ answerProjectMutationError(response: unknown, error: unknown): void;
92
+ /** Record bytes produced for the shipped project, with their provenance. */
93
+ writeProjectOutput(write: ProjectOutputWrite): Promise<{ readonly provenanceOperationId: string | null }>;
94
+ /** The open project's own files (what a tool that mirrors the project reads). */
95
+ projectFileIndex(): Promise<readonly { readonly path: string; readonly size: number; readonly mtime: number }[]>;
96
+ /** A project-relative path the project owns, outside the trees the editor keeps for itself. */
97
+ isProjectOwnedPath(path: string): boolean;
98
+ /** Whether `child`, symlinks resolved, lies inside `parent`. */
99
+ isCanonicalPathInside(parent: string, child: string): Promise<boolean>;
100
+ /** Let the editor's cross-origin-isolated frame embed this response. */
101
+ allowCrossOriginFrameEmbedding(response: { setHeader(name: string, value: string): void }): void;
102
+ /** Offer this medium's conversion of source model formats to runtime GLB for the asset
103
+ * library's imports. Returns the removal. */
104
+ registerModelConverter(converter: ModelConverter): () => void;
105
+ }
106
+
107
+ /** An asset import's settings, parsed: the units and axes the source was authored in and what
108
+ * to keep of it. */
109
+ export interface ModelImportSettings {
110
+ readonly scale: number;
111
+ readonly sourceUnits: 'auto' | 'mm' | 'cm' | 'm' | 'in' | 'ft';
112
+ readonly upAxis: 'auto' | 'x' | 'y' | 'z';
113
+ readonly forwardAxis: 'auto' | 'x' | '-x' | 'y' | '-y' | 'z' | '-z';
114
+ readonly normals: 'preserve' | 'generate' | 'recalculate';
115
+ readonly tangents: 'preserve' | 'generate' | 'discard';
116
+ readonly materials: 'import' | 'discard';
117
+ readonly textures: 'copy' | 'embed' | 'discard';
118
+ readonly animations: readonly string[];
119
+ readonly meshOptimization: 'none' | 'safe' | 'aggressive';
120
+ readonly retainSource: boolean;
121
+ }
122
+
123
+ /** A medium's server-side conversion of staged source models (`fbx`, `obj`, …) to GLB bytes. */
124
+ export interface ModelConverter {
125
+ readonly formats: readonly string[];
126
+ convert(primaryPath: string, format: string, settings: ModelImportSettings): Promise<Uint8Array>;
127
+ }
128
+
129
+ /** What a `volter.serving` module exports. */
130
+ export interface ProjectServingModule {
131
+ servingPlugins(services: ProjectServingServices): readonly unknown[];
132
+ /** What a module's own source says about its dialect: whether it imports a reconciler, and
133
+ * the intrinsic tags only one renderer draws. The kit's region decision reads it for a file
134
+ * no region places; with no module answering, a source proves nothing. */
135
+ readonly sourceDialectEvidence?: (code: string) => SourceDialectEvidence;
136
+ /** Authoring diagnostics for one project module the kit validates; `knownThreeSurface` is the
137
+ * region decision's answer for it. */
138
+ readonly sourceDiagnostics?: (
139
+ code: string,
140
+ file: string,
141
+ options: { knownThreeSurface: boolean },
142
+ ) => readonly R3fAuthoringDiagnostic[];
143
+ /** The component-contract analyzer the kit's Content index uses on the server
144
+ * (`@volter/sdk/source-analysis`; the browser registers its own). */
145
+ readonly componentContracts?: ComponentContractAnalyzer;
146
+ /**
147
+ * The GET routes of this module's plugins whose answers a limited view ships as they are
148
+ * (`@volter/sdk/session/limited-view`): bytes fixed for a build, such as an engine's
149
+ * WebAssembly. `<product> view build` asks a headless session for each and serves the answer
150
+ * at the same URL. Routes that read or write the project belong in `volter.viewServing`.
151
+ */
152
+ readonly viewSnapshotRoutes?: () => Promise<readonly string[]>;
153
+ /**
154
+ * What of a recorded {@link viewSnapshotRoutes} answer a view may publish: called with the route
155
+ * and the text the session answered, it returns the text to ship. A view is made to be shared,
156
+ * so an answer that names this machine (a directory, a message quoting a path) keeps only what
157
+ * the page reads.
158
+ */
159
+ readonly viewSnapshotScrub?: (route: string, body: string) => string;
160
+ }
161
+
162
+ /** The plugin name a serving module gives the plugin that serves `/__ui-source/*`, so the kit
163
+ * can say whether this session serves source writes without naming who does. */
164
+ export const SOURCE_WRITE_ROUTES_PLUGIN = 'volter-ui-oid';