@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.
- package/package.json +1 -1
- package/schemas/engine-capabilities.json +4 -4
- package/schemas/vgai-game.schema.json +2 -2
- package/src/adapter/authoring.ts +42 -0
- package/src/adapter/index.ts +3 -0
- package/src/adapter/ingest/overlay-apply.ts +50 -6
- package/src/adapter/ingest/scene-capture.ts +51 -2
- package/src/adapter/vgai-scene-game-adapter.ts +24 -0
- package/src/manifest/schema.ts +7 -3
- package/src/runtime/create-runtime.ts +97 -0
- package/src/runtime/game.ts +11 -1
- package/src/scene/asset-ref-check.ts +1 -1
- package/src/scene/scene-loader.ts +2 -2
- package/src/scene/user-data.ts +18 -0
- package/src/world3d-react/behavior.tsx +19 -11
- package/src/world3d-react/r3f-adapter.tsx +8 -0
- package/dist/adapter/adapter-surface.d.ts +0 -30
- package/dist/adapter/adapter-surface.d.ts.map +0 -1
- package/dist/adapter/adapter-surface.js +0 -18
- package/dist/adapter/authoring.d.ts +0 -461
- package/dist/adapter/authoring.d.ts.map +0 -1
- package/dist/adapter/authoring.js +0 -22
- package/dist/adapter/colyseus-networking-adapter.d.ts +0 -43
- package/dist/adapter/colyseus-networking-adapter.d.ts.map +0 -1
- package/dist/adapter/colyseus-networking-adapter.js +0 -38
- package/dist/adapter/first-party-systems.d.ts +0 -38
- package/dist/adapter/first-party-systems.d.ts.map +0 -1
- package/dist/adapter/first-party-systems.js +0 -77
- package/dist/adapter/game-adapter.d.ts +0 -133
- package/dist/adapter/game-adapter.d.ts.map +0 -1
- package/dist/adapter/game-adapter.js +0 -10
- package/dist/adapter/host-context.d.ts +0 -71
- package/dist/adapter/host-context.d.ts.map +0 -1
- package/dist/adapter/host-context.js +0 -16
- package/dist/adapter/index.d.ts +0 -22
- package/dist/adapter/index.d.ts.map +0 -1
- package/dist/adapter/index.js +0 -15
- package/dist/adapter/ingest/game-contract.d.ts +0 -53
- package/dist/adapter/ingest/game-contract.d.ts.map +0 -1
- package/dist/adapter/ingest/game-contract.js +0 -30
- package/dist/adapter/ingest/overlay-applier.d.ts +0 -118
- package/dist/adapter/ingest/overlay-applier.d.ts.map +0 -1
- package/dist/adapter/ingest/overlay-applier.js +0 -132
- package/dist/adapter/ingest/overlay-apply.d.ts +0 -60
- package/dist/adapter/ingest/overlay-apply.d.ts.map +0 -1
- package/dist/adapter/ingest/overlay-apply.js +0 -101
- package/dist/adapter/ingest/overlay-file.d.ts +0 -79
- package/dist/adapter/ingest/overlay-file.d.ts.map +0 -1
- package/dist/adapter/ingest/overlay-file.js +0 -66
- package/dist/adapter/ingest/overlay-report.d.ts +0 -113
- package/dist/adapter/ingest/overlay-report.d.ts.map +0 -1
- package/dist/adapter/ingest/overlay-report.js +0 -103
- package/dist/adapter/ingest/scene-capture.d.ts +0 -97
- package/dist/adapter/ingest/scene-capture.d.ts.map +0 -1
- package/dist/adapter/ingest/scene-capture.js +0 -248
- package/dist/adapter/ingest/upstream-pin.d.ts +0 -47
- package/dist/adapter/ingest/upstream-pin.d.ts.map +0 -1
- package/dist/adapter/ingest/upstream-pin.js +0 -50
- package/dist/adapter/loop-gate-report.d.ts +0 -34
- package/dist/adapter/loop-gate-report.d.ts.map +0 -1
- package/dist/adapter/loop-gate-report.js +0 -37
- package/dist/adapter/rapier-physics-adapter.d.ts +0 -12
- package/dist/adapter/rapier-physics-adapter.d.ts.map +0 -1
- package/dist/adapter/rapier-physics-adapter.js +0 -46
- package/dist/adapter/system-adapter.d.ts +0 -206
- package/dist/adapter/system-adapter.d.ts.map +0 -1
- package/dist/adapter/system-adapter.js +0 -13
- package/dist/adapter/transform.d.ts +0 -18
- package/dist/adapter/transform.d.ts.map +0 -1
- package/dist/adapter/transform.js +0 -1
- package/dist/adapter/vgai-scene-game-adapter.d.ts +0 -108
- package/dist/adapter/vgai-scene-game-adapter.d.ts.map +0 -1
- package/dist/adapter/vgai-scene-game-adapter.js +0 -762
- package/dist/ai/navigation.d.ts +0 -64
- package/dist/ai/navigation.d.ts.map +0 -1
- package/dist/ai/navigation.js +0 -133
- package/dist/animation/anim-graph-types.d.ts +0 -25
- package/dist/animation/anim-graph-types.d.ts.map +0 -1
- package/dist/animation/anim-graph-types.js +0 -1
- package/dist/animation/animation-clock.d.ts +0 -213
- package/dist/animation/animation-clock.d.ts.map +0 -1
- package/dist/animation/animation-clock.js +0 -301
- package/dist/animation/blend-node.d.ts +0 -22
- package/dist/animation/blend-node.d.ts.map +0 -1
- package/dist/animation/blend-node.js +0 -97
- package/dist/animation/camera-ownership.d.ts +0 -250
- package/dist/animation/camera-ownership.d.ts.map +0 -1
- package/dist/animation/camera-ownership.js +0 -169
- package/dist/animation/cinematic-cues.d.ts +0 -200
- package/dist/animation/cinematic-cues.d.ts.map +0 -1
- package/dist/animation/cinematic-cues.js +0 -213
- package/dist/animation/clip-map.d.ts +0 -12
- package/dist/animation/clip-map.d.ts.map +0 -1
- package/dist/animation/clip-map.js +0 -37
- package/dist/animation/gsap-registration.d.ts +0 -119
- package/dist/animation/gsap-registration.d.ts.map +0 -1
- package/dist/animation/gsap-registration.js +0 -92
- package/dist/animation/theatre-clock-binding.d.ts +0 -89
- package/dist/animation/theatre-clock-binding.d.ts.map +0 -1
- package/dist/animation/theatre-clock-binding.js +0 -29
- package/dist/animation/theatre-director.d.ts +0 -242
- package/dist/animation/theatre-director.d.ts.map +0 -1
- package/dist/animation/theatre-director.js +0 -235
- package/dist/animation/theatre-object-binding.d.ts +0 -305
- package/dist/animation/theatre-object-binding.d.ts.map +0 -1
- package/dist/animation/theatre-object-binding.js +0 -351
- package/dist/animation/xstate-animation-binding.d.ts +0 -56
- package/dist/animation/xstate-animation-binding.d.ts.map +0 -1
- package/dist/animation/xstate-animation-binding.js +0 -331
- package/dist/animation/xstate-animation-meta.d.ts +0 -266
- package/dist/animation/xstate-animation-meta.d.ts.map +0 -1
- package/dist/animation/xstate-animation-meta.js +0 -252
- package/dist/assets.d.ts +0 -26
- package/dist/assets.d.ts.map +0 -1
- package/dist/assets.js +0 -55
- package/dist/audio/index.d.ts +0 -4
- package/dist/audio/index.d.ts.map +0 -1
- package/dist/audio/index.js +0 -24
- package/dist/audio/tone-clock-binding.d.ts +0 -75
- package/dist/audio/tone-clock-binding.d.ts.map +0 -1
- package/dist/audio/tone-clock-binding.js +0 -29
- package/dist/audio/tone-context.d.ts +0 -114
- package/dist/audio/tone-context.d.ts.map +0 -1
- package/dist/audio/tone-context.js +0 -39
- package/dist/audio/tone-offline-render.d.ts +0 -90
- package/dist/audio/tone-offline-render.d.ts.map +0 -1
- package/dist/audio/tone-offline-render.js +0 -56
- package/dist/audio/wav-encode.d.ts +0 -38
- package/dist/audio/wav-encode.d.ts.map +0 -1
- package/dist/audio/wav-encode.js +0 -97
- package/dist/character/cloth-sim.d.ts +0 -179
- package/dist/character/cloth-sim.d.ts.map +0 -1
- package/dist/character/cloth-sim.js +0 -334
- package/dist/character/spring-chain.d.ts +0 -135
- package/dist/character/spring-chain.d.ts.map +0 -1
- package/dist/character/spring-chain.js +0 -165
- package/dist/core/game-loop.d.ts +0 -42
- package/dist/core/game-loop.d.ts.map +0 -1
- package/dist/core/game-loop.js +0 -167
- package/dist/core/seeded-random.d.ts +0 -69
- package/dist/core/seeded-random.d.ts.map +0 -1
- package/dist/core/seeded-random.js +0 -121
- package/dist/core/system-runner.d.ts +0 -120
- package/dist/core/system-runner.d.ts.map +0 -1
- package/dist/core/system-runner.js +0 -297
- package/dist/core/types.d.ts +0 -92
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -25
- package/dist/data/data-asset.d.ts +0 -101
- package/dist/data/data-asset.d.ts.map +0 -1
- package/dist/data/data-asset.js +0 -122
- package/dist/data/data-check-core.d.ts +0 -110
- package/dist/data/data-check-core.d.ts.map +0 -1
- package/dist/data/data-check-core.js +0 -178
- package/dist/data/data-ref.d.ts +0 -79
- package/dist/data/data-ref.d.ts.map +0 -1
- package/dist/data/data-ref.js +0 -130
- package/dist/data/vite-plugin-data.d.ts +0 -79
- package/dist/data/vite-plugin-data.d.ts.map +0 -1
- package/dist/data/vite-plugin-data.js +0 -217
- package/dist/dev/console-bridge.d.ts +0 -22
- package/dist/dev/console-bridge.d.ts.map +0 -1
- package/dist/dev/console-bridge.js +0 -71
- package/dist/dev/debug-draw.d.ts +0 -24
- package/dist/dev/debug-draw.d.ts.map +0 -1
- package/dist/dev/debug-draw.js +0 -73
- package/dist/dev/logger.d.ts +0 -30
- package/dist/dev/logger.d.ts.map +0 -1
- package/dist/dev/logger.js +0 -90
- package/dist/dev/performance-profiler.d.ts +0 -60
- package/dist/dev/performance-profiler.d.ts.map +0 -1
- package/dist/dev/performance-profiler.js +0 -181
- package/dist/dev/webgl-gpu-timer.d.ts +0 -8
- package/dist/dev/webgl-gpu-timer.d.ts.map +0 -1
- package/dist/dev/webgl-gpu-timer.js +0 -52
- package/dist/ecs/component-manager.d.ts +0 -205
- package/dist/ecs/component-manager.d.ts.map +0 -1
- package/dist/ecs/component-manager.js +0 -706
- package/dist/ecs/game-component.d.ts +0 -146
- package/dist/ecs/game-component.d.ts.map +0 -1
- package/dist/ecs/game-component.js +0 -141
- package/dist/ecs/hmr-swap-report.d.ts +0 -53
- package/dist/ecs/hmr-swap-report.d.ts.map +0 -1
- package/dist/ecs/hmr-swap-report.js +0 -55
- package/dist/humanoid/bake.operation.d.ts +0 -119
- package/dist/humanoid/bake.operation.d.ts.map +0 -1
- package/dist/humanoid/bake.operation.js +0 -228
- package/dist/humanoid/body.d.ts +0 -101
- package/dist/humanoid/body.d.ts.map +0 -1
- package/dist/humanoid/body.js +0 -530
- package/dist/humanoid/clips.d.ts +0 -62
- package/dist/humanoid/clips.d.ts.map +0 -1
- package/dist/humanoid/clips.js +0 -121
- package/dist/humanoid/compose.d.ts +0 -75
- package/dist/humanoid/compose.d.ts.map +0 -1
- package/dist/humanoid/compose.js +0 -176
- package/dist/humanoid/generate.d.ts +0 -92
- package/dist/humanoid/generate.d.ts.map +0 -1
- package/dist/humanoid/generate.js +0 -124
- package/dist/humanoid/index.d.ts +0 -24
- package/dist/humanoid/index.d.ts.map +0 -1
- package/dist/humanoid/index.js +0 -18
- package/dist/humanoid/schema.d.ts +0 -35
- package/dist/humanoid/schema.d.ts.map +0 -1
- package/dist/humanoid/schema.js +0 -87
- package/dist/humanoid/skeleton.d.ts +0 -103
- package/dist/humanoid/skeleton.d.ts.map +0 -1
- package/dist/humanoid/skeleton.js +0 -289
- package/dist/index.d.ts +0 -37
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -30
- package/dist/input/input-manager.d.ts +0 -945
- package/dist/input/input-manager.d.ts.map +0 -1
- package/dist/input/input-manager.js +0 -2207
- package/dist/input/input-types.d.ts +0 -174
- package/dist/input/input-types.d.ts.map +0 -1
- package/dist/input/input-types.js +0 -1
- package/dist/input/prompt-labels.d.ts +0 -21
- package/dist/input/prompt-labels.d.ts.map +0 -1
- package/dist/input/prompt-labels.js +0 -121
- package/dist/input/rebind-controller.d.ts +0 -59
- package/dist/input/rebind-controller.d.ts.map +0 -1
- package/dist/input/rebind-controller.js +0 -85
- package/dist/input/schema.d.ts +0 -16
- package/dist/input/schema.d.ts.map +0 -1
- package/dist/input/schema.js +0 -228
- package/dist/loader.d.ts +0 -43
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -59
- package/dist/manifest/index.d.ts +0 -5
- package/dist/manifest/index.d.ts.map +0 -1
- package/dist/manifest/index.js +0 -8
- package/dist/manifest/load-file.d.ts +0 -4
- package/dist/manifest/load-file.d.ts.map +0 -1
- package/dist/manifest/load-file.js +0 -14
- package/dist/manifest/load.d.ts +0 -144
- package/dist/manifest/load.d.ts.map +0 -1
- package/dist/manifest/load.js +0 -273
- package/dist/manifest/schema.d.ts +0 -230
- package/dist/manifest/schema.d.ts.map +0 -1
- package/dist/manifest/schema.js +0 -394
- package/dist/physics/collision-system.d.ts +0 -41
- package/dist/physics/collision-system.d.ts.map +0 -1
- package/dist/physics/collision-system.js +0 -64
- package/dist/physics/physics-registry.d.ts +0 -45
- package/dist/physics/physics-registry.d.ts.map +0 -1
- package/dist/physics/physics-registry.js +0 -65
- package/dist/physics/transform-writer.d.ts +0 -16
- package/dist/physics/transform-writer.d.ts.map +0 -1
- package/dist/physics/transform-writer.js +0 -38
- package/dist/physics/trigger-dispatch.d.ts +0 -24
- package/dist/physics/trigger-dispatch.d.ts.map +0 -1
- package/dist/physics/trigger-dispatch.js +0 -80
- package/dist/react/game-state.d.ts +0 -156
- package/dist/react/game-state.d.ts.map +0 -1
- package/dist/react/game-state.js +0 -222
- package/dist/react/root-adapter.d.ts +0 -11
- package/dist/react/root-adapter.d.ts.map +0 -1
- package/dist/react/root-adapter.js +0 -41
- package/dist/react/unmanaged-root-detector.d.ts +0 -12
- package/dist/react/unmanaged-root-detector.d.ts.map +0 -1
- package/dist/react/unmanaged-root-detector.js +0 -45
- package/dist/react/use-data.d.ts +0 -60
- package/dist/react/use-data.d.ts.map +0 -1
- package/dist/react/use-data.js +0 -101
- package/dist/react/use-selection.d.ts +0 -75
- package/dist/react/use-selection.d.ts.map +0 -1
- package/dist/react/use-selection.js +0 -90
- package/dist/render/auto-batcher.d.ts +0 -34
- package/dist/render/auto-batcher.d.ts.map +0 -1
- package/dist/render/auto-batcher.js +0 -140
- package/dist/render/render-batch-system.d.ts +0 -33
- package/dist/render/render-batch-system.d.ts.map +0 -1
- package/dist/render/render-batch-system.js +0 -230
- package/dist/render/render-features.d.ts +0 -47
- package/dist/render/render-features.d.ts.map +0 -1
- package/dist/render/render-features.js +0 -105
- package/dist/render/render-settings.d.ts +0 -36
- package/dist/render/render-settings.d.ts.map +0 -1
- package/dist/render/render-settings.js +0 -51
- package/dist/runtime/create-runtime.d.ts +0 -249
- package/dist/runtime/create-runtime.d.ts.map +0 -1
- package/dist/runtime/create-runtime.js +0 -641
- package/dist/runtime/debug-bridge.d.ts +0 -257
- package/dist/runtime/debug-bridge.d.ts.map +0 -1
- package/dist/runtime/debug-bridge.js +0 -224
- package/dist/runtime/debug-registry.d.ts +0 -288
- package/dist/runtime/debug-registry.d.ts.map +0 -1
- package/dist/runtime/debug-registry.js +0 -513
- package/dist/runtime/frame-selector-cache.d.ts +0 -41
- package/dist/runtime/frame-selector-cache.d.ts.map +0 -1
- package/dist/runtime/frame-selector-cache.js +0 -65
- package/dist/runtime/game.d.ts +0 -496
- package/dist/runtime/game.d.ts.map +0 -1
- package/dist/runtime/game.js +0 -741
- package/dist/runtime/gameplay-rng-trap.d.ts +0 -48
- package/dist/runtime/gameplay-rng-trap.d.ts.map +0 -1
- package/dist/runtime/gameplay-rng-trap.js +0 -96
- package/dist/runtime/input-router.d.ts +0 -78
- package/dist/runtime/input-router.d.ts.map +0 -1
- package/dist/runtime/input-router.js +0 -171
- package/dist/runtime/mount-game.d.ts +0 -129
- package/dist/runtime/mount-game.d.ts.map +0 -1
- package/dist/runtime/mount-game.js +0 -152
- package/dist/runtime/mount-manifest.d.ts +0 -173
- package/dist/runtime/mount-manifest.d.ts.map +0 -1
- package/dist/runtime/mount-manifest.js +0 -297
- package/dist/runtime/render-audio-control.d.ts +0 -110
- package/dist/runtime/render-audio-control.d.ts.map +0 -1
- package/dist/runtime/render-audio-control.js +0 -111
- package/dist/runtime/render-control.d.ts +0 -291
- package/dist/runtime/render-control.d.ts.map +0 -1
- package/dist/runtime/render-control.js +0 -264
- package/dist/runtime/render-seed.d.ts +0 -57
- package/dist/runtime/render-seed.d.ts.map +0 -1
- package/dist/runtime/render-seed.js +0 -74
- package/dist/runtime/state-bridge.d.ts +0 -61
- package/dist/runtime/state-bridge.d.ts.map +0 -1
- package/dist/runtime/state-bridge.js +0 -63
- package/dist/runtime/types.d.ts +0 -253
- package/dist/runtime/types.d.ts.map +0 -1
- package/dist/runtime/types.js +0 -1
- package/dist/scene/asset-loaders.d.ts +0 -79
- package/dist/scene/asset-loaders.d.ts.map +0 -1
- package/dist/scene/asset-loaders.js +0 -141
- package/dist/scene/asset-paths.d.ts +0 -11
- package/dist/scene/asset-paths.d.ts.map +0 -1
- package/dist/scene/asset-paths.js +0 -108
- package/dist/scene/asset-ref-check.d.ts +0 -88
- package/dist/scene/asset-ref-check.d.ts.map +0 -1
- package/dist/scene/asset-ref-check.js +0 -214
- package/dist/scene/asset-registry.d.ts +0 -38
- package/dist/scene/asset-registry.d.ts.map +0 -1
- package/dist/scene/asset-registry.js +0 -66
- package/dist/scene/collider-dimensions.d.ts +0 -63
- package/dist/scene/collider-dimensions.d.ts.map +0 -1
- package/dist/scene/collider-dimensions.js +0 -98
- package/dist/scene/component-registry.d.ts +0 -22
- package/dist/scene/component-registry.d.ts.map +0 -1
- package/dist/scene/component-registry.js +0 -37
- package/dist/scene/defaults.d.ts +0 -252
- package/dist/scene/defaults.d.ts.map +0 -1
- package/dist/scene/defaults.js +0 -151
- package/dist/scene/geometries/index.d.ts +0 -8
- package/dist/scene/geometries/index.d.ts.map +0 -1
- package/dist/scene/geometries/index.js +0 -7
- package/dist/scene/geometries/terrain.d.ts +0 -2
- package/dist/scene/geometries/terrain.d.ts.map +0 -1
- package/dist/scene/geometries/terrain.js +0 -37
- package/dist/scene/geometry-registry.d.ts +0 -24
- package/dist/scene/geometry-registry.d.ts.map +0 -1
- package/dist/scene/geometry-registry.js +0 -20
- package/dist/scene/instance-registry.d.ts +0 -36
- package/dist/scene/instance-registry.d.ts.map +0 -1
- package/dist/scene/instance-registry.js +0 -55
- package/dist/scene/instancers/grid.d.ts +0 -2
- package/dist/scene/instancers/grid.d.ts.map +0 -1
- package/dist/scene/instancers/grid.js +0 -36
- package/dist/scene/instancers/index.d.ts +0 -8
- package/dist/scene/instancers/index.d.ts.map +0 -1
- package/dist/scene/instancers/index.js +0 -7
- package/dist/scene/light-camera-factory.d.ts +0 -23
- package/dist/scene/light-camera-factory.d.ts.map +0 -1
- package/dist/scene/light-camera-factory.js +0 -68
- package/dist/scene/material-factory.d.ts +0 -17
- package/dist/scene/material-factory.d.ts.map +0 -1
- package/dist/scene/material-factory.js +0 -197
- package/dist/scene/material-registry.d.ts +0 -40
- package/dist/scene/material-registry.d.ts.map +0 -1
- package/dist/scene/material-registry.js +0 -44
- package/dist/scene/materials/index.d.ts +0 -8
- package/dist/scene/materials/index.d.ts.map +0 -1
- package/dist/scene/materials/index.js +0 -7
- package/dist/scene/materials/water.d.ts +0 -2
- package/dist/scene/materials/water.d.ts.map +0 -1
- package/dist/scene/materials/water.js +0 -54
- package/dist/scene/parse.d.ts +0 -23
- package/dist/scene/parse.d.ts.map +0 -1
- package/dist/scene/parse.js +0 -179
- package/dist/scene/particles-factory.d.ts +0 -33
- package/dist/scene/particles-factory.d.ts.map +0 -1
- package/dist/scene/particles-factory.js +0 -282
- package/dist/scene/scene-apply.d.ts +0 -109
- package/dist/scene/scene-apply.d.ts.map +0 -1
- package/dist/scene/scene-apply.js +0 -370
- package/dist/scene/scene-diff-schema.d.ts +0 -285
- package/dist/scene/scene-diff-schema.d.ts.map +0 -1
- package/dist/scene/scene-diff-schema.js +0 -92
- package/dist/scene/scene-diff-types.d.ts +0 -40
- package/dist/scene/scene-diff-types.d.ts.map +0 -1
- package/dist/scene/scene-diff-types.js +0 -14
- package/dist/scene/scene-loader.d.ts +0 -167
- package/dist/scene/scene-loader.d.ts.map +0 -1
- package/dist/scene/scene-loader.js +0 -1211
- package/dist/scene/scene-query.d.ts +0 -11
- package/dist/scene/scene-query.d.ts.map +0 -1
- package/dist/scene/scene-query.js +0 -63
- package/dist/scene/scene-types.d.ts +0 -10
- package/dist/scene/scene-types.d.ts.map +0 -1
- package/dist/scene/scene-types.js +0 -8
- package/dist/scene/scene-version.d.ts +0 -26
- package/dist/scene/scene-version.d.ts.map +0 -1
- package/dist/scene/scene-version.js +0 -34
- package/dist/scene/schema/animation.d.ts +0 -8
- package/dist/scene/schema/animation.d.ts.map +0 -1
- package/dist/scene/schema/animation.js +0 -42
- package/dist/scene/schema/audio.d.ts +0 -13
- package/dist/scene/schema/audio.d.ts.map +0 -1
- package/dist/scene/schema/audio.js +0 -22
- package/dist/scene/schema/camera.d.ts +0 -28
- package/dist/scene/schema/camera.d.ts.map +0 -1
- package/dist/scene/schema/camera.js +0 -17
- package/dist/scene/schema/collider.d.ts +0 -40
- package/dist/scene/schema/collider.d.ts.map +0 -1
- package/dist/scene/schema/collider.js +0 -55
- package/dist/scene/schema/entity-ref.d.ts +0 -31
- package/dist/scene/schema/entity-ref.d.ts.map +0 -1
- package/dist/scene/schema/entity-ref.js +0 -61
- package/dist/scene/schema/entity.d.ts +0 -1036
- package/dist/scene/schema/entity.d.ts.map +0 -1
- package/dist/scene/schema/entity.js +0 -153
- package/dist/scene/schema/environment.d.ts +0 -425
- package/dist/scene/schema/environment.d.ts.map +0 -1
- package/dist/scene/schema/environment.js +0 -357
- package/dist/scene/schema/index.d.ts +0 -37
- package/dist/scene/schema/index.d.ts.map +0 -1
- package/dist/scene/schema/index.js +0 -19
- package/dist/scene/schema/instances.d.ts +0 -14
- package/dist/scene/schema/instances.d.ts.map +0 -1
- package/dist/scene/schema/instances.js +0 -28
- package/dist/scene/schema/joint.d.ts +0 -23
- package/dist/scene/schema/joint.d.ts.map +0 -1
- package/dist/scene/schema/joint.js +0 -23
- package/dist/scene/schema/light.d.ts +0 -38
- package/dist/scene/schema/light.d.ts.map +0 -1
- package/dist/scene/schema/light.js +0 -26
- package/dist/scene/schema/material.d.ts +0 -199
- package/dist/scene/schema/material.d.ts.map +0 -1
- package/dist/scene/schema/material.js +0 -103
- package/dist/scene/schema/mesh.d.ts +0 -48
- package/dist/scene/schema/mesh.d.ts.map +0 -1
- package/dist/scene/schema/mesh.js +0 -82
- package/dist/scene/schema/particles.d.ts +0 -2178
- package/dist/scene/schema/particles.d.ts.map +0 -1
- package/dist/scene/schema/particles.js +0 -321
- package/dist/scene/schema/physics.d.ts +0 -56
- package/dist/scene/schema/physics.d.ts.map +0 -1
- package/dist/scene/schema/physics.js +0 -37
- package/dist/scene/schema/scene-file.d.ts +0 -303
- package/dist/scene/schema/scene-file.d.ts.map +0 -1
- package/dist/scene/schema/scene-file.js +0 -256
- package/dist/scene/schema/shadow.d.ts +0 -28
- package/dist/scene/schema/shadow.d.ts.map +0 -1
- package/dist/scene/schema/shadow.js +0 -20
- package/dist/scene/schema/spline.d.ts +0 -25
- package/dist/scene/schema/spline.d.ts.map +0 -1
- package/dist/scene/schema/spline.js +0 -15
- package/dist/scene/schema/tuples.d.ts +0 -12
- package/dist/scene/schema/tuples.d.ts.map +0 -1
- package/dist/scene/schema/tuples.js +0 -14
- package/dist/scene/user-data.d.ts +0 -185
- package/dist/scene/user-data.d.ts.map +0 -1
- package/dist/scene/user-data.js +0 -144
- package/dist/setup/setup-audio.d.ts +0 -20
- package/dist/setup/setup-audio.d.ts.map +0 -1
- package/dist/setup/setup-audio.js +0 -41
- package/dist/setup/setup-particles.d.ts +0 -17
- package/dist/setup/setup-particles.d.ts.map +0 -1
- package/dist/setup/setup-particles.js +0 -16
- package/dist/setup/setup-physics.d.ts +0 -25
- package/dist/setup/setup-physics.d.ts.map +0 -1
- package/dist/setup/setup-physics.js +0 -51
- package/dist/setup/setup-renderer.d.ts +0 -69
- package/dist/setup/setup-renderer.d.ts.map +0 -1
- package/dist/setup/setup-renderer.js +0 -363
- package/dist/tools/define-tool.d.ts +0 -130
- package/dist/tools/define-tool.d.ts.map +0 -1
- package/dist/tools/define-tool.js +0 -96
- package/dist/world2d/authoring-2d.d.ts +0 -80
- package/dist/world2d/authoring-2d.d.ts.map +0 -1
- package/dist/world2d/authoring-2d.js +0 -195
- package/dist/world2d/capture-to-scene2d.d.ts +0 -5
- package/dist/world2d/capture-to-scene2d.d.ts.map +0 -1
- package/dist/world2d/capture-to-scene2d.js +0 -49
- package/dist/world2d/collision-2d.d.ts +0 -52
- package/dist/world2d/collision-2d.d.ts.map +0 -1
- package/dist/world2d/collision-2d.js +0 -70
- package/dist/world2d/components-2d.d.ts +0 -47
- package/dist/world2d/components-2d.d.ts.map +0 -1
- package/dist/world2d/components-2d.js +0 -77
- package/dist/world2d/index.d.ts +0 -34
- package/dist/world2d/index.d.ts.map +0 -1
- package/dist/world2d/index.js +0 -32
- package/dist/world2d/ingest-iframe-2d.d.ts +0 -82
- package/dist/world2d/ingest-iframe-2d.d.ts.map +0 -1
- package/dist/world2d/ingest-iframe-2d.js +0 -166
- package/dist/world2d/ingest2d.d.ts +0 -97
- package/dist/world2d/ingest2d.d.ts.map +0 -1
- package/dist/world2d/ingest2d.js +0 -40
- package/dist/world2d/physics2d-registry.d.ts +0 -24
- package/dist/world2d/physics2d-registry.d.ts.map +0 -1
- package/dist/world2d/physics2d-registry.js +0 -38
- package/dist/world2d/pixi-game-adapter.d.ts +0 -107
- package/dist/world2d/pixi-game-adapter.d.ts.map +0 -1
- package/dist/world2d/pixi-game-adapter.js +0 -210
- package/dist/world2d/pixi-surface.d.ts +0 -39
- package/dist/world2d/pixi-surface.d.ts.map +0 -1
- package/dist/world2d/pixi-surface.js +0 -47
- package/dist/world2d/scene-capture-2d.d.ts +0 -43
- package/dist/world2d/scene-capture-2d.d.ts.map +0 -1
- package/dist/world2d/scene-capture-2d.js +0 -92
- package/dist/world2d/scene2d-loader.d.ts +0 -27
- package/dist/world2d/scene2d-loader.d.ts.map +0 -1
- package/dist/world2d/scene2d-loader.js +0 -275
- package/dist/world2d/schema/entity2d.d.ts +0 -102
- package/dist/world2d/schema/entity2d.d.ts.map +0 -1
- package/dist/world2d/schema/entity2d.js +0 -119
- package/dist/world2d/schema/physics2d.d.ts +0 -46
- package/dist/world2d/schema/physics2d.d.ts.map +0 -1
- package/dist/world2d/schema/physics2d.js +0 -45
- package/dist/world2d/schema/sprite.d.ts +0 -42
- package/dist/world2d/schema/sprite.d.ts.map +0 -1
- package/dist/world2d/schema/sprite.js +0 -63
- package/dist/world2d/schema/tilemap.d.ts +0 -15
- package/dist/world2d/schema/tilemap.d.ts.map +0 -1
- package/dist/world2d/schema/tilemap.js +0 -19
- package/dist/world2d/schema/tuples2d.d.ts +0 -20
- package/dist/world2d/schema/tuples2d.d.ts.map +0 -1
- package/dist/world2d/schema/tuples2d.js +0 -19
- package/dist/world2d/system-adapters-2d.d.ts +0 -16
- package/dist/world2d/system-adapters-2d.d.ts.map +0 -1
- package/dist/world2d/system-adapters-2d.js +0 -37
- package/dist/world2d/transform-writer-2d.d.ts +0 -16
- package/dist/world2d/transform-writer-2d.d.ts.map +0 -1
- package/dist/world2d/transform-writer-2d.js +0 -22
- package/dist/world2d/types.d.ts +0 -59
- package/dist/world2d/types.d.ts.map +0 -1
- package/dist/world2d/types.js +0 -1
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The standalone in-page debug bridge (`docs/SYNTHETIC-PLAYER-SPEC.md` §3.4,
|
|
3
|
-
* D17/D18; Task 2.1 of `docs/ACCEPTANCE-DRIVER-BUILD-PLAN.md`). Query-gated
|
|
4
|
-
* `window.__vgai`, the same production-protection-lives-in-the-installer
|
|
5
|
-
* pattern `render-control.ts`'s `installRenderControlHarness` established for
|
|
6
|
-
* `?vgai-render=1` (production protection lives HERE, not just at whatever
|
|
7
|
-
* call site invokes this — a caller that calls
|
|
8
|
-
* {@link maybeInstallDebugBridge} unconditionally on every boot still only
|
|
9
|
-
* ever gets a handle when the gate below actually passes).
|
|
10
|
-
*
|
|
11
|
-
* D17: this is door (a) of the seam's three doors — the SAME `DebugAdapter`
|
|
12
|
-
* names/JSON the editor relay (door b) and `@vgai/probe` (door c, which
|
|
13
|
-
* drives door (a) itself over Playwright) all read. D18: the bridge installs
|
|
14
|
-
* only when the page opts in (`?vgai-debug=1`) AND is either a dev build
|
|
15
|
-
* (`import.meta.env.DEV`) or the project's manifest explicitly opts a
|
|
16
|
-
* production build in (`manifest.debug.allowInProduction`, the described
|
|
17
|
-
* field whose runtime reader THIS module is).
|
|
18
|
-
*/
|
|
19
|
-
import type { DebugAdapter, TickStampedEvent } from '../adapter/system-adapter';
|
|
20
|
-
import type { GameLoopLiveness } from '../core/types';
|
|
21
|
-
import { type DebugRegistry, type RunTicksOptions } from './debug-registry';
|
|
22
|
-
/** Query-param name that opts a standalone page into the debug bridge (D18) —
|
|
23
|
-
* mirrors `render-seed.ts`'s `RENDER_MODE_QUERY_PARAM` naming/shape, own
|
|
24
|
-
* const because this is a different call site with a different flag. */
|
|
25
|
-
export declare const DEBUG_MODE_QUERY_PARAM = "vgai-debug";
|
|
26
|
-
/** The subset of `ResolvedGameManifest` the D18 gate reads — typed narrowly
|
|
27
|
-
* (not imported from `manifest/load.ts`) so this module doesn't need the
|
|
28
|
-
* full manifest shape, just the one described field it is the runtime
|
|
29
|
-
* reader for. */
|
|
30
|
-
export interface DebugBridgeManifest {
|
|
31
|
-
readonly debug?: {
|
|
32
|
-
readonly allowInProduction: boolean;
|
|
33
|
-
} | undefined;
|
|
34
|
-
}
|
|
35
|
-
/** The bridge's actuation surface — byte-identical method names to
|
|
36
|
-
* `InputManager`'s virtual-action primitives (Task 1.4), reached through
|
|
37
|
-
* `DebugRegistry.getVirtualInputTarget(worldId?)` rather than a direct
|
|
38
|
-
* import. Every method takes an optional trailing `worldId` (D15/T-D15.5,
|
|
39
|
-
* the review-objection-2 fix): omitted, it resolves to the SAME default
|
|
40
|
-
* world the editor relay's `inject-input` case resolves to (one shared
|
|
41
|
-
* resolution function, `debug-registry.ts`'s `resolveInputWorldId`) — never
|
|
42
|
-
* "whichever world's `InputManager` happened to register last". An
|
|
43
|
-
* explicit `worldId` reaches that world's `InputManager` specifically. */
|
|
44
|
-
export interface VgaiDebugInputHandle {
|
|
45
|
-
setVirtualAction(action: string, value: boolean | number | {
|
|
46
|
-
x: number;
|
|
47
|
-
y: number;
|
|
48
|
-
}, worldId?: string): {
|
|
49
|
-
delivered: boolean;
|
|
50
|
-
reason?: string;
|
|
51
|
-
};
|
|
52
|
-
tapVirtualAction(action: string, worldId?: string): {
|
|
53
|
-
delivered: boolean;
|
|
54
|
-
reason?: string;
|
|
55
|
-
};
|
|
56
|
-
clearVirtualActions(worldId?: string): void;
|
|
57
|
-
/**
|
|
58
|
-
* D15/T-D15.5 (`docs/D15-DETERMINISM-DESIGN.md` §2.c): schedule a virtual
|
|
59
|
-
* actuation for a specific tick — applied at the START of that tick's
|
|
60
|
-
* input phase, composing with `runTicks` (a schedule for tick 500 fires
|
|
61
|
-
* exactly once the sim has been driven through tick 500, regardless of
|
|
62
|
-
* burst size). A digital `true` produces a genuine `isJustPressed` edge
|
|
63
|
-
* exactly at the target tick. Throws `INPUT_ACTION_NOT_FOUND`/a valueType
|
|
64
|
-
* mismatch (same as `setVirtualAction`) or `TICK_ALREADY_PASSED`
|
|
65
|
-
* (`data.currentTick`, the NEXT tick to be serviced) for a tick that
|
|
66
|
-
* already elapsed.
|
|
67
|
-
*
|
|
68
|
-
* A scheduled tick whose input phase never runs at all (that world
|
|
69
|
-
* paused/frozen, or skipped by a multi-tick gap, when the target tick
|
|
70
|
-
* would have been serviced) DROPS the actuation rather than applying it
|
|
71
|
-
* late — it is never delivered, and there is no `{delivered: false,
|
|
72
|
-
* reason}`-shaped result to read here (the call already returned, long
|
|
73
|
-
* before the drop happens). The only observable trace is an
|
|
74
|
-
* `'input.schedule.dropped'` debug event (`{tick, action}`), readable via
|
|
75
|
-
* `state()`/`stateAll()`'s `events` or `snapshot().events`.
|
|
76
|
-
*/
|
|
77
|
-
scheduleActionAtTick(tick: number, action: string, value: boolean | number | {
|
|
78
|
-
x: number;
|
|
79
|
-
y: number;
|
|
80
|
-
}, worldId?: string): void;
|
|
81
|
-
/** Start (or restart) recording the post-gate action-delta trace, readable
|
|
82
|
-
* back via `state('input.trace')`/`stateAll()` (a built-in provider —
|
|
83
|
-
* itself resolved against the DEFAULT world only; see that provider's own
|
|
84
|
-
* doc comment in `debug-registry.ts`). */
|
|
85
|
-
startRecording(worldId?: string): void;
|
|
86
|
-
/** Stop recording — the trace accumulated so far stays readable. */
|
|
87
|
-
stopRecording(worldId?: string): void;
|
|
88
|
-
/** Whether a recording is currently active. */
|
|
89
|
-
isRecording(worldId?: string): boolean;
|
|
90
|
-
/** Accumulate a synthetic pointer delta for a named test source — mirrors
|
|
91
|
-
* `InputManager.injectPointerDelta` (the "injected test input" seam):
|
|
92
|
-
* multiple calls within the same frame SUM, and the accumulator clears
|
|
93
|
-
* each frame (`endFrame`). Bindings with `valueType: 'pointerDelta'`
|
|
94
|
-
* reading this source (`{ type: 'test_pointer_delta', sourceId }`) see the
|
|
95
|
-
* accumulated value via `getPointerDelta`. */
|
|
96
|
-
injectPointerDelta(sourceId: string, delta: {
|
|
97
|
-
x: number;
|
|
98
|
-
y: number;
|
|
99
|
-
}, worldId?: string): void;
|
|
100
|
-
/** Set a synthetic absolute pointer position for a named test source —
|
|
101
|
-
* mirrors `InputManager.injectPointerPosition`: LAST-WRITE-WINS across
|
|
102
|
-
* contributing sources on read, and persists until changed. Bindings with
|
|
103
|
-
* `valueType: 'pointerPosition'` reading this source (`{ type:
|
|
104
|
-
* 'test_pointer_position', sourceId }`) see it via `getPointerPosition`. */
|
|
105
|
-
injectPointerPosition(sourceId: string, value: {
|
|
106
|
-
x: number;
|
|
107
|
-
y: number;
|
|
108
|
-
}, worldId?: string): void;
|
|
109
|
-
}
|
|
110
|
-
/** `snapshot()`'s return shape — ONE synchronous pass over the registry, so
|
|
111
|
-
* every field reflects the exact same instant (AC-B1.2's batched-read
|
|
112
|
-
* primitive: a probe polling this never sees `time` from one tick and
|
|
113
|
-
* `state` from another). */
|
|
114
|
-
export interface VgaiDebugSnapshot {
|
|
115
|
-
/** `loopLiveness` (issue #175): the REAL `GameLoop.liveness` behind this
|
|
116
|
-
* session — `'hidden-paused'` while the T2.1 idle throttle has stopped
|
|
117
|
-
* the loop (tab hidden), `null` only when no loop is wired at all (a
|
|
118
|
-
* bare debug-registry test stand-in with no real `Game`). Never a
|
|
119
|
-
* fabricated `'running'`. */
|
|
120
|
-
time: {
|
|
121
|
-
simSeconds: number;
|
|
122
|
-
tick: number;
|
|
123
|
-
loopLiveness: GameLoopLiveness | null;
|
|
124
|
-
};
|
|
125
|
-
state: Record<string, unknown>;
|
|
126
|
-
events: TickStampedEvent[];
|
|
127
|
-
pageErrors: string[];
|
|
128
|
-
}
|
|
129
|
-
/** The frozen `window.__vgai` shape (D18/spec §3.4) — version it if it ever
|
|
130
|
-
* needs a breaking change; `providers`/`state`/`stateAll`/`commands`/`events`
|
|
131
|
-
* are straight off the game's `DebugAdapter`, `invoke` re-checks D18 gating
|
|
132
|
-
* (belt-and-braces, AC-A1.7), and `input`/`snapshot` are bridge-only. */
|
|
133
|
-
export interface VgaiDebugHandle {
|
|
134
|
-
readonly version: 1;
|
|
135
|
-
providers: DebugAdapter['providers'];
|
|
136
|
-
state: DebugAdapter['state'];
|
|
137
|
-
stateAll: DebugAdapter['stateAll'];
|
|
138
|
-
commands: DebugAdapter['commands'];
|
|
139
|
-
invoke(name: string, args: unknown[]): Promise<unknown>;
|
|
140
|
-
events: DebugAdapter['events'];
|
|
141
|
-
input: VgaiDebugInputHandle;
|
|
142
|
-
/** See `DebugAdapter.events`'s doc comment for `sinceTick`/`sinceSeq`'s
|
|
143
|
-
* contract (run-4 friction #5) — `snapshot`'s `events` member is filtered
|
|
144
|
-
* the exact same way, just batched with `time`/`state`/`pageErrors` into
|
|
145
|
-
* one synchronous read. */
|
|
146
|
-
snapshot(sinceTick?: number, sinceSeq?: number): VgaiDebugSnapshot;
|
|
147
|
-
/**
|
|
148
|
-
* D15/T-D15.4 door (a) (`docs/D15-DETERMINISM-DESIGN.md` §2.b): synchronously
|
|
149
|
-
* drive `n` fixed gameplay ticks via the live `Game`'s `GameInternal.runTicks`
|
|
150
|
-
* (`runtime/game.ts`) — reached through `DebugRegistry.getRunTicksTarget()`,
|
|
151
|
-
* the SAME target the editor relay's `run-ticks` case (→ `play.runTicks`,
|
|
152
|
-
* door b) calls, so behavior is byte-identical across every door (D17).
|
|
153
|
-
* Throws `DEBUG_RUN_TICKS_UNAVAILABLE` if no `Game` has wired a target yet
|
|
154
|
-
* (no world mounted); throws whatever `runTicks` itself throws otherwise
|
|
155
|
-
* (e.g. `RUN_TICKS_PAUSED`) — never a silent no-op.
|
|
156
|
-
*/
|
|
157
|
-
runTicks(n: number, opts?: RunTicksOptions): void;
|
|
158
|
-
/**
|
|
159
|
-
* Collapses `input.setVirtualAction(action, true)` → wait `simSeconds` of
|
|
160
|
-
* REAL sim time (real ticks — deliberately NOT `runTicks`/fast-forward;
|
|
161
|
-
* this is the honest human-input-path proof) → `input.clearVirtualActions()`
|
|
162
|
-
* into ONE async bridge call, as a TOP-LEVEL method (not under `input`)
|
|
163
|
-
* because it needs the sim clock, not just the input target. Was 15+
|
|
164
|
-
* transport round trips over the editor relay (`@vgai/probe`'s old
|
|
165
|
-
* `GameInput.hold`: set → a 150ms-interval `waitSimTime` snapshot poll loop
|
|
166
|
-
* → clear); now one `page.evaluate`/relay call that runs the wait
|
|
167
|
-
* in-process on the page.
|
|
168
|
-
*
|
|
169
|
-
* Resolves the world's input target exactly like the other `input.*`
|
|
170
|
-
* methods (`worldId` omitted → the same default-world resolution every
|
|
171
|
-
* door on this seam shares). A gated actuation (the initial
|
|
172
|
-
* `setVirtualAction` reports `delivered:false`) clears immediately and
|
|
173
|
-
* resolves that SAME `{delivered:false, reason}` shape WITHOUT waiting —
|
|
174
|
-
* matching `setVirtualAction`'s own gated-result contract. If the live
|
|
175
|
-
* game's sim clock stalls while waiting (play stopped/paused mid-hold),
|
|
176
|
-
* the action is still cleared (never left stuck) and this resolves
|
|
177
|
-
* `{delivered:false, reason:'play stopped during hold'}` instead of
|
|
178
|
-
* hanging forever. Throws `DEBUG_INPUT_UNAVAILABLE`/
|
|
179
|
-
* `DEBUG_INPUT_WORLD_NOT_FOUND` up front, same as `input.setVirtualAction`,
|
|
180
|
-
* when no target is wired/resolvable at all.
|
|
181
|
-
*/
|
|
182
|
-
holdFor(action: string, simSeconds: number, worldId?: string): Promise<{
|
|
183
|
-
delivered: boolean;
|
|
184
|
-
reason?: string;
|
|
185
|
-
}>;
|
|
186
|
-
/**
|
|
187
|
-
* Defect 5 fix — undo everything THIS install did: remove the
|
|
188
|
-
* `error`/`unhandledrejection` window listeners it added, and delete
|
|
189
|
-
* `window.__vgai` so the registry is no longer reachable from the page.
|
|
190
|
-
* Idempotent (a second call is a harmless no-op). `mountManifestWorlds`
|
|
191
|
-
* wires this into its session's `stop()`; a caller mounting more
|
|
192
|
-
* directly (a hand-rolled host) should call it on its own teardown path.
|
|
193
|
-
*/
|
|
194
|
-
uninstall(): void;
|
|
195
|
-
}
|
|
196
|
-
/** Structural `window` surface this module needs — just enough to publish
|
|
197
|
-
* the handle and listen for page errors, typed narrowly (no `any`, no DOM
|
|
198
|
-
* lib dependency beyond what every other runtime module already assumes). */
|
|
199
|
-
export interface DebugBridgeWindowTarget {
|
|
200
|
-
addEventListener?(type: 'error' | 'unhandledrejection', listener: (event: {
|
|
201
|
-
message?: string;
|
|
202
|
-
error?: unknown;
|
|
203
|
-
reason?: unknown;
|
|
204
|
-
}) => void): void;
|
|
205
|
-
/** Defect 5 fix — the installer's `uninstall()` calls this (when present)
|
|
206
|
-
* to remove the exact listener references it added via `addEventListener`
|
|
207
|
-
* above. Optional, like `addEventListener`, so a minimal test/host stub
|
|
208
|
-
* that never needs to uninstall can omit it. */
|
|
209
|
-
removeEventListener?(type: 'error' | 'unhandledrejection', listener: (event: {
|
|
210
|
-
message?: string;
|
|
211
|
-
error?: unknown;
|
|
212
|
-
reason?: unknown;
|
|
213
|
-
}) => void): void;
|
|
214
|
-
[key: string]: unknown;
|
|
215
|
-
}
|
|
216
|
-
export interface MaybeInstallDebugBridgeOptions {
|
|
217
|
-
/** The game-scoped registry (`getDebugRegistry(session.game)`) — its
|
|
218
|
-
* `.adapter` backs every read/invoke method on the published handle, and
|
|
219
|
-
* its `getVirtualInputTarget()` backs `input.*`. */
|
|
220
|
-
readonly registry: DebugRegistry;
|
|
221
|
-
readonly manifest: DebugBridgeManifest;
|
|
222
|
-
/** Where to read `?vgai-debug=1` from. Defaults to `window.location` when a
|
|
223
|
-
* real `window` exists; a headless caller with no `window` at all (and no
|
|
224
|
-
* override) gets no bridge — there's nowhere to read a URL from. */
|
|
225
|
-
readonly url?: {
|
|
226
|
-
readonly search: string;
|
|
227
|
-
} | undefined;
|
|
228
|
-
/** Where to publish the handle and install the page-error listeners.
|
|
229
|
-
* Defaults to the real `window`; override in a unit test to avoid
|
|
230
|
-
* touching (or requiring) the global object. */
|
|
231
|
-
readonly window?: DebugBridgeWindowTarget | undefined;
|
|
232
|
-
}
|
|
233
|
-
/** Resolves once `simSeconds` of sim time has elapsed since the call (normal
|
|
234
|
-
* host-loop ticks while visible; deterministic `runTicks` through the same
|
|
235
|
-
* game phases when the host loop reports `hidden-paused`), or once the tick
|
|
236
|
-
* has stopped changing for
|
|
237
|
-
* `HOLD_FOR_STALL_POLL_LIMIT` consecutive polls (`stalled: true` — the loop
|
|
238
|
-
* driving ticks stopped, e.g. play was stopped/paused). Never rejects.
|
|
239
|
-
* Exported (not just used by `holdFor` below) so the editor relay's
|
|
240
|
-
* `command-listener.ts` `holdFor` case can share the EXACT same
|
|
241
|
-
* poll/stall/hidden-drive logic against its own `DebugAdapter` (reached via
|
|
242
|
-
* `getActiveSystems().debug` rather than a `DebugRegistry`) — D17:
|
|
243
|
-
* byte-identical behavior across doors, not two hand-copies that can
|
|
244
|
-
* silently drift apart. */
|
|
245
|
-
export declare function waitForHoldBudget(adapter: DebugAdapter, simSeconds: number, driveHiddenTicks?: (n: number) => void): Promise<{
|
|
246
|
-
stalled: boolean;
|
|
247
|
-
}>;
|
|
248
|
-
/**
|
|
249
|
-
* Install `window.__vgai` iff the page opted in (`?vgai-debug=1`) AND D18's
|
|
250
|
-
* gate passes (dev build, or manifest `debug.allowInProduction`). When the
|
|
251
|
-
* param is present but the gate fails, warns once (this single call IS the
|
|
252
|
-
* "once" — there is exactly one install attempt per boot) and installs
|
|
253
|
-
* nothing. Returns the installed handle (mostly useful for tests), or
|
|
254
|
-
* `undefined` when nothing was installed.
|
|
255
|
-
*/
|
|
256
|
-
export declare function maybeInstallDebugBridge(opts: MaybeInstallDebugBridgeOptions): VgaiDebugHandle | undefined;
|
|
257
|
-
//# sourceMappingURL=debug-bridge.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"debug-bridge.d.ts","sourceRoot":"","sources":["../../src/runtime/debug-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The standalone in-page debug bridge (`docs/SYNTHETIC-PLAYER-SPEC.md` §3.4,
|
|
3
|
-
* D17/D18; Task 2.1 of `docs/ACCEPTANCE-DRIVER-BUILD-PLAN.md`). Query-gated
|
|
4
|
-
* `window.__vgai`, the same production-protection-lives-in-the-installer
|
|
5
|
-
* pattern `render-control.ts`'s `installRenderControlHarness` established for
|
|
6
|
-
* `?vgai-render=1` (production protection lives HERE, not just at whatever
|
|
7
|
-
* call site invokes this — a caller that calls
|
|
8
|
-
* {@link maybeInstallDebugBridge} unconditionally on every boot still only
|
|
9
|
-
* ever gets a handle when the gate below actually passes).
|
|
10
|
-
*
|
|
11
|
-
* D17: this is door (a) of the seam's three doors — the SAME `DebugAdapter`
|
|
12
|
-
* names/JSON the editor relay (door b) and `@vgai/probe` (door c, which
|
|
13
|
-
* drives door (a) itself over Playwright) all read. D18: the bridge installs
|
|
14
|
-
* only when the page opts in (`?vgai-debug=1`) AND is either a dev build
|
|
15
|
-
* (`import.meta.env.DEV`) or the project's manifest explicitly opts a
|
|
16
|
-
* production build in (`manifest.debug.allowInProduction`, the described
|
|
17
|
-
* field whose runtime reader THIS module is).
|
|
18
|
-
*/
|
|
19
|
-
import { DebugError } from './debug-registry';
|
|
20
|
-
/** Query-param name that opts a standalone page into the debug bridge (D18) —
|
|
21
|
-
* mirrors `render-seed.ts`'s `RENDER_MODE_QUERY_PARAM` naming/shape, own
|
|
22
|
-
* const because this is a different call site with a different flag. */
|
|
23
|
-
export const DEBUG_MODE_QUERY_PARAM = 'vgai-debug';
|
|
24
|
-
const PAGE_ERROR_CAP = 100;
|
|
25
|
-
/** `holdFor`'s in-process poll interval — this loop never leaves the page
|
|
26
|
-
* (no transport round trip per poll, unlike `@vgai/probe`'s old
|
|
27
|
-
* `waitSimTime`), so it can afford to be tighter than that loop's 150ms. */
|
|
28
|
-
const HOLD_FOR_POLL_MS = 50;
|
|
29
|
-
/** Consecutive `HOLD_FOR_POLL_MS` polls with the tick unchanged before
|
|
30
|
-
* `holdFor` gives up waiting and treats the game as stopped — mirrors
|
|
31
|
-
* `@vgai/probe`'s `WAIT_FOR_STALL_POLL_LIMIT` reasoning (`wait-for.ts`:
|
|
32
|
-
* a genuinely frozen sim clock must never poll forever), scaled to this
|
|
33
|
-
* faster in-process interval so the wall-clock grace period (~5s) lands in
|
|
34
|
-
* the same neighborhood. */
|
|
35
|
-
const HOLD_FOR_STALL_POLL_LIMIT = 100;
|
|
36
|
-
/** Resolves once `simSeconds` of sim time has elapsed since the call (normal
|
|
37
|
-
* host-loop ticks while visible; deterministic `runTicks` through the same
|
|
38
|
-
* game phases when the host loop reports `hidden-paused`), or once the tick
|
|
39
|
-
* has stopped changing for
|
|
40
|
-
* `HOLD_FOR_STALL_POLL_LIMIT` consecutive polls (`stalled: true` — the loop
|
|
41
|
-
* driving ticks stopped, e.g. play was stopped/paused). Never rejects.
|
|
42
|
-
* Exported (not just used by `holdFor` below) so the editor relay's
|
|
43
|
-
* `command-listener.ts` `holdFor` case can share the EXACT same
|
|
44
|
-
* poll/stall/hidden-drive logic against its own `DebugAdapter` (reached via
|
|
45
|
-
* `getActiveSystems().debug` rather than a `DebugRegistry`) — D17:
|
|
46
|
-
* byte-identical behavior across doors, not two hand-copies that can
|
|
47
|
-
* silently drift apart. */
|
|
48
|
-
export function waitForHoldBudget(adapter, simSeconds, driveHiddenTicks) {
|
|
49
|
-
return new Promise((resolve) => {
|
|
50
|
-
const start = adapter.state('time');
|
|
51
|
-
let lastTick = start.tick;
|
|
52
|
-
let lastPollWallMs = Date.now();
|
|
53
|
-
let stalledPolls = 0;
|
|
54
|
-
const poll = () => {
|
|
55
|
-
const current = adapter.state('time');
|
|
56
|
-
if (current.simSeconds - start.simSeconds >= simSeconds) {
|
|
57
|
-
resolve({ stalled: false });
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
if (current.loopLiveness === 'hidden-paused' && driveHiddenTicks) {
|
|
61
|
-
const now = Date.now();
|
|
62
|
-
const ticks = Math.max(1, Math.min(30, Math.round((now - lastPollWallMs) / (1000 / 60))));
|
|
63
|
-
lastPollWallMs = now;
|
|
64
|
-
driveHiddenTicks(ticks);
|
|
65
|
-
setTimeout(poll, HOLD_FOR_POLL_MS);
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
lastPollWallMs = Date.now();
|
|
69
|
-
stalledPolls = current.tick === lastTick ? stalledPolls + 1 : 0;
|
|
70
|
-
lastTick = current.tick;
|
|
71
|
-
if (stalledPolls >= HOLD_FOR_STALL_POLL_LIMIT) {
|
|
72
|
-
resolve({ stalled: true });
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
setTimeout(poll, HOLD_FOR_POLL_MS);
|
|
76
|
-
};
|
|
77
|
-
setTimeout(poll, HOLD_FOR_POLL_MS);
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
function hasRealWindow() {
|
|
81
|
-
return typeof window !== 'undefined';
|
|
82
|
-
}
|
|
83
|
-
function isDebugModeRequested(url) {
|
|
84
|
-
return new URLSearchParams(url.search).get(DEBUG_MODE_QUERY_PARAM) === '1';
|
|
85
|
-
}
|
|
86
|
-
/** D18's gate: a dev build, or a production build the manifest explicitly
|
|
87
|
-
* opted in. Read fresh on every call (not cached at install time) so
|
|
88
|
-
* `invoke()`'s belt-and-braces re-check (AC-A1.7) is a genuine second
|
|
89
|
-
* evaluation, not a rubber stamp of a value computed once at install. */
|
|
90
|
-
function isDebugAllowed(manifest) {
|
|
91
|
-
return Boolean(import.meta.env?.DEV) || manifest.debug?.allowInProduction === true;
|
|
92
|
-
}
|
|
93
|
-
function buildDebugHandle(opts) {
|
|
94
|
-
const { registry, manifest } = opts;
|
|
95
|
-
const adapter = registry.adapter;
|
|
96
|
-
const pageErrors = [];
|
|
97
|
-
function pushPageError(message) {
|
|
98
|
-
pageErrors.push(message);
|
|
99
|
-
if (pageErrors.length > PAGE_ERROR_CAP)
|
|
100
|
-
pageErrors.shift();
|
|
101
|
-
}
|
|
102
|
-
// Named (not inline-anonymous) so `uninstall()` below can pass the exact
|
|
103
|
-
// same reference to `removeEventListener` (Defect 5 fix).
|
|
104
|
-
const onWindowError = (event) => {
|
|
105
|
-
pushPageError(event.message || String(event.error));
|
|
106
|
-
};
|
|
107
|
-
const onWindowRejection = (event) => {
|
|
108
|
-
pushPageError(`Unhandled promise rejection: ${String(event.reason)}`);
|
|
109
|
-
};
|
|
110
|
-
opts.window.addEventListener?.('error', onWindowError);
|
|
111
|
-
opts.window.addEventListener?.('unhandledrejection', onWindowRejection);
|
|
112
|
-
function requireInputTarget(method, worldId) {
|
|
113
|
-
const target = registry.getVirtualInputTarget(worldId);
|
|
114
|
-
if (!target) {
|
|
115
|
-
throw new DebugError('DEBUG_INPUT_UNAVAILABLE', `debug bridge: ${method}() has no virtual-input target wired — no default threejs ` +
|
|
116
|
-
"world has mounted yet, or this project's mount path never wired one");
|
|
117
|
-
}
|
|
118
|
-
return target;
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
version: 1,
|
|
122
|
-
// None of these `DebugAdapter` methods reference `this` (they close over
|
|
123
|
-
// the registry's own private maps) — passing the references directly is
|
|
124
|
-
// safe and avoids five redundant wrapper closures.
|
|
125
|
-
providers: adapter.providers,
|
|
126
|
-
state: adapter.state,
|
|
127
|
-
stateAll: adapter.stateAll,
|
|
128
|
-
commands: adapter.commands,
|
|
129
|
-
events: adapter.events,
|
|
130
|
-
async invoke(name, args) {
|
|
131
|
-
// Belt-and-braces D18 re-check (AC-A1.7): the outer install gate
|
|
132
|
-
// already required this to be true, but a caller could hold onto this
|
|
133
|
-
// handle across an environment/manifest change — refuse loudly rather
|
|
134
|
-
// than trust a decision made once at install time.
|
|
135
|
-
if (!isDebugAllowed(manifest)) {
|
|
136
|
-
throw new DebugError('DEBUG_COMMANDS_UNSUPPORTED', `debug: command "${name}" invocation refused — production build without ` +
|
|
137
|
-
'debug.allowInProduction (D18)', { name });
|
|
138
|
-
}
|
|
139
|
-
return adapter.invoke(name, args);
|
|
140
|
-
},
|
|
141
|
-
input: {
|
|
142
|
-
setVirtualAction: (action, value, worldId) => requireInputTarget('setVirtualAction', worldId).setVirtualAction(action, value),
|
|
143
|
-
tapVirtualAction: (action, worldId) => requireInputTarget('tapVirtualAction', worldId).tapVirtualAction(action),
|
|
144
|
-
clearVirtualActions: (worldId) => requireInputTarget('clearVirtualActions', worldId).clearVirtualActions(),
|
|
145
|
-
scheduleActionAtTick: (tick, action, value, worldId) => requireInputTarget('scheduleActionAtTick', worldId).scheduleActionAtTick(tick, action, value),
|
|
146
|
-
startRecording: (worldId) => requireInputTarget('startRecording', worldId).startInputRecording(),
|
|
147
|
-
stopRecording: (worldId) => requireInputTarget('stopRecording', worldId).stopInputRecording(),
|
|
148
|
-
isRecording: (worldId) => requireInputTarget('isRecording', worldId).isInputRecording(),
|
|
149
|
-
injectPointerDelta: (sourceId, delta, worldId) => requireInputTarget('injectPointerDelta', worldId).injectPointerDelta(sourceId, delta),
|
|
150
|
-
injectPointerPosition: (sourceId, value, worldId) => requireInputTarget('injectPointerPosition', worldId).injectPointerPosition(sourceId, value),
|
|
151
|
-
},
|
|
152
|
-
snapshot(sinceTick, sinceSeq) {
|
|
153
|
-
// One synchronous pass — see VgaiDebugSnapshot's doc comment.
|
|
154
|
-
return {
|
|
155
|
-
time: adapter.state('time'),
|
|
156
|
-
state: adapter.stateAll(),
|
|
157
|
-
events: adapter.events(sinceTick, sinceSeq),
|
|
158
|
-
pageErrors: pageErrors.slice(),
|
|
159
|
-
};
|
|
160
|
-
},
|
|
161
|
-
runTicks(n, runTicksOpts) {
|
|
162
|
-
const target = registry.getRunTicksTarget();
|
|
163
|
-
if (!target) {
|
|
164
|
-
throw new DebugError('DEBUG_RUN_TICKS_UNAVAILABLE', 'debug bridge: runTicks() has no run-ticks target wired — no Game has mounted yet');
|
|
165
|
-
}
|
|
166
|
-
target.runTicks(n, runTicksOpts);
|
|
167
|
-
},
|
|
168
|
-
async holdFor(action, simSeconds, worldId) {
|
|
169
|
-
const target = requireInputTarget('holdFor', worldId);
|
|
170
|
-
const setResult = target.setVirtualAction(action, true);
|
|
171
|
-
if (!setResult.delivered) {
|
|
172
|
-
target.clearVirtualActions();
|
|
173
|
-
// `exactOptionalPropertyTypes`: don't write an explicit `reason:
|
|
174
|
-
// undefined` when the gate itself didn't supply one — omit the key
|
|
175
|
-
// entirely rather than assign `undefined` into an optional `string`
|
|
176
|
-
// property.
|
|
177
|
-
return setResult.reason !== undefined
|
|
178
|
-
? { delivered: false, reason: setResult.reason }
|
|
179
|
-
: { delivered: false };
|
|
180
|
-
}
|
|
181
|
-
const runTicksTarget = registry.getRunTicksTarget();
|
|
182
|
-
const { stalled } = await waitForHoldBudget(adapter, simSeconds, runTicksTarget ? (n) => runTicksTarget.runTicks(n, { render: 'last' }) : undefined);
|
|
183
|
-
target.clearVirtualActions();
|
|
184
|
-
return stalled
|
|
185
|
-
? { delivered: false, reason: 'play stopped during hold' }
|
|
186
|
-
: { delivered: true };
|
|
187
|
-
},
|
|
188
|
-
uninstall() {
|
|
189
|
-
opts.window.removeEventListener?.('error', onWindowError);
|
|
190
|
-
opts.window.removeEventListener?.('unhandledrejection', onWindowRejection);
|
|
191
|
-
delete opts.window['__vgai'];
|
|
192
|
-
},
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Install `window.__vgai` iff the page opted in (`?vgai-debug=1`) AND D18's
|
|
197
|
-
* gate passes (dev build, or manifest `debug.allowInProduction`). When the
|
|
198
|
-
* param is present but the gate fails, warns once (this single call IS the
|
|
199
|
-
* "once" — there is exactly one install attempt per boot) and installs
|
|
200
|
-
* nothing. Returns the installed handle (mostly useful for tests), or
|
|
201
|
-
* `undefined` when nothing was installed.
|
|
202
|
-
*/
|
|
203
|
-
export function maybeInstallDebugBridge(opts) {
|
|
204
|
-
const url = opts.url ?? (hasRealWindow() ? window.location : undefined);
|
|
205
|
-
if (!url)
|
|
206
|
-
return undefined;
|
|
207
|
-
if (!isDebugModeRequested(url))
|
|
208
|
-
return undefined;
|
|
209
|
-
const windowTarget = opts.window ?? (hasRealWindow() ? window : undefined);
|
|
210
|
-
if (!windowTarget)
|
|
211
|
-
return undefined;
|
|
212
|
-
if (!isDebugAllowed(opts.manifest)) {
|
|
213
|
-
// biome-ignore lint/suspicious/noConsole: structured, greppable D18 signal — mirrors debug-registry.ts's own console.warn idiom.
|
|
214
|
-
console.warn('[debug] ?vgai-debug=1 ignored: production build without debug.allowInProduction (D18)');
|
|
215
|
-
return undefined;
|
|
216
|
-
}
|
|
217
|
-
const handle = buildDebugHandle({
|
|
218
|
-
registry: opts.registry,
|
|
219
|
-
manifest: opts.manifest,
|
|
220
|
-
window: windowTarget,
|
|
221
|
-
});
|
|
222
|
-
windowTarget['__vgai'] = handle;
|
|
223
|
-
return handle;
|
|
224
|
-
}
|