@vgai/engine 0.5.14 → 0.5.16

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 (177) hide show
  1. package/dist/adapter/adapter-module.d.ts +228 -17
  2. package/dist/adapter/adapter-module.d.ts.map +1 -1
  3. package/dist/adapter/adapter-module.js +224 -42
  4. package/dist/adapter/authoring-seam-contract.d.ts +530 -0
  5. package/dist/adapter/authoring-seam-contract.d.ts.map +1 -0
  6. package/dist/adapter/authoring-seam-contract.js +162 -0
  7. package/dist/adapter/authoring.d.ts +237 -50
  8. package/dist/adapter/authoring.d.ts.map +1 -1
  9. package/dist/adapter/authoring.js +2 -1
  10. package/dist/adapter/entrypoint-selection-source.d.ts +35 -0
  11. package/dist/adapter/entrypoint-selection-source.d.ts.map +1 -0
  12. package/dist/adapter/entrypoint-selection-source.js +151 -0
  13. package/dist/adapter/finders/scenes-from-entrypoint-selection.d.ts +7 -1
  14. package/dist/adapter/finders/scenes-from-entrypoint-selection.d.ts.map +1 -1
  15. package/dist/adapter/finders/scenes-from-entrypoint-selection.js +142 -21
  16. package/dist/adapter/first-party-systems.d.ts +13 -3
  17. package/dist/adapter/first-party-systems.d.ts.map +1 -1
  18. package/dist/adapter/first-party-systems.js +10 -3
  19. package/dist/adapter/index.d.ts +7 -2
  20. package/dist/adapter/index.d.ts.map +1 -1
  21. package/dist/adapter/index.js +4 -0
  22. package/dist/adapter/ingest/contract-system-adapters.d.ts +1 -1
  23. package/dist/adapter/ingest/contract-system-adapters.d.ts.map +1 -1
  24. package/dist/adapter/ingest/contract-system-adapters.js +13 -25
  25. package/dist/adapter/ingest/game-contract-seams.d.ts +214 -0
  26. package/dist/adapter/ingest/game-contract-seams.d.ts.map +1 -0
  27. package/dist/adapter/ingest/game-contract-seams.js +62 -0
  28. package/dist/adapter/ingest/game-contract.d.ts +5 -3
  29. package/dist/adapter/ingest/game-contract.d.ts.map +1 -1
  30. package/dist/adapter/ingest/game-contract.js +4 -1
  31. package/dist/adapter/ingest/merge-debug-adapters.d.ts +52 -0
  32. package/dist/adapter/ingest/merge-debug-adapters.d.ts.map +1 -0
  33. package/dist/adapter/ingest/merge-debug-adapters.js +141 -0
  34. package/dist/adapter/ingest/observation-debug-adapter.d.ts +56 -0
  35. package/dist/adapter/ingest/observation-debug-adapter.d.ts.map +1 -0
  36. package/dist/adapter/ingest/observation-debug-adapter.js +131 -0
  37. package/dist/adapter/ingest/scene-capture.d.ts +38 -13
  38. package/dist/adapter/ingest/scene-capture.d.ts.map +1 -1
  39. package/dist/adapter/ingest/scene-capture.js +101 -24
  40. package/dist/adapter/ingest/visible-capture-window.d.ts +22 -5
  41. package/dist/adapter/ingest/visible-capture-window.d.ts.map +1 -1
  42. package/dist/adapter/ingest/visible-capture-window.js +46 -7
  43. package/dist/adapter/native-debug-module.d.ts +43 -0
  44. package/dist/adapter/native-debug-module.d.ts.map +1 -0
  45. package/dist/adapter/native-debug-module.js +230 -0
  46. package/dist/adapter/object3d-authoring-subject.d.ts +32 -0
  47. package/dist/adapter/object3d-authoring-subject.d.ts.map +1 -0
  48. package/dist/adapter/object3d-authoring-subject.js +25 -0
  49. package/dist/adapter/root-adapter.d.ts +21 -56
  50. package/dist/adapter/root-adapter.d.ts.map +1 -1
  51. package/dist/adapter/root-adapter.js +4 -20
  52. package/dist/adapter/root-seam-contract.d.ts +124 -0
  53. package/dist/adapter/root-seam-contract.d.ts.map +1 -0
  54. package/dist/adapter/root-seam-contract.js +36 -0
  55. package/dist/adapter/seam-evidence.d.ts +118 -0
  56. package/dist/adapter/seam-evidence.d.ts.map +1 -0
  57. package/dist/adapter/seam-evidence.js +231 -0
  58. package/dist/adapter/setup-three-root-adapter.d.ts +2 -3
  59. package/dist/adapter/setup-three-root-adapter.d.ts.map +1 -1
  60. package/dist/adapter/setup-three-root-adapter.js +2 -3
  61. package/dist/adapter/system-adapter.d.ts +6 -1
  62. package/dist/adapter/system-adapter.d.ts.map +1 -1
  63. package/dist/adapter/system-seam-contract.d.ts +354 -0
  64. package/dist/adapter/system-seam-contract.d.ts.map +1 -0
  65. package/dist/adapter/system-seam-contract.js +95 -0
  66. package/dist/animation/xstate-animation-binding.d.ts +6 -0
  67. package/dist/animation/xstate-animation-binding.d.ts.map +1 -1
  68. package/dist/animation/xstate-animation-binding.js +142 -4
  69. package/dist/asset-formats/collider.d.ts +1 -1
  70. package/dist/asset-formats/mesh.d.ts +2 -2
  71. package/dist/asset-formats/particles.d.ts +1 -1
  72. package/dist/canvas-react/engine-bridge.d.ts +6 -6
  73. package/dist/canvas-react/engine-bridge.d.ts.map +1 -1
  74. package/dist/canvas-react/engine-bridge.js +2 -2
  75. package/dist/canvas-react/index.d.ts +2 -2
  76. package/dist/canvas-react/index.d.ts.map +1 -1
  77. package/dist/canvas-react/index.js +1 -1
  78. package/dist/canvas-react/pixi-react-adapter.d.ts +15 -9
  79. package/dist/canvas-react/pixi-react-adapter.d.ts.map +1 -1
  80. package/dist/canvas-react/pixi-react-adapter.js +43 -29
  81. package/dist/canvas-react/pixi-react-root-factory.d.ts.map +1 -1
  82. package/dist/canvas-react/pixi-react-root-factory.js +4 -0
  83. package/dist/canvas-react/world-context.d.ts +22 -12
  84. package/dist/canvas-react/world-context.d.ts.map +1 -1
  85. package/dist/canvas-react/world-context.js +12 -51
  86. package/dist/ecs/user-data.d.ts +5 -0
  87. package/dist/ecs/user-data.d.ts.map +1 -1
  88. package/dist/ecs/user-data.js +3 -0
  89. package/dist/input/input-manager.d.ts +49 -0
  90. package/dist/input/input-manager.d.ts.map +1 -1
  91. package/dist/input/input-manager.js +127 -0
  92. package/dist/manifest/schema.d.ts +9 -9
  93. package/dist/manifest/schema.js +1 -1
  94. package/dist/pixi/authoring.d.ts.map +1 -1
  95. package/dist/pixi/authoring.js +220 -1
  96. package/dist/pixi/ingest.d.ts +2 -1
  97. package/dist/pixi/ingest.d.ts.map +1 -1
  98. package/dist/pixi/ingest.js +4 -2
  99. package/dist/pixi/scene-capture.d.ts +9 -1
  100. package/dist/pixi/scene-capture.d.ts.map +1 -1
  101. package/dist/pixi/scene-capture.js +9 -6
  102. package/dist/render/particles-factory.d.ts +13 -6
  103. package/dist/render/particles-factory.d.ts.map +1 -1
  104. package/dist/render/particles-factory.js +6 -3
  105. package/dist/runtime/create-runtime.d.ts +23 -46
  106. package/dist/runtime/create-runtime.d.ts.map +1 -1
  107. package/dist/runtime/create-runtime.js +22 -67
  108. package/dist/runtime/game.d.ts +29 -71
  109. package/dist/runtime/game.d.ts.map +1 -1
  110. package/dist/runtime/game.js +15 -54
  111. package/dist/runtime/mount-game.d.ts.map +1 -1
  112. package/dist/runtime/mount-game.js +12 -1
  113. package/dist/runtime/mount-manifest.d.ts.map +1 -1
  114. package/dist/runtime/mount-manifest.js +4 -5
  115. package/dist/runtime/types.d.ts +18 -0
  116. package/dist/runtime/types.d.ts.map +1 -1
  117. package/dist/setup/setup-renderer.d.ts +3 -4
  118. package/dist/setup/setup-renderer.d.ts.map +1 -1
  119. package/dist/setup/setup-renderer.js +3 -4
  120. package/dist/world3d-react/engine-bridge.d.ts +1 -1
  121. package/dist/world3d-react/engine-bridge.js +1 -1
  122. package/dist/world3d-react/r3f-adapter.d.ts +7 -0
  123. package/dist/world3d-react/r3f-adapter.d.ts.map +1 -1
  124. package/dist/world3d-react/r3f-adapter.js +50 -21
  125. package/dist/world3d-react/r3f-root-factory.d.ts.map +1 -1
  126. package/dist/world3d-react/r3f-root-factory.js +4 -0
  127. package/dist/world3d-react/world-context.d.ts +9 -3
  128. package/dist/world3d-react/world-context.d.ts.map +1 -1
  129. package/dist/world3d-react/world-context.js +5 -18
  130. package/package.json +1 -1
  131. package/schemas/engine-capabilities.json +8 -8
  132. package/schemas/vgai-project.schema.json +1 -1
  133. package/src/adapter/adapter-module.ts +407 -50
  134. package/src/adapter/authoring-seam-contract.ts +211 -0
  135. package/src/adapter/authoring.ts +242 -50
  136. package/src/adapter/entrypoint-selection-source.ts +159 -0
  137. package/src/adapter/finders/scenes-from-entrypoint-selection.ts +159 -28
  138. package/src/adapter/first-party-systems.ts +17 -3
  139. package/src/adapter/index.ts +51 -1
  140. package/src/adapter/ingest/contract-system-adapters.ts +26 -30
  141. package/src/adapter/ingest/game-contract-seams.ts +85 -0
  142. package/src/adapter/ingest/game-contract.ts +9 -4
  143. package/src/adapter/ingest/merge-debug-adapters.ts +193 -0
  144. package/src/adapter/ingest/observation-debug-adapter.ts +158 -0
  145. package/src/adapter/ingest/scene-capture.ts +126 -23
  146. package/src/adapter/ingest/visible-capture-window.ts +63 -9
  147. package/src/adapter/native-debug-module.ts +307 -0
  148. package/src/adapter/object3d-authoring-subject.ts +50 -0
  149. package/src/adapter/root-adapter.ts +21 -56
  150. package/src/adapter/root-seam-contract.ts +56 -0
  151. package/src/adapter/seam-evidence.ts +336 -0
  152. package/src/adapter/setup-three-root-adapter.ts +4 -6
  153. package/src/adapter/system-adapter.ts +6 -1
  154. package/src/adapter/system-seam-contract.ts +121 -0
  155. package/src/animation/xstate-animation-binding.ts +151 -4
  156. package/src/canvas-react/engine-bridge.ts +6 -6
  157. package/src/canvas-react/index.ts +2 -1
  158. package/src/canvas-react/pixi-react-adapter.tsx +55 -34
  159. package/src/canvas-react/pixi-react-root-factory.tsx +4 -0
  160. package/src/canvas-react/world-context.ts +26 -101
  161. package/src/ecs/user-data.ts +5 -0
  162. package/src/input/input-manager.ts +122 -0
  163. package/src/manifest/schema.ts +1 -1
  164. package/src/pixi/authoring.ts +236 -1
  165. package/src/pixi/ingest.ts +9 -2
  166. package/src/pixi/scene-capture.ts +20 -5
  167. package/src/render/particles-factory.ts +16 -6
  168. package/src/runtime/create-runtime.ts +41 -106
  169. package/src/runtime/game.ts +41 -111
  170. package/src/runtime/mount-game.ts +19 -1
  171. package/src/runtime/mount-manifest.ts +4 -5
  172. package/src/runtime/types.ts +22 -0
  173. package/src/setup/setup-renderer.ts +3 -4
  174. package/src/world3d-react/engine-bridge.ts +1 -1
  175. package/src/world3d-react/r3f-adapter.tsx +64 -24
  176. package/src/world3d-react/r3f-root-factory.tsx +4 -0
  177. package/src/world3d-react/world-context.ts +11 -36
@@ -40,6 +40,9 @@ export declare class InputManager {
40
40
  private mouseButtonsJustUp;
41
41
  private mouseDeltaX;
42
42
  private mouseDeltaY;
43
+ /** Last `mousemove` client position. Device-poll only — action maps read delta, not this. */
44
+ private mouseClientX;
45
+ private mouseClientY;
43
46
  private gamepads;
44
47
  private gamepadButtonsDown;
45
48
  private gamepadButtonsPrev;
@@ -496,6 +499,39 @@ export declare class InputManager {
496
499
  x: number;
497
500
  y: number;
498
501
  };
502
+ /**
503
+ * Device-poll door (not an action binding). Every getter checks
504
+ * {@link inputActive} at READ time so a poll while play is off or the
505
+ * tab is unfocused is inert — the same predicate `onKeyDown` / `onMouseMove`
506
+ * already use. Inventing an implicit `registerAction` per key would define
507
+ * bindings the project's own `.inputmap` never named.
508
+ */
509
+ isDeviceKeyPressed(code: string): boolean;
510
+ isDeviceKeyJustPressed(code: string): boolean;
511
+ isDeviceKeyJustReleased(code: string): boolean;
512
+ /** `button` is the DOM `MouseEvent.button` index (0 left, 1 middle, 2 right). */
513
+ isDeviceMouseButtonPressed(button: number): boolean;
514
+ isDeviceMouseButtonJustPressed(button: number): boolean;
515
+ isDeviceMouseButtonJustReleased(button: number): boolean;
516
+ /**
517
+ * This-frame mouse delta in DOM space (Y +down). Callers that need Unity
518
+ * `Pointer.delta` (Y-up) flip Y themselves.
519
+ */
520
+ getDeviceMouseDelta(): {
521
+ x: number;
522
+ y: number;
523
+ };
524
+ /** Last `mousemove` client position in DOM space (origin top-left, Y +down). */
525
+ getDeviceMousePosition(): {
526
+ x: number;
527
+ y: number;
528
+ };
529
+ hasDeviceGamepad(): boolean;
530
+ isDeviceGamepadButtonPressed(button: number): boolean;
531
+ isDeviceGamepadButtonJustPressed(button: number): boolean;
532
+ isDeviceGamepadButtonJustReleased(button: number): boolean;
533
+ getDeviceGamepadAxis(axis: number): number;
534
+ private firstConnectedGamepadIndex;
499
535
  /**
500
536
  * F4 (spec §12 "Schema and Examples" — the F3 prompt-switching gap): which
501
537
  * device family most recently produced real input, or `null` before any
@@ -771,6 +807,19 @@ export declare class InputManager {
771
807
  };
772
808
  /** Request pointer lock for FPS-style mouse control */
773
809
  requestPointerLock(element: HTMLElement): void;
810
+ /**
811
+ * Release pointer lock on the element {@link requestPointerLock} wired.
812
+ *
813
+ * Godot's `Input.mouse_mode = MOUSE_MODE_VISIBLE` is this call: drop the
814
+ * lock if this manager holds it, and unwire the click-to-lock listener so a
815
+ * later click does not recapture. Idempotent. A host with no
816
+ * `document.exitPointerLock` (headless) still unwires — the lock never
817
+ * existed there.
818
+ *
819
+ * Only the lock THIS manager requested is released. An editor viewport
820
+ * holding lock on a different element is not ours to drop.
821
+ */
822
+ exitPointerLock(): void;
774
823
  /** Clean up event listeners */
775
824
  dispose(): void;
776
825
  }
@@ -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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"}
@@ -277,6 +277,9 @@ export class InputManager {
277
277
  mouseButtonsJustUp = new Set();
278
278
  mouseDeltaX = 0;
279
279
  mouseDeltaY = 0;
280
+ /** Last `mousemove` client position. Device-poll only — action maps read delta, not this. */
281
+ mouseClientX = 0;
282
+ mouseClientY = 0;
280
283
  gamepads = [];
281
284
  // Gamepad button edge tracking (P1.6c). Keys are `${gamepadIndex}:${buttonIndex}`.
282
285
  // `Prev` is last frame's pressed set; `Down` is this frame's; the just-down/up
@@ -527,6 +530,8 @@ export class InputManager {
527
530
  this.lastActiveDevice = 'mouse';
528
531
  this.mouseDeltaX += e.movementX;
529
532
  this.mouseDeltaY += e.movementY;
533
+ this.mouseClientX = e.clientX;
534
+ this.mouseClientY = e.clientY;
530
535
  };
531
536
  /** F2 — real window blur: drop focus and flush held REAL-device state
532
537
  * (the browser stops delivering keyup/mouseup while blurred, so a key
@@ -1618,6 +1623,103 @@ export class InputManager {
1618
1623
  getMouseDelta() {
1619
1624
  return { x: this.mouseDeltaX, y: this.mouseDeltaY };
1620
1625
  }
1626
+ /**
1627
+ * Device-poll door (not an action binding). Every getter checks
1628
+ * {@link inputActive} at READ time so a poll while play is off or the
1629
+ * tab is unfocused is inert — the same predicate `onKeyDown` / `onMouseMove`
1630
+ * already use. Inventing an implicit `registerAction` per key would define
1631
+ * bindings the project's own `.inputmap` never named.
1632
+ */
1633
+ isDeviceKeyPressed(code) {
1634
+ if (!this.inputActive)
1635
+ return false;
1636
+ return this.keysDown.has(code);
1637
+ }
1638
+ isDeviceKeyJustPressed(code) {
1639
+ if (!this.inputActive)
1640
+ return false;
1641
+ return this.keysJustDown.has(code);
1642
+ }
1643
+ isDeviceKeyJustReleased(code) {
1644
+ if (!this.inputActive)
1645
+ return false;
1646
+ return this.keysJustUp.has(code);
1647
+ }
1648
+ /** `button` is the DOM `MouseEvent.button` index (0 left, 1 middle, 2 right). */
1649
+ isDeviceMouseButtonPressed(button) {
1650
+ if (!this.inputActive)
1651
+ return false;
1652
+ return this.mouseButtons.has(button);
1653
+ }
1654
+ isDeviceMouseButtonJustPressed(button) {
1655
+ if (!this.inputActive)
1656
+ return false;
1657
+ return this.mouseButtonsJustDown.has(button);
1658
+ }
1659
+ isDeviceMouseButtonJustReleased(button) {
1660
+ if (!this.inputActive)
1661
+ return false;
1662
+ return this.mouseButtonsJustUp.has(button);
1663
+ }
1664
+ /**
1665
+ * This-frame mouse delta in DOM space (Y +down). Callers that need Unity
1666
+ * `Pointer.delta` (Y-up) flip Y themselves.
1667
+ */
1668
+ getDeviceMouseDelta() {
1669
+ if (!this.inputActive)
1670
+ return { x: 0, y: 0 };
1671
+ return { x: this.mouseDeltaX, y: this.mouseDeltaY };
1672
+ }
1673
+ /** Last `mousemove` client position in DOM space (origin top-left, Y +down). */
1674
+ getDeviceMousePosition() {
1675
+ if (!this.inputActive)
1676
+ return { x: 0, y: 0 };
1677
+ return { x: this.mouseClientX, y: this.mouseClientY };
1678
+ }
1679
+ hasDeviceGamepad() {
1680
+ if (!this.inputActive)
1681
+ return false;
1682
+ return this.gamepads.some((pad) => pad !== null);
1683
+ }
1684
+ isDeviceGamepadButtonPressed(button) {
1685
+ if (!this.inputActive)
1686
+ return false;
1687
+ const index = this.firstConnectedGamepadIndex();
1688
+ if (index < 0)
1689
+ return false;
1690
+ return this.gamepadButtonsDown.has(`${index}:${button}`);
1691
+ }
1692
+ isDeviceGamepadButtonJustPressed(button) {
1693
+ if (!this.inputActive)
1694
+ return false;
1695
+ const index = this.firstConnectedGamepadIndex();
1696
+ if (index < 0)
1697
+ return false;
1698
+ return this.gamepadButtonsJustDown.has(`${index}:${button}`);
1699
+ }
1700
+ isDeviceGamepadButtonJustReleased(button) {
1701
+ if (!this.inputActive)
1702
+ return false;
1703
+ const index = this.firstConnectedGamepadIndex();
1704
+ if (index < 0)
1705
+ return false;
1706
+ return this.gamepadButtonsJustUp.has(`${index}:${button}`);
1707
+ }
1708
+ getDeviceGamepadAxis(axis) {
1709
+ if (!this.inputActive)
1710
+ return 0;
1711
+ const index = this.firstConnectedGamepadIndex();
1712
+ if (index < 0)
1713
+ return 0;
1714
+ return this.gamepads[index]?.axes[axis] ?? 0;
1715
+ }
1716
+ firstConnectedGamepadIndex() {
1717
+ for (let i = 0; i < this.gamepads.length; i++) {
1718
+ if (this.gamepads[i] !== null)
1719
+ return i;
1720
+ }
1721
+ return -1;
1722
+ }
1621
1723
  /**
1622
1724
  * F4 (spec §12 "Schema and Examples" — the F3 prompt-switching gap): which
1623
1725
  * device family most recently produced real input, or `null` before any
@@ -2194,6 +2296,31 @@ export class InputManager {
2194
2296
  this.pointerLockElement = element;
2195
2297
  element.addEventListener('click', this.onPointerLockClick);
2196
2298
  }
2299
+ /**
2300
+ * Release pointer lock on the element {@link requestPointerLock} wired.
2301
+ *
2302
+ * Godot's `Input.mouse_mode = MOUSE_MODE_VISIBLE` is this call: drop the
2303
+ * lock if this manager holds it, and unwire the click-to-lock listener so a
2304
+ * later click does not recapture. Idempotent. A host with no
2305
+ * `document.exitPointerLock` (headless) still unwires — the lock never
2306
+ * existed there.
2307
+ *
2308
+ * Only the lock THIS manager requested is released. An editor viewport
2309
+ * holding lock on a different element is not ours to drop.
2310
+ */
2311
+ exitPointerLock() {
2312
+ const el = this.pointerLockElement;
2313
+ if (el) {
2314
+ el.removeEventListener('click', this.onPointerLockClick);
2315
+ this.pointerLockElement = null;
2316
+ }
2317
+ this.pointerLocked = false;
2318
+ const doc = typeof document !== 'undefined' ? document : undefined;
2319
+ if (!doc || typeof doc.exitPointerLock !== 'function')
2320
+ return;
2321
+ if (el && doc.pointerLockElement === el)
2322
+ doc.exitPointerLock();
2323
+ }
2197
2324
  /** Clean up event listeners */
2198
2325
  dispose() {
2199
2326
  if (this.disposed)
@@ -5,20 +5,20 @@ import { z } from 'zod';
5
5
  */
6
6
  export declare const GAME_MANIFEST_VERSION: 2;
7
7
  export declare const RootAdapterSchema: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodUnion<readonly [z.ZodEnum<{
8
- canvas: "canvas";
9
8
  three: "three";
9
+ canvas: "canvas";
10
10
  dom: "dom";
11
11
  }>, z.ZodObject<{
12
12
  module: z.ZodString;
13
13
  surface: z.ZodEnum<{
14
- canvas: "canvas";
15
14
  three: "three";
15
+ canvas: "canvas";
16
16
  dom: "dom";
17
17
  }>;
18
18
  }, z.core.$strict>, z.ZodObject<{
19
19
  surface: z.ZodEnum<{
20
- canvas: "canvas";
21
20
  three: "three";
21
+ canvas: "canvas";
22
22
  dom: "dom";
23
23
  }>;
24
24
  ingest: z.ZodObject<{
@@ -39,20 +39,20 @@ export declare const AdapterRootSchema: z.ZodObject<{
39
39
  id: z.ZodString;
40
40
  description: z.ZodOptional<z.ZodString>;
41
41
  adapter: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodUnion<readonly [z.ZodEnum<{
42
- canvas: "canvas";
43
42
  three: "three";
43
+ canvas: "canvas";
44
44
  dom: "dom";
45
45
  }>, z.ZodObject<{
46
46
  module: z.ZodString;
47
47
  surface: z.ZodEnum<{
48
- canvas: "canvas";
49
48
  three: "three";
49
+ canvas: "canvas";
50
50
  dom: "dom";
51
51
  }>;
52
52
  }, z.core.$strict>, z.ZodObject<{
53
53
  surface: z.ZodEnum<{
54
- canvas: "canvas";
55
54
  three: "three";
55
+ canvas: "canvas";
56
56
  dom: "dom";
57
57
  }>;
58
58
  ingest: z.ZodObject<{
@@ -125,20 +125,20 @@ export declare const GameManifestSchema: z.ZodObject<{
125
125
  id: z.ZodString;
126
126
  description: z.ZodOptional<z.ZodString>;
127
127
  adapter: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodUnion<readonly [z.ZodEnum<{
128
- canvas: "canvas";
129
128
  three: "three";
129
+ canvas: "canvas";
130
130
  dom: "dom";
131
131
  }>, z.ZodObject<{
132
132
  module: z.ZodString;
133
133
  surface: z.ZodEnum<{
134
- canvas: "canvas";
135
134
  three: "three";
135
+ canvas: "canvas";
136
136
  dom: "dom";
137
137
  }>;
138
138
  }, z.core.$strict>, z.ZodObject<{
139
139
  surface: z.ZodEnum<{
140
- canvas: "canvas";
141
140
  three: "three";
141
+ canvas: "canvas";
142
142
  dom: "dom";
143
143
  }>;
144
144
  ingest: z.ZodObject<{
@@ -330,7 +330,7 @@ export const LearnMetadataSchema = z
330
330
  .string()
331
331
  .optional()
332
332
  .describe('Optional Learn-site lesson URL that teaches this project 1:1 ' +
333
- '(e.g. https://vgai-learn.pages.dev/quick-starts/joints/)'),
333
+ '(e.g. https://vgai-learn.pages.dev/manual/physics/joints/)'),
334
334
  })
335
335
  .strict()
336
336
  .describe('Learner-facing metadata (FT-5) — powers the example ' +
@@ -1 +1 @@
1
- {"version":3,"file":"authoring.d.ts","sourceRoot":"","sources":["../../src/pixi/authoring.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authoring.d.ts","sourceRoot":"","sources":["../../src/pixi/authoring.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,231 @@ function kindOf(o) {
2
2
  const ctor = o.constructor?.name?.toLowerCase() ?? 'container';
3
3
  if (ctor.includes('animatedsprite'))
4
4
  return 'animatedsprite';
5
+ if (ctor.includes('nineslice'))
6
+ return 'nineslicesprite';
7
+ if (ctor.includes('tiling'))
8
+ return 'tilingsprite';
5
9
  if (ctor.includes('sprite'))
6
10
  return 'sprite';
7
11
  if (ctor.includes('text'))
8
12
  return 'text';
13
+ if (ctor.includes('graphics'))
14
+ return 'graphics';
9
15
  return 'container';
10
16
  }
17
+ /**
18
+ * Hierarchy row text — the Pixi sibling of three's `object.name || object.type`.
19
+ *
20
+ * Authored `.label` first. Then a GAME name: a field, a bag key, or a class
21
+ * that owns this `.view`. Stock Pixi types (`Sprite`, `Graphics`, `_Container`)
22
+ * are not names — they used to win and hide every owner. Then the texture
23
+ * alias (`Sprite.from('satellite')`). Then a remaining game constructor
24
+ * (`TitleScreen`, `PrimaryButton`). Bare `new Container()` still reads as
25
+ * `container`.
26
+ */
27
+ function displayLabel(o) {
28
+ const authored = authoredLabel(o);
29
+ if (authored)
30
+ return authored;
31
+ const owner = viewOwnerLabel(o);
32
+ if (owner)
33
+ return owner;
34
+ const asset = textureLabel(o);
35
+ if (asset)
36
+ return asset;
37
+ const ctor = usefulCtorName(o);
38
+ if (ctor)
39
+ return ctor;
40
+ return kindOf(o);
41
+ }
42
+ /** Pixi v8 stamps Sprite/Graphics `.label` with the class name. That is not an authored name. */
43
+ function authoredLabel(o) {
44
+ const authored = o.label?.trim();
45
+ if (!authored || isGenericPixiCtor(authored))
46
+ return undefined;
47
+ return authored;
48
+ }
49
+ function isMinifiedCtor(name) {
50
+ return name.length <= 2 && name === name.toLowerCase();
51
+ }
52
+ /** Pixi's own display types. The shipped build prefixes them `_`. */
53
+ const STOCK_PIXI_CTOR = new Set([
54
+ 'container',
55
+ 'displayobject',
56
+ 'sprite',
57
+ 'animatedsprite',
58
+ 'nineslicesprite',
59
+ 'tilingsprite',
60
+ 'text',
61
+ 'bitmaptext',
62
+ 'htmltext',
63
+ 'graphics',
64
+ 'mesh',
65
+ ]);
66
+ function isGenericPixiCtor(name) {
67
+ if (isMinifiedCtor(name) || name === 'Object' || name === 'Function')
68
+ return true;
69
+ return STOCK_PIXI_CTOR.has(name.replace(/^_+/, '').toLowerCase());
70
+ }
71
+ function textureLabel(object) {
72
+ const texture = object.texture;
73
+ const raw = texture?.label?.trim();
74
+ if (!raw || /^(_?texture)?(empty|white)$/i.test(raw))
75
+ return undefined;
76
+ const leaf = raw.split('/').pop() ?? raw;
77
+ return leaf.replace(/\.[a-z0-9]+$/i, '') || undefined;
78
+ }
79
+ function usefulCtorName(value) {
80
+ const name = value.constructor?.name;
81
+ if (!name || isGenericPixiCtor(name))
82
+ return undefined;
83
+ return name.replace(/^_+/, '') || undefined;
84
+ }
85
+ function fieldLabel(key) {
86
+ const trimmed = key.replace(/^_+/, '');
87
+ return trimmed.length > 0 ? trimmed : undefined;
88
+ }
89
+ function isPixiDisplay(value) {
90
+ return ('addChild' in value &&
91
+ typeof value.addChild === 'function' &&
92
+ 'children' in value);
93
+ }
94
+ /**
95
+ * Bubbo-style owner, identity only. TitleScreen keeps `this._cannon` and
96
+ * parents `this._cannon.view`. A grouping node is the field itself
97
+ * (`this._bottomAnimContainer`). A pool or atlas lives in a bag — Array,
98
+ * Map, Set, or an object literal (`_decor[]`, `allSystems`, `_parts[id]`).
99
+ * Scan each ancestor's own fields first — a flood walk of Pixi internals
100
+ * never reached `_cannon` inside the budget.
101
+ */
102
+ function viewOwnerLabel(view) {
103
+ const seen = new WeakSet();
104
+ let host = view.parent;
105
+ for (let hops = 0; hops < 8 && host && typeof host === 'object'; hops++) {
106
+ const found = labelFromHolder(host, view, seen) ?? findHeldOwner(host, view, 2, seen);
107
+ if (found)
108
+ return found;
109
+ host = host.parent;
110
+ }
111
+ return undefined;
112
+ }
113
+ function isGameFieldKey(key) {
114
+ // Skip display-list indices (`0`, `1`) and Pixi internals (`children`).
115
+ return /^_?[A-Za-z][A-Za-zA-Z0-9]*$/.test(key) && !PIXI_INTERNAL_KEY.has(key);
116
+ }
117
+ const PIXI_INTERNAL_KEY = new Set([
118
+ 'parent',
119
+ 'children',
120
+ 'transform',
121
+ 'position',
122
+ 'scale',
123
+ 'pivot',
124
+ 'skew',
125
+ 'worldTransform',
126
+ 'localTransform',
127
+ ]);
128
+ function labelFromHolder(host, view, seen) {
129
+ if (seen.has(host))
130
+ return undefined;
131
+ seen.add(host);
132
+ const asBag = nameInBag(host, view, undefined, seen);
133
+ if (asBag)
134
+ return asBag;
135
+ for (const [key, value] of Object.entries(host)) {
136
+ if (!isGameFieldKey(key))
137
+ continue;
138
+ const named = nameIfHoldsView(host, key, value, view);
139
+ if (named)
140
+ return named;
141
+ const nested = nameInBag(value, view, key, seen);
142
+ if (nested)
143
+ return nested;
144
+ }
145
+ return undefined;
146
+ }
147
+ function nameInBag(value, view, fieldKey, seen) {
148
+ const entries = bagEntries(value);
149
+ if (!entries)
150
+ return undefined;
151
+ for (const [itemKey, item] of entries) {
152
+ const named = nameBagItem(value, item, usableBagKey(itemKey) ?? fieldKey, view, seen);
153
+ if (named)
154
+ return named;
155
+ }
156
+ return undefined;
157
+ }
158
+ function nameBagItem(bag, item, key, view, seen) {
159
+ if (key) {
160
+ const named = nameIfHoldsView(item && typeof item === 'object' ? item : bag, key, item, view);
161
+ if (named)
162
+ return named;
163
+ }
164
+ else if (item && typeof item === 'object' && item.view === view) {
165
+ const named = usefulCtorName(item);
166
+ if (named)
167
+ return named;
168
+ }
169
+ if (item && typeof item === 'object' && !isPixiDisplay(item)) {
170
+ return labelFromHolder(item, view, seen);
171
+ }
172
+ return undefined;
173
+ }
174
+ function usableBagKey(key) {
175
+ if (!key || /^\d+$/.test(key))
176
+ return undefined;
177
+ return isGameFieldKey(key) || key.includes('-') ? (fieldLabel(key) ?? key) : undefined;
178
+ }
179
+ function bagEntries(value) {
180
+ if (!value || typeof value !== 'object')
181
+ return undefined;
182
+ // Game arrays are allowed to be exotic subclasses. Do not dispatch through
183
+ // their overridable `map`: one shipped Pixi game returns its elements rather
184
+ // than `[key, value]` pairs there, which made hierarchy labeling throw while
185
+ // destructuring the result. The authoring seam treats game objects as
186
+ // untrusted observations, so normalize with indexed reads into our own array.
187
+ if (Array.isArray(value)) {
188
+ const entries = [];
189
+ for (let index = 0; index < value.length; index++) {
190
+ entries.push([String(index), value[index]]);
191
+ }
192
+ return entries;
193
+ }
194
+ if (value instanceof Map)
195
+ return [...value.entries()].map(([key, item]) => [String(key), item]);
196
+ if (value instanceof Set)
197
+ return [...value].map((item, index) => [String(index), item]);
198
+ if (Object.getPrototypeOf(value) !== Object.prototype)
199
+ return undefined;
200
+ return Object.entries(value);
201
+ }
202
+ function nameIfHoldsView(host, key, value, view) {
203
+ if (value === view) {
204
+ const field = fieldLabel(key);
205
+ if (field && field.toLowerCase() !== 'view') {
206
+ return usefulCtorName(value) ?? field;
207
+ }
208
+ return usefulCtorName(value) ?? usefulCtorName(host) ?? field;
209
+ }
210
+ if (value && typeof value === 'object' && value.view === view) {
211
+ return usefulCtorName(value) ?? fieldLabel(key);
212
+ }
213
+ return undefined;
214
+ }
215
+ function findHeldOwner(held, view, depth, seen) {
216
+ const direct = labelFromHolder(held, view, seen);
217
+ if (direct)
218
+ return direct;
219
+ if (depth <= 0)
220
+ return undefined;
221
+ for (const value of Object.values(held)) {
222
+ if (!value || typeof value !== 'object' || isPixiDisplay(value))
223
+ continue;
224
+ const found = findHeldOwner(value, view, depth - 1, seen);
225
+ if (found)
226
+ return found;
227
+ }
228
+ return undefined;
229
+ }
11
230
  /** Deterministic structural-path ids: `w2d:<path>:<kind>:<label>`. */
12
231
  export const STRUCTURAL_CANVAS_IDENTITY = {
13
232
  idFor: (object, path) => `w2d:${path.join('/')}:${kindOf(object)}:${object.label ?? ''}`,
@@ -76,7 +295,7 @@ export class AuthoringAdapter2D {
76
295
  const self = o;
77
296
  return {
78
297
  id: self.__authId ?? '',
79
- label: o.label ?? kindOf(o),
298
+ label: displayLabel(o),
80
299
  kind: kindOf(o),
81
300
  parentId: o.parent?.__authId ?? null,
82
301
  childIds: o.children.map((c) => c.__authId ?? ''),
@@ -1,5 +1,5 @@
1
1
  import type { VisibleCaptureWindow } from '../adapter/ingest/visible-capture-window';
2
- import { type SceneCapture2DHandle } from './scene-capture';
2
+ import { type CapturedRuntime2D, type SceneCapture2DHandle } from './scene-capture';
3
3
  /** A registered unmodified PixiJS game (the Pixi analog of `IngestGame`). */
4
4
  export interface IngestGame2D {
5
5
  id: string;
@@ -33,5 +33,6 @@ export interface IngestMount2D {
33
33
  export declare function mountIngestGame2D(pixiNamespace: unknown, game: IngestGame2D, opts?: {
34
34
  captureTimeoutMs?: number;
35
35
  onWait?: (wait: VisibleCaptureWindow | null) => void;
36
+ acceptCapture?: (runtime: CapturedRuntime2D) => boolean;
36
37
  }): Promise<IngestMount2D>;
37
38
  //# sourceMappingURL=ingest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/pixi/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEnF,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,oBAAoB,CAAC;IAC9B,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,OAAO,EACtB,IAAI,EAAE,YAAY,EAClB,IAAI,GAAE;IACJ,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,CAAC;CACjD,GACL,OAAO,CAAC,aAAa,CAAC,CA2BxB"}
1
+ {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/pixi/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AAEzB,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,oBAAoB,CAAC;IAC9B,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,OAAO,EACtB,IAAI,EAAE,YAAY,EAClB,IAAI,GAAE;IACJ,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC;CACpD,GACL,OAAO,CAAC,aAAa,CAAC,CA6BxB"}
@@ -1,4 +1,4 @@
1
- import { installSceneCapture2D } from './scene-capture';
1
+ import { installSceneCapture2D, } from './scene-capture';
2
2
  /**
3
3
  * Mount an UNMODIFIED PixiJS game via the shared-instance capture path — the 2D
4
4
  * analog of `mountIngestGame`. Installs the render trap on the host's pixi
@@ -13,7 +13,9 @@ import { installSceneCapture2D } from './scene-capture';
13
13
  * visible frame — the tab is hidden" over a canvas ingest too.
14
14
  */
15
15
  export async function mountIngestGame2D(pixiNamespace, game, opts = {}) {
16
- const capture = installSceneCapture2D(pixiNamespace);
16
+ const capture = installSceneCapture2D(pixiNamespace, {
17
+ ...(opts.acceptCapture ? { accept: opts.acceptCapture } : {}),
18
+ });
17
19
  try {
18
20
  await game.load();
19
21
  }
@@ -65,10 +65,18 @@ export interface SceneCapture2DHandle {
65
65
  setPaused(paused: boolean): void;
66
66
  uninstall(): void;
67
67
  }
68
+ export interface SceneCapture2DOptions {
69
+ /**
70
+ * Select the runtime owned by this mount when other Pixi Applications share
71
+ * the page (for example editor prefab previews). Rejected draws still count,
72
+ * but cannot satisfy {@link SceneCapture2DHandle.waitForCapture}.
73
+ */
74
+ accept?: ((runtime: CapturedRuntime2D) => boolean) | undefined;
75
+ }
68
76
  /**
69
77
  * Install the render trap on `pixiNamespace.Application.prototype.render`. Pass the
70
78
  * host's `pixi.js` namespace so a shared-instance game is trapped. Install once per
71
79
  * ingest session; `uninstall()` on teardown.
72
80
  */
73
- export declare function installSceneCapture2D(pixiNamespace: unknown): SceneCapture2DHandle;
81
+ export declare function installSceneCapture2D(pixiNamespace: unknown, options?: SceneCapture2DOptions): SceneCapture2DHandle;
74
82
  //# sourceMappingURL=scene-capture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scene-capture.d.ts","sourceRoot":"","sources":["../../src/pixi/scene-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC1B,MAAM,0CAA0C,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,oEAAoE;IACpE,UAAU,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACzC,sEAAsE;IACtE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACpE;AAED,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,kCAAkC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpF,YAAY,IAAI,MAAM,CAAC;IACvB,sEAAsE;IACtE,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,SAAS,IAAI,IAAI,CAAC;CACnB;AAMD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,OAAO,GAAG,oBAAoB,CAgFlF"}
1
+ {"version":3,"file":"scene-capture.d.ts","sourceRoot":"","sources":["../../src/pixi/scene-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC1B,MAAM,0CAA0C,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,oEAAoE;IACpE,UAAU,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACzC,sEAAsE;IACtE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACpE;AAED,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,kCAAkC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpF,YAAY,IAAI,MAAM,CAAC;IACvB,sEAAsE;IACtE,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,SAAS,IAAI,IAAI,CAAC;CACnB;AAMD,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CAChE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,OAAO,EACtB,OAAO,GAAE,qBAA0B,GAClC,oBAAoB,CAmFtB"}