@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,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The worktree board: which checkouts this repository has, which of them an
|
|
3
|
+
* editor is serving, and the create / open / delegate / archive / stop verbs.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { assertEditorServerAnswered } from '../editor-server-response';
|
|
7
|
+
import { BASE } from './base';
|
|
8
|
+
export interface EditorRepositoryParticipant {
|
|
9
|
+
participantId: string;
|
|
10
|
+
displayName: string;
|
|
11
|
+
kind: 'human' | 'agent';
|
|
12
|
+
color: string;
|
|
13
|
+
status: 'active' | 'idle' | 'needs-input' | 'done';
|
|
14
|
+
lastSeenAt: string;
|
|
15
|
+
agent: { harness: string; conversationId: string } | null;
|
|
16
|
+
changeCount: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface EditorRepositoryPresenceSession {
|
|
20
|
+
sessionId: string;
|
|
21
|
+
worktreeId: string;
|
|
22
|
+
branch: string | null;
|
|
23
|
+
updatedAt: string;
|
|
24
|
+
participants: Array<
|
|
25
|
+
Omit<EditorRepositoryParticipant, 'agent'> & { agent: { harness: string } | null }
|
|
26
|
+
>;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface EditorRepositoryPresence {
|
|
30
|
+
currentWorktreeId: string | null;
|
|
31
|
+
sessions: EditorRepositoryPresenceSession[];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Browser-safe repository directory. Unlike worktree management, this is
|
|
35
|
+
* available through a shared session and contains no host filesystem data. */
|
|
36
|
+
export async function getEditorRepositoryPresence(): Promise<EditorRepositoryPresence> {
|
|
37
|
+
const response = await fetch(`${BASE}/repository-presence`, { cache: 'no-store' });
|
|
38
|
+
// An empty presence is a MEASUREMENT ("nobody else is here"), so it may only
|
|
39
|
+
// be returned when the editor server said so — never when a page fallback did.
|
|
40
|
+
assertEditorServerAnswered(response, 'Could not read repository presence');
|
|
41
|
+
if (!response.ok) return { currentWorktreeId: null, sessions: [] };
|
|
42
|
+
const payload = (await response
|
|
43
|
+
.json()
|
|
44
|
+
.catch(() => null)) as Partial<EditorRepositoryPresence> | null;
|
|
45
|
+
return {
|
|
46
|
+
currentWorktreeId:
|
|
47
|
+
typeof payload?.currentWorktreeId === 'string' ? payload.currentWorktreeId : null,
|
|
48
|
+
sessions: Array.isArray(payload?.sessions) ? payload.sessions : [],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface EditorWorktreeSession {
|
|
53
|
+
sessionId: string | null;
|
|
54
|
+
port: number;
|
|
55
|
+
pid: number | null;
|
|
56
|
+
presence?: {
|
|
57
|
+
updatedAt: string;
|
|
58
|
+
participants: EditorRepositoryParticipant[];
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface EditorWorktree {
|
|
63
|
+
root: string;
|
|
64
|
+
branch: string | null;
|
|
65
|
+
headCommit: string | null;
|
|
66
|
+
worktreeId: string;
|
|
67
|
+
current: boolean;
|
|
68
|
+
project: string | null;
|
|
69
|
+
dirty: boolean;
|
|
70
|
+
ahead: number | null;
|
|
71
|
+
behind: number | null;
|
|
72
|
+
locked: string | null;
|
|
73
|
+
prunable: string | null;
|
|
74
|
+
sessions: EditorWorktreeSession[];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface EditorBranch {
|
|
78
|
+
name: string;
|
|
79
|
+
headCommit: string;
|
|
80
|
+
updatedAt: number;
|
|
81
|
+
worktreeId: string | null;
|
|
82
|
+
current: boolean;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export interface EditorIsolatedWorktree {
|
|
86
|
+
id: string;
|
|
87
|
+
repositoryId: string;
|
|
88
|
+
branch: string;
|
|
89
|
+
from: string;
|
|
90
|
+
editorPort: number;
|
|
91
|
+
createdAt: string;
|
|
92
|
+
exportedAt?: string;
|
|
93
|
+
exportedHead?: string;
|
|
94
|
+
state: string;
|
|
95
|
+
/** The container's `StartedAt`, or `null` when Docker could not inspect it. */
|
|
96
|
+
startedAt?: string | null;
|
|
97
|
+
egressPolicy: 'allowlist';
|
|
98
|
+
egressHosts: string[];
|
|
99
|
+
/**
|
|
100
|
+
* `docker-unavailable` is NOT `stopped`: the daemon could not be reached, so
|
|
101
|
+
* nothing is known about the container and no destructive gesture may act on
|
|
102
|
+
* the record. `unhealthy` is NOT `starting`: the container is running and its
|
|
103
|
+
* editor has been unreachable for longer than a boot takes.
|
|
104
|
+
*/
|
|
105
|
+
health: 'healthy' | 'starting' | 'unhealthy' | 'stopped' | 'docker-unavailable';
|
|
106
|
+
limits: {
|
|
107
|
+
cpus: number;
|
|
108
|
+
memory: string;
|
|
109
|
+
pids: number;
|
|
110
|
+
workspace: string;
|
|
111
|
+
assetCache: string;
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export interface EditorWorktreeState {
|
|
116
|
+
worktrees: EditorWorktree[];
|
|
117
|
+
branches: EditorBranch[];
|
|
118
|
+
isolatedWorktrees: EditorIsolatedWorktree[];
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export interface EditorSessionWorktreeIdentity {
|
|
122
|
+
branch: string | null;
|
|
123
|
+
worktreeId: string | null;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** The cheap, already-owned session identity used by persistent header chrome.
|
|
127
|
+
* Repository-wide worktree inspection is intentionally a separate, on-demand
|
|
128
|
+
* operation: asking Git for every checkout's status can take seconds in a
|
|
129
|
+
* repository with many agent worktrees and must never sit on viewport boot. */
|
|
130
|
+
export async function getEditorSessionWorktreeIdentity(): Promise<EditorSessionWorktreeIdentity> {
|
|
131
|
+
const response = await fetch(`${BASE}/project`, { cache: 'no-store' });
|
|
132
|
+
assertEditorServerAnswered(response, 'Could not read this session’s worktree identity');
|
|
133
|
+
if (!response.ok) return { branch: null, worktreeId: null };
|
|
134
|
+
const payload = (await response.json().catch(() => null)) as {
|
|
135
|
+
session?: { branch?: unknown; worktreeId?: unknown };
|
|
136
|
+
} | null;
|
|
137
|
+
return {
|
|
138
|
+
branch: typeof payload?.session?.branch === 'string' ? payload.session.branch : null,
|
|
139
|
+
worktreeId:
|
|
140
|
+
typeof payload?.session?.worktreeId === 'string' ? payload.session.worktreeId : null,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
async function worktreeRequest(path: string, init?: RequestInit): Promise<Record<string, unknown>> {
|
|
145
|
+
const response = await fetch(`${BASE}/worktrees${path}`, init);
|
|
146
|
+
// Every verb below reports by returning, and `.json().catch(() => null)`
|
|
147
|
+
// turned a page fallback into `{}` — an archive/stop/delegate that touched
|
|
148
|
+
// nothing, answered with an empty worktree board.
|
|
149
|
+
assertEditorServerAnswered(response, `Worktree operation ${path || '(list)'} failed`);
|
|
150
|
+
const payload = (await response.json().catch(() => null)) as Record<string, unknown> | null;
|
|
151
|
+
if (!response.ok) {
|
|
152
|
+
throw new Error(
|
|
153
|
+
typeof payload?.['error'] === 'string'
|
|
154
|
+
? payload['error']
|
|
155
|
+
: `Worktree operation failed (${response.status}).`,
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
return payload ?? {};
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function parseEditorWorktreeState(payload: Record<string, unknown>): EditorWorktreeState {
|
|
162
|
+
return {
|
|
163
|
+
worktrees: Array.isArray(payload['worktrees'])
|
|
164
|
+
? (payload['worktrees'] as EditorWorktree[])
|
|
165
|
+
: [],
|
|
166
|
+
branches: Array.isArray(payload['branches']) ? (payload['branches'] as EditorBranch[]) : [],
|
|
167
|
+
isolatedWorktrees: Array.isArray(payload['isolatedWorktrees'])
|
|
168
|
+
? (payload['isolatedWorktrees'] as EditorIsolatedWorktree[])
|
|
169
|
+
: [],
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export async function listEditorWorktrees(): Promise<EditorWorktreeState> {
|
|
174
|
+
const payload = await worktreeRequest('');
|
|
175
|
+
return parseEditorWorktreeState(payload);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export async function openEditorWorktree(
|
|
179
|
+
worktreeId: string,
|
|
180
|
+
): Promise<{ url: string; status: string }> {
|
|
181
|
+
return (await worktreeRequest('/open', {
|
|
182
|
+
method: 'POST',
|
|
183
|
+
headers: { 'Content-Type': 'application/json' },
|
|
184
|
+
body: JSON.stringify({ worktreeId }),
|
|
185
|
+
})) as { url: string; status: string };
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export async function createEditorWorktree(
|
|
189
|
+
branch: string,
|
|
190
|
+
from = 'HEAD',
|
|
191
|
+
): Promise<{ url: string; status: string }> {
|
|
192
|
+
return (await worktreeRequest('/create', {
|
|
193
|
+
method: 'POST',
|
|
194
|
+
headers: { 'Content-Type': 'application/json' },
|
|
195
|
+
body: JSON.stringify({ branch, from }),
|
|
196
|
+
})) as { url: string; status: string };
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export async function delegateEditorTask(input: {
|
|
200
|
+
task: string;
|
|
201
|
+
harness: string;
|
|
202
|
+
isolation: 'worktree' | 'current' | 'container';
|
|
203
|
+
branch?: string;
|
|
204
|
+
from?: string;
|
|
205
|
+
}): Promise<Record<string, unknown>> {
|
|
206
|
+
return worktreeRequest('/delegate', {
|
|
207
|
+
method: 'POST',
|
|
208
|
+
headers: { 'Content-Type': 'application/json' },
|
|
209
|
+
body: JSON.stringify(input),
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export async function isolatedEditorWorktreeLogs(id: string): Promise<string> {
|
|
214
|
+
const payload = await worktreeRequest(`/isolated/${encodeURIComponent(id)}/logs`);
|
|
215
|
+
return typeof payload['logs'] === 'string' ? payload['logs'] : '';
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export async function exportIsolatedEditorWorktree(id: string): Promise<EditorWorktreeState> {
|
|
219
|
+
const payload = await worktreeRequest('/isolated/export', {
|
|
220
|
+
method: 'POST',
|
|
221
|
+
headers: { 'Content-Type': 'application/json' },
|
|
222
|
+
body: JSON.stringify({ id }),
|
|
223
|
+
});
|
|
224
|
+
return parseEditorWorktreeState(payload);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export async function stopIsolatedEditorWorktree(
|
|
228
|
+
id: string,
|
|
229
|
+
discard: boolean,
|
|
230
|
+
): Promise<EditorWorktreeState> {
|
|
231
|
+
const payload = await worktreeRequest('/isolated/stop', {
|
|
232
|
+
method: 'POST',
|
|
233
|
+
headers: { 'Content-Type': 'application/json' },
|
|
234
|
+
body: JSON.stringify({ id, discard }),
|
|
235
|
+
});
|
|
236
|
+
return parseEditorWorktreeState(payload);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
export async function archiveEditorWorktree(worktreeId: string): Promise<EditorWorktree[]> {
|
|
240
|
+
const payload = await worktreeRequest('/archive', {
|
|
241
|
+
method: 'POST',
|
|
242
|
+
headers: { 'Content-Type': 'application/json' },
|
|
243
|
+
body: JSON.stringify({ worktreeId }),
|
|
244
|
+
});
|
|
245
|
+
return parseEditorWorktreeState(payload).worktrees;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
export async function stopEditorWorktreeSession(
|
|
249
|
+
worktreeId: string,
|
|
250
|
+
sessionId: string,
|
|
251
|
+
): Promise<void> {
|
|
252
|
+
await worktreeRequest('/stop', {
|
|
253
|
+
method: 'POST',
|
|
254
|
+
headers: { 'Content-Type': 'application/json' },
|
|
255
|
+
body: JSON.stringify({ worktreeId, sessionId }),
|
|
256
|
+
});
|
|
257
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* B8.4 — pure math for the Asset Lab compare mode (`vgai screenshot
|
|
3
|
+
* <model.glb> --compare <ref.glb>`): silhouette masks, IoU, the overlay pixel recipe,
|
|
4
|
+
* forward-facing normalization, and the equal-height placement that lets a
|
|
5
|
+
* procedural humanoid be scored numerically against a reference GLB.
|
|
6
|
+
*
|
|
7
|
+
* Deliberately DOM/WebGL-free so the whole scoring contract is unit-testable
|
|
8
|
+
* in node (`packages/editor/test/asset-compare-core.test.ts`); the browser
|
|
9
|
+
* rendering half lives in `asset-compare.ts`.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export const ASSET_COMPARE_VIEWS = ['front', 'side'] as const;
|
|
13
|
+
export type AssetCompareView = (typeof ASSET_COMPARE_VIEWS)[number];
|
|
14
|
+
|
|
15
|
+
/** Both models are scaled to this height, feet at y=0, centered on x=z=0. */
|
|
16
|
+
export const COMPARE_TARGET_HEIGHT = 1;
|
|
17
|
+
/** Fixed orthographic frame: half-height around the model's mid-height. The
|
|
18
|
+
* 10% margin keeps equal-height silhouettes fully in frame while wasting
|
|
19
|
+
* little resolution — and, being CONSTANT, makes captures deterministic
|
|
20
|
+
* across runs (a stated gate) and comparable across assets. */
|
|
21
|
+
export const COMPARE_FRAME_HALF_HEIGHT = 0.55;
|
|
22
|
+
export const COMPARE_FRAME_CENTER_Y = COMPARE_TARGET_HEIGHT / 2;
|
|
23
|
+
|
|
24
|
+
/** Silhouettes render as a flat unlit white override on solid black, so the
|
|
25
|
+
* mask threshold sits mid-range — antialiased edge pixels land on the side
|
|
26
|
+
* of the ramp they dominate. */
|
|
27
|
+
export const SILHOUETTE_LUMA_THRESHOLD = 128;
|
|
28
|
+
|
|
29
|
+
/** Overlay legend (RGB). The overlay is machine-generated review evidence:
|
|
30
|
+
* every pixel is exactly one of these four colors. */
|
|
31
|
+
export const OVERLAY_BACKGROUND_RGB = [24, 26, 31] as const;
|
|
32
|
+
export const OVERLAY_ASSET_ONLY_RGB = [235, 137, 52] as const; // orange — the asset under test
|
|
33
|
+
export const OVERLAY_REF_ONLY_RGB = [56, 189, 248] as const; // cyan — the reference
|
|
34
|
+
export const OVERLAY_OVERLAP_RGB = [236, 240, 238] as const; // near-white — agreement
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Binary silhouette mask from RGBA pixels of a white-on-black render: a
|
|
38
|
+
* pixel belongs to the silhouette when any color channel crosses the
|
|
39
|
+
* threshold. Returns one byte (0|1) per pixel.
|
|
40
|
+
*/
|
|
41
|
+
export function silhouetteMaskFromRgba(rgba: ArrayLike<number>, pixelCount: number): Uint8Array {
|
|
42
|
+
if (rgba.length < pixelCount * 4) {
|
|
43
|
+
throw new Error(
|
|
44
|
+
`Silhouette mask expected ${pixelCount * 4} RGBA bytes but received ${rgba.length}.`,
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
const mask = new Uint8Array(pixelCount);
|
|
48
|
+
for (let pixel = 0; pixel < pixelCount; pixel++) {
|
|
49
|
+
const offset = pixel * 4;
|
|
50
|
+
const value =
|
|
51
|
+
rgba[offset]! >= SILHOUETTE_LUMA_THRESHOLD ||
|
|
52
|
+
rgba[offset + 1]! >= SILHOUETTE_LUMA_THRESHOLD ||
|
|
53
|
+
rgba[offset + 2]! >= SILHOUETTE_LUMA_THRESHOLD;
|
|
54
|
+
mask[pixel] = value ? 1 : 0;
|
|
55
|
+
}
|
|
56
|
+
return mask;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface MaskOverlapStats {
|
|
60
|
+
intersection: number;
|
|
61
|
+
union: number;
|
|
62
|
+
aCount: number;
|
|
63
|
+
bCount: number;
|
|
64
|
+
/** intersection / union; 0 when the union is empty (guard emptiness upstream). */
|
|
65
|
+
iou: number;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Silhouette intersection-over-union between two same-length binary masks. */
|
|
69
|
+
export function maskIoU(a: Uint8Array, b: Uint8Array): MaskOverlapStats {
|
|
70
|
+
if (a.length !== b.length) {
|
|
71
|
+
throw new Error(`Mask IoU requires equal-size masks (${a.length} vs ${b.length}).`);
|
|
72
|
+
}
|
|
73
|
+
let intersection = 0;
|
|
74
|
+
let aCount = 0;
|
|
75
|
+
let bCount = 0;
|
|
76
|
+
for (let index = 0; index < a.length; index++) {
|
|
77
|
+
const inA = a[index] !== 0;
|
|
78
|
+
const inB = b[index] !== 0;
|
|
79
|
+
if (inA) aCount++;
|
|
80
|
+
if (inB) bCount++;
|
|
81
|
+
if (inA && inB) intersection++;
|
|
82
|
+
}
|
|
83
|
+
const union = aCount + bCount - intersection;
|
|
84
|
+
return { intersection, union, aCount, bCount, iou: union === 0 ? 0 : intersection / union };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* The compare overlay: both silhouettes on one image in visibly distinct
|
|
89
|
+
* colors — asset-only orange, reference-only cyan, agreement near-white on a
|
|
90
|
+
* dark background. Returns opaque RGBA bytes ready for an ImageData.
|
|
91
|
+
*/
|
|
92
|
+
export function overlayRgba(
|
|
93
|
+
assetMask: Uint8Array,
|
|
94
|
+
refMask: Uint8Array,
|
|
95
|
+
): Uint8ClampedArray<ArrayBuffer> {
|
|
96
|
+
if (assetMask.length !== refMask.length) {
|
|
97
|
+
throw new Error(
|
|
98
|
+
`Overlay requires equal-size masks (${assetMask.length} vs ${refMask.length}).`,
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
const out = new Uint8ClampedArray(assetMask.length * 4);
|
|
102
|
+
for (let pixel = 0; pixel < assetMask.length; pixel++) {
|
|
103
|
+
const inAsset = assetMask[pixel] !== 0;
|
|
104
|
+
const inRef = refMask[pixel] !== 0;
|
|
105
|
+
const color =
|
|
106
|
+
inAsset && inRef
|
|
107
|
+
? OVERLAY_OVERLAP_RGB
|
|
108
|
+
: inAsset
|
|
109
|
+
? OVERLAY_ASSET_ONLY_RGB
|
|
110
|
+
: inRef
|
|
111
|
+
? OVERLAY_REF_ONLY_RGB
|
|
112
|
+
: OVERLAY_BACKGROUND_RGB;
|
|
113
|
+
const offset = pixel * 4;
|
|
114
|
+
out[offset] = color[0];
|
|
115
|
+
out[offset + 1] = color[1];
|
|
116
|
+
out[offset + 2] = color[2];
|
|
117
|
+
out[offset + 3] = 255;
|
|
118
|
+
}
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** A structurally valid forward vector ([x,y,z], finite, non-degenerate in
|
|
123
|
+
* the ground plane) or null — used to read GLB `extras`/`userData.forward`
|
|
124
|
+
* without trusting arbitrary content. */
|
|
125
|
+
export function parseForwardVector(value: unknown): [number, number, number] | null {
|
|
126
|
+
if (!Array.isArray(value) || value.length !== 3) return null;
|
|
127
|
+
const [x, y, z] = value as unknown[];
|
|
128
|
+
if (typeof x !== 'number' || typeof y !== 'number' || typeof z !== 'number') return null;
|
|
129
|
+
if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z)) return null;
|
|
130
|
+
if (Math.hypot(x, z) < 1e-6) return null; // vertical/zero forward cannot define a facing
|
|
131
|
+
return [x, y, z];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* The Y rotation (radians) that turns a model whose forward is `forward`
|
|
136
|
+
* to face +Z — the direction the fixed front camera looks from. Facing is a
|
|
137
|
+
* ground-plane property; the vector's y component is ignored.
|
|
138
|
+
*/
|
|
139
|
+
export function forwardYawRadians(forward: readonly [number, number, number]): number {
|
|
140
|
+
const [x, , z] = forward;
|
|
141
|
+
if (!Number.isFinite(x) || !Number.isFinite(z) || Math.hypot(x, z) < 1e-6) {
|
|
142
|
+
throw new Error(`Cannot derive a facing from forward vector [${forward.join(', ')}].`);
|
|
143
|
+
}
|
|
144
|
+
return Math.atan2(x, z);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export interface NormalizedPlacement {
|
|
148
|
+
scale: number;
|
|
149
|
+
/** Applied AFTER the scale: ground at y=0, footprint centered at x=z=0. */
|
|
150
|
+
position: [number, number, number];
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Bounding-box height normalization (the decided compare framing): scale the
|
|
155
|
+
* model so its bounds stand `targetHeight` tall, then place it with its
|
|
156
|
+
* ground plane at y=0 and its bounds center on the x=0/z=0 axis.
|
|
157
|
+
*/
|
|
158
|
+
export function normalizedPlacement(
|
|
159
|
+
min: readonly [number, number, number],
|
|
160
|
+
max: readonly [number, number, number],
|
|
161
|
+
targetHeight: number = COMPARE_TARGET_HEIGHT,
|
|
162
|
+
): NormalizedPlacement {
|
|
163
|
+
const height = max[1] - min[1];
|
|
164
|
+
if (!Number.isFinite(height) || height <= 0) {
|
|
165
|
+
throw new Error(`Compare normalization needs positive model height, got ${height}.`);
|
|
166
|
+
}
|
|
167
|
+
const scale = targetHeight / height;
|
|
168
|
+
const centerX = (min[0] + max[0]) / 2;
|
|
169
|
+
const centerZ = (min[2] + max[2]) / 2;
|
|
170
|
+
return { scale, position: [-centerX * scale, -min[1] * scale, -centerZ * scale] };
|
|
171
|
+
}
|