@vgai/engine 0.5.0 → 0.5.2

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 (538) hide show
  1. package/package.json +1 -1
  2. package/schemas/engine-capabilities.json +4 -4
  3. package/schemas/vgai-game.schema.json +2 -2
  4. package/src/adapter/authoring.ts +42 -0
  5. package/src/adapter/index.ts +3 -0
  6. package/src/adapter/ingest/overlay-apply.ts +50 -6
  7. package/src/adapter/ingest/scene-capture.ts +51 -2
  8. package/src/adapter/vgai-scene-game-adapter.ts +24 -0
  9. package/src/manifest/schema.ts +7 -3
  10. package/src/runtime/create-runtime.ts +97 -0
  11. package/src/runtime/game.ts +11 -1
  12. package/src/scene/asset-ref-check.ts +1 -1
  13. package/src/scene/scene-loader.ts +2 -2
  14. package/src/scene/user-data.ts +18 -0
  15. package/src/world3d-react/behavior.tsx +19 -11
  16. package/src/world3d-react/r3f-adapter.tsx +8 -0
  17. package/dist/adapter/adapter-surface.d.ts +0 -30
  18. package/dist/adapter/adapter-surface.d.ts.map +0 -1
  19. package/dist/adapter/adapter-surface.js +0 -18
  20. package/dist/adapter/authoring.d.ts +0 -461
  21. package/dist/adapter/authoring.d.ts.map +0 -1
  22. package/dist/adapter/authoring.js +0 -22
  23. package/dist/adapter/colyseus-networking-adapter.d.ts +0 -43
  24. package/dist/adapter/colyseus-networking-adapter.d.ts.map +0 -1
  25. package/dist/adapter/colyseus-networking-adapter.js +0 -38
  26. package/dist/adapter/first-party-systems.d.ts +0 -38
  27. package/dist/adapter/first-party-systems.d.ts.map +0 -1
  28. package/dist/adapter/first-party-systems.js +0 -77
  29. package/dist/adapter/game-adapter.d.ts +0 -133
  30. package/dist/adapter/game-adapter.d.ts.map +0 -1
  31. package/dist/adapter/game-adapter.js +0 -10
  32. package/dist/adapter/host-context.d.ts +0 -71
  33. package/dist/adapter/host-context.d.ts.map +0 -1
  34. package/dist/adapter/host-context.js +0 -16
  35. package/dist/adapter/index.d.ts +0 -22
  36. package/dist/adapter/index.d.ts.map +0 -1
  37. package/dist/adapter/index.js +0 -15
  38. package/dist/adapter/ingest/game-contract.d.ts +0 -53
  39. package/dist/adapter/ingest/game-contract.d.ts.map +0 -1
  40. package/dist/adapter/ingest/game-contract.js +0 -30
  41. package/dist/adapter/ingest/overlay-applier.d.ts +0 -118
  42. package/dist/adapter/ingest/overlay-applier.d.ts.map +0 -1
  43. package/dist/adapter/ingest/overlay-applier.js +0 -132
  44. package/dist/adapter/ingest/overlay-apply.d.ts +0 -60
  45. package/dist/adapter/ingest/overlay-apply.d.ts.map +0 -1
  46. package/dist/adapter/ingest/overlay-apply.js +0 -101
  47. package/dist/adapter/ingest/overlay-file.d.ts +0 -79
  48. package/dist/adapter/ingest/overlay-file.d.ts.map +0 -1
  49. package/dist/adapter/ingest/overlay-file.js +0 -66
  50. package/dist/adapter/ingest/overlay-report.d.ts +0 -113
  51. package/dist/adapter/ingest/overlay-report.d.ts.map +0 -1
  52. package/dist/adapter/ingest/overlay-report.js +0 -103
  53. package/dist/adapter/ingest/scene-capture.d.ts +0 -97
  54. package/dist/adapter/ingest/scene-capture.d.ts.map +0 -1
  55. package/dist/adapter/ingest/scene-capture.js +0 -248
  56. package/dist/adapter/ingest/upstream-pin.d.ts +0 -47
  57. package/dist/adapter/ingest/upstream-pin.d.ts.map +0 -1
  58. package/dist/adapter/ingest/upstream-pin.js +0 -50
  59. package/dist/adapter/loop-gate-report.d.ts +0 -34
  60. package/dist/adapter/loop-gate-report.d.ts.map +0 -1
  61. package/dist/adapter/loop-gate-report.js +0 -37
  62. package/dist/adapter/rapier-physics-adapter.d.ts +0 -12
  63. package/dist/adapter/rapier-physics-adapter.d.ts.map +0 -1
  64. package/dist/adapter/rapier-physics-adapter.js +0 -46
  65. package/dist/adapter/system-adapter.d.ts +0 -206
  66. package/dist/adapter/system-adapter.d.ts.map +0 -1
  67. package/dist/adapter/system-adapter.js +0 -13
  68. package/dist/adapter/transform.d.ts +0 -18
  69. package/dist/adapter/transform.d.ts.map +0 -1
  70. package/dist/adapter/transform.js +0 -1
  71. package/dist/adapter/vgai-scene-game-adapter.d.ts +0 -108
  72. package/dist/adapter/vgai-scene-game-adapter.d.ts.map +0 -1
  73. package/dist/adapter/vgai-scene-game-adapter.js +0 -762
  74. package/dist/ai/navigation.d.ts +0 -64
  75. package/dist/ai/navigation.d.ts.map +0 -1
  76. package/dist/ai/navigation.js +0 -133
  77. package/dist/animation/anim-graph-types.d.ts +0 -25
  78. package/dist/animation/anim-graph-types.d.ts.map +0 -1
  79. package/dist/animation/anim-graph-types.js +0 -1
  80. package/dist/animation/animation-clock.d.ts +0 -213
  81. package/dist/animation/animation-clock.d.ts.map +0 -1
  82. package/dist/animation/animation-clock.js +0 -301
  83. package/dist/animation/blend-node.d.ts +0 -22
  84. package/dist/animation/blend-node.d.ts.map +0 -1
  85. package/dist/animation/blend-node.js +0 -97
  86. package/dist/animation/camera-ownership.d.ts +0 -250
  87. package/dist/animation/camera-ownership.d.ts.map +0 -1
  88. package/dist/animation/camera-ownership.js +0 -169
  89. package/dist/animation/cinematic-cues.d.ts +0 -200
  90. package/dist/animation/cinematic-cues.d.ts.map +0 -1
  91. package/dist/animation/cinematic-cues.js +0 -213
  92. package/dist/animation/clip-map.d.ts +0 -12
  93. package/dist/animation/clip-map.d.ts.map +0 -1
  94. package/dist/animation/clip-map.js +0 -37
  95. package/dist/animation/gsap-registration.d.ts +0 -119
  96. package/dist/animation/gsap-registration.d.ts.map +0 -1
  97. package/dist/animation/gsap-registration.js +0 -92
  98. package/dist/animation/theatre-clock-binding.d.ts +0 -89
  99. package/dist/animation/theatre-clock-binding.d.ts.map +0 -1
  100. package/dist/animation/theatre-clock-binding.js +0 -29
  101. package/dist/animation/theatre-director.d.ts +0 -242
  102. package/dist/animation/theatre-director.d.ts.map +0 -1
  103. package/dist/animation/theatre-director.js +0 -235
  104. package/dist/animation/theatre-object-binding.d.ts +0 -305
  105. package/dist/animation/theatre-object-binding.d.ts.map +0 -1
  106. package/dist/animation/theatre-object-binding.js +0 -351
  107. package/dist/animation/xstate-animation-binding.d.ts +0 -56
  108. package/dist/animation/xstate-animation-binding.d.ts.map +0 -1
  109. package/dist/animation/xstate-animation-binding.js +0 -331
  110. package/dist/animation/xstate-animation-meta.d.ts +0 -266
  111. package/dist/animation/xstate-animation-meta.d.ts.map +0 -1
  112. package/dist/animation/xstate-animation-meta.js +0 -252
  113. package/dist/assets.d.ts +0 -26
  114. package/dist/assets.d.ts.map +0 -1
  115. package/dist/assets.js +0 -55
  116. package/dist/audio/index.d.ts +0 -4
  117. package/dist/audio/index.d.ts.map +0 -1
  118. package/dist/audio/index.js +0 -24
  119. package/dist/audio/tone-clock-binding.d.ts +0 -75
  120. package/dist/audio/tone-clock-binding.d.ts.map +0 -1
  121. package/dist/audio/tone-clock-binding.js +0 -29
  122. package/dist/audio/tone-context.d.ts +0 -114
  123. package/dist/audio/tone-context.d.ts.map +0 -1
  124. package/dist/audio/tone-context.js +0 -39
  125. package/dist/audio/tone-offline-render.d.ts +0 -90
  126. package/dist/audio/tone-offline-render.d.ts.map +0 -1
  127. package/dist/audio/tone-offline-render.js +0 -56
  128. package/dist/audio/wav-encode.d.ts +0 -38
  129. package/dist/audio/wav-encode.d.ts.map +0 -1
  130. package/dist/audio/wav-encode.js +0 -97
  131. package/dist/character/cloth-sim.d.ts +0 -179
  132. package/dist/character/cloth-sim.d.ts.map +0 -1
  133. package/dist/character/cloth-sim.js +0 -334
  134. package/dist/character/spring-chain.d.ts +0 -135
  135. package/dist/character/spring-chain.d.ts.map +0 -1
  136. package/dist/character/spring-chain.js +0 -165
  137. package/dist/core/game-loop.d.ts +0 -42
  138. package/dist/core/game-loop.d.ts.map +0 -1
  139. package/dist/core/game-loop.js +0 -167
  140. package/dist/core/seeded-random.d.ts +0 -69
  141. package/dist/core/seeded-random.d.ts.map +0 -1
  142. package/dist/core/seeded-random.js +0 -121
  143. package/dist/core/system-runner.d.ts +0 -120
  144. package/dist/core/system-runner.d.ts.map +0 -1
  145. package/dist/core/system-runner.js +0 -297
  146. package/dist/core/types.d.ts +0 -92
  147. package/dist/core/types.d.ts.map +0 -1
  148. package/dist/core/types.js +0 -25
  149. package/dist/data/data-asset.d.ts +0 -101
  150. package/dist/data/data-asset.d.ts.map +0 -1
  151. package/dist/data/data-asset.js +0 -122
  152. package/dist/data/data-check-core.d.ts +0 -110
  153. package/dist/data/data-check-core.d.ts.map +0 -1
  154. package/dist/data/data-check-core.js +0 -178
  155. package/dist/data/data-ref.d.ts +0 -79
  156. package/dist/data/data-ref.d.ts.map +0 -1
  157. package/dist/data/data-ref.js +0 -130
  158. package/dist/data/vite-plugin-data.d.ts +0 -79
  159. package/dist/data/vite-plugin-data.d.ts.map +0 -1
  160. package/dist/data/vite-plugin-data.js +0 -217
  161. package/dist/dev/console-bridge.d.ts +0 -22
  162. package/dist/dev/console-bridge.d.ts.map +0 -1
  163. package/dist/dev/console-bridge.js +0 -71
  164. package/dist/dev/debug-draw.d.ts +0 -24
  165. package/dist/dev/debug-draw.d.ts.map +0 -1
  166. package/dist/dev/debug-draw.js +0 -73
  167. package/dist/dev/logger.d.ts +0 -30
  168. package/dist/dev/logger.d.ts.map +0 -1
  169. package/dist/dev/logger.js +0 -90
  170. package/dist/dev/performance-profiler.d.ts +0 -60
  171. package/dist/dev/performance-profiler.d.ts.map +0 -1
  172. package/dist/dev/performance-profiler.js +0 -181
  173. package/dist/dev/webgl-gpu-timer.d.ts +0 -8
  174. package/dist/dev/webgl-gpu-timer.d.ts.map +0 -1
  175. package/dist/dev/webgl-gpu-timer.js +0 -52
  176. package/dist/ecs/component-manager.d.ts +0 -205
  177. package/dist/ecs/component-manager.d.ts.map +0 -1
  178. package/dist/ecs/component-manager.js +0 -706
  179. package/dist/ecs/game-component.d.ts +0 -146
  180. package/dist/ecs/game-component.d.ts.map +0 -1
  181. package/dist/ecs/game-component.js +0 -141
  182. package/dist/ecs/hmr-swap-report.d.ts +0 -53
  183. package/dist/ecs/hmr-swap-report.d.ts.map +0 -1
  184. package/dist/ecs/hmr-swap-report.js +0 -55
  185. package/dist/humanoid/bake.operation.d.ts +0 -119
  186. package/dist/humanoid/bake.operation.d.ts.map +0 -1
  187. package/dist/humanoid/bake.operation.js +0 -228
  188. package/dist/humanoid/body.d.ts +0 -101
  189. package/dist/humanoid/body.d.ts.map +0 -1
  190. package/dist/humanoid/body.js +0 -530
  191. package/dist/humanoid/clips.d.ts +0 -62
  192. package/dist/humanoid/clips.d.ts.map +0 -1
  193. package/dist/humanoid/clips.js +0 -121
  194. package/dist/humanoid/compose.d.ts +0 -75
  195. package/dist/humanoid/compose.d.ts.map +0 -1
  196. package/dist/humanoid/compose.js +0 -176
  197. package/dist/humanoid/generate.d.ts +0 -92
  198. package/dist/humanoid/generate.d.ts.map +0 -1
  199. package/dist/humanoid/generate.js +0 -124
  200. package/dist/humanoid/index.d.ts +0 -24
  201. package/dist/humanoid/index.d.ts.map +0 -1
  202. package/dist/humanoid/index.js +0 -18
  203. package/dist/humanoid/schema.d.ts +0 -35
  204. package/dist/humanoid/schema.d.ts.map +0 -1
  205. package/dist/humanoid/schema.js +0 -87
  206. package/dist/humanoid/skeleton.d.ts +0 -103
  207. package/dist/humanoid/skeleton.d.ts.map +0 -1
  208. package/dist/humanoid/skeleton.js +0 -289
  209. package/dist/index.d.ts +0 -37
  210. package/dist/index.d.ts.map +0 -1
  211. package/dist/index.js +0 -30
  212. package/dist/input/input-manager.d.ts +0 -945
  213. package/dist/input/input-manager.d.ts.map +0 -1
  214. package/dist/input/input-manager.js +0 -2207
  215. package/dist/input/input-types.d.ts +0 -174
  216. package/dist/input/input-types.d.ts.map +0 -1
  217. package/dist/input/input-types.js +0 -1
  218. package/dist/input/prompt-labels.d.ts +0 -21
  219. package/dist/input/prompt-labels.d.ts.map +0 -1
  220. package/dist/input/prompt-labels.js +0 -121
  221. package/dist/input/rebind-controller.d.ts +0 -59
  222. package/dist/input/rebind-controller.d.ts.map +0 -1
  223. package/dist/input/rebind-controller.js +0 -85
  224. package/dist/input/schema.d.ts +0 -16
  225. package/dist/input/schema.d.ts.map +0 -1
  226. package/dist/input/schema.js +0 -228
  227. package/dist/loader.d.ts +0 -43
  228. package/dist/loader.d.ts.map +0 -1
  229. package/dist/loader.js +0 -59
  230. package/dist/manifest/index.d.ts +0 -5
  231. package/dist/manifest/index.d.ts.map +0 -1
  232. package/dist/manifest/index.js +0 -8
  233. package/dist/manifest/load-file.d.ts +0 -4
  234. package/dist/manifest/load-file.d.ts.map +0 -1
  235. package/dist/manifest/load-file.js +0 -14
  236. package/dist/manifest/load.d.ts +0 -144
  237. package/dist/manifest/load.d.ts.map +0 -1
  238. package/dist/manifest/load.js +0 -273
  239. package/dist/manifest/schema.d.ts +0 -230
  240. package/dist/manifest/schema.d.ts.map +0 -1
  241. package/dist/manifest/schema.js +0 -394
  242. package/dist/physics/collision-system.d.ts +0 -41
  243. package/dist/physics/collision-system.d.ts.map +0 -1
  244. package/dist/physics/collision-system.js +0 -64
  245. package/dist/physics/physics-registry.d.ts +0 -45
  246. package/dist/physics/physics-registry.d.ts.map +0 -1
  247. package/dist/physics/physics-registry.js +0 -65
  248. package/dist/physics/transform-writer.d.ts +0 -16
  249. package/dist/physics/transform-writer.d.ts.map +0 -1
  250. package/dist/physics/transform-writer.js +0 -38
  251. package/dist/physics/trigger-dispatch.d.ts +0 -24
  252. package/dist/physics/trigger-dispatch.d.ts.map +0 -1
  253. package/dist/physics/trigger-dispatch.js +0 -80
  254. package/dist/react/game-state.d.ts +0 -156
  255. package/dist/react/game-state.d.ts.map +0 -1
  256. package/dist/react/game-state.js +0 -222
  257. package/dist/react/root-adapter.d.ts +0 -11
  258. package/dist/react/root-adapter.d.ts.map +0 -1
  259. package/dist/react/root-adapter.js +0 -41
  260. package/dist/react/unmanaged-root-detector.d.ts +0 -12
  261. package/dist/react/unmanaged-root-detector.d.ts.map +0 -1
  262. package/dist/react/unmanaged-root-detector.js +0 -45
  263. package/dist/react/use-data.d.ts +0 -60
  264. package/dist/react/use-data.d.ts.map +0 -1
  265. package/dist/react/use-data.js +0 -101
  266. package/dist/react/use-selection.d.ts +0 -75
  267. package/dist/react/use-selection.d.ts.map +0 -1
  268. package/dist/react/use-selection.js +0 -90
  269. package/dist/render/auto-batcher.d.ts +0 -34
  270. package/dist/render/auto-batcher.d.ts.map +0 -1
  271. package/dist/render/auto-batcher.js +0 -140
  272. package/dist/render/render-batch-system.d.ts +0 -33
  273. package/dist/render/render-batch-system.d.ts.map +0 -1
  274. package/dist/render/render-batch-system.js +0 -230
  275. package/dist/render/render-features.d.ts +0 -47
  276. package/dist/render/render-features.d.ts.map +0 -1
  277. package/dist/render/render-features.js +0 -105
  278. package/dist/render/render-settings.d.ts +0 -36
  279. package/dist/render/render-settings.d.ts.map +0 -1
  280. package/dist/render/render-settings.js +0 -51
  281. package/dist/runtime/create-runtime.d.ts +0 -249
  282. package/dist/runtime/create-runtime.d.ts.map +0 -1
  283. package/dist/runtime/create-runtime.js +0 -641
  284. package/dist/runtime/debug-bridge.d.ts +0 -257
  285. package/dist/runtime/debug-bridge.d.ts.map +0 -1
  286. package/dist/runtime/debug-bridge.js +0 -224
  287. package/dist/runtime/debug-registry.d.ts +0 -288
  288. package/dist/runtime/debug-registry.d.ts.map +0 -1
  289. package/dist/runtime/debug-registry.js +0 -513
  290. package/dist/runtime/frame-selector-cache.d.ts +0 -41
  291. package/dist/runtime/frame-selector-cache.d.ts.map +0 -1
  292. package/dist/runtime/frame-selector-cache.js +0 -65
  293. package/dist/runtime/game.d.ts +0 -496
  294. package/dist/runtime/game.d.ts.map +0 -1
  295. package/dist/runtime/game.js +0 -741
  296. package/dist/runtime/gameplay-rng-trap.d.ts +0 -48
  297. package/dist/runtime/gameplay-rng-trap.d.ts.map +0 -1
  298. package/dist/runtime/gameplay-rng-trap.js +0 -96
  299. package/dist/runtime/input-router.d.ts +0 -78
  300. package/dist/runtime/input-router.d.ts.map +0 -1
  301. package/dist/runtime/input-router.js +0 -171
  302. package/dist/runtime/mount-game.d.ts +0 -129
  303. package/dist/runtime/mount-game.d.ts.map +0 -1
  304. package/dist/runtime/mount-game.js +0 -152
  305. package/dist/runtime/mount-manifest.d.ts +0 -173
  306. package/dist/runtime/mount-manifest.d.ts.map +0 -1
  307. package/dist/runtime/mount-manifest.js +0 -297
  308. package/dist/runtime/render-audio-control.d.ts +0 -110
  309. package/dist/runtime/render-audio-control.d.ts.map +0 -1
  310. package/dist/runtime/render-audio-control.js +0 -111
  311. package/dist/runtime/render-control.d.ts +0 -291
  312. package/dist/runtime/render-control.d.ts.map +0 -1
  313. package/dist/runtime/render-control.js +0 -264
  314. package/dist/runtime/render-seed.d.ts +0 -57
  315. package/dist/runtime/render-seed.d.ts.map +0 -1
  316. package/dist/runtime/render-seed.js +0 -74
  317. package/dist/runtime/state-bridge.d.ts +0 -61
  318. package/dist/runtime/state-bridge.d.ts.map +0 -1
  319. package/dist/runtime/state-bridge.js +0 -63
  320. package/dist/runtime/types.d.ts +0 -253
  321. package/dist/runtime/types.d.ts.map +0 -1
  322. package/dist/runtime/types.js +0 -1
  323. package/dist/scene/asset-loaders.d.ts +0 -79
  324. package/dist/scene/asset-loaders.d.ts.map +0 -1
  325. package/dist/scene/asset-loaders.js +0 -141
  326. package/dist/scene/asset-paths.d.ts +0 -11
  327. package/dist/scene/asset-paths.d.ts.map +0 -1
  328. package/dist/scene/asset-paths.js +0 -108
  329. package/dist/scene/asset-ref-check.d.ts +0 -88
  330. package/dist/scene/asset-ref-check.d.ts.map +0 -1
  331. package/dist/scene/asset-ref-check.js +0 -214
  332. package/dist/scene/asset-registry.d.ts +0 -38
  333. package/dist/scene/asset-registry.d.ts.map +0 -1
  334. package/dist/scene/asset-registry.js +0 -66
  335. package/dist/scene/collider-dimensions.d.ts +0 -63
  336. package/dist/scene/collider-dimensions.d.ts.map +0 -1
  337. package/dist/scene/collider-dimensions.js +0 -98
  338. package/dist/scene/component-registry.d.ts +0 -22
  339. package/dist/scene/component-registry.d.ts.map +0 -1
  340. package/dist/scene/component-registry.js +0 -37
  341. package/dist/scene/defaults.d.ts +0 -252
  342. package/dist/scene/defaults.d.ts.map +0 -1
  343. package/dist/scene/defaults.js +0 -151
  344. package/dist/scene/geometries/index.d.ts +0 -8
  345. package/dist/scene/geometries/index.d.ts.map +0 -1
  346. package/dist/scene/geometries/index.js +0 -7
  347. package/dist/scene/geometries/terrain.d.ts +0 -2
  348. package/dist/scene/geometries/terrain.d.ts.map +0 -1
  349. package/dist/scene/geometries/terrain.js +0 -37
  350. package/dist/scene/geometry-registry.d.ts +0 -24
  351. package/dist/scene/geometry-registry.d.ts.map +0 -1
  352. package/dist/scene/geometry-registry.js +0 -20
  353. package/dist/scene/instance-registry.d.ts +0 -36
  354. package/dist/scene/instance-registry.d.ts.map +0 -1
  355. package/dist/scene/instance-registry.js +0 -55
  356. package/dist/scene/instancers/grid.d.ts +0 -2
  357. package/dist/scene/instancers/grid.d.ts.map +0 -1
  358. package/dist/scene/instancers/grid.js +0 -36
  359. package/dist/scene/instancers/index.d.ts +0 -8
  360. package/dist/scene/instancers/index.d.ts.map +0 -1
  361. package/dist/scene/instancers/index.js +0 -7
  362. package/dist/scene/light-camera-factory.d.ts +0 -23
  363. package/dist/scene/light-camera-factory.d.ts.map +0 -1
  364. package/dist/scene/light-camera-factory.js +0 -68
  365. package/dist/scene/material-factory.d.ts +0 -17
  366. package/dist/scene/material-factory.d.ts.map +0 -1
  367. package/dist/scene/material-factory.js +0 -197
  368. package/dist/scene/material-registry.d.ts +0 -40
  369. package/dist/scene/material-registry.d.ts.map +0 -1
  370. package/dist/scene/material-registry.js +0 -44
  371. package/dist/scene/materials/index.d.ts +0 -8
  372. package/dist/scene/materials/index.d.ts.map +0 -1
  373. package/dist/scene/materials/index.js +0 -7
  374. package/dist/scene/materials/water.d.ts +0 -2
  375. package/dist/scene/materials/water.d.ts.map +0 -1
  376. package/dist/scene/materials/water.js +0 -54
  377. package/dist/scene/parse.d.ts +0 -23
  378. package/dist/scene/parse.d.ts.map +0 -1
  379. package/dist/scene/parse.js +0 -179
  380. package/dist/scene/particles-factory.d.ts +0 -33
  381. package/dist/scene/particles-factory.d.ts.map +0 -1
  382. package/dist/scene/particles-factory.js +0 -282
  383. package/dist/scene/scene-apply.d.ts +0 -109
  384. package/dist/scene/scene-apply.d.ts.map +0 -1
  385. package/dist/scene/scene-apply.js +0 -370
  386. package/dist/scene/scene-diff-schema.d.ts +0 -285
  387. package/dist/scene/scene-diff-schema.d.ts.map +0 -1
  388. package/dist/scene/scene-diff-schema.js +0 -92
  389. package/dist/scene/scene-diff-types.d.ts +0 -40
  390. package/dist/scene/scene-diff-types.d.ts.map +0 -1
  391. package/dist/scene/scene-diff-types.js +0 -14
  392. package/dist/scene/scene-loader.d.ts +0 -167
  393. package/dist/scene/scene-loader.d.ts.map +0 -1
  394. package/dist/scene/scene-loader.js +0 -1211
  395. package/dist/scene/scene-query.d.ts +0 -11
  396. package/dist/scene/scene-query.d.ts.map +0 -1
  397. package/dist/scene/scene-query.js +0 -63
  398. package/dist/scene/scene-types.d.ts +0 -10
  399. package/dist/scene/scene-types.d.ts.map +0 -1
  400. package/dist/scene/scene-types.js +0 -8
  401. package/dist/scene/scene-version.d.ts +0 -26
  402. package/dist/scene/scene-version.d.ts.map +0 -1
  403. package/dist/scene/scene-version.js +0 -34
  404. package/dist/scene/schema/animation.d.ts +0 -8
  405. package/dist/scene/schema/animation.d.ts.map +0 -1
  406. package/dist/scene/schema/animation.js +0 -42
  407. package/dist/scene/schema/audio.d.ts +0 -13
  408. package/dist/scene/schema/audio.d.ts.map +0 -1
  409. package/dist/scene/schema/audio.js +0 -22
  410. package/dist/scene/schema/camera.d.ts +0 -28
  411. package/dist/scene/schema/camera.d.ts.map +0 -1
  412. package/dist/scene/schema/camera.js +0 -17
  413. package/dist/scene/schema/collider.d.ts +0 -40
  414. package/dist/scene/schema/collider.d.ts.map +0 -1
  415. package/dist/scene/schema/collider.js +0 -55
  416. package/dist/scene/schema/entity-ref.d.ts +0 -31
  417. package/dist/scene/schema/entity-ref.d.ts.map +0 -1
  418. package/dist/scene/schema/entity-ref.js +0 -61
  419. package/dist/scene/schema/entity.d.ts +0 -1036
  420. package/dist/scene/schema/entity.d.ts.map +0 -1
  421. package/dist/scene/schema/entity.js +0 -153
  422. package/dist/scene/schema/environment.d.ts +0 -425
  423. package/dist/scene/schema/environment.d.ts.map +0 -1
  424. package/dist/scene/schema/environment.js +0 -357
  425. package/dist/scene/schema/index.d.ts +0 -37
  426. package/dist/scene/schema/index.d.ts.map +0 -1
  427. package/dist/scene/schema/index.js +0 -19
  428. package/dist/scene/schema/instances.d.ts +0 -14
  429. package/dist/scene/schema/instances.d.ts.map +0 -1
  430. package/dist/scene/schema/instances.js +0 -28
  431. package/dist/scene/schema/joint.d.ts +0 -23
  432. package/dist/scene/schema/joint.d.ts.map +0 -1
  433. package/dist/scene/schema/joint.js +0 -23
  434. package/dist/scene/schema/light.d.ts +0 -38
  435. package/dist/scene/schema/light.d.ts.map +0 -1
  436. package/dist/scene/schema/light.js +0 -26
  437. package/dist/scene/schema/material.d.ts +0 -199
  438. package/dist/scene/schema/material.d.ts.map +0 -1
  439. package/dist/scene/schema/material.js +0 -103
  440. package/dist/scene/schema/mesh.d.ts +0 -48
  441. package/dist/scene/schema/mesh.d.ts.map +0 -1
  442. package/dist/scene/schema/mesh.js +0 -82
  443. package/dist/scene/schema/particles.d.ts +0 -2178
  444. package/dist/scene/schema/particles.d.ts.map +0 -1
  445. package/dist/scene/schema/particles.js +0 -321
  446. package/dist/scene/schema/physics.d.ts +0 -56
  447. package/dist/scene/schema/physics.d.ts.map +0 -1
  448. package/dist/scene/schema/physics.js +0 -37
  449. package/dist/scene/schema/scene-file.d.ts +0 -303
  450. package/dist/scene/schema/scene-file.d.ts.map +0 -1
  451. package/dist/scene/schema/scene-file.js +0 -256
  452. package/dist/scene/schema/shadow.d.ts +0 -28
  453. package/dist/scene/schema/shadow.d.ts.map +0 -1
  454. package/dist/scene/schema/shadow.js +0 -20
  455. package/dist/scene/schema/spline.d.ts +0 -25
  456. package/dist/scene/schema/spline.d.ts.map +0 -1
  457. package/dist/scene/schema/spline.js +0 -15
  458. package/dist/scene/schema/tuples.d.ts +0 -12
  459. package/dist/scene/schema/tuples.d.ts.map +0 -1
  460. package/dist/scene/schema/tuples.js +0 -14
  461. package/dist/scene/user-data.d.ts +0 -185
  462. package/dist/scene/user-data.d.ts.map +0 -1
  463. package/dist/scene/user-data.js +0 -144
  464. package/dist/setup/setup-audio.d.ts +0 -20
  465. package/dist/setup/setup-audio.d.ts.map +0 -1
  466. package/dist/setup/setup-audio.js +0 -41
  467. package/dist/setup/setup-particles.d.ts +0 -17
  468. package/dist/setup/setup-particles.d.ts.map +0 -1
  469. package/dist/setup/setup-particles.js +0 -16
  470. package/dist/setup/setup-physics.d.ts +0 -25
  471. package/dist/setup/setup-physics.d.ts.map +0 -1
  472. package/dist/setup/setup-physics.js +0 -51
  473. package/dist/setup/setup-renderer.d.ts +0 -69
  474. package/dist/setup/setup-renderer.d.ts.map +0 -1
  475. package/dist/setup/setup-renderer.js +0 -363
  476. package/dist/tools/define-tool.d.ts +0 -130
  477. package/dist/tools/define-tool.d.ts.map +0 -1
  478. package/dist/tools/define-tool.js +0 -96
  479. package/dist/world2d/authoring-2d.d.ts +0 -80
  480. package/dist/world2d/authoring-2d.d.ts.map +0 -1
  481. package/dist/world2d/authoring-2d.js +0 -195
  482. package/dist/world2d/capture-to-scene2d.d.ts +0 -5
  483. package/dist/world2d/capture-to-scene2d.d.ts.map +0 -1
  484. package/dist/world2d/capture-to-scene2d.js +0 -49
  485. package/dist/world2d/collision-2d.d.ts +0 -52
  486. package/dist/world2d/collision-2d.d.ts.map +0 -1
  487. package/dist/world2d/collision-2d.js +0 -70
  488. package/dist/world2d/components-2d.d.ts +0 -47
  489. package/dist/world2d/components-2d.d.ts.map +0 -1
  490. package/dist/world2d/components-2d.js +0 -77
  491. package/dist/world2d/index.d.ts +0 -34
  492. package/dist/world2d/index.d.ts.map +0 -1
  493. package/dist/world2d/index.js +0 -32
  494. package/dist/world2d/ingest-iframe-2d.d.ts +0 -82
  495. package/dist/world2d/ingest-iframe-2d.d.ts.map +0 -1
  496. package/dist/world2d/ingest-iframe-2d.js +0 -166
  497. package/dist/world2d/ingest2d.d.ts +0 -97
  498. package/dist/world2d/ingest2d.d.ts.map +0 -1
  499. package/dist/world2d/ingest2d.js +0 -40
  500. package/dist/world2d/physics2d-registry.d.ts +0 -24
  501. package/dist/world2d/physics2d-registry.d.ts.map +0 -1
  502. package/dist/world2d/physics2d-registry.js +0 -38
  503. package/dist/world2d/pixi-game-adapter.d.ts +0 -107
  504. package/dist/world2d/pixi-game-adapter.d.ts.map +0 -1
  505. package/dist/world2d/pixi-game-adapter.js +0 -210
  506. package/dist/world2d/pixi-surface.d.ts +0 -39
  507. package/dist/world2d/pixi-surface.d.ts.map +0 -1
  508. package/dist/world2d/pixi-surface.js +0 -47
  509. package/dist/world2d/scene-capture-2d.d.ts +0 -43
  510. package/dist/world2d/scene-capture-2d.d.ts.map +0 -1
  511. package/dist/world2d/scene-capture-2d.js +0 -92
  512. package/dist/world2d/scene2d-loader.d.ts +0 -27
  513. package/dist/world2d/scene2d-loader.d.ts.map +0 -1
  514. package/dist/world2d/scene2d-loader.js +0 -275
  515. package/dist/world2d/schema/entity2d.d.ts +0 -102
  516. package/dist/world2d/schema/entity2d.d.ts.map +0 -1
  517. package/dist/world2d/schema/entity2d.js +0 -119
  518. package/dist/world2d/schema/physics2d.d.ts +0 -46
  519. package/dist/world2d/schema/physics2d.d.ts.map +0 -1
  520. package/dist/world2d/schema/physics2d.js +0 -45
  521. package/dist/world2d/schema/sprite.d.ts +0 -42
  522. package/dist/world2d/schema/sprite.d.ts.map +0 -1
  523. package/dist/world2d/schema/sprite.js +0 -63
  524. package/dist/world2d/schema/tilemap.d.ts +0 -15
  525. package/dist/world2d/schema/tilemap.d.ts.map +0 -1
  526. package/dist/world2d/schema/tilemap.js +0 -19
  527. package/dist/world2d/schema/tuples2d.d.ts +0 -20
  528. package/dist/world2d/schema/tuples2d.d.ts.map +0 -1
  529. package/dist/world2d/schema/tuples2d.js +0 -19
  530. package/dist/world2d/system-adapters-2d.d.ts +0 -16
  531. package/dist/world2d/system-adapters-2d.d.ts.map +0 -1
  532. package/dist/world2d/system-adapters-2d.js +0 -37
  533. package/dist/world2d/transform-writer-2d.d.ts +0 -16
  534. package/dist/world2d/transform-writer-2d.d.ts.map +0 -1
  535. package/dist/world2d/transform-writer-2d.js +0 -22
  536. package/dist/world2d/types.d.ts +0 -59
  537. package/dist/world2d/types.d.ts.map +0 -1
  538. package/dist/world2d/types.js +0 -1
@@ -1,113 +0,0 @@
1
- /**
2
- * Overlay apply report — D9 (docs/DECISIONS-PENDING.md §D9): decide + surface
3
- * what happens when a saved ingest overlay is reapplied onto a scene that may
4
- * have moved on since the overlay was authored (a vendored game bump, or a
5
- * dynamic subtree that never respawned). Two independent signals, either of
6
- * which is worth a loud (never silent) structured warning:
7
- * - a GAME-VERSION mismatch: the overlay's `authoredAgainst.gameVersion`
8
- * (`./overlay-file.ts`'s envelope, stamped from the manifest's `version`
9
- * at save time) disagrees with the currently-mounted game's version;
10
- * - ORPHANED ids: structural-path ids in the overlay that resolved to
11
- * nothing on the current scene walk (`./overlay-apply.ts`'s
12
- * `applyOverlayToObjects`).
13
- *
14
- * Neither condition blocks mounting — the overlay still applies everything it
15
- * CAN; this module only decides whether/how to report what it couldn't.
16
- *
17
- * This is the SEAM T3.8 (the runtime overlay applier, i.e. reapplying an
18
- * ingest overlay against a shipped/played build rather than the editor)
19
- * reuses: `./overlay-applier.ts`'s `applyVgaiOverlay` builds + logs this EXACT
20
- * report shape, same as the editor does. Moved here from the editor-only
21
- * module that used to own it (`packages/editor/src/authoring/overlay-report.ts`,
22
- * which now re-exports everything below unchanged plus the editor-only
23
- * "active report" banner slot) — kept dependency-free (no `editor-console`/
24
- * `window` import) so it stays importable from a headless runtime context —
25
- * same discipline as `../achieved-tier.ts`.
26
- *
27
- * R5 (docs/MASTER-ARCHITECTURE-REVIEW.md §4(c)/§7.1 item 9) adds a THIRD
28
- * independent signal alongside version-mismatch/orphans: an UPSTREAM-PIN
29
- * mismatch. `gameVersion` alone cannot catch a same-slot substitution after a
30
- * re-vendor (structural ids are position+type+name; a re-vendor that keeps a
31
- * slot's shape reapplies the overlay onto a semantically different object
32
- * with `applied:1, orphanedIds:[]`, and every vendored game's manifest
33
- * `version` is hand-set and need not change on a re-vendor). The upstream pin
34
- * (`./upstream-pin.ts`, read from the vendored game's `UPSTREAM.md`) is bound
35
- * to the thing that actually changes. Like the other two signals, a mismatch
36
- * never blocks application — it's a report, not a block (matching orphan
37
- * semantics) — so a re-vendor surfaces as an explicit "authored against pin
38
- * X, applying onto pin Y" instead of silent success.
39
- */
40
- /** One mount's version + orphan findings — the D9 acceptance-criteria shape. */
41
- export interface OverlayApplyReport {
42
- gameId: string;
43
- /** `authoredAgainst.gameVersion` from the loaded overlay envelope, or `null` if never stamped. */
44
- authoredAgainst: string | null;
45
- /** The currently-mounted game's manifest `version`, or `null` if unknown at this call site. */
46
- currentVersion: string | null;
47
- /** Both sides known AND different — never true if either side is `null` (anti-shim: no guessing). */
48
- versionMismatch: boolean;
49
- applied: number;
50
- /** Structural-path ids present in the overlay that resolved to nothing on this scene walk. */
51
- orphanedIds: string[];
52
- /**
53
- * R5 — upstream-pin identity check (see this module's header). Distinct
54
- * from `versionMismatch`/`orphanedIds`: it catches a same-slot
55
- * SUBSTITUTION (id persists, meaning changed) that those two cannot.
56
- */
57
- upstreamPin: {
58
- /** The pin the overlay was authored against, or `null` if never recorded/discoverable. */
59
- authored: string | null;
60
- /** The currently-mounted game's own discoverable pin, or `null` if undiscoverable here
61
- * (e.g. the runtime ship-path applier, which has no `UPSTREAM.md` access at all — a
62
- * documented no-op there — or an externally-authored, non-vendored project). */
63
- current: string | null;
64
- /**
65
- * Whether the SAVED overlay envelope recorded the upstream-pin concept at
66
- * all (i.e. `authoredAgainst.upstreamPin` was a present key, even if its
67
- * value was `null`). `false` means a legacy overlay — saved by pre-R5
68
- * code (or the pre-D9 flat-file shape) — for which the pin check is
69
- * skipped entirely, not silently treated as a match. This is the
70
- * "explicit legacy indication" the report surfaces so a legacy overlay's
71
- * clean apply doesn't read as "verified" when it was never checked.
72
- */
73
- recorded: boolean;
74
- /** `recorded` AND both sides known AND different — never true otherwise (anti-shim). */
75
- mismatch: boolean;
76
- };
77
- }
78
- /** Greppable prefix shared by every overlay-related log line (mirrors `achieved-tier.ts`'s `TIER_SHORTFALL_PREFIX`). */
79
- export declare const OVERLAY_REPORT_PREFIX = "overlay-report";
80
- /** Build the report from a mount's raw findings — pure, no logging. */
81
- export declare function buildOverlayApplyReport(args: {
82
- gameId: string;
83
- authoredAgainst: string | null;
84
- currentVersion: string | null;
85
- applied: number;
86
- orphanedIds: string[];
87
- /**
88
- * R5: the loaded overlay's `authoredAgainst.upstreamPin`. Pass `undefined`
89
- * (or omit) when the saved envelope never had the key at all (legacy
90
- * overlay — `upstreamPin.recorded` becomes `false`); pass `null` when the
91
- * envelope DID have the key but its value was `null` (R5-aware code
92
- * looked, found nothing — `recorded` is `true`, `authored` is `null`); pass
93
- * the pin string otherwise.
94
- */
95
- authoredUpstreamPin?: string | null | undefined;
96
- /**
97
- * R5: the currently-mounted game's own discoverable pin, or `null`/omitted
98
- * when undiscoverable at this call site (anti-shim: never fabricated).
99
- */
100
- currentUpstreamPin?: string | null | undefined;
101
- }): OverlayApplyReport;
102
- /** Whether this report is worth surfacing (mismatch OR any orphan) — pure, no logging. */
103
- export declare function overlayReportWarrants(report: OverlayApplyReport): boolean;
104
- /** The one shared message shape — greppable on the prefix, JSON-parseable on the trailing payload. */
105
- export declare function formatOverlayApplyReportMessage(report: OverlayApplyReport): string;
106
- /**
107
- * Emit the ONE structured `console.warn` this report warrants (mirroring the
108
- * tier-shortfall pattern), or do nothing when neither signal fires. Returns
109
- * whether it warned (callers that also want the panel-visible `editorConsole`
110
- * echo, or the inline banner, use the return value / the report itself).
111
- */
112
- export declare function logOverlayApplyReport(report: OverlayApplyReport): boolean;
113
- //# sourceMappingURL=overlay-report.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlay-report.d.ts","sourceRoot":"","sources":["../../../src/adapter/ingest/overlay-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,gFAAgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,kGAAkG;IAClG,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,+FAA+F;IAC/F,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,qGAAqG;IACrG,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,8FAA8F;IAC9F,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB;;;;OAIG;IACH,WAAW,EAAE;QACX,0FAA0F;QAC1F,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB;;wFAEgF;QAChF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB;;;;;;;;WAQG;QACH,QAAQ,EAAE,OAAO,CAAC;QAClB,wFAAwF;QACxF,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,wHAAwH;AACxH,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AAEtD,uEAAuE;AACvE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChD;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAChD,GAAG,kBAAkB,CAwBrB;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAEzE;AAED,sGAAsG;AACtG,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAuBlF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CASzE"}
@@ -1,103 +0,0 @@
1
- /**
2
- * Overlay apply report — D9 (docs/DECISIONS-PENDING.md §D9): decide + surface
3
- * what happens when a saved ingest overlay is reapplied onto a scene that may
4
- * have moved on since the overlay was authored (a vendored game bump, or a
5
- * dynamic subtree that never respawned). Two independent signals, either of
6
- * which is worth a loud (never silent) structured warning:
7
- * - a GAME-VERSION mismatch: the overlay's `authoredAgainst.gameVersion`
8
- * (`./overlay-file.ts`'s envelope, stamped from the manifest's `version`
9
- * at save time) disagrees with the currently-mounted game's version;
10
- * - ORPHANED ids: structural-path ids in the overlay that resolved to
11
- * nothing on the current scene walk (`./overlay-apply.ts`'s
12
- * `applyOverlayToObjects`).
13
- *
14
- * Neither condition blocks mounting — the overlay still applies everything it
15
- * CAN; this module only decides whether/how to report what it couldn't.
16
- *
17
- * This is the SEAM T3.8 (the runtime overlay applier, i.e. reapplying an
18
- * ingest overlay against a shipped/played build rather than the editor)
19
- * reuses: `./overlay-applier.ts`'s `applyVgaiOverlay` builds + logs this EXACT
20
- * report shape, same as the editor does. Moved here from the editor-only
21
- * module that used to own it (`packages/editor/src/authoring/overlay-report.ts`,
22
- * which now re-exports everything below unchanged plus the editor-only
23
- * "active report" banner slot) — kept dependency-free (no `editor-console`/
24
- * `window` import) so it stays importable from a headless runtime context —
25
- * same discipline as `../achieved-tier.ts`.
26
- *
27
- * R5 (docs/MASTER-ARCHITECTURE-REVIEW.md §4(c)/§7.1 item 9) adds a THIRD
28
- * independent signal alongside version-mismatch/orphans: an UPSTREAM-PIN
29
- * mismatch. `gameVersion` alone cannot catch a same-slot substitution after a
30
- * re-vendor (structural ids are position+type+name; a re-vendor that keeps a
31
- * slot's shape reapplies the overlay onto a semantically different object
32
- * with `applied:1, orphanedIds:[]`, and every vendored game's manifest
33
- * `version` is hand-set and need not change on a re-vendor). The upstream pin
34
- * (`./upstream-pin.ts`, read from the vendored game's `UPSTREAM.md`) is bound
35
- * to the thing that actually changes. Like the other two signals, a mismatch
36
- * never blocks application — it's a report, not a block (matching orphan
37
- * semantics) — so a re-vendor surfaces as an explicit "authored against pin
38
- * X, applying onto pin Y" instead of silent success.
39
- */
40
- /** Greppable prefix shared by every overlay-related log line (mirrors `achieved-tier.ts`'s `TIER_SHORTFALL_PREFIX`). */
41
- export const OVERLAY_REPORT_PREFIX = 'overlay-report';
42
- /** Build the report from a mount's raw findings — pure, no logging. */
43
- export function buildOverlayApplyReport(args) {
44
- const versionMismatch = args.authoredAgainst !== null &&
45
- args.currentVersion !== null &&
46
- args.authoredAgainst !== args.currentVersion;
47
- const recorded = args.authoredUpstreamPin !== undefined;
48
- const authoredPin = args.authoredUpstreamPin ?? null;
49
- const currentPin = args.currentUpstreamPin ?? null;
50
- const upstreamPinMismatch = recorded && authoredPin !== null && currentPin !== null && authoredPin !== currentPin;
51
- return {
52
- gameId: args.gameId,
53
- authoredAgainst: args.authoredAgainst,
54
- currentVersion: args.currentVersion,
55
- applied: args.applied,
56
- orphanedIds: args.orphanedIds,
57
- versionMismatch,
58
- upstreamPin: {
59
- authored: authoredPin,
60
- current: currentPin,
61
- recorded,
62
- mismatch: upstreamPinMismatch,
63
- },
64
- };
65
- }
66
- /** Whether this report is worth surfacing (mismatch OR any orphan) — pure, no logging. */
67
- export function overlayReportWarrants(report) {
68
- return report.versionMismatch || report.orphanedIds.length > 0 || report.upstreamPin.mismatch;
69
- }
70
- /** The one shared message shape — greppable on the prefix, JSON-parseable on the trailing payload. */
71
- export function formatOverlayApplyReportMessage(report) {
72
- const parts = [];
73
- if (report.versionMismatch) {
74
- parts.push(`overlay authored against v${report.authoredAgainst}, game is v${report.currentVersion}`);
75
- }
76
- if (report.upstreamPin.mismatch) {
77
- parts.push(`overlay authored against upstream pin ${report.upstreamPin.authored}, ` +
78
- `game is vendored at pin ${report.upstreamPin.current}`);
79
- }
80
- if (report.orphanedIds.length > 0) {
81
- parts.push(`${report.orphanedIds.length} orphaned overlay entr${report.orphanedIds.length === 1 ? 'y' : 'ies'}`);
82
- }
83
- return (`${OVERLAY_REPORT_PREFIX} game "${report.gameId}": ${parts.join('; ')} ` +
84
- `(D9, docs/DECISIONS-PENDING.md §D9; upstream-pin check R5, ` +
85
- `docs/MASTER-ARCHITECTURE-REVIEW.md §4(c)). ${OVERLAY_REPORT_PREFIX} ${JSON.stringify(report)}`);
86
- }
87
- /**
88
- * Emit the ONE structured `console.warn` this report warrants (mirroring the
89
- * tier-shortfall pattern), or do nothing when neither signal fires. Returns
90
- * whether it warned (callers that also want the panel-visible `editorConsole`
91
- * echo, or the inline banner, use the return value / the report itself).
92
- */
93
- export function logOverlayApplyReport(report) {
94
- if (!overlayReportWarrants(report))
95
- return false;
96
- // The D9 AC requires this EXACT native console.warn (spied on directly in
97
- // overlay-versioning.test.ts) — other deliberate native console.warn call sites in
98
- // this codebase (e.g. editor-store.ts) are unsuppressed and already counted in the
99
- // lint baseline; this one is suppressed to keep this task's diff at zero NEW warnings.
100
- // biome-ignore lint/suspicious/noConsole: see comment above
101
- console.warn(formatOverlayApplyReportMessage(report));
102
- return true;
103
- }
@@ -1,97 +0,0 @@
1
- /**
2
- * Scene capture — the core primitive of unmodified-game ingestion.
3
- *
4
- * An external three.js game owns its own `WebGLRenderer`, `Scene`, camera, and
5
- * render loop. To let the editor inspect/edit that live scene WITHOUT touching
6
- * the game's code, we need a handle to the game's `Scene`+camera the moment it
7
- * first renders. The robust way to obtain it is an **accessor trap** on
8
- * `WebGLRenderer.prototype.render`:
9
- *
10
- * - `WebGLRenderer` assigns `this.render` as an OWN instance property inside
11
- * its constructor (not on the prototype), and `THREE.WebGLRenderer` is a
12
- * read-only module export (can't subclass-swap it). A naive "wrap render"
13
- * hook therefore captures nothing.
14
- * - Installing a getter/setter for `render` on the PROTOTYPE means the
15
- * constructor's `this.render = realFn` hits our setter (the instance has no
16
- * own `render` yet), we stash the real fn, and our getter returns a wrapper
17
- * that captures `(scene, camera, renderer)` on the first real frame.
18
- *
19
- * This is the hardened, typed form of the `ingest-study` spike
20
- * (`docs/ingest-study-spike/vgai-ingest-adapter.js`), proven against an
21
- * unmodified `three.js/examples/games_fps` game.
22
- *
23
- * CRITICAL: the trap must be installed on the SAME `three` module instance the
24
- * game uses. In a bundler/dev-server that dedupes `three` (one `node_modules/
25
- * three`), an external ESM game's `import 'three'` resolves to that one instance,
26
- * so passing the host's `THREE` here traps the game's renderer too. A game that
27
- * bundles its own copy of `three` cannot be captured this way (see
28
- * `docs/UNMODIFIED-GAME-INGESTION-STUDY.md` §4A — the module-identity gatekeeper).
29
- *
30
- * Wave 17 (`docs/WAVE17-F13-COMPOSER-RESIZE-FIX-DESIGN.md`) adds an OPTIONAL,
31
- * ADDITIVE composer capture: a game rendering through its own three.js addon
32
- * `EffectComposer` (`three/examples/jsm/postprocessing/EffectComposer.js`)
33
- * still trips the `render` trap above (its `RenderPass` calls
34
- * `renderer.render(scene,camera)` internally), but the renderer holds no
35
- * reference back to the composer, so the host previously could not resize the
36
- * composer's own (intentionally non-1:1, progressively-downsampled — see
37
- * `UnrealBloomPass`) render targets when the host resizes the game's pane.
38
- * Unlike `WebGLRenderer`, `EffectComposer` is a plain ES class whose methods
39
- * (including `render`) live on the PROTOTYPE, not assigned as own instance
40
- * properties in the constructor — so a direct method-wrapper (no getter/
41
- * setter indirection) on `EffectComposer.prototype.render` is sufficient: it
42
- * calls through to the real `render`, then — AFTER that call, so any nested
43
- * `renderer.render()` the pass makes has already hit the trap above and set
44
- * `captured` — records `this` (the composer instance) if its `.renderer` is
45
- * the captured one. This is deduped/shared-trappable for the same reason
46
- * `WebGLRenderer` is: `EffectComposer.js` is a FILE inside the same `three`
47
- * package tree Vite's `resolve.dedupe: ['three', …]` already collapses to one
48
- * instance — not a separate package with its own dedupe question. Proven
49
- * live against the `bloom-composer` fixture
50
- * (`docs/f13-bloom-composer-proof/record-fixed.mjs`).
51
- */
52
- import type * as THREE from 'three';
53
- /** A live runtime captured from an external game on its first rendered frame. */
54
- export interface CapturedRuntime {
55
- scene: THREE.Scene;
56
- camera: THREE.Camera;
57
- renderer: THREE.WebGLRenderer;
58
- }
59
- /** Handle returned by {@link installSceneCapture}. */
60
- export interface SceneCaptureHandle {
61
- /** The captured runtime, or null until the game renders its first frame. */
62
- readonly captured: CapturedRuntime | null;
63
- /** Resolve once a scene+camera is captured (rejects on timeout). */
64
- waitForCapture(timeoutMs?: number): Promise<CapturedRuntime>;
65
- /** Total `render()` calls observed through the trap (a liveness signal). */
66
- getDrawCount(): number;
67
- /** The game's last (non-null) `setAnimationLoop` callback for a renderer, so the
68
- * host can pause (set null) and resume (re-set it) the game's own loop. */
69
- getAnimationLoop(renderer: THREE.WebGLRenderer): ((time: number) => void) | null;
70
- /**
71
- * Wave 17 (D-C3): resize every captured `EffectComposer` that renders
72
- * through the captured renderer to `w`×`h`, matching its pixel ratio to
73
- * `renderer.getPixelRatio()` — the composer tracks whatever DPR policy the
74
- * host already applies to the renderer; no separate knob. A no-op when no
75
- * `effectComposerCtor` was passed to {@link installSceneCapture} (or no
76
- * composer of that ctor has rendered through the captured renderer yet) —
77
- * a non-composer game is unaffected.
78
- */
79
- resizeComposers(w: number, h: number): void;
80
- /** Remove the trap and restore the captured renderer's real `render`. */
81
- uninstall(): void;
82
- }
83
- /**
84
- * Install the render accessor trap on `threeNamespace.WebGLRenderer.prototype`.
85
- * Pass the host's `three` module so the game (which shares it) is trapped.
86
- *
87
- * `effectComposerCtor` is OPTIONAL (Wave 17, D-C2): pass the host's
88
- * `EffectComposer` class (`three/examples/jsm/postprocessing/EffectComposer.js`)
89
- * to also trap composer construction/rendering on that shared addon, so
90
- * `resizeComposers()` can reach it. Omitting it (or a game never constructing
91
- * one) leaves capture byte-identical to before this wave.
92
- *
93
- * Idempotent per call site is NOT guaranteed — install once per ingest session
94
- * and `uninstall()` on teardown.
95
- */
96
- export declare function installSceneCapture(threeNamespace: unknown, effectComposerCtor?: unknown): SceneCaptureHandle;
97
- //# sourceMappingURL=scene-capture.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scene-capture.d.ts","sourceRoot":"","sources":["../../../src/adapter/ingest/scene-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,iFAAiF;AACjF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC;CAC/B;AAED,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IAC1C,oEAAoE;IACpE,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7D,4EAA4E;IAC5E,YAAY,IAAI,MAAM,CAAC;IACvB;gFAC4E;IAC5E,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACjF;;;;;;;;OAQG;IACH,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,yEAAyE;IACzE,SAAS,IAAI,IAAI,CAAC;CACnB;AAsBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,OAAO,EACvB,kBAAkB,CAAC,EAAE,OAAO,GAC3B,kBAAkB,CAwLpB"}
@@ -1,248 +0,0 @@
1
- /**
2
- * Scene capture — the core primitive of unmodified-game ingestion.
3
- *
4
- * An external three.js game owns its own `WebGLRenderer`, `Scene`, camera, and
5
- * render loop. To let the editor inspect/edit that live scene WITHOUT touching
6
- * the game's code, we need a handle to the game's `Scene`+camera the moment it
7
- * first renders. The robust way to obtain it is an **accessor trap** on
8
- * `WebGLRenderer.prototype.render`:
9
- *
10
- * - `WebGLRenderer` assigns `this.render` as an OWN instance property inside
11
- * its constructor (not on the prototype), and `THREE.WebGLRenderer` is a
12
- * read-only module export (can't subclass-swap it). A naive "wrap render"
13
- * hook therefore captures nothing.
14
- * - Installing a getter/setter for `render` on the PROTOTYPE means the
15
- * constructor's `this.render = realFn` hits our setter (the instance has no
16
- * own `render` yet), we stash the real fn, and our getter returns a wrapper
17
- * that captures `(scene, camera, renderer)` on the first real frame.
18
- *
19
- * This is the hardened, typed form of the `ingest-study` spike
20
- * (`docs/ingest-study-spike/vgai-ingest-adapter.js`), proven against an
21
- * unmodified `three.js/examples/games_fps` game.
22
- *
23
- * CRITICAL: the trap must be installed on the SAME `three` module instance the
24
- * game uses. In a bundler/dev-server that dedupes `three` (one `node_modules/
25
- * three`), an external ESM game's `import 'three'` resolves to that one instance,
26
- * so passing the host's `THREE` here traps the game's renderer too. A game that
27
- * bundles its own copy of `three` cannot be captured this way (see
28
- * `docs/UNMODIFIED-GAME-INGESTION-STUDY.md` §4A — the module-identity gatekeeper).
29
- *
30
- * Wave 17 (`docs/WAVE17-F13-COMPOSER-RESIZE-FIX-DESIGN.md`) adds an OPTIONAL,
31
- * ADDITIVE composer capture: a game rendering through its own three.js addon
32
- * `EffectComposer` (`three/examples/jsm/postprocessing/EffectComposer.js`)
33
- * still trips the `render` trap above (its `RenderPass` calls
34
- * `renderer.render(scene,camera)` internally), but the renderer holds no
35
- * reference back to the composer, so the host previously could not resize the
36
- * composer's own (intentionally non-1:1, progressively-downsampled — see
37
- * `UnrealBloomPass`) render targets when the host resizes the game's pane.
38
- * Unlike `WebGLRenderer`, `EffectComposer` is a plain ES class whose methods
39
- * (including `render`) live on the PROTOTYPE, not assigned as own instance
40
- * properties in the constructor — so a direct method-wrapper (no getter/
41
- * setter indirection) on `EffectComposer.prototype.render` is sufficient: it
42
- * calls through to the real `render`, then — AFTER that call, so any nested
43
- * `renderer.render()` the pass makes has already hit the trap above and set
44
- * `captured` — records `this` (the composer instance) if its `.renderer` is
45
- * the captured one. This is deduped/shared-trappable for the same reason
46
- * `WebGLRenderer` is: `EffectComposer.js` is a FILE inside the same `three`
47
- * package tree Vite's `resolve.dedupe: ['three', …]` already collapses to one
48
- * instance — not a separate package with its own dedupe question. Proven
49
- * live against the `bloom-composer` fixture
50
- * (`docs/f13-bloom-composer-proof/record-fixed.mjs`).
51
- */
52
- /**
53
- * Install the render accessor trap on `threeNamespace.WebGLRenderer.prototype`.
54
- * Pass the host's `three` module so the game (which shares it) is trapped.
55
- *
56
- * `effectComposerCtor` is OPTIONAL (Wave 17, D-C2): pass the host's
57
- * `EffectComposer` class (`three/examples/jsm/postprocessing/EffectComposer.js`)
58
- * to also trap composer construction/rendering on that shared addon, so
59
- * `resizeComposers()` can reach it. Omitting it (or a game never constructing
60
- * one) leaves capture byte-identical to before this wave.
61
- *
62
- * Idempotent per call site is NOT guaranteed — install once per ingest session
63
- * and `uninstall()` on teardown.
64
- */
65
- export function installSceneCapture(threeNamespace, effectComposerCtor) {
66
- const THREE_NS = threeNamespace;
67
- const proto = THREE_NS.WebGLRenderer.prototype;
68
- // Stash the real render fn per-instance under a unique symbol so multiple
69
- // renderers (editor's + game's) never collide.
70
- const REAL = Symbol('vgai.realRender');
71
- let captured = null;
72
- let drawCount = 0;
73
- const waiters = [];
74
- // Preserve any descriptor already on the prototype so uninstall can restore it.
75
- const priorDescriptor = Object.getOwnPropertyDescriptor(proto, 'render');
76
- // Trap setAnimationLoop to record each renderer's game loop callback, so the host
77
- // can freeze (set null) and resume (re-set) the game's own rAF for stable editing.
78
- // CRITICAL: like `render`, WebGLRenderer assigns `this.setAnimationLoop` as an OWN
79
- // instance property in its constructor — NOT on the prototype. A naive value-wrapper
80
- // on the prototype is therefore shadowed by the instance's own property and never
81
- // runs (resume could never recover the callback). So we mirror the `render` trap: a
82
- // prototype getter/setter. The constructor's `this.setAnimationLoop = realFn` hits
83
- // our SETTER (the instance has no own property yet) and we stash realFn per-instance;
84
- // the GETTER returns a wrapper that records each non-null callback before forwarding.
85
- const REAL_SAL = Symbol('vgai.realSetAnimationLoop');
86
- const loopCallbacks = new WeakMap();
87
- const priorSAL = Object.getOwnPropertyDescriptor(proto, 'setAnimationLoop');
88
- Object.defineProperty(proto, 'setAnimationLoop', {
89
- configurable: true,
90
- set(fn) {
91
- this[REAL_SAL] = fn;
92
- },
93
- get() {
94
- const self = this;
95
- return function setAnimationLoop(cb) {
96
- if (cb)
97
- loopCallbacks.set(self, cb);
98
- const real = self[REAL_SAL];
99
- return typeof real === 'function'
100
- ? real.call(self, cb)
101
- : undefined;
102
- };
103
- },
104
- });
105
- Object.defineProperty(proto, 'render', {
106
- configurable: true,
107
- set(fn) {
108
- this[REAL] = fn;
109
- },
110
- get() {
111
- const self = this;
112
- return function render(...args) {
113
- const [scene, camera] = args;
114
- drawCount++;
115
- if (!captured && scene && scene.isScene) {
116
- captured = {
117
- scene: scene,
118
- camera: camera,
119
- renderer: self,
120
- };
121
- for (const resolve of waiters.splice(0))
122
- resolve(captured);
123
- }
124
- // Forward to the renderer's real render with the original args.
125
- return self[REAL].apply(self, args);
126
- };
127
- },
128
- });
129
- // ---- Wave 17 (D-C2): additive composer capture, only when a composer ctor
130
- // was passed. `EffectComposer` methods (including `render`) live on the
131
- // PROTOTYPE (a plain ES class — the constructor never does `this.render =
132
- // …`), so a direct method-wrapper suffices — no getter/setter indirection
133
- // like the `render`/`setAnimationLoop` traps above need. ----
134
- const composers = new Set();
135
- let composerProto;
136
- let priorComposerRender;
137
- if (effectComposerCtor) {
138
- const EC = effectComposerCtor;
139
- composerProto = EC.prototype;
140
- priorComposerRender = composerProto['render'];
141
- composerProto['render'] = function (...args) {
142
- // Call the real render FIRST: a composer's RenderPass calls
143
- // `renderer.render(scene,camera)` internally, which is what actually
144
- // sets `captured` (above) on the game's first frame. Checking after
145
- // ensures a composer's very first render is still collected.
146
- const result = priorComposerRender?.apply(this, args);
147
- if (captured && this.renderer === captured.renderer) {
148
- composers.add(this);
149
- }
150
- return result;
151
- };
152
- }
153
- // Extracted so `uninstall()`'s own cognitive complexity doesn't grow with
154
- // this additive Wave-17 restore step (biome's noExcessiveCognitiveComplexity).
155
- function restoreComposerTrap() {
156
- if (!composerProto)
157
- return;
158
- if (priorComposerRender)
159
- composerProto['render'] = priorComposerRender;
160
- else
161
- delete composerProto['render'];
162
- }
163
- return {
164
- get captured() {
165
- return captured;
166
- },
167
- getDrawCount() {
168
- return drawCount;
169
- },
170
- getAnimationLoop(renderer) {
171
- return loopCallbacks.get(renderer) ?? null;
172
- },
173
- resizeComposers(w, h) {
174
- // No composer ctor passed (or none constructed yet) → no-op, and never
175
- // touches `renderer.getPixelRatio()` — a non-composer game's captured
176
- // renderer need not even expose that method for this to stay a no-op.
177
- if (!captured || composers.size === 0)
178
- return;
179
- const pixelRatio = captured.renderer.getPixelRatio();
180
- for (const composer of composers) {
181
- composer.setSize(w, h);
182
- composer.setPixelRatio(pixelRatio);
183
- }
184
- },
185
- waitForCapture(timeoutMs = 10_000) {
186
- if (captured)
187
- return Promise.resolve(captured);
188
- return new Promise((resolve, reject) => {
189
- const timer = setTimeout(() => {
190
- const i = waiters.indexOf(wrapped);
191
- if (i >= 0)
192
- waiters.splice(i, 1);
193
- reject(new Error(`Scene capture timed out after ${timeoutMs}ms — the game never rendered, ` +
194
- `or it bundles its own (un-shared) copy of three.`));
195
- }, timeoutMs);
196
- const wrapped = (rt) => {
197
- clearTimeout(timer);
198
- resolve(rt);
199
- };
200
- waiters.push(wrapped);
201
- });
202
- },
203
- uninstall() {
204
- // Restore the captured renderer's real render as an OWN property so its
205
- // loop keeps working after the prototype trap is removed.
206
- if (captured) {
207
- const r = captured.renderer;
208
- const real = r[REAL];
209
- if (typeof real === 'function') {
210
- Object.defineProperty(captured.renderer, 'render', {
211
- configurable: true,
212
- writable: true,
213
- value: real,
214
- });
215
- }
216
- }
217
- if (priorDescriptor) {
218
- Object.defineProperty(proto, 'render', priorDescriptor);
219
- }
220
- else {
221
- delete proto['render'];
222
- }
223
- // Restore the captured renderer's real setAnimationLoop as an OWN property (the
224
- // prototype getter/setter intercepted the constructor's assignment, so the
225
- // instance has none) — else removing the prototype trap would leave it without
226
- // setAnimationLoop and freeze its loop.
227
- if (captured) {
228
- const r = captured.renderer;
229
- const realSal = r[REAL_SAL];
230
- if (typeof realSal === 'function') {
231
- Object.defineProperty(captured.renderer, 'setAnimationLoop', {
232
- configurable: true,
233
- writable: true,
234
- value: realSal,
235
- });
236
- }
237
- }
238
- if (priorSAL)
239
- Object.defineProperty(proto, 'setAnimationLoop', priorSAL);
240
- else
241
- delete proto['setAnimationLoop'];
242
- // Wave 17: fully restore the composer addon's `render` (a plain
243
- // prototype method — no per-instance own-property to restore, unlike
244
- // the renderer/loop traps above).
245
- restoreComposerTrap();
246
- },
247
- };
248
- }
@@ -1,47 +0,0 @@
1
- /**
2
- * Upstream-pin extraction — R5 (docs/MASTER-ARCHITECTURE-REVIEW.md §4(c)/
3
- * §7.1 item 9): the fix for the overlay identity gap the structural-id +
4
- * `authoredAgainst.gameVersion` scheme (T7.7/D9) does not close. A re-vendor
5
- * of a vendored upstream game that keeps a slot's shape (index + three.js
6
- * type + name unchanged) reapplies a saved overlay onto a semantically
7
- * different object with `applied: 1, orphanedIds: []` — silent wrong-meaning
8
- * success — because `authoredAgainst.gameVersion` is the MANIFEST's own
9
- * `version` (hand-set by whoever wrote `vgai.game.json`, e.g. every
10
- * `public/ingest/*` vendored game ships `"version": "0.1.0"` regardless of
11
- * which upstream commit it vendors — see `public/ingest/{tanks,racing-game,
12
- * simcity}/vgai.game.json`), never tied to the thing that actually changes on
13
- * a re-vendor: the `UPSTREAM.md` pin.
14
- *
15
- * This module is the pure, dependency-free half (parse text -> pin, or
16
- * `null`): NO file I/O here, so it is usable from any context (editor
17
- * save/apply-time hooks over a fetched `/UPSTREAM.md`, a future Node-side
18
- * CLI check, tests). READ-ONLY by construction — it has no writer; this
19
- * codebase never generates or edits an `UPSTREAM.md` (the anti-shim rule:
20
- * adapters never fabricate first-party data, and a game's own vendoring
21
- * provenance is exactly that).
22
- *
23
- * Format (established convention, not invented here — see every
24
- * `public/ingest/*\/UPSTREAM.md`'s `## Upstream` section, e.g.
25
- * `public/ingest/tanks/UPSTREAM.md`):
26
- *
27
- * ## Upstream
28
- *
29
- * - Repo: https://github.com/colyseus/realtime-tanks-demo
30
- * - Commit: **`6339493130b4b1d4d28f0f52d17b2fba738c7d47`**
31
- *
32
- * i.e. a Markdown bullet whose label is `Commit:` and whose value is a bold,
33
- * backtick-code full (or abbreviated) git SHA. Every vendored game in this
34
- * repo (`tanks`, `racing-game`, `simcity`) follows this exact shape.
35
- */
36
- /**
37
- * Extract the pinned upstream commit hash from a vendored game's
38
- * `UPSTREAM.md` prose, or `null` if the file doesn't follow the convention
39
- * (or wasn't found — the caller decides what a missing file means; this
40
- * function only parses text it's handed). Never throws — an unparseable
41
- * document is an honest `null`, not an error (anti-shim: no guessing, no
42
- * fabricating a pin from a game folder that doesn't declare one, e.g. an
43
- * externally-authored non-vendored project opened via the CLI-on-folder
44
- * route).
45
- */
46
- export declare function extractUpstreamPin(markdown: string): string | null;
47
- //# sourceMappingURL=upstream-pin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upstream-pin.d.ts","sourceRoot":"","sources":["../../../src/adapter/ingest/upstream-pin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAKH;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAElE"}