@volter/editor-game 0.5.65 → 0.5.67

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 (281) hide show
  1. package/contributions/audio-unlock.service.ts +2 -2
  2. package/contributions/autoplay.service.ts +1 -1
  3. package/contributions/bridge.command.ts +3 -3
  4. package/contributions/canvas/component-board.service.ts +16 -0
  5. package/contributions/canvas/design-time-mount.service.ts +45 -0
  6. package/contributions/canvas-story-capture.service.ts +12 -0
  7. package/contributions/edit-mode-audio.service.ts +2 -2
  8. package/contributions/edit-mode-networking.service.ts +1 -1
  9. package/contributions/gameplay.command.ts +4 -4
  10. package/contributions/generation.service.ts +3 -3
  11. package/contributions/generations.status.tsx +1 -1
  12. package/contributions/godot.palette.json +99 -0
  13. package/contributions/godot.style.ts +82 -0
  14. package/contributions/godot.view.ts +75 -0
  15. package/contributions/ingest.service.ts +4 -4
  16. package/contributions/instances.command.ts +1 -1
  17. package/contributions/navmesh.menu.ts +1 -1
  18. package/contributions/network-observer.service.ts +14 -0
  19. package/contributions/play.command.ts +11 -5
  20. package/contributions/react/component-board.service.ts +1 -1
  21. package/contributions/react/design-time-mount.service.ts +1 -1
  22. package/contributions/react/react-inspector.service.ts +2 -2
  23. package/contributions/scene-document.service.ts +5 -5
  24. package/contributions/state-watch.menu.ts +1 -1
  25. package/contributions/state-watch.utility.tsx +1 -1
  26. package/contributions/team-playtest.service.ts +4 -4
  27. package/contributions/three/component-board.service.ts +1 -1
  28. package/contributions/three/component-verbs.command.ts +8 -8
  29. package/contributions/three/three-authoring.service.ts +8 -5
  30. package/contributions/three-story-capture.service.ts +12 -0
  31. package/contributions/unity.palette.json +102 -0
  32. package/contributions/unity.style.ts +72 -0
  33. package/contributions/unity.view.ts +82 -0
  34. package/contributions/unreal.palette.json +105 -0
  35. package/contributions/unreal.style.ts +66 -0
  36. package/contributions/unreal.view.ts +93 -0
  37. package/dist-node/serving.mjs +16 -0
  38. package/package.json +33 -16
  39. package/serving/index.ts +27 -0
  40. package/src/asset-budget/AssetBudgetPanel.tsx +1 -1
  41. package/src/asset-budget/asset-budget-model.ts +4 -4
  42. package/src/asset-budget/optimize-apply.ts +7 -7
  43. package/src/audio/AudioDebuggerPanel.tsx +1 -1
  44. package/src/bridge/dispatch.ts +16 -16
  45. package/src/bridge/live-frames.ts +1 -1
  46. package/src/bridge/screenshot.ts +6 -6
  47. package/src/build/BuildProfilesPanel.tsx +3 -3
  48. package/src/canvas/canvas-board/CanvasBoardDocument.tsx +676 -0
  49. package/src/canvas/canvas-board/canvas-board-model.ts +407 -0
  50. package/src/canvas/canvas-board/canvas-component-board.ts +56 -0
  51. package/src/canvas/canvas-design-mount.ts +524 -0
  52. package/src/canvas/design-time-canvas-mount.ts +79 -0
  53. package/src/coverage/live-authoring-surface.ts +6 -6
  54. package/src/coverage/live-project-verbs.ts +2 -2
  55. package/src/coverage/native-system-coverage.ts +6 -6
  56. package/src/coverage/root-coverage.ts +1 -1
  57. package/src/coverage/session-coverage.ts +5 -5
  58. package/src/design-system-stories/ApplicationChrome.stories.tsx +5 -5
  59. package/src/design-system-stories/InspectorNarrowBodies.stories.tsx +13 -53
  60. package/src/edit-mode/edit-mode-audio.ts +4 -4
  61. package/src/edit-mode/edit-mode-networking.ts +2 -2
  62. package/src/game-document/GameCaptureFrameButton.tsx +2 -2
  63. package/src/game-document/GameDocument.tsx +2 -2
  64. package/src/game-document/GamePanel.tsx +8 -8
  65. package/src/game-document/InstanceInspectorPicker.tsx +2 -2
  66. package/src/game-document/crowd-debug.ts +1 -1
  67. package/src/game-document/device-preview.ts +10 -11
  68. package/src/game-document/physics-debug.ts +1 -1
  69. package/src/generation/GenerationActivity.tsx +6 -8
  70. package/src/generation/generation-documents.tsx +8 -8
  71. package/src/generation/generation-jobs.ts +2 -2
  72. package/src/generation/generation-presentation.ts +1 -1
  73. package/src/host/adapter-reach.ts +1 -1
  74. package/src/host/adapter-runtime-bindings.ts +97 -6
  75. package/src/host/api/configurations.ts +2 -2
  76. package/src/host/authoring/babylon-authoring-adapter.ts +8 -8
  77. package/src/host/authoring/contract-hierarchy-authoring.ts +1 -1
  78. package/src/host/authoring/contract-scenes-stories.ts +1 -1
  79. package/src/host/authoring/creation-site-related.ts +2 -2
  80. package/src/host/authoring/ephemeral-persistence.ts +1 -1
  81. package/src/host/authoring/gesture-persist.ts +2 -2
  82. package/src/host/authoring/ingest-data-writer.ts +1 -1
  83. package/src/host/authoring/ingest-source-persistence.ts +8 -8
  84. package/src/host/authoring/mount-isolated-pixi-screen.ts +1 -1
  85. package/src/host/authoring/mounted-authoring.ts +4 -4
  86. package/src/host/authoring/phaser-live-authoring-adapter.ts +4 -4
  87. package/src/host/authoring/pixi-authoring-adapter.ts +42 -17
  88. package/src/host/authoring/pixi-creation-site-write-target.ts +2 -2
  89. package/src/host/authoring/pixi-live-write-target.ts +7 -7
  90. package/src/host/authoring/pixi-source-identity.ts +3 -3
  91. package/src/host/authoring/pixi-source-write-target.ts +1614 -0
  92. package/src/host/authoring/pixi-still-presentation.ts +2 -2
  93. package/src/host/authoring/pixi-structure-history.ts +3 -3
  94. package/src/host/authoring/pixi-transform-channels.ts +16 -14
  95. package/src/host/authoring/source-persistence-backend.ts +6 -6
  96. package/src/host/authoring/struct-write-pipe.ts +3 -3
  97. package/src/host/binding-resolver.ts +8 -9
  98. package/src/host/browser-transpile.ts +2 -2
  99. package/src/host/canvas-entry-runtime.ts +59 -48
  100. package/src/host/canvas-preview-frames.ts +482 -0
  101. package/src/host/components/CameraAuthoringOverlay.tsx +1 -1
  102. package/src/host/components/HeaderTelemetry.tsx +9 -16
  103. package/src/host/components/PixiIsolationSceneContent.tsx +17 -16
  104. package/src/host/components/ThreeIsolationSceneContent.tsx +5 -5
  105. package/src/host/components/frame-debugger-model.ts +2 -2
  106. package/src/host/components/header-telemetry-model.ts +2 -2
  107. package/src/host/components/scene-document.tsx +29 -61
  108. package/src/host/components/utility-view-state.ts +1 -1
  109. package/src/host/components/world-root-stage-binding.tsx +17 -26
  110. package/src/host/components/world-root-stage.ts +130 -63
  111. package/src/host/coverage/capability-coverage.ts +13 -1
  112. package/src/host/coverage/game-contract-seam-evidence.ts +1 -1
  113. package/src/host/coverage/project-verb-coverage.ts +2 -17
  114. package/src/host/coverage/system-adapter-coverage.ts +4 -5
  115. package/src/host/design-system-stories/fixtures/editor-runtime.tsx +14 -8
  116. package/src/host/document-preview-three.ts +2 -2
  117. package/src/host/entry-adjudication.ts +6 -6
  118. package/src/host/game-css-scope-transform.ts +4 -0
  119. package/src/host/game-module-access.ts +1 -1
  120. package/src/host/game-realm-page.ts +16 -8
  121. package/src/host/game-realm-reclaim.ts +1 -1
  122. package/src/host/gameplay-export.ts +25 -14
  123. package/src/host/gameplay-recording.ts +5 -5
  124. package/src/host/gated-globals.ts +6 -6
  125. package/src/host/history/json-history-resource.ts +3 -3
  126. package/src/host/instance-extract-actions.ts +1 -1
  127. package/src/host/instance-fork-actions.ts +1 -1
  128. package/src/host/projection/dom.ts +2 -2
  129. package/src/host/projection/pixi.ts +25 -3
  130. package/src/host/r3f-entry-runtime.ts +65 -34
  131. package/src/host/react-mount-runtime.ts +8 -49
  132. package/src/host/realm-services.ts +2 -2
  133. package/src/host/roots/canvas-root.tsx +361 -0
  134. package/src/host/roots/module-root.ts +1 -1
  135. package/src/host/roots/r3f-root.tsx +473 -0
  136. package/src/host/roots/react-root.ts +9 -43
  137. package/src/host/scene-view-drawability.ts +2 -2
  138. package/src/host/served-bundle-runtime-modules.ts +1 -19
  139. package/src/host/server-log-bridge.ts +3 -3
  140. package/src/host/stories/mounted-story-viewport-source.ts +1 -1
  141. package/src/host/stories/pixi-story-model.ts +30 -0
  142. package/src/host/stories/story-media-captures.ts +46 -0
  143. package/src/host/stories/story-media-presence.ts +3 -3
  144. package/src/host/stories/story-pixi-preview.ts +408 -0
  145. package/src/host/stories/story-three-preview.ts +806 -0
  146. package/src/host/stories/three-story-captures.ts +35 -0
  147. package/src/host/story-three-preview-runtime.ts +56 -0
  148. package/src/host/three-ingest-runtime.ts +1 -1
  149. package/src/host/use-active-performance-source.ts +3 -3
  150. package/src/host/viewport-pose-memory.ts +1 -1
  151. package/src/host/viewport-root-presentation.ts +6 -5
  152. package/src/ingest/active-ingest.ts +2 -2
  153. package/src/ingest/authoring/ingest-dom-surface-authoring.ts +4 -4
  154. package/src/ingest/authoring/ingest-root-adapter.ts +13 -13
  155. package/src/ingest/capture-wait-report.ts +1 -1
  156. package/src/ingest/deferred-ingest-play.ts +11 -10
  157. package/src/ingest/discovery-public-ingest.ts +2 -2
  158. package/src/ingest/ingest-boot-viewport.ts +6 -8
  159. package/src/ingest/ingest-canvas-scene-document.tsx +17 -16
  160. package/src/ingest/ingest-canvas-scene.ts +5 -8
  161. package/src/ingest/ingest-evidence-hook.ts +1 -1
  162. package/src/ingest/ingest-frame-snapshot.ts +1 -1
  163. package/src/ingest/ingest-play-control.ts +4 -4
  164. package/src/ingest/ingest-render-debug.ts +11 -11
  165. package/src/ingest/ingest-siblings.ts +16 -28
  166. package/src/ingest/module-mode.ts +18 -19
  167. package/src/ingest/mount-canvas-ingest-root.ts +27 -27
  168. package/src/ingest/mount-coverage.ts +4 -4
  169. package/src/ingest/mount-dom-ingest-root.ts +16 -16
  170. package/src/ingest/mount-ingest-root.ts +14 -14
  171. package/src/ingest/mount-three-ingest-root.ts +12 -12
  172. package/src/ingest/resolve-canvas.ts +1 -1
  173. package/src/ingest/served-html-boot.ts +1 -1
  174. package/src/ingest/surface-canvas.ts +1 -1
  175. package/src/ingest/unmount-ingest-root.ts +7 -7
  176. package/src/navmesh/navmesh-handler.ts +24 -16
  177. package/src/network/NetworkInspectorPanel.tsx +449 -14
  178. package/src/network/network-inspector-model.ts +14 -2
  179. package/src/play/play-log-events.ts +1 -1
  180. package/src/play/play-mode.ts +99 -142
  181. package/src/play/play-recording.ts +2 -2
  182. package/src/play/react-play-live-authoring.ts +3 -3
  183. package/src/play/run-selection.ts +93 -0
  184. package/src/play-bar/PlayBar.tsx +20 -39
  185. package/src/profiler/FrameDebuggerPanel.tsx +1 -1
  186. package/src/profiler/PerformancePanel.tsx +4 -4
  187. package/src/react/design-time-react-mount.ts +37 -85
  188. package/src/react/dom-authoring-adapter.ts +11 -11
  189. package/src/react/react-inspector-section.tsx +13 -13
  190. package/src/react/react-world-authoring-adapter.ts +31 -143
  191. package/src/react/story-documents/story-documents.tsx +18 -22
  192. package/src/react/ui-board-document.tsx +10 -11
  193. package/src/react/ui-component-board.ts +5 -5
  194. package/src/runtime/adapter/audio-meter.ts +21 -0
  195. package/src/runtime/adapter/first-party-audio-system.ts +230 -0
  196. package/src/runtime/adapter/ingest/contract-debug-adapter.ts +114 -0
  197. package/src/runtime/adapter/ingest/contract-system-adapters.ts +256 -0
  198. package/src/runtime/adapter/ingest/merge-debug-adapters.ts +197 -0
  199. package/src/runtime/adapter/ingest/observation-debug-adapter.ts +162 -0
  200. package/src/runtime/adapter/ingest/upstream-pin.ts +51 -0
  201. package/src/runtime/adapter/native-debug-module.ts +498 -0
  202. package/src/runtime/audio/bus-mixer.ts +161 -0
  203. package/src/runtime/audio/pose-guard.ts +80 -0
  204. package/src/runtime/core/frame-pacing.ts +126 -0
  205. package/src/runtime/core/game-loop.ts +225 -0
  206. package/src/runtime/core/game-scoped-slot.ts +28 -0
  207. package/src/runtime/core/seeded-random.ts +162 -0
  208. package/src/runtime/core/sim-clock.ts +391 -0
  209. package/src/runtime/core/system-runner.ts +269 -0
  210. package/src/runtime/core/types.ts +104 -0
  211. package/src/runtime/create-runtime.ts +1128 -0
  212. package/src/runtime/debug-bridge.ts +570 -0
  213. package/src/runtime/debug-registry.ts +899 -0
  214. package/src/runtime/dev/chrome-trace.ts +153 -0
  215. package/src/runtime/dev/instruments.ts +403 -0
  216. package/src/runtime/dev/logger.ts +119 -0
  217. package/src/runtime/dev/performance-profiler.ts +367 -0
  218. package/src/runtime/dev/register-render-vitals.ts +276 -0
  219. package/src/runtime/dev/render-census.ts +354 -0
  220. package/src/runtime/dev/render-debug-adapter.ts +218 -0
  221. package/src/runtime/dev/render-memory.ts +226 -0
  222. package/src/runtime/dev/render-vitals.ts +338 -0
  223. package/src/runtime/dev/static-batch-advisor.ts +188 -0
  224. package/src/runtime/dev/webgl-frame-capture.ts +366 -0
  225. package/src/runtime/dev/webgl-gpu-timer.ts +53 -0
  226. package/src/runtime/dev-build.ts +47 -0
  227. package/src/runtime/game.ts +1636 -0
  228. package/src/runtime/gameplay-rng-trap.ts +135 -0
  229. package/src/runtime/host-context.ts +64 -0
  230. package/src/runtime/input-router.ts +169 -0
  231. package/src/runtime/mount-manifest.ts +480 -0
  232. package/src/runtime/pixi/authoring.ts +706 -0
  233. package/src/runtime/pixi/ingest.ts +116 -0
  234. package/src/runtime/pixi/physics-registry.ts +49 -0
  235. package/src/runtime/pixi/render-pass-bracket.ts +117 -0
  236. package/src/runtime/pixi/scene-capture.ts +179 -0
  237. package/src/runtime/pixi/system-adapters.ts +69 -0
  238. package/src/runtime/playtest.ts +22 -0
  239. package/src/runtime/presentation.ts +141 -0
  240. package/src/runtime/render-control.ts +642 -0
  241. package/src/runtime/render-seed.ts +77 -0
  242. package/src/runtime/run-ticks-settled.ts +73 -0
  243. package/src/runtime/setup/setup-audio.ts +72 -0
  244. package/src/services/audio-pose-guard.ts +2 -2
  245. package/src/services/game-audio.ts +152 -0
  246. package/src/services/game-network.ts +657 -0
  247. package/src/services/game-physics.ts +334 -0
  248. package/src/state-watch/StateWatchPanel.tsx +1 -1
  249. package/src/three/authoring/camera-runtime-inspector-section.tsx +4 -3
  250. package/src/three/authoring/constraint-inspector-section.tsx +8 -7
  251. package/src/three/authoring/model-asset-inspector-section.tsx +14 -17
  252. package/src/three/authoring/oid-source-persistence.ts +13 -13
  253. package/src/three/authoring/r3f-design-session.ts +79 -61
  254. package/src/three/authoring/r3f-source-authoring-adapter.ts +112 -108
  255. package/src/three/authoring/reflection-probe-inspector-section.tsx +5 -4
  256. package/src/three/authoring/spatial-joint-handles.ts +1 -1
  257. package/src/three/authoring/spatial-lod-handles.ts +1 -1
  258. package/src/three/authoring/spatial-particle-handles.ts +1 -1
  259. package/src/three/authoring/three-authoring-adapter.ts +33 -33
  260. package/src/three/component-verbs/extract-menu.ts +8 -7
  261. package/src/three/component-verbs/fork-menu.ts +8 -7
  262. package/src/three/component-verbs/internals-menu.ts +3 -3
  263. package/src/three/drei-asset-caches.ts +13 -0
  264. package/src/three/story-documents/three-story-documents.tsx +24 -34
  265. package/src/three/three-board/ThreeBoardDocument.tsx +25 -25
  266. package/src/three/three-board/board-scene.ts +7 -7
  267. package/src/three/three-board/three-component-board.ts +5 -5
  268. package/contributions/react/pasteboard.action.ts +0 -41
  269. package/contributions/xstate-behavior.action.ts +0 -42
  270. package/contributions/xstate-behavior.document.tsx +0 -73
  271. package/contributions/xstate-behavior.inspector.tsx +0 -28
  272. package/contributions/xstate-behavior.menu.ts +0 -23
  273. package/src/react/pasteboard-materialize.ts +0 -154
  274. package/src/services/game-audio-unlock.ts +0 -48
  275. package/src/xstate/XStateBehaviorSection.tsx +0 -130
  276. package/src/xstate/XStateMachineInspector.tsx +0 -566
  277. package/src/xstate/character-animation-machine.fixture.ts +0 -74
  278. package/src/xstate/live-behaviors.ts +0 -106
  279. package/src/xstate/use-live-actor-state.ts +0 -44
  280. package/src/xstate/xstate-graph.ts +0 -235
  281. package/src/xstate/xstate-layout.ts +0 -76
@@ -8,11 +8,8 @@
8
8
  * degrading loudly per world rather than silently ignoring them (the F24/F9
9
9
  * anti-pattern this closes):
10
10
  *
11
- * - a builtin `dom` world — a bare (no `<WorldProvider>`) DOM layer, D-V3.
12
- * There is no native `Game` beside an ingest world, so wrapping one would
13
- * fabricate first-party data (anti-shim) — the sibling's own `useWorldState`/
14
- * `useGame` calls are simply unavailable, and this says so once per world.
15
- * Has no loop at all, so its `SiblingMount.setPaused` stays `undefined`
11
+ * - a builtin `dom` world — a bare DOM layer, D-V3, rendered like every `dom`
12
+ * root. Has no loop at all, so its `SiblingMount.setPaused` stays `undefined`
16
13
  * (D-B1) — never a fabricated no-op.
17
14
  * - `{ module }` (any kind) OR a builtin `three`/`canvas` world
18
15
  * (D-B3 — the residual this closes: a second `{ ingest }` world is
@@ -46,24 +43,24 @@
46
43
  import {
47
44
  addMountFailureReport,
48
45
  formatMountFailureMessage,
49
- } from '@volter/editor-core/authoring/mount-failure-report';
46
+ } from '@volter/editor-sdk/kit/mount-failure-report';
50
47
  import { withStoreSelection } from '../host/authoring/mounted-authoring';
51
- import { makeNoAuthoringAdapter } from '@volter/editor-core/authoring/no-authoring-adapter';
48
+ import { makeNoAuthoringAdapter } from '@volter/editor-sdk/kit/authoring/no-authoring-adapter';
52
49
  import { PixiAuthoringAdapter } from '../host/authoring/pixi-authoring-adapter';
53
50
  import { createLiveCanvasWriteTarget } from '../host/authoring/pixi-live-write-target';
54
51
  import { resolveCanvasPixiForEditor } from '../host/canvas-entry-runtime';
55
- import { CrashNullBoundary } from '@volter/editor-core/crash-null-boundary';
56
- import { editorConsole } from '@volter/editor-core/editor-console';
57
- import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
52
+ import { CrashNullBoundary } from '@volter/editor-sdk/kit/crash-null-boundary';
53
+ import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
54
+ import type { EditorShellStore } from '@volter/editor-threejs/kit/editor-shell-store';
58
55
  import { authoringJournal } from '../host/history/json-history-resource';
59
56
  import { activeRealmServices } from '../host/realm-services';
60
57
  import { resolveReactAdapterRootComponent } from '../host/roots/react-root';
61
- import { sourceWriteBackendIfPrimed } from '@volter/editor-core/ui-source/tier-source-write-backend';
58
+ import { sourceWriteBackendIfPrimed } from '@volter/editor-sdk/kit/ui-source/tier-source-write-backend';
62
59
  import { DomAuthoringAdapter } from '../react/dom-authoring-adapter';
63
60
  import { ReactRootAuthoringAdapter, walkOidTree } from '../react/react-world-authoring-adapter';
64
61
  import { beginProjectMountEpoch } from '@volter/editor-sdk/session/project-module-url';
65
- import { createPhysics2DRegistry } from '@volter/game-runtime/pixi/physics-registry';
66
- import { createPhysicsAdapter2D } from '@volter/game-runtime/pixi/system-adapters';
62
+ import { createPhysics2DRegistry } from '../runtime/pixi/physics-registry';
63
+ import { createPhysicsAdapter2D } from '../runtime/pixi/system-adapters';
67
64
  import type { AuthoringAdapter } from '@volter/editor-project/adapter';
68
65
  import { declaredRoots } from '@volter/editor-project/adapter/manifest-interpreter';
69
66
  import type { ResolvedAdapterRoot, ResolvedGameManifest } from '@volter/editor-project/manifest/load';
@@ -136,15 +133,13 @@ function styleSiblingLayer(
136
133
  }
137
134
 
138
135
  /**
139
- * D-V3: mount a `default-react` sibling as a bare DOM layer — no
140
- * `<WorldProvider>` wrap (anti-shim: there is no native `Game` to hand it).
141
- * Reuses `binding-resolver.ts`'s exact entry-loading step
136
+ * D-V3: mount a `default-react` sibling as a bare DOM layer, the way every
137
+ * `dom` root renders. Reuses `binding-resolver.ts`'s exact entry-loading step
142
138
  * (`resolveReactAdapterRootComponent` — the same D4 `scene`-forbidden/
143
139
  * `entry`-required checks and default-export validation
144
140
  * `resolveDefaultReactAdapter` itself uses) rather than duplicating it.
145
141
  *
146
- * If the entry component throws at mount/first render (most commonly: it
147
- * calls `useGame`/`useWorldState` with no provider in the tree), the error
142
+ * If the entry component throws at mount/first render, the error
148
143
  * boundary above catches it, this function removes the layer it just
149
144
  * created, and RETHROWS so the caller's uniform per-sibling catch
150
145
  * (`mountOneIngestSibling`'s caller, {@link mountIngestSiblings}) can turn it
@@ -168,13 +163,6 @@ async function mountDefaultReactSibling(
168
163
  styleSiblingLayer(layer, world, 'none');
169
164
  gameContainer.appendChild(layer);
170
165
 
171
- // D-V3: one structured note per world naming the degrade — never silent
172
- // about the missing bridge.
173
- editorConsole.log(
174
- `react sibling "${world.id}": no native Game beside an ingest world — useWorldState unavailable`,
175
- 'ingest',
176
- );
177
-
178
166
  const root = createRoot(layer);
179
167
  let caught: unknown = null;
180
168
  // `flushSync` forces the initial mount (render + commit + error-boundary
@@ -227,7 +215,7 @@ async function mountDefaultReactSibling(
227
215
  // built — `ui-source/tier-source-write-backend.ts`, and the packaged-
228
216
  // editor bug the old `import.meta.env.DEV` gate carried here.
229
217
  const writeBackend = sourceWriteBackendIfPrimed('An ingest sibling’s react layer');
230
- authoring = new ReactRootAuthoringAdapter(layer, store, {
218
+ authoring = new ReactRootAuthoringAdapter(layer, store.shell, {
231
219
  ...(writeBackend ? { writeBackend } : {}),
232
220
  });
233
221
  } else {
@@ -348,7 +336,7 @@ async function mountScopedRuntimeSibling(
348
336
  authoring =
349
337
  worldInstance.mounted.authoring ??
350
338
  makeNoAuthoringAdapter(
351
- store,
339
+ store.shell,
352
340
  `${world.id} (${worldInstance.mounted.kind === 'canvas' ? worldInstance.mounted.substrate.name : 'unknown'} authoring unavailable)`,
353
341
  );
354
342
  } else {
@@ -368,7 +356,7 @@ async function mountScopedRuntimeSibling(
368
356
  });
369
357
  }
370
358
  } else {
371
- authoring = makeNoAuthoringAdapter(store, `${world.id} (no authoring surface)`);
359
+ authoring = makeNoAuthoringAdapter(store.shell, `${world.id} (no authoring surface)`);
372
360
  }
373
361
  }
374
362
  return {
@@ -6,20 +6,20 @@
6
6
  */
7
7
 
8
8
  import { measureAdapterReach } from '../host/adapter-reach';
9
- import { setActiveAuthoring } from '@volter/editor-core/authoring/active-adapter';
10
- import { setActiveSystems } from '@volter/editor-core/authoring/active-systems';
9
+ import { setActiveAuthoring } from '@volter/editor-sdk/kit/authoring/active-adapter';
10
+ import { setActiveSystems } from '@volter/editor-sdk/kit/authoring/active-systems';
11
11
  import {
12
12
  addMountFailureReport,
13
13
  clearMountFailureReports,
14
14
  formatMountFailureMessage,
15
- } from '@volter/editor-core/authoring/mount-failure-report';
16
- import { makeNoAuthoringAdapter } from '@volter/editor-core/authoring/no-authoring-adapter';
15
+ } from '@volter/editor-sdk/kit/mount-failure-report';
16
+ import { makeNoAuthoringAdapter } from '@volter/editor-sdk/kit/authoring/no-authoring-adapter';
17
17
  import { resolveAllRoots } from '../host/binding-resolver';
18
- import { editorConsole } from '@volter/editor-core/editor-console';
19
- import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
20
- import { fetchGameManifest } from '@volter/editor-core/manifest-project';
21
- import { getCurrentProject } from '@volter/editor-core/project-manager';
22
- import type { GameSession, RootMountSpec } from '@volter/game-runtime/runtime/create-runtime';
18
+ import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
19
+ import type { EditorShellStore } from '@volter/editor-threejs/kit/editor-shell-store';
20
+ import { fetchGameManifest } from '@volter/editor-sdk/kit/manifest-project';
21
+ import { getCurrentProject } from '@volter/editor-sdk/kit/active-project';
22
+ import type { GameSession, RootMountSpec } from '../runtime/create-runtime';
23
23
  import type { AuthoringAdapter } from '@volter/editor-project/adapter';
24
24
  import { declaredRoots, ingestRoots } from '@volter/editor-project/adapter/manifest-interpreter';
25
25
  import type { ResolvedAdapterRoot, ResolvedGameManifest } from '@volter/editor-project/manifest/load';
@@ -54,8 +54,8 @@ export function withStoreSelection(
54
54
  return {
55
55
  ...authoring,
56
56
  selection: {
57
- get: () => [...store.selectedEntityIds],
58
- set: (ids) => store.selectMultiple(ids),
57
+ get: () => [...store.shell.selectedEntityIds],
58
+ set: (ids) => store.shell.selectMultiple(ids),
59
59
  },
60
60
  };
61
61
  }
@@ -68,7 +68,7 @@ export function exitModuleMode(): void {
68
68
  setActiveAuthoring(null);
69
69
  setActiveSystems(null);
70
70
  clearMountFailureReports(); // D-W3: no session -> nothing left to report (mirrors ingest/mount-ingest-root.ts's unmountThreeIngestRoot)
71
- s.store.setPlayState('stopped');
71
+ s.store.shell.setPlayState('stopped');
72
72
  try {
73
73
  s.stop();
74
74
  } catch {
@@ -93,7 +93,7 @@ export async function mountModuleRootRuntime(
93
93
  width: number,
94
94
  height: number,
95
95
  ): Promise<{ session: GameSession; specs: RootMountSpec[] }> {
96
- const { createGameRuntime } = await import('@volter/game-runtime/runtime/create-runtime');
96
+ const { createGameRuntime } = await import('../runtime/create-runtime');
97
97
  const specs = await resolveAllRoots({ ...manifest, roots: [world] }, projectRoot);
98
98
  const session = await createGameRuntime({ container, roots: specs, width, height });
99
99
  return { session, specs };
@@ -114,7 +114,7 @@ export async function enterModuleModeFromManifestRoot(
114
114
  return;
115
115
  }
116
116
 
117
- store.setPlayState('playing');
117
+ store.shell.setPlayState('playing');
118
118
  editorConsole.log(
119
119
  `Mounting custom adapter module for world "${world.id}" (kind: ${world.surface})`,
120
120
  'adapter',
@@ -142,12 +142,11 @@ export async function enterModuleModeFromManifestRoot(
142
142
  activeAuthoring = withStoreSelection(mounted.authoring, store);
143
143
  } else {
144
144
  // Honest answer for a module adapter that declares no authoring surface.
145
- activeAuthoring = makeNoAuthoringAdapter(store, `${adapterId} (no authoring surface)`);
145
+ activeAuthoring = makeNoAuthoringAdapter(store.shell, `${adapterId} (no authoring surface)`);
146
146
  }
147
147
  setActiveAuthoring(activeAuthoring);
148
148
  setActiveSystems(mounted.systems ?? {});
149
- store.setActiveViewportTab('play');
150
- store.notifyIngestEdit();
149
+ store.shell.notifyIngestEdit();
151
150
  clearMountFailureReports(); // D-W3: mount succeeded
152
151
 
153
152
  // Measured from the mounted adapter rather than declared by the route.
@@ -215,9 +214,9 @@ export async function tryManifestModuleRoute(store: EditorShellStore): Promise<b
215
214
  return true;
216
215
  }
217
216
 
218
- import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-core/live-document';
217
+ import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-sdk/kit/live-document';
219
218
  // THE MODULE LANE, as the host sees it (`live-session-registry.ts`).
220
- import { registerLiveSession } from '@volter/editor-core/live-session-registry';
219
+ import { registerLiveSession } from '@volter/editor-sdk/kit/live-session-registry';
221
220
 
222
221
  registerLiveSession({
223
222
  id: 'module',
@@ -22,8 +22,8 @@
22
22
 
23
23
  import { measureAdapterReach } from '../host/adapter-reach';
24
24
  import { nextPaint } from '../host/after-paint';
25
- import { setActiveAuthoring } from '@volter/editor-core/authoring/active-adapter';
26
- import { setActiveSystems } from '@volter/editor-core/authoring/active-systems';
25
+ import { setActiveAuthoring } from '@volter/editor-sdk/kit/authoring/active-adapter';
26
+ import { setActiveSystems } from '@volter/editor-sdk/kit/authoring/active-systems';
27
27
  import { BabylonAuthoringAdapter } from '../host/authoring/babylon-authoring-adapter';
28
28
  import {
29
29
  type BabylonRealmLike,
@@ -35,7 +35,7 @@ import {
35
35
  type ContractScenesStories,
36
36
  createContractScenesStories,
37
37
  } from '../host/authoring/contract-scenes-stories';
38
- import { clearMountFailureReports } from '@volter/editor-core/authoring/mount-failure-report';
38
+ import { clearMountFailureReports } from '@volter/editor-sdk/kit/mount-failure-report';
39
39
  import { PhaserLiveAuthoringAdapter } from '../host/authoring/phaser-live-authoring-adapter';
40
40
  import { PixiAuthoringAdapter } from '../host/authoring/pixi-authoring-adapter';
41
41
  import { createCreationSiteCanvasWriteTarget } from '../host/authoring/pixi-creation-site-write-target';
@@ -43,9 +43,9 @@ import { resolveCanvasPixiForEditor } from '../host/canvas-entry-runtime';
43
43
  import {
44
44
  capturePixiDisplayObjectThumbnail,
45
45
  registerPresentedPixiApps,
46
- } from '@volter/editor-core/canvas-preview-frames';
47
- import { editorConsole } from '@volter/editor-core/editor-console';
48
- import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
46
+ } from '../host/canvas-preview-frames';
47
+ import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
48
+ import type { EditorShellStore } from '@volter/editor-threejs/kit/editor-shell-store';
49
49
  import { GAME_SURFACE_CONTAINMENT_CSS } from '../host/game-realm-page';
50
50
  import {
51
51
  clearGameSurface,
@@ -54,21 +54,21 @@ import {
54
54
  setGameSurface,
55
55
  } from '../host/gated-globals';
56
56
  import { authoringJournal } from '../host/history/json-history-resource';
57
- import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-core/live-document';
58
- import { getCurrentProject } from '@volter/editor-core/project-manager';
59
- import { recordRootReadiness } from '@volter/editor-core/readiness';
57
+ import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-sdk/kit/live-document';
58
+ import { getCurrentProject } from '@volter/editor-sdk/kit/active-project';
59
+ import { recordRootReadiness } from '@volter/editor-sdk/kit/readiness';
60
60
  import type { MeasuredLoop } from '../host/same-realm-loop-gate';
61
- import { projectContractSystemAdapters } from '@volter/game-runtime/adapter/ingest/contract-system-adapters';
62
- import type { RenderDebugWiring } from '@volter/game-runtime/dev/render-debug-adapter';
63
- import type { IngestGame2D } from '@volter/game-runtime/pixi/ingest';
64
- import { INGEST_GAME_2D_LOAD_ERROR_NAME, mountIngestGame2D } from '@volter/game-runtime/pixi/ingest';
65
- import { createPhysics2DRegistry } from '@volter/game-runtime/pixi/physics-registry';
66
- import { installPixiRenderPassBracket } from '@volter/game-runtime/pixi/render-pass-bracket';
61
+ import { projectContractSystemAdapters } from '../runtime/adapter/ingest/contract-system-adapters';
62
+ import type { RenderDebugWiring } from '../runtime/dev/render-debug-adapter';
63
+ import type { IngestGame2D } from '../runtime/pixi/ingest';
64
+ import { INGEST_GAME_2D_LOAD_ERROR_NAME, mountIngestGame2D } from '../runtime/pixi/ingest';
65
+ import { createPhysics2DRegistry } from '../runtime/pixi/physics-registry';
66
+ import { installPixiRenderPassBracket } from '../runtime/pixi/render-pass-bracket';
67
67
  import {
68
68
  composePhysicsAdapters2D,
69
69
  createPhysicsAdapter2D,
70
70
  type PhysicsAdapter2D,
71
- } from '@volter/game-runtime/pixi/system-adapters';
71
+ } from '../runtime/pixi/system-adapters';
72
72
  import type { AuthoringAdapter } from '@volter/editor-project/adapter/authoring';
73
73
  import { readGameReady } from '@volter/editor-project/adapter/ingest/game-contract';
74
74
  import { displayKeyedPhysics } from '@volter/editor-project/adapter/system-adapter';
@@ -214,7 +214,7 @@ function rendererCanvasBelongsToHost(renderer: unknown, hostEl: HTMLElement): bo
214
214
  * The projection is the ONE validator: presence + typeof for the four members,
215
215
  * plus the keying check that makes a node-id-keyed declaration on this surface
216
216
  * `malformed` by name instead of a bound shape nothing here can call
217
- * (`@volter/game-runtime/adapter/ingest/contract-system-adapters`). Both verdicts reach
217
+ * (`@volter/editor-game/runtime/adapter/ingest/contract-system-adapters`). Both verdicts reach
218
218
  * the reader through the coverage row for `system.physics`, so a refusal here
219
219
  * is never silent.
220
220
  */
@@ -339,15 +339,15 @@ function publishStructuralCanvasRuntime(
339
339
  });
340
340
  disposeScene = installIngestCanvasScene(store);
341
341
 
342
- setGameInputGate(() => store.playState === 'playing' && store.activeViewportTab === 'play');
342
+ setGameInputGate(() => store.shell.playState === 'playing' && store.shell.activeViewportTab === 'play');
343
343
  setActiveAuthoring(adapter);
344
344
  // No captured Pixi renderer on this branch — the host's pixi drew nothing, so
345
345
  // there is no context to instrument, no runner pair to bracket, and no
346
346
  // host-owned registry carrier to compose with either: what the game itself
347
347
  // declared is the only physics this route can have.
348
348
  publishCanvasIngestSystems(game.name, undefined, declaredCanvasPhysics());
349
- landIngestBootInEdit(store);
350
- store.notifyIngestEdit();
349
+ landIngestBootInEdit();
350
+ store.shell.notifyIngestEdit();
351
351
  clearMountFailureReports();
352
352
 
353
353
  recordMountCoverage({
@@ -395,7 +395,7 @@ async function mountCanvasIngestRootInner(
395
395
  return;
396
396
  }
397
397
 
398
- store.setPlayState('playing');
398
+ store.shell.setPlayState('playing');
399
399
  editorConsole.log(`Ingesting unmodified PixiJS game: ${game.name}`, 'ingest');
400
400
 
401
401
  // PD-3: READINESS, RECORDED. The three lane's self-booting mount has always
@@ -473,7 +473,7 @@ async function mountCanvasIngestRootInner(
473
473
  markGameCssScope(hostEl);
474
474
  const scopedCssProject = getCurrentProject();
475
475
  if (scopedCssProject) {
476
- const { ensureScopedGameStyles } = await import('@volter/editor-core/scoped-game-css');
476
+ const { ensureScopedGameStyles } = await import('@volter/editor-sdk/kit/scoped-game-css');
477
477
  await ensureScopedGameStyles(scopedCssProject.rootPath);
478
478
  }
479
479
  }
@@ -587,7 +587,7 @@ async function mountCanvasIngestRootInner(
587
587
  }
588
588
 
589
589
  // The captured `Application` — the game's own, trapped on its first render
590
- // (`@volter/game-runtime/pixi/scene-capture`). Two things hang off it, and neither is
590
+ // (`@volter/editor-game/runtime/pixi/scene-capture`). Two things hang off it, and neither is
591
591
  // available anywhere else.
592
592
  const app = mount.capture.captured?.app as Application | undefined;
593
593
 
@@ -685,7 +685,7 @@ async function mountCanvasIngestRootInner(
685
685
  journal: authoringJournal(sessionId),
686
686
  target: createCreationSiteCanvasWriteTarget({
687
687
  physics: physicsAdapter,
688
- history: store.projectHistory,
688
+ history: store.shell.projectHistory,
689
689
  }),
690
690
  ...(stories ? { stories } : {}),
691
691
  // The captured game canvas is the screen↔stage mapping `pickable`/`rects`
@@ -755,7 +755,7 @@ async function mountCanvasIngestRootInner(
755
755
  // R2c: PixiJS ingest fixtures (`ingest/games/**`) are just as
756
756
  // unshadowed-by-default as the three.js ones — drive the same gate as
757
757
  // {@link mountThreeIngestRoot} (see that function's doc comment).
758
- setGameInputGate(() => store.playState === 'playing' && store.activeViewportTab === 'play');
758
+ setGameInputGate(() => store.shell.playState === 'playing' && store.shell.activeViewportTab === 'play');
759
759
 
760
760
  setActiveAuthoring(adapter);
761
761
  // The captured game's OWN renderer — the one object that carries both halves
@@ -770,8 +770,8 @@ async function mountCanvasIngestRootInner(
770
770
  mount.capture.captured?.renderer,
771
771
  declaredPhysics ? physicsAdapter : null,
772
772
  );
773
- landIngestBootInEdit(store);
774
- store.notifyIngestEdit();
773
+ landIngestBootInEdit();
774
+ store.shell.notifyIngestEdit();
775
775
  clearMountFailureReports(); // D-W3: mount succeeded
776
776
  // PD-3: the mount stood — but `contract-ready` may only be recorded when the
777
777
  // declared promise actually ANSWERED. The three lane's `awaitWorldReady`
@@ -13,7 +13,7 @@
13
13
  */
14
14
 
15
15
  import type { AdapterReach } from '../host/adapter-reach';
16
- import { getActiveSystems } from '@volter/editor-core/authoring/active-systems';
16
+ import { getActiveSystems } from '@volter/editor-sdk/kit/authoring/active-systems';
17
17
  import { ingestDataWriterNow } from '../host/authoring/ingest-data-writer';
18
18
  import { ingestOwnershipNow } from '../host/authoring/ingest-source-persistence';
19
19
  import {
@@ -26,8 +26,8 @@ import {
26
26
  type SystemAdapterMeasurement,
27
27
  type WriteReachFacts,
28
28
  } from '../host/coverage/capability-coverage';
29
- import { inspectSystemAdapterSeam } from '@volter/editor-core/coverage/system-seam-evidence';
30
- import { editorConsole } from '@volter/editor-core/editor-console';
29
+ import { inspectSystemAdapterSeam } from '@volter/editor-sdk/kit/system-seam-evidence';
30
+ import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
31
31
  import {
32
32
  type MeasuredLoop,
33
33
  measuredLoop,
@@ -36,7 +36,7 @@ import {
36
36
  import {
37
37
  type ContractSurface,
38
38
  projectContractSystemAdapters,
39
- } from '@volter/game-runtime/adapter/ingest/contract-system-adapters';
39
+ } from '../runtime/adapter/ingest/contract-system-adapters';
40
40
  import type { VgaiGameContract } from '@volter/editor-project/adapter/ingest/game-contract';
41
41
  import type { SystemAdapters } from '@volter/editor-project/adapter/system-adapter';
42
42
  import { activeIngest } from './active-ingest';
@@ -6,15 +6,15 @@
6
6
  */
7
7
 
8
8
  import { measureAdapterReach } from '../host/adapter-reach';
9
- import { setActiveAuthoring } from '@volter/editor-core/authoring/active-adapter';
10
- import { setActiveSystems } from '@volter/editor-core/authoring/active-systems';
11
- import { clearMountFailureReports } from '@volter/editor-core/authoring/mount-failure-report';
9
+ import { setActiveAuthoring } from '@volter/editor-sdk/kit/authoring/active-adapter';
10
+ import { setActiveSystems } from '@volter/editor-sdk/kit/authoring/active-systems';
11
+ import { clearMountFailureReports } from '@volter/editor-sdk/kit/mount-failure-report';
12
12
  import { resolveAllRoots } from '../host/binding-resolver';
13
- import { editorConsole } from '@volter/editor-core/editor-console';
14
- import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
13
+ import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
14
+ import type { EditorShellStore } from '@volter/editor-threejs/kit/editor-shell-store';
15
15
  import { setGameInputGate } from '../host/gated-globals';
16
16
  import { authoringJournal } from '../host/history/json-history-resource';
17
- import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-core/live-document';
17
+ import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-sdk/kit/live-document';
18
18
  import { DomAuthoringAdapter } from '../react/dom-authoring-adapter';
19
19
  import type { ResolvedAdapterRoot, ResolvedGameManifest } from '@volter/editor-project/manifest/load';
20
20
  import { serializeEntry, setActiveIngest } from './active-ingest';
@@ -89,14 +89,14 @@ async function mountDomIngestRootInner(store: EditorShellStore, folderId: string
89
89
  // react session — closes the cross-kind leak (F26 residual).
90
90
  exitActiveIngest();
91
91
 
92
- store.setPlayState('playing');
92
+ store.shell.setPlayState('playing');
93
93
  editorConsole.log(`Ingesting unmodified native-React game: ${game.manifest.name}`, 'ingest');
94
94
 
95
95
  // F26: same cold-mount announcement as the other ingest routes — the react
96
96
  // world's entry executes in the editor realm and may declare the game
97
97
  // contract to defer its session until ▶. Opt-in, never demanded.
98
98
  (window as unknown as { __vgaiMountCold?: boolean }).__vgaiMountCold = true;
99
- const { createGameRuntime } = await import('@volter/game-runtime/runtime/create-runtime');
99
+ const { createGameRuntime } = await import('../runtime/create-runtime');
100
100
  const specs = await resolveAllRoots(game.manifest, projectRoot);
101
101
  const w = gameContainer.clientWidth;
102
102
  const h = gameContainer.clientHeight;
@@ -144,12 +144,12 @@ async function mountDomIngestRootInner(store: EditorShellStore, folderId: string
144
144
  // `game-globals-shadow.ts` roots its shadow at — so a native-React fixture's
145
145
  // own listeners are shadowed on the same terms as every other surface's now
146
146
  // (this comment used to record the opposite, from the R-N6 residual).
147
- setGameInputGate(() => store.playState === 'playing' && store.activeViewportTab === 'play');
147
+ setGameInputGate(() => store.shell.playState === 'playing' && store.shell.activeViewportTab === 'play');
148
148
 
149
149
  setActiveAuthoring(adapter);
150
150
  setActiveSystems({});
151
- landIngestBootInEdit(store);
152
- store.notifyIngestEdit();
151
+ landIngestBootInEdit();
152
+ store.shell.notifyIngestEdit();
153
153
  clearMountFailureReports(); // D-W3: mount succeeded
154
154
 
155
155
  const coverage = domMountCoverage(adapter);
@@ -207,7 +207,7 @@ export async function mountDomIngestRootFromManifest(
207
207
  // react session — closes the cross-kind leak (F26 residual).
208
208
  exitActiveIngest();
209
209
 
210
- store.setPlayState('playing');
210
+ store.shell.setPlayState('playing');
211
211
  editorConsole.log(
212
212
  `Ingesting unmodified native-React game (external folder): ${world.id}`,
213
213
  'ingest',
@@ -216,7 +216,7 @@ export async function mountDomIngestRootFromManifest(
216
216
  // F26: same cold-mount announcement the vendored route makes — an
217
217
  // external-folder game may declare the game contract too.
218
218
  (window as unknown as { __vgaiMountCold?: boolean }).__vgaiMountCold = true;
219
- const { createGameRuntime } = await import('@volter/game-runtime/runtime/create-runtime');
219
+ const { createGameRuntime } = await import('../runtime/create-runtime');
220
220
  const specs = await resolveAllRoots({ ...manifest, roots: [world] }, projectRoot);
221
221
  const w = gameContainer.clientWidth;
222
222
  const h = gameContainer.clientHeight;
@@ -249,12 +249,12 @@ export async function mountDomIngestRootFromManifest(
249
249
  siblings: [],
250
250
  worldId: world.id,
251
251
  });
252
- setGameInputGate(() => store.playState === 'playing' && store.activeViewportTab === 'play');
252
+ setGameInputGate(() => store.shell.playState === 'playing' && store.shell.activeViewportTab === 'play');
253
253
 
254
254
  setActiveAuthoring(adapter);
255
255
  setActiveSystems({});
256
- landIngestBootInEdit(store);
257
- store.notifyIngestEdit();
256
+ landIngestBootInEdit();
257
+ store.shell.notifyIngestEdit();
258
258
  clearMountFailureReports(); // D-W3: mount succeeded
259
259
 
260
260
  const coverage = domMountCoverage(adapter);
@@ -23,25 +23,24 @@
23
23
  * path is therefore its catch block.
24
24
  */
25
25
 
26
- import { getAuthoringOverride, setActiveAuthoring } from '@volter/editor-core/authoring/active-adapter';
26
+ import { getAuthoringOverride, setActiveAuthoring } from '@volter/editor-sdk/kit/authoring/active-adapter';
27
27
  import {
28
28
  CompositeAuthoringAdapter,
29
29
  type CompositeChild,
30
- } from '@volter/editor-core/authoring/composite-authoring-adapter';
30
+ } from '@volter/editor-sdk/kit/authoring/composite-authoring-adapter';
31
31
  import {
32
32
  addMountFailureReport,
33
33
  clearMountFailureReports,
34
34
  formatMountFailureMessage,
35
35
  getMountFailureReports,
36
36
  type MountFailureReport,
37
- } from '@volter/editor-core/authoring/mount-failure-report';
38
- import { editorConsole } from '@volter/editor-core/editor-console';
39
- import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
40
- import { registerEditorStateFacet } from '@volter/editor-core/editor-state-facets';
41
- import { liveDocumentContainer } from '@volter/editor-core/live-document';
42
- import { fetchGameManifest, isManifestAbsence } from '@volter/editor-core/manifest-project';
43
- import { getCurrentProject } from '@volter/editor-core/project-manager';
44
- import { onShellStore } from '@volter/editor-core/shell-store-door';
37
+ } from '@volter/editor-sdk/kit/mount-failure-report';
38
+ import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
39
+ import type { EditorShellStore } from '@volter/editor-threejs/kit/editor-shell-store';
40
+ import { registerEditorStateFacet } from '@volter/editor-sdk/kit/editor-state-facets';
41
+ import { liveDocumentContainer } from '@volter/editor-sdk/kit/live-document';
42
+ import { fetchGameManifest, isManifestAbsence } from '@volter/editor-sdk/kit/manifest-project';
43
+ import { getCurrentProject } from '@volter/editor-sdk/kit/active-project';
45
44
  import { ingestRoots, rootById } from '@volter/editor-project/adapter/manifest-interpreter';
46
45
  import { MANIFEST_FILENAME } from '@volter/editor-project/manifest/filename';
47
46
  import type { ResolvedAdapterRoot, ResolvedGameManifest } from '@volter/editor-project/manifest/load';
@@ -76,6 +75,7 @@ export {
76
75
  unmountDomIngestRoot,
77
76
  unmountThreeIngestRoot,
78
77
  } from './unmount-ingest-root';
78
+ import { onThreeStore } from '@volter/editor-threejs/kit/three-state';
79
79
 
80
80
  type CanvasMounts = typeof import('./mount-canvas-ingest-root');
81
81
  type DomMounts = typeof import('./mount-dom-ingest-root');
@@ -149,7 +149,7 @@ let _boundStore: EditorShellStore | null = null;
149
149
  * `project-session-reset.ts`, fired by `project-manager.ts`'s
150
150
  * `onProjectSessionEnd`.
151
151
  */
152
- onShellStore((store) => {
152
+ onThreeStore((store) => {
153
153
  _boundStore = store;
154
154
  clearMountFailureReports();
155
155
  });
@@ -197,13 +197,13 @@ function reportFailedIngestMount(store: EditorShellStore, report: MountFailureRe
197
197
  resetIngestPlaySurface();
198
198
  // The prologue's `setPlayState('playing')` must never outlive a failed mount
199
199
  // — that flag is what `collectState` reported as a live game (S-1).
200
- store.setPlayState('stopped');
200
+ store.shell.setPlayState('stopped');
201
201
  addMountFailureReport(report);
202
202
  // `addMountFailureReport` notifies the status item through the slot's own
203
203
  // subscribe; this broadcast is for the STORE-subscribed panels (hierarchy,
204
204
  // play controls) that must re-render off the teardown above — a failed
205
205
  // mount never reaches the success path's `notifyIngestEdit()`.
206
- store.notifyIngestEdit();
206
+ store.shell.notifyIngestEdit();
207
207
  }
208
208
 
209
209
  /**
@@ -677,7 +677,7 @@ async function autoLaunchIngestInner(store: EditorShellStore): Promise<void> {
677
677
  // never let an old bootstrap override it.
678
678
  if (deferredIngestPlayActive()) return;
679
679
  const { landIngestBootInEdit } = await import('./ingest-boot-viewport');
680
- landIngestBootInEdit(store);
680
+ landIngestBootInEdit();
681
681
  return;
682
682
  }
683
683
  await launchIngestRoutes(store);
@@ -19,15 +19,15 @@
19
19
  */
20
20
 
21
21
  import { measureAdapterReach } from '../host/adapter-reach';
22
- import { setActiveAuthoring } from '@volter/editor-core/authoring/active-adapter';
23
- import { setActiveSystems } from '@volter/editor-core/authoring/active-systems';
22
+ import { setActiveAuthoring } from '@volter/editor-sdk/kit/authoring/active-adapter';
23
+ import { setActiveSystems } from '@volter/editor-sdk/kit/authoring/active-systems';
24
24
  import { withContractHierarchy } from '../host/authoring/contract-hierarchy-authoring';
25
- import { clearMountFailureReports } from '@volter/editor-core/authoring/mount-failure-report';
26
- import { editorConsole } from '@volter/editor-core/editor-console';
27
- import type { EditorShellStore } from '@volter/editor-core/editor-shell-store';
25
+ import { clearMountFailureReports } from '@volter/editor-sdk/kit/mount-failure-report';
26
+ import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
27
+ import type { EditorShellStore } from '@volter/editor-threejs/kit/editor-shell-store';
28
28
  import { gameLoopGate, setGameInputGate } from '../host/gated-globals';
29
- import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-core/live-document';
30
- import { pickGameCamera } from '@volter/editor-core/scene-framing';
29
+ import { acquireLiveDocument, liveDocumentContainer } from '@volter/editor-sdk/kit/live-document';
30
+ import { pickGameCamera } from '@volter/editor-threejs/kit/scene-framing';
31
31
  import type { ResolvedAdapterRoot } from '@volter/editor-project/manifest/load';
32
32
  import type { CaptureMechanism } from '@volter/threejs-runtime/adapter/ingest/scene-capture';
33
33
  import { type IngestSession, serializeEntry, setActiveIngest } from './active-ingest';
@@ -164,8 +164,8 @@ function activateCapturedThreeIngest(args: {
164
164
  // level-streaming game captures on its first drawn frame and then parses its
165
165
  // world in for several seconds afterwards.
166
166
  store.focusOnScene(() => pickGameCamera(mount.capture.captured?.camera, liveScene));
167
- landIngestBootInEdit(store);
168
- store.notifyIngestEdit(); // ensure panels re-render against the override
167
+ landIngestBootInEdit();
168
+ store.shell.notifyIngestEdit(); // ensure panels re-render against the override
169
169
  clearMountFailureReports(); // D-W3: mount succeeded
170
170
 
171
171
  // What this editor CANNOT do with this game, said out loud once, right where
@@ -241,7 +241,7 @@ async function mountThreeIngestRootInner(
241
241
  // own persistence provider, which is what EditorShellStore's autosave/saveNow
242
242
  // now consult (design). Still switch into the guarded "playing" state so the
243
243
  // viewport swaps onto the live scene.
244
- store.setPlayState('playing');
244
+ store.shell.setPlayState('playing');
245
245
  editorConsole.log(`Ingesting unmodified game: ${game.name}`, 'ingest');
246
246
 
247
247
  // Drive the SAME input gate play-mode uses (play-mode.ts's
@@ -252,7 +252,7 @@ async function mountThreeIngestRootInner(
252
252
  // tab is the active viewport surface, exactly like a first-party play
253
253
  // session.
254
254
  const ingestInputActive = () =>
255
- store.playState === 'playing' && store.activeViewportTab === 'play';
255
+ store.shell.playState === 'playing' && store.shell.activeViewportTab === 'play';
256
256
 
257
257
  try {
258
258
  const mountOpts: MountIngestOptions = { captureTimeoutMs: game.captureTimeoutMs };
@@ -285,7 +285,7 @@ async function mountThreeIngestRootInner(
285
285
  // holds when the gate CLOSES — leaving play, or switching to the Edit tab
286
286
  // mid-flight — must be released, or the editor is left with a captured,
287
287
  // invisible cursor over a game that is no longer receiving input.
288
- session.inputGateUnsubscribe = store.subscribe(() => {
288
+ session.inputGateUnsubscribe = store.shell.subscribe(() => {
289
289
  if (!ingestInputActive()) releaseGamePointerLock();
290
290
  });
291
291
  // The realm gate only just became reachable, so push the play state we
@@ -4,7 +4,7 @@
4
4
  * is a per-PROJECT property, not a per-realm one.
5
5
  */
6
6
 
7
- import type { IngestGame2D } from '@volter/game-runtime/pixi/ingest';
7
+ import type { IngestGame2D } from '../runtime/pixi/ingest';
8
8
  import type { ResolvedAdapterRoot } from '@volter/editor-project/manifest/load';
9
9
  import { composeIngestLoad } from './entry-load';
10
10
  import { ingestModuleLoaders } from './resolve-three';
@@ -27,7 +27,7 @@
27
27
  * `document.body` (`setGameSurface`), absolutely positioned and full-size,
28
28
  * so the transplanted body lands in a real box.
29
29
  * - STYLE it. The root's `styles` manifest field serves the bundle's own
30
- * stylesheet rewritten into `@scope` (`server/scoped-game-css.ts`), which is
30
+ * stylesheet rewritten into `@scope` (`@volter/editor-sdk/session/scoped-game-css`), which is
31
31
  * what turns `#root,body,html{width:100%;height:100%}` into a sized root
32
32
  * without the editor seeing one of those rules. A `<link rel=stylesheet>` in
33
33
  * the document is NOT auto-loaded here: an unscoped page sheet restyles the
@@ -19,7 +19,7 @@ import {
19
19
  type IngestEntry,
20
20
  ingestEntriesOnSurface,
21
21
  } from '../host/ingest/registry';
22
- import type { IngestGame2D } from '@volter/game-runtime/pixi/ingest';
22
+ import type { IngestGame2D } from '../runtime/pixi/ingest';
23
23
  import { composeIngestLoad } from './entry-load';
24
24
 
25
25
  type BaseFields2D = Pick<IngestGame2D, 'id' | 'name' | 'description' | 'captureTimeoutMs'>;