@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.
- package/LICENSE +202 -0
- package/NOTICE +20 -0
- package/README.md +38 -3
- package/package.json +510 -4
- package/src/account.ts +210 -0
- package/src/chrome.ts +88 -0
- package/src/client.ts +1646 -0
- package/src/commands.ts +66 -0
- package/src/contributions.ts +619 -0
- package/src/css-numeric-style.ts +97 -0
- package/src/document-probe.ts +282 -0
- package/src/editor-view.ts +225 -0
- package/src/extension.ts +40 -0
- package/src/generations.ts +178 -0
- package/src/host.ts +1157 -0
- package/src/http-transport.browser.ts +14 -0
- package/src/http-transport.node.ts +19 -0
- package/src/index.ts +131 -0
- package/src/kit/CapabilityCoverageSection.tsx +185 -0
- package/src/kit/account-client.ts +333 -0
- package/src/kit/action-registry.ts +317 -0
- package/src/kit/active-product.ts +76 -0
- package/src/kit/active-project.ts +155 -0
- package/src/kit/adapter-editor-config.ts +25 -0
- package/src/kit/adapter-module.ts +7 -0
- package/src/kit/adapter-observation.ts +49 -0
- package/src/kit/animation/animation-clock.ts +479 -0
- package/src/kit/animation/stage-transport.ts +385 -0
- package/src/kit/api/assets.ts +365 -0
- package/src/kit/api/project-open.ts +355 -0
- package/src/kit/api/project-source.ts +180 -0
- package/src/kit/api/project-state.ts +110 -0
- package/src/kit/api/relay.ts +270 -0
- package/src/kit/api/themes.ts +45 -0
- package/src/kit/api-asset-library-wire.ts +45 -0
- package/src/kit/api-base.ts +10 -0
- package/src/kit/api-build.ts +99 -0
- package/src/kit/api-git-wire.ts +56 -0
- package/src/kit/api-logs.ts +92 -0
- package/src/kit/api-project-identity.ts +74 -0
- package/src/kit/api-settings.ts +36 -0
- package/src/kit/api-worktrees.ts +205 -0
- package/src/kit/asset-capabilities.ts +344 -0
- package/src/kit/asset-compare-core.ts +171 -0
- package/src/kit/asset-editor-context.tsx +101 -0
- package/src/kit/asset-events.ts +96 -0
- package/src/kit/asset-inspector-actions.ts +87 -0
- package/src/kit/asset-selection-viewer-registry.ts +113 -0
- package/src/kit/asset-selection.ts +146 -0
- package/src/kit/asset-thumbnails.ts +25 -0
- package/src/kit/asset-viewers.ts +115 -0
- package/src/kit/asset-workflow/asset-import-jobs.ts +106 -0
- package/src/kit/asset-workflow/asset-ledger-backend.ts +126 -0
- package/src/kit/asset-workflow/asset-ledger.ts +156 -0
- package/src/kit/asset-workflow/asset-materialization-report.ts +140 -0
- package/src/kit/asset-workflow/asset-pack-manifest.ts +320 -0
- package/src/kit/asset-workflow/asset-types.ts +142 -0
- package/src/kit/asset-workflow/audio-preview-player.ts +193 -0
- package/src/kit/asset-workflow/audio-waveform.ts +22 -0
- package/src/kit/asset-workflow/cloud-asset-client.ts +263 -0
- package/src/kit/asset-workflow/hosted-asset-materialization.ts +236 -0
- package/src/kit/asset-workflow/image-view-scale.ts +31 -0
- package/src/kit/asset-workflow/import-contract.ts +124 -0
- package/src/kit/asset-workflow/ledger-write-lock.ts +244 -0
- package/src/kit/asset-workflow/pixi-spritesheet.ts +197 -0
- package/src/kit/asset-workflow/preview-resource-lifetime.ts +44 -0
- package/src/kit/asset-workflow/project-asset-commands.ts +20 -0
- package/src/kit/asset-workflow/project-content.ts +288 -0
- package/src/kit/asset-workflow/project-source-index.ts +545 -0
- package/src/kit/asset-workflow/thumbnail-system.ts +256 -0
- package/src/kit/authoring/active-adapter.ts +200 -0
- package/src/kit/authoring/active-systems.ts +422 -0
- package/src/kit/authoring/adapter-key.ts +18 -0
- package/src/kit/authoring/authoring-asset-url.ts +27 -0
- package/src/kit/authoring/bootstrap-state.ts +49 -0
- package/src/kit/authoring/boundary-authoring-adapter.ts +189 -0
- package/src/kit/authoring/canvas-scene-guides.ts +84 -0
- package/src/kit/authoring/composite-authoring-adapter.ts +2109 -0
- package/src/kit/authoring/consumer-actions.ts +531 -0
- package/src/kit/authoring/design-time-layers.ts +852 -0
- package/src/kit/authoring/design-time-mount-registry.ts +244 -0
- package/src/kit/authoring/edit-mode-authoring.ts +637 -0
- package/src/kit/authoring/empty-project-authoring.ts +22 -0
- package/src/kit/authoring/instance-source-menu.ts +135 -0
- package/src/kit/authoring/layered-pick.ts +185 -0
- package/src/kit/authoring/mounted-root-subjects.ts +146 -0
- package/src/kit/authoring/no-authoring-adapter.ts +59 -0
- package/src/kit/authoring/object3d-document-persistence.ts +122 -0
- package/src/kit/authoring/panel-authoring.ts +121 -0
- package/src/kit/authoring/project-authoring-session.ts +105 -0
- package/src/kit/authoring/provenance.ts +99 -0
- package/src/kit/authoring/react-canvas-navigation.ts +259 -0
- package/src/kit/authoring/react-design-canvas-style.ts +20 -0
- package/src/kit/authoring/react-story-board.ts +917 -0
- package/src/kit/authoring/selection-scope.ts +195 -0
- package/src/kit/authoring/shell-document-ops.ts +169 -0
- package/src/kit/authoring/story-board-chrome-fit.ts +107 -0
- package/src/kit/authoring/story-board-presentation.ts +111 -0
- package/src/kit/authoring/three-root.ts +67 -0
- package/src/kit/authoring/viewport-tool-context.ts +73 -0
- package/src/kit/authoring/viewport-tool-owner.ts +38 -0
- package/src/kit/authoring/world-session-state.ts +101 -0
- package/src/kit/authoring-seam-evidence.ts +300 -0
- package/src/kit/availability-tick.ts +66 -0
- package/src/kit/bitmap-label.ts +120 -0
- package/src/kit/boot-routing.ts +392 -0
- package/src/kit/breakpoint-state.ts +43 -0
- package/src/kit/build-identity.ts +16 -0
- package/src/kit/bytes-codec.ts +62 -0
- package/src/kit/cancellation-reason.ts +58 -0
- package/src/kit/canvas-frames.ts +88 -0
- package/src/kit/capture-camera-pose.ts +77 -0
- package/src/kit/capture-size.ts +88 -0
- package/src/kit/chrome-registry.ts +159 -0
- package/src/kit/chrome-slot-registry.ts +91 -0
- package/src/kit/collaboration-client.ts +264 -0
- package/src/kit/collaboration-presence.ts +41 -0
- package/src/kit/command-dispatch.ts +19 -0
- package/src/kit/command-listener.ts +2182 -0
- package/src/kit/command-registry.ts +71 -0
- package/src/kit/component-board-registry.ts +205 -0
- package/src/kit/component-states-registry.ts +199 -0
- package/src/kit/components/AlignToolbar.tsx +204 -0
- package/src/kit/components/ApplicationMenus.tsx +372 -0
- package/src/kit/components/AssetEditorShell.tsx +216 -0
- package/src/kit/components/AssetInspectorToolSection.tsx +124 -0
- package/src/kit/components/BoardRulers.tsx +354 -0
- package/src/kit/components/CanvasAddNodeDialogs.tsx +529 -0
- package/src/kit/components/CanvasSceneViewport.tsx +1195 -0
- package/src/kit/components/ChromeSlot.tsx +20 -0
- package/src/kit/components/CodeView.tsx +470 -0
- package/src/kit/components/CompactInspectorShell.tsx +39 -0
- package/src/kit/components/ConsolePanel.tsx +273 -0
- package/src/kit/components/GameplaySessionTimeline.tsx +295 -0
- package/src/kit/components/InspectionProjection.tsx +932 -0
- package/src/kit/components/Inspector.tsx +270 -0
- package/src/kit/components/InspectorCanvasPreview.tsx +35 -0
- package/src/kit/components/InspectorFieldsSection.tsx +290 -0
- package/src/kit/components/InspectorStoriesSection.tsx +92 -0
- package/src/kit/components/InspectorToolSection.tsx +96 -0
- package/src/kit/components/InspectorTransformSection.tsx +245 -0
- package/src/kit/components/LightExplorerPanel.tsx +433 -0
- package/src/kit/components/MediaProperties.tsx +145 -0
- package/src/kit/components/ProjectHeader.tsx +328 -0
- package/src/kit/components/ReactCanvasControls.tsx +358 -0
- package/src/kit/components/RootSelectionOverlay.tsx +3688 -0
- package/src/kit/components/RootTextEditor.tsx +79 -0
- package/src/kit/components/SaveStatus.tsx +70 -0
- package/src/kit/components/SurfaceCrashBoundary.tsx +105 -0
- package/src/kit/components/SurfaceStateOverlay.tsx +24 -0
- package/src/kit/components/ToolContributionSurfaces.tsx +49 -0
- package/src/kit/components/ToolHost.tsx +380 -0
- package/src/kit/components/Toolbar.tsx +811 -0
- package/src/kit/components/TransientHint.tsx +44 -0
- package/src/kit/components/VersionControlSection.tsx +470 -0
- package/src/kit/components/ViewportOverlaysMenu.tsx +177 -0
- package/src/kit/components/VolterLogo.tsx +18 -0
- package/src/kit/components/WorktreeSwitcher.tsx +712 -0
- package/src/kit/components/account-documents.tsx +1162 -0
- package/src/kit/components/asset-documents.tsx +794 -0
- package/src/kit/components/asset-editor-persistence.ts +216 -0
- package/src/kit/components/asset-selection-section.tsx +545 -0
- package/src/kit/components/asset-thumbnails.tsx +307 -0
- package/src/kit/components/asset-viewers/AudioViewer.tsx +201 -0
- package/src/kit/components/asset-viewers/GenericJsonViewer.tsx +102 -0
- package/src/kit/components/asset-viewers/ImageViewer.tsx +300 -0
- package/src/kit/components/asset-viewers/JsonAssetDocument.tsx +98 -0
- package/src/kit/components/asset-viewers/OnlineAssetDetail.tsx +426 -0
- package/src/kit/components/asset-viewers/SourceAssetViewer.tsx +356 -0
- package/src/kit/components/asset-viewers/SpritesheetSpriteView.tsx +102 -0
- package/src/kit/components/asset-viewers/VideoViewer.tsx +101 -0
- package/src/kit/components/asset-viewers/shader-source.ts +144 -0
- package/src/kit/components/board-guides.ts +150 -0
- package/src/kit/components/canvas-scene-hotkeys.ts +37 -0
- package/src/kit/components/canvas-temporary-pivot.ts +34 -0
- package/src/kit/components/core-utilities.tsx +94 -0
- package/src/kit/components/inspector-preview-section.tsx +223 -0
- package/src/kit/components/inspector-revert-label.ts +20 -0
- package/src/kit/components/inspector-selection.ts +42 -0
- package/src/kit/components/inspector-stories-gating.ts +171 -0
- package/src/kit/components/inspector-transform-subject.ts +11 -0
- package/src/kit/components/inspector-transform.ts +88 -0
- package/src/kit/components/kind-documents.tsx +544 -0
- package/src/kit/components/primitives/DraftColorInput.tsx +74 -0
- package/src/kit/components/project-tool-documents.tsx +402 -0
- package/src/kit/components/scene-documents.tsx +221 -0
- package/src/kit/components/status-contributions.tsx +407 -0
- package/src/kit/components/tool-documents.tsx +302 -0
- package/src/kit/components/tool-schema-form.tsx +262 -0
- package/src/kit/components/use-after-paint.ts +41 -0
- package/src/kit/components/use-project-image-assets.ts +86 -0
- package/src/kit/components/workspace-history.ts +32 -0
- package/src/kit/components/world-documents.tsx +570 -0
- package/src/kit/components/world-overlay-gestures.ts +1939 -0
- package/src/kit/composite-screenshot.ts +2238 -0
- package/src/kit/content-entry-source-registry.ts +184 -0
- package/src/kit/contribution-surfaces.ts +48 -0
- package/src/kit/coverage/canvas-reveal.ts +192 -0
- package/src/kit/coverage/design-time-surfaces.ts +101 -0
- package/src/kit/coverage/ontology-invariants.ts +466 -0
- package/src/kit/coverage/session-vitals.ts +503 -0
- package/src/kit/crash-null-boundary.ts +36 -0
- package/src/kit/creation-site-edit.ts +1491 -0
- package/src/kit/creation-site-registry.ts +160 -0
- package/src/kit/delegate-harness-registry.ts +134 -0
- package/src/kit/document-areas.ts +70 -0
- package/src/kit/document-context-registry.ts +193 -0
- package/src/kit/document-open-registry.ts +200 -0
- package/src/kit/document-play-extension.ts +221 -0
- package/src/kit/document-preview-source.ts +20 -0
- package/src/kit/document-renderer-session.ts +138 -0
- package/src/kit/document-stage-sessions.ts +26 -0
- package/src/kit/document-viewports.ts +120 -0
- package/src/kit/editor-api.ts +46 -0
- package/src/kit/editor-chrome-capture.ts +136 -0
- package/src/kit/editor-commands.ts +176 -0
- package/src/kit/editor-console.ts +580 -0
- package/src/kit/editor-current-view.ts +56 -0
- package/src/kit/editor-document-probe.ts +1166 -0
- package/src/kit/editor-git-client.ts +115 -0
- package/src/kit/editor-hotkeys.ts +728 -0
- package/src/kit/editor-lease-view.ts +39 -0
- package/src/kit/editor-lease.ts +415 -0
- package/src/kit/editor-mode.ts +19 -0
- package/src/kit/editor-notifications.ts +140 -0
- package/src/kit/editor-presence.ts +563 -0
- package/src/kit/editor-presentation-activity.ts +58 -0
- package/src/kit/editor-presentation-notice.ts +42 -0
- package/src/kit/editor-runtime.tsx +147 -0
- package/src/kit/editor-server-response.ts +86 -0
- package/src/kit/editor-session-attribution.ts +85 -0
- package/src/kit/editor-session-mode.ts +54 -0
- package/src/kit/editor-state-facets.ts +74 -0
- package/src/kit/editor-view-presentation.ts +777 -0
- package/src/kit/environment-images.ts +58 -0
- package/src/kit/eyedropper-session.ts +60 -0
- package/src/kit/files/file-provider.ts +62 -0
- package/src/kit/files/project-files.ts +270 -0
- package/src/kit/finders/index.ts +137 -0
- package/src/kit/finders/scenes-from-entrypoint-selection.ts +387 -0
- package/src/kit/frame/frame-parts.ts +30 -0
- package/src/kit/framed-document-capture.ts +34 -0
- package/src/kit/game-globals-prelude.ts +143 -0
- package/src/kit/game-surface-defaults.ts +33 -0
- package/src/kit/gameplay-dom-recording.ts +318 -0
- package/src/kit/gameplay-export-state.ts +14 -0
- package/src/kit/gameplay-replay.ts +417 -0
- package/src/kit/gameplay-session-time.ts +9 -0
- package/src/kit/gameplay-sessions.ts +204 -0
- package/src/kit/hierarchy-component-marks.ts +298 -0
- package/src/kit/hierarchy-internals.ts +197 -0
- package/src/kit/hierarchy-kind-icon.ts +217 -0
- package/src/kit/hierarchy-menu-registry.ts +67 -0
- package/src/kit/hierarchy-node-rows.ts +307 -0
- package/src/kit/hierarchy-panel-view.ts +280 -0
- package/src/kit/hierarchy-projection.ts +76 -0
- package/src/kit/hierarchy-row-media.ts +45 -0
- package/src/kit/hierarchy-row-model.ts +308 -0
- package/src/kit/hierarchy-rows.ts +11 -0
- package/src/kit/hierarchy-walk.ts +86 -0
- package/src/kit/history/editor-session.ts +25 -0
- package/src/kit/history/history-commands.ts +147 -0
- package/src/kit/history/history-delegate.ts +187 -0
- package/src/kit/history/history-limit-notices.ts +43 -0
- package/src/kit/history/history-service.ts +1189 -0
- package/src/kit/history/persistence-coordinator.ts +35 -0
- package/src/kit/history/project-file-history.ts +386 -0
- package/src/kit/history/project-root-history-backends.ts +139 -0
- package/src/kit/history/resource-registry.ts +209 -0
- package/src/kit/history/snapshot-store.ts +103 -0
- package/src/kit/history/source-history-backend.ts +546 -0
- package/src/kit/history-types.ts +124 -0
- package/src/kit/hmr-registration-group.ts +67 -0
- package/src/kit/hmr-stable-react-context.ts +23 -0
- package/src/kit/hotkeys.ts +190 -0
- package/src/kit/inference-diagnostics.ts +69 -0
- package/src/kit/initial-project.ts +80 -0
- package/src/kit/inspection/active-subject.ts +571 -0
- package/src/kit/inspection/active-surface.ts +142 -0
- package/src/kit/inspection/compose-subject.ts +1055 -0
- package/src/kit/inspection/compose.ts +7 -0
- package/src/kit/inspection/display.ts +171 -0
- package/src/kit/inspection/document-subject.ts +109 -0
- package/src/kit/inspection/game-subject.ts +85 -0
- package/src/kit/inspection/null-subject.ts +119 -0
- package/src/kit/inspection/serialize.ts +357 -0
- package/src/kit/inspection/use-active-inspection.ts +180 -0
- package/src/kit/inspection-model.ts +542 -0
- package/src/kit/inspection-node-media.ts +58 -0
- package/src/kit/inspector-presentation.ts +203 -0
- package/src/kit/inspector-property-grouping.ts +64 -0
- package/src/kit/inspector-section-registry.ts +221 -0
- package/src/kit/instance-source-actions.ts +163 -0
- package/src/kit/js-heap.ts +71 -0
- package/src/kit/key-actions.ts +91 -0
- package/src/kit/keymap-presets.ts +428 -0
- package/src/kit/layout-policy.ts +31 -0
- package/src/kit/light-explorer-model.ts +134 -0
- package/src/kit/live-canvas-frame.ts +55 -0
- package/src/kit/live-document.ts +296 -0
- package/src/kit/live-gesture-lock.ts +50 -0
- package/src/kit/live-seam-evidence.ts +11 -0
- package/src/kit/live-session-registry.ts +220 -0
- package/src/kit/live-transition.ts +391 -0
- package/src/kit/manifest-project.ts +107 -0
- package/src/kit/module-fetch-diagnosis.ts +192 -0
- package/src/kit/mount-failure-report.ts +154 -0
- package/src/kit/native-selection-style.ts +497 -0
- package/src/kit/object3d-document-write-policy.ts +137 -0
- package/src/kit/packaged-runtime.ts +108 -0
- package/src/kit/palettes/maya.palette.json +57 -0
- package/src/kit/palettes/substance.palette.json +57 -0
- package/src/kit/performance-profiler.ts +367 -0
- package/src/kit/performance-sources.ts +69 -0
- package/src/kit/photograph-notice.ts +141 -0
- package/src/kit/play-boot-phase.ts +166 -0
- package/src/kit/play-camera-flight.ts +35 -0
- package/src/kit/png-encode.worker.ts +26 -0
- package/src/kit/presentation-surface.ts +248 -0
- package/src/kit/product-command.ts +90 -0
- package/src/kit/project-adapter.ts +1140 -0
- package/src/kit/project-asset-refresh.ts +23 -0
- package/src/kit/project-asset-roots.ts +68 -0
- package/src/kit/project-local-state.ts +151 -0
- package/src/kit/project-manager.ts +243 -0
- package/src/kit/project-module-changes.ts +201 -0
- package/src/kit/project-module-split.ts +270 -0
- package/src/kit/project-play-layers.ts +25 -0
- package/src/kit/project-provenance.ts +115 -0
- package/src/kit/project-ready.ts +42 -0
- package/src/kit/project-shape.ts +68 -0
- package/src/kit/project-tools.ts +107 -0
- package/src/kit/projection-types.ts +44 -0
- package/src/kit/readiness.ts +113 -0
- package/src/kit/renderer-resource-counts.ts +27 -0
- package/src/kit/reported-play-state.ts +90 -0
- package/src/kit/resolve-contributed-command.ts +14 -0
- package/src/kit/resolve-relative-specifier.ts +33 -0
- package/src/kit/retained-document-states.ts +91 -0
- package/src/kit/scene-document-plan.ts +320 -0
- package/src/kit/scene-live-open.ts +210 -0
- package/src/kit/scoped-game-css.ts +152 -0
- package/src/kit/served-url.ts +5 -0
- package/src/kit/session-close.ts +17 -0
- package/src/kit/session-tombstone.ts +127 -0
- package/src/kit/settings/settings-provider.ts +82 -0
- package/src/kit/settings-store.ts +348 -0
- package/src/kit/shell-document-state.ts +27 -0
- package/src/kit/shell-store-door.ts +45 -0
- package/src/kit/shell-store.ts +722 -0
- package/src/kit/source-conflict.ts +122 -0
- package/src/kit/stage-context.ts +377 -0
- package/src/kit/stage-invalidation.ts +25 -0
- package/src/kit/stage-store-registry.ts +69 -0
- package/src/kit/startup-failure.ts +80 -0
- package/src/kit/state-report-deferral.ts +73 -0
- package/src/kit/storage/host-files-storage.ts +97 -0
- package/src/kit/storage/http-storage.ts +174 -0
- package/src/kit/storage/index.ts +75 -0
- package/src/kit/storage/mem-storage.ts +158 -0
- package/src/kit/storage/path-lock.ts +44 -0
- package/src/kit/storage/paths.ts +26 -0
- package/src/kit/storage-types.ts +127 -0
- package/src/kit/stories/StoryPreviewMount.tsx +306 -0
- package/src/kit/stories/compose-project-stories.ts +255 -0
- package/src/kit/stories/prefabs-finder.ts +54 -0
- package/src/kit/stories/prefabs-from-stories.ts +182 -0
- package/src/kit/stories/project-story-regions.ts +24 -0
- package/src/kit/stories/story-capture.ts +579 -0
- package/src/kit/stories/story-declared-medium.ts +126 -0
- package/src/kit/stories/story-discovery.ts +176 -0
- package/src/kit/stories/story-dom-runtime.ts +78 -0
- package/src/kit/stories/story-grouping.ts +111 -0
- package/src/kit/stories/story-mount-turn.ts +27 -0
- package/src/kit/stories/story-presentation.ts +215 -0
- package/src/kit/stories/story-preview-component.ts +7 -0
- package/src/kit/stories/story-registry.ts +530 -0
- package/src/kit/stories-scope.ts +35 -0
- package/src/kit/story-document-openers.ts +36 -0
- package/src/kit/story-thumbnails.ts +47 -0
- package/src/kit/surface-keyboard.ts +101 -0
- package/src/kit/surface-state.ts +135 -0
- package/src/kit/system-seam-evidence.ts +72 -0
- package/src/kit/tab-census.ts +202 -0
- package/src/kit/tab-lifecycle-client.ts +227 -0
- package/src/kit/theme-library.ts +897 -0
- package/src/kit/theme-preference.ts +429 -0
- package/src/kit/three-viewport-presentation.ts +23 -0
- package/src/kit/tool-contribution-play.ts +74 -0
- package/src/kit/tool-loader.ts +1918 -0
- package/src/kit/transform-mode-request.ts +66 -0
- package/src/kit/transient-hint.ts +78 -0
- package/src/kit/transport-strip.tsx +174 -0
- package/src/kit/ui-source/adapter-region-includes.ts +238 -0
- package/src/kit/ui-source/file-region-resolver.ts +302 -0
- package/src/kit/ui-source/inspect.ts +775 -0
- package/src/kit/ui-source/source-write-backend.ts +605 -0
- package/src/kit/ui-source/tier-source-write-backend.ts +279 -0
- package/src/kit/user-local-state.ts +105 -0
- package/src/kit/viewport-activation-timings.ts +840 -0
- package/src/kit/viewport-editor-controls.ts +22 -0
- package/src/kit/viewport-presentation.ts +668 -0
- package/src/kit/viewport-surface-status.tsx +55 -0
- package/src/kit/wait-until.ts +37 -0
- package/src/kit/worker-call-metrics.ts +166 -0
- package/src/kit/workspace-areas.ts +191 -0
- package/src/kit/workspace-aux-commands.ts +11 -0
- package/src/kit/workspace-available-documents.ts +142 -0
- package/src/kit/workspace-core-utilities.ts +31 -0
- package/src/kit/workspace-document-ids.ts +59 -0
- package/src/kit/workspace-document-registry.ts +624 -0
- package/src/kit/workspace-document-restore.ts +146 -0
- package/src/kit/workspace-host-commands.ts +141 -0
- package/src/kit/workspace-persistence-gate.ts +40 -0
- package/src/kit/workspace-play-utilities.ts +44 -0
- package/src/kit/workspace-presets.ts +446 -0
- package/src/kit/workspace-regions.ts +276 -0
- package/src/kit/workspace-static-panels.ts +73 -0
- package/src/kit/workspace-status-registry.ts +121 -0
- package/src/kit/workspace-storage.ts +35 -0
- package/src/kit/workspace-style.ts +226 -0
- package/src/kit/workspace-utility-commands.ts +74 -0
- package/src/kit/workspace-utility-registry.ts +263 -0
- package/src/kit/world-adoption-event.ts +23 -0
- package/src/kit/world-adoption.ts +115 -0
- package/src/kit/world-canvas-viewport-state.ts +35 -0
- package/src/kit/world-document-routing.ts +104 -0
- package/src/kit/world-pan-state.ts +198 -0
- package/src/kit/write-pipe.ts +173 -0
- package/src/layout-arrangements.ts +5 -0
- package/src/layouts.tsx +108 -0
- package/src/looks.ts +16 -0
- package/src/project/output-roots.ts +73 -0
- package/src/project/tab-census.ts +155 -0
- package/src/project-tool-catalog.ts +104 -0
- package/src/selection.tsx +107 -0
- package/src/services.ts +18 -0
- package/src/session/build-report.ts +22 -0
- package/src/session/collaboration-types.ts +262 -0
- package/src/session/command-table.ts +327 -0
- package/src/session/discovery.ts +100 -0
- package/src/session/editor-brand.ts +48 -0
- package/src/session/editor-compatibility.ts +317 -0
- package/src/session/editor-control-lifecycle.ts +68 -0
- package/src/session/editor-control-protocol.ts +5 -0
- package/src/session/entrypoint-selection-readers.ts +66 -0
- package/src/session/entrypoint-selection-source.ts +120 -0
- package/src/session/game-css-scope.ts +30 -0
- package/src/session/hosted-attachment.ts +225 -0
- package/src/session/limited-view.ts +82 -0
- package/src/session/product-create.ts +24 -0
- package/src/session/product-locator.ts +478 -0
- package/src/session/project-module-url.ts +242 -0
- package/src/session/project-serving.ts +164 -0
- package/src/session/project-upgrade.ts +403 -0
- package/src/session/registry-format.ts +210 -0
- package/src/session/relative-path-guard.ts +56 -0
- package/src/session/scoped-game-css.ts +461 -0
- package/src/session/source-glob.ts +15 -0
- package/src/session/tool-contribution-convention.ts +123 -0
- package/src/session/workbench-locator.ts +712 -0
- package/src/session.ts +41 -0
- package/src/share.ts +160 -0
- package/src/source-analysis.ts +28 -0
- package/src/source-authoring.ts +439 -0
- package/src/tools/errors.ts +91 -0
- package/src/tools/provider-execution.ts +70 -0
- package/src/tools/registry.ts +341 -0
- package/src/tools/types.ts +159 -0
- package/src/transport.ts +100 -0
- package/src/types.ts +1693 -0
- package/src/views.ts +164 -0
- package/src/widgets/design-system.ts +93 -0
- package/src/widgets/editor-appearance.ts +151 -0
- package/src/widgets/editor-material.ts +83 -0
- package/src/widgets/icon-set-registry.ts +105 -0
- package/src/widgets/index.ts +71 -0
- package/src/widgets/inspector-widgets/AlignmentGrid.tsx +182 -0
- package/src/widgets/inspector-widgets/AssetSlotPicker.tsx +123 -0
- package/src/widgets/inspector-widgets/BorderEditor.tsx +309 -0
- package/src/widgets/inspector-widgets/ColorPicker.tsx +549 -0
- package/src/widgets/inspector-widgets/CurveEditor.tsx +359 -0
- package/src/widgets/inspector-widgets/FilterEditor.tsx +108 -0
- package/src/widgets/inspector-widgets/FontPicker.tsx +191 -0
- package/src/widgets/inspector-widgets/GradientEditor.tsx +623 -0
- package/src/widgets/inspector-widgets/ScrubbableInput.tsx +180 -0
- package/src/widgets/inspector-widgets/ShadowEditor.tsx +319 -0
- package/src/widgets/inspector-widgets/color-utils.ts +201 -0
- package/src/widgets/inspector-widgets/curve-utils.ts +212 -0
- package/src/widgets/inspector-widgets/index.ts +25 -0
- package/src/widgets/inspector-widgets/shared.tsx +140 -0
- package/src/widgets/interactive-edit-scope.ts +33 -0
- package/src/widgets/patterns/Dialog.tsx +140 -0
- package/src/widgets/patterns/Fields.tsx +44 -0
- package/src/widgets/patterns/List.tsx +25 -0
- package/src/widgets/patterns/StateSurface.tsx +40 -0
- package/src/widgets/patterns/Surfaces.tsx +122 -0
- package/src/widgets/patterns/Tabs.tsx +80 -0
- package/src/widgets/patterns/Toolbar.tsx +72 -0
- package/src/widgets/patterns/Tree.tsx +72 -0
- package/src/widgets/primitives/AnchoredMenu.tsx +260 -0
- package/src/widgets/primitives/Button.tsx +62 -0
- package/src/widgets/primitives/ColorInput.tsx +78 -0
- package/src/widgets/primitives/DraftTextInput.tsx +63 -0
- package/src/widgets/primitives/EditorIcon.tsx +157 -0
- package/src/widgets/primitives/FormControls.tsx +88 -0
- package/src/widgets/primitives/HoverPreview.tsx +96 -0
- package/src/widgets/primitives/JsonInput.tsx +113 -0
- package/src/widgets/primitives/Layout.tsx +100 -0
- package/src/widgets/primitives/Menu.tsx +161 -0
- package/src/widgets/primitives/NumberInput.tsx +169 -0
- package/src/widgets/primitives/Panel.tsx +80 -0
- package/src/widgets/primitives/SectionHeader.tsx +77 -0
- package/src/widgets/primitives/Text.tsx +54 -0
- package/src/widgets/primitives/ThemeRootPortal.tsx +52 -0
- package/src/widgets/primitives/Tooltip.tsx +204 -0
- package/src/widgets/primitives/Vec3Input.tsx +70 -0
- package/src/widgets/primitives/banner-tones.ts +32 -0
- package/src/widgets/primitives/clamp-to-viewport.ts +44 -0
- package/src/widgets/primitives/editor-icons.ts +254 -0
- package/src/widgets/primitives/panel-header-styles.ts +42 -0
- package/src/widgets/theme.ts +2841 -0
- 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';
|