@vgai/engine 0.3.0 → 0.4.0-canary.20260715.0

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 (559) hide show
  1. package/package.json +8 -2
  2. package/schemas/engine-api.json +124 -0
  3. package/schemas/engine-api.md +53 -0
  4. package/schemas/engine-capabilities.json +124 -0
  5. package/schemas/inputmap.schema.json +314 -0
  6. package/schemas/mat.schema.json +286 -0
  7. package/schemas/prefab.schema.json +10148 -0
  8. package/schemas/scn2d.schema.json +475 -0
  9. package/schemas/vgai-game.schema.json +383 -0
  10. package/schemas/vscn.schema.json +11007 -0
  11. package/src/adapter/{world-kind.ts → adapter-surface.ts} +6 -6
  12. package/src/adapter/authoring.ts +67 -0
  13. package/src/adapter/game-adapter.ts +8 -8
  14. package/src/adapter/host-context.ts +2 -4
  15. package/src/adapter/index.ts +3 -1
  16. package/src/adapter/system-adapter.ts +73 -0
  17. package/src/adapter/vgai-scene-game-adapter.ts +239 -180
  18. package/src/animation/xstate-animation-binding.ts +300 -262
  19. package/src/animation/xstate-animation-meta.ts +50 -13
  20. package/src/character/cloth-sim.ts +533 -0
  21. package/src/character/spring-chain.ts +307 -0
  22. package/src/core/game-loop.ts +41 -3
  23. package/src/core/seeded-random.ts +161 -0
  24. package/src/core/system-runner.ts +20 -3
  25. package/src/core/types.ts +37 -0
  26. package/src/data/data-asset.ts +1 -1
  27. package/src/dev/performance-profiler.ts +213 -0
  28. package/src/dev/webgl-gpu-timer.ts +53 -0
  29. package/src/ecs/component-manager.ts +45 -12
  30. package/src/ecs/game-component.ts +95 -11
  31. package/src/humanoid/bake.operation.ts +326 -0
  32. package/src/humanoid/body.ts +663 -0
  33. package/src/humanoid/clips.ts +149 -0
  34. package/src/humanoid/compose.ts +209 -0
  35. package/src/humanoid/generate.ts +189 -0
  36. package/src/humanoid/index.ts +36 -0
  37. package/src/humanoid/schema.ts +108 -0
  38. package/src/humanoid/skeleton.ts +345 -0
  39. package/src/index.ts +5 -5
  40. package/src/input/input-manager.ts +701 -22
  41. package/src/input/input-types.ts +5 -2
  42. package/src/manifest/index.ts +5 -5
  43. package/src/manifest/load.ts +125 -72
  44. package/src/manifest/schema.ts +362 -255
  45. package/src/react/game-state.tsx +135 -32
  46. package/src/react/root-adapter.tsx +49 -0
  47. package/src/react/unmanaged-root-detector.ts +66 -0
  48. package/src/react/use-data.ts +12 -2
  49. package/src/runtime/create-runtime.ts +100 -282
  50. package/src/runtime/debug-bridge.ts +483 -0
  51. package/src/runtime/debug-registry.ts +856 -0
  52. package/src/runtime/game.ts +342 -93
  53. package/src/runtime/gameplay-rng-trap.ts +134 -0
  54. package/src/runtime/input-router.ts +7 -7
  55. package/src/runtime/mount-game.ts +40 -38
  56. package/src/runtime/mount-manifest.ts +169 -37
  57. package/src/runtime/render-control.ts +13 -13
  58. package/src/runtime/render-seed.ts +1 -1
  59. package/src/runtime/state-bridge.ts +24 -10
  60. package/src/runtime/types.ts +110 -28
  61. package/src/scene/asset-registry.ts +22 -0
  62. package/src/scene/component-registry.ts +14 -3
  63. package/src/scene/defaults.ts +1 -0
  64. package/src/scene/light-camera-factory.ts +11 -3
  65. package/src/scene/scene-apply.ts +55 -4
  66. package/src/scene/scene-loader.ts +10 -27
  67. package/src/scene/scene-types.ts +0 -1
  68. package/src/scene/schema/index.ts +0 -34
  69. package/src/scene/schema/light.ts +16 -1
  70. package/src/scene/schema/material.ts +96 -91
  71. package/src/scene/schema/scene-file.ts +1 -7
  72. package/src/scene/user-data.ts +14 -1
  73. package/src/setup/setup-renderer.ts +1 -1
  74. package/src/tools/define-tool.ts +50 -11
  75. package/src/world2d/authoring-2d.ts +17 -1
  76. package/src/world2d/collision-2d.ts +1 -1
  77. package/src/world2d/pixi-game-adapter.ts +19 -17
  78. package/src/world2d/scene2d-loader.ts +1 -0
  79. package/src/world2d/types.ts +8 -2
  80. package/dist/adapter/authoring.d.ts +0 -404
  81. package/dist/adapter/authoring.d.ts.map +0 -1
  82. package/dist/adapter/authoring.js +0 -22
  83. package/dist/adapter/colyseus-networking-adapter.d.ts +0 -43
  84. package/dist/adapter/colyseus-networking-adapter.d.ts.map +0 -1
  85. package/dist/adapter/colyseus-networking-adapter.js +0 -38
  86. package/dist/adapter/first-party-systems.d.ts +0 -38
  87. package/dist/adapter/first-party-systems.d.ts.map +0 -1
  88. package/dist/adapter/first-party-systems.js +0 -77
  89. package/dist/adapter/game-adapter.d.ts +0 -133
  90. package/dist/adapter/game-adapter.d.ts.map +0 -1
  91. package/dist/adapter/game-adapter.js +0 -10
  92. package/dist/adapter/host-context.d.ts +0 -73
  93. package/dist/adapter/host-context.d.ts.map +0 -1
  94. package/dist/adapter/host-context.js +0 -16
  95. package/dist/adapter/index.d.ts +0 -22
  96. package/dist/adapter/index.d.ts.map +0 -1
  97. package/dist/adapter/index.js +0 -15
  98. package/dist/adapter/ingest/game-contract.d.ts +0 -53
  99. package/dist/adapter/ingest/game-contract.d.ts.map +0 -1
  100. package/dist/adapter/ingest/game-contract.js +0 -30
  101. package/dist/adapter/ingest/overlay-applier.d.ts +0 -118
  102. package/dist/adapter/ingest/overlay-applier.d.ts.map +0 -1
  103. package/dist/adapter/ingest/overlay-applier.js +0 -132
  104. package/dist/adapter/ingest/overlay-apply.d.ts +0 -60
  105. package/dist/adapter/ingest/overlay-apply.d.ts.map +0 -1
  106. package/dist/adapter/ingest/overlay-apply.js +0 -101
  107. package/dist/adapter/ingest/overlay-file.d.ts +0 -79
  108. package/dist/adapter/ingest/overlay-file.d.ts.map +0 -1
  109. package/dist/adapter/ingest/overlay-file.js +0 -66
  110. package/dist/adapter/ingest/overlay-report.d.ts +0 -113
  111. package/dist/adapter/ingest/overlay-report.d.ts.map +0 -1
  112. package/dist/adapter/ingest/overlay-report.js +0 -103
  113. package/dist/adapter/ingest/scene-capture.d.ts +0 -97
  114. package/dist/adapter/ingest/scene-capture.d.ts.map +0 -1
  115. package/dist/adapter/ingest/scene-capture.js +0 -248
  116. package/dist/adapter/ingest/upstream-pin.d.ts +0 -47
  117. package/dist/adapter/ingest/upstream-pin.d.ts.map +0 -1
  118. package/dist/adapter/ingest/upstream-pin.js +0 -50
  119. package/dist/adapter/loop-gate-report.d.ts +0 -34
  120. package/dist/adapter/loop-gate-report.d.ts.map +0 -1
  121. package/dist/adapter/loop-gate-report.js +0 -37
  122. package/dist/adapter/rapier-physics-adapter.d.ts +0 -12
  123. package/dist/adapter/rapier-physics-adapter.d.ts.map +0 -1
  124. package/dist/adapter/rapier-physics-adapter.js +0 -46
  125. package/dist/adapter/system-adapter.d.ts +0 -133
  126. package/dist/adapter/system-adapter.d.ts.map +0 -1
  127. package/dist/adapter/system-adapter.js +0 -13
  128. package/dist/adapter/transform.d.ts +0 -18
  129. package/dist/adapter/transform.d.ts.map +0 -1
  130. package/dist/adapter/transform.js +0 -1
  131. package/dist/adapter/vgai-scene-game-adapter.d.ts +0 -116
  132. package/dist/adapter/vgai-scene-game-adapter.d.ts.map +0 -1
  133. package/dist/adapter/vgai-scene-game-adapter.js +0 -714
  134. package/dist/adapter/world-kind.d.ts +0 -30
  135. package/dist/adapter/world-kind.d.ts.map +0 -1
  136. package/dist/adapter/world-kind.js +0 -18
  137. package/dist/ai/navigation.d.ts +0 -64
  138. package/dist/ai/navigation.d.ts.map +0 -1
  139. package/dist/ai/navigation.js +0 -133
  140. package/dist/animation/anim-graph-types.d.ts +0 -25
  141. package/dist/animation/anim-graph-types.d.ts.map +0 -1
  142. package/dist/animation/anim-graph-types.js +0 -1
  143. package/dist/animation/animation-clock.d.ts +0 -213
  144. package/dist/animation/animation-clock.d.ts.map +0 -1
  145. package/dist/animation/animation-clock.js +0 -301
  146. package/dist/animation/blend-node.d.ts +0 -22
  147. package/dist/animation/blend-node.d.ts.map +0 -1
  148. package/dist/animation/blend-node.js +0 -97
  149. package/dist/animation/camera-ownership.d.ts +0 -250
  150. package/dist/animation/camera-ownership.d.ts.map +0 -1
  151. package/dist/animation/camera-ownership.js +0 -169
  152. package/dist/animation/cinematic-cues.d.ts +0 -200
  153. package/dist/animation/cinematic-cues.d.ts.map +0 -1
  154. package/dist/animation/cinematic-cues.js +0 -213
  155. package/dist/animation/clip-map.d.ts +0 -12
  156. package/dist/animation/clip-map.d.ts.map +0 -1
  157. package/dist/animation/clip-map.js +0 -37
  158. package/dist/animation/gsap-registration.d.ts +0 -119
  159. package/dist/animation/gsap-registration.d.ts.map +0 -1
  160. package/dist/animation/gsap-registration.js +0 -92
  161. package/dist/animation/theatre-clock-binding.d.ts +0 -89
  162. package/dist/animation/theatre-clock-binding.d.ts.map +0 -1
  163. package/dist/animation/theatre-clock-binding.js +0 -29
  164. package/dist/animation/theatre-director.d.ts +0 -242
  165. package/dist/animation/theatre-director.d.ts.map +0 -1
  166. package/dist/animation/theatre-director.js +0 -235
  167. package/dist/animation/theatre-object-binding.d.ts +0 -305
  168. package/dist/animation/theatre-object-binding.d.ts.map +0 -1
  169. package/dist/animation/theatre-object-binding.js +0 -351
  170. package/dist/animation/xstate-animation-binding.d.ts +0 -111
  171. package/dist/animation/xstate-animation-binding.d.ts.map +0 -1
  172. package/dist/animation/xstate-animation-binding.js +0 -307
  173. package/dist/animation/xstate-animation-meta.d.ts +0 -228
  174. package/dist/animation/xstate-animation-meta.d.ts.map +0 -1
  175. package/dist/animation/xstate-animation-meta.js +0 -221
  176. package/dist/assets.d.ts +0 -26
  177. package/dist/assets.d.ts.map +0 -1
  178. package/dist/assets.js +0 -55
  179. package/dist/audio/index.d.ts +0 -4
  180. package/dist/audio/index.d.ts.map +0 -1
  181. package/dist/audio/index.js +0 -24
  182. package/dist/audio/tone-clock-binding.d.ts +0 -75
  183. package/dist/audio/tone-clock-binding.d.ts.map +0 -1
  184. package/dist/audio/tone-clock-binding.js +0 -29
  185. package/dist/audio/tone-context.d.ts +0 -114
  186. package/dist/audio/tone-context.d.ts.map +0 -1
  187. package/dist/audio/tone-context.js +0 -39
  188. package/dist/audio/tone-offline-render.d.ts +0 -90
  189. package/dist/audio/tone-offline-render.d.ts.map +0 -1
  190. package/dist/audio/tone-offline-render.js +0 -56
  191. package/dist/audio/wav-encode.d.ts +0 -38
  192. package/dist/audio/wav-encode.d.ts.map +0 -1
  193. package/dist/audio/wav-encode.js +0 -97
  194. package/dist/core/game-loop.d.ts +0 -21
  195. package/dist/core/game-loop.d.ts.map +0 -1
  196. package/dist/core/game-loop.js +0 -130
  197. package/dist/core/system-runner.d.ts +0 -120
  198. package/dist/core/system-runner.d.ts.map +0 -1
  199. package/dist/core/system-runner.js +0 -286
  200. package/dist/core/types.d.ts +0 -58
  201. package/dist/core/types.d.ts.map +0 -1
  202. package/dist/core/types.js +0 -25
  203. package/dist/data/data-asset.d.ts +0 -101
  204. package/dist/data/data-asset.d.ts.map +0 -1
  205. package/dist/data/data-asset.js +0 -122
  206. package/dist/data/data-check-core.d.ts +0 -110
  207. package/dist/data/data-check-core.d.ts.map +0 -1
  208. package/dist/data/data-check-core.js +0 -178
  209. package/dist/data/data-ref.d.ts +0 -79
  210. package/dist/data/data-ref.d.ts.map +0 -1
  211. package/dist/data/data-ref.js +0 -130
  212. package/dist/data/vite-plugin-data.d.ts +0 -79
  213. package/dist/data/vite-plugin-data.d.ts.map +0 -1
  214. package/dist/data/vite-plugin-data.js +0 -217
  215. package/dist/dev/console-bridge.d.ts +0 -22
  216. package/dist/dev/console-bridge.d.ts.map +0 -1
  217. package/dist/dev/console-bridge.js +0 -71
  218. package/dist/dev/debug-draw.d.ts +0 -24
  219. package/dist/dev/debug-draw.d.ts.map +0 -1
  220. package/dist/dev/debug-draw.js +0 -73
  221. package/dist/dev/logger.d.ts +0 -30
  222. package/dist/dev/logger.d.ts.map +0 -1
  223. package/dist/dev/logger.js +0 -90
  224. package/dist/ecs/component-manager.d.ts +0 -189
  225. package/dist/ecs/component-manager.d.ts.map +0 -1
  226. package/dist/ecs/component-manager.js +0 -676
  227. package/dist/ecs/game-component.d.ts +0 -97
  228. package/dist/ecs/game-component.d.ts.map +0 -1
  229. package/dist/ecs/game-component.js +0 -80
  230. package/dist/ecs/hmr-swap-report.d.ts +0 -53
  231. package/dist/ecs/hmr-swap-report.d.ts.map +0 -1
  232. package/dist/ecs/hmr-swap-report.js +0 -55
  233. package/dist/index.d.ts +0 -37
  234. package/dist/index.d.ts.map +0 -1
  235. package/dist/index.js +0 -30
  236. package/dist/input/input-manager.d.ts +0 -596
  237. package/dist/input/input-manager.d.ts.map +0 -1
  238. package/dist/input/input-manager.js +0 -1564
  239. package/dist/input/input-types.d.ts +0 -171
  240. package/dist/input/input-types.d.ts.map +0 -1
  241. package/dist/input/input-types.js +0 -1
  242. package/dist/input/prompt-labels.d.ts +0 -21
  243. package/dist/input/prompt-labels.d.ts.map +0 -1
  244. package/dist/input/prompt-labels.js +0 -121
  245. package/dist/input/rebind-controller.d.ts +0 -59
  246. package/dist/input/rebind-controller.d.ts.map +0 -1
  247. package/dist/input/rebind-controller.js +0 -85
  248. package/dist/input/schema.d.ts +0 -16
  249. package/dist/input/schema.d.ts.map +0 -1
  250. package/dist/input/schema.js +0 -228
  251. package/dist/loader.d.ts +0 -43
  252. package/dist/loader.d.ts.map +0 -1
  253. package/dist/loader.js +0 -59
  254. package/dist/manifest/index.d.ts +0 -5
  255. package/dist/manifest/index.d.ts.map +0 -1
  256. package/dist/manifest/index.js +0 -8
  257. package/dist/manifest/load-file.d.ts +0 -4
  258. package/dist/manifest/load-file.d.ts.map +0 -1
  259. package/dist/manifest/load-file.js +0 -14
  260. package/dist/manifest/load.d.ts +0 -117
  261. package/dist/manifest/load.d.ts.map +0 -1
  262. package/dist/manifest/load.js +0 -255
  263. package/dist/manifest/schema.d.ts +0 -173
  264. package/dist/manifest/schema.d.ts.map +0 -1
  265. package/dist/manifest/schema.js +0 -302
  266. package/dist/physics/collision-system.d.ts +0 -41
  267. package/dist/physics/collision-system.d.ts.map +0 -1
  268. package/dist/physics/collision-system.js +0 -64
  269. package/dist/physics/physics-registry.d.ts +0 -45
  270. package/dist/physics/physics-registry.d.ts.map +0 -1
  271. package/dist/physics/physics-registry.js +0 -65
  272. package/dist/physics/transform-writer.d.ts +0 -16
  273. package/dist/physics/transform-writer.d.ts.map +0 -1
  274. package/dist/physics/transform-writer.js +0 -38
  275. package/dist/physics/trigger-dispatch.d.ts +0 -24
  276. package/dist/physics/trigger-dispatch.d.ts.map +0 -1
  277. package/dist/physics/trigger-dispatch.js +0 -80
  278. package/dist/react/game-state.d.ts +0 -105
  279. package/dist/react/game-state.d.ts.map +0 -1
  280. package/dist/react/game-state.js +0 -144
  281. package/dist/react/use-data.d.ts +0 -60
  282. package/dist/react/use-data.d.ts.map +0 -1
  283. package/dist/react/use-data.js +0 -96
  284. package/dist/react/use-selection.d.ts +0 -75
  285. package/dist/react/use-selection.d.ts.map +0 -1
  286. package/dist/react/use-selection.js +0 -90
  287. package/dist/render/auto-batcher.d.ts +0 -34
  288. package/dist/render/auto-batcher.d.ts.map +0 -1
  289. package/dist/render/auto-batcher.js +0 -140
  290. package/dist/render/render-batch-system.d.ts +0 -33
  291. package/dist/render/render-batch-system.d.ts.map +0 -1
  292. package/dist/render/render-batch-system.js +0 -230
  293. package/dist/render/render-features.d.ts +0 -47
  294. package/dist/render/render-features.d.ts.map +0 -1
  295. package/dist/render/render-features.js +0 -105
  296. package/dist/render/render-settings.d.ts +0 -36
  297. package/dist/render/render-settings.d.ts.map +0 -1
  298. package/dist/render/render-settings.js +0 -51
  299. package/dist/runtime/create-runtime.d.ts +0 -280
  300. package/dist/runtime/create-runtime.d.ts.map +0 -1
  301. package/dist/runtime/create-runtime.js +0 -795
  302. package/dist/runtime/frame-selector-cache.d.ts +0 -41
  303. package/dist/runtime/frame-selector-cache.d.ts.map +0 -1
  304. package/dist/runtime/frame-selector-cache.js +0 -65
  305. package/dist/runtime/game.d.ts +0 -433
  306. package/dist/runtime/game.d.ts.map +0 -1
  307. package/dist/runtime/game.js +0 -569
  308. package/dist/runtime/input-router.d.ts +0 -78
  309. package/dist/runtime/input-router.d.ts.map +0 -1
  310. package/dist/runtime/input-router.js +0 -171
  311. package/dist/runtime/mount-game.d.ts +0 -129
  312. package/dist/runtime/mount-game.d.ts.map +0 -1
  313. package/dist/runtime/mount-game.js +0 -152
  314. package/dist/runtime/mount-manifest.d.ts +0 -119
  315. package/dist/runtime/mount-manifest.d.ts.map +0 -1
  316. package/dist/runtime/mount-manifest.js +0 -204
  317. package/dist/runtime/render-audio-control.d.ts +0 -110
  318. package/dist/runtime/render-audio-control.d.ts.map +0 -1
  319. package/dist/runtime/render-audio-control.js +0 -111
  320. package/dist/runtime/render-control.d.ts +0 -291
  321. package/dist/runtime/render-control.d.ts.map +0 -1
  322. package/dist/runtime/render-control.js +0 -264
  323. package/dist/runtime/render-seed.d.ts +0 -57
  324. package/dist/runtime/render-seed.d.ts.map +0 -1
  325. package/dist/runtime/render-seed.js +0 -74
  326. package/dist/runtime/scene-ui-bridge.d.ts +0 -69
  327. package/dist/runtime/scene-ui-bridge.d.ts.map +0 -1
  328. package/dist/runtime/scene-ui-bridge.js +0 -23
  329. package/dist/runtime/scene-ui-data.d.ts +0 -13
  330. package/dist/runtime/scene-ui-data.d.ts.map +0 -1
  331. package/dist/runtime/scene-ui-data.js +0 -92
  332. package/dist/runtime/state-bridge.d.ts +0 -47
  333. package/dist/runtime/state-bridge.d.ts.map +0 -1
  334. package/dist/runtime/state-bridge.js +0 -53
  335. package/dist/runtime/types.d.ts +0 -179
  336. package/dist/runtime/types.d.ts.map +0 -1
  337. package/dist/runtime/types.js +0 -1
  338. package/dist/scene/asset-loaders.d.ts +0 -79
  339. package/dist/scene/asset-loaders.d.ts.map +0 -1
  340. package/dist/scene/asset-loaders.js +0 -141
  341. package/dist/scene/asset-paths.d.ts +0 -11
  342. package/dist/scene/asset-paths.d.ts.map +0 -1
  343. package/dist/scene/asset-paths.js +0 -108
  344. package/dist/scene/asset-ref-check.d.ts +0 -88
  345. package/dist/scene/asset-ref-check.d.ts.map +0 -1
  346. package/dist/scene/asset-ref-check.js +0 -214
  347. package/dist/scene/asset-registry.d.ts +0 -30
  348. package/dist/scene/asset-registry.d.ts.map +0 -1
  349. package/dist/scene/asset-registry.js +0 -50
  350. package/dist/scene/collider-dimensions.d.ts +0 -63
  351. package/dist/scene/collider-dimensions.d.ts.map +0 -1
  352. package/dist/scene/collider-dimensions.js +0 -98
  353. package/dist/scene/component-registry.d.ts +0 -17
  354. package/dist/scene/component-registry.d.ts.map +0 -1
  355. package/dist/scene/component-registry.js +0 -28
  356. package/dist/scene/defaults.d.ts +0 -252
  357. package/dist/scene/defaults.d.ts.map +0 -1
  358. package/dist/scene/defaults.js +0 -151
  359. package/dist/scene/geometries/index.d.ts +0 -8
  360. package/dist/scene/geometries/index.d.ts.map +0 -1
  361. package/dist/scene/geometries/index.js +0 -7
  362. package/dist/scene/geometries/terrain.d.ts +0 -2
  363. package/dist/scene/geometries/terrain.d.ts.map +0 -1
  364. package/dist/scene/geometries/terrain.js +0 -37
  365. package/dist/scene/geometry-registry.d.ts +0 -24
  366. package/dist/scene/geometry-registry.d.ts.map +0 -1
  367. package/dist/scene/geometry-registry.js +0 -20
  368. package/dist/scene/instance-registry.d.ts +0 -36
  369. package/dist/scene/instance-registry.d.ts.map +0 -1
  370. package/dist/scene/instance-registry.js +0 -55
  371. package/dist/scene/instancers/grid.d.ts +0 -2
  372. package/dist/scene/instancers/grid.d.ts.map +0 -1
  373. package/dist/scene/instancers/grid.js +0 -36
  374. package/dist/scene/instancers/index.d.ts +0 -8
  375. package/dist/scene/instancers/index.d.ts.map +0 -1
  376. package/dist/scene/instancers/index.js +0 -7
  377. package/dist/scene/light-camera-factory.d.ts +0 -23
  378. package/dist/scene/light-camera-factory.d.ts.map +0 -1
  379. package/dist/scene/light-camera-factory.js +0 -68
  380. package/dist/scene/material-factory.d.ts +0 -17
  381. package/dist/scene/material-factory.d.ts.map +0 -1
  382. package/dist/scene/material-factory.js +0 -197
  383. package/dist/scene/material-registry.d.ts +0 -40
  384. package/dist/scene/material-registry.d.ts.map +0 -1
  385. package/dist/scene/material-registry.js +0 -44
  386. package/dist/scene/materials/index.d.ts +0 -8
  387. package/dist/scene/materials/index.d.ts.map +0 -1
  388. package/dist/scene/materials/index.js +0 -7
  389. package/dist/scene/materials/water.d.ts +0 -2
  390. package/dist/scene/materials/water.d.ts.map +0 -1
  391. package/dist/scene/materials/water.js +0 -54
  392. package/dist/scene/parse.d.ts +0 -23
  393. package/dist/scene/parse.d.ts.map +0 -1
  394. package/dist/scene/parse.js +0 -179
  395. package/dist/scene/particles-factory.d.ts +0 -33
  396. package/dist/scene/particles-factory.d.ts.map +0 -1
  397. package/dist/scene/particles-factory.js +0 -282
  398. package/dist/scene/scene-apply.d.ts +0 -109
  399. package/dist/scene/scene-apply.d.ts.map +0 -1
  400. package/dist/scene/scene-apply.js +0 -326
  401. package/dist/scene/scene-diff-schema.d.ts +0 -285
  402. package/dist/scene/scene-diff-schema.d.ts.map +0 -1
  403. package/dist/scene/scene-diff-schema.js +0 -92
  404. package/dist/scene/scene-diff-types.d.ts +0 -40
  405. package/dist/scene/scene-diff-types.d.ts.map +0 -1
  406. package/dist/scene/scene-diff-types.js +0 -14
  407. package/dist/scene/scene-loader.d.ts +0 -177
  408. package/dist/scene/scene-loader.d.ts.map +0 -1
  409. package/dist/scene/scene-loader.js +0 -1213
  410. package/dist/scene/scene-query.d.ts +0 -11
  411. package/dist/scene/scene-query.d.ts.map +0 -1
  412. package/dist/scene/scene-query.js +0 -63
  413. package/dist/scene/scene-types.d.ts +0 -10
  414. package/dist/scene/scene-types.d.ts.map +0 -1
  415. package/dist/scene/scene-types.js +0 -8
  416. package/dist/scene/scene-version.d.ts +0 -26
  417. package/dist/scene/scene-version.d.ts.map +0 -1
  418. package/dist/scene/scene-version.js +0 -34
  419. package/dist/scene/schema/animation.d.ts +0 -8
  420. package/dist/scene/schema/animation.d.ts.map +0 -1
  421. package/dist/scene/schema/animation.js +0 -42
  422. package/dist/scene/schema/audio.d.ts +0 -13
  423. package/dist/scene/schema/audio.d.ts.map +0 -1
  424. package/dist/scene/schema/audio.js +0 -22
  425. package/dist/scene/schema/camera.d.ts +0 -28
  426. package/dist/scene/schema/camera.d.ts.map +0 -1
  427. package/dist/scene/schema/camera.js +0 -17
  428. package/dist/scene/schema/collider.d.ts +0 -40
  429. package/dist/scene/schema/collider.d.ts.map +0 -1
  430. package/dist/scene/schema/collider.js +0 -55
  431. package/dist/scene/schema/entity-ref.d.ts +0 -31
  432. package/dist/scene/schema/entity-ref.d.ts.map +0 -1
  433. package/dist/scene/schema/entity-ref.js +0 -61
  434. package/dist/scene/schema/entity.d.ts +0 -1036
  435. package/dist/scene/schema/entity.d.ts.map +0 -1
  436. package/dist/scene/schema/entity.js +0 -153
  437. package/dist/scene/schema/environment.d.ts +0 -425
  438. package/dist/scene/schema/environment.d.ts.map +0 -1
  439. package/dist/scene/schema/environment.js +0 -357
  440. package/dist/scene/schema/index.d.ts +0 -39
  441. package/dist/scene/schema/index.d.ts.map +0 -1
  442. package/dist/scene/schema/index.js +0 -20
  443. package/dist/scene/schema/instances.d.ts +0 -14
  444. package/dist/scene/schema/instances.d.ts.map +0 -1
  445. package/dist/scene/schema/instances.js +0 -28
  446. package/dist/scene/schema/joint.d.ts +0 -23
  447. package/dist/scene/schema/joint.d.ts.map +0 -1
  448. package/dist/scene/schema/joint.js +0 -23
  449. package/dist/scene/schema/light.d.ts +0 -38
  450. package/dist/scene/schema/light.d.ts.map +0 -1
  451. package/dist/scene/schema/light.js +0 -26
  452. package/dist/scene/schema/material.d.ts +0 -199
  453. package/dist/scene/schema/material.d.ts.map +0 -1
  454. package/dist/scene/schema/material.js +0 -99
  455. package/dist/scene/schema/mesh.d.ts +0 -48
  456. package/dist/scene/schema/mesh.d.ts.map +0 -1
  457. package/dist/scene/schema/mesh.js +0 -82
  458. package/dist/scene/schema/particles.d.ts +0 -2178
  459. package/dist/scene/schema/particles.d.ts.map +0 -1
  460. package/dist/scene/schema/particles.js +0 -321
  461. package/dist/scene/schema/physics.d.ts +0 -56
  462. package/dist/scene/schema/physics.d.ts.map +0 -1
  463. package/dist/scene/schema/physics.js +0 -37
  464. package/dist/scene/schema/scene-file.d.ts +0 -304
  465. package/dist/scene/schema/scene-file.d.ts.map +0 -1
  466. package/dist/scene/schema/scene-file.js +0 -262
  467. package/dist/scene/schema/shadow.d.ts +0 -28
  468. package/dist/scene/schema/shadow.d.ts.map +0 -1
  469. package/dist/scene/schema/shadow.js +0 -20
  470. package/dist/scene/schema/spline.d.ts +0 -25
  471. package/dist/scene/schema/spline.d.ts.map +0 -1
  472. package/dist/scene/schema/spline.js +0 -15
  473. package/dist/scene/schema/tuples.d.ts +0 -12
  474. package/dist/scene/schema/tuples.d.ts.map +0 -1
  475. package/dist/scene/schema/tuples.js +0 -14
  476. package/dist/scene/schema/ui.d.ts +0 -880
  477. package/dist/scene/schema/ui.d.ts.map +0 -1
  478. package/dist/scene/schema/ui.js +0 -506
  479. package/dist/scene/user-data.d.ts +0 -171
  480. package/dist/scene/user-data.d.ts.map +0 -1
  481. package/dist/scene/user-data.js +0 -137
  482. package/dist/setup/setup-audio.d.ts +0 -20
  483. package/dist/setup/setup-audio.d.ts.map +0 -1
  484. package/dist/setup/setup-audio.js +0 -41
  485. package/dist/setup/setup-particles.d.ts +0 -17
  486. package/dist/setup/setup-particles.d.ts.map +0 -1
  487. package/dist/setup/setup-particles.js +0 -16
  488. package/dist/setup/setup-physics.d.ts +0 -25
  489. package/dist/setup/setup-physics.d.ts.map +0 -1
  490. package/dist/setup/setup-physics.js +0 -51
  491. package/dist/setup/setup-renderer.d.ts +0 -69
  492. package/dist/setup/setup-renderer.d.ts.map +0 -1
  493. package/dist/setup/setup-renderer.js +0 -363
  494. package/dist/tools/define-tool.d.ts +0 -105
  495. package/dist/tools/define-tool.d.ts.map +0 -1
  496. package/dist/tools/define-tool.js +0 -82
  497. package/dist/world2d/authoring-2d.d.ts +0 -76
  498. package/dist/world2d/authoring-2d.d.ts.map +0 -1
  499. package/dist/world2d/authoring-2d.js +0 -176
  500. package/dist/world2d/capture-to-scene2d.d.ts +0 -5
  501. package/dist/world2d/capture-to-scene2d.d.ts.map +0 -1
  502. package/dist/world2d/capture-to-scene2d.js +0 -49
  503. package/dist/world2d/collision-2d.d.ts +0 -52
  504. package/dist/world2d/collision-2d.d.ts.map +0 -1
  505. package/dist/world2d/collision-2d.js +0 -70
  506. package/dist/world2d/components-2d.d.ts +0 -47
  507. package/dist/world2d/components-2d.d.ts.map +0 -1
  508. package/dist/world2d/components-2d.js +0 -77
  509. package/dist/world2d/index.d.ts +0 -34
  510. package/dist/world2d/index.d.ts.map +0 -1
  511. package/dist/world2d/index.js +0 -32
  512. package/dist/world2d/ingest-iframe-2d.d.ts +0 -82
  513. package/dist/world2d/ingest-iframe-2d.d.ts.map +0 -1
  514. package/dist/world2d/ingest-iframe-2d.js +0 -166
  515. package/dist/world2d/ingest2d.d.ts +0 -97
  516. package/dist/world2d/ingest2d.d.ts.map +0 -1
  517. package/dist/world2d/ingest2d.js +0 -40
  518. package/dist/world2d/physics2d-registry.d.ts +0 -24
  519. package/dist/world2d/physics2d-registry.d.ts.map +0 -1
  520. package/dist/world2d/physics2d-registry.js +0 -38
  521. package/dist/world2d/pixi-game-adapter.d.ts +0 -107
  522. package/dist/world2d/pixi-game-adapter.d.ts.map +0 -1
  523. package/dist/world2d/pixi-game-adapter.js +0 -211
  524. package/dist/world2d/pixi-surface.d.ts +0 -39
  525. package/dist/world2d/pixi-surface.d.ts.map +0 -1
  526. package/dist/world2d/pixi-surface.js +0 -47
  527. package/dist/world2d/scene-capture-2d.d.ts +0 -43
  528. package/dist/world2d/scene-capture-2d.d.ts.map +0 -1
  529. package/dist/world2d/scene-capture-2d.js +0 -92
  530. package/dist/world2d/scene2d-loader.d.ts +0 -27
  531. package/dist/world2d/scene2d-loader.d.ts.map +0 -1
  532. package/dist/world2d/scene2d-loader.js +0 -274
  533. package/dist/world2d/schema/entity2d.d.ts +0 -102
  534. package/dist/world2d/schema/entity2d.d.ts.map +0 -1
  535. package/dist/world2d/schema/entity2d.js +0 -119
  536. package/dist/world2d/schema/physics2d.d.ts +0 -46
  537. package/dist/world2d/schema/physics2d.d.ts.map +0 -1
  538. package/dist/world2d/schema/physics2d.js +0 -45
  539. package/dist/world2d/schema/sprite.d.ts +0 -42
  540. package/dist/world2d/schema/sprite.d.ts.map +0 -1
  541. package/dist/world2d/schema/sprite.js +0 -63
  542. package/dist/world2d/schema/tilemap.d.ts +0 -15
  543. package/dist/world2d/schema/tilemap.d.ts.map +0 -1
  544. package/dist/world2d/schema/tilemap.js +0 -19
  545. package/dist/world2d/schema/tuples2d.d.ts +0 -20
  546. package/dist/world2d/schema/tuples2d.d.ts.map +0 -1
  547. package/dist/world2d/schema/tuples2d.js +0 -19
  548. package/dist/world2d/system-adapters-2d.d.ts +0 -16
  549. package/dist/world2d/system-adapters-2d.d.ts.map +0 -1
  550. package/dist/world2d/system-adapters-2d.js +0 -37
  551. package/dist/world2d/transform-writer-2d.d.ts +0 -16
  552. package/dist/world2d/transform-writer-2d.d.ts.map +0 -1
  553. package/dist/world2d/transform-writer-2d.js +0 -22
  554. package/dist/world2d/types.d.ts +0 -53
  555. package/dist/world2d/types.d.ts.map +0 -1
  556. package/dist/world2d/types.js +0 -1
  557. package/src/runtime/scene-ui-bridge.ts +0 -86
  558. package/src/runtime/scene-ui-data.ts +0 -119
  559. package/src/scene/schema/ui.ts +0 -602
@@ -1,60 +0,0 @@
1
- /**
2
- * Ingest overlay application core — the structural-path identity scheme and
3
- * override-application loop shared by the EDITOR's `IngestAuthoringAdapter`
4
- * (`packages/editor/src/authoring/ingest-authoring-adapter.ts`, which layers
5
- * hierarchy/selection/undo bookkeeping over it) and the T3.8 runtime ship-path
6
- * applier (`./overlay-applier.ts`, which uses it directly with none of that
7
- * editor bookkeeping). Extracted here (rather than duplicated) per D9's task
8
- * split (docs/DECISIONS-PENDING.md §D9) — the editor re-exports/reuses this
9
- * module so its behavior (and the ids it mints) stay byte-for-byte identical
10
- * between "authored in the editor" and "reapplied at ship time".
11
- *
12
- * Identity: each object gets a deterministic **structural-path id** — stable
13
- * for a given scene shape (position in the tree + three.js type + name), so
14
- * the SAME id re-binds to the SAME object after an independent fresh walk of
15
- * an unmodified game's rebuilt scene (a reload, or a separate page entirely —
16
- * this is what lets an overlay authored in the editor apply cleanly in a
17
- * shipped build that never ran the editor). It is also written to
18
- * `userData.entityId` so the editor's object map / gizmo / selection (which
19
- * key on `entityId`) bind to foreign objects with no further shim.
20
- */
21
- import type * as THREE from 'three';
22
- import type { IngestOverlay } from './overlay-file';
23
- /** Fixed id for the captured render camera (not a scene child, so no structural path). */
24
- export declare const CAMERA_ID = "ingest:camera";
25
- /** The single (non-array) standard-ish material of a mesh, if it has a color. */
26
- export declare function colorMaterialOf(o: THREE.Object3D): THREE.MeshStandardMaterial | null;
27
- /** Result of a structural-path walk: the id→object map plus a few reflection stats. */
28
- export interface StructuralIdWalk {
29
- byId: Map<string, THREE.Object3D>;
30
- count: number;
31
- meshes: number;
32
- lights: number;
33
- }
34
- /**
35
- * (Re)assign structural-path ids to every object under `scene` (and, if
36
- * given, the separately-captured render `camera`, under the fixed
37
- * {@link CAMERA_ID}). Idempotent and deterministic from scene structure
38
- * (position + type + name) — the prerequisite for overlay reapplication
39
- * across an independent fresh walk (editor reload, or a shipped build that
40
- * never ran the editor at all).
41
- */
42
- export declare function assignStructuralIds(scene: THREE.Object3D, camera?: THREE.Object3D | undefined): StructuralIdWalk;
43
- /** Result of applying a saved overlay onto a structural-id-walked scene. */
44
- export interface OverlayApplyOutcome {
45
- applied: number;
46
- orphanedIds: string[];
47
- }
48
- /**
49
- * Apply a saved overlay's overrides onto the live objects in `byId` (from
50
- * {@link assignStructuralIds}). Ids absent from the map are "orphaned" — e.g. a
51
- * dynamic child that didn't respawn, or the vendored game was bumped and
52
- * restructured — never an error; the caller reports them (never silently) via
53
- * `./overlay-report.ts`. Mutates matched objects in place; does not mutate
54
- * `overlay` itself or track dirty/undo state — that bookkeeping is the
55
- * editor-side `IngestAuthoringAdapter`'s job (persistable-edit tracking, so
56
- * orphans round-trip on the next save) and is irrelevant to the ship-path
57
- * applier (which never saves).
58
- */
59
- export declare function applyOverlayToObjects(byId: Map<string, THREE.Object3D>, overlay: IngestOverlay): OverlayApplyOutcome;
60
- //# sourceMappingURL=overlay-apply.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlay-apply.d.ts","sourceRoot":"","sources":["../../../src/adapter/ingest/overlay-apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,0FAA0F;AAC1F,eAAO,MAAM,SAAS,kBAAkB,CAAC;AAEzC,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAKpF;AAED,uFAAuF;AACvF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,KAAK,CAAC,QAAQ,EACrB,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,SAAS,GAClC,gBAAgB,CA4BlB;AAED,4EAA4E;AAC5E,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EACjC,OAAO,EAAE,aAAa,GACrB,mBAAmB,CAkBrB"}
@@ -1,101 +0,0 @@
1
- /**
2
- * Ingest overlay application core — the structural-path identity scheme and
3
- * override-application loop shared by the EDITOR's `IngestAuthoringAdapter`
4
- * (`packages/editor/src/authoring/ingest-authoring-adapter.ts`, which layers
5
- * hierarchy/selection/undo bookkeeping over it) and the T3.8 runtime ship-path
6
- * applier (`./overlay-applier.ts`, which uses it directly with none of that
7
- * editor bookkeeping). Extracted here (rather than duplicated) per D9's task
8
- * split (docs/DECISIONS-PENDING.md §D9) — the editor re-exports/reuses this
9
- * module so its behavior (and the ids it mints) stay byte-for-byte identical
10
- * between "authored in the editor" and "reapplied at ship time".
11
- *
12
- * Identity: each object gets a deterministic **structural-path id** — stable
13
- * for a given scene shape (position in the tree + three.js type + name), so
14
- * the SAME id re-binds to the SAME object after an independent fresh walk of
15
- * an unmodified game's rebuilt scene (a reload, or a separate page entirely —
16
- * this is what lets an overlay authored in the editor apply cleanly in a
17
- * shipped build that never ran the editor). It is also written to
18
- * `userData.entityId` so the editor's object map / gizmo / selection (which
19
- * key on `entityId`) bind to foreign objects with no further shim.
20
- */
21
- import { setUserData } from '../../scene/user-data';
22
- /** Fixed id for the captured render camera (not a scene child, so no structural path). */
23
- export const CAMERA_ID = 'ingest:camera';
24
- /** The single (non-array) standard-ish material of a mesh, if it has a color. */
25
- export function colorMaterialOf(o) {
26
- const mat = o.material;
27
- if (!mat || Array.isArray(mat))
28
- return null;
29
- const m = mat;
30
- return m.color ? m : null;
31
- }
32
- /**
33
- * (Re)assign structural-path ids to every object under `scene` (and, if
34
- * given, the separately-captured render `camera`, under the fixed
35
- * {@link CAMERA_ID}). Idempotent and deterministic from scene structure
36
- * (position + type + name) — the prerequisite for overlay reapplication
37
- * across an independent fresh walk (editor reload, or a shipped build that
38
- * never ran the editor at all).
39
- */
40
- export function assignStructuralIds(scene, camera) {
41
- const byId = new Map();
42
- let count = 0;
43
- let meshes = 0;
44
- let lights = 0;
45
- const visit = (o, path) => {
46
- const id = `ingest:${path}:${o.type}:${o.name || ''}`;
47
- setUserData(o, 'entityId', id);
48
- byId.set(id, o);
49
- count++;
50
- if (o.isLight)
51
- lights++;
52
- else if (o.isMesh)
53
- meshes++;
54
- o.children.forEach((c, i) => {
55
- visit(c, `${path}/${i}`);
56
- });
57
- };
58
- scene.children.forEach((c, i) => {
59
- visit(c, `${i}`);
60
- });
61
- if (camera) {
62
- setUserData(camera, 'entityId', CAMERA_ID);
63
- byId.set(CAMERA_ID, camera);
64
- count++;
65
- }
66
- return { byId, count, meshes, lights };
67
- }
68
- /**
69
- * Apply a saved overlay's overrides onto the live objects in `byId` (from
70
- * {@link assignStructuralIds}). Ids absent from the map are "orphaned" — e.g. a
71
- * dynamic child that didn't respawn, or the vendored game was bumped and
72
- * restructured — never an error; the caller reports them (never silently) via
73
- * `./overlay-report.ts`. Mutates matched objects in place; does not mutate
74
- * `overlay` itself or track dirty/undo state — that bookkeeping is the
75
- * editor-side `IngestAuthoringAdapter`'s job (persistable-edit tracking, so
76
- * orphans round-trip on the next save) and is irrelevant to the ship-path
77
- * applier (which never saves).
78
- */
79
- export function applyOverlayToObjects(byId, overlay) {
80
- let applied = 0;
81
- const orphanedIds = [];
82
- for (const [id, ov] of Object.entries(overlay)) {
83
- const o = byId.get(id);
84
- if (!o) {
85
- orphanedIds.push(id);
86
- continue;
87
- }
88
- if (ov.position)
89
- o.position.set(ov.position[0], ov.position[1], ov.position[2]);
90
- if (ov.rotation)
91
- o.quaternion.set(ov.rotation[0], ov.rotation[1], ov.rotation[2], ov.rotation[3]);
92
- if (ov.scale)
93
- o.scale.set(ov.scale[0], ov.scale[1], ov.scale[2]);
94
- if (ov.color)
95
- colorMaterialOf(o)?.color.set(ov.color);
96
- if (ov.visible !== undefined)
97
- o.visible = ov.visible;
98
- applied++;
99
- }
100
- return { applied, orphanedIds };
101
- }
@@ -1,79 +0,0 @@
1
- /**
2
- * Ingest overlay envelope — the on-disk shape shared by every consumer of a
3
- * saved ingest overlay: the editor (`packages/editor/src/authoring/ingest-overlay.ts`,
4
- * which persists it through the storage-backend seam) AND the T3.8 runtime ship-path
5
- * applier (`./overlay-applier.ts`, which fetches it over plain HTTP in a deployed
6
- * game with no editor/storage-backend dependency at all).
7
- *
8
- * This module is the dependency-free core (types + pure parsing) both share — moved
9
- * here (from the editor-only module that used to own it) per D9's task split
10
- * (docs/DECISIONS-PENDING.md §D9): the editor keeps the storage-backend-aware
11
- * `loadOverlay`/`saveOverlay` and re-exports everything below unchanged so its
12
- * existing import sites don't churn.
13
- */
14
- /** A single object's persisted overrides (only the fields the user changed). */
15
- export interface IngestOverride {
16
- position?: [number, number, number];
17
- rotation?: [number, number, number, number];
18
- scale?: [number, number, number];
19
- color?: string;
20
- visible?: boolean;
21
- }
22
- /** id (structural-path) → overrides. */
23
- export type IngestOverlay = Record<string, IngestOverride>;
24
- /** Current on-disk envelope format version (D9, docs/DECISIONS-PENDING.md §D9). */
25
- export declare const OVERLAY_FORMAT_VERSION = 1;
26
- /**
27
- * The on-disk overlay envelope (D9 — overlay versioning + orphan reporting).
28
- * Wraps the flat `IngestOverlay` (id → overrides) with save-time provenance:
29
- * which game version the edits were authored against, so a later mount (editor
30
- * OR shipped runtime) can detect drift and report it (`./overlay-report.ts`'s
31
- * `OverlayApplyReport`).
32
- *
33
- * `formatVersion` distinguishes this from the PRE-D9 flat file (the whole JSON
34
- * file WAS the `IngestOverlay`): {@link parseOverlayFile} recognizes both. An
35
- * object with `formatVersion` + `overrides` parses as the real envelope; any
36
- * other shape (or unparseable content) parses as a legacy flat file, wrapped as
37
- * `{ formatVersion: 0, authoredAgainst: { gameVersion: null }, overrides: <the flat object> }`
38
- * — never rejected, never warned about by itself.
39
- *
40
- * `authoredAgainst.upstreamPin` (R5, docs/MASTER-ARCHITECTURE-REVIEW.md
41
- * §4(c)/§7.1 item 9 — the overlay-identity gap `gameVersion` alone doesn't
42
- * close: `gameVersion` is the manifest's own `version` field, which a
43
- * re-vendor of the upstream game need not bump — see every `public/ingest/*`
44
- * game's `vgai.game.json`, all pinned at `"version": "0.1.0"` regardless of
45
- * upstream commit) is an OPTIONAL sibling key, deliberately absent from this
46
- * type's older call sites' literal shape: its ABSENCE (the key missing from
47
- * `authoredAgainst` entirely) is the "legacy overlay" signal — saved by code
48
- * that predates this field, so the pin concept never existed for it, and
49
- * `./overlay-report.ts`'s apply-time check must skip it (not treat it as a
50
- * guaranteed mismatch OR a guaranteed match — anti-shim, no guessing). A
51
- * `null` VALUE (key present, value `null`) means R5-aware save-time code DID
52
- * look for a pin and honestly found none (e.g. an externally-authored,
53
- * non-vendored project opened via the CLI-on-folder route, which has no
54
- * `UPSTREAM.md` at all). See `./upstream-pin.ts` for the pure extraction, and
55
- * `packages/editor/src/ingest-mode.ts` for where it's read at save/apply
56
- * time. This is purely additive — {@link parseOverlayFile} never invents the
57
- * key for an envelope that didn't have it.
58
- */
59
- export interface OverlayFile {
60
- formatVersion: number;
61
- authoredAgainst: {
62
- gameVersion: string | null;
63
- upstreamPin?: string | null;
64
- };
65
- overrides: IngestOverlay;
66
- }
67
- /** Where a game's overlay lives, project-root-relative (also the ship path's default fetch URL). */
68
- export declare function overlayPath(gameId: string): string;
69
- /** The empty envelope — no overlay found / nothing authored yet. */
70
- export declare function emptyOverlayFile(): OverlayFile;
71
- /**
72
- * Parse a loaded/fetched overlay's raw JSON into the {@link OverlayFile} shape,
73
- * transparently upgrading a legacy (pre-D9) flat file — the whole parsed value
74
- * IS the `IngestOverlay` in that case. Pure — no I/O, no storage backend, so
75
- * it's usable from any context (editor `loadOverlay`, the ship-path applier's
76
- * `fetch().then(r => r.json())`).
77
- */
78
- export declare function parseOverlayFile(raw: unknown): OverlayFile;
79
- //# sourceMappingURL=overlay-file.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlay-file.d.ts","sourceRoot":"","sources":["../../../src/adapter/ingest/overlay-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAE3D,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE;QAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC7E,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,oGAAoG;AACpG,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,IAAI,WAAW,CAM9C;AAYD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CA0B1D"}
@@ -1,66 +0,0 @@
1
- /**
2
- * Ingest overlay envelope — the on-disk shape shared by every consumer of a
3
- * saved ingest overlay: the editor (`packages/editor/src/authoring/ingest-overlay.ts`,
4
- * which persists it through the storage-backend seam) AND the T3.8 runtime ship-path
5
- * applier (`./overlay-applier.ts`, which fetches it over plain HTTP in a deployed
6
- * game with no editor/storage-backend dependency at all).
7
- *
8
- * This module is the dependency-free core (types + pure parsing) both share — moved
9
- * here (from the editor-only module that used to own it) per D9's task split
10
- * (docs/DECISIONS-PENDING.md §D9): the editor keeps the storage-backend-aware
11
- * `loadOverlay`/`saveOverlay` and re-exports everything below unchanged so its
12
- * existing import sites don't churn.
13
- */
14
- /** Current on-disk envelope format version (D9, docs/DECISIONS-PENDING.md §D9). */
15
- export const OVERLAY_FORMAT_VERSION = 1;
16
- /** Where a game's overlay lives, project-root-relative (also the ship path's default fetch URL). */
17
- export function overlayPath(gameId) {
18
- return `.vgai/overlays/${gameId}.json`;
19
- }
20
- /** The empty envelope — no overlay found / nothing authored yet. */
21
- export function emptyOverlayFile() {
22
- return {
23
- formatVersion: OVERLAY_FORMAT_VERSION,
24
- authoredAgainst: { gameVersion: null },
25
- overrides: {},
26
- };
27
- }
28
- /** An envelope has both its distinguishing keys — anything else is a legacy flat file. */
29
- function isEnvelope(raw) {
30
- return (!!raw &&
31
- typeof raw === 'object' &&
32
- 'formatVersion' in raw &&
33
- 'overrides' in raw);
34
- }
35
- /**
36
- * Parse a loaded/fetched overlay's raw JSON into the {@link OverlayFile} shape,
37
- * transparently upgrading a legacy (pre-D9) flat file — the whole parsed value
38
- * IS the `IngestOverlay` in that case. Pure — no I/O, no storage backend, so
39
- * it's usable from any context (editor `loadOverlay`, the ship-path applier's
40
- * `fetch().then(r => r.json())`).
41
- */
42
- export function parseOverlayFile(raw) {
43
- if (isEnvelope(raw)) {
44
- const rawAuthored = (raw.authoredAgainst ?? { gameVersion: null });
45
- const authoredAgainst = {
46
- gameVersion: rawAuthored.gameVersion ?? null,
47
- };
48
- // Preserve ABSENCE vs. explicit `null` (see this field's doc comment
49
- // above) — only copy the key over if the raw JSON actually had it, rather
50
- // than defaulting it in (which would make every pre-R5 saved overlay look
51
- // like a "checked, found nothing" R5 save instead of "never checked").
52
- if ('upstreamPin' in rawAuthored)
53
- authoredAgainst.upstreamPin = rawAuthored.upstreamPin ?? null;
54
- return {
55
- formatVersion: raw.formatVersion,
56
- authoredAgainst,
57
- overrides: raw.overrides ?? {},
58
- };
59
- }
60
- // Legacy flat file (pre-D9): the whole parsed object IS the overrides map.
61
- return {
62
- formatVersion: 0,
63
- authoredAgainst: { gameVersion: null },
64
- overrides: (raw ?? {}),
65
- };
66
- }
@@ -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"}