@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
@@ -0,0 +1,16 @@
1
+ // serving/index.ts
2
+ import { fileURLToPath } from "node:url";
3
+ var GAME_MODULE_ACCESS = "@editor/game-module-access";
4
+ var ALIASED_GAME_MODULE_ACCESS = /\/editor-core\/src\/game-module-access$/;
5
+ var servingPlugins = (_services) => [
6
+ {
7
+ name: "volter-editor-game:game-module-access",
8
+ enforce: "pre",
9
+ resolveId(id) {
10
+ return id === GAME_MODULE_ACCESS || ALIASED_GAME_MODULE_ACCESS.test(id) ? fileURLToPath(new URL("../src/host/game-module-access.ts", import.meta.url)) : null;
11
+ }
12
+ }
13
+ ];
14
+ export {
15
+ servingPlugins
16
+ };
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@volter/editor-game",
3
3
  "author": "Volter AI, Inc.",
4
4
  "license": "AGPL-3.0-only",
5
- "version": "0.5.65",
5
+ "version": "0.5.67",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
@@ -15,14 +15,20 @@
15
15
  },
16
16
  "files": [
17
17
  "src",
18
+ "serving",
18
19
  "contributions",
20
+ "dist-node",
19
21
  "LICENSE",
20
22
  "NOTICE"
21
23
  ],
22
24
  "exports": {
23
25
  "./contributions/*": "./contributions/*",
24
26
  "./*": "./src/*",
25
- "./package.json": "./package.json"
27
+ "./package.json": "./package.json",
28
+ "./host/canvas-preview-frames": "./src/host/canvas-preview-frames.ts",
29
+ "./host/stories/pixi-story-model": "./src/host/stories/pixi-story-model.ts",
30
+ "./host/stories/story-pixi-preview": "./src/host/stories/story-pixi-preview.ts",
31
+ "./host/stories/story-media-captures": "./src/host/stories/story-media-captures.ts"
26
32
  },
27
33
  "vgai": {
28
34
  "contributions": [
@@ -31,6 +37,7 @@
31
37
  "./contributions/asset-budget.document.tsx",
32
38
  "./contributions/asset-budget.menu.ts",
33
39
  "./contributions/audio-unlock.service.ts",
40
+ "./contributions/network-observer.service.ts",
34
41
  "./contributions/audio.utility.tsx",
35
42
  "./contributions/autoplay.service.ts",
36
43
  "./contributions/bridge.command.ts",
@@ -51,6 +58,8 @@
51
58
  "./contributions/gameplay.command.ts",
52
59
  "./contributions/generation.service.ts",
53
60
  "./contributions/generations.status.tsx",
61
+ "./contributions/godot.style.ts",
62
+ "./contributions/godot.view.ts",
54
63
  "./contributions/ingest.service.ts",
55
64
  "./contributions/instances.command.ts",
56
65
  "./contributions/navmesh.menu.ts",
@@ -66,13 +75,14 @@
66
75
  "./contributions/state-watch.utility.tsx",
67
76
  "./contributions/team-playtest.service.ts",
68
77
  "./contributions/transport.header.tsx",
69
- "./contributions/xstate-behavior.action.ts",
70
- "./contributions/xstate-behavior.document.tsx",
71
- "./contributions/xstate-behavior.inspector.tsx",
72
- "./contributions/xstate-behavior.menu.ts",
78
+ "./contributions/unity.style.ts",
79
+ "./contributions/unity.view.ts",
80
+ "./contributions/unreal.style.ts",
81
+ "./contributions/unreal.view.ts",
82
+ "./contributions/canvas/component-board.service.ts",
83
+ "./contributions/canvas/design-time-mount.service.ts",
73
84
  "./contributions/react/component-board.service.ts",
74
85
  "./contributions/react/design-time-mount.service.ts",
75
- "./contributions/react/pasteboard.action.ts",
76
86
  "./contributions/react/react-inspector.service.ts",
77
87
  "./contributions/react/story-documents.service.ts",
78
88
  "./contributions/three/camera-runtime.inspector.tsx",
@@ -83,16 +93,19 @@
83
93
  "./contributions/three/model-asset-sections.service.ts",
84
94
  "./contributions/three/reflection-probe-capture.inspector.tsx",
85
95
  "./contributions/three/story-documents.service.ts",
86
- "./contributions/three/three-authoring.service.ts"
87
- ]
96
+ "./contributions/three/three-authoring.service.ts",
97
+ "./contributions/three-story-capture.service.ts",
98
+ "./contributions/canvas-story-capture.service.ts"
99
+ ],
100
+ "serving": "./dist-node/serving.mjs"
88
101
  },
89
102
  "dependencies": {
90
- "@volter/editor-core": "0.5.65",
91
- "@volter/editor-sdk": "0.5.65",
92
- "@volter/editor-project": "0.5.65",
93
- "@volter/editor-threejs": "0.5.65",
94
- "@volter/threejs-runtime": "0.5.65",
95
- "@volter/game-runtime": "0.5.65",
103
+ "@volter/editor-sdk": "0.5.67",
104
+ "@volter/editor-project": "0.5.67",
105
+ "@volter/editor-threejs": "0.5.67",
106
+ "@volter/threejs-runtime": "0.5.67",
107
+ "@volter/game-runtime": "0.5.67",
108
+ "@colyseus/msgpackr": "^1.11.3",
96
109
  "@colyseus/schema": "^4.0.14",
97
110
  "@colyseus/sdk": "^0.17.34",
98
111
  "@fortawesome/free-solid-svg-icons": "^7.2.0",
@@ -106,6 +119,7 @@
106
119
  "draco3d": "^1.5.7",
107
120
  "esbuild-wasm": "0.25.12",
108
121
  "fastnoise-lite": "^1.1.1",
122
+ "loglayer": "^9.1.0",
109
123
  "mediabunny": "1.56.2",
110
124
  "meshoptimizer": "^1.2.0",
111
125
  "three": "^0.180.0",
@@ -122,7 +136,8 @@
122
136
  "recast-navigation": "^0.43.0",
123
137
  "xstate": "^5.32.4",
124
138
  "zod": "^4.3.6",
125
- "@fortawesome/fontawesome-svg-core": "^7.2.0"
139
+ "@fortawesome/fontawesome-svg-core": "^7.2.0",
140
+ "@volter/editor-react": "0.5.67"
126
141
  },
127
142
  "peerDependencies": {
128
143
  "@sparkjsdev/spark": "^2.1.0",
@@ -134,6 +149,8 @@
134
149
  "@playwright/test": "^1.58.2"
135
150
  },
136
151
  "scripts": {
152
+ "build": "node scripts/build-serving.mjs",
153
+ "prepack": "npm run build",
137
154
  "typecheck": "tsc -p tsconfig.json"
138
155
  },
139
156
  "peerDependenciesMeta": {
@@ -0,0 +1,27 @@
1
+ /**
2
+ * `@volter/editor-game`'s server half (`package.json#vgai.serving`): the one deep specifier a
3
+ * game's own contributions name, `@editor/game-module-access` (the template's
4
+ * `src/contributions/use-game-modules.ts`), resolved to this package's module. The page
5
+ * bundle maps the same specifier for its own copy (`src/host/served-bundle-runtime-modules.ts`);
6
+ * a contribution the session's Vite serves needs the file.
7
+ */
8
+
9
+ import { fileURLToPath } from 'node:url';
10
+ import type { ProjectServingServices } from '@volter/editor-sdk/session/project-serving';
11
+
12
+ const GAME_MODULE_ACCESS = '@editor/game-module-access';
13
+ /** The kit's `@editor/*` alias runs before any plugin and rewrites the specifier to the kit's
14
+ * own `src/`, where this module no longer lives; that form is this package's too. */
15
+ const ALIASED_GAME_MODULE_ACCESS = /\/editor-core\/src\/game-module-access$/;
16
+
17
+ export const servingPlugins = (_services: ProjectServingServices): readonly unknown[] => [
18
+ {
19
+ name: 'volter-editor-game:game-module-access',
20
+ enforce: 'pre',
21
+ resolveId(id: string): string | null {
22
+ return id === GAME_MODULE_ACCESS || ALIASED_GAME_MODULE_ACCESS.test(id)
23
+ ? fileURLToPath(new URL('../src/host/game-module-access.ts', import.meta.url))
24
+ : null;
25
+ },
26
+ },
27
+ ];
@@ -12,7 +12,7 @@
12
12
  * rendered with an explicit `≥`, inspection failures with their reason).
13
13
  */
14
14
 
15
- import { getStorageBackend } from '@volter/editor-core/storage/index';
15
+ import { getStorageBackend } from '@volter/editor-sdk/kit/storage/index';
16
16
  import { editorHost } from '@volter/editor-sdk/host';
17
17
  import {
18
18
  accent,
@@ -21,8 +21,8 @@
21
21
  * raw attribute/index bytes for geometry.
22
22
  */
23
23
 
24
- import { sha256Hex } from '@volter/editor-core/bytes-codec';
25
- import type { StorageBackend } from '@volter/editor-core/storage/types';
24
+ import { sha256Hex } from '@volter/editor-sdk/kit/bytes-codec';
25
+ import { isPublicRootedBackend, type StorageBackend } from '@volter/editor-sdk/kit/storage-types';
26
26
  import type { Document } from '@gltf-transform/core';
27
27
  import { inspect } from '@gltf-transform/functions';
28
28
  import { getGltfIO } from './gltf-io';
@@ -288,7 +288,7 @@ const MANIFEST_NAME = 'vgai.project.json';
288
288
  * The manifest is the ONLY JSON document that owns asset references. An
289
289
  * `.inputmap.json` was scanned as one too, and could not be. `collectStringPaths`
290
290
  * below yields string VALUES only (action names are record KEYS — never
291
- * candidates), and every string value `InputMapFileSchema` admits is a binding
291
+ * candidates), and every string value an input map carries is a binding
292
292
  * `type` literal, a `KeyboardEvent.code`, a `direction`/`valueType` enum, or an
293
293
  * injected/touch `sourceId`; button/axis indexes are numbers. None of them is a
294
294
  * path, so the only value that could ever have resolved to an asset was a
@@ -482,7 +482,7 @@ export async function collectProjectBudgetSource(
482
482
  // `/vgai.project.json` (`manifest-project.ts`) and the `.vgai/`-scoped
483
483
  // `/__editor/vgai-file` route (`project-provenance.ts`). Anything
484
484
  // unavailable stays honestly absent — no fabricated owners or stamps.
485
- if (backend.id === 'http') {
485
+ if (isPublicRootedBackend(backend)) {
486
486
  const ownerFiles: AssetBudgetFile[] = [];
487
487
  const virtualTexts = new Map<string, string>();
488
488
  try {
@@ -20,11 +20,11 @@
20
20
  * happened, so the failure is returned for the UI to surface.
21
21
  */
22
22
 
23
- import { sha256Hex } from '@volter/editor-core/bytes-codec';
24
- import { assertEditorServerAnswered } from '@volter/editor-core/editor-server-response';
25
- import { sourceMutationAttribution } from '@volter/editor-core/editor-session-attribution';
26
- import { handleProjectMutationFailure } from '@volter/editor-core/source-conflict';
27
- import type { StorageBackend } from '@volter/editor-core/storage/types';
23
+ import { sha256Hex } from '@volter/editor-sdk/kit/bytes-codec';
24
+ import { assertEditorServerAnswered } from '@volter/editor-sdk/kit/editor-server-response';
25
+ import { sourceMutationAttribution } from '@volter/editor-sdk/kit/editor-session-attribution';
26
+ import { handleProjectMutationFailure } from '@volter/editor-sdk/kit/source-conflict';
27
+ import { isPublicRootedBackend, type StorageBackend } from '@volter/editor-sdk/kit/storage-types';
28
28
  import { invalidateCachedAsset } from '@volter/threejs-runtime/asset-loaders';
29
29
 
30
30
  const PROVENANCE_PATH = '.vgai/provenance.json';
@@ -82,7 +82,7 @@ function ledgerAssetPath(storagePath: string): string {
82
82
  * backend reaches the project root directly.
83
83
  */
84
84
  async function readLedgerText(backend: StorageBackend): Promise<string | null> {
85
- if (backend.id === 'http') {
85
+ if (isPublicRootedBackend(backend)) {
86
86
  // NOT read through `editor-server-response.ts`: the GET half of this route
87
87
  // answers `text/plain` (routes/project-source.ts) because it serves raw
88
88
  // file bytes, and that reader's whole rule is "the editor server answers
@@ -99,7 +99,7 @@ async function readLedgerText(backend: StorageBackend): Promise<string | null> {
99
99
  }
100
100
 
101
101
  async function writeLedgerText(backend: StorageBackend, content: string): Promise<void> {
102
- if (backend.id === 'http') {
102
+ if (isPublicRootedBackend(backend)) {
103
103
  const write = async () => {
104
104
  const res = await fetch('/__editor/vgai-file', {
105
105
  method: 'POST',
@@ -23,7 +23,7 @@
23
23
 
24
24
  import { editorHost } from '@volter/editor-sdk/host';
25
25
  import { Button, fontSizeVar, spaceVar, themeVars } from '@volter/editor-sdk/widgets';
26
- import { meterPercent } from '@volter/game-runtime/adapter/audio-meter';
26
+ import { meterPercent } from '../runtime/adapter/audio-meter';
27
27
  import type { AudioAdapter, AudioDebugEvent, AudioMeterFrame } from '@volter/editor-project/adapter';
28
28
  import { useEffect, useReducer, useRef, useState } from 'react';
29
29
  import {
@@ -13,15 +13,15 @@ import {
13
13
  getActiveSystems,
14
14
  InstanceResolutionError,
15
15
  systemsForInstance,
16
- } from '@volter/editor-core/authoring/active-systems';
17
- import { collectPlayRunPageErrors } from '@volter/editor-core/command-listener';
16
+ } from '@volter/editor-sdk/kit/authoring/active-systems';
17
+ import { collectPlayRunPageErrors } from '@volter/editor-sdk/kit/command-listener';
18
18
  import { gameContractEpoch } from '../host/coverage/game-contract-seam-evidence';
19
- import { recordLiveSeamEvidence } from '@volter/editor-core/coverage/live-seam-evidence';
20
- import { systemAdapterEpoch } from '@volter/editor-core/coverage/system-seam-evidence';
19
+ import { recordLiveSeamEvidence } from '@volter/editor-sdk/kit/live-seam-evidence';
20
+ import { systemAdapterEpoch } from '@volter/editor-sdk/kit/system-seam-evidence';
21
21
  import {
22
22
  HOLD_STARVED_NO_DRIVER_REASON,
23
23
  waitForHoldBudget,
24
- } from '@volter/game-runtime/runtime/debug-bridge';
24
+ } from '../runtime/debug-bridge';
25
25
  import type { SystemAdapters } from '@volter/editor-project/adapter';
26
26
  import { activeIngestContract } from '../ingest/ingest-play-control';
27
27
  import { getPlayRuntimeAccess } from '../play/play-mode';
@@ -39,7 +39,7 @@ import { getPlayRuntimeAccess } from '../play/play-mode';
39
39
  * game, so it never creates a play session at all, and what it publishes
40
40
  * through `setActiveSystems` is the debug adapter projected from its own
41
41
  * declared contract (`ingest-root-adapter.ts` →
42
- * `@volter/game-runtime/adapter/ingest/contract-debug-adapter`). The question asked here is
42
+ * `@volter/editor-game/runtime/adapter/ingest/contract-debug-adapter`). The question asked here is
43
43
  * only ever "has a live mount published a plane", never who mounted it.
44
44
  * `notPlayingResult()` stays the answer for the genuinely-no-world case. */
45
45
  export const hasLiveDebugPlane = (): boolean => getActiveSystems().debug != null;
@@ -48,7 +48,7 @@ export const hasLiveDebugPlane = (): boolean => getActiveSystems().debug != null
48
48
  * `Error` carrying a machine-readable `code` (and optional `data`), the same
49
49
  * shape `DebugError`/`InputActionError` already throw. Used by
50
50
  * `dispatchBridgeMethod` below for its OWN precondition failures (no debug
51
- * adapter installed, no InputManager wired) so they survive
51
+ * adapter installed, no input door wired) so they survive
52
52
  * `structuredErrorResult` exactly like an engine-thrown error would. */
53
53
  export function bridgeError(code: string, message: string, data?: Record<string, unknown>): Error {
54
54
  const err = new Error(message) as Error & { code: string; data?: unknown };
@@ -109,7 +109,7 @@ function recordContractSystemUse(member: string, value: unknown, name?: string):
109
109
 
110
110
  /**
111
111
  * #140 — the generic session-wire dispatch table: the SAME method-name
112
- * surface `window.__vgai` exposes (`@volter/game-runtime/runtime/debug-bridge`'s
112
+ * surface `window.__vgai` exposes (`@volter/editor-game/runtime/debug-bridge`'s
113
113
  * `VgaiDebugHandle` — `state`/`stateAll`/`providers`/`commands`/`events`/
114
114
  * `snapshot`/`invoke`/`runTicks`/`input.*`), built from the SAME
115
115
  * registry-backed accessors the sibling
@@ -337,8 +337,8 @@ export async function dispatchBridgeMethod(
337
337
  if (!inputTarget) {
338
338
  throw bridgeError(
339
339
  'DEBUG_INPUT_UNAVAILABLE',
340
- `session wire: ${method}() has no virtual-input target wired — no default three ` +
341
- "world has mounted yet, or this project's mount path never wired one",
340
+ `session wire: ${method}() has no virtual-input target wired — no root ` +
341
+ "entry exports `debug.input` (the game's own input door), or none has mounted yet",
342
342
  );
343
343
  }
344
344
  if (method === 'input.setVirtualAction') {
@@ -382,8 +382,8 @@ export async function dispatchBridgeMethod(
382
382
  if (!inputTarget) {
383
383
  throw bridgeError(
384
384
  'DEBUG_INPUT_UNAVAILABLE',
385
- 'session wire: input.scheduleActionAtTick() has no virtual-input target wired — no ' +
386
- "default three world has mounted yet, or this project's mount path never wired one",
385
+ 'session wire: input.scheduleActionAtTick() has no virtual-input target wired — no root ' +
386
+ "entry exports `debug.input` (the game's own input door), or none has mounted yet",
387
387
  );
388
388
  }
389
389
  return inputTarget.scheduleActionAtTick(tick, action, value);
@@ -405,8 +405,8 @@ export async function dispatchBridgeMethod(
405
405
  if (!inputTarget) {
406
406
  throw bridgeError(
407
407
  'DEBUG_INPUT_UNAVAILABLE',
408
- `session wire: ${method}() has no virtual-input target wired — no default three ` +
409
- "world has mounted yet, or this project's mount path never wired one",
408
+ `session wire: ${method}() has no virtual-input target wired — no root ` +
409
+ "entry exports `debug.input` (the game's own input door), or none has mounted yet",
410
410
  );
411
411
  }
412
412
  if (method === 'input.injectPointerDelta') {
@@ -430,8 +430,8 @@ export async function dispatchBridgeMethod(
430
430
  if (!inputTarget) {
431
431
  throw bridgeError(
432
432
  'DEBUG_INPUT_UNAVAILABLE',
433
- 'session wire: holdFor() has no virtual-input target wired — no default three ' +
434
- "world has mounted yet, or this project's mount path never wired one",
433
+ 'session wire: holdFor() has no virtual-input target wired — no root ' +
434
+ "entry exports `debug.input` (the game's own input door), or none has mounted yet",
435
435
  );
436
436
  }
437
437
  const action = callArgs[0] as string;
@@ -14,7 +14,7 @@ import { getPlayRuntimeAccess } from '../play/play-mode';
14
14
  export async function captureLiveCanvasFrame(
15
15
  canvas: HTMLCanvasElement,
16
16
  ): Promise<CanvasImageSource | null> {
17
- const { liveCanvasFrame } = await import('@volter/editor-core/live-canvas-frame');
17
+ const { liveCanvasFrame } = await import('@volter/editor-sdk/kit/live-canvas-frame');
18
18
  return liveCanvasFrame(canvas);
19
19
  }
20
20
 
@@ -6,15 +6,15 @@
6
6
  * `@editor/*` alias until those modules move too. Nothing here is host API.
7
7
  */
8
8
 
9
- import { commandLine } from '@volter/editor-core/product-command';
9
+ import { commandLine } from '@volter/editor-sdk/kit/product-command';
10
10
  import {
11
11
  type CaptureFlatness,
12
12
  CaptureLayerError,
13
13
  capturePlayComposite,
14
14
  sampleFlatness,
15
- } from '@volter/editor-core/composite-screenshot';
16
- import { editorConsole } from '@volter/editor-core/editor-console';
17
- import { presentationSurface } from '@volter/editor-core/presentation-surface';
15
+ } from '@volter/editor-sdk/kit/composite-screenshot';
16
+ import { editorConsole } from '@volter/editor-sdk/kit/editor-console';
17
+ import { presentationSurface } from '@volter/editor-sdk/kit/presentation-surface';
18
18
  import type { EditorCommandMessage, EditorCommandResult } from '@volter/editor-sdk/commands';
19
19
  import { notPlayingResult, structuredErrorResult } from '../command-results';
20
20
  import { isIngestActive } from '../ingest/active-ingest';
@@ -51,7 +51,7 @@ import { captureLiveCanvasFrame } from './live-frames';
51
51
  *
52
52
  * BOTH legs read a canvas, and a canvas is only readable after its frame when
53
53
  * its WebGL context was created with `preserveDrawingBuffer: true`. Every
54
- * canvas the vgai RUNTIME mounts sets it (`@volter/game-runtime/runtime/create-runtime`,
54
+ * canvas the vgai RUNTIME mounts sets it (`@volter/editor-game/runtime/create-runtime`,
55
55
  * D5 §1/§4); a canvas an INGESTED game created is the game's own and usually
56
56
  * does not, which read as a silently BLACK screenshot over a perfectly
57
57
  * healthy running game. {@link liveCanvasFrame} is the answer for that
@@ -279,7 +279,7 @@ export async function handleBridgeScreenshot(
279
279
  // Same seam as the composite leg, for the same reason: a game's own canvas
280
280
  // is unreadable this late, so ask for a same-frame copy first and fall back
281
281
  // to reading the canvas itself.
282
- const frameModule = await import('@volter/editor-core/live-canvas-frame');
282
+ const frameModule = await import('@volter/editor-sdk/kit/live-canvas-frame');
283
283
  const readable =
284
284
  frameModule.readablePngSource(await frameModule.liveCanvasFrame(canvas)) ?? canvas;
285
285
  const dataUrl = readable.toDataURL('image/png');
@@ -8,9 +8,9 @@
8
8
  * build takes real seconds and a modal would block the viewport.
9
9
  */
10
10
 
11
- import { workspaceHistoryService } from '@volter/editor-core/components/workspace-history';
12
- import { getDownloadUrl, readProjectTextFile, saveFile } from '@volter/editor-core/editor-api';
13
- import { getProjectFileHistory } from '@volter/editor-core/history/project-file-history';
11
+ import { workspaceHistoryService } from '@volter/editor-sdk/kit/components/workspace-history';
12
+ import { getDownloadUrl, readProjectTextFile, saveFile } from '@volter/editor-sdk/kit/editor-api';
13
+ import { getProjectFileHistory } from '@volter/editor-sdk/kit/history/project-file-history';
14
14
  import { faGlobe } from '@fortawesome/free-solid-svg-icons';
15
15
  import type { BuildReport } from '@volter/editor-sdk/session/build-report';
16
16
  import {