@vgai/engine 0.5.16 → 0.5.18

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 (109) hide show
  1. package/dist/adapter/adapter-module.d.ts +1 -16
  2. package/dist/adapter/adapter-module.d.ts.map +1 -1
  3. package/dist/adapter/adapter-module.js +1 -11
  4. package/dist/adapter/finders/scenes-from-entrypoint-selection.d.ts +0 -2
  5. package/dist/adapter/finders/scenes-from-entrypoint-selection.d.ts.map +1 -1
  6. package/dist/adapter/finders/scenes-from-entrypoint-selection.js +3 -6
  7. package/dist/adapter/renderer-config.d.ts +83 -0
  8. package/dist/adapter/renderer-config.d.ts.map +1 -0
  9. package/dist/adapter/renderer-config.js +121 -0
  10. package/dist/adapter/root-adapter.d.ts +6 -2
  11. package/dist/adapter/root-adapter.d.ts.map +1 -1
  12. package/dist/adapter/root-seam-contract.d.ts +5 -0
  13. package/dist/adapter/root-seam-contract.d.ts.map +1 -1
  14. package/dist/adapter/root-seam-contract.js +1 -0
  15. package/dist/adapter/setup-three-root-adapter.js +9 -9
  16. package/dist/canvas-react/pixi-react-adapter.d.ts.map +1 -1
  17. package/dist/canvas-react/pixi-react-adapter.js +92 -41
  18. package/dist/data/curve.d.ts +1 -1
  19. package/dist/data/curve.js +2 -2
  20. package/dist/dev/instruments.d.ts +4 -4
  21. package/dist/dev/instruments.js +4 -4
  22. package/dist/dev/register-render-vitals.d.ts +2 -2
  23. package/dist/dev/register-render-vitals.js +2 -2
  24. package/dist/dev/static-batch-advisor.d.ts +1 -1
  25. package/dist/dev/static-batch-advisor.js +2 -2
  26. package/dist/input/input-manager.d.ts +15 -0
  27. package/dist/input/input-manager.d.ts.map +1 -1
  28. package/dist/input/input-manager.js +22 -0
  29. package/dist/manifest/load.d.ts +0 -3
  30. package/dist/manifest/load.d.ts.map +1 -1
  31. package/dist/manifest/load.js +0 -4
  32. package/dist/manifest/schema.d.ts +0 -2
  33. package/dist/manifest/schema.d.ts.map +1 -1
  34. package/dist/manifest/schema.js +3 -24
  35. package/dist/pixi/authoring.d.ts +33 -0
  36. package/dist/pixi/authoring.d.ts.map +1 -1
  37. package/dist/pixi/authoring.js +86 -6
  38. package/dist/react/world-state.d.ts +12 -0
  39. package/dist/react/world-state.d.ts.map +1 -1
  40. package/dist/react/world-state.js +14 -0
  41. package/dist/render/soft-particle-depth.d.ts +3 -3
  42. package/dist/render/soft-particle-depth.d.ts.map +1 -1
  43. package/dist/render/soft-particle-depth.js +8 -13
  44. package/dist/runtime/create-runtime.d.ts +2 -16
  45. package/dist/runtime/create-runtime.d.ts.map +1 -1
  46. package/dist/runtime/create-runtime.js +36 -38
  47. package/dist/runtime/dev-build.d.ts +37 -0
  48. package/dist/runtime/dev-build.d.ts.map +1 -0
  49. package/dist/runtime/dev-build.js +49 -0
  50. package/dist/runtime/game.d.ts +9 -1
  51. package/dist/runtime/game.d.ts.map +1 -1
  52. package/dist/runtime/game.js +25 -1
  53. package/dist/runtime/mount-manifest.d.ts +0 -13
  54. package/dist/runtime/mount-manifest.d.ts.map +1 -1
  55. package/dist/runtime/mount-manifest.js +2 -21
  56. package/dist/world3d-react/engine-bridge.d.ts.map +1 -1
  57. package/dist/world3d-react/engine-bridge.js +28 -3
  58. package/dist/world3d-react/index.d.ts +2 -2
  59. package/dist/world3d-react/index.d.ts.map +1 -1
  60. package/dist/world3d-react/index.js +2 -2
  61. package/dist/world3d-react/r3f-adapter.d.ts +2 -2
  62. package/dist/world3d-react/r3f-adapter.d.ts.map +1 -1
  63. package/dist/world3d-react/r3f-adapter.js +90 -15
  64. package/dist/world3d-react/r3f-root-factory.d.ts.map +1 -1
  65. package/dist/world3d-react/r3f-root-factory.js +12 -2
  66. package/dist/world3d-react/rapier-physics-bridge.d.ts +4 -4
  67. package/dist/world3d-react/rapier-physics-bridge.js +3 -3
  68. package/dist/world3d-react/renderer-config.d.ts +7 -69
  69. package/dist/world3d-react/renderer-config.d.ts.map +1 -1
  70. package/dist/world3d-react/renderer-config.js +7 -108
  71. package/dist/world3d-react/world-context.d.ts +43 -0
  72. package/dist/world3d-react/world-context.d.ts.map +1 -1
  73. package/dist/world3d-react/world-context.js +89 -46
  74. package/dist-config/config.js.map +1 -1
  75. package/package.json +1 -1
  76. package/schemas/engine-capabilities.json +3 -3
  77. package/schemas/vgai-project.schema.json +2 -7
  78. package/src/adapter/adapter-module.ts +1 -25
  79. package/src/adapter/finders/scenes-from-entrypoint-selection.ts +3 -8
  80. package/src/adapter/renderer-config.ts +178 -0
  81. package/src/adapter/root-adapter.ts +6 -2
  82. package/src/adapter/root-seam-contract.ts +1 -0
  83. package/src/adapter/setup-three-root-adapter.ts +9 -9
  84. package/src/canvas-react/pixi-react-adapter.tsx +98 -53
  85. package/src/data/curve.ts +2 -2
  86. package/src/dev/instruments.ts +4 -4
  87. package/src/dev/register-render-vitals.ts +2 -2
  88. package/src/dev/static-batch-advisor.ts +2 -2
  89. package/src/input/input-manager.ts +23 -0
  90. package/src/manifest/load.ts +0 -7
  91. package/src/manifest/schema.ts +3 -26
  92. package/src/pixi/authoring.ts +98 -6
  93. package/src/react/world-state.tsx +15 -0
  94. package/src/render/soft-particle-depth.ts +8 -13
  95. package/src/runtime/create-runtime.ts +38 -52
  96. package/src/runtime/dev-build.ts +49 -0
  97. package/src/runtime/game.ts +31 -2
  98. package/src/runtime/mount-manifest.ts +2 -33
  99. package/src/world3d-react/engine-bridge.ts +28 -3
  100. package/src/world3d-react/index.ts +5 -5
  101. package/src/world3d-react/r3f-adapter.tsx +89 -20
  102. package/src/world3d-react/r3f-root-factory.tsx +12 -2
  103. package/src/world3d-react/rapier-physics-bridge.tsx +4 -4
  104. package/src/world3d-react/renderer-config.ts +7 -164
  105. package/src/world3d-react/world-context.ts +100 -51
  106. package/dist/runtime/dev-layers.d.ts +0 -34
  107. package/dist/runtime/dev-layers.d.ts.map +0 -1
  108. package/dist/runtime/dev-layers.js +0 -46
  109. package/src/runtime/dev-layers.ts +0 -46
@@ -119,17 +119,32 @@ export function createPixiReactAdapter(options) {
119
119
  useEffect(resolveEffectsReady, []);
120
120
  return null;
121
121
  }
122
- const game = runtime?.ctx.game;
123
122
  // The React seam every dom root already has — `useWorldState`,
124
123
  // `useDebugProvider`/`useDebugCommand`/`useDebugEmit`
125
124
  // (`../react/world-state`) — works identically inside a canvas root
126
125
  // because a canvas root IS React. `host.game` is genuinely absent in
127
126
  // bare/foreign hosts, so the provider is conditional and those hooks
128
127
  // stay the inert no-ops they already document themselves to be.
128
+ //
129
+ // READ FROM `host.game`, NEVER FROM `runtime` — the same rule, and the
130
+ // same reasoning, as the three lane's (`../world3d-react/r3f-adapter.tsx`,
131
+ // beside its own `const game = host.game`). The two providers answer
132
+ // different questions: `EngineBridge` rides `bridge` (the vgai runtime
133
+ // CONTEXT, which must not enter an ecosystem-native tree), `WorldProvider`
134
+ // rides the Game handle the host already holds. Keyed off `runtime`, a
135
+ // world mounted with `engineRuntime: false` gets no `WorldProvider` at
136
+ // all and every `useDebugProvider` in it no-ops IN SILENCE — no error, and
137
+ // `vgai eval 'await game.providers()'` lists only the built-ins. That is
138
+ // exactly what happened on the three lane. It has never fired here only
139
+ // because `pixi-react-root-factory.tsx` still leaves the runtime on;
140
+ // that flag is the tracked component-root migration's to flip, and this
141
+ // seam must not be waiting for it.
142
+ const game = host.game;
129
143
  const world = createElement(Fragment, null, content, createElement(Lifecycle));
144
+ const provided = game ? createElement(WorldProvider, { game }, world) : world;
130
145
  const element = bridge
131
- ? createElement(EngineBridge.Provider, { value: bridge }, game ? createElement(WorldProvider, { game }, world) : world)
132
- : world;
146
+ ? createElement(EngineBridge.Provider, { value: bridge }, provided)
147
+ : provided;
133
148
  const root = createRoot(canvas);
134
149
  // The host owns size, dpr, transparency and capture cost; the loop
135
150
  // contract owns `autoStart`/`sharedTicker`. Both are applied AFTER the
@@ -148,62 +163,92 @@ export function createPixiReactAdapter(options) {
148
163
  autoStart: false,
149
164
  sharedTicker: false,
150
165
  };
151
- // `root.render` is async: it awaits `Application.init()` (which is what
152
- // creates the renderer) and only then hands the tree to the reconciler.
153
- // A crash inside init rejects here, which is the loud failure we want.
154
- const app = await root.render(element, initOptions);
155
- runtime?.setApplication(app);
156
- // A reconcile-time crash (e.g. an un-extended component) surfaces as an
157
- // uncaught window error and the first commit never lands — without this
158
- // guard `mount()` would await `committed` forever. Convert that class of
159
- // failure into a loud mount error.
160
- await new Promise((resolve, reject) => {
161
- const fail = (why) => {
162
- cleanup();
163
- try {
164
- app.destroy(false, { children: true });
165
- }
166
- catch {
167
- /* the world never fully came up; teardown failure must not mask why */
168
- }
169
- runtime?.dispose();
170
- reject(new Error(`createPixiReactAdapter: root "${id}" — ${why}`));
171
- };
172
- const onError = (event) => fail(`the Pixi tree crashed before its first commit — ${event.message} ` +
166
+ // Install the reconcile-error listener BEFORE `root.render`: Pixi hands
167
+ // the Application back after `init()` but React can already have thrown
168
+ // during that same turn. Attaching after the await loses the real error
169
+ // and turns it into a misleading ten-second timeout.
170
+ let reportReconcileFailure;
171
+ const reconcileFailure = new Promise((resolve) => {
172
+ reportReconcileFailure = resolve;
173
+ });
174
+ const onError = (event) => {
175
+ reportReconcileFailure(`the Pixi tree crashed before its first commit — ${event.message} ` +
173
176
  '(mount() fails loudly instead of hanging)');
174
- const timer = setTimeout(() => fail(`no first commit within ${FIRST_COMMIT_TIMEOUT_MS / 1000}s ` +
175
- '(mount() fails loudly instead of hanging)'), FIRST_COMMIT_TIMEOUT_MS);
176
- const cleanup = () => {
177
- clearTimeout(timer);
178
- globalThis.removeEventListener?.('error', onError);
179
- };
180
- globalThis.addEventListener?.('error', onError);
181
- void Promise.all([committed, effectsReady]).then(() => {
182
- cleanup();
183
- resolve();
177
+ };
178
+ globalThis.addEventListener?.('error', onError);
179
+ let app;
180
+ let timer;
181
+ try {
182
+ // `root.render` is async: it awaits `Application.init()` (which is what
183
+ // creates the renderer) and only then hands the tree to the reconciler.
184
+ // A crash inside init rejects here, which is the loud failure we want.
185
+ const renderedApp = await root.render(element, initOptions);
186
+ app = renderedApp;
187
+ runtime?.setApplication(renderedApp);
188
+ // A reconcile-time crash (e.g. an un-extended component) surfaces as
189
+ // an uncaught window error and the first commit never lands. Race that
190
+ // exact signal against the commit and the last-resort ceiling.
191
+ const timeout = new Promise((resolve) => {
192
+ timer = setTimeout(() => resolve(`no first commit within ${FIRST_COMMIT_TIMEOUT_MS / 1000}s ` +
193
+ '(mount() fails loudly instead of hanging)'), FIRST_COMMIT_TIMEOUT_MS);
184
194
  });
185
- });
195
+ const failure = await Promise.race([
196
+ Promise.all([committed, effectsReady]).then(() => null),
197
+ reconcileFailure,
198
+ timeout,
199
+ ]);
200
+ if (failure !== null) {
201
+ throw new Error(`createPixiReactAdapter: root "${id}" — ${failure}`);
202
+ }
203
+ }
204
+ catch (error) {
205
+ try {
206
+ app?.destroy(false, { children: true });
207
+ }
208
+ catch {
209
+ /* the world never fully came up; teardown failure must not mask why */
210
+ }
211
+ runtime?.dispose();
212
+ throw error;
213
+ }
214
+ finally {
215
+ if (timer !== undefined)
216
+ clearTimeout(timer);
217
+ globalThis.removeEventListener?.('error', onError);
218
+ }
219
+ // `app` is assigned before the first-commit race. Reaching here proves
220
+ // both initialization and commit succeeded, so narrow once for the live
221
+ // mounted-root methods below.
222
+ if (app === undefined) {
223
+ runtime?.dispose();
224
+ throw new Error(`createPixiReactAdapter: root "${id}" initialized without an Application`);
225
+ }
226
+ const mountedApp = app;
186
227
  // Pin the ticker's clock to GAME time. `Ticker.lastTime` starts at -1, so
187
228
  // without this the first `update()` would report a 1ms phantom delta on
188
229
  // top of the real one. From here every `deltaMS` a `useTick` callback
189
230
  // sees is exactly the `dt` the host handed us — no wall clock anywhere,
190
231
  // which is what makes a paused world's resume frame ordinary rather than
191
232
  // one giant catch-up step.
192
- app.ticker.lastTime = 0;
233
+ mountedApp.ticker.lastTime = 0;
193
234
  let elapsedMs = 0;
194
235
  let disposed = false;
195
236
  const registry = host.game ? getDebugRegistry(host.game) : null;
196
237
  const systemAdapters = runtime?.systemAdapters ?? (registry ? { debug: registry.adapter } : {});
238
+ const disposeComplete = unmounted.then(() => {
239
+ mountedApp.destroy(false, { children: true });
240
+ });
197
241
  return {
198
242
  kind: 'canvas',
199
243
  // The reconciler's real root container — the same `PIXI.Container`
200
244
  // `RootInstance.pixiStage()` hands the editor.
201
- stage: app.stage,
245
+ stage: mountedApp.stage,
202
246
  drivesOwnLoop: false,
203
247
  // Adapter surface: the host's shared debug registry. A native component
204
248
  // tree registers nothing; its entry-module `debug` export is projected
205
249
  // after mount by the shared native adapter.
206
250
  systems: systemAdapters,
251
+ disposeComplete,
207
252
  update(dt) {
208
253
  if (disposed)
209
254
  return;
@@ -212,7 +257,7 @@ export function createPixiReactAdapter(options) {
212
257
  // the native path has none. The real Pixi ticker remains the one
213
258
  // scheduler `useTick` observes, and the host only gates/advances it.
214
259
  runtime?.systems.run(dt);
215
- app.ticker.update(elapsedMs);
260
+ mountedApp.ticker.update(elapsedMs);
216
261
  },
217
262
  resize(width, height) {
218
263
  if (disposed)
@@ -220,12 +265,19 @@ export function createPixiReactAdapter(options) {
220
265
  // `autoDensity: true` makes Pixi re-stamp `canvas.style.width`/
221
266
  // `.height` from this call, so the on-screen box follows the logical
222
267
  // size with no explicit CSS write from the host.
223
- app.renderer.resize(width, height);
268
+ mountedApp.renderer.resize(width, height);
224
269
  },
225
270
  dispose() {
226
271
  if (disposed)
227
272
  return;
228
273
  disposed = true;
274
+ // Pixi's EventSystem owns document.pointermove + window.pointerup
275
+ // (and its event ticker's global listener). React's deletion commit
276
+ // is asynchronous, so waiting to destroy the Application leaves
277
+ // those listeners live when the host audits this game realm. Detach
278
+ // the input target synchronously; the later Application.destroy()
279
+ // repeats this idempotently after every useTick cleanup has landed.
280
+ mountedApp.renderer.events.setTargetElement(null);
229
281
  // Rendering `null` children is the only unmount path `@pixi/react`
230
282
  // exposes publicly (its `unmountRoot` helper is internal), and React
231
283
  // commits that deletion on its own schedule — NOT synchronously. So
@@ -234,7 +286,6 @@ export function createPixiReactAdapter(options) {
234
286
  // a ticker destroyed before it lands throws inside React's commit.
235
287
  // `removeView` stays false — the canvas belongs to the HOST.
236
288
  void root.render(null, initOptions);
237
- void unmounted.then(() => app.destroy(false, { children: true }));
238
289
  runtime?.dispose();
239
290
  },
240
291
  };
@@ -93,7 +93,7 @@ export declare function curve(axes: CurveAxes): z.ZodType<CurveValue>;
93
93
  * Read a curve field's declared axes back off a LIVE Zod schema (as opposed to
94
94
  * the emitted JSON Schema, which the editor's Data panel reads instead).
95
95
  *
96
- * This is the dev-menu capability's detection door: it derives its rows by
96
+ * This is the dev-tools capability's detection door: it derives its rows by
97
97
  * walking the game's own `TuningSchema` object, so it needs the axes from the
98
98
  * schema in hand. Wrappers (`.optional()`, `.default(…)`, `.describe(…)` chains
99
99
  * that re-wrap) hide the metadata behind an inner type, so a bounded unwrap
@@ -34,7 +34,7 @@
34
34
  * update, the same way it reads any other tuning value.
35
35
  */
36
36
  import { z } from 'zod';
37
- /** How the marker rides out to the emitted JSON Schema — the editor's and the dev menu's detection key, the exact shape `dataRef` uses with `x-vgai-ref`. */
37
+ /** How the marker rides out to the emitted JSON Schema — the editor's detection key, the exact shape `dataRef` uses with `x-vgai-ref`. */
38
38
  const CURVE_META_KEY = 'x-vgai-curve';
39
39
  function axisLabel(axes, axis) {
40
40
  return axes[axis].label ?? axis;
@@ -122,7 +122,7 @@ export function curve(axes) {
122
122
  * Read a curve field's declared axes back off a LIVE Zod schema (as opposed to
123
123
  * the emitted JSON Schema, which the editor's Data panel reads instead).
124
124
  *
125
- * This is the dev-menu capability's detection door: it derives its rows by
125
+ * This is the dev-tools capability's detection door: it derives its rows by
126
126
  * walking the game's own `TuningSchema` object, so it needs the axes from the
127
127
  * schema in hand. Wrappers (`.optional()`, `.default(…)`, `.describe(…)` chains
128
128
  * that re-wrap) hide the metadata behind an inner type, so a bounded unwrap
@@ -25,11 +25,11 @@
25
25
  * game registry.
26
26
  *
27
27
  * ── THE DOOR ────────────────────────────────────────────────────────────────
28
- * This module is IMPLEMENTATION ONLY. It publishes nothing itself: the dev-menu
29
- * capability's own registry adopts this list (`installDevMenuInstruments`) and
28
+ * This module is IMPLEMENTATION ONLY. It publishes nothing itself: the dev-tools
29
+ * capability's own registry adopts this list (`installDevToolsInstruments`) and
30
30
  * publishes each instrument through the SAME door every declaration in that
31
31
  * capability uses — one provider per reading (`instrument.timescale`), one
32
- * command per action (`instrument.timescale.set`), plus the `dev-menu` index
32
+ * command per action (`instrument.timescale.set`), plus the `dev-tools` index
33
33
  * provider. That is deliberate and load-bearing: the registry IS the product,
34
34
  * so every reader of an instrument reaches the SAME registration.
35
35
  *
@@ -43,7 +43,7 @@
43
43
  * ── RESOURCE OWNERSHIP, STATED ONCE ─────────────────────────────────────────
44
44
  * {@link createDevInstruments} owns everything it allocates: the frame-time
45
45
  * ring buffer and its ONE `game.onRenderStep` subscription. SHARER: the
46
- * dev-menu capability's `DevMenuBridge`, which creates one set per mounted
46
+ * dev-tools capability's `DevToolsBridge`, which creates one set per mounted
47
47
  * game. TEARDOWN: the returned {@link DevInstrumentSet.dispose} — the ONE path
48
48
  * that ends it. Nothing else here holds a resource; the time-scale, pause and
49
49
  * collider instruments only drive state that `Game` already owns.
@@ -25,11 +25,11 @@
25
25
  * game registry.
26
26
  *
27
27
  * ── THE DOOR ────────────────────────────────────────────────────────────────
28
- * This module is IMPLEMENTATION ONLY. It publishes nothing itself: the dev-menu
29
- * capability's own registry adopts this list (`installDevMenuInstruments`) and
28
+ * This module is IMPLEMENTATION ONLY. It publishes nothing itself: the dev-tools
29
+ * capability's own registry adopts this list (`installDevToolsInstruments`) and
30
30
  * publishes each instrument through the SAME door every declaration in that
31
31
  * capability uses — one provider per reading (`instrument.timescale`), one
32
- * command per action (`instrument.timescale.set`), plus the `dev-menu` index
32
+ * command per action (`instrument.timescale.set`), plus the `dev-tools` index
33
33
  * provider. That is deliberate and load-bearing: the registry IS the product,
34
34
  * so every reader of an instrument reaches the SAME registration.
35
35
  *
@@ -43,7 +43,7 @@
43
43
  * ── RESOURCE OWNERSHIP, STATED ONCE ─────────────────────────────────────────
44
44
  * {@link createDevInstruments} owns everything it allocates: the frame-time
45
45
  * ring buffer and its ONE `game.onRenderStep` subscription. SHARER: the
46
- * dev-menu capability's `DevMenuBridge`, which creates one set per mounted
46
+ * dev-tools capability's `DevToolsBridge`, which creates one set per mounted
47
47
  * game. TEARDOWN: the returned {@link DevInstrumentSet.dispose} — the ONE path
48
48
  * that ends it. Nothing else here holds a resource; the time-scale, pause and
49
49
  * collider instruments only drive state that `Game` already owns.
@@ -36,8 +36,8 @@
36
36
  * the drawing buffer halves was never fill-bound.
37
37
  *
38
38
  * ── GATING ──────────────────────────────────────────────────────────────────
39
- * The caller gates. Both seeders call this only under `devLayersEnabled()`
40
- * (`runtime/dev-layers.ts` — the ONE owner of "is this a dev context"), so a
39
+ * The caller gates. Both seeders call this only under `devBuildEnabled()`
40
+ * (`runtime/dev-build.ts` — the ONE owner of "is this a dev context"), so a
41
41
  * ship build registers nothing and pays nothing. Each also requires a `Game`
42
42
  * shell (there is no profiler to fold without one) and a non-headless mount
43
43
  * (nothing brackets a submission, so the readings could only ever be empty).
@@ -36,8 +36,8 @@
36
36
  * the drawing buffer halves was never fill-bound.
37
37
  *
38
38
  * ── GATING ──────────────────────────────────────────────────────────────────
39
- * The caller gates. Both seeders call this only under `devLayersEnabled()`
40
- * (`runtime/dev-layers.ts` — the ONE owner of "is this a dev context"), so a
39
+ * The caller gates. Both seeders call this only under `devBuildEnabled()`
40
+ * (`runtime/dev-build.ts` — the ONE owner of "is this a dev context"), so a
41
41
  * ship build registers nothing and pays nothing. Each also requires a `Game`
42
42
  * shell (there is no profiler to fold without one) and a non-headless mount
43
43
  * (nothing brackets a submission, so the readings could only ever be empty).
@@ -6,7 +6,7 @@
6
6
  * require someone to ASK, and both require that someone to already know that
7
7
  * static batching exists, is possible here, and is spelled `<Frozen>`. An
8
8
  * agent building a game does not know any of that, so the measurement has to
9
- * do the routing itself — the same idiom as the dev-menu's unconfigured-section
9
+ * do the routing itself — the same idiom as dev-tools' unconfigured-section
10
10
  * warning: the reading names the exact edit.
11
11
  *
12
12
  * ── THE DECISION IS PURE, THE SCHEDULE IS NOT ───────────────────────────────
@@ -6,7 +6,7 @@
6
6
  * require someone to ASK, and both require that someone to already know that
7
7
  * static batching exists, is possible here, and is spelled `<Frozen>`. An
8
8
  * agent building a game does not know any of that, so the measurement has to
9
- * do the routing itself — the same idiom as the dev-menu's unconfigured-section
9
+ * do the routing itself — the same idiom as dev-tools' unconfigured-section
10
10
  * warning: the reading names the exact edit.
11
11
  *
12
12
  * ── THE DECISION IS PURE, THE SCHEDULE IS NOT ───────────────────────────────
@@ -106,7 +106,7 @@ export function decideStaticBatchAdvisory(input) {
106
106
  * Once per PAGE, not once per module evaluation — a hot reload re-runs this
107
107
  * module, and an advisory that reappears on every save is one that gets muted
108
108
  * along with everything else on the console. Same mechanism, and the same
109
- * reason, as the dev menu's unconfigured-section warning.
109
+ * reason, as dev-tools' unconfigured-section warning.
110
110
  */
111
111
  const WARNED_KEY = '__vgaiStaticBatchAdvised';
112
112
  function alreadyWarned() {
@@ -224,6 +224,21 @@ export declare class InputManager {
224
224
  * data reaches `isPressed`/`isJustPressed`/`isJustReleased`.
225
225
  */
226
226
  loadMap(url: string): Promise<void>;
227
+ /**
228
+ * `loadMap`'s OPTIONAL sibling: apply the map at `url` when the project
229
+ * ships one and report `false` — SILENTLY — when it does not exist.
230
+ *
231
+ * The host loads the conventional map path at mount for every three/canvas
232
+ * root, including the scaffolded shape that has declared no actions yet, so
233
+ * "no map on disk" is the ordinary state of a brand-new project and must not
234
+ * print an error on every boot. Everything else stays exactly as loud as
235
+ * `loadMap`: a map that EXISTS and is malformed (or any non-404 failure)
236
+ * still logs and throws.
237
+ */
238
+ loadMapIfPresent(url: string): Promise<boolean>;
239
+ /** Shared fetch/validate/apply for {@link loadMap} and
240
+ * {@link loadMapIfPresent}; `optional` decides only what a 404 means. */
241
+ private fetchMap;
227
242
  /**
228
243
  * F3 — `loadMap`'s synchronous, no-`fetch` sibling: apply an already-in-
229
244
  * memory (or freshly-deserialized) input-map DOCUMENT, validated through
@@ -1 +1 @@
1
- {"version":3,"file":"input-manager.d.ts","sourceRoot":"","sources":["../../src/input/input-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-manager.d.ts","sourceRoot":"","sources":["../../src/input/input-manager.ts"],"names":[],"mappings":"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"}
@@ -631,10 +631,31 @@ export class InputManager {
631
631
  * data reaches `isPressed`/`isJustPressed`/`isJustReleased`.
632
632
  */
633
633
  async loadMap(url) {
634
+ await this.fetchMap(url, false);
635
+ }
636
+ /**
637
+ * `loadMap`'s OPTIONAL sibling: apply the map at `url` when the project
638
+ * ships one and report `false` — SILENTLY — when it does not exist.
639
+ *
640
+ * The host loads the conventional map path at mount for every three/canvas
641
+ * root, including the scaffolded shape that has declared no actions yet, so
642
+ * "no map on disk" is the ordinary state of a brand-new project and must not
643
+ * print an error on every boot. Everything else stays exactly as loud as
644
+ * `loadMap`: a map that EXISTS and is malformed (or any non-404 failure)
645
+ * still logs and throws.
646
+ */
647
+ async loadMapIfPresent(url) {
648
+ return this.fetchMap(url, true);
649
+ }
650
+ /** Shared fetch/validate/apply for {@link loadMap} and
651
+ * {@link loadMapIfPresent}; `optional` decides only what a 404 means. */
652
+ async fetchMap(url, optional) {
634
653
  let data;
635
654
  try {
636
655
  const res = await fetch(resolveUrl(url));
637
656
  if (!res.ok) {
657
+ if (optional && res.status === 404)
658
+ return false;
638
659
  throw new Error(`HTTP ${res.status} ${res.statusText}`);
639
660
  }
640
661
  const json = await res.json();
@@ -649,6 +670,7 @@ export class InputManager {
649
670
  throw err instanceof AssetParseError ? err : new Error(message);
650
671
  }
651
672
  this.applyParsedMap(data);
673
+ return true;
652
674
  }
653
675
  /**
654
676
  * F3 — `loadMap`'s synchronous, no-`fetch` sibling: apply an already-in-
@@ -50,9 +50,6 @@ export interface ResolvedAdapterRoot {
50
50
  readonly entry: string | undefined;
51
51
  readonly zOrder: number;
52
52
  readonly pausable: boolean;
53
- /** `dev: true` — this root is a DEV LAYER, not shipped game content. See
54
- * `manifest/schema.ts`'s `dev` field for the four readers. */
55
- readonly dev: boolean;
56
53
  readonly loop: 'gated' | 'self-driven';
57
54
  }
58
55
  export interface ResolvedGameManifest {
@@ -1 +1 @@
1
- {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/manifest/load.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/manifest/load.ts"],"names":[],"mappings":"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"}
@@ -97,9 +97,6 @@ function checkEngineVersionPin(version) {
97
97
  * resolution; `entry` drives the entry cross-field rule and is
98
98
  * carried through; `zOrder` drives the final sort; `pausable`/`loop` are
99
99
  * carried through as-is (their consumers are the runtime/CLI, T3.2/T3.3);
100
- * `dev` is carried through for the four dev-layer readers (`mountManifestRoots`'s
101
- * ship gate, the host's topmost stacking pass, the play compositor's capture
102
- * exclusion, and the editor's chrome-not-content seam);
103
100
  * `description` (T3.3
104
101
  * slice 3) is carried through as-is — its consumer today is
105
102
  * `resolveIngestDescriptor` (packages/editor/src/adapter-resolver.ts), which
@@ -116,7 +113,6 @@ function resolveRoot(root) {
116
113
  entry: root.entry,
117
114
  zOrder: root.zOrder,
118
115
  pausable: root.pausable,
119
- dev: root.dev,
120
116
  loop: root.loop,
121
117
  };
122
118
  }
@@ -72,7 +72,6 @@ export declare const AdapterRootSchema: z.ZodObject<{
72
72
  styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
73
73
  zOrder: z.ZodDefault<z.ZodNumber>;
74
74
  pausable: z.ZodDefault<z.ZodBoolean>;
75
- dev: z.ZodDefault<z.ZodBoolean>;
76
75
  loop: z.ZodDefault<z.ZodEnum<{
77
76
  gated: "gated";
78
77
  "self-driven": "self-driven";
@@ -158,7 +157,6 @@ export declare const GameManifestSchema: z.ZodObject<{
158
157
  styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
159
158
  zOrder: z.ZodDefault<z.ZodNumber>;
160
159
  pausable: z.ZodDefault<z.ZodBoolean>;
161
- dev: z.ZodDefault<z.ZodBoolean>;
162
160
  loop: z.ZodDefault<z.ZodEnum<{
163
161
  gated: "gated";
164
162
  "self-driven": "self-driven";
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/manifest/schema.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAG,CAAU,CAAC;AAsFhD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAsJ3B,CAAC;AACJ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAM5D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmEnB,CAAC;AACZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAkB5D,eAAO,MAAM,eAAe;;;;;EAMzB,CAAC;AACJ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,qBAAqB;;;;EAEa,CAAC;AAChD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;kBAqC7B,CAAC;AACJ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAMhE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA8TyD,CAAC;AAEzF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/manifest/schema.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAG,CAAU,CAAC;AAsFhD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAsJ3B,CAAC;AACJ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAM5D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAsDnB,CAAC;AACZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAkB5D,eAAO,MAAM,eAAe;;;;;EAMzB,CAAC;AACJ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,qBAAqB;;;;EAEa,CAAC;AAChD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;kBAqC7B,CAAC;AACJ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAMhE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoTyD,CAAC;AAEzF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -266,17 +266,6 @@ export const AdapterRootSchema = z
266
266
  .boolean()
267
267
  .default(true)
268
268
  .describe('Whether play-mode pause/step applies to this root'),
269
- dev: z
270
- .boolean()
271
- .default(false)
272
- .describe("Marks this root as a DEV LAYER: the game's own dev GUI, not shipped game content. " +
273
- 'Four readers act on it. `mountManifestRoots` mounts it only when dev layers are ' +
274
- 'enabled (`devLayersEnabled`, runtime/dev-layers.ts), so a production build carries ' +
275
- 'no dev GUI; the host stacks every dev root ABOVE every non-dev root (a dev layer ' +
276
- 'sits topmost, and as a DOM layer it steals no input from the game while closed); ' +
277
- 'the play compositor EXCLUDES dev layers from a capture unless the capture asks for ' +
278
- 'them; and the editor mounts a dev root as edit-time CHROME rather than authorable ' +
279
- 'content (no hierarchy entry, no OID stamping, no JSX write-back, not selectable).'),
280
269
  loop: z
281
270
  .enum(['gated', 'self-driven'])
282
271
  .default('gated')
@@ -398,17 +387,9 @@ export const GameManifestSchema = z
398
387
  // root): a second root of the same medium parsed cleanly and was then
399
388
  // silently never mounted, which is the failure mode this rejects.
400
389
  //
401
- // DEV LAYERS ARE COUNTED SEPARATELY. A `dev: true` root is not content
402
- // competing for the medium — it is the game's dev GUI stacked above
403
- // everything (`create-runtime.ts`'s stacking pass), and the editor
404
- // mounts it as chrome, not as the one dom document. Counting it with
405
- // the content roots would make the ratified shape — a game with a HUD
406
- // and a dev panel, both `dom` — unrepresentable. The one-per-medium
407
- // rule still applies WITHIN the dev band, for the same
408
- // silently-never-mounted reason.
409
390
  const idsByMedium = new Map();
410
391
  for (const root of roots) {
411
- const medium = `${root.dev ? 'dev ' : ''}${rootMedium(root)}`;
392
+ const medium = rootMedium(root);
412
393
  const ids = idsByMedium.get(medium);
413
394
  if (ids)
414
395
  ids.push(root.id);
@@ -431,9 +412,7 @@ export const GameManifestSchema = z
431
412
  .describe("The Game's explicit, non-empty adapter-root composition. There is no implicit root. " +
432
413
  'Root ids are unique, and a project declares at most ONE world root per medium — ' +
433
414
  'one `three`, one `dom`, one canvas-surface root (first-party canvas, canvas ingest ' +
434
- 'and canvas module are the same medium). A `dev: true` root is counted in its own ' +
435
- 'band: a dev layer is chrome stacked above the game, not content competing for the ' +
436
- 'medium, so a game may declare a `dom` HUD and a `dom` dev layer — but not two of either.'),
415
+ 'and canvas module are the same medium).'),
437
416
  authoring: z
438
417
  .object({
439
418
  hierarchy: z
@@ -504,7 +483,7 @@ export const GameManifestSchema = z
504
483
  antialias: z
505
484
  .boolean()
506
485
  .describe('Whether every three root is built with a multisampled drawing buffer. This is the ' +
507
- 'ONE render property a world cannot declare for itself (world3d-react/' +
486
+ 'ONE render property a world cannot declare for itself (adapter/' +
508
487
  'renderer-config.ts): a WebGL context fixes its sample count at CREATION from this ' +
509
488
  'boolean, long before a world mounts, so it belongs to the PROJECT. The runtime ' +
510
489
  'reader is mount-manifest.ts, which threads it into createHostRenderer for each ' +
@@ -66,6 +66,36 @@ export declare class AuthoringAdapter2D {
66
66
  private overlay;
67
67
  private dirty;
68
68
  private readonly identity;
69
+ /**
70
+ * THE ROW-NAME MEMO — what makes a hierarchy read linear instead of a
71
+ * reflective flood walk per node per read.
72
+ *
73
+ * {@link displayLabel} is not a field read. For anything the game did not
74
+ * label itself it calls `viewOwnerLabel`, which climbs eight ancestors and
75
+ * reflects over each one's own fields, its bags, and two levels of whatever
76
+ * those hold — a deliberate search for the game object that owns this
77
+ * `.view`. Measured 2026-08-20 on a 1822-node `@pixi/react` canvas world,
78
+ * with the tab VISIBLE and the world rendering, one full projection walk
79
+ * cost ~800ms, essentially all of it here: once a world has rendered, the
80
+ * ancestors' own fields include Pixi's live render-group graph, so the
81
+ * search walks that too and finds nothing, every time, for every node.
82
+ *
83
+ * And it was asked four times per node per derivation — the projection
84
+ * walk, the conformance probe and the hierarchy facet each re-ask — which
85
+ * is how a status snapshot reached 115,433 `toNode` calls on one tree.
86
+ *
87
+ * ## What invalidates a remembered name
88
+ *
89
+ * Every input the derivation reads OFF THE OBJECT: its authored `.label`,
90
+ * its class, its texture, its parent, and how many children it has. Any of
91
+ * those changing re-derives — so a rename, a reparent, a retexture, and a
92
+ * sibling added or removed are all seen. What a remembered name does NOT
93
+ * re-notice is a game reassigning an ANCESTOR's field to point at this view
94
+ * after the fact, with the tree otherwise untouched; `viewOwnerLabel` is a
95
+ * naming heuristic, not a verdict, and the alternative is the 800ms walk
96
+ * above on every read of the tree.
97
+ */
98
+ private readonly names;
69
99
  constructor(root: Container, opts?: {
70
100
  overlay?: Overlay2D;
71
101
  identity?: CanvasIdentity;
@@ -91,6 +121,9 @@ export declare class AuthoringAdapter2D {
91
121
  roots(): EditorNode2D[];
92
122
  node(id: string): EditorNode2D | null;
93
123
  displayObject(id: string): Container | null;
124
+ /** This object's row name, derived once and remembered until one of the
125
+ * inputs it is derived from changes. See {@link names}. */
126
+ private nameOf;
94
127
  private toNode;
95
128
  getTransform(id: string): Transform2DValue | null;
96
129
  setTransform(id: string, t: Partial<Transform2DValue>): void;