@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,205 @@
|
|
|
1
|
+
// Task ownership lives beside Git's worktree metadata, outside disposable checkouts.
|
|
2
|
+
import { execFileSync } from 'node:child_process';
|
|
3
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
4
|
+
import {
|
|
5
|
+
existsSync,
|
|
6
|
+
linkSync,
|
|
7
|
+
mkdirSync,
|
|
8
|
+
readFileSync,
|
|
9
|
+
realpathSync,
|
|
10
|
+
renameSync,
|
|
11
|
+
rmSync,
|
|
12
|
+
writeFileSync,
|
|
13
|
+
} from 'node:fs';
|
|
14
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
15
|
+
|
|
16
|
+
const git = (root, args) => execFileSync('git', ['-C', root, ...args], { encoding: 'utf8' }).trim();
|
|
17
|
+
function canonical(target) {
|
|
18
|
+
const absolute = resolve(target);
|
|
19
|
+
return existsSync(absolute)
|
|
20
|
+
? realpathSync(absolute)
|
|
21
|
+
: join(canonical(dirname(absolute)), basename(absolute));
|
|
22
|
+
}
|
|
23
|
+
function location(repo, target) {
|
|
24
|
+
const common = git(repo, ['rev-parse', '--path-format=absolute', '--git-common-dir']);
|
|
25
|
+
const path = canonical(target);
|
|
26
|
+
const id = createHash('sha256').update(path).digest('hex');
|
|
27
|
+
return { path, file: join(common, 'task-worktrees', `${id}.json`), id };
|
|
28
|
+
}
|
|
29
|
+
function write(file, record) {
|
|
30
|
+
const tmp = `${file}.${randomUUID()}.tmp`;
|
|
31
|
+
writeFileSync(tmp, JSON.stringify(record, null, 2));
|
|
32
|
+
renameSync(tmp, file);
|
|
33
|
+
}
|
|
34
|
+
function locked(repo, target, action) {
|
|
35
|
+
const loc = location(repo, target);
|
|
36
|
+
mkdirSync(dirname(loc.file), { recursive: true });
|
|
37
|
+
// A crashed writer's lock is retained for explicit owner recovery, never stolen by age.
|
|
38
|
+
const lock = `${loc.file}.lock`;
|
|
39
|
+
mkdirSync(lock);
|
|
40
|
+
try {
|
|
41
|
+
return action(loc);
|
|
42
|
+
} finally {
|
|
43
|
+
rmSync(lock, { recursive: true });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function read(file) {
|
|
47
|
+
return existsSync(file) ? JSON.parse(readFileSync(file, 'utf8')) : null;
|
|
48
|
+
}
|
|
49
|
+
function registered(repo, path) {
|
|
50
|
+
return git(repo, ['worktree', 'list', '--porcelain', '-z'])
|
|
51
|
+
.split('\0')
|
|
52
|
+
.includes(`worktree ${path}`);
|
|
53
|
+
}
|
|
54
|
+
function generationFile(repo, path) {
|
|
55
|
+
if (canonical(git(path, ['rev-parse', '--show-toplevel'])) !== path)
|
|
56
|
+
throw new Error('Path is not the registered worktree root.');
|
|
57
|
+
if (
|
|
58
|
+
git(repo, ['rev-parse', '--path-format=absolute', '--git-common-dir']) !==
|
|
59
|
+
git(path, ['rev-parse', '--path-format=absolute', '--git-common-dir'])
|
|
60
|
+
)
|
|
61
|
+
throw new Error('Worktree belongs to a different repository.');
|
|
62
|
+
return join(git(path, ['rev-parse', '--absolute-git-dir']), 'task-generation');
|
|
63
|
+
}
|
|
64
|
+
function markGeneration(repo, path, record) {
|
|
65
|
+
const file = generationFile(repo, path);
|
|
66
|
+
if (existsSync(file)) {
|
|
67
|
+
if (readFileSync(file, 'utf8') !== record.generation)
|
|
68
|
+
throw new Error('Worktree generation differs from creation intent.');
|
|
69
|
+
} else {
|
|
70
|
+
const temporary = `${file}.${randomUUID()}.tmp`;
|
|
71
|
+
try {
|
|
72
|
+
writeFileSync(temporary, record.generation, { flag: 'wx' });
|
|
73
|
+
linkSync(temporary, file); // Exclusive publication of complete bytes only.
|
|
74
|
+
} finally {
|
|
75
|
+
rmSync(temporary, { force: true });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function verifyGeneration(repo, path, record) {
|
|
80
|
+
if (readFileSync(generationFile(repo, path), 'utf8') !== record.generation)
|
|
81
|
+
throw new Error('Worktree generation changed; old completion cannot remove it.');
|
|
82
|
+
}
|
|
83
|
+
function preserve(repo, ref, head) {
|
|
84
|
+
try {
|
|
85
|
+
git(repo, ['update-ref', ref, head, '']);
|
|
86
|
+
} catch (error) {
|
|
87
|
+
if (git(repo, ['rev-parse', '--verify', ref]) !== head) throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export function registerTaskWorktree(repo, target, owner, branch) {
|
|
91
|
+
if (!owner?.trim()) throw new Error('A task owner is required.');
|
|
92
|
+
locked(repo, target, ({ path, file }) => {
|
|
93
|
+
if (existsSync(path) || registered(repo, path))
|
|
94
|
+
throw new Error(`Worktree destination already exists: ${path}`);
|
|
95
|
+
const previous = read(file);
|
|
96
|
+
if (previous && previous.state !== 'finished')
|
|
97
|
+
throw new Error(
|
|
98
|
+
'An earlier task still owns this path; inspect its retained creation/removal receipt.',
|
|
99
|
+
);
|
|
100
|
+
write(file, {
|
|
101
|
+
version: 1,
|
|
102
|
+
generation: randomUUID(),
|
|
103
|
+
root: path,
|
|
104
|
+
owner,
|
|
105
|
+
branch,
|
|
106
|
+
createdAt: new Date().toISOString(),
|
|
107
|
+
state: 'creating',
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
export function markTaskWorktreeCreated(repo, target) {
|
|
112
|
+
locked(repo, target, ({ path, file }) => {
|
|
113
|
+
const record = read(file);
|
|
114
|
+
if (record?.state !== 'creating' || !registered(repo, path))
|
|
115
|
+
throw new Error('No matching worktree creation intent.');
|
|
116
|
+
markGeneration(repo, path, record);
|
|
117
|
+
write(file, { ...record, state: 'active' });
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function removePreserved(repo, path, file, record) {
|
|
121
|
+
if (!existsSync(path)) {
|
|
122
|
+
if (registered(repo, path))
|
|
123
|
+
throw new Error('Checkout is missing but Git still registers it; inspect before recovering.');
|
|
124
|
+
} else {
|
|
125
|
+
verifyGeneration(repo, path, record);
|
|
126
|
+
if (git(path, ['status', '--porcelain']) !== '')
|
|
127
|
+
throw new Error('Worktree has uncommitted or untracked work.');
|
|
128
|
+
if (git(path, ['rev-parse', 'HEAD']) !== record.preservedCommit)
|
|
129
|
+
throw new Error('HEAD changed after completion; retain this worktree for review.');
|
|
130
|
+
git(repo, ['worktree', 'remove', path]);
|
|
131
|
+
}
|
|
132
|
+
write(file, { ...record, state: 'finished', finishedAt: new Date().toISOString() });
|
|
133
|
+
}
|
|
134
|
+
export function finishTaskWorktree(
|
|
135
|
+
repo,
|
|
136
|
+
target,
|
|
137
|
+
{ owner, mergedInto, consumersRetired = false } = {},
|
|
138
|
+
) {
|
|
139
|
+
locked(repo, target, ({ path, file, id }) => {
|
|
140
|
+
if (path === canonical(git(repo, ['rev-parse', '--show-toplevel'])))
|
|
141
|
+
throw new Error('Run finish from another checkout.');
|
|
142
|
+
if (!consumersRetired)
|
|
143
|
+
throw new Error('Retire the task’s editor, terminals and other consumers before finishing.');
|
|
144
|
+
const record = read(file);
|
|
145
|
+
if (record?.root !== path || record.owner !== owner)
|
|
146
|
+
throw new Error('This worktree belongs to a different task or is unregistered.');
|
|
147
|
+
if (record.state === 'finished' && !existsSync(path) && !registered(repo, path)) return;
|
|
148
|
+
if (record.state === 'removing') return removePreserved(repo, path, file, record);
|
|
149
|
+
if (record.state !== 'active')
|
|
150
|
+
throw new Error('Worktree creation did not finish; inspect the retained intent.');
|
|
151
|
+
if (!mergedInto)
|
|
152
|
+
throw new Error(
|
|
153
|
+
'Specify the ref that preserves the completed task (--merged-into origin/main).',
|
|
154
|
+
);
|
|
155
|
+
verifyGeneration(repo, path, record);
|
|
156
|
+
if (git(path, ['status', '--porcelain']) !== '')
|
|
157
|
+
throw new Error('Worktree has uncommitted or untracked work.');
|
|
158
|
+
const head = git(path, ['rev-parse', 'HEAD']);
|
|
159
|
+
const preserved = git(repo, ['rev-parse', '--verify', `${mergedInto}^{commit}`]);
|
|
160
|
+
git(repo, ['merge-base', '--is-ancestor', head, preserved]);
|
|
161
|
+
const ref = `refs/task-worktrees/${id}/${record.generation}`;
|
|
162
|
+
preserve(repo, ref, head);
|
|
163
|
+
const removing = {
|
|
164
|
+
...record,
|
|
165
|
+
state: 'removing',
|
|
166
|
+
preservedRef: ref,
|
|
167
|
+
preservedCommit: head,
|
|
168
|
+
mergedInto: preserved,
|
|
169
|
+
consumersRetiredAt: new Date().toISOString(),
|
|
170
|
+
};
|
|
171
|
+
write(file, removing);
|
|
172
|
+
removePreserved(repo, path, file, removing);
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
export function removeArchivedWorktree(repo, target) {
|
|
176
|
+
locked(repo, target, ({ path, file, id }) => {
|
|
177
|
+
// The existing explicit archive caller checks current tree, live sessions and dirtiness.
|
|
178
|
+
const previous = read(file);
|
|
179
|
+
if (previous && !['active', 'removing', 'adopting'].includes(previous.state))
|
|
180
|
+
throw new Error('Task creation or an older generation needs review before archive.');
|
|
181
|
+
const record = previous ?? {
|
|
182
|
+
version: 1,
|
|
183
|
+
generation: randomUUID(),
|
|
184
|
+
root: path,
|
|
185
|
+
owner: 'explicit-archive',
|
|
186
|
+
state: 'adopting',
|
|
187
|
+
};
|
|
188
|
+
if (!previous) write(file, record);
|
|
189
|
+
if (record.state === 'adopting') markGeneration(repo, path, record);
|
|
190
|
+
verifyGeneration(repo, path, record);
|
|
191
|
+
if (record.state === 'removing') return removePreserved(repo, path, file, record);
|
|
192
|
+
const head = git(path, ['rev-parse', 'HEAD']);
|
|
193
|
+
const ref = `refs/task-worktrees/${id}/${record.generation}`;
|
|
194
|
+
preserve(repo, ref, head);
|
|
195
|
+
const removing = {
|
|
196
|
+
...record,
|
|
197
|
+
state: 'removing',
|
|
198
|
+
preservedRef: ref,
|
|
199
|
+
preservedCommit: head,
|
|
200
|
+
consumersRetiredAt: new Date().toISOString(),
|
|
201
|
+
};
|
|
202
|
+
write(file, removing);
|
|
203
|
+
removePreserved(repo, path, file, removing);
|
|
204
|
+
});
|
|
205
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { type ReactNode, useEffect, useRef } from 'react';
|
|
2
|
+
import { SHELL_OBJECT3D_DOCUMENT_WRITE_POLICY } from './authoring/shell-object3d-document-write-policy';
|
|
3
|
+
import { SHELL_VIEWPORT_AUTHORING_POLICY } from './authoring/shell-viewport-policy';
|
|
4
|
+
|
|
5
|
+
import { connectCommandListener } from './command-listener';
|
|
6
|
+
import { startSceneDocuments } from './components/scene-documents';
|
|
7
|
+
import { saveThumbnail } from './editor-api';
|
|
8
|
+
import { reportTabCensus } from './editor-presence';
|
|
9
|
+
import { EditorRuntimeProvider, type EditorStats } from './editor-runtime';
|
|
10
|
+
import { EditorShellStore, type EditorStatePersistence } from './editor-shell-store';
|
|
11
|
+
import { EditorSession } from './history/editor-session';
|
|
12
|
+
import { bootstrapProject } from './initial-project';
|
|
13
|
+
import { installObject3DDocumentWritePolicy } from './object3d-document-write-policy';
|
|
14
|
+
import { startProjectAdapterLoad } from './project-adapter';
|
|
15
|
+
import { startProjectDeclarationRefresh } from './project-declaration-refresh';
|
|
16
|
+
import { writeProjectLocalSection } from './project-local-state';
|
|
17
|
+
import { getCurrentProject } from './project-manager';
|
|
18
|
+
import { startProjectSessionReset } from './project-session-reset';
|
|
19
|
+
import { startProjectToolContributionDiscovery } from './project-tool-discovery';
|
|
20
|
+
import { startProjectToolCatalog } from './project-tools';
|
|
21
|
+
import { registerShellStoreForHost } from './shell-store-door';
|
|
22
|
+
import { startTabCensus } from './tab-census';
|
|
23
|
+
import { installViewportAuthoringPolicy } from './viewport-authoring-policy';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The store's persistence collaborator, bound to the server SDK. ONE module
|
|
27
|
+
* constant, not an object literal at the install site: `attachStatePersistence`
|
|
28
|
+
* keeps the one-owner rule `attachHistory` keeps, so a fresh literal on every
|
|
29
|
+
* render (a strict-mode double render, any re-render of the provider) was a
|
|
30
|
+
* different owner and threw — measured 2026-09-02 as "EditorStore is already
|
|
31
|
+
* attached to a state persistence" from `<EditorProvider>` on every editor boot.
|
|
32
|
+
*/
|
|
33
|
+
const SERVER_STATE_PERSISTENCE: EditorStatePersistence = hmrStableValue(
|
|
34
|
+
'SERVER_STATE_PERSISTENCE',
|
|
35
|
+
() => ({ save: (state) => writeProjectLocalSection('view', state), saveThumbnail }),
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The same object across a Fast Refresh of THIS module. The store lives in a
|
|
40
|
+
* ref, which Fast Refresh preserves, but a module-scope constant is minted
|
|
41
|
+
* again on every re-evaluation — so the second render after an HMR edit
|
|
42
|
+
* handed the store a NEW persistence object and `attachStatePersistence`'s
|
|
43
|
+
* one-owner rule threw (measured 2026-09-03, editing a sibling module in
|
|
44
|
+
* this file's graph while the editor was open: every panel went dark). The
|
|
45
|
+
* context itself already rides `import.meta.hot.data` for exactly this
|
|
46
|
+
* reason (`createHmrStableReactContext`); the collaborator does the same.
|
|
47
|
+
*/
|
|
48
|
+
function hmrStableValue<T>(key: string, create: () => T): T {
|
|
49
|
+
const data = import.meta.hot?.data as Record<string, T> | undefined;
|
|
50
|
+
if (data?.[key]) return data[key] as T;
|
|
51
|
+
const value = create();
|
|
52
|
+
if (data) data[key] = value;
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function EditorProvider({ children }: { children: ReactNode }) {
|
|
57
|
+
const storeRef = useRef<EditorShellStore | null>(null);
|
|
58
|
+
if (!storeRef.current) {
|
|
59
|
+
storeRef.current = new EditorShellStore();
|
|
60
|
+
// The host door (`@volter/editor-sdk/host`, `session`) reads this store.
|
|
61
|
+
registerShellStoreForHost(storeRef.current);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const sessionRef = useRef<EditorSession | null>(null);
|
|
65
|
+
if (!sessionRef.current) {
|
|
66
|
+
const project = getCurrentProject();
|
|
67
|
+
sessionRef.current = new EditorSession(project?.rootPath ?? 'unknown-project');
|
|
68
|
+
}
|
|
69
|
+
storeRef.current.attachHistory(sessionRef.current.history);
|
|
70
|
+
// The shell's answers to the gizmo viewport's questions — which adapter is
|
|
71
|
+
// active, what is under the pointer, which root is world-hidden. Installed
|
|
72
|
+
// HERE (boot, before any viewport mounts) rather than in `the world root's stage`,
|
|
73
|
+
// because an Asset Lab document's own viewport can be the only one on
|
|
74
|
+
// screen; see `viewport-authoring-policy.ts`. Idempotent for the same
|
|
75
|
+
// policy object, so a strict-mode double render is a no-op.
|
|
76
|
+
installViewportAuthoringPolicy(SHELL_VIEWPORT_AUTHORING_POLICY);
|
|
77
|
+
// The shell's answers to the Asset Lab 3D document's writes — its own
|
|
78
|
+
// persistence binding, whole-file source replacement, thumbnail framing.
|
|
79
|
+
// Installed HERE for the same reason as the policy above: an Asset Lab
|
|
80
|
+
// document can be the only surface on screen, and its writes must reach the
|
|
81
|
+
// project the moment it mounts. See `object3d-document-write-policy.ts`.
|
|
82
|
+
installObject3DDocumentWritePolicy(SHELL_OBJECT3D_DOCUMENT_WRITE_POLICY);
|
|
83
|
+
// The shell binds the server SDK as the store's persistence; the store
|
|
84
|
+
// itself imports no transport (ARCHITECTURE-CORE §Editor chrome).
|
|
85
|
+
storeRef.current.attachStatePersistence(SERVER_STATE_PERSISTENCE);
|
|
86
|
+
|
|
87
|
+
const statsRef = useRef<EditorStats | null>(null);
|
|
88
|
+
if (!statsRef.current) {
|
|
89
|
+
statsRef.current = {
|
|
90
|
+
fps: 0,
|
|
91
|
+
frameTime: 0,
|
|
92
|
+
drawCalls: 0,
|
|
93
|
+
triangles: 0,
|
|
94
|
+
cameraPosition: { x: 0, y: 0, z: 0 },
|
|
95
|
+
cameraTarget: { x: 0, y: 0, z: 0 },
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const initRef = useRef<Promise<void> | null>(null);
|
|
100
|
+
if (!initRef.current) {
|
|
101
|
+
// Detect the project AND run its script registry. Tracked by
|
|
102
|
+
// `projectBootstrapSettled()`, which play-mode awaits — see that function's
|
|
103
|
+
// doc comment for the defect this ordering exists to prevent.
|
|
104
|
+
initRef.current = bootstrapProject();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
return connectCommandListener(storeRef.current!, sessionRef.current!.historyCommands);
|
|
109
|
+
}, []);
|
|
110
|
+
|
|
111
|
+
// Project-tool discovery is EDITOR-INIT lifecycle, not a side effect of any
|
|
112
|
+
// one surface — it runs (and keeps re-running on project change / tool-file
|
|
113
|
+
// add/unlink) whether or not a workspace is mounted.
|
|
114
|
+
// The workspace host only consumes the discovered registrations.
|
|
115
|
+
useEffect(() => startProjectToolContributionDiscovery(), []);
|
|
116
|
+
useEffect(() => startProjectToolCatalog(), []);
|
|
117
|
+
|
|
118
|
+
// The project's own adapter (`vgai.adapter.ts`, or the declared native
|
|
119
|
+
// default when it has none) — a PROJECT capability, loaded at init and on
|
|
120
|
+
// every project switch, exactly like the discoveries above.
|
|
121
|
+
useEffect(() => startProjectAdapterLoad(), []);
|
|
122
|
+
useEffect(() => startProjectDeclarationRefresh(), []);
|
|
123
|
+
|
|
124
|
+
// The other half of that lifecycle: what must NOT survive a project switch.
|
|
125
|
+
// `onProjectChange` re-derives against the new project; this ends the
|
|
126
|
+
// PREVIOUS one's live sessions and measurement ledgers, which are module
|
|
127
|
+
// state and do not go away with the layout remount. See
|
|
128
|
+
// `project-session-reset.ts` for the list.
|
|
129
|
+
useEffect(() => startProjectSessionReset(), []);
|
|
130
|
+
|
|
131
|
+
// The scene table's EDIT client: every authorable scene the adapter declares
|
|
132
|
+
// becomes a workspace document, the default open by default
|
|
133
|
+
// (`components/scene-documents.tsx`). Bound beside the load above because it
|
|
134
|
+
// consumes exactly what that publishes and nothing else.
|
|
135
|
+
useEffect(() => startSceneDocuments(storeRef.current!), []);
|
|
136
|
+
|
|
137
|
+
// The tab's RESOURCE CENSUS (tab-census.ts) — a 0.2 Hz sample that rides the
|
|
138
|
+
// heartbeat, so a browser-level renderer death has a cause line instead of a
|
|
139
|
+
// bare 1006. Editor-init lifecycle for the same reason as the discoveries
|
|
140
|
+
// above: it must run whether or not any panel that reads it is mounted.
|
|
141
|
+
useEffect(() => startTabCensus({ report: reportTabCensus }), []);
|
|
142
|
+
|
|
143
|
+
const sessionMounted = useRef(false);
|
|
144
|
+
useEffect(() => {
|
|
145
|
+
sessionMounted.current = true;
|
|
146
|
+
const session = sessionRef.current!;
|
|
147
|
+
return () => {
|
|
148
|
+
sessionMounted.current = false;
|
|
149
|
+
// Fast Refresh replays effects while preserving the store and session.
|
|
150
|
+
// Dispose only if the provider remains unmounted after that replay.
|
|
151
|
+
queueMicrotask(() => {
|
|
152
|
+
if (!sessionMounted.current) session.dispose();
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
}, []);
|
|
156
|
+
|
|
157
|
+
return (
|
|
158
|
+
<EditorRuntimeProvider
|
|
159
|
+
runtime={{
|
|
160
|
+
store: storeRef.current,
|
|
161
|
+
stats: statsRef.current,
|
|
162
|
+
initPromise: initRef.current!,
|
|
163
|
+
session: sessionRef.current,
|
|
164
|
+
}}
|
|
165
|
+
>
|
|
166
|
+
{children}
|
|
167
|
+
</EditorRuntimeProvider>
|
|
168
|
+
);
|
|
169
|
+
}
|