@volter/editor-core 0.5.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BUNDLED_NOTICES +1527 -0
- package/LICENSE +686 -0
- package/LICENSE-APACHE +202 -0
- package/NOTICE +18 -0
- package/README.md +24 -0
- package/dist/build/chunk-JS4D4XZ3.js +175 -0
- package/dist/build/chunk-JS4D4XZ3.js.map +7 -0
- package/dist/build/vite-plugin-product-contributions.js +100 -0
- package/dist/build/vite-plugin-product-contributions.js.map +7 -0
- package/dist/build/vite-plugin-shared-react.js +25 -0
- package/dist/build/vite-plugin-shared-react.js.map +7 -0
- package/dist/build/vite-plugin-shared-three.js +86 -0
- package/dist/build/vite-plugin-shared-three.js.map +7 -0
- package/dist/server/chunk-KMJC7AGO.js +98 -0
- package/dist/server/chunk-KMJC7AGO.js.map +7 -0
- package/dist/server/chunk-PSILUMGS.js +46 -0
- package/dist/server/chunk-PSILUMGS.js.map +7 -0
- package/dist/server/frame-proxy.js +255 -0
- package/dist/server/frame-proxy.js.map +7 -0
- package/dist/server/open-browser.js +53 -0
- package/dist/server/open-browser.js.map +7 -0
- package/dist/server/process-shutdown.js +127 -0
- package/dist/server/process-shutdown.js.map +7 -0
- package/dist/server/session-registry.js +141 -0
- package/dist/server/session-registry.js.map +7 -0
- package/dist/server/spawn-opener.js +11 -0
- package/dist/server/spawn-opener.js.map +7 -0
- package/dist/server/worktree-identity.js +11 -0
- package/dist/server/worktree-identity.js.map +7 -0
- package/dist-server/packaged.mjs +88816 -0
- package/package.json +118 -0
- package/scripts/build-plugins.mjs +14 -0
- package/scripts/build-server.mjs +26 -0
- package/scripts/build-session.mjs +9 -0
- package/server/account-credentials.ts +60 -0
- package/server/account-service.ts +1434 -0
- package/server/adapter-region-includes.ts +47 -0
- package/server/asset-catalog-v2.ts +175 -0
- package/server/asset-history-snapshots.ts +196 -0
- package/server/asset-ledger-store.ts +195 -0
- package/server/asset-library-routes.ts +1595 -0
- package/server/blender-wasm-artifact.ts +430 -0
- package/server/boot-timings.ts +106 -0
- package/server/canonical-path.ts +50 -0
- package/server/checkout-workspace-preflight.ts +349 -0
- package/server/cloud-asset-catalog.ts +158 -0
- package/server/coding-inference-launch.ts +237 -0
- package/server/collaboration-account-client.ts +202 -0
- package/server/collaboration-attribution.ts +122 -0
- package/server/collaboration-session.ts +934 -0
- package/server/comfyui-bridge.ts +248 -0
- package/server/console-ledger.ts +499 -0
- package/server/creation-site-transform.ts +304 -0
- package/server/creation-site-write.ts +648 -0
- package/server/data-file-serialize.ts +158 -0
- package/server/editor-brand-html.ts +72 -0
- package/server/editor-control-socket.ts +366 -0
- package/server/editor-server-options.ts +190 -0
- package/server/editor-server.ts +1483 -0
- package/server/editor-sse.ts +352 -0
- package/server/engine-provenance.ts +169 -0
- package/server/engine-source-restart.ts +117 -0
- package/server/frame-bridge.ts +115 -0
- package/server/frame-proxy.ts +490 -0
- package/server/frame-workbench.ts +259 -0
- package/server/frontend-handoff.ts +229 -0
- package/server/game-globals-shadow.ts +113 -0
- package/server/gameplay-session-retention.ts +149 -0
- package/server/gameplay-sessions.ts +123 -0
- package/server/generation-jobs.ts +201 -0
- package/server/generation-reconciler.ts +137 -0
- package/server/generative-execution-context.ts +59 -0
- package/server/git-workflow.ts +612 -0
- package/server/harness-chat-caller.ts +36 -0
- package/server/harness-chat-service.ts +1681 -0
- package/server/idle-shutdown.ts +170 -0
- package/server/js-profiling-policy.ts +52 -0
- package/server/launcher-settings.ts +84 -0
- package/server/local-asset-catalog.ts +410 -0
- package/server/managed-account-defaults.ts +22 -0
- package/server/mock-control-plane.ts +540 -0
- package/server/model-import-conversion.ts +345 -0
- package/server/native-credential-store.ts +162 -0
- package/server/open-browser.ts +118 -0
- package/server/packaged.ts +1192 -0
- package/server/play-stall.ts +126 -0
- package/server/process-shutdown.ts +218 -0
- package/server/product-presets.ts +55 -0
- package/server/project-build-artifact.ts +95 -0
- package/server/project-components.ts +100 -0
- package/server/project-dependency-invalidation.ts +114 -0
- package/server/project-file-scan.ts +235 -0
- package/server/project-hmr-files.ts +215 -0
- package/server/project-install-roots.ts +210 -0
- package/server/project-kinds.ts +71 -0
- package/server/project-mcp-servers.ts +82 -0
- package/server/project-module-freshness.ts +109 -0
- package/server/project-module-instance.ts +375 -0
- package/server/project-optimize-deps-entries.ts +827 -0
- package/server/project-output-writer.ts +679 -0
- package/server/project-package-origin.ts +63 -0
- package/server/project-root-surface.ts +831 -0
- package/server/project-scratch-path.ts +47 -0
- package/server/project-script-hmr.ts +619 -0
- package/server/project-serving-plugins.ts +236 -0
- package/server/project-tools.ts +653 -0
- package/server/project-validation.ts +250 -0
- package/server/project-verbs.ts +127 -0
- package/server/project-view.ts +52 -0
- package/server/project-watch.ts +1134 -0
- package/server/project-work-coordinator.ts +288 -0
- package/server/provider-credentials.ts +331 -0
- package/server/recent-projects-store.ts +98 -0
- package/server/redact-secrets.ts +71 -0
- package/server/repository-presence.ts +267 -0
- package/server/routes/account.ts +357 -0
- package/server/routes/agents.ts +60 -0
- package/server/routes/assets.ts +154 -0
- package/server/routes/build.ts +13 -0
- package/server/routes/collaboration.ts +595 -0
- package/server/routes/configurations.ts +419 -0
- package/server/routes/context.ts +264 -0
- package/server/routes/control-plane.ts +1811 -0
- package/server/routes/logs.ts +272 -0
- package/server/routes/project-identity.ts +302 -0
- package/server/routes/project-open.ts +429 -0
- package/server/routes/project-source.ts +686 -0
- package/server/routes/project-state.ts +383 -0
- package/server/routes/relay.ts +1029 -0
- package/server/routes/route-helpers.ts +29 -0
- package/server/routes/served-modules.ts +138 -0
- package/server/routes/session-tabs.ts +196 -0
- package/server/routes/settings.ts +121 -0
- package/server/routes/share-control.ts +486 -0
- package/server/routes/themes.ts +116 -0
- package/server/routes/tools.ts +230 -0
- package/server/routes/worktrees.ts +595 -0
- package/server/scoped-game-css.ts +461 -0
- package/server/server-utils.ts +1194 -0
- package/server/session-product.ts +112 -0
- package/server/session-registry.ts +230 -0
- package/server/share-claims.ts +138 -0
- package/server/share-host.ts +526 -0
- package/server/share-session-gateway.ts +1362 -0
- package/server/share-tunnel.ts +123 -0
- package/server/spawn-opener.ts +74 -0
- package/server/support/play/log-format.ts +76 -0
- package/server/support/play/session-record.ts +199 -0
- package/server/support/project/build-discipline.ts +718 -0
- package/server/support/project/inspection-node.ts +119 -0
- package/server/support/project/log-naming.ts +54 -0
- package/server/support/project/provenance.ts +290 -0
- package/server/support/project/run-name.ts +18 -0
- package/server/support/project/session-journal.ts +830 -0
- package/server/support/project/shared.ts +327 -0
- package/server/tab-bootstrap.ts +62 -0
- package/server/tab-heartbeat.ts +477 -0
- package/server/tab-lifecycle.ts +550 -0
- package/server/tab-presence.ts +1508 -0
- package/server/team-agent-mirror.ts +95 -0
- package/server/twin-auth.ts +138 -0
- package/server/vendored-lock-recorder.ts +968 -0
- package/server/worktree-identity.ts +121 -0
- package/server/worktree-management.ts +398 -0
- package/server/worktree-retention.d.mts +13 -0
- package/server/worktree-retention.mjs +205 -0
- package/src/EditorContext.tsx +169 -0
- package/src/account.ts +333 -0
- package/src/action-registry.ts +532 -0
- package/src/active-product.ts +74 -0
- package/src/active-project.ts +155 -0
- package/src/adapter-editor-config.ts +25 -0
- package/src/adapter-observation.ts +49 -0
- package/src/animation/stage-transport.ts +379 -0
- package/src/animation/three-clips-subject.ts +172 -0
- package/src/api/asset-library-wire.ts +45 -0
- package/src/api/assets.ts +365 -0
- package/src/api/base.ts +10 -0
- package/src/api/build.ts +99 -0
- package/src/api/git-wire.ts +56 -0
- package/src/api/logs.ts +92 -0
- package/src/api/project-identity.ts +74 -0
- package/src/api/project-open.ts +355 -0
- package/src/api/project-source.ts +162 -0
- package/src/api/project-state.ts +107 -0
- package/src/api/relay.ts +268 -0
- package/src/api/settings.ts +36 -0
- package/src/api/themes.ts +45 -0
- package/src/api/worktrees.ts +257 -0
- package/src/asset-compare-core.ts +171 -0
- package/src/asset-compare.ts +294 -0
- package/src/asset-editor-context.tsx +100 -0
- package/src/asset-events.ts +97 -0
- package/src/asset-inspector-actions.ts +87 -0
- package/src/asset-preview-framing.ts +357 -0
- package/src/asset-preview.ts +2802 -0
- package/src/asset-selection-viewer-registry.ts +113 -0
- package/src/asset-selection.ts +133 -0
- package/src/asset-workflow/asset-capabilities.ts +344 -0
- package/src/asset-workflow/asset-import-jobs.ts +106 -0
- package/src/asset-workflow/asset-ledger-backend.ts +126 -0
- package/src/asset-workflow/asset-ledger.ts +156 -0
- package/src/asset-workflow/asset-materialization-report.ts +140 -0
- package/src/asset-workflow/asset-pack-manifest.ts +320 -0
- package/src/asset-workflow/asset-types.ts +142 -0
- package/src/asset-workflow/asset-workflow-quality.ts +61 -0
- package/src/asset-workflow/audio-preview-player.ts +193 -0
- package/src/asset-workflow/audio-waveform.ts +22 -0
- package/src/asset-workflow/cloud-asset-client.ts +263 -0
- package/src/asset-workflow/folder-preview.ts +345 -0
- package/src/asset-workflow/hosted-asset-materialization.ts +236 -0
- package/src/asset-workflow/image-view-scale.ts +32 -0
- package/src/asset-workflow/import-contract.ts +124 -0
- package/src/asset-workflow/ledger-write-lock.ts +244 -0
- package/src/asset-workflow/model-inspection.ts +818 -0
- package/src/asset-workflow/pixi-spritesheet.ts +197 -0
- package/src/asset-workflow/preview-resource-lifetime.ts +44 -0
- package/src/asset-workflow/project-asset-commands.ts +23 -0
- package/src/asset-workflow/project-asset-health.ts +139 -0
- package/src/asset-workflow/project-asset-operations.ts +154 -0
- package/src/asset-workflow/project-asset-roots.ts +68 -0
- package/src/asset-workflow/project-content.ts +288 -0
- package/src/asset-workflow/project-source-index.ts +550 -0
- package/src/asset-workflow/thumbnail-system.ts +256 -0
- package/src/authoring/active-adapter.ts +199 -0
- package/src/authoring/active-systems.ts +422 -0
- package/src/authoring/adapter-key.ts +18 -0
- package/src/authoring/authoring-asset-url.ts +27 -0
- package/src/authoring/bootstrap-state.ts +49 -0
- package/src/authoring/boundary-authoring-adapter.ts +184 -0
- package/src/authoring/breakpoint-state.ts +43 -0
- package/src/authoring/canvas-scene-guides.ts +76 -0
- package/src/authoring/component-instance-root.ts +171 -0
- package/src/authoring/composite-authoring-adapter.ts +2110 -0
- package/src/authoring/consumer-actions.ts +520 -0
- package/src/authoring/css-numeric-style.ts +97 -0
- package/src/authoring/design-time-layers.ts +849 -0
- package/src/authoring/design-time-mount-registry.ts +235 -0
- package/src/authoring/design-time-settle.ts +343 -0
- package/src/authoring/edit-mode-authoring.ts +619 -0
- package/src/authoring/eyedropper-session.ts +60 -0
- package/src/authoring/instance-source-menu-register.ts +13 -0
- package/src/authoring/instance-source-menu.ts +135 -0
- package/src/authoring/layered-pick.ts +183 -0
- package/src/authoring/live-gesture-lock.ts +50 -0
- package/src/authoring/live-object-transform.ts +62 -0
- package/src/authoring/mount-failure-report.ts +154 -0
- package/src/authoring/mounted-root-subjects.ts +144 -0
- package/src/authoring/no-authoring-adapter.ts +55 -0
- package/src/authoring/null-inspection-subjects.tsx +75 -0
- package/src/authoring/object3d-document-persistence.ts +106 -0
- package/src/authoring/object3d-document-session-registry.ts +120 -0
- package/src/authoring/object3d-document-session.ts +1326 -0
- package/src/authoring/object3d-gesture-controller.ts +113 -0
- package/src/authoring/panel-authoring.ts +121 -0
- package/src/authoring/prefab-instance-inspector-section.tsx +237 -0
- package/src/authoring/prefab-instance-section-model.ts +55 -0
- package/src/authoring/project-authoring-session.ts +105 -0
- package/src/authoring/provenance.ts +99 -0
- package/src/authoring/quarks-particle-systems.ts +19 -0
- package/src/authoring/react-canvas-navigation.ts +255 -0
- package/src/authoring/react-design-canvas-style.ts +20 -0
- package/src/authoring/react-story-board.ts +937 -0
- package/src/authoring/selection-scope.ts +195 -0
- package/src/authoring/shell-document-ops.ts +169 -0
- package/src/authoring/shell-object3d-document-write-policy.ts +108 -0
- package/src/authoring/shell-viewport-policy.ts +48 -0
- package/src/authoring/source-object3d-authoring-adapter.ts +526 -0
- package/src/authoring/stories-scope.ts +35 -0
- package/src/authoring/story-board-chrome-fit.ts +107 -0
- package/src/authoring/story-board-presentation.ts +111 -0
- package/src/authoring/three-projection-core.ts +226 -0
- package/src/authoring/viewport-pick-context.ts +40 -0
- package/src/authoring/viewport-raycast.ts +240 -0
- package/src/authoring/viewport-tool-context.ts +73 -0
- package/src/authoring/world-canvas-viewport-state.ts +35 -0
- package/src/authoring/world-hidden-viewport.ts +152 -0
- package/src/authoring/world-pan-state.ts +198 -0
- package/src/authoring/world-session-state.ts +101 -0
- package/src/authoring/write-pipe.ts +173 -0
- package/src/availability-tick.ts +66 -0
- package/src/bitmap-label.ts +120 -0
- package/src/blender-tab-metrics.ts +161 -0
- package/src/board-open-actions.ts +20 -0
- package/src/boot-routing.ts +391 -0
- package/src/build-identity.ts +15 -0
- package/src/bytes-codec.ts +62 -0
- package/src/camera-authoring.ts +175 -0
- package/src/cancellation-reason.ts +58 -0
- package/src/canvas-preview-frames.ts +482 -0
- package/src/capture-camera-pose.ts +77 -0
- package/src/chrome-registry.ts +159 -0
- package/src/chrome-slot-registry.ts +91 -0
- package/src/collaboration-client.ts +264 -0
- package/src/collaboration-presence.ts +41 -0
- package/src/command-dispatch.ts +19 -0
- package/src/command-listener.ts +2743 -0
- package/src/command-registry.ts +70 -0
- package/src/component-board-registry.ts +205 -0
- package/src/component-states-registry.ts +200 -0
- package/src/components/AgentPresentationNotice.tsx +75 -0
- package/src/components/AlignToolbar.tsx +204 -0
- package/src/components/AppRoot.tsx +394 -0
- package/src/components/ApplicationMenus.tsx +415 -0
- package/src/components/AssetBrowser.tsx +2843 -0
- package/src/components/AssetEditorShell.tsx +216 -0
- package/src/components/AssetInspectorToolSection.tsx +124 -0
- package/src/components/BoardRulers.tsx +354 -0
- package/src/components/CameraInfo.tsx +81 -0
- package/src/components/CanvasSceneViewport.tsx +556 -0
- package/src/components/CapabilityCoverageSection.tsx +185 -0
- package/src/components/CenterDocuments.tsx +22 -0
- package/src/components/ChromeSlot.tsx +20 -0
- package/src/components/CodeView.tsx +470 -0
- package/src/components/CollaborationHeaderControl.css +74 -0
- package/src/components/CompactInspectorCard.tsx +190 -0
- package/src/components/CompactInspectorShell.tsx +39 -0
- package/src/components/ConsolePanel.css +55 -0
- package/src/components/ConsolePanel.tsx +270 -0
- package/src/components/DefaultEditorLayout.tsx +106 -0
- package/src/components/DocumentHeaderStrip.tsx +96 -0
- package/src/components/DocumentShelfRail.tsx +45 -0
- package/src/components/DocumentThumbnail.tsx +345 -0
- package/src/components/EditorLeaseGuard.tsx +372 -0
- package/src/components/ErrorBanner.tsx +123 -0
- package/src/components/FolderPreviewTile.tsx +159 -0
- package/src/components/GameHierarchy.tsx +3842 -0
- package/src/components/GameplaySessionTimeline.tsx +295 -0
- package/src/components/InspectionProjection.tsx +968 -0
- package/src/components/Inspector.tsx +233 -0
- package/src/components/InspectorCanvasPreview.tsx +35 -0
- package/src/components/InspectorFieldsSection.tsx +290 -0
- package/src/components/InspectorObjectPreview.tsx +57 -0
- package/src/components/InspectorStoriesSection.tsx +92 -0
- package/src/components/InspectorToolSection.tsx +96 -0
- package/src/components/InspectorTransformSection.tsx +245 -0
- package/src/components/LightExplorerPanel.tsx +433 -0
- package/src/components/MediaProperties.tsx +145 -0
- package/src/components/NonThreeAuthoringBootstrap.tsx +19 -0
- package/src/components/Object3DDocumentToolbar.css +100 -0
- package/src/components/Object3DDocumentToolbar.tsx +454 -0
- package/src/components/Object3DDocumentViewport.tsx +58 -0
- package/src/components/ProjectHeader.css +617 -0
- package/src/components/ProjectHeader.tsx +328 -0
- package/src/components/ProjectLayout.tsx +249 -0
- package/src/components/ReactCanvasControls.tsx +284 -0
- package/src/components/RootSelectionOverlay.tsx +3162 -0
- package/src/components/RootTextEditor.tsx +79 -0
- package/src/components/SaveStatus.tsx +70 -0
- package/src/components/StageHost.tsx +1954 -0
- package/src/components/StageOverlays.tsx +21 -0
- package/src/components/StartupErrorScreen.tsx +76 -0
- package/src/components/StartupLoadingScreen.tsx +65 -0
- package/src/components/StatsOverlay.tsx +78 -0
- package/src/components/SurfaceStateOverlay.tsx +24 -0
- package/src/components/ToolContributionSurfaces.tsx +65 -0
- package/src/components/ToolHost.tsx +370 -0
- package/src/components/ToolObject3DPreview.tsx +39 -0
- package/src/components/Toolbar.tsx +595 -0
- package/src/components/TransientHint.tsx +44 -0
- package/src/components/TransportStrip.tsx +174 -0
- package/src/components/VersionControlSection.tsx +470 -0
- package/src/components/VgaiLogo.css +83 -0
- package/src/components/VgaiLogo.tsx +35 -0
- package/src/components/ViewportControlsHint.tsx +60 -0
- package/src/components/ViewportFurniture.tsx +401 -0
- package/src/components/ViewportOverlay.tsx +145 -0
- package/src/components/ViewportOverlaysMenu.tsx +153 -0
- package/src/components/ViewportShadingMenu.tsx +300 -0
- package/src/components/ViewportViewMenu.tsx +101 -0
- package/src/components/WorkspaceDocumentSurface.tsx +204 -0
- package/src/components/WorkspaceUtilitySurface.tsx +22 -0
- package/src/components/WorktreeSwitcher.css +239 -0
- package/src/components/WorktreeSwitcher.tsx +890 -0
- package/src/components/account-documents.tsx +1162 -0
- package/src/components/asset-documents.tsx +812 -0
- package/src/components/asset-editor-persistence.ts +216 -0
- package/src/components/asset-selection-section.tsx +535 -0
- package/src/components/asset-thumbnails.tsx +312 -0
- package/src/components/asset-viewers/AudioViewer.tsx +201 -0
- package/src/components/asset-viewers/EntityModelDocument.tsx +122 -0
- package/src/components/asset-viewers/EnvironmentAssetDocument.tsx +440 -0
- package/src/components/asset-viewers/GenericJsonViewer.tsx +102 -0
- package/src/components/asset-viewers/ImageViewer.tsx +300 -0
- package/src/components/asset-viewers/JsonAssetDocument.tsx +93 -0
- package/src/components/asset-viewers/LiveModuleDocument.tsx +417 -0
- package/src/components/asset-viewers/LutAssetDocument.tsx +444 -0
- package/src/components/asset-viewers/ModelAssetDocument.tsx +105 -0
- package/src/components/asset-viewers/Object3DPreview.tsx +359 -0
- package/src/components/asset-viewers/OnlineAssetDetail.tsx +421 -0
- package/src/components/asset-viewers/PasteboardModuleDocument.tsx +67 -0
- package/src/components/asset-viewers/QuarksAssetDocument.tsx +526 -0
- package/src/components/asset-viewers/ShaderAssetDocument.tsx +743 -0
- package/src/components/asset-viewers/SourceAssetViewer.tsx +281 -0
- package/src/components/asset-viewers/SpritesheetSpriteView.tsx +102 -0
- package/src/components/asset-viewers/VideoViewer.tsx +101 -0
- package/src/components/asset-viewers/shader-source.ts +144 -0
- package/src/components/asset-workflow.css +731 -0
- package/src/components/board-guides.ts +150 -0
- package/src/components/compact-inspector.css +539 -0
- package/src/components/core-utilities.tsx +90 -0
- package/src/components/editor-notifications.css +40 -0
- package/src/components/engine-workspace.css +274 -0
- package/src/components/inspector-preview-section.tsx +238 -0
- package/src/components/inspector-property-grouping.ts +64 -0
- package/src/components/inspector-revert-label.ts +20 -0
- package/src/components/inspector-selection.ts +42 -0
- package/src/components/inspector-stories-gating.ts +171 -0
- package/src/components/inspector-transform-subject.ts +11 -0
- package/src/components/inspector-transform.ts +75 -0
- package/src/components/kind-documents.tsx +500 -0
- package/src/components/palette-action-publisher.tsx +140 -0
- package/src/components/primitives/DraftColorInput.tsx +74 -0
- package/src/components/product-shell.css +1829 -0
- package/src/components/project-tool-documents.tsx +410 -0
- package/src/components/scene-documents.tsx +223 -0
- package/src/components/stage-keyboard.tsx +37 -0
- package/src/components/stage-overlay-set.tsx +107 -0
- package/src/components/stage-presence-markers.ts +478 -0
- package/src/components/standard-viewport-dressing.ts +417 -0
- package/src/components/status-contributions.tsx +403 -0
- package/src/components/tool-documents.tsx +309 -0
- package/src/components/tool-schema-form.tsx +262 -0
- package/src/components/use-after-paint.ts +41 -0
- package/src/components/use-project-image-assets.ts +86 -0
- package/src/components/viewport-header-controls.css +90 -0
- package/src/components/viewport-surface-status.tsx +55 -0
- package/src/components/workspace-history.ts +32 -0
- package/src/components/workspace-static-panel-registry.tsx +152 -0
- package/src/components/workspace-surfaces.css +621 -0
- package/src/components/world-documents.tsx +586 -0
- package/src/components/world-overlay-gestures.ts +1694 -0
- package/src/composite-screenshot.ts +1641 -0
- package/src/console-sync.ts +131 -0
- package/src/constraint-helper.ts +338 -0
- package/src/content-entry-source-registry.ts +184 -0
- package/src/coverage/authoring-seam-evidence.ts +300 -0
- package/src/coverage/canvas-reveal.ts +192 -0
- package/src/coverage/design-time-surfaces.ts +101 -0
- package/src/coverage/live-seam-evidence.ts +11 -0
- package/src/coverage/ontology-invariants.ts +466 -0
- package/src/coverage/session-vitals.ts +501 -0
- package/src/coverage/system-seam-evidence.ts +72 -0
- package/src/crash-null-boundary.ts +36 -0
- package/src/creation-site-edit.ts +1479 -0
- package/src/creation-site-registry.ts +160 -0
- package/src/delegate-harness-registry.ts +143 -0
- package/src/document-context-registry.ts +177 -0
- package/src/document-open-registry.ts +200 -0
- package/src/document-preview-source.ts +20 -0
- package/src/document-renderer-session.ts +138 -0
- package/src/editor-api.ts +46 -0
- package/src/editor-chrome-capture.ts +139 -0
- package/src/editor-commands.ts +164 -0
- package/src/editor-console.ts +563 -0
- package/src/editor-current-view.ts +82 -0
- package/src/editor-document-probe.ts +881 -0
- package/src/editor-git-client.ts +115 -0
- package/src/editor-host-door.ts +462 -0
- package/src/editor-hotkeys.ts +842 -0
- package/src/editor-lease-view.ts +39 -0
- package/src/editor-lease.ts +415 -0
- package/src/editor-mode.ts +19 -0
- package/src/editor-notifications.ts +140 -0
- package/src/editor-presence.ts +563 -0
- package/src/editor-presentation-activity.ts +50 -0
- package/src/editor-presentation-notice.ts +42 -0
- package/src/editor-runtime.tsx +145 -0
- package/src/editor-server-response.ts +86 -0
- package/src/editor-session-attribution.ts +75 -0
- package/src/editor-session-mode.ts +54 -0
- package/src/editor-shell-store.ts +1304 -0
- package/src/editor-state-facets.ts +74 -0
- package/src/editor-styles.css +33 -0
- package/src/editor-view-presentation.ts +810 -0
- package/src/editor-viewport.ts +5302 -0
- package/src/entity-lod.ts +31 -0
- package/src/entity-object.ts +91 -0
- package/src/files/file-provider.ts +62 -0
- package/src/files/project-files.ts +264 -0
- package/src/finders/index.ts +136 -0
- package/src/finders/scenes-from-entrypoint-selection.ts +387 -0
- package/src/frame/bridge.tsx +1408 -0
- package/src/frame/product.ts +77 -0
- package/src/gameplay-dom-recording.ts +319 -0
- package/src/gameplay-export-state.ts +14 -0
- package/src/gameplay-replay.ts +417 -0
- package/src/gameplay-session-time.ts +9 -0
- package/src/gameplay-sessions.ts +204 -0
- package/src/harness-chat-types.ts +253 -0
- package/src/hierarchy-component-marks.ts +298 -0
- package/src/hierarchy-drop.ts +91 -0
- package/src/hierarchy-expansion-state.ts +80 -0
- package/src/hierarchy-header-slot.ts +52 -0
- package/src/hierarchy-internals.ts +197 -0
- package/src/hierarchy-kind-icon.ts +217 -0
- package/src/hierarchy-mark-reader.ts +73 -0
- package/src/hierarchy-menu-registry.ts +67 -0
- package/src/hierarchy-node-rows.ts +307 -0
- package/src/hierarchy-panel-view.ts +280 -0
- package/src/hierarchy-projection.ts +76 -0
- package/src/hierarchy-row-cache.ts +243 -0
- package/src/hierarchy-row-model.ts +308 -0
- package/src/hierarchy-rows.ts +11 -0
- package/src/hierarchy-walk.ts +86 -0
- package/src/history/editor-session.ts +25 -0
- package/src/history/history-commands.ts +147 -0
- package/src/history/history-delegate.ts +163 -0
- package/src/history/history-limit-notices.ts +43 -0
- package/src/history/history-service.ts +1173 -0
- package/src/history/persistence-coordinator.ts +35 -0
- package/src/history/project-file-history.ts +386 -0
- package/src/history/project-root-history-backends.ts +139 -0
- package/src/history/resource-registry.ts +209 -0
- package/src/history/snapshot-store.ts +103 -0
- package/src/history/source-history-backend.ts +546 -0
- package/src/history/types.ts +124 -0
- package/src/hmr-registration-group.ts +67 -0
- package/src/hmr-stable-react-context.ts +23 -0
- package/src/hotkeys.ts +188 -0
- package/src/inference-diagnostics.ts +69 -0
- package/src/initial-project.ts +80 -0
- package/src/inspection/active-subject.ts +578 -0
- package/src/inspection/active-surface.ts +142 -0
- package/src/inspection/compose.ts +1064 -0
- package/src/inspection/display.ts +170 -0
- package/src/inspection/document-subject.ts +109 -0
- package/src/inspection/game-subject.ts +85 -0
- package/src/inspection/model.ts +542 -0
- package/src/inspection/null-subject.ts +115 -0
- package/src/inspection/serialize.ts +357 -0
- package/src/inspection/use-active-inspection.ts +180 -0
- package/src/inspector-presentation.ts +201 -0
- package/src/inspector-section-registry.ts +221 -0
- package/src/instance-source-actions.ts +163 -0
- package/src/instanced-presentation.ts +164 -0
- package/src/js-heap.ts +71 -0
- package/src/key-actions.ts +91 -0
- package/src/keymap-presets.ts +401 -0
- package/src/layout-policy.ts +31 -0
- package/src/learn-links.ts +73 -0
- package/src/light-explorer-model.ts +134 -0
- package/src/live-canvas-frame.ts +55 -0
- package/src/live-document.ts +279 -0
- package/src/live-module-source.ts +230 -0
- package/src/live-session-registry.ts +220 -0
- package/src/live-transition.ts +633 -0
- package/src/manifest-project.ts +107 -0
- package/src/model-thumbnail.ts +523 -0
- package/src/native-selection-style.ts +202 -0
- package/src/object3d-document-write-policy.ts +137 -0
- package/src/packaged-runtime.ts +108 -0
- package/src/palettes/maya.palette.json +57 -0
- package/src/palettes/substance.palette.json +57 -0
- package/src/pasteboard-module.ts +81 -0
- package/src/performance-profiler.ts +367 -0
- package/src/performance-sources.ts +69 -0
- package/src/play-boot-phase.ts +145 -0
- package/src/presentation-surface.ts +248 -0
- package/src/project-adapter.ts +1143 -0
- package/src/project-asset-refresh.ts +26 -0
- package/src/project-declaration-refresh.ts +31 -0
- package/src/project-local-state.ts +118 -0
- package/src/project-manager.ts +243 -0
- package/src/project-module-changes.ts +163 -0
- package/src/project-module-split.ts +266 -0
- package/src/project-provenance.ts +115 -0
- package/src/project-ready.ts +42 -0
- package/src/project-session-reset.ts +67 -0
- package/src/project-shape.ts +68 -0
- package/src/project-tool-discovery.ts +66 -0
- package/src/project-tools.ts +107 -0
- package/src/project-work-types.ts +149 -0
- package/src/projection/three.ts +898 -0
- package/src/projection/types.ts +44 -0
- package/src/readiness.ts +113 -0
- package/src/reflection-probe-helper.ts +142 -0
- package/src/reported-play-state.ts +90 -0
- package/src/resolve-relative-specifier.ts +33 -0
- package/src/scene-document-plan.ts +315 -0
- package/src/scene-framing.ts +315 -0
- package/src/scene-live-open.ts +210 -0
- package/src/scene-view-fog.ts +89 -0
- package/src/scoped-game-css.ts +152 -0
- package/src/session-orphan-record.ts +193 -0
- package/src/session-tombstone.ts +126 -0
- package/src/settings/settings-provider.ts +82 -0
- package/src/settings-store.ts +345 -0
- package/src/shared-view-restore.ts +42 -0
- package/src/shell-store-door.ts +45 -0
- package/src/source-conflict.ts +122 -0
- package/src/spatial-handle-visuals.ts +332 -0
- package/src/stage-context.ts +341 -0
- package/src/stage-store-registry.ts +63 -0
- package/src/stale-chunk-recovery.ts +34 -0
- package/src/state-report-deferral.ts +73 -0
- package/src/storage/host-files-storage.ts +97 -0
- package/src/storage/http-storage.ts +174 -0
- package/src/storage/index.ts +75 -0
- package/src/storage/mem-storage.ts +149 -0
- package/src/storage/path-lock.ts +44 -0
- package/src/storage/paths.ts +26 -0
- package/src/storage/types.ts +116 -0
- package/src/stories/StoryComponentThumbnail.tsx +184 -0
- package/src/stories/StoryPreviewMount.tsx +306 -0
- package/src/stories/component-content-source.tsx +106 -0
- package/src/stories/component-states-source.ts +78 -0
- package/src/stories/compose-project-stories.ts +255 -0
- package/src/stories/pixi-story-model.ts +30 -0
- package/src/stories/prefabs-finder.ts +54 -0
- package/src/stories/prefabs-from-stories.ts +182 -0
- package/src/stories/project-story-discovery.ts +78 -0
- package/src/stories/project-story-regions.ts +24 -0
- package/src/stories/story-actions.ts +54 -0
- package/src/stories/story-capture-command.ts +124 -0
- package/src/stories/story-capture.ts +584 -0
- package/src/stories/story-declared-medium.ts +126 -0
- package/src/stories/story-discovery.ts +176 -0
- package/src/stories/story-document-openers.ts +36 -0
- package/src/stories/story-dom-runtime.ts +78 -0
- package/src/stories/story-grouping.ts +111 -0
- package/src/stories/story-lane.ts +88 -0
- package/src/stories/story-mount-turn.ts +27 -0
- package/src/stories/story-opener.ts +260 -0
- package/src/stories/story-pixi-preview.ts +408 -0
- package/src/stories/story-presentation.ts +215 -0
- package/src/stories/story-registry.ts +517 -0
- package/src/stories/story-three-preview.ts +807 -0
- package/src/stories/three-story-model.ts +96 -0
- package/src/story-three-preview-runtime.ts +56 -0
- package/src/surface-keyboard.ts +112 -0
- package/src/surface-state.ts +124 -0
- package/src/tab-bootstrap.js +628 -0
- package/src/tab-census.ts +198 -0
- package/src/tab-lifecycle-client.ts +196 -0
- package/src/theme-library.ts +844 -0
- package/src/theme-preference.ts +378 -0
- package/src/theme.css +3437 -0
- package/src/three-viewport/bone-selection-highlight.ts +119 -0
- package/src/three-viewport/camera-fit.ts +41 -0
- package/src/three-viewport/interactive-renderer.ts +132 -0
- package/src/three-viewport/selection-brackets.ts +310 -0
- package/src/three-viewport/selection-outline.ts +183 -0
- package/src/three-viewport/skeleton-helper.ts +61 -0
- package/src/three-viewport/source-color.ts +167 -0
- package/src/three-viewport/studio-environment.ts +96 -0
- package/src/three-viewport-presentation.ts +23 -0
- package/src/tool-contribution-play.ts +74 -0
- package/src/tool-loader.ts +1798 -0
- package/src/transform-mode-request.ts +57 -0
- package/src/transient-hint.ts +78 -0
- package/src/trigger-volume-helper.ts +116 -0
- package/src/ui-source/adapter-region-includes.ts +241 -0
- package/src/ui-source/ensure-import.ts +132 -0
- package/src/ui-source/file-region-resolver.ts +302 -0
- package/src/ui-source/inspect.ts +775 -0
- package/src/ui-source/oid-transform.ts +1845 -0
- package/src/ui-source/plan-csf-story.ts +196 -0
- package/src/ui-source/plan-extract-component.ts +421 -0
- package/src/ui-source/plan-fork-component.ts +621 -0
- package/src/ui-source/plan-named-style.ts +95 -0
- package/src/ui-source/plan-source-edit.ts +353 -0
- package/src/ui-source/r3f-contract-resolver.ts +327 -0
- package/src/ui-source/r3f-diagnostic-index.ts +165 -0
- package/src/ui-source/r3f-environment-binding.ts +133 -0
- package/src/ui-source/r3f-joint-binding.ts +251 -0
- package/src/ui-source/r3f-lod-binding.ts +91 -0
- package/src/ui-source/r3f-particle-binding.ts +235 -0
- package/src/ui-source/r3f-physics-binding.ts +483 -0
- package/src/ui-source/r3f-project-contracts.ts +444 -0
- package/src/ui-source/relative-import-specifier.ts +34 -0
- package/src/ui-source/reparent-guard.ts +544 -0
- package/src/ui-source/source-edit-request.ts +97 -0
- package/src/ui-source/source-write-backend.ts +618 -0
- package/src/ui-source/syntactic-prop-specs.ts +296 -0
- package/src/ui-source/tier-source-write-backend.ts +279 -0
- package/src/ui-source/ts-ast.ts +171 -0
- package/src/ui-source/utility-class-support.ts +169 -0
- package/src/ui-source/write-component-default.ts +133 -0
- package/src/ui-source/writer.ts +1989 -0
- package/src/viewport-activation-timings.ts +840 -0
- package/src/viewport-authoring-policy.ts +186 -0
- package/src/viewport-controls-hint.ts +57 -0
- package/src/viewport-door.ts +237 -0
- package/src/viewport-shading-boundary.ts +12 -0
- package/src/vite-error-surface.ts +141 -0
- package/src/wait-until.ts +37 -0
- package/src/workspace-areas.ts +156 -0
- package/src/workspace-aux-commands.ts +11 -0
- package/src/workspace-available-documents.ts +127 -0
- package/src/workspace-core-utilities.ts +31 -0
- package/src/workspace-document-ids.ts +59 -0
- package/src/workspace-document-registry.ts +612 -0
- package/src/workspace-document-restore.ts +145 -0
- package/src/workspace-host-commands.ts +141 -0
- package/src/workspace-persistence-gate.ts +40 -0
- package/src/workspace-play-utilities.ts +44 -0
- package/src/workspace-presets.ts +425 -0
- package/src/workspace-regions.ts +294 -0
- package/src/workspace-state-persistence.ts +536 -0
- package/src/workspace-static-panels.ts +73 -0
- package/src/workspace-status-registry.ts +121 -0
- package/src/workspace-style.ts +239 -0
- package/src/workspace-utility-commands.ts +74 -0
- package/src/workspace-utility-registry.ts +263 -0
- package/src/workspace-viewport-rect.ts +97 -0
- package/src/world-adoption.ts +115 -0
- package/src/world-document-routing.ts +104 -0
- package/vite-plugin-creation-site-write.ts +184 -0
- package/vite-plugin-creation-site.ts +80 -0
- package/vite-plugin-game-static.ts +303 -0
- package/vite-plugin-module-doorways.ts +336 -0
- package/vite-plugin-product-contributions.ts +197 -0
- package/vite-plugin-project-game-static.ts +125 -0
- package/vite-plugin-project-jsx-js.ts +65 -0
- package/vite-plugin-project-root-absolute-assets.ts +359 -0
- package/vite-plugin-shared-react.ts +420 -0
- package/vite-plugin-shared-three.ts +203 -0
- package/vite-plugin-ui-oid.ts +2106 -0
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Active system adapters the editor's authoring path coordinates with.
|
|
3
|
+
*
|
|
4
|
+
* A mounted game may expose `SystemAdapters` (physics / networking / …). The
|
|
5
|
+
* editor's gizmo-commit (through the `AuthoringAdapter.transforms` provider)
|
|
6
|
+
* consults THESE so it can:
|
|
7
|
+
* - freeze a physics-owned body while the gizmo edits it, then commit the edited
|
|
8
|
+
* pose to the body and resume (the `PhysicsAdapter` frozen-edit mode);
|
|
9
|
+
* - report a network-owned object's authority and keep remote/server-authoritative
|
|
10
|
+
* objects inspect-only (`NetworkingAdapter`).
|
|
11
|
+
*
|
|
12
|
+
* Play-mode (first-party) installs the first-party `RapierPhysicsAdapter` /
|
|
13
|
+
* `ColyseusNetworkingAdapter` here on enter and clears them on exit; an ingested
|
|
14
|
+
* game would install its own. The editor never names Rapier/Colyseus — only the
|
|
15
|
+
* `PhysicsAdapter` / `NetworkingAdapter` interfaces.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import type { SystemAdapters } from '@volter/editor-project/adapter';
|
|
19
|
+
import { nodeKeyedPhysics, type PhysicsAdapter } from '@volter/editor-project/adapter/system-adapter';
|
|
20
|
+
import { inspectSystemAdapterSeam } from '../coverage/system-seam-evidence';
|
|
21
|
+
|
|
22
|
+
let _systems: SystemAdapters = {};
|
|
23
|
+
let _editModeAudio: SystemAdapters['audio'] | null = null;
|
|
24
|
+
let _editModeNetworking: SystemAdapters['networking'] | null = null;
|
|
25
|
+
const _networkingListeners = new Set<() => void>();
|
|
26
|
+
const _audioListeners = new Set<() => void>();
|
|
27
|
+
const _navigationListeners = new Set<() => void>();
|
|
28
|
+
let _audioVersion = 0;
|
|
29
|
+
|
|
30
|
+
function notifyNavigationChanged(): void {
|
|
31
|
+
for (const listener of _navigationListeners) listener();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function notifyNetworkingChanged(previous: SystemAdapters['networking'] | null): void {
|
|
35
|
+
if (previous === getActiveNetworking()) return;
|
|
36
|
+
for (const listener of _networkingListeners) listener();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function notifyAudioChanged(
|
|
40
|
+
previous: SystemAdapters['audio'] | null,
|
|
41
|
+
previousAll: readonly NonNullable<SystemAdapters['audio']>[],
|
|
42
|
+
): void {
|
|
43
|
+
const nextAll = getAllActiveAudio();
|
|
44
|
+
if (
|
|
45
|
+
previous === getActiveAudio() &&
|
|
46
|
+
previousAll.length === nextAll.length &&
|
|
47
|
+
previousAll.every((adapter, index) => adapter === nextAll[index])
|
|
48
|
+
)
|
|
49
|
+
return;
|
|
50
|
+
_audioVersion++;
|
|
51
|
+
for (const listener of _audioListeners) listener();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* MULTI-INSTANCE: every mounted instance's adapters, keyed by mount id.
|
|
56
|
+
*
|
|
57
|
+
* Three DIFFERENT questions are asked of this module and conflating them is the
|
|
58
|
+
* bug to avoid:
|
|
59
|
+
*
|
|
60
|
+
* - "the PRIMARY authoring mount" — hierarchy selection, gizmo commit, and
|
|
61
|
+
* source-backed editing. That is what {@link getActiveSystems} continues
|
|
62
|
+
* to mean; a runtime-context click must never retarget source authoring.
|
|
63
|
+
* - "the instance whose RUNTIME I am inspecting" — Profiler, Frame, Audio,
|
|
64
|
+
* Network, and runtime status. {@link getInspectedSystems} follows the
|
|
65
|
+
* explicit Inspect selector (and the normal click-to-focus gesture).
|
|
66
|
+
* - "the instance I ADDRESSED" — the CLI session wire
|
|
67
|
+
* (`vgai eval`/`e2e` → `command-listener.ts`). With one instance the two
|
|
68
|
+
* coincide, which is exactly why a single `let` worked and why nothing
|
|
69
|
+
* noticed it was implicit; with several, resolving an addressed command
|
|
70
|
+
* through editor focus would let a bot drive whichever game the user last
|
|
71
|
+
* clicked. {@link systemsForInstance} answers this one.
|
|
72
|
+
*/
|
|
73
|
+
const _byInstance = new Map<string, SystemAdapters>();
|
|
74
|
+
let _inspectedInstanceId: string | null = null;
|
|
75
|
+
let _inspectedVersion = 0;
|
|
76
|
+
const _inspectedListeners = new Set<() => void>();
|
|
77
|
+
|
|
78
|
+
/** The mount id of a single-instance session. */
|
|
79
|
+
const SOLO_INSTANCE = '';
|
|
80
|
+
|
|
81
|
+
function assertSystemAdapterShapes(systems: SystemAdapters, mountId: string): void {
|
|
82
|
+
const slots = [
|
|
83
|
+
'physics',
|
|
84
|
+
'networking',
|
|
85
|
+
'navigation',
|
|
86
|
+
'audio',
|
|
87
|
+
'camera',
|
|
88
|
+
'debug',
|
|
89
|
+
'renderDebug',
|
|
90
|
+
] as const satisfies readonly (keyof SystemAdapters)[];
|
|
91
|
+
for (const slot of slots) {
|
|
92
|
+
const adapter = systems[slot];
|
|
93
|
+
if (!adapter) continue;
|
|
94
|
+
const verdict = inspectSystemAdapterSeam({
|
|
95
|
+
slot,
|
|
96
|
+
adapter: adapter as NonNullable<SystemAdapters[typeof slot]>,
|
|
97
|
+
subject: mountId || 'game',
|
|
98
|
+
});
|
|
99
|
+
if (verdict.state === 'failed') {
|
|
100
|
+
throw new Error(`system adapter refused: ${verdict.detail}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function resolvedInspectedInstanceId(): string | null {
|
|
106
|
+
if (_inspectedInstanceId !== null && _byInstance.has(_inspectedInstanceId)) {
|
|
107
|
+
return _inspectedInstanceId;
|
|
108
|
+
}
|
|
109
|
+
return _byInstance.keys().next().value ?? null;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function notifyInspectedSystems(): void {
|
|
113
|
+
_inspectedVersion++;
|
|
114
|
+
for (const listener of _inspectedListeners) listener();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Select which live mount the runtime instruments inspect. This never changes
|
|
118
|
+
* the authoring adapter, hierarchy, scene selection, or addressed automation. */
|
|
119
|
+
export function setInspectedInstance(mountId: string | null): void {
|
|
120
|
+
const previous = resolvedInspectedInstanceId();
|
|
121
|
+
_inspectedInstanceId = mountId;
|
|
122
|
+
if (previous !== resolvedInspectedInstanceId()) {
|
|
123
|
+
notifyInspectedSystems();
|
|
124
|
+
_audioVersion++;
|
|
125
|
+
for (const listener of _networkingListeners) listener();
|
|
126
|
+
for (const listener of _audioListeners) listener();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export function inspectedInstanceId(): string | null {
|
|
131
|
+
return resolvedInspectedInstanceId();
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export function subscribeInspectedInstance(listener: () => void): () => void {
|
|
135
|
+
_inspectedListeners.add(listener);
|
|
136
|
+
return () => _inspectedListeners.delete(listener);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export function inspectedInstanceVersion(): number {
|
|
140
|
+
return _inspectedVersion;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export function getInspectedSystems(): SystemAdapters {
|
|
144
|
+
const id = resolvedInspectedInstanceId();
|
|
145
|
+
return (id === null ? undefined : _byInstance.get(id)) ?? _systems;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** Install a mounted game's System adapters (play-mode on enter).
|
|
149
|
+
*
|
|
150
|
+
* `mountId` omitted is the solo case — today's every caller. Passing `null`
|
|
151
|
+
* systems unregisters the instance, so a stopped instance stops being
|
|
152
|
+
* addressable rather than lingering as an empty bag that answers commands. */
|
|
153
|
+
export function setActiveSystems(systems: SystemAdapters | null, mountId = SOLO_INSTANCE): void {
|
|
154
|
+
const previousInspected = resolvedInspectedInstanceId();
|
|
155
|
+
const previousNetworking = getActiveNetworking();
|
|
156
|
+
const previousAudio = getActiveAudio();
|
|
157
|
+
const previousAllAudio = getAllActiveAudio();
|
|
158
|
+
if (systems) {
|
|
159
|
+
assertSystemAdapterShapes(systems, mountId);
|
|
160
|
+
_byInstance.set(mountId, systems);
|
|
161
|
+
// Preserve the historical primary-authoring aggregate. Runtime instruments
|
|
162
|
+
// resolve through `_inspectedInstanceId` instead of silently inheriting it.
|
|
163
|
+
_systems = systems;
|
|
164
|
+
notifyNetworkingChanged(previousNetworking);
|
|
165
|
+
notifyAudioChanged(previousAudio, previousAllAudio);
|
|
166
|
+
notifyNavigationChanged();
|
|
167
|
+
if (previousInspected !== resolvedInspectedInstanceId()) notifyInspectedSystems();
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
_byInstance.delete(mountId);
|
|
171
|
+
// Unregistering a seat must NOT blank editor focus while OTHER instances are
|
|
172
|
+
// still live — that reset `_systems = {}` left mute/debug/profiler/gizmo dead
|
|
173
|
+
// for the rest of a split session when any additional seat was removed. Fall
|
|
174
|
+
// back to a remaining instance (the primary is the first-inserted entry) and
|
|
175
|
+
// only go empty when the last instance is gone.
|
|
176
|
+
_systems = _byInstance.values().next().value ?? {};
|
|
177
|
+
notifyNetworkingChanged(previousNetworking);
|
|
178
|
+
notifyAudioChanged(previousAudio, previousAllAudio);
|
|
179
|
+
notifyNavigationChanged();
|
|
180
|
+
if (previousInspected !== resolvedInspectedInstanceId()) notifyInspectedSystems();
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Unregister EVERY instance — the previous project's session is over.
|
|
185
|
+
* Registered with `onProjectSessionEnd`.
|
|
186
|
+
*
|
|
187
|
+
* Instances are unregistered one at a time by the mount that owns them, and a
|
|
188
|
+
* project switch is the one path that ends every mount at once without any of
|
|
189
|
+
* them running its own teardown. A registry left populated across a switch
|
|
190
|
+
* keeps the OLD game's physics/networking/audio/debug adapters answering the
|
|
191
|
+
* gizmo, the instruments and the CLI wire under the new project.
|
|
192
|
+
*
|
|
193
|
+
* Routed through `setActiveSystems(null, id)` per instance rather than clearing
|
|
194
|
+
* the map, so the networking/audio/navigation/inspected notifications fire
|
|
195
|
+
* exactly as they do for a normal unregister.
|
|
196
|
+
*/
|
|
197
|
+
export function resetActiveSystemsForNewProject(): void {
|
|
198
|
+
for (const id of [..._byInstance.keys()]) setActiveSystems(null, id);
|
|
199
|
+
setInspectedInstance(null);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/** Refresh one mounted instance's late-registered adapters without stealing
|
|
203
|
+
* editor focus from a different instance. */
|
|
204
|
+
export function updateInstanceSystems(systems: SystemAdapters, mountId = SOLO_INSTANCE): void {
|
|
205
|
+
const previousNetworking = getActiveNetworking();
|
|
206
|
+
const previousAudio = getActiveAudio();
|
|
207
|
+
const previousAllAudio = getAllActiveAudio();
|
|
208
|
+
const previousSystems = _byInstance.get(mountId);
|
|
209
|
+
assertSystemAdapterShapes(systems, mountId);
|
|
210
|
+
_byInstance.set(mountId, systems);
|
|
211
|
+
if (_systems === previousSystems) _systems = systems;
|
|
212
|
+
notifyNetworkingChanged(previousNetworking);
|
|
213
|
+
notifyAudioChanged(previousAudio, previousAllAudio);
|
|
214
|
+
notifyNavigationChanged();
|
|
215
|
+
if (resolvedInspectedInstanceId() === mountId) notifyInspectedSystems();
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/** The primary AUTHORING mount's adapters — hierarchy/gizmo/source consumers. */
|
|
219
|
+
export function getActiveSystems(): SystemAdapters {
|
|
220
|
+
return _systems;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/** Observe replacement or late registration of the primary authoring mount's
|
|
224
|
+
* navigation adapter. The navmesh UI binds to this instead of constructing an
|
|
225
|
+
* editor-owned navigation implementation. */
|
|
226
|
+
export function subscribeActiveNavigation(listener: () => void): () => void {
|
|
227
|
+
_navigationListeners.add(listener);
|
|
228
|
+
return () => _navigationListeners.delete(listener);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/** Live instance ids, for error messages and for the CLI's own listing. */
|
|
232
|
+
export function liveInstanceIds(): string[] {
|
|
233
|
+
return [..._byInstance.keys()];
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* The live ids as a reader can ACT on them.
|
|
238
|
+
*
|
|
239
|
+
* The solo instance's id is the empty string, so the obvious
|
|
240
|
+
* `ids.map(i => `"${i}"`)` renders it as `live instances: ""` — an id nobody
|
|
241
|
+
* can name, in the message whose entire job is to say what to name instead.
|
|
242
|
+
* Found by driving a real editor; every unit test used named instances and
|
|
243
|
+
* none of them could see it.
|
|
244
|
+
*/
|
|
245
|
+
function describeInstances(ids: readonly string[]): string {
|
|
246
|
+
const named = ids.filter((id) => id !== SOLO_INSTANCE);
|
|
247
|
+
const hasSolo = ids.length > named.length;
|
|
248
|
+
const parts = named.map((id) => `"${id}"`);
|
|
249
|
+
if (hasSolo) parts.push('the unnamed default (address it with no id at all)');
|
|
250
|
+
return parts.join(', ');
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/** Raised when an addressed command cannot name exactly one instance. Carries
|
|
254
|
+
* the live ids so the caller can say WHICH, never just "ambiguous". */
|
|
255
|
+
export class InstanceResolutionError extends Error {
|
|
256
|
+
readonly instances: string[];
|
|
257
|
+
constructor(message: string, instances: string[]) {
|
|
258
|
+
super(message);
|
|
259
|
+
this.name = 'InstanceResolutionError';
|
|
260
|
+
this.instances = instances;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Resolve an ADDRESSED instance's adapters for the session wire.
|
|
266
|
+
*
|
|
267
|
+
* The rule deliberately mirrors `vgai edit`'s session selection rather than
|
|
268
|
+
* inventing a second one: take the unambiguous case silently, refuse the
|
|
269
|
+
* ambiguous one BY NAME, and never guess.
|
|
270
|
+
*
|
|
271
|
+
* - explicit id → that instance, or a named error listing what exists;
|
|
272
|
+
* - omitted, one → that one (every existing call is unchanged);
|
|
273
|
+
* - omitted, several → refuse, naming the live instances.
|
|
274
|
+
*
|
|
275
|
+
* The last is the point. Silently picking the newest is how a bot drives the
|
|
276
|
+
* wrong player while every log line still reads as success — the failure is
|
|
277
|
+
* invisible in exactly the situation multi-instance exists to create.
|
|
278
|
+
*/
|
|
279
|
+
export function systemsForInstance(mountId?: string): SystemAdapters {
|
|
280
|
+
const ids = liveInstanceIds();
|
|
281
|
+
if (mountId !== undefined) {
|
|
282
|
+
const found = _byInstance.get(mountId);
|
|
283
|
+
if (found) return found;
|
|
284
|
+
throw new InstanceResolutionError(
|
|
285
|
+
ids.length === 0
|
|
286
|
+
? `no instance "${mountId}" — no game is mounted`
|
|
287
|
+
: `no instance "${mountId}" — live: ${describeInstances(ids)}`,
|
|
288
|
+
ids,
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
if (ids.length === 1) return _byInstance.get(ids[0]!)!;
|
|
292
|
+
if (ids.length === 0) return _systems; // global adapters before a root instance registers
|
|
293
|
+
throw new InstanceResolutionError(
|
|
294
|
+
`${ids.length} instances are live (${describeInstances(ids)}) — ` +
|
|
295
|
+
'name one in your program (`game.instance(id)`, or `await game.instances()` ' +
|
|
296
|
+
'for handles); refusing to guess',
|
|
297
|
+
ids,
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* The focused game's physics carrier AS A NODE-ID-KEYED ONE — `null` when the
|
|
303
|
+
* slot holds a canvas mount's display-keyed carrier
|
|
304
|
+
* (`@vgai/game-runtime/pixi/system-adapters`).
|
|
305
|
+
*
|
|
306
|
+
* That narrowing is the point rather than a formality: this registry is
|
|
307
|
+
* game-scoped and surface-blind, so with a canvas game focused the slot really
|
|
308
|
+
* can hold a carrier whose `freeze(display: Container)` a three consumer would
|
|
309
|
+
* be calling with a node-id string. The canvas lane never reads this — its
|
|
310
|
+
* gizmo path holds its own carrier (`ingest/mount-canvas-ingest-root.ts` →
|
|
311
|
+
* `authoring/pixi-live-write-target.ts`), already resolved to display objects.
|
|
312
|
+
*/
|
|
313
|
+
export function getActivePhysics(): PhysicsAdapter | null {
|
|
314
|
+
return nodeKeyedPhysics(_systems.physics);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/** The focused game's optional camera-controller introspection seam. Camera
|
|
318
|
+
* authoring itself stays on the active AuthoringAdapter; this is runtime-only
|
|
319
|
+
* ownership/priority/blend state for the selected native camera. */
|
|
320
|
+
export function getActiveCamera(): NonNullable<SystemAdapters['camera']> | null {
|
|
321
|
+
return _systems.camera ?? null;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
export function getActiveNetworking(): NonNullable<SystemAdapters['networking']> | null {
|
|
325
|
+
return _systems.networking ?? _editModeNetworking ?? null;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
export function getInspectedNetworking(): NonNullable<SystemAdapters['networking']> | null {
|
|
329
|
+
return getInspectedSystems().networking ?? _editModeNetworking ?? null;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/** Observe replacement of the effective networking adapter. Runtime adapters
|
|
333
|
+
* may register after Play has entered, so consumers must be able to move off
|
|
334
|
+
* the edit-time declaration and onto the live room without polling. */
|
|
335
|
+
export function subscribeActiveNetworking(listener: () => void): () => void {
|
|
336
|
+
_networkingListeners.add(listener);
|
|
337
|
+
return () => _networkingListeners.delete(listener);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/** Install the editor's edit-time networking seam — the declared server config
|
|
341
|
+
* and authored player identity a multiplayer project exposes with no game
|
|
342
|
+
* running. Play-mode's `setActiveSystems` temporarily overrides it with the
|
|
343
|
+
* mounted game's live adapter; on Stop, `getActiveNetworking()` falls back to
|
|
344
|
+
* this one. Passing `null` clears it (a project with no declared server never
|
|
345
|
+
* installs one, so networking presence stays meaningful). Mirrors
|
|
346
|
+
* `setEditModeAudio`. */
|
|
347
|
+
export function setEditModeNetworking(networking: SystemAdapters['networking'] | null): void {
|
|
348
|
+
const previousNetworking = getActiveNetworking();
|
|
349
|
+
_editModeNetworking = networking;
|
|
350
|
+
notifyNetworkingChanged(previousNetworking);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/** The active game's debug seam (`DebugAdapter`) —
|
|
354
|
+
* installed with the whole bag by play-mode's `setActiveSystems`, read by
|
|
355
|
+
* the State Watch utility and the CLI command relay. Null
|
|
356
|
+
* outside play (or for a mount exposing no debug adapter) — the panels'
|
|
357
|
+
* hide signal. */
|
|
358
|
+
export function getActiveDebug(): SystemAdapters['debug'] | null {
|
|
359
|
+
return _systems.debug ?? null;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/** Install the editor project's real first-party audio graph. Play-mode may
|
|
363
|
+
* temporarily override it with the mounted game's adapter; clearing the
|
|
364
|
+
* session restores this edit-mode adapter instead of making audio disappear. */
|
|
365
|
+
export function setEditModeAudio(audio: SystemAdapters['audio'] | null): void {
|
|
366
|
+
const previousAudio = getActiveAudio();
|
|
367
|
+
const previousAllAudio = getAllActiveAudio();
|
|
368
|
+
_editModeAudio = audio;
|
|
369
|
+
notifyAudioChanged(previousAudio, previousAllAudio);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/** The active audio seam (`AudioAdapter` + W3c introspection capabilities).
|
|
373
|
+
* A running game's adapter takes precedence; otherwise the editor project's
|
|
374
|
+
* real audio graph remains available for authoring and preview. */
|
|
375
|
+
export function getActiveAudio(): SystemAdapters['audio'] | null {
|
|
376
|
+
return _systems.audio ?? _editModeAudio;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
export function getInspectedAudio(): SystemAdapters['audio'] | null {
|
|
380
|
+
return getInspectedSystems().audio ?? _editModeAudio;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/** Observe replacement of the effective audio adapter. Header telemetry and
|
|
384
|
+
* the Audio debugger acquire real meter handles whose lifetime must follow
|
|
385
|
+
* that identity exactly; polling adapter identity would leave analyser taps
|
|
386
|
+
* attached for up to a tick after a world was replaced. */
|
|
387
|
+
export function subscribeActiveAudio(listener: () => void): () => void {
|
|
388
|
+
_audioListeners.add(listener);
|
|
389
|
+
return () => _audioListeners.delete(listener);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/** `useSyncExternalStore` snapshot for {@link subscribeActiveAudio}. */
|
|
393
|
+
export function activeAudioVersion(): number {
|
|
394
|
+
return _audioVersion;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/** EVERY live instance's audio adapter (plus edit-mode audio when nothing is
|
|
398
|
+
* playing). Mute must silence the WHOLE split — with N seats, muting only the
|
|
399
|
+
* focused/primary one leaves the other N-1 games audible with no way to
|
|
400
|
+
* quiet them. De-duplicated by identity (seats may share an adapter). */
|
|
401
|
+
export function getAllActiveAudio(): NonNullable<SystemAdapters['audio']>[] {
|
|
402
|
+
const out = new Set<NonNullable<SystemAdapters['audio']>>();
|
|
403
|
+
for (const systems of _byInstance.values()) {
|
|
404
|
+
if (systems.audio) out.add(systems.audio);
|
|
405
|
+
}
|
|
406
|
+
if (out.size === 0 && _editModeAudio) out.add(_editModeAudio);
|
|
407
|
+
return [...out];
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/** The active game's render-debug seam (`RenderDebugAdapter` + the W4b F11
|
|
411
|
+
* frame-capture / render-memory capabilities) — installed with the whole bag
|
|
412
|
+
* by play-mode's `setActiveSystems`, read by the Frame debugger tab and the
|
|
413
|
+
* Profiler's Memory view. Null outside a running game session, or for a
|
|
414
|
+
* headless/non-real-context mount that registers none (the surface renders
|
|
415
|
+
* the honest register-an-adapter notice; it never fabricates a draw list). */
|
|
416
|
+
export function getActiveRenderDebug(): SystemAdapters['renderDebug'] | null {
|
|
417
|
+
return _systems.renderDebug ?? null;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
export function getInspectedRenderDebug(): SystemAdapters['renderDebug'] | null {
|
|
421
|
+
return getInspectedSystems().renderDebug ?? null;
|
|
422
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AuthoringAdapter } from '@volter/editor-project/adapter';
|
|
2
|
+
|
|
3
|
+
let nextKey = 1;
|
|
4
|
+
const keys = new WeakMap<AuthoringAdapter, number>();
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Adapter-owned UI state must not outlive the adapter that created it.
|
|
8
|
+
* Remounting also keeps React DEV prop-diff instrumentation from traversing
|
|
9
|
+
* live renderer objects and invoking their legacy getters on adapter handoff.
|
|
10
|
+
*/
|
|
11
|
+
export function authoringAdapterKey(adapter: AuthoringAdapter | undefined): number {
|
|
12
|
+
if (!adapter) return 0;
|
|
13
|
+
const existing = keys.get(adapter);
|
|
14
|
+
if (existing !== undefined) return existing;
|
|
15
|
+
const key = nextKey++;
|
|
16
|
+
keys.set(adapter, key);
|
|
17
|
+
return key;
|
|
18
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { AuthoringAssetSubject } from '@volter/editor-project/adapter';
|
|
2
|
+
|
|
3
|
+
const SVG_XMLNS = 'http://www.w3.org/2000/svg';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* HTML gives an embedded `<svg>` its namespace implicitly, so `outerHTML`
|
|
7
|
+
* commonly omits `xmlns`. An `<img>` data URL is a standalone XML document
|
|
8
|
+
* and needs the namespace spelled out. Preserve an adapter that already
|
|
9
|
+
* supplied one and otherwise add it to the root SVG start tag.
|
|
10
|
+
*/
|
|
11
|
+
export function standaloneSvgMarkup(markup: string): string {
|
|
12
|
+
const root = /<svg\b/i.exec(markup);
|
|
13
|
+
if (!root) return markup;
|
|
14
|
+
const tagEnd = markup.indexOf('>', root.index);
|
|
15
|
+
if (tagEnd < 0) return markup;
|
|
16
|
+
const startTag = markup.slice(root.index, tagEnd + 1);
|
|
17
|
+
if (/\sxmlns\s*=/.test(startTag)) return markup;
|
|
18
|
+
const insertAt = root.index + root[0].length;
|
|
19
|
+
return `${markup.slice(0, insertAt)} xmlns="${SVG_XMLNS}"${markup.slice(insertAt)}`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** A browser-safe URL for an adapter-owned in-memory image asset. */
|
|
23
|
+
export function authoringAssetDataUrl(subject: AuthoringAssetSubject): string {
|
|
24
|
+
const text =
|
|
25
|
+
subject.mediaType === 'image/svg+xml' ? standaloneSvgMarkup(subject.text) : subject.text;
|
|
26
|
+
return `data:${subject.mediaType};charset=utf-8,${encodeURIComponent(text)}`;
|
|
27
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor-session authoring bootstrap readiness.
|
|
3
|
+
*
|
|
4
|
+
* The workspace restores before a project's async authoring adapter
|
|
5
|
+
* necessarily exists. During that interval, "no Inspector subject" is UNKNOWN rather
|
|
6
|
+
* than a final answer: destructively reconciling it removes the user's saved
|
|
7
|
+
* Inspector group, and the later adapter mount can only recreate that group
|
|
8
|
+
* at its default position. This tiny project-keyed signal lets workspace
|
|
9
|
+
* geometry preserve optional authoring chrome until the real adapter has
|
|
10
|
+
* answered once. State is keyed by the session's EditorShellStore, so closing
|
|
11
|
+
* and reopening the same project cannot inherit a previous mount's readiness.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { EditorShellStore } from '../editor-shell-store';
|
|
15
|
+
|
|
16
|
+
type BootstrapState = {
|
|
17
|
+
readonly generation: number;
|
|
18
|
+
readonly settled: boolean;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const states = new WeakMap<EditorShellStore, BootstrapState>();
|
|
22
|
+
const listeners = new Set<() => void>();
|
|
23
|
+
|
|
24
|
+
function notify(): void {
|
|
25
|
+
for (const listener of listeners) listener();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Begin one bootstrap generation and return its race-safe completion hook. */
|
|
29
|
+
export function beginAuthoringBootstrap(store: EditorShellStore): () => void {
|
|
30
|
+
const generation = (states.get(store)?.generation ?? 0) + 1;
|
|
31
|
+
states.set(store, { generation, settled: false });
|
|
32
|
+
notify();
|
|
33
|
+
return () => {
|
|
34
|
+
const current = states.get(store);
|
|
35
|
+
if (!current || current.generation !== generation || current.settled) return;
|
|
36
|
+
states.set(store, { generation, settled: true });
|
|
37
|
+
notify();
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** False before this project's first real adapter bootstrap has completed. */
|
|
42
|
+
export function authoringBootstrapSettled(store: EditorShellStore): boolean {
|
|
43
|
+
return states.get(store)?.settled === true;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function subscribeAuthoringBootstrap(listener: () => void): () => void {
|
|
47
|
+
listeners.add(listener);
|
|
48
|
+
return () => listeners.delete(listener);
|
|
49
|
+
}
|