@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,26 +1,26 @@
1
1
  /**
2
- * `WorldKind` — the kinds of render surface a world can be (T7.1/T7.3/T6.2).
2
+ * `AdapterSurface` — the kinds of render surface a world can be (T7.1/T7.3/T6.2).
3
3
  *
4
4
  * Moved here (T7.5, `docs/BACKBONE-TASKS.md`'s D6 row) from `runtime/game.ts`
5
5
  * so `adapter/game-adapter.ts`'s kind-tagged `MountedWorld` types can name it
6
6
  * without a value-level import cycle (`runtime/game.ts` type-imports from
7
7
  * `adapter/game-adapter.ts` already). This is a leaf module — it imports
8
8
  * nothing — so anything may import it with zero risk of a cycle.
9
- * `runtime/game.ts` re-exports this SAME type (`export type { WorldKind }`),
10
- * so no existing `import type { WorldKind } from '../runtime/game'` call site
9
+ * `runtime/game.ts` re-exports this SAME type (`export type { AdapterSurface }`),
10
+ * so no existing `import type { AdapterSurface } from '../runtime/game'` call site
11
11
  * needed to change.
12
12
  */
13
- export type WorldKind = 'threejs' | 'pixijs' | 'react';
13
+ export type AdapterSurface = 'threejs' | 'pixijs' | 'react';
14
14
 
15
15
  /**
16
- * Exhaustiveness guard for `WorldKind` dispatch (v4 architecture-review
16
+ * Exhaustiveness guard for `AdapterSurface` dispatch (v4 architecture-review
17
17
  * §7.4-2: a hypothetical 4th kind must fail to COMPILE at every kind-dispatch
18
18
  * site, not silently contribute nothing or silently default to an existing
19
19
  * kind). Lives here — colocated with the kind vocabulary itself, not in a
20
20
  * generic util module — so the three call sites that need it
21
21
  * (`runtime/create-runtime.ts`'s mount loop, `editor/adapter-resolver.ts`'s
22
22
  * `resolveAllWorlds`, `editor/play-mode.ts`'s `installMultiWorldAuthoring`)
23
- * import it from the same leaf module that defines `WorldKind`, keeping the
23
+ * import it from the same leaf module that defines `AdapterSurface`, keeping the
24
24
  * type and its guard from drifting apart. The `never` parameter is the
25
25
  * compile-time half of the guard (TS refuses to call this with anything the
26
26
  * compiler hasn't already narrowed to zero remaining variants); the thrown
@@ -42,11 +42,68 @@ export interface AuthoringCapabilities {
42
42
  layout?: boolean;
43
43
  }
44
44
 
45
+ /**
46
+ * The adapter's own answer to "what is truth behind these rows, and how
47
+ * writable is it" (spec 29 §5, docs/unified-world-editor/
48
+ * 29-hierarchy-philosophy.md). Provenance never varies WITHIN one adapter's
49
+ * rows — it is a property of the world boundary — so it is declared ONCE per
50
+ * adapter and rendered at the SEAM (the composite's `world:<id>` group row,
51
+ * or the panel header for a bare adapter), never per row. Only the adapter
52
+ * knows its truth: the shell must read this field, never guess from adapter
53
+ * identity (rule zero). Machine-readable operation gates stay in
54
+ * {@link AuthoringCapabilities}/provider presence — this type carries the
55
+ * HUMAN explanation those gates can point at when an affordance is present
56
+ * but unavailable.
57
+ */
58
+ export interface AuthoringProvenance {
59
+ /**
60
+ * What the rows project:
61
+ * - `document` — an authored data file the editor owns (e.g. a scene file);
62
+ * - `source-code` — the game's own source is the document (e.g. JSX);
63
+ * - `foreign` — a live tree the editor does not own (an unmodified external
64
+ * game, or any world edited only through an overlay); edits go to the
65
+ * overlay, never the source;
66
+ * - `live` — a running game adopted at play time; edits are not persisted;
67
+ * - `boundary` — a declared world with no live editing surface here.
68
+ */
69
+ source: 'document' | 'source-code' | 'foreign' | 'live' | 'boundary';
70
+ /** Short badge text the shell shows verbatim at the seam (e.g. "scene",
71
+ * "jsx", "overlay", "read-only", "live"). */
72
+ label: string;
73
+ /** One sentence explaining the truth/writability — shown as the seam
74
+ * badge's tooltip and as the reason on disabled affordances. */
75
+ detail: string;
76
+ }
77
+
78
+ /**
79
+ * Semantic place a node occupies in the universal authoring hierarchy.
80
+ *
81
+ * `kind` below remains the adapter's native kind (`mesh`, `button`,
82
+ * `pixi-container`, ...). `role` says what the row MEANS to the editor shell,
83
+ * so presentation and interaction never have to infer semantics from an id,
84
+ * label, or substrate-specific kind string.
85
+ */
86
+ export type EditorNodeRole =
87
+ | 'folder'
88
+ | 'root'
89
+ | 'document'
90
+ | 'story'
91
+ | 'component'
92
+ | 'element'
93
+ | 'entity'
94
+ | 'boundary';
95
+
45
96
  /** A node in the authoring hierarchy — format-neutral (not a `SceneEntity`). */
46
97
  export interface EditorNode {
47
98
  /** STABLE id — survives reload (see ingest structural-path ids). */
48
99
  id: string;
49
100
  label: string;
101
+ /** Adapter-declared semantic role. Optional for third-party/older adapters;
102
+ * the shell falls back to the native `kind` only for icon selection. */
103
+ role?: EditorNodeRole;
104
+ /** Optional source-owned context kept visually subordinate to `label`, such
105
+ * as `<header>` beneath a React component name or a document's file path. */
106
+ secondaryLabel?: string;
50
107
  kind: 'mesh' | 'light' | 'camera' | 'group' | 'object' | (string & {});
51
108
  parentId: string | null;
52
109
  childIds: string[];
@@ -56,6 +113,12 @@ export interface EditorNode {
56
113
  transformOwner?: TransformOwner;
57
114
  /** D8 — member of a RootGroup, not the active one; children may be unloaded. */
58
115
  inactiveRoot?: boolean;
116
+ /** Design state currently projected into the live authoring surface. */
117
+ active?: boolean;
118
+ /** The adapter resolved this boundary, but it is not editable here. */
119
+ readOnly?: boolean;
120
+ /** The adapter could not resolve the declared authoring boundary. */
121
+ error?: boolean;
59
122
  };
60
123
  }
61
124
 
@@ -371,6 +434,10 @@ export interface ColorSampleProvider {
371
434
 
372
435
  export interface AuthoringAdapter {
373
436
  readonly capabilities: AuthoringCapabilities;
437
+ /** Spec 29 §5 — seam-level provenance ("what is truth behind these rows").
438
+ * Absent ⇒ the shell shows no provenance badge (degrade silently — never
439
+ * fabricate a claim the adapter didn't make). */
440
+ readonly provenance?: AuthoringProvenance;
374
441
  readonly hierarchy: HierarchyProvider; // required — minimum is "read the tree"
375
442
  readonly selection?: SelectionProvider;
376
443
  readonly transforms?: TransformProvider;
@@ -10,10 +10,10 @@
10
10
 
11
11
  import type { Container } from 'pixi.js';
12
12
  import type * as THREE from 'three';
13
+ import type { AdapterSurface } from './adapter-surface';
13
14
  import type { AuthoringAdapter } from './authoring';
14
15
  import type { HostContext } from './host-context';
15
16
  import type { SystemAdapters } from './system-adapter';
16
- import type { WorldKind } from './world-kind';
17
17
 
18
18
  /**
19
19
  * The ingested-world observation contract (T7.4 slice 2 — `docs/
@@ -29,8 +29,8 @@ import type { WorldKind } from './world-kind';
29
29
  export interface WorldStateObserver {
30
30
  /**
31
31
  * Notified at most once per frame IF the adapter can hook the game's own
32
- * update (`loop: 'gated'` worlds, `docs/CAPABILITY-TIERS.md` §(d));
33
- * self-driven worlds (`loop: 'self-driven'`, raw-rAF) may notify on their
32
+ * update (`loop: 'gated'` roots, `docs/CAPABILITY-TIERS.md` §(d));
33
+ * self-driven roots (`loop: 'self-driven'`, raw-rAF) may notify on their
34
34
  * OWN rAF cadence instead — consumers must not assume our frame timing.
35
35
  * Returns an unsubscribe function.
36
36
  */
@@ -119,10 +119,10 @@ export interface MountedReactWorld extends MountedWorldBase {
119
119
  * is typed against now, replacing the THREE-only `MountedGame`. */
120
120
  export type MountedWorld = MountedThreeWorld | MountedPixiWorld | MountedReactWorld;
121
121
 
122
- /** Map a {@link WorldKind} to its mounted-world shape (mirrors `NodeOf`/
122
+ /** Map a {@link AdapterSurface} to its mounted-world shape (mirrors `NodeOf`/
123
123
  * `BodyOf`/`ColliderOf` in `ecs/game-component.ts`) — lets generic code over
124
- * `K extends WorldKind` name the right surface without a manual union. */
125
- export type MountedWorldFor<K extends WorldKind> = K extends 'threejs'
124
+ * `K extends AdapterSurface` name the right surface without a manual union. */
125
+ export type MountedWorldFor<K extends AdapterSurface> = K extends 'threejs'
126
126
  ? MountedThreeWorld
127
127
  : K extends 'pixijs'
128
128
  ? MountedPixiWorld
@@ -139,11 +139,11 @@ export type MountedWorldFor<K extends WorldKind> = K extends 'threejs'
139
139
  export type MountedGame = MountedThreeWorld;
140
140
 
141
141
  /** The interface every game implements to run on the host. Generic over
142
- * {@link WorldKind} (T7.5) so a non-threejs implementer's `mount` returns its
142
+ * {@link AdapterSurface} (T7.5) so a non-threejs implementer's `mount` returns its
143
143
  * OWN kind-tagged surface instead of being cast through the threejs shape —
144
144
  * defaults to `'threejs'` so every pre-T7.5 implementer/call site
145
145
  * (`GameAdapter`, unparameterized) keeps compiling unchanged. */
146
- export interface GameAdapter<K extends WorldKind = 'threejs'> {
146
+ export interface GameAdapter<K extends AdapterSurface = 'threejs'> {
147
147
  /** Stable id (telemetry/registry/conformance). */
148
148
  readonly id: string;
149
149
  /** Build/start the game against a host-provided context; return the handle. */
@@ -4,7 +4,7 @@
4
4
  * This generalizes the old `GameContext`, which baked in first-party system
5
5
  * choices (a Rapier world, the postprocessing composer, the InputManager, …).
6
6
  * `HostContext` provides only what ANY game needs — the shared three instance, a
7
- * surface, a renderer, a loop, assets, a UI overlay — and lets a game *ask* for
7
+ * surface, a renderer, a loop, and assets — and lets a game *ask* for
8
8
  * a first-party subsystem via `requestSystem`, which the host may or may not
9
9
  * supply. The host never assumes Rapier/Colyseus; those live behind
10
10
  * `SystemAdapters` owned by the first-party implementer.
@@ -54,8 +54,6 @@ export interface HostContext {
54
54
  readonly loop: LoopHandle;
55
55
  /** Shared GLTF/texture cache. */
56
56
  readonly assets: AssetCache;
57
- /** HUD overlay container (pointer-events:none by default). */
58
- readonly ui: HTMLElement;
59
57
  /**
60
58
  * No GPU/DOM/audio available (Node conformance tests). A first-party adapter
61
59
  * skips postprocessing/render/audio/input-map loading but still builds the
@@ -68,7 +66,7 @@ export interface HostContext {
68
66
  /**
69
67
  * The Game root (T7.1 slice 1 — GAME-ROOT-DESIGN.md D6). The host
70
68
  * constructs the Game shell BEFORE mounting a `GameAdapter` and hands it
71
- * down here so an adapter can expose `ctx.game`/`ctx.worlds` to the game it
69
+ * down here so an adapter can expose `ctx.game`/`ctx.roots` to the game it
72
70
  * mounts. Absent in headless harnesses and foreign hosts that predate the
73
71
  * Game root — everything must keep working when this is undefined (the
74
72
  * zero-break guarantee for this slice).
@@ -10,15 +10,18 @@
10
10
  * docs/ADAPTER-ARCHITECTURE.md.
11
11
  */
12
12
 
13
+ export type { AdapterSurface } from './adapter-surface';
13
14
  export type {
14
15
  AssetDropProvider,
15
16
  AuthoringAdapter,
16
17
  AuthoringCapabilities,
18
+ AuthoringProvenance,
17
19
  BoxEditProvider,
18
20
  ColorSampleProvider,
19
21
  ComponentsProvider,
20
22
  DOMRectLike,
21
23
  EditorNode,
24
+ EditorNodeRole,
22
25
  FileMapProvider,
23
26
  HierarchyProvider,
24
27
  InspectorProvider,
@@ -80,4 +83,3 @@ export {
80
83
  type VgaiSceneConfig,
81
84
  VgaiSceneGameAdapter,
82
85
  } from './vgai-scene-game-adapter';
83
- export type { WorldKind } from './world-kind';
@@ -133,6 +133,78 @@ export interface AudioAdapter {
133
133
  isMuted(): boolean;
134
134
  }
135
135
 
136
+ /** One tick-stamped debug event (`ctx.debug.emit`, spec §3.3): `tick`/`simT`
137
+ * are the engine's own counters AT EMISSION, so events and state reads
138
+ * correlate frame-exactly across every door (in-page bridge, relay, panels).
139
+ *
140
+ * `seq` (run-4 friction #5 fix) is a registry-lifetime MONOTONIC counter,
141
+ * strictly increasing by one per `emit()` call regardless of `tick` —
142
+ * unlike `tick`, it is never shared by two events, which is what makes it
143
+ * safe to fence on. A debug command handler runs BETWEEN ticks (its
144
+ * emissions carry whatever `tick` is current at that instant, same as every
145
+ * other emission at that instant would), so two DIFFERENT events — or an
146
+ * event and a consumer's fence point — can legitimately share one `tick`;
147
+ * `seq` never collides the same way, so "everything after what I've already
148
+ * observed" is unambiguous. See `events(sinceTick, sinceSeq)` below. */
149
+ export interface TickStampedEvent {
150
+ tick: number;
151
+ simT: number;
152
+ event: string;
153
+ detail?: unknown;
154
+ seq: number;
155
+ }
156
+
157
+ /** One registered debug command's listing shape — `locus` is always present
158
+ * (defaults to `'client'` when a command didn't declare one) so every
159
+ * listing surface can print it without a fallback of its own. */
160
+ export interface DebugCommandInfo {
161
+ name: string;
162
+ description?: string | undefined;
163
+ /** JSON-Schema projection of the command's Zod args tuple, when declared. */
164
+ argsJsonSchema?: unknown;
165
+ locus: 'client' | 'server';
166
+ }
167
+
168
+ /**
169
+ * The debug/synthetic-player seam (`docs/SYNTHETIC-PLAYER-SPEC.md` §3.1):
170
+ * game-scoped introspection + actuation over whatever a game registers via
171
+ * `ctx.debug` (`registerStateProvider`/`registerCommand`/`emit`). NOT a
172
+ * gameplay API — this is the one seam the debug bridge, the editor's Debug
173
+ * Console/State Watch panels, and `@vgai/probe` all read/drive through.
174
+ */
175
+ export interface DebugAdapter {
176
+ providers(): { name: string; tier: 'observable' | 'assisted' }[];
177
+ /** One provider's current value. Throws `DebugError` code
178
+ * `STATE_PROVIDER_NOT_FOUND` (`data.registered`) for an unknown name. */
179
+ state(name: string): unknown;
180
+ /** One coherent snapshot of every registered provider — a throwing
181
+ * provider contributes `{ __error: String(err) }` for its own key rather
182
+ * than failing the whole snapshot. */
183
+ stateAll(): Record<string, unknown>;
184
+ commands(): DebugCommandInfo[];
185
+ /** Validates `args` against the command's declared Zod tuple (when
186
+ * present), then awaits the registered fn. Throws `DebugError` code
187
+ * `DEBUG_COMMAND_NOT_REGISTERED` for an unknown name,
188
+ * `DEBUG_COMMAND_ARGS_INVALID` for a validation failure, or
189
+ * `DEBUG_COMMAND_FAILED` wrapping anything the command itself threw. */
190
+ invoke(name: string, args: unknown[]): Promise<unknown>;
191
+ /** The tick-stamped event ring (cap 500, drops oldest).
192
+ *
193
+ * - `sinceSeq` given (run-4 friction #5 fix): filters to `seq > sinceSeq`
194
+ * — the unambiguous fence a consumer should use to mean "everything
195
+ * emitted after what I've already observed" (see `TickStampedEvent.seq`'s
196
+ * doc comment for why `tick` alone can't do this: a debug-command
197
+ * emission and a consumer's fence point can share one tick, and the
198
+ * old `tick > sinceTick` filter silently dropped same-tick events).
199
+ * Takes precedence over `sinceTick` when both are given.
200
+ * - `sinceTick` only: the ORIGINAL (pre-fix) filter, `tick > sinceTick` —
201
+ * kept for back-compat callers that only ever had a tick to fence on;
202
+ * still has the same-tick blind spot by construction, so a new caller
203
+ * should prefer `sinceSeq`.
204
+ * - Neither given: the whole ring. */
205
+ events(sinceTick?: number, sinceSeq?: number): TickStampedEvent[];
206
+ }
207
+
136
208
  /**
137
209
  * The set of optional subsystem providers a mounted game may expose. Absence of
138
210
  * a provider means "capability not supported" — the editor degrades gracefully.
@@ -144,4 +216,5 @@ export interface SystemAdapters {
144
216
  assets?: AssetAdapter;
145
217
  navigation?: NavigationAdapter;
146
218
  audio?: AudioAdapter;
219
+ debug?: DebugAdapter;
147
220
  }