@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,370 +0,0 @@
1
- /**
2
- * `applyDiff` — the exact inverse of `diffScene` (T4.5, `vgai apply-diff`).
3
- *
4
- * `diffScene` (packages/editor/src/scene-diff.ts) computes a `SceneDiff` from
5
- * two `SceneFile`s. This module does the other direction: given ONE
6
- * `SceneFile` and a `SceneDiff`, produce the `SceneFile` the diff describes —
7
- * a pure function, no editor/live-scene state involved.
8
- *
9
- * DEPENDENCY-DIRECTION NOTE (why this lives in the engine, not next to
10
- * `diffScene`): the natural home for `applyDiff` is beside `diffScene` in
11
- * `packages/editor/src/`. But the CLI (`packages/vgai-cli`) is the caller —
12
- * `vgai apply-diff <scene> <patch>` — and `packages/vgai-cli/package.json`
13
- * does not depend on `@vgai/editor` today (it depends on `@vgai/editor-sdk`,
14
- * a thin RPC client for a *running* editor server, and `create-vgai-project`
15
- * — neither pulls in editor source). Adding a cli→editor edge purely to reach
16
- * one pure function would be a real, new dependency inversion (the T3.7 row
17
- * for `deploy.ts` recorded the opposite call deliberately staying out for the
18
- * same reason). `@vgai/engine`, by contrast, is already a dependency of
19
- * `@vgai/editor` (one-directional: editor → engine) and is trivially addable
20
- * to vgai-cli (mirroring `packages/editor/template/validate-scenes.ts`, which
21
- * already imports `@vgai/engine/scene/parse` by its real published subpath).
22
- * So: `DiffOp`/`SceneDiff` (the shared TYPES) and `applyDiff`/`SceneDiffSchema`
23
- * (the new CODE) live in the engine; `scene-diff.ts` keeps its `diffScene`
24
- * implementation where it is and re-exports the two type names, so no editor
25
- * call site changes. Net edge added: vgai-cli → @vgai/engine (already the
26
- * direction every other package depends on engine). Zero new editor edges.
27
- *
28
- * ROUND-TRIP LAW: for any two scenes A, B — `applyDiff(A, diffScene(A, B))`
29
- * is deep-equal to B, WITH ONE NORMALIZATION: an entity whose `children`
30
- * becomes empty is left with `children` omitted (not `children: []`) —
31
- * matching the convention `cleanDocument`/`serializeScene`
32
- * (packages/editor/src/scene-serializer.ts) already use for saved scene
33
- * files. If B's own file happened to spell "no children" as a literal
34
- * `children: []` rather than omitting the key, a byte-level diff would show
35
- * that one field; every other field, and the full entity tree/order, matches
36
- * exactly. This holds because `diffScene` emits an explicit `move` op for
37
- * ANY entity whose absolute sibling index changes for ANY reason — not just
38
- * reparenting, but also a sibling being added/removed/reordered earlier in
39
- * the same array — so `applyDiff` never has to guess whether an untouched
40
- * entity's position shifted; every position-relevant entity carries an
41
- * explicit target index in the FINAL array.
42
- *
43
- * OP-ORDERING RULE (why applying `diff.ops` in array order would be wrong,
44
- * and what this function does instead):
45
- *
46
- * 1. Detach every `move` target from wherever it currently sits — BEFORE
47
- * processing any `remove`. Proof this matters: consider "remove parent
48
- * with moved-out child" — parent P is deleted in the new doc, but one
49
- * of P's old children, C, survives (reparented elsewhere). `diffScene`
50
- * necessarily emits BOTH `{ remove: P }` and `{ move: C, parentId: ... }`
51
- * (C's parentId can't still be P, since P doesn't exist in the new doc,
52
- * so a parentId change — hence a move op — is guaranteed). If `remove P`
53
- * ran first, it would delete P's whole subtree, including C, before C's
54
- * `move` op ever got to detach it. Detaching every mover first means C
55
- * is already pulled out of P's subtree by the time `remove P` runs, so
56
- * only what's genuinely being deleted is deleted.
57
- * 2. Process `remove` ops. A remove target that's already gone (not found)
58
- * is NOT an error IF it was swept away as a descendant of an earlier
59
- * remove in the SAME diff — `diffScene` lists every removed id
60
- * independently (both a removed parent AND its removed descendants each
61
- * get their own `remove` op, since `flattenEntities` flattens every
62
- * level regardless of ancestor state). A remove target not found and
63
- * not swept is a genuine error (bad id).
64
- * 3. Build a complete id → node resolution map covering EVERY entity that
65
- * will exist in the output: the stationary survivors (walked fresh from
66
- * what's left of the tree), then a freshly-created node object for each
67
- * `add` (children stripped — see below), then the already-detached node
68
- * for each `move`. Because this map is built in full before any
69
- * placement happens, a node object exists (and is resolvable as a
70
- * parent) from the moment it's created, independent of whether it has
71
- * itself been spliced into ITS OWN parent's array yet. This is what
72
- * makes "add-under-added-parent" (a newly-added parent with newly-added
73
- * children in the same diff) work with no dependency/topological-sort
74
- * logic: a child's `add`/`move` op resolves its `parentId` against this
75
- * map regardless of which op appears first in `diff.ops`.
76
- * 4. Placement: group `add` + `move` ops by target parentId, sort each
77
- * group ascending by `index`, then splice one at a time into the target
78
- * array in that order. Inserting in ascending order of FINAL target
79
- * index into an array that already holds every untouched sibling in
80
- * their final relative order (untouched siblings never move — any
81
- * absolute-index change gets its own `move` op, per the round-trip-law
82
- * note above) reconstructs the exact final array: by induction, every
83
- * element with a smaller final index than the one being inserted is
84
- * already in the array, so splicing at `index` places it correctly
85
- * relative to all of them, whether the array started empty (a brand
86
- * new parent) or partially populated (survivors of an existing parent).
87
- * 5. `update` ops last (order relative to placement doesn't matter — they
88
- * mutate an object by reference, found via the same id map, regardless
89
- * of where in the tree that reference currently lives).
90
- *
91
- * Every thrown error is an `ApplyDiffError` naming the 0-based index into
92
- * `diff.ops`, the op's `type`, and the entity id involved — enough for an
93
- * agent to locate and fix the offending op from the message alone.
94
- */
95
- export class ApplyDiffError extends Error {
96
- opIndex;
97
- opType;
98
- entityId;
99
- constructor(message, opIndex, opType, entityId) {
100
- super(`op #${opIndex} (${opType}, id=${entityId}): ${message}`);
101
- this.name = 'ApplyDiffError';
102
- this.opIndex = opIndex;
103
- this.opType = opType;
104
- this.entityId = entityId;
105
- }
106
- }
107
- function cloneEntity(e) {
108
- return JSON.parse(JSON.stringify(e));
109
- }
110
- /** True iff at least one entity in the tree (at any depth) carries a persisted `id`. */
111
- function hasAnyPersistedId(entities) {
112
- for (const e of entities) {
113
- if (e.id)
114
- return true;
115
- if (e.children && hasAnyPersistedId(e.children))
116
- return true;
117
- }
118
- return false;
119
- }
120
- /**
121
- * The id-persistence trap, made honest.
122
- *
123
- * `id` is `z.string().optional()` in the entity schema ("auto-generated if
124
- * omitted"), and the ids an agent can actually DISCOVER — `vgai status`' —
125
- * are the RUNTIME uuids a live editor session assigns to id-less entities on
126
- * load (`editor-store.ts`'s `assignMissingIds`). `applyDiff` resolves ops
127
- * against the FILE. So for any scene authored the normal way (hand-written,
128
- * or scaffolded — none of which shipped with ids), the only ids on offer
129
- * could never resolve here, and the failure read `entity not found` — as if
130
- * the CALLER had typo'd the id. It is not a typo: NOTHING in that file could
131
- * ever have matched.
132
- *
133
- * The durable half of the fix makes ids real (the editor now persists
134
- * auto-assigned ids back to the scene file on load — see `loadDocument`), so
135
- * this message is the safety net for a file that has not been through that
136
- * path yet. It fires ONLY when the scene has zero persisted ids at all — a
137
- * genuine bad-id typo against an id-carrying scene still gets the plain,
138
- * unpadded message.
139
- */
140
- const NO_IDS_HINT = ' — and this scene file has NO persisted entity ids AT ALL, so nothing in it could have ' +
141
- 'matched, whatever id the op named. This is almost certainly not a typo: `vgai status` ' +
142
- 'reports RUNTIME ids a live editor session assigns to id-less entities on load, and those ' +
143
- 'only exist in the FILE once the editor has written them back (it now does that ' +
144
- 'automatically, via autosave, shortly after the scene loads). Open this scene in the editor ' +
145
- '(`vgai edit`), let it autosave, then re-read the ids with `vgai status` and retry. Do not ' +
146
- 'hand-write ids into the file.';
147
- /** Append the no-ids explanation to a not-found message when (and only when) the file has no ids. */
148
- function notFound(message, sceneHasIds) {
149
- return sceneHasIds ? message : message + NO_IDS_HINT;
150
- }
151
- /** Recursively search `list` (and descendants) for `id`; if found, splice it out (subtree intact) and return it. */
152
- function detachById(list, id) {
153
- for (let i = 0; i < list.length; i++) {
154
- const node = list[i];
155
- if (node.id === id) {
156
- list.splice(i, 1);
157
- return node;
158
- }
159
- if (node.children) {
160
- const found = detachById(node.children, id);
161
- if (found)
162
- return found;
163
- }
164
- }
165
- return undefined;
166
- }
167
- /** Collect the id of `node` and every descendant's id into `into`. */
168
- function collectIds(node, into) {
169
- if (node.id)
170
- into.add(node.id);
171
- if (node.children) {
172
- for (const child of node.children)
173
- collectIds(child, into);
174
- }
175
- }
176
- /** Delete `children` if it is now an empty array, to match the `cleanDocument`/`serializeScene` convention (see the round-trip-law note above). */
177
- function stripEmptyChildrenArrays(list) {
178
- for (const node of list) {
179
- if (node.children) {
180
- if (node.children.length === 0) {
181
- delete node.children;
182
- }
183
- else {
184
- stripEmptyChildrenArrays(node.children);
185
- }
186
- }
187
- }
188
- }
189
- /**
190
- * Apply a `SceneDiff` to a `SceneFile`, returning a NEW `SceneFile` (input is
191
- * not mutated). See the module jsdoc above for the round-trip law and the
192
- * op-ordering rule/proof.
193
- */
194
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: one cohesive apply-in-5-phases pipeline (detach movers, remove, index survivors, place adds+moves, update) — the phases share too much local state (working tree, id maps) to split without just passing that state through a longer parameter list.
195
- export function applyDiff(scene, diff) {
196
- const working = JSON.parse(JSON.stringify(scene));
197
- const ops = diff.ops;
198
- // Captured from the INPUT scene, before any op mutates `working` — see
199
- // `NO_IDS_HINT` above for what this distinguishes and why.
200
- const sceneHasIds = hasAnyPersistedId(scene.entities);
201
- // --- Metadata / environment (independent of entity ops) ---
202
- if (diff.metaChanged && diff.newName !== undefined) {
203
- working.name = diff.newName;
204
- }
205
- if (diff.environmentChanged) {
206
- if (diff.newEnvironment) {
207
- working.environment = diff.newEnvironment;
208
- }
209
- else {
210
- delete working.environment;
211
- }
212
- }
213
- // --- Phase 1: detach every `move` target before any `remove` runs ---
214
- //
215
- // A move target isn't always reachable directly off `working.entities`: if
216
- // its immediate (or more distant) ancestor ALSO has a `move` op that gets
217
- // detached first, the target now hangs off that already-detached ancestor
218
- // node, not off the main tree. `diffScene` always emits an ancestor's own
219
- // move/update entry before its descendants' (`flattenEntities` sets a
220
- // parent's map entry before recursing into children), so a single forward
221
- // pass already covers every diffScene-computed diff — but this loop doesn't
222
- // assume that ordering: it retries whatever hasn't been found yet against
223
- // the growing set of already-detached movers' subtrees, to a fixed point,
224
- // so `diff.ops` order genuinely does not matter (per SceneDiffSchema's
225
- // `ops` doc).
226
- const movedNodes = new Map();
227
- function detachFromAnywhere(id) {
228
- const direct = detachById(working.entities, id);
229
- if (direct)
230
- return direct;
231
- for (const mover of movedNodes.values()) {
232
- if (mover.children) {
233
- const found = detachById(mover.children, id);
234
- if (found)
235
- return found;
236
- }
237
- }
238
- return undefined;
239
- }
240
- const moveOpIndices = ops
241
- .map((op, i) => ({ op, i }))
242
- .filter((x) => x.op.type === 'move');
243
- const pendingMoves = new Set(moveOpIndices.map((x) => x.i));
244
- let madeProgress = true;
245
- while (pendingMoves.size > 0 && madeProgress) {
246
- madeProgress = false;
247
- for (const { op, i } of moveOpIndices) {
248
- if (!pendingMoves.has(i))
249
- continue;
250
- const node = detachFromAnywhere(op.id);
251
- if (node) {
252
- movedNodes.set(op.id, node);
253
- pendingMoves.delete(i);
254
- madeProgress = true;
255
- }
256
- }
257
- }
258
- if (pendingMoves.size > 0) {
259
- const i = [...pendingMoves][0];
260
- const op = ops[i];
261
- throw new ApplyDiffError(notFound('entity not found (nothing to move)', sceneHasIds), i, 'move', op.id);
262
- }
263
- // --- Phase 2: removes (a not-found target is fine if it was already swept
264
- // up as a descendant of an earlier remove, OR if it hangs off a node
265
- // that was itself moved in phase 1 — see `detachFromAnywhere` above) ---
266
- const sweptIds = new Set();
267
- ops.forEach((op, i) => {
268
- if (op.type !== 'remove')
269
- return;
270
- const node = detachFromAnywhere(op.id);
271
- if (node) {
272
- collectIds(node, sweptIds);
273
- return;
274
- }
275
- if (sweptIds.has(op.id))
276
- return;
277
- throw new ApplyDiffError(notFound('entity not found (already removed via an ancestor, or an invalid id)', sceneHasIds), i, 'remove', op.id);
278
- });
279
- // --- Phase 3: build the complete id -> node resolution map ---
280
- const byId = new Map();
281
- const indexStationary = (list) => {
282
- for (const node of list) {
283
- if (node.id)
284
- byId.set(node.id, node);
285
- if (node.children)
286
- indexStationary(node.children);
287
- }
288
- };
289
- indexStationary(working.entities);
290
- const addNodes = new Map(); // opIndex -> freshly created node
291
- ops.forEach((op, i) => {
292
- if (op.type !== 'add')
293
- return;
294
- const entity = cloneEntity(op.entity);
295
- delete entity.children; // children are position-managed by their own add/move ops
296
- if (!entity.id)
297
- entity.id = crypto.randomUUID();
298
- if (byId.has(entity.id)) {
299
- throw new ApplyDiffError('duplicate id — an entity with this id already exists', i, 'add', entity.id);
300
- }
301
- byId.set(entity.id, entity);
302
- addNodes.set(i, entity);
303
- });
304
- ops.forEach((op, i) => {
305
- if (op.type !== 'move')
306
- return;
307
- if (byId.has(op.id)) {
308
- throw new ApplyDiffError('duplicate id — conflicts with an added entity', i, 'move', op.id);
309
- }
310
- byId.set(op.id, movedNodes.get(op.id));
311
- });
312
- // --- Phase 4: placement — group add+move ops by target parent, insert ascending by index ---
313
- const groups = new Map();
314
- ops.forEach((op, i) => {
315
- if (op.type === 'add') {
316
- const node = addNodes.get(i);
317
- const list = groups.get(op.parentId) ?? [];
318
- list.push({ index: op.index, node, opIndex: i, opType: 'add', entityId: node.id });
319
- groups.set(op.parentId, list);
320
- }
321
- else if (op.type === 'move') {
322
- const node = movedNodes.get(op.id);
323
- const list = groups.get(op.parentId) ?? [];
324
- list.push({ index: op.index, node, opIndex: i, opType: 'move', entityId: op.id });
325
- groups.set(op.parentId, list);
326
- }
327
- });
328
- for (const [parentId, placements] of groups) {
329
- let targetArray;
330
- if (parentId === null) {
331
- targetArray = working.entities;
332
- }
333
- else {
334
- const parentNode = byId.get(parentId);
335
- if (!parentNode) {
336
- const bad = placements[0];
337
- throw new ApplyDiffError(notFound(`parent entity "${parentId}" not found`, sceneHasIds), bad.opIndex, bad.opType, bad.entityId);
338
- }
339
- parentNode.children ??= [];
340
- targetArray = parentNode.children;
341
- }
342
- const sorted = [...placements].sort((a, b) => a.index - b.index);
343
- for (const p of sorted) {
344
- if (p.index < 0) {
345
- throw new ApplyDiffError(`negative target index (${p.index})`, p.opIndex, p.opType, p.entityId);
346
- }
347
- const clamped = Math.min(p.index, targetArray.length);
348
- targetArray.splice(clamped, 0, p.node);
349
- }
350
- }
351
- // --- Phase 5: updates — full field replace (except id/children), deleting omitted fields ---
352
- ops.forEach((op, i) => {
353
- if (op.type !== 'update')
354
- return;
355
- const node = byId.get(op.id);
356
- if (!node) {
357
- throw new ApplyDiffError(notFound('entity not found', sceneHasIds), i, 'update', op.id);
358
- }
359
- const { id: _id, children: _children, ...fields } = op.entity;
360
- for (const key of Object.keys(node)) {
361
- if (key === 'id' || key === 'children')
362
- continue;
363
- if (!(key in fields))
364
- delete node[key];
365
- }
366
- Object.assign(node, fields);
367
- });
368
- stripEmptyChildrenArrays(working.entities);
369
- return working;
370
- }
@@ -1,285 +0,0 @@
1
- /**
2
- * Zod schema for a `SceneDiff` JSON patch (T4.5 — `vgai apply-diff`).
3
- *
4
- * Validates the SHAPE of a hand-authored or `diffScene`-computed patch before
5
- * `applyDiff` (./scene-apply.ts) touches it. Not wired into
6
- * `scripts/generate-schema.ts` — that script's output feeds the *scene file*
7
- * JSON Schema (autocomplete/reference for `.vscn.json`/`.prefab.json`/
8
- * `vgai.game.json`), a different artifact from a diff/patch file. Adding a
9
- * 5th line there would be mechanically trivial, but a generated
10
- * `scene-diff.schema.json` has no current consumer (no editor autocomplete
11
- * targets *.json patch files) — left undone; revisit if one appears.
12
- *
13
- * `SceneEntitySchema` is reused as-is for `add`/`update` payloads even though
14
- * both operations ignore any `children` the payload carries (children are
15
- * position-managed exclusively by their own `add`/`move` ops — see
16
- * `applyDiff`'s jsdoc). Rejecting `children` at the schema level would need
17
- * an `.omit()` off a plain object schema, but `SceneEntitySchema` is a
18
- * `z.lazy()`-wrapped discriminated union (recursive type), so this schema
19
- * takes the more permissive-but-documented path: allow it through and let
20
- * `applyDiff` silently drop it, rather than add a second near-duplicate
21
- * entity schema just to forbid one field.
22
- */
23
- import { z } from 'zod';
24
- export declare const DiffOpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
25
- type: z.ZodLiteral<"add">;
26
- entity: z.ZodType<import("./schema").SceneEntity, unknown, z.core.$ZodTypeInternals<import("./schema").SceneEntity, unknown>>;
27
- parentId: z.ZodNullable<z.ZodString>;
28
- index: z.ZodNumber;
29
- }, z.core.$strip>, z.ZodObject<{
30
- type: z.ZodLiteral<"remove">;
31
- id: z.ZodString;
32
- }, z.core.$strip>, z.ZodObject<{
33
- type: z.ZodLiteral<"update">;
34
- id: z.ZodString;
35
- entity: z.ZodType<import("./schema").SceneEntity, unknown, z.core.$ZodTypeInternals<import("./schema").SceneEntity, unknown>>;
36
- }, z.core.$strip>, z.ZodObject<{
37
- type: z.ZodLiteral<"move">;
38
- id: z.ZodString;
39
- parentId: z.ZodNullable<z.ZodString>;
40
- index: z.ZodNumber;
41
- }, z.core.$strip>], "type">;
42
- export declare const SceneDiffSchema: z.ZodObject<{
43
- ops: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
44
- type: z.ZodLiteral<"add">;
45
- entity: z.ZodType<import("./schema").SceneEntity, unknown, z.core.$ZodTypeInternals<import("./schema").SceneEntity, unknown>>;
46
- parentId: z.ZodNullable<z.ZodString>;
47
- index: z.ZodNumber;
48
- }, z.core.$strip>, z.ZodObject<{
49
- type: z.ZodLiteral<"remove">;
50
- id: z.ZodString;
51
- }, z.core.$strip>, z.ZodObject<{
52
- type: z.ZodLiteral<"update">;
53
- id: z.ZodString;
54
- entity: z.ZodType<import("./schema").SceneEntity, unknown, z.core.$ZodTypeInternals<import("./schema").SceneEntity, unknown>>;
55
- }, z.core.$strip>, z.ZodObject<{
56
- type: z.ZodLiteral<"move">;
57
- id: z.ZodString;
58
- parentId: z.ZodNullable<z.ZodString>;
59
- index: z.ZodNumber;
60
- }, z.core.$strip>], "type">>;
61
- environmentChanged: z.ZodBoolean;
62
- newEnvironment: z.ZodOptional<z.ZodObject<{
63
- background: z.ZodOptional<z.ZodString>;
64
- ambient: z.ZodOptional<z.ZodObject<{
65
- color: z.ZodString;
66
- intensity: z.ZodNumber;
67
- }, z.core.$strip>>;
68
- fog: z.ZodOptional<z.ZodObject<{
69
- type: z.ZodEnum<{
70
- linear: "linear";
71
- exponential: "exponential";
72
- }>;
73
- color: z.ZodString;
74
- near: z.ZodOptional<z.ZodNumber>;
75
- far: z.ZodOptional<z.ZodNumber>;
76
- density: z.ZodOptional<z.ZodNumber>;
77
- }, z.core.$strip>>;
78
- skybox: z.ZodOptional<z.ZodString>;
79
- envMapIntensity: z.ZodOptional<z.ZodNumber>;
80
- toneMapping: z.ZodOptional<z.ZodObject<{
81
- mode: z.ZodOptional<z.ZodEnum<{
82
- none: "none";
83
- linear: "linear";
84
- reinhard: "reinhard";
85
- cineon: "cineon";
86
- aces: "aces";
87
- agx: "agx";
88
- }>>;
89
- exposure: z.ZodOptional<z.ZodNumber>;
90
- }, z.core.$strip>>;
91
- postProcessing: z.ZodOptional<z.ZodObject<{
92
- bloom: z.ZodOptional<z.ZodObject<{
93
- enabled: z.ZodOptional<z.ZodBoolean>;
94
- intensity: z.ZodOptional<z.ZodNumber>;
95
- luminanceThreshold: z.ZodOptional<z.ZodNumber>;
96
- luminanceSmoothing: z.ZodOptional<z.ZodNumber>;
97
- }, z.core.$strip>>;
98
- vignette: z.ZodOptional<z.ZodObject<{
99
- enabled: z.ZodOptional<z.ZodBoolean>;
100
- darkness: z.ZodOptional<z.ZodNumber>;
101
- offset: z.ZodOptional<z.ZodNumber>;
102
- }, z.core.$strip>>;
103
- brightnessContrast: z.ZodOptional<z.ZodObject<{
104
- enabled: z.ZodOptional<z.ZodBoolean>;
105
- brightness: z.ZodOptional<z.ZodNumber>;
106
- contrast: z.ZodOptional<z.ZodNumber>;
107
- }, z.core.$strip>>;
108
- hueSaturation: z.ZodOptional<z.ZodObject<{
109
- enabled: z.ZodOptional<z.ZodBoolean>;
110
- hue: z.ZodOptional<z.ZodNumber>;
111
- saturation: z.ZodOptional<z.ZodNumber>;
112
- }, z.core.$strip>>;
113
- sepia: z.ZodOptional<z.ZodObject<{
114
- enabled: z.ZodOptional<z.ZodBoolean>;
115
- intensity: z.ZodOptional<z.ZodNumber>;
116
- }, z.core.$strip>>;
117
- colorDepth: z.ZodOptional<z.ZodObject<{
118
- enabled: z.ZodOptional<z.ZodBoolean>;
119
- bits: z.ZodOptional<z.ZodNumber>;
120
- }, z.core.$strip>>;
121
- chromaticAberration: z.ZodOptional<z.ZodObject<{
122
- enabled: z.ZodOptional<z.ZodBoolean>;
123
- offsetX: z.ZodOptional<z.ZodNumber>;
124
- offsetY: z.ZodOptional<z.ZodNumber>;
125
- radialModulation: z.ZodOptional<z.ZodBoolean>;
126
- modulationOffset: z.ZodOptional<z.ZodNumber>;
127
- }, z.core.$strip>>;
128
- lensDistortion: z.ZodOptional<z.ZodObject<{
129
- enabled: z.ZodOptional<z.ZodBoolean>;
130
- distortionX: z.ZodOptional<z.ZodNumber>;
131
- distortionY: z.ZodOptional<z.ZodNumber>;
132
- focalLengthX: z.ZodOptional<z.ZodNumber>;
133
- focalLengthY: z.ZodOptional<z.ZodNumber>;
134
- skew: z.ZodOptional<z.ZodNumber>;
135
- }, z.core.$strip>>;
136
- depthOfField: z.ZodOptional<z.ZodObject<{
137
- enabled: z.ZodOptional<z.ZodBoolean>;
138
- worldFocusDistance: z.ZodOptional<z.ZodNumber>;
139
- worldFocusRange: z.ZodOptional<z.ZodNumber>;
140
- bokehScale: z.ZodOptional<z.ZodNumber>;
141
- focalLength: z.ZodOptional<z.ZodNumber>;
142
- }, z.core.$strip>>;
143
- tiltShift: z.ZodOptional<z.ZodObject<{
144
- enabled: z.ZodOptional<z.ZodBoolean>;
145
- offset: z.ZodOptional<z.ZodNumber>;
146
- rotation: z.ZodOptional<z.ZodNumber>;
147
- focusArea: z.ZodOptional<z.ZodNumber>;
148
- feather: z.ZodOptional<z.ZodNumber>;
149
- }, z.core.$strip>>;
150
- noise: z.ZodOptional<z.ZodObject<{
151
- enabled: z.ZodOptional<z.ZodBoolean>;
152
- premultiply: z.ZodOptional<z.ZodBoolean>;
153
- }, z.core.$strip>>;
154
- scanline: z.ZodOptional<z.ZodObject<{
155
- enabled: z.ZodOptional<z.ZodBoolean>;
156
- density: z.ZodOptional<z.ZodNumber>;
157
- }, z.core.$strip>>;
158
- dotScreen: z.ZodOptional<z.ZodObject<{
159
- enabled: z.ZodOptional<z.ZodBoolean>;
160
- angle: z.ZodOptional<z.ZodNumber>;
161
- scale: z.ZodOptional<z.ZodNumber>;
162
- }, z.core.$strip>>;
163
- grid: z.ZodOptional<z.ZodObject<{
164
- enabled: z.ZodOptional<z.ZodBoolean>;
165
- scale: z.ZodOptional<z.ZodNumber>;
166
- lineWidth: z.ZodOptional<z.ZodNumber>;
167
- }, z.core.$strip>>;
168
- pixelation: z.ZodOptional<z.ZodObject<{
169
- enabled: z.ZodOptional<z.ZodBoolean>;
170
- granularity: z.ZodOptional<z.ZodNumber>;
171
- }, z.core.$strip>>;
172
- glitch: z.ZodOptional<z.ZodObject<{
173
- enabled: z.ZodOptional<z.ZodBoolean>;
174
- delayX: z.ZodOptional<z.ZodNumber>;
175
- delayY: z.ZodOptional<z.ZodNumber>;
176
- durationX: z.ZodOptional<z.ZodNumber>;
177
- durationY: z.ZodOptional<z.ZodNumber>;
178
- strengthX: z.ZodOptional<z.ZodNumber>;
179
- strengthY: z.ZodOptional<z.ZodNumber>;
180
- columns: z.ZodOptional<z.ZodNumber>;
181
- ratio: z.ZodOptional<z.ZodNumber>;
182
- }, z.core.$strip>>;
183
- shockWave: z.ZodOptional<z.ZodObject<{
184
- enabled: z.ZodOptional<z.ZodBoolean>;
185
- speed: z.ZodOptional<z.ZodNumber>;
186
- maxRadius: z.ZodOptional<z.ZodNumber>;
187
- waveSize: z.ZodOptional<z.ZodNumber>;
188
- amplitude: z.ZodOptional<z.ZodNumber>;
189
- positionX: z.ZodOptional<z.ZodNumber>;
190
- positionY: z.ZodOptional<z.ZodNumber>;
191
- positionZ: z.ZodOptional<z.ZodNumber>;
192
- }, z.core.$strip>>;
193
- smaa: z.ZodOptional<z.ZodObject<{
194
- enabled: z.ZodOptional<z.ZodBoolean>;
195
- preset: z.ZodOptional<z.ZodEnum<{
196
- low: "low";
197
- medium: "medium";
198
- high: "high";
199
- ultra: "ultra";
200
- }>>;
201
- }, z.core.$strip>>;
202
- ssao: z.ZodOptional<z.ZodObject<{
203
- enabled: z.ZodOptional<z.ZodBoolean>;
204
- radius: z.ZodOptional<z.ZodNumber>;
205
- intensity: z.ZodOptional<z.ZodNumber>;
206
- bias: z.ZodOptional<z.ZodNumber>;
207
- samples: z.ZodOptional<z.ZodNumber>;
208
- rings: z.ZodOptional<z.ZodNumber>;
209
- fade: z.ZodOptional<z.ZodNumber>;
210
- color: z.ZodOptional<z.ZodString>;
211
- }, z.core.$strip>>;
212
- n8ao: z.ZodOptional<z.ZodObject<{
213
- enabled: z.ZodOptional<z.ZodBoolean>;
214
- aoSamples: z.ZodOptional<z.ZodNumber>;
215
- aoRadius: z.ZodOptional<z.ZodNumber>;
216
- intensity: z.ZodOptional<z.ZodNumber>;
217
- denoiseSamples: z.ZodOptional<z.ZodNumber>;
218
- denoiseRadius: z.ZodOptional<z.ZodNumber>;
219
- distanceFalloff: z.ZodOptional<z.ZodNumber>;
220
- screenSpaceRadius: z.ZodOptional<z.ZodBoolean>;
221
- color: z.ZodOptional<z.ZodString>;
222
- halfRes: z.ZodOptional<z.ZodBoolean>;
223
- }, z.core.$strip>>;
224
- godRays: z.ZodOptional<z.ZodObject<{
225
- enabled: z.ZodOptional<z.ZodBoolean>;
226
- sourceEntity: z.ZodOptional<z.ZodString>;
227
- density: z.ZodOptional<z.ZodNumber>;
228
- decay: z.ZodOptional<z.ZodNumber>;
229
- weight: z.ZodOptional<z.ZodNumber>;
230
- exposure: z.ZodOptional<z.ZodNumber>;
231
- samples: z.ZodOptional<z.ZodNumber>;
232
- }, z.core.$strip>>;
233
- outline: z.ZodOptional<z.ZodObject<{
234
- enabled: z.ZodOptional<z.ZodBoolean>;
235
- tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
236
- edgeStrength: z.ZodOptional<z.ZodNumber>;
237
- pulseSpeed: z.ZodOptional<z.ZodNumber>;
238
- visibleEdgeColor: z.ZodOptional<z.ZodString>;
239
- hiddenEdgeColor: z.ZodOptional<z.ZodString>;
240
- xRay: z.ZodOptional<z.ZodBoolean>;
241
- }, z.core.$strip>>;
242
- ssr: z.ZodOptional<z.ZodObject<{
243
- enabled: z.ZodOptional<z.ZodBoolean>;
244
- intensity: z.ZodOptional<z.ZodNumber>;
245
- exponent: z.ZodOptional<z.ZodNumber>;
246
- distance: z.ZodOptional<z.ZodNumber>;
247
- thickness: z.ZodOptional<z.ZodNumber>;
248
- maxRoughness: z.ZodOptional<z.ZodNumber>;
249
- }, z.core.$strip>>;
250
- ssgi: z.ZodOptional<z.ZodObject<{
251
- enabled: z.ZodOptional<z.ZodBoolean>;
252
- intensity: z.ZodOptional<z.ZodNumber>;
253
- distance: z.ZodOptional<z.ZodNumber>;
254
- thickness: z.ZodOptional<z.ZodNumber>;
255
- maxRoughness: z.ZodOptional<z.ZodNumber>;
256
- }, z.core.$strip>>;
257
- motionBlur: z.ZodOptional<z.ZodObject<{
258
- enabled: z.ZodOptional<z.ZodBoolean>;
259
- intensity: z.ZodOptional<z.ZodNumber>;
260
- jitter: z.ZodOptional<z.ZodNumber>;
261
- samples: z.ZodOptional<z.ZodNumber>;
262
- }, z.core.$strip>>;
263
- }, z.core.$strip>>;
264
- navigation: z.ZodOptional<z.ZodObject<{
265
- cellSize: z.ZodOptional<z.ZodNumber>;
266
- cellHeight: z.ZodOptional<z.ZodNumber>;
267
- walkableSlopeAngle: z.ZodOptional<z.ZodNumber>;
268
- walkableHeight: z.ZodOptional<z.ZodNumber>;
269
- walkableClimb: z.ZodOptional<z.ZodNumber>;
270
- walkableRadius: z.ZodOptional<z.ZodNumber>;
271
- maxEdgeLen: z.ZodOptional<z.ZodNumber>;
272
- maxSimplificationError: z.ZodOptional<z.ZodNumber>;
273
- minRegionArea: z.ZodOptional<z.ZodNumber>;
274
- mergeRegionArea: z.ZodOptional<z.ZodNumber>;
275
- }, z.core.$strip>>;
276
- physics: z.ZodOptional<z.ZodObject<{
277
- collisionLayers: z.ZodOptional<z.ZodArray<z.ZodString>>;
278
- }, z.core.$strip>>;
279
- rendering: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
280
- }, z.core.$strip>>;
281
- metaChanged: z.ZodBoolean;
282
- newName: z.ZodOptional<z.ZodString>;
283
- }, z.core.$strip>;
284
- export type SceneDiffPatch = z.infer<typeof SceneDiffSchema>;
285
- //# sourceMappingURL=scene-diff-schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scene-diff-schema.d.ts","sourceRoot":"","sources":["../../src/scene/scene-diff-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkBxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;2BA0CvB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2BzB,CAAC;AAEJ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}