@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.
Files changed (719) hide show
  1. package/BUNDLED_NOTICES +1527 -0
  2. package/LICENSE +686 -0
  3. package/LICENSE-APACHE +202 -0
  4. package/NOTICE +18 -0
  5. package/README.md +24 -0
  6. package/dist/build/chunk-JS4D4XZ3.js +175 -0
  7. package/dist/build/chunk-JS4D4XZ3.js.map +7 -0
  8. package/dist/build/vite-plugin-product-contributions.js +100 -0
  9. package/dist/build/vite-plugin-product-contributions.js.map +7 -0
  10. package/dist/build/vite-plugin-shared-react.js +25 -0
  11. package/dist/build/vite-plugin-shared-react.js.map +7 -0
  12. package/dist/build/vite-plugin-shared-three.js +86 -0
  13. package/dist/build/vite-plugin-shared-three.js.map +7 -0
  14. package/dist/server/chunk-KMJC7AGO.js +98 -0
  15. package/dist/server/chunk-KMJC7AGO.js.map +7 -0
  16. package/dist/server/chunk-PSILUMGS.js +46 -0
  17. package/dist/server/chunk-PSILUMGS.js.map +7 -0
  18. package/dist/server/frame-proxy.js +255 -0
  19. package/dist/server/frame-proxy.js.map +7 -0
  20. package/dist/server/open-browser.js +53 -0
  21. package/dist/server/open-browser.js.map +7 -0
  22. package/dist/server/process-shutdown.js +127 -0
  23. package/dist/server/process-shutdown.js.map +7 -0
  24. package/dist/server/session-registry.js +141 -0
  25. package/dist/server/session-registry.js.map +7 -0
  26. package/dist/server/spawn-opener.js +11 -0
  27. package/dist/server/spawn-opener.js.map +7 -0
  28. package/dist/server/worktree-identity.js +11 -0
  29. package/dist/server/worktree-identity.js.map +7 -0
  30. package/dist-server/packaged.mjs +88816 -0
  31. package/package.json +118 -0
  32. package/scripts/build-plugins.mjs +14 -0
  33. package/scripts/build-server.mjs +26 -0
  34. package/scripts/build-session.mjs +9 -0
  35. package/server/account-credentials.ts +60 -0
  36. package/server/account-service.ts +1434 -0
  37. package/server/adapter-region-includes.ts +47 -0
  38. package/server/asset-catalog-v2.ts +175 -0
  39. package/server/asset-history-snapshots.ts +196 -0
  40. package/server/asset-ledger-store.ts +195 -0
  41. package/server/asset-library-routes.ts +1595 -0
  42. package/server/blender-wasm-artifact.ts +430 -0
  43. package/server/boot-timings.ts +106 -0
  44. package/server/canonical-path.ts +50 -0
  45. package/server/checkout-workspace-preflight.ts +349 -0
  46. package/server/cloud-asset-catalog.ts +158 -0
  47. package/server/coding-inference-launch.ts +237 -0
  48. package/server/collaboration-account-client.ts +202 -0
  49. package/server/collaboration-attribution.ts +122 -0
  50. package/server/collaboration-session.ts +934 -0
  51. package/server/comfyui-bridge.ts +248 -0
  52. package/server/console-ledger.ts +499 -0
  53. package/server/creation-site-transform.ts +304 -0
  54. package/server/creation-site-write.ts +648 -0
  55. package/server/data-file-serialize.ts +158 -0
  56. package/server/editor-brand-html.ts +72 -0
  57. package/server/editor-control-socket.ts +366 -0
  58. package/server/editor-server-options.ts +190 -0
  59. package/server/editor-server.ts +1483 -0
  60. package/server/editor-sse.ts +352 -0
  61. package/server/engine-provenance.ts +169 -0
  62. package/server/engine-source-restart.ts +117 -0
  63. package/server/frame-bridge.ts +115 -0
  64. package/server/frame-proxy.ts +490 -0
  65. package/server/frame-workbench.ts +259 -0
  66. package/server/frontend-handoff.ts +229 -0
  67. package/server/game-globals-shadow.ts +113 -0
  68. package/server/gameplay-session-retention.ts +149 -0
  69. package/server/gameplay-sessions.ts +123 -0
  70. package/server/generation-jobs.ts +201 -0
  71. package/server/generation-reconciler.ts +137 -0
  72. package/server/generative-execution-context.ts +59 -0
  73. package/server/git-workflow.ts +612 -0
  74. package/server/harness-chat-caller.ts +36 -0
  75. package/server/harness-chat-service.ts +1681 -0
  76. package/server/idle-shutdown.ts +170 -0
  77. package/server/js-profiling-policy.ts +52 -0
  78. package/server/launcher-settings.ts +84 -0
  79. package/server/local-asset-catalog.ts +410 -0
  80. package/server/managed-account-defaults.ts +22 -0
  81. package/server/mock-control-plane.ts +540 -0
  82. package/server/model-import-conversion.ts +345 -0
  83. package/server/native-credential-store.ts +162 -0
  84. package/server/open-browser.ts +118 -0
  85. package/server/packaged.ts +1192 -0
  86. package/server/play-stall.ts +126 -0
  87. package/server/process-shutdown.ts +218 -0
  88. package/server/product-presets.ts +55 -0
  89. package/server/project-build-artifact.ts +95 -0
  90. package/server/project-components.ts +100 -0
  91. package/server/project-dependency-invalidation.ts +114 -0
  92. package/server/project-file-scan.ts +235 -0
  93. package/server/project-hmr-files.ts +215 -0
  94. package/server/project-install-roots.ts +210 -0
  95. package/server/project-kinds.ts +71 -0
  96. package/server/project-mcp-servers.ts +82 -0
  97. package/server/project-module-freshness.ts +109 -0
  98. package/server/project-module-instance.ts +375 -0
  99. package/server/project-optimize-deps-entries.ts +827 -0
  100. package/server/project-output-writer.ts +679 -0
  101. package/server/project-package-origin.ts +63 -0
  102. package/server/project-root-surface.ts +831 -0
  103. package/server/project-scratch-path.ts +47 -0
  104. package/server/project-script-hmr.ts +619 -0
  105. package/server/project-serving-plugins.ts +236 -0
  106. package/server/project-tools.ts +653 -0
  107. package/server/project-validation.ts +250 -0
  108. package/server/project-verbs.ts +127 -0
  109. package/server/project-view.ts +52 -0
  110. package/server/project-watch.ts +1134 -0
  111. package/server/project-work-coordinator.ts +288 -0
  112. package/server/provider-credentials.ts +331 -0
  113. package/server/recent-projects-store.ts +98 -0
  114. package/server/redact-secrets.ts +71 -0
  115. package/server/repository-presence.ts +267 -0
  116. package/server/routes/account.ts +357 -0
  117. package/server/routes/agents.ts +60 -0
  118. package/server/routes/assets.ts +154 -0
  119. package/server/routes/build.ts +13 -0
  120. package/server/routes/collaboration.ts +595 -0
  121. package/server/routes/configurations.ts +419 -0
  122. package/server/routes/context.ts +264 -0
  123. package/server/routes/control-plane.ts +1811 -0
  124. package/server/routes/logs.ts +272 -0
  125. package/server/routes/project-identity.ts +302 -0
  126. package/server/routes/project-open.ts +429 -0
  127. package/server/routes/project-source.ts +686 -0
  128. package/server/routes/project-state.ts +383 -0
  129. package/server/routes/relay.ts +1029 -0
  130. package/server/routes/route-helpers.ts +29 -0
  131. package/server/routes/served-modules.ts +138 -0
  132. package/server/routes/session-tabs.ts +196 -0
  133. package/server/routes/settings.ts +121 -0
  134. package/server/routes/share-control.ts +486 -0
  135. package/server/routes/themes.ts +116 -0
  136. package/server/routes/tools.ts +230 -0
  137. package/server/routes/worktrees.ts +595 -0
  138. package/server/scoped-game-css.ts +461 -0
  139. package/server/server-utils.ts +1194 -0
  140. package/server/session-product.ts +112 -0
  141. package/server/session-registry.ts +230 -0
  142. package/server/share-claims.ts +138 -0
  143. package/server/share-host.ts +526 -0
  144. package/server/share-session-gateway.ts +1362 -0
  145. package/server/share-tunnel.ts +123 -0
  146. package/server/spawn-opener.ts +74 -0
  147. package/server/support/play/log-format.ts +76 -0
  148. package/server/support/play/session-record.ts +199 -0
  149. package/server/support/project/build-discipline.ts +718 -0
  150. package/server/support/project/inspection-node.ts +119 -0
  151. package/server/support/project/log-naming.ts +54 -0
  152. package/server/support/project/provenance.ts +290 -0
  153. package/server/support/project/run-name.ts +18 -0
  154. package/server/support/project/session-journal.ts +830 -0
  155. package/server/support/project/shared.ts +327 -0
  156. package/server/tab-bootstrap.ts +62 -0
  157. package/server/tab-heartbeat.ts +477 -0
  158. package/server/tab-lifecycle.ts +550 -0
  159. package/server/tab-presence.ts +1508 -0
  160. package/server/team-agent-mirror.ts +95 -0
  161. package/server/twin-auth.ts +138 -0
  162. package/server/vendored-lock-recorder.ts +968 -0
  163. package/server/worktree-identity.ts +121 -0
  164. package/server/worktree-management.ts +398 -0
  165. package/server/worktree-retention.d.mts +13 -0
  166. package/server/worktree-retention.mjs +205 -0
  167. package/src/EditorContext.tsx +169 -0
  168. package/src/account.ts +333 -0
  169. package/src/action-registry.ts +532 -0
  170. package/src/active-product.ts +74 -0
  171. package/src/active-project.ts +155 -0
  172. package/src/adapter-editor-config.ts +25 -0
  173. package/src/adapter-observation.ts +49 -0
  174. package/src/animation/stage-transport.ts +379 -0
  175. package/src/animation/three-clips-subject.ts +172 -0
  176. package/src/api/asset-library-wire.ts +45 -0
  177. package/src/api/assets.ts +365 -0
  178. package/src/api/base.ts +10 -0
  179. package/src/api/build.ts +99 -0
  180. package/src/api/git-wire.ts +56 -0
  181. package/src/api/logs.ts +92 -0
  182. package/src/api/project-identity.ts +74 -0
  183. package/src/api/project-open.ts +355 -0
  184. package/src/api/project-source.ts +162 -0
  185. package/src/api/project-state.ts +107 -0
  186. package/src/api/relay.ts +268 -0
  187. package/src/api/settings.ts +36 -0
  188. package/src/api/themes.ts +45 -0
  189. package/src/api/worktrees.ts +257 -0
  190. package/src/asset-compare-core.ts +171 -0
  191. package/src/asset-compare.ts +294 -0
  192. package/src/asset-editor-context.tsx +100 -0
  193. package/src/asset-events.ts +97 -0
  194. package/src/asset-inspector-actions.ts +87 -0
  195. package/src/asset-preview-framing.ts +357 -0
  196. package/src/asset-preview.ts +2802 -0
  197. package/src/asset-selection-viewer-registry.ts +113 -0
  198. package/src/asset-selection.ts +133 -0
  199. package/src/asset-workflow/asset-capabilities.ts +344 -0
  200. package/src/asset-workflow/asset-import-jobs.ts +106 -0
  201. package/src/asset-workflow/asset-ledger-backend.ts +126 -0
  202. package/src/asset-workflow/asset-ledger.ts +156 -0
  203. package/src/asset-workflow/asset-materialization-report.ts +140 -0
  204. package/src/asset-workflow/asset-pack-manifest.ts +320 -0
  205. package/src/asset-workflow/asset-types.ts +142 -0
  206. package/src/asset-workflow/asset-workflow-quality.ts +61 -0
  207. package/src/asset-workflow/audio-preview-player.ts +193 -0
  208. package/src/asset-workflow/audio-waveform.ts +22 -0
  209. package/src/asset-workflow/cloud-asset-client.ts +263 -0
  210. package/src/asset-workflow/folder-preview.ts +345 -0
  211. package/src/asset-workflow/hosted-asset-materialization.ts +236 -0
  212. package/src/asset-workflow/image-view-scale.ts +32 -0
  213. package/src/asset-workflow/import-contract.ts +124 -0
  214. package/src/asset-workflow/ledger-write-lock.ts +244 -0
  215. package/src/asset-workflow/model-inspection.ts +818 -0
  216. package/src/asset-workflow/pixi-spritesheet.ts +197 -0
  217. package/src/asset-workflow/preview-resource-lifetime.ts +44 -0
  218. package/src/asset-workflow/project-asset-commands.ts +23 -0
  219. package/src/asset-workflow/project-asset-health.ts +139 -0
  220. package/src/asset-workflow/project-asset-operations.ts +154 -0
  221. package/src/asset-workflow/project-asset-roots.ts +68 -0
  222. package/src/asset-workflow/project-content.ts +288 -0
  223. package/src/asset-workflow/project-source-index.ts +550 -0
  224. package/src/asset-workflow/thumbnail-system.ts +256 -0
  225. package/src/authoring/active-adapter.ts +199 -0
  226. package/src/authoring/active-systems.ts +422 -0
  227. package/src/authoring/adapter-key.ts +18 -0
  228. package/src/authoring/authoring-asset-url.ts +27 -0
  229. package/src/authoring/bootstrap-state.ts +49 -0
  230. package/src/authoring/boundary-authoring-adapter.ts +184 -0
  231. package/src/authoring/breakpoint-state.ts +43 -0
  232. package/src/authoring/canvas-scene-guides.ts +76 -0
  233. package/src/authoring/component-instance-root.ts +171 -0
  234. package/src/authoring/composite-authoring-adapter.ts +2110 -0
  235. package/src/authoring/consumer-actions.ts +520 -0
  236. package/src/authoring/css-numeric-style.ts +97 -0
  237. package/src/authoring/design-time-layers.ts +849 -0
  238. package/src/authoring/design-time-mount-registry.ts +235 -0
  239. package/src/authoring/design-time-settle.ts +343 -0
  240. package/src/authoring/edit-mode-authoring.ts +619 -0
  241. package/src/authoring/eyedropper-session.ts +60 -0
  242. package/src/authoring/instance-source-menu-register.ts +13 -0
  243. package/src/authoring/instance-source-menu.ts +135 -0
  244. package/src/authoring/layered-pick.ts +183 -0
  245. package/src/authoring/live-gesture-lock.ts +50 -0
  246. package/src/authoring/live-object-transform.ts +62 -0
  247. package/src/authoring/mount-failure-report.ts +154 -0
  248. package/src/authoring/mounted-root-subjects.ts +144 -0
  249. package/src/authoring/no-authoring-adapter.ts +55 -0
  250. package/src/authoring/null-inspection-subjects.tsx +75 -0
  251. package/src/authoring/object3d-document-persistence.ts +106 -0
  252. package/src/authoring/object3d-document-session-registry.ts +120 -0
  253. package/src/authoring/object3d-document-session.ts +1326 -0
  254. package/src/authoring/object3d-gesture-controller.ts +113 -0
  255. package/src/authoring/panel-authoring.ts +121 -0
  256. package/src/authoring/prefab-instance-inspector-section.tsx +237 -0
  257. package/src/authoring/prefab-instance-section-model.ts +55 -0
  258. package/src/authoring/project-authoring-session.ts +105 -0
  259. package/src/authoring/provenance.ts +99 -0
  260. package/src/authoring/quarks-particle-systems.ts +19 -0
  261. package/src/authoring/react-canvas-navigation.ts +255 -0
  262. package/src/authoring/react-design-canvas-style.ts +20 -0
  263. package/src/authoring/react-story-board.ts +937 -0
  264. package/src/authoring/selection-scope.ts +195 -0
  265. package/src/authoring/shell-document-ops.ts +169 -0
  266. package/src/authoring/shell-object3d-document-write-policy.ts +108 -0
  267. package/src/authoring/shell-viewport-policy.ts +48 -0
  268. package/src/authoring/source-object3d-authoring-adapter.ts +526 -0
  269. package/src/authoring/stories-scope.ts +35 -0
  270. package/src/authoring/story-board-chrome-fit.ts +107 -0
  271. package/src/authoring/story-board-presentation.ts +111 -0
  272. package/src/authoring/three-projection-core.ts +226 -0
  273. package/src/authoring/viewport-pick-context.ts +40 -0
  274. package/src/authoring/viewport-raycast.ts +240 -0
  275. package/src/authoring/viewport-tool-context.ts +73 -0
  276. package/src/authoring/world-canvas-viewport-state.ts +35 -0
  277. package/src/authoring/world-hidden-viewport.ts +152 -0
  278. package/src/authoring/world-pan-state.ts +198 -0
  279. package/src/authoring/world-session-state.ts +101 -0
  280. package/src/authoring/write-pipe.ts +173 -0
  281. package/src/availability-tick.ts +66 -0
  282. package/src/bitmap-label.ts +120 -0
  283. package/src/blender-tab-metrics.ts +161 -0
  284. package/src/board-open-actions.ts +20 -0
  285. package/src/boot-routing.ts +391 -0
  286. package/src/build-identity.ts +15 -0
  287. package/src/bytes-codec.ts +62 -0
  288. package/src/camera-authoring.ts +175 -0
  289. package/src/cancellation-reason.ts +58 -0
  290. package/src/canvas-preview-frames.ts +482 -0
  291. package/src/capture-camera-pose.ts +77 -0
  292. package/src/chrome-registry.ts +159 -0
  293. package/src/chrome-slot-registry.ts +91 -0
  294. package/src/collaboration-client.ts +264 -0
  295. package/src/collaboration-presence.ts +41 -0
  296. package/src/command-dispatch.ts +19 -0
  297. package/src/command-listener.ts +2743 -0
  298. package/src/command-registry.ts +70 -0
  299. package/src/component-board-registry.ts +205 -0
  300. package/src/component-states-registry.ts +200 -0
  301. package/src/components/AgentPresentationNotice.tsx +75 -0
  302. package/src/components/AlignToolbar.tsx +204 -0
  303. package/src/components/AppRoot.tsx +394 -0
  304. package/src/components/ApplicationMenus.tsx +415 -0
  305. package/src/components/AssetBrowser.tsx +2843 -0
  306. package/src/components/AssetEditorShell.tsx +216 -0
  307. package/src/components/AssetInspectorToolSection.tsx +124 -0
  308. package/src/components/BoardRulers.tsx +354 -0
  309. package/src/components/CameraInfo.tsx +81 -0
  310. package/src/components/CanvasSceneViewport.tsx +556 -0
  311. package/src/components/CapabilityCoverageSection.tsx +185 -0
  312. package/src/components/CenterDocuments.tsx +22 -0
  313. package/src/components/ChromeSlot.tsx +20 -0
  314. package/src/components/CodeView.tsx +470 -0
  315. package/src/components/CollaborationHeaderControl.css +74 -0
  316. package/src/components/CompactInspectorCard.tsx +190 -0
  317. package/src/components/CompactInspectorShell.tsx +39 -0
  318. package/src/components/ConsolePanel.css +55 -0
  319. package/src/components/ConsolePanel.tsx +270 -0
  320. package/src/components/DefaultEditorLayout.tsx +106 -0
  321. package/src/components/DocumentHeaderStrip.tsx +96 -0
  322. package/src/components/DocumentShelfRail.tsx +45 -0
  323. package/src/components/DocumentThumbnail.tsx +345 -0
  324. package/src/components/EditorLeaseGuard.tsx +372 -0
  325. package/src/components/ErrorBanner.tsx +123 -0
  326. package/src/components/FolderPreviewTile.tsx +159 -0
  327. package/src/components/GameHierarchy.tsx +3842 -0
  328. package/src/components/GameplaySessionTimeline.tsx +295 -0
  329. package/src/components/InspectionProjection.tsx +968 -0
  330. package/src/components/Inspector.tsx +233 -0
  331. package/src/components/InspectorCanvasPreview.tsx +35 -0
  332. package/src/components/InspectorFieldsSection.tsx +290 -0
  333. package/src/components/InspectorObjectPreview.tsx +57 -0
  334. package/src/components/InspectorStoriesSection.tsx +92 -0
  335. package/src/components/InspectorToolSection.tsx +96 -0
  336. package/src/components/InspectorTransformSection.tsx +245 -0
  337. package/src/components/LightExplorerPanel.tsx +433 -0
  338. package/src/components/MediaProperties.tsx +145 -0
  339. package/src/components/NonThreeAuthoringBootstrap.tsx +19 -0
  340. package/src/components/Object3DDocumentToolbar.css +100 -0
  341. package/src/components/Object3DDocumentToolbar.tsx +454 -0
  342. package/src/components/Object3DDocumentViewport.tsx +58 -0
  343. package/src/components/ProjectHeader.css +617 -0
  344. package/src/components/ProjectHeader.tsx +328 -0
  345. package/src/components/ProjectLayout.tsx +249 -0
  346. package/src/components/ReactCanvasControls.tsx +284 -0
  347. package/src/components/RootSelectionOverlay.tsx +3162 -0
  348. package/src/components/RootTextEditor.tsx +79 -0
  349. package/src/components/SaveStatus.tsx +70 -0
  350. package/src/components/StageHost.tsx +1954 -0
  351. package/src/components/StageOverlays.tsx +21 -0
  352. package/src/components/StartupErrorScreen.tsx +76 -0
  353. package/src/components/StartupLoadingScreen.tsx +65 -0
  354. package/src/components/StatsOverlay.tsx +78 -0
  355. package/src/components/SurfaceStateOverlay.tsx +24 -0
  356. package/src/components/ToolContributionSurfaces.tsx +65 -0
  357. package/src/components/ToolHost.tsx +370 -0
  358. package/src/components/ToolObject3DPreview.tsx +39 -0
  359. package/src/components/Toolbar.tsx +595 -0
  360. package/src/components/TransientHint.tsx +44 -0
  361. package/src/components/TransportStrip.tsx +174 -0
  362. package/src/components/VersionControlSection.tsx +470 -0
  363. package/src/components/VgaiLogo.css +83 -0
  364. package/src/components/VgaiLogo.tsx +35 -0
  365. package/src/components/ViewportControlsHint.tsx +60 -0
  366. package/src/components/ViewportFurniture.tsx +401 -0
  367. package/src/components/ViewportOverlay.tsx +145 -0
  368. package/src/components/ViewportOverlaysMenu.tsx +153 -0
  369. package/src/components/ViewportShadingMenu.tsx +300 -0
  370. package/src/components/ViewportViewMenu.tsx +101 -0
  371. package/src/components/WorkspaceDocumentSurface.tsx +204 -0
  372. package/src/components/WorkspaceUtilitySurface.tsx +22 -0
  373. package/src/components/WorktreeSwitcher.css +239 -0
  374. package/src/components/WorktreeSwitcher.tsx +890 -0
  375. package/src/components/account-documents.tsx +1162 -0
  376. package/src/components/asset-documents.tsx +812 -0
  377. package/src/components/asset-editor-persistence.ts +216 -0
  378. package/src/components/asset-selection-section.tsx +535 -0
  379. package/src/components/asset-thumbnails.tsx +312 -0
  380. package/src/components/asset-viewers/AudioViewer.tsx +201 -0
  381. package/src/components/asset-viewers/EntityModelDocument.tsx +122 -0
  382. package/src/components/asset-viewers/EnvironmentAssetDocument.tsx +440 -0
  383. package/src/components/asset-viewers/GenericJsonViewer.tsx +102 -0
  384. package/src/components/asset-viewers/ImageViewer.tsx +300 -0
  385. package/src/components/asset-viewers/JsonAssetDocument.tsx +93 -0
  386. package/src/components/asset-viewers/LiveModuleDocument.tsx +417 -0
  387. package/src/components/asset-viewers/LutAssetDocument.tsx +444 -0
  388. package/src/components/asset-viewers/ModelAssetDocument.tsx +105 -0
  389. package/src/components/asset-viewers/Object3DPreview.tsx +359 -0
  390. package/src/components/asset-viewers/OnlineAssetDetail.tsx +421 -0
  391. package/src/components/asset-viewers/PasteboardModuleDocument.tsx +67 -0
  392. package/src/components/asset-viewers/QuarksAssetDocument.tsx +526 -0
  393. package/src/components/asset-viewers/ShaderAssetDocument.tsx +743 -0
  394. package/src/components/asset-viewers/SourceAssetViewer.tsx +281 -0
  395. package/src/components/asset-viewers/SpritesheetSpriteView.tsx +102 -0
  396. package/src/components/asset-viewers/VideoViewer.tsx +101 -0
  397. package/src/components/asset-viewers/shader-source.ts +144 -0
  398. package/src/components/asset-workflow.css +731 -0
  399. package/src/components/board-guides.ts +150 -0
  400. package/src/components/compact-inspector.css +539 -0
  401. package/src/components/core-utilities.tsx +90 -0
  402. package/src/components/editor-notifications.css +40 -0
  403. package/src/components/engine-workspace.css +274 -0
  404. package/src/components/inspector-preview-section.tsx +238 -0
  405. package/src/components/inspector-property-grouping.ts +64 -0
  406. package/src/components/inspector-revert-label.ts +20 -0
  407. package/src/components/inspector-selection.ts +42 -0
  408. package/src/components/inspector-stories-gating.ts +171 -0
  409. package/src/components/inspector-transform-subject.ts +11 -0
  410. package/src/components/inspector-transform.ts +75 -0
  411. package/src/components/kind-documents.tsx +500 -0
  412. package/src/components/palette-action-publisher.tsx +140 -0
  413. package/src/components/primitives/DraftColorInput.tsx +74 -0
  414. package/src/components/product-shell.css +1829 -0
  415. package/src/components/project-tool-documents.tsx +410 -0
  416. package/src/components/scene-documents.tsx +223 -0
  417. package/src/components/stage-keyboard.tsx +37 -0
  418. package/src/components/stage-overlay-set.tsx +107 -0
  419. package/src/components/stage-presence-markers.ts +478 -0
  420. package/src/components/standard-viewport-dressing.ts +417 -0
  421. package/src/components/status-contributions.tsx +403 -0
  422. package/src/components/tool-documents.tsx +309 -0
  423. package/src/components/tool-schema-form.tsx +262 -0
  424. package/src/components/use-after-paint.ts +41 -0
  425. package/src/components/use-project-image-assets.ts +86 -0
  426. package/src/components/viewport-header-controls.css +90 -0
  427. package/src/components/viewport-surface-status.tsx +55 -0
  428. package/src/components/workspace-history.ts +32 -0
  429. package/src/components/workspace-static-panel-registry.tsx +152 -0
  430. package/src/components/workspace-surfaces.css +621 -0
  431. package/src/components/world-documents.tsx +586 -0
  432. package/src/components/world-overlay-gestures.ts +1694 -0
  433. package/src/composite-screenshot.ts +1641 -0
  434. package/src/console-sync.ts +131 -0
  435. package/src/constraint-helper.ts +338 -0
  436. package/src/content-entry-source-registry.ts +184 -0
  437. package/src/coverage/authoring-seam-evidence.ts +300 -0
  438. package/src/coverage/canvas-reveal.ts +192 -0
  439. package/src/coverage/design-time-surfaces.ts +101 -0
  440. package/src/coverage/live-seam-evidence.ts +11 -0
  441. package/src/coverage/ontology-invariants.ts +466 -0
  442. package/src/coverage/session-vitals.ts +501 -0
  443. package/src/coverage/system-seam-evidence.ts +72 -0
  444. package/src/crash-null-boundary.ts +36 -0
  445. package/src/creation-site-edit.ts +1479 -0
  446. package/src/creation-site-registry.ts +160 -0
  447. package/src/delegate-harness-registry.ts +143 -0
  448. package/src/document-context-registry.ts +177 -0
  449. package/src/document-open-registry.ts +200 -0
  450. package/src/document-preview-source.ts +20 -0
  451. package/src/document-renderer-session.ts +138 -0
  452. package/src/editor-api.ts +46 -0
  453. package/src/editor-chrome-capture.ts +139 -0
  454. package/src/editor-commands.ts +164 -0
  455. package/src/editor-console.ts +563 -0
  456. package/src/editor-current-view.ts +82 -0
  457. package/src/editor-document-probe.ts +881 -0
  458. package/src/editor-git-client.ts +115 -0
  459. package/src/editor-host-door.ts +462 -0
  460. package/src/editor-hotkeys.ts +842 -0
  461. package/src/editor-lease-view.ts +39 -0
  462. package/src/editor-lease.ts +415 -0
  463. package/src/editor-mode.ts +19 -0
  464. package/src/editor-notifications.ts +140 -0
  465. package/src/editor-presence.ts +563 -0
  466. package/src/editor-presentation-activity.ts +50 -0
  467. package/src/editor-presentation-notice.ts +42 -0
  468. package/src/editor-runtime.tsx +145 -0
  469. package/src/editor-server-response.ts +86 -0
  470. package/src/editor-session-attribution.ts +75 -0
  471. package/src/editor-session-mode.ts +54 -0
  472. package/src/editor-shell-store.ts +1304 -0
  473. package/src/editor-state-facets.ts +74 -0
  474. package/src/editor-styles.css +33 -0
  475. package/src/editor-view-presentation.ts +810 -0
  476. package/src/editor-viewport.ts +5302 -0
  477. package/src/entity-lod.ts +31 -0
  478. package/src/entity-object.ts +91 -0
  479. package/src/files/file-provider.ts +62 -0
  480. package/src/files/project-files.ts +264 -0
  481. package/src/finders/index.ts +136 -0
  482. package/src/finders/scenes-from-entrypoint-selection.ts +387 -0
  483. package/src/frame/bridge.tsx +1408 -0
  484. package/src/frame/product.ts +77 -0
  485. package/src/gameplay-dom-recording.ts +319 -0
  486. package/src/gameplay-export-state.ts +14 -0
  487. package/src/gameplay-replay.ts +417 -0
  488. package/src/gameplay-session-time.ts +9 -0
  489. package/src/gameplay-sessions.ts +204 -0
  490. package/src/harness-chat-types.ts +253 -0
  491. package/src/hierarchy-component-marks.ts +298 -0
  492. package/src/hierarchy-drop.ts +91 -0
  493. package/src/hierarchy-expansion-state.ts +80 -0
  494. package/src/hierarchy-header-slot.ts +52 -0
  495. package/src/hierarchy-internals.ts +197 -0
  496. package/src/hierarchy-kind-icon.ts +217 -0
  497. package/src/hierarchy-mark-reader.ts +73 -0
  498. package/src/hierarchy-menu-registry.ts +67 -0
  499. package/src/hierarchy-node-rows.ts +307 -0
  500. package/src/hierarchy-panel-view.ts +280 -0
  501. package/src/hierarchy-projection.ts +76 -0
  502. package/src/hierarchy-row-cache.ts +243 -0
  503. package/src/hierarchy-row-model.ts +308 -0
  504. package/src/hierarchy-rows.ts +11 -0
  505. package/src/hierarchy-walk.ts +86 -0
  506. package/src/history/editor-session.ts +25 -0
  507. package/src/history/history-commands.ts +147 -0
  508. package/src/history/history-delegate.ts +163 -0
  509. package/src/history/history-limit-notices.ts +43 -0
  510. package/src/history/history-service.ts +1173 -0
  511. package/src/history/persistence-coordinator.ts +35 -0
  512. package/src/history/project-file-history.ts +386 -0
  513. package/src/history/project-root-history-backends.ts +139 -0
  514. package/src/history/resource-registry.ts +209 -0
  515. package/src/history/snapshot-store.ts +103 -0
  516. package/src/history/source-history-backend.ts +546 -0
  517. package/src/history/types.ts +124 -0
  518. package/src/hmr-registration-group.ts +67 -0
  519. package/src/hmr-stable-react-context.ts +23 -0
  520. package/src/hotkeys.ts +188 -0
  521. package/src/inference-diagnostics.ts +69 -0
  522. package/src/initial-project.ts +80 -0
  523. package/src/inspection/active-subject.ts +578 -0
  524. package/src/inspection/active-surface.ts +142 -0
  525. package/src/inspection/compose.ts +1064 -0
  526. package/src/inspection/display.ts +170 -0
  527. package/src/inspection/document-subject.ts +109 -0
  528. package/src/inspection/game-subject.ts +85 -0
  529. package/src/inspection/model.ts +542 -0
  530. package/src/inspection/null-subject.ts +115 -0
  531. package/src/inspection/serialize.ts +357 -0
  532. package/src/inspection/use-active-inspection.ts +180 -0
  533. package/src/inspector-presentation.ts +201 -0
  534. package/src/inspector-section-registry.ts +221 -0
  535. package/src/instance-source-actions.ts +163 -0
  536. package/src/instanced-presentation.ts +164 -0
  537. package/src/js-heap.ts +71 -0
  538. package/src/key-actions.ts +91 -0
  539. package/src/keymap-presets.ts +401 -0
  540. package/src/layout-policy.ts +31 -0
  541. package/src/learn-links.ts +73 -0
  542. package/src/light-explorer-model.ts +134 -0
  543. package/src/live-canvas-frame.ts +55 -0
  544. package/src/live-document.ts +279 -0
  545. package/src/live-module-source.ts +230 -0
  546. package/src/live-session-registry.ts +220 -0
  547. package/src/live-transition.ts +633 -0
  548. package/src/manifest-project.ts +107 -0
  549. package/src/model-thumbnail.ts +523 -0
  550. package/src/native-selection-style.ts +202 -0
  551. package/src/object3d-document-write-policy.ts +137 -0
  552. package/src/packaged-runtime.ts +108 -0
  553. package/src/palettes/maya.palette.json +57 -0
  554. package/src/palettes/substance.palette.json +57 -0
  555. package/src/pasteboard-module.ts +81 -0
  556. package/src/performance-profiler.ts +367 -0
  557. package/src/performance-sources.ts +69 -0
  558. package/src/play-boot-phase.ts +145 -0
  559. package/src/presentation-surface.ts +248 -0
  560. package/src/project-adapter.ts +1143 -0
  561. package/src/project-asset-refresh.ts +26 -0
  562. package/src/project-declaration-refresh.ts +31 -0
  563. package/src/project-local-state.ts +118 -0
  564. package/src/project-manager.ts +243 -0
  565. package/src/project-module-changes.ts +163 -0
  566. package/src/project-module-split.ts +266 -0
  567. package/src/project-provenance.ts +115 -0
  568. package/src/project-ready.ts +42 -0
  569. package/src/project-session-reset.ts +67 -0
  570. package/src/project-shape.ts +68 -0
  571. package/src/project-tool-discovery.ts +66 -0
  572. package/src/project-tools.ts +107 -0
  573. package/src/project-work-types.ts +149 -0
  574. package/src/projection/three.ts +898 -0
  575. package/src/projection/types.ts +44 -0
  576. package/src/readiness.ts +113 -0
  577. package/src/reflection-probe-helper.ts +142 -0
  578. package/src/reported-play-state.ts +90 -0
  579. package/src/resolve-relative-specifier.ts +33 -0
  580. package/src/scene-document-plan.ts +315 -0
  581. package/src/scene-framing.ts +315 -0
  582. package/src/scene-live-open.ts +210 -0
  583. package/src/scene-view-fog.ts +89 -0
  584. package/src/scoped-game-css.ts +152 -0
  585. package/src/session-orphan-record.ts +193 -0
  586. package/src/session-tombstone.ts +126 -0
  587. package/src/settings/settings-provider.ts +82 -0
  588. package/src/settings-store.ts +345 -0
  589. package/src/shared-view-restore.ts +42 -0
  590. package/src/shell-store-door.ts +45 -0
  591. package/src/source-conflict.ts +122 -0
  592. package/src/spatial-handle-visuals.ts +332 -0
  593. package/src/stage-context.ts +341 -0
  594. package/src/stage-store-registry.ts +63 -0
  595. package/src/stale-chunk-recovery.ts +34 -0
  596. package/src/state-report-deferral.ts +73 -0
  597. package/src/storage/host-files-storage.ts +97 -0
  598. package/src/storage/http-storage.ts +174 -0
  599. package/src/storage/index.ts +75 -0
  600. package/src/storage/mem-storage.ts +149 -0
  601. package/src/storage/path-lock.ts +44 -0
  602. package/src/storage/paths.ts +26 -0
  603. package/src/storage/types.ts +116 -0
  604. package/src/stories/StoryComponentThumbnail.tsx +184 -0
  605. package/src/stories/StoryPreviewMount.tsx +306 -0
  606. package/src/stories/component-content-source.tsx +106 -0
  607. package/src/stories/component-states-source.ts +78 -0
  608. package/src/stories/compose-project-stories.ts +255 -0
  609. package/src/stories/pixi-story-model.ts +30 -0
  610. package/src/stories/prefabs-finder.ts +54 -0
  611. package/src/stories/prefabs-from-stories.ts +182 -0
  612. package/src/stories/project-story-discovery.ts +78 -0
  613. package/src/stories/project-story-regions.ts +24 -0
  614. package/src/stories/story-actions.ts +54 -0
  615. package/src/stories/story-capture-command.ts +124 -0
  616. package/src/stories/story-capture.ts +584 -0
  617. package/src/stories/story-declared-medium.ts +126 -0
  618. package/src/stories/story-discovery.ts +176 -0
  619. package/src/stories/story-document-openers.ts +36 -0
  620. package/src/stories/story-dom-runtime.ts +78 -0
  621. package/src/stories/story-grouping.ts +111 -0
  622. package/src/stories/story-lane.ts +88 -0
  623. package/src/stories/story-mount-turn.ts +27 -0
  624. package/src/stories/story-opener.ts +260 -0
  625. package/src/stories/story-pixi-preview.ts +408 -0
  626. package/src/stories/story-presentation.ts +215 -0
  627. package/src/stories/story-registry.ts +517 -0
  628. package/src/stories/story-three-preview.ts +807 -0
  629. package/src/stories/three-story-model.ts +96 -0
  630. package/src/story-three-preview-runtime.ts +56 -0
  631. package/src/surface-keyboard.ts +112 -0
  632. package/src/surface-state.ts +124 -0
  633. package/src/tab-bootstrap.js +628 -0
  634. package/src/tab-census.ts +198 -0
  635. package/src/tab-lifecycle-client.ts +196 -0
  636. package/src/theme-library.ts +844 -0
  637. package/src/theme-preference.ts +378 -0
  638. package/src/theme.css +3437 -0
  639. package/src/three-viewport/bone-selection-highlight.ts +119 -0
  640. package/src/three-viewport/camera-fit.ts +41 -0
  641. package/src/three-viewport/interactive-renderer.ts +132 -0
  642. package/src/three-viewport/selection-brackets.ts +310 -0
  643. package/src/three-viewport/selection-outline.ts +183 -0
  644. package/src/three-viewport/skeleton-helper.ts +61 -0
  645. package/src/three-viewport/source-color.ts +167 -0
  646. package/src/three-viewport/studio-environment.ts +96 -0
  647. package/src/three-viewport-presentation.ts +23 -0
  648. package/src/tool-contribution-play.ts +74 -0
  649. package/src/tool-loader.ts +1798 -0
  650. package/src/transform-mode-request.ts +57 -0
  651. package/src/transient-hint.ts +78 -0
  652. package/src/trigger-volume-helper.ts +116 -0
  653. package/src/ui-source/adapter-region-includes.ts +241 -0
  654. package/src/ui-source/ensure-import.ts +132 -0
  655. package/src/ui-source/file-region-resolver.ts +302 -0
  656. package/src/ui-source/inspect.ts +775 -0
  657. package/src/ui-source/oid-transform.ts +1845 -0
  658. package/src/ui-source/plan-csf-story.ts +196 -0
  659. package/src/ui-source/plan-extract-component.ts +421 -0
  660. package/src/ui-source/plan-fork-component.ts +621 -0
  661. package/src/ui-source/plan-named-style.ts +95 -0
  662. package/src/ui-source/plan-source-edit.ts +353 -0
  663. package/src/ui-source/r3f-contract-resolver.ts +327 -0
  664. package/src/ui-source/r3f-diagnostic-index.ts +165 -0
  665. package/src/ui-source/r3f-environment-binding.ts +133 -0
  666. package/src/ui-source/r3f-joint-binding.ts +251 -0
  667. package/src/ui-source/r3f-lod-binding.ts +91 -0
  668. package/src/ui-source/r3f-particle-binding.ts +235 -0
  669. package/src/ui-source/r3f-physics-binding.ts +483 -0
  670. package/src/ui-source/r3f-project-contracts.ts +444 -0
  671. package/src/ui-source/relative-import-specifier.ts +34 -0
  672. package/src/ui-source/reparent-guard.ts +544 -0
  673. package/src/ui-source/source-edit-request.ts +97 -0
  674. package/src/ui-source/source-write-backend.ts +618 -0
  675. package/src/ui-source/syntactic-prop-specs.ts +296 -0
  676. package/src/ui-source/tier-source-write-backend.ts +279 -0
  677. package/src/ui-source/ts-ast.ts +171 -0
  678. package/src/ui-source/utility-class-support.ts +169 -0
  679. package/src/ui-source/write-component-default.ts +133 -0
  680. package/src/ui-source/writer.ts +1989 -0
  681. package/src/viewport-activation-timings.ts +840 -0
  682. package/src/viewport-authoring-policy.ts +186 -0
  683. package/src/viewport-controls-hint.ts +57 -0
  684. package/src/viewport-door.ts +237 -0
  685. package/src/viewport-shading-boundary.ts +12 -0
  686. package/src/vite-error-surface.ts +141 -0
  687. package/src/wait-until.ts +37 -0
  688. package/src/workspace-areas.ts +156 -0
  689. package/src/workspace-aux-commands.ts +11 -0
  690. package/src/workspace-available-documents.ts +127 -0
  691. package/src/workspace-core-utilities.ts +31 -0
  692. package/src/workspace-document-ids.ts +59 -0
  693. package/src/workspace-document-registry.ts +612 -0
  694. package/src/workspace-document-restore.ts +145 -0
  695. package/src/workspace-host-commands.ts +141 -0
  696. package/src/workspace-persistence-gate.ts +40 -0
  697. package/src/workspace-play-utilities.ts +44 -0
  698. package/src/workspace-presets.ts +425 -0
  699. package/src/workspace-regions.ts +294 -0
  700. package/src/workspace-state-persistence.ts +536 -0
  701. package/src/workspace-static-panels.ts +73 -0
  702. package/src/workspace-status-registry.ts +121 -0
  703. package/src/workspace-style.ts +239 -0
  704. package/src/workspace-utility-commands.ts +74 -0
  705. package/src/workspace-utility-registry.ts +263 -0
  706. package/src/workspace-viewport-rect.ts +97 -0
  707. package/src/world-adoption.ts +115 -0
  708. package/src/world-document-routing.ts +104 -0
  709. package/vite-plugin-creation-site-write.ts +184 -0
  710. package/vite-plugin-creation-site.ts +80 -0
  711. package/vite-plugin-game-static.ts +303 -0
  712. package/vite-plugin-module-doorways.ts +336 -0
  713. package/vite-plugin-product-contributions.ts +197 -0
  714. package/vite-plugin-project-game-static.ts +125 -0
  715. package/vite-plugin-project-jsx-js.ts +65 -0
  716. package/vite-plugin-project-root-absolute-assets.ts +359 -0
  717. package/vite-plugin-shared-react.ts +420 -0
  718. package/vite-plugin-shared-three.ts +203 -0
  719. package/vite-plugin-ui-oid.ts +2106 -0
@@ -0,0 +1,253 @@
1
+ import { normalizeUiState, type SupercodeUiState } from '@volter-ai-dev/supercode-ui/core';
2
+ import type { RemoteUiFrame } from '@volter-ai-dev/supercode-ui/host';
3
+
4
+ /**
5
+ * Browser/server contract for the permanent coding-agent surface.
6
+ *
7
+ * Supercode owns harness, session, transcript, and runtime semantics. This
8
+ * wire mirrors its frontend state instead of inventing a second state
9
+ * machine; VGAI adds only editor-specific presentation and context.
10
+ */
11
+
12
+ export type JsonValue =
13
+ | string
14
+ | number
15
+ | boolean
16
+ | null
17
+ | JsonValue[]
18
+ | { [key: string]: JsonValue };
19
+
20
+ export type HarnessChatMode = 'none' | 'observe' | 'control';
21
+ export type HarnessChatStatus = 'loading' | 'ready' | 'working' | 'error' | 'unavailable';
22
+ /** Mirrors Supercode's passive/handshake authentication posture exactly. */
23
+ export type HarnessChatAuthState = 'ready' | 'configured' | 'required' | 'unknown';
24
+ export type HarnessChatRuntimeState = 'ready' | 'degraded' | 'unavailable';
25
+ export type HarnessChatOperation =
26
+ | 'refresh'
27
+ | 'observe'
28
+ | 'start'
29
+ | 'resume'
30
+ | 'attach'
31
+ | 'fork'
32
+ | 'reduce'
33
+ | 'restore'
34
+ | 'detach'
35
+ | 'openTerminal'
36
+ | 'send'
37
+ | 'steer'
38
+ | 'interrupt'
39
+ | 'respond'
40
+ | 'configureHarness'
41
+ | 'loadEarlier'
42
+ | 'load'
43
+ | 'import'
44
+ | 'export'
45
+ | 'translate'
46
+ | 'handoff'
47
+ | 'workspace'
48
+ | 'close'
49
+ | null;
50
+
51
+ export interface HarnessChatCapabilities {
52
+ startSession: boolean;
53
+ resumeSession: boolean;
54
+ attachExistingProcess: boolean;
55
+ sendInput: boolean;
56
+ streamEvents: boolean;
57
+ interrupt: boolean;
58
+ respondToRequests: boolean;
59
+ }
60
+
61
+ export interface HarnessChatHarness {
62
+ id: string;
63
+ label: string;
64
+ installed: boolean;
65
+ auth: HarnessChatAuthState;
66
+ runtime: HarnessChatRuntimeState;
67
+ protocol: string;
68
+ capabilities: HarnessChatCapabilities;
69
+ availableActions: {
70
+ start: boolean;
71
+ resume: boolean;
72
+ attach: boolean;
73
+ send: boolean;
74
+ interrupt: boolean;
75
+ respond: boolean;
76
+ };
77
+ reason: string | null;
78
+ repair: string | null;
79
+ }
80
+
81
+ export interface HarnessChatSession {
82
+ /** Opaque, controller-scoped key used by actions. */
83
+ id: string;
84
+ /** Stable, non-display identity used only to restore this exact selection. */
85
+ identity: string;
86
+ /** Harness-native identity, display/diagnostics only. */
87
+ nativeId?: string;
88
+ harness: string;
89
+ title: string;
90
+ cwd: string | null;
91
+ updatedAt: number | null;
92
+ messageCount: number | null;
93
+ model: string | null;
94
+ storage: 'file' | 'sqlite';
95
+ /** What the session's process reports for itself RIGHT NOW — a live
96
+ * peer's status — or `null` for a persisted session with no process. */
97
+ live?: 'running' | 'busy' | 'idle' | null;
98
+ }
99
+
100
+ export interface HarnessChatTaskPlanItem {
101
+ id: string;
102
+ title: string;
103
+ status: 'pending' | 'in_progress' | 'completed' | 'cancelled' | 'unknown';
104
+ nativeStatus?: string;
105
+ blockedBy?: string[];
106
+ }
107
+
108
+ export interface HarnessChatTaskPlan {
109
+ source: 'codex-update-plan' | 'claude-tasks' | 'opencode-todos' | 'none';
110
+ items: HarnessChatTaskPlanItem[];
111
+ residue: unknown[];
112
+ observedAt: number | null;
113
+ }
114
+
115
+ export interface HarnessChatRequestOption {
116
+ optionId: string;
117
+ name: string;
118
+ kind: 'allow_once' | 'allow_always' | 'reject_once' | 'reject_always' | 'other';
119
+ }
120
+
121
+ export interface HarnessChatRequestEntry {
122
+ id: string;
123
+ kind: 'request';
124
+ requestId: JsonValue;
125
+ requestKind: string;
126
+ payload: JsonValue;
127
+ options: HarnessChatRequestOption[];
128
+ cancellable: boolean;
129
+ status: 'pending' | 'responded';
130
+ resolution: { optionId: string | null; name: string; kind: string } | null;
131
+ }
132
+
133
+ export interface HarnessChatAvailableActions {
134
+ refresh: boolean;
135
+ observe: boolean;
136
+ start: boolean;
137
+ resume: boolean;
138
+ attach: boolean;
139
+ fork: boolean;
140
+ detach: boolean;
141
+ openTerminal: boolean;
142
+ send: boolean;
143
+ interrupt: boolean;
144
+ respond: boolean;
145
+ }
146
+
147
+ export interface HarnessChatError {
148
+ code: string;
149
+ message: string;
150
+ operation: Exclude<HarnessChatOperation, null> | 'runtime' | 'follow';
151
+ recoverable: boolean;
152
+ }
153
+
154
+ export interface HarnessChatSnapshot {
155
+ schema: 'vgai.harness-chat.v4';
156
+ /** Identifies the editor-server process that issued this snapshot. */
157
+ serverInstanceId: string | null;
158
+ revision: number;
159
+ /** Monotonic host generation. Revisions are only comparable within it. */
160
+ workspaceGeneration: number;
161
+ workspace: string | null;
162
+ status: HarnessChatStatus;
163
+ mode: HarnessChatMode;
164
+ operation: HarnessChatOperation;
165
+ harnesses: HarnessChatHarness[];
166
+ sessions: HarnessChatSession[];
167
+ activeHarness: string | null;
168
+ activeSessionId: string | null;
169
+ connection: {
170
+ strategy: 'start' | 'resume' | 'attach' | 'fork' | 'reduce' | null;
171
+ follow: 'inactive' | 'following' | 'retrying';
172
+ ownsRuntime: boolean;
173
+ };
174
+ turn: {
175
+ state: 'idle' | 'running' | 'interrupting' | 'reconciling';
176
+ id: string | null;
177
+ startedAt: number | null;
178
+ };
179
+ /** Ordered Supercode host frame. This is the sole messenger lifecycle authority. */
180
+ frame: RemoteUiFrame | null;
181
+ taskPlan: HarnessChatTaskPlan;
182
+ requests: HarnessChatRequestEntry[];
183
+ availableActions: HarnessChatAvailableActions;
184
+ error: HarnessChatError | null;
185
+ terminalCommand: string | null;
186
+ }
187
+
188
+ /** VGAI's one editor-host extension. Every reusable messenger mutation uses
189
+ * SupercodeUiIntent unchanged through the intent route. */
190
+ export type HarnessChatHostAction = {
191
+ type: 'restore';
192
+ sessionIdentity: string;
193
+ connection: 'observe' | 'attach';
194
+ };
195
+
196
+ /** Read the sole canonical messenger projection. A frame-less loading/error
197
+ * snapshot gets a local empty view; it is never serialized as a second state. */
198
+ export function harnessChatUiState(snapshot: HarnessChatSnapshot): SupercodeUiState {
199
+ if (snapshot.frame) return snapshot.frame.state;
200
+ return normalizeUiState({
201
+ startup: snapshot.status === 'loading' ? 'connecting' : 'ready',
202
+ workspace: snapshot.workspace ?? '',
203
+ error: snapshot.error?.message ?? null,
204
+ recoverable: snapshot.error?.recoverable ?? true,
205
+ });
206
+ }
207
+
208
+ export function unavailableHarnessChatSnapshot(
209
+ error: string,
210
+ options?: { code?: string; recoverable?: boolean },
211
+ ): HarnessChatSnapshot {
212
+ return {
213
+ schema: 'vgai.harness-chat.v4',
214
+ serverInstanceId: null,
215
+ revision: 0,
216
+ workspaceGeneration: 0,
217
+ workspace: null,
218
+ status: 'unavailable',
219
+ mode: 'none',
220
+ operation: null,
221
+ harnesses: [],
222
+ sessions: [],
223
+ activeHarness: null,
224
+ activeSessionId: null,
225
+ connection: { strategy: null, follow: 'inactive', ownsRuntime: false },
226
+ turn: { state: 'idle', id: null, startedAt: null },
227
+ frame: null,
228
+ taskPlan: { source: 'none', items: [], residue: [], observedAt: null },
229
+ requests: [],
230
+ availableActions: {
231
+ refresh: false,
232
+ observe: false,
233
+ start: false,
234
+ resume: false,
235
+ attach: false,
236
+ fork: false,
237
+ detach: false,
238
+ openTerminal: false,
239
+ send: false,
240
+ interrupt: false,
241
+ respond: false,
242
+ },
243
+ error: error
244
+ ? {
245
+ code: options?.code ?? 'unavailable',
246
+ message: error,
247
+ operation: 'load',
248
+ recoverable: options?.recoverable ?? true,
249
+ }
250
+ : null,
251
+ terminalCommand: null,
252
+ };
253
+ }
@@ -0,0 +1,298 @@
1
+ /**
2
+ * The panel's half of the hierarchy-presentation convention
3
+ * (`@volter/editor-threejs/adapter/hierarchy-marks`): a game classifies its
4
+ * component-instance roots and its implementation subtrees on the LIVE nodes,
5
+ * and this turns that classification into rows.
6
+ *
7
+ * CLASSIFICATION ONLY — NEVER FABRICATED STRUCTURE. Nothing here invents a
8
+ * parent. Where a node belongs is the TREE's answer, and a world whose tree
9
+ * disagrees with its own ownership is fixed in the world (three's
10
+ * `matrixWorldAutoUpdate = false` keeps a transform-independent object parented
11
+ * where it belongs), not papered over here. What this module decides is
12
+ * narrower and entirely presentational: which rows are the game and which are
13
+ * the implementation underneath it, and — since an implementation node may sit
14
+ * BETWEEN two things that are the game — where a row's nearest visible ancestor
15
+ * is. See {@link componentMarkView} point 5, promotion.
16
+ *
17
+ * WHY THIS IS A DECORATOR AND NOT A SECOND ROW PIPELINE. Exactly the reason
18
+ * `hierarchy-internals.ts` gives for reveal: the panel's cap, collapse, search,
19
+ * selection-reveal and virtualization all layer on ONE flatten of ONE
20
+ * `HierarchyProvider`. A marked tree composes by handing that flattener a
21
+ * richer provider — never by forking the walk. And it composes with reveal
22
+ * specifically by producing an {@link InternalsSource}: built-internals become
23
+ * internals of exactly the kind "Reveal Internals" already shows, so the
24
+ * read-only rule, the search exclusion and the drag refusal that already govern
25
+ * a revealed row govern these with no second policy.
26
+ *
27
+ * THE NO-MARKS FALLBACK IS IDENTITY, BY CONSTRUCTION. Every projection below
28
+ * short-circuits when a node carries no mark and no child carries one, and
29
+ * {@link componentMarkView} returns the source's own `hierarchy` object when the
30
+ * tree cannot carry marks at all (an adapter with no `Object3D` seam — React,
31
+ * Pixi, DOM). A world that adopts nothing renders exactly as it did.
32
+ *
33
+ * PURE ON PURPOSE: the marks arrive through the injected {@link NodeMarkReader},
34
+ * never by importing three or touching `userData` here, so the whole row
35
+ * decision is unit-testable with plain objects.
36
+ */
37
+
38
+ import type { EditorNode, HierarchyProvider } from '@volter/editor-project/adapter';
39
+ import type { InternalsSource } from './hierarchy-internals';
40
+ import type { HierarchyNodeRow } from './hierarchy-node-rows';
41
+
42
+ /** What the marks say about ONE node. Both absent is the ordinary node. */
43
+ export interface NodeMarks {
44
+ /** `vgaiComponentRoot` — the component name this node is one instance of. */
45
+ readonly componentRoot?: string | undefined;
46
+ /** A native authoring entity constructor. It stays an ordinary entity row, but like a
47
+ * component root it is authored content even when a host implementation node wraps it. */
48
+ readonly authoredEntity?: boolean | undefined;
49
+ /** `vgaiBuiltInternal` — this node is the root of an implementation subtree. */
50
+ readonly builtInternal?: boolean | undefined;
51
+ }
52
+
53
+ /** Reads the marks off one node id. `undefined` for an id the source has no
54
+ * live object for — indistinguishable from an unmarked node, deliberately. */
55
+ export type NodeMarkReader = (id: string) => NodeMarks | undefined;
56
+
57
+ /** The hierarchy half of an adapter, plus whatever internals capability it
58
+ * already had. Structurally satisfied by `AuthoringAdapter` /
59
+ * `CompositeAuthoringAdapter` without importing either — the same contract-only
60
+ * probe shape `hierarchy-internals.ts` and `hierarchy-row-model.ts` use. */
61
+ export interface MarkedTreeSource {
62
+ readonly hierarchy: Pick<HierarchyProvider, 'roots' | 'node'>;
63
+ readonly hasInternals?: ((id: string) => boolean) | undefined;
64
+ readonly internalChildren?: ((id: string) => EditorNode[] | undefined) | undefined;
65
+ }
66
+
67
+ export interface MarkedTreeView extends InternalsSource {
68
+ /** True for a node whose live object carries `vgaiComponentRoot`. */
69
+ isComponentRoot(id: string): boolean;
70
+ /** True for a node that is, or descends from, a `vgaiBuiltInternal` root.
71
+ * Exposed for tests and for {@link componentMarkView}'s own reuse; the panel
72
+ * reads internal-ness off the reveal projection, which is the union of these
73
+ * and the adapter's own hidden children. */
74
+ isBuiltInternal(id: string): boolean;
75
+ }
76
+
77
+ /** Depth backstop for a pathological live tree — the same belt-and-braces
78
+ * constant `hierarchy-internals.ts`/`hierarchy-node-rows.ts` keep. */
79
+ const MAX_DEPTH = 500;
80
+
81
+ /** The reader for a surface that has no node to read marks off. Identity-checked
82
+ * by {@link componentMarkView}, which is why it is a shared constant rather
83
+ * than a fresh closure per call. */
84
+ export const NO_MARKS: NodeMarkReader = () => undefined;
85
+
86
+ /**
87
+ * Decorate `source` so the marks become rows.
88
+ *
89
+ * Five things change, and nothing else:
90
+ *
91
+ * 1. A marked component root reports `role: 'component'` and
92
+ * `typeLabel: <mark name>`. That is all the panel needs — `rowIdentity`
93
+ * already prints `Coin1 ·Coin` for exactly this pair, and `ROLE_ICON`
94
+ * already has the component glyph. NO new presentation vocabulary: a second
95
+ * way to render "this is an instance" is how two of them drift.
96
+ * The mark REPLACES any `typeLabel` the adapter had, because a three
97
+ * projection reports the native class there (`Object3D`), and
98
+ * `Coin1 ·Object3D` is worse than no suffix at all.
99
+ * 2. Built-internal children disappear from every `childIds`, so what a
100
+ * collapsed tree shows is the game and not its implementation.
101
+ * 3. A built-internal ROOT disappears from `roots()` for the same reason, but
102
+ * meaningful content beneath it is promoted to roots in place. A root has
103
+ * no parent row to reveal it under, so the implementation wrapper itself
104
+ * stays unreachable while spawned content remains visible.
105
+ * 4. Both come back through `internalChildren`/`hasInternals` — unioned with
106
+ * whatever the adapter already hid — so "Reveal Internals" shows them,
107
+ * read-only, under their real parent, in the true chain.
108
+ * 5. PROMOTION. A component instance does not lose its row because
109
+ * implementation nodes sit between it and its owner. A weapon prefab
110
+ * attached to a hand bone, a nameplate on a head bone: content the author
111
+ * placed, inside a subtree a rig builder marked. `vgaiComponentRoot` beats
112
+ * `vgaiBuiltInternal` (see `isBuiltInternal`'s climb), and this lists such a
113
+ * row under its nearest VISIBLE ancestor — so a prefab reads as the parent
114
+ * of everything meaningful beneath it, however many bones the rig hangs in
115
+ * between. A subtree with no instance inside it still folds away whole,
116
+ * because there is nothing in it to promote. This is the elision half of the
117
+ * same classification: (2) removes an implementation row, (5) keeps what was
118
+ * under it from going with it.
119
+ *
120
+ * Built-internal is SUBTREE-scoped (see the engine module's header): a node
121
+ * whose ANCESTOR is marked is internal too, which is what lets a rig cost one
122
+ * mark. {@link MarkedTreeView.isBuiltInternal} memoizes that climb, so a
123
+ * repeated walk over the same tree pays once per node.
124
+ */
125
+ export function componentMarkView(
126
+ source: MarkedTreeSource,
127
+ marksOf: NodeMarkReader,
128
+ ): MarkedTreeView {
129
+ if (marksOf === NO_MARKS) {
130
+ // A surface with no `Object3D` seam (React, Pixi, DOM) cannot carry these
131
+ // marks at all. Hand back the source itself so the panel's provider is
132
+ // IDENTICAL, not merely equivalent.
133
+ return {
134
+ hierarchy: source.hierarchy,
135
+ isComponentRoot: () => false,
136
+ isBuiltInternal: () => false,
137
+ ...(source.hasInternals ? { hasInternals: (id: string) => source.hasInternals!(id) } : {}),
138
+ ...(source.internalChildren
139
+ ? { internalChildren: (id: string) => source.internalChildren!(id) }
140
+ : {}),
141
+ };
142
+ }
143
+
144
+ /** id -> "this node is inside a built subtree", memoized across the walk. */
145
+ const internalCache = new Map<string, boolean>();
146
+
147
+ const isBuiltInternal = (id: string): boolean => {
148
+ const cached = internalCache.get(id);
149
+ if (cached !== undefined) return cached;
150
+ // Climb to the first answer we already have (or to a root), then fill the
151
+ // whole chain in one pass — an ancestor walk per node would be O(depth²).
152
+ const chain: string[] = [];
153
+ let cursor: string | null = id;
154
+ let inherited = false;
155
+ let guard = 0;
156
+ while (cursor !== null && guard++ < MAX_DEPTH) {
157
+ const known = internalCache.get(cursor);
158
+ if (known !== undefined) {
159
+ inherited = known;
160
+ break;
161
+ }
162
+ chain.push(cursor);
163
+ // PRECEDENCE: an explicit component root is content even inside an
164
+ // implementation subtree. Otherwise an explicit implementation mark on
165
+ // THIS node wins over the automatic authored-entity stamp: generated
166
+ // native machinery is still source-addressable JSX, but its attach seam
167
+ // knows that it is implementation. An authored entity with no such mark
168
+ // remains content inside an implementation ancestor — a weapon attached
169
+ // to a rig bone, for example — which is what makes promotion (see
170
+ // `visibleChildIds`) reachable at all.
171
+ const marks = marksOf(cursor);
172
+ if (marks?.componentRoot !== undefined) break;
173
+ if (marks?.builtInternal === true) {
174
+ inherited = true;
175
+ break;
176
+ }
177
+ if (marks?.authoredEntity === true) break;
178
+ cursor = source.hierarchy.node(cursor)?.parentId ?? null;
179
+ }
180
+ // `chain` is innermost-first and every entry shares the verdict of the node
181
+ // that stopped the climb — either an already-known ancestor, or the marked
182
+ // node itself (which is the last entry pushed).
183
+ for (const entry of chain) internalCache.set(entry, inherited);
184
+ return inherited;
185
+ };
186
+
187
+ const isComponentRoot = (id: string): boolean => marksOf(id)?.componentRoot !== undefined;
188
+
189
+ /**
190
+ * The rows that belong directly under `node` — its own visible children,
191
+ * plus (point 5) the visible descendants that implementation children stand
192
+ * between. Recursive: an implementation node contributes ITS promoted rows in
193
+ * its own place, so a two-deep chain of them elides just as one does, and a
194
+ * subtree with nothing visible in it contributes nothing at all.
195
+ */
196
+ const visibleChildIds = (node: EditorNode, depth = 0): string[] => {
197
+ if (depth > MAX_DEPTH) return [];
198
+ const out: string[] = [];
199
+ for (const childId of node.childIds) {
200
+ if (!isBuiltInternal(childId)) {
201
+ out.push(childId);
202
+ continue;
203
+ }
204
+ const child = source.hierarchy.node(childId);
205
+ if (child) out.push(...visibleChildIds(child, depth + 1));
206
+ }
207
+ return out;
208
+ };
209
+
210
+ /** The children of `id` this view hides — its DIRECT implementation children,
211
+ * which is what "Reveal Internals" puts back and where the true chain lives. */
212
+ const hiddenChildIds = (node: EditorNode): string[] =>
213
+ node.childIds.filter((childId) => isBuiltInternal(childId));
214
+
215
+ const project = (node: EditorNode | null): EditorNode | null => {
216
+ if (!node) return null;
217
+ const componentRoot = marksOf(node.id)?.componentRoot;
218
+ const childIds = visibleChildIds(node);
219
+ const sameChildren =
220
+ childIds.length === node.childIds.length &&
221
+ childIds.every((childId, index) => childId === node.childIds[index]);
222
+ if (componentRoot === undefined && sameChildren) return node;
223
+ return {
224
+ ...node,
225
+ ...(componentRoot === undefined
226
+ ? {}
227
+ : { role: 'component' as const, typeLabel: componentRoot }),
228
+ ...(sameChildren ? {} : { childIds }),
229
+ };
230
+ };
231
+
232
+ const hierarchy: Pick<HierarchyProvider, 'roots' | 'node'> = {
233
+ roots: () =>
234
+ source.hierarchy.roots().flatMap((root) => {
235
+ if (!isBuiltInternal(root.id)) return [project(root)!];
236
+ return visibleChildIds(root).flatMap((childId) => {
237
+ const child = project(source.hierarchy.node(childId));
238
+ return child ? [{ ...child, parentId: root.parentId }] : [];
239
+ });
240
+ }),
241
+ node: (id) => project(source.hierarchy.node(id)),
242
+ };
243
+
244
+ return {
245
+ hierarchy,
246
+ isComponentRoot,
247
+ isBuiltInternal,
248
+ hasInternals: (id) => {
249
+ if (source.hasInternals?.(id) === true) return true;
250
+ const node = source.hierarchy.node(id);
251
+ return node ? hiddenChildIds(node).length > 0 : false;
252
+ },
253
+ internalChildren: (id) => {
254
+ const own = source.internalChildren?.(id);
255
+ const node = source.hierarchy.node(id);
256
+ const hidden = node
257
+ ? hiddenChildIds(node).flatMap((childId) => {
258
+ // PROJECTED, not raw: this node's own implementation children are
259
+ // hidden from its `childIds` here too, and the reveal walk appends
260
+ // them back itself. Handing back the raw node would list every
261
+ // sub-bone twice. Reveal therefore shows the TRUE chain of
262
+ // implementation nodes — each under its real parent, one level per
263
+ // walk step — which is what the action is for.
264
+ const child = project(source.hierarchy.node(childId));
265
+ // Re-parented to `id` — a revealed subtree is displayed as the tree
266
+ // it literally is, the same rule `internalChildren` states on the
267
+ // source adapter.
268
+ return child ? [{ ...child, parentId: id }] : [];
269
+ })
270
+ : [];
271
+ if (own === undefined) return hidden.length > 0 ? hidden : undefined;
272
+ return [...own, ...hidden];
273
+ },
274
+ };
275
+ }
276
+
277
+ /**
278
+ * A marked component instance opens CLOSED. This is a default, applied on top
279
+ * of `defaultExpansionByNode`'s shape rule and under the author's own session /
280
+ * persisted preference — so "expandable on demand" is the panel's existing
281
+ * expansion state doing its existing job, and an instance the author opened
282
+ * stays open across renders.
283
+ *
284
+ * Takes the already-flattened structural rows rather than walking the tree
285
+ * again: the panel has them, and a second walk over a live graph is the cost
286
+ * this whole cycle exists to remove.
287
+ */
288
+ export function applyComponentRootExpansionDefaults(
289
+ defaults: Map<string, boolean>,
290
+ rows: readonly HierarchyNodeRow[],
291
+ isComponentRoot: (id: string) => boolean,
292
+ ): Map<string, boolean> {
293
+ for (const row of rows) {
294
+ if (row.more) continue;
295
+ if (isComponentRoot(row.node.id)) defaults.set(row.node.id, false);
296
+ }
297
+ return defaults;
298
+ }
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Cross-world drop validity for the hierarchy shell (spec 29 §3): edge
3
+ * semantics belong to the kind, so `CompositeAuthoringAdapter`'s structure
4
+ * provider REFUSES cross-world reparents (loud warn + no-op) and cross-world
5
+ * reorder anchors. A drop the adapter will refuse must never LOOK valid in the
6
+ * panel — chrome advertising an operation that will be refused is a false
7
+ * claim — so `GameHierarchy`'s dragover path gates the drop indicator on this
8
+ * predicate instead of letting the drop fall through to the adapter's refusal.
9
+ *
10
+ * Rule zero: roots are resolved by ASKING the composite (`groupNodeId`/
11
+ * `ownerOf`), never by decoding adapter-minted id strings here.
12
+ */
13
+ import type { AuthoringAdapter } from '@volter/editor-project/adapter';
14
+ import { CompositeAuthoringAdapter } from './authoring/composite-authoring-adapter';
15
+
16
+ /** The world that owns `nodeId` for drop purposes: the owning child's
17
+ * `worldId` for an ordinary row, the world itself for its synthetic
18
+ * `world:<id>` group row (dropping INTO a world's own group row is
19
+ * "become a root of my world" — valid), `null` for an organizational or
20
+ * unrecognized id
21
+ * no child recognizes. */
22
+ function dropRootOf(composite: CompositeAuthoringAdapter, nodeId: string): string | null {
23
+ for (const child of composite.childAdapters()) {
24
+ if (composite.groupNodeId(child.worldId) === nodeId) return child.worldId;
25
+ }
26
+ return composite.ownerOf(nodeId);
27
+ }
28
+
29
+ /**
30
+ * True when reparenting/reordering `dragIds` at row `targetId` will be
31
+ * accepted by the active adapter's structure provider: the adapter is not a
32
+ * composite (a bare adapter is single-world by construction), or EVERY
33
+ * dragged id and the target row live in the same world. A mixed-world
34
+ * multi-select fails as a whole — the alternative is a drop that half-applies
35
+ * (same-world ids move, foreign ids warn), which is worse than refusing the
36
+ * affordance outright. Group-row / organizational drag ids fail the same way
37
+ * (`ownerOf` → null): roots are reordered through their zOrder, not by
38
+ * dragging one into another's subtree.
39
+ */
40
+ export function isSameRootDrop(
41
+ adapter: AuthoringAdapter,
42
+ dragIds: string[],
43
+ targetId: string,
44
+ ): boolean {
45
+ if (!(adapter instanceof CompositeAuthoringAdapter)) return true;
46
+ const targetWorld = dropRootOf(adapter, targetId);
47
+ if (targetWorld === null) return false;
48
+ return dragIds.every((id) => adapter.ownerOf(id) === targetWorld);
49
+ }
50
+
51
+ // ------------------------------------------------------- refusal, by name
52
+
53
+ /**
54
+ * A DEAD DRAG IS A BUG. Everything above answers "may the indicator show"; the
55
+ * two predicates below answer the question the owner actually hit on a
56
+ * translated port — *the row let me drag it, the drop did nothing, and nothing
57
+ * said why*. A refusal the panel cannot explain is indistinguishable from a
58
+ * broken editor, so every path that suppresses the indicator now carries the
59
+ * sentence that goes with it.
60
+ *
61
+ * The sentences are STRUCTURAL, not per-world prose: each names a fact about
62
+ * the row or the adapter that is true for every game in that state. Where an
63
+ * adapter has its own sentence for a refusal (`TransformProvider.editability`'s
64
+ * `reason`), that one is canonical and this module never paraphrases it — these
65
+ * two cases have no adapter-side reason to forward, because the capability is
66
+ * absent rather than declined.
67
+ */
68
+ export const NO_STRUCTURE_WRITE_REFUSAL =
69
+ "This world's structure comes from its own source, which the editor can't rewrite here — reparenting is not wired for it.";
70
+
71
+ export const INTERNAL_TARGET_REFUSAL =
72
+ "That row is part of a component instance's own output, not authored content. Drop onto the instance itself to place relative to it.";
73
+
74
+ /**
75
+ * Why this drop will do nothing, or `null` when it will work.
76
+ *
77
+ * Order matters and is the honest one: an adapter that cannot reparent AT ALL
78
+ * refuses first, because "expand the instance instead" would be advice that
79
+ * also fails. Pure — the caller resolves both facts from the adapter and the
80
+ * reveal projection it already has.
81
+ */
82
+ export function hierarchyDropRefusal(input: {
83
+ /** The active adapter exposes a `structure` provider (reparent/reorder). */
84
+ readonly hasStructureWritePath: boolean;
85
+ /** The hovered row exists only because a component's internals were revealed. */
86
+ readonly targetIsInternal: boolean;
87
+ }): string | null {
88
+ if (!input.hasStructureWritePath) return NO_STRUCTURE_WRITE_REFUSAL;
89
+ if (input.targetIsInternal) return INTERNAL_TARGET_REFUSAL;
90
+ return null;
91
+ }