[
  {
    "schemaVersion": 1,
    "title": "EcsImports",
    "path": "engine/reference/EcsImports.md",
    "source": "engine/EcsImports.js",
    "import": "/engine/EcsImports.js",
    "sourceHash": "b34f5d45409cca55fac88d7cbd4ea3f85d5cd27da9a535a5a77b3544a1ddd966",
    "summary": "",
    "exports": [
      {
        "name": "World",
        "kind": "constant",
        "signature": "World",
        "summary": ""
      },
      {
        "name": "Camera",
        "kind": "constant",
        "signature": "Camera",
        "summary": ""
      },
      {
        "name": "Light",
        "kind": "constant",
        "signature": "Light",
        "summary": ""
      },
      {
        "name": "PhysicsBody",
        "kind": "constant",
        "signature": "PhysicsBody",
        "summary": ""
      },
      {
        "name": "Collider",
        "kind": "constant",
        "signature": "Collider",
        "summary": ""
      },
      {
        "name": "Transform",
        "kind": "constant",
        "signature": "Transform",
        "summary": ""
      },
      {
        "name": "ParticleEmitter",
        "kind": "constant",
        "signature": "ParticleEmitter",
        "summary": ""
      },
      {
        "name": "NetReplicated",
        "kind": "constant",
        "signature": "NetReplicated",
        "summary": ""
      },
      {
        "name": "ReplicationProfiles",
        "kind": "constant",
        "signature": "ReplicationProfiles",
        "summary": ""
      },
      {
        "name": "Storage",
        "kind": "constant",
        "signature": "Storage",
        "summary": ""
      },
      {
        "name": "createCamera",
        "kind": "constant",
        "signature": "createCamera",
        "summary": ""
      },
      {
        "name": "createLight",
        "kind": "constant",
        "signature": "createLight",
        "summary": ""
      },
      {
        "name": "createPhysicsBody",
        "kind": "constant",
        "signature": "createPhysicsBody",
        "summary": ""
      },
      {
        "name": "createCollider",
        "kind": "constant",
        "signature": "createCollider",
        "summary": ""
      },
      {
        "name": "createTransform",
        "kind": "constant",
        "signature": "createTransform",
        "summary": ""
      },
      {
        "name": "createParticleEmitter",
        "kind": "constant",
        "signature": "createParticleEmitter",
        "summary": ""
      },
      {
        "name": "createNetReplicated",
        "kind": "constant",
        "signature": "createNetReplicated",
        "summary": ""
      },
      {
        "name": "setEntityComponent",
        "kind": "constant",
        "signature": "setEntityComponent",
        "summary": ""
      },
      {
        "name": "getEntityComponent",
        "kind": "constant",
        "signature": "getEntityComponent",
        "summary": ""
      },
      {
        "name": "removeEntityComponent",
        "kind": "constant",
        "signature": "removeEntityComponent",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "EngineBootstrap",
    "path": "engine/reference/EngineBootstrap.md",
    "source": "engine/EngineBootstrap.js",
    "import": "/engine/EngineBootstrap.js",
    "sourceHash": "5505cfd446c76de676c7da6c248e1e33232dd3ab1421b16eb9968df018a7db1b",
    "summary": "EngineBootstrap.js - Unified engine import for games and tests Single import point for all engine functionality: - Math utilities - ECS (Entity Component System) - Rendering (meshes, shaders, pipelines) - Tools (inspector, camera, physics sandbox) - GPU utilities (buffers, WebGPU init) - Simulation (particles, fluids) - Configuration",
    "exports": [
      {
        "name": "Engine",
        "kind": "constant",
        "signature": "Engine",
        "summary": ""
      },
      {
        "name": "ADAPTIVE_QUALITY_TIERS",
        "kind": "re-export",
        "signature": "ADAPTIVE_QUALITY_TIERS",
        "summary": ""
      },
      {
        "name": "AGI_CORE_FULL",
        "kind": "re-export",
        "signature": "AGI_CORE_FULL",
        "summary": ""
      },
      {
        "name": "AGI_CORE_VERSION",
        "kind": "re-export",
        "signature": "AGI_CORE_VERSION",
        "summary": ""
      },
      {
        "name": "AI",
        "kind": "re-export",
        "signature": "AI",
        "summary": ""
      },
      {
        "name": "AdaptiveQualityGovernor",
        "kind": "re-export",
        "signature": "AdaptiveQualityGovernor",
        "summary": ""
      },
      {
        "name": "Anatomy",
        "kind": "re-export",
        "signature": "Anatomy",
        "summary": ""
      },
      {
        "name": "Animation",
        "kind": "re-export",
        "signature": "Animation",
        "summary": ""
      },
      {
        "name": "AnimationLearning",
        "kind": "re-export",
        "signature": "AnimationLearning",
        "summary": ""
      },
      {
        "name": "Assets",
        "kind": "re-export",
        "signature": "Assets",
        "summary": ""
      },
      {
        "name": "Audio",
        "kind": "re-export",
        "signature": "Audio",
        "summary": ""
      },
      {
        "name": "BUILD_TAG",
        "kind": "re-export",
        "signature": "BUILD_TAG",
        "summary": ""
      },
      {
        "name": "BVHBuilder",
        "kind": "re-export",
        "signature": "BVHBuilder",
        "summary": ""
      },
      {
        "name": "BVHNode",
        "kind": "re-export",
        "signature": "BVHNode",
        "summary": ""
      },
      {
        "name": "CAMERA_CONTROLLER_LIMITS",
        "kind": "re-export",
        "signature": "CAMERA_CONTROLLER_LIMITS",
        "summary": ""
      },
      {
        "name": "CORE_STORYLETS",
        "kind": "re-export",
        "signature": "CORE_STORYLETS",
        "summary": ""
      },
      {
        "name": "CitySystem",
        "kind": "re-export",
        "signature": "CitySystem",
        "summary": ""
      },
      {
        "name": "Collab",
        "kind": "re-export",
        "signature": "Collab",
        "summary": ""
      },
      {
        "name": "Compat",
        "kind": "re-export",
        "signature": "Compat",
        "summary": ""
      },
      {
        "name": "Config",
        "kind": "re-export",
        "signature": "Config",
        "summary": ""
      },
      {
        "name": "ContractSystem",
        "kind": "re-export",
        "signature": "ContractSystem",
        "summary": ""
      },
      {
        "name": "Core",
        "kind": "re-export",
        "signature": "Core",
        "summary": ""
      },
      {
        "name": "CrimeType",
        "kind": "re-export",
        "signature": "CrimeType",
        "summary": ""
      },
      {
        "name": "DEFAULT_CONFIG",
        "kind": "re-export",
        "signature": "DEFAULT_CONFIG",
        "summary": ""
      },
      {
        "name": "DEFAULT_CRYSTAL_PARAMS",
        "kind": "re-export",
        "signature": "DEFAULT_CRYSTAL_PARAMS",
        "summary": ""
      },
      {
        "name": "DEFAULT_PHYSICS",
        "kind": "re-export",
        "signature": "DEFAULT_PHYSICS",
        "summary": ""
      },
      {
        "name": "DEFAULT_RENDER",
        "kind": "re-export",
        "signature": "DEFAULT_RENDER",
        "summary": ""
      },
      {
        "name": "DEFAULT_STANDARD_INPUT_ACTION_MAP",
        "kind": "re-export",
        "signature": "DEFAULT_STANDARD_INPUT_ACTION_MAP",
        "summary": ""
      },
      {
        "name": "DialogueRunner",
        "kind": "re-export",
        "signature": "DialogueRunner",
        "summary": ""
      },
      {
        "name": "DialogueSystem",
        "kind": "re-export",
        "signature": "DialogueSystem",
        "summary": ""
      },
      {
        "name": "DirectorEventType",
        "kind": "re-export",
        "signature": "DirectorEventType",
        "summary": ""
      },
      {
        "name": "DomainGraph",
        "kind": "re-export",
        "signature": "DomainGraph",
        "summary": ""
      },
      {
        "name": "DriveType",
        "kind": "re-export",
        "signature": "DriveType",
        "summary": ""
      },
      {
        "name": "EDITOR_FULL",
        "kind": "re-export",
        "signature": "EDITOR_FULL",
        "summary": ""
      },
      {
        "name": "EDITOR_STARTED",
        "kind": "re-export",
        "signature": "EDITOR_STARTED",
        "summary": ""
      },
      {
        "name": "EDITOR_VERSION",
        "kind": "re-export",
        "signature": "EDITOR_VERSION",
        "summary": ""
      },
      {
        "name": "ELEMENTS",
        "kind": "re-export",
        "signature": "ELEMENTS",
        "summary": ""
      },
      {
        "name": "EMITTER_TYPES",
        "kind": "re-export",
        "signature": "EMITTER_TYPES",
        "summary": ""
      },
      {
        "name": "ENGINE_FULL",
        "kind": "re-export",
        "signature": "ENGINE_FULL",
        "summary": ""
      },
      {
        "name": "ENGINE_STARTED",
        "kind": "re-export",
        "signature": "ENGINE_STARTED",
        "summary": ""
      },
      {
        "name": "ENGINE_VERSION",
        "kind": "re-export",
        "signature": "ENGINE_VERSION",
        "summary": ""
      },
      {
        "name": "EPSILON",
        "kind": "re-export",
        "signature": "EPSILON",
        "summary": ""
      },
      {
        "name": "EquipSlot",
        "kind": "re-export",
        "signature": "EquipSlot",
        "summary": ""
      },
      {
        "name": "EventGraph",
        "kind": "re-export",
        "signature": "EventGraph",
        "summary": ""
      },
      {
        "name": "FactionAction",
        "kind": "re-export",
        "signature": "FactionAction",
        "summary": ""
      },
      {
        "name": "FactionGraph",
        "kind": "re-export",
        "signature": "FactionGraph",
        "summary": ""
      },
      {
        "name": "FluidPhase",
        "kind": "re-export",
        "signature": "FluidPhase",
        "summary": ""
      },
      {
        "name": "GPUTimestampProfiler",
        "kind": "re-export",
        "signature": "GPUTimestampProfiler",
        "summary": ""
      },
      {
        "name": "GRAB_CONTROLLER_LIMITS",
        "kind": "re-export",
        "signature": "GRAB_CONTROLLER_LIMITS",
        "summary": ""
      },
      {
        "name": "HiZPass",
        "kind": "re-export",
        "signature": "HiZPass",
        "summary": ""
      },
      {
        "name": "INF_T",
        "kind": "re-export",
        "signature": "INF_T",
        "summary": ""
      },
      {
        "name": "ImageHeatHazePass",
        "kind": "re-export",
        "signature": "ImageHeatHazePass",
        "summary": ""
      },
      {
        "name": "IndexedClusterCuller",
        "kind": "re-export",
        "signature": "IndexedClusterCuller",
        "summary": ""
      },
      {
        "name": "InstinctGraph",
        "kind": "re-export",
        "signature": "InstinctGraph",
        "summary": ""
      },
      {
        "name": "Inventory",
        "kind": "re-export",
        "signature": "Inventory",
        "summary": ""
      },
      {
        "name": "ItemOwnership",
        "kind": "re-export",
        "signature": "ItemOwnership",
        "summary": ""
      },
      {
        "name": "ItemSoulSystem",
        "kind": "re-export",
        "signature": "ItemSoulSystem",
        "summary": ""
      },
      {
        "name": "LawGraph",
        "kind": "re-export",
        "signature": "LawGraph",
        "summary": ""
      },
      {
        "name": "LifePhases",
        "kind": "re-export",
        "signature": "LifePhases",
        "summary": ""
      },
      {
        "name": "Math",
        "kind": "re-export",
        "signature": "Math",
        "summary": ""
      },
      {
        "name": "MessageChannel",
        "kind": "re-export",
        "signature": "MessageChannel",
        "summary": ""
      },
      {
        "name": "MotionClip",
        "kind": "re-export",
        "signature": "MotionClip",
        "summary": ""
      },
      {
        "name": "MotionDataset",
        "kind": "re-export",
        "signature": "MotionDataset",
        "summary": ""
      },
      {
        "name": "MotionMatcher",
        "kind": "re-export",
        "signature": "MotionMatcher",
        "summary": ""
      },
      {
        "name": "NPCBrain",
        "kind": "re-export",
        "signature": "NPCBrain",
        "summary": ""
      },
      {
        "name": "Network",
        "kind": "re-export",
        "signature": "Network",
        "summary": ""
      },
      {
        "name": "NodeType",
        "kind": "re-export",
        "signature": "NodeType",
        "summary": ""
      },
      {
        "name": "PARTICLE_PHASE_STRIDE",
        "kind": "re-export",
        "signature": "PARTICLE_PHASE_STRIDE",
        "summary": ""
      },
      {
        "name": "PARTICLE_QUALITY_PRESETS",
        "kind": "re-export",
        "signature": "PARTICLE_QUALITY_PRESETS",
        "summary": ""
      },
      {
        "name": "PLAUNA_FULL",
        "kind": "re-export",
        "signature": "PLAUNA_FULL",
        "summary": ""
      },
      {
        "name": "PLAUNA_VERSION",
        "kind": "re-export",
        "signature": "PLAUNA_VERSION",
        "summary": ""
      },
      {
        "name": "PROXY_MODE",
        "kind": "re-export",
        "signature": "PROXY_MODE",
        "summary": ""
      },
      {
        "name": "PROXY_TIER",
        "kind": "re-export",
        "signature": "PROXY_TIER",
        "summary": ""
      },
      {
        "name": "PathTracingPass",
        "kind": "re-export",
        "signature": "PathTracingPass",
        "summary": ""
      },
      {
        "name": "PerceptionGraph",
        "kind": "re-export",
        "signature": "PerceptionGraph",
        "summary": ""
      },
      {
        "name": "PerceptionLevel",
        "kind": "re-export",
        "signature": "PerceptionLevel",
        "summary": ""
      },
      {
        "name": "Phase",
        "kind": "re-export",
        "signature": "Phase",
        "summary": ""
      },
      {
        "name": "PhysXPhysicsWorld",
        "kind": "re-export",
        "signature": "PhysXPhysicsWorld",
        "summary": ""
      },
      {
        "name": "PowerGraph",
        "kind": "re-export",
        "signature": "PowerGraph",
        "summary": ""
      },
      {
        "name": "ProxyBillboardAlign",
        "kind": "re-export",
        "signature": "ProxyBillboardAlign",
        "summary": ""
      },
      {
        "name": "ProxyGBufferPass",
        "kind": "re-export",
        "signature": "ProxyGBufferPass",
        "summary": ""
      },
      {
        "name": "ProxyGeometrySystem",
        "kind": "re-export",
        "signature": "ProxyGeometrySystem",
        "summary": ""
      },
      {
        "name": "ProxyMaskPass",
        "kind": "re-export",
        "signature": "ProxyMaskPass",
        "summary": ""
      },
      {
        "name": "ProxyOctahedralCache",
        "kind": "re-export",
        "signature": "ProxyOctahedralCache",
        "summary": ""
      },
      {
        "name": "ProxySDF",
        "kind": "re-export",
        "signature": "ProxySDF",
        "summary": ""
      },
      {
        "name": "ProxyShadePass",
        "kind": "re-export",
        "signature": "ProxyShadePass",
        "summary": ""
      },
      {
        "name": "PunishmentType",
        "kind": "re-export",
        "signature": "PunishmentType",
        "summary": ""
      },
      {
        "name": "RASTERIZER_MODE",
        "kind": "re-export",
        "signature": "RASTERIZER_MODE",
        "summary": ""
      },
      {
        "name": "RAY_PICKER_LIMITS",
        "kind": "re-export",
        "signature": "RAY_PICKER_LIMITS",
        "summary": ""
      },
      {
        "name": "ROOM_PICKING_LIMITS",
        "kind": "re-export",
        "signature": "ROOM_PICKING_LIMITS",
        "summary": ""
      },
      {
        "name": "ReSTIRGIPass",
        "kind": "re-export",
        "signature": "ReSTIRGIPass",
        "summary": ""
      },
      {
        "name": "Render",
        "kind": "re-export",
        "signature": "Render",
        "summary": ""
      },
      {
        "name": "ResolveSystem",
        "kind": "re-export",
        "signature": "ResolveSystem",
        "summary": ""
      },
      {
        "name": "Rig",
        "kind": "re-export",
        "signature": "Rig",
        "summary": ""
      },
      {
        "name": "RuleCategory",
        "kind": "re-export",
        "signature": "RuleCategory",
        "summary": ""
      },
      {
        "name": "RuleEffect",
        "kind": "re-export",
        "signature": "RuleEffect",
        "summary": ""
      },
      {
        "name": "RuleGraph",
        "kind": "re-export",
        "signature": "RuleGraph",
        "summary": ""
      },
      {
        "name": "SANDBOX_BEHAVIOR",
        "kind": "re-export",
        "signature": "SANDBOX_BEHAVIOR",
        "summary": ""
      },
      {
        "name": "SANDBOX_FLAGS",
        "kind": "re-export",
        "signature": "SANDBOX_FLAGS",
        "summary": ""
      },
      {
        "name": "SANDBOX_INTERACTION",
        "kind": "re-export",
        "signature": "SANDBOX_INTERACTION",
        "summary": ""
      },
      {
        "name": "SANDBOX_OBJECT",
        "kind": "re-export",
        "signature": "SANDBOX_OBJECT",
        "summary": ""
      },
      {
        "name": "SANDBOX_OBJECTS",
        "kind": "re-export",
        "signature": "SANDBOX_OBJECTS",
        "summary": ""
      },
      {
        "name": "SANDBOX_PHASE",
        "kind": "re-export",
        "signature": "SANDBOX_PHASE",
        "summary": ""
      },
      {
        "name": "SANDBOX_REACTION",
        "kind": "re-export",
        "signature": "SANDBOX_REACTION",
        "summary": ""
      },
      {
        "name": "SANDBOX_REFERENCE_TEMPERATURE_K",
        "kind": "re-export",
        "signature": "SANDBOX_REFERENCE_TEMPERATURE_K",
        "summary": ""
      },
      {
        "name": "SANDBOX_SPECIES_CAPACITY",
        "kind": "re-export",
        "signature": "SANDBOX_SPECIES_CAPACITY",
        "summary": ""
      },
      {
        "name": "SANDBOX_SUBSTANCE_CODE_BASE",
        "kind": "re-export",
        "signature": "SANDBOX_SUBSTANCE_CODE_BASE",
        "summary": ""
      },
      {
        "name": "SANDBOX_TEMPERATURE_STEP_K",
        "kind": "re-export",
        "signature": "SANDBOX_TEMPERATURE_STEP_K",
        "summary": ""
      },
      {
        "name": "SAVE_SCHEMA_VERSION",
        "kind": "re-export",
        "signature": "SAVE_SCHEMA_VERSION",
        "summary": ""
      },
      {
        "name": "SCREEN_RAY_LIMITS",
        "kind": "re-export",
        "signature": "SCREEN_RAY_LIMITS",
        "summary": ""
      },
      {
        "name": "SOUL_STAGE_NAMES",
        "kind": "re-export",
        "signature": "SOUL_STAGE_NAMES",
        "summary": ""
      },
      {
        "name": "SPAWN_TYPE_CATEGORIES",
        "kind": "re-export",
        "signature": "SPAWN_TYPE_CATEGORIES",
        "summary": ""
      },
      {
        "name": "SPAWN_TYPE_COLORS",
        "kind": "re-export",
        "signature": "SPAWN_TYPE_COLORS",
        "summary": ""
      },
      {
        "name": "SPAWN_TYPE_MESHES",
        "kind": "re-export",
        "signature": "SPAWN_TYPE_MESHES",
        "summary": ""
      },
      {
        "name": "SPELL_EFFECT_TYPES",
        "kind": "re-export",
        "signature": "SPELL_EFFECT_TYPES",
        "summary": ""
      },
      {
        "name": "SPELL_PASS_TYPES",
        "kind": "re-export",
        "signature": "SPELL_PASS_TYPES",
        "summary": ""
      },
      {
        "name": "STANDARD_CAMERA_LIMITS",
        "kind": "re-export",
        "signature": "STANDARD_CAMERA_LIMITS",
        "summary": ""
      },
      {
        "name": "STANDARD_INPUT_LIMITS",
        "kind": "re-export",
        "signature": "STANDARD_INPUT_LIMITS",
        "summary": ""
      },
      {
        "name": "STATES",
        "kind": "re-export",
        "signature": "STATES",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_DIRTY",
        "kind": "re-export",
        "signature": "STATE_FIRST_DIRTY",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_ECS_METADATA_VERSION",
        "kind": "re-export",
        "signature": "STATE_FIRST_ECS_METADATA_VERSION",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_EXECUTION_BACKEND",
        "kind": "re-export",
        "signature": "STATE_FIRST_EXECUTION_BACKEND",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_PARITY_STATUS",
        "kind": "re-export",
        "signature": "STATE_FIRST_PARITY_STATUS",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_QUALITY_PROFILE",
        "kind": "re-export",
        "signature": "STATE_FIRST_QUALITY_PROFILE",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_REPRESENTATION",
        "kind": "re-export",
        "signature": "STATE_FIRST_REPRESENTATION",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_REPRESENTATION_NAMES",
        "kind": "re-export",
        "signature": "STATE_FIRST_REPRESENTATION_NAMES",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_RETAINED_INDEX_BYTES",
        "kind": "re-export",
        "signature": "STATE_FIRST_RETAINED_INDEX_BYTES",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_RETAINED_RECORD_BYTES",
        "kind": "re-export",
        "signature": "STATE_FIRST_RETAINED_RECORD_BYTES",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_RETAINED_RECORD_FLOATS",
        "kind": "re-export",
        "signature": "STATE_FIRST_RETAINED_RECORD_FLOATS",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_SOURCE",
        "kind": "re-export",
        "signature": "STATE_FIRST_SOURCE",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_SOURCE_KIND",
        "kind": "re-export",
        "signature": "STATE_FIRST_SOURCE_KIND",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_SOURCE_VERSION",
        "kind": "re-export",
        "signature": "STATE_FIRST_SOURCE_VERSION",
        "summary": ""
      },
      {
        "name": "STATS",
        "kind": "re-export",
        "signature": "STATS",
        "summary": ""
      },
      {
        "name": "SVGFDenoise",
        "kind": "re-export",
        "signature": "SVGFDenoise",
        "summary": ""
      },
      {
        "name": "SaveSystem",
        "kind": "re-export",
        "signature": "SaveSystem",
        "summary": ""
      },
      {
        "name": "SchemaValidator",
        "kind": "re-export",
        "signature": "SchemaValidator",
        "summary": ""
      },
      {
        "name": "SimLevel",
        "kind": "re-export",
        "signature": "SimLevel",
        "summary": ""
      },
      {
        "name": "SimulationManager",
        "kind": "re-export",
        "signature": "SimulationManager",
        "summary": ""
      },
      {
        "name": "SituationBucket",
        "kind": "re-export",
        "signature": "SituationBucket",
        "summary": ""
      },
      {
        "name": "SituationGraph",
        "kind": "re-export",
        "signature": "SituationGraph",
        "summary": ""
      },
      {
        "name": "SkeletonHierarchy",
        "kind": "re-export",
        "signature": "SkeletonHierarchy",
        "summary": ""
      },
      {
        "name": "SoulGraph",
        "kind": "re-export",
        "signature": "SoulGraph",
        "summary": ""
      },
      {
        "name": "SoulGraphMessaging",
        "kind": "re-export",
        "signature": "SoulGraphMessaging",
        "summary": ""
      },
      {
        "name": "SoulStage",
        "kind": "re-export",
        "signature": "SoulStage",
        "summary": ""
      },
      {
        "name": "State",
        "kind": "re-export",
        "signature": "State",
        "summary": ""
      },
      {
        "name": "StateFirstEcsSourceAdapter",
        "kind": "re-export",
        "signature": "StateFirstEcsSourceAdapter",
        "summary": ""
      },
      {
        "name": "StateFirstExecutionBackend",
        "kind": "re-export",
        "signature": "StateFirstExecutionBackend",
        "summary": ""
      },
      {
        "name": "StateFirstGpuCuller",
        "kind": "re-export",
        "signature": "StateFirstGpuCuller",
        "summary": ""
      },
      {
        "name": "StateFirstRasterizer",
        "kind": "re-export",
        "signature": "StateFirstRasterizer",
        "summary": ""
      },
      {
        "name": "StateFirstRetainedStorage",
        "kind": "re-export",
        "signature": "StateFirstRetainedStorage",
        "summary": ""
      },
      {
        "name": "StateFirstSourceBridge",
        "kind": "re-export",
        "signature": "StateFirstSourceBridge",
        "summary": ""
      },
      {
        "name": "StoryGraph",
        "kind": "re-export",
        "signature": "StoryGraph",
        "summary": ""
      },
      {
        "name": "StoryletRarity",
        "kind": "re-export",
        "signature": "StoryletRarity",
        "summary": ""
      },
      {
        "name": "Structural",
        "kind": "re-export",
        "signature": "Structural",
        "summary": ""
      },
      {
        "name": "SurfaceCacheExtractor",
        "kind": "re-export",
        "signature": "SurfaceCacheExtractor",
        "summary": ""
      },
      {
        "name": "Surfaces",
        "kind": "re-export",
        "signature": "Surfaces",
        "summary": ""
      },
      {
        "name": "TLASBuilder",
        "kind": "re-export",
        "signature": "TLASBuilder",
        "summary": ""
      },
      {
        "name": "TransferType",
        "kind": "re-export",
        "signature": "TransferType",
        "summary": ""
      },
      {
        "name": "UnderwaterSiltField",
        "kind": "re-export",
        "signature": "UnderwaterSiltField",
        "summary": ""
      },
      {
        "name": "VERSION_BANNER",
        "kind": "re-export",
        "signature": "VERSION_BANNER",
        "summary": ""
      },
      {
        "name": "VoiceStyle",
        "kind": "re-export",
        "signature": "VoiceStyle",
        "summary": ""
      },
      {
        "name": "Voxel",
        "kind": "re-export",
        "signature": "Voxel",
        "summary": ""
      },
      {
        "name": "World",
        "kind": "re-export",
        "signature": "World",
        "summary": ""
      },
      {
        "name": "WorldDirector",
        "kind": "re-export",
        "signature": "WorldDirector",
        "summary": ""
      },
      {
        "name": "addGhostToSelection",
        "kind": "re-export",
        "signature": "addGhostToSelection",
        "summary": ""
      },
      {
        "name": "applyBoundaries",
        "kind": "re-export",
        "signature": "applyBoundaries",
        "summary": ""
      },
      {
        "name": "applyEngineConfigToPhysics",
        "kind": "re-export",
        "signature": "applyEngineConfigToPhysics",
        "summary": ""
      },
      {
        "name": "applyEngineConfigToState",
        "kind": "re-export",
        "signature": "applyEngineConfigToState",
        "summary": ""
      },
      {
        "name": "applyPhaseVisuals",
        "kind": "re-export",
        "signature": "applyPhaseVisuals",
        "summary": ""
      },
      {
        "name": "attachFluidWorld",
        "kind": "re-export",
        "signature": "attachFluidWorld",
        "summary": ""
      },
      {
        "name": "attachInputListeners",
        "kind": "re-export",
        "signature": "attachInputListeners",
        "summary": ""
      },
      {
        "name": "attachInspectorPanel",
        "kind": "re-export",
        "signature": "attachInspectorPanel",
        "summary": ""
      },
      {
        "name": "attachPhysicsSandboxInspector",
        "kind": "re-export",
        "signature": "attachPhysicsSandboxInspector",
        "summary": ""
      },
      {
        "name": "augmentGeoWithSkeleton",
        "kind": "re-export",
        "signature": "augmentGeoWithSkeleton",
        "summary": ""
      },
      {
        "name": "bakeNoiseTexture",
        "kind": "re-export",
        "signature": "bakeNoiseTexture",
        "summary": ""
      },
      {
        "name": "beatFrequency",
        "kind": "re-export",
        "signature": "beatFrequency",
        "summary": ""
      },
      {
        "name": "beginStandardRenderPass",
        "kind": "re-export",
        "signature": "beginStandardRenderPass",
        "summary": ""
      },
      {
        "name": "bootstrapApp",
        "kind": "re-export",
        "signature": "bootstrapApp",
        "summary": ""
      },
      {
        "name": "branchNode",
        "kind": "re-export",
        "signature": "branchNode",
        "summary": ""
      },
      {
        "name": "buildColliderBuffer",
        "kind": "re-export",
        "signature": "buildColliderBuffer",
        "summary": ""
      },
      {
        "name": "buildEffectKeyFromElements",
        "kind": "re-export",
        "signature": "buildEffectKeyFromElements",
        "summary": ""
      },
      {
        "name": "buildFluidDomainFromColliders",
        "kind": "re-export",
        "signature": "buildFluidDomainFromColliders",
        "summary": ""
      },
      {
        "name": "buildFluidSources",
        "kind": "re-export",
        "signature": "buildFluidSources",
        "summary": ""
      },
      {
        "name": "buildJointPositionDataset",
        "kind": "re-export",
        "signature": "buildJointPositionDataset",
        "summary": ""
      },
      {
        "name": "buildMotionFeatureIndex",
        "kind": "re-export",
        "signature": "buildMotionFeatureIndex",
        "summary": ""
      },
      {
        "name": "buildNeighborGrid",
        "kind": "re-export",
        "signature": "buildNeighborGrid",
        "summary": ""
      },
      {
        "name": "buildViewProjData",
        "kind": "re-export",
        "signature": "buildViewProjData",
        "summary": ""
      },
      {
        "name": "cameraCollisionOptionsReport",
        "kind": "re-export",
        "signature": "cameraCollisionOptionsReport",
        "summary": ""
      },
      {
        "name": "cameraControllerEntityReport",
        "kind": "re-export",
        "signature": "cameraControllerEntityReport",
        "summary": ""
      },
      {
        "name": "cameraControllerStepReport",
        "kind": "re-export",
        "signature": "cameraControllerStepReport",
        "summary": ""
      },
      {
        "name": "cameraEntityBoundsReport",
        "kind": "re-export",
        "signature": "cameraEntityBoundsReport",
        "summary": ""
      },
      {
        "name": "cameraEntityFocusReport",
        "kind": "re-export",
        "signature": "cameraEntityFocusReport",
        "summary": ""
      },
      {
        "name": "cameraFocusReport",
        "kind": "re-export",
        "signature": "cameraFocusReport",
        "summary": ""
      },
      {
        "name": "cameraFocusTransitionReport",
        "kind": "re-export",
        "signature": "cameraFocusTransitionReport",
        "summary": ""
      },
      {
        "name": "cameraModeSwitchReport",
        "kind": "re-export",
        "signature": "cameraModeSwitchReport",
        "summary": ""
      },
      {
        "name": "cancelGrabCandidate",
        "kind": "re-export",
        "signature": "cancelGrabCandidate",
        "summary": ""
      },
      {
        "name": "choiceNode",
        "kind": "re-export",
        "signature": "choiceNode",
        "summary": ""
      },
      {
        "name": "chooseStateFirstRepresentation",
        "kind": "re-export",
        "signature": "chooseStateFirstRepresentation",
        "summary": ""
      },
      {
        "name": "clamp",
        "kind": "re-export",
        "signature": "clamp",
        "summary": ""
      },
      {
        "name": "clearFluidDensity",
        "kind": "re-export",
        "signature": "clearFluidDensity",
        "summary": ""
      },
      {
        "name": "clearFluidSimWorld",
        "kind": "re-export",
        "signature": "clearFluidSimWorld",
        "summary": ""
      },
      {
        "name": "clearFreezeRegion",
        "kind": "re-export",
        "signature": "clearFreezeRegion",
        "summary": ""
      },
      {
        "name": "clearGrabForEntity",
        "kind": "re-export",
        "signature": "clearGrabForEntity",
        "summary": ""
      },
      {
        "name": "compareLongRangeVectors",
        "kind": "re-export",
        "signature": "compareLongRangeVectors",
        "summary": ""
      },
      {
        "name": "computeAimBetweenEntities",
        "kind": "re-export",
        "signature": "computeAimBetweenEntities",
        "summary": ""
      },
      {
        "name": "computeAimFromEntityToPoint",
        "kind": "re-export",
        "signature": "computeAimFromEntityToPoint",
        "summary": ""
      },
      {
        "name": "computeVisualPower",
        "kind": "re-export",
        "signature": "computeVisualPower",
        "summary": ""
      },
      {
        "name": "configureParticleLongRange",
        "kind": "re-export",
        "signature": "configureParticleLongRange",
        "summary": ""
      },
      {
        "name": "configurePhysicsSandboxScene",
        "kind": "re-export",
        "signature": "configurePhysicsSandboxScene",
        "summary": ""
      },
      {
        "name": "consumeMouseDelta",
        "kind": "re-export",
        "signature": "consumeMouseDelta",
        "summary": ""
      },
      {
        "name": "consumeZoomDelta",
        "kind": "re-export",
        "signature": "consumeZoomDelta",
        "summary": ""
      },
      {
        "name": "createAdaptiveQualityGovernor",
        "kind": "re-export",
        "signature": "createAdaptiveQualityGovernor",
        "summary": ""
      },
      {
        "name": "createAllState",
        "kind": "re-export",
        "signature": "createAllState",
        "summary": ""
      },
      {
        "name": "createAudioEngine",
        "kind": "re-export",
        "signature": "createAudioEngine",
        "summary": ""
      },
      {
        "name": "createAudioState",
        "kind": "re-export",
        "signature": "createAudioState",
        "summary": ""
      },
      {
        "name": "createBoundaryPipeline",
        "kind": "re-export",
        "signature": "createBoundaryPipeline",
        "summary": ""
      },
      {
        "name": "createBoundaryShader",
        "kind": "re-export",
        "signature": "createBoundaryShader",
        "summary": ""
      },
      {
        "name": "createCamera",
        "kind": "re-export",
        "signature": "createCamera",
        "summary": ""
      },
      {
        "name": "createCameraState",
        "kind": "re-export",
        "signature": "createCameraState",
        "summary": ""
      },
      {
        "name": "createCharacterAudioBridge",
        "kind": "re-export",
        "signature": "createCharacterAudioBridge",
        "summary": ""
      },
      {
        "name": "createCity",
        "kind": "re-export",
        "signature": "createCity",
        "summary": ""
      },
      {
        "name": "createCollider",
        "kind": "re-export",
        "signature": "createCollider",
        "summary": ""
      },
      {
        "name": "createConfigState",
        "kind": "re-export",
        "signature": "createConfigState",
        "summary": ""
      },
      {
        "name": "createCrimeRecord",
        "kind": "re-export",
        "signature": "createCrimeRecord",
        "summary": ""
      },
      {
        "name": "createCrystallizationPipeline",
        "kind": "re-export",
        "signature": "createCrystallizationPipeline",
        "summary": ""
      },
      {
        "name": "createCrystallizationShader",
        "kind": "re-export",
        "signature": "createCrystallizationShader",
        "summary": ""
      },
      {
        "name": "createCubeGeometry",
        "kind": "re-export",
        "signature": "createCubeGeometry",
        "summary": ""
      },
      {
        "name": "createCylinderGeometry",
        "kind": "re-export",
        "signature": "createCylinderGeometry",
        "summary": ""
      },
      {
        "name": "createDefaultFromSchema",
        "kind": "re-export",
        "signature": "createDefaultFromSchema",
        "summary": ""
      },
      {
        "name": "createEcsState",
        "kind": "re-export",
        "signature": "createEcsState",
        "summary": ""
      },
      {
        "name": "createEmitter",
        "kind": "re-export",
        "signature": "createEmitter",
        "summary": ""
      },
      {
        "name": "createEmittersForEffect",
        "kind": "re-export",
        "signature": "createEmittersForEffect",
        "summary": ""
      },
      {
        "name": "createEngineMesh",
        "kind": "re-export",
        "signature": "createEngineMesh",
        "summary": ""
      },
      {
        "name": "createEntity",
        "kind": "re-export",
        "signature": "createEntity",
        "summary": ""
      },
      {
        "name": "createEvent",
        "kind": "re-export",
        "signature": "createEvent",
        "summary": ""
      },
      {
        "name": "createFaction",
        "kind": "re-export",
        "signature": "createFaction",
        "summary": ""
      },
      {
        "name": "createFluidSimWorld",
        "kind": "re-export",
        "signature": "createFluidSimWorld",
        "summary": ""
      },
      {
        "name": "createFluidWaterPass",
        "kind": "re-export",
        "signature": "createFluidWaterPass",
        "summary": ""
      },
      {
        "name": "createFmmSystem",
        "kind": "re-export",
        "signature": "createFmmSystem",
        "summary": ""
      },
      {
        "name": "createGhostSelectionState",
        "kind": "re-export",
        "signature": "createGhostSelectionState",
        "summary": ""
      },
      {
        "name": "createGpuState",
        "kind": "re-export",
        "signature": "createGpuState",
        "summary": ""
      },
      {
        "name": "createGrabState",
        "kind": "re-export",
        "signature": "createGrabState",
        "summary": ""
      },
      {
        "name": "createGroundGeometry",
        "kind": "re-export",
        "signature": "createGroundGeometry",
        "summary": ""
      },
      {
        "name": "createInputController",
        "kind": "re-export",
        "signature": "createInputController",
        "summary": ""
      },
      {
        "name": "createInputState",
        "kind": "re-export",
        "signature": "createInputState",
        "summary": ""
      },
      {
        "name": "createInspectorConfig",
        "kind": "re-export",
        "signature": "createInspectorConfig",
        "summary": ""
      },
      {
        "name": "createInventory",
        "kind": "re-export",
        "signature": "createInventory",
        "summary": ""
      },
      {
        "name": "createLight",
        "kind": "re-export",
        "signature": "createLight",
        "summary": ""
      },
      {
        "name": "createLocalStorageAdapter",
        "kind": "re-export",
        "signature": "createLocalStorageAdapter",
        "summary": ""
      },
      {
        "name": "createMPMBuffers",
        "kind": "re-export",
        "signature": "createMPMBuffers",
        "summary": ""
      },
      {
        "name": "createMPMPipelines",
        "kind": "re-export",
        "signature": "createMPMPipelines",
        "summary": ""
      },
      {
        "name": "createMPMWorld",
        "kind": "re-export",
        "signature": "createMPMWorld",
        "summary": ""
      },
      {
        "name": "createMainLoop",
        "kind": "re-export",
        "signature": "createMainLoop",
        "summary": ""
      },
      {
        "name": "createMeshLookup",
        "kind": "re-export",
        "signature": "createMeshLookup",
        "summary": ""
      },
      {
        "name": "createMeshParticleBuffers",
        "kind": "re-export",
        "signature": "createMeshParticleBuffers",
        "summary": ""
      },
      {
        "name": "createMessage",
        "kind": "re-export",
        "signature": "createMessage",
        "summary": ""
      },
      {
        "name": "createMinimalWorld",
        "kind": "re-export",
        "signature": "createMinimalWorld",
        "summary": ""
      },
      {
        "name": "createNBodySystem",
        "kind": "re-export",
        "signature": "createNBodySystem",
        "summary": ""
      },
      {
        "name": "createNeighborGridSystem",
        "kind": "re-export",
        "signature": "createNeighborGridSystem",
        "summary": ""
      },
      {
        "name": "createNoiseTextureSystem",
        "kind": "re-export",
        "signature": "createNoiseTextureSystem",
        "summary": ""
      },
      {
        "name": "createOscillator",
        "kind": "re-export",
        "signature": "createOscillator",
        "summary": ""
      },
      {
        "name": "createOscillatorBank",
        "kind": "re-export",
        "signature": "createOscillatorBank",
        "summary": ""
      },
      {
        "name": "createOwnedItem",
        "kind": "re-export",
        "signature": "createOwnedItem",
        "summary": ""
      },
      {
        "name": "createParticleBillboardDataBindGroup",
        "kind": "re-export",
        "signature": "createParticleBillboardDataBindGroup",
        "summary": ""
      },
      {
        "name": "createParticleBillboardRenderer",
        "kind": "re-export",
        "signature": "createParticleBillboardRenderer",
        "summary": ""
      },
      {
        "name": "createParticleMeshEwaldSystem",
        "kind": "re-export",
        "signature": "createParticleMeshEwaldSystem",
        "summary": ""
      },
      {
        "name": "createParticleQualityManager",
        "kind": "re-export",
        "signature": "createParticleQualityManager",
        "summary": ""
      },
      {
        "name": "createParticleSimWorld",
        "kind": "re-export",
        "signature": "createParticleSimWorld",
        "summary": ""
      },
      {
        "name": "createParticlesState",
        "kind": "re-export",
        "signature": "createParticlesState",
        "summary": ""
      },
      {
        "name": "createPhaseChangeBuffers",
        "kind": "re-export",
        "signature": "createPhaseChangeBuffers",
        "summary": ""
      },
      {
        "name": "createPhysXVehicle",
        "kind": "re-export",
        "signature": "createPhysXVehicle",
        "summary": ""
      },
      {
        "name": "createPhysicsBody",
        "kind": "re-export",
        "signature": "createPhysicsBody",
        "summary": ""
      },
      {
        "name": "createPhysicsState",
        "kind": "re-export",
        "signature": "createPhysicsState",
        "summary": ""
      },
      {
        "name": "createPlaneGeometry",
        "kind": "re-export",
        "signature": "createPlaneGeometry",
        "summary": ""
      },
      {
        "name": "createPower",
        "kind": "re-export",
        "signature": "createPower",
        "summary": ""
      },
      {
        "name": "createQuery",
        "kind": "re-export",
        "signature": "createQuery",
        "summary": ""
      },
      {
        "name": "createRayPicker",
        "kind": "re-export",
        "signature": "createRayPicker",
        "summary": ""
      },
      {
        "name": "createRenderState",
        "kind": "re-export",
        "signature": "createRenderState",
        "summary": ""
      },
      {
        "name": "createRule",
        "kind": "re-export",
        "signature": "createRule",
        "summary": ""
      },
      {
        "name": "createSandboxMaterialCatalog",
        "kind": "re-export",
        "signature": "createSandboxMaterialCatalog",
        "summary": ""
      },
      {
        "name": "createSandboxSpeciesLut",
        "kind": "re-export",
        "signature": "createSandboxSpeciesLut",
        "summary": ""
      },
      {
        "name": "createSceneFileInput",
        "kind": "re-export",
        "signature": "createSceneFileInput",
        "summary": ""
      },
      {
        "name": "createSeedInjectionParams",
        "kind": "re-export",
        "signature": "createSeedInjectionParams",
        "summary": ""
      },
      {
        "name": "createShaderLoader",
        "kind": "re-export",
        "signature": "createShaderLoader",
        "summary": ""
      },
      {
        "name": "createSkyboxGeometry",
        "kind": "re-export",
        "signature": "createSkyboxGeometry",
        "summary": ""
      },
      {
        "name": "createSmokeState",
        "kind": "re-export",
        "signature": "createSmokeState",
        "summary": ""
      },
      {
        "name": "createSmokeVolumeRenderer",
        "kind": "re-export",
        "signature": "createSmokeVolumeRenderer",
        "summary": ""
      },
      {
        "name": "createSolidMaskTexture",
        "kind": "re-export",
        "signature": "createSolidMaskTexture",
        "summary": ""
      },
      {
        "name": "createSpawnState",
        "kind": "re-export",
        "signature": "createSpawnState",
        "summary": ""
      },
      {
        "name": "createSpellEffectPass",
        "kind": "re-export",
        "signature": "createSpellEffectPass",
        "summary": ""
      },
      {
        "name": "createSpellForce",
        "kind": "re-export",
        "signature": "createSpellForce",
        "summary": ""
      },
      {
        "name": "createSphereGeometry",
        "kind": "re-export",
        "signature": "createSphereGeometry",
        "summary": ""
      },
      {
        "name": "createStandardEntityRenderResources",
        "kind": "re-export",
        "signature": "createStandardEntityRenderResources",
        "summary": ""
      },
      {
        "name": "createStandardRoomRenderer",
        "kind": "re-export",
        "signature": "createStandardRoomRenderer",
        "summary": ""
      },
      {
        "name": "createStateFirstEcsSourceAdapter",
        "kind": "re-export",
        "signature": "createStateFirstEcsSourceAdapter",
        "summary": ""
      },
      {
        "name": "createStateFirstExecutionBackend",
        "kind": "re-export",
        "signature": "createStateFirstExecutionBackend",
        "summary": ""
      },
      {
        "name": "createStateFirstGpuCuller",
        "kind": "re-export",
        "signature": "createStateFirstGpuCuller",
        "summary": ""
      },
      {
        "name": "createStateFirstRasterizer",
        "kind": "re-export",
        "signature": "createStateFirstRasterizer",
        "summary": ""
      },
      {
        "name": "createStateFirstRetainedStorage",
        "kind": "re-export",
        "signature": "createStateFirstRetainedStorage",
        "summary": ""
      },
      {
        "name": "createStateFirstSourceBridge",
        "kind": "re-export",
        "signature": "createStateFirstSourceBridge",
        "summary": ""
      },
      {
        "name": "createStorageBuffer",
        "kind": "re-export",
        "signature": "createStorageBuffer",
        "summary": ""
      },
      {
        "name": "createStorylet",
        "kind": "re-export",
        "signature": "createStorylet",
        "summary": ""
      },
      {
        "name": "createTransform",
        "kind": "re-export",
        "signature": "createTransform",
        "summary": ""
      },
      {
        "name": "createUniformBuffer",
        "kind": "re-export",
        "signature": "createUniformBuffer",
        "summary": ""
      },
      {
        "name": "createUnitCubeMesh",
        "kind": "re-export",
        "signature": "createUnitCubeMesh",
        "summary": ""
      },
      {
        "name": "createVoxelWorldRenderer",
        "kind": "re-export",
        "signature": "createVoxelWorldRenderer",
        "summary": ""
      },
      {
        "name": "createWaterPassState",
        "kind": "re-export",
        "signature": "createWaterPassState",
        "summary": ""
      },
      {
        "name": "createWorld",
        "kind": "re-export",
        "signature": "createWorld",
        "summary": ""
      },
      {
        "name": "createWorldFluidDomain",
        "kind": "re-export",
        "signature": "createWorldFluidDomain",
        "summary": ""
      },
      {
        "name": "defaultResolveEquipSlot",
        "kind": "re-export",
        "signature": "defaultResolveEquipSlot",
        "summary": ""
      },
      {
        "name": "defineComponentType",
        "kind": "re-export",
        "signature": "defineComponentType",
        "summary": ""
      },
      {
        "name": "deleteEntity",
        "kind": "re-export",
        "signature": "deleteEntity",
        "summary": ""
      },
      {
        "name": "deleteSelectedEntity",
        "kind": "re-export",
        "signature": "deleteSelectedEntity",
        "summary": ""
      },
      {
        "name": "deriveColorFromElements",
        "kind": "re-export",
        "signature": "deriveColorFromElements",
        "summary": ""
      },
      {
        "name": "destroyAudioEngine",
        "kind": "re-export",
        "signature": "destroyAudioEngine",
        "summary": ""
      },
      {
        "name": "destroyBuffer",
        "kind": "re-export",
        "signature": "destroyBuffer",
        "summary": ""
      },
      {
        "name": "destroyBuffers",
        "kind": "re-export",
        "signature": "destroyBuffers",
        "summary": ""
      },
      {
        "name": "destroyCharacterAudioBridge",
        "kind": "re-export",
        "signature": "destroyCharacterAudioBridge",
        "summary": ""
      },
      {
        "name": "destroyEntity",
        "kind": "re-export",
        "signature": "destroyEntity",
        "summary": ""
      },
      {
        "name": "destroyFluidWaterPass",
        "kind": "re-export",
        "signature": "destroyFluidWaterPass",
        "summary": ""
      },
      {
        "name": "destroyFmmSystem",
        "kind": "re-export",
        "signature": "destroyFmmSystem",
        "summary": ""
      },
      {
        "name": "destroyMPMWorld",
        "kind": "re-export",
        "signature": "destroyMPMWorld",
        "summary": ""
      },
      {
        "name": "destroyNBodySystem",
        "kind": "re-export",
        "signature": "destroyNBodySystem",
        "summary": ""
      },
      {
        "name": "destroyNeighborGridSystem",
        "kind": "re-export",
        "signature": "destroyNeighborGridSystem",
        "summary": ""
      },
      {
        "name": "destroyNoiseTextureSystem",
        "kind": "re-export",
        "signature": "destroyNoiseTextureSystem",
        "summary": ""
      },
      {
        "name": "destroyParticleMeshEwaldSystem",
        "kind": "re-export",
        "signature": "destroyParticleMeshEwaldSystem",
        "summary": ""
      },
      {
        "name": "destroyParticleSimWorld",
        "kind": "re-export",
        "signature": "destroyParticleSimWorld",
        "summary": ""
      },
      {
        "name": "destroyPhaseChangeBuffers",
        "kind": "re-export",
        "signature": "destroyPhaseChangeBuffers",
        "summary": ""
      },
      {
        "name": "destroyWorldFluidDomain",
        "kind": "re-export",
        "signature": "destroyWorldFluidDomain",
        "summary": ""
      },
      {
        "name": "detachInputListeners",
        "kind": "re-export",
        "signature": "detachInputListeners",
        "summary": ""
      },
      {
        "name": "directLongRangeAccelerations",
        "kind": "re-export",
        "signature": "directLongRangeAccelerations",
        "summary": ""
      },
      {
        "name": "discoverStateFirstSource",
        "kind": "re-export",
        "signature": "discoverStateFirstSource",
        "summary": ""
      },
      {
        "name": "downloadScene",
        "kind": "re-export",
        "signature": "downloadScene",
        "summary": ""
      },
      {
        "name": "drawMesh",
        "kind": "re-export",
        "signature": "drawMesh",
        "summary": ""
      },
      {
        "name": "drawMeshes",
        "kind": "re-export",
        "signature": "drawMeshes",
        "summary": ""
      },
      {
        "name": "encodeEntitiesClusterCulling",
        "kind": "re-export",
        "signature": "encodeEntitiesClusterCulling",
        "summary": ""
      },
      {
        "name": "encodeIndexedMeshClusterCulling",
        "kind": "re-export",
        "signature": "encodeIndexedMeshClusterCulling",
        "summary": ""
      },
      {
        "name": "encodeOctahedralNormal",
        "kind": "re-export",
        "signature": "encodeOctahedralNormal",
        "summary": ""
      },
      {
        "name": "endNode",
        "kind": "re-export",
        "signature": "endNode",
        "summary": ""
      },
      {
        "name": "ensureDepthTexture",
        "kind": "re-export",
        "signature": "ensureDepthTexture",
        "summary": ""
      },
      {
        "name": "ensureSceneColorTexture",
        "kind": "re-export",
        "signature": "ensureSceneColorTexture",
        "summary": ""
      },
      {
        "name": "entityPickingOptionsReport",
        "kind": "re-export",
        "signature": "entityPickingOptionsReport",
        "summary": ""
      },
      {
        "name": "estimateFmmMemory",
        "kind": "re-export",
        "signature": "estimateFmmMemory",
        "summary": ""
      },
      {
        "name": "estimateParticleMeshMemory",
        "kind": "re-export",
        "signature": "estimateParticleMeshMemory",
        "summary": ""
      },
      {
        "name": "executeFmm",
        "kind": "re-export",
        "signature": "executeFmm",
        "summary": ""
      },
      {
        "name": "executeNBody",
        "kind": "re-export",
        "signature": "executeNBody",
        "summary": ""
      },
      {
        "name": "executeParticleMeshEwald",
        "kind": "re-export",
        "signature": "executeParticleMeshEwald",
        "summary": ""
      },
      {
        "name": "exportSceneToJson",
        "kind": "re-export",
        "signature": "exportSceneToJson",
        "summary": ""
      },
      {
        "name": "extractFrozenParticles",
        "kind": "re-export",
        "signature": "extractFrozenParticles",
        "summary": ""
      },
      {
        "name": "extractFrozenShape",
        "kind": "re-export",
        "signature": "extractFrozenShape",
        "summary": ""
      },
      {
        "name": "extractMotionClipFromFbxAscii",
        "kind": "re-export",
        "signature": "extractMotionClipFromFbxAscii",
        "summary": ""
      },
      {
        "name": "extractMotionClipFromGltf",
        "kind": "re-export",
        "signature": "extractMotionClipFromGltf",
        "summary": ""
      },
      {
        "name": "extractMotionDatasetFromFbxAsciiEntries",
        "kind": "re-export",
        "signature": "extractMotionDatasetFromFbxAsciiEntries",
        "summary": ""
      },
      {
        "name": "extractMotionDatasetFromFbxDirectoryHandle",
        "kind": "re-export",
        "signature": "extractMotionDatasetFromFbxDirectoryHandle",
        "summary": ""
      },
      {
        "name": "extractMotionDatasetFromFbxFiles",
        "kind": "re-export",
        "signature": "extractMotionDatasetFromFbxFiles",
        "summary": ""
      },
      {
        "name": "extractMotionDatasetFromGltf",
        "kind": "re-export",
        "signature": "extractMotionDatasetFromGltf",
        "summary": ""
      },
      {
        "name": "extractOriginTags",
        "kind": "re-export",
        "signature": "extractOriginTags",
        "summary": ""
      },
      {
        "name": "fillRagdollFeature",
        "kind": "re-export",
        "signature": "fillRagdollFeature",
        "summary": ""
      },
      {
        "name": "fmmCellCoordinate",
        "kind": "re-export",
        "signature": "fmmCellCoordinate",
        "summary": ""
      },
      {
        "name": "fmmInteractionCells",
        "kind": "re-export",
        "signature": "fmmInteractionCells",
        "summary": ""
      },
      {
        "name": "fmmLevelCellCount",
        "kind": "re-export",
        "signature": "fmmLevelCellCount",
        "summary": ""
      },
      {
        "name": "fmmLevelOffset",
        "kind": "re-export",
        "signature": "fmmLevelOffset",
        "summary": ""
      },
      {
        "name": "fmmMortonCellIndex",
        "kind": "re-export",
        "signature": "fmmMortonCellIndex",
        "summary": ""
      },
      {
        "name": "fmmSelectDepth",
        "kind": "re-export",
        "signature": "fmmSelectDepth",
        "summary": ""
      },
      {
        "name": "fmmTotalCellCount",
        "kind": "re-export",
        "signature": "fmmTotalCellCount",
        "summary": ""
      },
      {
        "name": "focusThirdPersonCamera",
        "kind": "re-export",
        "signature": "focusThirdPersonCamera",
        "summary": ""
      },
      {
        "name": "focusThirdPersonCameraOnEntities",
        "kind": "re-export",
        "signature": "focusThirdPersonCameraOnEntities",
        "summary": ""
      },
      {
        "name": "forEachEntity",
        "kind": "re-export",
        "signature": "forEachEntity",
        "summary": ""
      },
      {
        "name": "generateMeshParticlesIntoParticlesState",
        "kind": "re-export",
        "signature": "generateMeshParticlesIntoParticlesState",
        "summary": ""
      },
      {
        "name": "generateMeshParticlesIntoWorld",
        "kind": "re-export",
        "signature": "generateMeshParticlesIntoWorld",
        "summary": ""
      },
      {
        "name": "generateOrigin",
        "kind": "re-export",
        "signature": "generateOrigin",
        "summary": ""
      },
      {
        "name": "generateProceduralSkeleton",
        "kind": "re-export",
        "signature": "generateProceduralSkeleton",
        "summary": ""
      },
      {
        "name": "generateProlateSplitTable",
        "kind": "re-export",
        "signature": "generateProlateSplitTable",
        "summary": ""
      },
      {
        "name": "generateProlateWindowTable",
        "kind": "re-export",
        "signature": "generateProlateWindowTable",
        "summary": ""
      },
      {
        "name": "getActiveGhost",
        "kind": "re-export",
        "signature": "getActiveGhost",
        "summary": ""
      },
      {
        "name": "getActiveGhostWorldPosition",
        "kind": "re-export",
        "signature": "getActiveGhostWorldPosition",
        "summary": ""
      },
      {
        "name": "getAvailableSpawnTypes",
        "kind": "re-export",
        "signature": "getAvailableSpawnTypes",
        "summary": ""
      },
      {
        "name": "getCameraEyeBasisFromState",
        "kind": "re-export",
        "signature": "getCameraEyeBasisFromState",
        "summary": ""
      },
      {
        "name": "getComponentDefinition",
        "kind": "re-export",
        "signature": "getComponentDefinition",
        "summary": ""
      },
      {
        "name": "getComponentSchema",
        "kind": "re-export",
        "signature": "getComponentSchema",
        "summary": ""
      },
      {
        "name": "getElements",
        "kind": "re-export",
        "signature": "getElements",
        "summary": ""
      },
      {
        "name": "getEmitterPreset",
        "kind": "re-export",
        "signature": "getEmitterPreset",
        "summary": ""
      },
      {
        "name": "getEmitterTypes",
        "kind": "re-export",
        "signature": "getEmitterTypes",
        "summary": ""
      },
      {
        "name": "getEntityComponent",
        "kind": "re-export",
        "signature": "getEntityComponent",
        "summary": ""
      },
      {
        "name": "getEntityWorldPosition",
        "kind": "re-export",
        "signature": "getEntityWorldPosition",
        "summary": ""
      },
      {
        "name": "getGhostPreviewInfo",
        "kind": "re-export",
        "signature": "getGhostPreviewInfo",
        "summary": ""
      },
      {
        "name": "getGhostWorldPosition",
        "kind": "re-export",
        "signature": "getGhostWorldPosition",
        "summary": ""
      },
      {
        "name": "getInputActionMap",
        "kind": "re-export",
        "signature": "getInputActionMap",
        "summary": ""
      },
      {
        "name": "getInputActions",
        "kind": "re-export",
        "signature": "getInputActions",
        "summary": ""
      },
      {
        "name": "getKeys",
        "kind": "re-export",
        "signature": "getKeys",
        "summary": ""
      },
      {
        "name": "getLastMousePosition",
        "kind": "re-export",
        "signature": "getLastMousePosition",
        "summary": ""
      },
      {
        "name": "getMovementAxes",
        "kind": "re-export",
        "signature": "getMovementAxes",
        "summary": ""
      },
      {
        "name": "getNeighborGridBuffers",
        "kind": "re-export",
        "signature": "getNeighborGridBuffers",
        "summary": ""
      },
      {
        "name": "getParticleLongRangeState",
        "kind": "re-export",
        "signature": "getParticleLongRangeState",
        "summary": ""
      },
      {
        "name": "getPickRayForCanvasFromScreen",
        "kind": "re-export",
        "signature": "getPickRayForCanvasFromScreen",
        "summary": ""
      },
      {
        "name": "getPickRayFromState",
        "kind": "re-export",
        "signature": "getPickRayFromState",
        "summary": ""
      },
      {
        "name": "getRegisteredSystems",
        "kind": "re-export",
        "signature": "getRegisteredSystems",
        "summary": ""
      },
      {
        "name": "getSpawnTypeColor",
        "kind": "re-export",
        "signature": "getSpawnTypeColor",
        "summary": ""
      },
      {
        "name": "getSpawnTypeMeshKey",
        "kind": "re-export",
        "signature": "getSpawnTypeMeshKey",
        "summary": ""
      },
      {
        "name": "getSpawnTypesByCategory",
        "kind": "re-export",
        "signature": "getSpawnTypesByCategory",
        "summary": ""
      },
      {
        "name": "getStandardCameraEyeBasis",
        "kind": "re-export",
        "signature": "getStandardCameraEyeBasis",
        "summary": ""
      },
      {
        "name": "getStates",
        "kind": "re-export",
        "signature": "getStates",
        "summary": ""
      },
      {
        "name": "getVertexBufferLayoutForMesh",
        "kind": "re-export",
        "signature": "getVertexBufferLayoutForMesh",
        "summary": ""
      },
      {
        "name": "grabControllerEntityReport",
        "kind": "re-export",
        "signature": "grabControllerEntityReport",
        "summary": ""
      },
      {
        "name": "grabControllerRayReport",
        "kind": "re-export",
        "signature": "grabControllerRayReport",
        "summary": ""
      },
      {
        "name": "grabControllerTimingReport",
        "kind": "re-export",
        "signature": "grabControllerTimingReport",
        "summary": ""
      },
      {
        "name": "initAudioEngine",
        "kind": "re-export",
        "signature": "initAudioEngine",
        "summary": ""
      },
      {
        "name": "initEcsWorld",
        "kind": "re-export",
        "signature": "initEcsWorld",
        "summary": ""
      },
      {
        "name": "initFluidSimWorldLazy",
        "kind": "re-export",
        "signature": "initFluidSimWorldLazy",
        "summary": ""
      },
      {
        "name": "initFmmBindGroups",
        "kind": "re-export",
        "signature": "initFmmBindGroups",
        "summary": ""
      },
      {
        "name": "initGpuState",
        "kind": "re-export",
        "signature": "initGpuState",
        "summary": ""
      },
      {
        "name": "initNBodyBindGroups",
        "kind": "re-export",
        "signature": "initNBodyBindGroups",
        "summary": ""
      },
      {
        "name": "initNeighborGridBindGroups",
        "kind": "re-export",
        "signature": "initNeighborGridBindGroups",
        "summary": ""
      },
      {
        "name": "initParticleMeshEwaldBindGroups",
        "kind": "re-export",
        "signature": "initParticleMeshEwaldBindGroups",
        "summary": ""
      },
      {
        "name": "initParticleSystem",
        "kind": "re-export",
        "signature": "initParticleSystem",
        "summary": ""
      },
      {
        "name": "initSimulationRendering",
        "kind": "re-export",
        "signature": "initSimulationRendering",
        "summary": ""
      },
      {
        "name": "initSlotTracking",
        "kind": "re-export",
        "signature": "initSlotTracking",
        "summary": ""
      },
      {
        "name": "initSmokeRenderer",
        "kind": "re-export",
        "signature": "initSmokeRenderer",
        "summary": ""
      },
      {
        "name": "initWebGpuCanvas",
        "kind": "re-export",
        "signature": "initWebGpuCanvas",
        "summary": ""
      },
      {
        "name": "injectFreezeSeeds",
        "kind": "re-export",
        "signature": "injectFreezeSeeds",
        "summary": ""
      },
      {
        "name": "injectHeatSeeds",
        "kind": "re-export",
        "signature": "injectHeatSeeds",
        "summary": ""
      },
      {
        "name": "injectMeltedFluid",
        "kind": "re-export",
        "signature": "injectMeltedFluid",
        "summary": ""
      },
      {
        "name": "inverseLerp",
        "kind": "re-export",
        "signature": "inverseLerp",
        "summary": ""
      },
      {
        "name": "isPhysXVehicleSupported",
        "kind": "re-export",
        "signature": "isPhysXVehicleSupported",
        "summary": ""
      },
      {
        "name": "isWebGpuSupported",
        "kind": "re-export",
        "signature": "isWebGpuSupported",
        "summary": ""
      },
      {
        "name": "lerp",
        "kind": "re-export",
        "signature": "lerp",
        "summary": ""
      },
      {
        "name": "listComponentDefinitions",
        "kind": "re-export",
        "signature": "listComponentDefinitions",
        "summary": ""
      },
      {
        "name": "loadSceneFromFile",
        "kind": "re-export",
        "signature": "loadSceneFromFile",
        "summary": ""
      },
      {
        "name": "loadSceneFromJson",
        "kind": "re-export",
        "signature": "loadSceneFromJson",
        "summary": ""
      },
      {
        "name": "mapTagsToOrigin",
        "kind": "re-export",
        "signature": "mapTagsToOrigin",
        "summary": ""
      },
      {
        "name": "mat4FromRotationTranslation",
        "kind": "re-export",
        "signature": "mat4FromRotationTranslation",
        "summary": ""
      },
      {
        "name": "mat4Identity",
        "kind": "re-export",
        "signature": "mat4Identity",
        "summary": ""
      },
      {
        "name": "mat4Inverse",
        "kind": "re-export",
        "signature": "mat4Inverse",
        "summary": ""
      },
      {
        "name": "mat4LookAt",
        "kind": "re-export",
        "signature": "mat4LookAt",
        "summary": ""
      },
      {
        "name": "mat4Multiply",
        "kind": "re-export",
        "signature": "mat4Multiply",
        "summary": ""
      },
      {
        "name": "mat4Orthographic",
        "kind": "re-export",
        "signature": "mat4Orthographic",
        "summary": ""
      },
      {
        "name": "mat4OrthographicWebGPU",
        "kind": "re-export",
        "signature": "mat4OrthographicWebGPU",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveDeg",
        "kind": "re-export",
        "signature": "mat4PerspectiveDeg",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveDegWebGPU",
        "kind": "re-export",
        "signature": "mat4PerspectiveDegWebGPU",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveRad",
        "kind": "re-export",
        "signature": "mat4PerspectiveRad",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveRadWebGPU",
        "kind": "re-export",
        "signature": "mat4PerspectiveRadWebGPU",
        "summary": ""
      },
      {
        "name": "mat4Scale",
        "kind": "re-export",
        "signature": "mat4Scale",
        "summary": ""
      },
      {
        "name": "mat4Translate",
        "kind": "re-export",
        "signature": "mat4Translate",
        "summary": ""
      },
      {
        "name": "mixElementPower",
        "kind": "re-export",
        "signature": "mixElementPower",
        "summary": ""
      },
      {
        "name": "network",
        "kind": "re-export",
        "signature": "network",
        "summary": ""
      },
      {
        "name": "node",
        "kind": "re-export",
        "signature": "node",
        "summary": ""
      },
      {
        "name": "normalizeElementPower",
        "kind": "re-export",
        "signature": "normalizeElementPower",
        "summary": ""
      },
      {
        "name": "normalizeFmmConfig",
        "kind": "re-export",
        "signature": "normalizeFmmConfig",
        "summary": ""
      },
      {
        "name": "normalizeParticleMeshConfig",
        "kind": "re-export",
        "signature": "normalizeParticleMeshConfig",
        "summary": ""
      },
      {
        "name": "packSandboxCell",
        "kind": "re-export",
        "signature": "packSandboxCell",
        "summary": ""
      },
      {
        "name": "packSandboxObject",
        "kind": "re-export",
        "signature": "packSandboxObject",
        "summary": ""
      },
      {
        "name": "parseSceneJson",
        "kind": "re-export",
        "signature": "parseSceneJson",
        "summary": ""
      },
      {
        "name": "particleAI",
        "kind": "re-export",
        "signature": "particleAI",
        "summary": ""
      },
      {
        "name": "particleAIUtility",
        "kind": "re-export",
        "signature": "particleAIUtility",
        "summary": ""
      },
      {
        "name": "particleAIVehicles",
        "kind": "re-export",
        "signature": "particleAIVehicles",
        "summary": ""
      },
      {
        "name": "particleAnatomy",
        "kind": "re-export",
        "signature": "particleAnatomy",
        "summary": ""
      },
      {
        "name": "particleAssets",
        "kind": "re-export",
        "signature": "particleAssets",
        "summary": ""
      },
      {
        "name": "particleMathGeometry",
        "kind": "re-export",
        "signature": "particleMathGeometry",
        "summary": ""
      },
      {
        "name": "particleMathRandom",
        "kind": "re-export",
        "signature": "particleMathRandom",
        "summary": ""
      },
      {
        "name": "particlePBD",
        "kind": "re-export",
        "signature": "particlePBD",
        "summary": ""
      },
      {
        "name": "particlePhysXPhysicsWorld",
        "kind": "re-export",
        "signature": "particlePhysXPhysicsWorld",
        "summary": ""
      },
      {
        "name": "particlePhysXVehicle",
        "kind": "re-export",
        "signature": "particlePhysXVehicle",
        "summary": ""
      },
      {
        "name": "particleRig",
        "kind": "re-export",
        "signature": "particleRig",
        "summary": ""
      },
      {
        "name": "particleState",
        "kind": "re-export",
        "signature": "particleState",
        "summary": ""
      },
      {
        "name": "particleStructural",
        "kind": "re-export",
        "signature": "particleStructural",
        "summary": ""
      },
      {
        "name": "particleSubstances",
        "kind": "re-export",
        "signature": "particleSubstances",
        "summary": ""
      },
      {
        "name": "particleSurfaces",
        "kind": "re-export",
        "signature": "particleSurfaces",
        "summary": ""
      },
      {
        "name": "particleVoxel",
        "kind": "re-export",
        "signature": "particleVoxel",
        "summary": ""
      },
      {
        "name": "phaseCoherence",
        "kind": "re-export",
        "signature": "phaseCoherence",
        "summary": ""
      },
      {
        "name": "pickEntityFromRay",
        "kind": "re-export",
        "signature": "pickEntityFromRay",
        "summary": ""
      },
      {
        "name": "pickRoomSurfaceFromRay",
        "kind": "re-export",
        "signature": "pickRoomSurfaceFromRay",
        "summary": ""
      },
      {
        "name": "pickingRayReport",
        "kind": "re-export",
        "signature": "pickingRayReport",
        "summary": ""
      },
      {
        "name": "playBuffer",
        "kind": "re-export",
        "signature": "playBuffer",
        "summary": ""
      },
      {
        "name": "playStandardGamepadHaptics",
        "kind": "re-export",
        "signature": "playStandardGamepadHaptics",
        "summary": ""
      },
      {
        "name": "pollInputGamepad",
        "kind": "re-export",
        "signature": "pollInputGamepad",
        "summary": ""
      },
      {
        "name": "projectImagePointToViewport",
        "kind": "re-export",
        "signature": "projectImagePointToViewport",
        "summary": ""
      },
      {
        "name": "prolateSplitFourierResponse",
        "kind": "re-export",
        "signature": "prolateSplitFourierResponse",
        "summary": ""
      },
      {
        "name": "quatConjugate",
        "kind": "re-export",
        "signature": "quatConjugate",
        "summary": ""
      },
      {
        "name": "quatDifference",
        "kind": "re-export",
        "signature": "quatDifference",
        "summary": ""
      },
      {
        "name": "quatFromAxisAngle",
        "kind": "re-export",
        "signature": "quatFromAxisAngle",
        "summary": ""
      },
      {
        "name": "quatFromEuler",
        "kind": "re-export",
        "signature": "quatFromEuler",
        "summary": ""
      },
      {
        "name": "quatIdentity",
        "kind": "re-export",
        "signature": "quatIdentity",
        "summary": ""
      },
      {
        "name": "quatInverse",
        "kind": "re-export",
        "signature": "quatInverse",
        "summary": ""
      },
      {
        "name": "quatLookAt",
        "kind": "re-export",
        "signature": "quatLookAt",
        "summary": ""
      },
      {
        "name": "quatMultiply",
        "kind": "re-export",
        "signature": "quatMultiply",
        "summary": ""
      },
      {
        "name": "quatNormalize",
        "kind": "re-export",
        "signature": "quatNormalize",
        "summary": ""
      },
      {
        "name": "quatRotateTowards",
        "kind": "re-export",
        "signature": "quatRotateTowards",
        "summary": ""
      },
      {
        "name": "quatRotateVec3",
        "kind": "re-export",
        "signature": "quatRotateVec3",
        "summary": ""
      },
      {
        "name": "quatSlerp",
        "kind": "re-export",
        "signature": "quatSlerp",
        "summary": ""
      },
      {
        "name": "rayPickerOptionsReport",
        "kind": "re-export",
        "signature": "rayPickerOptionsReport",
        "summary": ""
      },
      {
        "name": "rayTerminationWGSL",
        "kind": "re-export",
        "signature": "rayTerminationWGSL",
        "summary": ""
      },
      {
        "name": "readFmmDiagnostics",
        "kind": "re-export",
        "signature": "readFmmDiagnostics",
        "summary": ""
      },
      {
        "name": "readParticleMeshEwaldDiagnostics",
        "kind": "re-export",
        "signature": "readParticleMeshEwaldDiagnostics",
        "summary": ""
      },
      {
        "name": "rebindStandardInputAction",
        "kind": "re-export",
        "signature": "rebindStandardInputAction",
        "summary": ""
      },
      {
        "name": "rebuildSolidMask",
        "kind": "re-export",
        "signature": "rebuildSolidMask",
        "summary": ""
      },
      {
        "name": "registerAudioEvent",
        "kind": "re-export",
        "signature": "registerAudioEvent",
        "summary": ""
      },
      {
        "name": "registerFootstepEvents",
        "kind": "re-export",
        "signature": "registerFootstepEvents",
        "summary": ""
      },
      {
        "name": "registerSystem",
        "kind": "re-export",
        "signature": "registerSystem",
        "summary": ""
      },
      {
        "name": "releaseGrabbed",
        "kind": "re-export",
        "signature": "releaseGrabbed",
        "summary": ""
      },
      {
        "name": "remap",
        "kind": "re-export",
        "signature": "remap",
        "summary": ""
      },
      {
        "name": "removeCharacter",
        "kind": "re-export",
        "signature": "removeCharacter",
        "summary": ""
      },
      {
        "name": "removeEntityComponent",
        "kind": "re-export",
        "signature": "removeEntityComponent",
        "summary": ""
      },
      {
        "name": "removeEntityFromStorage",
        "kind": "re-export",
        "signature": "removeEntityFromStorage",
        "summary": ""
      },
      {
        "name": "renderEntities",
        "kind": "re-export",
        "signature": "renderEntities",
        "summary": ""
      },
      {
        "name": "renderFluidWater",
        "kind": "re-export",
        "signature": "renderFluidWater",
        "summary": ""
      },
      {
        "name": "renderLightCube",
        "kind": "re-export",
        "signature": "renderLightCube",
        "summary": ""
      },
      {
        "name": "renderParticleBillboards",
        "kind": "re-export",
        "signature": "renderParticleBillboards",
        "summary": ""
      },
      {
        "name": "renderRoom",
        "kind": "re-export",
        "signature": "renderRoom",
        "summary": ""
      },
      {
        "name": "renderSpellEffects",
        "kind": "re-export",
        "signature": "renderSpellEffects",
        "summary": ""
      },
      {
        "name": "renderVolumetricSmoke",
        "kind": "re-export",
        "signature": "renderVolumetricSmoke",
        "summary": ""
      },
      {
        "name": "resizeFluidWaterPass",
        "kind": "re-export",
        "signature": "resizeFluidWaterPass",
        "summary": ""
      },
      {
        "name": "resolveFootstepMaterial",
        "kind": "re-export",
        "signature": "resolveFootstepMaterial",
        "summary": ""
      },
      {
        "name": "resolvePickFovRadians",
        "kind": "re-export",
        "signature": "resolvePickFovRadians",
        "summary": ""
      },
      {
        "name": "resolveSpawnAppearance",
        "kind": "re-export",
        "signature": "resolveSpawnAppearance",
        "summary": ""
      },
      {
        "name": "resonanceWeight",
        "kind": "re-export",
        "signature": "resonanceWeight",
        "summary": ""
      },
      {
        "name": "restirGuidePolicyWGSL",
        "kind": "re-export",
        "signature": "restirGuidePolicyWGSL",
        "summary": ""
      },
      {
        "name": "resumeAudioEngine",
        "kind": "re-export",
        "signature": "resumeAudioEngine",
        "summary": ""
      },
      {
        "name": "roomPickingOptionsReport",
        "kind": "re-export",
        "signature": "roomPickingOptionsReport",
        "summary": ""
      },
      {
        "name": "rootAlgebraBasisName",
        "kind": "re-export",
        "signature": "rootAlgebraBasisName",
        "summary": ""
      },
      {
        "name": "rootAlgebraCompileExecutionPlan",
        "kind": "re-export",
        "signature": "rootAlgebraCompileExecutionPlan",
        "summary": ""
      },
      {
        "name": "rootAlgebraDimension",
        "kind": "re-export",
        "signature": "rootAlgebraDimension",
        "summary": ""
      },
      {
        "name": "rootAlgebraEncodedMultiply",
        "kind": "re-export",
        "signature": "rootAlgebraEncodedMultiply",
        "summary": ""
      },
      {
        "name": "rootAlgebraEncodedTrace",
        "kind": "re-export",
        "signature": "rootAlgebraEncodedTrace",
        "summary": ""
      },
      {
        "name": "rootAlgebraEvaluateExecutionPlan",
        "kind": "re-export",
        "signature": "rootAlgebraEvaluateExecutionPlan",
        "summary": ""
      },
      {
        "name": "rootAlgebraExecutionPlanWGSL",
        "kind": "re-export",
        "signature": "rootAlgebraExecutionPlanWGSL",
        "summary": ""
      },
      {
        "name": "rootAlgebraFindSimpleZeroDivisors",
        "kind": "re-export",
        "signature": "rootAlgebraFindSimpleZeroDivisors",
        "summary": ""
      },
      {
        "name": "rootAlgebraFormatElement",
        "kind": "re-export",
        "signature": "rootAlgebraFormatElement",
        "summary": ""
      },
      {
        "name": "rootAlgebraGenerateTable",
        "kind": "re-export",
        "signature": "rootAlgebraGenerateTable",
        "summary": ""
      },
      {
        "name": "rootAlgebraGeneratorName",
        "kind": "re-export",
        "signature": "rootAlgebraGeneratorName",
        "summary": ""
      },
      {
        "name": "rootAlgebraMask",
        "kind": "re-export",
        "signature": "rootAlgebraMask",
        "summary": ""
      },
      {
        "name": "rootAlgebraMultiply",
        "kind": "re-export",
        "signature": "rootAlgebraMultiply",
        "summary": ""
      },
      {
        "name": "rootAlgebraPropertyReport",
        "kind": "re-export",
        "signature": "rootAlgebraPropertyReport",
        "summary": ""
      },
      {
        "name": "rootAlgebraReverseMaskBits",
        "kind": "re-export",
        "signature": "rootAlgebraReverseMaskBits",
        "summary": ""
      },
      {
        "name": "rootAlgebraSearchEncodedMultipliers",
        "kind": "re-export",
        "signature": "rootAlgebraSearchEncodedMultipliers",
        "summary": ""
      },
      {
        "name": "rootAlgebraSquare",
        "kind": "re-export",
        "signature": "rootAlgebraSquare",
        "summary": ""
      },
      {
        "name": "rootAlgebraTraceMultiply",
        "kind": "re-export",
        "signature": "rootAlgebraTraceMultiply",
        "summary": ""
      },
      {
        "name": "rootAlgebraValidate",
        "kind": "re-export",
        "signature": "rootAlgebraValidate",
        "summary": ""
      },
      {
        "name": "runApp",
        "kind": "re-export",
        "signature": "runApp",
        "summary": ""
      },
      {
        "name": "sampleAmplitudeModulated",
        "kind": "re-export",
        "signature": "sampleAmplitudeModulated",
        "summary": ""
      },
      {
        "name": "sampleOscillator",
        "kind": "re-export",
        "signature": "sampleOscillator",
        "summary": ""
      },
      {
        "name": "samplePhaseModulated",
        "kind": "re-export",
        "signature": "samplePhaseModulated",
        "summary": ""
      },
      {
        "name": "sampleRingModulated",
        "kind": "re-export",
        "signature": "sampleRingModulated",
        "summary": ""
      },
      {
        "name": "sampleWave",
        "kind": "re-export",
        "signature": "sampleWave",
        "summary": ""
      },
      {
        "name": "sandboxBucketToTemperature",
        "kind": "re-export",
        "signature": "sandboxBucketToTemperature",
        "summary": ""
      },
      {
        "name": "sandboxSpeciesIdForSubstance",
        "kind": "re-export",
        "signature": "sandboxSpeciesIdForSubstance",
        "summary": ""
      },
      {
        "name": "saturate",
        "kind": "re-export",
        "signature": "saturate",
        "summary": ""
      },
      {
        "name": "screenCameraBasisReport",
        "kind": "re-export",
        "signature": "screenCameraBasisReport",
        "summary": ""
      },
      {
        "name": "screenCameraStateReport",
        "kind": "re-export",
        "signature": "screenCameraStateReport",
        "summary": ""
      },
      {
        "name": "screenPickInputReport",
        "kind": "re-export",
        "signature": "screenPickInputReport",
        "summary": ""
      },
      {
        "name": "serializeBVHForGPU",
        "kind": "re-export",
        "signature": "serializeBVHForGPU",
        "summary": ""
      },
      {
        "name": "serializeScene",
        "kind": "re-export",
        "signature": "serializeScene",
        "summary": ""
      },
      {
        "name": "setActiveGhostBasePosition",
        "kind": "re-export",
        "signature": "setActiveGhostBasePosition",
        "summary": ""
      },
      {
        "name": "setActiveGhostInSelection",
        "kind": "re-export",
        "signature": "setActiveGhostInSelection",
        "summary": ""
      },
      {
        "name": "setActiveGhostOffset",
        "kind": "re-export",
        "signature": "setActiveGhostOffset",
        "summary": ""
      },
      {
        "name": "setBusVolumeByName",
        "kind": "re-export",
        "signature": "setBusVolumeByName",
        "summary": ""
      },
      {
        "name": "setEntityComponent",
        "kind": "re-export",
        "signature": "setEntityComponent",
        "summary": ""
      },
      {
        "name": "setMPMWorldBounds",
        "kind": "re-export",
        "signature": "setMPMWorldBounds",
        "summary": ""
      },
      {
        "name": "setMasterVolume",
        "kind": "re-export",
        "signature": "setMasterVolume",
        "summary": ""
      },
      {
        "name": "setNode",
        "kind": "re-export",
        "signature": "setNode",
        "summary": ""
      },
      {
        "name": "setParticleBillboardParams",
        "kind": "re-export",
        "signature": "setParticleBillboardParams",
        "summary": ""
      },
      {
        "name": "setSystemEnabled",
        "kind": "re-export",
        "signature": "setSystemEnabled",
        "summary": ""
      },
      {
        "name": "setSystemGroupEnabled",
        "kind": "re-export",
        "signature": "setSystemGroupEnabled",
        "summary": ""
      },
      {
        "name": "smoothstep",
        "kind": "re-export",
        "signature": "smoothstep",
        "summary": ""
      },
      {
        "name": "spawnEntity",
        "kind": "re-export",
        "signature": "spawnEntity",
        "summary": ""
      },
      {
        "name": "spawnParticleEmitter",
        "kind": "re-export",
        "signature": "spawnParticleEmitter",
        "summary": ""
      },
      {
        "name": "spawnPhysicsObjectAtPosition",
        "kind": "re-export",
        "signature": "spawnPhysicsObjectAtPosition",
        "summary": ""
      },
      {
        "name": "spellConfigToInstance",
        "kind": "re-export",
        "signature": "spellConfigToInstance",
        "summary": ""
      },
      {
        "name": "spellElementToEffectType",
        "kind": "re-export",
        "signature": "spellElementToEffectType",
        "summary": ""
      },
      {
        "name": "splatFluidSources",
        "kind": "re-export",
        "signature": "splatFluidSources",
        "summary": ""
      },
      {
        "name": "splatParticleDensity",
        "kind": "re-export",
        "signature": "splatParticleDensity",
        "summary": ""
      },
      {
        "name": "standardCameraBoomReport",
        "kind": "re-export",
        "signature": "standardCameraBoomReport",
        "summary": ""
      },
      {
        "name": "standardCameraBoundsFocusReport",
        "kind": "re-export",
        "signature": "standardCameraBoundsFocusReport",
        "summary": ""
      },
      {
        "name": "standardCameraBoundsReport",
        "kind": "re-export",
        "signature": "standardCameraBoundsReport",
        "summary": ""
      },
      {
        "name": "standardCameraFocusReport",
        "kind": "re-export",
        "signature": "standardCameraFocusReport",
        "summary": ""
      },
      {
        "name": "standardCameraFocusTransitionReport",
        "kind": "re-export",
        "signature": "standardCameraFocusTransitionReport",
        "summary": ""
      },
      {
        "name": "standardCameraKeysReport",
        "kind": "re-export",
        "signature": "standardCameraKeysReport",
        "summary": ""
      },
      {
        "name": "standardCameraMovementIntentReport",
        "kind": "re-export",
        "signature": "standardCameraMovementIntentReport",
        "summary": ""
      },
      {
        "name": "standardCameraMovementResponseReport",
        "kind": "re-export",
        "signature": "standardCameraMovementResponseReport",
        "summary": ""
      },
      {
        "name": "standardCameraOptionsReport",
        "kind": "re-export",
        "signature": "standardCameraOptionsReport",
        "summary": ""
      },
      {
        "name": "standardCameraSphereFitReport",
        "kind": "re-export",
        "signature": "standardCameraSphereFitReport",
        "summary": ""
      },
      {
        "name": "standardCameraStateReport",
        "kind": "re-export",
        "signature": "standardCameraStateReport",
        "summary": ""
      },
      {
        "name": "standardCameraUpdateReport",
        "kind": "re-export",
        "signature": "standardCameraUpdateReport",
        "summary": ""
      },
      {
        "name": "standardCameraZoomReport",
        "kind": "re-export",
        "signature": "standardCameraZoomReport",
        "summary": ""
      },
      {
        "name": "standardGamepadButtonReport",
        "kind": "re-export",
        "signature": "standardGamepadButtonReport",
        "summary": ""
      },
      {
        "name": "standardGamepadHapticEffectReport",
        "kind": "re-export",
        "signature": "standardGamepadHapticEffectReport",
        "summary": ""
      },
      {
        "name": "standardGamepadInputReport",
        "kind": "re-export",
        "signature": "standardGamepadInputReport",
        "summary": ""
      },
      {
        "name": "standardGamepadMovementReport",
        "kind": "re-export",
        "signature": "standardGamepadMovementReport",
        "summary": ""
      },
      {
        "name": "standardInputActionMapReport",
        "kind": "re-export",
        "signature": "standardInputActionMapReport",
        "summary": ""
      },
      {
        "name": "standardInputActionStateReport",
        "kind": "re-export",
        "signature": "standardInputActionStateReport",
        "summary": ""
      },
      {
        "name": "standardInputWheelZoomReport",
        "kind": "re-export",
        "signature": "standardInputWheelZoomReport",
        "summary": ""
      },
      {
        "name": "startGrabCandidate",
        "kind": "re-export",
        "signature": "startGrabCandidate",
        "summary": ""
      },
      {
        "name": "startImageHeatHaze",
        "kind": "re-export",
        "signature": "startImageHeatHaze",
        "summary": ""
      },
      {
        "name": "startUnderwaterSiltField",
        "kind": "re-export",
        "signature": "startUnderwaterSiltField",
        "summary": ""
      },
      {
        "name": "stateFirstModeLabel",
        "kind": "re-export",
        "signature": "stateFirstModeLabel",
        "summary": ""
      },
      {
        "name": "stepAllSimulations",
        "kind": "re-export",
        "signature": "stepAllSimulations",
        "summary": ""
      },
      {
        "name": "stepCamera",
        "kind": "re-export",
        "signature": "stepCamera",
        "summary": ""
      },
      {
        "name": "stepCoupledOscillators",
        "kind": "re-export",
        "signature": "stepCoupledOscillators",
        "summary": ""
      },
      {
        "name": "stepCrystallization",
        "kind": "re-export",
        "signature": "stepCrystallization",
        "summary": ""
      },
      {
        "name": "stepEmitters",
        "kind": "re-export",
        "signature": "stepEmitters",
        "summary": ""
      },
      {
        "name": "stepFluid",
        "kind": "re-export",
        "signature": "stepFluid",
        "summary": ""
      },
      {
        "name": "stepFluidSimWorld",
        "kind": "re-export",
        "signature": "stepFluidSimWorld",
        "summary": ""
      },
      {
        "name": "stepMPMWorld",
        "kind": "re-export",
        "signature": "stepMPMWorld",
        "summary": ""
      },
      {
        "name": "stepParticleSimWorld",
        "kind": "re-export",
        "signature": "stepParticleSimWorld",
        "summary": ""
      },
      {
        "name": "stepParticles",
        "kind": "re-export",
        "signature": "stepParticles",
        "summary": ""
      },
      {
        "name": "stepWorld",
        "kind": "re-export",
        "signature": "stepWorld",
        "summary": ""
      },
      {
        "name": "stepWorldFrame",
        "kind": "re-export",
        "signature": "stepWorldFrame",
        "summary": ""
      },
      {
        "name": "stopAllSources",
        "kind": "re-export",
        "signature": "stopAllSources",
        "summary": ""
      },
      {
        "name": "stopSource",
        "kind": "re-export",
        "signature": "stopSource",
        "summary": ""
      },
      {
        "name": "switchCameraMode",
        "kind": "re-export",
        "signature": "switchCameraMode",
        "summary": ""
      },
      {
        "name": "syncCameraToEcs",
        "kind": "re-export",
        "signature": "syncCameraToEcs",
        "summary": ""
      },
      {
        "name": "temperatureToSandboxBucket",
        "kind": "re-export",
        "signature": "temperatureToSandboxBucket",
        "summary": ""
      },
      {
        "name": "textNode",
        "kind": "re-export",
        "signature": "textNode",
        "summary": ""
      },
      {
        "name": "tickAudioEngine",
        "kind": "re-export",
        "signature": "tickAudioEngine",
        "summary": ""
      },
      {
        "name": "tickCharacterAudio",
        "kind": "re-export",
        "signature": "tickCharacterAudio",
        "summary": ""
      },
      {
        "name": "triggerAudioEvent",
        "kind": "re-export",
        "signature": "triggerAudioEvent",
        "summary": ""
      },
      {
        "name": "unpackSandboxCell",
        "kind": "re-export",
        "signature": "unpackSandboxCell",
        "summary": ""
      },
      {
        "name": "unpackSandboxObject",
        "kind": "re-export",
        "signature": "unpackSandboxObject",
        "summary": ""
      },
      {
        "name": "unregisterAudioEvent",
        "kind": "re-export",
        "signature": "unregisterAudioEvent",
        "summary": ""
      },
      {
        "name": "unregisterFootstepEvents",
        "kind": "re-export",
        "signature": "unregisterFootstepEvents",
        "summary": ""
      },
      {
        "name": "unregisterSystem",
        "kind": "re-export",
        "signature": "unregisterSystem",
        "summary": ""
      },
      {
        "name": "updateAttachedParticlesIntoParticlesState",
        "kind": "re-export",
        "signature": "updateAttachedParticlesIntoParticlesState",
        "summary": ""
      },
      {
        "name": "updateAttachedParticlesIntoWorld",
        "kind": "re-export",
        "signature": "updateAttachedParticlesIntoWorld",
        "summary": ""
      },
      {
        "name": "updateAudioListener",
        "kind": "re-export",
        "signature": "updateAudioListener",
        "summary": ""
      },
      {
        "name": "updateBuffer",
        "kind": "re-export",
        "signature": "updateBuffer",
        "summary": ""
      },
      {
        "name": "updateCameraFull",
        "kind": "re-export",
        "signature": "updateCameraFull",
        "summary": ""
      },
      {
        "name": "updateGrabbedEntity",
        "kind": "re-export",
        "signature": "updateGrabbedEntity",
        "summary": ""
      },
      {
        "name": "updateParticleCounts",
        "kind": "re-export",
        "signature": "updateParticleCounts",
        "summary": ""
      },
      {
        "name": "updateStandardCamera",
        "kind": "re-export",
        "signature": "updateStandardCamera",
        "summary": ""
      },
      {
        "name": "updateStandardLights",
        "kind": "re-export",
        "signature": "updateStandardLights",
        "summary": ""
      },
      {
        "name": "updateStandardUniforms",
        "kind": "re-export",
        "signature": "updateStandardUniforms",
        "summary": ""
      },
      {
        "name": "updateVoxelWorldFrameUniforms",
        "kind": "re-export",
        "signature": "updateVoxelWorldFrameUniforms",
        "summary": ""
      },
      {
        "name": "updateWorldFluidDomainParams",
        "kind": "re-export",
        "signature": "updateWorldFluidDomainParams",
        "summary": ""
      },
      {
        "name": "validateComponentSchema",
        "kind": "re-export",
        "signature": "validateComponentSchema",
        "summary": ""
      },
      {
        "name": "validateSandboxMaterialCatalog",
        "kind": "re-export",
        "signature": "validateSandboxMaterialCatalog",
        "summary": ""
      },
      {
        "name": "vec2",
        "kind": "re-export",
        "signature": "vec2",
        "summary": ""
      },
      {
        "name": "vec2Add",
        "kind": "re-export",
        "signature": "vec2Add",
        "summary": ""
      },
      {
        "name": "vec2Clone",
        "kind": "re-export",
        "signature": "vec2Clone",
        "summary": ""
      },
      {
        "name": "vec2Distance",
        "kind": "re-export",
        "signature": "vec2Distance",
        "summary": ""
      },
      {
        "name": "vec2Dot",
        "kind": "re-export",
        "signature": "vec2Dot",
        "summary": ""
      },
      {
        "name": "vec2Length",
        "kind": "re-export",
        "signature": "vec2Length",
        "summary": ""
      },
      {
        "name": "vec2Lerp",
        "kind": "re-export",
        "signature": "vec2Lerp",
        "summary": ""
      },
      {
        "name": "vec2Normalize",
        "kind": "re-export",
        "signature": "vec2Normalize",
        "summary": ""
      },
      {
        "name": "vec2Scale",
        "kind": "re-export",
        "signature": "vec2Scale",
        "summary": ""
      },
      {
        "name": "vec2Sub",
        "kind": "re-export",
        "signature": "vec2Sub",
        "summary": ""
      },
      {
        "name": "vec3",
        "kind": "re-export",
        "signature": "vec3",
        "summary": ""
      },
      {
        "name": "vec3Add",
        "kind": "re-export",
        "signature": "vec3Add",
        "summary": ""
      },
      {
        "name": "vec3Bounce",
        "kind": "re-export",
        "signature": "vec3Bounce",
        "summary": ""
      },
      {
        "name": "vec3Clone",
        "kind": "re-export",
        "signature": "vec3Clone",
        "summary": ""
      },
      {
        "name": "vec3Cross",
        "kind": "re-export",
        "signature": "vec3Cross",
        "summary": ""
      },
      {
        "name": "vec3DirectionTo",
        "kind": "re-export",
        "signature": "vec3DirectionTo",
        "summary": ""
      },
      {
        "name": "vec3Distance",
        "kind": "re-export",
        "signature": "vec3Distance",
        "summary": ""
      },
      {
        "name": "vec3DistanceSq",
        "kind": "re-export",
        "signature": "vec3DistanceSq",
        "summary": ""
      },
      {
        "name": "vec3Dot",
        "kind": "re-export",
        "signature": "vec3Dot",
        "summary": ""
      },
      {
        "name": "vec3FaceForward",
        "kind": "re-export",
        "signature": "vec3FaceForward",
        "summary": ""
      },
      {
        "name": "vec3Forward",
        "kind": "re-export",
        "signature": "vec3Forward",
        "summary": ""
      },
      {
        "name": "vec3Length",
        "kind": "re-export",
        "signature": "vec3Length",
        "summary": ""
      },
      {
        "name": "vec3LengthSq",
        "kind": "re-export",
        "signature": "vec3LengthSq",
        "summary": ""
      },
      {
        "name": "vec3Lerp",
        "kind": "re-export",
        "signature": "vec3Lerp",
        "summary": ""
      },
      {
        "name": "vec3Midpoint",
        "kind": "re-export",
        "signature": "vec3Midpoint",
        "summary": ""
      },
      {
        "name": "vec3Mul",
        "kind": "re-export",
        "signature": "vec3Mul",
        "summary": ""
      },
      {
        "name": "vec3Negate",
        "kind": "re-export",
        "signature": "vec3Negate",
        "summary": ""
      },
      {
        "name": "vec3Normalize",
        "kind": "re-export",
        "signature": "vec3Normalize",
        "summary": ""
      },
      {
        "name": "vec3OctDecode",
        "kind": "re-export",
        "signature": "vec3OctDecode",
        "summary": ""
      },
      {
        "name": "vec3OctEncode",
        "kind": "re-export",
        "signature": "vec3OctEncode",
        "summary": ""
      },
      {
        "name": "vec3One",
        "kind": "re-export",
        "signature": "vec3One",
        "summary": ""
      },
      {
        "name": "vec3Project",
        "kind": "re-export",
        "signature": "vec3Project",
        "summary": ""
      },
      {
        "name": "vec3Reflect",
        "kind": "re-export",
        "signature": "vec3Reflect",
        "summary": ""
      },
      {
        "name": "vec3Refract",
        "kind": "re-export",
        "signature": "vec3Refract",
        "summary": ""
      },
      {
        "name": "vec3Right",
        "kind": "re-export",
        "signature": "vec3Right",
        "summary": ""
      },
      {
        "name": "vec3RotateTowards",
        "kind": "re-export",
        "signature": "vec3RotateTowards",
        "summary": ""
      },
      {
        "name": "vec3Saturate",
        "kind": "re-export",
        "signature": "vec3Saturate",
        "summary": ""
      },
      {
        "name": "vec3Scale",
        "kind": "re-export",
        "signature": "vec3Scale",
        "summary": ""
      },
      {
        "name": "vec3SmoothDamp",
        "kind": "re-export",
        "signature": "vec3SmoothDamp",
        "summary": ""
      },
      {
        "name": "vec3Sub",
        "kind": "re-export",
        "signature": "vec3Sub",
        "summary": ""
      },
      {
        "name": "vec3Up",
        "kind": "re-export",
        "signature": "vec3Up",
        "summary": ""
      },
      {
        "name": "vec3Zero",
        "kind": "re-export",
        "signature": "vec3Zero",
        "summary": ""
      },
      {
        "name": "voxel",
        "kind": "re-export",
        "signature": "voxel",
        "summary": ""
      },
      {
        "name": "waitForCanvasReady",
        "kind": "re-export",
        "signature": "waitForCanvasReady",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "EngineEditorBootstrap",
    "path": "engine/reference/EngineEditorBootstrap.md",
    "source": "engine/EngineEditorBootstrap.js",
    "import": "/engine/EngineEditorBootstrap.js",
    "sourceHash": "a8fe16ba18fadfc618d35d10f0047efe5c658b3ba1cef5823a387fdc2da65443",
    "summary": "EngineEditorBootstrap.js - Combined Engine + Editor entry point Use this as the entry point when you want the FULL library bundled: - All engine modules (math, ECS, rendering, simulation, audio, tools) - All editor modules (viewport, physics sim, particles, collab, UI) Usage: python bundle_engine.py --entry engine/EngineEditorBootstrap.js --eager The bundled runtime exposes everything on window.PE / window.ParticleEngine: PE.vec3(), PE.createWorld(), PE.EditorApp, etc.",
    "exports": [
      {
        "name": "initializePlauna",
        "kind": "function",
        "signature": "async initializePlauna(options = {})",
        "summary": ""
      },
      {
        "name": "Editor",
        "kind": "constant",
        "signature": "Editor",
        "summary": ""
      },
      {
        "name": "EditorApp",
        "kind": "re-export",
        "signature": "EditorApp",
        "summary": ""
      },
      {
        "name": "Engine",
        "kind": "re-export",
        "signature": "Engine",
        "summary": ""
      },
      {
        "name": "ProjectManager",
        "kind": "re-export",
        "signature": "ProjectManager",
        "summary": ""
      },
      {
        "name": "createPlaunaApp",
        "kind": "re-export",
        "signature": "createPlaunaApp",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "EngineImports",
    "path": "engine/reference/EngineImports.md",
    "source": "engine/EngineImports.js",
    "import": "/engine/EngineImports.js",
    "sourceHash": "11e1315d0714124ddeae94e60169e42c525a1fd50fc47c1e822e5b5819dc7ffb",
    "summary": "Global barrel for engine modules, grouped by domain. This is intended for games/tests/tools that want a single import and then access Math/Gpu/Ecs/Render/Tools/etc as namespaces.",
    "exports": [
      {
        "name": "Aim",
        "kind": "re-export",
        "signature": "Aim",
        "summary": ""
      },
      {
        "name": "Animation",
        "kind": "re-export",
        "signature": "Animation",
        "summary": ""
      },
      {
        "name": "Camera",
        "kind": "re-export",
        "signature": "Camera",
        "summary": ""
      },
      {
        "name": "CameraTools",
        "kind": "re-export",
        "signature": "CameraTools",
        "summary": ""
      },
      {
        "name": "Collider",
        "kind": "re-export",
        "signature": "Collider",
        "summary": ""
      },
      {
        "name": "Config",
        "kind": "re-export",
        "signature": "Config",
        "summary": ""
      },
      {
        "name": "CoreSave",
        "kind": "re-export",
        "signature": "CoreSave",
        "summary": ""
      },
      {
        "name": "CoreSchema",
        "kind": "re-export",
        "signature": "CoreSchema",
        "summary": ""
      },
      {
        "name": "GameplayAI",
        "kind": "re-export",
        "signature": "GameplayAI",
        "summary": ""
      },
      {
        "name": "GameplayEvents",
        "kind": "re-export",
        "signature": "GameplayEvents",
        "summary": ""
      },
      {
        "name": "GameplayInventory",
        "kind": "re-export",
        "signature": "GameplayInventory",
        "summary": ""
      },
      {
        "name": "GameplayItems",
        "kind": "re-export",
        "signature": "GameplayItems",
        "summary": ""
      },
      {
        "name": "GameplayPerception",
        "kind": "re-export",
        "signature": "GameplayPerception",
        "summary": ""
      },
      {
        "name": "GameplayProgression",
        "kind": "re-export",
        "signature": "GameplayProgression",
        "summary": ""
      },
      {
        "name": "GameplayRules",
        "kind": "re-export",
        "signature": "GameplayRules",
        "summary": ""
      },
      {
        "name": "GameplaySimulation",
        "kind": "re-export",
        "signature": "GameplaySimulation",
        "summary": ""
      },
      {
        "name": "GameplaySocial",
        "kind": "re-export",
        "signature": "GameplaySocial",
        "summary": ""
      },
      {
        "name": "GameplaySociety",
        "kind": "re-export",
        "signature": "GameplaySociety",
        "summary": ""
      },
      {
        "name": "Geometry",
        "kind": "re-export",
        "signature": "Geometry",
        "summary": ""
      },
      {
        "name": "Ghost",
        "kind": "re-export",
        "signature": "Ghost",
        "summary": ""
      },
      {
        "name": "Gpu",
        "kind": "re-export",
        "signature": "Gpu",
        "summary": ""
      },
      {
        "name": "GpuDevice",
        "kind": "re-export",
        "signature": "GpuDevice",
        "summary": ""
      },
      {
        "name": "Grab",
        "kind": "re-export",
        "signature": "Grab",
        "summary": ""
      },
      {
        "name": "Inspector",
        "kind": "re-export",
        "signature": "Inspector",
        "summary": ""
      },
      {
        "name": "Light",
        "kind": "re-export",
        "signature": "Light",
        "summary": ""
      },
      {
        "name": "Math",
        "kind": "re-export",
        "signature": "Math",
        "summary": ""
      },
      {
        "name": "Mesh",
        "kind": "re-export",
        "signature": "Mesh",
        "summary": ""
      },
      {
        "name": "Narrative",
        "kind": "re-export",
        "signature": "Narrative",
        "summary": ""
      },
      {
        "name": "NetReplicated",
        "kind": "re-export",
        "signature": "NetReplicated",
        "summary": ""
      },
      {
        "name": "Network",
        "kind": "re-export",
        "signature": "Network",
        "summary": ""
      },
      {
        "name": "ParticleBillboards",
        "kind": "re-export",
        "signature": "ParticleBillboards",
        "summary": ""
      },
      {
        "name": "ParticleEmitter",
        "kind": "re-export",
        "signature": "ParticleEmitter",
        "summary": ""
      },
      {
        "name": "ParticleQuality",
        "kind": "re-export",
        "signature": "ParticleQuality",
        "summary": ""
      },
      {
        "name": "PhysicsBody",
        "kind": "re-export",
        "signature": "PhysicsBody",
        "summary": ""
      },
      {
        "name": "PhysicsScenes",
        "kind": "re-export",
        "signature": "PhysicsScenes",
        "summary": ""
      },
      {
        "name": "Picking",
        "kind": "re-export",
        "signature": "Picking",
        "summary": ""
      },
      {
        "name": "Platform",
        "kind": "re-export",
        "signature": "Platform",
        "summary": ""
      },
      {
        "name": "ReplicationProfiles",
        "kind": "re-export",
        "signature": "ReplicationProfiles",
        "summary": ""
      },
      {
        "name": "Rig",
        "kind": "re-export",
        "signature": "Rig",
        "summary": ""
      },
      {
        "name": "ScreenRayCaster",
        "kind": "re-export",
        "signature": "ScreenRayCaster",
        "summary": ""
      },
      {
        "name": "Shaders",
        "kind": "re-export",
        "signature": "Shaders",
        "summary": ""
      },
      {
        "name": "SmokeVolumes",
        "kind": "re-export",
        "signature": "SmokeVolumes",
        "summary": ""
      },
      {
        "name": "Spawn",
        "kind": "re-export",
        "signature": "Spawn",
        "summary": ""
      },
      {
        "name": "SpectralRender",
        "kind": "re-export",
        "signature": "SpectralRender",
        "summary": ""
      },
      {
        "name": "StandardEntityRenderResources",
        "kind": "re-export",
        "signature": "StandardEntityRenderResources",
        "summary": ""
      },
      {
        "name": "StandardRoom",
        "kind": "re-export",
        "signature": "StandardRoom",
        "summary": ""
      },
      {
        "name": "StandardUniforms",
        "kind": "re-export",
        "signature": "StandardUniforms",
        "summary": ""
      },
      {
        "name": "Storage",
        "kind": "re-export",
        "signature": "Storage",
        "summary": ""
      },
      {
        "name": "Transform",
        "kind": "re-export",
        "signature": "Transform",
        "summary": ""
      },
      {
        "name": "VoxelWorld",
        "kind": "re-export",
        "signature": "VoxelWorld",
        "summary": ""
      },
      {
        "name": "World",
        "kind": "re-export",
        "signature": "World",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "MathImports",
    "path": "engine/reference/MathImports.md",
    "source": "engine/MathImports.js",
    "import": "/engine/MathImports.js",
    "sourceHash": "751a3e0d53604a3c63c6793aab8f1b79580e202a43a82ed29b09bcabfd30eb6d",
    "summary": "MathImports: convenience barrel for engine math utilities. Provides both a grouped Math namespace and flat re-exports for common ops.",
    "exports": [
      {
        "name": "Math",
        "kind": "constant",
        "signature": "Math",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "RenderImports",
    "path": "engine/reference/RenderImports.md",
    "source": "engine/RenderImports.js",
    "import": "/engine/RenderImports.js",
    "sourceHash": "0ca25a938e4c7e6bdf092ed2af5977ee930ea805a80bcb5b1052885148588b9e",
    "summary": "",
    "exports": [
      {
        "name": "RenderMesh",
        "kind": "constant",
        "signature": "RenderMesh",
        "summary": ""
      },
      {
        "name": "RenderGeometry",
        "kind": "constant",
        "signature": "RenderGeometry",
        "summary": ""
      },
      {
        "name": "RenderShaders",
        "kind": "constant",
        "signature": "RenderShaders",
        "summary": ""
      },
      {
        "name": "RenderRoom",
        "kind": "constant",
        "signature": "RenderRoom",
        "summary": ""
      },
      {
        "name": "RenderVoxelWorld",
        "kind": "constant",
        "signature": "RenderVoxelWorld",
        "summary": ""
      },
      {
        "name": "RenderUniforms",
        "kind": "constant",
        "signature": "RenderUniforms",
        "summary": ""
      },
      {
        "name": "RenderEntityResources",
        "kind": "constant",
        "signature": "RenderEntityResources",
        "summary": ""
      },
      {
        "name": "RenderSpectral",
        "kind": "constant",
        "signature": "RenderSpectral",
        "summary": ""
      },
      {
        "name": "createUnitCubeMesh",
        "kind": "constant",
        "signature": "createUnitCubeMesh",
        "summary": ""
      },
      {
        "name": "getVertexBufferLayoutForMesh",
        "kind": "constant",
        "signature": "getVertexBufferLayoutForMesh",
        "summary": ""
      },
      {
        "name": "createEngineMesh",
        "kind": "constant",
        "signature": "createEngineMesh",
        "summary": ""
      },
      {
        "name": "createSkyboxGeometry",
        "kind": "constant",
        "signature": "createSkyboxGeometry",
        "summary": ""
      },
      {
        "name": "createCubeGeometry",
        "kind": "constant",
        "signature": "createCubeGeometry",
        "summary": ""
      },
      {
        "name": "createGroundGeometry",
        "kind": "constant",
        "signature": "createGroundGeometry",
        "summary": ""
      },
      {
        "name": "createPlaneGeometry",
        "kind": "constant",
        "signature": "createPlaneGeometry",
        "summary": ""
      },
      {
        "name": "createSphereGeometry",
        "kind": "constant",
        "signature": "createSphereGeometry",
        "summary": ""
      },
      {
        "name": "createCylinderGeometry",
        "kind": "constant",
        "signature": "createCylinderGeometry",
        "summary": ""
      },
      {
        "name": "createShaderLoader",
        "kind": "constant",
        "signature": "createShaderLoader",
        "summary": ""
      },
      {
        "name": "createStandardRoomRenderer",
        "kind": "constant",
        "signature": "createStandardRoomRenderer",
        "summary": ""
      },
      {
        "name": "createVoxelWorldRenderer",
        "kind": "constant",
        "signature": "createVoxelWorldRenderer",
        "summary": ""
      },
      {
        "name": "updateVoxelWorldFrameUniforms",
        "kind": "constant",
        "signature": "updateVoxelWorldFrameUniforms",
        "summary": ""
      },
      {
        "name": "updateStandardLights",
        "kind": "constant",
        "signature": "updateStandardLights",
        "summary": ""
      },
      {
        "name": "updateStandardUniforms",
        "kind": "constant",
        "signature": "updateStandardUniforms",
        "summary": ""
      },
      {
        "name": "createStandardEntityRenderResources",
        "kind": "constant",
        "signature": "createStandardEntityRenderResources",
        "summary": ""
      },
      {
        "name": "createSmokeVolumeRenderer",
        "kind": "constant",
        "signature": "createSmokeVolumeRenderer",
        "summary": ""
      },
      {
        "name": "createParticleBillboardRenderer",
        "kind": "constant",
        "signature": "createParticleBillboardRenderer",
        "summary": ""
      },
      {
        "name": "createParticleBillboardDataBindGroup",
        "kind": "constant",
        "signature": "createParticleBillboardDataBindGroup",
        "summary": ""
      },
      {
        "name": "setParticleBillboardParams",
        "kind": "constant",
        "signature": "setParticleBillboardParams",
        "summary": ""
      },
      {
        "name": "createParticleQualityManager",
        "kind": "constant",
        "signature": "createParticleQualityManager",
        "summary": ""
      },
      {
        "name": "PARTICLE_QUALITY_PRESETS",
        "kind": "constant",
        "signature": "PARTICLE_QUALITY_PRESETS",
        "summary": ""
      },
      {
        "name": "IndexedClusterCuller",
        "kind": "re-export",
        "signature": "IndexedClusterCuller",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ToolsImports",
    "path": "engine/reference/ToolsImports.md",
    "source": "engine/ToolsImports.js",
    "import": "/engine/ToolsImports.js",
    "sourceHash": "6e3c6ea002d569dbe64cf7168a7d15ce5837389c39bbcb37e0cb5bd4f94b6bfa",
    "summary": "",
    "exports": [
      {
        "name": "ToolsInspector",
        "kind": "constant",
        "signature": "ToolsInspector",
        "summary": ""
      },
      {
        "name": "ToolsSpawn",
        "kind": "constant",
        "signature": "ToolsSpawn",
        "summary": ""
      },
      {
        "name": "ToolsGhost",
        "kind": "constant",
        "signature": "ToolsGhost",
        "summary": ""
      },
      {
        "name": "ToolsPicking",
        "kind": "constant",
        "signature": "ToolsPicking",
        "summary": ""
      },
      {
        "name": "ToolsScreenRay",
        "kind": "constant",
        "signature": "ToolsScreenRay",
        "summary": ""
      },
      {
        "name": "ROOM_PICKING_LIMITS",
        "kind": "constant",
        "signature": "ROOM_PICKING_LIMITS",
        "summary": ""
      },
      {
        "name": "pickingRayReport",
        "kind": "constant",
        "signature": "pickingRayReport",
        "summary": ""
      },
      {
        "name": "roomPickingOptionsReport",
        "kind": "constant",
        "signature": "roomPickingOptionsReport",
        "summary": ""
      },
      {
        "name": "entityPickingOptionsReport",
        "kind": "constant",
        "signature": "entityPickingOptionsReport",
        "summary": ""
      },
      {
        "name": "SCREEN_RAY_LIMITS",
        "kind": "constant",
        "signature": "SCREEN_RAY_LIMITS",
        "summary": ""
      },
      {
        "name": "screenPickInputReport",
        "kind": "constant",
        "signature": "screenPickInputReport",
        "summary": ""
      },
      {
        "name": "screenCameraBasisReport",
        "kind": "constant",
        "signature": "screenCameraBasisReport",
        "summary": ""
      },
      {
        "name": "screenCameraStateReport",
        "kind": "constant",
        "signature": "screenCameraStateReport",
        "summary": ""
      },
      {
        "name": "ToolsCamera",
        "kind": "constant",
        "signature": "ToolsCamera",
        "summary": ""
      },
      {
        "name": "ToolsGrab",
        "kind": "constant",
        "signature": "ToolsGrab",
        "summary": ""
      },
      {
        "name": "ToolsPhysicsScenes",
        "kind": "constant",
        "signature": "ToolsPhysicsScenes",
        "summary": ""
      },
      {
        "name": "ToolsRigging",
        "kind": "constant",
        "signature": "ToolsRigging",
        "summary": ""
      },
      {
        "name": "ToolsAnimation",
        "kind": "constant",
        "signature": "ToolsAnimation",
        "summary": ""
      },
      {
        "name": "attachInspectorPanel",
        "kind": "constant",
        "signature": "attachInspectorPanel",
        "summary": ""
      },
      {
        "name": "spawnPhysicsObjectAtPosition",
        "kind": "constant",
        "signature": "spawnPhysicsObjectAtPosition",
        "summary": ""
      },
      {
        "name": "getGhostPreviewInfo",
        "kind": "constant",
        "signature": "getGhostPreviewInfo",
        "summary": ""
      },
      {
        "name": "createGhostSelectionState",
        "kind": "constant",
        "signature": "createGhostSelectionState",
        "summary": ""
      },
      {
        "name": "addGhostToSelection",
        "kind": "constant",
        "signature": "addGhostToSelection",
        "summary": ""
      },
      {
        "name": "setActiveGhostInSelection",
        "kind": "constant",
        "signature": "setActiveGhostInSelection",
        "summary": ""
      },
      {
        "name": "setActiveGhostBasePosition",
        "kind": "constant",
        "signature": "setActiveGhostBasePosition",
        "summary": ""
      },
      {
        "name": "setActiveGhostOffset",
        "kind": "constant",
        "signature": "setActiveGhostOffset",
        "summary": ""
      },
      {
        "name": "getGhostWorldPosition",
        "kind": "constant",
        "signature": "getGhostWorldPosition",
        "summary": ""
      },
      {
        "name": "getActiveGhost",
        "kind": "constant",
        "signature": "getActiveGhost",
        "summary": ""
      },
      {
        "name": "getActiveGhostWorldPosition",
        "kind": "constant",
        "signature": "getActiveGhostWorldPosition",
        "summary": ""
      },
      {
        "name": "pickRoomSurfaceFromRay",
        "kind": "constant",
        "signature": "pickRoomSurfaceFromRay",
        "summary": ""
      },
      {
        "name": "pickEntityFromRay",
        "kind": "constant",
        "signature": "pickEntityFromRay",
        "summary": ""
      },
      {
        "name": "getPickRayForCanvasFromScreen",
        "kind": "constant",
        "signature": "getPickRayForCanvasFromScreen",
        "summary": ""
      },
      {
        "name": "updateStandardCamera",
        "kind": "constant",
        "signature": "updateStandardCamera",
        "summary": ""
      },
      {
        "name": "getStandardCameraEyeBasis",
        "kind": "constant",
        "signature": "getStandardCameraEyeBasis",
        "summary": ""
      },
      {
        "name": "STANDARD_CAMERA_LIMITS",
        "kind": "constant",
        "signature": "STANDARD_CAMERA_LIMITS",
        "summary": ""
      },
      {
        "name": "standardCameraStateReport",
        "kind": "constant",
        "signature": "standardCameraStateReport",
        "summary": ""
      },
      {
        "name": "standardCameraOptionsReport",
        "kind": "constant",
        "signature": "standardCameraOptionsReport",
        "summary": ""
      },
      {
        "name": "standardCameraUpdateReport",
        "kind": "constant",
        "signature": "standardCameraUpdateReport",
        "summary": ""
      },
      {
        "name": "standardCameraKeysReport",
        "kind": "constant",
        "signature": "standardCameraKeysReport",
        "summary": ""
      },
      {
        "name": "standardCameraMovementResponseReport",
        "kind": "constant",
        "signature": "standardCameraMovementResponseReport",
        "summary": ""
      },
      {
        "name": "standardCameraZoomReport",
        "kind": "constant",
        "signature": "standardCameraZoomReport",
        "summary": ""
      },
      {
        "name": "standardCameraBoomReport",
        "kind": "constant",
        "signature": "standardCameraBoomReport",
        "summary": ""
      },
      {
        "name": "standardCameraFocusReport",
        "kind": "constant",
        "signature": "standardCameraFocusReport",
        "summary": ""
      },
      {
        "name": "standardCameraFocusTransitionReport",
        "kind": "constant",
        "signature": "standardCameraFocusTransitionReport",
        "summary": ""
      },
      {
        "name": "standardCameraSphereFitReport",
        "kind": "constant",
        "signature": "standardCameraSphereFitReport",
        "summary": ""
      },
      {
        "name": "standardCameraBoundsReport",
        "kind": "constant",
        "signature": "standardCameraBoundsReport",
        "summary": ""
      },
      {
        "name": "standardCameraBoundsFocusReport",
        "kind": "constant",
        "signature": "standardCameraBoundsFocusReport",
        "summary": ""
      },
      {
        "name": "standardCameraMovementIntentReport",
        "kind": "constant",
        "signature": "standardCameraMovementIntentReport",
        "summary": ""
      },
      {
        "name": "createGrabState",
        "kind": "constant",
        "signature": "createGrabState",
        "summary": ""
      },
      {
        "name": "startGrabCandidate",
        "kind": "constant",
        "signature": "startGrabCandidate",
        "summary": ""
      },
      {
        "name": "cancelGrabCandidate",
        "kind": "constant",
        "signature": "cancelGrabCandidate",
        "summary": ""
      },
      {
        "name": "releaseGrabbed",
        "kind": "constant",
        "signature": "releaseGrabbed",
        "summary": ""
      },
      {
        "name": "configurePhysicsSandboxScene",
        "kind": "constant",
        "signature": "configurePhysicsSandboxScene",
        "summary": ""
      },
      {
        "name": "buildSourceSurfaceBVH",
        "kind": "constant",
        "signature": "buildSourceSurfaceBVH",
        "summary": ""
      },
      {
        "name": "estimateAlignmentICP",
        "kind": "constant",
        "signature": "estimateAlignmentICP",
        "summary": ""
      },
      {
        "name": "transferSkinWeightsCPU",
        "kind": "constant",
        "signature": "transferSkinWeightsCPU",
        "summary": ""
      },
      {
        "name": "transferSkinWeightsGPU",
        "kind": "constant",
        "signature": "transferSkinWeightsGPU",
        "summary": ""
      },
      {
        "name": "SkinWeightTransferGPU",
        "kind": "constant",
        "signature": "SkinWeightTransferGPU",
        "summary": ""
      },
      {
        "name": "parseFBXAscii",
        "kind": "constant",
        "signature": "parseFBXAscii",
        "summary": ""
      },
      {
        "name": "buildMixamoSkeletonFromFBX",
        "kind": "constant",
        "signature": "buildMixamoSkeletonFromFBX",
        "summary": ""
      },
      {
        "name": "sampleMixamoFBXAnimationClip",
        "kind": "constant",
        "signature": "sampleMixamoFBXAnimationClip",
        "summary": ""
      },
      {
        "name": "loadMixamoFBXAscii",
        "kind": "constant",
        "signature": "loadMixamoFBXAscii",
        "summary": ""
      },
      {
        "name": "findSkeletonJointIndexByName",
        "kind": "constant",
        "signature": "findSkeletonJointIndexByName",
        "summary": ""
      },
      {
        "name": "computeClipLocalMatricesAtFrame",
        "kind": "constant",
        "signature": "computeClipLocalMatricesAtFrame",
        "summary": ""
      },
      {
        "name": "computeClipGlobalMatricesAtFrame",
        "kind": "constant",
        "signature": "computeClipGlobalMatricesAtFrame",
        "summary": ""
      },
      {
        "name": "extractRootTranslationTrack",
        "kind": "constant",
        "signature": "extractRootTranslationTrack",
        "summary": ""
      },
      {
        "name": "extractRootMotion",
        "kind": "constant",
        "signature": "extractRootMotion",
        "summary": ""
      },
      {
        "name": "buildTeacherJointPositionDataset",
        "kind": "constant",
        "signature": "buildTeacherJointPositionDataset",
        "summary": ""
      },
      {
        "name": "attachPhysicsSandboxInspector",
        "kind": "re-export",
        "signature": "attachPhysicsSandboxInspector",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "animation/index",
    "path": "engine/reference/animation/index.md",
    "source": "engine/animation/index.js",
    "import": "/engine/animation/index.js",
    "sourceHash": "2b2418c8c52d0bd67acd1a22e3f6658cbc6b7115101383aab4be30550cdba945",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "animation/learning/FbxMotionExtractor",
    "path": "engine/reference/animation/learning/FbxMotionExtractor.md",
    "source": "engine/animation/learning/FbxMotionExtractor.js",
    "import": "/engine/animation/learning/FbxMotionExtractor.js",
    "sourceHash": "ca2eb5b9b2f21aadf374bf8cff0a32cab8f3193d24217d3f775eace806153834",
    "summary": "",
    "exports": [
      {
        "name": "extractMotionClipFromFbxAscii",
        "kind": "function",
        "signature": "extractMotionClipFromFbxAscii(text, options = {})",
        "summary": ""
      },
      {
        "name": "extractMotionDatasetFromFbxAsciiEntries",
        "kind": "function",
        "signature": "extractMotionDatasetFromFbxAsciiEntries(entries, options = {})",
        "summary": ""
      },
      {
        "name": "extractMotionDatasetFromFbxFiles",
        "kind": "function",
        "signature": "async extractMotionDatasetFromFbxFiles(files, options = {})",
        "summary": ""
      },
      {
        "name": "extractMotionDatasetFromFbxDirectoryHandle",
        "kind": "function",
        "signature": "async extractMotionDatasetFromFbxDirectoryHandle(dirHandle, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "animation/learning/GltfMotionExtractor",
    "path": "engine/reference/animation/learning/GltfMotionExtractor.md",
    "source": "engine/animation/learning/GltfMotionExtractor.js",
    "import": "/engine/animation/learning/GltfMotionExtractor.js",
    "sourceHash": "6a43763f7c966d4c825678cba2a37bb81636905f047966f68ec069a6bb8dbacd",
    "summary": "",
    "exports": [
      {
        "name": "extractMotionDatasetFromGltf",
        "kind": "function",
        "signature": "extractMotionDatasetFromGltf(gltf, options = {})",
        "summary": ""
      },
      {
        "name": "extractMotionClipFromGltf",
        "kind": "function",
        "signature": "extractMotionClipFromGltf(gltf, animationIndex = 0, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "animation/learning/MotionClip",
    "path": "engine/reference/animation/learning/MotionClip.md",
    "source": "engine/animation/learning/MotionClip.js",
    "import": "/engine/animation/learning/MotionClip.js",
    "sourceHash": "4a7962568bb34c96d7325c6e5faad14bb6882f889bfb3f50b0e7e4e31d6b946e",
    "summary": "",
    "exports": [
      {
        "name": "MotionClip",
        "kind": "class",
        "signature": "class MotionClip",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "animation/learning/MotionDataset",
    "path": "engine/reference/animation/learning/MotionDataset.md",
    "source": "engine/animation/learning/MotionDataset.js",
    "import": "/engine/animation/learning/MotionDataset.js",
    "sourceHash": "30624d36dbb13d2b4c2dcb507f67915c076ad04bf5f5171037dc98662a9620f9",
    "summary": "",
    "exports": [
      {
        "name": "MotionDataset",
        "kind": "class",
        "signature": "class MotionDataset",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "animation/learning/MotionFeatures",
    "path": "engine/reference/animation/learning/MotionFeatures.md",
    "source": "engine/animation/learning/MotionFeatures.js",
    "import": "/engine/animation/learning/MotionFeatures.js",
    "sourceHash": "d56aed9f4496c2a70aa38b0744eb5ae47e8f7c3497b380b70634de9b1bea8946",
    "summary": "",
    "exports": [
      {
        "name": "buildJointPositionDataset",
        "kind": "function",
        "signature": "buildJointPositionDataset(clip, options = {})",
        "summary": ""
      },
      {
        "name": "buildMotionFeatureIndex",
        "kind": "function",
        "signature": "buildMotionFeatureIndex(dataset, options = {})",
        "summary": ""
      },
      {
        "name": "fillRagdollFeature",
        "kind": "function",
        "signature": "fillRagdollFeature(ragdoll, boneIndices, out, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "animation/learning/MotionMatcher",
    "path": "engine/reference/animation/learning/MotionMatcher.md",
    "source": "engine/animation/learning/MotionMatcher.js",
    "import": "/engine/animation/learning/MotionMatcher.js",
    "sourceHash": "ad9575d3bcf1cc16f915ec88aca49e1ab104dc6aa1fa1c230502942dcfc860e2",
    "summary": "",
    "exports": [
      {
        "name": "MotionMatcher",
        "kind": "class",
        "signature": "class MotionMatcher",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "animation/learning/SkeletonHierarchy",
    "path": "engine/reference/animation/learning/SkeletonHierarchy.md",
    "source": "engine/animation/learning/SkeletonHierarchy.js",
    "import": "/engine/animation/learning/SkeletonHierarchy.js",
    "sourceHash": "07eb01ad4cec4324262e68fc5d369d133cb66a700cdbffb31f1685d6328c4b1e",
    "summary": "",
    "exports": [
      {
        "name": "SkeletonHierarchy",
        "kind": "class",
        "signature": "class SkeletonHierarchy",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "animation/learning/index",
    "path": "engine/reference/animation/learning/index.md",
    "source": "engine/animation/learning/index.js",
    "import": "/engine/animation/learning/index.js",
    "sourceHash": "df2275b655b63429e63d936d5d5b2709d71e3af9864906686bd94665f5f8b7a0",
    "summary": "",
    "exports": [
      {
        "name": "AnimationLearning",
        "kind": "constant",
        "signature": "AnimationLearning",
        "summary": ""
      },
      {
        "name": "MotionClip",
        "kind": "re-export",
        "signature": "MotionClip",
        "summary": ""
      },
      {
        "name": "MotionDataset",
        "kind": "re-export",
        "signature": "MotionDataset",
        "summary": ""
      },
      {
        "name": "MotionMatcher",
        "kind": "re-export",
        "signature": "MotionMatcher",
        "summary": ""
      },
      {
        "name": "SkeletonHierarchy",
        "kind": "re-export",
        "signature": "SkeletonHierarchy",
        "summary": ""
      },
      {
        "name": "buildJointPositionDataset",
        "kind": "re-export",
        "signature": "buildJointPositionDataset",
        "summary": ""
      },
      {
        "name": "buildMotionFeatureIndex",
        "kind": "re-export",
        "signature": "buildMotionFeatureIndex",
        "summary": ""
      },
      {
        "name": "extractMotionClipFromFbxAscii",
        "kind": "re-export",
        "signature": "extractMotionClipFromFbxAscii",
        "summary": ""
      },
      {
        "name": "extractMotionClipFromGltf",
        "kind": "re-export",
        "signature": "extractMotionClipFromGltf",
        "summary": ""
      },
      {
        "name": "extractMotionDatasetFromFbxAsciiEntries",
        "kind": "re-export",
        "signature": "extractMotionDatasetFromFbxAsciiEntries",
        "summary": ""
      },
      {
        "name": "extractMotionDatasetFromFbxDirectoryHandle",
        "kind": "re-export",
        "signature": "extractMotionDatasetFromFbxDirectoryHandle",
        "summary": ""
      },
      {
        "name": "extractMotionDatasetFromFbxFiles",
        "kind": "re-export",
        "signature": "extractMotionDatasetFromFbxFiles",
        "summary": ""
      },
      {
        "name": "extractMotionDatasetFromGltf",
        "kind": "re-export",
        "signature": "extractMotionDatasetFromGltf",
        "summary": ""
      },
      {
        "name": "fillRagdollFeature",
        "kind": "re-export",
        "signature": "fillRagdollFeature",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/AssetCache",
    "path": "engine/reference/assets/AssetCache.md",
    "source": "engine/assets/AssetCache.js",
    "import": "/engine/assets/AssetCache.js",
    "sourceHash": "700860a49d88a6109b03a826e70ecdc7d18c26e3950c3471e5ef15692768e5c9",
    "summary": "engine/assets/AssetCache.js — local engine cache (spec §3, cache://).  Converted artifacts (engine binaries, preview meshes, thumbnails, colliders, SDFs, material packs) are cached under cache:// keyed by content hash so a re-import of the same source is instant. The primary backend is the Origin Private File System (OPFS) — origin-private and optimized for file access; an in-memory Map backs environments without OPFS (Node tests, locked-down contexts) so the rest of the runtime is backend-agnostic.",
    "exports": [
      {
        "name": "AssetCache",
        "kind": "class",
        "signature": "class AssetCache",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/AssetDeduper",
    "path": "engine/reference/assets/AssetDeduper.md",
    "source": "engine/assets/AssetDeduper.js",
    "import": "/engine/assets/AssetDeduper.js",
    "sourceHash": "9d8bc22ec241e7ae3637d79abc0f32d087f0fdd0ce9a39a9ebbcaf405f89bbfc",
    "summary": "engine/assets/AssetDeduper.js — content-hash dedup (spec §3).  Assets are deduplicated by source content hash. We separate source / mesh / material hashes so that the dedup rules can distinguish exact duplicates from variants and conflicts: same source hash               = same source asset (exact duplicate) same name + different hash      = version/conflict same mesh hash + diff material  = variant same texture hash               = shared texture Hashing prefers Web Crypto SHA-256; in a non-secure context it falls back to a deterministic FNV-1a stamp (clearly tagged so callers know it isn't crypto).",
    "exports": [
      {
        "name": "assetDeduperFallbackHash",
        "kind": "function",
        "signature": "assetDeduperFallbackHash(data)",
        "summary": ""
      },
      {
        "name": "hashContent",
        "kind": "function",
        "signature": "async hashContent(data)",
        "summary": "Content hash of arbitrary data. Returns 'sha256:<hex>' (secure) or 'fnv1a:<hex>' (fallback). Async because Web Crypto digest is async."
      },
      {
        "name": "classify",
        "kind": "function",
        "signature": "classify(candidate, records)",
        "summary": "Classify a candidate against the existing records."
      },
      {
        "name": "DEDUP",
        "kind": "constant",
        "signature": "DEDUP",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/AssetRecord",
    "path": "engine/reference/assets/AssetRecord.md",
    "source": "engine/assets/AssetRecord.js",
    "import": "/engine/assets/AssetRecord.js",
    "sourceHash": "ae8548acb69b9c38101f96a2451c4439ff7072708c9d422fee73faa5cb1697d0",
    "summary": "engine/assets/AssetRecord.js — the registry's record for one source asset.  The asset registry (not the filesystem) is the source of truth. Each record tracks the source content hash, a primary virtual path, redundant backup paths, the set of converted engine artifacts, and license metadata. Records are deduplicated by source hash; variants/conflicts are linked, never merged blindly (see AssetDeduper / AssetRegistry).",
    "exports": [
      {
        "name": "createAssetRecord",
        "kind": "function",
        "signature": "createAssetRecord(init = {})",
        "summary": "Create an asset record."
      },
      {
        "name": "createLicenseBlock",
        "kind": "function",
        "signature": "createLicenseBlock(init = {})",
        "summary": "License metadata is mandatory before import (unknown is allowed but flagged). Marketplace assets are licensed, not sold — track it and warn on restricted."
      },
      {
        "name": "licenseNeedsReview",
        "kind": "function",
        "signature": "licenseNeedsReview(license)",
        "summary": "True if the license is unknown or explicitly disallows engine conversion."
      },
      {
        "name": "ASSET_TYPES",
        "kind": "constant",
        "signature": "ASSET_TYPES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/AssetRegistry",
    "path": "engine/reference/assets/AssetRegistry.md",
    "source": "engine/assets/AssetRegistry.js",
    "import": "/engine/assets/AssetRegistry.js",
    "sourceHash": "53ee2abb9003fa79df6f7a8fc163bfcf1d13a8ae199d2400109ea9ef58444206",
    "summary": "engine/assets/AssetRegistry.js — the source of truth (spec §3, rule 3).  The registry (not the filesystem) owns asset identity. Sources are deduplicated by content hash; the registry links exact duplicates, variants, and conflicts rather than merging them blindly. Registering an already-known source returns the canonical record (idempotent), so re-importing the same file never produces a second asset.",
    "exports": [
      {
        "name": "AssetRegistry",
        "kind": "class",
        "signature": "class AssetRegistry",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/AssetResolver",
    "path": "engine/reference/assets/AssetResolver.md",
    "source": "engine/assets/AssetResolver.js",
    "import": "/engine/assets/AssetResolver.js",
    "sourceHash": "71434beddaf555a895ce7cfc2fbfd032dc2be9bd87a70595e5dd5b43007bca51",
    "summary": "engine/assets/AssetResolver.js — virtual-path resolution + backup repair (spec §3, rule 5). Files move, browser permissions expire, cloud mirrors lag. The resolver maps a scheme:// path to a concrete backend and, when reading a registered asset, tries the primary then each backup, verifying by content hash. If a backup matches the expected hash it repairs the primary; if a candidate's hash differs it is flagged a conflict (never silently accepted).",
    "exports": [
      {
        "name": "AssetResolver",
        "kind": "class",
        "signature": "class AssetResolver",
        "summary": "A backend is { async read(path) -> Uint8Array|null, async write?(path, bytes) }. Schemes without a registered backend simply fail to resolve (caller falls back)."
      },
      {
        "name": "backendFromCache",
        "kind": "function",
        "signature": "backendFromCache(cache)",
        "summary": "Adapt an AssetCache instance to a resolver backend (cache:// scheme)."
      },
      {
        "name": "makeFetchBackend",
        "kind": "function",
        "signature": "makeFetchBackend(base)",
        "summary": "A read-only backend that fetches relative to a base URL (asset://, cloud://)."
      },
      {
        "name": "makeMemoryBackend",
        "kind": "function",
        "signature": "makeMemoryBackend(initial = {})",
        "summary": "A simple in-memory backend (temp:// drag-drop, user:// session mounts)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/CanonicalSpace",
    "path": "engine/reference/assets/CanonicalSpace.md",
    "source": "engine/assets/CanonicalSpace.js",
    "import": "/engine/assets/CanonicalSpace.js",
    "sourceHash": "4d32f0a2c6fbf749f08abeeb4f8b0d6166ac6706c45d93406ce44ca3b1a8cc1c",
    "summary": "engine/assets/CanonicalSpace.js — the engine's canonical coordinate frame.  Y = up, Z = forward, X = side (right), unit = meter, origin = logical root.  Source files come from Blender/Maya/Max/CAD/Unity/Unreal/etc. with inconsistent axes, scale, and origin. We never trust source orientation and never rewrite it destructively — instead we compute a non-destructive axis correction (a quaternion + uniform scale) that maps the declared source frame into this canonical frame, and store it on the model's ImportTransform.",
    "exports": [
      {
        "name": "axisVector",
        "kind": "function",
        "signature": "axisVector(token)",
        "summary": "Resolve an axis token ('+Y', '-Z', …) to a unit vector."
      },
      {
        "name": "axisCorrectionQuat",
        "kind": "function",
        "signature": "axisCorrectionQuat(upAxis = '+Y', forwardAxis = '+Z')",
        "summary": "Quaternion (xyzw) that rotates a vector from a source frame (declared by its up + forward axes) into the canonical Y-up / Z-forward frame."
      },
      {
        "name": "mat3ToQuat",
        "kind": "function",
        "signature": "mat3ToQuat(m)",
        "summary": "Convert a row-major 3x3 rotation matrix to a quaternion (xyzw)."
      },
      {
        "name": "rotateVecByQuat",
        "kind": "function",
        "signature": "rotateVecByQuat(v, q)",
        "summary": "Rotate a 3-vector by a quaternion (xyzw)."
      },
      {
        "name": "unitScaleToMeters",
        "kind": "function",
        "signature": "unitScaleToMeters(unit)",
        "summary": ""
      },
      {
        "name": "CANONICAL",
        "kind": "constant",
        "signature": "CANONICAL",
        "summary": ""
      },
      {
        "name": "UNIT_TO_METERS",
        "kind": "constant",
        "signature": "UNIT_TO_METERS",
        "summary": "Common unit guesses for formats that don't carry units (e.g. STL). Returns a scale factor to convert the source unit to meters. These are *guesses* — the editor exposes an override per import."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/EngineModel",
    "path": "engine/reference/assets/EngineModel.md",
    "source": "engine/assets/EngineModel.js",
    "import": "/engine/assets/EngineModel.js",
    "sourceHash": "b7af5e3efddc8d291cb2069460b22c9fcef1319b6cd30097dca52c8b10ee8201",
    "summary": "engine/assets/EngineModel.js — the unified runtime object.  Core rule of the ingestion runtime: a model file is raw evidence, not the runtime object. The importer parses a source file into an EngineModel, which keeps every layer explicitly separate (source ≠ visual mesh ≠ material ≠ collider ≠ SDF ≠ skeleton ≠ animation ≠ runtime rig ≠ render surface). Layers that have not been built yet are explicitly null/empty — never faked — so the editor can show exactly what was detected vs generated.  Corrections (axis/scale/origin, material fixes, rig edits) live in metadata as an ImportTransform / import profile and are NEVER baked destructively into the source: the original imported look must always be recoverable.",
    "exports": [
      {
        "name": "createEngineModel",
        "kind": "function",
        "signature": "createEngineModel(init = {})",
        "summary": "Create an empty EngineModel with every layer present but unbuilt."
      },
      {
        "name": "createImportTransform",
        "kind": "function",
        "signature": "createImportTransform(init = {})",
        "summary": "A non-destructive correction applied at runtime (never baked into source). Confidence drives the auto-apply / review / preview / neutral policy."
      },
      {
        "name": "createEngineNode",
        "kind": "function",
        "signature": "createEngineNode(init = {})",
        "summary": "A node in the preserved source hierarchy (transforms kept as-authored)."
      },
      {
        "name": "createEngineMesh",
        "kind": "function",
        "signature": "createEngineMesh(init = {})",
        "summary": "A mesh = a set of primitives (submeshes), each with its own material."
      },
      {
        "name": "createEnginePrimitive",
        "kind": "function",
        "signature": "createEnginePrimitive(init = {})",
        "summary": "A primitive/submesh: geometry + a single material binding."
      },
      {
        "name": "layerStatus",
        "kind": "function",
        "signature": "layerStatus(model)",
        "summary": "Report which layers are built (non-empty) vs explicitly unbuilt."
      },
      {
        "name": "ENGINE_MODEL_LAYERS",
        "kind": "constant",
        "signature": "ENGINE_MODEL_LAYERS",
        "summary": "Canonical layer list — used by the editor to show built vs unbuilt layers."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/LicenseTracker",
    "path": "engine/reference/assets/LicenseTracker.md",
    "source": "engine/assets/LicenseTracker.js",
    "import": "/engine/assets/LicenseTracker.js",
    "sourceHash": "513338d08c844774cb8ef324bb5dad544a377208d3f41db4d6264925e1a8dd83",
    "summary": "engine/assets/LicenseTracker.js — license metadata + import gate (spec §21).  License metadata is mandatory before import. Marketplace assets are licensed, not sold, and portability varies. The hard rules: only import assets the user owns or is licensed to use; never rip copyrighted game assets; never bypass DRM; store license metadata; warn on unknown/restricted licenses. This gate is advisory by default (warn) and can be set strict (block) per project.",
    "exports": [
      {
        "name": "LicenseTracker",
        "kind": "class",
        "signature": "class LicenseTracker",
        "summary": ""
      },
      {
        "name": "GATE",
        "kind": "constant",
        "signature": "GATE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/geometry/PrincipalAxes",
    "path": "engine/reference/assets/geometry/PrincipalAxes.md",
    "source": "engine/assets/geometry/PrincipalAxes.js",
    "import": "/engine/assets/geometry/PrincipalAxes.js",
    "sourceHash": "398bad06d2d3026c86be0c9e4e0faf52184dcd19bd24cecf297a28e8c81555be",
    "summary": "engine/assets/geometry/PrincipalAxes.js — Principal Component Analysis of an EngineModel node's geometry. Small, dependency-free, GPU-free, and reusable: any engine system can ask for the natural axes of a mesh (oriented bounds, alignment, the axle of a wheel disc, the long axis of a barrel, etc.).  PCA finds the orthogonal axes of greatest → least variance of the vertex cloud. A disc/cylinder is thin along its axle, so its axle is the axis of LEAST variance — orientation- and mirror-proof, unlike axis-aligned guesses.",
    "exports": [
      {
        "name": "eigSym3",
        "kind": "function",
        "signature": "eigSym3(m)",
        "summary": "Jacobi eigen-decomposition of a symmetric 3×3 (row-major length-9 array)."
      },
      {
        "name": "principalAxes",
        "kind": "function",
        "signature": "principalAxes(model, nodeId, opts = {})",
        "summary": "PCA of a node's mesh-local vertex cloud."
      },
      {
        "name": "leastVarianceAxis",
        "kind": "function",
        "signature": "leastVarianceAxis(model, nodeId, opts = {})",
        "summary": "Convenience: the axis of LEAST variance (e.g. a wheel/disc axle), or null."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/humanoid/BoneMapper",
    "path": "engine/reference/assets/humanoid/BoneMapper.md",
    "source": "engine/assets/humanoid/BoneMapper.js",
    "import": "/engine/assets/humanoid/BoneMapper.js",
    "sourceHash": "6917a9903e9a9314b36c226271149b75cfcb898a0b7e19f966a770431b9307ea",
    "summary": "engine/assets/humanoid/BoneMapper.js — map a source skeleton's bones onto the canonical humanoid slots (HumanoidRig) by NAME first (Mixamo / VRM / generic rig conventions), then hierarchy for the spine chain. Every mapping is a hint; ambiguous/extra bones are reported as `unmapped` and missing required slots as `missing` so the editor can correct (rule 62). Pure + GPU-free (gate-testable).",
    "exports": [
      {
        "name": "mapBones",
        "kind": "function",
        "signature": "mapBones(model, opts = {})",
        "summary": "Map a model's skeleton to canonical humanoid bones."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/humanoid/FingerGenerator",
    "path": "engine/reference/assets/humanoid/FingerGenerator.md",
    "source": "engine/assets/humanoid/FingerGenerator.js",
    "import": "/engine/assets/humanoid/FingerGenerator.js",
    "sourceHash": "cb943cae4105ba41aea90d9fb6808c107bf4d07f8cc7589307b2a7b7339bf110",
    "summary": "engine/assets/humanoid/FingerGenerator.js — synthesize finger bones from a hand mesh when the source skeleton has none (the browser-friendly geometric approach: detect open-hand fingertip \"lobes\", not ML). Method: 1. Build a hand frame from the wrist→fingertip direction; the lateral spread axis (fingers fan out) and palm normal (thinnest) come from 2-D PCA of the vertices in the plane perpendicular to forward. 2. Take the far band of vertices (toward the tips) and cluster them along the lateral axis — each cluster is one finger lobe. 3. Label the shortest extreme lobe as the thumb; order the rest index→pinky. 4. Emit a short straight bone chain (proximal→intermediate→distal→tip) per finger. If fewer than four lobes separate (a closed fist / low-poly hand), report `detected:false` so the caller falls back to a single paddle.  Pure geometry, GPU-free, deterministic → unit-testable.",
    "exports": [
      {
        "name": "generateFingers",
        "kind": "function",
        "signature": "generateFingers(vertices, opts = {})",
        "summary": "Generate finger bones from hand vertices."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/humanoid/FingerMapper",
    "path": "engine/reference/assets/humanoid/FingerMapper.md",
    "source": "engine/assets/humanoid/FingerMapper.js",
    "import": "/engine/assets/humanoid/FingerMapper.js",
    "sourceHash": "77accd50503ad68da9e1bc0e4914685b3416701d076ca12b15d41d86fa17e081",
    "summary": "engine/assets/humanoid/FingerMapper.js — detect EXISTING finger bones under a hand node by name (Mixamo \"LeftHandIndex1..3\", VRM \"J_Bip_L_Index_Proximal\", generic \"index_01\"), grouping them into canonical fingers with palm→tip joint order. Used before procedural generation: if the artist rigged fingers, keep them; only synthesize when none are found.",
    "exports": [
      {
        "name": "mapFingers",
        "kind": "function",
        "signature": "mapFingers(model, handNodeId)",
        "summary": "Map existing finger bones under a hand node."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/humanoid/HandRig",
    "path": "engine/reference/assets/humanoid/HandRig.md",
    "source": "engine/assets/humanoid/HandRig.js",
    "import": "/engine/assets/humanoid/HandRig.js",
    "sourceHash": "37eab586ed8a836c4cf5578fccb8c468fc736c1eb4e51df40e6f3cecea1bf400",
    "summary": "engine/assets/humanoid/HandRig.js — hand + finger rig schema (spec §12). A hand is a wrist + up to five fingers, each a short bone chain. Fingers come from one of three sources: the source skeleton's named bones (`skeleton`), procedurally GENERATED from the hand mesh when the skeleton has none (`generated`), or a single paddle bone when the hand is a closed fist / too low-poly (`paddle`).",
    "exports": [
      {
        "name": "createFinger",
        "kind": "function",
        "signature": "createFinger(init = {})",
        "summary": ""
      },
      {
        "name": "createHandRig",
        "kind": "function",
        "signature": "createHandRig(init = {})",
        "summary": ""
      },
      {
        "name": "FINGERS",
        "kind": "constant",
        "signature": "FINGERS",
        "summary": ""
      },
      {
        "name": "FINGER_JOINTS",
        "kind": "constant",
        "signature": "FINGER_JOINTS",
        "summary": ""
      },
      {
        "name": "HAND_SOURCE",
        "kind": "constant",
        "signature": "HAND_SOURCE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/humanoid/HandRigBuilder",
    "path": "engine/reference/assets/humanoid/HandRigBuilder.md",
    "source": "engine/assets/humanoid/HandRigBuilder.js",
    "import": "/engine/assets/humanoid/HandRigBuilder.js",
    "sourceHash": "662dcceb30f7d3aa441e94819fb50c4d63357181ff00fdcafd53e5b443e2ff6f",
    "summary": "engine/assets/humanoid/HandRigBuilder.js — build a hand rig for each hand of a humanoid. Priority: (1) use named finger bones if the skeleton has them; else (2) PROBE the hand mesh (vertices skinned to the hand joint) and GENERATE finger bones geometrically; else (3) a single paddle. Wrist + forward come from the humanoid rig (hand world position, and the lowerArm→hand direction).",
    "exports": [
      {
        "name": "extractHandVertices",
        "kind": "function",
        "signature": "extractHandVertices(model, handNodeId, thresh = 0.4, pose = null)",
        "summary": "Vertices skinned (weight ≥ thresh) to the hand joint, in node-hierarchy SCENE space (so they match the wrist + the rendered mesh). `pose` is a node→world map."
      },
      {
        "name": "buildHandRig",
        "kind": "function",
        "signature": "buildHandRig(model, opts = {})",
        "summary": "Build a single hand rig."
      },
      {
        "name": "buildHands",
        "kind": "function",
        "signature": "buildHands(model, opts = {})",
        "summary": "Build both hands for a model that already has a humanoid rig; attaches them at model.rigs.hand = { left, right } and humanoidRig.hands."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/humanoid/HumanoidRig",
    "path": "engine/reference/assets/humanoid/HumanoidRig.md",
    "source": "engine/assets/humanoid/HumanoidRig.js",
    "import": "/engine/assets/humanoid/HumanoidRig.js",
    "sourceHash": "6cb50cb963fa46d4cafdfd1540bc25186158e8df7239412f404a4fff78c00308",
    "summary": "engine/assets/humanoid/HumanoidRig.js — canonical humanoid bone slots + rig schema (spec §12). A humanoid is NOT its skeleton: it's a mapping from the source skeleton's bones onto a canonical slot set (Unity Mecanim / VRM style) plus rest-pose + correction metadata, so animation can retarget and physics can build a ragdoll regardless of how the artist named or oriented the rig. Every mapping is a HINT with confidence; unmapped/ambiguous bones go to the editor.",
    "exports": [
      {
        "name": "createHumanoidRig",
        "kind": "function",
        "signature": "createHumanoidRig(init = {})",
        "summary": "Create a humanoid rig descriptor."
      },
      {
        "name": "boneSide",
        "kind": "function",
        "signature": "boneSide(slot)",
        "summary": "Is a canonical slot a left/right limb (vs a center/spine bone)?"
      },
      {
        "name": "mirrorBone",
        "kind": "function",
        "signature": "mirrorBone(slot)",
        "summary": "The mirrored slot for a left/right bone (e.g. leftHand ↔ rightHand), or null."
      },
      {
        "name": "HUMANOID_BONES",
        "kind": "constant",
        "signature": "HUMANOID_BONES",
        "summary": ""
      },
      {
        "name": "REQUIRED_BONES",
        "kind": "constant",
        "signature": "REQUIRED_BONES",
        "summary": ""
      },
      {
        "name": "BODY_SIDE",
        "kind": "constant",
        "signature": "BODY_SIDE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/humanoid/HumanoidRigBuilder",
    "path": "engine/reference/assets/humanoid/HumanoidRigBuilder.md",
    "source": "engine/assets/humanoid/HumanoidRigBuilder.js",
    "import": "/engine/assets/humanoid/HumanoidRigBuilder.js",
    "sourceHash": "2d667b0a0db64ef0e209cc484e292e3f5f4481497985dcb8992048790a4d084a",
    "summary": "engine/assets/humanoid/HumanoidRigBuilder.js — assemble a HumanoidRig from a model's skeleton (spec §12). Maps bones (BoneMapper), snapshots the rest pose, classifies the pose (T vs A) from the arm direction, and flags needsCorrection when required bones are missing — never guessing past the evidence. The rig is the retarget/ragdoll target: it references the source nodes, it does not bake.",
    "exports": [
      {
        "name": "buildHumanoidRig",
        "kind": "function",
        "signature": "buildHumanoidRig(model, opts = {})",
        "summary": "Build a humanoid rig and attach it at model.rigs.humanoid."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/humanoid/SkeletonHeal",
    "path": "engine/reference/assets/humanoid/SkeletonHeal.md",
    "source": "engine/assets/humanoid/SkeletonHeal.js",
    "import": "/engine/assets/humanoid/SkeletonHeal.js",
    "sourceHash": "b4a8f4ae556d703b1d48d143f2032116e53092cf0ccb41bf74426ded124a8d08",
    "summary": "engine/assets/humanoid/SkeletonHeal.js — anatomy-aware, NON-DESTRUCTIVE skeleton repair. When a rig is missing or mislabels core bones, infer them from anatomy (the same heuristics auto-riggers use): • Pelvis = the point between the two hip joints (and the retarget root must be the pelvis, NOT a ground/root-motion bone — so a \"Root\"/Armature bone at the floor is replaced by the leg-derived pelvis). • Missing spine / chest / neck are interpolated along the hips→head chain. • A missing left/right limb is MIRRORED from the present side across the body's sagittal plane (auto-mirror). Inferred joints are written to `rig.synthesized` (slot → position) — the source model is never modified. `humanoidBonePosition()` returns the real joint if it exists, else the synthesized one.",
    "exports": [
      {
        "name": "humanoidBonePosition",
        "kind": "function",
        "signature": "humanoidBonePosition(rig, slot, pose)",
        "summary": "Real or synthesized world position for a canonical slot (or null)."
      },
      {
        "name": "healHumanoid",
        "kind": "function",
        "signature": "healHumanoid(model, rig, pose)",
        "summary": "Repair a humanoid rig in place (non-destructively): fills `rig.synthesized` with inferred joints and `rig.healed` with a list of what was repaired."
      },
      {
        "name": "analyzeSymmetry",
        "kind": "function",
        "signature": "analyzeSymmetry(model, pose)",
        "summary": "Find the skeleton's plane of bilateral symmetry."
      },
      {
        "name": "healSkeleton",
        "kind": "function",
        "signature": "healSkeleton(model, pose)",
        "summary": "Heal a generic skeleton by mirroring limbs that exist on only one side."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/humanoid/SkinPose",
    "path": "engine/reference/assets/humanoid/SkinPose.md",
    "source": "engine/assets/humanoid/SkinPose.js",
    "import": "/engine/assets/humanoid/SkinPose.js",
    "sourceHash": "db2735cd134348a9c124fd7543a73c5441908aff54084bd836788ab902046bbc",
    "summary": "engine/assets/humanoid/SkinPose.js — scene-space skeleton pose used by rig overlays + hand probing.  IMPORTANT (verified with scripts/probe_skeleton.py across real rigs): the correct space for placing the skeleton so it lands on the RENDERED mesh is the NODE-HIERARCHY world, because the importer/renderer draw the (unskinned) mesh through that same node hierarchy + importTransform. `inverse(IBM)` instead lives in the armature-local / unscaled space (e.g. hips ≈ 0.03 while the node-hierarchy hips ≈ 2.77 with a ×100 mesh-node scale), so using it for the overlay either collapses the skeleton (missing node scale) or double-rotates it (re-applying the armature transform). We therefore use the node hierarchy here; the IBMs are still imported and available (invert4) for true-bind / retarget work later.",
    "exports": [
      {
        "name": "invert4",
        "kind": "function",
        "signature": "invert4(m)",
        "summary": "Invert a column-major 4×4 (returns a new Float32Array, or null if singular)."
      },
      {
        "name": "buildBindPose",
        "kind": "function",
        "signature": "buildBindPose(model)",
        "summary": "Scene-space pose for every node = the node-hierarchy world (TRS composed down the tree). This is exactly the space the renderer draws the mesh in, so the skeleton overlay + hand probing align with the mesh for any export."
      },
      {
        "name": "jointPosition",
        "kind": "function",
        "signature": "jointPosition(pose, nodeId)",
        "summary": "World position of a node in a pose map (or null)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/import/Detectors",
    "path": "engine/reference/assets/import/Detectors.md",
    "source": "engine/assets/import/Detectors.js",
    "import": "/engine/assets/import/Detectors.js",
    "sourceHash": "9b741dc0e21f679cac3184b6622df3360d4709c9849b0c5ad45acdcd2503cd99",
    "summary": "engine/assets/import/Detectors.js — hierarchy, part, and semantic detection (spec §6). These produce hints, never assertions: every detection carries a confidence and is editor-correctable. Detection by name is the cheap first pass; geometry-based detection (cylinders → wheels, symmetry, etc.) is layered in by the phase that needs it (vehicles, humanoids, weapons).",
    "exports": [
      {
        "name": "detectHierarchy",
        "kind": "function",
        "signature": "detectHierarchy(model)",
        "summary": "Summarize the preserved source hierarchy."
      },
      {
        "name": "detectParts",
        "kind": "function",
        "signature": "detectParts(model)",
        "summary": "Detect semantic parts by node name. Populates model.detectedParts."
      },
      {
        "name": "detectSemanticDomain",
        "kind": "function",
        "signature": "detectSemanticDomain(model)",
        "summary": "Roll detected parts up to a guessed runtime domain (vehicle/humanoid/weapon)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/import/FormatDetector",
    "path": "engine/reference/assets/import/FormatDetector.md",
    "source": "engine/assets/import/FormatDetector.js",
    "import": "/engine/assets/import/FormatDetector.js",
    "sourceHash": "69a346175700b26dc908881d942a3dd16b9bb8482ae85dd55c710699878ccc52",
    "summary": "engine/assets/import/FormatDetector.js — detect format by extension + magic bytes (spec §5). Never trust the filename alone: the magic-byte sniff wins when it disagrees with the extension, and a confidence is reported so the pipeline can fall back to the editor when unsure.",
    "exports": [
      {
        "name": "sniffMagic",
        "kind": "function",
        "signature": "sniffMagic(head)",
        "summary": "Sniff a format from a leading byte slice. Returns a format token or null. Pass at least the first 16 bytes for reliable results."
      },
      {
        "name": "classOf",
        "kind": "function",
        "signature": "classOf(format)",
        "summary": ""
      },
      {
        "name": "detectFormat",
        "kind": "function",
        "signature": "detectFormat(name, head = null)",
        "summary": "Detect a file's format from its name and (optional) leading bytes."
      },
      {
        "name": "FORMAT_CLASS",
        "kind": "constant",
        "signature": "FORMAT_CLASS",
        "summary": ""
      },
      {
        "name": "BRIDGE_FORMATS",
        "kind": "re-export",
        "signature": "BRIDGE_FORMATS",
        "summary": ""
      },
      {
        "name": "IMAGE_FORMATS",
        "kind": "re-export",
        "signature": "IMAGE_FORMATS",
        "summary": ""
      },
      {
        "name": "NATIVE_FORMATS",
        "kind": "re-export",
        "signature": "NATIVE_FORMATS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/import/GltfSceneImporter",
    "path": "engine/reference/assets/import/GltfSceneImporter.md",
    "source": "engine/assets/import/GltfSceneImporter.js",
    "import": "/engine/assets/import/GltfSceneImporter.js",
    "sourceHash": "0c194246b9ce63e769ff713a13070fb778c24ef61d86631f952ad4cedd6c7cc4",
    "summary": "engine/assets/import/GltfSceneImporter.js — full glTF/GLB scene → EngineModel.  glTF is the preferred runtime delivery format (nodes, meshes, materials, skins, animations, buffers, textures). This importer parses the whole scene graph — not just motion — reusing the engine's accessor toolkit (core/math/MeshAttributeMath) to decode vertex/index data exactly. Materials and textures are preserved as raw blocks here and normalized in Phase 2; the original look must always be recoverable.",
    "exports": [
      {
        "name": "parseGlb",
        "kind": "function",
        "signature": "parseGlb(bytes)",
        "summary": "Parse a binary GLB into { json, bin }."
      },
      {
        "name": "decodeGltfDataUri",
        "kind": "function",
        "signature": "decodeGltfDataUri(uri)",
        "summary": ""
      },
      {
        "name": "gltfExternalUriReport",
        "kind": "function",
        "signature": "gltfExternalUriReport(uri)",
        "summary": ""
      },
      {
        "name": "gltfExternalResourceReferences",
        "kind": "function",
        "signature": "gltfExternalResourceReferences(json)",
        "summary": ""
      },
      {
        "name": "packageLooseGltfFiles",
        "kind": "function",
        "signature": "async packageLooseGltfFiles(inputFiles)",
        "summary": ""
      },
      {
        "name": "extractGltfMaterialPayload",
        "kind": "function",
        "signature": "extractGltfMaterialPayload(json, buffers = [], externalImages = null)",
        "summary": "Extract the recoverable glTF material/texture payload from already-resolved buffers. This is shared by the full asset pipeline and the editor mesh importer so both paths normalize exactly the same source records."
      },
      {
        "name": "importGltf",
        "kind": "function",
        "signature": "async importGltf(data, opts = {})",
        "summary": "Import a glTF/GLB into an EngineModel."
      },
      {
        "name": "GLTF_EXTERNAL_RESOURCE_LIMITS",
        "kind": "constant",
        "signature": "GLTF_EXTERNAL_RESOURCE_LIMITS",
        "summary": ""
      },
      {
        "name": "GLTF_COMPONENT_TYPES",
        "kind": "re-export",
        "signature": "GLTF_COMPONENT_TYPES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/import/GpuUploader",
    "path": "engine/reference/assets/import/GpuUploader.md",
    "source": "engine/assets/import/GpuUploader.js",
    "import": "/engine/assets/import/GpuUploader.js",
    "sourceHash": "69a206c0426cd6429d8481247b59aa1de99f8a6cd7f1e8dab37dac6a0ec868da",
    "summary": "engine/assets/import/GpuUploader.js — upload EngineModel primitives to the GPU.  Parsing is GPU-free; this is the separate, device-driven step (spec §9: upload GPU buffers incrementally). Each primitive is interleaved into a standard [position(3), normal(3), uv(2)] vertex layout (generating flat normals when a source lacks them) plus an optional index buffer, so the importer/viewer and the engine renderer can draw it with one shared layout. Buffers are recorded on `primitive.gpu`; `model.gpuReady` flips true when all primitives upload.",
    "exports": [
      {
        "name": "standardVertexLayout",
        "kind": "function",
        "signature": "standardVertexLayout()",
        "summary": "The WebGPU vertex buffer layout matching interleaveStandard()."
      },
      {
        "name": "interleaveStandard",
        "kind": "function",
        "signature": "interleaveStandard(primitive)",
        "summary": "Interleave a primitive's attributes into the standard layout."
      },
      {
        "name": "uploadPrimitive",
        "kind": "function",
        "signature": "uploadPrimitive(device, primitive)",
        "summary": "Upload one primitive to the GPU. Records `primitive.gpu`."
      },
      {
        "name": "uploadModel",
        "kind": "function",
        "signature": "uploadModel(device, model)",
        "summary": "Upload every primitive in a model. Returns the number uploaded."
      },
      {
        "name": "releaseModelGpu",
        "kind": "function",
        "signature": "releaseModelGpu(model)",
        "summary": "Free GPU buffers held by a model's primitives."
      },
      {
        "name": "STANDARD_STRIDE_FLOATS",
        "kind": "constant",
        "signature": "STANDARD_STRIDE_FLOATS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/import/ImportPipeline",
    "path": "engine/reference/assets/import/ImportPipeline.md",
    "source": "engine/assets/import/ImportPipeline.js",
    "import": "/engine/assets/import/ImportPipeline.js",
    "sourceHash": "a4c0ab1a8b0a21a9f9b358d7101384e6b8dda16622f3be1b8117040760d9b6ac",
    "summary": "engine/assets/import/ImportPipeline.js — orchestrates the ingestion flow (spec §5 pipeline): detect → license-gate → parse → normalize orientation → detect hierarchy/parts/domain → deduplicate/register. GPU upload is a separate explicit step (GpuUploader) because parsing must stay GPU-free and worker-able.",
    "exports": [
      {
        "name": "parseToModel",
        "kind": "function",
        "signature": "async parseToModel(format, data, opts = {})",
        "summary": "Parse raw bytes of a known format into an EngineModel (no GPU, no registry)."
      },
      {
        "name": "importFile",
        "kind": "function",
        "signature": "async importFile(args)",
        "summary": "Full import of a single file."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/import/ObjImporter",
    "path": "engine/reference/assets/import/ObjImporter.md",
    "source": "engine/assets/import/ObjImporter.js",
    "import": "/engine/assets/import/ObjImporter.js",
    "sourceHash": "6be5b53cfeab30b8a2a9b6cc8422e76d7fbfe12ac0e99c3634ebda576daca872",
    "summary": "engine/assets/import/ObjImporter.js — Wavefront OBJ (+ optional MTL) → EngineModel.  OBJ is static geometry + simple material references. We preserve groups/objects and per-face material assignment by splitting into one primitive per material group. Polygons are triangulated (fan). MTL parsing is light (names + a few PBR-ish factors) and the full material decode happens in Phase 2.",
    "exports": [
      {
        "name": "parseMtl",
        "kind": "function",
        "signature": "parseMtl(text)",
        "summary": "Parse a minimal MTL into a map of name → material descriptor."
      },
      {
        "name": "importObj",
        "kind": "function",
        "signature": "importObj(data, opts = {})",
        "summary": "Import OBJ text/bytes into an EngineModel."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/import/OrientationResolver",
    "path": "engine/reference/assets/import/OrientationResolver.md",
    "source": "engine/assets/import/OrientationResolver.js",
    "import": "/engine/assets/import/OrientationResolver.js",
    "sourceHash": "32197f5fccdd200a1e646256b0d6dba37aaf1187fd510f4961cf6e57bd908ba9",
    "summary": "engine/assets/import/OrientationResolver.js — axis/scale/origin inference (spec §6). Never trust source orientation; never bake corrections into source. We infer a non-destructive ImportTransform (axis correction quat + scale + origin) with a confidence, and a policy decides whether to auto-apply, mark reviewable, preview only, or stay neutral and require manual correction.",
    "exports": [
      {
        "name": "classifyConfidence",
        "kind": "function",
        "signature": "classifyConfidence(c)",
        "summary": ""
      },
      {
        "name": "resolveOrientation",
        "kind": "function",
        "signature": "resolveOrientation(model, opts = {})",
        "summary": "Infer an ImportTransform for a model."
      },
      {
        "name": "CONFIDENCE_POLICY",
        "kind": "constant",
        "signature": "CONFIDENCE_POLICY",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/import/PlyImporter",
    "path": "engine/reference/assets/import/PlyImporter.md",
    "source": "engine/assets/import/PlyImporter.js",
    "import": "/engine/assets/import/PlyImporter.js",
    "sourceHash": "fb4d0d16eb083ffa8719149edee418193468036aee354f44f1c89467f9b3a52f",
    "summary": "engine/assets/import/PlyImporter.js — Stanford PLY (ASCII + binary LE) → EngineModel.  PLY is a point/mesh utility format. We read the vertex element (position + optional normal/color) and the face element (triangulated), producing one indexed primitive. Big-endian binary is uncommon for web assets and is not supported here (the editor can flag it).",
    "exports": [
      {
        "name": "importPly",
        "kind": "function",
        "signature": "importPly(data, opts = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/import/StlImporter",
    "path": "engine/reference/assets/import/StlImporter.md",
    "source": "engine/assets/import/StlImporter.js",
    "import": "/engine/assets/import/StlImporter.js",
    "sourceHash": "55daa8dd205faf69683e87d0dc96577878c25179078be68e8f180427da5c8054",
    "summary": "engine/assets/import/StlImporter.js — STL (binary + ASCII) → EngineModel.  STL is CAD/printable part geometry: triangles only, no materials, no hierarchy, no declared units. We import geometry faithfully and leave the unit guess to the OrientationResolver / editor. Output is a single non-indexed primitive with per-vertex positions and face normals.",
    "exports": [
      {
        "name": "importStl",
        "kind": "function",
        "signature": "importStl(data, opts = {})",
        "summary": "Import STL bytes or text into an EngineModel."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/index",
    "path": "engine/reference/assets/index.md",
    "source": "engine/assets/index.js",
    "import": "/engine/assets/index.js",
    "sourceHash": "72b007a62a505f281986f10e4ff2fad818edffcf12299481e69f310c0af65846",
    "summary": "engine/assets/index.js — Global Asset Ingestion Runtime barrel.  Turns any source file into an EngineModel and a usable simulation object: decode → normalize → deduplicate → preserve hierarchy/materials/animations → generate colliders/SDF/rigs/surfaces → cache → spawn.  Build status: [x] Phase 0  foundations (EngineModel, AssetRecord, vpath, canonical space) [x] Phase 1  asset core (dedup, cache/OPFS, registry, resolver, importers) [x] Phase 2  materials & textures (decode, bindings, segments, variants) [x] Phase 3  vehicles (wheel/chassis detect, rig builder, suspension/tire/sync) [x] Render   reusable model rendering (shader/pipeline, GPU drawables, wheel-spin, ModelRenderer) + geometry PCA — shared by demos, editor, and runtime so importing/viewing assets is one call. [ ] Phase 4  render surfaces [ ] Phase 5  humanoids, hands & weapons",
    "exports": [
      {
        "name": "ALPHA_MODE",
        "kind": "re-export",
        "signature": "ALPHA_MODE",
        "summary": ""
      },
      {
        "name": "ASSET_TYPES",
        "kind": "re-export",
        "signature": "ASSET_TYPES",
        "summary": ""
      },
      {
        "name": "AssetCache",
        "kind": "re-export",
        "signature": "AssetCache",
        "summary": ""
      },
      {
        "name": "AssetRegistry",
        "kind": "re-export",
        "signature": "AssetRegistry",
        "summary": ""
      },
      {
        "name": "AssetResolver",
        "kind": "re-export",
        "signature": "AssetResolver",
        "summary": ""
      },
      {
        "name": "BODY_SIDE",
        "kind": "re-export",
        "signature": "BODY_SIDE",
        "summary": ""
      },
      {
        "name": "BRIDGE_FORMATS",
        "kind": "re-export",
        "signature": "BRIDGE_FORMATS",
        "summary": ""
      },
      {
        "name": "CANONICAL",
        "kind": "re-export",
        "signature": "CANONICAL",
        "summary": ""
      },
      {
        "name": "COLOR_SPACE",
        "kind": "re-export",
        "signature": "COLOR_SPACE",
        "summary": ""
      },
      {
        "name": "CONFIDENCE_POLICY",
        "kind": "re-export",
        "signature": "CONFIDENCE_POLICY",
        "summary": ""
      },
      {
        "name": "DEDUP",
        "kind": "re-export",
        "signature": "DEDUP",
        "summary": ""
      },
      {
        "name": "DRIVETRAIN",
        "kind": "re-export",
        "signature": "DRIVETRAIN",
        "summary": ""
      },
      {
        "name": "ENGINE_MODEL_LAYERS",
        "kind": "re-export",
        "signature": "ENGINE_MODEL_LAYERS",
        "summary": ""
      },
      {
        "name": "FINGERS",
        "kind": "re-export",
        "signature": "FINGERS",
        "summary": ""
      },
      {
        "name": "FINGER_JOINTS",
        "kind": "re-export",
        "signature": "FINGER_JOINTS",
        "summary": ""
      },
      {
        "name": "FORMAT_CLASS",
        "kind": "re-export",
        "signature": "FORMAT_CLASS",
        "summary": ""
      },
      {
        "name": "GATE",
        "kind": "re-export",
        "signature": "GATE",
        "summary": ""
      },
      {
        "name": "HAND_SOURCE",
        "kind": "re-export",
        "signature": "HAND_SOURCE",
        "summary": ""
      },
      {
        "name": "HUMANOID_BONES",
        "kind": "re-export",
        "signature": "HUMANOID_BONES",
        "summary": ""
      },
      {
        "name": "IMAGE_FORMATS",
        "kind": "re-export",
        "signature": "IMAGE_FORMATS",
        "summary": ""
      },
      {
        "name": "LIT_MODEL_SHADER",
        "kind": "re-export",
        "signature": "LIT_MODEL_SHADER",
        "summary": ""
      },
      {
        "name": "LicenseTracker",
        "kind": "re-export",
        "signature": "LicenseTracker",
        "summary": ""
      },
      {
        "name": "MODEL_UNIFORM_BYTES",
        "kind": "re-export",
        "signature": "MODEL_UNIFORM_BYTES",
        "summary": ""
      },
      {
        "name": "MODEL_UNIFORM_FLOATS",
        "kind": "re-export",
        "signature": "MODEL_UNIFORM_FLOATS",
        "summary": ""
      },
      {
        "name": "MOVING_PART",
        "kind": "re-export",
        "signature": "MOVING_PART",
        "summary": ""
      },
      {
        "name": "NATIVE_FORMATS",
        "kind": "re-export",
        "signature": "NATIVE_FORMATS",
        "summary": ""
      },
      {
        "name": "REQUIRED_BONES",
        "kind": "re-export",
        "signature": "REQUIRED_BONES",
        "summary": ""
      },
      {
        "name": "REQUIRED_SOCKETS",
        "kind": "re-export",
        "signature": "REQUIRED_SOCKETS",
        "summary": ""
      },
      {
        "name": "SCULPTURE_COURT_BACKDROP_SHADER",
        "kind": "re-export",
        "signature": "SCULPTURE_COURT_BACKDROP_SHADER",
        "summary": ""
      },
      {
        "name": "SCULPTURE_COURT_MODEL_SHADER",
        "kind": "re-export",
        "signature": "SCULPTURE_COURT_MODEL_SHADER",
        "summary": ""
      },
      {
        "name": "SEGMENT_MODE",
        "kind": "re-export",
        "signature": "SEGMENT_MODE",
        "summary": ""
      },
      {
        "name": "STANDARD_STRIDE_FLOATS",
        "kind": "re-export",
        "signature": "STANDARD_STRIDE_FLOATS",
        "summary": ""
      },
      {
        "name": "TEXTURE_SLOTS",
        "kind": "re-export",
        "signature": "TEXTURE_SLOTS",
        "summary": ""
      },
      {
        "name": "TEXTURE_USAGE",
        "kind": "re-export",
        "signature": "TEXTURE_USAGE",
        "summary": ""
      },
      {
        "name": "UNIT_TO_METERS",
        "kind": "re-export",
        "signature": "UNIT_TO_METERS",
        "summary": ""
      },
      {
        "name": "VPATH_SCHEMES",
        "kind": "re-export",
        "signature": "VPATH_SCHEMES",
        "summary": ""
      },
      {
        "name": "WEAPON_EVENT",
        "kind": "re-export",
        "signature": "WEAPON_EVENT",
        "summary": ""
      },
      {
        "name": "WEAPON_INPUT",
        "kind": "re-export",
        "signature": "WEAPON_INPUT",
        "summary": ""
      },
      {
        "name": "WEAPON_SOCKET",
        "kind": "re-export",
        "signature": "WEAPON_SOCKET",
        "summary": ""
      },
      {
        "name": "WEAPON_STATE",
        "kind": "re-export",
        "signature": "WEAPON_STATE",
        "summary": ""
      },
      {
        "name": "WEAPON_TYPE",
        "kind": "re-export",
        "signature": "WEAPON_TYPE",
        "summary": ""
      },
      {
        "name": "WHEEL_PHYSICS_MODE",
        "kind": "re-export",
        "signature": "WHEEL_PHYSICS_MODE",
        "summary": ""
      },
      {
        "name": "WORKFLOW",
        "kind": "re-export",
        "signature": "WORKFLOW",
        "summary": ""
      },
      {
        "name": "advanceSpin",
        "kind": "re-export",
        "signature": "advanceSpin",
        "summary": ""
      },
      {
        "name": "analyzeSymmetry",
        "kind": "re-export",
        "signature": "analyzeSymmetry",
        "summary": ""
      },
      {
        "name": "approximateToMetallicRoughness",
        "kind": "re-export",
        "signature": "approximateToMetallicRoughness",
        "summary": ""
      },
      {
        "name": "axisCorrectionQuat",
        "kind": "re-export",
        "signature": "axisCorrectionQuat",
        "summary": ""
      },
      {
        "name": "axisVector",
        "kind": "re-export",
        "signature": "axisVector",
        "summary": ""
      },
      {
        "name": "backendFromCache",
        "kind": "re-export",
        "signature": "backendFromCache",
        "summary": ""
      },
      {
        "name": "bakeSegment",
        "kind": "re-export",
        "signature": "bakeSegment",
        "summary": ""
      },
      {
        "name": "bakeSkinnedMeshes",
        "kind": "re-export",
        "signature": "bakeSkinnedMeshes",
        "summary": ""
      },
      {
        "name": "boneSide",
        "kind": "re-export",
        "signature": "boneSide",
        "summary": ""
      },
      {
        "name": "buildBindPose",
        "kind": "re-export",
        "signature": "buildBindPose",
        "summary": ""
      },
      {
        "name": "buildHandRig",
        "kind": "re-export",
        "signature": "buildHandRig",
        "summary": ""
      },
      {
        "name": "buildHands",
        "kind": "re-export",
        "signature": "buildHands",
        "summary": ""
      },
      {
        "name": "buildHumanoidRig",
        "kind": "re-export",
        "signature": "buildHumanoidRig",
        "summary": ""
      },
      {
        "name": "buildModelDrawables",
        "kind": "re-export",
        "signature": "buildModelDrawables",
        "summary": ""
      },
      {
        "name": "buildSurfaceBindings",
        "kind": "re-export",
        "signature": "buildSurfaceBindings",
        "summary": ""
      },
      {
        "name": "buildVehicleRig",
        "kind": "re-export",
        "signature": "buildVehicleRig",
        "summary": ""
      },
      {
        "name": "buildWeaponRig",
        "kind": "re-export",
        "signature": "buildWeaponRig",
        "summary": ""
      },
      {
        "name": "buildWheelSpinMap",
        "kind": "re-export",
        "signature": "buildWheelSpinMap",
        "summary": ""
      },
      {
        "name": "cachePathFor",
        "kind": "re-export",
        "signature": "cachePathFor",
        "summary": ""
      },
      {
        "name": "classOf",
        "kind": "re-export",
        "signature": "classOf",
        "summary": ""
      },
      {
        "name": "classify",
        "kind": "re-export",
        "signature": "classify",
        "summary": ""
      },
      {
        "name": "classifyConfidence",
        "kind": "re-export",
        "signature": "classifyConfidence",
        "summary": ""
      },
      {
        "name": "computeWorldMatrices",
        "kind": "re-export",
        "signature": "computeWorldMatrices",
        "summary": ""
      },
      {
        "name": "createAssetRecord",
        "kind": "re-export",
        "signature": "createAssetRecord",
        "summary": ""
      },
      {
        "name": "createDefaultSampler",
        "kind": "re-export",
        "signature": "createDefaultSampler",
        "summary": ""
      },
      {
        "name": "createEngineMaterial",
        "kind": "re-export",
        "signature": "createEngineMaterial",
        "summary": ""
      },
      {
        "name": "createEngineMesh",
        "kind": "re-export",
        "signature": "createEngineMesh",
        "summary": ""
      },
      {
        "name": "createEngineModel",
        "kind": "re-export",
        "signature": "createEngineModel",
        "summary": ""
      },
      {
        "name": "createEngineNode",
        "kind": "re-export",
        "signature": "createEngineNode",
        "summary": ""
      },
      {
        "name": "createEnginePrimitive",
        "kind": "re-export",
        "signature": "createEnginePrimitive",
        "summary": ""
      },
      {
        "name": "createFinger",
        "kind": "re-export",
        "signature": "createFinger",
        "summary": ""
      },
      {
        "name": "createHandRig",
        "kind": "re-export",
        "signature": "createHandRig",
        "summary": ""
      },
      {
        "name": "createHumanoidRig",
        "kind": "re-export",
        "signature": "createHumanoidRig",
        "summary": ""
      },
      {
        "name": "createImportTransform",
        "kind": "re-export",
        "signature": "createImportTransform",
        "summary": ""
      },
      {
        "name": "createLicenseBlock",
        "kind": "re-export",
        "signature": "createLicenseBlock",
        "summary": ""
      },
      {
        "name": "createMaterialVariant",
        "kind": "re-export",
        "signature": "createMaterialVariant",
        "summary": ""
      },
      {
        "name": "createModelPipeline",
        "kind": "re-export",
        "signature": "createModelPipeline",
        "summary": ""
      },
      {
        "name": "createModelRenderer",
        "kind": "re-export",
        "signature": "createModelRenderer",
        "summary": ""
      },
      {
        "name": "createSegmentView",
        "kind": "re-export",
        "signature": "createSegmentView",
        "summary": ""
      },
      {
        "name": "createSuspension",
        "kind": "re-export",
        "signature": "createSuspension",
        "summary": ""
      },
      {
        "name": "createTextureBinding",
        "kind": "re-export",
        "signature": "createTextureBinding",
        "summary": ""
      },
      {
        "name": "createTimelinePlayer",
        "kind": "re-export",
        "signature": "createTimelinePlayer",
        "summary": ""
      },
      {
        "name": "createTireProfile",
        "kind": "re-export",
        "signature": "createTireProfile",
        "summary": ""
      },
      {
        "name": "createVehicleAsset",
        "kind": "re-export",
        "signature": "createVehicleAsset",
        "summary": ""
      },
      {
        "name": "createWeaponAction",
        "kind": "re-export",
        "signature": "createWeaponAction",
        "summary": ""
      },
      {
        "name": "createWeaponRig",
        "kind": "re-export",
        "signature": "createWeaponRig",
        "summary": ""
      },
      {
        "name": "createWeaponStateMachine",
        "kind": "re-export",
        "signature": "createWeaponStateMachine",
        "summary": ""
      },
      {
        "name": "createWheelSlot",
        "kind": "re-export",
        "signature": "createWheelSlot",
        "summary": ""
      },
      {
        "name": "createWhiteTexture",
        "kind": "re-export",
        "signature": "createWhiteTexture",
        "summary": ""
      },
      {
        "name": "decodeAllTextures",
        "kind": "re-export",
        "signature": "decodeAllTextures",
        "summary": ""
      },
      {
        "name": "decodeTexture",
        "kind": "re-export",
        "signature": "decodeTexture",
        "summary": ""
      },
      {
        "name": "defaultChannelMap",
        "kind": "re-export",
        "signature": "defaultChannelMap",
        "summary": ""
      },
      {
        "name": "defaultFireAction",
        "kind": "re-export",
        "signature": "defaultFireAction",
        "summary": ""
      },
      {
        "name": "defaultReloadAction",
        "kind": "re-export",
        "signature": "defaultReloadAction",
        "summary": ""
      },
      {
        "name": "detectChassis",
        "kind": "re-export",
        "signature": "detectChassis",
        "summary": ""
      },
      {
        "name": "detectFormat",
        "kind": "re-export",
        "signature": "detectFormat",
        "summary": ""
      },
      {
        "name": "detectHierarchy",
        "kind": "re-export",
        "signature": "detectHierarchy",
        "summary": ""
      },
      {
        "name": "detectParts",
        "kind": "re-export",
        "signature": "detectParts",
        "summary": ""
      },
      {
        "name": "detectSemanticDomain",
        "kind": "re-export",
        "signature": "detectSemanticDomain",
        "summary": ""
      },
      {
        "name": "detectWeapon",
        "kind": "re-export",
        "signature": "detectWeapon",
        "summary": ""
      },
      {
        "name": "detectWheels",
        "kind": "re-export",
        "signature": "detectWheels",
        "summary": ""
      },
      {
        "name": "eigSym3",
        "kind": "re-export",
        "signature": "eigSym3",
        "summary": ""
      },
      {
        "name": "eventsBetween",
        "kind": "re-export",
        "signature": "eventsBetween",
        "summary": ""
      },
      {
        "name": "extractHandVertices",
        "kind": "re-export",
        "signature": "extractHandVertices",
        "summary": ""
      },
      {
        "name": "frameBounds",
        "kind": "re-export",
        "signature": "frameBounds",
        "summary": ""
      },
      {
        "name": "freeRollAngularVelocity",
        "kind": "re-export",
        "signature": "freeRollAngularVelocity",
        "summary": ""
      },
      {
        "name": "generateFingers",
        "kind": "re-export",
        "signature": "generateFingers",
        "summary": ""
      },
      {
        "name": "hasTextureTransform",
        "kind": "re-export",
        "signature": "hasTextureTransform",
        "summary": ""
      },
      {
        "name": "hashContent",
        "kind": "re-export",
        "signature": "hashContent",
        "summary": ""
      },
      {
        "name": "healHumanoid",
        "kind": "re-export",
        "signature": "healHumanoid",
        "summary": ""
      },
      {
        "name": "healSkeleton",
        "kind": "re-export",
        "signature": "healSkeleton",
        "summary": ""
      },
      {
        "name": "humanoidBonePosition",
        "kind": "re-export",
        "signature": "humanoidBonePosition",
        "summary": ""
      },
      {
        "name": "importFile",
        "kind": "re-export",
        "signature": "importFile",
        "summary": ""
      },
      {
        "name": "importGltf",
        "kind": "re-export",
        "signature": "importGltf",
        "summary": ""
      },
      {
        "name": "importMaterials",
        "kind": "re-export",
        "signature": "importMaterials",
        "summary": ""
      },
      {
        "name": "importMatrixOf",
        "kind": "re-export",
        "signature": "importMatrixOf",
        "summary": ""
      },
      {
        "name": "importObj",
        "kind": "re-export",
        "signature": "importObj",
        "summary": ""
      },
      {
        "name": "importPly",
        "kind": "re-export",
        "signature": "importPly",
        "summary": ""
      },
      {
        "name": "importStl",
        "kind": "re-export",
        "signature": "importStl",
        "summary": ""
      },
      {
        "name": "interleaveStandard",
        "kind": "re-export",
        "signature": "interleaveStandard",
        "summary": ""
      },
      {
        "name": "invert4",
        "kind": "re-export",
        "signature": "invert4",
        "summary": ""
      },
      {
        "name": "isVPath",
        "kind": "re-export",
        "signature": "isVPath",
        "summary": ""
      },
      {
        "name": "jointPosition",
        "kind": "re-export",
        "signature": "jointPosition",
        "summary": ""
      },
      {
        "name": "layerStatus",
        "kind": "re-export",
        "signature": "layerStatus",
        "summary": ""
      },
      {
        "name": "leastVarianceAxis",
        "kind": "re-export",
        "signature": "leastVarianceAxis",
        "summary": ""
      },
      {
        "name": "licenseNeedsReview",
        "kind": "re-export",
        "signature": "licenseNeedsReview",
        "summary": ""
      },
      {
        "name": "longitudinalSlip",
        "kind": "re-export",
        "signature": "longitudinalSlip",
        "summary": ""
      },
      {
        "name": "makeFetchBackend",
        "kind": "re-export",
        "signature": "makeFetchBackend",
        "summary": ""
      },
      {
        "name": "makeGpuTexture",
        "kind": "re-export",
        "signature": "makeGpuTexture",
        "summary": ""
      },
      {
        "name": "makeMemoryBackend",
        "kind": "re-export",
        "signature": "makeMemoryBackend",
        "summary": ""
      },
      {
        "name": "makeVPath",
        "kind": "re-export",
        "signature": "makeVPath",
        "summary": ""
      },
      {
        "name": "mapBones",
        "kind": "re-export",
        "signature": "mapBones",
        "summary": ""
      },
      {
        "name": "mapFingers",
        "kind": "re-export",
        "signature": "mapFingers",
        "summary": ""
      },
      {
        "name": "mat3ToQuat",
        "kind": "re-export",
        "signature": "mat3ToQuat",
        "summary": ""
      },
      {
        "name": "mirrorBone",
        "kind": "re-export",
        "signature": "mirrorBone",
        "summary": ""
      },
      {
        "name": "normalizeSegments",
        "kind": "re-export",
        "signature": "normalizeSegments",
        "summary": ""
      },
      {
        "name": "normalizeTextures",
        "kind": "re-export",
        "signature": "normalizeTextures",
        "summary": ""
      },
      {
        "name": "parseGlb",
        "kind": "re-export",
        "signature": "parseGlb",
        "summary": ""
      },
      {
        "name": "parseMtl",
        "kind": "re-export",
        "signature": "parseMtl",
        "summary": ""
      },
      {
        "name": "parseToModel",
        "kind": "re-export",
        "signature": "parseToModel",
        "summary": ""
      },
      {
        "name": "parseVPath",
        "kind": "re-export",
        "signature": "parseVPath",
        "summary": ""
      },
      {
        "name": "pivotSpin",
        "kind": "re-export",
        "signature": "pivotSpin",
        "summary": ""
      },
      {
        "name": "primitiveColor",
        "kind": "re-export",
        "signature": "primitiveColor",
        "summary": ""
      },
      {
        "name": "principalAxes",
        "kind": "re-export",
        "signature": "principalAxes",
        "summary": ""
      },
      {
        "name": "releaseDrawables",
        "kind": "re-export",
        "signature": "releaseDrawables",
        "summary": ""
      },
      {
        "name": "releaseModelGpu",
        "kind": "re-export",
        "signature": "releaseModelGpu",
        "summary": ""
      },
      {
        "name": "resolveOrientation",
        "kind": "re-export",
        "signature": "resolveOrientation",
        "summary": ""
      },
      {
        "name": "restoreOriginal",
        "kind": "re-export",
        "signature": "restoreOriginal",
        "summary": ""
      },
      {
        "name": "rollAngle",
        "kind": "re-export",
        "signature": "rollAngle",
        "summary": ""
      },
      {
        "name": "rotAxis",
        "kind": "re-export",
        "signature": "rotAxis",
        "summary": ""
      },
      {
        "name": "rotateVecByQuat",
        "kind": "re-export",
        "signature": "rotateVecByQuat",
        "summary": ""
      },
      {
        "name": "sniffMagic",
        "kind": "re-export",
        "signature": "sniffMagic",
        "summary": ""
      },
      {
        "name": "standardVertexLayout",
        "kind": "re-export",
        "signature": "standardVertexLayout",
        "summary": ""
      },
      {
        "name": "suspensionForce",
        "kind": "re-export",
        "signature": "suspensionForce",
        "summary": ""
      },
      {
        "name": "tireForce",
        "kind": "re-export",
        "signature": "tireForce",
        "summary": ""
      },
      {
        "name": "unitScaleToMeters",
        "kind": "re-export",
        "signature": "unitScaleToMeters",
        "summary": ""
      },
      {
        "name": "uploadModel",
        "kind": "re-export",
        "signature": "uploadModel",
        "summary": ""
      },
      {
        "name": "uploadModelTextures",
        "kind": "re-export",
        "signature": "uploadModelTextures",
        "summary": ""
      },
      {
        "name": "uploadPrimitive",
        "kind": "re-export",
        "signature": "uploadPrimitive",
        "summary": ""
      },
      {
        "name": "vehicleComposeTRS",
        "kind": "re-export",
        "signature": "vehicleComposeTRS",
        "summary": ""
      },
      {
        "name": "vehicleTransformPoint",
        "kind": "re-export",
        "signature": "vehicleTransformPoint",
        "summary": ""
      },
      {
        "name": "visualWheelMatrix",
        "kind": "re-export",
        "signature": "visualWheelMatrix",
        "summary": ""
      },
      {
        "name": "vpathBasename",
        "kind": "re-export",
        "signature": "vpathBasename",
        "summary": ""
      },
      {
        "name": "vpathExtension",
        "kind": "re-export",
        "signature": "vpathExtension",
        "summary": ""
      },
      {
        "name": "withScheme",
        "kind": "re-export",
        "signature": "withScheme",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/material/EngineMaterial",
    "path": "engine/reference/assets/material/EngineMaterial.md",
    "source": "engine/assets/material/EngineMaterial.js",
    "import": "/engine/assets/material/EngineMaterial.js",
    "sourceHash": "5263a4543010e12caf42252671ca0f259cc28a9ed32ac3643a6e2c6303b0c729",
    "summary": "engine/assets/material/EngineMaterial.js — normalized material + texture binding schemas (spec §7). Materials are decoded, not guessed. Textures bind to surfaces (not loose images); UV sets, sampler wrap/filter, and texture transforms must survive import; packed channels are read exactly. The raw source material is always preserved on `.original` so the imported look stays recoverable even after engine normalization or shader-model approximation.",
    "exports": [
      {
        "name": "defaultChannelMap",
        "kind": "function",
        "signature": "defaultChannelMap(slot)",
        "summary": "glTF default packing: metallic=B, roughness=G, occlusion=R."
      },
      {
        "name": "createEngineMaterial",
        "kind": "function",
        "signature": "createEngineMaterial(init = {})",
        "summary": "Create a normalized engine material."
      },
      {
        "name": "createTextureBinding",
        "kind": "function",
        "signature": "createTextureBinding(init = {})",
        "summary": "Create a texture binding (a texture bound to a material slot on a surface)."
      },
      {
        "name": "hasTextureTransform",
        "kind": "function",
        "signature": "hasTextureTransform(binding)",
        "summary": "Has this binding a non-identity UV transform (KHR_texture_transform)?"
      },
      {
        "name": "WORKFLOW",
        "kind": "constant",
        "signature": "WORKFLOW",
        "summary": ""
      },
      {
        "name": "ALPHA_MODE",
        "kind": "constant",
        "signature": "ALPHA_MODE",
        "summary": ""
      },
      {
        "name": "TEXTURE_SLOTS",
        "kind": "constant",
        "signature": "TEXTURE_SLOTS",
        "summary": ""
      },
      {
        "name": "COLOR_SPACE",
        "kind": "constant",
        "signature": "COLOR_SPACE",
        "summary": ""
      },
      {
        "name": "TEXTURE_USAGE",
        "kind": "constant",
        "signature": "TEXTURE_USAGE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/material/MaterialImport",
    "path": "engine/reference/assets/material/MaterialImport.md",
    "source": "engine/assets/material/MaterialImport.js",
    "import": "/engine/assets/material/MaterialImport.js",
    "sourceHash": "da7e38b82758c500023db3f6794903b0966414587abe40c284879193041c1f18",
    "summary": "engine/assets/material/MaterialImport.js — decode source materials into the normalized EngineMaterial (spec §7). Materials are decoded exactly, never guessed: UV sets, sampler wrap/filter, and KHR_texture_transform survive; packed channels are read per the format (metadata wins over filename). The raw material is preserved on `.original` so the imported look stays recoverable.",
    "exports": [
      {
        "name": "importMaterials",
        "kind": "function",
        "signature": "importMaterials(model)",
        "summary": "Decode every material in a model into EngineMaterial in place. Idempotent: a material already carrying `.original` is left untouched."
      },
      {
        "name": "ALPHA_MODE",
        "kind": "re-export",
        "signature": "ALPHA_MODE",
        "summary": ""
      },
      {
        "name": "WORKFLOW",
        "kind": "re-export",
        "signature": "WORKFLOW",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/material/MaterialVariant",
    "path": "engine/reference/assets/material/MaterialVariant.md",
    "source": "engine/assets/material/MaterialVariant.js",
    "import": "/engine/assets/material/MaterialVariant.js",
    "sourceHash": "7afaca740fffc5347263d83dbe15e44a96075b1161ab797aea87e2db18e66bc8",
    "summary": "engine/assets/material/MaterialVariant.js — variants + shader-model fallback (spec §7). Imported materials won't always match the engine shader model, so we normalize into EngineMaterial, can generate a metallic-roughness fallback approximation when needed, and always keep the original recoverable. Variants (e.g. a re-tinted body panel) share the source material and only narrow/adjust.",
    "exports": [
      {
        "name": "createMaterialVariant",
        "kind": "function",
        "signature": "createMaterialVariant(base, overrides = {})",
        "summary": "Create a material variant that overrides a few fields of a base material while preserving the original (recoverable) and recording the variant lineage."
      },
      {
        "name": "approximateToMetallicRoughness",
        "kind": "function",
        "signature": "approximateToMetallicRoughness(material)",
        "summary": "Approximate a non-metallic-roughness material as metallic-roughness for the engine's PBR shader. The original is preserved so the imported look can always be restored. This is a deliberate, labelled approximation — not an exact port."
      },
      {
        "name": "restoreOriginal",
        "kind": "function",
        "signature": "restoreOriginal(material)",
        "summary": "Restore the original imported material descriptor (the raw source block)."
      },
      {
        "name": "COLOR_SPACE",
        "kind": "re-export",
        "signature": "COLOR_SPACE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/material/SegmentView",
    "path": "engine/reference/assets/material/SegmentView.md",
    "source": "engine/assets/material/SegmentView.js",
    "import": "/engine/assets/material/SegmentView.js",
    "sourceHash": "59cbce841d98a50317470dee357ebac013ec5ed1bd41acf8df4aa181150912f5",
    "summary": "engine/assets/material/SegmentView.js — non-destructive segmentation (spec §8).  We need modular breaking (swap tires, detach doors, tint glass, split a magazine) WITHOUT destroying the source. A SegmentView references original primitive ids / index ranges / materials — it never copies or rewrites geometry. A physical split is only baked later, on export or when a detachable part is actually created. This keeps skeletons, UVs, and morph targets intact.",
    "exports": [
      {
        "name": "createSegmentView",
        "kind": "function",
        "signature": "createSegmentView(model, mode = SEGMENT_MODE.MATERIAL)",
        "summary": "Create a non-destructive segment view of a model."
      },
      {
        "name": "bakeSegment",
        "kind": "function",
        "signature": "bakeSegment(model, segmentView, segmentKey)",
        "summary": "Bake a single segment into a standalone EngineModel-like payload (only when a detachable part is actually needed — e.g. export). Geometry is copied here, the source model is left untouched."
      },
      {
        "name": "SEGMENT_MODE",
        "kind": "constant",
        "signature": "SEGMENT_MODE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/material/SurfaceBinding",
    "path": "engine/reference/assets/material/SurfaceBinding.md",
    "source": "engine/assets/material/SurfaceBinding.js",
    "import": "/engine/assets/material/SurfaceBinding.js",
    "sourceHash": "8ec083e0428da712dafe8880c3bd63a03e1f76acb70d34b05d1424212db7feb4",
    "summary": "engine/assets/material/SurfaceBinding.js — bind materials to surfaces (spec §7).  Material assignment happens at the primitive/submesh level, not per-image. A SurfaceBinding records exactly which node/mesh/primitive a material covers, which UV set it uses, and (when known) the semantic part — so segmentation and editing can target real surfaces and bindings survive non-destructive splits.",
    "exports": [
      {
        "name": "buildSurfaceBindings",
        "kind": "function",
        "signature": "buildSurfaceBindings(model)",
        "summary": "Build surface bindings for a model (material ↔ primitive). Populates model.surfaceBindings and returns them."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/material/TextureImport",
    "path": "engine/reference/assets/material/TextureImport.md",
    "source": "engine/assets/material/TextureImport.js",
    "import": "/engine/assets/material/TextureImport.js",
    "sourceHash": "69b4d12fac4a38ef129660fef6d7f2eab09611c7f10ca8102fc9cd01cbc6b544",
    "summary": "engine/assets/material/TextureImport.js — normalize textures + decode pixels (spec §7). A texture's colour space and usage are inferred from the material slots that bind it (sRGB for colour/emissive, linear for data/normal/ORM), so the same image used as colour vs data is handled correctly. Pixel decode is a separate, browser-only step (createImageBitmap) kept out of parsing. KTX2/ Basis stay compressed here and are routed by TextureManager to the existing native upload or registered decoder/transcoder hook path.",
    "exports": [
      {
        "name": "normalizeTextures",
        "kind": "function",
        "signature": "normalizeTextures(model)",
        "summary": "Infer per-texture colour space + usage from the decoded material bindings, and normalize model.textures into self-describing EngineTexture records. Requires importMaterials() to have run first (so bindings exist)."
      },
      {
        "name": "decodeTexture",
        "kind": "function",
        "signature": "async decodeTexture(tex)",
        "summary": "Decode a normalized texture's pixels to an ImageBitmap (browser only). Returns the bitmap (also cached on the texture) or null when undecodable (no bytes, external uri, or a compressed format with no transcoder)."
      },
      {
        "name": "decodeAllTextures",
        "kind": "function",
        "signature": "async decodeAllTextures(model)",
        "summary": "Decode every decodable texture in a model. Returns the count decoded."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/material/composite/CompositeMaterialContracts",
    "path": "engine/reference/assets/material/composite/CompositeMaterialContracts.md",
    "source": "engine/assets/material/composite/CompositeMaterialContracts.js",
    "import": "/engine/assets/material/composite/CompositeMaterialContracts.js",
    "sourceHash": "76f00592a36bbf5ad2ac8534c0489ff44bd96f0f7bcd26817281bfacd381b0ea",
    "summary": "Strict, app-neutral contracts for immutable composite material data.",
    "exports": [
      {
        "name": "isPlainCompositeMaterialObject",
        "kind": "function",
        "signature": "isPlainCompositeMaterialObject(value)",
        "summary": ""
      },
      {
        "name": "validateCompositeMaterialFacets",
        "kind": "function",
        "signature": "validateCompositeMaterialFacets(value, path = '$.facets')",
        "summary": ""
      },
      {
        "name": "validateCompositeMaterialProvenance",
        "kind": "function",
        "signature": "validateCompositeMaterialProvenance({ facets, sources, fieldSources }, path = '$')",
        "summary": ""
      },
      {
        "name": "validateEngineCompositeMaterialResource",
        "kind": "function",
        "signature": "validateEngineCompositeMaterialResource(value, path = '$')",
        "summary": "Validate a complete built-in catalog resource. Returns the input unchanged."
      },
      {
        "name": "ENGINE_COMPOSITE_MATERIAL_SCHEMA",
        "kind": "constant",
        "signature": "ENGINE_COMPOSITE_MATERIAL_SCHEMA",
        "summary": ""
      },
      {
        "name": "ENGINE_COMPOSITE_MATERIAL_VERSION",
        "kind": "constant",
        "signature": "ENGINE_COMPOSITE_MATERIAL_VERSION",
        "summary": ""
      },
      {
        "name": "COMPOSITE_MATERIAL_FACETS",
        "kind": "constant",
        "signature": "COMPOSITE_MATERIAL_FACETS",
        "summary": ""
      },
      {
        "name": "COMPOSITE_MATERIAL_FACET_FIELDS",
        "kind": "constant",
        "signature": "COMPOSITE_MATERIAL_FACET_FIELDS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/material/composite/EngineCompositeMaterialCatalog",
    "path": "engine/reference/assets/material/composite/EngineCompositeMaterialCatalog.md",
    "source": "engine/assets/material/composite/EngineCompositeMaterialCatalog.js",
    "import": "/engine/assets/material/composite/EngineCompositeMaterialCatalog.js",
    "sourceHash": "6f53168c9843e015d4bfdd7fefe369109990f9b40187e0a20a867b5caf53202f",
    "summary": "Browser-native JSON loader. Callers may inject an equivalent fetch boundary.",
    "exports": [
      {
        "name": "EngineCompositeMaterialCatalog",
        "kind": "class",
        "signature": "class EngineCompositeMaterialCatalog",
        "summary": ""
      },
      {
        "name": "loadEngineCompositeMaterialCatalog",
        "kind": "function",
        "signature": "async loadEngineCompositeMaterialCatalog({ fetchImpl = globalThis.fetch, urls = ENGINE_COMPOSITE_MATERIAL_RESOURCE_URLS, } = {})",
        "summary": "Browser-native JSON loader. Callers may inject an equivalent fetch boundary."
      },
      {
        "name": "ENGINE_COMPOSITE_MATERIAL_RESOURCE_URLS",
        "kind": "constant",
        "signature": "ENGINE_COMPOSITE_MATERIAL_RESOURCE_URLS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/material/composite/index",
    "path": "engine/reference/assets/material/composite/index.md",
    "source": "engine/assets/material/composite/index.js",
    "import": "/engine/assets/material/composite/index.js",
    "sourceHash": "2ceda7202ea6cdeadd439ee7f876432743481f80d5633533339ed0e0e9b34c8a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "assets/render/ModelGpu",
    "path": "engine/reference/assets/render/ModelGpu.md",
    "source": "engine/assets/render/ModelGpu.js",
    "import": "/engine/assets/render/ModelGpu.js",
    "sourceHash": "44186713557f036c993cb9325b5a3461167457943f8d587cd3c06390fdd0e74e",
    "summary": "engine/assets/render/ModelGpu.js — reusable GPU-side helpers to turn an uploaded EngineModel into drawable items. Small, composable, and shared by the importer/viewer, the editor, and the runtime so nobody re-implements texture upload, per-primitive bind groups, world-matrix flattening, or bounds framing.  Pairs with ModelShader (uniform block) and GpuUploader (vertex layout). Pure data in → GPU objects out; callers own the render pass and camera.",
    "exports": [
      {
        "name": "createDefaultSampler",
        "kind": "function",
        "signature": "createDefaultSampler(device)",
        "summary": "A linear, repeating sampler — a sane default for model albedo."
      },
      {
        "name": "createWhiteTexture",
        "kind": "function",
        "signature": "createWhiteTexture(device)",
        "summary": "A 1×1 white texture so untextured primitives sample white (albedo = color)."
      },
      {
        "name": "makeGpuTexture",
        "kind": "function",
        "signature": "makeGpuTexture(device, bitmap, srgb)",
        "summary": "Upload one decoded bitmap to a GPU texture (sRGB for colour, linear for data)."
      },
      {
        "name": "uploadModelTextures",
        "kind": "function",
        "signature": "async uploadModelTextures(device, model)",
        "summary": "Decode + upload every embedded texture in a model."
      },
      {
        "name": "primitiveColor",
        "kind": "function",
        "signature": "primitiveColor(model, prim)",
        "summary": "Deterministic fallback colour for a primitive lacking a baseColorFactor."
      },
      {
        "name": "buildModelDrawables",
        "kind": "function",
        "signature": "buildModelDrawables(device, model, opts)",
        "summary": "Build drawable items for an uploaded model: one per primitive, each with its world draw matrix, uniform buffer, bind group, fallback colour, and (optional) wheel-spin descriptor keyed by node id."
      },
      {
        "name": "bakeSkinnedMeshes",
        "kind": "function",
        "signature": "bakeSkinnedMeshes(model)",
        "summary": "CPU-skin every skinned mesh to its DEFAULT pose so the static viewer draws the mesh wrapped around the node-hierarchy skeleton (per the glTF rule that a skinned mesh's own node transform is ignored). For each skinned vertex: v' = Σ wⱼ · (jointNodeWorld(j) · inverseBindMatrix(j)) · v   (scene space) Positions/normals are replaced in place (original kept on `_bindPosition`) and the primitive is flagged `_skinnedBaked`. No-op without skins/IBMs. GPU-free."
      },
      {
        "name": "releaseDrawables",
        "kind": "function",
        "signature": "releaseDrawables(items)",
        "summary": "Free per-item uniform buffers built by buildModelDrawables."
      },
      {
        "name": "frameBounds",
        "kind": "function",
        "signature": "frameBounds(items)",
        "summary": "World-space bounds of a set of drawables, for camera framing."
      },
      {
        "name": "importMatrixOf",
        "kind": "function",
        "signature": "importMatrixOf(model)",
        "summary": "Compose the standard import-correction matrix from a model's importTransform."
      },
      {
        "name": "nodeLocalMatrix",
        "kind": "re-export",
        "signature": "nodeLocalMatrix",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/render/ModelRenderer",
    "path": "engine/reference/assets/render/ModelRenderer.md",
    "source": "engine/assets/render/ModelRenderer.js",
    "import": "/engine/assets/render/ModelRenderer.js",
    "sourceHash": "c6a36dd5b5da0e229d6e60e1e4b8f1c70c3130a51aeb0a2f8b098418e9445f29",
    "summary": "engine/assets/render/ModelRenderer.js — the batteries-included way to draw an EngineModel. It composes the small render modules (ModelShader + ModelGpu) and the vehicle wheel-spin helper, applying sensible DEFAULTS so any engine system can go from \"I have an EngineModel\" to \"it's on screen\" in two calls:  const r = createModelRenderer(device, { format }); await r.setModel(model, { wheelSpin: true, rig });   // upload + drawables per frame: r.render(pass, { mvp, eye, distance });  The caller still owns the render pass + camera (so it slots into any pipeline); the renderer owns the model's GPU lifetime and offers a depth-texture + camera- framing convenience. Override the shader/format/cull via opts when needed.",
    "exports": [
      {
        "name": "createModelRenderer",
        "kind": "function",
        "signature": "createModelRenderer(device, opts = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/render/ModelShader",
    "path": "engine/reference/assets/render/ModelShader.md",
    "source": "engine/assets/render/ModelShader.js",
    "import": "/engine/assets/render/ModelShader.js",
    "sourceHash": "b1420623bb52cc09c9245fb726251b7f616554f3d45f9032474717a8cc637a36",
    "summary": "engine/assets/render/ModelShader.js — the default lit WGSL shader + pipeline for drawing an EngineModel's standard-layout primitives. Small and overridable: any engine system can grab LIT_MODEL_SHADER for a sensible default, or pass its own WGSL to createModelPipeline. The shader pairs with standardVertexLayout() (pos3 + nrm3 + uv2) and the 160-byte uniform block written by ModelGpu.",
    "exports": [
      {
        "name": "createModelPipeline",
        "kind": "function",
        "signature": "createModelPipeline(device, opts = {})",
        "summary": "Build the render pipeline for EngineModel primitives."
      },
      {
        "name": "MODEL_UNIFORM_BYTES",
        "kind": "constant",
        "signature": "MODEL_UNIFORM_BYTES",
        "summary": ""
      },
      {
        "name": "MODEL_UNIFORM_FLOATS",
        "kind": "constant",
        "signature": "MODEL_UNIFORM_FLOATS",
        "summary": ""
      },
      {
        "name": "LIT_MODEL_SHADER",
        "kind": "constant",
        "signature": "LIT_MODEL_SHADER",
        "summary": "A neutral physically-plausible lit shader with albedo floor + additive rim."
      },
      {
        "name": "SCULPTURE_COURT_MODEL_SHADER",
        "kind": "constant",
        "signature": "SCULPTURE_COURT_MODEL_SHADER",
        "summary": "Gallery raster lighting derived from the Astral Sculpture Court studies: warm broad key, restrained green-cyan fill, cool portal rim, park/studio environment response, Khronos PBR Neutral, and stable one-LSB dithering. It deliberately preserves the default renderer bind/uniform contract."
      },
      {
        "name": "SCULPTURE_COURT_BACKDROP_SHADER",
        "kind": "constant",
        "signature": "SCULPTURE_COURT_BACKDROP_SHADER",
        "summary": "Full-screen gallery/park environment paired with the sculpture shader."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/BodyTemplateExport",
    "path": "engine/reference/assets/rig/BodyTemplateExport.md",
    "source": "engine/assets/rig/BodyTemplateExport.js",
    "import": "/engine/assets/rig/BodyTemplateExport.js",
    "sourceHash": "1d06fcadb655308eef0a6e35413bc074674226b481d6d412aa8888696d8cc96e",
    "summary": "engine/assets/rig/BodyTemplateExport.js — turn a generated `CharacterPhysicsAsset` into a starting-point `life.body.v1`-shaped body template JSON (the schema `Life/data/bodies/*.json` + `engine/assets/rig/active-body/BodyAssembler.js` consume).  This mirrors how every mainstream engine handles the generated-vs-hand-authored split (Unreal's Physics Asset auto-generate, Unity's Ragdoll Wizard, Godot's \"Create Physical Skeleton\"): the generator produces a complete, valid STARTING POINT for skeleton/joint/collision structure — never silently re-applied over hand-tuned data afterward. A dev generates this once for a new creature/character variant, saves it as a plain JSON file, and hand-tunes gameplay-only concerns on top (anatomy/organs, ligaments, muscle model, strength/mass presets) that have no generator and are intentionally hand-authored. This is the \"easy for devs to achieve anything\" on-ramp: zero-authoring skeleton for a new body, full hand-tuning power afterward.",
    "exports": [
      {
        "name": "characterPhysicsAssetToBodyTemplate",
        "kind": "function",
        "signature": "characterPhysicsAssetToBodyTemplate(asset, opts = {})",
        "summary": "Convert a `CharacterPhysicsAsset` (from `createCharacterPhysicsAsset()`) into a `life.body.v1` body template — a ready-to-save JSON starting point for a new creature/character variant. Only the skeleton/joint/collision structure is generated; `anatomy`/`ligaments`/`muscleModel`/`presets` are left as explicit, clearly-commented empty stubs since no generator authors those — every mainstream engine's ragdoll generator stops at the same boundary."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/CharacterPhysicsAsset",
    "path": "engine/reference/assets/rig/CharacterPhysicsAsset.md",
    "source": "engine/assets/rig/CharacterPhysicsAsset.js",
    "import": "/engine/assets/rig/CharacterPhysicsAsset.js",
    "sourceHash": "4ed8411eaa0e53054ff4c5471d47644968e21da0eb4e4a556dfb0d2228c66ccf",
    "summary": "engine/assets/rig/CharacterPhysicsAsset.js — the single generated packaging layer for a character's physics structure. This is NOT a new generator: it wraps `buildRagdoll()` (RagdollBuilder.js) + `buildJointLimits()` (JointLimits.js) and repackages their output into one serializable schema that every consumer (ActiveRigController/PhysX, RagdollSim, RagdollSkinning, Life's BodyAssembler, RealmForge's compilers, legacy PBDRagdoll wrapper) can read instead of inventing its own bone/joint shape. GPU-free + deterministic.  Schema fields: skeletonFingerprint, boneMap, bodyDefs, jointDefs, jointLimits, massProfile, collisionFilters, driveProfiles, skinningOffsets, particleCageDef (reserved for the future flesh-cage system), validationReport.",
    "exports": [
      {
        "name": "computeSkeletonFingerprint",
        "kind": "function",
        "signature": "computeSkeletonFingerprint(bodyDefs)",
        "summary": "Stable fingerprint for a bone topology — same skeleton shape (names + parent links, order-independent per bone but position-stable) hashes the same way twice. Used to detect when a cached CharacterPhysicsAsset can be reused vs. must be rebuilt."
      },
      {
        "name": "createCharacterPhysicsAsset",
        "kind": "function",
        "signature": "createCharacterPhysicsAsset(model, opts = {})",
        "summary": "Build a `CharacterPhysicsAsset` for a model. Humanoid path when a humanoid rig is present, otherwise generic topology — identical branch selection to `buildRagdoll()`, which this function delegates to."
      },
      {
        "name": "validateCharacterPhysicsAsset",
        "kind": "function",
        "signature": "validateCharacterPhysicsAsset(asset)",
        "summary": "Validate a CharacterPhysicsAsset's internal consistency (indices resolve, joint types known, mass/limit values finite). Follows the same `{ ok, errors, warnings, counts }` pattern as Life's `BodySpecValidator.js`, adapted to this schema's shape."
      },
      {
        "name": "CHARACTER_PHYSICS_ASSET_SCHEMA_VERSION",
        "kind": "constant",
        "signature": "CHARACTER_PHYSICS_ASSET_SCHEMA_VERSION",
        "summary": ""
      },
      {
        "name": "inferDriveType",
        "kind": "re-export",
        "signature": "inferDriveType",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/JointLimits",
    "path": "engine/reference/assets/rig/JointLimits.md",
    "source": "engine/assets/rig/JointLimits.js",
    "import": "/engine/assets/rig/JointLimits.js",
    "sourceHash": "819bd4dca674bea5ddf92ad8d79541ce11cac04ec5c02ed31ff5cefc0d03f49f",
    "summary": "engine/assets/rig/JointLimits.js — automatically derive per-joint movement limits (range of motion) from a model, the way Life's BodyAssembler does it: every joint gets a TYPE (ball / hinge / saddle / twist / root) plus a swing cone + twist limit (degrees → radians), and hinge joints get a bend AXIS taken from the bind-pose geometry (perpendicular to the parent→joint→child bend plane). Two paths: • humanoid — role-based anatomical profile keyed by canonical bone slots. • generic  — topology inference (children count + segment straightness) so spiders, dogs, cats, birds, etc. get sensible limits with no template: hub/limb-root joints → ball, straight mid-limb segments → hinge, leaves → fixed. GPU-free + deterministic → gate-testable.",
    "exports": [
      {
        "name": "hingeAxis",
        "kind": "function",
        "signature": "hingeAxis(parentPos, jointPos, childPos)",
        "summary": "Hinge bend axis = normal of the parent→joint→child plane (the axis a knee/elbow actually bends about). Falls back to a perpendicular of the bone direction."
      },
      {
        "name": "deriveJointType",
        "kind": "function",
        "signature": "deriveJointType(prof)",
        "summary": "Joint type carried by an anatomical profile (ball/hinge/saddle/twist/root)."
      },
      {
        "name": "deriveSwingCone",
        "kind": "function",
        "signature": "deriveSwingCone(prof)",
        "summary": "Swing-cone half-angle (degrees) carried by a profile."
      },
      {
        "name": "deriveHingeLimit",
        "kind": "function",
        "signature": "deriveHingeLimit(prof)",
        "summary": "Hinge bend-range (degrees). By Life's hinge convention this value is carried in the profile's `twist` field (a hinge drives one axis), so this is semantically distinct from `deriveTwistLimit` even though both read the same underlying number for a hinge profile."
      },
      {
        "name": "deriveTwistLimit",
        "kind": "function",
        "signature": "deriveTwistLimit(prof)",
        "summary": "Twist limit (degrees) for a non-hinge (ball/saddle/twist) profile."
      },
      {
        "name": "mirrorLeftRightLimits",
        "kind": "function",
        "signature": "mirrorLeftRightLimits(leftLimit, rightLimit)",
        "summary": "Verify (and defensively enforce) left/right symmetry between two derived limits — swing/twist degrees must match (anatomy is bilaterally symmetric); axes are expected to differ (mirrored bind-pose geometry) and are left untouched. Explicit, testable version of the symmetry `profileFor()` already guarantees implicitly by stripping the left/right prefix before profile lookup."
      },
      {
        "name": "inferDriveType",
        "kind": "function",
        "signature": "inferDriveType(name = '')",
        "summary": "Infer a coarse drive role (neck/shoulder/elbow/wrist/spineUpper/pelvis/hip/ knee/ankle/toe/default) from a bone/slot name via string matching. Shared so RagdollBuilder, CharacterPhysicsAsset, and future adapters don't each reimplement this heuristic independently."
      },
      {
        "name": "deriveHumanoidJointLimits",
        "kind": "function",
        "signature": "deriveHumanoidJointLimits(model, pose)",
        "summary": "Derive joint limits for a humanoid rig."
      },
      {
        "name": "deriveSkeletonJointLimits",
        "kind": "function",
        "signature": "deriveSkeletonJointLimits(model, pose)",
        "summary": "Derive joint limits for ANY skeleton by topology + geometry (spiders, dogs, cats, birds…). No names required."
      },
      {
        "name": "validJointTypeSet",
        "kind": "function",
        "signature": "validJointTypeSet()",
        "summary": "The set of valid joint-type strings (`root`/`ball`/`hinge`/`saddle`/`twist`/ `fixed`) as a `Set`, for membership checks — single source of truth so a validator never hand-declares its own copy that can silently drift from `JOINT_TYPE` (this is exactly how `CharacterPhysicsAsset.js` and Life's `BodySpecValidator.js` used to each keep their own disconnected copy)."
      },
      {
        "name": "validateBoneTopology",
        "kind": "function",
        "signature": "validateBoneTopology(bones)",
        "summary": "Shared bone-topology structural validation — the literally-duplicated core every ragdoll/body validator needs (bone id uniqueness, parent-reference resolution), extracted once so `CharacterPhysicsAsset.validateCharacterPhysicsAsset` and Life's `BodySpecValidator.validateBodyTemplate` can never silently drift apart on these checks again. Each caller still owns its own shape-specific checks (mass/position for CharacterPhysicsAsset; anatomy/ligaments/skeleton extensions for Life)."
      },
      {
        "name": "countTypes",
        "kind": "function",
        "signature": "countTypes(limits)",
        "summary": "Count joint types in a limit map (for inspectors/gates)."
      },
      {
        "name": "buildJointLimits",
        "kind": "function",
        "signature": "buildJointLimits(model, opts = {})",
        "summary": "Auto-derive and attach joint limits to a model. Humanoid path when a humanoid rig is present, otherwise generic topology inference."
      },
      {
        "name": "JOINT_TYPE",
        "kind": "constant",
        "signature": "JOINT_TYPE",
        "summary": ""
      },
      {
        "name": "deriveBendDirection",
        "kind": "constant",
        "signature": "deriveBendDirection",
        "summary": "Alias for `hingeAxis` — the joint bend-direction deriver, named for the generic \"derive*\" family used by RagdollBuilder/CharacterPhysicsAsset."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/RagdollBuilder",
    "path": "engine/reference/assets/rig/RagdollBuilder.md",
    "source": "engine/assets/rig/RagdollBuilder.js",
    "import": "/engine/assets/rig/RagdollBuilder.js",
    "sourceHash": "3219bdafb093ddd462650abca51bc7748628095090a714c9b82280a633174cbc",
    "summary": "engine/assets/rig/RagdollBuilder.js — turn a detected skeleton + auto-derived joint limits into a RAGDOLL descriptor: one capsule body per bone (sized from the bone length, mass from its volume) plus a constrained joint to its parent using the JointLimits type + swing/twist + bend axis. Pure data (no physics engine here) so it can drive `sim/physics/PBDRagdoll` / articulations or the editor's ragdoll. Works for humanoids (canonical bones, incl. healed ones) and for any creature via generic topology. GPU-free + deterministic.",
    "exports": [
      {
        "name": "radiusRatio",
        "kind": "function",
        "signature": "radiusRatio(slot)",
        "summary": ""
      },
      {
        "name": "buildHumanoidRagdoll",
        "kind": "function",
        "signature": "buildHumanoidRagdoll(model, rig, pose, opts = {})",
        "summary": "Build a ragdoll from a humanoid rig (canonical bones, including healed ones)."
      },
      {
        "name": "buildGenericRagdoll",
        "kind": "function",
        "signature": "buildGenericRagdoll(model, pose, opts = {})",
        "summary": "Build a ragdoll from any skeleton by generic topology (spiders, dogs, …)."
      },
      {
        "name": "buildRagdoll",
        "kind": "function",
        "signature": "buildRagdoll(model, opts = {})",
        "summary": "Build a ragdoll for a model and attach it at model.rigs.ragdoll. Humanoid path when a humanoid rig is present, otherwise generic topology."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/RagdollSim",
    "path": "engine/reference/assets/rig/RagdollSim.md",
    "source": "engine/assets/rig/RagdollSim.js",
    "import": "/engine/assets/rig/RagdollSim.js",
    "sourceHash": "ba132a2e83b14009e3b87c7ed76badd6e5235926dab036135d4fe07990219f54",
    "summary": "engine/assets/rig/RagdollSim.js — a tiny, GENERIC Verlet/PBD ragdoll runtime that simulates ANY ragdoll descriptor from RagdollBuilder (humanoid, creature, healed/mirrored limbs). Each bone joint is a particle; each bone is a distance constraint to its parent (Jakobsen \"Advanced Character Physics\"). Gravity + ground + a few constraint iterations give a stable, believable flop with no dependency on a fixed humanoid template. Pure JS / deterministic / GPU-free.",
    "exports": [
      {
        "name": "createRagdollSim",
        "kind": "function",
        "signature": "createRagdollSim(ragdoll, opts = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/RagdollSkinning",
    "path": "engine/reference/assets/rig/RagdollSkinning.md",
    "source": "engine/assets/rig/RagdollSkinning.js",
    "import": "/engine/assets/rig/RagdollSkinning.js",
    "sourceHash": "9be76ff7d4c494127670641cef62879a6e58a2c8df98363482c8bb5b370af5fe",
    "summary": "engine/assets/rig/RagdollSkinning.js — make the live MESH follow a ragdoll.  The ragdoll sim (RagdollSim) only moves joint POSITIONS. To deform the skinned mesh with it we need a per-joint world transform. We build a ragdoll over the model's actual SKIN JOINTS (1:1 with the skin's joint slots, so vertex skin weights index straight into it) and, each frame, derive a per-bone rotation from the rest→current bone direction. Skinning is then the standard linear blend in SCENE space (the renderer applies importMatrix afterwards):  v' = Σ wⱼ · ( Rⱼ · (v − bindPosⱼ) + curPosⱼ )  At the bind pose Rⱼ=I and curPos=bindPos, so v'=v (the baked mesh). This needs no inverse-bind matrices because jointBindWorld·IBM = I per joint. Pure JS.",
    "exports": [
      {
        "name": "buildSkinnedRagdoll",
        "kind": "function",
        "signature": "buildSkinnedRagdoll(model, opts = {})",
        "summary": "Build a ragdoll over a model's skin joints (1:1 with skin slot indices) and a sim for it. Joint limits come from the humanoid rig where mapped, else generic topology. Returns null when the model has no skin to drive."
      },
      {
        "name": "ragdollBoneFrames",
        "kind": "function",
        "signature": "ragdollBoneFrames(state)",
        "summary": "Per-bone frames for the current sim state: rotation (3×3 row-major), current position, and bind position. Bones with no child inherit their parent's rotation (so leaf verts swing with the limb)."
      },
      {
        "name": "skinPrimitiveInterleaved",
        "kind": "function",
        "signature": "skinPrimitiveInterleaved(prim, frames, jointCount, outInterleaved)",
        "summary": "Linear-blend skin a primitive into a standard interleaved [pos3,nrm3,uv2] buffer (UVs at o+6/o+7 are left untouched). Writes scene-space positions so the renderer's importMatrix lands them correctly. Mutates + returns `outInterleaved`."
      },
      {
        "name": "logSkinnedRagdoll",
        "kind": "function",
        "signature": "logSkinnedRagdoll(state, logFn)",
        "summary": "One-time STATIC report of a built ragdoll: every joint's type + auto-detected limits, and the full constraint breakdown (bone sticks, hub bracing, ROM, signed hinges, swing cones). Prints rich console.tables when available; always returns a one-line summary string (also handed to `logFn` for the in-app console)."
      },
      {
        "name": "ragdollDebugStats",
        "kind": "function",
        "signature": "ragdollDebugStats(state)",
        "summary": "LIVE per-frame measurement: each hinge's current bend, each cone's current swing, and each ROM constraint's grandparent distance — all vs their limits, with an `ok` flag. Use it to PROVE the limits hold during simulation (and to spot violations)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/ActiveBodyFallbackReport",
    "path": "engine/reference/assets/rig/active-body/ActiveBodyFallbackReport.md",
    "source": "engine/assets/rig/active-body/ActiveBodyFallbackReport.js",
    "import": "/engine/assets/rig/active-body/ActiveBodyFallbackReport.js",
    "sourceHash": "ef39b05df9c3da010ba3d8e74cda5a24939a294606394fbb186a14c62b6d3f75",
    "summary": "",
    "exports": [
      {
        "name": "getActiveBodyFallbackReport",
        "kind": "function",
        "signature": "getActiveBodyFallbackReport(gpu = null)",
        "summary": ""
      },
      {
        "name": "isActiveBodyFallbackReportOk",
        "kind": "function",
        "signature": "isActiveBodyFallbackReportOk(report)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/ActiveBodyPerformanceBudgets",
    "path": "engine/reference/assets/rig/active-body/ActiveBodyPerformanceBudgets.md",
    "source": "engine/assets/rig/active-body/ActiveBodyPerformanceBudgets.js",
    "import": "/engine/assets/rig/active-body/ActiveBodyPerformanceBudgets.js",
    "sourceHash": "3a407693a4d638e03264838e2dc1dff7f408b90033a6b84862168604789c078e",
    "summary": "",
    "exports": [
      {
        "name": "getActiveBodyPerformanceBudgetReport",
        "kind": "function",
        "signature": "getActiveBodyPerformanceBudgetReport(bodyCount = 0, measurements = {})",
        "summary": ""
      },
      {
        "name": "ACTIVE_BODY_PERFORMANCE_BUDGETS",
        "kind": "constant",
        "signature": "ACTIVE_BODY_PERFORMANCE_BUDGETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/ActiveBodyRigBuilder",
    "path": "engine/reference/assets/rig/active-body/ActiveBodyRigBuilder.md",
    "source": "engine/assets/rig/active-body/ActiveBodyRigBuilder.js",
    "import": "/engine/assets/rig/active-body/ActiveBodyRigBuilder.js",
    "sourceHash": "351fc559a428de447b5d1fe7be25cbec2ddd29e6c502602571a5547ce2cd682c",
    "summary": "HumanoidRigBuilder — Builds a physics-ready humanoid rig (skeleton, bodies, joints, mass profile, drive profile) from entity phenotype data. Produces a StickmanRagdoll-compatible component that ActiveBodySystem can spawn as a PhysX articulation via the engine's ActiveRigController. Moved from editor/people-preview/PeoplePhenotypeRig.js into the game simulation layer so any game entity can have an active body.",
    "exports": [
      {
        "name": "buildHumanoidRig",
        "kind": "function",
        "signature": "buildHumanoidRig(config)",
        "summary": "Build a complete humanoid rig from entity data."
      },
      {
        "name": "buildActiveBodyPayload",
        "kind": "function",
        "signature": "buildActiveBodyPayload(config, worldPosition = [0, 0, 0])",
        "summary": "Build a spawn-ready payload for ActiveBodySystem."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/ActiveBodySimulationTiers",
    "path": "engine/reference/assets/rig/active-body/ActiveBodySimulationTiers.md",
    "source": "engine/assets/rig/active-body/ActiveBodySimulationTiers.js",
    "import": "/engine/assets/rig/active-body/ActiveBodySimulationTiers.js",
    "sourceHash": "72bfa79a52952a11c5945d8777811a8e8b218c34ae09d8dbf4885400d96d1b76",
    "summary": "",
    "exports": [
      {
        "name": "classifyActiveBodySimulationTier",
        "kind": "function",
        "signature": "classifyActiveBodySimulationTier(input = {})",
        "summary": ""
      },
      {
        "name": "buildActiveBodySimulationTierReport",
        "kind": "function",
        "signature": "buildActiveBodySimulationTierReport(bodies = [], observer = {})",
        "summary": ""
      },
      {
        "name": "estimateActiveBodyImportance",
        "kind": "function",
        "signature": "estimateActiveBodyImportance(body = {})",
        "summary": ""
      },
      {
        "name": "ACTIVE_BODY_SIMULATION_TIERS",
        "kind": "constant",
        "signature": "ACTIVE_BODY_SIMULATION_TIERS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/ActiveBodySystem",
    "path": "engine/reference/assets/rig/active-body/ActiveBodySystem.md",
    "source": "engine/assets/rig/active-body/ActiveBodySystem.js",
    "import": "/engine/assets/rig/active-body/ActiveBodySystem.js",
    "sourceHash": "dc2f6aafc210a72158a2ffd494413d8d619d31907bc92d48cdcf51784100bfd3",
    "summary": "",
    "exports": [
      {
        "name": "ActiveBodySystem",
        "kind": "class",
        "signature": "class ActiveBodySystem",
        "summary": ""
      },
      {
        "name": "BONE_NAMES",
        "kind": "re-export",
        "signature": "BONE_NAMES",
        "summary": ""
      },
      {
        "name": "buildDirectionDiagnostics",
        "kind": "re-export",
        "signature": "buildDirectionDiagnostics",
        "summary": ""
      },
      {
        "name": "clamp01",
        "kind": "re-export",
        "signature": "clamp01",
        "summary": ""
      },
      {
        "name": "clampSigned",
        "kind": "re-export",
        "signature": "clampSigned",
        "summary": ""
      },
      {
        "name": "computeSignedAngleOnHorizontal",
        "kind": "re-export",
        "signature": "computeSignedAngleOnHorizontal",
        "summary": ""
      },
      {
        "name": "copyFunctionalSensorAnchor",
        "kind": "re-export",
        "signature": "copyFunctionalSensorAnchor",
        "summary": ""
      },
      {
        "name": "estimateAverageFatigue",
        "kind": "re-export",
        "signature": "estimateAverageFatigue",
        "summary": ""
      },
      {
        "name": "groundYFromFoot",
        "kind": "re-export",
        "signature": "groundYFromFoot",
        "summary": ""
      },
      {
        "name": "makeBalanceState",
        "kind": "re-export",
        "signature": "makeBalanceState",
        "summary": ""
      },
      {
        "name": "normalizePhase01",
        "kind": "re-export",
        "signature": "normalizePhase01",
        "summary": ""
      },
      {
        "name": "normalizeRadians",
        "kind": "re-export",
        "signature": "normalizeRadians",
        "summary": ""
      },
      {
        "name": "organStatusColor",
        "kind": "re-export",
        "signature": "organStatusColor",
        "summary": ""
      },
      {
        "name": "percentSignal",
        "kind": "re-export",
        "signature": "percentSignal",
        "summary": ""
      },
      {
        "name": "radiansToDebugDegrees",
        "kind": "re-export",
        "signature": "radiansToDebugDegrees",
        "summary": ""
      },
      {
        "name": "resolveFunctionalSensorAnchors",
        "kind": "re-export",
        "signature": "resolveFunctionalSensorAnchors",
        "summary": ""
      },
      {
        "name": "round4",
        "kind": "re-export",
        "signature": "round4",
        "summary": ""
      },
      {
        "name": "setParticleVelocity",
        "kind": "re-export",
        "signature": "setParticleVelocity",
        "summary": ""
      },
      {
        "name": "signedAngularDelta",
        "kind": "re-export",
        "signature": "signedAngularDelta",
        "summary": ""
      },
      {
        "name": "slewRadians",
        "kind": "re-export",
        "signature": "slewRadians",
        "summary": ""
      },
      {
        "name": "supportCenter",
        "kind": "re-export",
        "signature": "supportCenter",
        "summary": ""
      },
      {
        "name": "unitSignal",
        "kind": "re-export",
        "signature": "unitSignal",
        "summary": ""
      },
      {
        "name": "unitSignalDefault",
        "kind": "re-export",
        "signature": "unitSignalDefault",
        "summary": ""
      },
      {
        "name": "yawDeg",
        "kind": "re-export",
        "signature": "yawDeg",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/AnimalLocomotion",
    "path": "engine/reference/assets/rig/active-body/AnimalLocomotion.md",
    "source": "engine/assets/rig/active-body/AnimalLocomotion.js",
    "import": "/engine/assets/rig/active-body/AnimalLocomotion.js",
    "sourceHash": "fb5c208dbf693335ac9010b4ecc9677ec5b351a04e7467e6997c62628b17ef83",
    "summary": "engine/assets/rig/active-body/AnimalLocomotion.js — extracted from ActiveBodySystem.js (Ragdoll Stack Consolidation Roadmap, Phase 7). Owns the animal (quadruped/ arachnid) active-body path: anatomy spec generation, PBD ragdoll assembly, per-frame locomotion (gait, leg targets, tail, neural residual blending), and animal-only debug tracing. Every function here takes its dependencies as explicit parameters (ragdoll/entry/skeleton/dt/...) — none of them close over ActiveBodySystem module state, so this extraction is a pure move, not a redesign. Shared helpers (contact telemetry, balance, small math/format utils) stay in ActiveBodySystem.js and are imported back here; the reverse (the handful of names ActiveBodySystem.js still calls into, e.g. stepAnimalActiveBody) are exported from here.",
    "exports": [
      {
        "name": "createAnimalAnatomySpec",
        "kind": "function",
        "signature": "createAnimalAnatomySpec(skeleton)",
        "summary": ""
      },
      {
        "name": "createQuadrupedAnatomySpec",
        "kind": "function",
        "signature": "createQuadrupedAnatomySpec(skeleton)",
        "summary": ""
      },
      {
        "name": "createArachnidAnatomySpec",
        "kind": "function",
        "signature": "createArachnidAnatomySpec(skeleton)",
        "summary": ""
      },
      {
        "name": "createAnimalBrainProfile",
        "kind": "function",
        "signature": "createAnimalBrainProfile(skeleton, options = {}, entityId = 'animal')",
        "summary": ""
      },
      {
        "name": "cloneAnimalSkeleton",
        "kind": "function",
        "signature": "cloneAnimalSkeleton(skeleton)",
        "summary": ""
      },
      {
        "name": "animalVerticalScaleFor",
        "kind": "function",
        "signature": "animalVerticalScaleFor(skeleton, scale = 1)",
        "summary": ""
      },
      {
        "name": "animalPoseVerticalScale",
        "kind": "function",
        "signature": "animalPoseVerticalScale(entry)",
        "summary": ""
      },
      {
        "name": "animalLocalToWorldPosition",
        "kind": "function",
        "signature": "animalLocalToWorldPosition(origin, yaw, scale, local, verticalScale = scale)",
        "summary": ""
      },
      {
        "name": "createAnimalPbdRagdoll",
        "kind": "function",
        "signature": "createAnimalPbdRagdoll(skeleton, worldPosition, options = {})",
        "summary": ""
      },
      {
        "name": "animalParentConstraintStiffness",
        "kind": "function",
        "signature": "animalParentConstraintStiffness(bone, parent, skeleton)",
        "summary": ""
      },
      {
        "name": "animalLegSpanConstraintStiffness",
        "kind": "function",
        "signature": "animalLegSpanConstraintStiffness(skeleton)",
        "summary": ""
      },
      {
        "name": "computeAnimalStructuralLimits",
        "kind": "function",
        "signature": "computeAnimalStructuralLimits(skeleton, boneMap)",
        "summary": ""
      },
      {
        "name": "animalBoneMass",
        "kind": "function",
        "signature": "animalBoneMass(bone, skeleton)",
        "summary": ""
      },
      {
        "name": "animalBoneRadius",
        "kind": "function",
        "signature": "animalBoneRadius(bone, skeleton, scale)",
        "summary": ""
      },
      {
        "name": "stepAnimalActiveBody",
        "kind": "function",
        "signature": "stepAnimalActiveBody(entry, dt, groundY = 0, sensors = null)",
        "summary": ""
      },
      {
        "name": "resolveAnimalMotion",
        "kind": "function",
        "signature": "resolveAnimalMotion(entry, root)",
        "summary": ""
      },
      {
        "name": "animalGaitPhaseAdvance",
        "kind": "function",
        "signature": "animalGaitPhaseAdvance(entry, motion, dt)",
        "summary": ""
      },
      {
        "name": "animalGaitDriveSpeed",
        "kind": "function",
        "signature": "animalGaitDriveSpeed(entry, motion)",
        "summary": ""
      },
      {
        "name": "animalIntendedSpeedScale",
        "kind": "function",
        "signature": "animalIntendedSpeedScale(entry, motion)",
        "summary": ""
      },
      {
        "name": "animalMotionForwardVector",
        "kind": "function",
        "signature": "animalMotionForwardVector(entry, motion)",
        "summary": ""
      },
      {
        "name": "animalRootForwardVelocityDot",
        "kind": "function",
        "signature": "animalRootForwardVelocityDot(entry, motion)",
        "summary": ""
      },
      {
        "name": "animalShouldReplantLegsForDirection",
        "kind": "function",
        "signature": "animalShouldReplantLegsForDirection(entry, motion, moving)",
        "summary": ""
      },
      {
        "name": "isAnimalDebugTarget",
        "kind": "function",
        "signature": "isAnimalDebugTarget(entry)",
        "summary": ""
      },
      {
        "name": "logAnimalActiveBodyTrace",
        "kind": "function",
        "signature": "logAnimalActiveBodyTrace(entry, frame, groundY = 0)",
        "summary": ""
      },
      {
        "name": "animalDebugBodyAxis",
        "kind": "function",
        "signature": "animalDebugBodyAxis(entry)",
        "summary": ""
      },
      {
        "name": "animalDebugWorstBoneSpeed",
        "kind": "function",
        "signature": "animalDebugWorstBoneSpeed(entry)",
        "summary": ""
      },
      {
        "name": "formatAnimalNeuralDebug",
        "kind": "function",
        "signature": "formatAnimalNeuralDebug(entry)",
        "summary": ""
      },
      {
        "name": "formatAnimalDirectionDebug",
        "kind": "function",
        "signature": "formatAnimalDirectionDebug(entry)",
        "summary": ""
      },
      {
        "name": "formatAnimalLegDebug",
        "kind": "function",
        "signature": "formatAnimalLegDebug(entry, groundY = 0)",
        "summary": ""
      },
      {
        "name": "formatAnimalTailDebug",
        "kind": "function",
        "signature": "formatAnimalTailDebug(entry, groundY = 0)",
        "summary": ""
      },
      {
        "name": "animalLegDebugLabel",
        "kind": "function",
        "signature": "animalLegDebugLabel(descriptor)",
        "summary": ""
      },
      {
        "name": "signedAnimalYawDeltaDegrees",
        "kind": "function",
        "signature": "signedAnimalYawDeltaDegrees(a, b)",
        "summary": ""
      },
      {
        "name": "applyAnimalPoseDrive",
        "kind": "function",
        "signature": "applyAnimalPoseDrive(entry, dt, groundY, motion)",
        "summary": ""
      },
      {
        "name": "computeAnimalLegTargets",
        "kind": "function",
        "signature": "computeAnimalLegTargets(entry, root, rootLocal, groundY, motion, basis)",
        "summary": ""
      },
      {
        "name": "applyAnimalNeuralMotor",
        "kind": "function",
        "signature": "applyAnimalNeuralMotor(entry, legTargets, tailTargets, motion, groundY, dt)",
        "summary": ""
      },
      {
        "name": "animalNeuralTierCap",
        "kind": "function",
        "signature": "animalNeuralTierCap(tier)",
        "summary": ""
      },
      {
        "name": "animalBodyVerticality",
        "kind": "function",
        "signature": "animalBodyVerticality(entry, groundY = 0)",
        "summary": ""
      },
      {
        "name": "animalNeuralReward",
        "kind": "function",
        "signature": "animalNeuralReward(entry, motion, currentV, targetV, coreV)",
        "summary": ""
      },
      {
        "name": "animalNeuralBonesByName",
        "kind": "function",
        "signature": "animalNeuralBonesByName(entry)",
        "summary": ""
      },
      {
        "name": "animalNeuralTargetAliases",
        "kind": "function",
        "signature": "animalNeuralTargetAliases(entry, legTargets, tailTargets)",
        "summary": ""
      },
      {
        "name": "applyAnimalNeuralLegOffsets",
        "kind": "function",
        "signature": "applyAnimalNeuralLegOffsets(entry, legTargets, offsets, weight)",
        "summary": ""
      },
      {
        "name": "animalNeuralOffsetScale",
        "kind": "function",
        "signature": "animalNeuralOffsetScale(entry, footPlanted)",
        "summary": ""
      },
      {
        "name": "addAnimalNeuralOffset",
        "kind": "function",
        "signature": "addAnimalNeuralOffset(target, offsets, alias, weight, footPlanted)",
        "summary": ""
      },
      {
        "name": "computeAnimalTailTargets",
        "kind": "function",
        "signature": "computeAnimalTailTargets(entry, root, rootLocal, groundY, motion, basis, dt)",
        "summary": ""
      },
      {
        "name": "resolveAnimalTailAffect",
        "kind": "function",
        "signature": "resolveAnimalTailAffect(entry, motion)",
        "summary": ""
      },
      {
        "name": "animalTailSpecies",
        "kind": "function",
        "signature": "animalTailSpecies(entry, packet = null)",
        "summary": ""
      },
      {
        "name": "animalTailDriveScale",
        "kind": "function",
        "signature": "animalTailDriveScale(entry)",
        "summary": ""
      },
      {
        "name": "animalTailCarryProfile",
        "kind": "function",
        "signature": "animalTailCarryProfile(species)",
        "summary": ""
      },
      {
        "name": "animalRootTargetY",
        "kind": "function",
        "signature": "animalRootTargetY(entry, groundY = 0)",
        "summary": ""
      },
      {
        "name": "animalLowestSupportFootLocalY",
        "kind": "function",
        "signature": "animalLowestSupportFootLocalY(entry)",
        "summary": ""
      },
      {
        "name": "animalSupportRoot",
        "kind": "function",
        "signature": "animalSupportRoot(entry, root, groundY, motion, basis)",
        "summary": ""
      },
      {
        "name": "animalRootVerticalDriveWeight",
        "kind": "function",
        "signature": "animalRootVerticalDriveWeight(entry)",
        "summary": ""
      },
      {
        "name": "animalBodyPostureOffset",
        "kind": "function",
        "signature": "animalBodyPostureOffset(entry, role, basis)",
        "summary": ""
      },
      {
        "name": "animalStrideLength",
        "kind": "function",
        "signature": "animalStrideLength(entry, speedScale)",
        "summary": ""
      },
      {
        "name": "animalStrideDriveScale",
        "kind": "function",
        "signature": "animalStrideDriveScale(entry)",
        "summary": ""
      },
      {
        "name": "animalSwingLateralSweep",
        "kind": "function",
        "signature": "animalSwingLateralSweep(entry, descriptor, lift, swingAhead)",
        "summary": ""
      },
      {
        "name": "animalSwingLiftHeight",
        "kind": "function",
        "signature": "animalSwingLiftHeight(entry)",
        "summary": ""
      },
      {
        "name": "animalPoseDriveGains",
        "kind": "function",
        "signature": "animalPoseDriveGains(role, id, bodyType)",
        "summary": ""
      },
      {
        "name": "animalRestWorld",
        "kind": "function",
        "signature": "animalRestWorld(root, rootLocal, local, scale, basis, verticalScale = scale)",
        "summary": ""
      },
      {
        "name": "animalLegPhase",
        "kind": "function",
        "signature": "animalLegPhase(entry, descriptor, legCount, speedScale = null)",
        "summary": ""
      },
      {
        "name": "animalDutyFactor",
        "kind": "function",
        "signature": "animalDutyFactor(entry, legCount, speedScale)",
        "summary": ""
      },
      {
        "name": "animalStanceRollback",
        "kind": "function",
        "signature": "animalStanceRollback(entry, speedScale)",
        "summary": ""
      },
      {
        "name": "applyAnimalLegChainTargets",
        "kind": "function",
        "signature": "applyAnimalLegChainTargets(entry, targets, info, descriptor, root, bodyRootLocal, footTarget, lift, swing, basis)",
        "summary": ""
      },
      {
        "name": "animalCurrentSpeedScale",
        "kind": "function",
        "signature": "animalCurrentSpeedScale(entry)",
        "summary": ""
      },
      {
        "name": "animalStanceRootPush",
        "kind": "function",
        "signature": "animalStanceRootPush(entry, descriptor, speedScale)",
        "summary": ""
      },
      {
        "name": "animalLegShapeWeight",
        "kind": "function",
        "signature": "animalLegShapeWeight(entry, descriptor, swing)",
        "summary": ""
      },
      {
        "name": "animalLegJointPulse",
        "kind": "function",
        "signature": "animalLegJointPulse(entry, descriptor, jointIndex, chainLength, lift, swing, basis)",
        "summary": ""
      },
      {
        "name": "animalStructuralPasses",
        "kind": "function",
        "signature": "animalStructuralPasses(entry)",
        "summary": ""
      },
      {
        "name": "clampAnimalBoneVelocities",
        "kind": "function",
        "signature": "clampAnimalBoneVelocities(entry, dt)",
        "summary": ""
      },
      {
        "name": "enforceAnimalGroundContact",
        "kind": "function",
        "signature": "enforceAnimalGroundContact(entry, groundY, dt = 1/60, sensors = null)",
        "summary": ""
      },
      {
        "name": "enforceAnimalPlantedFootContacts",
        "kind": "function",
        "signature": "enforceAnimalPlantedFootContacts(entry, groundY, dt = 1/60, sensors = null, motion = null)",
        "summary": ""
      },
      {
        "name": "animalPlantedFootHold",
        "kind": "function",
        "signature": "animalPlantedFootHold(entry, moving)",
        "summary": ""
      },
      {
        "name": "animalPlantedFootDamping",
        "kind": "function",
        "signature": "animalPlantedFootDamping(entry, moving)",
        "summary": ""
      },
      {
        "name": "applyAnimalNoIntentSettleBrake",
        "kind": "function",
        "signature": "applyAnimalNoIntentSettleBrake(entry, dt = 1/60, motion = null)",
        "summary": ""
      },
      {
        "name": "applyAnimalWrongWayBrake",
        "kind": "function",
        "signature": "applyAnimalWrongWayBrake(entry, dt = 1/60, motion = null)",
        "summary": ""
      },
      {
        "name": "computeAnimalBalance",
        "kind": "function",
        "signature": "computeAnimalBalance(entry, groundY = 0)",
        "summary": ""
      },
      {
        "name": "ANIMAL_DEBUG_ENTITY_IDS",
        "kind": "constant",
        "signature": "ANIMAL_DEBUG_ENTITY_IDS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/BalanceMotor",
    "path": "engine/reference/assets/rig/active-body/BalanceMotor.md",
    "source": "engine/assets/rig/active-body/BalanceMotor.js",
    "import": "/engine/assets/rig/active-body/BalanceMotor.js",
    "sourceHash": "652a9b091371c3ef28082744735ab6c60c84070ecef3dd7b870b942b4590fbff",
    "summary": "engine/assets/rig/active-body/BalanceMotor.js — extracted from ActiveBodySystem.js (Ragdoll Stack Consolidation Roadmap, Phase 7). Owns humanoid COM-based balance (Winter mass fractions) and the idle/locomotion/stumble/fallen/ getup/ko state machine that reads it. Kept as one module per the Phase 7 pre-work findings — the state machine and balance computation are tightly entangled (updateState reads balance.error/groundedFeet every frame) and splitting them would just add a needless import hop.",
    "exports": [
      {
        "name": "computeBalance",
        "kind": "function",
        "signature": "computeBalance(ragdoll)",
        "summary": ""
      },
      {
        "name": "makeBalanceState",
        "kind": "function",
        "signature": "makeBalanceState(entry, balance)",
        "summary": ""
      },
      {
        "name": "toBalanceControllerState",
        "kind": "function",
        "signature": "toBalanceControllerState(state)",
        "summary": ""
      },
      {
        "name": "copyBalanceState",
        "kind": "function",
        "signature": "copyBalanceState(balance)",
        "summary": ""
      },
      {
        "name": "updateState",
        "kind": "function",
        "signature": "updateState(entry, balance, dt)",
        "summary": ""
      },
      {
        "name": "snapshotGetupOrientation",
        "kind": "function",
        "signature": "snapshotGetupOrientation(entry)",
        "summary": ""
      },
      {
        "name": "MASS_FRACTIONS",
        "kind": "constant",
        "signature": "MASS_FRACTIONS",
        "summary": ""
      },
      {
        "name": "STUMBLE_THRESHOLD",
        "kind": "constant",
        "signature": "STUMBLE_THRESHOLD",
        "summary": ""
      },
      {
        "name": "FALL_THRESHOLD",
        "kind": "constant",
        "signature": "FALL_THRESHOLD",
        "summary": ""
      },
      {
        "name": "LOCOMOTION_STUMBLE_THRESHOLD",
        "kind": "constant",
        "signature": "LOCOMOTION_STUMBLE_THRESHOLD",
        "summary": ""
      },
      {
        "name": "LOCOMOTION_STUMBLE_TIME",
        "kind": "constant",
        "signature": "LOCOMOTION_STUMBLE_TIME",
        "summary": ""
      },
      {
        "name": "STUMBLE_FALL_TIME",
        "kind": "constant",
        "signature": "STUMBLE_FALL_TIME",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/BodyAssembler",
    "path": "engine/reference/assets/rig/active-body/BodyAssembler.md",
    "source": "engine/assets/rig/active-body/BodyAssembler.js",
    "import": "/engine/assets/rig/active-body/BodyAssembler.js",
    "sourceHash": "ef5c9931a4c2f892f1908492c6ce109c9d3399b83afce9dc8ca97245f3d34cf2",
    "summary": "BodyAssembler — Data-driven ragdoll spec from body template + part catalog. Reads: - data/bodies/humanoid_default.json (bone hierarchy + collision rules) - data/parts/construction_volumes/*.json (per-part collision metadata) Produces a `RagdollSpec` consumable by ActiveBodySystem: { bones: [{ id, parent, partId, side, joint, collision, mass }, ...] ignorePairs: Set<\"a|b\"> // bone-pair keys for self-collision exclusion ignoreGroupsActive: Set<\"groupA|groupB\"> joints: { ball: {...}, hinge: {...}, ... } drives: { ball: {...}, hinge: {...}, ... } anatomy: { thorax, organs, collisionShells } skeletonExtensions: { mode, spineSegments, structuralBones } } This is the single source of truth for ragdoll structure. Edit the JSON files to change the body without touching code.",
    "exports": [
      {
        "name": "loadBodyTemplate",
        "kind": "function",
        "signature": "async loadBodyTemplate(url = '/data/bodies/humanoid_default.json')",
        "summary": "Load the humanoid body template (cached after first call)."
      },
      {
        "name": "assembleBody",
        "kind": "function",
        "signature": "assembleBody(template, partCatalog, options = {})",
        "summary": "Build a ragdoll spec from a body template + part catalog."
      },
      {
        "name": "shouldBonesCollide",
        "kind": "function",
        "signature": "shouldBonesCollide(spec, boneA, boneB, isActive)",
        "summary": "Test if two bones should collide given a ragdoll spec."
      },
      {
        "name": "getFootBones",
        "kind": "function",
        "signature": "getFootBones(spec)",
        "summary": "Get bone IDs that are foot contacts (for ground sensing / balance)."
      },
      {
        "name": "getBone",
        "kind": "function",
        "signature": "getBone(spec, id)",
        "summary": "Get a bone by id."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/BodyPoses",
    "path": "engine/reference/assets/rig/active-body/BodyPoses.md",
    "source": "engine/assets/rig/active-body/BodyPoses.js",
    "import": "/engine/assets/rig/active-body/BodyPoses.js",
    "sourceHash": "6ccaef6560d326634fe50249a9de24d0717a93b8f2059559d61887543d9b1a1f",
    "summary": "BodyPoses — Data-driven pose library + biomechanical motor controller. ══════════════════════════════════════════════════════════════════════ POSE DATA ══════════════════════════════════════════════════════════════════════ Poses live in /data/poses/*.json. Each has: id, referenceHeight, rootBone, facing, bones{name:[x,y,z]}, rotations{name:[x,y,z,w]} verticality (0..100) — used by the blend space Sequences live in /data/sequences/*.json and chain poses, though the NEW verticality system (see getPoseAtVerticality) supersedes discrete sequence-time for getup — bodies blend continuously between adjacent rungs of the verticality ladder: 0 ── 15 ── 25 ── 35 ── 45 ── 50 ── (>50 reserved) prone pushup quad  kneel half  stand   tiptoe/jump/reach kneel The ladder is based on the clinical Postural Verticality Scale (PVS) used in stroke rehab, cross-referenced with the Gross Motor Function Measure (GMFM) and standard 1D animation blend trees. ══════════════════════════════════════════════════════════════════════ MOTOR: applyKinematicBlend — FOUR STACKED LAYERS ══════════════════════════════════════════════════════════════════════ For each bone we apply, in order: 1. SOFT POSITION NUDGE  (kinematic lerp, small % per frame) Guarantees pose convergence even when forces can't. 2. VELOCITY-CLAMPED PURSUIT  (capped at muscleSpeed m/s) Close to target = slower approach (ease-in). Far = full speed. 3. MASS-SCALED PD FORCE  (the one that actually does work) Kp = m · ω² Kd = 2 · m · ω · ζ          (ζ = dampingRatio) F  = Kp·(target - pos) - Kd·velocity Mass-scaled means a 20 kg pelvis and a 0.5 kg hand have the SAME natural frequency. Like real biological muscle — body parts reach their targets on the same time scale regardless of weight. 4. MUSCLE-TONE GRAVITY COMPENSATION  (postural) Bones above knee-height get 75% of their weight canceled so posture holds without the motor doing all the lifting. Real humans use passive muscle tone; we model the same. + FORCE RISE-TIME FILTER (on the final force) Real muscles can't change force instantly. Rate-of-force- development (RFD) is 800-1500 N/s for untrained adults. Per-bone multipliers: thighs 0.7× (slow recruitment, biggest muscles), hands 1.4× (fast, small motor units). From EMG studies. + ERROR-GATED DAMPING (near target) Within 5 cm of target, velocity is damped 30% per frame. Kills steady-state jitter where the PD motor fights imperceptible position deltas. Doesn't affect in-flight motion. ══════════════════════════════════════════════════════════════════════ BIOMECHANICAL CALIBRATION  (do not \"fix\" these without reading!) ══════════════════════════════════════════════════════════════════════ forcePerKg = 15 × g    — untrained adult (not Olympic athlete) peak quad ≈ 15g × 8kg = 1176 N (realistic) maxForce = 1500 N      — absolute cap (big muscle groups) forceRiseRate = 1200 N/s — typical RFD. Bumping this to 3000 makes bodies feel robotic (athlete-level). omega = 6-9 rad/s      — muscle response frequency (postural 5-7, voluntary 8-12). Above 12 = twitchy. dampingRatio = 0.7     — slight overshoot (natural muscle feel). 1.0 = critical, 1.2+ = sluggish/locked. gravityTone = 0.75     — 75% of bone weight canceled via feedforward for bones above toneYThreshold. Human postural muscles do this automatically. ══════════════════════════════════════════════════════════════════════",
    "exports": [
      {
        "name": "normalizePose",
        "kind": "function",
        "signature": "normalizePose(data)",
        "summary": ""
      },
      {
        "name": "loadPose",
        "kind": "function",
        "signature": "async loadPose(id)",
        "summary": "Load a single pose by id. Cached after first fetch. URL matches the BodyAssembler pattern (`/data/...`) since the server roots `Life/data/` as `/data/`."
      },
      {
        "name": "loadSequence",
        "kind": "function",
        "signature": "async loadSequence(id)",
        "summary": "Load a sequence and pre-load all poses referenced by its phases."
      },
      {
        "name": "preloadStandardPoses",
        "kind": "function",
        "signature": "async preloadStandardPoses()",
        "summary": ""
      },
      {
        "name": "bracketWalkCyclePhase",
        "kind": "function",
        "signature": "bracketWalkCyclePhase(gaitPhase)",
        "summary": "Map gait phase (rad) to two adjacent walk-cycle poses and blend factor."
      },
      {
        "name": "getWalkCycleWorldTargets",
        "kind": "function",
        "signature": "getWalkCycleWorldTargets(gaitPhase, measurements, anchor, yaw)",
        "summary": ""
      },
      {
        "name": "getWalkCycleWorldPoseTargets",
        "kind": "function",
        "signature": "getWalkCycleWorldPoseTargets(gaitPhase, measurements, anchor, yaw)",
        "summary": ""
      },
      {
        "name": "blendPositionTargetMaps",
        "kind": "function",
        "signature": "blendPositionTargetMaps(base, overlay, t)",
        "summary": "Linear blend of bone world positions (stand + walk-cycle additive layer)."
      },
      {
        "name": "blendWorldPoseTargets",
        "kind": "function",
        "signature": "blendWorldPoseTargets(base, overlay, t)",
        "summary": ""
      },
      {
        "name": "getPoseBoneWorldPosition",
        "kind": "function",
        "signature": "getPoseBoneWorldPosition(pose, boneId, measurements, anchor, yaw)",
        "summary": "Compute the world-space target position of a single bone for a given pose. Applies scale (measurements.height / pose.referenceHeight), yaw rotation around +Y (body facing direction), and translation to anchor."
      },
      {
        "name": "getPoseBoneLocalPosition",
        "kind": "function",
        "signature": "getPoseBoneLocalPosition(pose, boneId)",
        "summary": ""
      },
      {
        "name": "getPoseBoneLocalRotation",
        "kind": "function",
        "signature": "getPoseBoneLocalRotation(pose, boneId)",
        "summary": ""
      },
      {
        "name": "getPoseBoneWorldRotation",
        "kind": "function",
        "signature": "getPoseBoneWorldRotation(pose, boneId, yaw)",
        "summary": ""
      },
      {
        "name": "getPoseWorldTargets",
        "kind": "function",
        "signature": "getPoseWorldTargets(pose, measurements, anchor, yaw)",
        "summary": "Compute all target positions for a pose, keyed by bone id."
      },
      {
        "name": "getPoseWorldPoseTargets",
        "kind": "function",
        "signature": "getPoseWorldPoseTargets(pose, measurements, anchor, yaw)",
        "summary": ""
      },
      {
        "name": "interpolatePoses",
        "kind": "function",
        "signature": "interpolatePoses(poseA, poseB, t, measurements, anchor, yaw)",
        "summary": "Interpolate between two poses. Returns a target-position map for all bones that exist in both. Useful for smooth phase transitions within a sequence."
      },
      {
        "name": "interpolatePoseTargets",
        "kind": "function",
        "signature": "interpolatePoseTargets(poseA, poseB, t, measurements, anchor, yaw)",
        "summary": ""
      },
      {
        "name": "applyKinematicBlend",
        "kind": "function",
        "signature": "applyKinematicBlend(ragdoll, targets, blendRate = 0.04, options = {})",
        "summary": "Hybrid muscle-motor blend — mixes kinematic pose delivery with PD-force behavior to produce realistic active-ragdoll motion that FEELS muscular rather than teleport-y. Four layers stacked per bone: 1. SOFT POSITION NUDGE — small kinematic lerp (2-4% per frame). Guarantees pose delivery; prevents drift from constraints/collisions. 2. VELOCITY-CLAMPED PURSUIT — computes a desired velocity toward the target and caps it at a \"muscle speed\" limit. Far bones move at max speed; close bones slow down (ease-in on arrival). 3. PD STABILIZATION — small spring-damper toward target adds subtle inertia/settling that pure position lerp lacks. Uses applyForce so gravity/collisions/distance constraints still dominate. 4. MUSCLE-TONE GRAVITY COMP — above-ground bones get 70% gravity cancellation (like real postural muscles keeping you upright). Per-bone activation timing: big postural muscles (pelvis, thighs, chest) lead; smaller bones (hands, head) follow. Creates the \"stage-by-stage effort\" look real people have when getting up."
      },
      {
        "name": "applyMotorToTargets",
        "kind": "function",
        "signature": "applyMotorToTargets(ragdoll, targets, options = {})",
        "summary": "Apply PD (proportional-derivative) motor FORCES to drive the ragdoll toward a target pose. This is the proper active-ragdoll approach used in DeepMimic / NaturalMotion Euphoria / Karl Sims creatures: F = Kp * (target_pos - pos) - Kd * velocity Forces are applied via `solver.applyForce()` BEFORE the physics step so they get integrated as acceleration through the Verlet solver. The body rises by physically PUSHING against the ground (via collision friction on its hands/feet) — not by teleporting particles to target positions. Key properties: - Mass matters: Kp scales per bone mass so acceleration is consistent. - Kd damps overshoot and oscillation (critical damping formula below). - Gravity, collisions, and distance constraints ALL still act normally. - Momentum is preserved — no teleportation. PHASE RAMP: `phaseBoost` multiplier scales stiffness over the phase duration so the motor grows stronger as the body approaches the pose. ADAPTIVE GAIN: bones far from target get a proportional force boost — the \"ramp muscle output until it works\" behavior. Still applied through PD force, not position teleport. MAX FORCE CAP: prevents instability from runaway forces at large errors."
      },
      {
        "name": "getSequenceState",
        "kind": "function",
        "signature": "getSequenceState(sequence, elapsed)",
        "summary": "Run one tick of a sequence. Returns progress info so the caller can decide when the sequence completes or what phase is active."
      },
      {
        "name": "getCachedPose",
        "kind": "function",
        "signature": "getCachedPose(id)",
        "summary": "Read a cached pose without loading. Returns null if not loaded."
      },
      {
        "name": "getVerticalityLadder",
        "kind": "function",
        "signature": "getVerticalityLadder()",
        "summary": "Return a sorted ladder of {verticality, pose} for every cached pose that declares one. Sorted ascending by score."
      },
      {
        "name": "bracketVerticality",
        "kind": "function",
        "signature": "bracketVerticality(v, ladder = null)",
        "summary": "Find the two adjacent rungs bracketing verticality `v`, plus the interpolation factor between them. Returns { lower, upper, t } where t ∈ [0,1]; t=0 means exactly lower. If v is below min or above max, clamps to end and t=0 or 1."
      },
      {
        "name": "getPoseAtVerticality",
        "kind": "function",
        "signature": "getPoseAtVerticality(v, measurements, anchor, yaw)",
        "summary": "Get world-space bone targets for an arbitrary verticality score. Blends between the two adjacent ladder poses, so the caller never has to know which discrete pose is \"current\" — just \"how vertical\"."
      },
      {
        "name": "getPoseTargetsAtVerticality",
        "kind": "function",
        "signature": "getPoseTargetsAtVerticality(v, measurements, anchor, yaw)",
        "summary": ""
      },
      {
        "name": "measureBodyVerticality",
        "kind": "function",
        "signature": "measureBodyVerticality(ragdoll)",
        "summary": "Measure the current body's verticality from live physics state. Uses pelvis height as fraction of the stand-pose pelvis height, mapped onto the scale so stand = 50. Below stand scales linearly; above stand (for future jumping/reaching) grows proportionally."
      },
      {
        "name": "getCachedSequence",
        "kind": "function",
        "signature": "getCachedSequence(id)",
        "summary": "Read a cached sequence without loading. Returns null if not loaded."
      },
      {
        "name": "getSequenceDuration",
        "kind": "function",
        "signature": "getSequenceDuration(sequence)",
        "summary": "Compute total duration of a sequence in seconds."
      },
      {
        "name": "WALK_CYCLE_POSE_IDS",
        "kind": "constant",
        "signature": "WALK_CYCLE_POSE_IDS",
        "summary": "Warm-cache everything we need for the active controller. Loads both prone (face-down) and supine (face-up) getup sequences so the controller can pick the right one based on the body's orientation when it decides to stand up."
      },
      {
        "name": "WALK_CYCLE_PHASE_OFFSET",
        "kind": "constant",
        "signature": "WALK_CYCLE_PHASE_OFFSET",
        "summary": "Align CPG gait phase (φ=0 toe-off) with walk_cycle_q* heel-strike keys."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/BodyRhythms",
    "path": "engine/reference/assets/rig/active-body/BodyRhythms.md",
    "source": "engine/assets/rig/active-body/BodyRhythms.js",
    "import": "/engine/assets/rig/active-body/BodyRhythms.js",
    "sourceHash": "121018efc0b9fbc25ff8a7bfaf493049723ea2556702701476cd70a991d0570d",
    "summary": "BodyRhythms — Coupled phase oscillators that generate body rhythms. ══════════════════════════════════════════════════════════════════════ WHAT THIS IS ══════════════════════════════════════════════════════════════════════ Every living body has SYNCHRONIZED internal oscillators: - HEART      ~1.0-1.5 Hz resting (60-90 bpm) - BREATH     ~0.2-0.3 Hz resting (12-18 breaths/min) - GAIT_L     ~1.0 Hz walking cadence (left leg) - GAIT_R     ~1.0 Hz antiphase to left (π offset) - ARM_L      counter-swings with RIGHT leg (inphase with GAIT_R) - ARM_R      counter-swings with LEFT leg (inphase with GAIT_L) These are the output of CENTRAL PATTERN GENERATORS (CPGs) — spinal neural circuits that don't need brain input to produce rhythm. They sync via Kuramoto-like coupling so all the oscillators lock into phase-locked relationships automatically. Engine provides the math (engine/core/math/MathOscillator.js): stepKuramotoPhases  — Euler step for coupled oscillator network phaseCoherence      — measure of synchrony (0=chaos, 1=lockstep) stepKuramotoDriven  — with external forcing (metronome, music, etc) ══════════════════════════════════════════════════════════════════════ USES IN THE ACTIVE BODY SYSTEM ══════════════════════════════════════════════════════════════════════ 1. NN OBSERVATION INPUT The NN sees sin/cos of key phases, so it knows WHERE in the gait cycle the body is. This lets it learn rhythmic actions — step forward on left foot during gait_L peak, etc. 2. POSE MODULATION (future) When intent = walk, leg targets can be modulated by gait phase to produce a stepping motion automatically. 3. VISIBLE RHYTHM (future) Chest rises with breath, head bobs with heart, body sways with gait — alive-looking NPCs even when standing still. 4. DRUG/DISEASE EFFECTS Arrhythmia = desynchronized heart. Panic = tachycardia (faster heart + breath). Paralysis = no gait coupling. Loss of coherence (order parameter drops) indicates systemic failure. ══════════════════════════════════════════════════════════════════════ COUPLING MATRIX  (who synchronizes with whom, how strongly) ══════════════════════════════════════════════════════════════════════ HEART  BREATH  GAIT_L  GAIT_R  ARM_L  ARM_R HEART     -    0.3     0       0       0      0 BREATH    0.3  -       0.1     0.1     0      0 GAIT_L    0    0.1     -      -1.0    0      1.0      (antiphase L↔R, counter with arms) GAIT_R    0    0.1     -1.0    -       1.0   0 ARM_L     0    0       0       1.0    -     -1.0 ARM_R     0    0       1.0     0      -1.0  - Positive weight = inphase pull (synchronize), negative = antiphase. Kuramoto coupling term: sin(phase_j - phase_i) × weight.",
    "exports": [
      {
        "name": "createRhythmState",
        "kind": "function",
        "signature": "createRhythmState(rng = Math.random)",
        "summary": "Create a new rhythm state for a body. Initial phases are seeded from a per-entity RNG so different bodies aren't in lockstep (a crowd of NPCs should look like independent individuals, not a marching band)."
      },
      {
        "name": "stepRhythms",
        "kind": "function",
        "signature": "stepRhythms(state, dt, opts = {})",
        "summary": "Advance the rhythm state by dt seconds using the Kuramoto model. Modulates natural frequencies based on body state: - walking intent      → gait and arms non-zero - high adrenaline     → faster heart and breath - high fatigue        → slightly elevated heart, faster breath"
      },
      {
        "name": "rhythmSample",
        "kind": "function",
        "signature": "rhythmSample(state, rhythmIdx)",
        "summary": "Return sin/cos of a rhythm phase — what the NN sees. sin/cos pair is the standard representation of a circular variable for neural networks (avoids wraparound discontinuity at 2π)."
      },
      {
        "name": "shatterRhythm",
        "kind": "function",
        "signature": "shatterRhythm(state, severity = 0.5, rng = Math.random)",
        "summary": "Desynchronize rhythms (simulate arrhythmia / panic breakdown). Adds random noise to phases and reduces coupling strength."
      },
      {
        "name": "restoreRhythm",
        "kind": "function",
        "signature": "restoreRhythm(state)",
        "summary": "Re-establish healthy coupling after disruption (recovery)."
      },
      {
        "name": "RHYTHM",
        "kind": "constant",
        "signature": "RHYTHM",
        "summary": ""
      },
      {
        "name": "NUM_RHYTHMS",
        "kind": "constant",
        "signature": "NUM_RHYTHMS",
        "summary": ""
      },
      {
        "name": "kuramotoOrderParameter",
        "kind": "re-export",
        "signature": "kuramotoOrderParameter",
        "summary": ""
      },
      {
        "name": "phaseCoherence",
        "kind": "re-export",
        "signature": "phaseCoherence",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/BodySpecValidator",
    "path": "engine/reference/assets/rig/active-body/BodySpecValidator.md",
    "source": "engine/assets/rig/active-body/BodySpecValidator.js",
    "import": "/engine/assets/rig/active-body/BodySpecValidator.js",
    "sourceHash": "9b89f455778c4f08b4c70b1291d4839d6ab8bd523e833ed1750b2ed05512acff",
    "summary": "",
    "exports": [
      {
        "name": "validateBodyTemplate",
        "kind": "function",
        "signature": "validateBodyTemplate(template)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/BrainProfile",
    "path": "engine/reference/assets/rig/active-body/BrainProfile.md",
    "source": "engine/assets/rig/active-body/BrainProfile.js",
    "import": "/engine/assets/rig/active-body/BrainProfile.js",
    "sourceHash": "a14878af2d5e21c16bc92dd2827d2b47b7b100a6d10ddf39f72d38257499e190",
    "summary": "engine/assets/rig/active-body/BrainProfile.js — extracted from ActiveBodySystem.js (Ragdoll Stack Consolidation Roadmap, Phase 7). Owns humanoid brain-profile creation/loading (NN tier, motor profile key resolution, lazy brain-file load) and the trust/anatomy/brain readback helpers consumed by getReadback().",
    "exports": [
      {
        "name": "createHumanoidBrainProfile",
        "kind": "function",
        "signature": "createHumanoidBrainProfile(entityId, options = {})",
        "summary": ""
      },
      {
        "name": "neuralTierAuthorityCap",
        "kind": "function",
        "signature": "neuralTierAuthorityCap(tier)",
        "summary": ""
      },
      {
        "name": "estimateNeuralMotorTrust",
        "kind": "function",
        "signature": "estimateNeuralMotorTrust(motor, options = {})",
        "summary": ""
      },
      {
        "name": "getBrainReadback",
        "kind": "function",
        "signature": "getBrainReadback(entry)",
        "summary": ""
      },
      {
        "name": "getAnatomyReadback",
        "kind": "function",
        "signature": "getAnatomyReadback(entry)",
        "summary": ""
      },
      {
        "name": "applyBodySpecMetadata",
        "kind": "function",
        "signature": "applyBodySpecMetadata(entry, bodySpec)",
        "summary": ""
      },
      {
        "name": "ensureBrainLoaded",
        "kind": "function",
        "signature": "ensureBrainLoaded(entry)",
        "summary": ""
      },
      {
        "name": "defaultMotorProfileKey",
        "kind": "function",
        "signature": "defaultMotorProfileKey(entityId, preset, tier)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/ContactTelemetry",
    "path": "engine/reference/assets/rig/active-body/ContactTelemetry.md",
    "source": "engine/assets/rig/active-body/ContactTelemetry.js",
    "import": "/engine/assets/rig/active-body/ContactTelemetry.js",
    "sourceHash": "fddfe8a3344fad9001683b7a25ae10ca2e894199220228872bbdf2ad45301967",
    "summary": "engine/assets/rig/active-body/ContactTelemetry.js — extracted from ActiveBodySystem.js (Ragdoll Stack Consolidation Roadmap, Phase 7). Owns ground-contact resolution (Coulomb friction), per-bone/per-foot/per-sensor-anchor contact telemetry (humanoid AND animal — buildContactTelemetry dispatches to buildAnimalContactTelemetry internally so both paths share one entry point), and the contact-related debug overlay builders. Every function here takes its dependencies as explicit parameters, matching the same extraction pattern as AnimalLocomotion.js.",
    "exports": [
      {
        "name": "enforceGroundContact",
        "kind": "function",
        "signature": "enforceGroundContact(ragdoll, groundY, dt = 1/60, sensors = null)",
        "summary": ""
      },
      {
        "name": "clampSurfaceFriction",
        "kind": "function",
        "signature": "clampSurfaceFriction(value)",
        "summary": ""
      },
      {
        "name": "buildContactTelemetry",
        "kind": "function",
        "signature": "buildContactTelemetry(entry, groundY = 0, sensors = null)",
        "summary": ""
      },
      {
        "name": "buildAnimalContactTelemetry",
        "kind": "function",
        "signature": "buildAnimalContactTelemetry(entry, groundY = 0, sensors = null)",
        "summary": ""
      },
      {
        "name": "buildBoneContactRecord",
        "kind": "function",
        "signature": "buildBoneContactRecord(entry, spec, p, groundY, sensors)",
        "summary": ""
      },
      {
        "name": "buildSensorAnchorTelemetry",
        "kind": "function",
        "signature": "buildSensorAnchorTelemetry(entry, groundY = 0, sensors = null)",
        "summary": ""
      },
      {
        "name": "buildSensorAnchorRecord",
        "kind": "function",
        "signature": "buildSensorAnchorRecord(entry, anchor, groundY, sensors)",
        "summary": ""
      },
      {
        "name": "approximateSensorAnchorPoint",
        "kind": "function",
        "signature": "approximateSensorAnchorPoint(entry, anchor, driver, reference = null)",
        "summary": ""
      },
      {
        "name": "makeSensorAnchorBasis",
        "kind": "function",
        "signature": "makeSensorAnchorBasis(entry, anchor, driver, reference = null)",
        "summary": ""
      },
      {
        "name": "isFootAnchor",
        "kind": "function",
        "signature": "isFootAnchor(anchor)",
        "summary": ""
      },
      {
        "name": "isHandAnchor",
        "kind": "function",
        "signature": "isHandAnchor(anchor)",
        "summary": ""
      },
      {
        "name": "anchorContactPatch",
        "kind": "function",
        "signature": "anchorContactPatch(anchor)",
        "summary": ""
      },
      {
        "name": "readContactSurface",
        "kind": "function",
        "signature": "readContactSurface(sensors, x, z)",
        "summary": ""
      },
      {
        "name": "buildFootContactDerived",
        "kind": "function",
        "signature": "buildFootContactDerived(entry, side, record)",
        "summary": ""
      },
      {
        "name": "copyContactTelemetry",
        "kind": "function",
        "signature": "copyContactTelemetry(contactTelemetry)",
        "summary": ""
      },
      {
        "name": "copySensorAnchorTelemetry",
        "kind": "function",
        "signature": "copySensorAnchorTelemetry(sensorAnchors)",
        "summary": ""
      },
      {
        "name": "copyContactRecord",
        "kind": "function",
        "signature": "copyContactRecord(record)",
        "summary": ""
      },
      {
        "name": "makeContactOverlay",
        "kind": "function",
        "signature": "makeContactOverlay(contactTelemetry)",
        "summary": ""
      },
      {
        "name": "makeContactFootOverlay",
        "kind": "function",
        "signature": "makeContactFootOverlay(record)",
        "summary": ""
      },
      {
        "name": "contactOverlayColor",
        "kind": "function",
        "signature": "contactOverlayColor(record)",
        "summary": ""
      },
      {
        "name": "logContactTrace",
        "kind": "function",
        "signature": "logContactTrace(entry)",
        "summary": ""
      },
      {
        "name": "formatFootContactTrace",
        "kind": "function",
        "signature": "formatFootContactTrace(record)",
        "summary": ""
      },
      {
        "name": "scaledAnimalContactWindow",
        "kind": "function",
        "signature": "scaledAnimalContactWindow(entry, base)",
        "summary": ""
      },
      {
        "name": "FOOT_PARTICLE_SOLE_HEIGHT",
        "kind": "constant",
        "signature": "FOOT_PARTICLE_SOLE_HEIGHT",
        "summary": ""
      },
      {
        "name": "FOOT_PARTICLE_CONTACT_HEIGHT",
        "kind": "constant",
        "signature": "FOOT_PARTICLE_CONTACT_HEIGHT",
        "summary": ""
      },
      {
        "name": "CONTACT_SENSOR_BONES",
        "kind": "constant",
        "signature": "CONTACT_SENSOR_BONES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/DebugOverlay",
    "path": "engine/reference/assets/rig/active-body/DebugOverlay.md",
    "source": "engine/assets/rig/active-body/DebugOverlay.js",
    "import": "/engine/assets/rig/active-body/DebugOverlay.js",
    "sourceHash": "b4d26f1ab15130b1c02d45728e7b886b3caa32f23be0aae8228d8837b7b42beb",
    "summary": "engine/assets/rig/active-body/DebugOverlay.js — extracted from ActiveBodySystem.js (Ragdoll Stack Consolidation Roadmap, Phase 7). Owns pure display/readback helpers: overlay toggle resolution and the make*Overlay builders consumed by ActiveBodySystem.getDebugOverlay()/getReadback(). Deliberately excludes buildMotorAuthorityMap — despite being overlay-adjacent, it's also consumed by live simulation (applyFootReflexTarget/applyBraceProtection Targets), so it stays with the reflex/motor-authority code, not here.",
    "exports": [
      {
        "name": "makeOverlayToggleMap",
        "kind": "function",
        "signature": "makeOverlayToggleMap(source = null, fallback = DEFAULT_ACTIVE_BODY_OVERLAY_TOGGLES)",
        "summary": ""
      },
      {
        "name": "resolveOverlayToggle",
        "kind": "function",
        "signature": "resolveOverlayToggle(value, fallback)",
        "summary": ""
      },
      {
        "name": "makeComOverlay",
        "kind": "function",
        "signature": "makeComOverlay(balance)",
        "summary": ""
      },
      {
        "name": "makeSupportOverlay",
        "kind": "function",
        "signature": "makeSupportOverlay(entry)",
        "summary": ""
      },
      {
        "name": "getSupportFootBoneIds",
        "kind": "function",
        "signature": "getSupportFootBoneIds(entry)",
        "summary": ""
      },
      {
        "name": "makeFatigueOverlay",
        "kind": "function",
        "signature": "makeFatigueOverlay(entry)",
        "summary": ""
      },
      {
        "name": "makeOrganStatusOverlay",
        "kind": "function",
        "signature": "makeOrganStatusOverlay(entry)",
        "summary": ""
      },
      {
        "name": "makePoseTargetOverlay",
        "kind": "function",
        "signature": "makePoseTargetOverlay(entry)",
        "summary": ""
      },
      {
        "name": "makeJointErrorOverlay",
        "kind": "function",
        "signature": "makeJointErrorOverlay(entry)",
        "summary": ""
      },
      {
        "name": "copyRotationTargetSummary",
        "kind": "function",
        "signature": "copyRotationTargetSummary(rotationTargets)",
        "summary": ""
      },
      {
        "name": "copyRotationResidualSummary",
        "kind": "function",
        "signature": "copyRotationResidualSummary(residuals)",
        "summary": ""
      },
      {
        "name": "copyReflexState",
        "kind": "function",
        "signature": "copyReflexState(reflexState)",
        "summary": ""
      },
      {
        "name": "copyMotorAuthorityMap",
        "kind": "function",
        "signature": "copyMotorAuthorityMap(map)",
        "summary": ""
      },
      {
        "name": "DEFAULT_ACTIVE_BODY_OVERLAY_TOGGLES",
        "kind": "constant",
        "signature": "DEFAULT_ACTIVE_BODY_OVERLAY_TOGGLES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/DirectionDiagnostics",
    "path": "engine/reference/assets/rig/active-body/DirectionDiagnostics.md",
    "source": "engine/assets/rig/active-body/DirectionDiagnostics.js",
    "import": "/engine/assets/rig/active-body/DirectionDiagnostics.js",
    "sourceHash": "b6133ceccfc7030eb57c84b1011f9b406580352c6cf4e0eaefd7c30559fd8bcc",
    "summary": "engine/assets/rig/active-body/DirectionDiagnostics.js — extracted from ActiveBodySystem.js (Ragdoll Stack Consolidation Roadmap, Phase 7). Owns per-frame pelvis-displacement direction tracking (updateDirectionMotion) and the direction/facing diagnostics readback consumed by getDirectionDiagnostics()/getReadback() and the orientation-audit debug logging (still in ActiveBodySystem.js).",
    "exports": [
      {
        "name": "updateDirectionMotion",
        "kind": "function",
        "signature": "updateDirectionMotion(entry, dt)",
        "summary": ""
      },
      {
        "name": "buildDirectionDiagnostics",
        "kind": "function",
        "signature": "buildDirectionDiagnostics(entry)",
        "summary": ""
      },
      {
        "name": "resolveIntentDirection",
        "kind": "function",
        "signature": "resolveIntentDirection(entry, pelvis)",
        "summary": ""
      },
      {
        "name": "normalize2",
        "kind": "function",
        "signature": "normalize2(v)",
        "summary": ""
      },
      {
        "name": "dot2",
        "kind": "function",
        "signature": "dot2(a, b)",
        "summary": ""
      },
      {
        "name": "classifyDirectionStatus",
        "kind": "function",
        "signature": "classifyDirectionStatus(intentDotVelocity, speed)",
        "summary": ""
      },
      {
        "name": "boneNameForParticle",
        "kind": "function",
        "signature": "boneNameForParticle(ragdoll, particle)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/MotionPriorTraining",
    "path": "engine/reference/assets/rig/active-body/MotionPriorTraining.md",
    "source": "engine/assets/rig/active-body/MotionPriorTraining.js",
    "import": "/engine/assets/rig/active-body/MotionPriorTraining.js",
    "sourceHash": "20ca80ab20cdc4f3f0fab1672da622ac831bdc7a014ae8ab260db863724cf238",
    "summary": "",
    "exports": [
      {
        "name": "createAniMotionPriorState",
        "kind": "function",
        "signature": "createAniMotionPriorState()",
        "summary": ""
      },
      {
        "name": "getAniMotionPriorReport",
        "kind": "function",
        "signature": "getAniMotionPriorReport(state)",
        "summary": ""
      },
      {
        "name": "loadAniMotionPrior",
        "kind": "function",
        "signature": "async loadAniMotionPrior(state, options = {})",
        "summary": ""
      },
      {
        "name": "mixAniMotionTeacher",
        "kind": "function",
        "signature": "mixAniMotionTeacher(teacher, state, entry, ragdoll, bonesByName, intent = null, options = {})",
        "summary": ""
      },
      {
        "name": "normalizeAniMotionIndexEnvelope",
        "kind": "function",
        "signature": "normalizeAniMotionIndexEnvelope(input)",
        "summary": ""
      },
      {
        "name": "createAi4AnimationMotionClipFromJson",
        "kind": "function",
        "signature": "createAi4AnimationMotionClipFromJson(json, fileName)",
        "summary": ""
      },
      {
        "name": "ANI_MOTION_INDEX_FORMAT",
        "kind": "constant",
        "signature": "ANI_MOTION_INDEX_FORMAT",
        "summary": ""
      },
      {
        "name": "ANI_MOTION_MANIFEST_FORMAT",
        "kind": "constant",
        "signature": "ANI_MOTION_MANIFEST_FORMAT",
        "summary": ""
      },
      {
        "name": "ANI_MOTION_JSON_FORMAT",
        "kind": "constant",
        "signature": "ANI_MOTION_JSON_FORMAT",
        "summary": ""
      },
      {
        "name": "ANI_MOTION_HTTP_SCHEMA_VERSION",
        "kind": "constant",
        "signature": "ANI_MOTION_HTTP_SCHEMA_VERSION",
        "summary": ""
      },
      {
        "name": "ANI_MOTION_HTTP_READ_VERSIONS",
        "kind": "constant",
        "signature": "ANI_MOTION_HTTP_READ_VERSIONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/NeuralMotor",
    "path": "engine/reference/assets/rig/active-body/NeuralMotor.md",
    "source": "engine/assets/rig/active-body/NeuralMotor.js",
    "import": "/engine/assets/rig/active-body/NeuralMotor.js",
    "sourceHash": "754f47de710bb4fc1226e9b57f095d16fdb2127bf792012f99507876b4008322",
    "summary": "NeuralMotor — per-entity self-training MLP for active-ragdoll control. ══════════════════════════════════════════════════════════════════════ WHAT THIS IS (read first) ══════════════════════════════════════════════════════════════════════ The NN adds position RESIDUAL offsets (±8cm per bone) on top of the kinematic verticality pose targets. It is NOT a force generator. The force that actually lifts the body comes from the PD motor in BodyPoses.js, which uses the (NN-refined) targets. This is called \"residual policy learning\" — same approach used by DReCon (Ubisoft, 2020) and DeepMimic. The NN learns the RESIDUAL between hand-authored poses and what the body actually needs. targets_kinematic  (from verticality blend) + NN_residual  (from this file, trained online) = targets_final → PD motor tracks targets_final with realistic muscle force ══════════════════════════════════════════════════════════════════════ TRAINING ALGORITHM: AWR (Advantage-Weighted Regression) ══════════════════════════════════════════════════════════════════════ Every frame: 1. Compute REWARD from body state (pose match, upright, stable, goal progress — see computeReward). 2. Maintain an EMA baseline of reward. 3. Advantage = reward - baseline. 4. Gradient weight = clamp(exp(β·advantage), 0.25, 3). 5. Teacher = what the kinematic controller would nudge this frame. 6. Loss = awrWeight × MSE(NN_output, teacher). 7. One SGD step per frame. Effect: NN imitates the teacher MORE in above-average states and LESS in below-average. This turns behavior cloning into a proper RL method. We don't need full PPO with rollout buffers — training is online and stable because the teacher is always available. STABILITY GATE: training is skipped when the body is thrashing (core velocity > 24 m/s or head below pelvis). Chaotic frames produce noise teacher signals that would corrupt the NN. ══════════════════════════════════════════════════════════════════════ BRAIN TIERS ══════════════════════════════════════════════════════════════════════ tiny   (default NPCs):  43→64→64→60             ≈ 41 KB small  (named NPCs):    43→128→128→60           ≈ 130 KB medium (player default):43→256→256→256→60       ≈ 1.2 MB large  (player upgrade):43→512→1024→1024→60     ≈ 6.6 MB huge   (endgame cap):   43→768→1024³→60         ≈ 10 MB (Input dim 43 = 36 body state + 4 intent one-hot + 3 goal vector.) 10 MB hard cap per brain (enforced at serialize-time). Upgrades via Net2Net weight transplant (upgradeBrain) — preserves learned behavior, new neurons start near-zero and learn later. ══════════════════════════════════════════════════════════════════════ DETERMINISM ══════════════════════════════════════════════════════════════════════ Per-entity seeded PRNG (engine's mulberry32 + FNV-1a string hash of entity id). Same id always produces the same initial brain. Different ids (player, npc_parent, thief_jin) diverge immediately into unique \"personalities\". Drug/seizure/tremor effects also use the per-entity RNG, so effects are reproducible per body. ══════════════════════════════════════════════════════════════════════ NEUROMODIFIERS (drugs, disease, damage) ══════════════════════════════════════════════════════════════════════ The forward pass accepts five perturbations applied to hidden-layer activations, grounded in real pharmacology: noise      — Gaussian σ (alcohol → loss of coordination) dropout    — random activation kill (seizure / KO) scale      — output multiplier (paralytic=0, stimulant=1.4) tremor     — coherent sinusoidal (Parkinsonian 4-6 Hz) delay      — observation buffer lag (concussion) seizureAmp — random spikes in activations See NeuroModifiers.js for preset profiles. ══════════════════════════════════════════════════════════════════════ No external ML library — pure JS, uses engine/core/math/MathRandom.js for shared PRNG utilities. Runs on CPU at 60 Hz for ~20 bodies on a laptop. Training cost ~0.3ms per body per frame (tiny tier).",
    "exports": [
      {
        "name": "tierFromIntelligence",
        "kind": "function",
        "signature": "tierFromIntelligence(score, magical = false)",
        "summary": "Map an intelligence score to the appropriate tier name. Magical tiers (IQ > 100) only return when `magical=true` — otherwise the character is capped at the highest mortal tier (huge)."
      },
      {
        "name": "nextTier",
        "kind": "function",
        "signature": "nextTier(currentTier)",
        "summary": "Get the next tier above the current one, or null if already at top."
      },
      {
        "name": "createNeuralMotor",
        "kind": "function",
        "signature": "createNeuralMotor(tier = DEFAULT_TIER, seedSource = null)",
        "summary": "Create a NeuralMotor. If `seedSource` is given (typically the entity id string), initialization uses a deterministic PRNG — the same id always produces the same starting brain. Different ids get different brains (different \"personalities\") via string hashing."
      },
      {
        "name": "buildObservation",
        "kind": "function",
        "signature": "buildObservation(ragdoll, bonesByName, currentV, targetV, intent = null, rhythms = null, sensors = null)",
        "summary": "Build the observation vector. Dimensions [21..23] originally held a static gravity vector placeholder — we've REPURPOSED these for CPG RHYTHM signals, which give the NN an internal time-base for rhythmic motor actions (walking, breathing): [0..2]   pelvis position (x,y,z) [3..5]   pelvis velocity [6..8]   chest - pelvis (spine vector) [9..11]  shoulder axis (rShoulder - lShoulder) [12..14] COM - pelvis [15]     verticality (0..1, normalized to /50) [16]     verticality gap (target - current, normalized) [17..20] foot contacts (lFoot y, rFoot y, lFoot vy, rFoot vy) [21]     sin(gait_L phase)  ← CPG: left-leg step cycle [22]     cos(gait_L phase) [23]     sin(breath phase)  ← CPG: breathing cycle [24..35] left/right hand/knee positions relative to pelvis [36..39] intent one-hot (stand/walk/duck/act) [40]     target verticality / 50 (goal normalized) [41..42] target direction (xz, world-space, for walk/act) [43..46] terrain (height below / ahead / slope / lateral) — see OBS_SIZE comment [47..50] social (nearest-agent rel xz + rel vxz) [51..54] high-level motor intent (guard/brace/attack/recover) [55..77] tactile/proprioception block The sin/cos encoding of phase is standard NN representation for circular variables (avoids wraparound discontinuity at 2π)."
      },
      {
        "name": "neuralMotorForward",
        "kind": "function",
        "signature": "neuralMotorForward(motor, obs, time = 0, options = null)",
        "summary": "Forward pass through the network with neuromodifier effects applied. Returns per-bone Δxyz offsets (in ragdoll name order)."
      },
      {
        "name": "getNeuralInferenceBackendReport",
        "kind": "function",
        "signature": "getNeuralInferenceBackendReport(bodyCount = 0, gpu = null)",
        "summary": ""
      },
      {
        "name": "computeReward",
        "kind": "function",
        "signature": "computeReward(ragdoll, bonesByName, poseTargets, intent)",
        "summary": "Compute a scalar reward for the current body state. Real DeepMimic-style reward function — additive terms with sensible weights. All terms ∈ [0, 1] so total ≤ sum of weights (~5). poseMatch     — mean bone distance to pose target (closer = higher) upright       — head Y above pelvis Y, normalized (no face-plant) stable        — low velocity = higher (not thrashing) goalProgress  — state-dependent (verticality match, walk speed, etc) Returns: reward ∈ [0, ~5] approximately; scale to [0, 1] with r/5 for AWR weight"
      },
      {
        "name": "trainNeuralMotor",
        "kind": "function",
        "signature": "trainNeuralMotor(motor, obs, teacherOffsets, reward = null, opts = {})",
        "summary": "Advantage-Weighted Regression (AWR) training step. Standard behavior cloning: minimize MSE(NN_out, teacher) AWR: minimize reward_weight * MSE(NN_out, teacher) Effect: NN imitates the teacher ONLY when the state is good (high reward). Bad states contribute ~0 gradient. This implicitly learns which actions lead to high reward — a form of reinforcement learning without full PPO machinery. Used in shipping games (DReCon) and research (AWR, RWR)."
      },
      {
        "name": "getNeuralMotorDebugReport",
        "kind": "function",
        "signature": "getNeuralMotorDebugReport(motor)",
        "summary": ""
      },
      {
        "name": "applyNeuralOffsets",
        "kind": "function",
        "signature": "applyNeuralOffsets(offsets, targets)",
        "summary": "Apply motor output as per-bone target offsets. Call AFTER the kinematic blend has computed its targets; the NN adds corrective deltas."
      },
      {
        "name": "computeTeacherSignal",
        "kind": "function",
        "signature": "computeTeacherSignal(kinematicTargets, ragdoll, bonesByName, rate = 0.15)",
        "summary": "Compute the \"teacher signal\" — the delta the kinematic controller would apply this frame. For DAgger training, this is what the NN tries to predict. Simple formula: (kinematic_target - actual_position) × rate."
      },
      {
        "name": "serializeMotor",
        "kind": "function",
        "signature": "serializeMotor(motor)",
        "summary": "Serialize a NeuralMotor to a compact JSON-safe object. Weights are packed as base64-encoded Float32 bytes. Enforces 10 MB per-brain cap. Layout: { magic, version, tier, hiddens[], bytes (base64), framesTrained, lossEMA }"
      },
      {
        "name": "deserializeMotor",
        "kind": "function",
        "signature": "deserializeMotor(motor, data, options = {})",
        "summary": "Load serialized brain data into an existing motor (replaces weights). Rebuilds layer chain if hiddens differ. Returns true on success."
      },
      {
        "name": "analyzeMotorStorage",
        "kind": "function",
        "signature": "analyzeMotorStorage(motor, packedBytes = null)",
        "summary": ""
      },
      {
        "name": "saveBrain",
        "kind": "function",
        "signature": "async saveBrain(id, motor)",
        "summary": "Save a brain under `id`. Enforces 10 MB per-brain cap."
      },
      {
        "name": "loadBrain",
        "kind": "function",
        "signature": "async loadBrain(id)",
        "summary": "Load a brain by id. Returns serialized data or null."
      },
      {
        "name": "deleteBrain",
        "kind": "function",
        "signature": "async deleteBrain(id)",
        "summary": "Delete a brain."
      },
      {
        "name": "listBrains",
        "kind": "function",
        "signature": "async listBrains()",
        "summary": "List all saved brain ids with their sizes."
      },
      {
        "name": "exportBrainAsJson",
        "kind": "function",
        "signature": "exportBrainAsJson(motor)",
        "summary": "Export a brain as a downloadable JSON file (base64 inside). Useful for sharing trained brains between players."
      },
      {
        "name": "exportBrainAsCompressedJson",
        "kind": "function",
        "signature": "async exportBrainAsCompressedJson(motor)",
        "summary": ""
      },
      {
        "name": "importBrainFromJson",
        "kind": "function",
        "signature": "importBrainFromJson(motor, jsonStr)",
        "summary": "Import a JSON string (from exportBrainAsJson) into a motor."
      },
      {
        "name": "importBrainFromJsonAsync",
        "kind": "function",
        "signature": "async importBrainFromJsonAsync(motor, jsonStr)",
        "summary": ""
      },
      {
        "name": "upgradeBrain",
        "kind": "function",
        "signature": "upgradeBrain(motor, newTier)",
        "summary": "Upgrade a motor to a bigger tier. Weight matrices are transplanted so the pre-upgrade behavior is preserved; new neurons start with near-zero influence and gradually learn new behaviors. Returns true if upgraded, false if target tier isn't actually bigger."
      },
      {
        "name": "getUpgradeOptions",
        "kind": "function",
        "signature": "getUpgradeOptions(currentTier)",
        "summary": "Check which tiers an entity can upgrade to (tier order: tiny→small→medium→large→huge)."
      },
      {
        "name": "BRAIN_TIERS",
        "kind": "constant",
        "signature": "BRAIN_TIERS",
        "summary": ""
      },
      {
        "name": "TIER_LADDER",
        "kind": "constant",
        "signature": "TIER_LADDER",
        "summary": ""
      },
      {
        "name": "MAGICAL_TIERS",
        "kind": "constant",
        "signature": "MAGICAL_TIERS",
        "summary": ""
      },
      {
        "name": "INTELLIGENCE_TIERS",
        "kind": "constant",
        "signature": "INTELLIGENCE_TIERS",
        "summary": ""
      },
      {
        "name": "MAX_BRAIN_BYTES",
        "kind": "constant",
        "signature": "MAX_BRAIN_BYTES",
        "summary": ""
      },
      {
        "name": "WARN_BRAIN_BYTES",
        "kind": "constant",
        "signature": "WARN_BRAIN_BYTES",
        "summary": ""
      },
      {
        "name": "MAX_PLAYER_SLOTS",
        "kind": "constant",
        "signature": "MAX_PLAYER_SLOTS",
        "summary": ""
      },
      {
        "name": "STATE_INTENTS",
        "kind": "constant",
        "signature": "STATE_INTENTS",
        "summary": ""
      },
      {
        "name": "NUM_INTENTS",
        "kind": "constant",
        "signature": "NUM_INTENTS",
        "summary": ""
      },
      {
        "name": "ACTION_SIZE",
        "kind": "re-export",
        "signature": "ACTION_SIZE",
        "summary": ""
      },
      {
        "name": "BONE_ORDER",
        "kind": "re-export",
        "signature": "BONE_ORDER",
        "summary": ""
      },
      {
        "name": "OBS_SIZE",
        "kind": "re-export",
        "signature": "OBS_SIZE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/NeuralResidualController",
    "path": "engine/reference/assets/rig/active-body/NeuralResidualController.md",
    "source": "engine/assets/rig/active-body/NeuralResidualController.js",
    "import": "/engine/assets/rig/active-body/NeuralResidualController.js",
    "sourceHash": "fe1dcf5e7ba692d548678bb06744070359634ca587c725af7b8114cab12321c7",
    "summary": "engine/assets/rig/active-body/NeuralResidualController.js — extracted from ActiveBodySystem.js (Ragdoll Stack Consolidation Roadmap, Phase 7). Owns the humanoid rotation-residual cluster: converting NN bone offsets into axis-angle residuals blended on top of kinematic rotation targets, and zeroing out idle-state NN drift on the horizontal (and, for a fixed set of upper-body bones, vertical) axes so a \"resting\" NN doesn't slowly walk the pose off-target. Pure functions — callers (the pose-target pipeline, still in ActiveBodySystem.js) own all the surrounding per-frame state.",
    "exports": [
      {
        "name": "dampIdleNeuralOffsets",
        "kind": "function",
        "signature": "dampIdleNeuralOffsets(offsets)",
        "summary": ""
      },
      {
        "name": "extractRotationTargets",
        "kind": "function",
        "signature": "extractRotationTargets(poseTargets)",
        "summary": ""
      },
      {
        "name": "computeNeuralRotationResidualHints",
        "kind": "function",
        "signature": "computeNeuralRotationResidualHints(rotationTargets, poseState, neuralOffsets = null, weight = 1)",
        "summary": ""
      },
      {
        "name": "neuralOffsetToAxisAngle",
        "kind": "function",
        "signature": "neuralOffsetToAxisAngle(neuralOffsets, boneId, weight = 1)",
        "summary": ""
      },
      {
        "name": "IDLE_NEURAL_VERTICAL_BLOCK_BONES",
        "kind": "constant",
        "signature": "IDLE_NEURAL_VERTICAL_BLOCK_BONES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/NeuroModifiers",
    "path": "engine/reference/assets/rig/active-body/NeuroModifiers.md",
    "source": "engine/assets/rig/active-body/NeuroModifiers.js",
    "import": "/engine/assets/rig/active-body/NeuroModifiers.js",
    "sourceHash": "a77dd92362a606bd2d59ed2f3821b4ad91a3a897ab4cda04d26e2487caa30ac9",
    "summary": "NeuroModifiers — preset effect profiles that corrupt the NeuralMotor's forward pass to produce realistic neurological symptoms. Each profile mutates the `motor.modifiers` bag on a NeuralMotor instance. Multiple effects stack by summing noise/dropout and multiplying scale. Grounded in real pharmacology/neurology: - alcohol:   inhibits GABA → activation noise + slow reaction (delay) - paralytic: blocks ACh at NMJ → output scale → 0 (limp) - stimulant: excess catecholamines → amplified output, jitter - tranq:    dopamine block → output scale 0.4, delay 3 - poison:   neural death → growing dropout + decreasing scale - seizure:  hypersynchronous discharge → huge activation spikes - tremor:   basal-ganglia dysfn (Parkinson) → coherent 4-6 Hz oscillation",
    "exports": [
      {
        "name": "applyNeuroProfile",
        "kind": "function",
        "signature": "applyNeuroProfile(motor, profileName)",
        "summary": "Apply a preset profile to a NeuralMotor (replaces current modifiers)."
      },
      {
        "name": "rampNeuroProfile",
        "kind": "function",
        "signature": "rampNeuroProfile(motor, profileName, t)",
        "summary": "Blend toward a profile over time — e.g. poison progression. `t` ∈ [0,1] is how far along the progression is."
      },
      {
        "name": "clearNeuroModifiers",
        "kind": "function",
        "signature": "clearNeuroModifiers(motor)",
        "summary": "Reset all neuromodifiers to healthy."
      },
      {
        "name": "applyNeuroJerks",
        "kind": "function",
        "signature": "applyNeuroJerks(ragdoll, motor, time, dt)",
        "summary": "Apply neuromodifier effects DIRECTLY to the ragdoll bones, bypassing the NN. Needed because the NN only runs during `getup` state; seizures etc. should be visible in ANY state (idle, fallen, walking). This is the physical manifestation of motor-cortex corruption: tremor      → coherent sinusoidal force (Parkinsonian shake) seizureAmp  → random large impulses (tonic-clonic thrashing) noise       → Gaussian jitter on force (alcohol wobble) scale       → global force multiplier (paralytic = 0 → body goes limp) Scales with bone mass so effects feel right (heavy pelvis thrashes harder than hand). Called each frame in the main update loop."
      },
      {
        "name": "NEURO_PROFILES",
        "kind": "constant",
        "signature": "NEURO_PROFILES",
        "summary": "NeuroModifiers — preset effect profiles that corrupt the NeuralMotor's forward pass to produce realistic neurological symptoms. Each profile mutates the `motor.modifiers` bag on a NeuralMotor instance. Multiple effects stack by summing noise/dropout and multiplying scale. Grounded in real pharmacology/neurology: - alcohol:   inhibits GABA → activation noise + slow reaction (delay) - paralytic: blocks ACh at NMJ → output scale → 0 (limp) - stimulant: excess catecholamines → amplified output, jitter - tranq:    dopamine block → output scale 0.4, delay 3 - poison:   neural death → growing dropout + decreasing scale - seizure:  hypersynchronous discharge → huge activation spikes - tremor:   basal-ganglia dysfn (Parkinson) → coherent 4-6 Hz oscillation"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/OrientationAudit",
    "path": "engine/reference/assets/rig/active-body/OrientationAudit.md",
    "source": "engine/assets/rig/active-body/OrientationAudit.js",
    "import": "/engine/assets/rig/active-body/OrientationAudit.js",
    "sourceHash": "d757e89e70564ee44da99e3e9999a90d76b1b5fac75f567f017c1adc23146f95",
    "summary": "engine/assets/rig/active-body/OrientationAudit.js — extracted from ActiveBodySystem.js (Ragdoll Stack Consolidation Roadmap, Phase 7). Owns pure console.log debug tracing: per-frame locomotion-target deltas, the body-vs-particle-vs-facing orientation audit, and the authored-pose directional-consistency self-check (knees/elbows/toes/belly orientation). Distinct from DebugOverlay.js's structured readback data — this is developer-console tracing only, no return values consumed by callers.",
    "exports": [
      {
        "name": "logLocomotionTargetTrace",
        "kind": "function",
        "signature": "logLocomotionTargetTrace(entry, ragdoll, targets, meta)",
        "summary": ""
      },
      {
        "name": "logOrientationAudit",
        "kind": "function",
        "signature": "logOrientationAudit(entry, ragdoll)",
        "summary": ""
      },
      {
        "name": "logFinalDirectionAudit",
        "kind": "function",
        "signature": "logFinalDirectionAudit(entry)",
        "summary": ""
      },
      {
        "name": "lHandDelta",
        "kind": "function",
        "signature": "lHandDelta(yaw, bfX, bfZ)",
        "summary": ""
      },
      {
        "name": "auditAllPoses",
        "kind": "function",
        "signature": "auditAllPoses()",
        "summary": ""
      },
      {
        "name": "auditPose",
        "kind": "function",
        "signature": "auditPose(pose)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/PhysicsMotor",
    "path": "engine/reference/assets/rig/active-body/PhysicsMotor.md",
    "source": "engine/assets/rig/active-body/PhysicsMotor.js",
    "import": "/engine/assets/rig/active-body/PhysicsMotor.js",
    "sourceHash": "cf857e1668d16cbc09c776cc9492c6dce8a3c9de4dbbef11b2714b151520981f",
    "summary": "engine/assets/rig/active-body/PhysicsMotor.js — extracted from ActiveBodySystem.js (Ragdoll Stack Consolidation Roadmap, Phase 7). Owns the pure physics-application layer for the humanoid Verlet/PBD ragdoll: initial walking-skeleton kinematic pose construction, pelvis anchoring, per-bone joint-torque drive, and hinge-limit computation/enforcement + compliance scaling. Separate concern from pose-TARGET computation (still in ActiveBodySystem.js) — this module only turns targets/limits into forces applied to the ragdoll's particles.",
    "exports": [
      {
        "name": "buildWalkingSkeleton",
        "kind": "function",
        "signature": "buildWalkingSkeleton(anchor, nav, m)",
        "summary": ""
      },
      {
        "name": "setRagdollPose",
        "kind": "function",
        "signature": "setRagdollPose(ragdoll, anchor, m, options = {})",
        "summary": ""
      },
      {
        "name": "currentPelvisPosition",
        "kind": "function",
        "signature": "currentPelvisPosition(ragdoll)",
        "summary": ""
      },
      {
        "name": "applyPelvisAnchor",
        "kind": "function",
        "signature": "applyPelvisAnchor(ragdoll, skeleton, dt)",
        "summary": ""
      },
      {
        "name": "applyJointTorques",
        "kind": "function",
        "signature": "applyJointTorques(ragdoll, skeleton, dt, state, driveByBone = null)",
        "summary": ""
      },
      {
        "name": "computeHingeLimits",
        "kind": "function",
        "signature": "computeHingeLimits(ragdoll, m, jointLimitsByBone = null)",
        "summary": ""
      },
      {
        "name": "applyHingeLimits",
        "kind": "function",
        "signature": "applyHingeLimits(limits)",
        "summary": ""
      },
      {
        "name": "complianceStrength",
        "kind": "function",
        "signature": "complianceStrength(jointLimitsByBone)",
        "summary": ""
      },
      {
        "name": "complianceStrengthFor",
        "kind": "function",
        "signature": "complianceStrengthFor(jointLimitsByBone, names, fallback = 1)",
        "summary": ""
      },
      {
        "name": "jointSwingScaleFor",
        "kind": "function",
        "signature": "jointSwingScaleFor(jointLimitsByBone, names, defaultSwingDeg)",
        "summary": ""
      },
      {
        "name": "jointTwistScaleFor",
        "kind": "function",
        "signature": "jointTwistScaleFor(jointLimitsByBone, names, defaultTwistDeg)",
        "summary": ""
      },
      {
        "name": "JOINT_STIFFNESS",
        "kind": "constant",
        "signature": "JOINT_STIFFNESS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/PoseAuthority",
    "path": "engine/reference/assets/rig/active-body/PoseAuthority.md",
    "source": "engine/assets/rig/active-body/PoseAuthority.js",
    "import": "/engine/assets/rig/active-body/PoseAuthority.js",
    "sourceHash": "20aa316053b6aa08d91e1a16c3092bff57fce0304131ef23c077a7fd24e34987",
    "summary": "engine/assets/rig/active-body/PoseAuthority.js — extracted from ActiveBodySystem.js (Ragdoll Stack Consolidation Roadmap, Phase 7). This is the hardest and last Phase 7 cluster: the humanoid standing/getup pose-target pipeline — applyStandingController (kinematic pose blending, walk-cycle overlay, balance correction, rhythm/breathing modulation, contact reflexes, brace protection, NN residual blending, training) and applyGetupController (orientation-aware rise sequencing), plus every helper they call (limb/shoulder/head stabilization, reflex classification, motor-authority mapping, pose-state resolution). Deliberately NOT split further — these helpers are tightly entangled with the two controller functions and with each other; see the Phase 7 pre-work notes in the roadmap doc.",
    "exports": [
      {
        "name": "coupleShoulderGirdleTargets",
        "kind": "function",
        "signature": "coupleShoulderGirdleTargets(entry, ragdoll, targets, yaw)",
        "summary": ""
      },
      {
        "name": "getBodySideAxis",
        "kind": "function",
        "signature": "getBodySideAxis(entry, ragdoll, yaw = null, preferYaw = false)",
        "summary": ""
      },
      {
        "name": "clampTargetToSide",
        "kind": "function",
        "signature": "clampTargetToSide(targets, name, base, side, minSide, isLeft, strength = 1)",
        "summary": ""
      },
      {
        "name": "alignFootToeTargets",
        "kind": "function",
        "signature": "alignFootToeTargets(entry, targets, yaw, leftLegIsSwing = false, rightLegIsSwing = false, isWalking = false)",
        "summary": ""
      },
      {
        "name": "clampLimbSideTargets",
        "kind": "function",
        "signature": "clampLimbSideTargets(entry, ragdoll, targets, yaw = null)",
        "summary": ""
      },
      {
        "name": "stabilizeLimbSideFrame",
        "kind": "function",
        "signature": "stabilizeLimbSideFrame(entry, ragdoll, dt)",
        "summary": ""
      },
      {
        "name": "stabilizeShoulderGirdleFrame",
        "kind": "function",
        "signature": "stabilizeShoulderGirdleFrame(entry, ragdoll)",
        "summary": ""
      },
      {
        "name": "dampRelativeVelocity",
        "kind": "function",
        "signature": "dampRelativeVelocity(child, parent, keep, dt)",
        "summary": ""
      },
      {
        "name": "stabilizeHeadNeckFrame",
        "kind": "function",
        "signature": "stabilizeHeadNeckFrame(entry, ragdoll, dt)",
        "summary": ""
      },
      {
        "name": "hasActiveMoveIntent",
        "kind": "function",
        "signature": "hasActiveMoveIntent(entry)",
        "summary": ""
      },
      {
        "name": "applyGroundedNoIntentSettleBrake",
        "kind": "function",
        "signature": "applyGroundedNoIntentSettleBrake(entry, ragdoll, dt)",
        "summary": ""
      },
      {
        "name": "applyBalanceCorrectionToTargets",
        "kind": "function",
        "signature": "applyBalanceCorrectionToTargets(targets, balanceState, weight = 1)",
        "summary": ""
      },
      {
        "name": "applyRhythmPoseModulation",
        "kind": "function",
        "signature": "applyRhythmPoseModulation(targets, rhythms, weight = 1, fatigue = 0)",
        "summary": ""
      },
      {
        "name": "makeReflexState",
        "kind": "function",
        "signature": "makeReflexState()",
        "summary": ""
      },
      {
        "name": "applyContactReflexTargets",
        "kind": "function",
        "signature": "applyContactReflexTargets(entry, ragdoll, targets, options = {})",
        "summary": ""
      },
      {
        "name": "classifyReflexMode",
        "kind": "function",
        "signature": "classifyReflexMode(entry, options)",
        "summary": ""
      },
      {
        "name": "reflexConfidence",
        "kind": "function",
        "signature": "reflexConfidence(contactTelemetry, mode, leftTrust, rightTrust)",
        "summary": ""
      },
      {
        "name": "buildMotorAuthorityMap",
        "kind": "function",
        "signature": "buildMotorAuthorityMap(entry, contactTelemetry)",
        "summary": ""
      },
      {
        "name": "applyFootReflexTarget",
        "kind": "function",
        "signature": "applyFootReflexTarget(entry, targets, record, options)",
        "summary": ""
      },
      {
        "name": "applyBraceProtectionTargets",
        "kind": "function",
        "signature": "applyBraceProtectionTargets(contactTelemetry, targets, options)",
        "summary": ""
      },
      {
        "name": "resolveActivePoseState",
        "kind": "function",
        "signature": "resolveActivePoseState(entry)",
        "summary": ""
      },
      {
        "name": "makePoseStateMeta",
        "kind": "function",
        "signature": "makePoseStateMeta(stateId)",
        "summary": ""
      },
      {
        "name": "applyStandingController",
        "kind": "function",
        "signature": "applyStandingController(ragdoll, entry, dt)",
        "summary": ""
      },
      {
        "name": "_bonesByName",
        "kind": "function",
        "signature": "_bonesByName(ragdoll)",
        "summary": ""
      },
      {
        "name": "applyGetupController",
        "kind": "function",
        "signature": "applyGetupController(ragdoll, entry, dt)",
        "summary": ""
      },
      {
        "name": "getBoneRadius",
        "kind": "function",
        "signature": "getBoneRadius(boneId, m)",
        "summary": ""
      },
      {
        "name": "stateToString",
        "kind": "function",
        "signature": "stateToString(state)",
        "summary": ""
      },
      {
        "name": "WALK_HORIZONTAL_SCALE_BY_BONE",
        "kind": "constant",
        "signature": "WALK_HORIZONTAL_SCALE_BY_BONE",
        "summary": ""
      },
      {
        "name": "WALK_HORIZONTAL_DAMPING_SCALE_BY_BONE",
        "kind": "constant",
        "signature": "WALK_HORIZONTAL_DAMPING_SCALE_BY_BONE",
        "summary": ""
      },
      {
        "name": "IDLE_HORIZONTAL_SCALE_BY_BONE",
        "kind": "constant",
        "signature": "IDLE_HORIZONTAL_SCALE_BY_BONE",
        "summary": ""
      },
      {
        "name": "IDLE_HORIZONTAL_DAMPING_SCALE_BY_BONE",
        "kind": "constant",
        "signature": "IDLE_HORIZONTAL_DAMPING_SCALE_BY_BONE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/UniversalLegScheduler",
    "path": "engine/reference/assets/rig/active-body/UniversalLegScheduler.md",
    "source": "engine/assets/rig/active-body/UniversalLegScheduler.js",
    "import": "/engine/assets/rig/active-body/UniversalLegScheduler.js",
    "sourceHash": "6ec7aa4e3c3db39543b7b9e9b493e84c081c39aef12d69178f923d4d344ec31c",
    "summary": "engine/assets/rig/active-body/UniversalLegScheduler.js — extracted from ActiveBodySystem.js (Ragdoll Stack Consolidation Roadmap, Phase 7). Owns N-legged support-polygon analysis and gait-preset recommendation for the generic/readback-only \"universal leg scheduler\" — the leg discovery, phase, and support-polygon math shared conceptually with the animal gait system, but exposed here purely as debug/readback (ActiveBodySystem's getReadback() is the only call site; it does not drive live pose targets).",
    "exports": [
      {
        "name": "makeUniversalLegSchedulerReadback",
        "kind": "function",
        "signature": "makeUniversalLegSchedulerReadback(entry, contactTelemetry)",
        "summary": ""
      },
      {
        "name": "discoverUniversalLegs",
        "kind": "function",
        "signature": "discoverUniversalLegs(entry)",
        "summary": ""
      },
      {
        "name": "normalizeUniversalLegDescriptors",
        "kind": "function",
        "signature": "normalizeUniversalLegDescriptors(descriptors, entry, allowMetadataOnly = true)",
        "summary": ""
      },
      {
        "name": "defaultUniversalLegRhythmIndex",
        "kind": "function",
        "signature": "defaultUniversalLegRhythmIndex(descriptor)",
        "summary": ""
      },
      {
        "name": "makeUniversalLegReadback",
        "kind": "function",
        "signature": "makeUniversalLegReadback(entry, leg, contactTelemetry)",
        "summary": ""
      },
      {
        "name": "makeUniversalSupportAnalysis",
        "kind": "function",
        "signature": "makeUniversalSupportAnalysis(entry, legs)",
        "summary": ""
      },
      {
        "name": "universalLegState",
        "kind": "function",
        "signature": "universalLegState(contact, swingAmount)",
        "summary": ""
      },
      {
        "name": "getUniversalLegPhase",
        "kind": "function",
        "signature": "getUniversalLegPhase(entry, leg)",
        "summary": ""
      },
      {
        "name": "supportModeFor",
        "kind": "function",
        "signature": "supportModeFor(pointCount, legCount)",
        "summary": ""
      },
      {
        "name": "supportComMargin",
        "kind": "function",
        "signature": "supportComMargin(com, points)",
        "summary": ""
      },
      {
        "name": "recoveryDirection",
        "kind": "function",
        "signature": "recoveryDirection(com, center)",
        "summary": ""
      },
      {
        "name": "signedPolygonMargin2D",
        "kind": "function",
        "signature": "signedPolygonMargin2D(point, polygon)",
        "summary": ""
      },
      {
        "name": "pointInPolygon2D",
        "kind": "function",
        "signature": "pointInPolygon2D(point, polygon)",
        "summary": ""
      },
      {
        "name": "distancePointToSegment2D",
        "kind": "function",
        "signature": "distancePointToSegment2D(point, a, b)",
        "summary": ""
      },
      {
        "name": "distance2D",
        "kind": "function",
        "signature": "distance2D(a, b)",
        "summary": ""
      },
      {
        "name": "particlePoint",
        "kind": "function",
        "signature": "particlePoint(entry, boneName)",
        "summary": ""
      },
      {
        "name": "hasBone",
        "kind": "function",
        "signature": "hasBone(entry, boneName)",
        "summary": ""
      },
      {
        "name": "recommendUniversalGaitPreset",
        "kind": "function",
        "signature": "recommendUniversalGaitPreset(entry, legCount)",
        "summary": ""
      },
      {
        "name": "copyUniversalGaitPresets",
        "kind": "function",
        "signature": "copyUniversalGaitPresets(legCount)",
        "summary": ""
      },
      {
        "name": "copyUniversalGaitPresetMap",
        "kind": "function",
        "signature": "copyUniversalGaitPresetMap()",
        "summary": ""
      },
      {
        "name": "makeGenericOddLegWavePreset",
        "kind": "function",
        "signature": "makeGenericOddLegWavePreset(legCount)",
        "summary": ""
      },
      {
        "name": "UNIVERSAL_GAIT_PRESETS",
        "kind": "constant",
        "signature": "UNIVERSAL_GAIT_PRESETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/anatomy/BioelectricSignals",
    "path": "engine/reference/assets/rig/active-body/anatomy/BioelectricSignals.md",
    "source": "engine/assets/rig/active-body/anatomy/BioelectricSignals.js",
    "import": "/engine/assets/rig/active-body/anatomy/BioelectricSignals.js",
    "sourceHash": "61797b795d584da214afec1b25e0bd58f7fde93d342a10c406d7546f50e583f8",
    "summary": "",
    "exports": [
      {
        "name": "createBioelectricSignalState",
        "kind": "function",
        "signature": "createBioelectricSignalState()",
        "summary": ""
      },
      {
        "name": "stepBioelectricSignals",
        "kind": "function",
        "signature": "stepBioelectricSignals(state, inputs = {}, dt = 0)",
        "summary": ""
      },
      {
        "name": "getBioelectricSignalReadback",
        "kind": "function",
        "signature": "getBioelectricSignalReadback(state)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/anatomy/BreathingBodyCoupling",
    "path": "engine/reference/assets/rig/active-body/anatomy/BreathingBodyCoupling.md",
    "source": "engine/assets/rig/active-body/anatomy/BreathingBodyCoupling.js",
    "import": "/engine/assets/rig/active-body/anatomy/BreathingBodyCoupling.js",
    "sourceHash": "46522ef6b4ff5ed2a3acd567e1acaaeb34f3955a8d9ec84706b4cd4aafe48a92",
    "summary": "",
    "exports": [
      {
        "name": "getBreathingBodyCouplingReadback",
        "kind": "function",
        "signature": "getBreathingBodyCouplingReadback(diaphragm = null, rhythms = null)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/anatomy/CirculatorySystem",
    "path": "engine/reference/assets/rig/active-body/anatomy/CirculatorySystem.md",
    "source": "engine/assets/rig/active-body/anatomy/CirculatorySystem.js",
    "import": "/engine/assets/rig/active-body/anatomy/CirculatorySystem.js",
    "sourceHash": "3a48443b0fde9fe6798c124e204a89919e5647a08f327f4b4d3774943d6c7757",
    "summary": "",
    "exports": [
      {
        "name": "createCirculatoryState",
        "kind": "function",
        "signature": "createCirculatoryState()",
        "summary": ""
      },
      {
        "name": "stepCirculation",
        "kind": "function",
        "signature": "stepCirculation(state, inputs = {}, dt = 0)",
        "summary": ""
      },
      {
        "name": "getCirculatoryReadback",
        "kind": "function",
        "signature": "getCirculatoryReadback(state)",
        "summary": ""
      },
      {
        "name": "getCirculationGraphReadback",
        "kind": "function",
        "signature": "getCirculationGraphReadback(state)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/anatomy/DiaphragmSystem",
    "path": "engine/reference/assets/rig/active-body/anatomy/DiaphragmSystem.md",
    "source": "engine/assets/rig/active-body/anatomy/DiaphragmSystem.js",
    "import": "/engine/assets/rig/active-body/anatomy/DiaphragmSystem.js",
    "sourceHash": "0db0ed59c44426ea5ed69947470eeaa284cc8a46f9ae6047db717a8af912d8ec",
    "summary": "",
    "exports": [
      {
        "name": "createDiaphragmState",
        "kind": "function",
        "signature": "createDiaphragmState(anatomy = null)",
        "summary": ""
      },
      {
        "name": "stepDiaphragm",
        "kind": "function",
        "signature": "stepDiaphragm(state, rhythms = null, dt = 0)",
        "summary": ""
      },
      {
        "name": "getDiaphragmReadback",
        "kind": "function",
        "signature": "getDiaphragmReadback(state)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/anatomy/NervousSystem",
    "path": "engine/reference/assets/rig/active-body/anatomy/NervousSystem.md",
    "source": "engine/assets/rig/active-body/anatomy/NervousSystem.js",
    "import": "/engine/assets/rig/active-body/anatomy/NervousSystem.js",
    "sourceHash": "87c053a072fbf4c61c0774e0b2691a08945ccbaa7078cec74e1a2039d5e40e5f",
    "summary": "",
    "exports": [
      {
        "name": "createNervousSystemState",
        "kind": "function",
        "signature": "createNervousSystemState()",
        "summary": ""
      },
      {
        "name": "stepNervousSystem",
        "kind": "function",
        "signature": "stepNervousSystem(state, inputs = {}, dt = 0)",
        "summary": ""
      },
      {
        "name": "getNervousSystemReadback",
        "kind": "function",
        "signature": "getNervousSystemReadback(state)",
        "summary": ""
      },
      {
        "name": "getNerveGraphReadback",
        "kind": "function",
        "signature": "getNerveGraphReadback(state)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/anatomy/OrganDamageSystem",
    "path": "engine/reference/assets/rig/active-body/anatomy/OrganDamageSystem.md",
    "source": "engine/assets/rig/active-body/anatomy/OrganDamageSystem.js",
    "import": "/engine/assets/rig/active-body/anatomy/OrganDamageSystem.js",
    "sourceHash": "d966140a921de055dc49c061d895728a05fbde0a55bd68492a69488ebb70f4f7",
    "summary": "",
    "exports": [
      {
        "name": "createOrganDamageState",
        "kind": "function",
        "signature": "createOrganDamageState()",
        "summary": ""
      },
      {
        "name": "applyOrganDamage",
        "kind": "function",
        "signature": "applyOrganDamage(state, organs, target, amount, options = {})",
        "summary": ""
      },
      {
        "name": "stepOrganDamage",
        "kind": "function",
        "signature": "stepOrganDamage(state, organs, inputs = {}, dt = 0)",
        "summary": ""
      },
      {
        "name": "getOrganDamageReadback",
        "kind": "function",
        "signature": "getOrganDamageReadback(state)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/anatomy/OrganSystem",
    "path": "engine/reference/assets/rig/active-body/anatomy/OrganSystem.md",
    "source": "engine/assets/rig/active-body/anatomy/OrganSystem.js",
    "import": "/engine/assets/rig/active-body/anatomy/OrganSystem.js",
    "sourceHash": "4e1b03b28a3094b80f377571e87a40d239efe596e0954418d4b6a4380b8542f9",
    "summary": "",
    "exports": [
      {
        "name": "createOrganState",
        "kind": "function",
        "signature": "createOrganState(anatomy = null, attachments = null)",
        "summary": ""
      },
      {
        "name": "getOrganReadback",
        "kind": "function",
        "signature": "getOrganReadback(organs)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/anatomy/PBPKSystem",
    "path": "engine/reference/assets/rig/active-body/anatomy/PBPKSystem.md",
    "source": "engine/assets/rig/active-body/anatomy/PBPKSystem.js",
    "import": "/engine/assets/rig/active-body/anatomy/PBPKSystem.js",
    "sourceHash": "61dd070c8f412c089b00f2be106c6e3894e6f06786aa9aa9629be82d9da5c638",
    "summary": "",
    "exports": [
      {
        "name": "createPBPKState",
        "kind": "function",
        "signature": "createPBPKState()",
        "summary": ""
      },
      {
        "name": "addPBPKDose",
        "kind": "function",
        "signature": "addPBPKDose(state, substanceId, amount, options = {})",
        "summary": ""
      },
      {
        "name": "stepPBPK",
        "kind": "function",
        "signature": "stepPBPK(state, inputs = {}, dt = 0)",
        "summary": ""
      },
      {
        "name": "getPBPKReadback",
        "kind": "function",
        "signature": "getPBPKReadback(state)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/anatomy/SoftTissueSystem",
    "path": "engine/reference/assets/rig/active-body/anatomy/SoftTissueSystem.md",
    "source": "engine/assets/rig/active-body/anatomy/SoftTissueSystem.js",
    "import": "/engine/assets/rig/active-body/anatomy/SoftTissueSystem.js",
    "sourceHash": "b8e9554b27f3a970a7b3ca7fe065387da8487914c2a3498218f380f81bd44761",
    "summary": "",
    "exports": [
      {
        "name": "createSoftTissueState",
        "kind": "function",
        "signature": "createSoftTissueState(anatomy = null)",
        "summary": ""
      },
      {
        "name": "stepSoftTissue",
        "kind": "function",
        "signature": "stepSoftTissue(state, inputs = {}, dt = 0)",
        "summary": ""
      },
      {
        "name": "getSoftTissueReadback",
        "kind": "function",
        "signature": "getSoftTissueReadback(state)",
        "summary": ""
      },
      {
        "name": "sampleSoftTissueBoneMotion",
        "kind": "function",
        "signature": "sampleSoftTissueBoneMotion(ragdoll = null)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/anatomy/VitalSigns",
    "path": "engine/reference/assets/rig/active-body/anatomy/VitalSigns.md",
    "source": "engine/assets/rig/active-body/anatomy/VitalSigns.js",
    "import": "/engine/assets/rig/active-body/anatomy/VitalSigns.js",
    "sourceHash": "ebbe7e8ce0a1f373c30c10d2cfc5432910d89e3694ed05673b638a9ce2d9d4d9",
    "summary": "",
    "exports": [
      {
        "name": "createVitalSignsState",
        "kind": "function",
        "signature": "createVitalSignsState()",
        "summary": ""
      },
      {
        "name": "stepVitalSigns",
        "kind": "function",
        "signature": "stepVitalSigns(state, inputs = {}, dt = 0)",
        "summary": ""
      },
      {
        "name": "getVitalSignsReadback",
        "kind": "function",
        "signature": "getVitalSignsReadback(state)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/active-body/anatomy/index",
    "path": "engine/reference/assets/rig/active-body/anatomy/index.md",
    "source": "engine/assets/rig/active-body/anatomy/index.js",
    "import": "/engine/assets/rig/active-body/anatomy/index.js",
    "sourceHash": "91f6bf23500772b0a1250ca2d2cd83a7756d7e77302a50fd41155c496e782d4b",
    "summary": "engine/assets/rig/active-body/anatomy/index.js — anatomy subsystem barrel. Every other subsystem in the engine exposes a barrel (`voxel/index.js`, `sim/ai/index.js`, `gameplay/perception/index.js`); the anatomy modules did not, which is part of why they were unreachable from any compiled bundle. This is purely additive — no module below is modified, and nothing that already imports these files by path is affected. The subsystem models a body as interacting physiological systems rather than a hit-point total: - `OrganSystem`        per-organ integrity, perfusion, oxygenation, function - `OrganDamageSystem`  wounds by mechanism, bleeding, hypoxia, shock - `CirculatorySystem`  cardiac output, per-limb and per-organ blood flow - `NervousSystem`      spinal cord, 16 peripheral regions, motor authority, and per-region motor/sensory/touch/pain channels - `VitalSigns`         heart rate, respiration, blood pressure, SpO2 - `DiaphragmSystem`    breathing drive and rib/sternum coupling - `BreathingBodyCoupling` breathing translated into bone pose offsets - `SoftTissueSystem`   mass-spring tissue displacement and strain - `PBPKSystem`         multi-compartment pharmacokinetics for any substance - `BioelectricSignals` low-level signal propagation",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "assets/rig/index",
    "path": "engine/reference/assets/rig/index.md",
    "source": "engine/assets/rig/index.js",
    "import": "/engine/assets/rig/index.js",
    "sourceHash": "6e52ae51a35af1202bed06c804bcbd9b5d23a577c3912a3ccd615b01f3eb2dfe",
    "summary": "Stable public rig surface for raw modules, Engine.Rig, and bundled PE.Rig. The named groups preserve each source module's boundary while the flat functions keep the existing engine/assets API available without adapters.",
    "exports": [
      {
        "name": "JointLimits",
        "kind": "constant",
        "signature": "JointLimits",
        "summary": "Stable public rig surface for raw modules, Engine.Rig, and bundled PE.Rig. The named groups preserve each source module's boundary while the flat functions keep the existing engine/assets API available without adapters."
      },
      {
        "name": "RagdollBuilder",
        "kind": "constant",
        "signature": "RagdollBuilder",
        "summary": ""
      },
      {
        "name": "RagdollSim",
        "kind": "constant",
        "signature": "RagdollSim",
        "summary": ""
      },
      {
        "name": "RagdollSkinning",
        "kind": "constant",
        "signature": "RagdollSkinning",
        "summary": ""
      },
      {
        "name": "CharacterPhysicsAsset",
        "kind": "constant",
        "signature": "CharacterPhysicsAsset",
        "summary": ""
      },
      {
        "name": "BodyTemplateExport",
        "kind": "constant",
        "signature": "BodyTemplateExport",
        "summary": ""
      },
      {
        "name": "Rig",
        "kind": "constant",
        "signature": "Rig",
        "summary": ""
      },
      {
        "name": "CHARACTER_PHYSICS_ASSET_SCHEMA_VERSION",
        "kind": "re-export",
        "signature": "CHARACTER_PHYSICS_ASSET_SCHEMA_VERSION",
        "summary": ""
      },
      {
        "name": "JOINT_TYPE",
        "kind": "re-export",
        "signature": "JOINT_TYPE",
        "summary": ""
      },
      {
        "name": "buildGenericRagdoll",
        "kind": "re-export",
        "signature": "buildGenericRagdoll",
        "summary": ""
      },
      {
        "name": "buildHumanoidRagdoll",
        "kind": "re-export",
        "signature": "buildHumanoidRagdoll",
        "summary": ""
      },
      {
        "name": "buildJointLimits",
        "kind": "re-export",
        "signature": "buildJointLimits",
        "summary": ""
      },
      {
        "name": "buildRagdoll",
        "kind": "re-export",
        "signature": "buildRagdoll",
        "summary": ""
      },
      {
        "name": "buildSkinnedRagdoll",
        "kind": "re-export",
        "signature": "buildSkinnedRagdoll",
        "summary": ""
      },
      {
        "name": "characterPhysicsAssetToBodyTemplate",
        "kind": "re-export",
        "signature": "characterPhysicsAssetToBodyTemplate",
        "summary": ""
      },
      {
        "name": "computeSkeletonFingerprint",
        "kind": "re-export",
        "signature": "computeSkeletonFingerprint",
        "summary": ""
      },
      {
        "name": "countTypes",
        "kind": "re-export",
        "signature": "countTypes",
        "summary": ""
      },
      {
        "name": "createCharacterPhysicsAsset",
        "kind": "re-export",
        "signature": "createCharacterPhysicsAsset",
        "summary": ""
      },
      {
        "name": "createRagdollSim",
        "kind": "re-export",
        "signature": "createRagdollSim",
        "summary": ""
      },
      {
        "name": "deriveBendDirection",
        "kind": "re-export",
        "signature": "deriveBendDirection",
        "summary": ""
      },
      {
        "name": "deriveHingeLimit",
        "kind": "re-export",
        "signature": "deriveHingeLimit",
        "summary": ""
      },
      {
        "name": "deriveHumanoidJointLimits",
        "kind": "re-export",
        "signature": "deriveHumanoidJointLimits",
        "summary": ""
      },
      {
        "name": "deriveJointType",
        "kind": "re-export",
        "signature": "deriveJointType",
        "summary": ""
      },
      {
        "name": "deriveSkeletonJointLimits",
        "kind": "re-export",
        "signature": "deriveSkeletonJointLimits",
        "summary": ""
      },
      {
        "name": "deriveSwingCone",
        "kind": "re-export",
        "signature": "deriveSwingCone",
        "summary": ""
      },
      {
        "name": "deriveTwistLimit",
        "kind": "re-export",
        "signature": "deriveTwistLimit",
        "summary": ""
      },
      {
        "name": "hingeAxis",
        "kind": "re-export",
        "signature": "hingeAxis",
        "summary": ""
      },
      {
        "name": "inferDriveType",
        "kind": "re-export",
        "signature": "inferDriveType",
        "summary": ""
      },
      {
        "name": "logSkinnedRagdoll",
        "kind": "re-export",
        "signature": "logSkinnedRagdoll",
        "summary": ""
      },
      {
        "name": "mirrorLeftRightLimits",
        "kind": "re-export",
        "signature": "mirrorLeftRightLimits",
        "summary": ""
      },
      {
        "name": "radiusRatio",
        "kind": "re-export",
        "signature": "radiusRatio",
        "summary": ""
      },
      {
        "name": "ragdollBoneFrames",
        "kind": "re-export",
        "signature": "ragdollBoneFrames",
        "summary": ""
      },
      {
        "name": "ragdollDebugStats",
        "kind": "re-export",
        "signature": "ragdollDebugStats",
        "summary": ""
      },
      {
        "name": "skinPrimitiveInterleaved",
        "kind": "re-export",
        "signature": "skinPrimitiveInterleaved",
        "summary": ""
      },
      {
        "name": "validJointTypeSet",
        "kind": "re-export",
        "signature": "validJointTypeSet",
        "summary": ""
      },
      {
        "name": "validateBoneTopology",
        "kind": "re-export",
        "signature": "validateBoneTopology",
        "summary": ""
      },
      {
        "name": "validateCharacterPhysicsAsset",
        "kind": "re-export",
        "signature": "validateCharacterPhysicsAsset",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/vehicle/ChassisDetector",
    "path": "engine/reference/assets/vehicle/ChassisDetector.md",
    "source": "engine/assets/vehicle/ChassisDetector.js",
    "import": "/engine/assets/vehicle/ChassisDetector.js",
    "sourceHash": "742a859046945478eb2e322a0c673ac52e3acd82014e03d02892abc5554b42cd",
    "summary": "engine/assets/vehicle/ChassisDetector.js — identify the chassis + body parts (spec §11). The chassis is the largest non-wheel mesh; remaining meshes are categorized by name (glass/lights/doors) so segmentation and material edits (tint glass, emissive headlights, detach doors) can target them.",
    "exports": [
      {
        "name": "detectChassis",
        "kind": "function",
        "signature": "detectChassis(model, wheelNodeIds = [])",
        "summary": "Identify chassis + body part nodes, excluding the given wheel node ids."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/vehicle/VehicleMath",
    "path": "engine/reference/assets/vehicle/VehicleMath.md",
    "source": "engine/assets/vehicle/VehicleMath.js",
    "import": "/engine/assets/vehicle/VehicleMath.js",
    "sourceHash": "1d45737d4a68487d4ebc3ee5e0179f41a482accbb25f3a00b191459187305d33",
    "summary": "engine/assets/vehicle/VehicleMath.js — minimal column-major 4x4 + quaternion helpers for vehicle rig assembly and the visual wheel transform chain. Kept local and dependency-free so the vehicle layer is self-contained and the math stays deterministic (and gate-testable without the renderer).",
    "exports": [
      {
        "name": "identity",
        "kind": "function",
        "signature": "identity()",
        "summary": ""
      },
      {
        "name": "multiply",
        "kind": "function",
        "signature": "multiply(a, b)",
        "summary": "Column-major multiply: out = a * b."
      },
      {
        "name": "composeTRS",
        "kind": "function",
        "signature": "composeTRS(t = [0, 0, 0], q = [0, 0, 0, 1], s = 1)",
        "summary": "Compose a TRS matrix (scale may be a number or [x,y,z])."
      },
      {
        "name": "quatFromAxisAngle",
        "kind": "function",
        "signature": "quatFromAxisAngle(axis, angle)",
        "summary": "Quaternion (xyzw) from an axis + angle (radians)."
      },
      {
        "name": "quatMul",
        "kind": "function",
        "signature": "quatMul(a, b)",
        "summary": "Hamilton product a*b (xyzw)."
      },
      {
        "name": "transformPoint",
        "kind": "function",
        "signature": "transformPoint(m, p)",
        "summary": "Transform a point (vec3) by a column-major 4x4."
      },
      {
        "name": "nodeLocalMatrix",
        "kind": "function",
        "signature": "nodeLocalMatrix(node)",
        "summary": "Local transform of a node (matrix override or TRS)."
      },
      {
        "name": "computeWorldMatrices",
        "kind": "function",
        "signature": "computeWorldMatrices(model)",
        "summary": "World matrices for every node, accumulating the parent chain. Returns a Map(nodeId → Float32Array(16))."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/vehicle/VehicleRigBuilder",
    "path": "engine/reference/assets/vehicle/VehicleRigBuilder.md",
    "source": "engine/assets/vehicle/VehicleRigBuilder.js",
    "import": "/engine/assets/vehicle/VehicleRigBuilder.js",
    "sourceHash": "8ae5808e9db0c4398735978f0ef4a470d7b5c2cf2471ac2263d9243d573b326a",
    "summary": "engine/assets/vehicle/VehicleRigBuilder.js — assemble a VehicleAsset (spec §11).  Vehicles are rigged, not merely loaded. This turns detected wheels + chassis into explicit runtime data: WheelSlots (with suspension/tire/drivetrain), front-axle steering, a compound-collider descriptor for the chassis (built via the engine's ConvexDecomposition on demand), and a confidence. Detection failures (e.g. wheels merged into the body) flag needsCorrection rather than guessing — the editor exposes every decision (rule 62).",
    "exports": [
      {
        "name": "buildVehicleRig",
        "kind": "function",
        "signature": "buildVehicleRig(model, opts = {})",
        "summary": "Build a vehicle rig for a model and attach it at model.rigs.vehicle."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/vehicle/WheelDetector",
    "path": "engine/reference/assets/vehicle/WheelDetector.md",
    "source": "engine/assets/vehicle/WheelDetector.js",
    "import": "/engine/assets/vehicle/WheelDetector.js",
    "sourceHash": "0a28f7df6d11591d8f3f1ba60d0a1193ccc36f056e2ed8ee0189fdaf361c20b3",
    "summary": "engine/assets/vehicle/WheelDetector.js — find wheels (spec §11).  Detection chain (cheap → expensive), each a HINT with a confidence, never an assertion: name match → cylinder geometry → symmetry / low-corner position → (editor correction). Wheels that are merged into the body mesh won't be found here and fall through to the editor (see VehicleRigBuilder.needsCorrection).",
    "exports": [
      {
        "name": "detectWheels",
        "kind": "function",
        "signature": "detectWheels(model, opts = {})",
        "summary": "Detect wheel candidates in a model."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/vehicle/WheelPhysics",
    "path": "engine/reference/assets/vehicle/WheelPhysics.md",
    "source": "engine/assets/vehicle/WheelPhysics.js",
    "import": "/engine/assets/vehicle/WheelPhysics.js",
    "sourceHash": "d9c654cdd156c548ed3635a3b794c4a83b3a2587facfd90b338f45486179b343",
    "summary": "engine/assets/vehicle/WheelPhysics.js — suspension, tire slip, and the visual wheel transform chain (spec §11). Deterministic CPU model used for the inspector/demo and gates; production deployments route the same WheelSlot data into the engine's GPUVehicle. Wheel visuals FOLLOW physics state: chassisWorld · socket · suspension · steer · spin · meshCorrection.",
    "exports": [
      {
        "name": "suspensionForce",
        "kind": "function",
        "signature": "suspensionForce({ restLength, currentLength, stiffness, damping, compressionVelocity = 0 })",
        "summary": "Suspension spring + damper force. compression   = restLength - currentLength springForce   = stiffness * compression damperForce   = damping  * compressionVelocity normalLoad    = max(0, springForce + damperForce)"
      },
      {
        "name": "tireForce",
        "kind": "function",
        "signature": "tireForce(slip, normalLoad, grip, slipStiffness = 12)",
        "summary": "A slip-based tire force (Pacejka-lite): linear near zero slip, saturating at the friction limit `normalLoad * grip`. `slipStiffness` shapes the knee."
      },
      {
        "name": "longitudinalSlip",
        "kind": "function",
        "signature": "longitudinalSlip(wheelAngularVel, radius, groundSpeed)",
        "summary": "Longitudinal slip ratio from wheel surface speed vs ground speed."
      },
      {
        "name": "freeRollAngularVelocity",
        "kind": "function",
        "signature": "freeRollAngularVelocity(groundSpeed, radius)",
        "summary": "Free-rolling angular velocity (rad/s) for a given ground speed."
      },
      {
        "name": "visualWheelMatrix",
        "kind": "function",
        "signature": "visualWheelMatrix(chassisWorld, slot, state = {})",
        "summary": "Compose the visual world matrix for a wheel from chassis world + slot + state."
      },
      {
        "name": "advanceSpin",
        "kind": "function",
        "signature": "advanceSpin(spinAngle, groundSpeed, radius, dt)",
        "summary": "Advance a wheel's spin angle from a ground speed (visual integration)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/vehicle/WheelSlot",
    "path": "engine/reference/assets/vehicle/WheelSlot.md",
    "source": "engine/assets/vehicle/WheelSlot.js",
    "import": "/engine/assets/vehicle/WheelSlot.js",
    "sourceHash": "1bc4ed1f7983abd720d317bc82fd6eeac2657fdfc4cc027f4247c674c05de034",
    "summary": "engine/assets/vehicle/WheelSlot.js — vehicle rig schemas (spec §11).  A vehicle is NOT a mesh: it's a visual model + chassis collider + wheel slots + suspension + tire model + drivetrain. Wheel runtime data is explicit and separate from the visible wheel mesh (matching Jolt/Unity wheel colliders), so visuals follow physics rather than the other way around.",
    "exports": [
      {
        "name": "createWheelSlot",
        "kind": "function",
        "signature": "createWheelSlot(init = {})",
        "summary": "A wheel slot: the runtime data for one wheel, decoupled from its visual mesh."
      },
      {
        "name": "createSuspension",
        "kind": "function",
        "signature": "createSuspension(init = {})",
        "summary": ""
      },
      {
        "name": "createTireProfile",
        "kind": "function",
        "signature": "createTireProfile(init = {})",
        "summary": ""
      },
      {
        "name": "createVehicleAsset",
        "kind": "function",
        "signature": "createVehicleAsset(init = {})",
        "summary": "The assembled vehicle rig produced by VehicleRigBuilder. It references the model's nodes/meshes and carries explicit runtime data; it can drive the engine's GPUVehicle physics or the CPU WheelPhysics fallback."
      },
      {
        "name": "DRIVETRAIN",
        "kind": "constant",
        "signature": "DRIVETRAIN",
        "summary": ""
      },
      {
        "name": "WHEEL_PHYSICS_MODE",
        "kind": "constant",
        "signature": "WHEEL_PHYSICS_MODE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/vehicle/WheelSpinVisual",
    "path": "engine/reference/assets/vehicle/WheelSpinVisual.md",
    "source": "engine/assets/vehicle/WheelSpinVisual.js",
    "import": "/engine/assets/vehicle/WheelSpinVisual.js",
    "sourceHash": "1dbf87409513016dd0b22c6afec003812002217d6e1a45a81f12e9760776db8d",
    "summary": "engine/assets/vehicle/WheelSpinVisual.js — visual wheel-spin transforms for a rigged vehicle. Separated from physics (WheelPhysics) and detection so the importer/viewer, the editor preview, and the runtime can all reuse one correct implementation.  Approach (matches Unity `transform.Rotate(..,Space.Self)` / Godot `rotate_object_local`): the spin is built in the wheel's MESH-LOCAL space from the detector's per-wheel hub (`localPivot`) and axle (`axleAxisLocal`), then the node hierarchy + import correction carry it to the right world position and orientation automatically (the renderer does `draw = baseDraw · spin_local`).  This avoids transforming the axle into world space, PCA axis ambiguity on low-poly wheels, and pivot guessing — the failure modes of a world-space spin. The only world-space step is a per-wheel SIGN so mirrored wheels roll the same way; the axle vector itself stays the exact per-wheel local axis.",
    "exports": [
      {
        "name": "rotAxis",
        "kind": "function",
        "signature": "rotAxis(axis, angle)",
        "summary": "Column-major rotation about an arbitrary (unit-normalized) axis."
      },
      {
        "name": "pivotSpin",
        "kind": "function",
        "signature": "pivotSpin(pivot, axis, angle)",
        "summary": "Spin about an axis through a pivot: T(pivot) · R(axis,angle) · T(-pivot)."
      },
      {
        "name": "buildWheelSpinMap",
        "kind": "function",
        "signature": "buildWheelSpinMap(model, importMatrix, rig)",
        "summary": "Build a per-wheel spin descriptor map for a rigged model. Each entry carries the wheel's MESH-LOCAL pivot + axle (so the renderer applies the spin in local space: `draw = baseDraw · pivotSpin(pivot, axle, angle)`). The local axle is pre-signed so every wheel rolls the same visual direction. Steerable wheels also carry their local steer axis so the renderer can yaw them with input."
      },
      {
        "name": "rollAngle",
        "kind": "function",
        "signature": "rollAngle(distance, radius)",
        "summary": "Spin angle (radians) for a wheel that has rolled `distance` metres."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/vpath",
    "path": "engine/reference/assets/vpath.md",
    "source": "engine/assets/vpath.js",
    "import": "/engine/assets/vpath.js",
    "sourceHash": "4f5897a9052fa17fdabd4412f6122b7aa1f8e81ca7315656205ccc879420d756",
    "summary": "engine/assets/vpath.js — virtual path system.  Users never manage raw filesystem paths. Everything addresses through a scheme://path virtual path. The resolver (AssetResolver) maps a virtual path to a concrete backend handle; this module only parses/normalizes/builds them.  asset://   project asset library user://    user-selected local folder (File System Access) cache://   OPFS / local engine cache cloud://   optional remote mirror temp://    transient drag-drop import surface:// live render surface (no backing file)",
    "exports": [
      {
        "name": "parseVPath",
        "kind": "function",
        "signature": "parseVPath(vpath)",
        "summary": "Parse a virtual path into { scheme, path, segments }."
      },
      {
        "name": "isVPath",
        "kind": "function",
        "signature": "isVPath(vpath)",
        "summary": ""
      },
      {
        "name": "makeVPath",
        "kind": "function",
        "signature": "makeVPath(scheme, ...parts)",
        "summary": "Build a virtual path from a scheme + path parts."
      },
      {
        "name": "normalizeSegments",
        "kind": "function",
        "signature": "normalizeSegments(path)",
        "summary": "Collapse duplicate/empty separators and strip leading/trailing slashes."
      },
      {
        "name": "withScheme",
        "kind": "function",
        "signature": "withScheme(vpath, scheme)",
        "summary": "Swap the scheme of a virtual path, keeping the same path (e.g. for backups)."
      },
      {
        "name": "vpathBasename",
        "kind": "function",
        "signature": "vpathBasename(vpath)",
        "summary": "The basename (last segment) and extension of a virtual path."
      },
      {
        "name": "vpathExtension",
        "kind": "function",
        "signature": "vpathExtension(vpath)",
        "summary": ""
      },
      {
        "name": "cachePathFor",
        "kind": "function",
        "signature": "cachePathFor(kind, sourceHash, ext)",
        "summary": "Standard cache path for a converted artifact, keyed by content hash."
      },
      {
        "name": "VPATH_SCHEMES",
        "kind": "constant",
        "signature": "VPATH_SCHEMES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/weapon/WeaponRig",
    "path": "engine/reference/assets/weapon/WeaponRig.md",
    "source": "engine/assets/weapon/WeaponRig.js",
    "import": "/engine/assets/weapon/WeaponRig.js",
    "sourceHash": "12c66e75b48142d53b006fba9493966f81413c1502d5207dc3b1cf4d11d615fb",
    "summary": "engine/assets/weapon/WeaponRig.js — canonical weapon socket/part schema (spec §13). A weapon is a model + sockets (muzzle/chamber/grips/sight/…) + moving parts (slide/bolt/hammer/…) + a fire/reload timeline + a state machine. This is a GAME ABSTRACTION: sockets/timings are gameplay anchors, not real-firearm data. Every detection is a hint with confidence; ambiguous nodes go to the editor.",
    "exports": [
      {
        "name": "createWeaponRig",
        "kind": "function",
        "signature": "createWeaponRig(init = {})",
        "summary": "Create a weapon rig descriptor."
      },
      {
        "name": "WEAPON_SOCKET",
        "kind": "constant",
        "signature": "WEAPON_SOCKET",
        "summary": ""
      },
      {
        "name": "MOVING_PART",
        "kind": "constant",
        "signature": "MOVING_PART",
        "summary": ""
      },
      {
        "name": "WEAPON_TYPE",
        "kind": "constant",
        "signature": "WEAPON_TYPE",
        "summary": ""
      },
      {
        "name": "REQUIRED_SOCKETS",
        "kind": "constant",
        "signature": "REQUIRED_SOCKETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/weapon/WeaponRigBuilder",
    "path": "engine/reference/assets/weapon/WeaponRigBuilder.md",
    "source": "engine/assets/weapon/WeaponRigBuilder.js",
    "import": "/engine/assets/weapon/WeaponRigBuilder.js",
    "sourceHash": "10b7eea5d7c0f6964a6f32f673b2dc924c69d9b9cbc589d5e1ccfaf707f43300",
    "summary": "engine/assets/weapon/WeaponRigBuilder.js — assemble a WeaponRig from a model: detect sockets + moving parts + forward/muzzle, attach default fire/reload timelines and a state machine seed, and flag needsCorrection when required sockets are missing. Attaches at model.rigs.weapon. GAME ABSTRACTION ONLY.",
    "exports": [
      {
        "name": "buildWeaponRig",
        "kind": "function",
        "signature": "buildWeaponRig(model, opts = {})",
        "summary": "Build a weapon rig and attach it at model.rigs.weapon."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/weapon/WeaponSocketDetector",
    "path": "engine/reference/assets/weapon/WeaponSocketDetector.md",
    "source": "engine/assets/weapon/WeaponSocketDetector.js",
    "import": "/engine/assets/weapon/WeaponSocketDetector.js",
    "sourceHash": "fbe8b094e5ae632d425e3f79a464052701f7ee9bb1a00ce56945f4bd2d9e5aea",
    "summary": "engine/assets/weapon/WeaponSocketDetector.js — find weapon sockets + moving parts by NAME (priority-ordered patterns) and resolve the forward/aim axis + muzzle by geometry (a firearm is long along the barrel; the muzzle is the front-most node along that axis). Hints + confidence; ambiguous → editor. GAME ABSTRACTION ONLY — no real-firearm dimensions or ballistics here.",
    "exports": [
      {
        "name": "detectWeapon",
        "kind": "function",
        "signature": "detectWeapon(model)",
        "summary": "Detect weapon sockets, moving parts, forward axis, and muzzle."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/weapon/WeaponStateMachine",
    "path": "engine/reference/assets/weapon/WeaponStateMachine.md",
    "source": "engine/assets/weapon/WeaponStateMachine.js",
    "import": "/engine/assets/weapon/WeaponStateMachine.js",
    "sourceHash": "7dab2b294914eaedd3b9ca3be42f82e58f0f36bd5d6fd0cfbd205ac8b2754c1e",
    "summary": "engine/assets/weapon/WeaponStateMachine.js — a small, deterministic weapon state machine: idle ⇄ firing ⇄ empty, with reloading. It models a magazine + a chambered round (total = ammo + chambered) and auto-cycles a fresh round after each shot, so dry-fire, last-round, and reload-from-empty all behave correctly. GAME ABSTRACTION ONLY — no real-firearm mechanism is modelled.",
    "exports": [
      {
        "name": "createWeaponStateMachine",
        "kind": "function",
        "signature": "createWeaponStateMachine(init = {})",
        "summary": ""
      },
      {
        "name": "WEAPON_STATE",
        "kind": "constant",
        "signature": "WEAPON_STATE",
        "summary": ""
      },
      {
        "name": "WEAPON_INPUT",
        "kind": "constant",
        "signature": "WEAPON_INPUT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "assets/weapon/WeaponTimeline",
    "path": "engine/reference/assets/weapon/WeaponTimeline.md",
    "source": "engine/assets/weapon/WeaponTimeline.js",
    "import": "/engine/assets/weapon/WeaponTimeline.js",
    "sourceHash": "2899e4d083d03a272dce26c7759d17305eaf80e81b0fa63b4a0dcc368fcd9902",
    "summary": "engine/assets/weapon/WeaponTimeline.js — keyframed event tracks for weapon actions (fire, reload). An action is an ordered list of { t, type, payload } events over a duration; `eventsBetween` returns events crossed in a time step so the host fires them exactly once (deterministic, frame-rate independent). GAME ABSTRACTION — timings are gameplay anchors, not real mechanisms.",
    "exports": [
      {
        "name": "createWeaponAction",
        "kind": "function",
        "signature": "createWeaponAction(init = {})",
        "summary": "Create a single action timeline (e.g. one shot, or a reload)."
      },
      {
        "name": "defaultFireAction",
        "kind": "function",
        "signature": "defaultFireAction(duration = 0.12)",
        "summary": "A default semi-auto fire action (normalized 0..duration seconds)."
      },
      {
        "name": "defaultReloadAction",
        "kind": "function",
        "signature": "defaultReloadAction(duration = 2.0)",
        "summary": "A default reload action."
      },
      {
        "name": "eventsBetween",
        "kind": "function",
        "signature": "eventsBetween(action, t0, t1)",
        "summary": "Events whose time t lies in (t0, t1]. Use with an advancing playhead so each event fires exactly once regardless of frame rate."
      },
      {
        "name": "createTimelinePlayer",
        "kind": "function",
        "signature": "createTimelinePlayer(action)",
        "summary": "A small play-once cursor over an action."
      },
      {
        "name": "WEAPON_EVENT",
        "kind": "constant",
        "signature": "WEAPON_EVENT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/SpatialAudioEnvironment",
    "path": "engine/reference/audio/SpatialAudioEnvironment.md",
    "source": "engine/audio/SpatialAudioEnvironment.js",
    "import": "/engine/audio/SpatialAudioEnvironment.js",
    "sourceHash": "9d17ad3179968712a771f5e4b29bd6020940bc5e7a9fc9b4b82e86c01c8536fa",
    "summary": "SpatialAudioEnvironment.js - Advanced Spatial Audio Processing Industry-grade environment audio: material absorption, ground reflection, environment zones (underwater/cave/outdoor), diffraction, and dynamic reverb. Research basis: - FMOD/Wwise material absorption coefficients (ISO 354 standard) - Image-source method for early reflections (Allen & Berkley 1979) - Underwater acoustics: 300Hz LPF + extended reverb (Wikipedia/Navy research) - Diffraction: UTD edge diffraction approximation (Kouyoumjian & Pathak 1974) - Ground reflection: single-bounce mirror source below floor plane All processing uses Web Audio API nodes (BiquadFilter, Gain, Delay, Convolver). Zero external dependencies.",
    "exports": [
      {
        "name": "createSpatialEnvironment",
        "kind": "function",
        "signature": "createSpatialEnvironment(ctx, config = {})",
        "summary": "Create the spatial audio environment system. Attaches to an existing AudioContext and provides environment processing."
      },
      {
        "name": "setEnvironmentRaycast",
        "kind": "function",
        "signature": "setEnvironmentRaycast(env, fn)",
        "summary": "Set the raycast function for environment probing. Function signature: (origin: [x,y,z], direction: [x,y,z], maxDist: number) => { hit, distance, position, normal, entityId } | null"
      },
      {
        "name": "setEntityMaterialLookup",
        "kind": "function",
        "signature": "setEntityMaterialLookup(env, fn)",
        "summary": "Set the entity material lookup function. Function signature: (entityId) => 'stone' | 'wood' | 'metal' | etc."
      },
      {
        "name": "setWaterSurfaceY",
        "kind": "function",
        "signature": "setWaterSurfaceY(env, y)",
        "summary": "Set the water surface Y level. Listener below this = underwater. Pass null to disable underwater detection."
      },
      {
        "name": "updateEnvironment",
        "kind": "function",
        "signature": "updateEnvironment(env, listenerPos, listenerFwd)",
        "summary": "Update the environment system each frame. Detects environment zone, updates ground reflection, handles underwater."
      },
      {
        "name": "computeOcclusion",
        "kind": "function",
        "signature": "computeOcclusion(env, srcPos)",
        "summary": "Compute material-aware occlusion between a source and the listener. Returns { factor: 0-1, lpfMult: 0-1 } where factor affects volume, lpfMult affects high-frequency content (material filtering)."
      },
      {
        "name": "computeDiffraction",
        "kind": "function",
        "signature": "computeDiffraction(env, srcPos)",
        "summary": "Compute diffraction factor for partially occluded sources. Casts multiple rays slightly offset from the direct path. If some rays get through, the sound is partially diffracted (not fully blocked)."
      },
      {
        "name": "computeFullOcclusion",
        "kind": "function",
        "signature": "computeFullOcclusion(env, srcPos)",
        "summary": "Compute full spatial occlusion for a sound source. Combines material-based occlusion with edge diffraction. Returns 0-1 where 0 = fully blocked, 1 = clear."
      },
      {
        "name": "getEnvironmentIR",
        "kind": "function",
        "signature": "getEnvironmentIR(env, zoneName)",
        "summary": "Generate a procedural impulse response for a given environment. Cached per environment to avoid regeneration."
      },
      {
        "name": "connectToBridge",
        "kind": "function",
        "signature": "connectToBridge(env, bridge)",
        "summary": "Connect the environment system's master filters into the audio bridge's output chain. Call once after both bridge and environment are created. Inserts: bridge.masterGain → env.masterHPF → env.masterLPF → ctx.destination Also connects ground reflection send from bridge.compressor."
      },
      {
        "name": "getMaterialAbsorption",
        "kind": "function",
        "signature": "getMaterialAbsorption(materialKey)",
        "summary": "Get absorption data for a material key."
      },
      {
        "name": "getEnvironmentPresets",
        "kind": "function",
        "signature": "getEnvironmentPresets()",
        "summary": "Get all available environment presets."
      },
      {
        "name": "forceEnvironmentZone",
        "kind": "function",
        "signature": "forceEnvironmentZone(env, zoneName)",
        "summary": "Force a specific environment zone (overrides auto-detection). Pass null to re-enable auto-detection."
      },
      {
        "name": "getEnvironmentStats",
        "kind": "function",
        "signature": "getEnvironmentStats(env)",
        "summary": "Get current environment stats."
      },
      {
        "name": "destroySpatialEnvironment",
        "kind": "function",
        "signature": "destroySpatialEnvironment(env)",
        "summary": "Destroy the environment system and release all audio nodes."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/bridge/CharacterAudioBridge",
    "path": "engine/reference/audio/bridge/CharacterAudioBridge.md",
    "source": "engine/audio/bridge/CharacterAudioBridge.js",
    "import": "/engine/audio/bridge/CharacterAudioBridge.js",
    "sourceHash": "faeb41ced2018fdc8cd0190e0a117d84bb57b8501253a09408ed4541de7ac0a7",
    "summary": "CharacterAudioBridge.js - Character Movement → Audio Events Triggers footsteps, jumps, lands, and body foley based on character movement state (velocity, grounded, etc).",
    "exports": [
      {
        "name": "createCharacterAudioBridge",
        "kind": "function",
        "signature": "createCharacterAudioBridge(config = {})",
        "summary": "Create a character movement audio bridge."
      },
      {
        "name": "tickCharacterAudio",
        "kind": "function",
        "signature": "tickCharacterAudio(bridge, audioEngine, entityId, state, dt)",
        "summary": "Tick the character audio bridge for a single character. Call once per frame per character entity."
      },
      {
        "name": "removeCharacter",
        "kind": "function",
        "signature": "removeCharacter(bridge, entityId)",
        "summary": "Clean up character state when entity is destroyed."
      },
      {
        "name": "destroyCharacterAudioBridge",
        "kind": "function",
        "signature": "destroyCharacterAudioBridge(bridge)",
        "summary": "Destroy the character audio bridge and clean up all state."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/bridge/DestructionAudioBridge",
    "path": "engine/reference/audio/bridge/DestructionAudioBridge.md",
    "source": "engine/audio/bridge/DestructionAudioBridge.js",
    "import": "/engine/audio/bridge/DestructionAudioBridge.js",
    "sourceHash": "6b537bf9e7f8068842094c2b507970b3786d72a65150c66d997bb7c0ebfc16c8",
    "summary": "DestructionAudioBridge.js - Destruction Events → Audio Hooks into VoronoiFracture, UnifiedDamageSystem, SeismicSystem, and ShockPropagation to trigger shattering, crumbling, rumble, and explosion sounds.",
    "exports": [
      {
        "name": "createDestructionAudioBridge",
        "kind": "function",
        "signature": "createDestructionAudioBridge(config = {})",
        "summary": "Create a destruction audio bridge."
      },
      {
        "name": "processDamageAudioEvent",
        "kind": "function",
        "signature": "processDamageAudioEvent(bridge, event, currentTime)",
        "summary": "Process a damage event."
      },
      {
        "name": "processFractureAudioEvent",
        "kind": "function",
        "signature": "processFractureAudioEvent(bridge, event, currentTime)",
        "summary": "Process a fracture event (Voronoi fracture)."
      },
      {
        "name": "processSeismicAudioEvent",
        "kind": "function",
        "signature": "processSeismicAudioEvent(bridge, event, currentTime)",
        "summary": "Process a seismic event (earthquake rumble)."
      },
      {
        "name": "flushDestructionAudio",
        "kind": "function",
        "signature": "flushDestructionAudio(bridge)",
        "summary": "Flush pending destruction audio events."
      },
      {
        "name": "setDestructionAudioListenerPos",
        "kind": "function",
        "signature": "setDestructionAudioListenerPos(bridge, pos)",
        "summary": "Update listener position."
      },
      {
        "name": "destroyDestructionAudioBridge",
        "kind": "function",
        "signature": "destroyDestructionAudioBridge(bridge)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/bridge/EmitterAmbientBridge",
    "path": "engine/reference/audio/bridge/EmitterAmbientBridge.md",
    "source": "engine/audio/bridge/EmitterAmbientBridge.js",
    "import": "/engine/audio/bridge/EmitterAmbientBridge.js",
    "sourceHash": "f87cc0433101804b597cb6e28e01d5620b415026904dcfb6cb3162ffdf4c6668",
    "summary": "EmitterAmbientBridge.js - Active Emitters → Continuous Ambient Loops When a substance emitter is active and has an ambientLoop defined, this bridge manages a looping spatial audio source at the emitter position. Sources are created when emitters start and removed when they stop.",
    "exports": [
      {
        "name": "createEmitterAmbientBridge",
        "kind": "function",
        "signature": "createEmitterAmbientBridge(config = {})",
        "summary": "Create an emitter ambient bridge."
      },
      {
        "name": "syncEmitterAmbients",
        "kind": "function",
        "signature": "syncEmitterAmbients(bridge, emitters)",
        "summary": "Sync active emitters with ambient audio loops. Call each frame with the current list of active emitters."
      },
      {
        "name": "registerEmitterLoop",
        "kind": "function",
        "signature": "registerEmitterLoop(bridge, emitterId, sourceId, substanceId, position)",
        "summary": "Register that a loop was started (store sourceId)."
      },
      {
        "name": "stopAllEmitterAmbients",
        "kind": "function",
        "signature": "stopAllEmitterAmbients(bridge)",
        "summary": "Stop all active ambient loops."
      },
      {
        "name": "destroyEmitterAmbientBridge",
        "kind": "function",
        "signature": "destroyEmitterAmbientBridge(bridge)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/bridge/FluidAudioBridge",
    "path": "engine/reference/audio/bridge/FluidAudioBridge.md",
    "source": "engine/audio/bridge/FluidAudioBridge.js",
    "import": "/engine/audio/bridge/FluidAudioBridge.js",
    "sourceHash": "26cfc36459e286d87f27857e771f93a162b4872968f13bcfa1cd9cc9fa3d1aca",
    "summary": "FluidAudioBridge.js - Fluid Events → Audio Hooks into fluid simulation (splashes, phase changes) and triggers appropriate audio events.",
    "exports": [
      {
        "name": "createFluidAudioBridge",
        "kind": "function",
        "signature": "createFluidAudioBridge(config = {})",
        "summary": "Create a fluid audio bridge."
      },
      {
        "name": "processFluidSplash",
        "kind": "function",
        "signature": "processFluidSplash(bridge, position, magnitude, currentTime)",
        "summary": "Process a fluid splash event."
      },
      {
        "name": "processPhaseChangeAudio",
        "kind": "function",
        "signature": "processPhaseChangeAudio(bridge, phaseType, position, magnitude, currentTime)",
        "summary": "Process a phase change event."
      },
      {
        "name": "flushFluidAudio",
        "kind": "function",
        "signature": "flushFluidAudio(bridge)",
        "summary": "Flush pending fluid audio events."
      },
      {
        "name": "setFluidAudioListenerPos",
        "kind": "function",
        "signature": "setFluidAudioListenerPos(bridge, pos)",
        "summary": "Update listener position."
      },
      {
        "name": "destroyFluidAudioBridge",
        "kind": "function",
        "signature": "destroyFluidAudioBridge(bridge)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/bridge/PhysicsAudioBridge",
    "path": "engine/reference/audio/bridge/PhysicsAudioBridge.md",
    "source": "engine/audio/bridge/PhysicsAudioBridge.js",
    "import": "/engine/audio/bridge/PhysicsAudioBridge.js",
    "sourceHash": "735e1df8d20e76dd61f54d2759e1032a42c8cf70b78cc806b80ce3efb1bcb71e",
    "summary": "PhysicsAudioBridge.js - Physics Collision → Audio Events Hooks into physics contact callbacks (PhysX/PBD) and triggers material-aware impact sounds via the AudioEngine.",
    "exports": [
      {
        "name": "createPhysicsAudioBridge",
        "kind": "function",
        "signature": "createPhysicsAudioBridge(config = {})",
        "summary": "Create a physics audio bridge."
      },
      {
        "name": "processPhysicsContact",
        "kind": "function",
        "signature": "processPhysicsContact(bridge, contact, currentTime)",
        "summary": "Process a physics contact event."
      },
      {
        "name": "flushPhysicsAudio",
        "kind": "function",
        "signature": "flushPhysicsAudio(bridge)",
        "summary": "Flush pending physics audio events."
      },
      {
        "name": "setPhysicsAudioListenerPos",
        "kind": "function",
        "signature": "setPhysicsAudioListenerPos(bridge, pos)",
        "summary": "Update listener position."
      },
      {
        "name": "destroyPhysicsAudioBridge",
        "kind": "function",
        "signature": "destroyPhysicsAudioBridge(bridge)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/bridge/SpellAudioBridge",
    "path": "engine/reference/audio/bridge/SpellAudioBridge.md",
    "source": "engine/audio/bridge/SpellAudioBridge.js",
    "import": "/engine/audio/bridge/SpellAudioBridge.js",
    "sourceHash": "80dd6a4fec88ec956e67f9252b14ee662f354f8576bbc91e38f34c78605900db",
    "summary": "SpellAudioBridge.js - Spell Cast → Audio Events Resolves soundHint strings from SpellGenerator and SpellElementMixer into AudioEngine trigger calls.",
    "exports": [
      {
        "name": "createSpellAudioBridge",
        "kind": "function",
        "signature": "createSpellAudioBridge(config = {})",
        "summary": "Create a spell audio bridge."
      },
      {
        "name": "buildSpellAudioTrigger",
        "kind": "function",
        "signature": "buildSpellAudioTrigger(bridge, spell, position, currentTime)",
        "summary": "Build audio trigger config from a spell cast."
      },
      {
        "name": "buildSoundHintTrigger",
        "kind": "function",
        "signature": "buildSoundHintTrigger(bridge, soundHint, position, currentTime)",
        "summary": "Build audio trigger from a raw soundHint string."
      },
      {
        "name": "destroySpellAudioBridge",
        "kind": "function",
        "signature": "destroySpellAudioBridge(bridge)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/bridge/SubstanceAudioResolver",
    "path": "engine/reference/audio/bridge/SubstanceAudioResolver.md",
    "source": "engine/audio/bridge/SubstanceAudioResolver.js",
    "import": "/engine/audio/bridge/SubstanceAudioResolver.js",
    "sourceHash": "fc713974b4cee46b4a5db9312cca40eba034b2de50c983132b920a70cbcfd5ef",
    "summary": "SubstanceAudioResolver.js - Resolve substance key → audio config Maps substance IDs to audio event configurations, supporting both sample-based fallback and procedural patch references.",
    "exports": [
      {
        "name": "resolveSubstanceAudio",
        "kind": "function",
        "signature": "resolveSubstanceAudio(substanceId)",
        "summary": "Resolve a substance key to its audio configuration."
      },
      {
        "name": "getSubstanceImpactSound",
        "kind": "function",
        "signature": "getSubstanceImpactSound(substanceId)",
        "summary": "Get the impact sound event ID for a substance."
      },
      {
        "name": "getSubstanceAmbientLoop",
        "kind": "function",
        "signature": "getSubstanceAmbientLoop(substanceId)",
        "summary": "Get the ambient loop event ID for a substance."
      },
      {
        "name": "getSubstanceCollisionSound",
        "kind": "function",
        "signature": "getSubstanceCollisionSound(substanceId)",
        "summary": "Get the collision sound event ID for a substance."
      },
      {
        "name": "getSubstanceProceduralPatch",
        "kind": "function",
        "signature": "getSubstanceProceduralPatch(substanceId)",
        "summary": "Get procedural patch ID for a substance (if defined)."
      },
      {
        "name": "getSubstanceParamMap",
        "kind": "function",
        "signature": "getSubstanceParamMap(substanceId)",
        "summary": "Get parameter mapping for procedural synthesis. Maps emitter params → synth params."
      },
      {
        "name": "getSubstanceAudioDefaults",
        "kind": "function",
        "signature": "getSubstanceAudioDefaults(substanceId)",
        "summary": "Get normalized default procedural params for a substance."
      },
      {
        "name": "applySubstanceParamMap",
        "kind": "function",
        "signature": "applySubstanceParamMap(substanceId, params = {}, mapOverrides = null)",
        "summary": "Apply a substance paramMap to source params. Supports runtime map override keys: _map_<src>_scale / _map_<src>_offset."
      },
      {
        "name": "buildSubstancePreviewParams",
        "kind": "function",
        "signature": "buildSubstancePreviewParams(substanceId, overrides = {}, sourceParams = {})",
        "summary": "Build preview/runtime-friendly patch params with shared defaults + paramMap transform."
      },
      {
        "name": "buildSubstanceTriggerConfig",
        "kind": "function",
        "signature": "buildSubstanceTriggerConfig(substanceId, eventType, params = {})",
        "summary": "Build a complete audio trigger config from substance + event params."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/bridge/WeatherAudioBridge",
    "path": "engine/reference/audio/bridge/WeatherAudioBridge.md",
    "source": "engine/audio/bridge/WeatherAudioBridge.js",
    "import": "/engine/audio/bridge/WeatherAudioBridge.js",
    "sourceHash": "783378b26ae984f3d69b7267cca1273be421eac7a0a985b89396c60a698bbab0",
    "summary": "WeatherAudioBridge.js - Weather/Time → Ambient Audio Crossfades ambient audio loops based on WorldTime day/night cycle, seasons, and weather conditions.",
    "exports": [
      {
        "name": "createWeatherAudioBridge",
        "kind": "function",
        "signature": "createWeatherAudioBridge(config = {})",
        "summary": "Create a weather audio bridge."
      },
      {
        "name": "tickWeatherAudio",
        "kind": "function",
        "signature": "tickWeatherAudio(bridge, worldTime, weather, currentTime)",
        "summary": "Tick weather audio — check time of day and weather, crossfade ambients."
      },
      {
        "name": "destroyWeatherAudioBridge",
        "kind": "function",
        "signature": "destroyWeatherAudioBridge(bridge)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/bridge/index",
    "path": "engine/reference/audio/bridge/index.md",
    "source": "engine/audio/bridge/index.js",
    "import": "/engine/audio/bridge/index.js",
    "sourceHash": "43a17939bffb0af449fd66b5484939e7b89405a2169c18056798e694bad806c1",
    "summary": "engine/audio/bridge/index.js — Barrel export for audio bridges.",
    "exports": [
      {
        "name": "buildSoundHintTrigger",
        "kind": "re-export",
        "signature": "buildSoundHintTrigger",
        "summary": ""
      },
      {
        "name": "buildSpellAudioTrigger",
        "kind": "re-export",
        "signature": "buildSpellAudioTrigger",
        "summary": ""
      },
      {
        "name": "buildSubstanceTriggerConfig",
        "kind": "re-export",
        "signature": "buildSubstanceTriggerConfig",
        "summary": ""
      },
      {
        "name": "createCharacterAudioBridge",
        "kind": "re-export",
        "signature": "createCharacterAudioBridge",
        "summary": ""
      },
      {
        "name": "createDestructionAudioBridge",
        "kind": "re-export",
        "signature": "createDestructionAudioBridge",
        "summary": ""
      },
      {
        "name": "createEmitterAmbientBridge",
        "kind": "re-export",
        "signature": "createEmitterAmbientBridge",
        "summary": ""
      },
      {
        "name": "createFluidAudioBridge",
        "kind": "re-export",
        "signature": "createFluidAudioBridge",
        "summary": ""
      },
      {
        "name": "createPhysicsAudioBridge",
        "kind": "re-export",
        "signature": "createPhysicsAudioBridge",
        "summary": ""
      },
      {
        "name": "createSpellAudioBridge",
        "kind": "re-export",
        "signature": "createSpellAudioBridge",
        "summary": ""
      },
      {
        "name": "createWeatherAudioBridge",
        "kind": "re-export",
        "signature": "createWeatherAudioBridge",
        "summary": ""
      },
      {
        "name": "destroyCharacterAudioBridge",
        "kind": "re-export",
        "signature": "destroyCharacterAudioBridge",
        "summary": ""
      },
      {
        "name": "destroyDestructionAudioBridge",
        "kind": "re-export",
        "signature": "destroyDestructionAudioBridge",
        "summary": ""
      },
      {
        "name": "destroyEmitterAmbientBridge",
        "kind": "re-export",
        "signature": "destroyEmitterAmbientBridge",
        "summary": ""
      },
      {
        "name": "destroyFluidAudioBridge",
        "kind": "re-export",
        "signature": "destroyFluidAudioBridge",
        "summary": ""
      },
      {
        "name": "destroyPhysicsAudioBridge",
        "kind": "re-export",
        "signature": "destroyPhysicsAudioBridge",
        "summary": ""
      },
      {
        "name": "destroySpellAudioBridge",
        "kind": "re-export",
        "signature": "destroySpellAudioBridge",
        "summary": ""
      },
      {
        "name": "destroyWeatherAudioBridge",
        "kind": "re-export",
        "signature": "destroyWeatherAudioBridge",
        "summary": ""
      },
      {
        "name": "flushDestructionAudio",
        "kind": "re-export",
        "signature": "flushDestructionAudio",
        "summary": ""
      },
      {
        "name": "flushFluidAudio",
        "kind": "re-export",
        "signature": "flushFluidAudio",
        "summary": ""
      },
      {
        "name": "flushPhysicsAudio",
        "kind": "re-export",
        "signature": "flushPhysicsAudio",
        "summary": ""
      },
      {
        "name": "getSubstanceAmbientLoop",
        "kind": "re-export",
        "signature": "getSubstanceAmbientLoop",
        "summary": ""
      },
      {
        "name": "getSubstanceCollisionSound",
        "kind": "re-export",
        "signature": "getSubstanceCollisionSound",
        "summary": ""
      },
      {
        "name": "getSubstanceImpactSound",
        "kind": "re-export",
        "signature": "getSubstanceImpactSound",
        "summary": ""
      },
      {
        "name": "getSubstanceParamMap",
        "kind": "re-export",
        "signature": "getSubstanceParamMap",
        "summary": ""
      },
      {
        "name": "getSubstanceProceduralPatch",
        "kind": "re-export",
        "signature": "getSubstanceProceduralPatch",
        "summary": ""
      },
      {
        "name": "processDamageAudioEvent",
        "kind": "re-export",
        "signature": "processDamageAudioEvent",
        "summary": ""
      },
      {
        "name": "processFluidSplash",
        "kind": "re-export",
        "signature": "processFluidSplash",
        "summary": ""
      },
      {
        "name": "processFractureAudioEvent",
        "kind": "re-export",
        "signature": "processFractureAudioEvent",
        "summary": ""
      },
      {
        "name": "processPhaseChangeAudio",
        "kind": "re-export",
        "signature": "processPhaseChangeAudio",
        "summary": ""
      },
      {
        "name": "processPhysicsContact",
        "kind": "re-export",
        "signature": "processPhysicsContact",
        "summary": ""
      },
      {
        "name": "processSeismicAudioEvent",
        "kind": "re-export",
        "signature": "processSeismicAudioEvent",
        "summary": ""
      },
      {
        "name": "registerEmitterLoop",
        "kind": "re-export",
        "signature": "registerEmitterLoop",
        "summary": ""
      },
      {
        "name": "removeCharacter",
        "kind": "re-export",
        "signature": "removeCharacter",
        "summary": ""
      },
      {
        "name": "resolveSubstanceAudio",
        "kind": "re-export",
        "signature": "resolveSubstanceAudio",
        "summary": ""
      },
      {
        "name": "setDestructionAudioListenerPos",
        "kind": "re-export",
        "signature": "setDestructionAudioListenerPos",
        "summary": ""
      },
      {
        "name": "setFluidAudioListenerPos",
        "kind": "re-export",
        "signature": "setFluidAudioListenerPos",
        "summary": ""
      },
      {
        "name": "setPhysicsAudioListenerPos",
        "kind": "re-export",
        "signature": "setPhysicsAudioListenerPos",
        "summary": ""
      },
      {
        "name": "stopAllEmitterAmbients",
        "kind": "re-export",
        "signature": "stopAllEmitterAmbients",
        "summary": ""
      },
      {
        "name": "syncEmitterAmbients",
        "kind": "re-export",
        "signature": "syncEmitterAmbients",
        "summary": ""
      },
      {
        "name": "tickCharacterAudio",
        "kind": "re-export",
        "signature": "tickCharacterAudio",
        "summary": ""
      },
      {
        "name": "tickWeatherAudio",
        "kind": "re-export",
        "signature": "tickWeatherAudio",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/core/AudioAssetManager",
    "path": "engine/reference/audio/core/AudioAssetManager.md",
    "source": "engine/audio/core/AudioAssetManager.js",
    "import": "/engine/audio/core/AudioAssetManager.js",
    "sourceHash": "38fe6ee6917396b3ee8e0094a5f25c8015372af52da3e9205347d3387c83fc0a",
    "summary": "AudioAssetManager.js - Audio Asset Loading & Caching Fetches, decodes, and caches AudioBuffers. Supports pooling and streaming for large files (music).",
    "exports": [
      {
        "name": "createAudioAssetManager",
        "kind": "function",
        "signature": "createAudioAssetManager(context)",
        "summary": "Create an audio asset manager."
      },
      {
        "name": "loadAudioAsset",
        "kind": "function",
        "signature": "async loadAudioAsset(manager, path)",
        "summary": "Load and decode an audio file. Returns cached buffer if already loaded."
      },
      {
        "name": "preloadAudioAssets",
        "kind": "function",
        "signature": "async preloadAudioAssets(manager, paths)",
        "summary": "Preload multiple audio assets."
      },
      {
        "name": "registerAudioBuffer",
        "kind": "function",
        "signature": "registerAudioBuffer(manager, path, buffer)",
        "summary": "Register a pre-decoded AudioBuffer directly."
      },
      {
        "name": "getAudioBuffer",
        "kind": "function",
        "signature": "getAudioBuffer(manager, path)",
        "summary": "Get a cached buffer (synchronous)."
      },
      {
        "name": "hasAudioBuffer",
        "kind": "function",
        "signature": "hasAudioBuffer(manager, path)",
        "summary": "Check if a buffer is cached."
      },
      {
        "name": "unloadAudioAsset",
        "kind": "function",
        "signature": "unloadAudioAsset(manager, path)",
        "summary": "Remove a cached buffer."
      },
      {
        "name": "clearAudioCache",
        "kind": "function",
        "signature": "clearAudioCache(manager)",
        "summary": "Clear all cached buffers."
      },
      {
        "name": "setAudioBaseUrl",
        "kind": "function",
        "signature": "setAudioBaseUrl(manager, url)",
        "summary": "Set base URL for relative asset paths."
      },
      {
        "name": "destroyAudioAssetManager",
        "kind": "function",
        "signature": "destroyAudioAssetManager(manager)",
        "summary": "Destroy the asset manager and clear all caches."
      },
      {
        "name": "_origCreate",
        "kind": "re-export",
        "signature": "_origCreate",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/core/AudioBus",
    "path": "engine/reference/audio/core/AudioBus.md",
    "source": "engine/audio/core/AudioBus.js",
    "import": "/engine/audio/core/AudioBus.js",
    "sourceHash": "a21f721057e287f7058767604cd58b05e396865461c4de6d239e68e0dc0a86b7",
    "summary": "AudioBus.js - Audio Category Bus A bus is a GainNode chain representing an audio category (sfx, music, ambient, voice, ui). Supports volume, mute, solo, and ducking (automatic volume reduction when another bus plays).",
    "exports": [
      {
        "name": "createAudioBus",
        "kind": "function",
        "signature": "createAudioBus(context, destination, config = {})",
        "summary": "Create an audio bus."
      },
      {
        "name": "setBusVolume",
        "kind": "function",
        "signature": "setBusVolume(bus, volume, currentTime)",
        "summary": "Set bus volume."
      },
      {
        "name": "setBusMute",
        "kind": "function",
        "signature": "setBusMute(bus, muted)",
        "summary": "Mute/unmute the bus."
      },
      {
        "name": "setBusDuck",
        "kind": "function",
        "signature": "setBusDuck(bus, amount)",
        "summary": "Set duck amount (used for automatic ducking, e.g. voice ducks music)."
      },
      {
        "name": "getBusOutput",
        "kind": "function",
        "signature": "getBusOutput(bus)",
        "summary": "Get the bus's output node (for sources to connect to)."
      },
      {
        "name": "destroyAudioBus",
        "kind": "function",
        "signature": "destroyAudioBus(bus)",
        "summary": "Destroy a bus and disconnect it."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/core/AudioConcurrency",
    "path": "engine/reference/audio/core/AudioConcurrency.md",
    "source": "engine/audio/core/AudioConcurrency.js",
    "import": "/engine/audio/core/AudioConcurrency.js",
    "sourceHash": "296812ede59c58d3a8aaae34f7780f32e2aec1662a387b1a81a3c45d1fa309c8",
    "summary": "AudioConcurrency.js - Voice Management & Stealing Manages the maximum number of concurrent voices. When the limit is reached, uses priority-based voice stealing (quietest, oldest, or farthest).",
    "exports": [
      {
        "name": "createAudioConcurrency",
        "kind": "function",
        "signature": "createAudioConcurrency(config = {})",
        "summary": "Create a concurrency manager."
      },
      {
        "name": "tickConcurrency",
        "kind": "function",
        "signature": "tickConcurrency(concurrency, activeSources, time)",
        "summary": "Tick concurrency — steal voices if over limit."
      },
      {
        "name": "canAddVoice",
        "kind": "function",
        "signature": "canAddVoice(concurrency, activeSources, newPriority)",
        "summary": "Check if a new voice can be added, or which voice to steal."
      },
      {
        "name": "destroyAudioConcurrency",
        "kind": "function",
        "signature": "destroyAudioConcurrency(concurrency)",
        "summary": "Destroy concurrency manager."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/core/AudioDoppler",
    "path": "engine/reference/audio/core/AudioDoppler.md",
    "source": "engine/audio/core/AudioDoppler.js",
    "import": "/engine/audio/core/AudioDoppler.js",
    "sourceHash": "3b6295268c33090d7148300099c326d5114797226a2df3d71475c16b0238126c",
    "summary": "AudioDoppler.js - Doppler Effect Manually computes pitch shift from radial velocity between source and listener. Web Audio's built-in Doppler was removed from the spec, so we implement it ourselves. Doppler ratio = (speedOfSound + listenerRadialVelocity) / (speedOfSound + sourceRadialVelocity)",
    "exports": [
      {
        "name": "createAudioDoppler",
        "kind": "function",
        "signature": "createAudioDoppler(config = {})",
        "summary": "Create a Doppler processor."
      },
      {
        "name": "tickDoppler",
        "kind": "function",
        "signature": "tickDoppler(doppler, activeSources, listenerPos, listenerVel)",
        "summary": "Tick Doppler — adjust pitch of all spatial sources based on relative velocity."
      },
      {
        "name": "destroyAudioDoppler",
        "kind": "function",
        "signature": "destroyAudioDoppler(doppler)",
        "summary": "Destroy Doppler processor."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/core/AudioEngine",
    "path": "engine/reference/audio/core/AudioEngine.md",
    "source": "engine/audio/core/AudioEngine.js",
    "import": "/engine/audio/core/AudioEngine.js",
    "sourceHash": "0455e0b457e5b4d8678e4d24ca33b62fb14761f92dcb4e6d32f588c15a730661",
    "summary": "AudioEngine.js - Core Audio Engine Central audio system for the engine. Manages AudioContext lifecycle, master gain, tick loop, and coordinates all audio subsystems. Usage: const engine = createAudioEngine({ maxVoices: 64 }); await initAudioEngine(engine); // In main loop: tickAudioEngine(engine, dt); // Cleanup: destroyAudioEngine(engine);",
    "exports": [
      {
        "name": "createAudioEngine",
        "kind": "function",
        "signature": "createAudioEngine(config = {})",
        "summary": "Create an audio engine instance."
      },
      {
        "name": "initAudioEngine",
        "kind": "function",
        "signature": "async initAudioEngine(engine)",
        "summary": "Initialize the audio engine. Creates AudioContext and all subsystems. Must be called after a user gesture (click/tap) to comply with autoplay policy."
      },
      {
        "name": "resumeAudioEngine",
        "kind": "function",
        "signature": "async resumeAudioEngine(engine)",
        "summary": "Ensure the AudioContext is resumed (call after user gesture)."
      },
      {
        "name": "tickAudioEngine",
        "kind": "function",
        "signature": "tickAudioEngine(engine, dt)",
        "summary": "Tick the audio engine. Updates active sources, cleans up finished ones."
      },
      {
        "name": "triggerAudioEvent",
        "kind": "function",
        "signature": "triggerAudioEvent(engine, eventId, options = {})",
        "summary": "Trigger an audio event by ID."
      },
      {
        "name": "playSound",
        "kind": "function",
        "signature": "playSound(engine, eventId, options = {})",
        "summary": "Backward-compatible alias used by older bridge code."
      },
      {
        "name": "playBuffer",
        "kind": "function",
        "signature": "playBuffer(engine, buffer, options = {})",
        "summary": "Play a buffer directly (bypasses event resolution)."
      },
      {
        "name": "stopSource",
        "kind": "function",
        "signature": "stopSource(engine, sourceId, fadeOut = 0.05)",
        "summary": "Stop a specific source by ID."
      },
      {
        "name": "stopAllSources",
        "kind": "function",
        "signature": "stopAllSources(engine, fadeOut = 0.1)",
        "summary": "Stop all active sources."
      },
      {
        "name": "registerAudioEvent",
        "kind": "function",
        "signature": "registerAudioEvent(engine, eventId, descriptor)",
        "summary": "Register an audio event descriptor."
      },
      {
        "name": "unregisterAudioEvent",
        "kind": "function",
        "signature": "unregisterAudioEvent(engine, eventId)",
        "summary": "Unregister an audio event."
      },
      {
        "name": "setMasterVolume",
        "kind": "function",
        "signature": "setMasterVolume(engine, volume)",
        "summary": "Set master volume."
      },
      {
        "name": "setBusVolumeByName",
        "kind": "function",
        "signature": "setBusVolumeByName(engine, busName, volume)",
        "summary": "Set volume for a specific bus."
      },
      {
        "name": "destroyAudioEngine",
        "kind": "function",
        "signature": "destroyAudioEngine(engine)",
        "summary": "Destroy the audio engine and release all resources."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/core/AudioEvent",
    "path": "engine/reference/audio/core/AudioEvent.md",
    "source": "engine/audio/core/AudioEvent.js",
    "import": "/engine/audio/core/AudioEvent.js",
    "sourceHash": "18b63dee437451122e88de88571fd6309b803b71a51f3280e4ddacaf8c778fa9",
    "summary": "AudioEvent.js - Audio Event Descriptors Defines how audio events are resolved: one-shots, random containers, sequences, and loops. An event maps an ID to concrete playback params. Event descriptor format: { type: 'oneshot' | 'random' | 'sequence' | 'loop', sounds: ['path1.ogg', 'path2.ogg'],  // Pool of sounds volume: [0.8, 1.0],       // Random range or fixed value pitch: [0.9, 1.1],        // Random range or fixed value bus: 'sfx',               // Target bus priority: 0,              // Voice stealing priority cooldown: 0,              // Min seconds between triggers maxInstances: 0,          // Max simultaneous (0 = unlimited) }",
    "exports": [
      {
        "name": "resolveAudioEvent",
        "kind": "function",
        "signature": "resolveAudioEvent(event, eventId, options, time)",
        "summary": "Resolve an audio event descriptor to concrete play parameters."
      },
      {
        "name": "createAudioEventDescriptor",
        "kind": "function",
        "signature": "createAudioEventDescriptor(config = {})",
        "summary": "Create an audio event descriptor."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/core/AudioListener",
    "path": "engine/reference/audio/core/AudioListener.md",
    "source": "engine/audio/core/AudioListener.js",
    "import": "/engine/audio/core/AudioListener.js",
    "sourceHash": "7d354373c91c1c5d7da4b316e5864eb6c3df65f741f4b77d08826e18144e6855",
    "summary": "AudioListener.js - 3D Audio Listener Wraps the Web Audio API AudioListener, syncing camera position, orientation, and velocity for accurate 3D spatialization.",
    "exports": [
      {
        "name": "createAudioListener",
        "kind": "function",
        "signature": "createAudioListener(context)",
        "summary": "Create an audio listener wrapper."
      },
      {
        "name": "updateAudioListener",
        "kind": "function",
        "signature": "updateAudioListener(listener, position, forward, up, dt)",
        "summary": "Update listener position, orientation, and velocity. Call once per frame with camera data."
      },
      {
        "name": "getListenerPosition",
        "kind": "function",
        "signature": "getListenerPosition(listener)",
        "summary": "Get the listener's current position."
      },
      {
        "name": "getListenerVelocity",
        "kind": "function",
        "signature": "getListenerVelocity(listener)",
        "summary": "Get the listener's current velocity."
      },
      {
        "name": "destroyAudioListener",
        "kind": "function",
        "signature": "destroyAudioListener(listener)",
        "summary": "Destroy the listener wrapper."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/core/AudioOcclusion",
    "path": "engine/reference/audio/core/AudioOcclusion.md",
    "source": "engine/audio/core/AudioOcclusion.js",
    "import": "/engine/audio/core/AudioOcclusion.js",
    "sourceHash": "84e29371a45c10d42fd9f26529566765d4a0533a5ef94d97105c8a4bb94569fb",
    "summary": "AudioOcclusion.js - Sound Occlusion via Raycasting Casts a ray from each active source to the listener. If the ray intersects occluders (walls, objects), applies lowpass filter + volume attenuation to simulate sound being blocked/muffled. Uses simple AABB intersection for performance. Can be upgraded to use the engine's physics raycasts (PhysX/PBD) for higher fidelity.",
    "exports": [
      {
        "name": "createAudioOcclusion",
        "kind": "function",
        "signature": "createAudioOcclusion(config = {})",
        "summary": "Create an occlusion system."
      },
      {
        "name": "addOccluder",
        "kind": "function",
        "signature": "addOccluder(occlusion, min, max, transmission = 0.2)",
        "summary": "Add an AABB occluder."
      },
      {
        "name": "removeOccluder",
        "kind": "function",
        "signature": "removeOccluder(occlusion, index)",
        "summary": "Remove an occluder by index."
      },
      {
        "name": "clearOccluders",
        "kind": "function",
        "signature": "clearOccluders(occlusion)",
        "summary": "Clear all occluders."
      },
      {
        "name": "tickOcclusion",
        "kind": "function",
        "signature": "tickOcclusion(occlusion, activeSources, listenerPos, context, dt)",
        "summary": "Tick occlusion: check sources against occluders and apply filters."
      },
      {
        "name": "destroyAudioOcclusion",
        "kind": "function",
        "signature": "destroyAudioOcclusion(occlusion)",
        "summary": "Destroy occlusion system."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/core/AudioReverbZone",
    "path": "engine/reference/audio/core/AudioReverbZone.md",
    "source": "engine/audio/core/AudioReverbZone.js",
    "import": "/engine/audio/core/AudioReverbZone.js",
    "sourceHash": "6f50ecb4b37f0dfcd16df0fd38cbcff9ee6b356aff9d6613b109f8daff9d48da",
    "summary": "Create a reverb zone system.",
    "exports": [
      {
        "name": "createReverbZoneSystem",
        "kind": "function",
        "signature": "createReverbZoneSystem(context, destination)",
        "summary": "Create a reverb zone system."
      },
      {
        "name": "addReverbZone",
        "kind": "function",
        "signature": "addReverbZone(system, config = {})",
        "summary": "Add a reverb zone."
      },
      {
        "name": "removeReverbZone",
        "kind": "function",
        "signature": "removeReverbZone(system, index)",
        "summary": "Remove a reverb zone."
      },
      {
        "name": "tickReverbZones",
        "kind": "function",
        "signature": "tickReverbZones(system, listenerPos)",
        "summary": "Tick reverb zones — blend based on listener position."
      },
      {
        "name": "connectSourceToReverb",
        "kind": "function",
        "signature": "connectSourceToReverb(system, source, sendLevel = 0.3)",
        "summary": "Connect a source to the reverb system's convolver (send)."
      },
      {
        "name": "destroyReverbZoneSystem",
        "kind": "function",
        "signature": "destroyReverbZoneSystem(system)",
        "summary": "Destroy reverb zone system."
      },
      {
        "name": "REVERB_PRESETS",
        "kind": "constant",
        "signature": "REVERB_PRESETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/core/AudioSource",
    "path": "engine/reference/audio/core/AudioSource.md",
    "source": "engine/audio/core/AudioSource.js",
    "import": "/engine/audio/core/AudioSource.js",
    "sourceHash": "79f188697e20356be5026adeac4afc043613a60d6e2e201414b17f0d0825f7be",
    "summary": "AudioSource.js - 3D Sound Emitter Wraps a BufferSourceNode + PannerNode (HRTF) + GainNode chain. Represents a single playing sound in 3D space.",
    "exports": [
      {
        "name": "createAudioSource",
        "kind": "function",
        "signature": "createAudioSource(context, config = {})",
        "summary": "Create and start an audio source."
      },
      {
        "name": "tickAudioSource",
        "kind": "function",
        "signature": "tickAudioSource(source, dt)",
        "summary": "Tick a source (per-frame update)."
      },
      {
        "name": "setSourcePosition",
        "kind": "function",
        "signature": "setSourcePosition(source, position)",
        "summary": "Update source 3D position explicitly."
      },
      {
        "name": "setSourceVolume",
        "kind": "function",
        "signature": "setSourceVolume(source, volume)",
        "summary": "Set source volume."
      },
      {
        "name": "setSourcePitch",
        "kind": "function",
        "signature": "setSourcePitch(source, pitch)",
        "summary": "Set source pitch/playback rate."
      },
      {
        "name": "stopAudioSource",
        "kind": "function",
        "signature": "stopAudioSource(source, fadeOut = 0.05)",
        "summary": "Stop a source with optional fade-out."
      },
      {
        "name": "isSourceDone",
        "kind": "function",
        "signature": "isSourceDone(source)",
        "summary": "Check if source is finished playing."
      },
      {
        "name": "getSourceEffectiveVolume",
        "kind": "function",
        "signature": "getSourceEffectiveVolume(source)",
        "summary": "Get effective volume (volume × occlusion)."
      },
      {
        "name": "destroyAudioSource",
        "kind": "function",
        "signature": "destroyAudioSource(source)",
        "summary": "Destroy a source and disconnect all nodes."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/core/FootstepEvents",
    "path": "engine/reference/audio/core/FootstepEvents.md",
    "source": "engine/audio/core/FootstepEvents.js",
    "import": "/engine/audio/core/FootstepEvents.js",
    "sourceHash": "7a955a1924b3bda009cc7120c0e483f056ae0202ebe0d74203c6390fb4ec5483",
    "summary": "FootstepEvents.js - Footstep Audio Event Registration Registers all footstep and land audio events with the AudioEngine. Called during engine initialization.",
    "exports": [
      {
        "name": "registerFootstepEvents",
        "kind": "function",
        "signature": "registerFootstepEvents(audioEngine)",
        "summary": "Register all footstep audio events with the AudioEngine. Should be called once during engine initialization."
      },
      {
        "name": "unregisterFootstepEvents",
        "kind": "function",
        "signature": "unregisterFootstepEvents(audioEngine)",
        "summary": "Unregister all footstep events (for cleanup)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/core/FootstepMaterials",
    "path": "engine/reference/audio/core/FootstepMaterials.md",
    "source": "engine/audio/core/FootstepMaterials.js",
    "import": "/engine/audio/core/FootstepMaterials.js",
    "sourceHash": "279bc841de0f173a8cf65ed0929bf7706d2f8a5bdef2c2bfb5083573ebf8c0e9",
    "summary": "FootstepMaterials.js - Footstep Material Taxonomy & Mapping Defines acoustic materials for footsteps (distinct from physics materials) and provides mapping from physics/voxel materials to footstep materials.",
    "exports": [
      {
        "name": "resolveFootstepMaterial",
        "kind": "function",
        "signature": "resolveFootstepMaterial(material)",
        "summary": "Resolve a physics material ID to a footstep material key."
      },
      {
        "name": "getFootstepConfig",
        "kind": "function",
        "signature": "getFootstepConfig(materialKey)",
        "summary": "Get footstep material config."
      },
      {
        "name": "getAllFootstepMaterials",
        "kind": "function",
        "signature": "getAllFootstepMaterials()",
        "summary": "Get all footstep material keys."
      },
      {
        "name": "FOOTSTEP_MATERIALS",
        "kind": "constant",
        "signature": "FOOTSTEP_MATERIALS",
        "summary": "Footstep material configurations. Each defines the procedural patch to use and number of variants."
      },
      {
        "name": "PHYSICS_TO_FOOTSTEP",
        "kind": "constant",
        "signature": "PHYSICS_TO_FOOTSTEP",
        "summary": "Map physics material IDs to footstep materials. Physics materials are from PhysicsAudioBridge.js MATERIAL_TO_SUBSTANCE."
      },
      {
        "name": "VOXEL_TO_FOOTSTEP",
        "kind": "constant",
        "signature": "VOXEL_TO_FOOTSTEP",
        "summary": "Map voxel/terrain material strings to footstep materials. Used when querying terrain directly."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/core/index",
    "path": "engine/reference/audio/core/index.md",
    "source": "engine/audio/core/index.js",
    "import": "/engine/audio/core/index.js",
    "sourceHash": "cd7a0a62955a9370419f0dec2a1cd3e60cf904fe0d12698ff5906cb63157a11e",
    "summary": "engine/audio/core/index.js — Barrel export for core audio engine.",
    "exports": [
      {
        "name": "FOOTSTEP_MATERIALS",
        "kind": "re-export",
        "signature": "FOOTSTEP_MATERIALS",
        "summary": ""
      },
      {
        "name": "PHYSICS_TO_FOOTSTEP",
        "kind": "re-export",
        "signature": "PHYSICS_TO_FOOTSTEP",
        "summary": ""
      },
      {
        "name": "REVERB_PRESETS",
        "kind": "re-export",
        "signature": "REVERB_PRESETS",
        "summary": ""
      },
      {
        "name": "VOXEL_TO_FOOTSTEP",
        "kind": "re-export",
        "signature": "VOXEL_TO_FOOTSTEP",
        "summary": ""
      },
      {
        "name": "addOccluder",
        "kind": "re-export",
        "signature": "addOccluder",
        "summary": ""
      },
      {
        "name": "addReverbZone",
        "kind": "re-export",
        "signature": "addReverbZone",
        "summary": ""
      },
      {
        "name": "canAddVoice",
        "kind": "re-export",
        "signature": "canAddVoice",
        "summary": ""
      },
      {
        "name": "clearAudioCache",
        "kind": "re-export",
        "signature": "clearAudioCache",
        "summary": ""
      },
      {
        "name": "clearOccluders",
        "kind": "re-export",
        "signature": "clearOccluders",
        "summary": ""
      },
      {
        "name": "connectSourceToReverb",
        "kind": "re-export",
        "signature": "connectSourceToReverb",
        "summary": ""
      },
      {
        "name": "createAudioAssetManager",
        "kind": "re-export",
        "signature": "createAudioAssetManager",
        "summary": ""
      },
      {
        "name": "createAudioBus",
        "kind": "re-export",
        "signature": "createAudioBus",
        "summary": ""
      },
      {
        "name": "createAudioConcurrency",
        "kind": "re-export",
        "signature": "createAudioConcurrency",
        "summary": ""
      },
      {
        "name": "createAudioDoppler",
        "kind": "re-export",
        "signature": "createAudioDoppler",
        "summary": ""
      },
      {
        "name": "createAudioEngine",
        "kind": "re-export",
        "signature": "createAudioEngine",
        "summary": ""
      },
      {
        "name": "createAudioEventDescriptor",
        "kind": "re-export",
        "signature": "createAudioEventDescriptor",
        "summary": ""
      },
      {
        "name": "createAudioListener",
        "kind": "re-export",
        "signature": "createAudioListener",
        "summary": ""
      },
      {
        "name": "createAudioOcclusion",
        "kind": "re-export",
        "signature": "createAudioOcclusion",
        "summary": ""
      },
      {
        "name": "createAudioSource",
        "kind": "re-export",
        "signature": "createAudioSource",
        "summary": ""
      },
      {
        "name": "createReverbZoneSystem",
        "kind": "re-export",
        "signature": "createReverbZoneSystem",
        "summary": ""
      },
      {
        "name": "destroyAudioAssetManager",
        "kind": "re-export",
        "signature": "destroyAudioAssetManager",
        "summary": ""
      },
      {
        "name": "destroyAudioBus",
        "kind": "re-export",
        "signature": "destroyAudioBus",
        "summary": ""
      },
      {
        "name": "destroyAudioConcurrency",
        "kind": "re-export",
        "signature": "destroyAudioConcurrency",
        "summary": ""
      },
      {
        "name": "destroyAudioDoppler",
        "kind": "re-export",
        "signature": "destroyAudioDoppler",
        "summary": ""
      },
      {
        "name": "destroyAudioEngine",
        "kind": "re-export",
        "signature": "destroyAudioEngine",
        "summary": ""
      },
      {
        "name": "destroyAudioListener",
        "kind": "re-export",
        "signature": "destroyAudioListener",
        "summary": ""
      },
      {
        "name": "destroyAudioOcclusion",
        "kind": "re-export",
        "signature": "destroyAudioOcclusion",
        "summary": ""
      },
      {
        "name": "destroyAudioSource",
        "kind": "re-export",
        "signature": "destroyAudioSource",
        "summary": ""
      },
      {
        "name": "destroyReverbZoneSystem",
        "kind": "re-export",
        "signature": "destroyReverbZoneSystem",
        "summary": ""
      },
      {
        "name": "getAllFootstepMaterials",
        "kind": "re-export",
        "signature": "getAllFootstepMaterials",
        "summary": ""
      },
      {
        "name": "getAudioBuffer",
        "kind": "re-export",
        "signature": "getAudioBuffer",
        "summary": ""
      },
      {
        "name": "getBusOutput",
        "kind": "re-export",
        "signature": "getBusOutput",
        "summary": ""
      },
      {
        "name": "getFootstepConfig",
        "kind": "re-export",
        "signature": "getFootstepConfig",
        "summary": ""
      },
      {
        "name": "getListenerPosition",
        "kind": "re-export",
        "signature": "getListenerPosition",
        "summary": ""
      },
      {
        "name": "getListenerVelocity",
        "kind": "re-export",
        "signature": "getListenerVelocity",
        "summary": ""
      },
      {
        "name": "getSourceEffectiveVolume",
        "kind": "re-export",
        "signature": "getSourceEffectiveVolume",
        "summary": ""
      },
      {
        "name": "hasAudioBuffer",
        "kind": "re-export",
        "signature": "hasAudioBuffer",
        "summary": ""
      },
      {
        "name": "initAudioEngine",
        "kind": "re-export",
        "signature": "initAudioEngine",
        "summary": ""
      },
      {
        "name": "isSourceDone",
        "kind": "re-export",
        "signature": "isSourceDone",
        "summary": ""
      },
      {
        "name": "loadAudioAsset",
        "kind": "re-export",
        "signature": "loadAudioAsset",
        "summary": ""
      },
      {
        "name": "playBuffer",
        "kind": "re-export",
        "signature": "playBuffer",
        "summary": ""
      },
      {
        "name": "playSound",
        "kind": "re-export",
        "signature": "playSound",
        "summary": ""
      },
      {
        "name": "preloadAudioAssets",
        "kind": "re-export",
        "signature": "preloadAudioAssets",
        "summary": ""
      },
      {
        "name": "registerAudioBuffer",
        "kind": "re-export",
        "signature": "registerAudioBuffer",
        "summary": ""
      },
      {
        "name": "registerAudioEvent",
        "kind": "re-export",
        "signature": "registerAudioEvent",
        "summary": ""
      },
      {
        "name": "registerFootstepEvents",
        "kind": "re-export",
        "signature": "registerFootstepEvents",
        "summary": ""
      },
      {
        "name": "removeOccluder",
        "kind": "re-export",
        "signature": "removeOccluder",
        "summary": ""
      },
      {
        "name": "removeReverbZone",
        "kind": "re-export",
        "signature": "removeReverbZone",
        "summary": ""
      },
      {
        "name": "resolveAudioEvent",
        "kind": "re-export",
        "signature": "resolveAudioEvent",
        "summary": ""
      },
      {
        "name": "resolveFootstepMaterial",
        "kind": "re-export",
        "signature": "resolveFootstepMaterial",
        "summary": ""
      },
      {
        "name": "resumeAudioEngine",
        "kind": "re-export",
        "signature": "resumeAudioEngine",
        "summary": ""
      },
      {
        "name": "setAudioBaseUrl",
        "kind": "re-export",
        "signature": "setAudioBaseUrl",
        "summary": ""
      },
      {
        "name": "setBusDuck",
        "kind": "re-export",
        "signature": "setBusDuck",
        "summary": ""
      },
      {
        "name": "setBusMute",
        "kind": "re-export",
        "signature": "setBusMute",
        "summary": ""
      },
      {
        "name": "setBusVolume",
        "kind": "re-export",
        "signature": "setBusVolume",
        "summary": ""
      },
      {
        "name": "setBusVolumeByName",
        "kind": "re-export",
        "signature": "setBusVolumeByName",
        "summary": ""
      },
      {
        "name": "setMasterVolume",
        "kind": "re-export",
        "signature": "setMasterVolume",
        "summary": ""
      },
      {
        "name": "setSourcePitch",
        "kind": "re-export",
        "signature": "setSourcePitch",
        "summary": ""
      },
      {
        "name": "setSourcePosition",
        "kind": "re-export",
        "signature": "setSourcePosition",
        "summary": ""
      },
      {
        "name": "setSourceVolume",
        "kind": "re-export",
        "signature": "setSourceVolume",
        "summary": ""
      },
      {
        "name": "stopAllSources",
        "kind": "re-export",
        "signature": "stopAllSources",
        "summary": ""
      },
      {
        "name": "stopAudioSource",
        "kind": "re-export",
        "signature": "stopAudioSource",
        "summary": ""
      },
      {
        "name": "stopSource",
        "kind": "re-export",
        "signature": "stopSource",
        "summary": ""
      },
      {
        "name": "tickAudioEngine",
        "kind": "re-export",
        "signature": "tickAudioEngine",
        "summary": ""
      },
      {
        "name": "tickAudioSource",
        "kind": "re-export",
        "signature": "tickAudioSource",
        "summary": ""
      },
      {
        "name": "tickConcurrency",
        "kind": "re-export",
        "signature": "tickConcurrency",
        "summary": ""
      },
      {
        "name": "tickDoppler",
        "kind": "re-export",
        "signature": "tickDoppler",
        "summary": ""
      },
      {
        "name": "tickOcclusion",
        "kind": "re-export",
        "signature": "tickOcclusion",
        "summary": ""
      },
      {
        "name": "tickReverbZones",
        "kind": "re-export",
        "signature": "tickReverbZones",
        "summary": ""
      },
      {
        "name": "triggerAudioEvent",
        "kind": "re-export",
        "signature": "triggerAudioEvent",
        "summary": ""
      },
      {
        "name": "unloadAudioAsset",
        "kind": "re-export",
        "signature": "unloadAudioAsset",
        "summary": ""
      },
      {
        "name": "unregisterAudioEvent",
        "kind": "re-export",
        "signature": "unregisterAudioEvent",
        "summary": ""
      },
      {
        "name": "unregisterFootstepEvents",
        "kind": "re-export",
        "signature": "unregisterFootstepEvents",
        "summary": ""
      },
      {
        "name": "updateAudioListener",
        "kind": "re-export",
        "signature": "updateAudioListener",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/index",
    "path": "engine/reference/audio/index.md",
    "source": "engine/audio/index.js",
    "import": "/engine/audio/index.js",
    "sourceHash": "3a9da152ea1a90b39ef4fcf78e0de55f830d2d6d67b7f46f8223fbf3ba0d0080",
    "summary": "engine/audio/index.js — Top-level barrel export for the complete audio system. Exports: Core engine, Spatial pipeline, Bridges, Synth kernel, Sound atoms, Physics models.",
    "exports": [
      {
        "name": "MAX_EMITTERS",
        "kind": "re-export",
        "signature": "MAX_EMITTERS",
        "summary": ""
      },
      {
        "name": "PARAMS_PER_EMITTER",
        "kind": "re-export",
        "signature": "PARAMS_PER_EMITTER",
        "summary": ""
      },
      {
        "name": "PARAM_LAYOUT",
        "kind": "re-export",
        "signature": "PARAM_LAYOUT",
        "summary": ""
      },
      {
        "name": "TOTAL_FLOAT_COUNT",
        "kind": "re-export",
        "signature": "TOTAL_FLOAT_COUNT",
        "summary": ""
      },
      {
        "name": "clearAllEmitterStats",
        "kind": "re-export",
        "signature": "clearAllEmitterStats",
        "summary": ""
      },
      {
        "name": "clearEmitterStats",
        "kind": "re-export",
        "signature": "clearEmitterStats",
        "summary": ""
      },
      {
        "name": "createCombustionPatch",
        "kind": "re-export",
        "signature": "createCombustionPatch",
        "summary": ""
      },
      {
        "name": "createCrackleAtomPatch",
        "kind": "re-export",
        "signature": "createCrackleAtomPatch",
        "summary": ""
      },
      {
        "name": "createDropAtomPatch",
        "kind": "re-export",
        "signature": "createDropAtomPatch",
        "summary": ""
      },
      {
        "name": "createFluidPatch",
        "kind": "re-export",
        "signature": "createFluidPatch",
        "summary": ""
      },
      {
        "name": "createHissAtomPatch",
        "kind": "re-export",
        "signature": "createHissAtomPatch",
        "summary": ""
      },
      {
        "name": "createModalImpactPatch",
        "kind": "re-export",
        "signature": "createModalImpactPatch",
        "summary": ""
      },
      {
        "name": "createRumbleAtomPatch",
        "kind": "re-export",
        "signature": "createRumbleAtomPatch",
        "summary": ""
      },
      {
        "name": "createSharedParamBuffer",
        "kind": "re-export",
        "signature": "createSharedParamBuffer",
        "summary": ""
      },
      {
        "name": "createWeatherPatch",
        "kind": "re-export",
        "signature": "createWeatherPatch",
        "summary": ""
      },
      {
        "name": "createWhooshAtomPatch",
        "kind": "re-export",
        "signature": "createWhooshAtomPatch",
        "summary": ""
      },
      {
        "name": "createWindPatch",
        "kind": "re-export",
        "signature": "createWindPatch",
        "summary": ""
      },
      {
        "name": "getModalMaterials",
        "kind": "re-export",
        "signature": "getModalMaterials",
        "summary": ""
      },
      {
        "name": "getModalPreset",
        "kind": "re-export",
        "signature": "getModalPreset",
        "summary": ""
      },
      {
        "name": "readEmitterParam",
        "kind": "re-export",
        "signature": "readEmitterParam",
        "summary": ""
      },
      {
        "name": "writeEmitterStats",
        "kind": "re-export",
        "signature": "writeEmitterStats",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/BodyFoleyPatches",
    "path": "engine/reference/audio/synth/BodyFoleyPatches.md",
    "source": "engine/audio/synth/BodyFoleyPatches.js",
    "import": "/engine/audio/synth/BodyFoleyPatches.js",
    "sourceHash": "44ecb543510169eb6ce1d49710583c861e044fec2d1da32c36e68585c1b37597",
    "summary": "Jump effort sound — short vocal grunt (bandpassed noise + formant)",
    "exports": [
      {
        "name": "body_jump_effort",
        "kind": "function",
        "signature": "body_jump_effort(ctx, dest, p)",
        "summary": "Jump effort sound — short vocal grunt (bandpassed noise + formant)"
      },
      {
        "name": "body_slide",
        "kind": "function",
        "signature": "body_slide(ctx, dest, p)",
        "summary": "Slide friction sound — continuous lowpass swept noise"
      },
      {
        "name": "body_cloth",
        "kind": "function",
        "signature": "body_cloth(ctx, dest, p)",
        "summary": "Cloth rustle — short high-freq noise burst"
      },
      {
        "name": "body_breath_light",
        "kind": "function",
        "signature": "body_breath_light(ctx, dest, p)",
        "summary": "Light breathing — soft airy noise with bandpass"
      },
      {
        "name": "body_breath_heavy",
        "kind": "function",
        "signature": "body_breath_heavy(ctx, dest, p)",
        "summary": "Heavy breathing — louder breath with low-end rumble"
      },
      {
        "name": "BODY_FOLEY_PATCHES",
        "kind": "constant",
        "signature": "BODY_FOLEY_PATCHES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/FootstepPatches",
    "path": "engine/reference/audio/synth/FootstepPatches.md",
    "source": "engine/audio/synth/FootstepPatches.js",
    "import": "/engine/audio/synth/FootstepPatches.js",
    "sourceHash": "aee0f7394cadde2be30a8bfaee8bbe20fd64726a9dce58e04517da4f732f9fd0",
    "summary": "FootstepPatches.js - Procedural Footstep Sound Generators Generates material-specific footstep sounds procedurally using Web Audio API. Each patch creates layered sounds (body impact + surface texture) with parameters for speed, weight, and pitch variation.",
    "exports": [
      {
        "name": "footstep_dirt",
        "kind": "function",
        "signature": "footstep_dirt(ctx, dest, p)",
        "summary": "Dirt footstep — muffled thud + grain scatter"
      },
      {
        "name": "footstep_grass",
        "kind": "function",
        "signature": "footstep_grass(ctx, dest, p)",
        "summary": "Grass footstep — soft rustle + muffled thud"
      },
      {
        "name": "footstep_sand",
        "kind": "function",
        "signature": "footstep_sand(ctx, dest, p)",
        "summary": "Sand footstep — soft grain scatter + muffled impact"
      },
      {
        "name": "footstep_gravel",
        "kind": "function",
        "signature": "footstep_gravel(ctx, dest, p)",
        "summary": "Gravel footstep — sharp scatter + rattle"
      },
      {
        "name": "footstep_mud",
        "kind": "function",
        "signature": "footstep_mud(ctx, dest, p)",
        "summary": "Mud footstep — wet squelch + suction release"
      },
      {
        "name": "footstep_snow",
        "kind": "function",
        "signature": "footstep_snow(ctx, dest, p)",
        "summary": "Snow footstep — soft crunch + squeak"
      },
      {
        "name": "footstep_stone",
        "kind": "function",
        "signature": "footstep_stone(ctx, dest, p)",
        "summary": "Stone footstep — hard impact + high-freq crack"
      },
      {
        "name": "footstep_concrete",
        "kind": "function",
        "signature": "footstep_concrete(ctx, dest, p)",
        "summary": "Concrete footstep — dull thud + mid-freq resonance"
      },
      {
        "name": "footstep_marble",
        "kind": "function",
        "signature": "footstep_marble(ctx, dest, p)",
        "summary": "Marble footstep — bright click + ring"
      },
      {
        "name": "footstep_brick",
        "kind": "function",
        "signature": "footstep_brick(ctx, dest, p)",
        "summary": "Brick footstep — textured impact + dust scatter"
      },
      {
        "name": "footstep_wood_plank",
        "kind": "function",
        "signature": "footstep_wood_plank(ctx, dest, p)",
        "summary": "Wood plank footstep — resonant body + plank slap"
      },
      {
        "name": "footstep_wood_creak",
        "kind": "function",
        "signature": "footstep_wood_creak(ctx, dest, p)",
        "summary": "Wood creak footstep — creaking friction + resonance"
      },
      {
        "name": "footstep_metal_solid",
        "kind": "function",
        "signature": "footstep_metal_solid(ctx, dest, p)",
        "summary": "Metal solid footstep — clang + ring"
      },
      {
        "name": "footstep_metal_grate",
        "kind": "function",
        "signature": "footstep_metal_grate(ctx, dest, p)",
        "summary": "Metal grate footstep — rattle + metallic ring"
      },
      {
        "name": "footstep_water_shallow",
        "kind": "function",
        "signature": "footstep_water_shallow(ctx, dest, p)",
        "summary": "Water shallow footstep — splash + plop"
      },
      {
        "name": "footstep_water_puddle",
        "kind": "function",
        "signature": "footstep_water_puddle(ctx, dest, p)",
        "summary": "Water puddle footstep — small splash"
      },
      {
        "name": "footstep_leaves",
        "kind": "function",
        "signature": "footstep_leaves(ctx, dest, p)",
        "summary": "Leaves footstep — crunch + rustle"
      },
      {
        "name": "footstep_glass",
        "kind": "function",
        "signature": "footstep_glass(ctx, dest, p)",
        "summary": "Glass footstep — delicate clink + shimmer"
      },
      {
        "name": "footstep_ice",
        "kind": "function",
        "signature": "footstep_ice(ctx, dest, p)",
        "summary": "Ice footstep — crack + slide"
      },
      {
        "name": "land_generic",
        "kind": "function",
        "signature": "land_generic(ctx, dest, p)",
        "summary": "Generic land sound — reuses footstep patch but with heavier weight/volume Can be used as a wrapper for any footstep material"
      },
      {
        "name": "getFootstepPatch",
        "kind": "function",
        "signature": "getFootstepPatch(material)",
        "summary": "Get footstep patch function by material key."
      },
      {
        "name": "FOOTSTEP_PATCHES",
        "kind": "constant",
        "signature": "FOOTSTEP_PATCHES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/NodeRegistry",
    "path": "engine/reference/audio/synth/NodeRegistry.md",
    "source": "engine/audio/synth/NodeRegistry.js",
    "import": "/engine/audio/synth/NodeRegistry.js",
    "sourceHash": "6882e7630a9314ff81cf6368b193daa1ea90649951b50c96b23b6b365abf8eb6",
    "summary": "NodeRegistry.js — Unified Node Type Registry Single source of truth for mapping node type names to their Web Audio factory functions and worklet processor names. Usage: import { getNodeFactory, getRegisteredTypes } from './NodeRegistry.js'; const factory = getNodeFactory('Waveguide'); const node = factory(ctx, params, pitchRatio);",
    "exports": [
      {
        "name": "getNodeFactory",
        "kind": "function",
        "signature": "getNodeFactory(type)",
        "summary": "Get the Web Audio factory function for a node type. Returns a function: (ctx, nodeDefinition, pitchRatio) => { output, input, sources }"
      },
      {
        "name": "getRegisteredTypes",
        "kind": "function",
        "signature": "getRegisteredTypes()",
        "summary": "Get all registered type names."
      },
      {
        "name": "getNodeCategory",
        "kind": "function",
        "signature": "getNodeCategory(type)",
        "summary": "Get the category for a node type."
      },
      {
        "name": "hasWorkletProcessor",
        "kind": "function",
        "signature": "hasWorkletProcessor(type)",
        "summary": "Check if a type has a worklet processor implementation."
      },
      {
        "name": "NODE_CATEGORIES",
        "kind": "constant",
        "signature": "NODE_CATEGORIES",
        "summary": "Node category definitions for organization/UI."
      },
      {
        "name": "ALL_NODE_TYPES",
        "kind": "constant",
        "signature": "ALL_NODE_TYPES",
        "summary": "All registered node type names (flat list)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/PatchCompiler",
    "path": "engine/reference/audio/synth/PatchCompiler.md",
    "source": "engine/audio/synth/PatchCompiler.js",
    "import": "/engine/audio/synth/PatchCompiler.js",
    "sourceHash": "663570e9e9b3543e9b0f9168b193f52ca26ccd39b166752ff1db22d52793f97f",
    "summary": "PatchCompiler.js - Compile Patch JSON → Execution Graph Parses a patch JSON descriptor, validates nodes and wires, performs topological sort, detects feedback loops, and outputs a compiled execution plan for PatchRunner.worklet.js.",
    "exports": [
      {
        "name": "registerNodeType",
        "kind": "function",
        "signature": "registerNodeType(type, def)",
        "summary": "Register a node type for the compiler."
      },
      {
        "name": "getNodeTypes",
        "kind": "function",
        "signature": "getNodeTypes()",
        "summary": "Get all registered node types."
      },
      {
        "name": "compilePatch",
        "kind": "function",
        "signature": "compilePatch(patch)",
        "summary": "Compile a patch JSON into an execution plan."
      },
      {
        "name": "validatePatch",
        "kind": "function",
        "signature": "validatePatch(patch)",
        "summary": "Validate a patch without fully compiling."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/PatchRunner.worklet",
    "path": "engine/reference/audio/synth/PatchRunner.worklet.md",
    "source": "engine/audio/synth/PatchRunner.worklet.js",
    "import": "/engine/audio/synth/PatchRunner.worklet.js",
    "sourceHash": "6e8edf6343ab3edecefe41874c6056dc422ec3b839f1b8681ce79c68e9c133ba",
    "summary": "PatchRunner.worklet.js - AudioWorkletProcessor Executes a compiled patch graph at sample rate (128 samples/block). Receives compiled plans via MessagePort, reads game params from SharedArrayBuffer, and outputs synthesized audio. Register with: audioContext.audioWorklet.addModule('PatchRunner.worklet.js')",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/ProceduralPatches",
    "path": "engine/reference/audio/synth/ProceduralPatches.md",
    "source": "engine/audio/synth/ProceduralPatches.js",
    "import": "/engine/audio/synth/ProceduralPatches.js",
    "sourceHash": "99019ac19beb5cd6099c25f60010903dfd9e0205356c578aacd8fd23812a4498",
    "summary": "ProceduralPatches.js - Real-time procedural sound patches for particle substances Each patch is a factory: (ctx, destination, params) => { stop(), update?(params) } ctx         — AudioContext destination — AudioNode (pre-spatialized via PannerNode) params      — { volume, pitch, speed, temperature, ... } Impact patches are one-shot (auto-stop). Ambient patches loop until stop() is called, and support update() for real-time modulation.",
    "exports": [
      {
        "name": "impact_fluid",
        "kind": "function",
        "signature": "impact_fluid(ctx, dest, p)",
        "summary": "Water/fluid impact — velocity-driven splat/drip/splash. Sound design based on real water acoustics: - \"Plop\" body: fast sine pitch-sweep downward (Helmholtz cavity resonance). A water droplet traps an air bubble on impact; the bubble oscillates at a frequency that sweeps down as it grows. Duration ~15-40ms. - \"Spray\" transient: ultra-short highpass noise burst (<20ms) for the broadband crack of water hitting a surface. Only audible at higher speeds. - Bubble resonances: at high speed, 1-3 random short sine pips simulate secondary bubbles breaking the surface. Speed mapping: slow  (< 1)  → gentle drip: mostly plop body, minimal spray medium (1-4)  → splat: plop + moderate spray fast  (> 4)  → full splash: plop + loud spray + bubble pips"
      },
      {
        "name": "impact_metal",
        "kind": "function",
        "signature": "impact_metal(ctx, dest, p)",
        "summary": "Metal clang — multi-partial ring + noise transient"
      },
      {
        "name": "impact_glass",
        "kind": "function",
        "signature": "impact_glass(ctx, dest, p)",
        "summary": "Glass clink — high FM harmonics, crystalline"
      },
      {
        "name": "impact_stone",
        "kind": "function",
        "signature": "impact_stone(ctx, dest, p)",
        "summary": "Stone/debris thud — low filtered noise + crack + sub thump"
      },
      {
        "name": "impact_wood",
        "kind": "function",
        "signature": "impact_wood(ctx, dest, p)",
        "summary": "Wood knock — multi-mode resonant body + knock transient"
      },
      {
        "name": "impact_ice",
        "kind": "function",
        "signature": "impact_ice(ctx, dest, p)",
        "summary": "Ice crack — sharp noise + crystalline inharmonic pings"
      },
      {
        "name": "impact_combustion",
        "kind": "function",
        "signature": "impact_combustion(ctx, dest, p)",
        "summary": "Fire/lava impact burst — noise burst + low boom + rumble tail"
      },
      {
        "name": "impact_sand",
        "kind": "function",
        "signature": "impact_sand(ctx, dest, p)",
        "summary": "Sand soft impact — muffled body + grain scatter"
      },
      {
        "name": "impact_drop",
        "kind": "function",
        "signature": "impact_drop(ctx, dest, p)",
        "summary": "Viscous liquid drop/drip — thicker plop than water, low resonance, no spray"
      },
      {
        "name": "impact_hiss",
        "kind": "function",
        "signature": "impact_hiss(ctx, dest, p)",
        "summary": "Gas/vapor/granular hiss — soft broadband whoosh, not a hard impact"
      },
      {
        "name": "impact_crackle",
        "kind": "function",
        "signature": "impact_crackle(ctx, dest, p)",
        "summary": "Spark/debris crackle — scattered hard micro-transients"
      },
      {
        "name": "impact_electric",
        "kind": "function",
        "signature": "impact_electric(ctx, dest, p)",
        "summary": "Plasma/spark electric snap"
      },
      {
        "name": "ambient_combustion",
        "kind": "function",
        "signature": "ambient_combustion(ctx, dest, p)",
        "summary": "Fire/lava crackling ambient — random noise bursts + low rumble"
      },
      {
        "name": "ambient_fluid",
        "kind": "function",
        "signature": "ambient_fluid(ctx, dest, p)",
        "summary": "Viscous/fluid flow ambient — subtle high-freq trickle. Shared by water + viscous liquids through AMBIENT_PATCHES aliases."
      },
      {
        "name": "ambient_electric",
        "kind": "function",
        "signature": "ambient_electric(ctx, dest, p)",
        "summary": "Plasma/electric buzz ambient — FM buzz + noise crackle"
      },
      {
        "name": "ambient_wind",
        "kind": "function",
        "signature": "ambient_wind(ctx, dest, p)",
        "summary": "Smoke/steam/wind ambient — airy bandpass sweep"
      },
      {
        "name": "getImpactPatch",
        "kind": "function",
        "signature": "getImpactPatch(key)",
        "summary": "Get the impact patch function for a substance key. If runtime overrides exist for this key, returns a wrapper that merges them."
      },
      {
        "name": "getAmbientPatch",
        "kind": "function",
        "signature": "getAmbientPatch(key)",
        "summary": "Get the ambient patch function for a substance key. If runtime overrides exist for this key, returns a wrapper that merges them."
      },
      {
        "name": "setPatchOverride",
        "kind": "function",
        "signature": "setPatchOverride(key, param, value)",
        "summary": "Set a param override for a material patch. These overrides are merged into patch params at call time."
      },
      {
        "name": "setPatchOverrides",
        "kind": "function",
        "signature": "setPatchOverrides(key, overrides)",
        "summary": "Set all overrides for a material at once."
      },
      {
        "name": "getPatchOverride",
        "kind": "function",
        "signature": "getPatchOverride(key)",
        "summary": "Get current overrides for a material."
      },
      {
        "name": "clearPatchOverrides",
        "kind": "function",
        "signature": "clearPatchOverrides()",
        "summary": "Clear all runtime overrides (reset to defaults)."
      },
      {
        "name": "getAllPatchKeys",
        "kind": "function",
        "signature": "getAllPatchKeys()",
        "summary": "Get all unique canonical material keys (de-duplicated patch function names). Returns objects with { key, type, patchFn } for both impact and ambient."
      },
      {
        "name": "getAllMaterialAliases",
        "kind": "function",
        "signature": "getAllMaterialAliases()",
        "summary": "Get a flat list of all material alias keys (including duplicates)."
      },
      {
        "name": "IMPACT_PATCHES",
        "kind": "constant",
        "signature": "IMPACT_PATCHES",
        "summary": "Map of proceduralPatch strings → impact patch functions"
      },
      {
        "name": "AMBIENT_PATCHES",
        "kind": "constant",
        "signature": "AMBIENT_PATCHES",
        "summary": "Map of proceduralPatch strings → ambient patch functions"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/SfxGenerator",
    "path": "engine/reference/audio/synth/SfxGenerator.md",
    "source": "engine/audio/synth/SfxGenerator.js",
    "import": "/engine/audio/synth/SfxGenerator.js",
    "sourceHash": "3aa06ed5eec2acd85533c12646fe0d15b79b53d91636c4700be6541084c4adae",
    "summary": "SfxGenerator.js — Parametric Sound Effect Generator sfxr-inspired procedural SFX system. Every sound is defined by a compact parameter object — no samples needed. Renders to AudioBuffer or plays directly via Web Audio. Parameters cover: waveform, envelope, frequency sweep, vibrato, arpeggiation, duty cycle, retrigger, flanger, LP/HP filter, gain. Preset categories with randomize/mutate for instant sound creation: Pickup, Laser, Explosion, Powerup, Hit, Jump, Blip, Click, Error, Coin Usage: import { createSfxParams, randomizePreset, mutateSfx, renderSfx, playSfx } from './SfxGenerator.js'; const params = randomizePreset('laser'); const buffer = renderSfx(audioCtx, params); playSfx(audioCtx, buffer);",
    "exports": [
      {
        "name": "createSfxParams",
        "kind": "function",
        "signature": "createSfxParams()",
        "summary": "Create a default SFX parameter set. All values normalized to sensible ranges."
      },
      {
        "name": "randomizePreset",
        "kind": "function",
        "signature": "randomizePreset(preset)",
        "summary": "Generate a randomized SFX from a preset category."
      },
      {
        "name": "randomizeFull",
        "kind": "function",
        "signature": "randomizeFull()",
        "summary": "Fully random SFX (no preset bias)."
      },
      {
        "name": "mutateSfx",
        "kind": "function",
        "signature": "mutateSfx(params, amount = 0.05)",
        "summary": "Mutate an existing SFX params slightly (small random nudge to each param)."
      },
      {
        "name": "getPresetNames",
        "kind": "function",
        "signature": "getPresetNames()",
        "summary": "Get list of available preset names."
      },
      {
        "name": "renderSfx",
        "kind": "function",
        "signature": "renderSfx(ctx, params)",
        "summary": "Render an SFX to an AudioBuffer. This is a pure software synthesizer — runs offline, produces a buffer."
      },
      {
        "name": "playSfx",
        "kind": "function",
        "signature": "playSfx(ctx, buffer, options = {})",
        "summary": "Play a rendered SFX buffer."
      },
      {
        "name": "renderAndPlay",
        "kind": "function",
        "signature": "renderAndPlay(ctx, params, options = {})",
        "summary": "Render and immediately play an SFX."
      },
      {
        "name": "encodeSfxParams",
        "kind": "function",
        "signature": "encodeSfxParams(params)",
        "summary": "Encode SFX params to a compact JSON string."
      },
      {
        "name": "decodeSfxParams",
        "kind": "function",
        "signature": "decodeSfxParams(str)",
        "summary": "Decode SFX params from a JSON string."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/SharedParamBuffer",
    "path": "engine/reference/audio/synth/SharedParamBuffer.md",
    "source": "engine/audio/synth/SharedParamBuffer.js",
    "import": "/engine/audio/synth/SharedParamBuffer.js",
    "sourceHash": "9e32094f0ecc6dc49ab5c06a27b4709467a611d042e709920dcc24f7e5830273",
    "summary": "SharedParamBuffer.js - Game → AudioWorklet Parameter Streaming Allocates a SharedArrayBuffer for zero-copy, zero-latency parameter updates from the main game thread to the AudioWorklet synthesis thread. Layout: Float32Array where each slot maps to an exposed synth parameter. The main thread writes emitter aggregate stats each frame; the worklet reads them.",
    "exports": [
      {
        "name": "createSharedParamBuffer",
        "kind": "function",
        "signature": "createSharedParamBuffer()",
        "summary": "Create a shared parameter buffer."
      },
      {
        "name": "writeEmitterStats",
        "kind": "function",
        "signature": "writeEmitterStats(view, emitterIndex, stats)",
        "summary": "Write emitter aggregate stats to the shared buffer."
      },
      {
        "name": "clearAllEmitterStats",
        "kind": "function",
        "signature": "clearAllEmitterStats(view)",
        "summary": "Clear all emitter stats (e.g. when emitters stop)."
      },
      {
        "name": "clearEmitterStats",
        "kind": "function",
        "signature": "clearEmitterStats(view, emitterIndex)",
        "summary": "Clear stats for a specific emitter."
      },
      {
        "name": "readEmitterParam",
        "kind": "function",
        "signature": "readEmitterParam(view, emitterIndex, paramIndex)",
        "summary": "Read a single param value from the shared buffer."
      },
      {
        "name": "PARAM_LAYOUT",
        "kind": "constant",
        "signature": "PARAM_LAYOUT",
        "summary": "Standard parameter indices for emitter → synth streaming. Each active emitter gets one set of these slots."
      },
      {
        "name": "PARAMS_PER_EMITTER",
        "kind": "constant",
        "signature": "PARAMS_PER_EMITTER",
        "summary": ""
      },
      {
        "name": "MAX_EMITTERS",
        "kind": "constant",
        "signature": "MAX_EMITTERS",
        "summary": ""
      },
      {
        "name": "TOTAL_FLOAT_COUNT",
        "kind": "constant",
        "signature": "TOTAL_FLOAT_COUNT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/SoundBlender",
    "path": "engine/reference/audio/synth/SoundBlender.md",
    "source": "engine/audio/synth/SoundBlender.js",
    "import": "/engine/audio/synth/SoundBlender.js",
    "sourceHash": "05fc5a76d35f0d966a4ca68f1c4e953f7d5b884dfbeaddddbcdb0d6da527fe9b",
    "summary": "SoundBlender.js — Multi-Layer Sound Effect Mixer Blends 2-4 sound sources (AudioBuffers) with per-layer controls: - Volume, pitch shift, delay offset - Crossfade curves (linear, equal-power, cosine) - Random variation ranges per parameter - Trigger modes: simultaneous, sequential, random-pick, round-robin Produces infinite unique variations from a small set of source sounds. Usage: import { createBlendPreset, renderBlend, playBlend } from './SoundBlender.js'; const preset = createBlendPreset([buffer1, buffer2], { layers: [ { volume: 0.8, pitch: 1.0, delay: 0, volumeRandom: 0.1, pitchRandom: 0.05 }, { volume: 0.5, pitch: 1.2, delay: 0.05, volumeRandom: 0.2, pitchRandom: 0.1 } ], mode: 'simultaneous' }); playBlend(ctx, preset);",
    "exports": [
      {
        "name": "createBlendPreset",
        "kind": "function",
        "signature": "createBlendPreset(buffers = [], config = {})",
        "summary": "Create a blend preset from source buffers and layer config."
      },
      {
        "name": "addLayer",
        "kind": "function",
        "signature": "addLayer(preset, buffer, layerConfig = {})",
        "summary": "Add a layer to an existing preset."
      },
      {
        "name": "removeLayer",
        "kind": "function",
        "signature": "removeLayer(preset, index)",
        "summary": "Remove a layer by index."
      },
      {
        "name": "playBlend",
        "kind": "function",
        "signature": "playBlend(ctx, preset, options = {})",
        "summary": "Play a blend preset. Returns an object with stop() method."
      },
      {
        "name": "renderBlend",
        "kind": "function",
        "signature": "async renderBlend(ctx, preset)",
        "summary": "Render a blend preset to a single AudioBuffer (offline)."
      },
      {
        "name": "generateVariations",
        "kind": "function",
        "signature": "async generateVariations(ctx, preset, count = 10)",
        "summary": "Generate N unique variations of a blend preset. Each variation resolves random ranges differently."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/SoundSchema",
    "path": "engine/reference/audio/synth/SoundSchema.md",
    "source": "engine/audio/synth/SoundSchema.js",
    "import": "/engine/audio/synth/SoundSchema.js",
    "sourceHash": "9c5e67309f1f069f25bf97421a91d0eda50390734700a100cb92f5c1b25d482c",
    "summary": "SoundSchema.js — JSON Schema Definitions for All Sound Types Each schema defines every parameter with: type, min, max, step, default, label, description, unit, group Used by: - AudioNodeInspector: auto-generate UI controls from schema - VariationGenerator: derive ranges/limits automatically - Validation: validateParams() catches bad data on import/paste - Sound Palette: self-describing serialized entries Schema field types: 'float'   → slider (min/max/step) 'int'     → integer slider or number input 'enum'    → dropdown (options array) 'bool'    → toggle 'string'  → text input 'array'   → special handling per context",
    "exports": [
      {
        "name": "getSchema",
        "kind": "function",
        "signature": "getSchema(type)",
        "summary": "Get a schema by type name."
      },
      {
        "name": "getSchemaNames",
        "kind": "function",
        "signature": "getSchemaNames()",
        "summary": "Get all schema names."
      },
      {
        "name": "validateParams",
        "kind": "function",
        "signature": "validateParams(params, schema)",
        "summary": "Validate a params object against a schema. Returns { valid, errors, sanitized }. - sanitized: a clean copy with missing keys filled from defaults and out-of-range values clamped. - errors: array of { key, message } for any issues found."
      },
      {
        "name": "defaultsFromSchema",
        "kind": "function",
        "signature": "defaultsFromSchema(schema)",
        "summary": "Create default params from a schema."
      },
      {
        "name": "variationRangesFromSchema",
        "kind": "function",
        "signature": "variationRangesFromSchema(schema, proportion = 0.1)",
        "summary": "Extract variation ranges from a schema (for VariationGenerator). Returns { ranges, limits } where: ranges[key] = (max - min) * proportion limits[key] = [min, max]"
      },
      {
        "name": "getParamGroups",
        "kind": "function",
        "signature": "getParamGroups(schema)",
        "summary": "Get parameter groups from a schema (for UI grouping)."
      },
      {
        "name": "SFX_SCHEMA",
        "kind": "constant",
        "signature": "SFX_SCHEMA",
        "summary": ""
      },
      {
        "name": "FM_SCHEMA",
        "kind": "constant",
        "signature": "FM_SCHEMA",
        "summary": ""
      },
      {
        "name": "KARPLUS_SCHEMA",
        "kind": "constant",
        "signature": "KARPLUS_SCHEMA",
        "summary": ""
      },
      {
        "name": "GRANULAR_SCHEMA",
        "kind": "constant",
        "signature": "GRANULAR_SCHEMA",
        "summary": ""
      },
      {
        "name": "OSCILLATOR_SCHEMA",
        "kind": "constant",
        "signature": "OSCILLATOR_SCHEMA",
        "summary": ""
      },
      {
        "name": "NOISE_SCHEMA",
        "kind": "constant",
        "signature": "NOISE_SCHEMA",
        "summary": ""
      },
      {
        "name": "IMPULSE_SCHEMA",
        "kind": "constant",
        "signature": "IMPULSE_SCHEMA",
        "summary": ""
      },
      {
        "name": "MODAL_SCHEMA",
        "kind": "constant",
        "signature": "MODAL_SCHEMA",
        "summary": ""
      },
      {
        "name": "WAVEGUIDE_SCHEMA",
        "kind": "constant",
        "signature": "WAVEGUIDE_SCHEMA",
        "summary": ""
      },
      {
        "name": "SAMPLE_SCHEMA",
        "kind": "constant",
        "signature": "SAMPLE_SCHEMA",
        "summary": ""
      },
      {
        "name": "FORMANT_SCHEMA",
        "kind": "constant",
        "signature": "FORMANT_SCHEMA",
        "summary": ""
      },
      {
        "name": "BLEND_SCHEMA",
        "kind": "constant",
        "signature": "BLEND_SCHEMA",
        "summary": ""
      },
      {
        "name": "BLEND_LAYER_SCHEMA",
        "kind": "constant",
        "signature": "BLEND_LAYER_SCHEMA",
        "summary": ""
      },
      {
        "name": "SOUND_SCHEMAS",
        "kind": "constant",
        "signature": "SOUND_SCHEMAS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/SynthManager",
    "path": "engine/reference/audio/synth/SynthManager.md",
    "source": "engine/audio/synth/SynthManager.js",
    "import": "/engine/audio/synth/SynthManager.js",
    "sourceHash": "10574ebe84a1e8ab5f6681470aa3acb8b276b0bd170460e8a698e864c0c0d872",
    "summary": "SynthManager.js - Main-Thread Synthesis Orchestrator Manages AudioWorklet registration, patch instance lifecycle, parameter updates via MessagePort and SharedArrayBuffer.",
    "exports": [
      {
        "name": "createSynthManager",
        "kind": "function",
        "signature": "createSynthManager(context, destination)",
        "summary": "Create a synth manager."
      },
      {
        "name": "initSynthManager",
        "kind": "function",
        "signature": "async initSynthManager(manager, workletUrl)",
        "summary": "Initialize the synth manager — register the AudioWorklet."
      },
      {
        "name": "registerPatch",
        "kind": "function",
        "signature": "registerPatch(manager, patchJson)",
        "summary": "Register a patch in the library (compile and cache)."
      },
      {
        "name": "getPatch",
        "kind": "function",
        "signature": "getPatch(manager, patchId)",
        "summary": "Get a compiled patch plan."
      },
      {
        "name": "createPatchInstance",
        "kind": "function",
        "signature": "createPatchInstance(manager, patchId, options = {})",
        "summary": "Create and start a patch instance (a playing synth voice)."
      },
      {
        "name": "setInstanceParam",
        "kind": "function",
        "signature": "setInstanceParam(manager, instanceId, paramName, value)",
        "summary": "Set an exposed parameter on a running instance."
      },
      {
        "name": "setInstanceVolume",
        "kind": "function",
        "signature": "setInstanceVolume(manager, instanceId, volume)",
        "summary": "Set volume on a running instance."
      },
      {
        "name": "destroyPatchInstance",
        "kind": "function",
        "signature": "destroyPatchInstance(manager, instanceId, fadeOut = 0.05)",
        "summary": "Stop and destroy a patch instance."
      },
      {
        "name": "destroyAllInstances",
        "kind": "function",
        "signature": "destroyAllInstances(manager)",
        "summary": "Stop all instances."
      },
      {
        "name": "destroySynthManager",
        "kind": "function",
        "signature": "destroySynthManager(manager)",
        "summary": "Destroy the synth manager."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/VariationGenerator",
    "path": "engine/reference/audio/synth/VariationGenerator.md",
    "source": "engine/audio/synth/VariationGenerator.js",
    "import": "/engine/audio/synth/VariationGenerator.js",
    "sourceHash": "f3de018051ff20daaadcb62b160bc1ef0bbe8620a942ec45f3e3354b6a74247a",
    "summary": "VariationGenerator.js — Automatic Sound Variation System Takes any parametric sound definition and generates N unique variations by randomizing parameters within user-defined ranges. Works with: - SfxGenerator params - FM synthesis configs - Karplus-Strong configs - Any flat parameter object Also provides batch rendering to AudioBuffer arrays and a sound palette system for saving/loading favorites. Usage: import { createVariationConfig, generateVariations, renderVariationBatch } from './VariationGenerator.js'; const vc = createVariationConfig(baseParams, { startFrequency: 0.1, decayTime: 0.05 }); const variations = generateVariations(vc, 20); const buffers = await renderVariationBatch(ctx, variations, renderFn);",
    "exports": [
      {
        "name": "createVariationConfig",
        "kind": "function",
        "signature": "createVariationConfig(baseParams, ranges = {}, options = {})",
        "summary": "Create a variation configuration."
      },
      {
        "name": "createVariationConfigFromSchema",
        "kind": "function",
        "signature": "createVariationConfigFromSchema(baseParams, schema, proportion = 0.1, options = {})",
        "summary": "Create a variation config from a SoundSchema. Auto-derives ranges and limits from the schema definition."
      },
      {
        "name": "lockParam",
        "kind": "function",
        "signature": "lockParam(vc, key)",
        "summary": "Lock a parameter so it won't be varied."
      },
      {
        "name": "unlockParam",
        "kind": "function",
        "signature": "unlockParam(vc, key)",
        "summary": "Unlock a parameter for variation."
      },
      {
        "name": "setRange",
        "kind": "function",
        "signature": "setRange(vc, key, range)",
        "summary": "Set the random range for a specific parameter."
      },
      {
        "name": "setLimits",
        "kind": "function",
        "signature": "setLimits(vc, key, min, max)",
        "summary": "Set per-key min/max limits."
      },
      {
        "name": "generateVariations",
        "kind": "function",
        "signature": "generateVariations(vc, count = 10)",
        "summary": "Generate N parameter variations from a variation config."
      },
      {
        "name": "generateOneVariation",
        "kind": "function",
        "signature": "generateOneVariation(vc)",
        "summary": "Generate a single variation."
      },
      {
        "name": "renderVariationBatch",
        "kind": "function",
        "signature": "renderVariationBatch(ctx, paramsList, renderFn)",
        "summary": "Render an array of parameter variations to AudioBuffers."
      },
      {
        "name": "renderVariationBatchAsync",
        "kind": "function",
        "signature": "async renderVariationBatchAsync(ctx, paramsList, renderFn, onProgress = null)",
        "summary": "Render variations async (yields between each to avoid blocking)."
      },
      {
        "name": "readSoundPaletteRecord",
        "kind": "function",
        "signature": "readSoundPaletteRecord(storage = globalThis.localStorage)",
        "summary": ""
      },
      {
        "name": "writeSoundPaletteRecord",
        "kind": "function",
        "signature": "writeSoundPaletteRecord(palette, storage = globalThis.localStorage)",
        "summary": ""
      },
      {
        "name": "createSoundPalette",
        "kind": "function",
        "signature": "createSoundPalette()",
        "summary": "Create a sound palette for organizing favorite sounds."
      },
      {
        "name": "addToPalette",
        "kind": "function",
        "signature": "addToPalette(palette, entry)",
        "summary": "Add a sound to the palette."
      },
      {
        "name": "removeFromPalette",
        "kind": "function",
        "signature": "removeFromPalette(palette, id)",
        "summary": "Remove a sound from the palette."
      },
      {
        "name": "searchPalette",
        "kind": "function",
        "signature": "searchPalette(palette, query = {})",
        "summary": "Find sounds in the palette by category or tag."
      },
      {
        "name": "savePalette",
        "kind": "function",
        "signature": "savePalette(palette, storage = globalThis.localStorage)",
        "summary": "Save palette to localStorage."
      },
      {
        "name": "loadPalette",
        "kind": "function",
        "signature": "loadPalette(storage = globalThis.localStorage)",
        "summary": "Load palette from localStorage."
      },
      {
        "name": "exportPalette",
        "kind": "function",
        "signature": "exportPalette(palette)",
        "summary": "Export palette as JSON string (for sharing/backup)."
      },
      {
        "name": "importPalette",
        "kind": "function",
        "signature": "importPalette(json)",
        "summary": "Import palette from JSON string."
      },
      {
        "name": "SOUND_PALETTE_SCHEMA",
        "kind": "constant",
        "signature": "SOUND_PALETTE_SCHEMA",
        "summary": ""
      },
      {
        "name": "SOUND_PALETTE_SCHEMA_VERSION",
        "kind": "constant",
        "signature": "SOUND_PALETTE_SCHEMA_VERSION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/WebAudioNodeFactory",
    "path": "engine/reference/audio/synth/WebAudioNodeFactory.md",
    "source": "engine/audio/synth/WebAudioNodeFactory.js",
    "import": "/engine/audio/synth/WebAudioNodeFactory.js",
    "sourceHash": "f4cbaa8d9c30bd5838947b6b56b5da0565a0de1599658b0958d54cdb38b86dcc",
    "summary": "WebAudioNodeFactory.js — Unified Web Audio Node Factory Central factory for creating main-thread Web Audio nodes from patch graph node definitions. Delegates to modular node files where possible. Used by AudioEditorPanel.js for preview playback. Usage: import { createWebAudioNode, buildVoice } from './WebAudioNodeFactory.js'; const node = createWebAudioNode(ctx, { type: 'Waveguide', params: {...} }, pitchRatio); const voice = buildVoice(ctx, patchJSON, pitchRatio);",
    "exports": [
      {
        "name": "normalizeWaveShape",
        "kind": "function",
        "signature": "normalizeWaveShape(shape)",
        "summary": "Normalize oscillator wave shape names to Web Audio API values."
      },
      {
        "name": "buildVoice",
        "kind": "function",
        "signature": "buildVoice(ctx, patch, pitchRatio = 1.0)",
        "summary": "Build a complete voice from a patch graph, scaling frequencies by pitchRatio."
      },
      {
        "name": "createWebAudioNode",
        "kind": "function",
        "signature": "createWebAudioNode(ctx, node, pitchRatio = 1.0)",
        "summary": "Create a Web Audio node (or subgraph) for a given patch graph node definition. Returns { output, input, inputMap?, sources } or null."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/index",
    "path": "engine/reference/audio/synth/index.md",
    "source": "engine/audio/synth/index.js",
    "import": "/engine/audio/synth/index.js",
    "sourceHash": "b9f9d411d729e1b13fecc3b07ae68c364874ea1aee333ded63bf2559521d4de0",
    "summary": "engine/audio/synth/index.js — Barrel export for procedural synthesis engine.",
    "exports": [
      {
        "name": "AMBIENT_PATCHES",
        "kind": "re-export",
        "signature": "AMBIENT_PATCHES",
        "summary": ""
      },
      {
        "name": "BLEND_LAYER_SCHEMA",
        "kind": "re-export",
        "signature": "BLEND_LAYER_SCHEMA",
        "summary": ""
      },
      {
        "name": "BLEND_SCHEMA",
        "kind": "re-export",
        "signature": "BLEND_SCHEMA",
        "summary": ""
      },
      {
        "name": "FM_PRESETS",
        "kind": "re-export",
        "signature": "FM_PRESETS",
        "summary": ""
      },
      {
        "name": "FM_SCHEMA",
        "kind": "re-export",
        "signature": "FM_SCHEMA",
        "summary": ""
      },
      {
        "name": "FORMANT_PRESETS",
        "kind": "re-export",
        "signature": "FORMANT_PRESETS",
        "summary": ""
      },
      {
        "name": "FORMANT_SCHEMA",
        "kind": "re-export",
        "signature": "FORMANT_SCHEMA",
        "summary": ""
      },
      {
        "name": "GRANULAR_SCHEMA",
        "kind": "re-export",
        "signature": "GRANULAR_SCHEMA",
        "summary": ""
      },
      {
        "name": "IMPACT_PATCHES",
        "kind": "re-export",
        "signature": "IMPACT_PATCHES",
        "summary": ""
      },
      {
        "name": "KARPLUS_SCHEMA",
        "kind": "re-export",
        "signature": "KARPLUS_SCHEMA",
        "summary": ""
      },
      {
        "name": "MATERIAL_OPTIONS",
        "kind": "re-export",
        "signature": "MATERIAL_OPTIONS",
        "summary": ""
      },
      {
        "name": "MODAL_MATERIALS",
        "kind": "re-export",
        "signature": "MODAL_MATERIALS",
        "summary": ""
      },
      {
        "name": "NOISE_COLOR_OPTIONS",
        "kind": "re-export",
        "signature": "NOISE_COLOR_OPTIONS",
        "summary": ""
      },
      {
        "name": "SFX_SCHEMA",
        "kind": "re-export",
        "signature": "SFX_SCHEMA",
        "summary": ""
      },
      {
        "name": "SOUND_SCHEMAS",
        "kind": "re-export",
        "signature": "SOUND_SCHEMAS",
        "summary": ""
      },
      {
        "name": "WAVEGUIDE_MODE_OPTIONS",
        "kind": "re-export",
        "signature": "WAVEGUIDE_MODE_OPTIONS",
        "summary": ""
      },
      {
        "name": "WAVEGUIDE_TERMINATIONS",
        "kind": "re-export",
        "signature": "WAVEGUIDE_TERMINATIONS",
        "summary": ""
      },
      {
        "name": "addLayer",
        "kind": "re-export",
        "signature": "addLayer",
        "summary": ""
      },
      {
        "name": "addToPalette",
        "kind": "re-export",
        "signature": "addToPalette",
        "summary": ""
      },
      {
        "name": "ambient_combustion",
        "kind": "re-export",
        "signature": "ambient_combustion",
        "summary": ""
      },
      {
        "name": "ambient_electric",
        "kind": "re-export",
        "signature": "ambient_electric",
        "summary": ""
      },
      {
        "name": "ambient_fluid",
        "kind": "re-export",
        "signature": "ambient_fluid",
        "summary": ""
      },
      {
        "name": "ambient_wind",
        "kind": "re-export",
        "signature": "ambient_wind",
        "summary": ""
      },
      {
        "name": "buildVoice",
        "kind": "re-export",
        "signature": "buildVoice",
        "summary": ""
      },
      {
        "name": "calculateModeAmplitudes",
        "kind": "re-export",
        "signature": "calculateModeAmplitudes",
        "summary": ""
      },
      {
        "name": "calculateModeDecays",
        "kind": "re-export",
        "signature": "calculateModeDecays",
        "summary": ""
      },
      {
        "name": "calculateModeFrequencies",
        "kind": "re-export",
        "signature": "calculateModeFrequencies",
        "summary": ""
      },
      {
        "name": "compilePatch",
        "kind": "re-export",
        "signature": "compilePatch",
        "summary": ""
      },
      {
        "name": "connectGranular",
        "kind": "re-export",
        "signature": "connectGranular",
        "summary": ""
      },
      {
        "name": "createBlendPreset",
        "kind": "re-export",
        "signature": "createBlendPreset",
        "summary": ""
      },
      {
        "name": "createFMPatch",
        "kind": "re-export",
        "signature": "createFMPatch",
        "summary": ""
      },
      {
        "name": "createFormantFilter",
        "kind": "re-export",
        "signature": "createFormantFilter",
        "summary": ""
      },
      {
        "name": "createFormantPatch",
        "kind": "re-export",
        "signature": "createFormantPatch",
        "summary": ""
      },
      {
        "name": "createGranularEngine",
        "kind": "re-export",
        "signature": "createGranularEngine",
        "summary": ""
      },
      {
        "name": "createGranularPatch",
        "kind": "re-export",
        "signature": "createGranularPatch",
        "summary": ""
      },
      {
        "name": "createKarplusStrongPatch",
        "kind": "re-export",
        "signature": "createKarplusStrongPatch",
        "summary": ""
      },
      {
        "name": "createModalBank",
        "kind": "re-export",
        "signature": "createModalBank",
        "summary": ""
      },
      {
        "name": "createNoiseBuffer",
        "kind": "re-export",
        "signature": "createNoiseBuffer",
        "summary": ""
      },
      {
        "name": "createNoiseSource",
        "kind": "re-export",
        "signature": "createNoiseSource",
        "summary": ""
      },
      {
        "name": "createPatchInstance",
        "kind": "re-export",
        "signature": "createPatchInstance",
        "summary": ""
      },
      {
        "name": "createSfxParams",
        "kind": "re-export",
        "signature": "createSfxParams",
        "summary": ""
      },
      {
        "name": "createSoundPalette",
        "kind": "re-export",
        "signature": "createSoundPalette",
        "summary": ""
      },
      {
        "name": "createStereoNoiseSource",
        "kind": "re-export",
        "signature": "createStereoNoiseSource",
        "summary": ""
      },
      {
        "name": "createSynthManager",
        "kind": "re-export",
        "signature": "createSynthManager",
        "summary": ""
      },
      {
        "name": "createVariationConfig",
        "kind": "re-export",
        "signature": "createVariationConfig",
        "summary": ""
      },
      {
        "name": "createVariationConfigFromSchema",
        "kind": "re-export",
        "signature": "createVariationConfigFromSchema",
        "summary": ""
      },
      {
        "name": "createWaveguide",
        "kind": "re-export",
        "signature": "createWaveguide",
        "summary": ""
      },
      {
        "name": "createWebAudioNode",
        "kind": "re-export",
        "signature": "createWebAudioNode",
        "summary": ""
      },
      {
        "name": "decodeSfxParams",
        "kind": "re-export",
        "signature": "decodeSfxParams",
        "summary": ""
      },
      {
        "name": "defaultsFromSchema",
        "kind": "re-export",
        "signature": "defaultsFromSchema",
        "summary": ""
      },
      {
        "name": "destroyAllInstances",
        "kind": "re-export",
        "signature": "destroyAllInstances",
        "summary": ""
      },
      {
        "name": "destroyFormantFilter",
        "kind": "re-export",
        "signature": "destroyFormantFilter",
        "summary": ""
      },
      {
        "name": "destroyGranular",
        "kind": "re-export",
        "signature": "destroyGranular",
        "summary": ""
      },
      {
        "name": "destroyPatchInstance",
        "kind": "re-export",
        "signature": "destroyPatchInstance",
        "summary": ""
      },
      {
        "name": "destroySynthManager",
        "kind": "re-export",
        "signature": "destroySynthManager",
        "summary": ""
      },
      {
        "name": "encodeSfxParams",
        "kind": "re-export",
        "signature": "encodeSfxParams",
        "summary": ""
      },
      {
        "name": "exportPalette",
        "kind": "re-export",
        "signature": "exportPalette",
        "summary": ""
      },
      {
        "name": "generateBlendVariations",
        "kind": "re-export",
        "signature": "generateBlendVariations",
        "summary": ""
      },
      {
        "name": "generateOneVariation",
        "kind": "re-export",
        "signature": "generateOneVariation",
        "summary": ""
      },
      {
        "name": "generateVariations",
        "kind": "re-export",
        "signature": "generateVariations",
        "summary": ""
      },
      {
        "name": "getAmbientPatch",
        "kind": "re-export",
        "signature": "getAmbientPatch",
        "summary": ""
      },
      {
        "name": "getFMPresetNames",
        "kind": "re-export",
        "signature": "getFMPresetNames",
        "summary": ""
      },
      {
        "name": "getFormantPresetNames",
        "kind": "re-export",
        "signature": "getFormantPresetNames",
        "summary": ""
      },
      {
        "name": "getImpactPatch",
        "kind": "re-export",
        "signature": "getImpactPatch",
        "summary": ""
      },
      {
        "name": "getNodeTypes",
        "kind": "re-export",
        "signature": "getNodeTypes",
        "summary": ""
      },
      {
        "name": "getParamGroups",
        "kind": "re-export",
        "signature": "getParamGroups",
        "summary": ""
      },
      {
        "name": "getPatch",
        "kind": "re-export",
        "signature": "getPatch",
        "summary": ""
      },
      {
        "name": "getPresetNames",
        "kind": "re-export",
        "signature": "getPresetNames",
        "summary": ""
      },
      {
        "name": "getSchema",
        "kind": "re-export",
        "signature": "getSchema",
        "summary": ""
      },
      {
        "name": "getSchemaNames",
        "kind": "re-export",
        "signature": "getSchemaNames",
        "summary": ""
      },
      {
        "name": "impact_combustion",
        "kind": "re-export",
        "signature": "impact_combustion",
        "summary": ""
      },
      {
        "name": "impact_crackle",
        "kind": "re-export",
        "signature": "impact_crackle",
        "summary": ""
      },
      {
        "name": "impact_drop",
        "kind": "re-export",
        "signature": "impact_drop",
        "summary": ""
      },
      {
        "name": "impact_electric",
        "kind": "re-export",
        "signature": "impact_electric",
        "summary": ""
      },
      {
        "name": "impact_fluid",
        "kind": "re-export",
        "signature": "impact_fluid",
        "summary": ""
      },
      {
        "name": "impact_glass",
        "kind": "re-export",
        "signature": "impact_glass",
        "summary": ""
      },
      {
        "name": "impact_hiss",
        "kind": "re-export",
        "signature": "impact_hiss",
        "summary": ""
      },
      {
        "name": "impact_ice",
        "kind": "re-export",
        "signature": "impact_ice",
        "summary": ""
      },
      {
        "name": "impact_metal",
        "kind": "re-export",
        "signature": "impact_metal",
        "summary": ""
      },
      {
        "name": "impact_sand",
        "kind": "re-export",
        "signature": "impact_sand",
        "summary": ""
      },
      {
        "name": "impact_stone",
        "kind": "re-export",
        "signature": "impact_stone",
        "summary": ""
      },
      {
        "name": "impact_wood",
        "kind": "re-export",
        "signature": "impact_wood",
        "summary": ""
      },
      {
        "name": "importPalette",
        "kind": "re-export",
        "signature": "importPalette",
        "summary": ""
      },
      {
        "name": "initSynthManager",
        "kind": "re-export",
        "signature": "initSynthManager",
        "summary": ""
      },
      {
        "name": "loadPalette",
        "kind": "re-export",
        "signature": "loadPalette",
        "summary": ""
      },
      {
        "name": "lockParam",
        "kind": "re-export",
        "signature": "lockParam",
        "summary": ""
      },
      {
        "name": "morphFormants",
        "kind": "re-export",
        "signature": "morphFormants",
        "summary": ""
      },
      {
        "name": "mutateSfx",
        "kind": "re-export",
        "signature": "mutateSfx",
        "summary": ""
      },
      {
        "name": "normalizeWaveShape",
        "kind": "re-export",
        "signature": "normalizeWaveShape",
        "summary": ""
      },
      {
        "name": "playBlend",
        "kind": "re-export",
        "signature": "playBlend",
        "summary": ""
      },
      {
        "name": "playFM",
        "kind": "re-export",
        "signature": "playFM",
        "summary": ""
      },
      {
        "name": "playKarplusStrong",
        "kind": "re-export",
        "signature": "playKarplusStrong",
        "summary": ""
      },
      {
        "name": "playSfx",
        "kind": "re-export",
        "signature": "playSfx",
        "summary": ""
      },
      {
        "name": "randomizeFull",
        "kind": "re-export",
        "signature": "randomizeFull",
        "summary": ""
      },
      {
        "name": "randomizePreset",
        "kind": "re-export",
        "signature": "randomizePreset",
        "summary": ""
      },
      {
        "name": "registerNodeType",
        "kind": "re-export",
        "signature": "registerNodeType",
        "summary": ""
      },
      {
        "name": "registerPatch",
        "kind": "re-export",
        "signature": "registerPatch",
        "summary": ""
      },
      {
        "name": "removeFromPalette",
        "kind": "re-export",
        "signature": "removeFromPalette",
        "summary": ""
      },
      {
        "name": "removeLayer",
        "kind": "re-export",
        "signature": "removeLayer",
        "summary": ""
      },
      {
        "name": "renderAndPlay",
        "kind": "re-export",
        "signature": "renderAndPlay",
        "summary": ""
      },
      {
        "name": "renderBlend",
        "kind": "re-export",
        "signature": "renderBlend",
        "summary": ""
      },
      {
        "name": "renderFM",
        "kind": "re-export",
        "signature": "renderFM",
        "summary": ""
      },
      {
        "name": "renderFM4",
        "kind": "re-export",
        "signature": "renderFM4",
        "summary": ""
      },
      {
        "name": "renderKarplusStrong",
        "kind": "re-export",
        "signature": "renderKarplusStrong",
        "summary": ""
      },
      {
        "name": "renderSfx",
        "kind": "re-export",
        "signature": "renderSfx",
        "summary": ""
      },
      {
        "name": "renderVariationBatch",
        "kind": "re-export",
        "signature": "renderVariationBatch",
        "summary": ""
      },
      {
        "name": "renderVariationBatchAsync",
        "kind": "re-export",
        "signature": "renderVariationBatchAsync",
        "summary": ""
      },
      {
        "name": "renderWaveguide",
        "kind": "re-export",
        "signature": "renderWaveguide",
        "summary": ""
      },
      {
        "name": "savePalette",
        "kind": "re-export",
        "signature": "savePalette",
        "summary": ""
      },
      {
        "name": "searchPalette",
        "kind": "re-export",
        "signature": "searchPalette",
        "summary": ""
      },
      {
        "name": "setFormantFrequencies",
        "kind": "re-export",
        "signature": "setFormantFrequencies",
        "summary": ""
      },
      {
        "name": "setFormantMorphTime",
        "kind": "re-export",
        "signature": "setFormantMorphTime",
        "summary": ""
      },
      {
        "name": "setFormantVowel",
        "kind": "re-export",
        "signature": "setFormantVowel",
        "summary": ""
      },
      {
        "name": "setGranularBuffer",
        "kind": "re-export",
        "signature": "setGranularBuffer",
        "summary": ""
      },
      {
        "name": "setGranularParam",
        "kind": "re-export",
        "signature": "setGranularParam",
        "summary": ""
      },
      {
        "name": "setInstanceParam",
        "kind": "re-export",
        "signature": "setInstanceParam",
        "summary": ""
      },
      {
        "name": "setInstanceVolume",
        "kind": "re-export",
        "signature": "setInstanceVolume",
        "summary": ""
      },
      {
        "name": "setLimits",
        "kind": "re-export",
        "signature": "setLimits",
        "summary": ""
      },
      {
        "name": "setRange",
        "kind": "re-export",
        "signature": "setRange",
        "summary": ""
      },
      {
        "name": "startGranular",
        "kind": "re-export",
        "signature": "startGranular",
        "summary": ""
      },
      {
        "name": "stopGranular",
        "kind": "re-export",
        "signature": "stopGranular",
        "summary": ""
      },
      {
        "name": "unlockParam",
        "kind": "re-export",
        "signature": "unlockParam",
        "summary": ""
      },
      {
        "name": "validateParams",
        "kind": "re-export",
        "signature": "validateParams",
        "summary": ""
      },
      {
        "name": "validatePatch",
        "kind": "re-export",
        "signature": "validatePatch",
        "summary": ""
      },
      {
        "name": "variationRangesFromSchema",
        "kind": "re-export",
        "signature": "variationRangesFromSchema",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/FMOperatorNode",
    "path": "engine/reference/audio/synth/nodes/FMOperatorNode.md",
    "source": "engine/audio/synth/nodes/FMOperatorNode.js",
    "import": "/engine/audio/synth/nodes/FMOperatorNode.js",
    "sourceHash": "5e02cc4384db8f9912f47c09ff49a2118b651d2933c1f004e06b4fa9dc3e3380",
    "summary": "FMOperatorNode.js — FM Synthesis Engine Frequency Modulation synthesis: one oscillator (modulator) modulates the frequency of another (carrier), producing complex harmonic and inharmonic timbres from simple parameters. Supports up to 4 operators in series/parallel configurations. Each operator has: frequency ratio, detune, envelope, feedback. Usage: import { renderFM, playFM, createFMPatch } from './FMOperatorNode.js'; const buffer = renderFM(audioCtx, { carrierFreq: 440, modRatio: 2, modDepth: 200 });",
    "exports": [
      {
        "name": "renderFM",
        "kind": "function",
        "signature": "renderFM(ctx, config = {})",
        "summary": "Render 2-operator FM synthesis to an AudioBuffer."
      },
      {
        "name": "renderFM4",
        "kind": "function",
        "signature": "renderFM4(ctx, config = {})",
        "summary": "Render a 4-operator FM stack. Operators are chained: op4 → op3 → op2 → op1 (carrier)."
      },
      {
        "name": "playFM",
        "kind": "function",
        "signature": "playFM(ctx, config = {}, destination = null)",
        "summary": "Play FM synthesis directly."
      },
      {
        "name": "getFMPresetNames",
        "kind": "function",
        "signature": "getFMPresetNames()",
        "summary": "Get list of FM preset names."
      },
      {
        "name": "createFMPatch",
        "kind": "function",
        "signature": "createFMPatch(config = {})",
        "summary": ""
      },
      {
        "name": "FM_PRESETS",
        "kind": "constant",
        "signature": "FM_PRESETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/FormantFilterNode",
    "path": "engine/reference/audio/synth/nodes/FormantFilterNode.md",
    "source": "engine/audio/synth/nodes/FormantFilterNode.js",
    "import": "/engine/audio/synth/nodes/FormantFilterNode.js",
    "sourceHash": "4d7a1cf0c9bb2b2fac4618e2e03f88c06cc9cd66174de74ca7b0e2288af86cd3",
    "summary": "FormantFilterNode.js — Formant Filter for Vocal/Creature Sounds Parallel bank of bandpass filters tuned to vocal formant frequencies. Shapes any input signal into vowel-like resonances. Useful for: - Creature vocalizations - Vocal pads and textures - Talking/singing synthesis - Resonant environmental effects Includes presets for standard vowels (A, E, I, O, U) and creature sounds. Usage: import { createFormantFilter, setFormantVowel, destroyFormantFilter } from './FormantFilterNode.js'; const filter = createFormantFilter(audioCtx); sourceNode.connect(filter.input); filter.output.connect(audioCtx.destination); setFormantVowel(filter, 'A');",
    "exports": [
      {
        "name": "createFormantFilter",
        "kind": "function",
        "signature": "createFormantFilter(ctx, config = {})",
        "summary": "Create a formant filter bank."
      },
      {
        "name": "setFormantVowel",
        "kind": "function",
        "signature": "setFormantVowel(instance, vowelName)",
        "summary": "Set the formant filter to a vowel preset."
      },
      {
        "name": "setFormantFrequencies",
        "kind": "function",
        "signature": "setFormantFrequencies(instance, frequencies, bandwidths, gains)",
        "summary": "Set formant frequencies directly (bypass presets)."
      },
      {
        "name": "morphFormants",
        "kind": "function",
        "signature": "morphFormants(instance, vowelA, vowelB, blend)",
        "summary": "Morph between two vowel presets."
      },
      {
        "name": "setFormantMorphTime",
        "kind": "function",
        "signature": "setFormantMorphTime(instance, seconds)",
        "summary": "Set morph time (transition speed)."
      },
      {
        "name": "destroyFormantFilter",
        "kind": "function",
        "signature": "destroyFormantFilter(instance)",
        "summary": "Destroy the formant filter and release resources."
      },
      {
        "name": "getFormantPresetNames",
        "kind": "function",
        "signature": "getFormantPresetNames()",
        "summary": "Get list of available formant preset names."
      },
      {
        "name": "createFormantPatch",
        "kind": "function",
        "signature": "createFormantPatch(config = {})",
        "summary": ""
      },
      {
        "name": "FORMANT_PRESETS",
        "kind": "constant",
        "signature": "FORMANT_PRESETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/GranularNode",
    "path": "engine/reference/audio/synth/nodes/GranularNode.md",
    "source": "engine/audio/synth/nodes/GranularNode.js",
    "import": "/engine/audio/synth/nodes/GranularNode.js",
    "sourceHash": "7b036e675901f13c4bd96456012328da4861acdb7490fcb9e03113fcc6b35c82",
    "summary": "Create a granular synthesis engine.",
    "exports": [
      {
        "name": "createGranularEngine",
        "kind": "function",
        "signature": "createGranularEngine(ctx, buffer, config = {})",
        "summary": "Create a granular synthesis engine."
      },
      {
        "name": "startGranular",
        "kind": "function",
        "signature": "startGranular(engine)",
        "summary": "Start the granular engine — begins spawning grains."
      },
      {
        "name": "stopGranular",
        "kind": "function",
        "signature": "stopGranular(engine, fadeTime = 0.1)",
        "summary": "Stop the granular engine."
      },
      {
        "name": "setGranularParam",
        "kind": "function",
        "signature": "setGranularParam(engine, key, value)",
        "summary": "Set a granular parameter."
      },
      {
        "name": "setGranularBuffer",
        "kind": "function",
        "signature": "setGranularBuffer(engine, buffer)",
        "summary": "Replace the source buffer."
      },
      {
        "name": "connectGranular",
        "kind": "function",
        "signature": "connectGranular(engine, destination)",
        "summary": "Connect granular output to a destination."
      },
      {
        "name": "destroyGranular",
        "kind": "function",
        "signature": "destroyGranular(engine)",
        "summary": "Destroy and clean up."
      },
      {
        "name": "createGranularPatch",
        "kind": "function",
        "signature": "createGranularPatch(config = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/ImpulseNode",
    "path": "engine/reference/audio/synth/nodes/ImpulseNode.md",
    "source": "engine/audio/synth/nodes/ImpulseNode.js",
    "import": "/engine/audio/synth/nodes/ImpulseNode.js",
    "sourceHash": "40892fc4f69c88cfb764c0c7ba832e5d887d38d5ad00167e3fb486e33e58639b",
    "summary": "Create a real-time impulse generator engine.",
    "exports": [
      {
        "name": "createImpulseEngine",
        "kind": "function",
        "signature": "createImpulseEngine(ctx, config = {})",
        "summary": "Create a real-time impulse generator engine."
      },
      {
        "name": "generateImpulseBuffer",
        "kind": "function",
        "signature": "generateImpulseBuffer(ctx, config = {})",
        "summary": "Generate a single impulse as an AudioBuffer."
      },
      {
        "name": "isValidImpulseShape",
        "kind": "function",
        "signature": "isValidImpulseShape(shape)",
        "summary": ""
      },
      {
        "name": "IMPULSE_SHAPE_OPTIONS",
        "kind": "constant",
        "signature": "IMPULSE_SHAPE_OPTIONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/KarplusStrongNode",
    "path": "engine/reference/audio/synth/nodes/KarplusStrongNode.md",
    "source": "engine/audio/synth/nodes/KarplusStrongNode.js",
    "import": "/engine/audio/synth/nodes/KarplusStrongNode.js",
    "sourceHash": "75e2adbd6933e2cc1d6f3214a759be3aa5dd0ab975449c67edd016857d60cbd3",
    "summary": "Render a Karplus-Strong plucked string to an AudioBuffer.",
    "exports": [
      {
        "name": "renderKarplusStrong",
        "kind": "function",
        "signature": "renderKarplusStrong(ctx, config = {})",
        "summary": "Render a Karplus-Strong plucked string to an AudioBuffer."
      },
      {
        "name": "playKarplusStrong",
        "kind": "function",
        "signature": "playKarplusStrong(ctx, config = {}, destination = null)",
        "summary": "Play a Karplus-Strong sound directly."
      },
      {
        "name": "createKarplusStrongPatch",
        "kind": "function",
        "signature": "createKarplusStrongPatch(config = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/MidiInputNode",
    "path": "engine/reference/audio/synth/nodes/MidiInputNode.md",
    "source": "engine/audio/synth/nodes/MidiInputNode.js",
    "import": "/engine/audio/synth/nodes/MidiInputNode.js",
    "sourceHash": "91c2f10fe56bdfc7a619aa6b13369e6b5c9c0e60f601ac9f5d220d31a4473c63",
    "summary": "MidiInputNode.js — MIDI Input Integration Receives MIDI input from external controllers or DAW via Web MIDI API. Outputs gate, note, velocity, and CC signals for driving synth nodes. Usage: import { createMidiInput, requestMidiAccess } from './MidiInputNode.js'; await requestMidiAccess(); const midi = createMidiInput({ channel: 0 }); midi.onNoteOn = (note, velocity) => synth.noteOn(note, velocity);",
    "exports": [
      {
        "name": "requestMidiAccess",
        "kind": "function",
        "signature": "async requestMidiAccess()",
        "summary": "Request MIDI access from the browser."
      },
      {
        "name": "getMidiInputs",
        "kind": "function",
        "signature": "getMidiInputs()",
        "summary": "Get list of available MIDI inputs."
      },
      {
        "name": "createMidiInput",
        "kind": "function",
        "signature": "createMidiInput(config = {})",
        "summary": "Create a MIDI input node that processes incoming MIDI messages."
      },
      {
        "name": "createMidiCCMap",
        "kind": "function",
        "signature": "createMidiCCMap(config = {})",
        "summary": "Create a CC mapper that scales CC values to a target range."
      },
      {
        "name": "VELOCITY_CURVES",
        "kind": "constant",
        "signature": "VELOCITY_CURVES",
        "summary": ""
      },
      {
        "name": "CC_CURVES",
        "kind": "constant",
        "signature": "CC_CURVES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/ModalBankNode",
    "path": "engine/reference/audio/synth/nodes/ModalBankNode.md",
    "source": "engine/audio/synth/nodes/ModalBankNode.js",
    "import": "/engine/audio/synth/nodes/ModalBankNode.js",
    "sourceHash": "ea9697ad3c596e07a4ad0d2b9ec811471bcc9fe934acf53888735705e4f2e812",
    "summary": "ModalBankNode.js — Modal Synthesis Engine Physical modeling using parallel resonant filters (modes). Each mode has frequency, amplitude, and decay characteristics. Material presets auto-calculate modes based on: - Stiff string formula (metal, piano strings) - Beam formula (wood, glass bars) - Circular membrane formula (drums) - Rectangular plate formula (bells, gongs) Usage: import { createModalBank, MODAL_MATERIALS } from './ModalBankNode.js'; const bank = createModalBank(audioCtx, { material: 'metal', frequency: 440 }); bank.excite(impulseBuffer);",
    "exports": [
      {
        "name": "calculateModeFrequencies",
        "kind": "function",
        "signature": "calculateModeFrequencies(formula, f0, modeCount, inharmonicity = 0)",
        "summary": "Calculate modal frequencies based on material formula."
      },
      {
        "name": "calculateModeAmplitudes",
        "kind": "function",
        "signature": "calculateModeAmplitudes(modeCount, strikePosition, brightness = 0.5)",
        "summary": "Calculate mode amplitudes based on strike position."
      },
      {
        "name": "calculateModeDecays",
        "kind": "function",
        "signature": "calculateModeDecays(frequencies, baseDamping, highDamp, f0)",
        "summary": "Calculate mode decay times based on frequency and damping."
      },
      {
        "name": "createModalBank",
        "kind": "function",
        "signature": "createModalBank(ctx, config = {})",
        "summary": "Create a modal bank synthesis engine."
      },
      {
        "name": "isValidMaterial",
        "kind": "function",
        "signature": "isValidMaterial(material)",
        "summary": ""
      },
      {
        "name": "MODAL_MATERIALS",
        "kind": "constant",
        "signature": "MODAL_MATERIALS",
        "summary": ""
      },
      {
        "name": "MATERIAL_OPTIONS",
        "kind": "constant",
        "signature": "MATERIAL_OPTIONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/NoiseGeneratorNode",
    "path": "engine/reference/audio/synth/nodes/NoiseGeneratorNode.md",
    "source": "engine/audio/synth/nodes/NoiseGeneratorNode.js",
    "import": "/engine/audio/synth/nodes/NoiseGeneratorNode.js",
    "sourceHash": "4a7c396435c6585fbc151f9ac5bbdd8b46794a30c00ed6e5ea9289333372084f",
    "summary": "Create a noise AudioBuffer of the specified color.",
    "exports": [
      {
        "name": "createNoiseBuffer",
        "kind": "function",
        "signature": "createNoiseBuffer(ctx, color = 'white', duration = DEFAULT_DURATION, options = {})",
        "summary": "Create a noise AudioBuffer of the specified color."
      },
      {
        "name": "createNoiseSource",
        "kind": "function",
        "signature": "createNoiseSource(ctx, color = 'white', options = {})",
        "summary": "Create a looping noise source node."
      },
      {
        "name": "createStereoNoiseSource",
        "kind": "function",
        "signature": "createStereoNoiseSource(ctx, color = 'white', options = {})",
        "summary": "Create stereo noise with decorrelated channels."
      },
      {
        "name": "isValidNoiseColor",
        "kind": "function",
        "signature": "isValidNoiseColor(color)",
        "summary": ""
      },
      {
        "name": "NOISE_COLOR_OPTIONS",
        "kind": "constant",
        "signature": "NOISE_COLOR_OPTIONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/OscillatorNode",
    "path": "engine/reference/audio/synth/nodes/OscillatorNode.md",
    "source": "engine/audio/synth/nodes/OscillatorNode.js",
    "import": "/engine/audio/synth/nodes/OscillatorNode.js",
    "sourceHash": "f42e82e7f1e13d3be8b1bb292847360c3fa481b115208f54dce43489c78fc81c",
    "summary": "OscillatorNode.js — Advanced Oscillator Synthesis Supports multiple waveform types beyond Web Audio defaults: - sine, square, sawtooth, triangle (native) - pulse (variable duty cycle via PeriodicWave) - supersaw (multiple detuned sawtooths) - custom (user-defined wavetable) Additional features: - Sub-oscillator (-1 or -2 octaves) - Unison/supersaw with configurable voice count and spread - Pulse width modulation Usage: import { createOscillator, createSupersawOscillator } from './OscillatorNode.js'; const osc = createOscillator(audioCtx, { shape: 'pulse', frequency: 440, pulseWidth: 0.3 }); osc.output.connect(destination); osc.start();",
    "exports": [
      {
        "name": "createOscillator",
        "kind": "function",
        "signature": "createOscillator(ctx, config = {})",
        "summary": "Create an advanced oscillator node."
      },
      {
        "name": "isValidShape",
        "kind": "function",
        "signature": "isValidShape(shape)",
        "summary": ""
      },
      {
        "name": "WAVETABLE_PRESETS",
        "kind": "constant",
        "signature": "WAVETABLE_PRESETS",
        "summary": ""
      },
      {
        "name": "OSCILLATOR_SHAPES",
        "kind": "constant",
        "signature": "OSCILLATOR_SHAPES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/SamplePlayerNode",
    "path": "engine/reference/audio/synth/nodes/SamplePlayerNode.md",
    "source": "engine/audio/synth/nodes/SamplePlayerNode.js",
    "import": "/engine/audio/synth/nodes/SamplePlayerNode.js",
    "sourceHash": "0709ac24a85644f8eea02e3db6edff6fbaf2b78a8289e9354855d3f7125a27d0",
    "summary": "SamplePlayerNode.js — Advanced Sample Playback Enhanced sample player with: - Loop modes: forward, pingpong, reverse - Start/end points and loop regions - Crossfade looping for seamless loops - Built-in ADSR envelope - Pitch tracking from MIDI note Usage: import { createSamplePlayer } from './SamplePlayerNode.js'; const player = createSamplePlayer(audioCtx, buffer, { loop: true, loopMode: 'pingpong' }); player.trigger();",
    "exports": [
      {
        "name": "createSamplePlayer",
        "kind": "function",
        "signature": "createSamplePlayer(ctx, buffer, config = {})",
        "summary": "Create an advanced sample player."
      },
      {
        "name": "createCrossfadeLoopBuffer",
        "kind": "function",
        "signature": "createCrossfadeLoopBuffer(ctx, buffer, loopStart, loopEnd, crossfadeDuration)",
        "summary": "Create a crossfade loop buffer. Blends the end of the loop region back into the start for seamless looping."
      },
      {
        "name": "isValidLoopMode",
        "kind": "function",
        "signature": "isValidLoopMode(mode)",
        "summary": ""
      },
      {
        "name": "SAMPLE_LOOP_MODES",
        "kind": "constant",
        "signature": "SAMPLE_LOOP_MODES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/SequencerNode",
    "path": "engine/reference/audio/synth/nodes/SequencerNode.md",
    "source": "engine/audio/synth/nodes/SequencerNode.js",
    "import": "/engine/audio/synth/nodes/SequencerNode.js",
    "sourceHash": "9c5a2e489bb2bffc4cf1844e43d26943529cca91a27de2ac97bfcb031513fb20",
    "summary": "Create a master clock with BPM and time signature.",
    "exports": [
      {
        "name": "createClock",
        "kind": "function",
        "signature": "createClock(ctx, config = {})",
        "summary": "Create a master clock with BPM and time signature."
      },
      {
        "name": "createStepSequencer",
        "kind": "function",
        "signature": "createStepSequencer(ctx, config = {})",
        "summary": "Create a step sequencer."
      },
      {
        "name": "createArpeggiator",
        "kind": "function",
        "signature": "createArpeggiator(ctx, config = {})",
        "summary": "Create an arpeggiator."
      },
      {
        "name": "SEQUENCER_RATES",
        "kind": "constant",
        "signature": "SEQUENCER_RATES",
        "summary": ""
      },
      {
        "name": "ARPEGGIATOR_MODES",
        "kind": "constant",
        "signature": "ARPEGGIATOR_MODES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/SynthesisTypes",
    "path": "engine/reference/audio/synth/nodes/SynthesisTypes.md",
    "source": "engine/audio/synth/nodes/SynthesisTypes.js",
    "import": "/engine/audio/synth/nodes/SynthesisTypes.js",
    "sourceHash": "da05fecb8e320bfb6c1fcc4fff5fc24b32b8887a6efcc86c2877749ea862fe52",
    "summary": "SynthesisTypes.js — Additional Synthesis Methods Extended synthesis techniques: - Additive: Harmonic/partial-based synthesis - Wavetable: Morphing wavetable oscillator - PhaseDistortion: CZ-style phase distortion - Subtractive: Classic subtractive synth voice Usage: import { createAdditiveSynth, createWavetableSynth } from './SynthesisTypes.js'; const add = createAdditiveSynth(audioCtx, { partialCount: 32 });",
    "exports": [
      {
        "name": "createAdditiveSynth",
        "kind": "function",
        "signature": "createAdditiveSynth(ctx, config = {})",
        "summary": "Create an additive synthesizer."
      },
      {
        "name": "createWavetableSynth",
        "kind": "function",
        "signature": "createWavetableSynth(ctx, config = {})",
        "summary": "Create a wavetable synthesizer."
      },
      {
        "name": "createPhaseDistortionSynth",
        "kind": "function",
        "signature": "createPhaseDistortionSynth(ctx, config = {})",
        "summary": "Create a phase distortion synthesizer (CZ-style)."
      },
      {
        "name": "createSubtractiveSynth",
        "kind": "function",
        "signature": "createSubtractiveSynth(ctx, config = {})",
        "summary": "Create a classic subtractive synthesizer voice."
      },
      {
        "name": "WAVETABLE_NAMES",
        "kind": "constant",
        "signature": "WAVETABLE_NAMES",
        "summary": ""
      },
      {
        "name": "PD_SHAPE_OPTIONS",
        "kind": "constant",
        "signature": "PD_SHAPE_OPTIONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/WaveguideNode",
    "path": "engine/reference/audio/synth/nodes/WaveguideNode.md",
    "source": "engine/audio/synth/nodes/WaveguideNode.js",
    "import": "/engine/audio/synth/nodes/WaveguideNode.js",
    "sourceHash": "51e48dcfcf4da2762ba79faee3d3e9cb029dab4a9f70433894a64f400d276c22",
    "summary": "Render a waveguide to an AudioBuffer (offline).",
    "exports": [
      {
        "name": "renderWaveguide",
        "kind": "function",
        "signature": "renderWaveguide(ctx, config = {})",
        "summary": "Render a waveguide to an AudioBuffer (offline)."
      },
      {
        "name": "createWaveguide",
        "kind": "function",
        "signature": "createWaveguide(ctx, config = {})",
        "summary": "Create a real-time waveguide engine using Web Audio nodes. This is a simplified version using delay + filter + feedback."
      },
      {
        "name": "isValidTermination",
        "kind": "function",
        "signature": "isValidTermination(term)",
        "summary": ""
      },
      {
        "name": "isValidWaveguideMode",
        "kind": "function",
        "signature": "isValidWaveguideMode(mode)",
        "summary": ""
      },
      {
        "name": "WAVEGUIDE_TERMINATIONS",
        "kind": "constant",
        "signature": "WAVEGUIDE_TERMINATIONS",
        "summary": ""
      },
      {
        "name": "WAVEGUIDE_MODE_OPTIONS",
        "kind": "constant",
        "signature": "WAVEGUIDE_MODE_OPTIONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/atoms/CrackleAtom",
    "path": "engine/reference/audio/synth/nodes/atoms/CrackleAtom.md",
    "source": "engine/audio/synth/nodes/atoms/CrackleAtom.js",
    "import": "/engine/audio/synth/nodes/atoms/CrackleAtom.js",
    "sourceHash": "095e6c744d5600c4ec8c6318f761855d95c1dcdac779920e3b0150282acdf7d2",
    "summary": "CrackleAtom.js - Crackle Sound Atom (Verron 2012) Pre-wired patch: Impulse → ModalBank (2-3 modes) → Envelope (AD) → Gain Driven by: emitRate → density, temperature → brightness Use case: fire crackle, ice crack, sparks",
    "exports": [
      {
        "name": "createCrackleAtomPatch",
        "kind": "function",
        "signature": "createCrackleAtomPatch(config = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/atoms/DropAtom",
    "path": "engine/reference/audio/synth/nodes/atoms/DropAtom.md",
    "source": "engine/audio/synth/nodes/atoms/DropAtom.js",
    "import": "/engine/audio/synth/nodes/atoms/DropAtom.js",
    "sourceHash": "debbedfbbd6a5c8a70a54d1e50296481d7a28df0d3cb2e1c79d08a73912fef82",
    "summary": "DropAtom.js - Drop Sound Atom (Verron 2012) Pre-wired patch: Impulse → Resonator (single mode) → Envelope (AD) Driven by: mass → pitch, velocity → amplitude Use case: rain drops, drips, liquid impacts",
    "exports": [
      {
        "name": "createDropAtomPatch",
        "kind": "function",
        "signature": "createDropAtomPatch(config = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/atoms/HissAtom",
    "path": "engine/reference/audio/synth/nodes/atoms/HissAtom.md",
    "source": "engine/audio/synth/nodes/atoms/HissAtom.js",
    "import": "/engine/audio/synth/nodes/atoms/HissAtom.js",
    "sourceHash": "ba4d9cddf94ee31cb9139cdbf0881235f589dbf3f0e374b1cc22543cf5c5e9f5",
    "summary": "HissAtom.js - Hiss Sound Atom (Verron 2012) Pre-wired patch: Noise(white) → HighPass → Gain Driven by: temperature → cutoff, emitRate → volume Use case: steam, gas escape, sizzle, continuous background",
    "exports": [
      {
        "name": "createHissAtomPatch",
        "kind": "function",
        "signature": "createHissAtomPatch(config = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/atoms/RumbleAtom",
    "path": "engine/reference/audio/synth/nodes/atoms/RumbleAtom.md",
    "source": "engine/audio/synth/nodes/atoms/RumbleAtom.js",
    "import": "/engine/audio/synth/nodes/atoms/RumbleAtom.js",
    "sourceHash": "65c40aa8991a953377cb80faacbea2c8a00bdc52d36ee78f8990f4bf680ba667",
    "summary": "RumbleAtom.js - Rumble Sound Atom (Verron 2012) Pre-wired patch: BrownNoise → LowPass → Gain Driven by: size → cutoff, velocity → volume Use case: thunder, ground shake, lava, explosions",
    "exports": [
      {
        "name": "createRumbleAtomPatch",
        "kind": "function",
        "signature": "createRumbleAtomPatch(config = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/atoms/WhooshAtom",
    "path": "engine/reference/audio/synth/nodes/atoms/WhooshAtom.md",
    "source": "engine/audio/synth/nodes/atoms/WhooshAtom.js",
    "import": "/engine/audio/synth/nodes/atoms/WhooshAtom.js",
    "sourceHash": "58c3b4a518711195742c5940983f5af9c5311009dfd8f88036c0616096f26ea0",
    "summary": "WhooshAtom.js - Whoosh Sound Atom (Verron 2012) Pre-wired patch: Noise → BandPass → Envelope → Gain Driven by: velocity → centerFreq, size → bandwidth Use case: wind, projectile flyby, movement",
    "exports": [
      {
        "name": "createWhooshAtomPatch",
        "kind": "function",
        "signature": "createWhooshAtomPatch(config = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/instruments/InstrumentPresets",
    "path": "engine/reference/audio/synth/nodes/instruments/InstrumentPresets.md",
    "source": "engine/audio/synth/nodes/instruments/InstrumentPresets.js",
    "import": "/engine/audio/synth/nodes/instruments/InstrumentPresets.js",
    "sourceHash": "57b0fe3c47337a4c22c60521ea9eca9e094fcfb958b3d46905d394496f27c7d6",
    "summary": "Convert MIDI note number to frequency.",
    "exports": [
      {
        "name": "midiToFreq",
        "kind": "function",
        "signature": "midiToFreq(note)",
        "summary": "Convert MIDI note number to frequency."
      },
      {
        "name": "freqToMidi",
        "kind": "function",
        "signature": "freqToMidi(freq)",
        "summary": "Convert frequency to MIDI note number."
      },
      {
        "name": "createPianoInstrument",
        "kind": "function",
        "signature": "createPianoInstrument(ctx, config = {})",
        "summary": "Create a piano instrument using Karplus-Strong + FM."
      },
      {
        "name": "createStringsInstrument",
        "kind": "function",
        "signature": "createStringsInstrument(ctx, config = {})",
        "summary": "Create a string ensemble instrument."
      },
      {
        "name": "createBrassInstrument",
        "kind": "function",
        "signature": "createBrassInstrument(ctx, config = {})",
        "summary": "Create a brass instrument with growl and brightness."
      },
      {
        "name": "createPadSynth",
        "kind": "function",
        "signature": "createPadSynth(ctx, config = {})",
        "summary": "Create a lush pad synthesizer."
      },
      {
        "name": "createLeadSynth",
        "kind": "function",
        "signature": "createLeadSynth(ctx, config = {})",
        "summary": "Create a mono lead synthesizer with glide."
      },
      {
        "name": "createBassSynth",
        "kind": "function",
        "signature": "createBassSynth(ctx, config = {})",
        "summary": "Create a bass synthesizer."
      },
      {
        "name": "createDrumSynth",
        "kind": "function",
        "signature": "createDrumSynth(ctx, config = {})",
        "summary": "Create an analog-style drum synthesizer."
      },
      {
        "name": "INSTRUMENT_TYPES",
        "kind": "constant",
        "signature": "INSTRUMENT_TYPES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/physics/CombustionModel",
    "path": "engine/reference/audio/synth/nodes/physics/CombustionModel.md",
    "source": "engine/audio/synth/nodes/physics/CombustionModel.js",
    "import": "/engine/audio/synth/nodes/physics/CombustionModel.js",
    "sourceHash": "398384d0a4233e471ef0d06ec954c06bcdc7c4c208f271b48f3bf43f57e28295",
    "summary": "CombustionModel.js - Fire/Combustion Synthesis Model Combines Crackle + Hiss + Rumble atoms mixed by intensity. Low intensity = gentle crackle. High intensity = roaring fire with rumble. Driven by: emitRate, temperature",
    "exports": [
      {
        "name": "createCombustionPatch",
        "kind": "function",
        "signature": "createCombustionPatch(config = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/physics/FluidModel",
    "path": "engine/reference/audio/synth/nodes/physics/FluidModel.md",
    "source": "engine/audio/synth/nodes/physics/FluidModel.js",
    "import": "/engine/audio/synth/nodes/physics/FluidModel.js",
    "sourceHash": "abdd44e52e5c860f03160dc7ac18064d4f8dea3089e76bb5d442b9187b6a1a92",
    "summary": "FluidModel.js - Fluid/Water Synthesis Model Combines Drop atoms (splashes) + Hiss (flow) for liquid sounds. Driven by: emitRate, velocity, splash rate",
    "exports": [
      {
        "name": "createFluidPatch",
        "kind": "function",
        "signature": "createFluidPatch(config = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/physics/ModalImpactModel",
    "path": "engine/reference/audio/synth/nodes/physics/ModalImpactModel.md",
    "source": "engine/audio/synth/nodes/physics/ModalImpactModel.js",
    "import": "/engine/audio/synth/nodes/physics/ModalImpactModel.js",
    "sourceHash": "af812c14dbffb28ffded2f1ad1712c42f45e741b11b89fc2c28bb7a4b325e28d",
    "summary": "ModalImpactModel.js - Material-Aware Impact Synthesis Excites a bank of resonators on collision. Material properties determine mode frequencies, Q factors, and decay times. Uses MATERIAL enum from SubstanceSchema for lookup. Based on Cook/Smith modal synthesis (Stanford CCRMA).",
    "exports": [
      {
        "name": "getModalPreset",
        "kind": "function",
        "signature": "getModalPreset(material)",
        "summary": "Get modal preset for a material."
      },
      {
        "name": "getModalMaterials",
        "kind": "function",
        "signature": "getModalMaterials()",
        "summary": "Get all available material names."
      },
      {
        "name": "createModalImpactPatch",
        "kind": "function",
        "signature": "createModalImpactPatch(config = {})",
        "summary": "Generate a ModalImpact patch descriptor for a given material."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/physics/WeatherModel",
    "path": "engine/reference/audio/synth/nodes/physics/WeatherModel.md",
    "source": "engine/audio/synth/nodes/physics/WeatherModel.js",
    "import": "/engine/audio/synth/nodes/physics/WeatherModel.js",
    "sourceHash": "e30b6b2b02e2ecd2d3b2e374dff312e85a89beb4caadcab75fd25d1dcf9faeef",
    "summary": "WeatherModel.js - Weather Synthesis Model Rain (grain cloud of drops), hail, thunder (rumble). Driven by: weather type, intensity",
    "exports": [
      {
        "name": "createWeatherPatch",
        "kind": "function",
        "signature": "createWeatherPatch(config = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "audio/synth/nodes/physics/WindModel",
    "path": "engine/reference/audio/synth/nodes/physics/WindModel.md",
    "source": "engine/audio/synth/nodes/physics/WindModel.js",
    "import": "/engine/audio/synth/nodes/physics/WindModel.js",
    "sourceHash": "936e813a13336c43c2e3ea9e75e5b82d1796a424820f133dcd64b5a7929ef75e",
    "summary": "WindModel.js - Wind Synthesis Model Combines Whoosh + Rumble, with gust modulation from WindSystem. Driven by: windSpeed, gustiness",
    "exports": [
      {
        "name": "createWindPatch",
        "kind": "function",
        "signature": "createWindPatch(config = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabAnonymousRelay",
    "path": "engine/reference/collab/CollabAnonymousRelay.md",
    "source": "engine/collab/CollabAnonymousRelay.js",
    "import": "/engine/collab/CollabAnonymousRelay.js",
    "sourceHash": "81a67d05584f59af67db05b09dabe3785d52a3f70a721238212d2c7dcf4fe9b3",
    "summary": "CollabAnonymousRelay.js Anonymous peer mapping and routing for P2P collab channels. Inspired by Tor onion routing, I2P garlic routing, and AP3 pseudonymous overlays — adapted for real-time game networking where latency matters. Three layers of anonymity: 1. Pseudonymous IDs — each peer gets a random session token (anonId). All ops use anonIds instead of real selfIds. Peers never see each other's real identity. Different anonId each session prevents cross-session correlation. 2. TURN-only relay — forces iceTransportPolicy:'relay' so WebRTC ICE candidates never leak real IP addresses between peers. 3. Garlic encryption — each message payload is encrypted with the recipient's ECDH public key before being sent through the relay. The relay host can route messages (via anonId headers) but cannot read the encrypted payload. Only the intended recipient can decrypt. Architecture: - The host acts as an anonymizing relay (already in relay mode) - Peers send messages to the host with a destination anonId - The host maps anonId → realPeerId, forwards the message - The forwarded message has the sender's anonId (not real ID) - Result: no peer knows any other peer's real identity or IP Flow: 1. createAnonymousRelay() → relay state with self anonId 2. Host: registerPeer(realPeerId) → assigns anonId, stores mapping 3. Outgoing: sanitizeOp(op) → replaces peerId with anonId 4. Host routing: resolveAnonToReal(anonId) → realPeerId for delivery 5. Incoming: the op already has sender's anonId (safe to process) 6. Garlic: wrapGarlic(op, recipientEcdhPub) → encrypted payload 7. Garlic: unwrapGarlic(op, ownEcdhPrivate) → decrypted payload",
    "exports": [
      {
        "name": "collabAnonTimestampReport",
        "kind": "function",
        "signature": "collabAnonTimestampReport(timestamp, nowMs = Date.now()",
        "summary": ""
      },
      {
        "name": "collabAnonScoreReport",
        "kind": "function",
        "signature": "collabAnonScoreReport(scoreData, nowMs = Date.now()",
        "summary": ""
      },
      {
        "name": "getAnonUsername",
        "kind": "function",
        "signature": "getAnonUsername(anonId)",
        "summary": "Generate an anonymous username from an anonId. Format: \"Anon-XXXX\" where XXXX is first 4 chars of the anonId."
      },
      {
        "name": "createAnonymousRelay",
        "kind": "function",
        "signature": "createAnonymousRelay(config)",
        "summary": "Create an anonymous relay state."
      },
      {
        "name": "registerAnonPeer",
        "kind": "function",
        "signature": "registerAnonPeer(relay, realPeerId, ecdhPublicKey)",
        "summary": "Register a peer and assign them an anonymous ID. On the host: stores both directions of the mapping. On non-host: only stores our own mapping (we know our own anonId)."
      },
      {
        "name": "removeAnonPeer",
        "kind": "function",
        "signature": "removeAnonPeer(relay, realPeerId)",
        "summary": "Remove a peer from the anonymous mapping."
      },
      {
        "name": "resolveRealToAnon",
        "kind": "function",
        "signature": "resolveRealToAnon(relay, realPeerId)",
        "summary": "Resolve a real peer ID to its anonymous ID."
      },
      {
        "name": "resolveAnonToReal",
        "kind": "function",
        "signature": "resolveAnonToReal(relay, anonId)",
        "summary": "Resolve an anonymous ID back to the real peer ID. HOST ONLY — non-host peers cannot resolve other peers' anonIds."
      },
      {
        "name": "resolveAnonUsername",
        "kind": "function",
        "signature": "resolveAnonUsername(relay, anonIdOrRealId)",
        "summary": "Get the anonymous username for a peer."
      },
      {
        "name": "sanitizeOutgoingOp",
        "kind": "function",
        "signature": "sanitizeOutgoingOp(relay, op)",
        "summary": "Sanitize an outgoing op: replace all real peer IDs with anonymous IDs. This is called before broadcasting — peers only see anonIds."
      },
      {
        "name": "deanonymizeIncomingOp",
        "kind": "function",
        "signature": "deanonymizeIncomingOp(relay, op)",
        "summary": "De-anonymize an incoming op: resolve anonIds back to real peer IDs. HOST ONLY — used for internal routing decisions. The forwarded copy to other peers keeps the anonIds intact."
      },
      {
        "name": "reanonymizeForForward",
        "kind": "function",
        "signature": "reanonymizeForForward(relay, op, senderRealPeerId)",
        "summary": "Re-anonymize an op for forwarding to another peer. The host de-anonymizes for routing, then this re-anonymizes for delivery. This ensures the recipient only sees the sender's anonId."
      },
      {
        "name": "wrapGarlic",
        "kind": "function",
        "signature": "async wrapGarlic(relay, op, recipientAnonId, ownEcdhPrivateKey)",
        "summary": "Wrap an op in garlic encryption for a specific recipient. The payload is encrypted with a shared key derived from our ECDH private key + the recipient's ECDH public key. The relay host can route (via 'to' field) but cannot read the encrypted payload."
      },
      {
        "name": "unwrapGarlic",
        "kind": "function",
        "signature": "async unwrapGarlic(relay, garlicOp, ownEcdhPrivateKey)",
        "summary": "Unwrap a garlic-encrypted message using our ECDH private key."
      },
      {
        "name": "buildAnonHello",
        "kind": "function",
        "signature": "buildAnonHello(relay, realHello)",
        "summary": "Build an anonymous hello payload. Replaces the real selfId/username with anonymous versions. The ECDH public key is still included (needed for garlic encryption) but it's an ephemeral session key, not tied to persistent identity."
      },
      {
        "name": "processAnonHello",
        "kind": "function",
        "signature": "processAnonHello(relay, realPeerId, anonHello)",
        "summary": "Process an anonymous hello on the host side. The host needs to map the anonymous selfId to the real peer connection."
      },
      {
        "name": "getAnonIceConfig",
        "kind": "function",
        "signature": "getAnonIceConfig(iceServers)",
        "summary": "Get ICE configuration for anonymous mode. Forces TURN-only relay to prevent IP address leakage."
      },
      {
        "name": "sanitizePresence",
        "kind": "function",
        "signature": "sanitizePresence(relay, presenceEntry)",
        "summary": "Check if a peer list entry should be visible to other peers. In anonymous mode, strip real identifiers from presence data."
      },
      {
        "name": "getAnonRelayStats",
        "kind": "function",
        "signature": "getAnonRelayStats(relay)",
        "summary": "Get anonymous relay stats for UI display."
      },
      {
        "name": "isAnonEnabled",
        "kind": "function",
        "signature": "isAnonEnabled(relay)",
        "summary": "Check if anonymous mode is active on a relay."
      },
      {
        "name": "generateSessionSeed",
        "kind": "function",
        "signature": "generateSessionSeed()",
        "summary": "Generate a session seed (host only). Shared with all peers so they can build their credential proof."
      },
      {
        "name": "generateAnonSigningKey",
        "kind": "function",
        "signature": "async generateAnonSigningKey()",
        "summary": "Generate a fresh session ECDSA P-256 key pair for anonymous signing. This key is ephemeral — different every session, never persisted."
      },
      {
        "name": "buildAnonCredential",
        "kind": "function",
        "signature": "async buildAnonCredential(persistentIdentity, sessionSeed)",
        "summary": "Build an anonymous credential: prove we're a legitimate peer by signing the sessionSeed with our persistent ECDSA key. The credential proves: \"I possess the private key for a registered identity\" without revealing WHICH identity (the credential is sent only to the host via E2E encrypted channel, and the host discards the mapping after verification)."
      },
      {
        "name": "verifyAnonCredential",
        "kind": "function",
        "signature": "async verifyAnonCredential(persistentPubKeyRaw, sessionSeed, credential)",
        "summary": "Verify an anonymous credential (HOST ONLY). Confirms the credential was signed by the persistent key we know for this peer."
      },
      {
        "name": "signAnonScoreReceipt",
        "kind": "function",
        "signature": "async signAnonScoreReceipt(sessionKeyPair, scoreData)",
        "summary": "Sign a score receipt with the anonymous session key. Uses the same canonical format as signScoreReceipt but with the session key. The anonId is used instead of the real selfId in the signed data."
      },
      {
        "name": "verifyAnonScoreReceipt",
        "kind": "function",
        "signature": "async verifyAnonScoreReceipt(certifiedSessionKeys, scoreData, signature, signerPublicKey = null, nowMs = Date.now()",
        "summary": "Verify an anonymous score receipt against the list of certified session keys. Returns true if ANY certified session key validates the signature. This is the key anonymity property: verifier confirms the receipt is from a legitimate peer without learning WHICH peer."
      },
      {
        "name": "anonRelayPayloadHash",
        "kind": "function",
        "signature": "async anonRelayPayloadHash(payloadStr)",
        "summary": ""
      },
      {
        "name": "signAnonCriticalOp",
        "kind": "function",
        "signature": "async signAnonCriticalOp(sessionKeyPair, sessionPubKeyRaw, op, anonId)",
        "summary": "Sign a critical op with the anonymous session key. Same canonical format as signCriticalOp but uses session key + anonId."
      },
      {
        "name": "verifyAnonCriticalOp",
        "kind": "function",
        "signature": "async verifyAnonCriticalOp(op, senderAnonId, certifiedSessionKeys, relay = null, nowMs = Date.now()",
        "summary": "Verify a critical op signed with an anonymous session key. Checks the signature against ALL certified session keys."
      },
      {
        "name": "initAnonCredentials",
        "kind": "function",
        "signature": "initAnonCredentials(relay, sessionSeed, ownSessionKey)",
        "summary": "Initialize the anonymous credential state on the relay. Called after the relay is created and the host generates a session seed."
      },
      {
        "name": "certifySessionKey",
        "kind": "function",
        "signature": "certifySessionKey(relay, sessionPubKeyRaw)",
        "summary": "Add a verified session public key to the certified list (HOST). Called after the host verifies a peer's anonymous credential."
      },
      {
        "name": "setCertifiedSessionKeys",
        "kind": "function",
        "signature": "setCertifiedSessionKeys(relay, keyList)",
        "summary": "Set the full certified session key list (NON-HOST peers). Called when the host broadcasts the shuffled list of all certified keys."
      },
      {
        "name": "getCertifiedSessionKeys",
        "kind": "function",
        "signature": "getCertifiedSessionKeys(relay)",
        "summary": "Get the list of certified session keys."
      },
      {
        "name": "buildAnonCredentialOp",
        "kind": "function",
        "signature": "buildAnonCredentialOp(relay, credential)",
        "summary": "Build an __anon_credential__ op for the host. Sent after joining to prove legitimacy and register session key."
      },
      {
        "name": "buildAnonKeylistOp",
        "kind": "function",
        "signature": "buildAnonKeylistOp(relay)",
        "summary": "Build an __anon_keylist__ op to broadcast the certified session key list. HOST ONLY — sent to all peers after verifying credentials."
      },
      {
        "name": "buildAnonScoreReportOp",
        "kind": "function",
        "signature": "async buildAnonScoreReportOp(relay, targetAnonId, score)",
        "summary": "Build an anonymous score report op. Uses the session key for signing instead of the persistent ECDSA key."
      },
      {
        "name": "isAnonCredentialsReady",
        "kind": "function",
        "signature": "isAnonCredentialsReady(relay)",
        "summary": "Check if anonymous credentials are ready for signing/verification."
      },
      {
        "name": "resetAnonymousRelay",
        "kind": "function",
        "signature": "resetAnonymousRelay(relay)",
        "summary": ""
      },
      {
        "name": "destroyAnonymousRelay",
        "kind": "function",
        "signature": "destroyAnonymousRelay(relay)",
        "summary": ""
      },
      {
        "name": "COLLAB_ANON_RELAY_LIMITS",
        "kind": "constant",
        "signature": "COLLAB_ANON_RELAY_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabCameraInterp",
    "path": "engine/reference/collab/CollabCameraInterp.md",
    "source": "engine/collab/CollabCameraInterp.js",
    "import": "/engine/collab/CollabCameraInterp.js",
    "sourceHash": "537ff4bfadd967778b7f450f4feedc686dd6f4090447540fb0b298b5398d466e",
    "summary": "CollabCameraInterp.js Hermite-spline camera interpolation for smooth remote peer camera rendering. Based on Glenn Fiedler's \"Snapshot Interpolation\" (Gaffer on Games, GDC 2015): - Buffer camera snapshots and render slightly behind real-time - Use cubic Hermite splines (position + velocity at each sample) for C1 continuity - Adaptive jitter compensation adjusts the playback delay automatically Hermite basis: H(t) = (2t³ - 3t² + 1)·p0  +  (t³ - 2t² + t)·v0·Δt + (-2t³ + 3t²)·p1      +  (t³ - t²)·v1·Δt This guarantees the curve passes through p0 and p1 with matching velocities, eliminating the 1st-order discontinuity artifacts that linear interpolation causes.",
    "exports": [
      {
        "name": "createCameraInterpState",
        "kind": "function",
        "signature": "createCameraInterpState()",
        "summary": "Create the global camera interpolation state. Attach to editor.collab or pass around explicitly."
      },
      {
        "name": "pushCameraSnapshot",
        "kind": "function",
        "signature": "pushCameraSnapshot(state, peerId, pos, target, vel, targetVel, remoteTs)",
        "summary": "Push a camera_sync snapshot into the interpolation buffer. Call this from the camera_sync op handler instead of snapping peer.camera directly."
      },
      {
        "name": "getInterpolatedCamera",
        "kind": "function",
        "signature": "getInterpolatedCamera(state, peerId)",
        "summary": "Get the smoothly interpolated camera position for a remote peer. Call this every render frame from CollabOverlayRenderer."
      },
      {
        "name": "pruneStaleInterpBuffers",
        "kind": "function",
        "signature": "pruneStaleInterpBuffers(state)",
        "summary": "Remove stale peer buffers. Call periodically (~1Hz)."
      },
      {
        "name": "removePeerInterpBuffer",
        "kind": "function",
        "signature": "removePeerInterpBuffer(state, peerId)",
        "summary": "Remove a specific peer's buffer (on disconnect)."
      },
      {
        "name": "getInterpStats",
        "kind": "function",
        "signature": "getInterpStats(state)",
        "summary": "Get interpolation stats for UI display."
      },
      {
        "name": "destroyCameraInterpState",
        "kind": "function",
        "signature": "destroyCameraInterpState(state)",
        "summary": "Destroy all state."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabCodec",
    "path": "engine/reference/collab/CollabCodec.md",
    "source": "engine/collab/CollabCodec.js",
    "import": "/engine/collab/CollabCodec.js",
    "sourceHash": "0392294f129cd89df5b61802c3909f324eb88d8fd328d2c26a0425a96b5dd45b",
    "summary": "CollabCodec.js Inline MessagePack encoder/decoder for binary collab messages. Zero dependencies — implements msgpack spec directly. Supports: null, bool, int (safe integer range), float64, string, bin (Uint8Array), array, map (plain objects). Special extension type 0x01: Float32Array with canonical little-endian bytes. Usage: import { encode, decode } from './CollabCodec.js'; const bytes = encode({ ch: 'ops', data: { type: 'transform', pos: new Float32Array([1,2,3]) } }); const obj = decode(bytes);",
    "exports": [
      {
        "name": "encode",
        "kind": "function",
        "signature": "encode(value, options = {})",
        "summary": "Encode a JS value into a msgpack Uint8Array."
      },
      {
        "name": "codecEncodeReport",
        "kind": "function",
        "signature": "codecEncodeReport(value, options = {})",
        "summary": ""
      },
      {
        "name": "decode",
        "kind": "function",
        "signature": "decode(data, options = {})",
        "summary": "Decode a msgpack Uint8Array (or ArrayBuffer) back into a JS value."
      },
      {
        "name": "codecDecodeReport",
        "kind": "function",
        "signature": "codecDecodeReport(data, options = {})",
        "summary": ""
      },
      {
        "name": "COLLAB_CODEC_LIMITS",
        "kind": "constant",
        "signature": "COLLAB_CODEC_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabCore",
    "path": "engine/reference/collab/CollabCore.md",
    "source": "engine/collab/CollabCore.js",
    "import": "/engine/collab/CollabCore.js",
    "sourceHash": "145b1d28121779715f435b47d8810d202256f23b6a1409e5f7c929daa3390801",
    "summary": "CollabCore.js WebRTC peer connection management. Manages RTCPeerConnection instances, data channels, and reconnection. Two data channels per peer: 'ops'      — reliable, ordered (scene operations) 'presence' — unreliable, unordered (camera/selection at 10Hz)",
    "exports": [
      {
        "name": "createCollabCore",
        "kind": "function",
        "signature": "createCollabCore(config)",
        "summary": "Create a collab core instance. config: { projectId, selfId, username, onOp, onPresence, onPeerDiscovered, shouldConnectPeer, onPeerJoin, onPeerLeave }"
      },
      {
        "name": "startCollab",
        "kind": "function",
        "signature": "startCollab(core)",
        "summary": "Start signaling and begin peer discovery."
      },
      {
        "name": "forceDiscovery",
        "kind": "function",
        "signature": "forceDiscovery(core)",
        "summary": "Force an immediate discovery pass: re-announce on all signaling tiers right now. Lets an app-layer \"Connect now\" find a known contact without waiting for the periodic announce cycle. Does not tear down existing peers."
      },
      {
        "name": "broadcastOp",
        "kind": "function",
        "signature": "broadcastOp(core, op)",
        "summary": "Broadcast an op to all connected peers. Transport priority: 1. FastChannel (same-origin BroadcastChannel) — <1ms 2. Gossip mesh (partial mesh / supernode mode) — K neighbors, O(log N) delivery 3. Full mesh WebRTC — direct to all (≤6 peers)"
      },
      {
        "name": "broadcastPresence",
        "kind": "function",
        "signature": "broadcastPresence(core, presenceData)",
        "summary": "Broadcast presence data to all connected peers (unreliable channel). Prefers fast channel for same-origin peers."
      },
      {
        "name": "collabChunkEnvelopeReport",
        "kind": "function",
        "signature": "collabChunkEnvelopeReport(data)",
        "summary": ""
      },
      {
        "name": "sendToPeer",
        "kind": "function",
        "signature": "sendToPeer(core, peerId, data)",
        "summary": "Send data to a specific peer only. Prefers fast channel for same-origin peers. Auto-chunks large messages to avoid SCTP size limits."
      },
      {
        "name": "relayOp",
        "kind": "function",
        "signature": "relayOp(core, fromPeerId, op)",
        "summary": "Relay an op from one peer to all other peers (host-only, relay mode). Optionally filters by spatial interest set."
      },
      {
        "name": "computeDynamicCapacity",
        "kind": "function",
        "signature": "computeDynamicCapacity(core, peerReputation)",
        "summary": "Compute the dynamic peer capacity based on connection quality. Fast channel peers are free. Trusted peers expand the mesh limit."
      },
      {
        "name": "collabRelayThresholdReport",
        "kind": "function",
        "signature": "collabRelayThresholdReport(value)",
        "summary": ""
      },
      {
        "name": "collabPeerScoreReport",
        "kind": "function",
        "signature": "collabPeerScoreReport(value)",
        "summary": ""
      },
      {
        "name": "checkRelayMode",
        "kind": "function",
        "signature": "checkRelayMode(core, peerReputation)",
        "summary": "Check peer count and toggle relay mode if threshold is crossed. Now uses dynamic capacity — fast peers don't count, trusted peers expand the limit."
      },
      {
        "name": "setCoreRelayConfig",
        "kind": "function",
        "signature": "setCoreRelayConfig(core, opts)",
        "summary": "Set the spatial authority reference for interest-filtered relay."
      },
      {
        "name": "setCoreFastChannel",
        "kind": "function",
        "signature": "setCoreFastChannel(core, fastChannel)",
        "summary": "Set the fast channel reference on the core. Called by EditorCollab after creating the fast channel."
      },
      {
        "name": "setCoreTopology",
        "kind": "function",
        "signature": "setCoreTopology(core, topology)",
        "summary": "Set the mesh topology reference on the core. Called by EditorCollab after creating the topology manager."
      },
      {
        "name": "isPeerTrusted",
        "kind": "function",
        "signature": "isPeerTrusted(core, peerId, peerScore)",
        "summary": "Check if a peer is trusted (high reputation) and should get a direct connection even in relay mode. Trusted peers bypass the relay host for lower latency."
      },
      {
        "name": "getPeerConnectionTier",
        "kind": "function",
        "signature": "getPeerConnectionTier(core, peerId, peerScore, fastChannel)",
        "summary": "Get the connection tier label for a peer."
      },
      {
        "name": "getMaxBufferedAmount",
        "kind": "function",
        "signature": "getMaxBufferedAmount(core)",
        "summary": "Get the maximum bufferedAmount across all peer ops channels. Used by CollabMessageRouter for backpressure detection."
      },
      {
        "name": "collabBufferedAmountReport",
        "kind": "function",
        "signature": "collabBufferedAmountReport(value)",
        "summary": ""
      },
      {
        "name": "getSelfId",
        "kind": "function",
        "signature": "getSelfId(core)",
        "summary": "Get the local peer ID."
      },
      {
        "name": "getPeers",
        "kind": "function",
        "signature": "getPeers(core)",
        "summary": "Get all connected peers."
      },
      {
        "name": "connectCollabPeer",
        "kind": "function",
        "signature": "connectCollabPeer(core, peerId, username = 'Remote')",
        "summary": "Begin a targeted WebRTC connection to an already-discovered peer."
      },
      {
        "name": "disconnectCollabPeer",
        "kind": "function",
        "signature": "disconnectCollabPeer(core, peerId)",
        "summary": "Close one direct peer connection without tearing down discovery."
      },
      {
        "name": "observeCollabPeerMetrics",
        "kind": "function",
        "signature": "async observeCollabPeerMetrics(core, peerId)",
        "summary": "Collect locally observed transport quality. Remote peers cannot supply or inflate these values, which makes them suitable input for topology roles."
      },
      {
        "name": "destroyCollabCore",
        "kind": "function",
        "signature": "destroyCollabCore(core)",
        "summary": "Destroy all connections and signaling."
      },
      {
        "name": "deriveCollabChannelId",
        "kind": "function",
        "signature": "async deriveCollabChannelId(selfId, peerId)",
        "summary": "Derive a shared AES-256-GCM key from ECDH key exchange. Called after hello handshake when both peers have ECDH public keys."
      },
      {
        "name": "collabReconnectPlanReport",
        "kind": "function",
        "signature": "collabReconnectPlanReport(attempts)",
        "summary": ""
      },
      {
        "name": "collabHeartbeatReport",
        "kind": "function",
        "signature": "collabHeartbeatReport(lastPongMs, timestampMs)",
        "summary": ""
      },
      {
        "name": "broadcastGoodbye",
        "kind": "function",
        "signature": "broadcastGoodbye(core)",
        "summary": "Broadcast a graceful goodbye to all peers before leaving. This lets other peers immediately remove us instead of waiting for heartbeat timeout or WebRTC state change."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabCrypto",
    "path": "engine/reference/collab/CollabCrypto.md",
    "source": "engine/collab/CollabCrypto.js",
    "import": "/engine/collab/CollabCrypto.js",
    "sourceHash": "a5e0167ce58d23341f7c29dcd7518fb05ba81604f9d7228dec8059a25444e548",
    "summary": "CollabCrypto.js ECDH P-256 key exchange + AES-256-GCM encryption for P2P collab channels. Uses the SubtleCrypto API with shared finite-number admission. Flow: 1. Each peer calls generateKeyPair() on connect 2. Peers exchange public keys during hello handshake 3. deriveSharedKey() produces an AES-256-GCM key via ECDH + HKDF 4. All subsequent messages: encrypt() before send, decrypt() on receive 5. HMAC for challenge-response authentication during handshake Nonce scheme: 12 bytes = [8-byte channelId | 4-byte monotonic counter] Counter MUST never repeat for a given key.",
    "exports": [
      {
        "name": "generateKeyPair",
        "kind": "function",
        "signature": "async generateKeyPair()",
        "summary": "Generate an ECDH P-256 key pair for key exchange."
      },
      {
        "name": "importPublicKey",
        "kind": "function",
        "signature": "async importPublicKey(rawKey)",
        "summary": "Import a raw public key (65 bytes) received from a remote peer."
      },
      {
        "name": "deriveSharedKey",
        "kind": "function",
        "signature": "async deriveSharedKey(privateKey, remotePublicKey, salt)",
        "summary": "Derive a shared AES-256-GCM key from our private key + remote public key. Optionally mixes in a room password for authentication."
      },
      {
        "name": "deriveHmacKey",
        "kind": "function",
        "signature": "async deriveHmacKey(privateKey, remotePublicKey, salt)",
        "summary": "Derive an HMAC-SHA256 key from ECDH shared bits for challenge-response auth."
      },
      {
        "name": "cryptoNonceReport",
        "kind": "function",
        "signature": "cryptoNonceReport(counter, channelId = null)",
        "summary": ""
      },
      {
        "name": "encryptedMessageReport",
        "kind": "function",
        "signature": "encryptedMessageReport(message, channelId = null)",
        "summary": ""
      },
      {
        "name": "nextCryptoSendCounter",
        "kind": "function",
        "signature": "nextCryptoSendCounter(state)",
        "summary": ""
      },
      {
        "name": "resetCryptoCounters",
        "kind": "function",
        "signature": "resetCryptoCounters(state)",
        "summary": ""
      },
      {
        "name": "encrypt",
        "kind": "function",
        "signature": "async encrypt(key, plaintext, counter, channelId)",
        "summary": "Encrypt a msgpack payload with AES-256-GCM."
      },
      {
        "name": "decrypt",
        "kind": "function",
        "signature": "async decrypt(key, message, channelId, replayState = null)",
        "summary": "Decrypt an AES-256-GCM encrypted message."
      },
      {
        "name": "generateChallenge",
        "kind": "function",
        "signature": "generateChallenge()",
        "summary": "Generate a random 32-byte challenge."
      },
      {
        "name": "signChallenge",
        "kind": "function",
        "signature": "async signChallenge(hmacKey, challenge)",
        "summary": "Sign a challenge with HMAC-SHA256."
      },
      {
        "name": "verifyChallenge",
        "kind": "function",
        "signature": "async verifyChallenge(hmacKey, challenge, signature)",
        "summary": "Verify a challenge signature."
      },
      {
        "name": "createPeerCryptoState",
        "kind": "function",
        "signature": "createPeerCryptoState()",
        "summary": "Create crypto state for a single peer connection."
      },
      {
        "name": "initPeerCrypto",
        "kind": "function",
        "signature": "async initPeerCrypto(state)",
        "summary": "Initialize crypto state with a fresh key pair."
      },
      {
        "name": "completePeerCrypto",
        "kind": "function",
        "signature": "async completePeerCrypto(state, remotePublicKeyRaw, roomPassword)",
        "summary": "Complete the handshake: import remote public key, derive shared keys."
      },
      {
        "name": "isCryptoAvailable",
        "kind": "function",
        "signature": "isCryptoAvailable()",
        "summary": "Check if crypto is available in this environment."
      },
      {
        "name": "COLLAB_CRYPTO_LIMITS",
        "kind": "constant",
        "signature": "COLLAB_CRYPTO_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabDivergenceTracker",
    "path": "engine/reference/collab/CollabDivergenceTracker.md",
    "source": "engine/collab/CollabDivergenceTracker.js",
    "import": "/engine/collab/CollabDivergenceTracker.js",
    "sourceHash": "a7f39090c7d42a1b9f070247e370db0572b74a0a3b16369a29380ed42cb08f2a",
    "summary": "CollabDivergenceTracker.js Records per-frame position hashes during play mode and compares them across peers to detect simulation divergence. Hash algorithm: FNV-1a 32-bit over quantized entity positions.",
    "exports": [
      {
        "name": "createDivergenceTracker",
        "kind": "function",
        "signature": "createDivergenceTracker()",
        "summary": ""
      },
      {
        "name": "divergenceHeartbeatReport",
        "kind": "function",
        "signature": "divergenceHeartbeatReport(payload)",
        "summary": ""
      },
      {
        "name": "divergenceFrameHashReport",
        "kind": "function",
        "signature": "divergenceFrameHashReport(samples)",
        "summary": ""
      },
      {
        "name": "recordLocalFrame",
        "kind": "function",
        "signature": "recordLocalFrame(tracker, simTime, editor)",
        "summary": "Record a local frame hash. Call every simHistoryInterval during play."
      },
      {
        "name": "receiveRemoteHash",
        "kind": "function",
        "signature": "receiveRemoteHash(tracker, peerId, simTime, frameHash)",
        "summary": "Receive a remote heartbeat hash from a peer."
      },
      {
        "name": "removePeerDivergence",
        "kind": "function",
        "signature": "removePeerDivergence(tracker, peerId)",
        "summary": "Remove a peer's data on disconnect."
      },
      {
        "name": "getDivergenceLog",
        "kind": "function",
        "signature": "getDivergenceLog(tracker)",
        "summary": "Get all recorded divergence events."
      },
      {
        "name": "resetDivergenceTracker",
        "kind": "function",
        "signature": "resetDivergenceTracker(tracker)",
        "summary": "Clear all tracking data (call on exitPlayMode)."
      },
      {
        "name": "exportDivergenceReport",
        "kind": "function",
        "signature": "exportDivergenceReport(tracker, localUsername)",
        "summary": "Export a JSON report of all divergences + local timeline."
      },
      {
        "name": "computeFrameHash",
        "kind": "function",
        "signature": "computeFrameHash(editor)",
        "summary": "Compute a fast FNV-1a hash of all entity positions in the scene. Quantizes positions to 3 decimal places for float stability."
      },
      {
        "name": "collabDivergenceFrameHash",
        "kind": "function",
        "signature": "collabDivergenceFrameHash(samples)",
        "summary": ""
      },
      {
        "name": "injectDivergenceDeps",
        "kind": "function",
        "signature": "injectDivergenceDeps(deps)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabEntityAuthority",
    "path": "engine/reference/collab/CollabEntityAuthority.md",
    "source": "engine/collab/CollabEntityAuthority.js",
    "import": "/engine/collab/CollabEntityAuthority.js",
    "sourceHash": "a728d9b631532d7a040b72fec54f43fb5e33995b924abdae162ca91f337def99",
    "summary": "CollabEntityAuthority.js Per-entity ownership model for collaborative multiplayer. Every entity has at most one \"owner\" peer. The owner is the sole source of truth for that entity's transform, physics, and interactive state. Ownership transfers via explicit claim/release ops — no server needed. Priority levels (higher number wins): 0 DEFAULT   — physics authority (host) owns unclaimed entities 1 PROXIMITY — auto-assigned to nearest peer's camera (future) 2 SELECTED  — peer clicked/selected the entity in the inspector 3 GRABBED   — peer is actively dragging/manipulating the entity Conflict resolution: - Higher priority always wins (grab beats select beats proximity) - Equal priority: earlier timestamp wins (first-come-first-served) - Owner can always release voluntarily - Stale claims (no refresh for STALE_TIMEOUT_MS) are auto-released Inspired by: Photon Takeover policy, Gaffer on Games authority scheme, Roblox Network Ownership, Source Engine shadow controllers.",
    "exports": [
      {
        "name": "createEntityAuthority",
        "kind": "function",
        "signature": "createEntityAuthority(selfId)",
        "summary": "Create an entity authority state object."
      },
      {
        "name": "getEntityOwner",
        "kind": "function",
        "signature": "getEntityOwner(auth, entityId)",
        "summary": "Get the current owner of an entity."
      },
      {
        "name": "isLocallyOwned",
        "kind": "function",
        "signature": "isLocallyOwned(auth, entityId)",
        "summary": "Check if the local peer owns an entity."
      },
      {
        "name": "isEntityClaimed",
        "kind": "function",
        "signature": "isEntityClaimed(auth, entityId)",
        "summary": "Check if an entity is owned by anyone (not default authority)."
      },
      {
        "name": "getEntitiesOwnedBy",
        "kind": "function",
        "signature": "getEntitiesOwnedBy(auth, peerId)",
        "summary": "Get all entities owned by a specific peer."
      },
      {
        "name": "getLocallyOwnedSet",
        "kind": "function",
        "signature": "getLocallyOwnedSet(auth)",
        "summary": "Get all locally owned entity IDs as a Set (for fast lookup in sync loops)."
      },
      {
        "name": "shouldBroadcastEntity",
        "kind": "function",
        "signature": "shouldBroadcastEntity(auth, entityId, isPlayAuthority)",
        "summary": "Check if the local peer should broadcast transforms for an entity. Returns true if: (a) we own it, or (b) nobody owns it and we're play authority."
      },
      {
        "name": "shouldAcceptRemoteTransform",
        "kind": "function",
        "signature": "shouldAcceptRemoteTransform(auth, entityId)",
        "summary": "Check if the local peer should accept remote transforms for an entity. Returns true if we do NOT own it."
      },
      {
        "name": "claimEntity",
        "kind": "function",
        "signature": "claimEntity(auth, entityId, priority)",
        "summary": "Claim ownership of an entity at a given priority. Returns the op to broadcast, or null if claim was rejected locally."
      },
      {
        "name": "releaseEntity",
        "kind": "function",
        "signature": "releaseEntity(auth, entityId)",
        "summary": "Release ownership of an entity. Reverts to default authority. Returns the op to broadcast, or null if we didn't own it."
      },
      {
        "name": "releaseAllLocal",
        "kind": "function",
        "signature": "releaseAllLocal(auth)",
        "summary": "Release ALL claims owned by the local peer (e.g. on disconnect or exit play mode). Returns array of ops to broadcast."
      },
      {
        "name": "onRemoteAuthorityOp",
        "kind": "function",
        "signature": "onRemoteAuthorityOp(auth, op)",
        "summary": "Handle an incoming entity_authority op from a remote peer. Applies the claim/release to local state after conflict resolution. Returns true if the claim was accepted."
      },
      {
        "name": "tickAuthority",
        "kind": "function",
        "signature": "tickAuthority(auth)",
        "summary": "Build refresh ops for all local claims (call at ~2Hz from the collab loop). Also prunes stale remote claims."
      },
      {
        "name": "onPeerDisconnected",
        "kind": "function",
        "signature": "onPeerDisconnected(auth, peerId)",
        "summary": "Handle a peer disconnecting — release all their claims."
      },
      {
        "name": "getHandoffBlend",
        "kind": "function",
        "signature": "getHandoffBlend(auth, entityId)",
        "summary": "Get handoff blend factor for an entity (0 = fully old owner, 1 = fully new owner). Used by interpolation to smoothly blend during ownership transfer."
      },
      {
        "name": "onOwnershipChanged",
        "kind": "function",
        "signature": "onOwnershipChanged(auth, callback)",
        "summary": "Set callback for ownership changes."
      },
      {
        "name": "destroyEntityAuthority",
        "kind": "function",
        "signature": "destroyEntityAuthority(auth)",
        "summary": "Destroy / reset authority state."
      },
      {
        "name": "AUTHORITY_PRIORITY",
        "kind": "constant",
        "signature": "AUTHORITY_PRIORITY",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabFastChannel",
    "path": "engine/reference/collab/CollabFastChannel.md",
    "source": "engine/collab/CollabFastChannel.js",
    "import": "/engine/collab/CollabFastChannel.js",
    "sourceHash": "5802267e46edb76a3f6ecb697bbb67e7a73c31962ac23953f996775141b91474",
    "summary": "CollabFastChannel.js Low-overhead data transport for same-origin peers via BroadcastChannel. Problem: WebRTC DataChannels add ~50-100ms RTT even on localhost due to DTLS encryption, SCTP transport, and msgpack encode/decode overhead. Solution: For peers sharing the same browser origin (same-machine testing, same-domain deployment), use the BroadcastChannel API which provides: - Structured clone transfer (no msgpack encode/decode) - No encryption overhead (same-origin security model) - Browser-scheduled local delivery without ICE/STUN/DTLS setup - Zero setup — no ICE/STUN/DTLS negotiation This module creates a dedicated data BroadcastChannel (separate from the signaling channel in CollabSignal.js) that carries ops and presence. CollabCore detects same-origin peers and prefers this transport. For cross-origin / cross-machine peers, WebRTC is still used. Inspired by: Meshtastic's tiered transport (LoRa → BLE → WiFi), choosing the fastest available link per peer.",
    "exports": [
      {
        "name": "createFastChannel",
        "kind": "function",
        "signature": "createFastChannel(projectId, selfId, callbacks = {})",
        "summary": "Create a fast channel instance."
      },
      {
        "name": "fastChannelSendOp",
        "kind": "function",
        "signature": "fastChannelSendOp(fc, op)",
        "summary": "Send an op via fast channel to all same-origin peers. Uses structured clone (no msgpack encode/decode)."
      },
      {
        "name": "fastChannelSendPresence",
        "kind": "function",
        "signature": "fastChannelSendPresence(fc, presenceData)",
        "summary": "Send presence data via fast channel."
      },
      {
        "name": "fastChannelSendToPeer",
        "kind": "function",
        "signature": "fastChannelSendToPeer(fc, peerId, op)",
        "summary": "Send an op to a specific peer via fast channel."
      },
      {
        "name": "isFastPeer",
        "kind": "function",
        "signature": "isFastPeer(fc, peerId)",
        "summary": "Check if a specific peer is reachable via fast channel."
      },
      {
        "name": "getFastPeerIds",
        "kind": "function",
        "signature": "getFastPeerIds(fc)",
        "summary": "Get the set of all fast peer IDs."
      },
      {
        "name": "getFastChannelStats",
        "kind": "function",
        "signature": "getFastChannelStats(fc)",
        "summary": "Get fast channel stats."
      },
      {
        "name": "destroyFastChannel",
        "kind": "function",
        "signature": "destroyFastChannel(fc)",
        "summary": "Destroy the fast channel. Sends a bye message to peers first."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabHostMigration",
    "path": "engine/reference/collab/CollabHostMigration.md",
    "source": "engine/collab/CollabHostMigration.js",
    "import": "/engine/collab/CollabHostMigration.js",
    "sourceHash": "887409c082278d78ec48ed589aa97cde874510da8d93e8b2383332d2281555cf",
    "summary": "CollabHostMigration.js Automatic host migration for P2P collaboration sessions. Problem: When the host peer drops (closes tab, network outage, crash), relay mode breaks — all non-host peers lose the ability to communicate through the relay hub. The session effectively dies. Solution: Bully-style host election with reputation-weighted scoring. When the host is detected as dead: 1. All peers start a migration election 2. The peer with the highest \"candidacy score\" wins 3. New host assumes relay duties and notifies all peers 4. If the original host returns, it can reclaim the role Election Algorithm (modified Bully): - Each peer computes a candidacy score based on: • Reputation score (40%) — trustworthy peers preferred • Uptime in session (30%) — stable peers preferred • Connection count (20%) — well-connected peers preferred • Deterministic tiebreaker (10%) — lexicographic selfId for consistency - All peers broadcast their candidacy - After a short election timeout, the highest-scoring peer wins - If two peers tie, the one with the lexicographically higher selfId wins Inspired by: - Xbox Live host migration (Halo 2/3) - Photon PUN MasterClient migration - Raft leader election (simplified — no log replication needed) - Bully algorithm (Garcia-Molina, 1982) Current scope: this module elects a relay host and reconfigures routing. Authority-map handoff, replicated-log consensus, election terms/quorums, and signature-gated dispatch are not implemented here and remain audit gaps. Candidate reputation/connection metrics remain locally self-reported, and captured multi-peer host-failure/rejoin traces remain absent.",
    "exports": [
      {
        "name": "createHostMigration",
        "kind": "function",
        "signature": "createHostMigration(selfId, config = {})",
        "summary": "Create a host migration manager."
      },
      {
        "name": "startHostMigration",
        "kind": "function",
        "signature": "startHostMigration(hm, isHost, hostPeerId)",
        "summary": "Start host migration monitoring."
      },
      {
        "name": "migrationSetHost",
        "kind": "function",
        "signature": "migrationSetHost(hm, hostPeerId)",
        "summary": "Set the host peer ID (for joiners who didn't know at startup). Starts the host liveness monitor if not already running."
      },
      {
        "name": "stopHostMigration",
        "kind": "function",
        "signature": "stopHostMigration(hm)",
        "summary": "Stop host migration monitoring."
      },
      {
        "name": "hostHeartbeatReceived",
        "kind": "function",
        "signature": "hostHeartbeatReceived(hm, fromPeerId)",
        "summary": "Record that we received a heartbeat (or any message) from the host. Call this from the heartbeat handler."
      },
      {
        "name": "hostActivityReceived",
        "kind": "function",
        "signature": "hostActivityReceived(hm, fromPeerId)",
        "summary": "Record that we received ANY op from a peer (used for liveness). Even non-heartbeat ops prove the host is alive."
      },
      {
        "name": "onElectionCandidacy",
        "kind": "function",
        "signature": "onElectionCandidacy(hm, peerId, payload)",
        "summary": "Handle a received election candidacy from another peer."
      },
      {
        "name": "onElectionResult",
        "kind": "function",
        "signature": "onElectionResult(hm, payload)",
        "summary": "Handle a received election result from another peer."
      },
      {
        "name": "onHostReclaimRequest",
        "kind": "function",
        "signature": "onHostReclaimRequest(hm, originalHostId)",
        "summary": "Handle the original host returning to the session. The original host broadcasts a reclaim request. The current acting host defers after a grace period, handing duties back."
      },
      {
        "name": "requestHostReclaim",
        "kind": "function",
        "signature": "requestHostReclaim(hm)",
        "summary": "Called by the original host when it returns to reclaim. Only call if we ARE the original host and someone else took over."
      },
      {
        "name": "hostMigrationTiebreakerNorm",
        "kind": "function",
        "signature": "hostMigrationTiebreakerNorm(selfId)",
        "summary": ""
      },
      {
        "name": "hostMigrationCandidacyScoreReport",
        "kind": "function",
        "signature": "hostMigrationCandidacyScoreReport(metrics = {}, timestampMs = Date.now()",
        "summary": ""
      },
      {
        "name": "migrationAddPeer",
        "kind": "function",
        "signature": "migrationAddPeer(hm, peerId)",
        "summary": "Register a known peer."
      },
      {
        "name": "migrationRemovePeer",
        "kind": "function",
        "signature": "migrationRemovePeer(hm, peerId)",
        "summary": "Remove a known peer."
      },
      {
        "name": "migrationUpdateSelfMetrics",
        "kind": "function",
        "signature": "migrationUpdateSelfMetrics(hm, score, connectionCount)",
        "summary": "Update our own metrics (call from collab loop)."
      },
      {
        "name": "onHostElectionOp",
        "kind": "function",
        "signature": "onHostElectionOp(hm, peerId, op)",
        "summary": "Handle an incoming host_election op. Routes to the appropriate handler based on phase."
      },
      {
        "name": "buildGoodbyeOp",
        "kind": "function",
        "signature": "buildGoodbyeOp(hm)",
        "summary": "Build a goodbye op to broadcast before leaving. Other peers use this to immediately detect departure instead of waiting for heartbeat timeout."
      },
      {
        "name": "onPeerGoodbye",
        "kind": "function",
        "signature": "onPeerGoodbye(hm, payload, fromPeerId = payload?.peerId)",
        "summary": "Handle a received goodbye from a departing peer. If the host sent the goodbye, immediately start election (no timeout wait)."
      },
      {
        "name": "getMigrationState",
        "kind": "function",
        "signature": "getMigrationState(hm)",
        "summary": ""
      },
      {
        "name": "getMigrationStats",
        "kind": "function",
        "signature": "getMigrationStats(hm)",
        "summary": ""
      },
      {
        "name": "isCurrentHost",
        "kind": "function",
        "signature": "isCurrentHost(hm)",
        "summary": ""
      },
      {
        "name": "getCurrentHostId",
        "kind": "function",
        "signature": "getCurrentHostId(hm)",
        "summary": ""
      },
      {
        "name": "destroyHostMigration",
        "kind": "function",
        "signature": "destroyHostMigration(hm)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabIdentity",
    "path": "engine/reference/collab/CollabIdentity.md",
    "source": "engine/collab/CollabIdentity.js",
    "import": "/engine/collab/CollabIdentity.js",
    "sourceHash": "83acc6170f768b572ac212327918157743880e07ba36326450cd868bc30552e3",
    "summary": "CollabIdentity.js Cryptographic peer identity using ECDSA P-256 (Web Crypto API). Each peer generates an ECDSA key pair on init. The public key's SHA-256 fingerprint becomes the peer's verified identity — unforgeable without the private key. During the hello handshake, peers exchange public keys and a signed proof (signature of their selfId). The remote side verifies the signature, confirming the peer truly owns the claimed public key. Host verification: the host's fingerprint is embedded in the invite code. Joiners verify the host's fingerprint matches the one in the invite code, preventing host impersonation. Reputation receipts: peers sign their score reports. Others verify the signature before trusting the score, preventing score tampering. Flow: 1. createIdentity() → ECDSA P-256 key pair + fingerprint 2. buildIdentityProof(identity, selfId) → signed selfId (for hello) 3. Remote receives proof → verifyIdentityProof(publicKey, selfId, proof) 4. If host: fingerprint embedded in invite code → joiner checks match 5. signScoreReceipt(identity, scoreData) → signed score for reputation 6. verifyScoreReceipt(publicKey, scoreData, signature) → boolean",
    "exports": [
      {
        "name": "collabIdentityTimestampReport",
        "kind": "function",
        "signature": "collabIdentityTimestampReport(timestamp, nowMs = Date.now()",
        "summary": ""
      },
      {
        "name": "collabIdentityPayloadReport",
        "kind": "function",
        "signature": "collabIdentityPayloadReport(payload)",
        "summary": ""
      },
      {
        "name": "prepareCollabIdentityRecord",
        "kind": "function",
        "signature": "prepareCollabIdentityRecord(record)",
        "summary": "Validate one bounded v1/v2 identity record without guessing future shapes."
      },
      {
        "name": "collabIdentityCurrentKey",
        "kind": "function",
        "signature": "collabIdentityCurrentKey(keyId = COLLAB_IDENTITY_KEY_ID)",
        "summary": ""
      },
      {
        "name": "createIdentity",
        "kind": "function",
        "signature": "async createIdentity(keyId = COLLAB_IDENTITY_KEY_ID)",
        "summary": "Generate or load an ECDSA P-256 key pair. Tries IndexedDB first for persistent identity across sessions. If not found, generates a new key pair and stores it. The fingerprint (SHA-256 of public key) stays the same across sessions, enabling long-term reputation tracking."
      },
      {
        "name": "computeFingerprint",
        "kind": "function",
        "signature": "async computeFingerprint(publicKeyRaw)",
        "summary": "Compute fingerprint from a raw public key (public API for verification)."
      },
      {
        "name": "buildIdentityProof",
        "kind": "function",
        "signature": "async buildIdentityProof(identity, selfId)",
        "summary": "Build an identity proof: sign our selfId with our private key. The remote peer verifies this signature to confirm we own the public key."
      },
      {
        "name": "verifyIdentityProof",
        "kind": "function",
        "signature": "async verifyIdentityProof(publicKeyRaw, selfId, signature)",
        "summary": "Verify an identity proof from a remote peer."
      },
      {
        "name": "collabIdentityScoreReceiptReport",
        "kind": "function",
        "signature": "collabIdentityScoreReceiptReport(scoreData, nowMs = Date.now()",
        "summary": ""
      },
      {
        "name": "signScoreReceipt",
        "kind": "function",
        "signature": "async signScoreReceipt(identity, scoreData)",
        "summary": "Sign a reputation score receipt. The receipt proves that this peer calculated and reported a specific score for a target peer at a specific time. Other peers verify the signature to prevent score tampering."
      },
      {
        "name": "verifyScoreReceipt",
        "kind": "function",
        "signature": "async verifyScoreReceipt(publicKeyRaw, scoreData, signature, nowMs = Date.now()",
        "summary": "Verify a reputation score receipt from a remote peer."
      },
      {
        "name": "signData",
        "kind": "function",
        "signature": "async signData(identity, data)",
        "summary": "Sign arbitrary string data with our identity."
      },
      {
        "name": "signRawBytes",
        "kind": "function",
        "signature": "async signRawBytes(identity, bytes)",
        "summary": "Sign raw bytes with our identity (no TextEncoder step) — needed when the verifier expects a signature over an exact byte string it issued (e.g. a random challenge), not over the UTF-8 encoding of some stringified form of it. See signData() for the string-based counterpart."
      },
      {
        "name": "verifyRawBytes",
        "kind": "function",
        "signature": "async verifyRawBytes(publicKeyRaw, bytes, signature)",
        "summary": "Verify a signature on raw bytes. Counterpart to signRawBytes()."
      },
      {
        "name": "verifyData",
        "kind": "function",
        "signature": "async verifyData(publicKeyRaw, data, signature)",
        "summary": "Verify a signature on arbitrary string data."
      },
      {
        "name": "createIdentityRegistry",
        "kind": "function",
        "signature": "createIdentityRegistry(selfId, identity)",
        "summary": "Create a registry that tracks verified identities for all connected peers. Each peer's identity is verified once during the hello handshake and then cached. The registry also tracks cross-verified reputation scores."
      },
      {
        "name": "registerPeerIdentity",
        "kind": "function",
        "signature": "async registerPeerIdentity(registry, peerId, publicKeyRaw, identityProof, isHost = false)",
        "summary": "Register a peer's identity after verifying their proof. Called during the enhanced hello handshake."
      },
      {
        "name": "removePeerIdentity",
        "kind": "function",
        "signature": "removePeerIdentity(registry, peerId)",
        "summary": "Remove a peer's identity from the registry."
      },
      {
        "name": "getPeerIdentity",
        "kind": "function",
        "signature": "getPeerIdentity(registry, peerId)",
        "summary": "Get a peer's verified identity info."
      },
      {
        "name": "setExpectedHostFingerprint",
        "kind": "function",
        "signature": "setExpectedHostFingerprint(registry, fingerprint)",
        "summary": "Set the expected host fingerprint (from the invite code)."
      },
      {
        "name": "resetIdentityRegistry",
        "kind": "function",
        "signature": "resetIdentityRegistry(registry, options = {})",
        "summary": ""
      },
      {
        "name": "destroyIdentityRegistry",
        "kind": "function",
        "signature": "destroyIdentityRegistry(registry)",
        "summary": ""
      },
      {
        "name": "recordScoreReceipt",
        "kind": "function",
        "signature": "async recordScoreReceipt(registry, reporterPeerId, targetPeerId, score, timestamp, signature)",
        "summary": "Record a signed score receipt from a remote peer. Each peer tracks what scores others have reported about them AND about other peers."
      },
      {
        "name": "getConsensusScore",
        "kind": "function",
        "signature": "getConsensusScore(registry, peerId)",
        "summary": "Get the consensus score for a peer based on all verified receipts. Returns the median of all verified scores reported by different peers. Also detects disputes (significant score disagreements)."
      },
      {
        "name": "buildScoreReportOp",
        "kind": "function",
        "signature": "async buildScoreReportOp(identity, selfId, targetPeerId, score)",
        "summary": "Build a signed score report op for broadcasting to all peers."
      },
      {
        "name": "getIdentityStats",
        "kind": "function",
        "signature": "getIdentityStats(registry, reputationScores)",
        "summary": "Get identity system stats for UI display."
      },
      {
        "name": "isIdentityAvailable",
        "kind": "function",
        "signature": "isIdentityAvailable()",
        "summary": "Check if crypto identity is available."
      },
      {
        "name": "isCriticalOp",
        "kind": "function",
        "signature": "isCriticalOp(opType)",
        "summary": "Check if an op type requires a signature."
      },
      {
        "name": "collabIdentityCriticalOpReport",
        "kind": "function",
        "signature": "collabIdentityCriticalOpReport(op, senderPeerId, nowMs = Date.now()",
        "summary": ""
      },
      {
        "name": "signCriticalOp",
        "kind": "function",
        "signature": "async signCriticalOp(identity, op, selfId)",
        "summary": "Sign a critical op with our ECDSA identity. Appends `_sig` (signature) and `_pub` (public key) fields to the op. The canonical signed data is: `op-sig:type:senderId:timestamp:payloadHash`"
      },
      {
        "name": "verifyCriticalOp",
        "kind": "function",
        "signature": "async verifyCriticalOp(op, senderPeerId, registry)",
        "summary": "Verify a signed critical op from a remote peer."
      },
      {
        "name": "collabIdentityPayloadHash",
        "kind": "function",
        "signature": "async collabIdentityPayloadHash(str)",
        "summary": "Helper: SHA-256 hash a string to hex (for canonical op signing)."
      },
      {
        "name": "computeTrustLevel",
        "kind": "function",
        "signature": "computeTrustLevel(registry, peerId, reputationScore)",
        "summary": "Compute the trust level for a peer."
      },
      {
        "name": "getTrustColor",
        "kind": "function",
        "signature": "getTrustColor(level)",
        "summary": "Get the display color for a trust level."
      },
      {
        "name": "getTrustLabel",
        "kind": "function",
        "signature": "getTrustLabel(level)",
        "summary": "Get the display label for a trust level."
      },
      {
        "name": "COLLAB_IDENTITY_DB_NAME",
        "kind": "constant",
        "signature": "COLLAB_IDENTITY_DB_NAME",
        "summary": ""
      },
      {
        "name": "COLLAB_IDENTITY_STORE_NAME",
        "kind": "constant",
        "signature": "COLLAB_IDENTITY_STORE_NAME",
        "summary": ""
      },
      {
        "name": "COLLAB_IDENTITY_KEY_ID",
        "kind": "constant",
        "signature": "COLLAB_IDENTITY_KEY_ID",
        "summary": ""
      },
      {
        "name": "COLLAB_IDENTITY_RECORD_SCHEMA",
        "kind": "constant",
        "signature": "COLLAB_IDENTITY_RECORD_SCHEMA",
        "summary": ""
      },
      {
        "name": "COLLAB_IDENTITY_RECORD_VERSION",
        "kind": "constant",
        "signature": "COLLAB_IDENTITY_RECORD_VERSION",
        "summary": ""
      },
      {
        "name": "COLLAB_IDENTITY_LIMITS",
        "kind": "constant",
        "signature": "COLLAB_IDENTITY_LIMITS",
        "summary": ""
      },
      {
        "name": "TRUST_LEVEL",
        "kind": "constant",
        "signature": "TRUST_LEVEL",
        "summary": ""
      },
      {
        "name": "publicKeyRaw",
        "kind": "constant",
        "signature": "publicKeyRaw",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabIntegrityVerifier",
    "path": "engine/reference/collab/CollabIntegrityVerifier.md",
    "source": "engine/collab/CollabIntegrityVerifier.js",
    "import": "/engine/collab/CollabIntegrityVerifier.js",
    "sourceHash": "3bcaed84dcab13fc3b72f0f58c864d77d8d2e1e7a7c7529e199509e67b1c4412",
    "summary": "CollabIntegrityVerifier.js Integrity validation and anomaly tracking for P2P collab. Inspired by: - Hash-chain receipts: valid ops contribute to a local rolling chain. - Server-side validation rules adapted to pairwise peer validation. - Lockstep P2P: periodic state hashing — all peers hash their zone state and exchange hashes for pairwise divergence detection. - FairPlay: operation whitelist — only registered op types are accepted. Unknown op types are rejected and penalized. Components: 1. Op Receipt Chain — local rolling hash chain per peer 2. Zone State Digest — periodic position hash for pairwise comparison 3. Anomaly Detector — physics/spatial rule violations 4. Operation Whitelist — only valid op types accepted 5. Violation Tracker — accumulates strikes, triggers auto-kick 6. Reputation Integration — violations lower peer score Hashes preserve the existing non-cryptographic legacy FNV-like wire format.",
    "exports": [
      {
        "name": "collabIntegrityLegacyHash",
        "kind": "function",
        "signature": "collabIntegrityLegacyHash(str)",
        "summary": "Preserve the existing integrity-chain FNV-like string hash. This intentionally keeps the old JavaScript-number multiply path instead of switching to canonical Math.imul FNV-1a, which would change peer digests."
      },
      {
        "name": "createIntegrityVerifier",
        "kind": "function",
        "signature": "createIntegrityVerifier(selfId, config = {})",
        "summary": "Create an integrity verifier."
      },
      {
        "name": "validateIncomingOp",
        "kind": "function",
        "signature": "validateIncomingOp(verifier, peerId, op)",
        "summary": "Validate an incoming op from a peer. Checks: 1. Op type is in the whitelist 2. Op has valid structure 3. Entity position changes are within physics limits"
      },
      {
        "name": "recordOpInChain",
        "kind": "function",
        "signature": "recordOpInChain(verifier, peerId, op)",
        "summary": "Record an op in the peer's hash chain for tamper-evidence. Call after validateIncomingOp succeeds."
      },
      {
        "name": "getChainHead",
        "kind": "function",
        "signature": "getChainHead(verifier, peerId)",
        "summary": "Get the current chain head hash for a peer (for verification exchange)."
      },
      {
        "name": "computeZoneDigest",
        "kind": "function",
        "signature": "computeZoneDigest(verifier, sceneEntities, ecsWorld, getEntityComponent, authoritySet)",
        "summary": "Compute a hash digest of all entity positions in the caller's zone. This is exchanged with peers for consensus-based state verification."
      },
      {
        "name": "buildDigestOp",
        "kind": "function",
        "signature": "buildDigestOp(verifier)",
        "summary": "Build an integrity_digest op to broadcast."
      },
      {
        "name": "onRemoteDigest",
        "kind": "function",
        "signature": "onRemoteDigest(verifier, peerId, digestOp)",
        "summary": "Handle an incoming integrity_digest from a remote peer. Compares against our own digest — mismatch indicates desync or tampering."
      },
      {
        "name": "tickIntegrity",
        "kind": "function",
        "signature": "tickIntegrity(verifier, peerReputation)",
        "summary": "Tick the verifier: decay violations, build trust, compute social influence. Call at ~1Hz."
      },
      {
        "name": "getPeerViolationCount",
        "kind": "function",
        "signature": "getPeerViolationCount(verifier, peerId)",
        "summary": "Get the violation count for a peer."
      },
      {
        "name": "getPeerViolations",
        "kind": "function",
        "signature": "getPeerViolations(verifier, peerId)",
        "summary": "Get recent violations for a peer."
      },
      {
        "name": "getAllViolationSummaries",
        "kind": "function",
        "signature": "getAllViolationSummaries(verifier)",
        "summary": "Get all peer violation summaries."
      },
      {
        "name": "getPeerTier",
        "kind": "function",
        "signature": "getPeerTier(verifier, peerId)",
        "summary": "Get the current tier for a peer."
      },
      {
        "name": "getPeerTrust",
        "kind": "function",
        "signature": "getPeerTrust(verifier, peerId)",
        "summary": "Get trust level for a peer (0.0-1.0)."
      },
      {
        "name": "setPlayMode",
        "kind": "function",
        "signature": "setPlayMode(verifier, isPlayMode)",
        "summary": "Set play mode flag — violations during play mode are weighted less."
      },
      {
        "name": "isPeerThrottled",
        "kind": "function",
        "signature": "isPeerThrottled(verifier, peerId)",
        "summary": "Check if a peer's ops should be throttled (tier >= THROTTLED)."
      },
      {
        "name": "isPeerMuted",
        "kind": "function",
        "signature": "isPeerMuted(verifier, peerId)",
        "summary": "Check if a peer's scene-edit ops should be blocked (tier >= MUTED)."
      },
      {
        "name": "getIntegrityStats",
        "kind": "function",
        "signature": "getIntegrityStats(verifier)",
        "summary": "Get verifier stats."
      },
      {
        "name": "buildCapabilitiesOp",
        "kind": "function",
        "signature": "buildCapabilitiesOp(verifier)",
        "summary": "Build a __capabilities__ op to send to a peer on connect. Contains our supported op types and version string so the remote peer can be lenient about ops we don't recognize (version mismatch, not cheating)."
      },
      {
        "name": "registerPeerCapabilities",
        "kind": "function",
        "signature": "registerPeerCapabilities(verifier, peerId, capabilitiesPayload)",
        "summary": "Register a remote peer's declared capabilities. Called when we receive a __capabilities__ op from them. Unknown ops from peers with declared capabilities that include the op are treated as version mismatches (INFO), not cheating (HIGH)."
      },
      {
        "name": "setLocalVersion",
        "kind": "function",
        "signature": "setLocalVersion(verifier, version)",
        "summary": "Set the local version string for capability comparison."
      },
      {
        "name": "integrityRemovePeer",
        "kind": "function",
        "signature": "integrityRemovePeer(verifier, peerId)",
        "summary": "Remove a peer's tracking state."
      },
      {
        "name": "destroyIntegrityVerifier",
        "kind": "function",
        "signature": "destroyIntegrityVerifier(verifier)",
        "summary": "Destroy verifier state."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabMeshTopology",
    "path": "engine/reference/collab/CollabMeshTopology.md",
    "source": "engine/collab/CollabMeshTopology.js",
    "import": "/engine/collab/CollabMeshTopology.js",
    "sourceHash": "c880f9b5916d185ccf0bfd79c84ed9bc0ab66d0f1a657383cb1379f54168724c",
    "summary": "CollabMeshTopology.js Adaptive mesh topology for scalable P2P collaboration. Problem: Full mesh is O(N²) connections. At 8+ WebRTC peers, browsers struggle with connection management, DTLS overhead, and bandwidth. The old system had a hard limit of 4-8 peers before switching to star relay (single point of failure, bottleneck on host). Solution: Hybrid topology combining proven P2P techniques: 1. PARTIAL MESH — Each peer maintains K direct WebRTC connections to its \"best\" neighbors (lowest latency, highest reputation). K = 3-6 instead of N-1. Scales linearly, not quadratically. 2. GOSSIP PROPAGATION — Ops ripple through the partial mesh. Each peer forwards received ops to its neighbors (minus sender). With K=4, messages reach all 50 peers in ~3 hops (log_K(N)). Deduplication via op fingerprint prevents infinite loops. 3. SUPERNODE ELECTION — High-reputation peers (score ≥ 700) with good uptime and low latency are elected as supernodes. They maintain more connections (up to 2K) and serve as relay hubs between clusters. Inspired by Skype's original P2P architecture. 4. FAST CHANNEL BRIDGING — Same-origin peers use BroadcastChannel (zero cost). They don't count toward K and act as free bridges. Topology modes (auto-selected based on peer count): - FULL_MESH:   ≤6 WebRTC peers → everyone connects to everyone - PARTIAL_MESH: 7-50 peers → K-neighbor gossip mesh - SUPERNODE:    20+ peers → supernodes bridge clusters Inspired by: libp2p (IPFS), Kademlia, Bitcoin gossip, Meshtastic, Skype supernode architecture, and epidemic broadcast protocols. Current policy boundaries: topology callbacks recommend connection changes but EditorCollab does not execute them; topology reports are advisory rather than consensus; gossip envelopes are forwarded before application-level integrity validation; and captured large-room WebRTC traces remain absent.",
    "exports": [
      {
        "name": "createMeshTopology",
        "kind": "function",
        "signature": "createMeshTopology(selfId, config = {})",
        "summary": "Create a topology manager."
      },
      {
        "name": "resolveTopology",
        "kind": "function",
        "signature": "resolveTopology(topo)",
        "summary": "Resolve the current topology mode based on peer count and quality. Called after peer join/leave and during periodic rebalance."
      },
      {
        "name": "topologyAddPeer",
        "kind": "function",
        "signature": "topologyAddPeer(topo, peerId, info = {})",
        "summary": "Register a discovered peer (from signaling)."
      },
      {
        "name": "topologyRemovePeer",
        "kind": "function",
        "signature": "topologyRemovePeer(topo, peerId)",
        "summary": "Remove a peer (disconnected / left)."
      },
      {
        "name": "topologyPeerConnected",
        "kind": "function",
        "signature": "topologyPeerConnected(topo, peerId)",
        "summary": "Mark a peer as connected (WebRTC DataChannel open)."
      },
      {
        "name": "topologyPeerDisconnected",
        "kind": "function",
        "signature": "topologyPeerDisconnected(topo, peerId)",
        "summary": "Mark a peer as disconnected."
      },
      {
        "name": "topologyUpdatePeerMetrics",
        "kind": "function",
        "signature": "topologyUpdatePeerMetrics(topo, peerId, metrics)",
        "summary": "Update a peer's metrics (called from reputation system)."
      },
      {
        "name": "computeIdealNeighbors",
        "kind": "function",
        "signature": "computeIdealNeighbors(topo)",
        "summary": "Compute the ideal neighbor set based on current metrics. Returns { connect: string[], disconnect: string[] } — peers to add/remove."
      },
      {
        "name": "evaluateSupernodeStatus",
        "kind": "function",
        "signature": "evaluateSupernodeStatus(topo, selfScore, selfLatencyAvg, integrityInfo)",
        "summary": "Evaluate whether this peer should be a supernode. Criteria: high reputation, low latency, good uptime, clean integrity, trusted. Peers with violations (throttled/muted/kicked) are immediately disqualified. Trust and social standing boost candidacy score."
      },
      {
        "name": "topologyUpdatePeerIntegrity",
        "kind": "function",
        "signature": "topologyUpdatePeerIntegrity(topo, peerId, info)",
        "summary": "Update a peer's integrity data (called from integrity verifier tick)."
      },
      {
        "name": "evaluateRemoteSupernodes",
        "kind": "function",
        "signature": "evaluateRemoteSupernodes(topo)",
        "summary": "Evaluate all remote supernodes and demote any that have degraded. Called during rebalance tick. Demoted supernodes are unregistered and a topology change is triggered so the mesh re-routes around them."
      },
      {
        "name": "topologyRegisterSupernode",
        "kind": "function",
        "signature": "topologyRegisterSupernode(topo, peerId, announcement = null)",
        "summary": "Register a remote peer as a supernode."
      },
      {
        "name": "topologyUnregisterSupernode",
        "kind": "function",
        "signature": "topologyUnregisterSupernode(topo, peerId)",
        "summary": "Unregister a remote peer as a supernode."
      },
      {
        "name": "topologyApplyInfo",
        "kind": "function",
        "signature": "topologyApplyInfo(topo, fromPeerId, payload)",
        "summary": "Validate and apply one advisory topology_info payload atomically. The report may expand discovery knowledge but never mutates live routes."
      },
      {
        "name": "gossipFingerprint",
        "kind": "function",
        "signature": "gossipFingerprint(op, originPeerId)",
        "summary": "Generate a gossip fingerprint for deduplication. Uses a compact hash of the op to avoid forwarding the same op twice."
      },
      {
        "name": "gossipWrap",
        "kind": "function",
        "signature": "gossipWrap(topo, op)",
        "summary": "Wrap an op for gossip propagation. Adds gossip metadata: origin, TTL, hop count, fingerprint."
      },
      {
        "name": "gossipReceive",
        "kind": "function",
        "signature": "gossipReceive(topo, fromPeerId, op)",
        "summary": "Process an incoming gossip-wrapped op. Returns { forward: boolean, op: Object, targets: string[] } - forward: true if this op should be forwarded to neighbors - op: the op with decremented TTL - targets: peerIds to forward to (excludes sender and origin)"
      },
      {
        "name": "startTopology",
        "kind": "function",
        "signature": "startTopology(topo)",
        "summary": "Start the periodic rebalance timer."
      },
      {
        "name": "stopTopology",
        "kind": "function",
        "signature": "stopTopology(topo)",
        "summary": "Stop the rebalance timer."
      },
      {
        "name": "getTopologyMode",
        "kind": "function",
        "signature": "getTopologyMode(topo)",
        "summary": "Get current topology mode."
      },
      {
        "name": "shouldGossip",
        "kind": "function",
        "signature": "shouldGossip(topo)",
        "summary": "Check if we should use gossip forwarding (partial/supernode mode)."
      },
      {
        "name": "isSupernode",
        "kind": "function",
        "signature": "isSupernode(topo)",
        "summary": "Check if we're a supernode."
      },
      {
        "name": "getNeighborIds",
        "kind": "function",
        "signature": "getNeighborIds(topo)",
        "summary": "Get the list of our current neighbor peerIds."
      },
      {
        "name": "getTopologyStats",
        "kind": "function",
        "signature": "getTopologyStats(topo)",
        "summary": "Get topology stats for UI display."
      },
      {
        "name": "buildSupernodeAnnounce",
        "kind": "function",
        "signature": "buildSupernodeAnnounce(topo)",
        "summary": "Build a supernode announcement op to broadcast. Peers use this to discover supernodes."
      },
      {
        "name": "buildTopologyInfoOp",
        "kind": "function",
        "signature": "buildTopologyInfoOp(topo)",
        "summary": "Build a topology_info op for neighbor exchange. Peers periodically share their neighbor lists so the mesh can discover better paths (inspired by BGP route sharing)."
      },
      {
        "name": "destroyMeshTopology",
        "kind": "function",
        "signature": "destroyMeshTopology(topo)",
        "summary": "Destroy the topology manager."
      },
      {
        "name": "rebalanceTopologyNow",
        "kind": "function",
        "signature": "rebalanceTopologyNow(topo)",
        "summary": "Run one topology rebalance immediately (useful after discovery/metrics changes)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabMessageRouter",
    "path": "engine/reference/collab/CollabMessageRouter.md",
    "source": "engine/collab/CollabMessageRouter.js",
    "import": "/engine/collab/CollabMessageRouter.js",
    "sourceHash": "6c1d8906253108481aa844a5495d602c9894dbfd4fb92f05e3252ae5f48a00c4",
    "summary": "CollabMessageRouter.js Priority-based message orchestration for collab sync. Sits between EditorCollab and CollabCore, providing: - 4 priority lanes (critical → ephemeral) - Bandwidth monitoring via channel.bufferedAmount - Transform coalescing (latest position wins per entity) - Adaptive rate control under backpressure Priority lanes: 0 — Critical:  play_sync, __kick__, snapshot         → immediate, never throttled 1 — Realtime:  play transforms/PBD/grab force        → coalesced or rate-budgeted 2 — Scene:     create, delete, transform, property…  → ordered, rate-budgeted 3 — Ephemeral: sim_heartbeat                          → latest-only, droppable",
    "exports": [
      {
        "name": "createMessageRouter",
        "kind": "function",
        "signature": "createMessageRouter(sendFn, getBufferedAmount)",
        "summary": "Create a message router instance."
      },
      {
        "name": "routerEnqueue",
        "kind": "function",
        "signature": "routerEnqueue(router, op)",
        "summary": "Enqueue an op for prioritized delivery."
      },
      {
        "name": "messageRouterOpReport",
        "kind": "function",
        "signature": "messageRouterOpReport(op)",
        "summary": ""
      },
      {
        "name": "messageRouterBufferedAmountReport",
        "kind": "function",
        "signature": "messageRouterBufferedAmountReport(value)",
        "summary": ""
      },
      {
        "name": "routerFlush",
        "kind": "function",
        "signature": "routerFlush(router)",
        "summary": "Flush all queued ops respecting priority and backpressure. Call once per render frame from the render loop."
      },
      {
        "name": "routerStart",
        "kind": "function",
        "signature": "routerStart(router)",
        "summary": "Start automatic flush timer (call once on init)."
      },
      {
        "name": "routerStop",
        "kind": "function",
        "signature": "routerStop(router)",
        "summary": "Stop the automatic flush timer."
      },
      {
        "name": "getRouterStats",
        "kind": "function",
        "signature": "getRouterStats(router)",
        "summary": "Get router statistics."
      },
      {
        "name": "resetRouter",
        "kind": "function",
        "signature": "resetRouter(router)",
        "summary": "Reset router state (on disconnect/reconnect)."
      },
      {
        "name": "destroyRouter",
        "kind": "function",
        "signature": "destroyRouter(router)",
        "summary": "Destroy router."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabOpQueue",
    "path": "engine/reference/collab/CollabOpQueue.md",
    "source": "engine/collab/CollabOpQueue.js",
    "import": "/engine/collab/CollabOpQueue.js",
    "sourceHash": "464bad375259ccab650a6b5667fa80809efa68fc7f0a1593e412acaf7d353586",
    "summary": "CollabOpQueue.js Op ordering, deduplication, and per-peer sequence gap handling. Each op: { id, peerId, seq, type, payload, ts } Current scope: bounded local ordering for admitted logical peer IDs. Sequence epochs/wrap, retransmission/NACK, cryptographic sender binding, and captured loss/reordering transport traces remain audit gaps.",
    "exports": [
      {
        "name": "collabOpAdmissionReport",
        "kind": "function",
        "signature": "collabOpAdmissionReport(op)",
        "summary": ""
      },
      {
        "name": "createOpQueue",
        "kind": "function",
        "signature": "createOpQueue()",
        "summary": ""
      },
      {
        "name": "enqueueOp",
        "kind": "function",
        "signature": "enqueueOp(queue, op)",
        "summary": "Enqueue an incoming op. Returns array of ops ready to apply."
      },
      {
        "name": "flushPeer",
        "kind": "function",
        "signature": "flushPeer(queue, peerId)",
        "summary": "Flush all held ops for a peer (called on timeout or peer leave)."
      },
      {
        "name": "removePeer",
        "kind": "function",
        "signature": "removePeer(queue, peerId)",
        "summary": "Remove all state for a peer (on disconnect)."
      },
      {
        "name": "tickOpQueue",
        "kind": "function",
        "signature": "tickOpQueue(queue)",
        "summary": "Tick — flush any peers with stale gaps."
      },
      {
        "name": "getOpQueueStats",
        "kind": "function",
        "signature": "getOpQueueStats(queue)",
        "summary": ""
      },
      {
        "name": "clearOpQueue",
        "kind": "function",
        "signature": "clearOpQueue(queue)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabPeerReputation",
    "path": "engine/reference/collab/CollabPeerReputation.md",
    "source": "engine/collab/CollabPeerReputation.js",
    "import": "/engine/collab/CollabPeerReputation.js",
    "sourceHash": "32b6305e19cefa8a0d52b5a95a22678bdc039cb4dc70ff92f6a75ff8b43723d0",
    "summary": "CollabPeerReputation.js Peer quality scoring system — rates each peer 0-1000 based on real-time connection metrics. Inspired by Meshtastic SNR-based prioritization and multi-layer throttling. Score breakdown (1000 total): 250 — Latency (RTT from heartbeat pings) 200 — Packet delivery (sent vs received ratio) 200 — Connection stability (reconnection count) 150 — Session duration (longer = more trusted) 100 — Jitter (variance in latency — lower = better) 100 — Throughput quality (buffered amount / backpressure) Each sub-score is 0.0–1.0, multiplied by its weight. The total is rounded to an integer 0–1000. Scores update every 2 seconds; observed peer scores are shared through signed reports, while the local self-score rides pongs. Inspired by: Meshtastic SNR-based node prioritization, role-based priority, and automatic traffic scaling for large meshes.",
    "exports": [
      {
        "name": "createPeerReputation",
        "kind": "function",
        "signature": "createPeerReputation(selfId)",
        "summary": "Create a reputation tracker for all peers."
      },
      {
        "name": "reputationAddPeer",
        "kind": "function",
        "signature": "reputationAddPeer(rep, peerId)",
        "summary": "Register a new peer."
      },
      {
        "name": "reputationRemovePeer",
        "kind": "function",
        "signature": "reputationRemovePeer(rep, peerId)",
        "summary": "Remove a peer."
      },
      {
        "name": "buildPingOps",
        "kind": "function",
        "signature": "buildPingOps(rep)",
        "summary": "Build ping ops to send to all peers. Call at PING_INTERVAL_MS."
      },
      {
        "name": "buildPongOp",
        "kind": "function",
        "signature": "buildPongOp(pingOp, selfScore)",
        "summary": "Build a pong response to an incoming ping."
      },
      {
        "name": "onPongReceived",
        "kind": "function",
        "signature": "onPongReceived(rep, peerId, pongOp)",
        "summary": "Handle an incoming pong from a peer. Records RTT and jitter."
      },
      {
        "name": "recordBufferedAmount",
        "kind": "function",
        "signature": "recordBufferedAmount(rep, peerId, bufferedAmount)",
        "summary": "Record the current bufferedAmount for a peer's data channel. Call this periodically (e.g., every presence tick)."
      },
      {
        "name": "tickReputation",
        "kind": "function",
        "signature": "tickReputation(rep)",
        "summary": "Recompute scores for all peers. Call at ~0.5Hz."
      },
      {
        "name": "getPeerScore",
        "kind": "function",
        "signature": "getPeerScore(rep, peerId)",
        "summary": "Get the reputation score for a specific peer (0-1000)."
      },
      {
        "name": "getPeerMetrics",
        "kind": "function",
        "signature": "getPeerMetrics(rep, peerId)",
        "summary": "Get full metrics for a specific peer (for debug / stats display)."
      },
      {
        "name": "getSelfScore",
        "kind": "function",
        "signature": "getSelfScore(rep)",
        "summary": "Get the local peer's self-score. This remains the bootstrap score until a self-observation consensus path exists."
      },
      {
        "name": "getAllPeerScores",
        "kind": "function",
        "signature": "getAllPeerScores(rep)",
        "summary": "Get all peer scores as an array of { peerId, score, subScores, avgRtt, avgJitter }."
      },
      {
        "name": "getScoreColor",
        "kind": "function",
        "signature": "getScoreColor(score)",
        "summary": "Get the score color for rendering (green → yellow → red gradient)."
      },
      {
        "name": "getScoreLabel",
        "kind": "function",
        "signature": "getScoreLabel(score)",
        "summary": "Get a human-readable label for a score range."
      },
      {
        "name": "destroyPeerReputation",
        "kind": "function",
        "signature": "destroyPeerReputation(rep)",
        "summary": "Destroy reputation state."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabPlaySync",
    "path": "engine/reference/collab/CollabPlaySync.md",
    "source": "engine/collab/CollabPlaySync.js",
    "import": "/engine/collab/CollabPlaySync.js",
    "sourceHash": "6eb749d8695913b4ab10b9ef5f968b4936eccedf3882bee9048918785538ec92",
    "summary": "CollabPlaySync.js Synchronizes play/pause/stop across all connected peers. Broadcasts a shared determinism seed so all simulations run identically. Sends heartbeat hashes every 1s for divergence detection.",
    "exports": [
      {
        "name": "createPlaySync",
        "kind": "function",
        "signature": "createPlaySync(config = {})",
        "summary": ""
      },
      {
        "name": "playSyncCommandReport",
        "kind": "function",
        "signature": "playSyncCommandReport(payload)",
        "summary": ""
      },
      {
        "name": "playSyncTickReport",
        "kind": "function",
        "signature": "playSyncTickReport(simTime)",
        "summary": ""
      },
      {
        "name": "playSyncHeartbeatReport",
        "kind": "function",
        "signature": "playSyncHeartbeatReport(payload, currentSeed)",
        "summary": ""
      },
      {
        "name": "playSyncCorrectionTargetReport",
        "kind": "function",
        "signature": "playSyncCorrectionTargetReport(authoritySimTime, localSimTime)",
        "summary": ""
      },
      {
        "name": "playSyncAccumulatorCorrectionReport",
        "kind": "function",
        "signature": "playSyncAccumulatorCorrectionReport(targetSimTime, localSimTime, correctionRate)",
        "summary": ""
      },
      {
        "name": "playSyncTimelineReport",
        "kind": "function",
        "signature": "playSyncTimelineReport(editor)",
        "summary": ""
      },
      {
        "name": "broadcastPlay",
        "kind": "function",
        "signature": "broadcastPlay(playSync, seed)",
        "summary": "Broadcast a play command to all peers. Called when local user hits Play. seed: optional 32-bit int. Generated here if not provided."
      },
      {
        "name": "broadcastPause",
        "kind": "function",
        "signature": "broadcastPause(playSync)",
        "summary": "Broadcast a pause command to all peers."
      },
      {
        "name": "broadcastStop",
        "kind": "function",
        "signature": "broadcastStop(playSync)",
        "summary": "Broadcast a stop command to all peers."
      },
      {
        "name": "onRemotePlayCommand",
        "kind": "function",
        "signature": "onRemotePlayCommand(playSync, op)",
        "summary": "Handle an incoming play_sync op from a remote peer. Returns the action taken: 'play' | 'pause' | 'stop' | null"
      },
      {
        "name": "onRemoteHeartbeat",
        "kind": "function",
        "signature": "onRemoteHeartbeat(playSync, op)",
        "summary": "Handle an incoming sim_heartbeat op from a remote peer."
      },
      {
        "name": "exportTimeline",
        "kind": "function",
        "signature": "exportTimeline(editor, filename)",
        "summary": "Export local simHistory as a downloadable JSON file."
      },
      {
        "name": "isRemotePlay",
        "kind": "function",
        "signature": "isRemotePlay(playSync)",
        "summary": "Check if the current play command was triggered remotely."
      },
      {
        "name": "getCurrentSeed",
        "kind": "function",
        "signature": "getCurrentSeed(playSync)",
        "summary": "Get the current determinism seed."
      },
      {
        "name": "destroyPlaySync",
        "kind": "function",
        "signature": "destroyPlaySync(playSync)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabPresence",
    "path": "engine/reference/collab/CollabPresence.md",
    "source": "engine/collab/CollabPresence.js",
    "import": "/engine/collab/CollabPresence.js",
    "sourceHash": "0d1e5fa0cea40f53608044211caccc806623fdc8eb1bef6060d43111bf8052c2",
    "summary": "CollabPresence.js Tracks all peers' camera positions, usernames, selections, and colors. Presence packet: { v:1, u:username, c:[x,y,z], t:[tx,ty,tz], s:[entityIds] } Current scope: lossy latest-state presence. Authenticated presence identity, sequence/freshness fields, cross-system stale-peer cleanup, interpolation ownership, and captured churn traces remain audit gaps.",
    "exports": [
      {
        "name": "presencePacketReport",
        "kind": "function",
        "signature": "presencePacketReport(packet)",
        "summary": ""
      },
      {
        "name": "createPresenceState",
        "kind": "function",
        "signature": "createPresenceState()",
        "summary": ""
      },
      {
        "name": "buildLocalPresencePacket",
        "kind": "function",
        "signature": "buildLocalPresencePacket(username, cameraPos, cameraTarget, selectionIds, simTime, mode, userColor)",
        "summary": "Build a presence packet from local state to broadcast."
      },
      {
        "name": "applyRemotePresence",
        "kind": "function",
        "signature": "applyRemotePresence(state, peerId, packet)",
        "summary": "Apply a remote presence packet for a peer."
      },
      {
        "name": "addPeer",
        "kind": "function",
        "signature": "addPeer(state, peerId, username)",
        "summary": "Register a peer joining (before first presence packet)."
      },
      {
        "name": "removePresence",
        "kind": "function",
        "signature": "removePresence(state, peerId)",
        "summary": "Remove a peer (on disconnect)."
      },
      {
        "name": "getPresenceList",
        "kind": "function",
        "signature": "getPresenceList(state)",
        "summary": "Get list of all known peers with their presence data."
      },
      {
        "name": "getPeerColor",
        "kind": "function",
        "signature": "getPeerColor(state, peerId)",
        "summary": "Get color for a specific peer."
      },
      {
        "name": "pruneStalePresence",
        "kind": "function",
        "signature": "pruneStalePresence(state)",
        "summary": "Prune peers not seen for > 30s."
      },
      {
        "name": "clearPresenceState",
        "kind": "function",
        "signature": "clearPresenceState(state)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabSceneSync",
    "path": "engine/reference/collab/CollabSceneSync.md",
    "source": "engine/collab/CollabSceneSync.js",
    "import": "/engine/collab/CollabSceneSync.js",
    "sourceHash": "dd76eba5a0a28b7e5892801777c540f1461c0c493abf4b9becd1c540ce1b31d9",
    "summary": "Convert an EditorHistory action into a collab op payload.",
    "exports": [
      {
        "name": "collabSceneEntityIdReport",
        "kind": "function",
        "signature": "collabSceneEntityIdReport(value)",
        "summary": ""
      },
      {
        "name": "collabSceneValueReport",
        "kind": "function",
        "signature": "collabSceneValueReport(value, options = {})",
        "summary": ""
      },
      {
        "name": "actionToOp",
        "kind": "function",
        "signature": "actionToOp(action, selfId, seq)",
        "summary": "Convert an EditorHistory action into a collab op payload."
      },
      {
        "name": "opToAction",
        "kind": "function",
        "signature": "opToAction(op)",
        "summary": "Convert a collab op back into an EditorHistory-compatible action."
      },
      {
        "name": "collabSceneOpReport",
        "kind": "function",
        "signature": "collabSceneOpReport(op)",
        "summary": ""
      },
      {
        "name": "serializeSnapshot",
        "kind": "function",
        "signature": "serializeSnapshot(editor)",
        "summary": "Serialize the full scene state into a compact snapshot for new joiners."
      },
      {
        "name": "collabSceneSnapshotReport",
        "kind": "function",
        "signature": "collabSceneSnapshotReport(snapshot)",
        "summary": ""
      },
      {
        "name": "applySnapshot",
        "kind": "function",
        "signature": "applySnapshot(editor, snapshot)",
        "summary": "Apply a full scene snapshot to the editor (for new joiners). Clears existing scene and rebuilds from snapshot."
      },
      {
        "name": "registerCollabSceneEntity",
        "kind": "function",
        "signature": "registerCollabSceneEntity(world, entityId)",
        "summary": ""
      },
      {
        "name": "destroyCollabSceneEntity",
        "kind": "function",
        "signature": "destroyCollabSceneEntity(world, entityId)",
        "summary": ""
      },
      {
        "name": "injectSceneSyncDeps",
        "kind": "function",
        "signature": "injectSceneSyncDeps(deps)",
        "summary": ""
      },
      {
        "name": "COLLAB_SCENE_LIMITS",
        "kind": "constant",
        "signature": "COLLAB_SCENE_LIMITS",
        "summary": "CollabSceneSync.js Serializes EditorHistory actions <-> collab ops. Handles full scene snapshots for new joiners."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabSignal",
    "path": "engine/reference/collab/CollabSignal.md",
    "source": "engine/collab/CollabSignal.js",
    "import": "/engine/collab/CollabSignal.js",
    "sourceHash": "90937dd124e88f85d474265f27f31aa077aaf62e9430dc13079e25814d15e381",
    "summary": "CollabSignal.js 4-tier signaling abstraction for WebRTC peer discovery. Tier 1: BroadcastChannel     — same machine, instant, offline Tier 2: SharedWorker         — same machine multi-tab relay Tier 4: Particle Masterserver — PRIMARY cross-internet signaling relay. Pinned V2 endpoints use the shared ParticleNetworkDaemon; legacy V1 is accepted only when that endpoint explicitly opts in. Uses the same room/route-scoped HELLO/OFFER/ANSWER/CANDIDATE dispatch as Tiers 1/2 (see _handleSignalMessage) rather than a binary swarm protocol — the Masterserver just fans opaque JSON out to every other session attached to the same locally-derived opaque route. This is server-mediated, so it works across NATs/networks without any third-party dependency. Server-configured via localStorage 'os.network.masterServers' (same list the Particle Network control panel app manages); falls back to the pinned production bootstrap if unset. Tier 3: BitTorrent WSS       — EXPLICIT FALLBACK ONLY. It remains off by default and can run only after the user opts in. A V2 integrity failure always fails closed and suppresses legacy/BitTorrent downgrade. Tiers 1/2/4 start immediately; Tier 3 is deferred/conditional (see above). First tier to form a WebRTC connection to a given peer wins — after that, signaling is no longer needed for that peer.",
    "exports": [
      {
        "name": "createSignalChannel",
        "kind": "function",
        "signature": "createSignalChannel(config)",
        "summary": "Create a signal channel. config: { projectId, selfId, username, onOffer, onAnswer, onCandidate, onPeerJoin, onPeerLeave } Negotiation callbacks receive (peerId, payload, offerId). Generic signaling is deliberately strict: every OFFER/ANSWER/CANDIDATE is addressed to one peer and correlated to one offer generation. The WebTorrent tier retains its independent tracker offer_id lifecycle and does not use these envelopes."
      },
      {
        "name": "fetchTurnCredentials",
        "kind": "function",
        "signature": "async fetchTurnCredentials(channel)",
        "summary": "Fetch TURN relay credentials from Cloudflare Pages Function. ONLY called as a fallback when STUN-only P2P connection fails. TURN relays ALL traffic through Cloudflare = expensive. Avoid unless necessary."
      },
      {
        "name": "startSignaling",
        "kind": "function",
        "signature": "startSignaling(channel)",
        "summary": "Start all 3 signaling tiers simultaneously. Uses FREE STUN servers only — no Cloudflare data cost. TURN relay is only fetched on-demand when a direct P2P connection fails."
      },
      {
        "name": "forceAnnounce",
        "kind": "function",
        "signature": "forceAnnounce(channel)",
        "summary": "Force an immediate discovery re-announce across all active tiers, bypassing the periodic announce timers. Used by app-layer \"Connect now\" so a known contact is found without waiting for the next BC hello / tracker announce cycle."
      },
      {
        "name": "collabSignalTextReport",
        "kind": "function",
        "signature": "collabSignalTextReport(value, maxBytes, options = {})",
        "summary": ""
      },
      {
        "name": "collabSignalPayloadReport",
        "kind": "function",
        "signature": "collabSignalPayloadReport(payload)",
        "summary": ""
      },
      {
        "name": "collabIceServerListReport",
        "kind": "function",
        "signature": "collabIceServerListReport(value)",
        "summary": ""
      },
      {
        "name": "sendOffer",
        "kind": "function",
        "signature": "sendOffer(channel, peerId, sdpOffer, offerId)",
        "summary": "Send one SDP offer to one discovered peer on the generic signaling tiers."
      },
      {
        "name": "broadcastOffer",
        "kind": "function",
        "signature": "broadcastOffer(channel, peerId, sdpOffer, offerId)",
        "summary": "Retained as a strict compatibility symbol. Untargeted offers are unsafe in a multi-peer room, so callers must now supply the target and offer generation."
      },
      {
        "name": "sendAnswer",
        "kind": "function",
        "signature": "sendAnswer(channel, peerId, sdpAnswer, offerId)",
        "summary": "Send an SDP answer to a specific peer."
      },
      {
        "name": "sendCandidate",
        "kind": "function",
        "signature": "sendCandidate(channel, peerId, candidate, offerId)",
        "summary": "Send an ICE candidate to a specific peer."
      },
      {
        "name": "destroySignalChannel",
        "kind": "function",
        "signature": "destroySignalChannel(channel)",
        "summary": "Destroy all signaling resources."
      },
      {
        "name": "collabSignalReconnectPlanReport",
        "kind": "function",
        "signature": "collabSignalReconnectPlanReport(attempt)",
        "summary": ""
      },
      {
        "name": "collabSignalOfferPlanReport",
        "kind": "function",
        "signature": "collabSignalOfferPlanReport(pendingCount, inFlightCount = 0)",
        "summary": ""
      },
      {
        "name": "collabSignalPeerCapacityReport",
        "kind": "function",
        "signature": "collabSignalPeerCapacityReport(connectionCount)",
        "summary": ""
      },
      {
        "name": "collabSignalTrackerIdHex",
        "kind": "function",
        "signature": "collabSignalTrackerIdHex(value)",
        "summary": ""
      },
      {
        "name": "collabSignalTrackerBinaryReport",
        "kind": "function",
        "signature": "collabSignalTrackerBinaryReport(value)",
        "summary": ""
      },
      {
        "name": "collabSignalHelloReport",
        "kind": "function",
        "signature": "collabSignalHelloReport(message, selfId = '')",
        "summary": ""
      },
      {
        "name": "collabSignalPeerHelloReport",
        "kind": "function",
        "signature": "collabSignalPeerHelloReport(message, selfId = '')",
        "summary": ""
      },
      {
        "name": "isBitTorrentFallbackEnabled",
        "kind": "function",
        "signature": "isBitTorrentFallbackEnabled()",
        "summary": ""
      },
      {
        "name": "setBitTorrentFallbackEnabled",
        "kind": "function",
        "signature": "setBitTorrentFallbackEnabled(enabled)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabSpatialAuthority",
    "path": "engine/reference/collab/CollabSpatialAuthority.md",
    "source": "engine/collab/CollabSpatialAuthority.js",
    "import": "/engine/collab/CollabSpatialAuthority.js",
    "sourceHash": "860fb2f6d3390806d1c5869b77a2acdff2047fdab9a3ca1e94dc56067456a023",
    "summary": "CollabSpatialAuthority.js Distributed spatial authority for collaborative multiplayer. Each peer owns a circular \"zone\" centered on their camera position. Entities within a peer's zone are simulated locally by that peer. Entities outside all zones are dormant (no physics, no sync). Authority resolution (Roblox + Gaffer hybrid): - Nearest peer within zone radius wins (automatic proximity) - 20% hysteresis prevents ping-pong at boundaries - Higher-priority claims (SELECTED, GRABBED) override proximity - Sequence numbers resolve conflicts (Gaffer-style) Interest management (Photon-style): - Interest area = zoneRadius × interestMultiplier (default 1.3×) - Only send state for entities you're authoritative over - Only receive state for entities in your interest area Inspired by: Star Citizen dynamic server meshing, Roblox Network Ownership, Photon Fusion Shared Authority + AoI grid, Gaffer on Games authority scheme.",
    "exports": [
      {
        "name": "createSpatialAuthority",
        "kind": "function",
        "signature": "createSpatialAuthority(selfId, config)",
        "summary": "Create a spatial authority state."
      },
      {
        "name": "computeZoneRadius",
        "kind": "function",
        "signature": "computeZoneRadius(sceneBounds)",
        "summary": "Auto-compute zone radius from scene bounds."
      },
      {
        "name": "setZoneRadius",
        "kind": "function",
        "signature": "setZoneRadius(auth, radius)",
        "summary": "Update the zone radius (e.g., after scene bounds change or manual override). Rebuilds the spatial grid with the new cell size."
      },
      {
        "name": "updatePeerPosition",
        "kind": "function",
        "signature": "updatePeerPosition(auth, peerId, position)",
        "summary": "Update a peer's camera position (called from presence packets)."
      },
      {
        "name": "removePeer",
        "kind": "function",
        "signature": "removePeer(auth, peerId)",
        "summary": "Remove a peer (on disconnect)."
      },
      {
        "name": "updateEntityPosition",
        "kind": "function",
        "signature": "updateEntityPosition(auth, entityId, x, z)",
        "summary": "Update an entity's position in the spatial grid. Call this when entity transforms change (from physics step or remote sync)."
      },
      {
        "name": "removeEntity",
        "kind": "function",
        "signature": "removeEntity(auth, entityId)",
        "summary": "Remove an entity from the spatial grid (on entity delete)."
      },
      {
        "name": "resolveAuthority",
        "kind": "function",
        "signature": "resolveAuthority(auth, entityId, x, z)",
        "summary": "Resolve authority for a single entity based on proximity. Applies hysteresis: current owner keeps it unless new peer is 20% closer."
      },
      {
        "name": "getMyAuthoritySet",
        "kind": "function",
        "signature": "getMyAuthoritySet(auth)",
        "summary": "Get all entity IDs that the local peer is authoritative over. Uses the auto-authority map (resolved at RESOLVE_INTERVAL_MS)."
      },
      {
        "name": "getMyInterestSet",
        "kind": "function",
        "signature": "getMyInterestSet(auth)",
        "summary": "Get all entity IDs within the local peer's interest area (zone × interestMultiplier)."
      },
      {
        "name": "getPeerInterestSet",
        "kind": "function",
        "signature": "getPeerInterestSet(auth, peerId)",
        "summary": "Get the interest set for a specific peer (used by relay host for filtering)."
      },
      {
        "name": "isInMyZone",
        "kind": "function",
        "signature": "isInMyZone(auth, x, z)",
        "summary": "Check if an entity position is within the local peer's authority zone."
      },
      {
        "name": "isInBufferZone",
        "kind": "function",
        "signature": "isInBufferZone(auth, x, z)",
        "summary": "Check if an entity position is within the buffer zone (boundary ring)."
      },
      {
        "name": "isDormant",
        "kind": "function",
        "signature": "isDormant(auth, entityId)",
        "summary": "Check if an entity is dormant (outside all peer zones)."
      },
      {
        "name": "tickSpatialAuthority",
        "kind": "function",
        "signature": "tickSpatialAuthority(auth)",
        "summary": "Periodic tick: re-resolve auto-authority for all tracked entities. Call this at ~2Hz from the collab loop (or faster if needed)."
      },
      {
        "name": "destroySpatialAuthority",
        "kind": "function",
        "signature": "destroySpatialAuthority(auth)",
        "summary": "Clear all state (on leave room / exit play mode)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabTransformSync",
    "path": "engine/reference/collab/CollabTransformSync.md",
    "source": "engine/collab/CollabTransformSync.js",
    "import": "/engine/collab/CollabTransformSync.js",
    "sourceHash": "216ba966056a93e4b512526e3d187a0124073efbc78bbfb3370d9a9db66bfb55",
    "summary": "CollabTransformSync.js Broadcasts entity transform updates during play mode so grabbed/moved objects are visible on all peer screens in real time. Authority model: - The peer who presses Play becomes the physics authority. - Authority broadcasts ALL entity transforms at ~10Hz. - Non-authority peers receive and apply transforms, skipping local physics. - Grabbed entity transforms are always sent at ~15Hz by anyone.",
    "exports": [
      {
        "name": "createTransformSync",
        "kind": "function",
        "signature": "createTransformSync()",
        "summary": "Create a transform sync state object."
      },
      {
        "name": "trackLocalGrab",
        "kind": "function",
        "signature": "trackLocalGrab(syncState, entityId)",
        "summary": "Mark an entity as being actively grabbed/dragged by the local user."
      },
      {
        "name": "untrackLocalGrab",
        "kind": "function",
        "signature": "untrackLocalGrab(syncState, entityId)",
        "summary": "Unmark an entity when released."
      },
      {
        "name": "buildPlayTransformOp",
        "kind": "function",
        "signature": "buildPlayTransformOp(syncState, ecsWorld, getEntityComponent)",
        "summary": "Build a play_transforms op for grabbed entities only. Returns null if nothing to broadcast or if throttled."
      },
      {
        "name": "buildFullPlayTransformOp",
        "kind": "function",
        "signature": "buildFullPlayTransformOp(syncState, ecsWorld, getEntityComponent, sceneEntities, entityAuthority, spatialAuthoritySet)",
        "summary": "Build a play_transforms op for ALL scene entities. Only called by the physics authority at ~10Hz."
      },
      {
        "name": "buildPbdStateOp",
        "kind": "function",
        "signature": "buildPbdStateOp(syncState, physicsSimulations, spatialAuthoritySet)",
        "summary": "Build a play_pbd_state op that snapshots PBD particle positions. Any peer running physics simulations broadcasts at ~30Hz for real-time rope sync. Only includes sims with >0 particles. Full float precision for smooth visual sync."
      },
      {
        "name": "applyRemotePbdState",
        "kind": "function",
        "signature": "applyRemotePbdState(op, physicsSimulations)",
        "summary": "Apply incoming PBD particle state from the authority (host). Non-authority clients do NOT run their own PBD solver for these sims — they just apply the received positions directly. Tags each sim with `_remoteAuthority = true` so stepPhysicsSimulations skips the local solver for it (prevents local physics from fighting the authoritative positions)."
      },
      {
        "name": "applyRemotePlayTransforms",
        "kind": "function",
        "signature": "applyRemotePlayTransforms(op, peerId, ecsWorld, getEntityComponent, setEntityComponent, syncState)",
        "summary": "Apply incoming play_transforms from a remote peer. Pushes transforms into the interpolation buffer, measures jitter for adaptive delay, and detects \"nuke\" events (massive state changes) for instant snap."
      },
      {
        "name": "interpolateRemoteEntities",
        "kind": "function",
        "signature": "interpolateRemoteEntities(syncState, ecsWorld, getEntityComponent, localDragEntityId, entityAuthority)",
        "summary": "Interpolate buffered remote transforms and write to ECS + physics. Called every render frame by non-authority peers. Uses adaptive render delay that auto-adjusts based on measured packet jitter. On LAN/good connections: as low as ~20ms. On jittery links: up to 150ms. Slowly tightens delay when stable; instantly widens on late arrivals."
      },
      {
        "name": "getInterpDelay",
        "kind": "function",
        "signature": "getInterpDelay(syncState)",
        "summary": "Get the current adaptive interpolation delay (ms) for diagnostics."
      },
      {
        "name": "getRemoteGrabGlows",
        "kind": "function",
        "signature": "getRemoteGrabGlows(syncState, presenceState)",
        "summary": "Get set of entity IDs currently being grabbed by remote peers. Returns Map<entityId, peerColor> for glow rendering."
      },
      {
        "name": "destroyTransformSync",
        "kind": "function",
        "signature": "destroyTransformSync(syncState)",
        "summary": "Destroy / reset transform sync state."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/CollabZoneHandoff",
    "path": "engine/reference/collab/CollabZoneHandoff.md",
    "source": "engine/collab/CollabZoneHandoff.js",
    "import": "/engine/collab/CollabZoneHandoff.js",
    "sourceHash": "caac89e016c76f2c87a451b784dd443a9e63790cbca94496b87c57362ea04d6f",
    "summary": "CollabZoneHandoff.js Smooth authority transfer protocol when entities cross spatial zone boundaries. Buffer zone (15% of zone radius): - Entity enters buffer → both peers simulate, current owner broadcasts state - Entity crosses buffer center → handoff op with full state snapshot - 500ms hysteresis prevents rapid back-and-forth Handoff op: { type: 'zone_handoff', payload: { entityId, fromPeer, toPeer, seq, state } } - state: { pos, rot, vel, angVel, pbdParticles? } - seq: authority sequence number (higher always wins, Gaffer-style) Assembly awareness: if entity A is constrained to entity B, both get handed off together to the same peer. Fallback: if fromPeer disconnects mid-handoff, nearest remaining peer takes ownership immediately. Inspired by: Roblox \"buffer zone\" (red outline), Star Citizen entity graph authority transfers, Gaffer on Games ownership sequence numbers.",
    "exports": [
      {
        "name": "createZoneHandoff",
        "kind": "function",
        "signature": "createZoneHandoff()",
        "summary": "Create a zone handoff manager."
      },
      {
        "name": "initiateHandoff",
        "kind": "function",
        "signature": "initiateHandoff(handoff, entityId, fromPeer, toPeer)",
        "summary": "Start a pending handoff for an entity (called when spatial authority detects a zone change). Does NOT commit yet — waits for hysteresis period."
      },
      {
        "name": "cancelHandoff",
        "kind": "function",
        "signature": "cancelHandoff(handoff, entityId)",
        "summary": "Cancel a pending handoff (entity moved back to original zone)."
      },
      {
        "name": "buildHandoffOp",
        "kind": "function",
        "signature": "buildHandoffOp(entityId, fromPeer, toPeer, seq, entityState)",
        "summary": "Build a zone_handoff op with full entity state for network transmission. Called by the outgoing peer when handoff commits."
      },
      {
        "name": "captureEntityState",
        "kind": "function",
        "signature": "captureEntityState(ecsWorld, getEntityComponent, entityId, physicsSimulations)",
        "summary": "Capture entity state for the handoff snapshot."
      },
      {
        "name": "onRemoteHandoffOp",
        "kind": "function",
        "signature": "onRemoteHandoffOp(handoff, op, selfId, ecsWorld, setEntityComponent, getEntityComponent, physicsSimulations)",
        "summary": "Handle an incoming zone_handoff op from a remote peer. Applies the state snapshot if the sequence number is higher than our last."
      },
      {
        "name": "tickZoneHandoff",
        "kind": "function",
        "signature": "tickZoneHandoff(handoff, selfId)",
        "summary": "Tick pending handoffs. Commits any that have passed the hysteresis period. Prunes stale pending handoffs."
      },
      {
        "name": "onHandoffPeerDisconnect",
        "kind": "function",
        "signature": "onHandoffPeerDisconnect(handoff, peerId)",
        "summary": "Handle peer disconnect: cancel pending handoffs involving this peer and reassign any entities that were mid-handoff."
      },
      {
        "name": "onHandoffComplete",
        "kind": "function",
        "signature": "onHandoffComplete(handoff, callback)",
        "summary": "Set callback for handoff completion."
      },
      {
        "name": "destroyZoneHandoff",
        "kind": "function",
        "signature": "destroyZoneHandoff(handoff)",
        "summary": "Destroy handoff state."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/PhysicsGrab",
    "path": "engine/reference/collab/PhysicsGrab.md",
    "source": "engine/collab/PhysicsGrab.js",
    "import": "/engine/collab/PhysicsGrab.js",
    "sourceHash": "d25759edb1b6bb5b572e474544a3e82c3cceb9cec69b37c60e058374a3f72c2c",
    "summary": "PhysicsGrab.js Mass-proportional spring-damper (PD controller) physics grab system. How other games do it: - Garry's Mod Physgun:     pure spring-damper, body stays dynamic - Half-Life 2 gravity gun: spring + angular correction torque - Boneworks/BONELAB VR:    PD controller with grip strength cap - UE4 Physics Handle:      D6 joint linear drive to target pos This implementation uses a **frequency / damping-ratio** parameterization (ref: Orange Duck \"Spring-It-On\", Gaffer on Games \"Spring Physics\"): omega = 2π × frequency         (natural frequency, rad/s) kp    = omega² × mass           (spring stiffness, N/m)  ← mass-proportional kd    = 2 × ζ × omega × mass    (damping, N·s/m)       ← mass-proportional With ζ = 1.0 (critical damping), the object reaches the target as fast as possible with zero overshoot regardless of mass. A 0.5 kg ball and a 200 kg crate both converge at the same rate. Multiple players grabbing the same object creates competing spring forces that resolve naturally through physics — tug-of-war emerges with no special-case code needed. Fatigue model (Boneworks-inspired): - Holding heavy objects drains fatigue over time - Effective strength = baseStrength * (0.2 + 0.8 * fatigue) - Minimum 20% strength even when exhausted - Fatigue recovers quickly when not holding Grip break: - Progressive grip weakening beyond GRIP_WEAKEN_DIST - Full slip at GRIP_BREAK_DIST Scope: point-target PD forces for dynamic rigid bodies. Constraint/joint drives, rotational grabs, continuous collision detection, solver substep tuning, and captured multi-peer PhysX traces remain outside this module.",
    "exports": [
      {
        "name": "physicsGrabPeerIdReport",
        "kind": "function",
        "signature": "physicsGrabPeerIdReport(peerId)",
        "summary": ""
      },
      {
        "name": "physicsGrabVectorReport",
        "kind": "function",
        "signature": "physicsGrabVectorReport(value, kind = 'position')",
        "summary": ""
      },
      {
        "name": "physicsGrabForceReport",
        "kind": "function",
        "signature": "physicsGrabForceReport(objPos, objVel, targetPos, strength, mass)",
        "summary": ""
      },
      {
        "name": "grabForceOperationReport",
        "kind": "function",
        "signature": "grabForceOperationReport(op, transportPeerId = null)",
        "summary": ""
      },
      {
        "name": "admitRemoteGrabForce",
        "kind": "function",
        "signature": "admitRemoteGrabForce(remoteGrabs, op, transportPeerId, receivedAtMs = Date.now()",
        "summary": ""
      },
      {
        "name": "pruneRemoteGrabForces",
        "kind": "function",
        "signature": "pruneRemoteGrabForces(remoteGrabs, nowMs = Date.now()",
        "summary": ""
      },
      {
        "name": "removeRemoteGrabPeer",
        "kind": "function",
        "signature": "removeRemoteGrabPeer(remoteGrabs, peerId)",
        "summary": ""
      },
      {
        "name": "computeGrabForce",
        "kind": "function",
        "signature": "computeGrabForce(objPos, objVel, targetPos, strength, mass)",
        "summary": "Compute mass-proportional spring-damper grab force. Uses frequency/damping-ratio parameterization so the convergence rate is identical regardless of object mass. Critical damping (ζ=1) means the object reaches the cursor as fast as possible with zero overshoot."
      },
      {
        "name": "tickFatigue",
        "kind": "function",
        "signature": "tickFatigue(fatigue, loadRatio, dt)",
        "summary": "Update fatigue based on load this frame."
      },
      {
        "name": "effectiveStrength",
        "kind": "function",
        "signature": "effectiveStrength(baseStrength, fatigue)",
        "summary": "Effective strength considering fatigue. Even fully exhausted players retain 20% strength (adrenaline)."
      },
      {
        "name": "canGrab",
        "kind": "function",
        "signature": "canGrab(mass, strength)",
        "summary": "Check if an object is too heavy to pick up at all. Returns false if mass > 4x strength (can't apply meaningful force)."
      },
      {
        "name": "createLocalGrab",
        "kind": "function",
        "signature": "createLocalGrab(entityId, targetPos, baseStrength)",
        "summary": "Create a local grab state for the player's own grab."
      },
      {
        "name": "buildGrabForceOp",
        "kind": "function",
        "signature": "buildGrabForceOp(peerId, entityId, targetPos, strength, fatigue)",
        "summary": "Build a play_grab_force op to broadcast our cursor target to peers. Other peers apply the same spring force, creating tug-of-war physics."
      },
      {
        "name": "applyGrabForcesToActor",
        "kind": "function",
        "signature": "applyGrabForcesToActor(actor, PhysX, objPos, objVel, grabs, mass)",
        "summary": "Apply all active grab forces to a PhysX actor. Call this BEFORE stepPhysicsWorld each frame."
      },
      {
        "name": "GRAB_FREQUENCY",
        "kind": "constant",
        "signature": "GRAB_FREQUENCY",
        "summary": ""
      },
      {
        "name": "GRAB_DAMPING_RATIO",
        "kind": "constant",
        "signature": "GRAB_DAMPING_RATIO",
        "summary": ""
      },
      {
        "name": "GRAB_MASS_DEFAULT",
        "kind": "constant",
        "signature": "GRAB_MASS_DEFAULT",
        "summary": ""
      },
      {
        "name": "PLAYER_STRENGTH",
        "kind": "constant",
        "signature": "PLAYER_STRENGTH",
        "summary": ""
      },
      {
        "name": "GRIP_WEAKEN_DIST",
        "kind": "constant",
        "signature": "GRIP_WEAKEN_DIST",
        "summary": ""
      },
      {
        "name": "GRIP_BREAK_DIST",
        "kind": "constant",
        "signature": "GRIP_BREAK_DIST",
        "summary": ""
      },
      {
        "name": "FATIGUE_RATE",
        "kind": "constant",
        "signature": "FATIGUE_RATE",
        "summary": ""
      },
      {
        "name": "FATIGUE_RECOVERY",
        "kind": "constant",
        "signature": "FATIGUE_RECOVERY",
        "summary": ""
      },
      {
        "name": "STALE_GRAB_MS",
        "kind": "constant",
        "signature": "STALE_GRAB_MS",
        "summary": ""
      },
      {
        "name": "PHYSICS_GRAB_LIMITS",
        "kind": "constant",
        "signature": "PHYSICS_GRAB_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/SpatialHashGrid",
    "path": "engine/reference/collab/SpatialHashGrid.md",
    "source": "engine/collab/SpatialHashGrid.js",
    "import": "/engine/collab/SpatialHashGrid.js",
    "sourceHash": "48103be11b8c0976da457398bb8b69ad0b35ac67a91ce8bd159474f6312ed1ad",
    "summary": "SpatialHashGrid.js O(1) spatial lookup grid for interest management and zone queries. Uses a 2D grid (XZ plane) where each cell stores a Set of entity IDs. Supports radius and AABB queries without iterating all entities. Inspired by: Photon Fusion AoI grid, SpatialOS worker partitioning.",
    "exports": [
      {
        "name": "spatialHashGridIdReport",
        "kind": "function",
        "signature": "spatialHashGridIdReport(id)",
        "summary": ""
      },
      {
        "name": "spatialHashGridPointReport",
        "kind": "function",
        "signature": "spatialHashGridPointReport(grid, x, z)",
        "summary": ""
      },
      {
        "name": "createSpatialHashGrid",
        "kind": "function",
        "signature": "createSpatialHashGrid(cellSize, options = {})",
        "summary": "Create a spatial hash grid."
      },
      {
        "name": "gridInsert",
        "kind": "function",
        "signature": "gridInsert(grid, id, x, z)",
        "summary": "Insert an entity into the grid."
      },
      {
        "name": "gridRemove",
        "kind": "function",
        "signature": "gridRemove(grid, id)",
        "summary": "Remove an entity from the grid."
      },
      {
        "name": "gridClear",
        "kind": "function",
        "signature": "gridClear(grid)",
        "summary": "Clear all entities from the grid."
      },
      {
        "name": "gridQueryRadius",
        "kind": "function",
        "signature": "gridQueryRadius(grid, x, z, radius)",
        "summary": "Query all entity IDs within a radius of a point (XZ plane). Returns entities whose grid position is within the radius."
      },
      {
        "name": "gridQueryRect",
        "kind": "function",
        "signature": "gridQueryRect(grid, minX, minZ, maxX, maxZ)",
        "summary": "Query all entity IDs within an axis-aligned bounding box (XZ plane)."
      },
      {
        "name": "gridGetPosition",
        "kind": "function",
        "signature": "gridGetPosition(grid, id)",
        "summary": "Get the stored position for an entity."
      },
      {
        "name": "gridSize",
        "kind": "function",
        "signature": "gridSize(grid)",
        "summary": "Get the total number of entities in the grid."
      },
      {
        "name": "gridGetStats",
        "kind": "function",
        "signature": "gridGetStats(grid)",
        "summary": ""
      },
      {
        "name": "destroySpatialHashGrid",
        "kind": "function",
        "signature": "destroySpatialHashGrid(grid)",
        "summary": ""
      },
      {
        "name": "SPATIAL_HASH_GRID_LIMITS",
        "kind": "constant",
        "signature": "SPATIAL_HASH_GRID_LIMITS",
        "summary": ""
      },
      {
        "name": "gridUpdate",
        "kind": "constant",
        "signature": "gridUpdate",
        "summary": "Update an entity's position. Alias for insert (handles cell migration)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "collab/index",
    "path": "engine/reference/collab/index.md",
    "source": "engine/collab/index.js",
    "import": "/engine/collab/index.js",
    "sourceHash": "8356c3e7e65211508b9b2cd943001692fdb5438f1743fd1b89962bf096fb44d6",
    "summary": "engine/collab/index.js Barrel export for all collab modules.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "compat/bootloader",
    "path": "engine/reference/compat/bootloader.md",
    "source": "engine/compat/bootloader.js",
    "import": "/engine/compat/bootloader.js",
    "sourceHash": "e460c4298b2126ff9b7159ba3430559e202519909287cbfeb24349105f69a647",
    "summary": "bootloader.js — the Engine Compatibility Bootloader entry point. Boot flow (Phases 1-2 implemented here; 3-7 plug in via ctx hooks): 1. load source              (source-loader) 2. parse HTML               (html-ingestor) 3. static probe → profile   (probe-scanner + profile-builder) 4. merge with cached profile(profile-cache) 5. [validate]               (ctx.validate — schema-registry, Phase 3) 6. [heal]                   (ctx.heal — healing-pipeline, Phase 4) 7. build scoped realm + heal DOM + scope CSS   (runtime-realm) 8. [interpose]              (ctx.interpose — interposers, Phase 5) 9. execute guest scripts 10. cache profile, install error recovery, return an app handle The bootloader is engine-agnostic: pass a `ctx` with optional { storage, profileCache, gpu, scheduler, validate, heal, interpose, onError }.",
    "exports": [
      {
        "name": "CompatBootloader",
        "kind": "class",
        "signature": "class CompatBootloader",
        "summary": ""
      },
      {
        "name": "CompatApp",
        "kind": "class",
        "signature": "class CompatApp",
        "summary": "A booted guest app handle."
      },
      {
        "name": "bootExternalApp",
        "kind": "function",
        "signature": "async bootExternalApp(options, ctx = {})",
        "summary": "Convenience one-shot boot without holding a CompatBootloader instance."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/css-healer",
    "path": "engine/reference/compat/css-healer.md",
    "source": "engine/compat/css-healer.js",
    "import": "/engine/compat/css-healer.js",
    "sourceHash": "01b6bd528da890518e15151d8978952b531d5f50ab7933d881fa52195271804c",
    "summary": "css-healer.js — scope a guest app's CSS so it cannot style the OS shell. External WebGPU apps routinely style `html, body, canvas, *, :root` globally. `scopeCss(css, scope)` rewrites every style rule so it only applies inside the guest's realm container (e.g. `[data-engine-app=\"tempolux\"]`): html, body            →  [data-engine-app=\"id\"] canvas                →  [data-engine-app=\"id\"] canvas *                     →  [data-engine-app=\"id\"] * .hud .row             →  [data-engine-app=\"id\"] .hud .row At-rules are handled correctly: @media/@supports/@container/@layer/@scope have their inner rules scoped; @keyframes/@font-face/@page/@property/@import are left intact (their \"selectors\" are not element selectors).",
    "exports": [
      {
        "name": "scopeCss",
        "kind": "function",
        "signature": "scopeCss(css, scope)",
        "summary": "Scope a full stylesheet string to `scope` (a selector like `[data-engine-app=\"id\"]`)."
      },
      {
        "name": "scopeSelectorFor",
        "kind": "function",
        "signature": "scopeSelectorFor(appId)",
        "summary": "Convenience: the canonical realm scope selector for an app id."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/dom-healer",
    "path": "engine/reference/compat/dom-healer.md",
    "source": "engine/compat/dom-healer.js",
    "import": "/engine/compat/dom-healer.js",
    "sourceHash": "dcfe566bd11c2d23bfc4ec9d6856d25440183733d39c2c7844e58516d651a170",
    "summary": "dom-healer.js — create DOM elements a guest app requires but that are missing. Many single-file WebGPU apps assume `<canvas id=\"c\">`, an overlay `#ov`, a HUD `#hud`, etc. already exist. The compatibility profile lists those in `profile.dom.requiredElements`; this healer ensures each exists inside the guest's realm container BEFORE the guest's scripts run, so `getElementById` and friends resolve instead of throwing.",
    "exports": [
      {
        "name": "healDom",
        "kind": "function",
        "signature": "healDom(rootEl, profile)",
        "summary": "Ensure every `profile.dom.requiredElements` entry exists under `rootEl`."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/error-recovery",
    "path": "engine/reference/compat/error-recovery.md",
    "source": "engine/compat/error-recovery.js",
    "import": "/engine/compat/error-recovery.js",
    "sourceHash": "70f015036138359a5c47082e4a88948d483d652173a949302d0703fa84123578",
    "summary": "error-recovery.js — keep a crashing guest from taking down the OS. Installs scoped error capture and drives a recovery ladder when a guest throws repeatedly within a short window: 1. tolerate isolated errors (already recorded), 2. reboot the realm (fresh parse + heal + run), 3. reboot in SAFE MODE (network off, shader-heal off, GPU limits clamped), 4. render an in-realm error panel with a manual Restart — OS stays alive. Errors counted toward escalation: runtime-error, promise-error, script, gpu-device-lost. Benign infos (warnings, clamps, recovery notices) are ignored.",
    "exports": [
      {
        "name": "installErrorRecovery",
        "kind": "function",
        "signature": "installErrorRecovery(app, { win = (typeof window !== 'undefined' ? window : null)",
        "summary": ""
      },
      {
        "name": "makeSafeProfile",
        "kind": "function",
        "signature": "makeSafeProfile(profile)",
        "summary": "A safer variant of a profile used for safe-mode reboots."
      },
      {
        "name": "renderErrorPanel",
        "kind": "function",
        "signature": "renderErrorPanel(app, info)",
        "summary": "Render a friendly, non-fatal error panel inside the guest's realm container."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/healers/asset-healer",
    "path": "engine/reference/compat/healers/asset-healer.md",
    "source": "engine/compat/healers/asset-healer.js",
    "import": "/engine/compat/healers/asset-healer.js",
    "sourceHash": "9f8e5ca3da39a6ab8597cc30cf94afc8fcd010522272d586c384d57481859aac",
    "summary": "healers/asset-healer.js — resolve bundled relative asset references. A multi-file guest references `<img src=\"logo.png\">`, `<source src=\"clip.webm\">`, etc. Those relative URLs won't resolve inside the realm, so this pass rewrites any reference present in the package `files` map to a blob URL. The created URLs are recorded on `model._assetBlobs` so the realm revokes them on destroy.",
    "exports": [
      {
        "name": "healAssets",
        "kind": "function",
        "signature": "healAssets({ model, files }, report)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/healers/error-healer",
    "path": "engine/reference/compat/healers/error-healer.md",
    "source": "engine/compat/healers/error-healer.js",
    "import": "/engine/compat/healers/error-healer.js",
    "sourceHash": "0ce5fe8f4b04a57f8f11d501775dac536ae779f264b8d02f3eb8a74c4ca27814",
    "summary": "healers/error-healer.js — enable scoped error capture for the guest. Marks the profile so the bootloader installs error/unhandledrejection capture (Phase 7's recovery layer reads `healing.captureErrors`). Kept as its own pass so the recovery policy can grow independently.",
    "exports": [
      {
        "name": "healErrorPolicy",
        "kind": "function",
        "signature": "healErrorPolicy({ profile }, report)",
        "summary": "healers/error-healer.js — enable scoped error capture for the guest. Marks the profile so the bootloader installs error/unhandledrejection capture (Phase 7's recovery layer reads `healing.captureErrors`). Kept as its own pass so the recovery policy can grow independently."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/healers/gpu-healer",
    "path": "engine/reference/compat/healers/gpu-healer.md",
    "source": "engine/compat/healers/gpu-healer.js",
    "import": "/engine/compat/healers/gpu-healer.js",
    "sourceHash": "1545fccc75ed5bdb85c0cc17879bc6a0164cf24cd639d9541aa55b0819d13b1b",
    "summary": "healers/gpu-healer.js — normalise GPU-related profile fields before boot. Sets a sensible `gpu.presentation` and ensures the runtime healing flags the interposer relies on (`clampGpuLimits`, `wrapQueueSubmit`) are populated. The actual limit-clamping happens at runtime in `interposers/gpu.js`.",
    "exports": [
      {
        "name": "healGpu",
        "kind": "function",
        "signature": "healGpu({ profile }, report)",
        "summary": "healers/gpu-healer.js — normalise GPU-related profile fields before boot. Sets a sensible `gpu.presentation` and ensures the runtime healing flags the interposer relies on (`clampGpuLimits`, `wrapQueueSubmit`) are populated. The actual limit-clamping happens at runtime in `interposers/gpu.js`."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/healers/lifecycle-healer",
    "path": "engine/reference/compat/healers/lifecycle-healer.md",
    "source": "engine/compat/healers/lifecycle-healer.js",
    "import": "/engine/compat/healers/lifecycle-healer.js",
    "sourceHash": "bfa3c1da7ec852c0aeaadcaf0218bc3619cc5a43be07f47a97727c9d3c7c0e81",
    "summary": "healers/lifecycle-healer.js — ensure lifecycle healing flags are populated. These flags drive the interposers and the recovery layer (Phase 7): whether to recover on GPU context loss, namespace storage, and route downloads safely.",
    "exports": [
      {
        "name": "healLifecycle",
        "kind": "function",
        "signature": "healLifecycle({ profile }, report)",
        "summary": "healers/lifecycle-healer.js — ensure lifecycle healing flags are populated. These flags drive the interposers and the recovery layer (Phase 7): whether to recover on GPU context loss, namespace storage, and route downloads safely."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/healers/shader-healer",
    "path": "engine/reference/compat/healers/shader-healer.md",
    "source": "engine/compat/healers/shader-healer.js",
    "import": "/engine/compat/healers/shader-healer.js",
    "sourceHash": "4856cc4ceda0f129133a2a511d0ddd1a6c0c6fca6e26d2ac98834c1f355fdc26",
    "summary": "healers/shader-healer.js — migrate deprecated WGSL attribute syntax. Older WGSL used `[[stage(...)]]` / `[[group(x), binding(y)]]` / `[[location(n)]]` / `[[builtin(...)]]`, which modern WebGPU rejects. This pass rewrites those tokens to the current `@stage` / `@group @binding` / `@location` / `@builtin` forms inside inline guest scripts. The patterns are WGSL-specific and do not occur in normal JS, so the rewrite is safe. Gated by `profile.healing.healShaders`.",
    "exports": [
      {
        "name": "healShaders",
        "kind": "function",
        "signature": "healShaders({ model, profile }, report)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/healing-pipeline",
    "path": "engine/reference/compat/healing-pipeline.md",
    "source": "engine/compat/healing-pipeline.js",
    "import": "/engine/compat/healing-pipeline.js",
    "sourceHash": "0ae6ff990638f031e7dc45c5372d59be67e3073a70e6449747e389ddf6ff5fae",
    "summary": "healing-pipeline.js — ordered pre-boot healing passes over a guest. Runs after probing and before the realm is built, mutating the parsed model and the profile in place. Ordered per the compat spec: DOM/CSS scoping happen in the realm itself; here we do the model/profile-level passes: GPU flags → lifecycle flags → error policy → asset URL rewrite → WGSL repair. Each pass is isolated (a throwing healer never aborts the others) and appends to a human-readable report returned to the caller.",
    "exports": [
      {
        "name": "runHealingPipeline",
        "kind": "function",
        "signature": "runHealingPipeline(ctxObj)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/html-ingestor",
    "path": "engine/reference/compat/html-ingestor.md",
    "source": "engine/compat/html-ingestor.js",
    "import": "/engine/compat/html-ingestor.js",
    "sourceHash": "f46ae40ea0c0f80615b2d9083b13fb4f1ac04de9babed7d02f4181ff7c4c15fa",
    "summary": "html-ingestor.js — parse a guest HTML document into a structured model. Uses DOMParser (scripts parsed this way are INERT — they will not execute on insertion), so we can safely inspect and relocate the DOM, then hand the extracted scripts to the runtime realm to execute in controlled order. The returned model: { doc,                       // the parsed Document (inert) title, scripts: [{ module, src, code, async, defer }],   // document order styles:  [{ inline, href, code }],                // document order links:   [{ rel, href }], canvases:[{ id, width, height }], assets:  string[],         // referenced asset URLs (img/src, etc.) }",
    "exports": [
      {
        "name": "parseHTML",
        "kind": "function",
        "signature": "parseHTML(html, baseUrl = null)",
        "summary": "html-ingestor.js — parse a guest HTML document into a structured model. Uses DOMParser (scripts parsed this way are INERT — they will not execute on insertion), so we can safely inspect and relocate the DOM, then hand the extracted scripts to the runtime realm to execute in controlled order. The returned model: { doc,                       // the parsed Document (inert) title, scripts: [{ module, src, code, async, defer }],   // document order styles:  [{ inline, href, code }],                // document order links:   [{ rel, href }], canvases:[{ id, width, height }], assets:  string[],         // referenced asset URLs (img/src, etc.) }"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/iframe-realm",
    "path": "engine/reference/compat/iframe-realm.md",
    "source": "engine/compat/iframe-realm.js",
    "import": "/engine/compat/iframe-realm.js",
    "sourceHash": "4624e30e3c859591e7425baa3bc98a3f7ffc07425a8541dae8030721f4721304",
    "summary": "iframe-realm.js — a hard-isolation execution root for UNTRUSTED guest apps. Unlike RuntimeRealm (light-DOM, shared OS origin — best-effort isolation), this runs the guest inside a `sandbox=\"allow-scripts\"` iframe WITHOUT `allow-same-origin`, so it gets a unique opaque origin and cannot touch the OS document, cookies, localStorage/IndexedDB, or kernel globals. It is a real security boundary suitable for community/unverified packages and live remote sites. The guest document is assembled self-contained (bundled JS → `data:` modules with imports rewritten; bundled CSS/assets → inline/`data:` URLs) because parent-origin blob URLs are unreachable from the opaque-origin iframe. A tiny injected bridge routes window.open()/anchor navigations up to the host via postMessage (the host opens them in the OS Browser). Trade-offs vs RuntimeRealm: no shared WebGPU device (the iframe requests its own), and no direct syscall access (a postMessage RPC would be needed). Used only when isolation is requested.",
    "exports": [
      {
        "name": "IframeRealm",
        "kind": "class",
        "signature": "class IframeRealm",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/index",
    "path": "engine/reference/compat/index.md",
    "source": "engine/compat/index.js",
    "import": "/engine/compat/index.js",
    "sourceHash": "c8382c030e2e0e979d5f3713c020d8c08bd9b56eebb0a62e1d5b463c6745546b",
    "summary": "engine/compat/index.js — the Engine Compatibility namespace. `createCompat(ctx)` returns the `engine.compat` API used across the OS: await engine.compat.boot({ id, source, mount, mode, permissions }); `ctx` wires the compat layer to the host engine/kernel (all optional): storage   — kernel.storageManager (profile/snapshot persistence) gpu       — { getOrCreateSharedDevice(adapter, desc), format, healDeviceDescriptor } scheduler — engine frame scheduler (RAF interposition, Phase 5/6) validate  — async (profile) => { valid, errors }      (Phase 3) heal      — async ({ model, profile, files, appId })  (Phase 4) interpose — async ({ realm, profile, app, ctx })      (Phase 5) onError   — (info) => void Phases 3-7 register their hooks onto the same ctx, so this factory stays the single, stable entry point as the pipeline grows.",
    "exports": [
      {
        "name": "createCompat",
        "kind": "function",
        "signature": "createCompat(ctx = {})",
        "summary": ""
      },
      {
        "name": "COMPAT_VERSION",
        "kind": "constant",
        "signature": "COMPAT_VERSION",
        "summary": ""
      },
      {
        "name": "CompatBootloader",
        "kind": "re-export",
        "signature": "CompatBootloader",
        "summary": ""
      },
      {
        "name": "ProfileCache",
        "kind": "re-export",
        "signature": "ProfileCache",
        "summary": ""
      },
      {
        "name": "bootExternalApp",
        "kind": "re-export",
        "signature": "bootExternalApp",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/interposers/fetch",
    "path": "engine/reference/compat/interposers/fetch.md",
    "source": "engine/compat/interposers/fetch.js",
    "import": "/engine/compat/interposers/fetch.js",
    "sourceHash": "ea590fee8f7eaff993be16af3cdf72c0711099d8f5ee9308060a52b4577cb098",
    "summary": "interposers/fetch.js — default-deny network egress for guest apps + serving bundled package files. Resolution order: 1. If the ref resolves to a bundled package file (e.g. `fetch('data.json')` or a `.wasm`), serve it directly from the file map — relative paths in a blob-loaded module would otherwise 404 against the OS origin. 2. Same-origin, relative, `blob:` and `data:` requests pass through. 3. Cross-origin requests are blocked unless the profile granted `network.fetch` — preventing a wrapped third-party app from phoning home.",
    "exports": [
      {
        "name": "makeFetchShim",
        "kind": "function",
        "signature": "makeFetchShim({ profile, onError, realm = null } = {})",
        "summary": "interposers/fetch.js — default-deny network egress for guest apps + serving bundled package files. Resolution order: 1. If the ref resolves to a bundled package file (e.g. `fetch('data.json')` or a `.wasm`), serve it directly from the file map — relative paths in a blob-loaded module would otherwise 404 against the OS origin. 2. Same-origin, relative, `blob:` and `data:` requests pass through. 3. Cross-origin requests are blocked unless the profile granted `network.fetch` — preventing a wrapped third-party app from phoning home."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/interposers/file-export",
    "path": "engine/reference/compat/interposers/file-export.md",
    "source": "engine/compat/interposers/file-export.js",
    "import": "/engine/compat/interposers/file-export.js",
    "sourceHash": "2ea761a2705a5efb2fac2a10376b35a37b48edf150097f270799a2b46ae4102b",
    "summary": "interposers/file-export.js — safe blob/download handling for a guest realm. Guests export files via `URL.createObjectURL(blob)` + an `<a download>` click (or `showSaveFilePicker`). Two problems: created object URLs leak if never revoked, and downloads are invisible to the OS. This shim wraps `URL` so every `createObjectURL` is tracked (and revoked on realm destroy) and each export is counted into the app's metrics — without blocking the legitimate download.",
    "exports": [
      {
        "name": "makeUrlShim",
        "kind": "function",
        "signature": "makeUrlShim(realm, { metrics, onExport } = {})",
        "summary": "interposers/file-export.js — safe blob/download handling for a guest realm. Guests export files via `URL.createObjectURL(blob)` + an `<a download>` click (or `showSaveFilePicker`). Two problems: created object URLs leak if never revoked, and downloads are invisible to the OS. This shim wraps `URL` so every `createObjectURL` is tracked (and revoked on realm destroy) and each export is counted into the app's metrics — without blocking the legitimate download."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/interposers/gpu",
    "path": "engine/reference/compat/interposers/gpu.md",
    "source": "engine/compat/interposers/gpu.js",
    "import": "/engine/compat/interposers/gpu.js",
    "sourceHash": "5b254642ab7e1f06c6cfac748ece27c5ebbcb0e886ebf1f7551e2612d79dcb63",
    "summary": "interposers/gpu.js — wrap `navigator.gpu` for a guest realm. The guest keeps using the real WebGPU implementation, but through a shim that: • clamps `requiredLimits` to what the adapter actually supports (a very common crash cause when an app hard-codes limits from a beefier GPU), • drops unsupported `requiredFeatures` instead of throwing, • counts `queue.submit` calls into the app's metrics, • reports device-loss (so the recovery layer can react) without spamming on intentional `destroy()`. It deliberately does NOT share the kernel's device — each guest gets its own device so it cannot corrupt OS GPU state. Sharing/surface hand-off is Phase 6.",
    "exports": [
      {
        "name": "makeGpuShim",
        "kind": "function",
        "signature": "makeGpuShim({ metrics, onError } = {})",
        "summary": "interposers/gpu.js — wrap `navigator.gpu` for a guest realm. The guest keeps using the real WebGPU implementation, but through a shim that: • clamps `requiredLimits` to what the adapter actually supports (a very common crash cause when an app hard-codes limits from a beefier GPU), • drops unsupported `requiredFeatures` instead of throwing, • counts `queue.submit` calls into the app's metrics, • reports device-loss (so the recovery layer can react) without spamming on intentional `destroy()`. It deliberately does NOT share the kernel's device — each guest gets its own device so it cannot corrupt OS GPU state. Sharing/surface hand-off is Phase 6."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/interposers/index",
    "path": "engine/reference/compat/interposers/index.md",
    "source": "engine/compat/interposers/index.js",
    "import": "/engine/compat/interposers/index.js",
    "sourceHash": "faf80bed633d2ed7b8ecf644a18f35522720c039adfd9414f3291602b887ca82",
    "summary": "interposers/index.js — install per-realm API shims for a guest app. Guests run in the shared window, so we cannot replace globals process-wide without breaking the OS. Instead we: 1. build a per-realm `context` of shims (gpu/raf/storage/fetch), 2. register it at `globalThis.__engineRealms.get(appId)`, 3. return a code `transform` that prepends a tiny prelude to each guest script which LEXICALLY SHADOWS the relevant globals with the shims. Module scripts: the prelude's top-level `const`s shadow the globals within the module's own scope. Classic scripts: wrapped in an IIFE (only when there's a single classic script, to avoid breaking cross-script global sharing). Which globals are shadowed is driven by `profile.uses`, minimising both collision risk and overhead.",
    "exports": [
      {
        "name": "installInterposers",
        "kind": "function",
        "signature": "installInterposers({ realm, profile, ctx, app } = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/interposers/navigation",
    "path": "engine/reference/compat/interposers/navigation.md",
    "source": "engine/compat/interposers/navigation.js",
    "import": "/engine/compat/interposers/navigation.js",
    "sourceHash": "bf074fc0524d3cebcd874c6fb17dc033eb33be4fd1b999d83eb605f21628b430",
    "summary": "navigation.js — keep a guest's \"open a new window\" / external navigation INSIDE the OS instead of spawning a real browser popup or navigating the whole OS page away. Guests run in the shared OS document (light DOM, not an iframe), so an unhandled `<a href>` click or `window.open()` would either pop a real browser window or unload the entire OS. We intercept both and hand the URL to the host via `onOpenWindow(url, info)` — the host decides where it goes (default: the in-OS Browser app). Two mechanisms: 1. DOM click-capture on the realm container — anchors that open a new window (target=_blank/_new) or point off-origin are cancelled and routed. Always installed (cheap, prevents the OS-unload footgun). 2. Lexically-shadowed `window.open` / `open()` / `location` — routes JS-driven popups and redirects. Only bound when the probe detected such usage (`profile.uses.windowOpen`), to minimise shadowing blast radius.",
    "exports": [
      {
        "name": "makeOpenShim",
        "kind": "function",
        "signature": "makeOpenShim({ onOpenWindow, onError } = {})",
        "summary": "Replacement for window.open / open(): route the URL, return a harmless stub."
      },
      {
        "name": "makeWindowProxy",
        "kind": "function",
        "signature": "makeWindowProxy(openShim, { onOpenWindow, onError } = {})",
        "summary": "Proxy over the real window that only overrides `open` and `location` writes."
      },
      {
        "name": "makeLocationProxy",
        "kind": "function",
        "signature": "makeLocationProxy({ onOpenWindow, onError } = {})",
        "summary": "Proxy over location: reads pass through; href=/assign/replace are routed."
      },
      {
        "name": "installNavCapture",
        "kind": "function",
        "signature": "installNavCapture(realm, { onOpenWindow, onError } = {})",
        "summary": "Capture-phase click handler on the realm container. Cancels + routes anchor navigations that would open a new window or leave the OS origin. Returns a cleanup function (also registered on the realm)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/interposers/raf",
    "path": "engine/reference/compat/interposers/raf.md",
    "source": "engine/compat/interposers/raf.js",
    "import": "/engine/compat/interposers/raf.js",
    "sourceHash": "da4600bd5f756bafbdf8dfa83f9c09d876e31e315dce785d12d1c4b2d3cd7056",
    "summary": "interposers/raf.js — managed requestAnimationFrame for a guest realm. Guest render loops are the #1 resource leak when an app's window closes: the raw `requestAnimationFrame` loop keeps running forever. This shim tracks every pending frame and cancels them all on `realm.destroy()`, so closing a guest window actually stops its GPU work. Errors thrown inside a frame callback are reported instead of silently killing the loop's owner.",
    "exports": [
      {
        "name": "makeRafShim",
        "kind": "function",
        "signature": "makeRafShim(realm)",
        "summary": "interposers/raf.js — managed requestAnimationFrame for a guest realm. Guest render loops are the #1 resource leak when an app's window closes: the raw `requestAnimationFrame` loop keeps running forever. This shim tracks every pending frame and cancels them all on `realm.destroy()`, so closing a guest window actually stops its GPU work. Errors thrown inside a frame callback are reported instead of silently killing the loop's owner."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/interposers/storage",
    "path": "engine/reference/compat/interposers/storage.md",
    "source": "engine/compat/interposers/storage.js",
    "import": "/engine/compat/interposers/storage.js",
    "sourceHash": "9c9ea4a132b652585799460a4b72d7fec8b650f3eca3dadf2394ff229ff1f6f7",
    "summary": "interposers/storage.js — per-app namespaced localStorage / sessionStorage. Guests freely use `localStorage.foo = x` and `localStorage.getItem(...)`. Left unscoped they would collide with each other and with the OS. This shim transparently prefixes every key with `compat:<appId>:` and supports both the Storage method API and direct property access (via a Proxy). Falls back to an in-memory store when Web Storage is unavailable.",
    "exports": [
      {
        "name": "makeStorageShim",
        "kind": "function",
        "signature": "makeStorageShim(appId, backing)",
        "summary": "interposers/storage.js — per-app namespaced localStorage / sessionStorage. Guests freely use `localStorage.foo = x` and `localStorage.getItem(...)`. Left unscoped they would collide with each other and with the OS. This shim transparently prefixes every key with `compat:<appId>:` and supports both the Storage method API and direct property access (via a Proxy). Falls back to an in-memory store when Web Storage is unavailable."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/interposers/worker",
    "path": "engine/reference/compat/interposers/worker.md",
    "source": "engine/compat/interposers/worker.js",
    "import": "/engine/compat/interposers/worker.js",
    "sourceHash": "3f1f3ef4f83374f126b7356605a6ca16047d5e0d376f04bc756137dcd363d7f4",
    "summary": "interposers/worker.js — resolve guest Worker(url) references to bundled blobs. A guest's `new Worker('worker.js')` references a path relative to its original document, which won't resolve once the guest runs from blob URLs in the OS realm. This shim rewrites a relative/bundled worker URL to its pre-linked module blob (imports already rewritten + shims applied), or a blob of the bundled file. Remote/absolute URLs pass through unchanged. Returns a Worker subclass, or null if Worker is unavailable.",
    "exports": [
      {
        "name": "makeWorkerShim",
        "kind": "function",
        "signature": "makeWorkerShim(realm, RealWorker = (typeof Worker !== 'undefined' ? Worker : null)",
        "summary": "interposers/worker.js — resolve guest Worker(url) references to bundled blobs. A guest's `new Worker('worker.js')` references a path relative to its original document, which won't resolve once the guest runs from blob URLs in the OS realm. This shim rewrites a relative/bundled worker URL to its pre-linked module blob (imports already rewritten + shims applied), or a blob of the bundled file. Remote/absolute URLs pass through unchanged. Returns a Worker subclass, or null if Worker is unavailable."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/module-linker",
    "path": "engine/reference/compat/module-linker.md",
    "source": "engine/compat/module-linker.js",
    "import": "/engine/compat/module-linker.js",
    "sourceHash": "2f754c26d47d2b3487d332881a529533aaa54cba76c84d74f501b472f19d7ce9",
    "summary": "module-linker.js — turn an in-memory file map into runnable blob-URL modules. Loading an ES module from a `blob:` URL loses its path context, so relative imports (`import './a.js'`) and `import.meta.url`-relative resolution break (the blob has no directory). Following the es-module-shims technique, we rewrite every relative / bundled import specifier in each JS module to the `blob:` URL of its resolved target (created in dependency order), optionally apply a code transform (the interposer prelude / shader healing), and return a `path → blobURL` map plus a resolver for inline-module imports. Bare specifiers (`import 'three'`) may be resolved by the caller-provided import resolver (import map / CDN fallback). Absolute/remote URLs are left untouched.",
    "exports": [
      {
        "name": "buildModuleBlobs",
        "kind": "function",
        "signature": "buildModuleBlobs({ files, transform = null, onWarn = null, resolveBare = null, resolveExternal = null, urlKind = 'blob' } = {})",
        "summary": "Build blob-URL modules for every bundled JS file, with relative imports rewritten to reference each other's blob URLs."
      },
      {
        "name": "buildImportResolver",
        "kind": "function",
        "signature": "buildImportResolver(profile)",
        "summary": "Build a resolver for BARE import specifiers (`three`, `@scope/pkg`, subpaths) from a compat profile. Resolution order: 1. exact match in `profile.imports.map` 2. longest trailing-slash prefix match (`three/` → base) in the map 3. CDN fallback `<cdn><spec>` when `profile.healing.cdnImports !== false` (default CDN https://esm.sh/, overridable via `profile.imports.cdn`) Returns null when nothing matches (the import is left unresolved)."
      },
      {
        "name": "isBareSpecifier",
        "kind": "function",
        "signature": "isBareSpecifier(spec)",
        "summary": "A bare specifier: not relative (./ ../ /), not an absolute/remote URL."
      },
      {
        "name": "isRelativeSpecifier",
        "kind": "function",
        "signature": "isRelativeSpecifier(spec)",
        "summary": ""
      },
      {
        "name": "isPackageSpecifier",
        "kind": "function",
        "signature": "isPackageSpecifier(spec)",
        "summary": ""
      },
      {
        "name": "discoverSpecs",
        "kind": "function",
        "signature": "discoverSpecs(code)",
        "summary": "Collect every (string-literal) import specifier from module code."
      },
      {
        "name": "rewriteSpecs",
        "kind": "function",
        "signature": "rewriteSpecs(code, urlFor)",
        "summary": "Replace import specifiers using `urlFor(spec)`. When it returns a falsy value the original specifier is kept (bare/remote/cyclic)."
      },
      {
        "name": "resolveSpec",
        "kind": "function",
        "signature": "resolveSpec(spec, importerRel, files)",
        "summary": "Resolve an import specifier to a bundled file path, or null when it is bare (no leading ./ ../ or /) or absolute/remote. Tries the literal path, then `.js`/`.mjs`, then `/index.js`."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/probe-scanner",
    "path": "engine/reference/compat/probe-scanner.md",
    "source": "engine/compat/probe-scanner.js",
    "import": "/engine/compat/probe-scanner.js",
    "sourceHash": "df6195017e8b826e0b546145ded842d28b11007a7625f33f82530dc577e943d7",
    "summary": "probe-scanner.js — statically detect what a guest app uses. Combines the parsed DOM model with a regex scan of all script source to infer the `uses`, `dom`, and `gpu` sections of a compatibility profile. This is a heuristic pass (static, no execution) — the healing + interposition layers refine it at runtime and the profile cache promotes it once it boots.",
    "exports": [
      {
        "name": "scanSource",
        "kind": "function",
        "signature": "scanSource(model, files = null)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/profile-builder",
    "path": "engine/reference/compat/profile-builder.md",
    "source": "engine/compat/profile-builder.js",
    "import": "/engine/compat/profile-builder.js",
    "sourceHash": "949a73707c4b3c1503a3e4d070431f69b10a23fd52da48d8fa6c8f309a69ed45",
    "summary": "Build a full profile from a static scan result.",
    "exports": [
      {
        "name": "buildProfile",
        "kind": "function",
        "signature": "buildProfile(id, scan, opts = {})",
        "summary": "Build a full profile from a static scan result."
      },
      {
        "name": "mergeProfiles",
        "kind": "function",
        "signature": "mergeProfiles(saved, fresh)",
        "summary": "Merge a saved profile with a freshly scanned one. Saved healing/permissions decisions win (they were promoted as working); newly detected requirements and `uses`/`gpu` flags are unioned in."
      },
      {
        "name": "profilePermissionList",
        "kind": "function",
        "signature": "profilePermissionList(profile)",
        "summary": "Map a profile to a kernel/AppRegistry permission list (best-effort)."
      },
      {
        "name": "sha256Hex",
        "kind": "function",
        "signature": "async sha256Hex(str)",
        "summary": "SHA-256 hex of a string (used for source/version hashing)."
      },
      {
        "name": "PROFILE_FORMAT",
        "kind": "constant",
        "signature": "PROFILE_FORMAT",
        "summary": "profile-builder.js — assemble & merge compatibility profiles. A profile is the durable description of what a guest app needs and how to heal it. The static scanner produces a fresh profile; the cache may hold a saved one from a previous version. `mergeProfiles` reuses known-good healing decisions and layers in newly detected requirements."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/profile-cache",
    "path": "engine/reference/compat/profile-cache.md",
    "source": "engine/compat/profile-cache.js",
    "import": "/engine/compat/profile-cache.js",
    "sourceHash": "5eff703e5cac636ee24742b0e8f076dc3ba81e51900585c1c3426308a45d9ba5",
    "summary": "profile-cache.js — persist & version compatibility profiles. Storage layout (via the kernel StorageManager facade): /os/compat/profiles/{id}.json        ← active (stable or testing) profile /os/compat/index.json                ← { [id]: { knownVersions: [...] } } /os/compat/snapshots/{id}/{ts}.json  ← runtime snapshots (Phase 7) If no storage facade is provided (or a write fails), it degrades to an in-memory cache so the bootloader still works in a bare harness/test.",
    "exports": [
      {
        "name": "ProfileCache",
        "kind": "class",
        "signature": "class ProfileCache",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/runtime-realm",
    "path": "engine/reference/compat/runtime-realm.md",
    "source": "engine/compat/runtime-realm.js",
    "import": "/engine/compat/runtime-realm.js",
    "sourceHash": "a763db46bdc35d97cd2eb4a2979e39953da34326bbbda03cbb13d1f43398fb6d",
    "summary": "runtime-realm.js — a controlled, scoped execution root for a guest app. Trusted same-origin guests (Mode A/B) reference elements via `document.*`, so the realm is a SCOPED LIGHT-DOM container (`<div data-engine-app=\"id\">`) rather than a shadow root — `getElementById('c')` must still resolve. Isolation comes from: • CSS scoping (css-healer) so guest styles can't touch the OS shell, • API interposition (Phase 5) so guest browser calls route through the engine, • DOM healing so required elements exist before scripts run. Scripts parsed by DOMParser are inert; the realm re-executes them in document order: classic inline → fresh <script>; module inline → blob import(); src → resolved against the package file map (blob) or left as a URL for the browser.",
    "exports": [
      {
        "name": "RuntimeRealm",
        "kind": "class",
        "signature": "class RuntimeRealm",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/schema-registry",
    "path": "engine/reference/compat/schema-registry.md",
    "source": "engine/compat/schema-registry.js",
    "import": "/engine/compat/schema-registry.js",
    "sourceHash": "948a12f4fa12065f545d794dfc5f57722e975a228fabbd66dbe4f103f3540b2a",
    "summary": "schema-registry.js — validate a compatibility profile before boot. Self-contained: a tiny JSON-Schema-subset checker (type / required / enum / properties / items / additionalProperties) plus `validateProfile()` which also applies cross-field consistency rules (e.g. GPU pipelines imply uses.webgpu). The bootloader calls this via `ctx.validate`; Package Studio can call `engine.compat.validateProfile(profile)` to preview problems before compiling.",
    "exports": [
      {
        "name": "CompatSchemaRegistry",
        "kind": "class",
        "signature": "class CompatSchemaRegistry",
        "summary": ""
      },
      {
        "name": "validateProfile",
        "kind": "function",
        "signature": "validateProfile(profile)",
        "summary": "Validate a full compatibility profile: structural schema + consistency rules."
      },
      {
        "name": "compatSchemas",
        "kind": "constant",
        "signature": "compatSchemas",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/schemas",
    "path": "engine/reference/compat/schemas.md",
    "source": "engine/compat/schemas.js",
    "import": "/engine/compat/schemas.js",
    "sourceHash": "e59c4d39bf98f710dbf7342c8c48d5fefe84582d2414787fd1deed5d775f290d",
    "summary": "schemas.js — declarative schemas for the compatibility profile and its parts. Kept as plain JS descriptors (not .json) so the engine module is self-contained and needs no fetch. Validated by `schema-registry.js`'s tiny checker, which supports: type, required, enum, properties, items, additionalProperties.",
    "exports": [
      {
        "name": "permissionsSchema",
        "kind": "constant",
        "signature": "permissionsSchema",
        "summary": "schemas.js — declarative schemas for the compatibility profile and its parts. Kept as plain JS descriptors (not .json) so the engine module is self-contained and needs no fetch. Validated by `schema-registry.js`'s tiny checker, which supports: type, required, enum, properties, items, additionalProperties."
      },
      {
        "name": "domSchema",
        "kind": "constant",
        "signature": "domSchema",
        "summary": ""
      },
      {
        "name": "gpuSchema",
        "kind": "constant",
        "signature": "gpuSchema",
        "summary": ""
      },
      {
        "name": "usesSchema",
        "kind": "constant",
        "signature": "usesSchema",
        "summary": ""
      },
      {
        "name": "healingSchema",
        "kind": "constant",
        "signature": "healingSchema",
        "summary": ""
      },
      {
        "name": "importsSchema",
        "kind": "constant",
        "signature": "importsSchema",
        "summary": ""
      },
      {
        "name": "appProfileSchema",
        "kind": "constant",
        "signature": "appProfileSchema",
        "summary": ""
      },
      {
        "name": "COMPAT_SCHEMAS",
        "kind": "constant",
        "signature": "COMPAT_SCHEMAS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/source-loader",
    "path": "engine/reference/compat/source-loader.md",
    "source": "engine/compat/source-loader.js",
    "import": "/engine/compat/source-loader.js",
    "sourceHash": "f0607014a91db6123b1b612873a8346dc38a4d312ae815681261b8c1e90f01b6",
    "summary": "source-loader.js — load a guest app's source from any supported origin. Supported `source` shapes: string                         → treated as raw HTML if it looks like HTML, else a URL { html }                       → raw HTML string { url, fetch? }                → remote fetch (CORS-aware; optional custom fetch) { file: File }                 → an imported File (uses .text()) { files: Map|object, entry }   → an in-memory file map (folder/zip), entry = HTML path { vfsPath, storage }           → read from the OS VFS via a StorageManager Returns: { html, files: Map<string,string|ArrayBuffer>, baseUrl, sourceType, sourceHash }",
    "exports": [
      {
        "name": "loadSource",
        "kind": "function",
        "signature": "async loadSource(source, ctx = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/surface/engine-texture-surface",
    "path": "engine/reference/compat/surface/engine-texture-surface.md",
    "source": "engine/compat/surface/engine-texture-surface.js",
    "import": "/engine/compat/surface/engine-texture-surface.js",
    "sourceHash": "2b7c64fefc76fcc46cd716875eda127320af572cebcf70d780abfe7a56f1fa0e",
    "summary": "surface/engine-texture-surface.js — present the guest's render into an engine texture instead of a DOM canvas (so it can be composited in the 3D/GPU UI). STUB: the full implementation redirects the guest's WebGPU context to an offscreen target on the shared kernel device, then imports the result as an engine texture each frame. That requires the canvas-interposer to hand the guest a wrapped context and the kernel compositor to accept an external texture. Until that lands, `supported` is false so `selectSurface` falls back to the webgpu-canvas surface — the profile can already request this mode, so flipping it on later needs no guest changes.",
    "exports": [
      {
        "name": "EngineTextureSurface",
        "kind": "class",
        "signature": "class EngineTextureSurface",
        "summary": "surface/engine-texture-surface.js — present the guest's render into an engine texture instead of a DOM canvas (so it can be composited in the 3D/GPU UI). STUB: the full implementation redirects the guest's WebGPU context to an offscreen target on the shared kernel device, then imports the result as an engine texture each frame. That requires the canvas-interposer to hand the guest a wrapped context and the kernel compositor to accept an external texture. Until that lands, `supported` is false so `selectSurface` falls back to the webgpu-canvas surface — the profile can already request this mode, so flipping it on later needs no guest changes."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/surface/offscreen-surface",
    "path": "engine/reference/compat/surface/offscreen-surface.md",
    "source": "engine/compat/surface/offscreen-surface.js",
    "import": "/engine/compat/surface/offscreen-surface.js",
    "sourceHash": "b033283edcb252346296a95902387f7b7961d81e9dcadcf9877af78ae6c2bbc2",
    "summary": "surface/offscreen-surface.js — render the guest on an OffscreenCanvas. STUB: intended for guests that can run their render loop on a worker / detached canvas (transferControlToOffscreen) for isolation and throttling. Behind the same Surface interface; `supported` is false until the offscreen transfer + present path is implemented, so `selectSurface` falls back to webgpu-canvas.",
    "exports": [
      {
        "name": "OffscreenSurface",
        "kind": "class",
        "signature": "class OffscreenSurface",
        "summary": "surface/offscreen-surface.js — render the guest on an OffscreenCanvas. STUB: intended for guests that can run their render loop on a worker / detached canvas (transferControlToOffscreen) for isolation and throttling. Behind the same Surface interface; `supported` is false until the offscreen transfer + present path is implemented, so `selectSurface` falls back to webgpu-canvas."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/surface/surface-manager",
    "path": "engine/reference/compat/surface/surface-manager.md",
    "source": "engine/compat/surface/surface-manager.js",
    "import": "/engine/compat/surface/surface-manager.js",
    "sourceHash": "258da4496199c9d90778ffa1aa46e95a5cd8e05e6040b006da9011db1e354627",
    "summary": "surface/surface-manager.js — pick the presentation surface for a guest. Selected by `profile.gpu.presentation`. `webgpu-canvas` (and `canvas-2d`) are fully implemented; `engine-texture` / `offscreen` are stubs that report `supported === false`, so we transparently fall back to the canvas surface — the profile can request them today and they'll light up when implemented, with no guest changes.",
    "exports": [
      {
        "name": "selectSurface",
        "kind": "function",
        "signature": "selectSurface(profile, deps = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "compat/surface/webgpu-canvas-surface",
    "path": "engine/reference/compat/surface/webgpu-canvas-surface.md",
    "source": "engine/compat/surface/webgpu-canvas-surface.js",
    "import": "/engine/compat/surface/webgpu-canvas-surface.js",
    "sourceHash": "1a22c36d64494dfb9574d8220bd1254ea5bcb323138ebaa09a68394fcce5237d",
    "summary": "surface/webgpu-canvas-surface.js — default presentation: the guest's own <canvas> inside the realm container. For trusted same-origin guests this is mostly pass-through (the app configures its own WebGPU canvas context). The surface's job is to LOCATE the primary canvas and, when `profile.healing.autoCanvasSize` is enabled, keep its backing store sized to the container with a clamped device-pixel-ratio — fixing the common \"canvas stuck at 300×150 / wrong DPR\" class of bugs without fighting an app that manages its own sizing.",
    "exports": [
      {
        "name": "WebgpuCanvasSurface",
        "kind": "class",
        "signature": "class WebgpuCanvasSurface",
        "summary": "surface/webgpu-canvas-surface.js — default presentation: the guest's own <canvas> inside the realm container. For trusted same-origin guests this is mostly pass-through (the app configures its own WebGPU canvas context). The surface's job is to LOCATE the primary canvas and, when `profile.healing.autoCanvasSize` is enabled, keep its backing store sized to the container with a clamped device-pixel-ratio — fixing the common \"canvas stuck at 300×150 / wrong DPR\" class of bugs without fighting an app that manages its own sizing."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "config/EngineConfig",
    "path": "engine/reference/config/EngineConfig.md",
    "source": "engine/config/EngineConfig.js",
    "import": "/engine/config/EngineConfig.js",
    "sourceHash": "8d12b8ccab81fcb0932df1e637d18c754a0f34d02a141ecbf75f9e01a8e68d77",
    "summary": "",
    "exports": [
      {
        "name": "parseSimpleYaml",
        "kind": "function",
        "signature": "parseSimpleYaml(text)",
        "summary": ""
      },
      {
        "name": "loadEngineConfig",
        "kind": "function",
        "signature": "async loadEngineConfig(options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "config/EngineDefaultConfig",
    "path": "engine/reference/config/EngineDefaultConfig.md",
    "source": "engine/config/EngineDefaultConfig.js",
    "import": "/engine/config/EngineDefaultConfig.js",
    "sourceHash": "705b6416e50e3f7af2135c55e0d762126fd47a432bbc405ac034d72e4fcdd1c4",
    "summary": "",
    "exports": [
      {
        "name": "DefaultEngineConfig",
        "kind": "constant",
        "signature": "DefaultEngineConfig",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "config/EngineState",
    "path": "engine/reference/config/EngineState.md",
    "source": "engine/config/EngineState.js",
    "import": "/engine/config/EngineState.js",
    "sourceHash": "8c82c4208202f1efb850b5e170cc54788e7a6e4997e61c78da79ea48dffb869d",
    "summary": "Create GPU state object",
    "exports": [
      {
        "name": "createGpuState",
        "kind": "function",
        "signature": "createGpuState()",
        "summary": "Create GPU state object"
      },
      {
        "name": "createWaterPassState",
        "kind": "function",
        "signature": "createWaterPassState()",
        "summary": "Create water pass state object Used for screen-space fluid/water/metaball rendering"
      },
      {
        "name": "createConfigState",
        "kind": "function",
        "signature": "createConfigState(overrides = {})",
        "summary": "Create scene configuration state (merge with engine.cfg overrides)"
      },
      {
        "name": "createPhysicsState",
        "kind": "function",
        "signature": "createPhysicsState(overrides = {})",
        "summary": "Create physics configuration state"
      },
      {
        "name": "createEcsState",
        "kind": "function",
        "signature": "createEcsState()",
        "summary": "Create ECS state object"
      },
      {
        "name": "createSpawnState",
        "kind": "function",
        "signature": "createSpawnState()",
        "summary": "Create spawn/ghost state object"
      },
      {
        "name": "createParticlesState",
        "kind": "function",
        "signature": "createParticlesState()",
        "summary": "Create particle system state object"
      },
      {
        "name": "createSmokeState",
        "kind": "function",
        "signature": "createSmokeState()",
        "summary": "Create volumetric smoke state object"
      },
      {
        "name": "createRenderState",
        "kind": "function",
        "signature": "createRenderState(overrides = {})",
        "summary": "Create render settings state"
      },
      {
        "name": "createCameraState",
        "kind": "function",
        "signature": "createCameraState(config = {})",
        "summary": "Create camera state object"
      },
      {
        "name": "createInputState",
        "kind": "function",
        "signature": "createInputState()",
        "summary": "Create input state object"
      },
      {
        "name": "createAudioState",
        "kind": "function",
        "signature": "createAudioState()",
        "summary": "Create audio state object"
      },
      {
        "name": "createAllState",
        "kind": "function",
        "signature": "createAllState(options = {})",
        "summary": "Create all state objects at once."
      },
      {
        "name": "applyEngineConfigToState",
        "kind": "function",
        "signature": "applyEngineConfigToState(config, cfg)",
        "summary": "Apply engine.cfg values to config state. Call this after loading engine.cfg."
      },
      {
        "name": "applyEngineConfigToPhysics",
        "kind": "function",
        "signature": "applyEngineConfigToPhysics(physics, cfg)",
        "summary": "Apply engine.cfg values to physics state."
      },
      {
        "name": "DEFAULT_CONFIG",
        "kind": "constant",
        "signature": "DEFAULT_CONFIG",
        "summary": "Default configuration values (can be overridden by engine.cfg)"
      },
      {
        "name": "DEFAULT_PHYSICS",
        "kind": "constant",
        "signature": "DEFAULT_PHYSICS",
        "summary": "Default physics values"
      },
      {
        "name": "DEFAULT_RENDER",
        "kind": "constant",
        "signature": "DEFAULT_RENDER",
        "summary": "Default render settings"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/AppBootstrap",
    "path": "engine/reference/core/AppBootstrap.md",
    "source": "engine/core/AppBootstrap.js",
    "import": "/engine/core/AppBootstrap.js",
    "sourceHash": "26caa446b86cd963a29244d1b953b210bd4380b714d82d35f73dfabdb7e743f6",
    "summary": "AppBootstrap.js - Application bootstrap helper Consolidates common app initialization: WebGPU check, canvas ready, config loading, ECS world, GPU init, and main loop setup.",
    "exports": [
      {
        "name": "bootstrapApp",
        "kind": "function",
        "signature": "async bootstrapApp(options)",
        "summary": "Bootstrap a complete application."
      },
      {
        "name": "createMainLoop",
        "kind": "function",
        "signature": "createMainLoop(options)",
        "summary": "Create main loop with standard update/render pattern."
      },
      {
        "name": "runApp",
        "kind": "function",
        "signature": "async runApp(options)",
        "summary": "Full app bootstrap + loop in one call."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/EngineIntegration",
    "path": "engine/reference/core/EngineIntegration.md",
    "source": "engine/core/EngineIntegration.js",
    "import": "/engine/core/EngineIntegration.js",
    "sourceHash": "dafefd085d8bbbbd623c43321f3b0c164d9f975e5a418f80f783ea6792d858ef",
    "summary": "High-performance particle emitter using SoA",
    "exports": [
      {
        "name": "SoAParticleEmitter",
        "kind": "class",
        "signature": "class SoAParticleEmitter",
        "summary": "High-performance particle emitter using SoA"
      },
      {
        "name": "RenderCommandBuilder",
        "kind": "class",
        "signature": "class RenderCommandBuilder",
        "summary": "Render command builder using object pools"
      },
      {
        "name": "initResourceManagement",
        "kind": "function",
        "signature": "async initResourceManagement(device, options = {})",
        "summary": "Initialize resource management for the game Call this during game initialization after WebGPU device is ready"
      },
      {
        "name": "frameWrapper",
        "kind": "function",
        "signature": "frameWrapper(frameCallback)",
        "summary": "Frame wrapper that handles resource management automatically Usage: ```js function gameLoop() { frameWrapper(() => { // Your game update code here updatePhysics(); updateAI(); render(); }); requestAnimationFrame(gameLoop); } ```"
      },
      {
        "name": "frameWrapperAsync",
        "kind": "function",
        "signature": "async frameWrapperAsync(frameCallback)",
        "summary": "Async frame wrapper for async game loops"
      },
      {
        "name": "submitPhysicsJob",
        "kind": "function",
        "signature": "submitPhysicsJob(callback, data = null)",
        "summary": "Submit physics job to scheduler"
      },
      {
        "name": "submitAIJob",
        "kind": "function",
        "signature": "submitAIJob(callback, data = null)",
        "summary": "Submit AI job to scheduler"
      },
      {
        "name": "submitStreamingJob",
        "kind": "function",
        "signature": "submitStreamingJob(callback, data = null)",
        "summary": "Submit streaming/loading job to scheduler"
      },
      {
        "name": "submitCleanupJob",
        "kind": "function",
        "signature": "submitCleanupJob(callback, data = null)",
        "summary": "Submit background cleanup job"
      },
      {
        "name": "PARTICLE_SCHEMA",
        "kind": "constant",
        "signature": "PARTICLE_SCHEMA",
        "summary": "Schema for high-performance particle system using Structure of Arrays"
      },
      {
        "name": "TRANSFORM_SCHEMA",
        "kind": "constant",
        "signature": "TRANSFORM_SCHEMA",
        "summary": "Schema for entity transforms using Structure of Arrays"
      },
      {
        "name": "JobPriority",
        "kind": "re-export",
        "signature": "JobPriority",
        "summary": ""
      },
      {
        "name": "resources",
        "kind": "re-export",
        "signature": "resources",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/EntitySystem",
    "path": "engine/reference/core/EntitySystem.md",
    "source": "engine/core/EntitySystem.js",
    "import": "/engine/core/EntitySystem.js",
    "sourceHash": "ece4ccd358460d1d6e60a10dea2601f6588b3feea42565ed0a5a850d76aab58f",
    "summary": "EntitySystem — lightweight entity registry used by LIFE narrative systems. This is intentionally a simple in-memory map. The ECS runtime lives in the engine simulation layer; narrative modules just need a stable handle to the active entity collection they are narrating.",
    "exports": [
      {
        "name": "EntitySystem",
        "kind": "class",
        "signature": "class EntitySystem",
        "summary": "EntitySystem — lightweight entity registry used by LIFE narrative systems. This is intentionally a simple in-memory map. The ECS runtime lives in the engine simulation layer; narrative modules just need a stable handle to the active entity collection they are narrating."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/ResourceManager",
    "path": "engine/reference/core/ResourceManager.md",
    "source": "engine/core/ResourceManager.js",
    "import": "/engine/core/ResourceManager.js",
    "sourceHash": "41ccbba0784be8f88238385788432a2f5615fe8be0a512a94bd5209165ef701d",
    "summary": "ResourceManager.js - Unified High-Performance Resource Management Central facade integrating: - Host Memory (RAM): Slab Allocators, Object Pools, SoA Containers - Device Memory (GPU): Ring Buffers, Buddy Allocators, Texture Management - Task Scheduling: Job System, Worker Pools, Frame Budgeting Based on architectural specification for zero-allocation, high-throughput WebGPU applications targeting 60+ FPS.",
    "exports": [
      {
        "name": "ResourceManager",
        "kind": "class",
        "signature": "class ResourceManager",
        "summary": "Unified resource management facade"
      },
      {
        "name": "resources",
        "kind": "constant",
        "signature": "resources",
        "summary": ""
      },
      {
        "name": "JobPriority",
        "kind": "re-export",
        "signature": "JobPriority",
        "summary": ""
      },
      {
        "name": "ObjectPool",
        "kind": "re-export",
        "signature": "ObjectPool",
        "summary": ""
      },
      {
        "name": "SlabAllocator",
        "kind": "re-export",
        "signature": "SlabAllocator",
        "summary": ""
      },
      {
        "name": "SoAContainer",
        "kind": "re-export",
        "signature": "SoAContainer",
        "summary": ""
      },
      {
        "name": "hostMemory",
        "kind": "re-export",
        "signature": "hostMemory",
        "summary": ""
      },
      {
        "name": "scheduler",
        "kind": "re-export",
        "signature": "scheduler",
        "summary": ""
      },
      {
        "name": "workerTemplate",
        "kind": "re-export",
        "signature": "workerTemplate",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/compression/AnimationCompression",
    "path": "engine/reference/core/compression/AnimationCompression.md",
    "source": "engine/core/compression/AnimationCompression.js",
    "import": "/engine/core/compression/AnimationCompression.js",
    "sourceHash": "716395ca307034ab4a8d6482507de6268b7bf46ca13b032e835a86f06d499132",
    "summary": "AnimationCompression.js - Animation Data Compression Compresses skeletal animation data using: - Quaternion compression: 37.5% reduction (16 bytes → 10 bytes) - DCT temporal compression: 60-80% reduction - Delta encoding: Store only changed bones - Keyframe reduction: Remove redundant frames Typical compression: 60-80% reduction for skeletal animations",
    "exports": [
      {
        "name": "compressAnimationTrack",
        "kind": "function",
        "signature": "compressAnimationTrack(track, options = {})",
        "summary": "Compress animation track (position, rotation, or scale)"
      },
      {
        "name": "decompressAnimationTrack",
        "kind": "function",
        "signature": "decompressAnimationTrack(compressed)",
        "summary": "Decompress animation track"
      },
      {
        "name": "compressSkeletalAnimation",
        "kind": "function",
        "signature": "compressSkeletalAnimation(animation)",
        "summary": "Compress full skeletal animation"
      },
      {
        "name": "decompressSkeletalAnimation",
        "kind": "function",
        "signature": "decompressSkeletalAnimation(compressed)",
        "summary": "Decompress skeletal animation"
      },
      {
        "name": "reduceKeyframes",
        "kind": "function",
        "signature": "reduceKeyframes(track, tolerance = 0.001)",
        "summary": "Remove redundant keyframes that can be interpolated"
      },
      {
        "name": "compressAnimationBatch",
        "kind": "function",
        "signature": "compressAnimationBatch(animations)",
        "summary": "Compress multiple animations"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/compression/CompressionUtils",
    "path": "engine/reference/core/compression/CompressionUtils.md",
    "source": "engine/core/compression/CompressionUtils.js",
    "import": "/engine/core/compression/CompressionUtils.js",
    "sourceHash": "628a0483363204b7c41d8ac95b8ae6a3c27fa611eeb8c6e0bb58ab34e51d8f69",
    "summary": "CompressionUtils.js - Unified Compression Utilities Provides compression techniques for various data types: - Variable-Length Integer Encoding (VLInt) - Quantization (Float32 → Int16/Int8) - Run-Length Encoding (RLE) - Delta Compression - Octahedral Normal Encoding - Quaternion Compression Based on research from particle snapshot compression achieving 390x compression",
    "exports": [
      {
        "name": "packVLInt",
        "kind": "function",
        "signature": "packVLInt(values)",
        "summary": "Pack small integers into fewer bytes using variable-length encoding Most indices are small, so we can use 1-2 bytes instead of 4 Encoding: - 1 byte: 0xxxxxxx (0-127) - 2 bytes: 10xxxxxx xxxxxxxx (128-16,383) - 3 bytes: 11xxxxxx xxxxxxxx xxxxxxxx (16,384-4,194,303)"
      },
      {
        "name": "unpackVLInt",
        "kind": "function",
        "signature": "unpackVLInt(packed)",
        "summary": "Unpack variable-length encoded integers"
      },
      {
        "name": "quantizeFloat",
        "kind": "function",
        "signature": "quantizeFloat(value, range)",
        "summary": "Quantize float to int16 within range [-range, +range] Achieves 50% memory reduction with minimal precision loss"
      },
      {
        "name": "dequantizeFloat",
        "kind": "function",
        "signature": "dequantizeFloat(quantized, range)",
        "summary": "Dequantize int16 back to float"
      },
      {
        "name": "quantizeFloatArray",
        "kind": "function",
        "signature": "quantizeFloatArray(floats, range)",
        "summary": "Quantize array of floats to Int16Array"
      },
      {
        "name": "dequantizeFloatArray",
        "kind": "function",
        "signature": "dequantizeFloatArray(quantized, range)",
        "summary": "Dequantize Int16Array back to Float32Array"
      },
      {
        "name": "quantizeToInt8",
        "kind": "function",
        "signature": "quantizeToInt8(value, range)",
        "summary": "Quantize to int8 for even more compression (75% reduction) Use for data that doesn't need high precision (normals, colors)"
      },
      {
        "name": "dequantizeFromInt8",
        "kind": "function",
        "signature": "dequantizeFromInt8(quantized, range)",
        "summary": ""
      },
      {
        "name": "encodeOctahedralNormal",
        "kind": "function",
        "signature": "encodeOctahedralNormal(nx, ny, nz)",
        "summary": "Encode 3D unit normal to 2D octahedral coordinates Industry-standard technique used in AAA games Reference: \"A Survey of Efficient Representations for Independent Unit Vectors\""
      },
      {
        "name": "decodeOctahedralNormal",
        "kind": "function",
        "signature": "decodeOctahedralNormal(x, y)",
        "summary": "Decode octahedral coordinates back to 3D normal"
      },
      {
        "name": "encodeNormalArray",
        "kind": "function",
        "signature": "encodeNormalArray(normals)",
        "summary": "Encode array of normals (vec3) to Int16Array Input: Float32Array [nx, ny, nz, nx, ny, nz, ...] Output: Int16Array [x, y, x, y, ...] (66% smaller)"
      },
      {
        "name": "decodeNormalArray",
        "kind": "function",
        "signature": "decodeNormalArray(encoded)",
        "summary": "Decode array of normals back to Float32Array"
      },
      {
        "name": "compressQuaternion",
        "kind": "function",
        "signature": "compressQuaternion(x, y, z, w)",
        "summary": "Compress quaternion by dropping smallest component Technique: Store 3 largest components + index of dropped component Used in animation systems for skeletal rigs"
      },
      {
        "name": "decompressQuaternion",
        "kind": "function",
        "signature": "decompressQuaternion(compressed)",
        "summary": "Decompress quaternion by reconstructing dropped component"
      },
      {
        "name": "runLengthEncode",
        "kind": "function",
        "signature": "runLengthEncode(values)",
        "summary": "Run-Length Encode an array of values Perfect for voxel data with large empty regions Returns: [[value, count], [value, count], ...]"
      },
      {
        "name": "runLengthDecode",
        "kind": "function",
        "signature": "runLengthDecode(runs)",
        "summary": "Decode run-length encoded data"
      },
      {
        "name": "runLengthEncodeCompact",
        "kind": "function",
        "signature": "runLengthEncodeCompact(values)",
        "summary": "RLE with VLInt encoding for maximum compression Returns Uint8Array: [value, count, value, count, ...]"
      },
      {
        "name": "deltaEncode",
        "kind": "function",
        "signature": "deltaEncode(values)",
        "summary": "Delta encode array (store differences instead of absolute values) Great for temporal data or sorted indices"
      },
      {
        "name": "deltaDecode",
        "kind": "function",
        "signature": "deltaDecode(deltas)",
        "summary": "Decode delta-encoded array"
      },
      {
        "name": "createPalette",
        "kind": "function",
        "signature": "createPalette(values)",
        "summary": "Create palette from array of values Returns: { palette: unique values, indices: array of palette indices }"
      },
      {
        "name": "decodePalette",
        "kind": "function",
        "signature": "decodePalette(palette, indices)",
        "summary": "Decode palette-compressed data"
      },
      {
        "name": "getCompressionStats",
        "kind": "function",
        "signature": "getCompressionStats(originalSize, compressedSize)",
        "summary": "Calculate compression ratio and statistics"
      },
      {
        "name": "formatBytes",
        "kind": "function",
        "signature": "formatBytes(bytes)",
        "summary": "Format bytes for display"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/compression/HybridCompression",
    "path": "engine/reference/core/compression/HybridCompression.md",
    "source": "engine/core/compression/HybridCompression.js",
    "import": "/engine/core/compression/HybridCompression.js",
    "sourceHash": "fadbe781f99da8080fe6af45ff5c77abc761c6534caa30d17c11e7f6d558ce4b",
    "summary": "HybridCompression.js - Best of Both Worlds Intelligently combines lossless and lossy compression: - Lossy techniques for high compression (quantization, RLE, etc.) - Lossless encoding on top (LZ77 + Huffman) - Result: Near-lossless quality with near-lossy compression ratios Achieves 80-90% of lossy compression ratio with <0.001% quality loss",
    "exports": [
      {
        "name": "compressMeshHybrid",
        "kind": "function",
        "signature": "compressMeshHybrid(mesh, options = {})",
        "summary": "Compress mesh with hybrid approach"
      },
      {
        "name": "decompressMeshHybrid",
        "kind": "function",
        "signature": "decompressMeshHybrid(compressed)",
        "summary": "Decompress hybrid mesh"
      },
      {
        "name": "compressVoxelHybrid",
        "kind": "function",
        "signature": "compressVoxelHybrid(voxels, options = {})",
        "summary": "Compress voxel chunk with hybrid approach"
      },
      {
        "name": "decompressVoxelHybrid",
        "kind": "function",
        "signature": "decompressVoxelHybrid(compressed)",
        "summary": "Decompress hybrid voxel chunk"
      },
      {
        "name": "compressAnimationHybrid",
        "kind": "function",
        "signature": "compressAnimationHybrid(track, options = {})",
        "summary": "Compress animation with hybrid approach"
      },
      {
        "name": "decompressAnimationHybrid",
        "kind": "function",
        "signature": "decompressAnimationHybrid(compressed)",
        "summary": "Decompress hybrid animation"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/compression/LosslessCompression",
    "path": "engine/reference/core/compression/LosslessCompression.md",
    "source": "engine/core/compression/LosslessCompression.js",
    "import": "/engine/core/compression/LosslessCompression.js",
    "sourceHash": "ba0817cae5154179568ee947fcfbafb4ab9deb8050464fa416d32f5905948b0d",
    "summary": "LosslessCompression.js - Zero Quality Loss Compression Implements truly lossless compression using: - DEFLATE (zlib): Industry standard, 2-3x compression - LZ77 dictionary compression: Fast, 1.5-2x compression - Huffman coding: Entropy encoding - Combination with existing techniques for maximum compression All compression is 100% lossless - perfect reconstruction guaranteed",
    "exports": [
      {
        "name": "compressLZ77",
        "kind": "function",
        "signature": "compressLZ77(data)",
        "summary": "Simple LZ77 compression (basis of DEFLATE) Finds repeated sequences and replaces with back-references 100% lossless"
      },
      {
        "name": "decompressLZ77",
        "kind": "function",
        "signature": "decompressLZ77(compressed)",
        "summary": "Decompress LZ77 data"
      },
      {
        "name": "compressHuffman",
        "kind": "function",
        "signature": "compressHuffman(data)",
        "summary": "Compress data using Huffman coding 100% lossless entropy encoding"
      },
      {
        "name": "decompressHuffman",
        "kind": "function",
        "signature": "decompressHuffman(compressed)",
        "summary": "Decompress Huffman coded data"
      },
      {
        "name": "compressLossless",
        "kind": "function",
        "signature": "compressLossless(data)",
        "summary": "Compress typed array with zero quality loss Combines LZ77 + Huffman for maximum compression"
      },
      {
        "name": "decompressLossless",
        "kind": "function",
        "signature": "decompressLossless(compressed)",
        "summary": "Decompress losslessly compressed data Perfect reconstruction guaranteed"
      },
      {
        "name": "compressFloat32Lossless",
        "kind": "function",
        "signature": "compressFloat32Lossless(floats)",
        "summary": "Compress Float32Array losslessly"
      },
      {
        "name": "compressInt16Lossless",
        "kind": "function",
        "signature": "compressInt16Lossless(ints)",
        "summary": "Compress Int16Array losslessly"
      },
      {
        "name": "compressUint8Lossless",
        "kind": "function",
        "signature": "compressUint8Lossless(bytes)",
        "summary": "Compress Uint8Array losslessly"
      },
      {
        "name": "testLosslessCompression",
        "kind": "function",
        "signature": "testLosslessCompression()",
        "summary": "Test compression on sample data"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/compression/MeshCompression",
    "path": "engine/reference/core/compression/MeshCompression.md",
    "source": "engine/core/compression/MeshCompression.js",
    "import": "/engine/core/compression/MeshCompression.js",
    "sourceHash": "ec095bc43206949b25b96cecfa25b49352ba966588b141de7d2f0a665f1914bb",
    "summary": "MeshCompression.js - Mesh Data Compression Compresses mesh data using: - Position quantization (Float32 → Int16): 50% reduction - Normal octahedral encoding: 66% reduction - UV half-float encoding: 50% reduction - Index VLInt encoding: 30-50% reduction Typical compression: 70-90% reduction in mesh size",
    "exports": [
      {
        "name": "compressMesh",
        "kind": "function",
        "signature": "compressMesh(mesh, options = {})",
        "summary": "Compress mesh data"
      },
      {
        "name": "decompressMesh",
        "kind": "function",
        "signature": "decompressMesh(compressed)",
        "summary": "Decompress mesh data"
      },
      {
        "name": "compressMeshBatch",
        "kind": "function",
        "signature": "compressMeshBatch(meshes)",
        "summary": "Compress multiple meshes and combine into single buffer Useful for static scene geometry"
      },
      {
        "name": "decompressMeshBatch",
        "kind": "function",
        "signature": "decompressMeshBatch(compressedBatch)",
        "summary": "Decompress batch of meshes"
      },
      {
        "name": "compressMeshForStreaming",
        "kind": "function",
        "signature": "compressMeshForStreaming(mesh, lodLevels = [1.0, 0.5, 0.25])",
        "summary": "Compress mesh for streaming (progressive loading) Returns base LOD + detail layers"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/compression/VoxelCompression",
    "path": "engine/reference/core/compression/VoxelCompression.md",
    "source": "engine/core/compression/VoxelCompression.js",
    "import": "/engine/core/compression/VoxelCompression.js",
    "sourceHash": "c28f74b4b6711dc7259bca201c122bb3767e28c6337956e503fbafdd93cdbbab",
    "summary": "VoxelCompression.js - Voxel Data Compression Compresses voxel data using: - Run-Length Encoding (RLE): 80-95% reduction for sparse data - Octree structure: Hierarchical compression - Palette compression: Reuse common materials - Delta encoding: Store chunk changes Typical compression: 80-95% reduction for typical voxel worlds",
    "exports": [
      {
        "name": "compressVoxelChunk",
        "kind": "function",
        "signature": "compressVoxelChunk(voxels, options = {})",
        "summary": "Compress voxel chunk data"
      },
      {
        "name": "decompressVoxelChunk",
        "kind": "function",
        "signature": "decompressVoxelChunk(compressed)",
        "summary": "Decompress voxel chunk data"
      },
      {
        "name": "compressVoxelDelta",
        "kind": "function",
        "signature": "compressVoxelDelta(oldChunk, newChunk)",
        "summary": "Compress changes between two chunk states Perfect for multiplayer sync or undo/redo"
      },
      {
        "name": "applyVoxelDelta",
        "kind": "function",
        "signature": "applyVoxelDelta(chunk, delta)",
        "summary": "Apply delta to chunk"
      },
      {
        "name": "compressVoxelWorld",
        "kind": "function",
        "signature": "compressVoxelWorld(chunks)",
        "summary": "Compress entire voxel world"
      },
      {
        "name": "decompressVoxelWorld",
        "kind": "function",
        "signature": "decompressVoxelWorld(compressed)",
        "summary": "Decompress voxel world"
      },
      {
        "name": "compressVoxelChunkForStreaming",
        "kind": "function",
        "signature": "compressVoxelChunkForStreaming(voxels, size)",
        "summary": "Compress chunk for streaming (progressive loading)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/compression/index",
    "path": "engine/reference/core/compression/index.md",
    "source": "engine/core/compression/index.js",
    "import": "/engine/core/compression/index.js",
    "sourceHash": "cb474084ac63f944a6862443498f5f2df3e70eb2f30820c8380a5ecf58052fa7",
    "summary": "Compression Module - Unified Compression System Provides compression for all engine data types: - Particles: 390x compression (VLInt + Delta + Quantization + PCA/DCT) - Meshes: 70-90% reduction (Quantization + Octahedral normals + VLInt indices) - Voxels: 80-95% reduction (RLE + Octree + Palette) - Animations: 60-80% reduction (Quaternion + DCT + Keyframe reduction) All compression techniques are lossless or near-lossless with configurable quality.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "core/events/EventBus",
    "path": "engine/reference/core/events/EventBus.md",
    "source": "engine/core/events/EventBus.js",
    "import": "/engine/core/events/EventBus.js",
    "sourceHash": "3fd2a50cef56cc7530d39bfd5ecabd37694677879a2a9b5f12b1d4fec11ba58a",
    "summary": "",
    "exports": [
      {
        "name": "buildEventName",
        "kind": "function",
        "signature": "buildEventName(category, name)",
        "summary": ""
      },
      {
        "name": "createEventBus",
        "kind": "function",
        "signature": "createEventBus()",
        "summary": ""
      },
      {
        "name": "EventCategories",
        "kind": "constant",
        "signature": "EventCategories",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/framegraph/FrameGraph",
    "path": "engine/reference/core/framegraph/FrameGraph.md",
    "source": "engine/core/framegraph/FrameGraph.js",
    "import": "/engine/core/framegraph/FrameGraph.js",
    "sourceHash": "37b245b62ed0785be9ab2d263064eb10ef6ca308fe939af8e4086b1b0895780f",
    "summary": "",
    "exports": [
      {
        "name": "createFrameGraph",
        "kind": "function",
        "signature": "createFrameGraph()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/framepipeline/FrameContext",
    "path": "engine/reference/core/framepipeline/FrameContext.md",
    "source": "engine/core/framepipeline/FrameContext.js",
    "import": "/engine/core/framepipeline/FrameContext.js",
    "sourceHash": "14ca5f669ccff88399a5841908af7df1bdeceda31b2cd54df5abaf68351c3f3e",
    "summary": "FrameContext — Per-frame shared state passed to every pipeline stage. The engine provides a minimal base context with timing and GPU fields. Consumers (editor, game) extend it with their own fields via the overrides parameter. Usage: const ctx = createFrameContext({ dt: 0.016, currentTime: performance.now(), device: gpuDevice, camera: myCamera, editor: editorApp, scene: editorApp.scene, }); pipeline.execute(ctx);",
    "exports": [
      {
        "name": "createFrameContext",
        "kind": "function",
        "signature": "createFrameContext(overrides)",
        "summary": "Create a per-frame context object."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/framepipeline/FramePipeline",
    "path": "engine/reference/core/framepipeline/FramePipeline.md",
    "source": "engine/core/framepipeline/FramePipeline.js",
    "import": "/engine/core/framepipeline/FramePipeline.js",
    "sourceHash": "6671be18ac20a3231c14f07162db98da8415c2e9a24c1f669e868896b1adbc52",
    "summary": "FramePipeline — Generic phased stage executor. Engine-level primitive. Consumers (editor, game, tests) register their own stages via addStage(). The pipeline knows nothing about WebGPU, ECS, or any specific renderer — it just executes stages in order within named phases. Phases (run in this order by execute()): fixedStep  — 0..N per frame (physics, PBD, fixed-rate sim) update     — 1/frame (camera, matrices, lights, animation) render     — 1/frame (GPU render passes) postRender — 1/frame (composites, post-FX, GPU submit) Inspired by: Unity     — FixedUpdate / Update / LateUpdate / OnPostRender Unreal    — TG_PrePhysics → TG_PostPhysics → TG_PostUpdateWork Bevy      — Extract → Prepare → Queue → Render → Cleanup Frostbite — Frame Graph (Setup → Compile → Execute) Complements engine/core/framegraph/FrameGraph.js which handles resource dependency scheduling; this handles execution scheduling.",
    "exports": [
      {
        "name": "FramePipeline",
        "kind": "class",
        "signature": "class FramePipeline",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/framepipeline/index",
    "path": "engine/reference/core/framepipeline/index.md",
    "source": "engine/core/framepipeline/index.js",
    "import": "/engine/core/framepipeline/index.js",
    "sourceHash": "20edf11fa75e20750065e58bc432587060b595c629edc59b8bf85ddf4a50c067",
    "summary": "Frame Pipeline — Barrel exports",
    "exports": [
      {
        "name": "FramePipeline",
        "kind": "re-export",
        "signature": "FramePipeline",
        "summary": ""
      },
      {
        "name": "createFrameContext",
        "kind": "re-export",
        "signature": "createFrameContext",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/AdaptiveQualityGovernor",
    "path": "engine/reference/core/gpu/AdaptiveQualityGovernor.md",
    "source": "engine/core/gpu/AdaptiveQualityGovernor.js",
    "import": "/engine/core/gpu/AdaptiveQualityGovernor.js",
    "sourceHash": "607ee66799435b13cd72051f3f3278dfde4781b448ead2647d8b726b549efb84",
    "summary": "Canonical engine-wide adaptive quality decision maker. It emits one immutable decision per frame so downstream systems cannot independently compound degradations. Correctness requirements are intentionally absent from tiers.",
    "exports": [
      {
        "name": "AdaptiveQualityGovernor",
        "kind": "class",
        "signature": "class AdaptiveQualityGovernor",
        "summary": "Canonical engine-wide adaptive quality decision maker. It emits one immutable decision per frame so downstream systems cannot independently compound degradations. Correctness requirements are intentionally absent from tiers."
      },
      {
        "name": "createAdaptiveQualityGovernor",
        "kind": "function",
        "signature": "createAdaptiveQualityGovernor(options)",
        "summary": ""
      },
      {
        "name": "ADAPTIVE_QUALITY_TIERS",
        "kind": "constant",
        "signature": "ADAPTIVE_QUALITY_TIERS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/AsyncComputeScheduler",
    "path": "engine/reference/core/gpu/AsyncComputeScheduler.md",
    "source": "engine/core/gpu/AsyncComputeScheduler.js",
    "import": "/engine/core/gpu/AsyncComputeScheduler.js",
    "sourceHash": "8a473e7374eb1e0d079c27b1a88cdb148b708b3daa6722b6932e68461cf490a6",
    "summary": "AsyncComputeScheduler - Manages async compute work",
    "exports": [
      {
        "name": "AsyncComputeScheduler",
        "kind": "class",
        "signature": "class AsyncComputeScheduler",
        "summary": "AsyncComputeScheduler - Manages async compute work"
      },
      {
        "name": "ComputeWorkGroup",
        "kind": "class",
        "signature": "class ComputeWorkGroup",
        "summary": "ComputeWorkGroup - Helper for organizing related compute work"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/AsyncGPUWorkScheduler",
    "path": "engine/reference/core/gpu/AsyncGPUWorkScheduler.md",
    "source": "engine/core/gpu/AsyncGPUWorkScheduler.js",
    "import": "/engine/core/gpu/AsyncGPUWorkScheduler.js",
    "sourceHash": "f27454c8b211f0838d9417e7656d6f2c9d9287bb34bc8f2c93ab3dbc821c4b6c",
    "summary": "Async GPU Work Scheduler - Intelligent queue submission batching Eliminates redundant queue submissions and optimizes GPU pipeline utilization Based on WebGPU best practices for minimizing CPU-GPU sync points",
    "exports": [
      {
        "name": "AsyncGPUWorkScheduler",
        "kind": "class",
        "signature": "class AsyncGPUWorkScheduler",
        "summary": "Async GPU Work Scheduler - Intelligent queue submission batching Eliminates redundant queue submissions and optimizes GPU pipeline utilization Based on WebGPU best practices for minimizing CPU-GPU sync points"
      },
      {
        "name": "GPUFrameCoordinator",
        "kind": "class",
        "signature": "class GPUFrameCoordinator",
        "summary": "GPU Frame Coordinator - Coordinates GPU work across frame boundaries Implements triple-buffering and proper synchronization"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/BindingSignals",
    "path": "engine/reference/core/gpu/BindingSignals.md",
    "source": "engine/core/gpu/BindingSignals.js",
    "import": "/engine/core/gpu/BindingSignals.js",
    "sourceHash": "d18122e01ee9438766a060f1ea391a38304aa0be77fe75132a6142cc1b308957",
    "summary": "",
    "exports": [
      {
        "name": "ResourceSignal",
        "kind": "class",
        "signature": "class ResourceSignal",
        "summary": ""
      },
      {
        "name": "BindGroupSignals",
        "kind": "class",
        "signature": "class BindGroupSignals",
        "summary": ""
      },
      {
        "name": "createSignal",
        "kind": "function",
        "signature": "createSignal(value = null)",
        "summary": ""
      },
      {
        "name": "generateWGSLBindGroupDeclarations",
        "kind": "function",
        "signature": "generateWGSLBindGroupDeclarations(groupIndex, defs)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/BitonicSort",
    "path": "engine/reference/core/gpu/BitonicSort.md",
    "source": "engine/core/gpu/BitonicSort.js",
    "import": "/engine/core/gpu/BitonicSort.js",
    "sourceHash": "44a996852eaf804dad3e60c06f17699a9cef08ff99bf0f090888b1611c120c8a",
    "summary": "Calculate 30-bit Morton code for 3D position",
    "exports": [
      {
        "name": "BitonicSorter",
        "kind": "class",
        "signature": "class BitonicSorter",
        "summary": ""
      },
      {
        "name": "RadixSorter",
        "kind": "class",
        "signature": "class RadixSorter",
        "summary": ""
      },
      {
        "name": "encodeMorton3D",
        "kind": "function",
        "signature": "encodeMorton3D(x, y, z)",
        "summary": "Calculate 30-bit Morton code for 3D position"
      },
      {
        "name": "positionToMorton",
        "kind": "function",
        "signature": "positionToMorton(pos, boundsMin, boundsMax)",
        "summary": "Calculate Morton code from world position"
      },
      {
        "name": "bitonicSortCPU",
        "kind": "function",
        "signature": "bitonicSortCPU(keys, values)",
        "summary": "CPU bitonic sort for small arrays or fallback"
      },
      {
        "name": "SortKeyType",
        "kind": "constant",
        "signature": "SortKeyType",
        "summary": "Sort key types"
      },
      {
        "name": "MAX_ELEMENTS",
        "kind": "constant",
        "signature": "MAX_ELEMENTS",
        "summary": "Maximum elements (must be power of 2)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/BufferLayouts",
    "path": "engine/reference/core/gpu/BufferLayouts.md",
    "source": "engine/core/gpu/BufferLayouts.js",
    "import": "/engine/core/gpu/BufferLayouts.js",
    "sourceHash": "19d45e826882b9b523cef0ac28fd49d61b1e67c692da168f52575560fb8f8d26",
    "summary": "Convert float to fixed-point integer",
    "exports": [
      {
        "name": "toFixed",
        "kind": "function",
        "signature": "toFixed(value, scale = FIXED_SCALE)",
        "summary": "Convert float to fixed-point integer"
      },
      {
        "name": "fromFixed",
        "kind": "function",
        "signature": "fromFixed(fixed, scale = FIXED_SCALE)",
        "summary": "Convert fixed-point integer back to float"
      },
      {
        "name": "alignTo",
        "kind": "function",
        "signature": "alignTo(size, align)",
        "summary": "Align a size/offset to the specified boundary"
      },
      {
        "name": "paddingFor",
        "kind": "function",
        "signature": "paddingFor(size, align)",
        "summary": "Calculate padding needed to reach alignment"
      },
      {
        "name": "isAligned",
        "kind": "function",
        "signature": "isAligned(size, align)",
        "summary": "Validate that a size meets alignment requirements"
      },
      {
        "name": "getParticleBufferSizes",
        "kind": "function",
        "signature": "getParticleBufferSizes(particleCount)",
        "summary": "Calculate buffer sizes for particle system"
      },
      {
        "name": "getGridBufferSizes",
        "kind": "function",
        "signature": "getGridBufferSizes(gridX, gridY, gridZ)",
        "summary": "Calculate grid buffer size"
      },
      {
        "name": "createAlignedBuffer",
        "kind": "function",
        "signature": "createAlignedBuffer(device, size, usage, label = '')",
        "summary": "Create a WebGPU buffer with proper alignment"
      },
      {
        "name": "createBufferWithData",
        "kind": "function",
        "signature": "createBufferWithData(device, data, usage, label = '')",
        "summary": "Create a mapped buffer for initial data upload"
      },
      {
        "name": "createUniformBuffer",
        "kind": "function",
        "signature": "createUniformBuffer(device, size, label = '')",
        "summary": "Create uniform buffer with proper padding"
      },
      {
        "name": "generateWGSLStruct",
        "kind": "function",
        "signature": "generateWGSLStruct(name, layout)",
        "summary": "Generate WGSL struct definition from layout"
      },
      {
        "name": "UNIFORM_ALIGN",
        "kind": "constant",
        "signature": "UNIFORM_ALIGN",
        "summary": "Uniform buffer alignment (must be 16 bytes)"
      },
      {
        "name": "STORAGE_ALIGN",
        "kind": "constant",
        "signature": "STORAGE_ALIGN",
        "summary": "Storage buffer preferred alignment (4 bytes min, 16 for performance)"
      },
      {
        "name": "INDIRECT_ALIGN",
        "kind": "constant",
        "signature": "INDIRECT_ALIGN",
        "summary": "Indirect dispatch buffer alignment"
      },
      {
        "name": "MIN_WORKGROUP",
        "kind": "constant",
        "signature": "MIN_WORKGROUP",
        "summary": "Minimum workgroup size for good occupancy"
      },
      {
        "name": "MAX_WORKGROUP",
        "kind": "constant",
        "signature": "MAX_WORKGROUP",
        "summary": "Maximum workgroup size (WebGPU limit)"
      },
      {
        "name": "FIXED_SCALE",
        "kind": "constant",
        "signature": "FIXED_SCALE",
        "summary": "WebGPU/WGSL has no native atomicAdd for f32. Solution: Scale floats to integers, use atomicAdd on i32, then descale. FIXED_SCALE = 10000 gives us: - 4 decimal places of precision - Range: ±214,748 (i32 max / 10000) - Good for velocities, forces, densities"
      },
      {
        "name": "FIXED_SCALE_INV",
        "kind": "constant",
        "signature": "FIXED_SCALE_INV",
        "summary": ""
      },
      {
        "name": "FIXED_SCALE_HI",
        "kind": "constant",
        "signature": "FIXED_SCALE_HI",
        "summary": "High precision scale for positions (6 decimal places) Range: ±2147 units - use only for local coordinates"
      },
      {
        "name": "FIXED_SCALE_HI_INV",
        "kind": "constant",
        "signature": "FIXED_SCALE_HI_INV",
        "summary": ""
      },
      {
        "name": "TYPE_SIZES",
        "kind": "constant",
        "signature": "TYPE_SIZES",
        "summary": ""
      },
      {
        "name": "PARTICLE_LAYOUT",
        "kind": "constant",
        "signature": "PARTICLE_LAYOUT",
        "summary": "MLS-MPM Particle SoA Layout Buffer 0: Position + Mass (vec4f) - 16 bytes [x, y, z, mass] Buffer 1: Velocity + Padding (vec4f) - 16 bytes [vx, vy, vz, pad] Buffer 2: Deformation Gradient (mat3x3f) - 48 bytes Row-major 3x3 matrix for plasticity Buffer 3: Affine Momentum (mat3x3f) - 48 bytes APIC affine velocity field Total per particle: 128 bytes"
      },
      {
        "name": "GRID_CELL_LAYOUT",
        "kind": "constant",
        "signature": "GRID_CELL_LAYOUT",
        "summary": "MLS-MPM Grid Cell Layout (Fixed-Point for Atomics) Each cell stores accumulated values from P2G scatter. Uses atomic<i32> for thread-safe accumulation. Momentum: vec3 as 3x atomic<i32> - 12 bytes [mom_x, mom_y, mom_z] (fixed-point scaled) Mass: atomic<i32> - 4 bytes (fixed-point scaled) Total per cell: 16 bytes (nicely aligned)"
      },
      {
        "name": "GRID_VELOCITY_LAYOUT",
        "kind": "constant",
        "signature": "GRID_VELOCITY_LAYOUT",
        "summary": "Grid velocity output (after grid update) Standard f32 for reading in G2P"
      },
      {
        "name": "FDTD_CELL_LAYOUT",
        "kind": "constant",
        "signature": "FDTD_CELL_LAYOUT",
        "summary": "FDTD Electromagnetic Field Cell Electric Displacement D: vec3f - 12 bytes (padded to 16) Magnetic Induction B: vec3f - 12 bytes (padded to 16) Permittivity ε: f32 - 4 bytes Permeability μ: f32 - 4 bytes Padding: 8 bytes Total: 48 bytes per cell"
      },
      {
        "name": "PHASOR_RAY_LAYOUT",
        "kind": "constant",
        "signature": "PHASOR_RAY_LAYOUT",
        "summary": "Phasor Ray Layout Position: vec3f - 12 bytes (padded to 16) Direction: vec3f - 12 bytes (padded to 16) Amplitude, Frequency, Phase, Pad: vec4f - 16 bytes Total: 48 bytes per ray"
      },
      {
        "name": "INDIRECT_DISPATCH_LAYOUT",
        "kind": "constant",
        "signature": "INDIRECT_DISPATCH_LAYOUT",
        "summary": "Indirect dispatch buffer layout"
      },
      {
        "name": "INDIRECT_DRAW_LAYOUT",
        "kind": "constant",
        "signature": "INDIRECT_DRAW_LAYOUT",
        "summary": "Indirect draw buffer layout (for instanced rendering)"
      },
      {
        "name": "DIRTY_CHUNK_LAYOUT",
        "kind": "constant",
        "signature": "DIRTY_CHUNK_LAYOUT",
        "summary": "Dirty chunk entry for conditional dispatch"
      },
      {
        "name": "DIRTY_FLAGS",
        "kind": "constant",
        "signature": "DIRTY_FLAGS",
        "summary": "Dirty flags bitmask"
      },
      {
        "name": "WGSL_FIXED_POINT",
        "kind": "constant",
        "signature": "WGSL_FIXED_POINT",
        "summary": ""
      },
      {
        "name": "WGSL_GRID_INDEX",
        "kind": "constant",
        "signature": "WGSL_GRID_INDEX",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/BufferPool",
    "path": "engine/reference/core/gpu/BufferPool.md",
    "source": "engine/core/gpu/BufferPool.js",
    "import": "/engine/core/gpu/BufferPool.js",
    "sourceHash": "3b924d0fe4710b368dba52283d8dfb4262c707a006862fd09d3357d4bcc9d6af",
    "summary": "GPU Buffer Pool - Zero-allocation buffer recycling Eliminates per-frame buffer creation overhead",
    "exports": [
      {
        "name": "BufferPool",
        "kind": "class",
        "signature": "class BufferPool",
        "summary": "GPU Buffer Pool - Zero-allocation buffer recycling Eliminates per-frame buffer creation overhead"
      },
      {
        "name": "StagingBufferRing",
        "kind": "class",
        "signature": "class StagingBufferRing",
        "summary": "Ring buffer for staging data - eliminates mapAsync stalls"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/ComputeBatchSystem",
    "path": "engine/reference/core/gpu/ComputeBatchSystem.md",
    "source": "engine/core/gpu/ComputeBatchSystem.js",
    "import": "/engine/core/gpu/ComputeBatchSystem.js",
    "sourceHash": "2c9937139965ef355ab79af3105d1a87f344c326ca6f3db8ad2d313a8e121d1a",
    "summary": "Compute Batch System - Parallel GPU compute with indirect dispatch Enables dynamic workgroup sizing and batched compute operations",
    "exports": [
      {
        "name": "ComputeBatchSystem",
        "kind": "class",
        "signature": "class ComputeBatchSystem",
        "summary": "Compute Batch System - Parallel GPU compute with indirect dispatch Enables dynamic workgroup sizing and batched compute operations"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/DynamicUniformBuffer",
    "path": "engine/reference/core/gpu/DynamicUniformBuffer.md",
    "source": "engine/core/gpu/DynamicUniformBuffer.js",
    "import": "/engine/core/gpu/DynamicUniformBuffer.js",
    "sourceHash": "d480a761024c26e307d25f66178bce9dbcd0df741c3299efe22ea85358dc4c7e",
    "summary": "DynamicUniformBuffer.js - Self-sizing uniform buffer from WGSL struct Pass in your WGSL struct definition (the same string embedded in your shader) and this class handles: - Parsing field names, types, and byte offsets (with correct WGSL alignment) - Creating the GPU buffer at exactly the right size - Typed CPU-side Float32Array + Uint32Array views - Named setters: buf.set('sunDir', [0.2, -1.0, 0.1]) - Bulk setter: buf.setAll({ viewProj: mat, cameraPos: [x,y,z] }) - Single upload() call to push to GPU Usage: const frame = new DynamicUniformBuffer(device, `struct FrameUniforms { viewProj: mat4x4<f32>, cameraPos: vec3<f32>, time: f32, sunDir: vec3<f32>, sunIntensity: f32, }`, 'MyFrame'); frame.set('viewProj', viewProjMatrix); frame.set('cameraPos', [x, y, z]); frame.set('sunDir', lightManager.sunDirection); frame.set('sunIntensity', 1.85); frame.upload(); // Or bulk: frame.setAll({ viewProj: mat, cameraPos: pos, sunDir: dir, sunIntensity: 1.0 }); frame.upload(); // Use in bind group: { binding: 0, resource: { buffer: frame.buffer } }",
    "exports": [
      {
        "name": "DynamicUniformBuffer",
        "kind": "class",
        "signature": "class DynamicUniformBuffer",
        "summary": ""
      },
      {
        "name": "parseLayout",
        "kind": "re-export",
        "signature": "parseLayout",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GPUPageAllocator",
    "path": "engine/reference/core/gpu/GPUPageAllocator.md",
    "source": "engine/core/gpu/GPUPageAllocator.js",
    "import": "/engine/core/gpu/GPUPageAllocator.js",
    "sourceHash": "697688a3edb04d19960967ad36cb0c2a82f5d7111c15006c69e4c16dc787c01a",
    "summary": "GPUPageAllocator - Virtual heap for GPU memory",
    "exports": [
      {
        "name": "GPUPageAllocator",
        "kind": "class",
        "signature": "class GPUPageAllocator",
        "summary": "GPUPageAllocator - Virtual heap for GPU memory"
      },
      {
        "name": "GPU_PAGE_WGSL",
        "kind": "constant",
        "signature": "GPU_PAGE_WGSL",
        "summary": "WGSL shader helper for page indirection"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GPUProfiler",
    "path": "engine/reference/core/gpu/GPUProfiler.md",
    "source": "engine/core/gpu/GPUProfiler.js",
    "import": "/engine/core/gpu/GPUProfiler.js",
    "sourceHash": "b4b6955c96ef747e74f3462006128a5d86c6a53c784f3cdc37dc1c10817ef25c",
    "summary": "GPUProfiler - Timestamp query-based GPU profiling",
    "exports": [
      {
        "name": "GPUProfiler",
        "kind": "class",
        "signature": "class GPUProfiler",
        "summary": "GPUProfiler - Timestamp query-based GPU profiling"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GPURandom",
    "path": "engine/reference/core/gpu/GPURandom.md",
    "source": "engine/core/gpu/GPURandom.js",
    "import": "/engine/core/gpu/GPURandom.js",
    "sourceHash": "908b478d2da89d7e897263eff68390603fef7960455ca2f7b080e2df4fe4fa51",
    "summary": "RNG state wrapper for sequential random number generation",
    "exports": [
      {
        "name": "PCGRandom",
        "kind": "class",
        "signature": "class PCGRandom",
        "summary": "RNG state wrapper for sequential random number generation"
      },
      {
        "name": "DeterministicRNG",
        "kind": "class",
        "signature": "class DeterministicRNG",
        "summary": "Deterministic RNG for multiplayer synchronization. All clients with the same seed produce identical sequences. Usage: - World generation: seed with worldSeed + chunkCoords - AI decisions: seed with entityId + gameTick - Combat rolls: seed with attackerId + defenderId + gameTick - Loot drops: seed with containerId + gameTick"
      },
      {
        "name": "pcgHash",
        "kind": "function",
        "signature": "pcgHash(v)",
        "summary": "PCG hash function - high quality, fast"
      },
      {
        "name": "hash2D",
        "kind": "function",
        "signature": "hash2D(x, y)",
        "summary": "Hash 2D coordinates"
      },
      {
        "name": "hash3D",
        "kind": "function",
        "signature": "hash3D(x, y, z)",
        "summary": "Hash 3D coordinates"
      },
      {
        "name": "initRngState",
        "kind": "function",
        "signature": "initRngState(pixelX, pixelY, frame, sampleIdx = 0)",
        "summary": "Initialize RNG state for deterministic per-pixel random"
      },
      {
        "name": "accumulationWeight",
        "kind": "function",
        "signature": "accumulationWeight(frameIndex)",
        "summary": "Calculate accumulation weight for progressive rendering"
      },
      {
        "name": "accumulateColor",
        "kind": "function",
        "signature": "accumulateColor(oldColor, newColor, frameIndex)",
        "summary": "Accumulate color over frames (progressive rendering)"
      },
      {
        "name": "accumulateEMA",
        "kind": "function",
        "signature": "accumulateEMA(oldColor, newColor, alpha)",
        "summary": "Exponential moving average accumulation (real-time, non-converging)"
      },
      {
        "name": "wavelengthToRGB",
        "kind": "function",
        "signature": "wavelengthToRGB(wavelength)",
        "summary": "Convert wavelength (nm) to RGB color"
      },
      {
        "name": "spectralHeatMap",
        "kind": "function",
        "signature": "spectralHeatMap(t)",
        "summary": "Map normalized value to spectral color (violet to red)"
      },
      {
        "name": "countToSpectral",
        "kind": "function",
        "signature": "countToSpectral(count, cutoff)",
        "summary": "Map count to spectral color with cutoff"
      },
      {
        "name": "blueNoiseOffset",
        "kind": "function",
        "signature": "blueNoiseOffset(sampleIndex)",
        "summary": "Generate blue noise sample offset for a pixel Uses R2 sequence (generalized golden ratio) for low-discrepancy sampling"
      },
      {
        "name": "r2Sequence3D",
        "kind": "function",
        "signature": "r2Sequence3D(sampleIndex)",
        "summary": "R2 sequence for 3D sampling (quasi-random, low discrepancy)"
      },
      {
        "name": "halton",
        "kind": "function",
        "signature": "halton(index, base)",
        "summary": "Halton sequence for quasi-random sampling"
      },
      {
        "name": "halton2D",
        "kind": "function",
        "signature": "halton2D(index)",
        "summary": "2D Halton sequence"
      },
      {
        "name": "halton3D",
        "kind": "function",
        "signature": "halton3D(index)",
        "summary": "3D Halton sequence"
      },
      {
        "name": "GPU_RANDOM_CORE_WGSL",
        "kind": "constant",
        "signature": "GPU_RANDOM_CORE_WGSL",
        "summary": "WGSL code for PCG hash and random number generation Include this in your compute shaders for high-quality randomness"
      },
      {
        "name": "GPU_RANDOM_WGSL",
        "kind": "constant",
        "signature": "GPU_RANDOM_WGSL",
        "summary": ""
      },
      {
        "name": "TAA_JITTER_WGSL",
        "kind": "constant",
        "signature": "TAA_JITTER_WGSL",
        "summary": "WGSL snippet for jittered sampling in TAA"
      },
      {
        "name": "STRATIFIED_SAMPLE_WGSL",
        "kind": "constant",
        "signature": "STRATIFIED_SAMPLE_WGSL",
        "summary": "WGSL snippet for stratified sampling"
      },
      {
        "name": "MULTIPLAYER_RANDOM_CORE_WGSL",
        "kind": "constant",
        "signature": "MULTIPLAYER_RANDOM_CORE_WGSL",
        "summary": "WGSL code for multiplayer-deterministic random Seeds with tick + entityId for synchronized random across clients"
      },
      {
        "name": "MULTIPLAYER_RANDOM_WGSL",
        "kind": "constant",
        "signature": "MULTIPLAYER_RANDOM_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GPUTimestampProfiler",
    "path": "engine/reference/core/gpu/GPUTimestampProfiler.md",
    "source": "engine/core/gpu/GPUTimestampProfiler.js",
    "import": "/engine/core/gpu/GPUTimestampProfiler.js",
    "sourceHash": "ed814a202c2d07bdb6e5a40e45d3a14f8e398e413884e353fcd28b6befa734a9",
    "summary": "GPUTimestampProfiler - Precise GPU timing using timestamp queries. Requires the optional `timestamp-query` feature.",
    "exports": [
      {
        "name": "GPUTimestampProfiler",
        "kind": "class",
        "signature": "class GPUTimestampProfiler",
        "summary": "GPUTimestampProfiler - Precise GPU timing using timestamp queries. Requires the optional `timestamp-query` feature."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuBuffer",
    "path": "engine/reference/core/gpu/GpuBuffer.md",
    "source": "engine/core/gpu/GpuBuffer.js",
    "import": "/engine/core/gpu/GpuBuffer.js",
    "sourceHash": "313dbae3912bc9248a58cf1933dff1319ecdf33984fb79b5dc38ceb6007cb7a6",
    "summary": "",
    "exports": [
      {
        "name": "createVertexBuffer",
        "kind": "function",
        "signature": "createVertexBuffer(device, data, options = {})",
        "summary": ""
      },
      {
        "name": "createIndexBuffer",
        "kind": "function",
        "signature": "createIndexBuffer(device, data, options = {})",
        "summary": ""
      },
      {
        "name": "createUniformBuffer",
        "kind": "function",
        "signature": "createUniformBuffer(device, byteSize, options = {})",
        "summary": ""
      },
      {
        "name": "createStorageBuffer",
        "kind": "function",
        "signature": "createStorageBuffer(device, byteSizeOrData, options = {})",
        "summary": ""
      },
      {
        "name": "updateBuffer",
        "kind": "function",
        "signature": "updateBuffer(device, buffer, data, offsetBytes = 0)",
        "summary": ""
      },
      {
        "name": "destroyBuffer",
        "kind": "function",
        "signature": "destroyBuffer(buffer)",
        "summary": ""
      },
      {
        "name": "destroyBuffers",
        "kind": "function",
        "signature": "destroyBuffers(buffers)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuCanvas",
    "path": "engine/reference/core/gpu/GpuCanvas.md",
    "source": "engine/core/gpu/GpuCanvas.js",
    "import": "/engine/core/gpu/GpuCanvas.js",
    "sourceHash": "8ff31bf7c930b973d9f9136e0b16d6b1ebd52cf885265bc11887aed3c4580167",
    "summary": "",
    "exports": [
      {
        "name": "createCanvasContext",
        "kind": "function",
        "signature": "createCanvasContext(gpuDevice, canvas, options = {})",
        "summary": ""
      },
      {
        "name": "resizeCanvasContext",
        "kind": "function",
        "signature": "resizeCanvasContext(canvasContext, width, height)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuDebug",
    "path": "engine/reference/core/gpu/GpuDebug.md",
    "source": "engine/core/gpu/GpuDebug.js",
    "import": "/engine/core/gpu/GpuDebug.js",
    "sourceHash": "6219fb215a6d3e55ed67a99fba415e58e35b716aa54b6a7556e97f3de1c7f38f",
    "summary": "",
    "exports": [
      {
        "name": "labelResource",
        "kind": "function",
        "signature": "labelResource(resource, label)",
        "summary": ""
      },
      {
        "name": "withErrorScope",
        "kind": "function",
        "signature": "async withErrorScope(device, fn)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuDevice",
    "path": "engine/reference/core/gpu/GpuDevice.md",
    "source": "engine/core/gpu/GpuDevice.js",
    "import": "/engine/core/gpu/GpuDevice.js",
    "sourceHash": "58706cba83c4f116e42392712fdf1b845afe48c00076aa7d7e56e67777a07d78",
    "summary": "Detect GPU platform/browser for per-browser workarounds. WebGPU browser support (Feb 2026): Chrome/Edge 113+ — Win (D3D12), Mac (Metal), ChromeOS (Vulkan) Chrome 121+      — Android 12+ Qualcomm/ARM (Vulkan) Chrome 144+      — Linux Intel Gen12+ (Vulkan), expanding to AMD/NVIDIA See: https://developer.chrome.com/blog/new-in-webgpu-144#webgpu_on_linux Firefox 141+     — Windows (wgpu/Rust backend) Firefox 145+     — macOS ARM64 (wgpu/Rust); Linux/Android expected 2026 Safari 26+       — macOS Tahoe, iOS 26, iPadOS 26, visionOS 26 (Metal) Samsung Internet 24+ — Android (Chromium/Dawn) GPU API backends per OS (Chromium/Dawn): Windows  → D3D12     (SharedTextureMemory D3D11 swap chain bug) macOS    → Metal Linux    → Vulkan    (rest of Chromium stays on OpenGL) Android  → Vulkan    (OpenGL ES compat mode via Chrome 135+ flag) ChromeOS → Vulkan See: https://caniuse.com/webgpu https://github.com/gpuweb/gpuweb/wiki/Implementation-Status",
    "exports": [
      {
        "name": "GpuDevice",
        "kind": "class",
        "signature": "class GpuDevice",
        "summary": ""
      },
      {
        "name": "detectGpuPlatform",
        "kind": "function",
        "signature": "detectGpuPlatform()",
        "summary": "Detect GPU platform/browser for per-browser workarounds. WebGPU browser support (Feb 2026): Chrome/Edge 113+ — Win (D3D12), Mac (Metal), ChromeOS (Vulkan) Chrome 121+      — Android 12+ Qualcomm/ARM (Vulkan) Chrome 144+      — Linux Intel Gen12+ (Vulkan), expanding to AMD/NVIDIA See: https://developer.chrome.com/blog/new-in-webgpu-144#webgpu_on_linux Firefox 141+     — Windows (wgpu/Rust backend) Firefox 145+     — macOS ARM64 (wgpu/Rust); Linux/Android expected 2026 Safari 26+       — macOS Tahoe, iOS 26, iPadOS 26, visionOS 26 (Metal) Samsung Internet 24+ — Android (Chromium/Dawn) GPU API backends per OS (Chromium/Dawn): Windows  → D3D12     (SharedTextureMemory D3D11 swap chain bug) macOS    → Metal Linux    → Vulkan    (rest of Chromium stays on OpenGL) Android  → Vulkan    (OpenGL ES compat mode via Chrome 135+ flag) ChromeOS → Vulkan See: https://caniuse.com/webgpu https://github.com/gpuweb/gpuweb/wiki/Implementation-Status"
      },
      {
        "name": "getGpuDevice",
        "kind": "function",
        "signature": "async getGpuDevice(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuFormats",
    "path": "engine/reference/core/gpu/GpuFormats.md",
    "source": "engine/core/gpu/GpuFormats.js",
    "import": "/engine/core/gpu/GpuFormats.js",
    "sourceHash": "fc67b2895d5b6cdad6007edf9a0835143a20b52d0dbe2cd82832013f3216dfd9",
    "summary": "",
    "exports": [
      {
        "name": "getPreferredCanvasFormat",
        "kind": "function",
        "signature": "getPreferredCanvasFormat()",
        "summary": ""
      },
      {
        "name": "isDepthFormatSupported",
        "kind": "function",
        "signature": "isDepthFormatSupported(device, format)",
        "summary": ""
      },
      {
        "name": "DEFAULT_COLOR_FORMAT",
        "kind": "constant",
        "signature": "DEFAULT_COLOR_FORMAT",
        "summary": ""
      },
      {
        "name": "DEFAULT_DEPTH_FORMAT",
        "kind": "constant",
        "signature": "DEFAULT_DEPTH_FORMAT",
        "summary": ""
      },
      {
        "name": "DEFAULT_SAMPLE_COUNT",
        "kind": "constant",
        "signature": "DEFAULT_SAMPLE_COUNT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuFrameBudgetBroker",
    "path": "engine/reference/core/gpu/GpuFrameBudgetBroker.md",
    "source": "engine/core/gpu/GpuFrameBudgetBroker.js",
    "import": "/engine/core/gpu/GpuFrameBudgetBroker.js",
    "sourceHash": "b3e18f18f68ffefed553ffaf3f6809406e35deb02f6ce7e3e6c21fd5424e8052",
    "summary": "Dependency-safe frame admission for long compute submissions. The broker never reorders command buffers. Callers await admission, then submit immediately to the one WebGPU queue, preserving queue dependencies. Render-critical work bypasses the budget; interactive/background compute is spread across animation frames so a long producer cannot monopolize the GPU.",
    "exports": [
      {
        "name": "GpuFrameBudgetBroker",
        "kind": "class",
        "signature": "class GpuFrameBudgetBroker",
        "summary": "Dependency-safe frame admission for long compute submissions. The broker never reorders command buffers. Callers await admission, then submit immediately to the one WebGPU queue, preserving queue dependencies. Render-critical work bypasses the budget; interactive/background compute is spread across animation frames so a long producer cannot monopolize the GPU."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuInit",
    "path": "engine/reference/core/gpu/GpuInit.md",
    "source": "engine/core/gpu/GpuInit.js",
    "import": "/engine/core/gpu/GpuInit.js",
    "sourceHash": "2efab494d84c54aba649885cc8076ade0061dd98bf0d887043ef3506633ea503",
    "summary": "Initialize WebGPU and populate GPU state object.",
    "exports": [
      {
        "name": "initGpuState",
        "kind": "function",
        "signature": "async initGpuState(options)",
        "summary": "Initialize WebGPU and populate GPU state object."
      },
      {
        "name": "isWebGpuSupported",
        "kind": "function",
        "signature": "isWebGpuSupported()",
        "summary": "Check if WebGPU is supported."
      },
      {
        "name": "waitForCanvasReady",
        "kind": "function",
        "signature": "waitForCanvasReady(canvas, minSize = 1)",
        "summary": "Wait for canvas to be properly sized before GPU init."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuMetrics",
    "path": "engine/reference/core/gpu/GpuMetrics.md",
    "source": "engine/core/gpu/GpuMetrics.js",
    "import": "/engine/core/gpu/GpuMetrics.js",
    "sourceHash": "a06165ec7123351f481a0c68351e819b6a607c2561b71c9b2ebe504d15d8fb8a",
    "summary": "",
    "exports": [
      {
        "name": "recordBufferCreate",
        "kind": "function",
        "signature": "recordBufferCreate(byteSize, usageKind = \"other\")",
        "summary": ""
      },
      {
        "name": "recordTextureCreate",
        "kind": "function",
        "signature": "recordTextureCreate(width, height)",
        "summary": ""
      },
      {
        "name": "getGpuMetrics",
        "kind": "function",
        "signature": "getGpuMetrics()",
        "summary": ""
      },
      {
        "name": "resetGpuMetrics",
        "kind": "function",
        "signature": "resetGpuMetrics()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuPassGraph",
    "path": "engine/reference/core/gpu/GpuPassGraph.md",
    "source": "engine/core/gpu/GpuPassGraph.js",
    "import": "/engine/core/gpu/GpuPassGraph.js",
    "sourceHash": "794b1ee7cf21dd1fc3aaa58d833ade8ef41c95382c29ac28ffd76fc27032933b",
    "summary": "",
    "exports": [
      {
        "name": "createGpuPassGraph",
        "kind": "function",
        "signature": "createGpuPassGraph()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuRecovery",
    "path": "engine/reference/core/gpu/GpuRecovery.md",
    "source": "engine/core/gpu/GpuRecovery.js",
    "import": "/engine/core/gpu/GpuRecovery.js",
    "sourceHash": "cf0d5b10219ff6800d5d2cca480980dc91de345f7aa9ba6f45de81cf34542c40",
    "summary": "GpuRecovery.js — Automatic GPU device loss recovery (cross-browser) Handles the full lifecycle of device loss and recovery: 1. Detects device loss (unexpected crash vs intentional destroy) 2. Attempts automatic recovery with exponential backoff 3. Reconfigures canvas context with the new device 4. Fires callbacks so the app can re-upload resources 5. Shows user notification if recovery fails Based on: https://toji.dev/webgpu-best-practices/device-loss.html Browser support: Chrome 113+ (Win/Mac/ChromeOS), 121+ (Android), 144+ (Linux) Firefox 141+ (Windows), 145+ (macOS ARM64) — wgpu/Rust backend Safari 26+ (macOS Tahoe, iOS 26, iPadOS 26, visionOS 26) — Metal backend Chrome crash limits: - 1st crash: adapter available immediately - 2nd crash within 2 min: adapter blocked for that page - 3rd crash within 2 min: all pages blocked - 3-6 crashes in 5 min: GPU process stops entirely Firefox/Safari: crash limits are different/unknown — recovery still works. device.lost reason values: Chrome: 'destroyed' (intentional) or 'unknown' (crash) Firefox/Safari: may use 'destroyed' or '' — we check for 'destroyed' only",
    "exports": [
      {
        "name": "GpuRecovery",
        "kind": "class",
        "signature": "class GpuRecovery",
        "summary": ""
      },
      {
        "name": "createRecoveryOverlay",
        "kind": "function",
        "signature": "createRecoveryOverlay(container)",
        "summary": "Create a user-facing recovery notification overlay. Shows status during recovery and a \"please refresh\" message on failure."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuSampler",
    "path": "engine/reference/core/gpu/GpuSampler.md",
    "source": "engine/core/gpu/GpuSampler.js",
    "import": "/engine/core/gpu/GpuSampler.js",
    "sourceHash": "73605f0422ab8d9a75d45c40791c1aca7d3eab12d645f02069fd7016c94ca907",
    "summary": "",
    "exports": [
      {
        "name": "getDefaultSampler",
        "kind": "function",
        "signature": "getDefaultSampler(device)",
        "summary": ""
      },
      {
        "name": "getPointSampler",
        "kind": "function",
        "signature": "getPointSampler(device)",
        "summary": ""
      },
      {
        "name": "getLinearSampler",
        "kind": "function",
        "signature": "getLinearSampler(device)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuTexture",
    "path": "engine/reference/core/gpu/GpuTexture.md",
    "source": "engine/core/gpu/GpuTexture.js",
    "import": "/engine/core/gpu/GpuTexture.js",
    "sourceHash": "b5c1eb22113053159eedb812cc990a3263eaf1403e8f72006329b5daba18fbda",
    "summary": "",
    "exports": [
      {
        "name": "createColorTexture",
        "kind": "function",
        "signature": "createColorTexture(device, width, height, options = {})",
        "summary": ""
      },
      {
        "name": "createSampledTexture2D",
        "kind": "function",
        "signature": "createSampledTexture2D(device, width, height, options = {})",
        "summary": ""
      },
      {
        "name": "createDepthTexture",
        "kind": "function",
        "signature": "createDepthTexture(device, width, height, options = {})",
        "summary": ""
      },
      {
        "name": "resizeAttachmentTexture",
        "kind": "function",
        "signature": "resizeAttachmentTexture(device, handle, width, height)",
        "summary": ""
      },
      {
        "name": "destroyAttachmentHandle",
        "kind": "function",
        "signature": "destroyAttachmentHandle(handle)",
        "summary": ""
      },
      {
        "name": "destroyAttachmentHandles",
        "kind": "function",
        "signature": "destroyAttachmentHandles(handles)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuTextureLoader",
    "path": "engine/reference/core/gpu/GpuTextureLoader.md",
    "source": "engine/core/gpu/GpuTextureLoader.js",
    "import": "/engine/core/gpu/GpuTextureLoader.js",
    "sourceHash": "a591288bd19dfb6b5fada786e15b5bdb41123c6ebe85c2ecf881a69654f1523d",
    "summary": "",
    "exports": [
      {
        "name": "loadTextureFromUrl",
        "kind": "function",
        "signature": "async loadTextureFromUrl(device, url, options = {})",
        "summary": ""
      },
      {
        "name": "createTextureFromKtx2Data",
        "kind": "function",
        "signature": "createTextureFromKtx2Data(device, data, options = {})",
        "summary": ""
      },
      {
        "name": "createTextureFromKtx2DataWithDecoder",
        "kind": "function",
        "signature": "async createTextureFromKtx2DataWithDecoder(device, data, options = {})",
        "summary": ""
      },
      {
        "name": "loadKtx2TextureFromUrl",
        "kind": "function",
        "signature": "async loadKtx2TextureFromUrl(device, url, options = {})",
        "summary": ""
      },
      {
        "name": "inspectKtx2TextureData",
        "kind": "function",
        "signature": "inspectKtx2TextureData(data, options = {})",
        "summary": ""
      },
      {
        "name": "inspectKtx2TextureFromUrl",
        "kind": "function",
        "signature": "async inspectKtx2TextureFromUrl(url, options = {})",
        "summary": ""
      },
      {
        "name": "createTextureFromImage",
        "kind": "function",
        "signature": "async createTextureFromImage(device, image, options = {})",
        "summary": ""
      },
      {
        "name": "createTextureFromImageBitmap",
        "kind": "function",
        "signature": "async createTextureFromImageBitmap(device, bitmap, options = {})",
        "summary": ""
      },
      {
        "name": "isKtx2Container",
        "kind": "re-export",
        "signature": "isKtx2Container",
        "summary": ""
      },
      {
        "name": "ktx2DirectUploadPlan",
        "kind": "re-export",
        "signature": "ktx2DirectUploadPlan",
        "summary": ""
      },
      {
        "name": "ktx2PayloadPlan",
        "kind": "re-export",
        "signature": "ktx2PayloadPlan",
        "summary": ""
      },
      {
        "name": "parseKtx2Container",
        "kind": "re-export",
        "signature": "parseKtx2Container",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/GpuTransfer",
    "path": "engine/reference/core/gpu/GpuTransfer.md",
    "source": "engine/core/gpu/GpuTransfer.js",
    "import": "/engine/core/gpu/GpuTransfer.js",
    "sourceHash": "8ce32513131cf737809434d1537f33706dd6e71c37964f49ab2e72ba24a22dac",
    "summary": "Upload data to a GPU buffer via a transient staging buffer. Useful for large or streaming uploads when you want explicit control over copy operations rather than relying solely on queue.writeBuffer.",
    "exports": [
      {
        "name": "uploadBufferWithStaging",
        "kind": "function",
        "signature": "async uploadBufferWithStaging(device, dstBuffer, data, dstOffsetBytes = 0, label = \"gpu_staging_upload\")",
        "summary": "Upload data to a GPU buffer via a transient staging buffer. Useful for large or streaming uploads when you want explicit control over copy operations rather than relying solely on queue.writeBuffer."
      },
      {
        "name": "readBufferToUint8Array",
        "kind": "function",
        "signature": "async readBufferToUint8Array(device, srcBuffer, byteOffset, byteLength, label = \"gpu_readback_buffer\")",
        "summary": "Read back the contents of a GPU buffer into a Uint8Array. Intended for debugging and tooling, not per-frame critical paths."
      },
      {
        "name": "readTexture2D",
        "kind": "function",
        "signature": "async readTexture2D(device, srcTexture, width, height, { bytesPerPixel, mipLevel = 0, label = \"gpu_readback_texture2d\", })",
        "summary": "Read a 2D texture into a buffer for debugging. Caller must provide bytesPerPixel for the chosen format. Returns an object with the raw data and layout information."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/IndirectDispatchGen",
    "path": "engine/reference/core/gpu/IndirectDispatchGen.md",
    "source": "engine/core/gpu/IndirectDispatchGen.js",
    "import": "/engine/core/gpu/IndirectDispatchGen.js",
    "sourceHash": "48b677f2436385b4b5a8d9ed900757b5367e51c7a6aa54a3763dac0ca29131ce",
    "summary": "IndirectDispatchGen.js - GPU-Driven Indirect Dispatch Generation Problem: CPU deciding which chunks to process creates a bottleneck. The GPU knows best which chunks need work (from dirty flags, visibility, etc.) but standard dispatch requires CPU to specify workgroup counts. Solution: GPU-side stream compaction + indirect dispatch. 1. GPU scans all chunks, compacts active ones into a list 2. GPU writes workgroup counts to indirect buffer 3. CPU issues dispatchWorkgroupsIndirect() - no readback needed Key Technique: Hierarchical atomics for efficient compaction - Each workgroup uses local atomic to count active items - Leader thread reserves global block via global atomic - Threads scatter their items to reserved slots Performance: Eliminates CPU-GPU sync for conditional dispatch",
    "exports": [
      {
        "name": "IndirectDispatchGen",
        "kind": "class",
        "signature": "class IndirectDispatchGen",
        "summary": ""
      },
      {
        "name": "MultiPassDispatchGen",
        "kind": "class",
        "signature": "class MultiPassDispatchGen",
        "summary": "Generates multiple indirect dispatches for different job types (e.g., separate geometry, lighting, physics passes)"
      },
      {
        "name": "GENERATOR_WORKGROUP_SIZE",
        "kind": "constant",
        "signature": "GENERATOR_WORKGROUP_SIZE",
        "summary": "Workgroup size for generator shader"
      },
      {
        "name": "MAX_JOBS",
        "kind": "constant",
        "signature": "MAX_JOBS",
        "summary": "Maximum jobs that can be generated per dispatch"
      },
      {
        "name": "INDIRECT_BUFFER_SIZE",
        "kind": "constant",
        "signature": "INDIRECT_BUFFER_SIZE",
        "summary": "Indirect dispatch buffer size (3 × u32 = 12 bytes)"
      },
      {
        "name": "DISPATCH_GEN_SHADER",
        "kind": "re-export",
        "signature": "DISPATCH_GEN_SHADER",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/Ktx2Container",
    "path": "engine/reference/core/gpu/Ktx2Container.md",
    "source": "engine/core/gpu/Ktx2Container.js",
    "import": "/engine/core/gpu/Ktx2Container.js",
    "sourceHash": "ae6fa50bb93d4dc7e1ddc397664a4ed30351be82f21c81a1819ad34a25cd7014",
    "summary": "",
    "exports": [
      {
        "name": "ktx2VkFormatInfo",
        "kind": "function",
        "signature": "ktx2VkFormatInfo(vkFormat = 0, supportedFeatures = null)",
        "summary": ""
      },
      {
        "name": "isKtx2Container",
        "kind": "function",
        "signature": "isKtx2Container(data)",
        "summary": ""
      },
      {
        "name": "parseKtx2Container",
        "kind": "function",
        "signature": "parseKtx2Container(data, options = {})",
        "summary": ""
      },
      {
        "name": "ktx2PayloadPlan",
        "kind": "function",
        "signature": "ktx2PayloadPlan(containerOrData, options = {})",
        "summary": ""
      },
      {
        "name": "getKtx2SectionPayloadView",
        "kind": "function",
        "signature": "getKtx2SectionPayloadView(data, section = 'sgd')",
        "summary": ""
      },
      {
        "name": "createKtx2PayloadDecodeRequest",
        "kind": "function",
        "signature": "createKtx2PayloadDecodeRequest(data, options = {})",
        "summary": ""
      },
      {
        "name": "ktx2DirectUploadPlan",
        "kind": "function",
        "signature": "ktx2DirectUploadPlan(containerOrData, options = {})",
        "summary": ""
      },
      {
        "name": "getKtx2LevelPayloadView",
        "kind": "function",
        "signature": "getKtx2LevelPayloadView(data, level = 0)",
        "summary": ""
      },
      {
        "name": "KTX2_IDENTIFIER",
        "kind": "constant",
        "signature": "KTX2_IDENTIFIER",
        "summary": ""
      },
      {
        "name": "KTX2_IDENTIFIER_BYTE_LENGTH",
        "kind": "constant",
        "signature": "KTX2_IDENTIFIER_BYTE_LENGTH",
        "summary": ""
      },
      {
        "name": "KTX2_HEADER_BYTE_LENGTH",
        "kind": "constant",
        "signature": "KTX2_HEADER_BYTE_LENGTH",
        "summary": ""
      },
      {
        "name": "KTX2_LEVEL_INDEX_ENTRY_BYTE_LENGTH",
        "kind": "constant",
        "signature": "KTX2_LEVEL_INDEX_ENTRY_BYTE_LENGTH",
        "summary": ""
      },
      {
        "name": "KTX2_VK_FORMAT_TO_WEBGPU_FORMAT",
        "kind": "constant",
        "signature": "KTX2_VK_FORMAT_TO_WEBGPU_FORMAT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/MappedBufferWriter",
    "path": "engine/reference/core/gpu/MappedBufferWriter.md",
    "source": "engine/core/gpu/MappedBufferWriter.js",
    "import": "/engine/core/gpu/MappedBufferWriter.js",
    "sourceHash": "c21a3ede69827ffa5b424d221d3855a615c0e97e50b2402ee9bff535c1eb7142",
    "summary": "Mapped Buffer Writer - Eliminates double-copy overhead from writeBuffer() Based on WebGPU optimization best practices from webgpufundamentals.org Saves one CPU→GPU copy per upload (10-20% faster uploads)",
    "exports": [
      {
        "name": "MappedBufferWriter",
        "kind": "class",
        "signature": "class MappedBufferWriter",
        "summary": "Mapped Buffer Writer - Eliminates double-copy overhead from writeBuffer() Based on WebGPU optimization best practices from webgpufundamentals.org Saves one CPU→GPU copy per upload (10-20% faster uploads)"
      },
      {
        "name": "UniformBufferWriter",
        "kind": "class",
        "signature": "class UniformBufferWriter extends MappedBufferWriter",
        "summary": "Uniform Buffer Writer - Optimized for frequent uniform updates"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/OptimizationIntegration",
    "path": "engine/reference/core/gpu/OptimizationIntegration.md",
    "source": "engine/core/gpu/OptimizationIntegration.js",
    "import": "/engine/core/gpu/OptimizationIntegration.js",
    "sourceHash": "5d9b1b3e9fd40eabb6fe4d27ffc729cf7b5493267ffdf481cc0ab586088ef951",
    "summary": "Enhanced GPU Device wrapper with all optimizations",
    "exports": [
      {
        "name": "OptimizedGPUDevice",
        "kind": "class",
        "signature": "class OptimizedGPUDevice",
        "summary": "Enhanced GPU Device wrapper with all optimizations"
      },
      {
        "name": "OptimizationHelpers",
        "kind": "constant",
        "signature": "OptimizationHelpers",
        "summary": "Quick optimization helper functions"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/PipelineCache",
    "path": "engine/reference/core/gpu/PipelineCache.md",
    "source": "engine/core/gpu/PipelineCache.js",
    "import": "/engine/core/gpu/PipelineCache.js",
    "sourceHash": "d1ddc20b76a3057be56c416d02faa049c33e9e9acdc3550fcc0cabd06900b7e8",
    "summary": "Next-gen pipeline cache with IndexedDB persistence and background compilation Eliminates ALL pipeline creation stalls",
    "exports": [
      {
        "name": "PipelineCache",
        "kind": "class",
        "signature": "class PipelineCache",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/ProgressiveWorkBudget",
    "path": "engine/reference/core/gpu/ProgressiveWorkBudget.md",
    "source": "engine/core/gpu/ProgressiveWorkBudget.js",
    "import": "/engine/core/gpu/ProgressiveWorkBudget.js",
    "sourceHash": "c7dd8b379b6e4617f44e4df0a0c654da3fa75686a6e6e54c29297c9d206167d7",
    "summary": "Plans optional refinement from measured spare GPU time. It never delays the host frame, submits work, or changes correctness-critical work.",
    "exports": [
      {
        "name": "planProgressiveWorkBudget",
        "kind": "function",
        "signature": "planProgressiveWorkBudget(options = {})",
        "summary": "Plans optional refinement from measured spare GPU time. It never delays the host frame, submits work, or changes correctness-critical work."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/ShaderCompilationQueue",
    "path": "engine/reference/core/gpu/ShaderCompilationQueue.md",
    "source": "engine/core/gpu/ShaderCompilationQueue.js",
    "import": "/engine/core/gpu/ShaderCompilationQueue.js",
    "sourceHash": "5c8069a91d1a4d3d6d6344d42cf7258c540bb7c9cde10c16c96148d389d50167",
    "summary": "Async Shader Compilation Queue - Priority-based background compilation Eliminates frame stalls from shader compilation",
    "exports": [
      {
        "name": "ShaderCompilationQueue",
        "kind": "class",
        "signature": "class ShaderCompilationQueue",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/SimulationProfiler",
    "path": "engine/reference/core/gpu/SimulationProfiler.md",
    "source": "engine/core/gpu/SimulationProfiler.js",
    "import": "/engine/core/gpu/SimulationProfiler.js",
    "sourceHash": "dcbf2fcf7d0b8a70114ebe3eae40251f47347215d0473c94d2d38bf9c56982c3",
    "summary": "SimulationProfiler.js - GPU Timestamp Profiling for Simulation Systems Provides detailed GPU timing information for: - Voxel collision passes - Rope physics passes - Rope rendering passes - Particle simulation passes Uses WebGPU timestamp queries for accurate GPU-side timing.",
    "exports": [
      {
        "name": "SimulationProfiler",
        "kind": "class",
        "signature": "class SimulationProfiler",
        "summary": "SimulationProfiler.js - GPU Timestamp Profiling for Simulation Systems Provides detailed GPU timing information for: - Voxel collision passes - Rope physics passes - Rope rendering passes - Particle simulation passes Uses WebGPU timestamp queries for accurate GPU-side timing."
      },
      {
        "name": "profiledComputePass",
        "kind": "function",
        "signature": "profiledComputePass(profiler, encoder, name, fn)",
        "summary": "Profiled compute pass helper Wraps a compute pass with automatic start/end timestamps"
      },
      {
        "name": "createSimulationProfiler",
        "kind": "function",
        "signature": "createSimulationProfiler(device, options = {})",
        "summary": "Create a simulation profiler instance"
      },
      {
        "name": "ProfileSections",
        "kind": "constant",
        "signature": "ProfileSections",
        "summary": "Pre-defined section names for consistency"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/SparsePageRuntime",
    "path": "engine/reference/core/gpu/SparsePageRuntime.md",
    "source": "engine/core/gpu/SparsePageRuntime.js",
    "import": "/engine/core/gpu/SparsePageRuntime.js",
    "sourceHash": "df9dc014eb7805029e9fe763f82a50599b263b8899bf77d228d3c03222e5e5ed",
    "summary": "Device-independent, revisioned sparse residency contract shared by field, voxel-derived, and texture pages. A commit is atomic: validation, fallback closure, slot allocation, and eviction all finish before publication.",
    "exports": [
      {
        "name": "SparsePageRuntime",
        "kind": "class",
        "signature": "class SparsePageRuntime",
        "summary": "Device-independent, revisioned sparse residency contract shared by field, voxel-derived, and texture pages. A commit is atomic: validation, fallback closure, slot allocation, and eviction all finish before publication."
      },
      {
        "name": "createSparsePageRuntime",
        "kind": "function",
        "signature": "createSparsePageRuntime(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/TextureAtlasManager",
    "path": "engine/reference/core/gpu/TextureAtlasManager.md",
    "source": "engine/core/gpu/TextureAtlasManager.js",
    "import": "/engine/core/gpu/TextureAtlasManager.js",
    "sourceHash": "96c8cf8e4a119a3bd0b5a8bab49b193a1705c07f4eda90bf0e345a51f6cbaedd",
    "summary": "Texture Atlas Manager - Dynamic texture packing for GPU memory optimization Reduces texture bindings and improves cache coherency",
    "exports": [
      {
        "name": "TextureAtlasManager",
        "kind": "class",
        "signature": "class TextureAtlasManager",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUBindGroupManager",
    "path": "engine/reference/core/gpu/VGPUBindGroupManager.md",
    "source": "engine/core/gpu/VGPUBindGroupManager.js",
    "import": "/engine/core/gpu/VGPUBindGroupManager.js",
    "sourceHash": "c55720c4fc050d332925223f8b146a6a2c2e8039d38d8d2b7fad6f149c139c80",
    "summary": "Automatic Bind Group Manager - Material system that auto-generates bind groups from shader",
    "exports": [
      {
        "name": "VGPUBindGroupManager",
        "kind": "class",
        "signature": "class VGPUBindGroupManager",
        "summary": ""
      },
      {
        "name": "Material",
        "kind": "re-export",
        "signature": "Material",
        "summary": ""
      },
      {
        "name": "MaterialInstance",
        "kind": "re-export",
        "signature": "MaterialInstance",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUBindless",
    "path": "engine/reference/core/gpu/VGPUBindless.md",
    "source": "engine/core/gpu/VGPUBindless.js",
    "import": "/engine/core/gpu/VGPUBindless.js",
    "sourceHash": "1ae773b0280c56738d933803ba45a4cd259f4a15818a440bbadb2bb06898246c",
    "summary": "Bindless Preparation - Storage buffer texture arrays for bindless-style rendering",
    "exports": [
      {
        "name": "VGPUBindless",
        "kind": "class",
        "signature": "class VGPUBindless",
        "summary": "Bindless Preparation - Storage buffer texture arrays for bindless-style rendering"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUComputeUtils",
    "path": "engine/reference/core/gpu/VGPUComputeUtils.md",
    "source": "engine/core/gpu/VGPUComputeUtils.js",
    "import": "/engine/core/gpu/VGPUComputeUtils.js",
    "sourceHash": "c6e51af81a42a61d9f4a35249d8760e5c55f35ef3ac3d7d53c7ee6857c7358be",
    "summary": "",
    "exports": [
      {
        "name": "VGPUComputeUtils",
        "kind": "class",
        "signature": "class VGPUComputeUtils",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUDebugDraw",
    "path": "engine/reference/core/gpu/VGPUDebugDraw.md",
    "source": "engine/core/gpu/VGPUDebugDraw.js",
    "import": "/engine/core/gpu/VGPUDebugDraw.js",
    "sourceHash": "11dd7c16baf945e8e03e015abc08d37f7e76e70a3c0448cd5f5ebbaa2435460e",
    "summary": "Debug Draw System with dynamic buffer sizing",
    "exports": [
      {
        "name": "VGPUDebugDraw",
        "kind": "class",
        "signature": "class VGPUDebugDraw",
        "summary": "Debug Draw System with dynamic buffer sizing"
      },
      {
        "name": "DebugDrawScope",
        "kind": "class",
        "signature": "class DebugDrawScope",
        "summary": "Scoped debug drawing (auto-clears when scope ends)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUHiZCulling",
    "path": "engine/reference/core/gpu/VGPUHiZCulling.md",
    "source": "engine/core/gpu/VGPUHiZCulling.js",
    "import": "/engine/core/gpu/VGPUHiZCulling.js",
    "sourceHash": "78300f44cf651ac13925a48bd6a060e4937ed09c4dc276c7930aaace1f32309e",
    "summary": "Hierarchical-Z Occlusion Culling System",
    "exports": [
      {
        "name": "VGPUHiZCulling",
        "kind": "class",
        "signature": "class VGPUHiZCulling",
        "summary": "Hierarchical-Z Occlusion Culling System"
      },
      {
        "name": "BoundingBoxBuilder",
        "kind": "class",
        "signature": "class BoundingBoxBuilder",
        "summary": "Helper to build bounding box data for HiZ culling Grows dynamically - no fixed maximum."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUIndirectRenderer",
    "path": "engine/reference/core/gpu/VGPUIndirectRenderer.md",
    "source": "engine/core/gpu/VGPUIndirectRenderer.js",
    "import": "/engine/core/gpu/VGPUIndirectRenderer.js",
    "sourceHash": "5dd5842eca6133aeb6ae3aef45349e4aba0d2b61f07ab2d1f3bd8e2ff0de254d",
    "summary": "GPU-driven indirect renderer with dynamic buffer sizing",
    "exports": [
      {
        "name": "VGPUIndirectRenderer",
        "kind": "class",
        "signature": "class VGPUIndirectRenderer",
        "summary": "GPU-driven indirect renderer with dynamic buffer sizing"
      },
      {
        "name": "IndirectInstanceBuilder",
        "kind": "class",
        "signature": "class IndirectInstanceBuilder",
        "summary": "Helper to build instance data for indirect rendering Grows dynamically - no fixed maximum."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUMemoryTracker",
    "path": "engine/reference/core/gpu/VGPUMemoryTracker.md",
    "source": "engine/core/gpu/VGPUMemoryTracker.js",
    "import": "/engine/core/gpu/VGPUMemoryTracker.js",
    "sourceHash": "cc75b6e20f25b6f2e45b43adf1a436ce7134576802e8bfdc2174c292f6e4f4ac",
    "summary": "Memory Budget Tracker - Track GPU memory usage, warn on budget exceeded Also provides GPU memory probing to detect available VRAM",
    "exports": [
      {
        "name": "VGPUMemoryTracker",
        "kind": "class",
        "signature": "class VGPUMemoryTracker",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUMultiQueue",
    "path": "engine/reference/core/gpu/VGPUMultiQueue.md",
    "source": "engine/core/gpu/VGPUMultiQueue.js",
    "import": "/engine/core/gpu/VGPUMultiQueue.js",
    "sourceHash": "1236e07d34f92cf2972a5fb1173dbb86368bed794c58d20f88728eee6ddd0b9d",
    "summary": "Multi-Queue Abstraction - Separate graphics/compute/transfer queues when available",
    "exports": [
      {
        "name": "VGPUMultiQueue",
        "kind": "class",
        "signature": "class VGPUMultiQueue",
        "summary": "Multi-Queue Abstraction - Separate graphics/compute/transfer queues when available"
      },
      {
        "name": "Fence",
        "kind": "re-export",
        "signature": "Fence",
        "summary": ""
      },
      {
        "name": "VirtualQueue",
        "kind": "re-export",
        "signature": "VirtualQueue",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUQualityScaler",
    "path": "engine/reference/core/gpu/VGPUQualityScaler.md",
    "source": "engine/core/gpu/VGPUQualityScaler.js",
    "import": "/engine/core/gpu/VGPUQualityScaler.js",
    "sourceHash": "bd8cf911359fb1ca7ba1862ab3935b1eb2b44b2db6b62859328821ece190d4d9",
    "summary": "Quality Scaler - Dynamic resolution/quality based on frame time budget",
    "exports": [
      {
        "name": "VGPUQualityScaler",
        "kind": "class",
        "signature": "class VGPUQualityScaler",
        "summary": "Quality Scaler - Dynamic resolution/quality based on frame time budget"
      },
      {
        "name": "VGPUDynamicViewport",
        "kind": "class",
        "signature": "class VGPUDynamicViewport",
        "summary": "Viewport manager for dynamic resolution"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUReadbackQueue",
    "path": "engine/reference/core/gpu/VGPUReadbackQueue.md",
    "source": "engine/core/gpu/VGPUReadbackQueue.js",
    "import": "/engine/core/gpu/VGPUReadbackQueue.js",
    "sourceHash": "aab2a2bab5fd119a18b0a0280c3717b083b9f251bdc53fc52e03544f7a55b3d9",
    "summary": "GPU Readback Queue - Async buffer/texture reads with callbacks Batches staging buffers for efficient GPU→CPU data transfer",
    "exports": [
      {
        "name": "VGPUReadbackQueue",
        "kind": "class",
        "signature": "class VGPUReadbackQueue",
        "summary": "GPU Readback Queue - Async buffer/texture reads with callbacks Batches staging buffers for efficient GPU→CPU data transfer"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPURenderGraph",
    "path": "engine/reference/core/gpu/VGPURenderGraph.md",
    "source": "engine/core/gpu/VGPURenderGraph.js",
    "import": "/engine/core/gpu/VGPURenderGraph.js",
    "sourceHash": "ac3ff76ee3d753c2cc9776168e878aa56c3cc16d251ad1a065bd33b24c1dd705",
    "summary": "Main Render Graph class",
    "exports": [
      {
        "name": "VGPURenderGraph",
        "kind": "class",
        "signature": "class VGPURenderGraph",
        "summary": "Main Render Graph class"
      },
      {
        "name": "RenderGraphBuilder",
        "kind": "class",
        "signature": "class RenderGraphBuilder",
        "summary": "Builder pattern for ergonomic graph construction"
      },
      {
        "name": "ResourceType",
        "kind": "re-export",
        "signature": "ResourceType",
        "summary": ""
      },
      {
        "name": "ResourceUsage",
        "kind": "re-export",
        "signature": "ResourceUsage",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPURenderStats",
    "path": "engine/reference/core/gpu/VGPURenderStats.md",
    "source": "engine/core/gpu/VGPURenderStats.js",
    "import": "/engine/core/gpu/VGPURenderStats.js",
    "sourceHash": "73e39092b9cecc5946d7549933058cea8449e1da5898f9319d1662d9950daf1a",
    "summary": "Render Statistics - Draw call counts, triangle counts, state changes per frame",
    "exports": [
      {
        "name": "VGPURenderStats",
        "kind": "class",
        "signature": "class VGPURenderStats",
        "summary": "Render Statistics - Draw call counts, triangle counts, state changes per frame"
      },
      {
        "name": "VGPUStatsOverlay",
        "kind": "class",
        "signature": "class VGPUStatsOverlay",
        "summary": "Stats overlay for debug display"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUResourceBarriers",
    "path": "engine/reference/core/gpu/VGPUResourceBarriers.md",
    "source": "engine/core/gpu/VGPUResourceBarriers.js",
    "import": "/engine/core/gpu/VGPUResourceBarriers.js",
    "sourceHash": "006c740913fe633194877c94a762081f97a0e0c8404e4262fa8a848ab2dd734c",
    "summary": "Resource Barriers Helper - Explicit sync points for complex resource dependencies",
    "exports": [
      {
        "name": "VGPUResourceBarriers",
        "kind": "class",
        "signature": "class VGPUResourceBarriers",
        "summary": "Resource Barriers Helper - Explicit sync points for complex resource dependencies"
      },
      {
        "name": "BarrierScope",
        "kind": "re-export",
        "signature": "BarrierScope",
        "summary": ""
      },
      {
        "name": "DependencyGraph",
        "kind": "re-export",
        "signature": "DependencyGraph",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUShaderReflection",
    "path": "engine/reference/core/gpu/VGPUShaderReflection.md",
    "source": "engine/core/gpu/VGPUShaderReflection.js",
    "import": "/engine/core/gpu/VGPUShaderReflection.js",
    "sourceHash": "ef8a1d5393c2c53eb3a1fd184712797f531c9fdaed094e9f4dd9c49609498f60",
    "summary": "Shader Reflection - Parse WGSL to extract bindings, uniforms, entry points",
    "exports": [
      {
        "name": "VGPUShaderReflection",
        "kind": "class",
        "signature": "class VGPUShaderReflection",
        "summary": ""
      },
      {
        "name": "getShaderReflection",
        "kind": "function",
        "signature": "getShaderReflection()",
        "summary": ""
      },
      {
        "name": "getStructBufferSize",
        "kind": "function",
        "signature": "getStructBufferSize(shaderSource, structName)",
        "summary": "Get the required buffer size for a uniform struct in a shader. Automatically calculates correct WGSL alignment."
      },
      {
        "name": "getUniformBufferSizes",
        "kind": "function",
        "signature": "getUniformBufferSizes(shaderSource)",
        "summary": "Get buffer sizes for all uniform bindings in a shader."
      },
      {
        "name": "createAutoSizedUniformBuffer",
        "kind": "function",
        "signature": "createAutoSizedUniformBuffer(device, shaderSource, structName, options = {})",
        "summary": "Create a uniform buffer with automatically calculated size from shader struct."
      },
      {
        "name": "validateBufferSize",
        "kind": "function",
        "signature": "validateBufferSize(buffer, shaderSource, structName)",
        "summary": "Validate that a buffer meets the minimum size requirement for a shader struct."
      },
      {
        "name": "debugShaderStructs",
        "kind": "function",
        "signature": "debugShaderStructs(shaderSource)",
        "summary": "Get all struct sizes in a shader for debugging."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUStreamingManager",
    "path": "engine/reference/core/gpu/VGPUStreamingManager.md",
    "source": "engine/core/gpu/VGPUStreamingManager.js",
    "import": "/engine/core/gpu/VGPUStreamingManager.js",
    "sourceHash": "5cbbe5d645480ab8375408193b2ec698d982673d3c2cdd73435a3d093c7fe32a",
    "summary": "VGPUStreamingManager - Progressive resource loading and streaming Features: - Priority-based loading queue with distance/importance weighting - Async texture streaming with mip-level progression - Mesh LOD streaming - Memory budget management - Placeholder resources while loading - Automatic eviction of unused resources Usage: const streaming = new VGPUStreamingManager(vgpu); await streaming.init({ memoryBudget: 512 * 1024 * 1024 }); const textureHandle = streaming.requestTexture('path/to/texture.png', { priority: 1.0 }); const texture = streaming.getTexture(textureHandle); // Returns placeholder until loaded",
    "exports": [
      {
        "name": "VGPUStreamingManager",
        "kind": "class",
        "signature": "class VGPUStreamingManager",
        "summary": "Main Streaming Manager"
      },
      {
        "name": "ResourceState",
        "kind": "re-export",
        "signature": "ResourceState",
        "summary": ""
      },
      {
        "name": "StreamingResourceType",
        "kind": "re-export",
        "signature": "StreamingResourceType",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUTextureAtlas",
    "path": "engine/reference/core/gpu/VGPUTextureAtlas.md",
    "source": "engine/core/gpu/VGPUTextureAtlas.js",
    "import": "/engine/core/gpu/VGPUTextureAtlas.js",
    "sourceHash": "6cb4a83a55030f717a5fd6db0b458bc80ab5cce0c65be27f3f9855c9b19d6137",
    "summary": "Texture Atlas Manager - Dynamic packing for sprites/UI, automatic UV remapping",
    "exports": [
      {
        "name": "VGPUTextureAtlas",
        "kind": "class",
        "signature": "class VGPUTextureAtlas",
        "summary": ""
      },
      {
        "name": "VGPUSpriteBatch",
        "kind": "class",
        "signature": "class VGPUSpriteBatch",
        "summary": "Sprite batch renderer using texture atlas"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VGPUTimelineSemaphores",
    "path": "engine/reference/core/gpu/VGPUTimelineSemaphores.md",
    "source": "engine/core/gpu/VGPUTimelineSemaphores.js",
    "import": "/engine/core/gpu/VGPUTimelineSemaphores.js",
    "sourceHash": "c7ed6d169100d0b7de0cb05e390cef499a85cbbbe8d612292cf8628aff3478ce",
    "summary": "GPU Timeline Semaphores - Advanced sync for multi-engine scenarios",
    "exports": [
      {
        "name": "VGPUTimelineSemaphores",
        "kind": "class",
        "signature": "class VGPUTimelineSemaphores",
        "summary": "GPU Timeline Semaphores - Advanced sync for multi-engine scenarios"
      },
      {
        "name": "FrameSync",
        "kind": "re-export",
        "signature": "FrameSync",
        "summary": ""
      },
      {
        "name": "TimelineSemaphore",
        "kind": "re-export",
        "signature": "TimelineSemaphore",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/VirtualGPU",
    "path": "engine/reference/core/gpu/VirtualGPU.md",
    "source": "engine/core/gpu/VirtualGPU.js",
    "import": "/engine/core/gpu/VirtualGPU.js",
    "sourceHash": "37c1b85b9586f8dc13965cae9b60dcc024385c0c1cf556031d3c655780c9e6fc",
    "summary": "Get or create the global vGPU instance",
    "exports": [
      {
        "name": "VirtualGPU",
        "kind": "class",
        "signature": "class VirtualGPU",
        "summary": ""
      },
      {
        "name": "getVGPU",
        "kind": "function",
        "signature": "async getVGPU(options)",
        "summary": "Get or create the global vGPU instance"
      },
      {
        "name": "vgpu",
        "kind": "function",
        "signature": "vgpu()",
        "summary": "Get existing vGPU instance (throws if not initialized)"
      },
      {
        "name": "initVGPU",
        "kind": "function",
        "signature": "initVGPU(deviceOrOptions)",
        "summary": "Initialize vGPU from existing GpuDevice or raw GPUDevice"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/WGSLPreprocessor",
    "path": "engine/reference/core/gpu/WGSLPreprocessor.md",
    "source": "engine/core/gpu/WGSLPreprocessor.js",
    "import": "/engine/core/gpu/WGSLPreprocessor.js",
    "sourceHash": "a73890cb5fb480ba49cd17a638d2c17d2b5d113e35e881b789e86ce8eb04ff80",
    "summary": "WGSL Preprocessor - #include, #define, #ifdef support for shader modularity",
    "exports": [
      {
        "name": "WGSLPreprocessor",
        "kind": "class",
        "signature": "class WGSLPreprocessor",
        "summary": "WGSL Preprocessor - #include, #define, #ifdef support for shader modularity"
      },
      {
        "name": "createPreprocessor",
        "kind": "function",
        "signature": "createPreprocessor()",
        "summary": "Create a preprocessor with common includes registered"
      },
      {
        "name": "WGSL_COMMON_INCLUDES",
        "kind": "constant",
        "signature": "WGSL_COMMON_INCLUDES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/WGSLStructLayout",
    "path": "engine/reference/core/gpu/WGSLStructLayout.md",
    "source": "engine/core/gpu/WGSLStructLayout.js",
    "import": "/engine/core/gpu/WGSLStructLayout.js",
    "sourceHash": "0e14c335298bcfbb253f8aa74f15f6df8d1655db19ff761390d530ee8ba3218d",
    "summary": "WGSLStructLayout.js - Unified WGSL/JS Struct Layout Generator Parses WGSL struct definitions and generates: - Correct buffer sizes with WebGPU alignment - JS field offset maps for TypedArray access - Accessor helper classes for reading/writing struct data This ensures WGSL and JS stay perfectly in sync - define once in WGSL, use the generated layout in JS. Usage: const layout = parseWGSLStruct(` struct Params { dt: f32, particleCount: u32, roomHalfSize: f32, gravityY: f32, } `); // layout.size = 16 (bytes) // layout.fields = { dt: {offset: 0, size: 4}, particleCount: {offset: 4, size: 4}, ... } const accessor = createStructAccessor(layout); const data = new Float32Array(layout.size / 4); accessor.set(data, 'dt', 0.016); accessor.set(data, 'particleCount', 1000); // auto-converts to u32",
    "exports": [
      {
        "name": "parseWGSLStruct",
        "kind": "function",
        "signature": "parseWGSLStruct(wgslCode)",
        "summary": "Parse a WGSL struct definition and compute field layout"
      },
      {
        "name": "createStructAccessor",
        "kind": "function",
        "signature": "createStructAccessor(layout)",
        "summary": "Create an accessor object for reading/writing struct fields"
      },
      {
        "name": "defineStruct",
        "kind": "function",
        "signature": "defineStruct(wgslCode)",
        "summary": "Define a struct layout from WGSL and return both layout and accessor"
      },
      {
        "name": "generateJSLayout",
        "kind": "function",
        "signature": "generateJSLayout(wgslCode)",
        "summary": "Generate JS object literal layout definition from WGSL struct Useful for documentation or code generation"
      },
      {
        "name": "validateBuffer",
        "kind": "function",
        "signature": "validateBuffer(buffer, layout, expectedCount = 1)",
        "summary": "Validate that a buffer matches the expected struct layout"
      },
      {
        "name": "CommonStructs",
        "kind": "constant",
        "signature": "CommonStructs",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/WGSLStructSize",
    "path": "engine/reference/core/gpu/WGSLStructSize.md",
    "source": "engine/core/gpu/WGSLStructSize.js",
    "import": "/engine/core/gpu/WGSLStructSize.js",
    "sourceHash": "b86f28d6704d47e18eee8ca293eded6f54d1f4ca910e7741af0511d95a830702",
    "summary": "Calculate the total size of a WGSL struct with proper alignment",
    "exports": [
      {
        "name": "calcWGSLStructSize",
        "kind": "function",
        "signature": "calcWGSLStructSize(structCode)",
        "summary": "Calculate the total size of a WGSL struct with proper alignment"
      },
      {
        "name": "createUniformBuffer",
        "kind": "function",
        "signature": "createUniformBuffer(device, structCode, label = 'Uniform Buffer')",
        "summary": "Create a uniform buffer with automatically calculated size"
      },
      {
        "name": "createStorageBuffer",
        "kind": "function",
        "signature": "createStorageBuffer(device, structCode, count = 1, label = 'Storage Buffer')",
        "summary": "Create a storage buffer with automatically calculated size"
      },
      {
        "name": "getFloat32ArraySize",
        "kind": "function",
        "signature": "getFloat32ArraySize(structCode)",
        "summary": "Get the Float32Array size needed to fill a struct buffer"
      },
      {
        "name": "validateBufferSize",
        "kind": "function",
        "signature": "validateBufferSize(bufferSize, structCode, label = '')",
        "summary": "Validate a buffer size against a struct definition"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/WebGpuCanvasBootstrap",
    "path": "engine/reference/core/gpu/WebGpuCanvasBootstrap.md",
    "source": "engine/core/gpu/WebGpuCanvasBootstrap.js",
    "import": "/engine/core/gpu/WebGpuCanvasBootstrap.js",
    "sourceHash": "05fe3979d4be29b14c1e11618623921e93f9533a2f8d2d734f7c1d6602997015",
    "summary": "",
    "exports": [
      {
        "name": "initWebGpuCanvas",
        "kind": "function",
        "signature": "async initWebGpuCanvas(options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/gpu/index",
    "path": "engine/reference/core/gpu/index.md",
    "source": "engine/core/gpu/index.js",
    "import": "/engine/core/gpu/index.js",
    "sourceHash": "7376b9126fa2e3dcd6330edd2e5d335a40b345463c3180452ba2575be8741fc7",
    "summary": "engine/core/gpu/index.js - GPU Utilities Barrel Export",
    "exports": [
      {
        "name": "ADAPTIVE_QUALITY_TIERS",
        "kind": "re-export",
        "signature": "ADAPTIVE_QUALITY_TIERS",
        "summary": ""
      },
      {
        "name": "AdaptiveQualityGovernor",
        "kind": "re-export",
        "signature": "AdaptiveQualityGovernor",
        "summary": ""
      },
      {
        "name": "AsyncComputeScheduler",
        "kind": "re-export",
        "signature": "AsyncComputeScheduler",
        "summary": ""
      },
      {
        "name": "BindGroupSignals",
        "kind": "re-export",
        "signature": "BindGroupSignals",
        "summary": ""
      },
      {
        "name": "BitonicSorter",
        "kind": "re-export",
        "signature": "BitonicSorter",
        "summary": ""
      },
      {
        "name": "BoundingBoxBuilder",
        "kind": "re-export",
        "signature": "BoundingBoxBuilder",
        "summary": ""
      },
      {
        "name": "DIRTY_CHUNK_LAYOUT",
        "kind": "re-export",
        "signature": "DIRTY_CHUNK_LAYOUT",
        "summary": ""
      },
      {
        "name": "DIRTY_FLAGS",
        "kind": "re-export",
        "signature": "DIRTY_FLAGS",
        "summary": ""
      },
      {
        "name": "DebugDrawScope",
        "kind": "re-export",
        "signature": "DebugDrawScope",
        "summary": ""
      },
      {
        "name": "DeterministicRNG",
        "kind": "re-export",
        "signature": "DeterministicRNG",
        "summary": ""
      },
      {
        "name": "DynamicUniformBuffer",
        "kind": "re-export",
        "signature": "DynamicUniformBuffer",
        "summary": ""
      },
      {
        "name": "FDTD_CELL_LAYOUT",
        "kind": "re-export",
        "signature": "FDTD_CELL_LAYOUT",
        "summary": ""
      },
      {
        "name": "FIXED_SCALE",
        "kind": "re-export",
        "signature": "FIXED_SCALE",
        "summary": ""
      },
      {
        "name": "FIXED_SCALE_INV",
        "kind": "re-export",
        "signature": "FIXED_SCALE_INV",
        "summary": ""
      },
      {
        "name": "GENERATOR_WORKGROUP_SIZE",
        "kind": "re-export",
        "signature": "GENERATOR_WORKGROUP_SIZE",
        "summary": ""
      },
      {
        "name": "GPUPageAllocator",
        "kind": "re-export",
        "signature": "GPUPageAllocator",
        "summary": ""
      },
      {
        "name": "GPUProfiler",
        "kind": "re-export",
        "signature": "GPUProfiler",
        "summary": ""
      },
      {
        "name": "GPU_PAGE_WGSL",
        "kind": "re-export",
        "signature": "GPU_PAGE_WGSL",
        "summary": ""
      },
      {
        "name": "GPU_RANDOM_WGSL",
        "kind": "re-export",
        "signature": "GPU_RANDOM_WGSL",
        "summary": ""
      },
      {
        "name": "GRID_CELL_LAYOUT",
        "kind": "re-export",
        "signature": "GRID_CELL_LAYOUT",
        "summary": ""
      },
      {
        "name": "GRID_VELOCITY_LAYOUT",
        "kind": "re-export",
        "signature": "GRID_VELOCITY_LAYOUT",
        "summary": ""
      },
      {
        "name": "GpuFrameBudgetBroker",
        "kind": "re-export",
        "signature": "GpuFrameBudgetBroker",
        "summary": ""
      },
      {
        "name": "INDIRECT_ALIGN",
        "kind": "re-export",
        "signature": "INDIRECT_ALIGN",
        "summary": ""
      },
      {
        "name": "INDIRECT_BUFFER_SIZE",
        "kind": "re-export",
        "signature": "INDIRECT_BUFFER_SIZE",
        "summary": ""
      },
      {
        "name": "IndirectDispatchGen",
        "kind": "re-export",
        "signature": "IndirectDispatchGen",
        "summary": ""
      },
      {
        "name": "IndirectInstanceBuilder",
        "kind": "re-export",
        "signature": "IndirectInstanceBuilder",
        "summary": ""
      },
      {
        "name": "MAX_JOBS",
        "kind": "re-export",
        "signature": "MAX_JOBS",
        "summary": ""
      },
      {
        "name": "MULTIPLAYER_RANDOM_WGSL",
        "kind": "re-export",
        "signature": "MULTIPLAYER_RANDOM_WGSL",
        "summary": ""
      },
      {
        "name": "MultiPassDispatchGen",
        "kind": "re-export",
        "signature": "MultiPassDispatchGen",
        "summary": ""
      },
      {
        "name": "PARTICLE_LAYOUT",
        "kind": "re-export",
        "signature": "PARTICLE_LAYOUT",
        "summary": ""
      },
      {
        "name": "PCGRandom",
        "kind": "re-export",
        "signature": "PCGRandom",
        "summary": ""
      },
      {
        "name": "RadixSorter",
        "kind": "re-export",
        "signature": "RadixSorter",
        "summary": ""
      },
      {
        "name": "RenderGraphBuilder",
        "kind": "re-export",
        "signature": "RenderGraphBuilder",
        "summary": ""
      },
      {
        "name": "ResourceSignal",
        "kind": "re-export",
        "signature": "ResourceSignal",
        "summary": ""
      },
      {
        "name": "ResourceState",
        "kind": "re-export",
        "signature": "ResourceState",
        "summary": ""
      },
      {
        "name": "ResourceType",
        "kind": "re-export",
        "signature": "ResourceType",
        "summary": ""
      },
      {
        "name": "ResourceUsage",
        "kind": "re-export",
        "signature": "ResourceUsage",
        "summary": ""
      },
      {
        "name": "SORT_MAX_ELEMENTS",
        "kind": "re-export",
        "signature": "SORT_MAX_ELEMENTS",
        "summary": ""
      },
      {
        "name": "STORAGE_ALIGN",
        "kind": "re-export",
        "signature": "STORAGE_ALIGN",
        "summary": ""
      },
      {
        "name": "STRATIFIED_SAMPLE_WGSL",
        "kind": "re-export",
        "signature": "STRATIFIED_SAMPLE_WGSL",
        "summary": ""
      },
      {
        "name": "SortKeyType",
        "kind": "re-export",
        "signature": "SortKeyType",
        "summary": ""
      },
      {
        "name": "SparsePageRuntime",
        "kind": "re-export",
        "signature": "SparsePageRuntime",
        "summary": ""
      },
      {
        "name": "StreamingResourceType",
        "kind": "re-export",
        "signature": "StreamingResourceType",
        "summary": ""
      },
      {
        "name": "TAA_JITTER_WGSL",
        "kind": "re-export",
        "signature": "TAA_JITTER_WGSL",
        "summary": ""
      },
      {
        "name": "TYPE_SIZES",
        "kind": "re-export",
        "signature": "TYPE_SIZES",
        "summary": ""
      },
      {
        "name": "UNIFORM_ALIGN",
        "kind": "re-export",
        "signature": "UNIFORM_ALIGN",
        "summary": ""
      },
      {
        "name": "VGPUDebugDraw",
        "kind": "re-export",
        "signature": "VGPUDebugDraw",
        "summary": ""
      },
      {
        "name": "VGPUHiZCulling",
        "kind": "re-export",
        "signature": "VGPUHiZCulling",
        "summary": ""
      },
      {
        "name": "VGPUIndirectRenderer",
        "kind": "re-export",
        "signature": "VGPUIndirectRenderer",
        "summary": ""
      },
      {
        "name": "VGPURenderGraph",
        "kind": "re-export",
        "signature": "VGPURenderGraph",
        "summary": ""
      },
      {
        "name": "VGPUStreamingManager",
        "kind": "re-export",
        "signature": "VGPUStreamingManager",
        "summary": ""
      },
      {
        "name": "VirtualGPU",
        "kind": "re-export",
        "signature": "VirtualGPU",
        "summary": ""
      },
      {
        "name": "WGSL_FIXED_POINT",
        "kind": "re-export",
        "signature": "WGSL_FIXED_POINT",
        "summary": ""
      },
      {
        "name": "WGSL_GRID_INDEX",
        "kind": "re-export",
        "signature": "WGSL_GRID_INDEX",
        "summary": ""
      },
      {
        "name": "accumulateColor",
        "kind": "re-export",
        "signature": "accumulateColor",
        "summary": ""
      },
      {
        "name": "accumulateEMA",
        "kind": "re-export",
        "signature": "accumulateEMA",
        "summary": ""
      },
      {
        "name": "accumulationWeight",
        "kind": "re-export",
        "signature": "accumulationWeight",
        "summary": ""
      },
      {
        "name": "alignTo",
        "kind": "re-export",
        "signature": "alignTo",
        "summary": ""
      },
      {
        "name": "bitonicSortCPU",
        "kind": "re-export",
        "signature": "bitonicSortCPU",
        "summary": ""
      },
      {
        "name": "blueNoiseOffset",
        "kind": "re-export",
        "signature": "blueNoiseOffset",
        "summary": ""
      },
      {
        "name": "calcWGSLStructSize",
        "kind": "re-export",
        "signature": "calcWGSLStructSize",
        "summary": ""
      },
      {
        "name": "countToSpectral",
        "kind": "re-export",
        "signature": "countToSpectral",
        "summary": ""
      },
      {
        "name": "createAdaptiveQualityGovernor",
        "kind": "re-export",
        "signature": "createAdaptiveQualityGovernor",
        "summary": ""
      },
      {
        "name": "createAlignedBuffer",
        "kind": "re-export",
        "signature": "createAlignedBuffer",
        "summary": ""
      },
      {
        "name": "createBufferWithData",
        "kind": "re-export",
        "signature": "createBufferWithData",
        "summary": ""
      },
      {
        "name": "createGpuPassGraph",
        "kind": "re-export",
        "signature": "createGpuPassGraph",
        "summary": ""
      },
      {
        "name": "createSignal",
        "kind": "re-export",
        "signature": "createSignal",
        "summary": ""
      },
      {
        "name": "createSparsePageRuntime",
        "kind": "re-export",
        "signature": "createSparsePageRuntime",
        "summary": ""
      },
      {
        "name": "createUniformBuffer",
        "kind": "re-export",
        "signature": "createUniformBuffer",
        "summary": ""
      },
      {
        "name": "fromFixed",
        "kind": "re-export",
        "signature": "fromFixed",
        "summary": ""
      },
      {
        "name": "generateWGSLBindGroupDeclarations",
        "kind": "re-export",
        "signature": "generateWGSLBindGroupDeclarations",
        "summary": ""
      },
      {
        "name": "getFloat32ArraySize",
        "kind": "re-export",
        "signature": "getFloat32ArraySize",
        "summary": ""
      },
      {
        "name": "getGridBufferSizes",
        "kind": "re-export",
        "signature": "getGridBufferSizes",
        "summary": ""
      },
      {
        "name": "getParticleBufferSizes",
        "kind": "re-export",
        "signature": "getParticleBufferSizes",
        "summary": ""
      },
      {
        "name": "getVGPU",
        "kind": "re-export",
        "signature": "getVGPU",
        "summary": ""
      },
      {
        "name": "halton",
        "kind": "re-export",
        "signature": "halton",
        "summary": ""
      },
      {
        "name": "halton2D",
        "kind": "re-export",
        "signature": "halton2D",
        "summary": ""
      },
      {
        "name": "halton3D",
        "kind": "re-export",
        "signature": "halton3D",
        "summary": ""
      },
      {
        "name": "hash2D",
        "kind": "re-export",
        "signature": "hash2D",
        "summary": ""
      },
      {
        "name": "hash3D",
        "kind": "re-export",
        "signature": "hash3D",
        "summary": ""
      },
      {
        "name": "initRngState",
        "kind": "re-export",
        "signature": "initRngState",
        "summary": ""
      },
      {
        "name": "initVGPU",
        "kind": "re-export",
        "signature": "initVGPU",
        "summary": ""
      },
      {
        "name": "isAligned",
        "kind": "re-export",
        "signature": "isAligned",
        "summary": ""
      },
      {
        "name": "paddingFor",
        "kind": "re-export",
        "signature": "paddingFor",
        "summary": ""
      },
      {
        "name": "pcgHash",
        "kind": "re-export",
        "signature": "pcgHash",
        "summary": ""
      },
      {
        "name": "planProgressiveWorkBudget",
        "kind": "re-export",
        "signature": "planProgressiveWorkBudget",
        "summary": ""
      },
      {
        "name": "positionToMorton",
        "kind": "re-export",
        "signature": "positionToMorton",
        "summary": ""
      },
      {
        "name": "r2Sequence3D",
        "kind": "re-export",
        "signature": "r2Sequence3D",
        "summary": ""
      },
      {
        "name": "spectralHeatMap",
        "kind": "re-export",
        "signature": "spectralHeatMap",
        "summary": ""
      },
      {
        "name": "toFixed",
        "kind": "re-export",
        "signature": "toFixed",
        "summary": ""
      },
      {
        "name": "vgpu",
        "kind": "re-export",
        "signature": "vgpu",
        "summary": ""
      },
      {
        "name": "wavelengthToRGB",
        "kind": "re-export",
        "signature": "wavelengthToRGB",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/index",
    "path": "engine/reference/core/index.md",
    "source": "engine/core/index.js",
    "import": "/engine/core/index.js",
    "sourceHash": "371173bcf5b053196040163686ae1c75d9e64f4088377d4400a9c909d8d1beff",
    "summary": "",
    "exports": [
      {
        "name": "BindGroupCache",
        "kind": "re-export",
        "signature": "BindGroupCache",
        "summary": ""
      },
      {
        "name": "BuddyAllocator",
        "kind": "re-export",
        "signature": "BuddyAllocator",
        "summary": ""
      },
      {
        "name": "FramePipeline",
        "kind": "re-export",
        "signature": "FramePipeline",
        "summary": ""
      },
      {
        "name": "GPUMemoryManager",
        "kind": "re-export",
        "signature": "GPUMemoryManager",
        "summary": ""
      },
      {
        "name": "HostMemoryManager",
        "kind": "re-export",
        "signature": "HostMemoryManager",
        "summary": ""
      },
      {
        "name": "Job",
        "kind": "re-export",
        "signature": "Job",
        "summary": ""
      },
      {
        "name": "JobPriority",
        "kind": "re-export",
        "signature": "JobPriority",
        "summary": ""
      },
      {
        "name": "ObjectPool",
        "kind": "re-export",
        "signature": "ObjectPool",
        "summary": ""
      },
      {
        "name": "ResourceManager",
        "kind": "re-export",
        "signature": "ResourceManager",
        "summary": ""
      },
      {
        "name": "RingBuffer",
        "kind": "re-export",
        "signature": "RingBuffer",
        "summary": ""
      },
      {
        "name": "SlabAllocator",
        "kind": "re-export",
        "signature": "SlabAllocator",
        "summary": ""
      },
      {
        "name": "SoAContainer",
        "kind": "re-export",
        "signature": "SoAContainer",
        "summary": ""
      },
      {
        "name": "StagingBufferPool",
        "kind": "re-export",
        "signature": "StagingBufferPool",
        "summary": ""
      },
      {
        "name": "TaskScheduler",
        "kind": "re-export",
        "signature": "TaskScheduler",
        "summary": ""
      },
      {
        "name": "TextureManager",
        "kind": "re-export",
        "signature": "TextureManager",
        "summary": ""
      },
      {
        "name": "WorkerPool",
        "kind": "re-export",
        "signature": "WorkerPool",
        "summary": ""
      },
      {
        "name": "createCommonPools",
        "kind": "re-export",
        "signature": "createCommonPools",
        "summary": ""
      },
      {
        "name": "createFrameContext",
        "kind": "re-export",
        "signature": "createFrameContext",
        "summary": ""
      },
      {
        "name": "getGPUMemoryManager",
        "kind": "re-export",
        "signature": "getGPUMemoryManager",
        "summary": ""
      },
      {
        "name": "hostMemory",
        "kind": "re-export",
        "signature": "hostMemory",
        "summary": ""
      },
      {
        "name": "resources",
        "kind": "re-export",
        "signature": "resources",
        "summary": ""
      },
      {
        "name": "scheduler",
        "kind": "re-export",
        "signature": "scheduler",
        "summary": ""
      },
      {
        "name": "workerTemplate",
        "kind": "re-export",
        "signature": "workerTemplate",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/AnimationTimeMath",
    "path": "engine/reference/core/math/AnimationTimeMath.md",
    "source": "engine/core/math/AnimationTimeMath.js",
    "import": "/engine/core/math/AnimationTimeMath.js",
    "sourceHash": "f832a959925b1cafcf0c53acbf17d38f9297ce6a1f40d75c2af4f5935609ce99",
    "summary": "AnimationTimeMath.js - pure animation timing, keyframe, and sampler reports.",
    "exports": [
      {
        "name": "animationActiveDuration",
        "kind": "function",
        "signature": "animationActiveDuration(iterationDuration, iterationCount = 1)",
        "summary": ""
      },
      {
        "name": "animationWrapTime",
        "kind": "function",
        "signature": "animationWrapTime(time, duration, options = {})",
        "summary": ""
      },
      {
        "name": "animationFrameWrap",
        "kind": "function",
        "signature": "animationFrameWrap(frame, frameCount)",
        "summary": ""
      },
      {
        "name": "animationPlaybackRateReport",
        "kind": "function",
        "signature": "animationPlaybackRateReport(options = {})",
        "summary": ""
      },
      {
        "name": "animationPlaybackStateReport",
        "kind": "function",
        "signature": "animationPlaybackStateReport(value = {}, options = {})",
        "summary": "Validate and normalize the serializable state of one animation player."
      },
      {
        "name": "animationTimeScaleReport",
        "kind": "function",
        "signature": "animationTimeScaleReport(time, options = {})",
        "summary": ""
      },
      {
        "name": "animationTimelineOffsetReport",
        "kind": "function",
        "signature": "animationTimelineOffsetReport(options = {})",
        "summary": ""
      },
      {
        "name": "animationOpenUsdLayerOffsetReport",
        "kind": "function",
        "signature": "animationOpenUsdLayerOffsetReport(timeCode, options = {})",
        "summary": ""
      },
      {
        "name": "animationOpenUsdTimeSampleBracket",
        "kind": "function",
        "signature": "animationOpenUsdTimeSampleBracket(times, timeCode, options = {})",
        "summary": ""
      },
      {
        "name": "animationOpenUsdSampleValue",
        "kind": "function",
        "signature": "animationOpenUsdSampleValue(times, values, timeCode, options = {})",
        "summary": ""
      },
      {
        "name": "animationTimingReport",
        "kind": "function",
        "signature": "animationTimingReport(options = {})",
        "summary": ""
      },
      {
        "name": "animationKeyframeBracket",
        "kind": "function",
        "signature": "animationKeyframeBracket(times, time, options = {})",
        "summary": ""
      },
      {
        "name": "animationSampleScalar",
        "kind": "function",
        "signature": "animationSampleScalar(a, b, t)",
        "summary": ""
      },
      {
        "name": "animationSampleVector",
        "kind": "function",
        "signature": "animationSampleVector(a, b, t)",
        "summary": ""
      },
      {
        "name": "animationSampleQuaternion",
        "kind": "function",
        "signature": "animationSampleQuaternion(a, b, t)",
        "summary": ""
      },
      {
        "name": "animationCubicSplineSample",
        "kind": "function",
        "signature": "animationCubicSplineSample(v0, outTangent0, v1, inTangent1, t, duration = 1, options = {})",
        "summary": ""
      },
      {
        "name": "animationSampleChannel",
        "kind": "function",
        "signature": "animationSampleChannel(times, values, time, options = {})",
        "summary": ""
      },
      {
        "name": "animationSampleChannelInto",
        "kind": "function",
        "signature": "animationSampleChannelInto(times, values, time, out, outOffset = 0, options = {})",
        "summary": ""
      },
      {
        "name": "animationClipSampleTimeReport",
        "kind": "function",
        "signature": "animationClipSampleTimeReport(time, options = {})",
        "summary": ""
      },
      {
        "name": "animationKeyframeReductionReport",
        "kind": "function",
        "signature": "animationKeyframeReductionReport(times, values, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/AudioAutomationMath",
    "path": "engine/reference/core/math/AudioAutomationMath.md",
    "source": "engine/core/math/AudioAutomationMath.js",
    "import": "/engine/core/math/AudioAutomationMath.js",
    "sourceHash": "2180d143c162f2d2ca957618fa5177c9f7d66d039e60104cc8441e0ed0b0a54b",
    "summary": "AudioAutomationMath.js - pure AudioParam automation, envelope, and biquad helper math.",
    "exports": [
      {
        "name": "audioAutomationLinearRampValue",
        "kind": "function",
        "signature": "audioAutomationLinearRampValue(startValue, endValue, startTime, endTime, time)",
        "summary": ""
      },
      {
        "name": "audioAutomationExponentialRampValue",
        "kind": "function",
        "signature": "audioAutomationExponentialRampValue(startValue, endValue, startTime, endTime, time)",
        "summary": ""
      },
      {
        "name": "audioAutomationSetTargetValue",
        "kind": "function",
        "signature": "audioAutomationSetTargetValue(initialValue, targetValue, startTime, timeConstant, time)",
        "summary": ""
      },
      {
        "name": "audioAutomationValueCurveAtTime",
        "kind": "function",
        "signature": "audioAutomationValueCurveAtTime(curve, startTime, duration, time, options = {})",
        "summary": ""
      },
      {
        "name": "audioAdsrEnvelopeValue",
        "kind": "function",
        "signature": "audioAdsrEnvelopeValue(time, options = {})",
        "summary": ""
      },
      {
        "name": "audioAdsrEnvelopeReport",
        "kind": "function",
        "signature": "audioAdsrEnvelopeReport(options = {})",
        "summary": ""
      },
      {
        "name": "audioBiquadComputedFrequency",
        "kind": "function",
        "signature": "audioBiquadComputedFrequency(frequency = 350, detune = 0, sampleRate = 48000)",
        "summary": ""
      },
      {
        "name": "audioBiquadCoefficients",
        "kind": "function",
        "signature": "audioBiquadCoefficients(type = 'lowpass', options = {})",
        "summary": ""
      },
      {
        "name": "audioBiquadFrequencyResponse",
        "kind": "function",
        "signature": "audioBiquadFrequencyResponse(coefficients, frequencyHz, sampleRate = coefficients?.sampleRate ?? 48000)",
        "summary": ""
      },
      {
        "name": "AUDIO_BIQUAD_TYPES",
        "kind": "constant",
        "signature": "AUDIO_BIQUAD_TYPES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/AudioMath",
    "path": "engine/reference/core/math/AudioMath.md",
    "source": "engine/core/math/AudioMath.js",
    "import": "/engine/core/math/AudioMath.js",
    "sourceHash": "a17546b34afcfb4f4976ab0db8c10f71051ceab0f2e3d38b74ee960d6810e8fd",
    "summary": "AudioMath.js - pure PCM/audio-domain math helpers.",
    "exports": [
      {
        "name": "audioClipSample",
        "kind": "function",
        "signature": "audioClipSample(sample, limit = 1)",
        "summary": ""
      },
      {
        "name": "audioSoftClipSample",
        "kind": "function",
        "signature": "audioSoftClipSample(sample, drive = 1)",
        "summary": ""
      },
      {
        "name": "audioClipSignal",
        "kind": "function",
        "signature": "audioClipSignal(signal, limit = 1)",
        "summary": ""
      },
      {
        "name": "audioSoftClipSignal",
        "kind": "function",
        "signature": "audioSoftClipSignal(signal, drive = 1)",
        "summary": ""
      },
      {
        "name": "audioApplyGain",
        "kind": "function",
        "signature": "audioApplyGain(signal, gain = 1, options = {})",
        "summary": ""
      },
      {
        "name": "audioMix",
        "kind": "function",
        "signature": "audioMix(signals, options = {})",
        "summary": ""
      },
      {
        "name": "audioNormalize",
        "kind": "function",
        "signature": "audioNormalize(signal, targetPeak = 1)",
        "summary": ""
      },
      {
        "name": "audioStereoToMono",
        "kind": "function",
        "signature": "audioStereoToMono(left, right)",
        "summary": ""
      },
      {
        "name": "audioMonoToStereo",
        "kind": "function",
        "signature": "audioMonoToStereo(mono)",
        "summary": ""
      },
      {
        "name": "audioEqualPowerPanGains",
        "kind": "function",
        "signature": "audioEqualPowerPanGains(pan)",
        "summary": ""
      },
      {
        "name": "audioEqualPowerPanMono",
        "kind": "function",
        "signature": "audioEqualPowerPanMono(mono, pan)",
        "summary": ""
      },
      {
        "name": "audioWaveformPeaks",
        "kind": "function",
        "signature": "audioWaveformPeaks(signal, bucketCount)",
        "summary": ""
      },
      {
        "name": "audioWindowedRmsReport",
        "kind": "function",
        "signature": "audioWindowedRmsReport(signal, windowSize, hopSize = windowSize)",
        "summary": ""
      },
      {
        "name": "audioSilenceReport",
        "kind": "function",
        "signature": "audioSilenceReport(signal, options = {})",
        "summary": ""
      },
      {
        "name": "audioNoiseFloorReport",
        "kind": "function",
        "signature": "audioNoiseFloorReport(signal, options = {})",
        "summary": ""
      },
      {
        "name": "audioTransientReport",
        "kind": "function",
        "signature": "audioTransientReport(signal, options = {})",
        "summary": ""
      },
      {
        "name": "audioSpectralEntropyReport",
        "kind": "function",
        "signature": "audioSpectralEntropyReport(spectrum, options = {})",
        "summary": ""
      },
      {
        "name": "audioAnalyserByteToDb",
        "kind": "function",
        "signature": "audioAnalyserByteToDb(byteValue, minDb = DEFAULT_AUDIO_MIN_DB, maxDb = DEFAULT_AUDIO_MAX_DB)",
        "summary": ""
      },
      {
        "name": "audioDecibelsToAnalyserByte",
        "kind": "function",
        "signature": "audioDecibelsToAnalyserByte(db, minDb = DEFAULT_AUDIO_MIN_DB, maxDb = DEFAULT_AUDIO_MAX_DB)",
        "summary": ""
      },
      {
        "name": "DEFAULT_AUDIO_MIN_DB",
        "kind": "constant",
        "signature": "DEFAULT_AUDIO_MIN_DB",
        "summary": ""
      },
      {
        "name": "DEFAULT_AUDIO_MAX_DB",
        "kind": "constant",
        "signature": "DEFAULT_AUDIO_MAX_DB",
        "summary": ""
      },
      {
        "name": "audioDbToGain",
        "kind": "constant",
        "signature": "audioDbToGain",
        "summary": ""
      },
      {
        "name": "audioGainToDb",
        "kind": "constant",
        "signature": "audioGainToDb",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/BVHAccel",
    "path": "engine/reference/core/math/BVHAccel.md",
    "source": "engine/core/math/BVHAccel.js",
    "import": "/engine/core/math/BVHAccel.js",
    "sourceHash": "ce7ac8ba39b13f6b3d544e2652474a673b9d028ab3cee1cfa8b17789623e8ed3",
    "summary": "BVH Node - 32 bytes aligned for GPU If triCount == 0: internal node, leftChild_Or_FirstTri = left child index If triCount > 0: leaf node, leftChild_Or_FirstTri = first triangle index",
    "exports": [
      {
        "name": "BVHNode",
        "kind": "class",
        "signature": "class BVHNode",
        "summary": "BVH Node - 32 bytes aligned for GPU If triCount == 0: internal node, leftChild_Or_FirstTri = left child index If triCount > 0: leaf node, leftChild_Or_FirstTri = first triangle index"
      },
      {
        "name": "BVHBuilder",
        "kind": "class",
        "signature": "class BVHBuilder",
        "summary": "Build BVH from triangle mesh Uses Surface Area Heuristic for optimal splits"
      },
      {
        "name": "rayTriangleIntersect",
        "kind": "function",
        "signature": "rayTriangleIntersect(origin, dir, tri, tMax = INF_T)",
        "summary": "Möller-Trumbore ray-triangle intersection"
      },
      {
        "name": "traverseBVH",
        "kind": "function",
        "signature": "traverseBVH(origin, dir, nodes, triIndices, triangles)",
        "summary": "Traverse BVH and find closest intersection"
      },
      {
        "name": "serializeBVHForGPU",
        "kind": "function",
        "signature": "serializeBVHForGPU(bvh)",
        "summary": "Serialize BVH for GPU buffer upload"
      },
      {
        "name": "createRaycastMesh",
        "kind": "function",
        "signature": "createRaycastMesh(vertices, indices)",
        "summary": "Create raycastable mesh from vertices and indices"
      },
      {
        "name": "INF_T",
        "kind": "constant",
        "signature": "INF_T",
        "summary": ""
      },
      {
        "name": "EPSILON",
        "kind": "constant",
        "signature": "EPSILON",
        "summary": ""
      },
      {
        "name": "BVH_TRAVERSAL_WGSL",
        "kind": "constant",
        "signature": "BVH_TRAVERSAL_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/BenchmarkMath",
    "path": "engine/reference/core/math/BenchmarkMath.md",
    "source": "engine/core/math/BenchmarkMath.js",
    "import": "/engine/core/math/BenchmarkMath.js",
    "sourceHash": "71835a52054d2eb8f0a7ad760ea75fd81cf04e8dfca3747d1d0134d1346c466b",
    "summary": "BenchmarkMath.js - reusable benchmark rate, memory, compression, and cost estimates.",
    "exports": [
      {
        "name": "operationsPerSecond",
        "kind": "function",
        "signature": "operationsPerSecond(operationCount, durationMs)",
        "summary": ""
      },
      {
        "name": "throughputReport",
        "kind": "function",
        "signature": "throughputReport(options = {})",
        "summary": ""
      },
      {
        "name": "durationReport",
        "kind": "function",
        "signature": "durationReport(startMs, endMs, options = {})",
        "summary": ""
      },
      {
        "name": "memoryEstimateReport",
        "kind": "function",
        "signature": "memoryEstimateReport(options = {})",
        "summary": ""
      },
      {
        "name": "compressionRatioReport",
        "kind": "function",
        "signature": "compressionRatioReport(options = {})",
        "summary": ""
      },
      {
        "name": "computeCostEstimateReport",
        "kind": "function",
        "signature": "computeCostEstimateReport(options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/BezierCurves",
    "path": "engine/reference/core/math/BezierCurves.md",
    "source": "engine/core/math/BezierCurves.js",
    "import": "/engine/core/math/BezierCurves.js",
    "sourceHash": "f313c11cad44234d99de62d109c5c7bf2e94e88ccf406739bfbd96dd291de745",
    "summary": "Cubic Bezier curve defined by 4 control points",
    "exports": [
      {
        "name": "CubicBezier",
        "kind": "class",
        "signature": "class CubicBezier",
        "summary": "Cubic Bezier curve defined by 4 control points"
      },
      {
        "name": "QuadraticBezier",
        "kind": "class",
        "signature": "class QuadraticBezier",
        "summary": ""
      },
      {
        "name": "BezierSpline",
        "kind": "class",
        "signature": "class BezierSpline",
        "summary": ""
      },
      {
        "name": "straightLine",
        "kind": "function",
        "signature": "straightLine(start, end, radius = 1.0)",
        "summary": "Create a straight line as a degenerate Bezier"
      },
      {
        "name": "arc",
        "kind": "function",
        "signature": "arc(center, radius, startAngle, endAngle, tubeRadius = 1.0)",
        "summary": "Create an arc approximation using Bezier"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/BezierDistance",
    "path": "engine/reference/core/math/BezierDistance.md",
    "source": "engine/core/math/BezierDistance.js",
    "import": "/engine/core/math/BezierDistance.js",
    "sourceHash": "9d687fb013a8670b8fac68bdd8d7aa0e362ea521a812329963184b6423785ba1",
    "summary": "GPU-accelerated Bezier distance field computation",
    "exports": [
      {
        "name": "BezierDistanceCompute",
        "kind": "class",
        "signature": "class BezierDistanceCompute",
        "summary": "GPU-accelerated Bezier distance field computation"
      },
      {
        "name": "sdCapsule",
        "kind": "function",
        "signature": "sdCapsule(p, a, b, r)",
        "summary": "Signed distance to a capsule (line segment with radius)"
      },
      {
        "name": "capsuleClosestT",
        "kind": "function",
        "signature": "capsuleClosestT(p, a, b)",
        "summary": "Find closest point parameter on capsule"
      },
      {
        "name": "bezierDistanceCapsule",
        "kind": "function",
        "signature": "bezierDistanceCapsule(p, curve, segments = 16)",
        "summary": "Distance to Bezier using capsule chain approximation Fast but may miss fine details for highly curved sections"
      },
      {
        "name": "bezierDistanceBatch",
        "kind": "function",
        "signature": "bezierDistanceBatch(points, curve, segments = 16)",
        "summary": "Batch distance query for multiple points"
      },
      {
        "name": "bezierClosestNewton",
        "kind": "function",
        "signature": "bezierClosestNewton(p, curve, initialT = 0.5, iterations = 8)",
        "summary": "Find closest point on Bezier using Newton-Raphson iteration Minimizes |B(t) - p|² by finding roots of d/dt|B(t)-p|²"
      },
      {
        "name": "bezierDistanceHybrid",
        "kind": "function",
        "signature": "bezierDistanceHybrid(p, curve, capsuleSegments = 8, newtonIterations = 4)",
        "summary": "Hybrid: Capsule for initial guess, Newton for refinement Best balance of speed and accuracy"
      },
      {
        "name": "multiCurveDistance",
        "kind": "function",
        "signature": "multiCurveDistance(p, curves, segments = 16)",
        "summary": "Distance to multiple Bezier curves (smooth union)"
      },
      {
        "name": "smin",
        "kind": "function",
        "signature": "smin(a, b, k = 0.1)",
        "summary": "Smooth minimum of two distances (for blending)"
      },
      {
        "name": "multiCurveDistanceSmooth",
        "kind": "function",
        "signature": "multiCurveDistanceSmooth(p, curves, smoothness = 0.5)",
        "summary": "Distance to curves with smooth blending"
      },
      {
        "name": "curvesToGPUBuffer",
        "kind": "function",
        "signature": "curvesToGPUBuffer(curves)",
        "summary": "Prepare curve data for GPU upload Format: 4 vec4s per curve = 64 bytes [p0.xyz, 0] [p1.xyz, 0] [p2.xyz, 0] [p3.xyz, radius]"
      },
      {
        "name": "curvesToSegments",
        "kind": "function",
        "signature": "curvesToSegments(curves, segmentsPerCurve = 8)",
        "summary": "Pre-sample curves into line segments for GPU More efficient for many queries"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/BlendMath",
    "path": "engine/reference/core/math/BlendMath.md",
    "source": "engine/core/math/BlendMath.js",
    "import": "/engine/core/math/BlendMath.js",
    "sourceHash": "11427b5dae84171d713a8312a3ea4d9ff43ad17d54f488fee99c09a0512f4de0",
    "summary": "",
    "exports": [
      {
        "name": "straightRgba",
        "kind": "function",
        "signature": "straightRgba(color, opacity = 1)",
        "summary": ""
      },
      {
        "name": "premultiplyAlpha",
        "kind": "function",
        "signature": "premultiplyAlpha(color, opacity = 1)",
        "summary": ""
      },
      {
        "name": "unpremultiplyAlpha",
        "kind": "function",
        "signature": "unpremultiplyAlpha(color)",
        "summary": ""
      },
      {
        "name": "alphaBlend",
        "kind": "function",
        "signature": "alphaBlend(backdrop, source, opacity = 1)",
        "summary": ""
      },
      {
        "name": "premultipliedAlphaBlend",
        "kind": "function",
        "signature": "premultipliedAlphaBlend(backdrop, source, opacity = 1)",
        "summary": ""
      },
      {
        "name": "blendModeChannel",
        "kind": "function",
        "signature": "blendModeChannel(backdrop, source, mode = 'normal')",
        "summary": ""
      },
      {
        "name": "blendRgb",
        "kind": "function",
        "signature": "blendRgb(backdrop, source, mode = 'normal')",
        "summary": ""
      },
      {
        "name": "blendCompositeStraight",
        "kind": "function",
        "signature": "blendCompositeStraight(backdrop, source, mode = 'normal', opacity = 1)",
        "summary": ""
      },
      {
        "name": "coverageAlpha",
        "kind": "function",
        "signature": "coverageAlpha(coveredSamples, sampleCount = 1)",
        "summary": ""
      },
      {
        "name": "alphaToCoverage",
        "kind": "function",
        "signature": "alphaToCoverage(alpha, sampleCount = 1)",
        "summary": ""
      },
      {
        "name": "bayer4Threshold",
        "kind": "function",
        "signature": "bayer4Threshold(x, y)",
        "summary": ""
      },
      {
        "name": "ditherAlpha",
        "kind": "function",
        "signature": "ditherAlpha(alpha, x = 0, y = 0, frame = 0)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/BufferMath",
    "path": "engine/reference/core/math/BufferMath.md",
    "source": "engine/core/math/BufferMath.js",
    "import": "/engine/core/math/BufferMath.js",
    "sourceHash": "2e1f83b62de63783544ca42ddd3786ebbc731d646436cb3880a37e8275fa3fce",
    "summary": "BufferMath.js - reusable byte views, endian-safe DataView reads/writes, UTF-8 helpers, and cursors.",
    "exports": [
      {
        "name": "BufferCursor",
        "kind": "class",
        "signature": "class BufferCursor",
        "summary": ""
      },
      {
        "name": "bufferLittleEndian",
        "kind": "function",
        "signature": "bufferLittleEndian(endian = DEFAULT_ENDIAN)",
        "summary": ""
      },
      {
        "name": "bufferEndianName",
        "kind": "function",
        "signature": "bufferEndianName(endian = DEFAULT_ENDIAN)",
        "summary": ""
      },
      {
        "name": "bufferValueByteSize",
        "kind": "function",
        "signature": "bufferValueByteSize(type)",
        "summary": ""
      },
      {
        "name": "bufferByteView",
        "kind": "function",
        "signature": "bufferByteView(data)",
        "summary": ""
      },
      {
        "name": "bufferDataView",
        "kind": "function",
        "signature": "bufferDataView(data)",
        "summary": ""
      },
      {
        "name": "bufferRangeReport",
        "kind": "function",
        "signature": "bufferRangeReport(data, byteOffset = 0, byteLength = 0, options = {})",
        "summary": ""
      },
      {
        "name": "bufferRead",
        "kind": "function",
        "signature": "bufferRead(data, type, byteOffset, options = {})",
        "summary": ""
      },
      {
        "name": "bufferWrite",
        "kind": "function",
        "signature": "bufferWrite(data, type, byteOffset, value, options = {})",
        "summary": ""
      },
      {
        "name": "encodeUtf8",
        "kind": "function",
        "signature": "encodeUtf8(text)",
        "summary": ""
      },
      {
        "name": "decodeUtf8",
        "kind": "function",
        "signature": "decodeUtf8(data, options = {})",
        "summary": ""
      },
      {
        "name": "bufferReadUtf8",
        "kind": "function",
        "signature": "bufferReadUtf8(data, byteOffset, byteLength, options = {})",
        "summary": ""
      },
      {
        "name": "bufferWriteUtf8",
        "kind": "function",
        "signature": "bufferWriteUtf8(data, byteOffset, text, options = {})",
        "summary": ""
      },
      {
        "name": "concatBufferBytes",
        "kind": "function",
        "signature": "concatBufferBytes(chunks)",
        "summary": ""
      },
      {
        "name": "createBufferCursor",
        "kind": "function",
        "signature": "createBufferCursor(dataOrByteLength, options = {})",
        "summary": ""
      },
      {
        "name": "bufferCursorReport",
        "kind": "function",
        "signature": "bufferCursorReport(cursor)",
        "summary": ""
      },
      {
        "name": "BUFFER_ENDIAN",
        "kind": "constant",
        "signature": "BUFFER_ENDIAN",
        "summary": ""
      },
      {
        "name": "BUFFER_VALUE_TYPES",
        "kind": "constant",
        "signature": "BUFFER_VALUE_TYPES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/ChannelMath",
    "path": "engine/reference/core/math/ChannelMath.md",
    "source": "engine/core/math/ChannelMath.js",
    "import": "/engine/core/math/ChannelMath.js",
    "sourceHash": "f6a21c73ac703462ee56a70bf08cc494ddb51c6d7a233cf64442cfff135fa230",
    "summary": "ChannelMath.js - reusable channel geometry, spacing, hopset, and planning reports.",
    "exports": [
      {
        "name": "channelRangeReport",
        "kind": "function",
        "signature": "channelRangeReport(centerHz, bandwidthHz)",
        "summary": ""
      },
      {
        "name": "channelCenterFromIndex",
        "kind": "function",
        "signature": "channelCenterFromIndex(index, options = {})",
        "summary": ""
      },
      {
        "name": "channelIndexFromCenterReport",
        "kind": "function",
        "signature": "channelIndexFromCenterReport(centerHz, options = {})",
        "summary": ""
      },
      {
        "name": "wifi24ChannelCenterHz",
        "kind": "function",
        "signature": "wifi24ChannelCenterHz(channelNumber)",
        "summary": ""
      },
      {
        "name": "wifi24ChannelReport",
        "kind": "function",
        "signature": "wifi24ChannelReport(channelNumber, options = {})",
        "summary": ""
      },
      {
        "name": "channelBandMembershipReport",
        "kind": "function",
        "signature": "channelBandMembershipReport(channel, bands = [], options = {})",
        "summary": ""
      },
      {
        "name": "channelGuardBandReport",
        "kind": "function",
        "signature": "channelGuardBandReport(aChannel, bChannel, options = {})",
        "summary": ""
      },
      {
        "name": "channelHopsetReport",
        "kind": "function",
        "signature": "channelHopsetReport(channels = [], options = {})",
        "summary": ""
      },
      {
        "name": "channelInterferenceReport",
        "kind": "function",
        "signature": "channelInterferenceReport(candidateChannel, interferers = [], options = {})",
        "summary": ""
      },
      {
        "name": "channelPlanReport",
        "kind": "function",
        "signature": "channelPlanReport(candidates = [], interferers = [], options = {})",
        "summary": ""
      },
      {
        "name": "CHANNEL_DEFAULT_BASE_INDEX",
        "kind": "constant",
        "signature": "CHANNEL_DEFAULT_BASE_INDEX",
        "summary": ""
      },
      {
        "name": "CHANNEL_DEFAULT_BASE_CENTER_HZ",
        "kind": "constant",
        "signature": "CHANNEL_DEFAULT_BASE_CENTER_HZ",
        "summary": ""
      },
      {
        "name": "CHANNEL_DEFAULT_SPACING_HZ",
        "kind": "constant",
        "signature": "CHANNEL_DEFAULT_SPACING_HZ",
        "summary": ""
      },
      {
        "name": "CHANNEL_DEFAULT_BANDWIDTH_HZ",
        "kind": "constant",
        "signature": "CHANNEL_DEFAULT_BANDWIDTH_HZ",
        "summary": ""
      },
      {
        "name": "CHANNEL_DEFAULT_COCHANNEL_OVERLAP_RATIO",
        "kind": "constant",
        "signature": "CHANNEL_DEFAULT_COCHANNEL_OVERLAP_RATIO",
        "summary": ""
      },
      {
        "name": "CHANNEL_DEFAULT_REQUIRED_HOP_SPACING_HZ",
        "kind": "constant",
        "signature": "CHANNEL_DEFAULT_REQUIRED_HOP_SPACING_HZ",
        "summary": ""
      },
      {
        "name": "CHANNEL_DEFAULT_PLAN_WEIGHTS",
        "kind": "constant",
        "signature": "CHANNEL_DEFAULT_PLAN_WEIGHTS",
        "summary": ""
      },
      {
        "name": "WIFI_24_GHZ_CHANNEL_14_CENTER_HZ",
        "kind": "constant",
        "signature": "WIFI_24_GHZ_CHANNEL_14_CENTER_HZ",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/ChecksumMath",
    "path": "engine/reference/core/math/ChecksumMath.md",
    "source": "engine/core/math/ChecksumMath.js",
    "import": "/engine/core/math/ChecksumMath.js",
    "sourceHash": "f0f1a47c29c8e023a9fafb34f4d1beae6903a90c9eaebc55f1e2a000f79e6ba3",
    "summary": "ChecksumMath.js - reusable byte checksums, non-crypto hashes, rolling hashes, and digest wrappers.",
    "exports": [
      {
        "name": "checksumByteView",
        "kind": "function",
        "signature": "checksumByteView(data)",
        "summary": ""
      },
      {
        "name": "checksumHex32",
        "kind": "function",
        "signature": "checksumHex32(value)",
        "summary": ""
      },
      {
        "name": "checksumHex64",
        "kind": "function",
        "signature": "checksumHex64(value)",
        "summary": ""
      },
      {
        "name": "hexTailUint32",
        "kind": "function",
        "signature": "hexTailUint32(hex, fallback = 0)",
        "summary": ""
      },
      {
        "name": "legacySha1Hex",
        "kind": "function",
        "signature": "legacySha1Hex(data)",
        "summary": ""
      },
      {
        "name": "crc32",
        "kind": "function",
        "signature": "crc32(data, previousCrc = 0)",
        "summary": ""
      },
      {
        "name": "adler32",
        "kind": "function",
        "signature": "adler32(data, previousAdler = 1)",
        "summary": ""
      },
      {
        "name": "fnv1a32",
        "kind": "function",
        "signature": "fnv1a32(data, seed = FNV1A32_OFFSET_BASIS)",
        "summary": ""
      },
      {
        "name": "fnv1a64",
        "kind": "function",
        "signature": "fnv1a64(data, seed = FNV1A64_OFFSET_BASIS)",
        "summary": ""
      },
      {
        "name": "fnv1aStringCodeUnit32",
        "kind": "function",
        "signature": "fnv1aStringCodeUnit32(data, options = {})",
        "summary": ""
      },
      {
        "name": "fnv1aStringCodePointHead32",
        "kind": "function",
        "signature": "fnv1aStringCodePointHead32(data, options = {})",
        "summary": ""
      },
      {
        "name": "fnv1aLowByteString32",
        "kind": "function",
        "signature": "fnv1aLowByteString32(data, options = {})",
        "summary": ""
      },
      {
        "name": "fnv1aTaggedFloat32Sequence32",
        "kind": "function",
        "signature": "fnv1aTaggedFloat32Sequence32(values, options = {})",
        "summary": ""
      },
      {
        "name": "fnv1aTaggedUint32Sequence32",
        "kind": "function",
        "signature": "fnv1aTaggedUint32Sequence32(values, options = {})",
        "summary": ""
      },
      {
        "name": "legacyAvalancheUint32Hash32",
        "kind": "function",
        "signature": "legacyAvalancheUint32Hash32(value)",
        "summary": ""
      },
      {
        "name": "legacyAvalancheMixUint32Hash32",
        "kind": "function",
        "signature": "legacyAvalancheMixUint32Hash32(hash, value, multiplier = 0x9e3779b1)",
        "summary": ""
      },
      {
        "name": "fnv1aUint32Sequence32",
        "kind": "function",
        "signature": "fnv1aUint32Sequence32(values, options = {})",
        "summary": ""
      },
      {
        "name": "fnv1aInt32Sequence32",
        "kind": "function",
        "signature": "fnv1aInt32Sequence32(values, options = {})",
        "summary": ""
      },
      {
        "name": "xxHash32",
        "kind": "function",
        "signature": "xxHash32(data, seed = 0)",
        "summary": ""
      },
      {
        "name": "legacyFnv1aByteSequenceHash32",
        "kind": "function",
        "signature": "legacyFnv1aByteSequenceHash32(data, options = {})",
        "summary": ""
      },
      {
        "name": "legacyFnv1aNumberSequenceHash32",
        "kind": "function",
        "signature": "legacyFnv1aNumberSequenceHash32(values, seed = FNV1A32_OFFSET_BASIS)",
        "summary": ""
      },
      {
        "name": "legacyFnv1aStringHash32",
        "kind": "function",
        "signature": "legacyFnv1aStringHash32(data, seed = FNV1A32_OFFSET_BASIS)",
        "summary": ""
      },
      {
        "name": "legacyDjb2XorStringHash32",
        "kind": "function",
        "signature": "legacyDjb2XorStringHash32(data, seed = 5381)",
        "summary": ""
      },
      {
        "name": "legacyUnsignedStringHash31",
        "kind": "function",
        "signature": "legacyUnsignedStringHash31(data, seed = 0)",
        "summary": ""
      },
      {
        "name": "legacyStringHash32",
        "kind": "function",
        "signature": "legacyStringHash32(data)",
        "summary": ""
      },
      {
        "name": "legacyScaledNumberSequenceHash32",
        "kind": "function",
        "signature": "legacyScaledNumberSequenceHash32(values, options = {})",
        "summary": ""
      },
      {
        "name": "bufferHash",
        "kind": "function",
        "signature": "bufferHash(data, algorithm = CHECKSUM_ALGORITHMS.crc32)",
        "summary": ""
      },
      {
        "name": "checksumReport",
        "kind": "function",
        "signature": "checksumReport(data)",
        "summary": ""
      },
      {
        "name": "checksumBlockReport",
        "kind": "function",
        "signature": "checksumBlockReport(data, options = {})",
        "summary": ""
      },
      {
        "name": "rollingHash32",
        "kind": "function",
        "signature": "rollingHash32(data, windowSize, options = {})",
        "summary": ""
      },
      {
        "name": "bufferCompare",
        "kind": "function",
        "signature": "bufferCompare(left, right)",
        "summary": ""
      },
      {
        "name": "contentHashBytes",
        "kind": "function",
        "signature": "async contentHashBytes(data, algorithm = CHECKSUM_ALGORITHMS.sha256)",
        "summary": ""
      },
      {
        "name": "contentHashHex",
        "kind": "function",
        "signature": "async contentHashHex(data, algorithm = CHECKSUM_ALGORITHMS.sha256)",
        "summary": ""
      },
      {
        "name": "FNV1A32_OFFSET_BASIS",
        "kind": "constant",
        "signature": "FNV1A32_OFFSET_BASIS",
        "summary": ""
      },
      {
        "name": "CHECKSUM_ALGORITHMS",
        "kind": "constant",
        "signature": "CHECKSUM_ALGORITHMS",
        "summary": ""
      },
      {
        "name": "CHECKSUM_KNOWN_VECTORS",
        "kind": "constant",
        "signature": "CHECKSUM_KNOWN_VECTORS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/CompressionMath",
    "path": "engine/reference/core/math/CompressionMath.md",
    "source": "engine/core/math/CompressionMath.js",
    "import": "/engine/core/math/CompressionMath.js",
    "sourceHash": "a771d1ef8e49a69425a2c4852e136c7fa7991c39d9ab5e38b8f8e4035ed6c42b",
    "summary": "CompressionMath.js - pure compression primitive reports and planning helpers.",
    "exports": [
      {
        "name": "compressionZigZagEncode",
        "kind": "function",
        "signature": "compressionZigZagEncode(value)",
        "summary": ""
      },
      {
        "name": "compressionZigZagDecode",
        "kind": "function",
        "signature": "compressionZigZagDecode(encoded)",
        "summary": ""
      },
      {
        "name": "compressionRunLengthReport",
        "kind": "function",
        "signature": "compressionRunLengthReport(values, options = {})",
        "summary": ""
      },
      {
        "name": "compressionDeltaReport",
        "kind": "function",
        "signature": "compressionDeltaReport(values, options = {})",
        "summary": ""
      },
      {
        "name": "compressionPaletteReport",
        "kind": "function",
        "signature": "compressionPaletteReport(values, options = {})",
        "summary": ""
      },
      {
        "name": "compressionVarintReport",
        "kind": "function",
        "signature": "compressionVarintReport(values, options = {})",
        "summary": ""
      },
      {
        "name": "compressionEntropyPlan",
        "kind": "function",
        "signature": "compressionEntropyPlan(data, options = {})",
        "summary": ""
      },
      {
        "name": "compressionLz77WindowReport",
        "kind": "function",
        "signature": "compressionLz77WindowReport(options = {})",
        "summary": ""
      },
      {
        "name": "compressionHuffmanLengthReport",
        "kind": "function",
        "signature": "compressionHuffmanLengthReport(values, options = {})",
        "summary": ""
      },
      {
        "name": "compressionRangeModelReport",
        "kind": "function",
        "signature": "compressionRangeModelReport(values, options = {})",
        "summary": ""
      },
      {
        "name": "compressionDictionaryMatchReport",
        "kind": "function",
        "signature": "compressionDictionaryMatchReport(values, options = {})",
        "summary": ""
      },
      {
        "name": "compressionPrimitivePlan",
        "kind": "function",
        "signature": "compressionPrimitivePlan(values, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/CongestionMath",
    "path": "engine/reference/core/math/CongestionMath.md",
    "source": "engine/core/math/CongestionMath.js",
    "import": "/engine/core/math/CongestionMath.js",
    "sourceHash": "d58a15d5319512dbf62f81290b809345cfdb9c47734301a3b02ddf638f7bcf98",
    "summary": "CongestionMath.js - reusable congestion-window, pacing, Reno, QUIC, and CUBIC report helpers.",
    "exports": [
      {
        "name": "bandwidthDelayProductBytes",
        "kind": "function",
        "signature": "bandwidthDelayProductBytes(options = {})",
        "summary": ""
      },
      {
        "name": "congestionWindowLimitReport",
        "kind": "function",
        "signature": "congestionWindowLimitReport(options = {})",
        "summary": ""
      },
      {
        "name": "quicInitialCongestionWindowBytes",
        "kind": "function",
        "signature": "quicInitialCongestionWindowBytes(maxDatagramBytes = CONGESTION_DEFAULT_MAX_DATAGRAM_BYTES)",
        "summary": ""
      },
      {
        "name": "quicMinimumCongestionWindowBytes",
        "kind": "function",
        "signature": "quicMinimumCongestionWindowBytes(maxDatagramBytes = CONGESTION_DEFAULT_MAX_DATAGRAM_BYTES)",
        "summary": ""
      },
      {
        "name": "renoSlowStartThresholdBytes",
        "kind": "function",
        "signature": "renoSlowStartThresholdBytes(options = {})",
        "summary": ""
      },
      {
        "name": "renoSlowStartIncreaseBytes",
        "kind": "function",
        "signature": "renoSlowStartIncreaseBytes(acknowledgedBytes, smssBytes = CONGESTION_DEFAULT_MAX_DATAGRAM_BYTES)",
        "summary": ""
      },
      {
        "name": "renoCongestionAvoidanceIncreaseBytes",
        "kind": "function",
        "signature": "renoCongestionAvoidanceIncreaseBytes(congestionWindowBytes, smssBytes = CONGESTION_DEFAULT_MAX_DATAGRAM_BYTES)",
        "summary": ""
      },
      {
        "name": "renoAckWindowUpdateReport",
        "kind": "function",
        "signature": "renoAckWindowUpdateReport(options = {})",
        "summary": ""
      },
      {
        "name": "congestionLossResponseReport",
        "kind": "function",
        "signature": "congestionLossResponseReport(options = {})",
        "summary": ""
      },
      {
        "name": "persistentCongestionDurationMs",
        "kind": "function",
        "signature": "persistentCongestionDurationMs(options = {})",
        "summary": ""
      },
      {
        "name": "persistentCongestionReport",
        "kind": "function",
        "signature": "persistentCongestionReport(options = {})",
        "summary": ""
      },
      {
        "name": "congestionPacingRateBps",
        "kind": "function",
        "signature": "congestionPacingRateBps(options = {})",
        "summary": ""
      },
      {
        "name": "cubicKSeconds",
        "kind": "function",
        "signature": "cubicKSeconds(options = {})",
        "summary": ""
      },
      {
        "name": "cubicWindowSegments",
        "kind": "function",
        "signature": "cubicWindowSegments(options = {})",
        "summary": ""
      },
      {
        "name": "cubicRenoFriendlyAlpha",
        "kind": "function",
        "signature": "cubicRenoFriendlyAlpha(beta = CONGESTION_CUBIC_BETA)",
        "summary": ""
      },
      {
        "name": "cubicRenoEstimateReport",
        "kind": "function",
        "signature": "cubicRenoEstimateReport(options = {})",
        "summary": ""
      },
      {
        "name": "cubicTargetWindowReport",
        "kind": "function",
        "signature": "cubicTargetWindowReport(options = {})",
        "summary": ""
      },
      {
        "name": "cubicLossResponseReport",
        "kind": "function",
        "signature": "cubicLossResponseReport(options = {})",
        "summary": ""
      },
      {
        "name": "CONGESTION_DEFAULT_MAX_DATAGRAM_BYTES",
        "kind": "constant",
        "signature": "CONGESTION_DEFAULT_MAX_DATAGRAM_BYTES",
        "summary": ""
      },
      {
        "name": "CONGESTION_RENO_DECREASE_FACTOR",
        "kind": "constant",
        "signature": "CONGESTION_RENO_DECREASE_FACTOR",
        "summary": ""
      },
      {
        "name": "CONGESTION_RENO_MIN_WINDOW_SEGMENTS",
        "kind": "constant",
        "signature": "CONGESTION_RENO_MIN_WINDOW_SEGMENTS",
        "summary": ""
      },
      {
        "name": "CONGESTION_QUIC_INITIAL_PACKET_COUNT",
        "kind": "constant",
        "signature": "CONGESTION_QUIC_INITIAL_PACKET_COUNT",
        "summary": ""
      },
      {
        "name": "CONGESTION_QUIC_MIN_WINDOW_PACKET_COUNT",
        "kind": "constant",
        "signature": "CONGESTION_QUIC_MIN_WINDOW_PACKET_COUNT",
        "summary": ""
      },
      {
        "name": "CONGESTION_QUIC_INITIAL_WINDOW_MIN_BYTES",
        "kind": "constant",
        "signature": "CONGESTION_QUIC_INITIAL_WINDOW_MIN_BYTES",
        "summary": ""
      },
      {
        "name": "CONGESTION_PERSISTENT_THRESHOLD",
        "kind": "constant",
        "signature": "CONGESTION_PERSISTENT_THRESHOLD",
        "summary": ""
      },
      {
        "name": "CONGESTION_DEFAULT_CLOCK_GRANULARITY_MS",
        "kind": "constant",
        "signature": "CONGESTION_DEFAULT_CLOCK_GRANULARITY_MS",
        "summary": ""
      },
      {
        "name": "CONGESTION_CUBIC_BETA",
        "kind": "constant",
        "signature": "CONGESTION_CUBIC_BETA",
        "summary": ""
      },
      {
        "name": "CONGESTION_CUBIC_C",
        "kind": "constant",
        "signature": "CONGESTION_CUBIC_C",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/ConstraintMath",
    "path": "engine/reference/core/math/ConstraintMath.md",
    "source": "engine/core/math/ConstraintMath.js",
    "import": "/engine/core/math/ConstraintMath.js",
    "sourceHash": "e4ec0cf4757fd0ab3124f7d8fc4bd76f591ca89897dae341916fae814c333240",
    "summary": "ConstraintMath.js - pure joint limit, drive, spring, and projection reports.",
    "exports": [
      {
        "name": "constraintNormalizeAngle",
        "kind": "function",
        "signature": "constraintNormalizeAngle(angle, options = {})",
        "summary": ""
      },
      {
        "name": "constraintAngularLimitReport",
        "kind": "function",
        "signature": "constraintAngularLimitReport(angle, lowerLimit, upperLimit, options = {})",
        "summary": ""
      },
      {
        "name": "constraintAxisStateReport",
        "kind": "function",
        "signature": "constraintAxisStateReport(value, options = {})",
        "summary": ""
      },
      {
        "name": "constraintConeLimitReport",
        "kind": "function",
        "signature": "constraintConeLimitReport(swingY, swingZ, limitY, limitZ, options = {})",
        "summary": ""
      },
      {
        "name": "constraintSwingTwistLimitReport",
        "kind": "function",
        "signature": "constraintSwingTwistLimitReport(rotation, twistAxis = [1, 0, 0], options = {})",
        "summary": ""
      },
      {
        "name": "constraintSpringDamperCoefficients",
        "kind": "function",
        "signature": "constraintSpringDamperCoefficients(options = {})",
        "summary": ""
      },
      {
        "name": "constraintMotorTargetErrorReport",
        "kind": "function",
        "signature": "constraintMotorTargetErrorReport(current, target, options = {})",
        "summary": ""
      },
      {
        "name": "constraintJointProjectionErrorReport",
        "kind": "function",
        "signature": "constraintJointProjectionErrorReport(frameA = {}, frameB = {}, options = {})",
        "summary": ""
      },
      {
        "name": "constraintComplianceStiffnessReport",
        "kind": "function",
        "signature": "constraintComplianceStiffnessReport(options = {})",
        "summary": ""
      },
      {
        "name": "constraintDriveEnvelopeReport",
        "kind": "function",
        "signature": "constraintDriveEnvelopeReport(options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/DOMGeometryMath",
    "path": "engine/reference/core/math/DOMGeometryMath.md",
    "source": "engine/core/math/DOMGeometryMath.js",
    "import": "/engine/core/math/DOMGeometryMath.js",
    "sourceHash": "405da373597c057c28b34bfcb44286c26a8b8a64f95f008b3590b18d494f680e",
    "summary": "DOMGeometryMath.js - DOMPoint, DOMRect, DOMMatrix, and canvas coordinate helpers.",
    "exports": [
      {
        "name": "domPointToVec2",
        "kind": "function",
        "signature": "domPointToVec2(point, options = {})",
        "summary": ""
      },
      {
        "name": "domPointToVec4",
        "kind": "function",
        "signature": "domPointToVec4(point, options = {})",
        "summary": ""
      },
      {
        "name": "domRectNormalize",
        "kind": "function",
        "signature": "domRectNormalize(rect = {}, options = {})",
        "summary": ""
      },
      {
        "name": "domMatrix2DFromInit",
        "kind": "function",
        "signature": "domMatrix2DFromInit(init = {})",
        "summary": ""
      },
      {
        "name": "domMatrixToColumnMajor4",
        "kind": "function",
        "signature": "domMatrixToColumnMajor4(init = {})",
        "summary": ""
      },
      {
        "name": "columnMajor4ToDomMatrix",
        "kind": "function",
        "signature": "columnMajor4ToDomMatrix(matrix = IDENTITY_COLUMN_MAJOR_4)",
        "summary": ""
      },
      {
        "name": "domMatrixTransformPoint",
        "kind": "function",
        "signature": "domMatrixTransformPoint(point, matrixInit = IDENTITY_COLUMN_MAJOR_4)",
        "summary": ""
      },
      {
        "name": "domRectTransformBounds",
        "kind": "function",
        "signature": "domRectTransformBounds(rect, matrixInit = IDENTITY_COLUMN_MAJOR_4, options = {})",
        "summary": ""
      },
      {
        "name": "domQuadBoundsReport",
        "kind": "function",
        "signature": "domQuadBoundsReport(quad = {}, options = {})",
        "summary": ""
      },
      {
        "name": "domQuadTransformBounds",
        "kind": "function",
        "signature": "domQuadTransformBounds(quad = {}, matrixInit = IDENTITY_COLUMN_MAJOR_4, options = {})",
        "summary": ""
      },
      {
        "name": "domMatrixInverse2DReport",
        "kind": "function",
        "signature": "domMatrixInverse2DReport(matrixInit = IDENTITY_COLUMN_MAJOR_4)",
        "summary": ""
      },
      {
        "name": "canvasBackingStoreReport",
        "kind": "function",
        "signature": "canvasBackingStoreReport(cssWidth, cssHeight, devicePixelRatio = 1, options = {})",
        "summary": ""
      },
      {
        "name": "domScrollCoordinateReport",
        "kind": "function",
        "signature": "domScrollCoordinateReport(point = {}, viewport = {}, options = {})",
        "summary": ""
      },
      {
        "name": "canvasPointerCssPoint",
        "kind": "function",
        "signature": "canvasPointerCssPoint(event = {}, rect = {}, options = {})",
        "summary": ""
      },
      {
        "name": "canvasPointerWorldPoint",
        "kind": "function",
        "signature": "canvasPointerWorldPoint(event = {}, rect = {}, matrixInit = IDENTITY_COLUMN_MAJOR_4, options = {})",
        "summary": ""
      },
      {
        "name": "canvasPointerDevicePoint",
        "kind": "function",
        "signature": "canvasPointerDevicePoint(event = {}, rect = {}, canvasOrScale = {}, options = {})",
        "summary": ""
      },
      {
        "name": "domGeometryInteropReport",
        "kind": "function",
        "signature": "domGeometryInteropReport(options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/EngineMath",
    "path": "engine/reference/core/math/EngineMath.md",
    "source": "engine/core/math/EngineMath.js",
    "import": "/engine/core/math/EngineMath.js",
    "sourceHash": "2a73f494ca99e24c8fa1c70f29978dd5ba79f575eef13add0c5bfe55cbf9af1e",
    "summary": "EngineMath - basic 3D vector and matrix helpers shared across engine and tests Pure math, no rendering or platform side effects.",
    "exports": [
      {
        "name": "quatRotateVec3",
        "kind": "function",
        "signature": "quatRotateVec3(v, q)",
        "summary": ""
      },
      {
        "name": "quatConjugate",
        "kind": "function",
        "signature": "quatConjugate(q)",
        "summary": ""
      },
      {
        "name": "quatNormalize",
        "kind": "function",
        "signature": "quatNormalize(q)",
        "summary": ""
      },
      {
        "name": "quatMultiply",
        "kind": "function",
        "signature": "quatMultiply(a, b)",
        "summary": ""
      },
      {
        "name": "quatInverse",
        "kind": "function",
        "signature": "quatInverse(q)",
        "summary": ""
      },
      {
        "name": "mat4Identity",
        "kind": "function",
        "signature": "mat4Identity()",
        "summary": ""
      },
      {
        "name": "mat4Multiply",
        "kind": "function",
        "signature": "mat4Multiply(a, b, out)",
        "summary": ""
      },
      {
        "name": "mat4Translate",
        "kind": "function",
        "signature": "mat4Translate(m, x, y, z)",
        "summary": ""
      },
      {
        "name": "mat4Scale",
        "kind": "function",
        "signature": "mat4Scale(m, sx, sy, sz)",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveRad",
        "kind": "function",
        "signature": "mat4PerspectiveRad(fovRad, aspect, near, far)",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveRadWebGPU",
        "kind": "function",
        "signature": "mat4PerspectiveRadWebGPU(fovRad, aspect, near, far)",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveDeg",
        "kind": "function",
        "signature": "mat4PerspectiveDeg(fovDeg, aspect, near, far)",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveDegWebGPU",
        "kind": "function",
        "signature": "mat4PerspectiveDegWebGPU(fovDeg, aspect, near, far)",
        "summary": ""
      },
      {
        "name": "mat4Orthographic",
        "kind": "function",
        "signature": "mat4Orthographic(left, right, bottom, top, near, far)",
        "summary": ""
      },
      {
        "name": "mat4OrthographicWebGPU",
        "kind": "function",
        "signature": "mat4OrthographicWebGPU(left, right, bottom, top, near, far)",
        "summary": ""
      },
      {
        "name": "mat4LookAt",
        "kind": "function",
        "signature": "mat4LookAt(eye, center, up)",
        "summary": ""
      },
      {
        "name": "mat4Inverse",
        "kind": "function",
        "signature": "mat4Inverse(m, out)",
        "summary": ""
      },
      {
        "name": "mat4FromRotationTranslation",
        "kind": "function",
        "signature": "mat4FromRotationTranslation(q, t)",
        "summary": ""
      },
      {
        "name": "vec3",
        "kind": "re-export",
        "signature": "vec3",
        "summary": ""
      },
      {
        "name": "vec3Add",
        "kind": "re-export",
        "signature": "vec3Add",
        "summary": ""
      },
      {
        "name": "vec3Cross",
        "kind": "re-export",
        "signature": "vec3Cross",
        "summary": ""
      },
      {
        "name": "vec3Dot",
        "kind": "re-export",
        "signature": "vec3Dot",
        "summary": ""
      },
      {
        "name": "vec3Length",
        "kind": "re-export",
        "signature": "vec3Length",
        "summary": ""
      },
      {
        "name": "vec3LengthSq",
        "kind": "re-export",
        "signature": "vec3LengthSq",
        "summary": ""
      },
      {
        "name": "vec3Lerp",
        "kind": "re-export",
        "signature": "vec3Lerp",
        "summary": ""
      },
      {
        "name": "vec3Normalize",
        "kind": "re-export",
        "signature": "vec3Normalize",
        "summary": ""
      },
      {
        "name": "vec3Scale",
        "kind": "re-export",
        "signature": "vec3Scale",
        "summary": ""
      },
      {
        "name": "vec3Sub",
        "kind": "re-export",
        "signature": "vec3Sub",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/FilterMath",
    "path": "engine/reference/core/math/FilterMath.md",
    "source": "engine/core/math/FilterMath.js",
    "import": "/engine/core/math/FilterMath.js",
    "sourceHash": "27ff1ab18a8e38148b0794ff2b8a5de0daa9447f9ca67b80ecc3b2b8daf53d8c",
    "summary": "FilterMath.js - reusable filter kernel, signal FIR, and CPU RGBA convolution helpers.",
    "exports": [
      {
        "name": "filterKernelReport",
        "kind": "function",
        "signature": "filterKernelReport(kernel, options = {})",
        "summary": ""
      },
      {
        "name": "normalizeFilterKernel",
        "kind": "function",
        "signature": "normalizeFilterKernel(kernel, targetSum = 1, options = {})",
        "summary": ""
      },
      {
        "name": "boxFilterKernel1D",
        "kind": "function",
        "signature": "boxFilterKernel1D(radius = 1, options = {})",
        "summary": ""
      },
      {
        "name": "gaussianFilterKernel1D",
        "kind": "function",
        "signature": "gaussianFilterKernel1D(radius = 1, sigma = null)",
        "summary": ""
      },
      {
        "name": "gaussianFilterKernel2D",
        "kind": "function",
        "signature": "gaussianFilterKernel2D(radius = 1, sigma = null)",
        "summary": ""
      },
      {
        "name": "filterKernelPreset",
        "kind": "function",
        "signature": "filterKernelPreset(name)",
        "summary": ""
      },
      {
        "name": "filterSignalFIR",
        "kind": "function",
        "signature": "filterSignalFIR(signal, kernel, options = {})",
        "summary": ""
      },
      {
        "name": "filterSignalMedian",
        "kind": "function",
        "signature": "filterSignalMedian(signal, windowSize = 3)",
        "summary": ""
      },
      {
        "name": "filterSignalTemporalSmooth",
        "kind": "function",
        "signature": "filterSignalTemporalSmooth(signal, alpha = 0.5)",
        "summary": ""
      },
      {
        "name": "filterSignalNoiseReduce",
        "kind": "function",
        "signature": "filterSignalNoiseReduce(signal, options = {})",
        "summary": ""
      },
      {
        "name": "filterImageConvolutionRgba",
        "kind": "function",
        "signature": "filterImageConvolutionRgba(image, kernelSpec, options = {})",
        "summary": ""
      },
      {
        "name": "filterImageMorphologyRgba",
        "kind": "function",
        "signature": "filterImageMorphologyRgba(image, operator = 'dilate', radius = 1, options = {})",
        "summary": ""
      },
      {
        "name": "filterImageDilateRgba",
        "kind": "function",
        "signature": "filterImageDilateRgba(image, radius = 1, options = {})",
        "summary": ""
      },
      {
        "name": "filterImageErodeRgba",
        "kind": "function",
        "signature": "filterImageErodeRgba(image, radius = 1, options = {})",
        "summary": ""
      },
      {
        "name": "FILTER_IMAGE_EDGE_MODES",
        "kind": "constant",
        "signature": "FILTER_IMAGE_EDGE_MODES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/FormatMath",
    "path": "engine/reference/core/math/FormatMath.md",
    "source": "engine/core/math/FormatMath.js",
    "import": "/engine/core/math/FormatMath.js",
    "sourceHash": "10e004f8205995967fb4bc2336bfb8e499e0b7b1b30f7c4495fbe722199e87cd",
    "summary": "FormatMath.js - reusable signatures, MIME helpers, SemVer, text ranges, token cursors, and chunk tables.",
    "exports": [
      {
        "name": "TokenCursor",
        "kind": "class",
        "signature": "class TokenCursor",
        "summary": ""
      },
      {
        "name": "byteSignature",
        "kind": "function",
        "signature": "byteSignature(data, options = {})",
        "summary": ""
      },
      {
        "name": "hexToBytes",
        "kind": "function",
        "signature": "hexToBytes(hex, options = {})",
        "summary": ""
      },
      {
        "name": "magicNumberDetect",
        "kind": "function",
        "signature": "magicNumberDetect(data, options = {})",
        "summary": ""
      },
      {
        "name": "formatExtensionFromPath",
        "kind": "function",
        "signature": "formatExtensionFromPath(pathOrExtension)",
        "summary": ""
      },
      {
        "name": "formatMimeFromExtension",
        "kind": "function",
        "signature": "formatMimeFromExtension(pathOrExtension, fallback = DEFAULT_MIME_TYPE)",
        "summary": ""
      },
      {
        "name": "parseMimeType",
        "kind": "function",
        "signature": "parseMimeType(input)",
        "summary": ""
      },
      {
        "name": "mimeTypeGroupReport",
        "kind": "function",
        "signature": "mimeTypeGroupReport(input)",
        "summary": ""
      },
      {
        "name": "formatMimeSniff",
        "kind": "function",
        "signature": "formatMimeSniff(data, options = {})",
        "summary": ""
      },
      {
        "name": "formatAcceptListReport",
        "kind": "function",
        "signature": "formatAcceptListReport(accept)",
        "summary": ""
      },
      {
        "name": "formatAcceptMatchReport",
        "kind": "function",
        "signature": "formatAcceptMatchReport(file, accept, options = {})",
        "summary": ""
      },
      {
        "name": "formatAcceptHeaderReport",
        "kind": "function",
        "signature": "formatAcceptHeaderReport(acceptHeader, offeredMimeTypes, options = {})",
        "summary": ""
      },
      {
        "name": "parseSemanticVersion",
        "kind": "function",
        "signature": "parseSemanticVersion(version)",
        "summary": ""
      },
      {
        "name": "semanticVersionCompare",
        "kind": "function",
        "signature": "semanticVersionCompare(leftVersion, rightVersion)",
        "summary": ""
      },
      {
        "name": "semanticVersionRangeReport",
        "kind": "function",
        "signature": "semanticVersionRangeReport(version, range = '*')",
        "summary": ""
      },
      {
        "name": "formatCompatibilityReport",
        "kind": "function",
        "signature": "formatCompatibilityReport(candidate, requirements = {}, options = {})",
        "summary": ""
      },
      {
        "name": "versionCompare",
        "kind": "function",
        "signature": "versionCompare(leftVersion, rightVersion)",
        "summary": ""
      },
      {
        "name": "lineColumnMap",
        "kind": "function",
        "signature": "lineColumnMap(text)",
        "summary": ""
      },
      {
        "name": "lineColumnAt",
        "kind": "function",
        "signature": "lineColumnAt(mapOrText, index)",
        "summary": ""
      },
      {
        "name": "lineColumnToIndex",
        "kind": "function",
        "signature": "lineColumnToIndex(mapOrText, line, column)",
        "summary": ""
      },
      {
        "name": "rangeSpan",
        "kind": "function",
        "signature": "rangeSpan(start, end, options = {})",
        "summary": ""
      },
      {
        "name": "chunkTableParse",
        "kind": "function",
        "signature": "chunkTableParse(data, options = {})",
        "summary": ""
      },
      {
        "name": "createTokenCursor",
        "kind": "function",
        "signature": "createTokenCursor(text, options = {})",
        "summary": ""
      },
      {
        "name": "FORMAT_EXTENSION_MIME_TYPES",
        "kind": "constant",
        "signature": "FORMAT_EXTENSION_MIME_TYPES",
        "summary": ""
      },
      {
        "name": "MAGIC_NUMBER_SIGNATURES",
        "kind": "constant",
        "signature": "MAGIC_NUMBER_SIGNATURES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/FrameMath",
    "path": "engine/reference/core/math/FrameMath.md",
    "source": "engine/core/math/FrameMath.js",
    "import": "/engine/core/math/FrameMath.js",
    "sourceHash": "b13c853f61ca50f618225929d6f4649b611eae58c41e4e7eb1e68e6a2dabc923",
    "summary": "FrameMath.js - pure ImageData-like frame and temporal media math helpers.",
    "exports": [
      {
        "name": "frameDataReport",
        "kind": "function",
        "signature": "frameDataReport(frame, options = {})",
        "summary": ""
      },
      {
        "name": "frameDifferenceReport",
        "kind": "function",
        "signature": "frameDifferenceReport(referenceFrame, candidateFrame, options = {})",
        "summary": ""
      },
      {
        "name": "frameMotionMagnitudeMap",
        "kind": "function",
        "signature": "frameMotionMagnitudeMap(referenceFrame, candidateFrame, options = {})",
        "summary": ""
      },
      {
        "name": "frameResidualImage",
        "kind": "function",
        "signature": "frameResidualImage(referenceFrame, candidateFrame, options = {})",
        "summary": ""
      },
      {
        "name": "frameAverageReport",
        "kind": "function",
        "signature": "frameAverageReport(frame, options = {})",
        "summary": ""
      },
      {
        "name": "frameSceneChangeReport",
        "kind": "function",
        "signature": "frameSceneChangeReport(referenceFrame, candidateFrame, options = {})",
        "summary": ""
      },
      {
        "name": "frameKeyframeScoreReport",
        "kind": "function",
        "signature": "frameKeyframeScoreReport(referenceFrame, candidateFrame, options = {})",
        "summary": ""
      },
      {
        "name": "frameSequenceDifferenceReport",
        "kind": "function",
        "signature": "frameSequenceDifferenceReport(frames, options = {})",
        "summary": ""
      },
      {
        "name": "runtimeFrameDeltaSeconds",
        "kind": "function",
        "signature": "runtimeFrameDeltaSeconds(timestampMs, previousTimestampMs, maxDeltaSeconds = 0.1)",
        "summary": ""
      },
      {
        "name": "runtimeMonotonicClockStep",
        "kind": "function",
        "signature": "runtimeMonotonicClockStep(timestampMs, previousTimestampMs = 0)",
        "summary": ""
      },
      {
        "name": "frameRateFromDurations",
        "kind": "function",
        "signature": "frameRateFromDurations(durationsSeconds)",
        "summary": ""
      },
      {
        "name": "frameTimingReport",
        "kind": "function",
        "signature": "frameTimingReport(frames, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/ImageMath",
    "path": "engine/reference/core/math/ImageMath.md",
    "source": "engine/core/math/ImageMath.js",
    "import": "/engine/core/math/ImageMath.js",
    "sourceHash": "207282ec98e1bb10425bba85c716479118e92e7304a2c0fb7222fee0bfe9acaf",
    "summary": "ImageMath.js - deterministic RGBA/ImageData pixel helpers. These helpers intentionally operate on ImageData-like objects or raw RGBA array data. They do not construct browser ImageData, canvas, bitmap, or GPU resources, so they remain safe for workers and deterministic tests.",
    "exports": [
      {
        "name": "imageDataReport",
        "kind": "function",
        "signature": "imageDataReport(image, options = {})",
        "summary": ""
      },
      {
        "name": "imagePixelOffset",
        "kind": "function",
        "signature": "imagePixelOffset(width, x, y, options = {})",
        "summary": ""
      },
      {
        "name": "imageReadPixel",
        "kind": "function",
        "signature": "imageReadPixel(image, x, y, options = {})",
        "summary": ""
      },
      {
        "name": "imageWritePixel",
        "kind": "function",
        "signature": "imageWritePixel(image, x, y, rgba, options = {})",
        "summary": ""
      },
      {
        "name": "imageSampleNearest",
        "kind": "function",
        "signature": "imageSampleNearest(image, x, y, options = {})",
        "summary": ""
      },
      {
        "name": "imageSampleBilinear",
        "kind": "function",
        "signature": "imageSampleBilinear(image, x, y, options = {})",
        "summary": ""
      },
      {
        "name": "imageCopyRect",
        "kind": "function",
        "signature": "imageCopyRect(image, rect = {}, options = {})",
        "summary": ""
      },
      {
        "name": "imageFlipX",
        "kind": "function",
        "signature": "imageFlipX(image, options = {})",
        "summary": ""
      },
      {
        "name": "imageFlipY",
        "kind": "function",
        "signature": "imageFlipY(image, options = {})",
        "summary": ""
      },
      {
        "name": "imageSwizzleRgba",
        "kind": "function",
        "signature": "imageSwizzleRgba(image, order = [0, 1, 2, 3], options = {})",
        "summary": ""
      },
      {
        "name": "imagePremultiplyAlpha",
        "kind": "function",
        "signature": "imagePremultiplyAlpha(image, options = {})",
        "summary": ""
      },
      {
        "name": "imageUnpremultiplyAlpha",
        "kind": "function",
        "signature": "imageUnpremultiplyAlpha(image, options = {})",
        "summary": ""
      },
      {
        "name": "imageHistogramReport",
        "kind": "function",
        "signature": "imageHistogramReport(image, options = {})",
        "summary": ""
      },
      {
        "name": "imageAverageColor",
        "kind": "function",
        "signature": "imageAverageColor(image, options = {})",
        "summary": ""
      },
      {
        "name": "imageLuminanceMap",
        "kind": "function",
        "signature": "imageLuminanceMap(image, options = {})",
        "summary": ""
      },
      {
        "name": "imageEdgeMap",
        "kind": "function",
        "signature": "imageEdgeMap(image, options = {})",
        "summary": ""
      },
      {
        "name": "IMAGE_CHANNEL_COUNT_RGBA",
        "kind": "constant",
        "signature": "IMAGE_CHANNEL_COUNT_RGBA",
        "summary": ""
      },
      {
        "name": "IMAGE_LUMA_REC709_BYTE_WEIGHTS",
        "kind": "constant",
        "signature": "IMAGE_LUMA_REC709_BYTE_WEIGHTS",
        "summary": ""
      },
      {
        "name": "IMAGE_EDGE_MODES",
        "kind": "constant",
        "signature": "IMAGE_EDGE_MODES",
        "summary": ""
      },
      {
        "name": "IMAGE_CHANNEL_INDEX",
        "kind": "constant",
        "signature": "IMAGE_CHANNEL_INDEX",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/InputSignalMath",
    "path": "engine/reference/core/math/InputSignalMath.md",
    "source": "engine/core/math/InputSignalMath.js",
    "import": "/engine/core/math/InputSignalMath.js",
    "sourceHash": "a44ea7e3a58ebec46c181cd7f0a67355e280ad3748840bd75399867593efe1fe",
    "summary": "InputSignalMath.js - pure pointer/stylus sample shaping, smoothing, and prediction helpers.",
    "exports": [
      {
        "name": "inputAxisRemapReport",
        "kind": "function",
        "signature": "inputAxisRemapReport(axis, options = {})",
        "summary": ""
      },
      {
        "name": "inputRadialDeadzoneReport",
        "kind": "function",
        "signature": "inputRadialDeadzoneReport(axes, options = {})",
        "summary": ""
      },
      {
        "name": "inputPressureCurve",
        "kind": "function",
        "signature": "inputPressureCurve(pressure, options = {})",
        "summary": ""
      },
      {
        "name": "inputPressureReport",
        "kind": "function",
        "signature": "inputPressureReport(samples, options = {})",
        "summary": ""
      },
      {
        "name": "pointerTiltToAltitudeAzimuth",
        "kind": "function",
        "signature": "pointerTiltToAltitudeAzimuth(tiltX = 0, tiltY = 0)",
        "summary": ""
      },
      {
        "name": "pointerAltitudeAzimuthToTilt",
        "kind": "function",
        "signature": "pointerAltitudeAzimuthToTilt(altitudeAngle = HALF_PI, azimuthAngle = 0)",
        "summary": ""
      },
      {
        "name": "inputSampleVelocityReport",
        "kind": "function",
        "signature": "inputSampleVelocityReport(samples, options = {})",
        "summary": ""
      },
      {
        "name": "smoothInputSamples",
        "kind": "function",
        "signature": "smoothInputSamples(samples, options = {})",
        "summary": ""
      },
      {
        "name": "predictInputSample",
        "kind": "function",
        "signature": "predictInputSample(samples, lookaheadMs = 16.6666666667, options = {})",
        "summary": ""
      },
      {
        "name": "blendInputSamples",
        "kind": "function",
        "signature": "blendInputSamples(leftSample, rightSample, amount = 0.5, options = {})",
        "summary": ""
      },
      {
        "name": "inputStrokeStabilizationReport",
        "kind": "function",
        "signature": "inputStrokeStabilizationReport(samples, options = {})",
        "summary": ""
      },
      {
        "name": "INPUT_SIGNAL_LIMITS",
        "kind": "constant",
        "signature": "INPUT_SIGNAL_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/JitterMath",
    "path": "engine/reference/core/math/JitterMath.md",
    "source": "engine/core/math/JitterMath.js",
    "import": "/engine/core/math/JitterMath.js",
    "sourceHash": "08fd171a30e601d401e76ef5f68f2915b900f6129ad7a0f7fdd06d5467c24bea",
    "summary": "JitterMath.js - packet delay variation, RTP/WebRTC jitter, and adaptive buffer reports.",
    "exports": [
      {
        "name": "jitterQualityScore",
        "kind": "function",
        "signature": "jitterQualityScore(jitterMs, options = {})",
        "summary": ""
      },
      {
        "name": "packetDelayVariationMs",
        "kind": "function",
        "signature": "packetDelayVariationMs(firstDelayMs, secondDelayMs)",
        "summary": ""
      },
      {
        "name": "packetDelayVariationReport",
        "kind": "function",
        "signature": "packetDelayVariationReport(samplesMs = [], options = {})",
        "summary": ""
      },
      {
        "name": "rtpJitterUpdateReport",
        "kind": "function",
        "signature": "rtpJitterUpdateReport(previous = null, packet = {}, options = {})",
        "summary": ""
      },
      {
        "name": "rtpJitterReport",
        "kind": "function",
        "signature": "rtpJitterReport(packets = [], options = {})",
        "summary": ""
      },
      {
        "name": "adaptiveJitterEstimateUpdate",
        "kind": "function",
        "signature": "adaptiveJitterEstimateUpdate(previous = {}, intervalMs, options = {})",
        "summary": ""
      },
      {
        "name": "adaptiveJitterBufferReport",
        "kind": "function",
        "signature": "adaptiveJitterBufferReport(options = {})",
        "summary": ""
      },
      {
        "name": "peerRttJitterReport",
        "kind": "function",
        "signature": "peerRttJitterReport(rttSamplesMs = [], options = {})",
        "summary": ""
      },
      {
        "name": "webRtcJitterBufferReport",
        "kind": "function",
        "signature": "webRtcJitterBufferReport(stats = {}, options = {})",
        "summary": ""
      },
      {
        "name": "interFrameDelayVariationReport",
        "kind": "function",
        "signature": "interFrameDelayVariationReport(stats = {})",
        "summary": ""
      },
      {
        "name": "JITTER_DEFAULT_EMA_ALPHA",
        "kind": "constant",
        "signature": "JITTER_DEFAULT_EMA_ALPHA",
        "summary": ""
      },
      {
        "name": "JITTER_DEFAULT_TARGET_MS",
        "kind": "constant",
        "signature": "JITTER_DEFAULT_TARGET_MS",
        "summary": ""
      },
      {
        "name": "JITTER_DEFAULT_MAX_MS",
        "kind": "constant",
        "signature": "JITTER_DEFAULT_MAX_MS",
        "summary": ""
      },
      {
        "name": "JITTER_DEFAULT_BUFFER_MULTIPLIER",
        "kind": "constant",
        "signature": "JITTER_DEFAULT_BUFFER_MULTIPLIER",
        "summary": ""
      },
      {
        "name": "JITTER_DEFAULT_MIN_BUFFER_DELAY_MS",
        "kind": "constant",
        "signature": "JITTER_DEFAULT_MIN_BUFFER_DELAY_MS",
        "summary": ""
      },
      {
        "name": "JITTER_DEFAULT_MAX_BUFFER_DELAY_MS",
        "kind": "constant",
        "signature": "JITTER_DEFAULT_MAX_BUFFER_DELAY_MS",
        "summary": ""
      },
      {
        "name": "JITTER_DEFAULT_SPIKE_FACTOR",
        "kind": "constant",
        "signature": "JITTER_DEFAULT_SPIKE_FACTOR",
        "summary": ""
      },
      {
        "name": "JITTER_DEFAULT_RECOVER_RATE_MS",
        "kind": "constant",
        "signature": "JITTER_DEFAULT_RECOVER_RATE_MS",
        "summary": ""
      },
      {
        "name": "JITTER_DEFAULT_RECOVER_AFTER_FRAMES",
        "kind": "constant",
        "signature": "JITTER_DEFAULT_RECOVER_AFTER_FRAMES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/LineToVoxel",
    "path": "engine/reference/core/math/LineToVoxel.md",
    "source": "engine/core/math/LineToVoxel.js",
    "import": "/engine/core/math/LineToVoxel.js",
    "sourceHash": "4ae367194401868c657d628e1031b7f27275d154487c59c2f0b776f399b9479d",
    "summary": "Node in a line network (branch point or endpoint)",
    "exports": [
      {
        "name": "NetworkNode",
        "kind": "class",
        "signature": "class NetworkNode",
        "summary": "Node in a line network (branch point or endpoint)"
      },
      {
        "name": "NetworkEdge",
        "kind": "class",
        "signature": "class NetworkEdge",
        "summary": "Edge connecting two nodes"
      },
      {
        "name": "LineNetwork",
        "kind": "class",
        "signature": "class LineNetwork",
        "summary": "Network of connected curves for voxelization"
      },
      {
        "name": "LineToVoxelizer",
        "kind": "class",
        "signature": "class LineToVoxelizer",
        "summary": "Convert line network to voxel density field"
      },
      {
        "name": "GPULineVoxelizer",
        "kind": "class",
        "signature": "class GPULineVoxelizer",
        "summary": "GPU-accelerated line network voxelizer"
      },
      {
        "name": "generateTree",
        "kind": "function",
        "signature": "generateTree(options = {})",
        "summary": "Generate a simple tree structure"
      },
      {
        "name": "generateRoots",
        "kind": "function",
        "signature": "generateRoots(options = {})",
        "summary": "Generate root system"
      },
      {
        "name": "generateTunnel",
        "kind": "function",
        "signature": "generateTunnel(options = {})",
        "summary": "Generate cave/tunnel network"
      },
      {
        "name": "DEFAULT_RESOLUTION",
        "kind": "constant",
        "signature": "DEFAULT_RESOLUTION",
        "summary": "Default voxel resolution"
      },
      {
        "name": "DEFAULT_BLEND_RADIUS",
        "kind": "constant",
        "signature": "DEFAULT_BLEND_RADIUS",
        "summary": "Blend radius for smooth junctions"
      },
      {
        "name": "Materials",
        "kind": "constant",
        "signature": "Materials",
        "summary": "Material IDs"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/LossyCompressionMath",
    "path": "engine/reference/core/math/LossyCompressionMath.md",
    "source": "engine/core/math/LossyCompressionMath.js",
    "import": "/engine/core/math/LossyCompressionMath.js",
    "sourceHash": "d5e6176ebb6916a7d8d4f864fa428124a36755e58bdbbee88221c1bf1f1fedba",
    "summary": "LossyCompressionMath.js - pure transform, quantization, and reconstruction reports.",
    "exports": [
      {
        "name": "lossyDct1D",
        "kind": "function",
        "signature": "lossyDct1D(values)",
        "summary": ""
      },
      {
        "name": "lossyIdct1D",
        "kind": "function",
        "signature": "lossyIdct1D(coefficients)",
        "summary": ""
      },
      {
        "name": "lossyDct2D",
        "kind": "function",
        "signature": "lossyDct2D(values, options = {})",
        "summary": ""
      },
      {
        "name": "lossyIdct2D",
        "kind": "function",
        "signature": "lossyIdct2D(coefficients, options = {})",
        "summary": ""
      },
      {
        "name": "lossyZigZagIndices",
        "kind": "function",
        "signature": "lossyZigZagIndices(width = DEFAULT_BLOCK_WIDTH, height = DEFAULT_BLOCK_HEIGHT)",
        "summary": ""
      },
      {
        "name": "lossyQuantizeCoefficients",
        "kind": "function",
        "signature": "lossyQuantizeCoefficients(coefficients, quantization = 1)",
        "summary": ""
      },
      {
        "name": "lossyScalarQuantizationReport",
        "kind": "function",
        "signature": "lossyScalarQuantizationReport(values, options = {})",
        "summary": ""
      },
      {
        "name": "lossyResidualReport",
        "kind": "function",
        "signature": "lossyResidualReport(reference, candidate, options = {})",
        "summary": ""
      },
      {
        "name": "lossyBlockDctReport",
        "kind": "function",
        "signature": "lossyBlockDctReport(values, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathBits",
    "path": "engine/reference/core/math/MathBits.md",
    "source": "engine/core/math/MathBits.js",
    "import": "/engine/core/math/MathBits.js",
    "sourceHash": "50d03877b0c40a9289c5d5a82ad5aeeb0443977590077e22226783f601002f52",
    "summary": "MathBits.js - Bit manipulation, Morton codes, Hilbert curves, hash functions Critical for voxel systems, spatial indexing, and procedural generation",
    "exports": [
      {
        "name": "floorPowerOfTwo",
        "kind": "function",
        "signature": "floorPowerOfTwo(x)",
        "summary": ""
      },
      {
        "name": "nextPowerOf2",
        "kind": "function",
        "signature": "nextPowerOf2(x)",
        "summary": ""
      },
      {
        "name": "prevPowerOf2",
        "kind": "function",
        "signature": "prevPowerOf2(x)",
        "summary": ""
      },
      {
        "name": "popCount",
        "kind": "function",
        "signature": "popCount(x)",
        "summary": ""
      },
      {
        "name": "reverseBits",
        "kind": "function",
        "signature": "reverseBits(x)",
        "summary": ""
      },
      {
        "name": "ctz",
        "kind": "function",
        "signature": "ctz(x)",
        "summary": ""
      },
      {
        "name": "morton2DEncode",
        "kind": "function",
        "signature": "morton2DEncode(x, y)",
        "summary": ""
      },
      {
        "name": "morton2DDecode",
        "kind": "function",
        "signature": "morton2DDecode(m)",
        "summary": ""
      },
      {
        "name": "morton3DEncode",
        "kind": "function",
        "signature": "morton3DEncode(x, y, z)",
        "summary": ""
      },
      {
        "name": "morton3DDecode",
        "kind": "function",
        "signature": "morton3DDecode(m)",
        "summary": ""
      },
      {
        "name": "morton2DIncX",
        "kind": "function",
        "signature": "morton2DIncX(m)",
        "summary": ""
      },
      {
        "name": "morton2DIncY",
        "kind": "function",
        "signature": "morton2DIncY(m)",
        "summary": ""
      },
      {
        "name": "morton3DIncX",
        "kind": "function",
        "signature": "morton3DIncX(m)",
        "summary": ""
      },
      {
        "name": "morton3DIncY",
        "kind": "function",
        "signature": "morton3DIncY(m)",
        "summary": ""
      },
      {
        "name": "morton3DIncZ",
        "kind": "function",
        "signature": "morton3DIncZ(m)",
        "summary": ""
      },
      {
        "name": "hilbert2DEncode",
        "kind": "function",
        "signature": "hilbert2DEncode(n, x, y)",
        "summary": ""
      },
      {
        "name": "hilbert2DDecode",
        "kind": "function",
        "signature": "hilbert2DDecode(n, d)",
        "summary": ""
      },
      {
        "name": "hash1D",
        "kind": "function",
        "signature": "hash1D(n)",
        "summary": ""
      },
      {
        "name": "hash2D",
        "kind": "function",
        "signature": "hash2D(x, y)",
        "summary": ""
      },
      {
        "name": "hash3D",
        "kind": "function",
        "signature": "hash3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "hash4D",
        "kind": "function",
        "signature": "hash4D(x, y, z, w)",
        "summary": ""
      },
      {
        "name": "legacyStructureHash3D",
        "kind": "function",
        "signature": "legacyStructureHash3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "legacyWorldGeneratorHash3D",
        "kind": "function",
        "signature": "legacyWorldGeneratorHash3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "legacyStructureSeededHash3D",
        "kind": "function",
        "signature": "legacyStructureSeededHash3D(x, y, z, seed)",
        "summary": ""
      },
      {
        "name": "legacyStructureChunkSeed3D",
        "kind": "function",
        "signature": "legacyStructureChunkSeed3D(cx, cy, cz, seed = 0)",
        "summary": ""
      },
      {
        "name": "legacyStructurePositionSeed3D",
        "kind": "function",
        "signature": "legacyStructurePositionSeed3D(x, y, z, seed = 0)",
        "summary": ""
      },
      {
        "name": "legacyPrimeCoordinateXorHash3D",
        "kind": "function",
        "signature": "legacyPrimeCoordinateXorHash3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "legacyPrimeCoordinateAbsXorBucket3D",
        "kind": "function",
        "signature": "legacyPrimeCoordinateAbsXorBucket3D(x, y, z, tableSize)",
        "summary": ""
      },
      {
        "name": "legacyPrimeCoordinateU32XorBucket3D",
        "kind": "function",
        "signature": "legacyPrimeCoordinateU32XorBucket3D(x, y, z, tableSize)",
        "summary": ""
      },
      {
        "name": "legacyPrimeCoordinateSignedAddAbsBucket3D",
        "kind": "function",
        "signature": "legacyPrimeCoordinateSignedAddAbsBucket3D(x, y, z, tableSize)",
        "summary": ""
      },
      {
        "name": "legacyPrimeAxisHash32",
        "kind": "function",
        "signature": "legacyPrimeAxisHash32(value, axis = 'x', modulo = 0)",
        "summary": ""
      },
      {
        "name": "legacyWindTurbulenceAxisHash32",
        "kind": "function",
        "signature": "legacyWindTurbulenceAxisHash32(timeHash, axis)",
        "summary": ""
      },
      {
        "name": "legacyPrimeCoordinateXorSeed2D",
        "kind": "function",
        "signature": "legacyPrimeCoordinateXorSeed2D(x, z)",
        "summary": ""
      },
      {
        "name": "legacyPrimeCoordinateAdditiveSeed3D",
        "kind": "function",
        "signature": "legacyPrimeCoordinateAdditiveSeed3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "legacyDualRngPositionHash3D",
        "kind": "function",
        "signature": "legacyDualRngPositionHash3D(x, y, z, seed = 0)",
        "summary": ""
      },
      {
        "name": "legacySeedCharWeightedXorHash32",
        "kind": "function",
        "signature": "legacySeedCharWeightedXorHash32(seed, charCode, seedMultiplier, charMultiplier)",
        "summary": ""
      },
      {
        "name": "legacySeedCharXorHash32",
        "kind": "function",
        "signature": "legacySeedCharXorHash32(seed, charCode)",
        "summary": ""
      },
      {
        "name": "legacySeedCharEffectXorHash32",
        "kind": "function",
        "signature": "legacySeedCharEffectXorHash32(seed, charCode)",
        "summary": ""
      },
      {
        "name": "legacyGoldenRatioMul32",
        "kind": "function",
        "signature": "legacyGoldenRatioMul32(value)",
        "summary": ""
      },
      {
        "name": "legacyGoldenRatioChunkSeed32",
        "kind": "function",
        "signature": "legacyGoldenRatioChunkSeed32(seedBase, chunkIndex)",
        "summary": ""
      },
      {
        "name": "legacyMeshParticleSeed32",
        "kind": "function",
        "signature": "legacyMeshParticleSeed32(seedBase, triIndex, particleIndex)",
        "summary": ""
      },
      {
        "name": "legacyPcgAdvanceState32",
        "kind": "function",
        "signature": "legacyPcgAdvanceState32(state)",
        "summary": ""
      },
      {
        "name": "legacyPcgOutput32",
        "kind": "function",
        "signature": "legacyPcgOutput32(state)",
        "summary": ""
      },
      {
        "name": "legacyPcgHash32",
        "kind": "function",
        "signature": "legacyPcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyPathTracingPcgHash32",
        "kind": "function",
        "signature": "legacyPathTracingPcgHash32(input)",
        "summary": ""
      },
      {
        "name": "legacyPbrMaterialsPcgHash32",
        "kind": "function",
        "signature": "legacyPbrMaterialsPcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyFluidWaterPcgHash32",
        "kind": "function",
        "signature": "legacyFluidWaterPcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyMagicEffectsPcgHash32",
        "kind": "function",
        "signature": "legacyMagicEffectsPcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyPhaseVFXPcgHash32",
        "kind": "function",
        "signature": "legacyPhaseVFXPcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyPathtracingGIPcgHash32",
        "kind": "function",
        "signature": "legacyPathtracingGIPcgHash32(input)",
        "summary": ""
      },
      {
        "name": "legacyPathtracingGIRandomFloat01Step",
        "kind": "function",
        "signature": "legacyPathtracingGIRandomFloat01Step(state)",
        "summary": ""
      },
      {
        "name": "legacyWorld3DPreviewPcgHash32",
        "kind": "function",
        "signature": "legacyWorld3DPreviewPcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyAuroraPcgHash32",
        "kind": "function",
        "signature": "legacyAuroraPcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyCelestialStarsPcgHash32",
        "kind": "function",
        "signature": "legacyCelestialStarsPcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyUnderwaterPcgHash32",
        "kind": "function",
        "signature": "legacyUnderwaterPcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyVoronoiRuntimePcgHash32",
        "kind": "function",
        "signature": "legacyVoronoiRuntimePcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyProceduralTreeRuntimePcgHash32",
        "kind": "function",
        "signature": "legacyProceduralTreeRuntimePcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyMeshToParticlesPcgHash32",
        "kind": "function",
        "signature": "legacyMeshToParticlesPcgHash32(input)",
        "summary": ""
      },
      {
        "name": "legacyMeshToParticlesRandomFloat01Step",
        "kind": "function",
        "signature": "legacyMeshToParticlesRandomFloat01Step(state)",
        "summary": ""
      },
      {
        "name": "legacyParticleRuntimeSdfPcgHash32",
        "kind": "function",
        "signature": "legacyParticleRuntimeSdfPcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyParticleRuntimePcgHash32",
        "kind": "function",
        "signature": "legacyParticleRuntimePcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyParticleRuntimeRandomFloat01Step",
        "kind": "function",
        "signature": "legacyParticleRuntimeRandomFloat01Step(state)",
        "summary": ""
      },
      {
        "name": "legacyRayTracingRandomFloat01Step",
        "kind": "function",
        "signature": "legacyRayTracingRandomFloat01Step(state)",
        "summary": ""
      },
      {
        "name": "legacyPcgRandomFloat01Step",
        "kind": "function",
        "signature": "legacyPcgRandomFloat01Step(state)",
        "summary": ""
      },
      {
        "name": "legacyPcgHashStepRandomFloat01Step",
        "kind": "function",
        "signature": "legacyPcgHashStepRandomFloat01Step(state)",
        "summary": ""
      },
      {
        "name": "legacyPcgPixelFrameHash2D",
        "kind": "function",
        "signature": "legacyPcgPixelFrameHash2D(x, y, frameIndex, salt = 0)",
        "summary": ""
      },
      {
        "name": "legacyPcgPixelFrameRandom24Float01",
        "kind": "function",
        "signature": "legacyPcgPixelFrameRandom24Float01(x, y, frameIndex, salt = 0)",
        "summary": ""
      },
      {
        "name": "legacyRestirTemporalHash2Float01",
        "kind": "function",
        "signature": "legacyRestirTemporalHash2Float01(x, y, frameIndex)",
        "summary": ""
      },
      {
        "name": "legacyRestirSpatialHash2Float01",
        "kind": "function",
        "signature": "legacyRestirSpatialHash2Float01(x, y, frameIndex)",
        "summary": ""
      },
      {
        "name": "legacyPcgCloudJitterHash2D",
        "kind": "function",
        "signature": "legacyPcgCloudJitterHash2D(xBits, yBits)",
        "summary": ""
      },
      {
        "name": "legacyVolumetricCloudsJitterPcgHash2D",
        "kind": "function",
        "signature": "legacyVolumetricCloudsJitterPcgHash2D(xBits, yBits)",
        "summary": ""
      },
      {
        "name": "legacyPcgSsrJitterHash2D",
        "kind": "function",
        "signature": "legacyPcgSsrJitterHash2D(xBits, yBits)",
        "summary": ""
      },
      {
        "name": "legacySsrJitterPcgHash2D",
        "kind": "function",
        "signature": "legacySsrJitterPcgHash2D(xBits, yBits)",
        "summary": ""
      },
      {
        "name": "legacyPcgSparkleHash3D",
        "kind": "function",
        "signature": "legacyPcgSparkleHash3D(xBits, yBits, zBits)",
        "summary": ""
      },
      {
        "name": "legacyCustomParticleSparklePcgHash3D",
        "kind": "function",
        "signature": "legacyCustomParticleSparklePcgHash3D(xBits, yBits, zBits)",
        "summary": ""
      },
      {
        "name": "legacyMarchingCubesMaterialPcgHash2D",
        "kind": "function",
        "signature": "legacyMarchingCubesMaterialPcgHash2D(xBits, zBits)",
        "summary": ""
      },
      {
        "name": "legacyParticleVertexQualityPcgHash2D",
        "kind": "function",
        "signature": "legacyParticleVertexQualityPcgHash2D(instanceIndex, centerXBits)",
        "summary": ""
      },
      {
        "name": "legacyParticleVertexQualityRandomFloat01",
        "kind": "function",
        "signature": "legacyParticleVertexQualityRandomFloat01(instanceIndex, centerXBits)",
        "summary": ""
      },
      {
        "name": "legacyStandaloneRuntimePcgHash32",
        "kind": "function",
        "signature": "legacyStandaloneRuntimePcgHash32(value)",
        "summary": ""
      },
      {
        "name": "legacyStandaloneRuntimePcgFloat01",
        "kind": "function",
        "signature": "legacyStandaloneRuntimePcgFloat01(value)",
        "summary": ""
      },
      {
        "name": "legacyStandaloneRuntimePcgHashStepRandomFloat01Step",
        "kind": "function",
        "signature": "legacyStandaloneRuntimePcgHashStepRandomFloat01Step(state)",
        "summary": ""
      },
      {
        "name": "legacyDeterministicRngTickSeed32",
        "kind": "function",
        "signature": "legacyDeterministicRngTickSeed32(worldSeed, tick)",
        "summary": ""
      },
      {
        "name": "legacyDeterministicRngEntitySeed32",
        "kind": "function",
        "signature": "legacyDeterministicRngEntitySeed32(worldSeed, entityId, tick)",
        "summary": ""
      },
      {
        "name": "legacyDeterministicRngPositionSeed32",
        "kind": "function",
        "signature": "legacyDeterministicRngPositionSeed32(worldSeed, x, y, z)",
        "summary": ""
      },
      {
        "name": "legacyDeterministicRngInteractionSeed32",
        "kind": "function",
        "signature": "legacyDeterministicRngInteractionSeed32(worldSeed, entityA, entityB, tick)",
        "summary": ""
      },
      {
        "name": "xxHash32",
        "kind": "function",
        "signature": "xxHash32(seed, data)",
        "summary": ""
      },
      {
        "name": "pcgHash",
        "kind": "function",
        "signature": "pcgHash(state)",
        "summary": ""
      },
      {
        "name": "spatialKey2D",
        "kind": "function",
        "signature": "spatialKey2D(x, y)",
        "summary": ""
      },
      {
        "name": "spatialUnkey2D",
        "kind": "function",
        "signature": "spatialUnkey2D(key)",
        "summary": ""
      },
      {
        "name": "spatialKey3D",
        "kind": "function",
        "signature": "spatialKey3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "spatialUnkey3D",
        "kind": "function",
        "signature": "spatialUnkey3D(key)",
        "summary": ""
      },
      {
        "name": "packUnorm",
        "kind": "function",
        "signature": "packUnorm(value, bits)",
        "summary": ""
      },
      {
        "name": "unpackUnorm",
        "kind": "function",
        "signature": "unpackUnorm(packed, bits)",
        "summary": ""
      },
      {
        "name": "packSnorm",
        "kind": "function",
        "signature": "packSnorm(value, bits)",
        "summary": ""
      },
      {
        "name": "unpackSnorm",
        "kind": "function",
        "signature": "unpackSnorm(packed, bits)",
        "summary": ""
      },
      {
        "name": "packRGB565",
        "kind": "function",
        "signature": "packRGB565(r, g, b)",
        "summary": ""
      },
      {
        "name": "unpackRGB565",
        "kind": "function",
        "signature": "unpackRGB565(packed)",
        "summary": ""
      },
      {
        "name": "packRGBA4444",
        "kind": "function",
        "signature": "packRGBA4444(r, g, b, a)",
        "summary": ""
      },
      {
        "name": "unpackRGBA4444",
        "kind": "function",
        "signature": "unpackRGBA4444(packed)",
        "summary": ""
      },
      {
        "name": "isPowerOf2",
        "kind": "function",
        "signature": "isPowerOf2(x)",
        "summary": ""
      },
      {
        "name": "log2Int",
        "kind": "function",
        "signature": "log2Int(x)",
        "summary": ""
      },
      {
        "name": "ceilLog2",
        "kind": "function",
        "signature": "ceilLog2(x)",
        "summary": ""
      },
      {
        "name": "clz",
        "kind": "function",
        "signature": "clz(x)",
        "summary": ""
      },
      {
        "name": "ffs",
        "kind": "function",
        "signature": "ffs(x)",
        "summary": ""
      },
      {
        "name": "byteSwap16",
        "kind": "function",
        "signature": "byteSwap16(x)",
        "summary": ""
      },
      {
        "name": "byteSwap32",
        "kind": "function",
        "signature": "byteSwap32(x)",
        "summary": ""
      },
      {
        "name": "rotateLeft",
        "kind": "function",
        "signature": "rotateLeft(x, n)",
        "summary": ""
      },
      {
        "name": "rotateRight",
        "kind": "function",
        "signature": "rotateRight(x, n)",
        "summary": ""
      },
      {
        "name": "hashFloat1D",
        "kind": "function",
        "signature": "hashFloat1D(n)",
        "summary": ""
      },
      {
        "name": "hashFloat2D",
        "kind": "function",
        "signature": "hashFloat2D(x, y)",
        "summary": ""
      },
      {
        "name": "hashFloat3D",
        "kind": "function",
        "signature": "hashFloat3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "spatialKeyString2D",
        "kind": "function",
        "signature": "spatialKeyString2D(x, y)",
        "summary": ""
      },
      {
        "name": "spatialKeyString3D",
        "kind": "function",
        "signature": "spatialKeyString3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "pack2x16",
        "kind": "function",
        "signature": "pack2x16(a, b)",
        "summary": ""
      },
      {
        "name": "unpack2x16",
        "kind": "function",
        "signature": "unpack2x16(packed)",
        "summary": ""
      },
      {
        "name": "pack4x8",
        "kind": "function",
        "signature": "pack4x8(a, b, c, d)",
        "summary": ""
      },
      {
        "name": "unpack4x8",
        "kind": "function",
        "signature": "unpack4x8(packed)",
        "summary": ""
      },
      {
        "name": "LEGACY_PRIME_COORDINATE_U32_XOR_BUCKET3D_WGSL",
        "kind": "constant",
        "signature": "LEGACY_PRIME_COORDINATE_U32_XOR_BUCKET3D_WGSL",
        "summary": ""
      },
      {
        "name": "LEGACY_PRIME_COORDINATE_SIGNED_ADD_ABS_BUCKET3D_WGSL",
        "kind": "constant",
        "signature": "LEGACY_PRIME_COORDINATE_SIGNED_ADD_ABS_BUCKET3D_WGSL",
        "summary": ""
      },
      {
        "name": "LEGACY_MESH_PARTICLE_SEED_WGSL",
        "kind": "constant",
        "signature": "LEGACY_MESH_PARTICLE_SEED_WGSL",
        "summary": ""
      },
      {
        "name": "LEGACY_PCG32_WGSL",
        "kind": "constant",
        "signature": "LEGACY_PCG32_WGSL",
        "summary": ""
      },
      {
        "name": "LEGACY_PARTICLE_VERTEX_QUALITY_PCG_WGSL",
        "kind": "constant",
        "signature": "LEGACY_PARTICLE_VERTEX_QUALITY_PCG_WGSL",
        "summary": ""
      },
      {
        "name": "LEGACY_STANDALONE_RUNTIME_PCG_WGSL",
        "kind": "constant",
        "signature": "LEGACY_STANDALONE_RUNTIME_PCG_WGSL",
        "summary": ""
      },
      {
        "name": "LEGACY_RENDER_RUNTIME_PCG_HASH_WGSL",
        "kind": "constant",
        "signature": "LEGACY_RENDER_RUNTIME_PCG_HASH_WGSL",
        "summary": ""
      },
      {
        "name": "LEGACY_WORLD_GENERATION_RUNTIME_PCG_HASH_WGSL",
        "kind": "constant",
        "signature": "LEGACY_WORLD_GENERATION_RUNTIME_PCG_HASH_WGSL",
        "summary": ""
      },
      {
        "name": "MESH_TO_PARTICLES_RUNTIME_PCG_WGSL",
        "kind": "constant",
        "signature": "MESH_TO_PARTICLES_RUNTIME_PCG_WGSL",
        "summary": ""
      },
      {
        "name": "LEGACY_PARTICLE_RUNTIME_PCG_WGSL",
        "kind": "constant",
        "signature": "LEGACY_PARTICLE_RUNTIME_PCG_WGSL",
        "summary": ""
      },
      {
        "name": "PBR_MATERIALS_PCG_HASH_WGSL",
        "kind": "constant",
        "signature": "PBR_MATERIALS_PCG_HASH_WGSL",
        "summary": ""
      },
      {
        "name": "FLUID_WATER_PCG_HASH_WGSL",
        "kind": "constant",
        "signature": "FLUID_WATER_PCG_HASH_WGSL",
        "summary": ""
      },
      {
        "name": "MAGIC_EFFECTS_PCG_HASH_WGSL",
        "kind": "constant",
        "signature": "MAGIC_EFFECTS_PCG_HASH_WGSL",
        "summary": ""
      },
      {
        "name": "PHASE_VFX_PCG_HASH_WGSL",
        "kind": "constant",
        "signature": "PHASE_VFX_PCG_HASH_WGSL",
        "summary": ""
      },
      {
        "name": "PATH_TRACING_GI_PCG_WGSL",
        "kind": "constant",
        "signature": "PATH_TRACING_GI_PCG_WGSL",
        "summary": ""
      },
      {
        "name": "RAY_TRACING_RANDOM_FLOAT_WGSL",
        "kind": "constant",
        "signature": "RAY_TRACING_RANDOM_FLOAT_WGSL",
        "summary": ""
      },
      {
        "name": "LEGACY_DETERMINISTIC_RNG_SEED32_WGSL",
        "kind": "constant",
        "signature": "LEGACY_DETERMINISTIC_RNG_SEED32_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathColor",
    "path": "engine/reference/core/math/MathColor.md",
    "source": "engine/core/math/MathColor.js",
    "import": "/engine/core/math/MathColor.js",
    "sourceHash": "bf522bdf31790488e62f46ccf2871f3574668250eaa7d6b3414e9ba1e17e2e56",
    "summary": "MathColor.js - Color spaces and conversions RGB, HSL, HSV, LAB, LCH, OKLAB, OKLCH, hex, blend modes, gradients, palettes",
    "exports": [
      {
        "name": "colorSpaceMetadata",
        "kind": "function",
        "signature": "colorSpaceMetadata(colorSpace = 'srgb')",
        "summary": ""
      },
      {
        "name": "srgbChannelToLinear",
        "kind": "function",
        "signature": "srgbChannelToLinear(value)",
        "summary": ""
      },
      {
        "name": "linearChannelToSrgb",
        "kind": "function",
        "signature": "linearChannelToSrgb(value)",
        "summary": ""
      },
      {
        "name": "srgbToLinearRgb",
        "kind": "function",
        "signature": "srgbToLinearRgb(color)",
        "summary": ""
      },
      {
        "name": "linearRgbToSrgb",
        "kind": "function",
        "signature": "linearRgbToSrgb(color)",
        "summary": ""
      },
      {
        "name": "linearRgbLuminance",
        "kind": "function",
        "signature": "linearRgbLuminance(color, coefficients = COLOR_LUMA_REC709)",
        "summary": ""
      },
      {
        "name": "relativeLuminance",
        "kind": "function",
        "signature": "relativeLuminance(color)",
        "summary": ""
      },
      {
        "name": "contrastRatio",
        "kind": "function",
        "signature": "contrastRatio(a, b)",
        "summary": ""
      },
      {
        "name": "rgbToYuv",
        "kind": "function",
        "signature": "rgbToYuv(color)",
        "summary": ""
      },
      {
        "name": "yuvToRgb",
        "kind": "function",
        "signature": "yuvToRgb(color)",
        "summary": ""
      },
      {
        "name": "rgbToYCbCr",
        "kind": "function",
        "signature": "rgbToYCbCr(color)",
        "summary": ""
      },
      {
        "name": "yCbCrToRgb",
        "kind": "function",
        "signature": "yCbCrToRgb(color)",
        "summary": ""
      },
      {
        "name": "toneMapReinhard",
        "kind": "function",
        "signature": "toneMapReinhard(color)",
        "summary": ""
      },
      {
        "name": "toneMapReinhardExtended",
        "kind": "function",
        "signature": "toneMapReinhardExtended(color, whitePoint = 1)",
        "summary": ""
      },
      {
        "name": "toneMapACES",
        "kind": "function",
        "signature": "toneMapACES(color)",
        "summary": ""
      },
      {
        "name": "colorExposure",
        "kind": "function",
        "signature": "colorExposure(color, exposure = 1)",
        "summary": ""
      },
      {
        "name": "colorContrastAdjust",
        "kind": "function",
        "signature": "colorContrastAdjust(color, amount = 1, pivot = 0.5)",
        "summary": ""
      },
      {
        "name": "colorSaturationAdjust",
        "kind": "function",
        "signature": "colorSaturationAdjust(color, amount = 1, coefficients = COLOR_LUMA_REC709)",
        "summary": ""
      },
      {
        "name": "colorGamutReport",
        "kind": "function",
        "signature": "colorGamutReport(color, options = {})",
        "summary": ""
      },
      {
        "name": "colorHdrMetadataReport",
        "kind": "function",
        "signature": "colorHdrMetadataReport(options = {})",
        "summary": ""
      },
      {
        "name": "colorDisplayTransformReport",
        "kind": "function",
        "signature": "colorDisplayTransformReport(color, options = {})",
        "summary": ""
      },
      {
        "name": "colorDisplayCapabilityReport",
        "kind": "function",
        "signature": "colorDisplayCapabilityReport(observed = {}, options = {})",
        "summary": ""
      },
      {
        "name": "canvasColorSettingsReport",
        "kind": "function",
        "signature": "canvasColorSettingsReport(settings = {}, observedAttributes = null)",
        "summary": ""
      },
      {
        "name": "canvasPixelReadbackReport",
        "kind": "function",
        "signature": "canvasPixelReadbackReport(settings = {}, observedReadback = {}, options = {})",
        "summary": ""
      },
      {
        "name": "canvasPixelReadbackCapabilityReport",
        "kind": "function",
        "signature": "canvasPixelReadbackCapabilityReport(cases = [], options = {})",
        "summary": ""
      },
      {
        "name": "canvasPixelReadbackPrecisionReport",
        "kind": "function",
        "signature": "canvasPixelReadbackPrecisionReport(cases = [], options = {})",
        "summary": ""
      },
      {
        "name": "cssRelativeColorReport",
        "kind": "function",
        "signature": "cssRelativeColorReport(value, options = {})",
        "summary": ""
      },
      {
        "name": "cssNamedColorReport",
        "kind": "function",
        "signature": "cssNamedColorReport(value)",
        "summary": ""
      },
      {
        "name": "cssSystemColorReport",
        "kind": "function",
        "signature": "cssSystemColorReport(value, options = {})",
        "summary": ""
      },
      {
        "name": "cssSystemColorResolutionReport",
        "kind": "function",
        "signature": "cssSystemColorResolutionReport(systemColors = {}, options = {})",
        "summary": ""
      },
      {
        "name": "cssColorParseReport",
        "kind": "function",
        "signature": "cssColorParseReport(value, options = {})",
        "summary": ""
      },
      {
        "name": "colorContrastChoiceReport",
        "kind": "function",
        "signature": "colorContrastChoiceReport(background, candidates = [[0, 0, 0], [1, 1, 1]], options = {})",
        "summary": ""
      },
      {
        "name": "cssLightDarkColorReport",
        "kind": "function",
        "signature": "cssLightDarkColorReport(lightColor, darkColor, options = {})",
        "summary": ""
      },
      {
        "name": "rgbContrast",
        "kind": "function",
        "signature": "rgbContrast(c, amount)",
        "summary": ""
      },
      {
        "name": "rgbSaturateAmount",
        "kind": "function",
        "signature": "rgbSaturateAmount(c, amount)",
        "summary": ""
      },
      {
        "name": "rgbBrighten",
        "kind": "function",
        "signature": "rgbBrighten(c, amount)",
        "summary": ""
      },
      {
        "name": "hexToRgb",
        "kind": "function",
        "signature": "hexToRgb(hex)",
        "summary": ""
      },
      {
        "name": "rgbToHex",
        "kind": "function",
        "signature": "rgbToHex(c)",
        "summary": ""
      },
      {
        "name": "byteRgbToHex",
        "kind": "function",
        "signature": "byteRgbToHex(r, g, b)",
        "summary": ""
      },
      {
        "name": "hexToRgba",
        "kind": "function",
        "signature": "hexToRgba(hex)",
        "summary": ""
      },
      {
        "name": "rgbaToHex",
        "kind": "function",
        "signature": "rgbaToHex(c)",
        "summary": ""
      },
      {
        "name": "intToRgb",
        "kind": "function",
        "signature": "intToRgb(int)",
        "summary": ""
      },
      {
        "name": "rgbToInt",
        "kind": "function",
        "signature": "rgbToInt(c)",
        "summary": ""
      },
      {
        "name": "rgbToHsl",
        "kind": "function",
        "signature": "rgbToHsl(c)",
        "summary": ""
      },
      {
        "name": "hslToRgb",
        "kind": "function",
        "signature": "hslToRgb(c)",
        "summary": ""
      },
      {
        "name": "rgbToHsv",
        "kind": "function",
        "signature": "rgbToHsv(c)",
        "summary": ""
      },
      {
        "name": "hsvToRgb",
        "kind": "function",
        "signature": "hsvToRgb(c)",
        "summary": ""
      },
      {
        "name": "rgbToXyz",
        "kind": "function",
        "signature": "rgbToXyz(c)",
        "summary": ""
      },
      {
        "name": "xyzD65ToD50",
        "kind": "function",
        "signature": "xyzD65ToD50(xyz)",
        "summary": ""
      },
      {
        "name": "xyzD50ToD65",
        "kind": "function",
        "signature": "xyzD50ToD65(xyz)",
        "summary": ""
      },
      {
        "name": "xyzToRgb",
        "kind": "function",
        "signature": "xyzToRgb(c)",
        "summary": ""
      },
      {
        "name": "xyzToLab",
        "kind": "function",
        "signature": "xyzToLab(c)",
        "summary": ""
      },
      {
        "name": "labToXyz",
        "kind": "function",
        "signature": "labToXyz(c)",
        "summary": ""
      },
      {
        "name": "labDistance",
        "kind": "function",
        "signature": "labDistance(a, b)",
        "summary": ""
      },
      {
        "name": "labToLch",
        "kind": "function",
        "signature": "labToLch(c)",
        "summary": ""
      },
      {
        "name": "lchToLab",
        "kind": "function",
        "signature": "lchToLab(c)",
        "summary": ""
      },
      {
        "name": "rgbToOklab",
        "kind": "function",
        "signature": "rgbToOklab(c)",
        "summary": ""
      },
      {
        "name": "oklabToRgb",
        "kind": "function",
        "signature": "oklabToRgb(c)",
        "summary": ""
      },
      {
        "name": "oklabToOklch",
        "kind": "function",
        "signature": "oklabToOklch(c)",
        "summary": ""
      },
      {
        "name": "oklchToOklab",
        "kind": "function",
        "signature": "oklchToOklab(c)",
        "summary": ""
      },
      {
        "name": "rgbLerpOklab",
        "kind": "function",
        "signature": "rgbLerpOklab(a, b, t)",
        "summary": ""
      },
      {
        "name": "kelvinToRgb",
        "kind": "function",
        "signature": "kelvinToRgb(kelvin)",
        "summary": ""
      },
      {
        "name": "blendSoftLight",
        "kind": "function",
        "signature": "blendSoftLight(base, blend)",
        "summary": ""
      },
      {
        "name": "blendHardLight",
        "kind": "function",
        "signature": "blendHardLight(base, blend)",
        "summary": ""
      },
      {
        "name": "blendColorDodge",
        "kind": "function",
        "signature": "blendColorDodge(base, blend)",
        "summary": ""
      },
      {
        "name": "blendColorBurn",
        "kind": "function",
        "signature": "blendColorBurn(base, blend)",
        "summary": ""
      },
      {
        "name": "gradientLinear",
        "kind": "function",
        "signature": "gradientLinear(stops, t)",
        "summary": ""
      },
      {
        "name": "gradientOklab",
        "kind": "function",
        "signature": "gradientOklab(stops, t)",
        "summary": ""
      },
      {
        "name": "paletteAnalogous",
        "kind": "function",
        "signature": "paletteAnalogous(baseHue, count = 5, spread = 30)",
        "summary": ""
      },
      {
        "name": "paletteComplementary",
        "kind": "function",
        "signature": "paletteComplementary(baseHue)",
        "summary": ""
      },
      {
        "name": "paletteTriadic",
        "kind": "function",
        "signature": "paletteTriadic(baseHue)",
        "summary": ""
      },
      {
        "name": "paletteSplitComplementary",
        "kind": "function",
        "signature": "paletteSplitComplementary(baseHue, spread = 30)",
        "summary": ""
      },
      {
        "name": "paletteTetradic",
        "kind": "function",
        "signature": "paletteTetradic(baseHue)",
        "summary": ""
      },
      {
        "name": "paletteMonochromatic",
        "kind": "function",
        "signature": "paletteMonochromatic(baseHue, count = 5)",
        "summary": ""
      },
      {
        "name": "rgb",
        "kind": "function",
        "signature": "rgb(r, g, b)",
        "summary": ""
      },
      {
        "name": "rgba",
        "kind": "function",
        "signature": "rgba(r, g, b, a = 1)",
        "summary": ""
      },
      {
        "name": "rgbClone",
        "kind": "function",
        "signature": "rgbClone(c)",
        "summary": ""
      },
      {
        "name": "rgbAdd",
        "kind": "function",
        "signature": "rgbAdd(a, b)",
        "summary": ""
      },
      {
        "name": "rgbSub",
        "kind": "function",
        "signature": "rgbSub(a, b)",
        "summary": ""
      },
      {
        "name": "rgbMul",
        "kind": "function",
        "signature": "rgbMul(a, b)",
        "summary": ""
      },
      {
        "name": "rgbScale",
        "kind": "function",
        "signature": "rgbScale(c, s)",
        "summary": ""
      },
      {
        "name": "rgbLerp",
        "kind": "function",
        "signature": "rgbLerp(a, b, t)",
        "summary": ""
      },
      {
        "name": "rgbClamp",
        "kind": "function",
        "signature": "rgbClamp(c)",
        "summary": ""
      },
      {
        "name": "rgbLuminance",
        "kind": "function",
        "signature": "rgbLuminance(c)",
        "summary": ""
      },
      {
        "name": "rgbBrightness",
        "kind": "function",
        "signature": "rgbBrightness(c)",
        "summary": ""
      },
      {
        "name": "rgbMax",
        "kind": "function",
        "signature": "rgbMax(c)",
        "summary": ""
      },
      {
        "name": "rgbMin",
        "kind": "function",
        "signature": "rgbMin(c)",
        "summary": ""
      },
      {
        "name": "rgbInvert",
        "kind": "function",
        "signature": "rgbInvert(c)",
        "summary": ""
      },
      {
        "name": "rgbGrayscale",
        "kind": "function",
        "signature": "rgbGrayscale(c)",
        "summary": ""
      },
      {
        "name": "hslLerp",
        "kind": "function",
        "signature": "hslLerp(a, b, t)",
        "summary": ""
      },
      {
        "name": "rgbToLab",
        "kind": "function",
        "signature": "rgbToLab(c)",
        "summary": ""
      },
      {
        "name": "labToRgb",
        "kind": "function",
        "signature": "labToRgb(c)",
        "summary": ""
      },
      {
        "name": "rgbDistance",
        "kind": "function",
        "signature": "rgbDistance(a, b)",
        "summary": ""
      },
      {
        "name": "rgbToLch",
        "kind": "function",
        "signature": "rgbToLch(c)",
        "summary": ""
      },
      {
        "name": "lchToRgb",
        "kind": "function",
        "signature": "lchToRgb(c)",
        "summary": ""
      },
      {
        "name": "rgbToOklch",
        "kind": "function",
        "signature": "rgbToOklch(c)",
        "summary": ""
      },
      {
        "name": "oklchToRgb",
        "kind": "function",
        "signature": "oklchToRgb(c)",
        "summary": ""
      },
      {
        "name": "blendNormal",
        "kind": "function",
        "signature": "blendNormal(base, blend)",
        "summary": ""
      },
      {
        "name": "blendMultiply",
        "kind": "function",
        "signature": "blendMultiply(base, blend)",
        "summary": ""
      },
      {
        "name": "blendScreen",
        "kind": "function",
        "signature": "blendScreen(base, blend)",
        "summary": ""
      },
      {
        "name": "blendOverlay",
        "kind": "function",
        "signature": "blendOverlay(base, blend)",
        "summary": ""
      },
      {
        "name": "blendDarken",
        "kind": "function",
        "signature": "blendDarken(base, blend)",
        "summary": ""
      },
      {
        "name": "blendLighten",
        "kind": "function",
        "signature": "blendLighten(base, blend)",
        "summary": ""
      },
      {
        "name": "blendDifference",
        "kind": "function",
        "signature": "blendDifference(base, blend)",
        "summary": ""
      },
      {
        "name": "blendExclusion",
        "kind": "function",
        "signature": "blendExclusion(base, blend)",
        "summary": ""
      },
      {
        "name": "blendAdd",
        "kind": "function",
        "signature": "blendAdd(base, blend)",
        "summary": ""
      },
      {
        "name": "blendSubtract",
        "kind": "function",
        "signature": "blendSubtract(base, blend)",
        "summary": ""
      },
      {
        "name": "COLOR_LUMA_REC709",
        "kind": "constant",
        "signature": "COLOR_LUMA_REC709",
        "summary": ""
      },
      {
        "name": "COLOR_LUMA_REC601",
        "kind": "constant",
        "signature": "COLOR_LUMA_REC601",
        "summary": ""
      },
      {
        "name": "COLOR_LUMA_REC2020",
        "kind": "constant",
        "signature": "COLOR_LUMA_REC2020",
        "summary": ""
      },
      {
        "name": "COLOR_SPACE_METADATA",
        "kind": "constant",
        "signature": "COLOR_SPACE_METADATA",
        "summary": ""
      },
      {
        "name": "CSS_NAMED_COLORS",
        "kind": "constant",
        "signature": "CSS_NAMED_COLORS",
        "summary": ""
      },
      {
        "name": "CSS_SYSTEM_COLOR_KEYWORDS",
        "kind": "constant",
        "signature": "CSS_SYSTEM_COLOR_KEYWORDS",
        "summary": ""
      },
      {
        "name": "CSS_DEPRECATED_SYSTEM_COLOR_MAP",
        "kind": "constant",
        "signature": "CSS_DEPRECATED_SYSTEM_COLOR_MAP",
        "summary": ""
      },
      {
        "name": "CANVAS_PREDEFINED_COLOR_SPACES",
        "kind": "constant",
        "signature": "CANVAS_PREDEFINED_COLOR_SPACES",
        "summary": ""
      },
      {
        "name": "CANVAS_COLOR_TYPES",
        "kind": "constant",
        "signature": "CANVAS_COLOR_TYPES",
        "summary": ""
      },
      {
        "name": "CANVAS_IMAGE_DATA_COLOR_SPACES",
        "kind": "constant",
        "signature": "CANVAS_IMAGE_DATA_COLOR_SPACES",
        "summary": ""
      },
      {
        "name": "CANVAS_IMAGE_DATA_PIXEL_FORMATS",
        "kind": "constant",
        "signature": "CANVAS_IMAGE_DATA_PIXEL_FORMATS",
        "summary": ""
      },
      {
        "name": "DISPLAY_COLOR_GAMUT_MEDIA_VALUES",
        "kind": "constant",
        "signature": "DISPLAY_COLOR_GAMUT_MEDIA_VALUES",
        "summary": ""
      },
      {
        "name": "DISPLAY_DYNAMIC_RANGE_MEDIA_VALUES",
        "kind": "constant",
        "signature": "DISPLAY_DYNAMIC_RANGE_MEDIA_VALUES",
        "summary": ""
      },
      {
        "name": "COLOR_WHITE",
        "kind": "constant",
        "signature": "COLOR_WHITE",
        "summary": ""
      },
      {
        "name": "COLOR_BLACK",
        "kind": "constant",
        "signature": "COLOR_BLACK",
        "summary": ""
      },
      {
        "name": "COLOR_RED",
        "kind": "constant",
        "signature": "COLOR_RED",
        "summary": ""
      },
      {
        "name": "COLOR_GREEN",
        "kind": "constant",
        "signature": "COLOR_GREEN",
        "summary": ""
      },
      {
        "name": "COLOR_BLUE",
        "kind": "constant",
        "signature": "COLOR_BLUE",
        "summary": ""
      },
      {
        "name": "COLOR_YELLOW",
        "kind": "constant",
        "signature": "COLOR_YELLOW",
        "summary": ""
      },
      {
        "name": "COLOR_CYAN",
        "kind": "constant",
        "signature": "COLOR_CYAN",
        "summary": ""
      },
      {
        "name": "COLOR_MAGENTA",
        "kind": "constant",
        "signature": "COLOR_MAGENTA",
        "summary": ""
      },
      {
        "name": "COLOR_ORANGE",
        "kind": "constant",
        "signature": "COLOR_ORANGE",
        "summary": ""
      },
      {
        "name": "COLOR_PURPLE",
        "kind": "constant",
        "signature": "COLOR_PURPLE",
        "summary": ""
      },
      {
        "name": "COLOR_GRAY",
        "kind": "constant",
        "signature": "COLOR_GRAY",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathConstants",
    "path": "engine/reference/core/math/MathConstants.md",
    "source": "engine/core/math/MathConstants.js",
    "import": "/engine/core/math/MathConstants.js",
    "sourceHash": "1b371cf20b8eb32d54c6d20454fc7f09dc12375b90025c7433cfb5b92c8643e8",
    "summary": "",
    "exports": [
      {
        "name": "PI",
        "kind": "constant",
        "signature": "PI",
        "summary": ""
      },
      {
        "name": "TAU",
        "kind": "constant",
        "signature": "TAU",
        "summary": ""
      },
      {
        "name": "HALF_PI",
        "kind": "constant",
        "signature": "HALF_PI",
        "summary": ""
      },
      {
        "name": "QUARTER_PI",
        "kind": "constant",
        "signature": "QUARTER_PI",
        "summary": ""
      },
      {
        "name": "DEG2RAD",
        "kind": "constant",
        "signature": "DEG2RAD",
        "summary": ""
      },
      {
        "name": "RAD2DEG",
        "kind": "constant",
        "signature": "RAD2DEG",
        "summary": ""
      },
      {
        "name": "EPSILON",
        "kind": "constant",
        "signature": "EPSILON",
        "summary": ""
      },
      {
        "name": "PHI",
        "kind": "constant",
        "signature": "PHI",
        "summary": ""
      },
      {
        "name": "SQRT2",
        "kind": "constant",
        "signature": "SQRT2",
        "summary": ""
      },
      {
        "name": "SQRT3",
        "kind": "constant",
        "signature": "SQRT3",
        "summary": ""
      },
      {
        "name": "SQRT5",
        "kind": "constant",
        "signature": "SQRT5",
        "summary": ""
      },
      {
        "name": "INV_SQRT2",
        "kind": "constant",
        "signature": "INV_SQRT2",
        "summary": ""
      },
      {
        "name": "INV_SQRT3",
        "kind": "constant",
        "signature": "INV_SQRT3",
        "summary": ""
      },
      {
        "name": "E",
        "kind": "constant",
        "signature": "E",
        "summary": ""
      },
      {
        "name": "LN2",
        "kind": "constant",
        "signature": "LN2",
        "summary": ""
      },
      {
        "name": "LN10",
        "kind": "constant",
        "signature": "LN10",
        "summary": ""
      },
      {
        "name": "LOG2E",
        "kind": "constant",
        "signature": "LOG2E",
        "summary": ""
      },
      {
        "name": "LOG10E",
        "kind": "constant",
        "signature": "LOG10E",
        "summary": ""
      },
      {
        "name": "SPEED_OF_LIGHT",
        "kind": "constant",
        "signature": "SPEED_OF_LIGHT",
        "summary": ""
      },
      {
        "name": "PLANCK",
        "kind": "constant",
        "signature": "PLANCK",
        "summary": ""
      },
      {
        "name": "BOLTZMANN",
        "kind": "constant",
        "signature": "BOLTZMANN",
        "summary": ""
      },
      {
        "name": "AVOGADRO",
        "kind": "constant",
        "signature": "AVOGADRO",
        "summary": ""
      },
      {
        "name": "GRAVITATIONAL",
        "kind": "constant",
        "signature": "GRAVITATIONAL",
        "summary": ""
      },
      {
        "name": "EARTH_GRAVITY",
        "kind": "constant",
        "signature": "EARTH_GRAVITY",
        "summary": ""
      },
      {
        "name": "EARTH_RADIUS",
        "kind": "constant",
        "signature": "EARTH_RADIUS",
        "summary": ""
      },
      {
        "name": "EARTH_MASS",
        "kind": "constant",
        "signature": "EARTH_MASS",
        "summary": ""
      },
      {
        "name": "STEFAN_BOLTZMANN",
        "kind": "constant",
        "signature": "STEFAN_BOLTZMANN",
        "summary": ""
      },
      {
        "name": "VACUUM_PERMITTIVITY",
        "kind": "constant",
        "signature": "VACUUM_PERMITTIVITY",
        "summary": ""
      },
      {
        "name": "VACUUM_PERMEABILITY",
        "kind": "constant",
        "signature": "VACUUM_PERMEABILITY",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathDualQuat",
    "path": "engine/reference/core/math/MathDualQuat.md",
    "source": "engine/core/math/MathDualQuat.js",
    "import": "/engine/core/math/MathDualQuat.js",
    "sourceHash": "df9af00af6769c29b4352b65a64db88653958ef7ebbe3f4d671388e5845e2ec7",
    "summary": "MathDualQuat.js - Dual Quaternion operations for skinning & rigid body interpolation Dual quaternion = [real_x, real_y, real_z, real_w, dual_x, dual_y, dual_z, dual_w] Real part = rotation quaternion, Dual part encodes translation Used for: DQS (Dual Quaternion Skinning), rigid body interpolation, screw motion",
    "exports": [
      {
        "name": "dqFromRotationTranslation",
        "kind": "function",
        "signature": "dqFromRotationTranslation(q, t)",
        "summary": ""
      },
      {
        "name": "dqFromMat4",
        "kind": "function",
        "signature": "dqFromMat4(m)",
        "summary": ""
      },
      {
        "name": "dqGetTranslation",
        "kind": "function",
        "signature": "dqGetTranslation(dq)",
        "summary": ""
      },
      {
        "name": "dqToMat4",
        "kind": "function",
        "signature": "dqToMat4(dq)",
        "summary": ""
      },
      {
        "name": "dqMultiply",
        "kind": "function",
        "signature": "dqMultiply(a, b)",
        "summary": ""
      },
      {
        "name": "dqConjugate",
        "kind": "function",
        "signature": "dqConjugate(dq)",
        "summary": ""
      },
      {
        "name": "dqNormalize",
        "kind": "function",
        "signature": "dqNormalize(dq)",
        "summary": ""
      },
      {
        "name": "dqInverse",
        "kind": "function",
        "signature": "dqInverse(dq)",
        "summary": ""
      },
      {
        "name": "dqLerp",
        "kind": "function",
        "signature": "dqLerp(a, b, t)",
        "summary": ""
      },
      {
        "name": "dqSclerp",
        "kind": "function",
        "signature": "dqSclerp(a, b, t)",
        "summary": ""
      },
      {
        "name": "dqTransformPoint",
        "kind": "function",
        "signature": "dqTransformPoint(dq, point)",
        "summary": ""
      },
      {
        "name": "dqTransformVec3",
        "kind": "function",
        "signature": "dqTransformVec3(dq, vec)",
        "summary": ""
      },
      {
        "name": "dqEquals",
        "kind": "function",
        "signature": "dqEquals(a, b, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "dqCreate",
        "kind": "function",
        "signature": "dqCreate(rx, ry, rz, rw, dx, dy, dz, dw)",
        "summary": ""
      },
      {
        "name": "dqIdentity",
        "kind": "function",
        "signature": "dqIdentity()",
        "summary": ""
      },
      {
        "name": "dqClone",
        "kind": "function",
        "signature": "dqClone(dq)",
        "summary": ""
      },
      {
        "name": "dqCopy",
        "kind": "function",
        "signature": "dqCopy(out, dq)",
        "summary": ""
      },
      {
        "name": "dqGetRotation",
        "kind": "function",
        "signature": "dqGetRotation(dq)",
        "summary": ""
      },
      {
        "name": "dqAdd",
        "kind": "function",
        "signature": "dqAdd(a, b)",
        "summary": ""
      },
      {
        "name": "dqScale",
        "kind": "function",
        "signature": "dqScale(dq, s)",
        "summary": ""
      },
      {
        "name": "dqDot",
        "kind": "function",
        "signature": "dqDot(a, b)",
        "summary": ""
      },
      {
        "name": "dqLength",
        "kind": "function",
        "signature": "dqLength(dq)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathEasing",
    "path": "engine/reference/core/math/MathEasing.md",
    "source": "engine/core/math/MathEasing.js",
    "import": "/engine/core/math/MathEasing.js",
    "sourceHash": "674a42a676226f51a26f38166050fc380aafafbdfefa9a84a7856160883ee486",
    "summary": "MathEasing.js - Easing functions, Bezier curves, splines For animation, UI transitions, and procedural motion",
    "exports": [
      {
        "name": "easeOutBounce",
        "kind": "function",
        "signature": "easeOutBounce(t)",
        "summary": ""
      },
      {
        "name": "easeSpring",
        "kind": "function",
        "signature": "easeSpring(t, mass = 1, stiffness = 100, damping = 10)",
        "summary": ""
      },
      {
        "name": "easeSpringSimple",
        "kind": "function",
        "signature": "easeSpringSimple(t, bounces = 3, decay = 0.4)",
        "summary": ""
      },
      {
        "name": "cssCubicBezierValue",
        "kind": "function",
        "signature": "cssCubicBezierValue(x1, y1, x2, y2, progress)",
        "summary": ""
      },
      {
        "name": "cssStepEasing",
        "kind": "function",
        "signature": "cssStepEasing(progress, steps = 1, position = 'end', options = {})",
        "summary": ""
      },
      {
        "name": "cssEasingParseReport",
        "kind": "function",
        "signature": "cssEasingParseReport(easing)",
        "summary": ""
      },
      {
        "name": "cssEasingReport",
        "kind": "function",
        "signature": "cssEasingReport(easing, progress, options = {})",
        "summary": ""
      },
      {
        "name": "cssEasingValue",
        "kind": "function",
        "signature": "cssEasingValue(easing, progress, options = {})",
        "summary": ""
      },
      {
        "name": "cubicBezierEasing",
        "kind": "function",
        "signature": "cubicBezierEasing(x1, y1, x2, y2)",
        "summary": ""
      },
      {
        "name": "catmullRom",
        "kind": "function",
        "signature": "catmullRom(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "catmullRomSpline",
        "kind": "function",
        "signature": "catmullRomSpline(points, t, closed = false)",
        "summary": ""
      },
      {
        "name": "hermite",
        "kind": "function",
        "signature": "hermite(p0, m0, p1, m1, t)",
        "summary": ""
      },
      {
        "name": "bspline",
        "kind": "function",
        "signature": "bspline(points, t, degree = 3)",
        "summary": ""
      },
      {
        "name": "computeArcLengthTable",
        "kind": "function",
        "signature": "computeArcLengthTable(curveFn, segments = 100)",
        "summary": ""
      },
      {
        "name": "getUniformT",
        "kind": "function",
        "signature": "getUniformT(arcTable, u)",
        "summary": ""
      },
      {
        "name": "easeLinear",
        "kind": "function",
        "signature": "easeLinear(t)",
        "summary": ""
      },
      {
        "name": "easeInQuad",
        "kind": "function",
        "signature": "easeInQuad(t)",
        "summary": ""
      },
      {
        "name": "easeOutQuad",
        "kind": "function",
        "signature": "easeOutQuad(t)",
        "summary": ""
      },
      {
        "name": "easeInOutQuad",
        "kind": "function",
        "signature": "easeInOutQuad(t)",
        "summary": ""
      },
      {
        "name": "easeInCubic",
        "kind": "function",
        "signature": "easeInCubic(t)",
        "summary": ""
      },
      {
        "name": "easeOutCubic",
        "kind": "function",
        "signature": "easeOutCubic(t)",
        "summary": ""
      },
      {
        "name": "easeInOutCubic",
        "kind": "function",
        "signature": "easeInOutCubic(t)",
        "summary": ""
      },
      {
        "name": "easeInQuart",
        "kind": "function",
        "signature": "easeInQuart(t)",
        "summary": ""
      },
      {
        "name": "easeOutQuart",
        "kind": "function",
        "signature": "easeOutQuart(t)",
        "summary": ""
      },
      {
        "name": "easeInOutQuart",
        "kind": "function",
        "signature": "easeInOutQuart(t)",
        "summary": ""
      },
      {
        "name": "easeInQuint",
        "kind": "function",
        "signature": "easeInQuint(t)",
        "summary": ""
      },
      {
        "name": "easeOutQuint",
        "kind": "function",
        "signature": "easeOutQuint(t)",
        "summary": ""
      },
      {
        "name": "easeInOutQuint",
        "kind": "function",
        "signature": "easeInOutQuint(t)",
        "summary": ""
      },
      {
        "name": "easeInSine",
        "kind": "function",
        "signature": "easeInSine(t)",
        "summary": ""
      },
      {
        "name": "easeOutSine",
        "kind": "function",
        "signature": "easeOutSine(t)",
        "summary": ""
      },
      {
        "name": "easeInOutSine",
        "kind": "function",
        "signature": "easeInOutSine(t)",
        "summary": ""
      },
      {
        "name": "easeInExpo",
        "kind": "function",
        "signature": "easeInExpo(t)",
        "summary": ""
      },
      {
        "name": "easeOutExpo",
        "kind": "function",
        "signature": "easeOutExpo(t)",
        "summary": ""
      },
      {
        "name": "easeInOutExpo",
        "kind": "function",
        "signature": "easeInOutExpo(t)",
        "summary": ""
      },
      {
        "name": "easeInCirc",
        "kind": "function",
        "signature": "easeInCirc(t)",
        "summary": ""
      },
      {
        "name": "easeOutCirc",
        "kind": "function",
        "signature": "easeOutCirc(t)",
        "summary": ""
      },
      {
        "name": "easeInOutCirc",
        "kind": "function",
        "signature": "easeInOutCirc(t)",
        "summary": ""
      },
      {
        "name": "easeInElastic",
        "kind": "function",
        "signature": "easeInElastic(t)",
        "summary": ""
      },
      {
        "name": "easeOutElastic",
        "kind": "function",
        "signature": "easeOutElastic(t)",
        "summary": ""
      },
      {
        "name": "easeInOutElastic",
        "kind": "function",
        "signature": "easeInOutElastic(t)",
        "summary": ""
      },
      {
        "name": "easeInBack",
        "kind": "function",
        "signature": "easeInBack(t)",
        "summary": ""
      },
      {
        "name": "easeOutBack",
        "kind": "function",
        "signature": "easeOutBack(t)",
        "summary": ""
      },
      {
        "name": "easeInOutBack",
        "kind": "function",
        "signature": "easeInOutBack(t)",
        "summary": ""
      },
      {
        "name": "easeInBounce",
        "kind": "function",
        "signature": "easeInBounce(t)",
        "summary": ""
      },
      {
        "name": "easeInOutBounce",
        "kind": "function",
        "signature": "easeInOutBounce(t)",
        "summary": ""
      },
      {
        "name": "easeInPow",
        "kind": "function",
        "signature": "easeInPow(t, p)",
        "summary": ""
      },
      {
        "name": "easeOutPow",
        "kind": "function",
        "signature": "easeOutPow(t, p)",
        "summary": ""
      },
      {
        "name": "easeInOutPow",
        "kind": "function",
        "signature": "easeInOutPow(t, p)",
        "summary": ""
      },
      {
        "name": "bezier2",
        "kind": "function",
        "signature": "bezier2(p0, p1, p2, t)",
        "summary": ""
      },
      {
        "name": "bezier2Vec2",
        "kind": "function",
        "signature": "bezier2Vec2(p0, p1, p2, t)",
        "summary": ""
      },
      {
        "name": "bezier2Vec3",
        "kind": "function",
        "signature": "bezier2Vec3(p0, p1, p2, t)",
        "summary": ""
      },
      {
        "name": "bezier3",
        "kind": "function",
        "signature": "bezier3(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "bezier3Vec2",
        "kind": "function",
        "signature": "bezier3Vec2(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "bezier3Vec3",
        "kind": "function",
        "signature": "bezier3Vec3(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "bezier3Derivative",
        "kind": "function",
        "signature": "bezier3Derivative(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "bezier3DerivativeVec3",
        "kind": "function",
        "signature": "bezier3DerivativeVec3(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "catmullRomVec3",
        "kind": "function",
        "signature": "catmullRomVec3(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "hermiteVec3",
        "kind": "function",
        "signature": "hermiteVec3(p0, m0, p1, m1, t)",
        "summary": ""
      },
      {
        "name": "getEasing",
        "kind": "function",
        "signature": "getEasing(name)",
        "summary": ""
      },
      {
        "name": "CSS_CUBIC_BEZIER_PRESETS",
        "kind": "constant",
        "signature": "CSS_CUBIC_BEZIER_PRESETS",
        "summary": ""
      },
      {
        "name": "CSS_STEP_POSITION_ALIASES",
        "kind": "constant",
        "signature": "CSS_STEP_POSITION_ALIASES",
        "summary": ""
      },
      {
        "name": "cssEase",
        "kind": "constant",
        "signature": "cssEase",
        "summary": ""
      },
      {
        "name": "cssEaseIn",
        "kind": "constant",
        "signature": "cssEaseIn",
        "summary": ""
      },
      {
        "name": "cssEaseOut",
        "kind": "constant",
        "signature": "cssEaseOut",
        "summary": ""
      },
      {
        "name": "cssEaseInOut",
        "kind": "constant",
        "signature": "cssEaseInOut",
        "summary": ""
      },
      {
        "name": "EASING_FUNCTIONS",
        "kind": "constant",
        "signature": "EASING_FUNCTIONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathEntropy",
    "path": "engine/reference/core/math/MathEntropy.md",
    "source": "engine/core/math/MathEntropy.js",
    "import": "/engine/core/math/MathEntropy.js",
    "sourceHash": "1093fca7d250da419d9f5a23d9a8b4cc5ecc425c66c2db8699746f563a0402be",
    "summary": "MathEntropy.js - histograms, entropy reports, and distribution diagnostics.",
    "exports": [
      {
        "name": "byteFrequencyHistogram",
        "kind": "function",
        "signature": "byteFrequencyHistogram(data, histogram = new Uint32Array(256)",
        "summary": ""
      },
      {
        "name": "symbolFrequencyHistogram",
        "kind": "function",
        "signature": "symbolFrequencyHistogram(values, symbolCount, histogram = new Uint32Array(symbolCount)",
        "summary": ""
      },
      {
        "name": "histogramSampleCount",
        "kind": "function",
        "signature": "histogramSampleCount(histogram)",
        "summary": ""
      },
      {
        "name": "histogramUniqueCount",
        "kind": "function",
        "signature": "histogramUniqueCount(histogram)",
        "summary": ""
      },
      {
        "name": "probabilityTableFromHistogram",
        "kind": "function",
        "signature": "probabilityTableFromHistogram(histogram, sampleCount = histogramSampleCount(histogram)",
        "summary": ""
      },
      {
        "name": "shannonEntropyFromHistogram",
        "kind": "function",
        "signature": "shannonEntropyFromHistogram(histogram, options = {})",
        "summary": ""
      },
      {
        "name": "minEntropyFromHistogram",
        "kind": "function",
        "signature": "minEntropyFromHistogram(histogram, options = {})",
        "summary": ""
      },
      {
        "name": "maxEntropyForSymbolCount",
        "kind": "function",
        "signature": "maxEntropyForSymbolCount(symbolCount, options = {})",
        "summary": ""
      },
      {
        "name": "collisionProbabilityFromHistogram",
        "kind": "function",
        "signature": "collisionProbabilityFromHistogram(histogram)",
        "summary": ""
      },
      {
        "name": "klDivergence",
        "kind": "function",
        "signature": "klDivergence(pDistribution, qDistribution, options = {})",
        "summary": ""
      },
      {
        "name": "crossEntropy",
        "kind": "function",
        "signature": "crossEntropy(pDistribution, qDistribution, options = {})",
        "summary": ""
      },
      {
        "name": "mutualInformationFromJointHistogram",
        "kind": "function",
        "signature": "mutualInformationFromJointHistogram(jointHistogram, xSymbolCount, ySymbolCount, options = {})",
        "summary": ""
      },
      {
        "name": "conditionalEntropyFromJointHistogram",
        "kind": "function",
        "signature": "conditionalEntropyFromJointHistogram(jointHistogram, xSymbolCount, ySymbolCount, options = {})",
        "summary": ""
      },
      {
        "name": "jointEntropyReport",
        "kind": "function",
        "signature": "jointEntropyReport(jointHistogram, xSymbolCount, ySymbolCount, options = {})",
        "summary": ""
      },
      {
        "name": "bitRunReport",
        "kind": "function",
        "signature": "bitRunReport(data, options = {})",
        "summary": ""
      },
      {
        "name": "monobitRatio",
        "kind": "function",
        "signature": "monobitRatio(data, options = {})",
        "summary": ""
      },
      {
        "name": "byteDistributionReport",
        "kind": "function",
        "signature": "byteDistributionReport(data, options = {})",
        "summary": ""
      },
      {
        "name": "collisionCount",
        "kind": "function",
        "signature": "collisionCount(data, options = {})",
        "summary": ""
      },
      {
        "name": "serialCorrelation",
        "kind": "function",
        "signature": "serialCorrelation(data, options = {})",
        "summary": ""
      },
      {
        "name": "repetitionCount",
        "kind": "function",
        "signature": "repetitionCount(data, options = {})",
        "summary": ""
      },
      {
        "name": "adaptiveProportionReport",
        "kind": "function",
        "signature": "adaptiveProportionReport(data, options = {})",
        "summary": ""
      },
      {
        "name": "minEntropyThresholdReport",
        "kind": "function",
        "signature": "minEntropyThresholdReport(data, options = {})",
        "summary": ""
      },
      {
        "name": "predictabilityScore",
        "kind": "function",
        "signature": "predictabilityScore(data, options = {})",
        "summary": ""
      },
      {
        "name": "randomnessHealthReport",
        "kind": "function",
        "signature": "randomnessHealthReport(data, options = {})",
        "summary": ""
      },
      {
        "name": "entropyWindowReport",
        "kind": "function",
        "signature": "entropyWindowReport(data, options = {})",
        "summary": ""
      },
      {
        "name": "streamingEntropyHealthReport",
        "kind": "function",
        "signature": "streamingEntropyHealthReport(data, options = {})",
        "summary": ""
      },
      {
        "name": "entropyCompressionEstimate",
        "kind": "function",
        "signature": "entropyCompressionEstimate(sampleCount, entropyBitsPerSymbol, options = {})",
        "summary": ""
      },
      {
        "name": "histogramEntropyReport",
        "kind": "function",
        "signature": "histogramEntropyReport(histogram, options = {})",
        "summary": ""
      },
      {
        "name": "entropyReport",
        "kind": "function",
        "signature": "entropyReport(data, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathGeometry",
    "path": "engine/reference/core/math/MathGeometry.md",
    "source": "engine/core/math/MathGeometry.js",
    "import": "/engine/core/math/MathGeometry.js",
    "sourceHash": "3447aa0239f0544f050b756c7bee5354e4c07651e918d0120d22330e129325c3",
    "summary": "Convert a local AABB and entity TRS into a conservative world-space sphere. Rotation moves the scaled local center but does not change the sphere radius.",
    "exports": [
      {
        "name": "sdfBox3D",
        "kind": "function",
        "signature": "sdfBox3D(p, b)",
        "summary": ""
      },
      {
        "name": "sdfCylinder",
        "kind": "function",
        "signature": "sdfCylinder(p, h, r)",
        "summary": ""
      },
      {
        "name": "sdfCapsule",
        "kind": "function",
        "signature": "sdfCapsule(p, a, b, r)",
        "summary": ""
      },
      {
        "name": "sdfTorus",
        "kind": "function",
        "signature": "sdfTorus(p, R, r)",
        "summary": ""
      },
      {
        "name": "sdfCone",
        "kind": "function",
        "signature": "sdfCone(p, angle, h)",
        "summary": ""
      },
      {
        "name": "pointInTriangle2D",
        "kind": "function",
        "signature": "pointInTriangle2D(p, a, b, c)",
        "summary": ""
      },
      {
        "name": "lineLineIntersection",
        "kind": "function",
        "signature": "lineLineIntersection(p1, p2, p3, p4)",
        "summary": ""
      },
      {
        "name": "sphereAABB",
        "kind": "function",
        "signature": "sphereAABB(center, radius, aabbMin, aabbMax)",
        "summary": ""
      },
      {
        "name": "raySphere",
        "kind": "function",
        "signature": "raySphere(rayOrigin, rayDir, center, radius)",
        "summary": ""
      },
      {
        "name": "rayAABB",
        "kind": "function",
        "signature": "rayAABB(rayOrigin, rayDir, aabbMin, aabbMax)",
        "summary": ""
      },
      {
        "name": "rayPlane",
        "kind": "function",
        "signature": "rayPlane(rayOrigin, rayDir, planeNormal, planeD)",
        "summary": ""
      },
      {
        "name": "rayTriangle",
        "kind": "function",
        "signature": "rayTriangle(rayOrigin, rayDir, v0, v1, v2)",
        "summary": ""
      },
      {
        "name": "aabbFromPoints",
        "kind": "function",
        "signature": "aabbFromPoints(points)",
        "summary": ""
      },
      {
        "name": "transformedAabbBoundingSphereReport",
        "kind": "function",
        "signature": "transformedAabbBoundingSphereReport(localMin, localMax, position, rotation, scale)",
        "summary": "Convert a local AABB and entity TRS into a conservative world-space sphere. Rotation moves the scaled local center but does not change the sphere radius."
      },
      {
        "name": "aabbSurfaceArea",
        "kind": "function",
        "signature": "aabbSurfaceArea(aabb)",
        "summary": ""
      },
      {
        "name": "aabbVolume",
        "kind": "function",
        "signature": "aabbVolume(aabb)",
        "summary": ""
      },
      {
        "name": "boundingSphereFromPoints",
        "kind": "function",
        "signature": "boundingSphereFromPoints(points)",
        "summary": ""
      },
      {
        "name": "frustumFromMatrix",
        "kind": "function",
        "signature": "frustumFromMatrix(m)",
        "summary": ""
      },
      {
        "name": "frustumNormalizePlanes",
        "kind": "function",
        "signature": "frustumNormalizePlanes(frustum)",
        "summary": ""
      },
      {
        "name": "frustumContainsSphere",
        "kind": "function",
        "signature": "frustumContainsSphere(frustum, center, radius)",
        "summary": ""
      },
      {
        "name": "frustumContainsAABB",
        "kind": "function",
        "signature": "frustumContainsAABB(frustum, aabbMin, aabbMax)",
        "summary": ""
      },
      {
        "name": "frustumTestAABB",
        "kind": "function",
        "signature": "frustumTestAABB(frustum, aabbMin, aabbMax)",
        "summary": ""
      },
      {
        "name": "triangleBarycentric",
        "kind": "function",
        "signature": "triangleBarycentric(p, a, b, c)",
        "summary": ""
      },
      {
        "name": "triangleClosestPoint",
        "kind": "function",
        "signature": "triangleClosestPoint(p, a, b, c)",
        "summary": ""
      },
      {
        "name": "closestPointOnSegment",
        "kind": "function",
        "signature": "closestPointOnSegment(p, a, b)",
        "summary": ""
      },
      {
        "name": "closestPointOnAABB",
        "kind": "function",
        "signature": "closestPointOnAABB(p, aabbMin, aabbMax)",
        "summary": ""
      },
      {
        "name": "closestPointOnSphere",
        "kind": "function",
        "signature": "closestPointOnSphere(p, center, radius)",
        "summary": ""
      },
      {
        "name": "sdfCircle",
        "kind": "function",
        "signature": "sdfCircle(p, r)",
        "summary": ""
      },
      {
        "name": "sdfBox2D",
        "kind": "function",
        "signature": "sdfBox2D(p, b)",
        "summary": ""
      },
      {
        "name": "sdfSegment2D",
        "kind": "function",
        "signature": "sdfSegment2D(p, a, b)",
        "summary": ""
      },
      {
        "name": "sdfRoundedBox2D",
        "kind": "function",
        "signature": "sdfRoundedBox2D(p, b, r)",
        "summary": ""
      },
      {
        "name": "sdfSphere",
        "kind": "function",
        "signature": "sdfSphere(p, r)",
        "summary": ""
      },
      {
        "name": "sdfRoundBox",
        "kind": "function",
        "signature": "sdfRoundBox(p, b, r)",
        "summary": ""
      },
      {
        "name": "sdfPlane",
        "kind": "function",
        "signature": "sdfPlane(p, n, d)",
        "summary": ""
      },
      {
        "name": "sdfUnion",
        "kind": "function",
        "signature": "sdfUnion(d1, d2)",
        "summary": ""
      },
      {
        "name": "sdfSubtract",
        "kind": "function",
        "signature": "sdfSubtract(d1, d2)",
        "summary": ""
      },
      {
        "name": "sdfIntersect",
        "kind": "function",
        "signature": "sdfIntersect(d1, d2)",
        "summary": ""
      },
      {
        "name": "sdfSmoothUnion",
        "kind": "function",
        "signature": "sdfSmoothUnion(d1, d2, k)",
        "summary": ""
      },
      {
        "name": "sdfSmoothSubtract",
        "kind": "function",
        "signature": "sdfSmoothSubtract(d1, d2, k)",
        "summary": ""
      },
      {
        "name": "sdfSmoothIntersect",
        "kind": "function",
        "signature": "sdfSmoothIntersect(d1, d2, k)",
        "summary": ""
      },
      {
        "name": "sdfRound",
        "kind": "function",
        "signature": "sdfRound(d, r)",
        "summary": ""
      },
      {
        "name": "sdfOnion",
        "kind": "function",
        "signature": "sdfOnion(d, r)",
        "summary": ""
      },
      {
        "name": "pointInCircle",
        "kind": "function",
        "signature": "pointInCircle(point, center, radius)",
        "summary": ""
      },
      {
        "name": "pointInRect",
        "kind": "function",
        "signature": "pointInRect(point, rectMin, rectMax)",
        "summary": ""
      },
      {
        "name": "circleCircle",
        "kind": "function",
        "signature": "circleCircle(c1, r1, c2, r2)",
        "summary": ""
      },
      {
        "name": "rectRect",
        "kind": "function",
        "signature": "rectRect(min1, max1, min2, max2)",
        "summary": ""
      },
      {
        "name": "pointInSphere",
        "kind": "function",
        "signature": "pointInSphere(point, center, radius)",
        "summary": ""
      },
      {
        "name": "pointInAABB",
        "kind": "function",
        "signature": "pointInAABB(point, aabbMin, aabbMax)",
        "summary": ""
      },
      {
        "name": "sphereSphere",
        "kind": "function",
        "signature": "sphereSphere(c1, r1, c2, r2)",
        "summary": ""
      },
      {
        "name": "aabbAABB",
        "kind": "function",
        "signature": "aabbAABB(min1, max1, min2, max2)",
        "summary": ""
      },
      {
        "name": "aabbCenter",
        "kind": "function",
        "signature": "aabbCenter(aabb)",
        "summary": ""
      },
      {
        "name": "aabbSize",
        "kind": "function",
        "signature": "aabbSize(aabb)",
        "summary": ""
      },
      {
        "name": "aabbHalfSize",
        "kind": "function",
        "signature": "aabbHalfSize(aabb)",
        "summary": ""
      },
      {
        "name": "aabbExpand",
        "kind": "function",
        "signature": "aabbExpand(aabb, point)",
        "summary": ""
      },
      {
        "name": "aabbMerge",
        "kind": "function",
        "signature": "aabbMerge(a, b)",
        "summary": ""
      },
      {
        "name": "aabbGrow",
        "kind": "function",
        "signature": "aabbGrow(aabb, amount)",
        "summary": ""
      },
      {
        "name": "triangleNormal",
        "kind": "function",
        "signature": "triangleNormal(a, b, c)",
        "summary": ""
      },
      {
        "name": "triangleArea",
        "kind": "function",
        "signature": "triangleArea(a, b, c)",
        "summary": ""
      },
      {
        "name": "distancePointToSegment",
        "kind": "function",
        "signature": "distancePointToSegment(p, a, b)",
        "summary": ""
      },
      {
        "name": "distancePointToAABB",
        "kind": "function",
        "signature": "distancePointToAABB(p, aabbMin, aabbMax)",
        "summary": ""
      },
      {
        "name": "distancePointToSphere",
        "kind": "function",
        "signature": "distancePointToSphere(p, center, radius)",
        "summary": ""
      },
      {
        "name": "distancePointToPlane",
        "kind": "function",
        "signature": "distancePointToPlane(p, normal, d)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathGrid",
    "path": "engine/reference/core/math/MathGrid.md",
    "source": "engine/core/math/MathGrid.js",
    "import": "/engine/core/math/MathGrid.js",
    "sourceHash": "a1372facbdf75474064883083aedb349dbe7c050ef37ac15d88f42e4f8a3537d",
    "summary": "MathGrid.js - CPU-side 3D grid sampling and discrete differential operators Consolidates: FluidSimWorld.js inline trilinear, SDFCollision trilinear, WindSimulation grid sample Houdini VEX volumesample / Niagara grid sampling parity",
    "exports": [
      {
        "name": "bilinearSample",
        "kind": "function",
        "signature": "bilinearSample(grid, width, height, u, v)",
        "summary": "Bilinear interpolation on a 2D scalar grid"
      },
      {
        "name": "bilinearSampleVec3",
        "kind": "function",
        "signature": "bilinearSampleVec3(grid, width, height, u, v)",
        "summary": "Bilinear interpolation on a 2D vector grid (3-component, interleaved)"
      },
      {
        "name": "trilinearSample",
        "kind": "function",
        "signature": "trilinearSample(grid, width, height, depth, u, v, w)",
        "summary": "Trilinear interpolation on a 3D scalar grid"
      },
      {
        "name": "trilinearSampleVec3",
        "kind": "function",
        "signature": "trilinearSampleVec3(grid, width, height, depth, u, v, w)",
        "summary": "Trilinear interpolation on a 3D vector grid (3-component, interleaved) Matches FluidSimWorld.js sampleVelocityTrilinear GPU implementation"
      },
      {
        "name": "trilinearSampleVec4",
        "kind": "function",
        "signature": "trilinearSampleVec4(grid, width, height, depth, u, v, w)",
        "summary": "Trilinear interpolation on a 3D grid stored as vec4 (4-component, e.g. velocity + spin)"
      },
      {
        "name": "gridGradient",
        "kind": "function",
        "signature": "gridGradient(grid, width, height, depth, x, y, z, cellSize = 1)",
        "summary": "Discrete gradient of a scalar field (central differences)"
      },
      {
        "name": "gridDivergence",
        "kind": "function",
        "signature": "gridDivergence(grid, width, height, depth, x, y, z, cellSize = 1)",
        "summary": "Discrete divergence of a vector field (central differences)"
      },
      {
        "name": "gridCurl",
        "kind": "function",
        "signature": "gridCurl(grid, width, height, depth, x, y, z, cellSize = 1)",
        "summary": "Discrete curl of a vector field (central differences)"
      },
      {
        "name": "gridLaplacian",
        "kind": "function",
        "signature": "gridLaplacian(grid, width, height, depth, x, y, z, cellSize = 1)",
        "summary": "Discrete Laplacian of a scalar field (6-point stencil)"
      },
      {
        "name": "gridLaplacianVec3",
        "kind": "function",
        "signature": "gridLaplacianVec3(grid, width, height, depth, x, y, z, cellSize = 1)",
        "summary": "Discrete Laplacian of a vector field (per-component, 6-point stencil)"
      },
      {
        "name": "advectScalar",
        "kind": "function",
        "signature": "advectScalar(scalarField, velocityField, out, width, height, depth, dt, cellSize = 1)",
        "summary": "Semi-Lagrangian advection of a scalar field through a velocity field"
      },
      {
        "name": "advectVelocity",
        "kind": "function",
        "signature": "advectVelocity(velocityField, out, width, height, depth, dt, cellSize = 1)",
        "summary": "Semi-Lagrangian advection of a vector field through itself (self-advection)"
      },
      {
        "name": "gridCreateScalar",
        "kind": "function",
        "signature": "gridCreateScalar(width, height, depth)",
        "summary": "Create a zero-filled scalar grid"
      },
      {
        "name": "gridCreateVec3",
        "kind": "function",
        "signature": "gridCreateVec3(width, height, depth)",
        "summary": "Create a zero-filled vec3 grid"
      },
      {
        "name": "gridCreateVec4",
        "kind": "function",
        "signature": "gridCreateVec4(width, height, depth)",
        "summary": "Create a zero-filled vec4 grid"
      },
      {
        "name": "worldToGrid",
        "kind": "function",
        "signature": "worldToGrid(worldPos, gridOrigin, cellSize)",
        "summary": "World position to grid coordinate"
      },
      {
        "name": "gridToWorld",
        "kind": "function",
        "signature": "gridToWorld(gridPos, gridOrigin, cellSize)",
        "summary": "Grid coordinate to world position"
      },
      {
        "name": "gridSampleScalarWorld",
        "kind": "function",
        "signature": "gridSampleScalarWorld(grid, width, height, depth, worldPos, gridOrigin, cellSize)",
        "summary": "Sample scalar field at world position"
      },
      {
        "name": "gridSampleVec3World",
        "kind": "function",
        "signature": "gridSampleVec3World(grid, width, height, depth, worldPos, gridOrigin, cellSize)",
        "summary": "Sample vector field at world position"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathLine3",
    "path": "engine/reference/core/math/MathLine3.md",
    "source": "engine/core/math/MathLine3.js",
    "import": "/engine/core/math/MathLine3.js",
    "sourceHash": "ebd9ddb78be098b32746aebe7cf0f381e5f9186731bc29deb3467a46ef625269",
    "summary": "MathLine3.js - Line segment operations (Three.js Line3 parity) Segment represented as { a: [x,y,z], b: [x,y,z] } Consolidates: MathGeometry.closestPointOnSegment, ViewportRaycasting.raySegmentDistance, PBDRagdoll.capsuleCollision segment-segment math",
    "exports": [
      {
        "name": "segmentFromPointDir",
        "kind": "function",
        "signature": "segmentFromPointDir(origin, direction, length)",
        "summary": ""
      },
      {
        "name": "segmentClosestPointToPoint",
        "kind": "function",
        "signature": "segmentClosestPointToPoint(seg, point)",
        "summary": ""
      },
      {
        "name": "segmentDistanceToPoint",
        "kind": "function",
        "signature": "segmentDistanceToPoint(seg, point)",
        "summary": ""
      },
      {
        "name": "segmentDistanceSqToPoint",
        "kind": "function",
        "signature": "segmentDistanceSqToPoint(seg, point)",
        "summary": ""
      },
      {
        "name": "segmentClosestPointToSegment",
        "kind": "function",
        "signature": "segmentClosestPointToSegment(seg1, seg2)",
        "summary": ""
      },
      {
        "name": "segmentDistanceToSegment",
        "kind": "function",
        "signature": "segmentDistanceToSegment(seg1, seg2)",
        "summary": ""
      },
      {
        "name": "segmentDistanceSqToSegment",
        "kind": "function",
        "signature": "segmentDistanceSqToSegment(seg1, seg2)",
        "summary": ""
      },
      {
        "name": "segmentClosestPointToRay",
        "kind": "function",
        "signature": "segmentClosestPointToRay(seg, rayOrigin, rayDir)",
        "summary": ""
      },
      {
        "name": "segmentDistanceToRay",
        "kind": "function",
        "signature": "segmentDistanceToRay(seg, rayOrigin, rayDir)",
        "summary": ""
      },
      {
        "name": "segmentEquals",
        "kind": "function",
        "signature": "segmentEquals(a, b, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "segmentCreate",
        "kind": "function",
        "signature": "segmentCreate(a, b)",
        "summary": ""
      },
      {
        "name": "segmentClone",
        "kind": "function",
        "signature": "segmentClone(seg)",
        "summary": ""
      },
      {
        "name": "segmentAt",
        "kind": "function",
        "signature": "segmentAt(seg, t)",
        "summary": ""
      },
      {
        "name": "segmentCenter",
        "kind": "function",
        "signature": "segmentCenter(seg)",
        "summary": ""
      },
      {
        "name": "segmentDelta",
        "kind": "function",
        "signature": "segmentDelta(seg)",
        "summary": ""
      },
      {
        "name": "segmentDirection",
        "kind": "function",
        "signature": "segmentDirection(seg)",
        "summary": ""
      },
      {
        "name": "segmentLength",
        "kind": "function",
        "signature": "segmentLength(seg)",
        "summary": ""
      },
      {
        "name": "segmentLengthSq",
        "kind": "function",
        "signature": "segmentLengthSq(seg)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathMat",
    "path": "engine/reference/core/math/MathMat.md",
    "source": "engine/core/math/MathMat.js",
    "import": "/engine/core/math/MathMat.js",
    "sourceHash": "3bee84ea3c421ed624acc2c8a8732bec5115459a0c9e02ec57b38e5cfc5f7fc5",
    "summary": "",
    "exports": [
      {
        "name": "mat2Inverse",
        "kind": "function",
        "signature": "mat2Inverse(m)",
        "summary": ""
      },
      {
        "name": "mat3Multiply",
        "kind": "function",
        "signature": "mat3Multiply(a, b)",
        "summary": ""
      },
      {
        "name": "mat3Inverse",
        "kind": "function",
        "signature": "mat3Inverse(m)",
        "summary": ""
      },
      {
        "name": "mat3NormalFromMat4",
        "kind": "function",
        "signature": "mat3NormalFromMat4(m)",
        "summary": ""
      },
      {
        "name": "mat3FromQuat",
        "kind": "function",
        "signature": "mat3FromQuat(q)",
        "summary": ""
      },
      {
        "name": "mat4Determinant",
        "kind": "function",
        "signature": "mat4Determinant(m)",
        "summary": ""
      },
      {
        "name": "mat4MultiplyMany",
        "kind": "function",
        "signature": "mat4MultiplyMany(...matrices)",
        "summary": ""
      },
      {
        "name": "mat4MultiplyInto",
        "kind": "function",
        "signature": "mat4MultiplyInto(out, a, b)",
        "summary": ""
      },
      {
        "name": "mat4FromRotationAxis",
        "kind": "function",
        "signature": "mat4FromRotationAxis(axis, angle)",
        "summary": ""
      },
      {
        "name": "mat4FromQuat",
        "kind": "function",
        "signature": "mat4FromQuat(q)",
        "summary": ""
      },
      {
        "name": "mat4FromRotationTranslationScale",
        "kind": "function",
        "signature": "mat4FromRotationTranslationScale(q, t, s)",
        "summary": ""
      },
      {
        "name": "mat4Decompose",
        "kind": "function",
        "signature": "mat4Decompose(m)",
        "summary": ""
      },
      {
        "name": "mat4TransformPoint",
        "kind": "function",
        "signature": "mat4TransformPoint(m, v)",
        "summary": ""
      },
      {
        "name": "mat4Lerp",
        "kind": "function",
        "signature": "mat4Lerp(a, b, t)",
        "summary": ""
      },
      {
        "name": "mat4Equals",
        "kind": "function",
        "signature": "mat4Equals(a, b, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "mat4IsIdentity",
        "kind": "function",
        "signature": "mat4IsIdentity(m, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "mat4Frustum",
        "kind": "function",
        "signature": "mat4Frustum(left, right, bottom, top, near, far)",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveInfinite",
        "kind": "function",
        "signature": "mat4PerspectiveInfinite(fov, aspect, near)",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveReverseZ",
        "kind": "function",
        "signature": "mat4PerspectiveReverseZ(fov, aspect, near, far)",
        "summary": ""
      },
      {
        "name": "mat4TargetTo",
        "kind": "function",
        "signature": "mat4TargetTo(eye, target, up)",
        "summary": ""
      },
      {
        "name": "mat4Rotate",
        "kind": "function",
        "signature": "mat4Rotate(m, axis, angle)",
        "summary": ""
      },
      {
        "name": "mat4InverseTranspose",
        "kind": "function",
        "signature": "mat4InverseTranspose(m)",
        "summary": ""
      },
      {
        "name": "mat2Identity",
        "kind": "function",
        "signature": "mat2Identity()",
        "summary": ""
      },
      {
        "name": "mat2",
        "kind": "function",
        "signature": "mat2(a, b, c, d)",
        "summary": ""
      },
      {
        "name": "mat2Clone",
        "kind": "function",
        "signature": "mat2Clone(m)",
        "summary": ""
      },
      {
        "name": "mat2Copy",
        "kind": "function",
        "signature": "mat2Copy(out, m)",
        "summary": ""
      },
      {
        "name": "mat2Multiply",
        "kind": "function",
        "signature": "mat2Multiply(a, b)",
        "summary": ""
      },
      {
        "name": "mat2Determinant",
        "kind": "function",
        "signature": "mat2Determinant(m)",
        "summary": ""
      },
      {
        "name": "mat2Transpose",
        "kind": "function",
        "signature": "mat2Transpose(m)",
        "summary": ""
      },
      {
        "name": "mat2FromRotation",
        "kind": "function",
        "signature": "mat2FromRotation(angle)",
        "summary": ""
      },
      {
        "name": "mat2FromScale",
        "kind": "function",
        "signature": "mat2FromScale(sx, sy)",
        "summary": ""
      },
      {
        "name": "mat2TransformVec2",
        "kind": "function",
        "signature": "mat2TransformVec2(m, v)",
        "summary": ""
      },
      {
        "name": "mat3Identity",
        "kind": "function",
        "signature": "mat3Identity()",
        "summary": ""
      },
      {
        "name": "mat3Clone",
        "kind": "function",
        "signature": "mat3Clone(m)",
        "summary": ""
      },
      {
        "name": "mat3Copy",
        "kind": "function",
        "signature": "mat3Copy(out, m)",
        "summary": ""
      },
      {
        "name": "mat3FromMat4",
        "kind": "function",
        "signature": "mat3FromMat4(m)",
        "summary": ""
      },
      {
        "name": "mat3Determinant",
        "kind": "function",
        "signature": "mat3Determinant(m)",
        "summary": ""
      },
      {
        "name": "mat3Transpose",
        "kind": "function",
        "signature": "mat3Transpose(m)",
        "summary": ""
      },
      {
        "name": "mat3FromRotationX",
        "kind": "function",
        "signature": "mat3FromRotationX(angle)",
        "summary": ""
      },
      {
        "name": "mat3FromRotationY",
        "kind": "function",
        "signature": "mat3FromRotationY(angle)",
        "summary": ""
      },
      {
        "name": "mat3FromRotationZ",
        "kind": "function",
        "signature": "mat3FromRotationZ(angle)",
        "summary": ""
      },
      {
        "name": "mat3TransformVec3",
        "kind": "function",
        "signature": "mat3TransformVec3(m, v)",
        "summary": ""
      },
      {
        "name": "mat3FromTranslation2D",
        "kind": "function",
        "signature": "mat3FromTranslation2D(x, y)",
        "summary": ""
      },
      {
        "name": "mat3FromScale2D",
        "kind": "function",
        "signature": "mat3FromScale2D(sx, sy)",
        "summary": ""
      },
      {
        "name": "mat3FromRotation2D",
        "kind": "function",
        "signature": "mat3FromRotation2D(angle)",
        "summary": ""
      },
      {
        "name": "mat4Clone",
        "kind": "function",
        "signature": "mat4Clone(m)",
        "summary": ""
      },
      {
        "name": "mat4Copy",
        "kind": "function",
        "signature": "mat4Copy(out, m)",
        "summary": ""
      },
      {
        "name": "mat4Transpose",
        "kind": "function",
        "signature": "mat4Transpose(m)",
        "summary": ""
      },
      {
        "name": "mat4FromTranslation",
        "kind": "function",
        "signature": "mat4FromTranslation(x, y, z)",
        "summary": ""
      },
      {
        "name": "mat4FromTranslationVec3",
        "kind": "function",
        "signature": "mat4FromTranslationVec3(v)",
        "summary": ""
      },
      {
        "name": "mat4FromScale",
        "kind": "function",
        "signature": "mat4FromScale(sx, sy, sz)",
        "summary": ""
      },
      {
        "name": "mat4FromScaleVec3",
        "kind": "function",
        "signature": "mat4FromScaleVec3(v)",
        "summary": ""
      },
      {
        "name": "mat4FromScaleUniform",
        "kind": "function",
        "signature": "mat4FromScaleUniform(s)",
        "summary": ""
      },
      {
        "name": "mat4FromRotationX",
        "kind": "function",
        "signature": "mat4FromRotationX(angle)",
        "summary": ""
      },
      {
        "name": "mat4FromRotationY",
        "kind": "function",
        "signature": "mat4FromRotationY(angle)",
        "summary": ""
      },
      {
        "name": "mat4FromRotationZ",
        "kind": "function",
        "signature": "mat4FromRotationZ(angle)",
        "summary": ""
      },
      {
        "name": "mat4GetTranslation",
        "kind": "function",
        "signature": "mat4GetTranslation(m)",
        "summary": ""
      },
      {
        "name": "mat4GetScale",
        "kind": "function",
        "signature": "mat4GetScale(m)",
        "summary": ""
      },
      {
        "name": "mat4GetForward",
        "kind": "function",
        "signature": "mat4GetForward(m)",
        "summary": ""
      },
      {
        "name": "mat4GetRight",
        "kind": "function",
        "signature": "mat4GetRight(m)",
        "summary": ""
      },
      {
        "name": "mat4GetUp",
        "kind": "function",
        "signature": "mat4GetUp(m)",
        "summary": ""
      },
      {
        "name": "mat4GetBack",
        "kind": "function",
        "signature": "mat4GetBack(m)",
        "summary": ""
      },
      {
        "name": "mat4TransformDirection",
        "kind": "function",
        "signature": "mat4TransformDirection(m, v)",
        "summary": ""
      },
      {
        "name": "mat4Compose",
        "kind": "constant",
        "signature": "mat4Compose",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathNoise",
    "path": "engine/reference/core/math/MathNoise.md",
    "source": "engine/core/math/MathNoise.js",
    "import": "/engine/core/math/MathNoise.js",
    "sourceHash": "2c282d01d95785f2af564995916b9e360b03c076c0e0c0b1679791bb8b7156ae",
    "summary": "",
    "exports": [
      {
        "name": "perlin1D",
        "kind": "function",
        "signature": "perlin1D(x)",
        "summary": ""
      },
      {
        "name": "perlin2D",
        "kind": "function",
        "signature": "perlin2D(x, y)",
        "summary": ""
      },
      {
        "name": "perlin3D",
        "kind": "function",
        "signature": "perlin3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "simplex2D",
        "kind": "function",
        "signature": "simplex2D(x, y)",
        "summary": ""
      },
      {
        "name": "simplex3D",
        "kind": "function",
        "signature": "simplex3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "valueNoise2D",
        "kind": "function",
        "signature": "valueNoise2D(x, y)",
        "summary": ""
      },
      {
        "name": "valueNoise3D",
        "kind": "function",
        "signature": "valueNoise3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "shaderHash2D",
        "kind": "function",
        "signature": "shaderHash2D(x, y)",
        "summary": ""
      },
      {
        "name": "shaderNoise2D",
        "kind": "function",
        "signature": "shaderNoise2D(x, y)",
        "summary": ""
      },
      {
        "name": "shaderFbm2D",
        "kind": "function",
        "signature": "shaderFbm2D(x, y)",
        "summary": ""
      },
      {
        "name": "shaderHash3D",
        "kind": "function",
        "signature": "shaderHash3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "shaderNoise3D",
        "kind": "function",
        "signature": "shaderNoise3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "shaderFbm3D",
        "kind": "function",
        "signature": "shaderFbm3D(x, y, z, octaves = 4)",
        "summary": ""
      },
      {
        "name": "shaderFbm3DRotated",
        "kind": "function",
        "signature": "shaderFbm3DRotated(x, y, z, octaves = 4)",
        "summary": ""
      },
      {
        "name": "voronoi2D",
        "kind": "function",
        "signature": "voronoi2D(x, y)",
        "summary": ""
      },
      {
        "name": "voronoi3D",
        "kind": "function",
        "signature": "voronoi3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "fbm2D",
        "kind": "function",
        "signature": "fbm2D(x, y, octaves = 6, lacunarity = 2, gain = 0.5, noiseFn = perlin2D)",
        "summary": ""
      },
      {
        "name": "fbm3D",
        "kind": "function",
        "signature": "fbm3D(x, y, z, octaves = 6, lacunarity = 2, gain = 0.5, noiseFn = perlin3D)",
        "summary": ""
      },
      {
        "name": "ridged2D",
        "kind": "function",
        "signature": "ridged2D(x, y, octaves = 6, lacunarity = 2, gain = 0.5, offset = 1, noiseFn = perlin2D)",
        "summary": ""
      },
      {
        "name": "ridged3D",
        "kind": "function",
        "signature": "ridged3D(x, y, z, octaves = 6, lacunarity = 2, gain = 0.5, offset = 1, noiseFn = perlin3D)",
        "summary": ""
      },
      {
        "name": "warpedNoise2D",
        "kind": "function",
        "signature": "warpedNoise2D(x, y, warpStrength = 0.5, noiseFn = perlin2D)",
        "summary": ""
      },
      {
        "name": "warpedNoise3D",
        "kind": "function",
        "signature": "warpedNoise3D(x, y, z, warpStrength = 0.5, noiseFn = perlin3D)",
        "summary": ""
      },
      {
        "name": "curlNoise2D",
        "kind": "function",
        "signature": "curlNoise2D(x, y, epsilon = 0.0001, noiseFn = perlin2D)",
        "summary": ""
      },
      {
        "name": "curlNoise3D",
        "kind": "function",
        "signature": "curlNoise3D(x, y, z, epsilon = 0.0001, noiseFn = perlin3D)",
        "summary": ""
      },
      {
        "name": "turbulence2D",
        "kind": "function",
        "signature": "turbulence2D(x, y, octaves = 6, lacunarity = 2, gain = 0.5, noiseFn = perlin2D)",
        "summary": ""
      },
      {
        "name": "turbulence3D",
        "kind": "function",
        "signature": "turbulence3D(x, y, z, octaves = 6, lacunarity = 2, gain = 0.5, noiseFn = perlin3D)",
        "summary": ""
      },
      {
        "name": "billow2D",
        "kind": "function",
        "signature": "billow2D(x, y, octaves = 6, lacunarity = 2, gain = 0.5, noiseFn = perlin2D)",
        "summary": ""
      },
      {
        "name": "billow3D",
        "kind": "function",
        "signature": "billow3D(x, y, z, octaves = 6, lacunarity = 2, gain = 0.5, noiseFn = perlin3D)",
        "summary": ""
      },
      {
        "name": "createSeededNoise",
        "kind": "function",
        "signature": "createSeededNoise(seed)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathOscillator",
    "path": "engine/reference/core/math/MathOscillator.md",
    "source": "engine/core/math/MathOscillator.js",
    "import": "/engine/core/math/MathOscillator.js",
    "sourceHash": "5dd6809f37d3d2c2808dde7bf95f86b2eb0730c967111b350eb76509e8bf8004",
    "summary": "Kuramoto order parameter (complex form). Computes collective synchronization r·e^(iψ) of N coupled phases. r ≈ 0 = chaos/dissonance; r ≈ 1 = perfect lockstep. Real-world: power-grid frequency lock, neural firing synchrony, firefly flashing, cardiac pacemakers, crowd footsteps (Millennium Bridge wobble).",
    "exports": [
      {
        "name": "normalizePhase",
        "kind": "function",
        "signature": "normalizePhase(phase)",
        "summary": ""
      },
      {
        "name": "cyclesToRadians",
        "kind": "function",
        "signature": "cyclesToRadians(cycles)",
        "summary": ""
      },
      {
        "name": "radiansToCycles",
        "kind": "function",
        "signature": "radiansToCycles(radians)",
        "summary": ""
      },
      {
        "name": "phaseFromTime",
        "kind": "function",
        "signature": "phaseFromTime(frequency, time, phase = 0)",
        "summary": ""
      },
      {
        "name": "advancePhase",
        "kind": "function",
        "signature": "advancePhase(phase, frequency, dt)",
        "summary": ""
      },
      {
        "name": "createOscillator",
        "kind": "function",
        "signature": "createOscillator(config = {})",
        "summary": ""
      },
      {
        "name": "oscillatorCycle",
        "kind": "function",
        "signature": "oscillatorCycle(phase)",
        "summary": ""
      },
      {
        "name": "sampleWave",
        "kind": "function",
        "signature": "sampleWave(shape, phase, dutyCycle = 0.5)",
        "summary": ""
      },
      {
        "name": "sampleOscillatorAtPhase",
        "kind": "function",
        "signature": "sampleOscillatorAtPhase(oscillator, phase)",
        "summary": ""
      },
      {
        "name": "sampleOscillator",
        "kind": "function",
        "signature": "sampleOscillator(oscillator, time)",
        "summary": ""
      },
      {
        "name": "sampleOscillatorArray",
        "kind": "function",
        "signature": "sampleOscillatorArray(oscillators, time, out = [])",
        "summary": ""
      },
      {
        "name": "beatFrequency",
        "kind": "function",
        "signature": "beatFrequency(a, b)",
        "summary": ""
      },
      {
        "name": "resonanceWeight",
        "kind": "function",
        "signature": "resonanceWeight(a, b, bandwidth = 1)",
        "summary": ""
      },
      {
        "name": "applyAmplitudeModulation",
        "kind": "function",
        "signature": "applyAmplitudeModulation(sampleValue, modulatorValue, amount = 1, bipolar = false)",
        "summary": ""
      },
      {
        "name": "applyPhaseModulation",
        "kind": "function",
        "signature": "applyPhaseModulation(phase, modulatorValue, amount = 1)",
        "summary": ""
      },
      {
        "name": "waveInterference",
        "kind": "function",
        "signature": "waveInterference(a, b)",
        "summary": ""
      },
      {
        "name": "ringModulate",
        "kind": "function",
        "signature": "ringModulate(a, b)",
        "summary": ""
      },
      {
        "name": "sampleAmplitudeModulated",
        "kind": "function",
        "signature": "sampleAmplitudeModulated(carrier, modulator, time, amount = 1, bipolar = false)",
        "summary": ""
      },
      {
        "name": "samplePhaseModulated",
        "kind": "function",
        "signature": "samplePhaseModulated(carrier, modulator, time, amount = 1)",
        "summary": ""
      },
      {
        "name": "sampleRingModulated",
        "kind": "function",
        "signature": "sampleRingModulated(a, b, time)",
        "summary": ""
      },
      {
        "name": "phaseCoherence",
        "kind": "function",
        "signature": "phaseCoherence(phases)",
        "summary": ""
      },
      {
        "name": "stepKuramotoPhases",
        "kind": "function",
        "signature": "stepKuramotoPhases(phases, naturalFrequencies, dt, coupling = 0.5, weights = null, out = null)",
        "summary": ""
      },
      {
        "name": "stepCoupledOscillators",
        "kind": "function",
        "signature": "stepCoupledOscillators(oscillators, dt, coupling = 0.5, weights = null)",
        "summary": ""
      },
      {
        "name": "kuramotoOrderParameterComplex",
        "kind": "function",
        "signature": "kuramotoOrderParameterComplex(phases)",
        "summary": "Kuramoto order parameter (complex form). Computes collective synchronization r·e^(iψ) of N coupled phases. r ≈ 0 = chaos/dissonance; r ≈ 1 = perfect lockstep. Real-world: power-grid frequency lock, neural firing synchrony, firefly flashing, cardiac pacemakers, crowd footsteps (Millennium Bridge wobble)."
      },
      {
        "name": "kuramotoOrderParameter",
        "kind": "function",
        "signature": "kuramotoOrderParameter(phases)",
        "summary": "Scalar synchronization metric r = |<e^(iθ)>|. Game uses: swarm AI cohesion, rhythm-combat sync signals, magic ritual progress bars, ambient life pulse coherence."
      },
      {
        "name": "stepKuramotoDriven",
        "kind": "function",
        "signature": "stepKuramotoDriven(phases, naturalFrequencies, dt, t, coupling = 0.5, driveFrequency = 1, driveStrength = 0, weights = null, out = null)",
        "summary": "Euler step for driven Kuramoto model. dθᵢ/dt = 2π·ωᵢ + (K/N)Σⱼsin(θⱼ−θᵢ) + λ·sin(2π·f_drive·t − θᵢ) The λ term is an external forcing function (e.g. Schumann resonance 7.83 Hz, a metronome, a planetary frequency, a bassline tempo). Applications: procedural music harmony, NPC swarm coordination, breathing/ idle animation sync, climate zone oscillations, magic aura pulse coupling."
      },
      {
        "name": "stepKuramotoMeanFieldDriven",
        "kind": "function",
        "signature": "stepKuramotoMeanFieldDriven(phases, naturalFrequencies, dt, t, coupling = 0.5, driveFrequency = 1, driveStrength = 0, out = null, order = null,)",
        "summary": "Exact O(N) Euler step for the globally coupled, driven Kuramoto model. For uniform all-to-all coupling, the pair sum is exactly reducible through Z = <exp(iθ)> = re + i·im: (K/N) Σⱼ sin(θⱼ-θᵢ) = K (im·cos θᵢ - re·sin θᵢ) This is mathematically equivalent to `stepKuramotoDriven(..., weights=null)` while avoiding its O(N²) pair loop. `order` may be supplied when the caller already computed the current order parameter for telemetry."
      },
      {
        "name": "createOscillatorBank",
        "kind": "function",
        "signature": "createOscillatorBank(count, factory = null)",
        "summary": ""
      },
      {
        "name": "OSCILLATOR_SHAPES",
        "kind": "constant",
        "signature": "OSCILLATOR_SHAPES",
        "summary": ""
      },
      {
        "name": "DEFAULT_OSCILLATOR",
        "kind": "constant",
        "signature": "DEFAULT_OSCILLATOR",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathPacking",
    "path": "engine/reference/core/math/MathPacking.md",
    "source": "engine/core/math/MathPacking.js",
    "import": "/engine/core/math/MathPacking.js",
    "sourceHash": "15a1f71a21fd94ce62c6da4baeb4a8a7772bbbd9041aa536c7b6feebb5ac7b48",
    "summary": "MathPacking.js - GPU data packing utilities Half-float, SNORM/UNORM, RGB9E5, R11G11B10F Consolidates: World3DPreviewRenderer._floatToHalf, MeshCompression.quantizeUVs",
    "exports": [
      {
        "name": "floatToHalf",
        "kind": "function",
        "signature": "floatToHalf(val)",
        "summary": ""
      },
      {
        "name": "halfToFloat",
        "kind": "function",
        "signature": "halfToFloat(h)",
        "summary": ""
      },
      {
        "name": "floatArrayToHalf",
        "kind": "function",
        "signature": "floatArrayToHalf(arr)",
        "summary": ""
      },
      {
        "name": "halfArrayToFloat",
        "kind": "function",
        "signature": "halfArrayToFloat(arr)",
        "summary": ""
      },
      {
        "name": "packUNORM8Array",
        "kind": "function",
        "signature": "packUNORM8Array(arr)",
        "summary": ""
      },
      {
        "name": "unpackUNORM8Array",
        "kind": "function",
        "signature": "unpackUNORM8Array(arr)",
        "summary": ""
      },
      {
        "name": "packUNORM16Array",
        "kind": "function",
        "signature": "packUNORM16Array(arr)",
        "summary": ""
      },
      {
        "name": "unpackUNORM16Array",
        "kind": "function",
        "signature": "unpackUNORM16Array(arr)",
        "summary": ""
      },
      {
        "name": "packSignedRangeUNORMBits",
        "kind": "function",
        "signature": "packSignedRangeUNORMBits(value, range, bitDepth = 16, fallback = 0)",
        "summary": ""
      },
      {
        "name": "unpackSignedRangeUNORMBits",
        "kind": "function",
        "signature": "unpackSignedRangeUNORMBits(packed, range, bitDepth = 16, fallback = 0)",
        "summary": ""
      },
      {
        "name": "packSignedRangeUNORM16",
        "kind": "function",
        "signature": "packSignedRangeUNORM16(value, range, fallback = 0)",
        "summary": ""
      },
      {
        "name": "unpackSignedRangeUNORM16",
        "kind": "function",
        "signature": "unpackSignedRangeUNORM16(packed, range, fallback = 0)",
        "summary": ""
      },
      {
        "name": "packSignedRangeSNORMBits",
        "kind": "function",
        "signature": "packSignedRangeSNORMBits(value, range, bitDepth = 16, fallback = 0)",
        "summary": ""
      },
      {
        "name": "unpackSignedRangeSNORMBits",
        "kind": "function",
        "signature": "unpackSignedRangeSNORMBits(packed, range, bitDepth = 16, fallback = 0)",
        "summary": ""
      },
      {
        "name": "packSignedRangeSNORM16",
        "kind": "function",
        "signature": "packSignedRangeSNORM16(value, range, fallback = 0)",
        "summary": ""
      },
      {
        "name": "unpackSignedRangeSNORM16",
        "kind": "function",
        "signature": "unpackSignedRangeSNORM16(packed, range, fallback = 0)",
        "summary": ""
      },
      {
        "name": "packUint8x4",
        "kind": "function",
        "signature": "packUint8x4(x, y, z, w)",
        "summary": ""
      },
      {
        "name": "unpackUint8x4",
        "kind": "function",
        "signature": "unpackUint8x4(packed)",
        "summary": ""
      },
      {
        "name": "packUNORM8x4",
        "kind": "function",
        "signature": "packUNORM8x4(x, y, z, w)",
        "summary": ""
      },
      {
        "name": "unpackUNORM8x4",
        "kind": "function",
        "signature": "unpackUNORM8x4(packed)",
        "summary": ""
      },
      {
        "name": "packSNORM8x4",
        "kind": "function",
        "signature": "packSNORM8x4(x, y, z, w)",
        "summary": ""
      },
      {
        "name": "unpackSNORM8x4",
        "kind": "function",
        "signature": "unpackSNORM8x4(packed)",
        "summary": ""
      },
      {
        "name": "packUNORM16x2",
        "kind": "function",
        "signature": "packUNORM16x2(x, y)",
        "summary": ""
      },
      {
        "name": "unpackUNORM16x2",
        "kind": "function",
        "signature": "unpackUNORM16x2(packed)",
        "summary": ""
      },
      {
        "name": "packSNORM16x2",
        "kind": "function",
        "signature": "packSNORM16x2(x, y)",
        "summary": ""
      },
      {
        "name": "unpackSNORM16x2",
        "kind": "function",
        "signature": "unpackSNORM16x2(packed)",
        "summary": ""
      },
      {
        "name": "packTransformTRS10",
        "kind": "function",
        "signature": "packTransformTRS10(transform = {}, options = {})",
        "summary": ""
      },
      {
        "name": "unpackTransformTRS10",
        "kind": "function",
        "signature": "unpackTransformTRS10(packed, options = {})",
        "summary": ""
      },
      {
        "name": "packParticlePositionAge",
        "kind": "function",
        "signature": "packParticlePositionAge(x, y, z, age, options = {})",
        "summary": ""
      },
      {
        "name": "unpackParticlePositionAge",
        "kind": "function",
        "signature": "unpackParticlePositionAge(packed, options = {})",
        "summary": ""
      },
      {
        "name": "packParticleVelocityLifetime",
        "kind": "function",
        "signature": "packParticleVelocityLifetime(vx, vy, vz, lifetime, options = {})",
        "summary": ""
      },
      {
        "name": "unpackParticleVelocityLifetime",
        "kind": "function",
        "signature": "unpackParticleVelocityLifetime(packed, options = {})",
        "summary": ""
      },
      {
        "name": "packORM8",
        "kind": "function",
        "signature": "packORM8(occlusion = 1, roughness = 1, metallic = 0, alpha = 1)",
        "summary": ""
      },
      {
        "name": "unpackORM8",
        "kind": "function",
        "signature": "unpackORM8(packed)",
        "summary": ""
      },
      {
        "name": "packPBRMaterialParams8",
        "kind": "function",
        "signature": "packPBRMaterialParams8(metallic = 0, roughness = 1, normalScale = 1, alphaCutoff = 0)",
        "summary": ""
      },
      {
        "name": "unpackPBRMaterialParams8",
        "kind": "function",
        "signature": "unpackPBRMaterialParams8(packed)",
        "summary": ""
      },
      {
        "name": "normalizeVoxelMaterialUniforms",
        "kind": "function",
        "signature": "normalizeVoxelMaterialUniforms(params = {})",
        "summary": ""
      },
      {
        "name": "packVoxelMaterialUniforms",
        "kind": "function",
        "signature": "packVoxelMaterialUniforms(params = {}, out = new Float32Array(VOXEL_MATERIAL_UNIFORM_FLOATS)",
        "summary": ""
      },
      {
        "name": "packRGB9E5",
        "kind": "function",
        "signature": "packRGB9E5(r, g, b)",
        "summary": ""
      },
      {
        "name": "unpackRGB9E5",
        "kind": "function",
        "signature": "unpackRGB9E5(v)",
        "summary": ""
      },
      {
        "name": "packR11G11B10F",
        "kind": "function",
        "signature": "packR11G11B10F(r, g, b)",
        "summary": ""
      },
      {
        "name": "unpackR11G11B10F",
        "kind": "function",
        "signature": "unpackR11G11B10F(v)",
        "summary": ""
      },
      {
        "name": "packOctNormal",
        "kind": "function",
        "signature": "packOctNormal(nx, ny, nz)",
        "summary": ""
      },
      {
        "name": "unpackOctNormal",
        "kind": "function",
        "signature": "unpackOctNormal(packed)",
        "summary": ""
      },
      {
        "name": "packQuatSmallestThree",
        "kind": "function",
        "signature": "packQuatSmallestThree(x, y, z, w)",
        "summary": ""
      },
      {
        "name": "unpackQuatSmallestThree",
        "kind": "function",
        "signature": "unpackQuatSmallestThree(packed)",
        "summary": ""
      },
      {
        "name": "packUNORM8",
        "kind": "function",
        "signature": "packUNORM8(f)",
        "summary": ""
      },
      {
        "name": "unpackUNORM8",
        "kind": "function",
        "signature": "unpackUNORM8(u)",
        "summary": ""
      },
      {
        "name": "packUNORM16",
        "kind": "function",
        "signature": "packUNORM16(f)",
        "summary": ""
      },
      {
        "name": "unpackUNORM16",
        "kind": "function",
        "signature": "unpackUNORM16(u)",
        "summary": ""
      },
      {
        "name": "packSNORM8",
        "kind": "function",
        "signature": "packSNORM8(f)",
        "summary": ""
      },
      {
        "name": "unpackSNORM8",
        "kind": "function",
        "signature": "unpackSNORM8(s)",
        "summary": ""
      },
      {
        "name": "packSNORM16",
        "kind": "function",
        "signature": "packSNORM16(f)",
        "summary": ""
      },
      {
        "name": "unpackSNORM16",
        "kind": "function",
        "signature": "unpackSNORM16(s)",
        "summary": ""
      },
      {
        "name": "TRANSFORM_PACKED_TRS_LENGTH",
        "kind": "constant",
        "signature": "TRANSFORM_PACKED_TRS_LENGTH",
        "summary": ""
      },
      {
        "name": "DEFAULT_TRANSFORM_PACKING_SCALES",
        "kind": "constant",
        "signature": "DEFAULT_TRANSFORM_PACKING_SCALES",
        "summary": ""
      },
      {
        "name": "PARTICLE_STATE_PACKED_VEC4_LENGTH",
        "kind": "constant",
        "signature": "PARTICLE_STATE_PACKED_VEC4_LENGTH",
        "summary": ""
      },
      {
        "name": "DEFAULT_PARTICLE_PACKING_RANGES",
        "kind": "constant",
        "signature": "DEFAULT_PARTICLE_PACKING_RANGES",
        "summary": ""
      },
      {
        "name": "VOXEL_MATERIAL_UNIFORM_FLOATS",
        "kind": "constant",
        "signature": "VOXEL_MATERIAL_UNIFORM_FLOATS",
        "summary": ""
      },
      {
        "name": "DEFAULT_VOXEL_MATERIAL_UNIFORMS",
        "kind": "constant",
        "signature": "DEFAULT_VOXEL_MATERIAL_UNIFORMS",
        "summary": ""
      },
      {
        "name": "packVec2UNORM16",
        "kind": "constant",
        "signature": "packVec2UNORM16",
        "summary": ""
      },
      {
        "name": "unpackVec2UNORM16",
        "kind": "constant",
        "signature": "unpackVec2UNORM16",
        "summary": ""
      },
      {
        "name": "packVec2SNORM16",
        "kind": "constant",
        "signature": "packVec2SNORM16",
        "summary": ""
      },
      {
        "name": "unpackVec2SNORM16",
        "kind": "constant",
        "signature": "unpackVec2SNORM16",
        "summary": ""
      },
      {
        "name": "packTransform",
        "kind": "constant",
        "signature": "packTransform",
        "summary": ""
      },
      {
        "name": "unpackTransform",
        "kind": "constant",
        "signature": "unpackTransform",
        "summary": ""
      },
      {
        "name": "packParticlePosition",
        "kind": "constant",
        "signature": "packParticlePosition",
        "summary": ""
      },
      {
        "name": "unpackParticlePosition",
        "kind": "constant",
        "signature": "unpackParticlePosition",
        "summary": ""
      },
      {
        "name": "packParticleVelocity",
        "kind": "constant",
        "signature": "packParticleVelocity",
        "summary": ""
      },
      {
        "name": "unpackParticleVelocity",
        "kind": "constant",
        "signature": "unpackParticleVelocity",
        "summary": ""
      },
      {
        "name": "packMaterialORM8",
        "kind": "constant",
        "signature": "packMaterialORM8",
        "summary": ""
      },
      {
        "name": "unpackMaterialORM8",
        "kind": "constant",
        "signature": "unpackMaterialORM8",
        "summary": ""
      },
      {
        "name": "packMaterialParams8",
        "kind": "constant",
        "signature": "packMaterialParams8",
        "summary": ""
      },
      {
        "name": "unpackMaterialParams8",
        "kind": "constant",
        "signature": "unpackMaterialParams8",
        "summary": ""
      },
      {
        "name": "packQuaternionSmallestThree",
        "kind": "constant",
        "signature": "packQuaternionSmallestThree",
        "summary": ""
      },
      {
        "name": "unpackQuaternionSmallestThree",
        "kind": "constant",
        "signature": "unpackQuaternionSmallestThree",
        "summary": ""
      },
      {
        "name": "packQuat",
        "kind": "constant",
        "signature": "packQuat",
        "summary": ""
      },
      {
        "name": "unpackQuat",
        "kind": "constant",
        "signature": "unpackQuat",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathPhysics",
    "path": "engine/reference/core/math/MathPhysics.md",
    "source": "engine/core/math/MathPhysics.js",
    "import": "/engine/core/math/MathPhysics.js",
    "sourceHash": "ffe6509ae9d4a0f51ba4a7171ef15843c19cc7c7a36184b8bd538d2e198e3782",
    "summary": "",
    "exports": [
      {
        "name": "linearMotion",
        "kind": "function",
        "signature": "linearMotion(position, velocity, acceleration, dt)",
        "summary": ""
      },
      {
        "name": "eulerIntegrate",
        "kind": "function",
        "signature": "eulerIntegrate(position, velocity, acceleration, dt)",
        "summary": ""
      },
      {
        "name": "semiImplicitEuler",
        "kind": "function",
        "signature": "semiImplicitEuler(position, velocity, acceleration, dt)",
        "summary": ""
      },
      {
        "name": "projectileMotion",
        "kind": "function",
        "signature": "projectileMotion(position, velocity, gravity, dt)",
        "summary": ""
      },
      {
        "name": "projectilePosition",
        "kind": "function",
        "signature": "projectilePosition(start, velocity, gravity, t)",
        "summary": ""
      },
      {
        "name": "projectileTimeToApex",
        "kind": "function",
        "signature": "projectileTimeToApex(velocityY, gravity)",
        "summary": ""
      },
      {
        "name": "projectileMaxHeight",
        "kind": "function",
        "signature": "projectileMaxHeight(startY, velocityY, gravity)",
        "summary": ""
      },
      {
        "name": "projectileRange",
        "kind": "function",
        "signature": "projectileRange(speed, angle, gravity)",
        "summary": ""
      },
      {
        "name": "projectileLaunchAngle",
        "kind": "function",
        "signature": "projectileLaunchAngle(range, speed, gravity)",
        "summary": ""
      },
      {
        "name": "projectileVelocityToTarget",
        "kind": "function",
        "signature": "projectileVelocityToTarget(start, target, gravity, preferHighArc = false)",
        "summary": ""
      },
      {
        "name": "pointVelocityFromAngular",
        "kind": "function",
        "signature": "pointVelocityFromAngular(angularVelocity, centerOfRotation, point)",
        "summary": ""
      },
      {
        "name": "totalPointVelocity",
        "kind": "function",
        "signature": "totalPointVelocity(linearVelocity, angularVelocity, centerOfMass, point)",
        "summary": ""
      },
      {
        "name": "gravitationalForce",
        "kind": "function",
        "signature": "gravitationalForce(m1, m2, p1, p2, G = 6.674e-11)",
        "summary": ""
      },
      {
        "name": "springForce",
        "kind": "function",
        "signature": "springForce(position, anchor, restLength, stiffness)",
        "summary": ""
      },
      {
        "name": "dampedSpringForce",
        "kind": "function",
        "signature": "dampedSpringForce(position, velocity, anchor, restLength, stiffness, damping)",
        "summary": ""
      },
      {
        "name": "dragForce",
        "kind": "function",
        "signature": "dragForce(velocity, dragCoefficient, area, fluidDensity = 1.225)",
        "summary": ""
      },
      {
        "name": "linearDragForce",
        "kind": "function",
        "signature": "linearDragForce(velocity, dragCoefficient)",
        "summary": ""
      },
      {
        "name": "frictionForce",
        "kind": "function",
        "signature": "frictionForce(velocity, normalForce, frictionCoefficient)",
        "summary": ""
      },
      {
        "name": "buoyancyForce",
        "kind": "function",
        "signature": "buoyancyForce(submergedVolume, fluidDensity, gravity = 9.81)",
        "summary": ""
      },
      {
        "name": "torqueFromForce",
        "kind": "function",
        "signature": "torqueFromForce(force, point, centerOfMass)",
        "summary": ""
      },
      {
        "name": "angularAccelerationFromTorque",
        "kind": "function",
        "signature": "angularAccelerationFromTorque(torque, inertia)",
        "summary": ""
      },
      {
        "name": "elasticCollision",
        "kind": "function",
        "signature": "elasticCollision(m1, v1, m2, v2)",
        "summary": ""
      },
      {
        "name": "inelasticCollision",
        "kind": "function",
        "signature": "inelasticCollision(m1, v1, m2, v2, restitution = 0.5)",
        "summary": ""
      },
      {
        "name": "sphereCollisionResponse",
        "kind": "function",
        "signature": "sphereCollisionResponse(p1, v1, m1, r1, p2, v2, m2, r2, restitution = 0.8)",
        "summary": ""
      },
      {
        "name": "planeCollisionResponse",
        "kind": "function",
        "signature": "planeCollisionResponse(velocity, normal, restitution = 0.8)",
        "summary": ""
      },
      {
        "name": "collisionResponseWithFriction",
        "kind": "function",
        "signature": "collisionResponseWithFriction(velocity, normal, restitution, friction)",
        "summary": ""
      },
      {
        "name": "distanceConstraint",
        "kind": "function",
        "signature": "distanceConstraint(p1, p2, targetDistance, stiffness = 1)",
        "summary": ""
      },
      {
        "name": "distanceConstraintMass",
        "kind": "function",
        "signature": "distanceConstraintMass(p1, m1, p2, m2, targetDistance, stiffness = 1)",
        "summary": ""
      },
      {
        "name": "pointConstraint",
        "kind": "function",
        "signature": "pointConstraint(position, target, stiffness = 1)",
        "summary": ""
      },
      {
        "name": "angleConstraint",
        "kind": "function",
        "signature": "angleConstraint(p1, p2, p3, targetAngle, stiffness = 1)",
        "summary": ""
      },
      {
        "name": "collisionConstraint",
        "kind": "function",
        "signature": "collisionConstraint(p1, r1, p2, r2)",
        "summary": ""
      },
      {
        "name": "verletIntegrate",
        "kind": "function",
        "signature": "verletIntegrate(current, previous, acceleration, dt)",
        "summary": ""
      },
      {
        "name": "verletIntegrateDamped",
        "kind": "function",
        "signature": "verletIntegrateDamped(current, previous, acceleration, dt, damping = 0.99)",
        "summary": ""
      },
      {
        "name": "verletVelocity",
        "kind": "function",
        "signature": "verletVelocity(current, previous, dt)",
        "summary": ""
      },
      {
        "name": "parallelAxisTheorem",
        "kind": "function",
        "signature": "parallelAxisTheorem(inertia, mass, offset)",
        "summary": ""
      },
      {
        "name": "totalMechanicalEnergy",
        "kind": "function",
        "signature": "totalMechanicalEnergy(mass, velocity, height, g = 9.81)",
        "summary": ""
      },
      {
        "name": "rk2Integrate",
        "kind": "function",
        "signature": "rk2Integrate(position, velocity, accelerationFn, t, dt)",
        "summary": ""
      },
      {
        "name": "rk4Integrate",
        "kind": "function",
        "signature": "rk4Integrate(position, velocity, accelerationFn, t, dt)",
        "summary": ""
      },
      {
        "name": "rk4AdaptiveStep",
        "kind": "function",
        "signature": "rk4AdaptiveStep(position, velocity, accelerationFn, t, dt)",
        "summary": ""
      },
      {
        "name": "pointAttractorForce",
        "kind": "function",
        "signature": "pointAttractorForce(position, attractorPos, strength, falloffRadius = 1)",
        "summary": ""
      },
      {
        "name": "pointAttractorForceInvSq",
        "kind": "function",
        "signature": "pointAttractorForceInvSq(position, attractorPos, strength, minDist = 0.1)",
        "summary": ""
      },
      {
        "name": "vortexFieldForce",
        "kind": "function",
        "signature": "vortexFieldForce(position, vortexPos, vortexAxis, strength, radius = 1)",
        "summary": ""
      },
      {
        "name": "orbitForce",
        "kind": "function",
        "signature": "orbitForce(position, centerPos, orbitSpeed, upAxis = [0, 1, 0])",
        "summary": ""
      },
      {
        "name": "windForce",
        "kind": "function",
        "signature": "windForce(velocity, windVelocity, sensitivity = 0.1)",
        "summary": ""
      },
      {
        "name": "sphereSphereTimeOfImpact",
        "kind": "function",
        "signature": "sphereSphereTimeOfImpact(p1, v1, r1, p2, r2)",
        "summary": ""
      },
      {
        "name": "sphereSphereMovingTOI",
        "kind": "function",
        "signature": "sphereSphereMovingTOI(p1, v1, r1, p2, v2, r2)",
        "summary": ""
      },
      {
        "name": "spherePlaneTimeOfImpact",
        "kind": "function",
        "signature": "spherePlaneTimeOfImpact(center, velocity, radius, planeNormal, planeD)",
        "summary": ""
      },
      {
        "name": "sphereAABBTimeOfImpact",
        "kind": "function",
        "signature": "sphereAABBTimeOfImpact(center, velocity, radius, aabbMin, aabbMax)",
        "summary": ""
      },
      {
        "name": "clampVelocity",
        "kind": "function",
        "signature": "clampVelocity(velocity, maxSpeed)",
        "summary": ""
      },
      {
        "name": "applyDrag",
        "kind": "function",
        "signature": "applyDrag(velocity, drag, dt)",
        "summary": ""
      },
      {
        "name": "separateSpheres",
        "kind": "function",
        "signature": "separateSpheres(p1, r1, p2, r2)",
        "summary": ""
      },
      {
        "name": "forceFromAcceleration",
        "kind": "function",
        "signature": "forceFromAcceleration(mass, acceleration)",
        "summary": ""
      },
      {
        "name": "accelerationFromForce",
        "kind": "function",
        "signature": "accelerationFromForce(mass, force)",
        "summary": ""
      },
      {
        "name": "inertiaBox",
        "kind": "function",
        "signature": "inertiaBox(mass, width, height, depth)",
        "summary": ""
      },
      {
        "name": "inertiaSphere",
        "kind": "function",
        "signature": "inertiaSphere(mass, radius)",
        "summary": ""
      },
      {
        "name": "inertiaHollowSphere",
        "kind": "function",
        "signature": "inertiaHollowSphere(mass, radius)",
        "summary": ""
      },
      {
        "name": "inertiaCylinder",
        "kind": "function",
        "signature": "inertiaCylinder(mass, radius, height)",
        "summary": ""
      },
      {
        "name": "inertiaCapsule",
        "kind": "function",
        "signature": "inertiaCapsule(mass, radius, height)",
        "summary": ""
      },
      {
        "name": "inertiaCone",
        "kind": "function",
        "signature": "inertiaCone(mass, radius, height)",
        "summary": ""
      },
      {
        "name": "kineticEnergy",
        "kind": "function",
        "signature": "kineticEnergy(mass, velocity)",
        "summary": ""
      },
      {
        "name": "potentialEnergyGravity",
        "kind": "function",
        "signature": "potentialEnergyGravity(mass, height, g = 9.81)",
        "summary": ""
      },
      {
        "name": "springPotentialEnergy",
        "kind": "function",
        "signature": "springPotentialEnergy(stiffness, displacement)",
        "summary": ""
      },
      {
        "name": "rotationalKineticEnergy",
        "kind": "function",
        "signature": "rotationalKineticEnergy(inertia, angularVelocity)",
        "summary": ""
      },
      {
        "name": "linearMomentum",
        "kind": "function",
        "signature": "linearMomentum(mass, velocity)",
        "summary": ""
      },
      {
        "name": "angularMomentum",
        "kind": "function",
        "signature": "angularMomentum(inertia, angularVelocity)",
        "summary": ""
      },
      {
        "name": "inertiaSolidSphere",
        "kind": "constant",
        "signature": "inertiaSolidSphere",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathPlane",
    "path": "engine/reference/core/math/MathPlane.md",
    "source": "engine/core/math/MathPlane.js",
    "import": "/engine/core/math/MathPlane.js",
    "sourceHash": "1c2d7a5d7b16b3de485f79fa9fe7fa64deeb61db2287730a47ed4c5c1ed1f69f",
    "summary": "MathPlane.js - Plane operations (Three.js/Godot/Unity parity) Plane represented as [nx, ny, nz, d] where nx*x + ny*y + nz*z + d = 0 Consolidates: MeshCutter.Plane, MathGeometry.rayPlane, MathGeometry.sdfPlane",
    "exports": [
      {
        "name": "planeFromPointNormal",
        "kind": "function",
        "signature": "planeFromPointNormal(point, normal)",
        "summary": ""
      },
      {
        "name": "planeFromPoints",
        "kind": "function",
        "signature": "planeFromPoints(a, b, c)",
        "summary": ""
      },
      {
        "name": "planeNormalize",
        "kind": "function",
        "signature": "planeNormalize(p)",
        "summary": ""
      },
      {
        "name": "planeClassifyPoint",
        "kind": "function",
        "signature": "planeClassifyPoint(plane, point, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "planeProjectPoint",
        "kind": "function",
        "signature": "planeProjectPoint(plane, point)",
        "summary": ""
      },
      {
        "name": "planeIntersectRay",
        "kind": "function",
        "signature": "planeIntersectRay(plane, rayOrigin, rayDir)",
        "summary": ""
      },
      {
        "name": "planeIntersectSegment",
        "kind": "function",
        "signature": "planeIntersectSegment(plane, p1, p2)",
        "summary": ""
      },
      {
        "name": "planeIntersectPlane",
        "kind": "function",
        "signature": "planeIntersectPlane(p1, p2)",
        "summary": ""
      },
      {
        "name": "planeIntersectThreePlanes",
        "kind": "function",
        "signature": "planeIntersectThreePlanes(p1, p2, p3)",
        "summary": ""
      },
      {
        "name": "planeTransformMat4",
        "kind": "function",
        "signature": "planeTransformMat4(plane, m)",
        "summary": ""
      },
      {
        "name": "planeEquals",
        "kind": "function",
        "signature": "planeEquals(a, b, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "planeCreate",
        "kind": "function",
        "signature": "planeCreate(nx, ny, nz, d)",
        "summary": ""
      },
      {
        "name": "planeClone",
        "kind": "function",
        "signature": "planeClone(p)",
        "summary": ""
      },
      {
        "name": "planeGetNormal",
        "kind": "function",
        "signature": "planeGetNormal(p)",
        "summary": ""
      },
      {
        "name": "planeDistanceToPoint",
        "kind": "function",
        "signature": "planeDistanceToPoint(plane, point)",
        "summary": ""
      },
      {
        "name": "planeAbsDistanceToPoint",
        "kind": "function",
        "signature": "planeAbsDistanceToPoint(plane, point)",
        "summary": ""
      },
      {
        "name": "planeNegate",
        "kind": "function",
        "signature": "planeNegate(p)",
        "summary": ""
      },
      {
        "name": "planeCoplanarPoint",
        "kind": "function",
        "signature": "planeCoplanarPoint(plane)",
        "summary": ""
      },
      {
        "name": "planeClosestPoint",
        "kind": "constant",
        "signature": "planeClosestPoint",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathPolynomial",
    "path": "engine/reference/core/math/MathPolynomial.md",
    "source": "engine/core/math/MathPolynomial.js",
    "import": "/engine/core/math/MathPolynomial.js",
    "sourceHash": "327bec1221f20c6ac6f248261c06b405ff80b55bff365762d4dddd9b37517036",
    "summary": "MathPolynomial.js - Polynomial root solvers and evaluation Consolidates: AIAiming.js inline quadratic, SpeculativeContacts.js quadratic CCD Standard in game math libraries for intersection tests, predictive aim, CCD",
    "exports": [
      {
        "name": "polyEval",
        "kind": "function",
        "signature": "polyEval(coeffs, x)",
        "summary": "Evaluate polynomial using Horner's method: coeffs[0]*x^n + coeffs[1]*x^(n-1) + ... + coeffs[n]"
      },
      {
        "name": "polyDerivative",
        "kind": "function",
        "signature": "polyDerivative(coeffs)",
        "summary": "Derivative coefficients: returns new array of degree n-1"
      },
      {
        "name": "polyEvalWithDerivative",
        "kind": "function",
        "signature": "polyEvalWithDerivative(coeffs, x)",
        "summary": "Evaluate polynomial and its derivative simultaneously (Horner's)"
      },
      {
        "name": "solveLinear",
        "kind": "function",
        "signature": "solveLinear(a, b)",
        "summary": ""
      },
      {
        "name": "solveQuadratic",
        "kind": "function",
        "signature": "solveQuadratic(a, b, c)",
        "summary": ""
      },
      {
        "name": "solveQuadraticPositive",
        "kind": "function",
        "signature": "solveQuadraticPositive(a, b, c)",
        "summary": "Smallest positive root of quadratic, or null"
      },
      {
        "name": "solveCubic",
        "kind": "function",
        "signature": "solveCubic(a, b, c, d)",
        "summary": ""
      },
      {
        "name": "solveQuartic",
        "kind": "function",
        "signature": "solveQuartic(a, b, c, d, e)",
        "summary": ""
      },
      {
        "name": "polyNewtonRoot",
        "kind": "function",
        "signature": "polyNewtonRoot(coeffs, guess, maxIter = 20, tolerance = EPSILON)",
        "summary": ""
      },
      {
        "name": "polyRealRoots",
        "kind": "function",
        "signature": "polyRealRoots(coeffs, lo = -1000, hi = 1000, tolerance = 1e-10)",
        "summary": "Find all real roots of an arbitrary polynomial using Sturm chain + bisection"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathPrecision",
    "path": "engine/reference/core/math/MathPrecision.md",
    "source": "engine/core/math/MathPrecision.js",
    "import": "/engine/core/math/MathPrecision.js",
    "sourceHash": "171c56c863ce3de7ac014d549f7faa9ec0d89367cb2e57e5095eb8f997ea51e4",
    "summary": "MathPrecision.js - numeric tolerance and world-scale split-double helpers. Pure math helpers for tests, serialization policy, and CPU/GPU coordinate packing.",
    "exports": [
      {
        "name": "absoluteError",
        "kind": "function",
        "signature": "absoluteError(actual, expected)",
        "summary": ""
      },
      {
        "name": "relativeError",
        "kind": "function",
        "signature": "relativeError(actual, expected)",
        "summary": ""
      },
      {
        "name": "numberWithinTolerance",
        "kind": "function",
        "signature": "numberWithinTolerance(actual, expected, absoluteTolerance = DEFAULT_ABSOLUTE_TOLERANCE, relativeTolerance = DEFAULT_RELATIVE_TOLERANCE)",
        "summary": ""
      },
      {
        "name": "maxAbsError",
        "kind": "function",
        "signature": "maxAbsError(actual, expected)",
        "summary": ""
      },
      {
        "name": "vecWithinTolerance",
        "kind": "function",
        "signature": "vecWithinTolerance(actual, expected, absoluteTolerance = DEFAULT_ABSOLUTE_TOLERANCE, relativeTolerance = DEFAULT_RELATIVE_TOLERANCE)",
        "summary": ""
      },
      {
        "name": "splitFloat64ToFloat32",
        "kind": "function",
        "signature": "splitFloat64ToFloat32(value)",
        "summary": ""
      },
      {
        "name": "joinFloat32Split",
        "kind": "function",
        "signature": "joinFloat32Split(split)",
        "summary": ""
      },
      {
        "name": "splitVec3Float64ToFloat32",
        "kind": "function",
        "signature": "splitVec3Float64ToFloat32(value)",
        "summary": ""
      },
      {
        "name": "joinVec3Float32Split",
        "kind": "function",
        "signature": "joinVec3Float32Split(split)",
        "summary": ""
      },
      {
        "name": "serializeFloat32Split",
        "kind": "function",
        "signature": "serializeFloat32Split(split)",
        "summary": ""
      },
      {
        "name": "deserializeFloat32Split",
        "kind": "function",
        "signature": "deserializeFloat32Split(payload)",
        "summary": ""
      },
      {
        "name": "serializeVec3Float32Split",
        "kind": "function",
        "signature": "serializeVec3Float32Split(split)",
        "summary": ""
      },
      {
        "name": "deserializeVec3Float32Split",
        "kind": "function",
        "signature": "deserializeVec3Float32Split(payload)",
        "summary": ""
      },
      {
        "name": "jsonRoundTrip",
        "kind": "function",
        "signature": "jsonRoundTrip(value)",
        "summary": ""
      },
      {
        "name": "DEFAULT_ABSOLUTE_TOLERANCE",
        "kind": "constant",
        "signature": "DEFAULT_ABSOLUTE_TOLERANCE",
        "summary": ""
      },
      {
        "name": "DEFAULT_RELATIVE_TOLERANCE",
        "kind": "constant",
        "signature": "DEFAULT_RELATIVE_TOLERANCE",
        "summary": ""
      },
      {
        "name": "DEFAULT_WORLD_SPLIT_TOLERANCE",
        "kind": "constant",
        "signature": "DEFAULT_WORLD_SPLIT_TOLERANCE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathQuality",
    "path": "engine/reference/core/math/MathQuality.md",
    "source": "engine/core/math/MathQuality.js",
    "import": "/engine/core/math/MathQuality.js",
    "sourceHash": "e42d489bbc963759ffe50078c27420ab9b5688dbdf807b1d05475d2827a4abc7",
    "summary": "MathQuality.js - reusable error, quality, signal, and size metrics.",
    "exports": [
      {
        "name": "pairwiseErrorStats",
        "kind": "function",
        "signature": "pairwiseErrorStats(reference, candidate)",
        "summary": ""
      },
      {
        "name": "meanSquaredError",
        "kind": "function",
        "signature": "meanSquaredError(reference, candidate)",
        "summary": ""
      },
      {
        "name": "rootMeanSquaredError",
        "kind": "function",
        "signature": "rootMeanSquaredError(reference, candidate)",
        "summary": ""
      },
      {
        "name": "meanAbsoluteError",
        "kind": "function",
        "signature": "meanAbsoluteError(reference, candidate)",
        "summary": ""
      },
      {
        "name": "averageError",
        "kind": "function",
        "signature": "averageError(reference, candidate)",
        "summary": ""
      },
      {
        "name": "peakAbsoluteError",
        "kind": "function",
        "signature": "peakAbsoluteError(reference, candidate)",
        "summary": ""
      },
      {
        "name": "signalToNoiseRatio",
        "kind": "function",
        "signature": "signalToNoiseRatio(reference, candidate)",
        "summary": ""
      },
      {
        "name": "peakSignalToNoiseRatio",
        "kind": "function",
        "signature": "peakSignalToNoiseRatio(reference, candidate, options = {})",
        "summary": ""
      },
      {
        "name": "structuralSimilarityLite",
        "kind": "function",
        "signature": "structuralSimilarityLite(reference, candidate, options = {})",
        "summary": ""
      },
      {
        "name": "windowedStructuralSimilarity",
        "kind": "function",
        "signature": "windowedStructuralSimilarity(reference, candidate, options = {})",
        "summary": ""
      },
      {
        "name": "channelQualityReport",
        "kind": "function",
        "signature": "channelQualityReport(reference, candidate, options = {})",
        "summary": ""
      },
      {
        "name": "imageQualityReport",
        "kind": "function",
        "signature": "imageQualityReport(referenceImage, candidateImage, options = {})",
        "summary": ""
      },
      {
        "name": "histogramDifference",
        "kind": "function",
        "signature": "histogramDifference(referenceHistogram, candidateHistogram, options = {})",
        "summary": ""
      },
      {
        "name": "audioRmsError",
        "kind": "function",
        "signature": "audioRmsError(reference, candidate)",
        "summary": ""
      },
      {
        "name": "frameDifference",
        "kind": "function",
        "signature": "frameDifference(reference, candidate, options = {})",
        "summary": ""
      },
      {
        "name": "perceptualErrorScore",
        "kind": "function",
        "signature": "perceptualErrorScore(reference, candidate, options = {})",
        "summary": ""
      },
      {
        "name": "qualityMetricsReport",
        "kind": "function",
        "signature": "qualityMetricsReport(reference, candidate, options = {})",
        "summary": ""
      },
      {
        "name": "qualitySizeScore",
        "kind": "function",
        "signature": "qualitySizeScore({ quality = 1, byteSize = 0, referenceByteSize = 0, byteBudget = Infinity, budgetBytes = byteBudget, qualityWeight = 0.7, sizeWeight = 0.3, budgetWeight, } = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathQuat",
    "path": "engine/reference/core/math/MathQuat.md",
    "source": "engine/core/math/MathQuat.js",
    "import": "/engine/core/math/MathQuat.js",
    "sourceHash": "7d66b103c26c9f2592447a7b5f611db40b60e568db9efabf6956e124f3ca2fdc",
    "summary": "MathQuat.js - Extended Quaternion operations [x, y, z, w] Supplements the basic quat ops in EngineMath.js with advanced features Depends on: MathConstants.js, MathScalar.js",
    "exports": [
      {
        "name": "quatFromAxisAngle",
        "kind": "function",
        "signature": "quatFromAxisAngle(axis, angle)",
        "summary": ""
      },
      {
        "name": "quatFromEuler",
        "kind": "function",
        "signature": "quatFromEuler(x, y, z, order = 'XYZ')",
        "summary": ""
      },
      {
        "name": "quatToEuler",
        "kind": "function",
        "signature": "quatToEuler(q, order = 'XYZ')",
        "summary": ""
      },
      {
        "name": "quatFromRotationMatrix",
        "kind": "function",
        "signature": "quatFromRotationMatrix(m)",
        "summary": ""
      },
      {
        "name": "quatFromVectors",
        "kind": "function",
        "signature": "quatFromVectors(from, to)",
        "summary": ""
      },
      {
        "name": "quatLookAt",
        "kind": "function",
        "signature": "quatLookAt(direction, up = [0, 1, 0])",
        "summary": ""
      },
      {
        "name": "quatMultiply",
        "kind": "function",
        "signature": "quatMultiply(a, b)",
        "summary": ""
      },
      {
        "name": "quatInverse",
        "kind": "function",
        "signature": "quatInverse(q)",
        "summary": ""
      },
      {
        "name": "quatNormalize",
        "kind": "function",
        "signature": "quatNormalize(q)",
        "summary": ""
      },
      {
        "name": "quatRotateVec3",
        "kind": "function",
        "signature": "quatRotateVec3(v, q)",
        "summary": ""
      },
      {
        "name": "quatSlerp",
        "kind": "function",
        "signature": "quatSlerp(a, b, t)",
        "summary": ""
      },
      {
        "name": "quatGetAxis",
        "kind": "function",
        "signature": "quatGetAxis(q)",
        "summary": ""
      },
      {
        "name": "quatEquals",
        "kind": "function",
        "signature": "quatEquals(a, b, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "quatRandom",
        "kind": "function",
        "signature": "quatRandom()",
        "summary": ""
      },
      {
        "name": "quatExp",
        "kind": "function",
        "signature": "quatExp(q)",
        "summary": ""
      },
      {
        "name": "quatLog",
        "kind": "function",
        "signature": "quatLog(q)",
        "summary": ""
      },
      {
        "name": "quatRotateTowards",
        "kind": "function",
        "signature": "quatRotateTowards(from, to, maxRadiansDelta)",
        "summary": ""
      },
      {
        "name": "quatSlerpUnclamped",
        "kind": "function",
        "signature": "quatSlerpUnclamped(a, b, t)",
        "summary": ""
      },
      {
        "name": "quatToAxisAngle",
        "kind": "function",
        "signature": "quatToAxisAngle(q)",
        "summary": ""
      },
      {
        "name": "quatSwingTwist",
        "kind": "function",
        "signature": "quatSwingTwist(q, twistAxis)",
        "summary": ""
      },
      {
        "name": "quatIntegrateAngularVelocity",
        "kind": "function",
        "signature": "quatIntegrateAngularVelocity(q, angularVel, dt)",
        "summary": ""
      },
      {
        "name": "quat",
        "kind": "function",
        "signature": "quat(x = 0, y = 0, z = 0, w = 1)",
        "summary": ""
      },
      {
        "name": "quatIdentity",
        "kind": "function",
        "signature": "quatIdentity()",
        "summary": ""
      },
      {
        "name": "quatClone",
        "kind": "function",
        "signature": "quatClone(q)",
        "summary": ""
      },
      {
        "name": "quatCopy",
        "kind": "function",
        "signature": "quatCopy(out, q)",
        "summary": ""
      },
      {
        "name": "quatSet",
        "kind": "function",
        "signature": "quatSet(out, x, y, z, w)",
        "summary": ""
      },
      {
        "name": "quatFromEulerDeg",
        "kind": "function",
        "signature": "quatFromEulerDeg(x, y, z, order = 'XYZ')",
        "summary": ""
      },
      {
        "name": "quatToEulerDeg",
        "kind": "function",
        "signature": "quatToEulerDeg(q, order = 'XYZ')",
        "summary": ""
      },
      {
        "name": "quatAdd",
        "kind": "function",
        "signature": "quatAdd(a, b)",
        "summary": ""
      },
      {
        "name": "quatScale",
        "kind": "function",
        "signature": "quatScale(q, s)",
        "summary": ""
      },
      {
        "name": "quatConjugate",
        "kind": "function",
        "signature": "quatConjugate(q)",
        "summary": ""
      },
      {
        "name": "quatNegate",
        "kind": "function",
        "signature": "quatNegate(q)",
        "summary": ""
      },
      {
        "name": "quatLength",
        "kind": "function",
        "signature": "quatLength(q)",
        "summary": ""
      },
      {
        "name": "quatLengthSq",
        "kind": "function",
        "signature": "quatLengthSq(q)",
        "summary": ""
      },
      {
        "name": "quatDot",
        "kind": "function",
        "signature": "quatDot(a, b)",
        "summary": ""
      },
      {
        "name": "quatLerp",
        "kind": "function",
        "signature": "quatLerp(a, b, t)",
        "summary": ""
      },
      {
        "name": "quatSquad",
        "kind": "function",
        "signature": "quatSquad(q0, q1, q2, q3, t)",
        "summary": ""
      },
      {
        "name": "quatGetAngle",
        "kind": "function",
        "signature": "quatGetAngle(q)",
        "summary": ""
      },
      {
        "name": "quatAngleBetween",
        "kind": "function",
        "signature": "quatAngleBetween(a, b)",
        "summary": ""
      },
      {
        "name": "quatPow",
        "kind": "function",
        "signature": "quatPow(q, n)",
        "summary": ""
      },
      {
        "name": "quatRotateX",
        "kind": "function",
        "signature": "quatRotateX(q, angle)",
        "summary": ""
      },
      {
        "name": "quatRotateY",
        "kind": "function",
        "signature": "quatRotateY(q, angle)",
        "summary": ""
      },
      {
        "name": "quatRotateZ",
        "kind": "function",
        "signature": "quatRotateZ(q, angle)",
        "summary": ""
      },
      {
        "name": "quatForward",
        "kind": "function",
        "signature": "quatForward(q)",
        "summary": ""
      },
      {
        "name": "quatRight",
        "kind": "function",
        "signature": "quatRight(q)",
        "summary": ""
      },
      {
        "name": "quatUp",
        "kind": "function",
        "signature": "quatUp(q)",
        "summary": ""
      },
      {
        "name": "quatBack",
        "kind": "function",
        "signature": "quatBack(q)",
        "summary": ""
      },
      {
        "name": "quatToString",
        "kind": "function",
        "signature": "quatToString(q, precision = 3)",
        "summary": ""
      },
      {
        "name": "quatDifference",
        "kind": "function",
        "signature": "quatDifference(from, to)",
        "summary": ""
      },
      {
        "name": "quatIsIdentity",
        "kind": "function",
        "signature": "quatIsIdentity(q, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "quatIsNormalized",
        "kind": "function",
        "signature": "quatIsNormalized(q, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "quatIsFinite",
        "kind": "function",
        "signature": "quatIsFinite(q)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathRandom",
    "path": "engine/reference/core/math/MathRandom.md",
    "source": "engine/core/math/MathRandom.js",
    "import": "/engine/core/math/MathRandom.js",
    "sourceHash": "f3d5da266df1fc28792ba0dfb828c52a17ed95309427f4791c0a8538d8b7f88b",
    "summary": "",
    "exports": [
      {
        "name": "mulberry32",
        "kind": "function",
        "signature": "mulberry32(seed)",
        "summary": ""
      },
      {
        "name": "splitmix32",
        "kind": "function",
        "signature": "splitmix32(seed)",
        "summary": ""
      },
      {
        "name": "xorshift128",
        "kind": "function",
        "signature": "xorshift128(seed)",
        "summary": ""
      },
      {
        "name": "pcg32",
        "kind": "function",
        "signature": "pcg32(seed)",
        "summary": ""
      },
      {
        "name": "legacyLcgAdvanceState32",
        "kind": "function",
        "signature": "legacyLcgAdvanceState32(state)",
        "summary": ""
      },
      {
        "name": "legacyLcgStateToFloat01",
        "kind": "function",
        "signature": "legacyLcgStateToFloat01(state)",
        "summary": ""
      },
      {
        "name": "setRandomSeed",
        "kind": "function",
        "signature": "setRandomSeed(seed)",
        "summary": ""
      },
      {
        "name": "resetRandomSeed",
        "kind": "function",
        "signature": "resetRandomSeed()",
        "summary": ""
      },
      {
        "name": "random",
        "kind": "function",
        "signature": "random()",
        "summary": ""
      },
      {
        "name": "randomRange",
        "kind": "function",
        "signature": "randomRange(min, max)",
        "summary": ""
      },
      {
        "name": "randomInt",
        "kind": "function",
        "signature": "randomInt(min, max)",
        "summary": ""
      },
      {
        "name": "randomBool",
        "kind": "function",
        "signature": "randomBool(probability = 0.5)",
        "summary": ""
      },
      {
        "name": "randomSign",
        "kind": "function",
        "signature": "randomSign()",
        "summary": ""
      },
      {
        "name": "uniformDistribution",
        "kind": "function",
        "signature": "uniformDistribution(min = 0, max = 1, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "normalDistribution",
        "kind": "function",
        "signature": "normalDistribution(mean = 0, stdDev = 1, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "exponentialDistribution",
        "kind": "function",
        "signature": "exponentialDistribution(lambda = 1, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "poissonDistribution",
        "kind": "function",
        "signature": "poissonDistribution(lambda, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "binomialDistribution",
        "kind": "function",
        "signature": "binomialDistribution(n, p, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "triangularDistribution",
        "kind": "function",
        "signature": "triangularDistribution(min, max, mode, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "gammaDistribution",
        "kind": "function",
        "signature": "gammaDistribution(shape, scale = 1, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "betaDistribution",
        "kind": "function",
        "signature": "betaDistribution(alpha, beta, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "logNormalDistribution",
        "kind": "function",
        "signature": "logNormalDistribution(mean = 0, stdDev = 1, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "cauchyDistribution",
        "kind": "function",
        "signature": "cauchyDistribution(x0 = 0, gamma = 1, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "paretoDistribution",
        "kind": "function",
        "signature": "paretoDistribution(alpha, xMin = 1, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "weightedRandom",
        "kind": "function",
        "signature": "weightedRandom(weights, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "randomElement",
        "kind": "function",
        "signature": "randomElement(array, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "shuffle",
        "kind": "function",
        "signature": "shuffle(array, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "shuffleInPlace",
        "kind": "function",
        "signature": "shuffleInPlace(array, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "sample",
        "kind": "function",
        "signature": "sample(array, n, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "sampleWithReplacement",
        "kind": "function",
        "signature": "sampleWithReplacement(array, n, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "reservoirSample",
        "kind": "function",
        "signature": "reservoirSample(stream, k, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "randomOnCircle",
        "kind": "function",
        "signature": "randomOnCircle(rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "randomInCircle",
        "kind": "function",
        "signature": "randomInCircle(rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "randomOnSphere",
        "kind": "function",
        "signature": "randomOnSphere(rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "randomInSphere",
        "kind": "function",
        "signature": "randomInSphere(rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "randomOnHemisphereCosine",
        "kind": "function",
        "signature": "randomOnHemisphereCosine(normal, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "randomInTriangle",
        "kind": "function",
        "signature": "randomInTriangle(v0, v1, v2, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "randomInCone",
        "kind": "function",
        "signature": "randomInCone(direction, halfAngle, rng = defaultRng)",
        "summary": ""
      },
      {
        "name": "haltonSequence",
        "kind": "function",
        "signature": "haltonSequence(index, base)",
        "summary": ""
      },
      {
        "name": "halton2D",
        "kind": "function",
        "signature": "halton2D(index)",
        "summary": ""
      },
      {
        "name": "halton3D",
        "kind": "function",
        "signature": "halton3D(index)",
        "summary": ""
      },
      {
        "name": "r2Sequence",
        "kind": "function",
        "signature": "r2Sequence(index)",
        "summary": ""
      },
      {
        "name": "r3Sequence",
        "kind": "function",
        "signature": "r3Sequence(index)",
        "summary": ""
      },
      {
        "name": "fibonacciSphere",
        "kind": "function",
        "signature": "fibonacciSphere(index, total, rotation = 0)",
        "summary": ""
      },
      {
        "name": "fibonacciSpherePoints",
        "kind": "function",
        "signature": "fibonacciSpherePoints(count, rotation = 0)",
        "summary": ""
      },
      {
        "name": "fibonacciDisk",
        "kind": "function",
        "signature": "fibonacciDisk(index, total)",
        "summary": ""
      },
      {
        "name": "poissonDiskSampling",
        "kind": "function",
        "signature": "poissonDiskSampling(width, height, minDist, maxAttempts = 30, rng = defaultRng)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathRay",
    "path": "engine/reference/core/math/MathRay.md",
    "source": "engine/core/math/MathRay.js",
    "import": "/engine/core/math/MathRay.js",
    "sourceHash": "a0b16be55a80a0a3dcdf4662c1aa6699c9246e5f4e560f08823afa5f16f599bf",
    "summary": "MathRay.js - Ray operations (Three.js/Unity parity) Ray represented as { origin: [x,y,z], direction: [x,y,z] } Consolidates: AIAiming.createRay, MathGeometry.ray*, ScreenRayCaster, Viewport.getPickRay",
    "exports": [
      {
        "name": "rayCreate",
        "kind": "function",
        "signature": "rayCreate(origin, direction)",
        "summary": ""
      },
      {
        "name": "rayFromPoints",
        "kind": "function",
        "signature": "rayFromPoints(a, b)",
        "summary": ""
      },
      {
        "name": "rayFromScreen",
        "kind": "function",
        "signature": "rayFromScreen(ndcX, ndcY, invViewProj)",
        "summary": ""
      },
      {
        "name": "rayClosestPointToPoint",
        "kind": "function",
        "signature": "rayClosestPointToPoint(ray, point)",
        "summary": ""
      },
      {
        "name": "rayDistanceToPoint",
        "kind": "function",
        "signature": "rayDistanceToPoint(ray, point)",
        "summary": ""
      },
      {
        "name": "rayDistanceSqToPoint",
        "kind": "function",
        "signature": "rayDistanceSqToPoint(ray, point)",
        "summary": ""
      },
      {
        "name": "rayClosestPointToRay",
        "kind": "function",
        "signature": "rayClosestPointToRay(ray1, ray2)",
        "summary": ""
      },
      {
        "name": "rayIntersectSphere",
        "kind": "function",
        "signature": "rayIntersectSphere(ray, center, radius)",
        "summary": ""
      },
      {
        "name": "rayIntersectAABB",
        "kind": "function",
        "signature": "rayIntersectAABB(ray, aabbMin, aabbMax)",
        "summary": ""
      },
      {
        "name": "rayIntersectPlane",
        "kind": "function",
        "signature": "rayIntersectPlane(ray, planeNormal, planeD)",
        "summary": ""
      },
      {
        "name": "rayIntersectTriangle",
        "kind": "function",
        "signature": "rayIntersectTriangle(ray, v0, v1, v2)",
        "summary": ""
      },
      {
        "name": "rayIntersectCapsule",
        "kind": "function",
        "signature": "rayIntersectCapsule(ray, capA, capB, radius)",
        "summary": ""
      },
      {
        "name": "rayIntersectOBB",
        "kind": "function",
        "signature": "rayIntersectOBB(ray, boxCenter, boxAxes, halfExtents)",
        "summary": ""
      },
      {
        "name": "rayTransformMat4",
        "kind": "function",
        "signature": "rayTransformMat4(ray, m)",
        "summary": ""
      },
      {
        "name": "rayEquals",
        "kind": "function",
        "signature": "rayEquals(a, b, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "rayClone",
        "kind": "function",
        "signature": "rayClone(ray)",
        "summary": ""
      },
      {
        "name": "rayAt",
        "kind": "function",
        "signature": "rayAt(ray, t)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathRect2",
    "path": "engine/reference/core/math/MathRect2.md",
    "source": "engine/core/math/MathRect2.js",
    "import": "/engine/core/math/MathRect2.js",
    "sourceHash": "8cafe94a869030fcb56117b72ecee863ceec080928137f3858f9def6bb05ea8d",
    "summary": "MathRect2.js - 2D Axis-Aligned Bounding Box / Rectangle (Godot Rect2 / Three.js Box2 parity) Rect represented as { minX, minY, maxX, maxY } Consolidates: MathGeometry.pointInRect/rectRect, workflow-canvas bounding box logic",
    "exports": [
      {
        "name": "rect2FromPoints",
        "kind": "function",
        "signature": "rect2FromPoints(points)",
        "summary": ""
      },
      {
        "name": "rect2Intersection",
        "kind": "function",
        "signature": "rect2Intersection(a, b)",
        "summary": ""
      },
      {
        "name": "rect2DistanceToPoint",
        "kind": "function",
        "signature": "rect2DistanceToPoint(r, x, y)",
        "summary": ""
      },
      {
        "name": "rect2ApproxEquals",
        "kind": "function",
        "signature": "rect2ApproxEquals(a, b, eps = 1e-6)",
        "summary": ""
      },
      {
        "name": "rect2Create",
        "kind": "function",
        "signature": "rect2Create(minX, minY, maxX, maxY)",
        "summary": ""
      },
      {
        "name": "rect2FromCenterSize",
        "kind": "function",
        "signature": "rect2FromCenterSize(cx, cy, w, h)",
        "summary": ""
      },
      {
        "name": "rect2FromPositionSize",
        "kind": "function",
        "signature": "rect2FromPositionSize(x, y, w, h)",
        "summary": ""
      },
      {
        "name": "rect2Zero",
        "kind": "function",
        "signature": "rect2Zero()",
        "summary": ""
      },
      {
        "name": "rect2Clone",
        "kind": "function",
        "signature": "rect2Clone(r)",
        "summary": ""
      },
      {
        "name": "rect2Copy",
        "kind": "function",
        "signature": "rect2Copy(out, r)",
        "summary": ""
      },
      {
        "name": "rect2CenterX",
        "kind": "function",
        "signature": "rect2CenterX(r)",
        "summary": ""
      },
      {
        "name": "rect2CenterY",
        "kind": "function",
        "signature": "rect2CenterY(r)",
        "summary": ""
      },
      {
        "name": "rect2Center",
        "kind": "function",
        "signature": "rect2Center(r)",
        "summary": ""
      },
      {
        "name": "rect2Width",
        "kind": "function",
        "signature": "rect2Width(r)",
        "summary": ""
      },
      {
        "name": "rect2Height",
        "kind": "function",
        "signature": "rect2Height(r)",
        "summary": ""
      },
      {
        "name": "rect2Size",
        "kind": "function",
        "signature": "rect2Size(r)",
        "summary": ""
      },
      {
        "name": "rect2Area",
        "kind": "function",
        "signature": "rect2Area(r)",
        "summary": ""
      },
      {
        "name": "rect2Perimeter",
        "kind": "function",
        "signature": "rect2Perimeter(r)",
        "summary": ""
      },
      {
        "name": "rect2AspectRatio",
        "kind": "function",
        "signature": "rect2AspectRatio(r)",
        "summary": ""
      },
      {
        "name": "rect2IsEmpty",
        "kind": "function",
        "signature": "rect2IsEmpty(r)",
        "summary": ""
      },
      {
        "name": "rect2IsFinite",
        "kind": "function",
        "signature": "rect2IsFinite(r)",
        "summary": ""
      },
      {
        "name": "rect2ContainsPoint",
        "kind": "function",
        "signature": "rect2ContainsPoint(r, x, y)",
        "summary": ""
      },
      {
        "name": "rect2ContainsPointV",
        "kind": "function",
        "signature": "rect2ContainsPointV(r, p)",
        "summary": ""
      },
      {
        "name": "rect2ContainsRect",
        "kind": "function",
        "signature": "rect2ContainsRect(outer, inner)",
        "summary": ""
      },
      {
        "name": "rect2IntersectsRect",
        "kind": "function",
        "signature": "rect2IntersectsRect(a, b)",
        "summary": ""
      },
      {
        "name": "rect2ExpandPoint",
        "kind": "function",
        "signature": "rect2ExpandPoint(r, x, y)",
        "summary": ""
      },
      {
        "name": "rect2ExpandPointV",
        "kind": "function",
        "signature": "rect2ExpandPointV(r, p)",
        "summary": ""
      },
      {
        "name": "rect2Merge",
        "kind": "function",
        "signature": "rect2Merge(a, b)",
        "summary": ""
      },
      {
        "name": "rect2Grow",
        "kind": "function",
        "signature": "rect2Grow(r, amount)",
        "summary": ""
      },
      {
        "name": "rect2GrowV",
        "kind": "function",
        "signature": "rect2GrowV(r, ax, ay)",
        "summary": ""
      },
      {
        "name": "rect2Translate",
        "kind": "function",
        "signature": "rect2Translate(r, dx, dy)",
        "summary": ""
      },
      {
        "name": "rect2Scale",
        "kind": "function",
        "signature": "rect2Scale(r, sx, sy)",
        "summary": ""
      },
      {
        "name": "rect2ClampPoint",
        "kind": "function",
        "signature": "rect2ClampPoint(r, x, y)",
        "summary": ""
      },
      {
        "name": "rect2ClampPointV",
        "kind": "function",
        "signature": "rect2ClampPointV(r, p)",
        "summary": ""
      },
      {
        "name": "rect2DistanceToPointV",
        "kind": "function",
        "signature": "rect2DistanceToPointV(r, p)",
        "summary": ""
      },
      {
        "name": "rect2GetCorners",
        "kind": "function",
        "signature": "rect2GetCorners(r)",
        "summary": ""
      },
      {
        "name": "rect2Equals",
        "kind": "function",
        "signature": "rect2Equals(a, b)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathRegistry",
    "path": "engine/reference/core/math/MathRegistry.md",
    "source": "engine/core/math/MathRegistry.js",
    "import": "/engine/core/math/MathRegistry.js",
    "sourceHash": "70cc7da442d55244e41ebd27559ebd4f87abf6e1d2f53b19eebafd5fcff20f5b",
    "summary": "MathRegistry.js - inspectable metadata for stable MathEngine modules and functions.",
    "exports": [
      {
        "name": "mathRegistryEntries",
        "kind": "function",
        "signature": "mathRegistryEntries(filters = {})",
        "summary": ""
      },
      {
        "name": "mathRegistryById",
        "kind": "function",
        "signature": "mathRegistryById(id, registry = MATH_REGISTRY)",
        "summary": ""
      },
      {
        "name": "mathRegistryFunctionsForModule",
        "kind": "function",
        "signature": "mathRegistryFunctionsForModule(moduleId, registry = MATH_REGISTRY)",
        "summary": ""
      },
      {
        "name": "mathRegistryReport",
        "kind": "function",
        "signature": "mathRegistryReport(registry = MATH_REGISTRY)",
        "summary": ""
      },
      {
        "name": "mathRegistryManifest",
        "kind": "function",
        "signature": "mathRegistryManifest(registry = MATH_REGISTRY)",
        "summary": ""
      },
      {
        "name": "MATH_REGISTRY_VERSION",
        "kind": "constant",
        "signature": "MATH_REGISTRY_VERSION",
        "summary": ""
      },
      {
        "name": "MATH_MODULE_REGISTRY",
        "kind": "constant",
        "signature": "MATH_MODULE_REGISTRY",
        "summary": ""
      },
      {
        "name": "MATH_FUNCTION_REGISTRY",
        "kind": "constant",
        "signature": "MATH_FUNCTION_REGISTRY",
        "summary": ""
      },
      {
        "name": "MATH_REGISTRY",
        "kind": "constant",
        "signature": "MATH_REGISTRY",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathRootAlgebra",
    "path": "engine/reference/core/math/MathRootAlgebra.md",
    "source": "engine/core/math/MathRootAlgebra.js",
    "import": "/engine/core/math/MathRootAlgebra.js",
    "sourceHash": "90be5128918d85c1130a3c7484c8c7e4c07d5cffb9aee9efbe8ad9eb2f5e8f40",
    "summary": "Compile the reducer into immutable bilinear and square execution plans. Experimental encoders never enter this path: callers may require the exact algebraic laws their optimized kernel depends on before code is generated.",
    "exports": [
      {
        "name": "rootAlgebraMask",
        "kind": "function",
        "signature": "rootAlgebraMask(n)",
        "summary": ""
      },
      {
        "name": "rootAlgebraDimension",
        "kind": "function",
        "signature": "rootAlgebraDimension(n)",
        "summary": ""
      },
      {
        "name": "rootAlgebraGeneratorName",
        "kind": "function",
        "signature": "rootAlgebraGeneratorName(index)",
        "summary": ""
      },
      {
        "name": "rootAlgebraBasisName",
        "kind": "function",
        "signature": "rootAlgebraBasisName(mask, n = 4)",
        "summary": ""
      },
      {
        "name": "rootAlgebraFormatElement",
        "kind": "function",
        "signature": "rootAlgebraFormatElement(element, n = 4)",
        "summary": ""
      },
      {
        "name": "rootAlgebraSquare",
        "kind": "function",
        "signature": "rootAlgebraSquare(n, basisMask)",
        "summary": ""
      },
      {
        "name": "rootAlgebraMultiply",
        "kind": "function",
        "signature": "rootAlgebraMultiply(n, leftMask, rightMask)",
        "summary": ""
      },
      {
        "name": "rootAlgebraTraceMultiply",
        "kind": "function",
        "signature": "rootAlgebraTraceMultiply(n, leftMask, rightMask)",
        "summary": ""
      },
      {
        "name": "rootAlgebraReverseMaskBits",
        "kind": "function",
        "signature": "rootAlgebraReverseMaskBits(mask, n)",
        "summary": ""
      },
      {
        "name": "rootAlgebraEncodedMultiply",
        "kind": "function",
        "signature": "rootAlgebraEncodedMultiply(n, leftMask, rightMask, options = {})",
        "summary": ""
      },
      {
        "name": "rootAlgebraEncodedTrace",
        "kind": "function",
        "signature": "rootAlgebraEncodedTrace(n, leftMask, rightMask, options = {})",
        "summary": ""
      },
      {
        "name": "rootAlgebraGenerateTable",
        "kind": "function",
        "signature": "rootAlgebraGenerateTable(n, multiply = rootAlgebraMultiply)",
        "summary": ""
      },
      {
        "name": "rootAlgebraCompileExecutionPlan",
        "kind": "function",
        "signature": "rootAlgebraCompileExecutionPlan(n, options = {})",
        "summary": "Compile the reducer into immutable bilinear and square execution plans. Experimental encoders never enter this path: callers may require the exact algebraic laws their optimized kernel depends on before code is generated."
      },
      {
        "name": "rootAlgebraEvaluateExecutionPlan",
        "kind": "function",
        "signature": "rootAlgebraEvaluateExecutionPlan(plan, left, right = null)",
        "summary": ""
      },
      {
        "name": "rootAlgebraExecutionPlanWGSL",
        "kind": "function",
        "signature": "rootAlgebraExecutionPlanWGSL(plan, options = {})",
        "summary": "Generate a branch-free WGSL product or square directly from a validated plan."
      },
      {
        "name": "rootAlgebraValidate",
        "kind": "function",
        "signature": "rootAlgebraValidate(n, options = {})",
        "summary": ""
      },
      {
        "name": "rootAlgebraPropertyReport",
        "kind": "function",
        "signature": "rootAlgebraPropertyReport(n, options = {})",
        "summary": ""
      },
      {
        "name": "rootAlgebraFindSimpleZeroDivisors",
        "kind": "function",
        "signature": "rootAlgebraFindSimpleZeroDivisors(n, options = {})",
        "summary": ""
      },
      {
        "name": "rootAlgebraSearchEncodedMultipliers",
        "kind": "function",
        "signature": "rootAlgebraSearchEncodedMultipliers(n, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathScalar",
    "path": "engine/reference/core/math/MathScalar.md",
    "source": "engine/core/math/MathScalar.js",
    "import": "/engine/core/math/MathScalar.js",
    "sourceHash": "01cd45a10273c367320358870046b7bb519bc5c841ccfd46b339a731afbb7a10",
    "summary": "MathScalar.js - Scalar utility functions Depends on: MathConstants.js",
    "exports": [
      {
        "name": "nearlyEqual",
        "kind": "function",
        "signature": "nearlyEqual(a, b, absEps = EPSILON, relEps = EPSILON)",
        "summary": ""
      },
      {
        "name": "safeDiv",
        "kind": "function",
        "signature": "safeDiv(numerator, denominator, fallback = 0)",
        "summary": ""
      },
      {
        "name": "gcd",
        "kind": "function",
        "signature": "gcd(a, b)",
        "summary": ""
      },
      {
        "name": "lcm",
        "kind": "function",
        "signature": "lcm(a, b)",
        "summary": ""
      },
      {
        "name": "normalizeRange",
        "kind": "function",
        "signature": "normalizeRange(min, max)",
        "summary": ""
      },
      {
        "name": "clampRange",
        "kind": "function",
        "signature": "clampRange(value, min, max)",
        "summary": ""
      },
      {
        "name": "rangeContains",
        "kind": "function",
        "signature": "rangeContains(value, min, max, inclusive = true)",
        "summary": ""
      },
      {
        "name": "rangeOverlap",
        "kind": "function",
        "signature": "rangeOverlap(aMin, aMax, bMin, bMax, inclusive = true)",
        "summary": ""
      },
      {
        "name": "rangeIntersection",
        "kind": "function",
        "signature": "rangeIntersection(aMin, aMax, bMin, bMax)",
        "summary": ""
      },
      {
        "name": "rangeUnion",
        "kind": "function",
        "signature": "rangeUnion(aMin, aMax, bMin, bMax)",
        "summary": ""
      },
      {
        "name": "splitRange",
        "kind": "function",
        "signature": "splitRange(min, max, segments)",
        "summary": ""
      },
      {
        "name": "degToRad",
        "kind": "function",
        "signature": "degToRad(deg)",
        "summary": ""
      },
      {
        "name": "radToDeg",
        "kind": "function",
        "signature": "radToDeg(rad)",
        "summary": ""
      },
      {
        "name": "clamp",
        "kind": "function",
        "signature": "clamp(x, min, max)",
        "summary": ""
      },
      {
        "name": "saturate",
        "kind": "function",
        "signature": "saturate(x)",
        "summary": ""
      },
      {
        "name": "lerp",
        "kind": "function",
        "signature": "lerp(a, b, t)",
        "summary": ""
      },
      {
        "name": "inverseLerp",
        "kind": "function",
        "signature": "inverseLerp(a, b, x)",
        "summary": ""
      },
      {
        "name": "remap",
        "kind": "function",
        "signature": "remap(x, inMin, inMax, outMin, outMax)",
        "summary": ""
      },
      {
        "name": "remapClamped",
        "kind": "function",
        "signature": "remapClamped(x, inMin, inMax, outMin, outMax)",
        "summary": ""
      },
      {
        "name": "smoothstep",
        "kind": "function",
        "signature": "smoothstep(e0, e1, x)",
        "summary": ""
      },
      {
        "name": "smootherstep",
        "kind": "function",
        "signature": "smootherstep(e0, e1, x)",
        "summary": ""
      },
      {
        "name": "step",
        "kind": "function",
        "signature": "step(edge, x)",
        "summary": ""
      },
      {
        "name": "pulse",
        "kind": "function",
        "signature": "pulse(a, b, x)",
        "summary": ""
      },
      {
        "name": "fract",
        "kind": "function",
        "signature": "fract(x)",
        "summary": ""
      },
      {
        "name": "mod",
        "kind": "function",
        "signature": "mod(x, y)",
        "summary": ""
      },
      {
        "name": "wrap",
        "kind": "function",
        "signature": "wrap(x, min, max)",
        "summary": ""
      },
      {
        "name": "sign",
        "kind": "function",
        "signature": "sign(x)",
        "summary": ""
      },
      {
        "name": "signNonZero",
        "kind": "function",
        "signature": "signNonZero(x)",
        "summary": ""
      },
      {
        "name": "approxEqual",
        "kind": "function",
        "signature": "approxEqual(a, b, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "approxZero",
        "kind": "function",
        "signature": "approxZero(x, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "isFiniteNumber",
        "kind": "function",
        "signature": "isFiniteNumber(value)",
        "summary": ""
      },
      {
        "name": "finiteNumber",
        "kind": "function",
        "signature": "finiteNumber(value, fallback = 0)",
        "summary": ""
      },
      {
        "name": "snap",
        "kind": "function",
        "signature": "snap(x, grid)",
        "summary": ""
      },
      {
        "name": "snapFloor",
        "kind": "function",
        "signature": "snapFloor(x, grid)",
        "summary": ""
      },
      {
        "name": "snapCeil",
        "kind": "function",
        "signature": "snapCeil(x, grid)",
        "summary": ""
      },
      {
        "name": "roundTo",
        "kind": "function",
        "signature": "roundTo(x, stepSize = 1)",
        "summary": ""
      },
      {
        "name": "floorTo",
        "kind": "function",
        "signature": "floorTo(x, stepSize = 1)",
        "summary": ""
      },
      {
        "name": "ceilTo",
        "kind": "function",
        "signature": "ceilTo(x, stepSize = 1)",
        "summary": ""
      },
      {
        "name": "wrapAngle",
        "kind": "function",
        "signature": "wrapAngle(angle)",
        "summary": ""
      },
      {
        "name": "wrapAnglePositive",
        "kind": "function",
        "signature": "wrapAnglePositive(angle)",
        "summary": ""
      },
      {
        "name": "angleDiff",
        "kind": "function",
        "signature": "angleDiff(a, b)",
        "summary": ""
      },
      {
        "name": "lerpAngle",
        "kind": "function",
        "signature": "lerpAngle(a, b, t)",
        "summary": ""
      },
      {
        "name": "angleBetween",
        "kind": "function",
        "signature": "angleBetween(a, b)",
        "summary": ""
      },
      {
        "name": "min3",
        "kind": "function",
        "signature": "min3(a, b, c)",
        "summary": ""
      },
      {
        "name": "max3",
        "kind": "function",
        "signature": "max3(a, b, c)",
        "summary": ""
      },
      {
        "name": "min4",
        "kind": "function",
        "signature": "min4(a, b, c, d)",
        "summary": ""
      },
      {
        "name": "max4",
        "kind": "function",
        "signature": "max4(a, b, c, d)",
        "summary": ""
      },
      {
        "name": "minArray",
        "kind": "function",
        "signature": "minArray(arr)",
        "summary": ""
      },
      {
        "name": "maxArray",
        "kind": "function",
        "signature": "maxArray(arr)",
        "summary": ""
      },
      {
        "name": "moveToward",
        "kind": "function",
        "signature": "moveToward(current, target, maxDelta)",
        "summary": ""
      },
      {
        "name": "damp",
        "kind": "function",
        "signature": "damp(current, target, smoothing, dt)",
        "summary": ""
      },
      {
        "name": "springDamp",
        "kind": "function",
        "signature": "springDamp(current, target, velocity, smoothTime, dt)",
        "summary": ""
      },
      {
        "name": "pingPong",
        "kind": "function",
        "signature": "pingPong(t, length)",
        "summary": ""
      },
      {
        "name": "repeat",
        "kind": "function",
        "signature": "repeat(t, length)",
        "summary": ""
      },
      {
        "name": "deltaAngle",
        "kind": "function",
        "signature": "deltaAngle(current, target)",
        "summary": ""
      },
      {
        "name": "moveTowardAngle",
        "kind": "function",
        "signature": "moveTowardAngle(current, target, maxDelta)",
        "summary": ""
      },
      {
        "name": "inverseSqrt",
        "kind": "function",
        "signature": "inverseSqrt(x)",
        "summary": ""
      },
      {
        "name": "fma",
        "kind": "function",
        "signature": "fma(a, b, c)",
        "summary": ""
      },
      {
        "name": "bias",
        "kind": "function",
        "signature": "bias(x, b)",
        "summary": ""
      },
      {
        "name": "gain",
        "kind": "function",
        "signature": "gain(x, g)",
        "summary": ""
      },
      {
        "name": "almostIdentity",
        "kind": "function",
        "signature": "almostIdentity(x, threshold, value)",
        "summary": ""
      },
      {
        "name": "clamp01",
        "kind": "constant",
        "signature": "clamp01",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathSignal",
    "path": "engine/reference/core/math/MathSignal.md",
    "source": "engine/core/math/MathSignal.js",
    "import": "/engine/core/math/MathSignal.js",
    "sourceHash": "41133c3775a3d04628b9f7264b7f6de69d769e468973e3cabe89769e4df9e50e",
    "summary": "MathSignal.js - FFT and Signal Processing FFT, window functions, filters, convolution, spectral analysis",
    "exports": [
      {
        "name": "fft",
        "kind": "function",
        "signature": "fft(real, imag = null)",
        "summary": ""
      },
      {
        "name": "ifft",
        "kind": "function",
        "signature": "ifft(real, imag)",
        "summary": ""
      },
      {
        "name": "rfft",
        "kind": "function",
        "signature": "rfft(input)",
        "summary": ""
      },
      {
        "name": "powerSpectrum",
        "kind": "function",
        "signature": "powerSpectrum(real, imag)",
        "summary": ""
      },
      {
        "name": "magnitudeSpectrum",
        "kind": "function",
        "signature": "magnitudeSpectrum(real, imag)",
        "summary": ""
      },
      {
        "name": "phaseSpectrum",
        "kind": "function",
        "signature": "phaseSpectrum(real, imag)",
        "summary": ""
      },
      {
        "name": "fftFrequencies",
        "kind": "function",
        "signature": "fftFrequencies(n, sampleRate)",
        "summary": ""
      },
      {
        "name": "rfftFrequencies",
        "kind": "function",
        "signature": "rfftFrequencies(n, sampleRate)",
        "summary": ""
      },
      {
        "name": "fft2D",
        "kind": "function",
        "signature": "fft2D(data, width, height)",
        "summary": ""
      },
      {
        "name": "ifft2D",
        "kind": "function",
        "signature": "ifft2D(real, imag, width, height)",
        "summary": ""
      },
      {
        "name": "hannWindow",
        "kind": "function",
        "signature": "hannWindow(n)",
        "summary": ""
      },
      {
        "name": "hammingWindow",
        "kind": "function",
        "signature": "hammingWindow(n)",
        "summary": ""
      },
      {
        "name": "blackmanWindow",
        "kind": "function",
        "signature": "blackmanWindow(n)",
        "summary": ""
      },
      {
        "name": "blackmanHarrisWindow",
        "kind": "function",
        "signature": "blackmanHarrisWindow(n)",
        "summary": ""
      },
      {
        "name": "kaiserWindow",
        "kind": "function",
        "signature": "kaiserWindow(n, beta = 5)",
        "summary": ""
      },
      {
        "name": "gaussianWindow",
        "kind": "function",
        "signature": "gaussianWindow(n, sigma = 0.4)",
        "summary": ""
      },
      {
        "name": "triangularWindow",
        "kind": "function",
        "signature": "triangularWindow(n)",
        "summary": ""
      },
      {
        "name": "flatTopWindow",
        "kind": "function",
        "signature": "flatTopWindow(n)",
        "summary": ""
      },
      {
        "name": "rectangularWindow",
        "kind": "function",
        "signature": "rectangularWindow(n)",
        "summary": ""
      },
      {
        "name": "applyWindow",
        "kind": "function",
        "signature": "applyWindow(signal, window)",
        "summary": ""
      },
      {
        "name": "signalEnergy",
        "kind": "function",
        "signature": "signalEnergy(signal)",
        "summary": ""
      },
      {
        "name": "signalMean",
        "kind": "function",
        "signature": "signalMean(signal)",
        "summary": ""
      },
      {
        "name": "signalRms",
        "kind": "function",
        "signature": "signalRms(signal)",
        "summary": ""
      },
      {
        "name": "signalPeakReport",
        "kind": "function",
        "signature": "signalPeakReport(signal)",
        "summary": ""
      },
      {
        "name": "zeroCrossingCount",
        "kind": "function",
        "signature": "zeroCrossingCount(signal, options = {})",
        "summary": ""
      },
      {
        "name": "zeroCrossingRate",
        "kind": "function",
        "signature": "zeroCrossingRate(signal, options = {})",
        "summary": ""
      },
      {
        "name": "signalSummaryReport",
        "kind": "function",
        "signature": "signalSummaryReport(signal, options = {})",
        "summary": ""
      },
      {
        "name": "resampleLengthForRate",
        "kind": "function",
        "signature": "resampleLengthForRate(sampleCount, sourceSampleRate, targetSampleRate)",
        "summary": ""
      },
      {
        "name": "resampleNearest",
        "kind": "function",
        "signature": "resampleNearest(signal, targetLength)",
        "summary": ""
      },
      {
        "name": "resampleLinear",
        "kind": "function",
        "signature": "resampleLinear(signal, targetLength)",
        "summary": ""
      },
      {
        "name": "movingAverage",
        "kind": "function",
        "signature": "movingAverage(signal, windowSize)",
        "summary": ""
      },
      {
        "name": "exponentialMovingAverage",
        "kind": "function",
        "signature": "exponentialMovingAverage(signal, alpha = 0.3)",
        "summary": ""
      },
      {
        "name": "medianFilter",
        "kind": "function",
        "signature": "medianFilter(signal, windowSize)",
        "summary": ""
      },
      {
        "name": "savitzkyGolayFilter",
        "kind": "function",
        "signature": "savitzkyGolayFilter(signal)",
        "summary": ""
      },
      {
        "name": "butterworthLowpass1",
        "kind": "function",
        "signature": "butterworthLowpass1(cutoffFreq, sampleRate)",
        "summary": ""
      },
      {
        "name": "butterworthHighpass1",
        "kind": "function",
        "signature": "butterworthHighpass1(cutoffFreq, sampleRate)",
        "summary": ""
      },
      {
        "name": "iirFilter",
        "kind": "function",
        "signature": "iirFilter(signal, b, a)",
        "summary": ""
      },
      {
        "name": "firFilter",
        "kind": "function",
        "signature": "firFilter(signal, coefficients)",
        "summary": ""
      },
      {
        "name": "firLowpassCoeffs",
        "kind": "function",
        "signature": "firLowpassCoeffs(cutoffFreq, sampleRate, numTaps)",
        "summary": ""
      },
      {
        "name": "firHighpassCoeffs",
        "kind": "function",
        "signature": "firHighpassCoeffs(cutoffFreq, sampleRate, numTaps)",
        "summary": ""
      },
      {
        "name": "firBandpassCoeffs",
        "kind": "function",
        "signature": "firBandpassCoeffs(lowFreq, highFreq, sampleRate, numTaps)",
        "summary": ""
      },
      {
        "name": "convolve",
        "kind": "function",
        "signature": "convolve(signal, kernel)",
        "summary": ""
      },
      {
        "name": "convolveSame",
        "kind": "function",
        "signature": "convolveSame(signal, kernel)",
        "summary": ""
      },
      {
        "name": "convolveFFT",
        "kind": "function",
        "signature": "convolveFFT(signal, kernel)",
        "summary": ""
      },
      {
        "name": "crossCorrelation",
        "kind": "function",
        "signature": "crossCorrelation(signal1, signal2)",
        "summary": ""
      },
      {
        "name": "autocorrelation",
        "kind": "function",
        "signature": "autocorrelation(signal)",
        "summary": ""
      },
      {
        "name": "normalizedCrossCorrelation",
        "kind": "function",
        "signature": "normalizedCrossCorrelation(signal1, signal2)",
        "summary": ""
      },
      {
        "name": "stft",
        "kind": "function",
        "signature": "stft(signal, windowSize, hopSize, windowFn = hannWindow)",
        "summary": ""
      },
      {
        "name": "istft",
        "kind": "function",
        "signature": "istft(frames, windowSize, hopSize, outputLength)",
        "summary": ""
      },
      {
        "name": "spectrogram",
        "kind": "function",
        "signature": "spectrogram(signal, windowSize, hopSize, windowFn = hannWindow)",
        "summary": ""
      },
      {
        "name": "melFilterbank",
        "kind": "function",
        "signature": "melFilterbank(numFilters, fftSize, sampleRate, lowFreq = 0, highFreq = null)",
        "summary": ""
      },
      {
        "name": "applyMelFilterbank",
        "kind": "function",
        "signature": "applyMelFilterbank(spectrum, filterbank)",
        "summary": ""
      },
      {
        "name": "mfcc",
        "kind": "function",
        "signature": "mfcc(signal, sampleRate, numCoeffs = 13, numFilters = 26, windowSize = 512, hopSize = 256)",
        "summary": ""
      },
      {
        "name": "generateSine",
        "kind": "function",
        "signature": "generateSine(frequency, sampleRate, duration, amplitude = 1)",
        "summary": ""
      },
      {
        "name": "generateCosine",
        "kind": "function",
        "signature": "generateCosine(frequency, sampleRate, duration, amplitude = 1)",
        "summary": ""
      },
      {
        "name": "generateSquare",
        "kind": "function",
        "signature": "generateSquare(frequency, sampleRate, duration, amplitude = 1)",
        "summary": ""
      },
      {
        "name": "generateSawtooth",
        "kind": "function",
        "signature": "generateSawtooth(frequency, sampleRate, duration, amplitude = 1)",
        "summary": ""
      },
      {
        "name": "generateTriangle",
        "kind": "function",
        "signature": "generateTriangle(frequency, sampleRate, duration, amplitude = 1)",
        "summary": ""
      },
      {
        "name": "generateWhiteNoise",
        "kind": "function",
        "signature": "generateWhiteNoise(sampleRate, duration, amplitude = 1)",
        "summary": ""
      },
      {
        "name": "generateChirp",
        "kind": "function",
        "signature": "generateChirp(startFreq, endFreq, sampleRate, duration, amplitude = 1)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathSphericalHarmonics",
    "path": "engine/reference/core/math/MathSphericalHarmonics.md",
    "source": "engine/core/math/MathSphericalHarmonics.js",
    "import": "/engine/core/math/MathSphericalHarmonics.js",
    "sourceHash": "04658a599b6922086beaedcf42da9629ee8476976bbb1fbada9b39cb87952a55",
    "summary": "MathSphericalHarmonics.js - CPU-side Spherical Harmonics (L0-L2, 9 coefficients) Consolidates: RealtimeGI.js inline WGSL evalSH, provides CPU parity for probe baking/debugging Three.js SphericalHarmonics3 parity",
    "exports": [
      {
        "name": "shZero",
        "kind": "function",
        "signature": "shZero()",
        "summary": "Create zero SH (9 RGB coefficients = 27 floats)"
      },
      {
        "name": "shClone",
        "kind": "function",
        "signature": "shClone(sh)",
        "summary": "Clone SH coefficients"
      },
      {
        "name": "shFromColor",
        "kind": "function",
        "signature": "shFromColor(r, g, b)",
        "summary": "Create SH from constant color (ambient only, L0 band)"
      },
      {
        "name": "shEvaluateBasis",
        "kind": "function",
        "signature": "shEvaluateBasis(dir)",
        "summary": "Evaluate 9 SH basis functions for a direction [x,y,z] (must be normalized)"
      },
      {
        "name": "shEvaluateBasisL1",
        "kind": "function",
        "signature": "shEvaluateBasisL1(dir)",
        "summary": "Evaluate 4 SH basis functions (L0+L1 only, cheaper)"
      },
      {
        "name": "shEvaluate",
        "kind": "function",
        "signature": "shEvaluate(sh, dir)",
        "summary": "Evaluate RGB color from SH coefficients at a direction"
      },
      {
        "name": "shIrradiance",
        "kind": "function",
        "signature": "shIrradiance(sh, normal)",
        "summary": "Evaluate irradiance (diffuse lighting) from SH at a surface normal"
      },
      {
        "name": "shProject",
        "kind": "function",
        "signature": "shProject(directions, colors)",
        "summary": "Project directional samples onto SH coefficients"
      },
      {
        "name": "shAdd",
        "kind": "function",
        "signature": "shAdd(a, b)",
        "summary": "Add two SH: out = a + b"
      },
      {
        "name": "shScale",
        "kind": "function",
        "signature": "shScale(sh, s)",
        "summary": "Scale SH by scalar"
      },
      {
        "name": "shLerp",
        "kind": "function",
        "signature": "shLerp(a, b, t)",
        "summary": "Lerp between two SH"
      },
      {
        "name": "shAccumulate",
        "kind": "function",
        "signature": "shAccumulate(out, sh, weight)",
        "summary": "Accumulate: out += sh * weight (in-place)"
      },
      {
        "name": "shConvolve",
        "kind": "function",
        "signature": "shConvolve(sh, kernel)",
        "summary": "Convolve SH with per-band kernel (e.g., cosine lobe for diffuse)"
      },
      {
        "name": "shWindow",
        "kind": "function",
        "signature": "shWindow(sh, windowWidth)",
        "summary": "Apply Hanning window to reduce ringing"
      },
      {
        "name": "shRotate",
        "kind": "function",
        "signature": "shRotate(sh, mat3)",
        "summary": "Rotate SH coefficients by a 3x3 rotation matrix L0 is invariant. L1 rotates directly. L2 uses the explicit 5x5 rotation. Reference: Ivanic & Ruedenberg (1996), Green \"SH Lighting: The Gritty Details\" (2003)"
      },
      {
        "name": "shFromCubemap",
        "kind": "function",
        "signature": "shFromCubemap(faces)",
        "summary": "Project 6-face cubemap to SH"
      },
      {
        "name": "shToGPUBuffer",
        "kind": "function",
        "signature": "shToGPUBuffer(sh)",
        "summary": "Convert SH to Float32Array suitable for GPU uniform upload (already is Float32Array)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathStatistics",
    "path": "engine/reference/core/math/MathStatistics.md",
    "source": "engine/core/math/MathStatistics.js",
    "import": "/engine/core/math/MathStatistics.js",
    "sourceHash": "298b1fe52ca05dc01d65613b428b70956ae43d01791b52828921be3407d74c62",
    "summary": "MathStatistics.js - Running statistics, array stats, exponential moving average Consolidates: PerformanceAnalyzer inline variance/stdDev, FramePacingController running average Welford's online algorithm for numerically stable running stats",
    "exports": [
      {
        "name": "runningStatsCreate",
        "kind": "function",
        "signature": "runningStatsCreate()",
        "summary": ""
      },
      {
        "name": "runningStatsPush",
        "kind": "function",
        "signature": "runningStatsPush(stats, value)",
        "summary": ""
      },
      {
        "name": "runningStatsRemove",
        "kind": "function",
        "signature": "runningStatsRemove(stats, value)",
        "summary": ""
      },
      {
        "name": "runningStatsVariance",
        "kind": "function",
        "signature": "runningStatsVariance(stats)",
        "summary": ""
      },
      {
        "name": "runningStatsPopulationVariance",
        "kind": "function",
        "signature": "runningStatsPopulationVariance(stats)",
        "summary": ""
      },
      {
        "name": "runningStatsStdDev",
        "kind": "function",
        "signature": "runningStatsStdDev(stats)",
        "summary": ""
      },
      {
        "name": "runningStatsMerge",
        "kind": "function",
        "signature": "runningStatsMerge(a, b)",
        "summary": ""
      },
      {
        "name": "runningStatsReset",
        "kind": "function",
        "signature": "runningStatsReset(stats)",
        "summary": ""
      },
      {
        "name": "runningStatsClone",
        "kind": "function",
        "signature": "runningStatsClone(stats)",
        "summary": ""
      },
      {
        "name": "statsMean",
        "kind": "function",
        "signature": "statsMean(arr)",
        "summary": ""
      },
      {
        "name": "statsSum",
        "kind": "function",
        "signature": "statsSum(arr)",
        "summary": ""
      },
      {
        "name": "statsVariance",
        "kind": "function",
        "signature": "statsVariance(arr)",
        "summary": ""
      },
      {
        "name": "statsPopulationVariance",
        "kind": "function",
        "signature": "statsPopulationVariance(arr)",
        "summary": ""
      },
      {
        "name": "statsMin",
        "kind": "function",
        "signature": "statsMin(arr)",
        "summary": ""
      },
      {
        "name": "statsMax",
        "kind": "function",
        "signature": "statsMax(arr)",
        "summary": ""
      },
      {
        "name": "statsMedian",
        "kind": "function",
        "signature": "statsMedian(arr)",
        "summary": ""
      },
      {
        "name": "statsPercentile",
        "kind": "function",
        "signature": "statsPercentile(arr, p)",
        "summary": ""
      },
      {
        "name": "statsIQR",
        "kind": "function",
        "signature": "statsIQR(arr)",
        "summary": ""
      },
      {
        "name": "emaCreate",
        "kind": "function",
        "signature": "emaCreate(alpha = 0.1)",
        "summary": ""
      },
      {
        "name": "emaPush",
        "kind": "function",
        "signature": "emaPush(ema, value)",
        "summary": ""
      },
      {
        "name": "emaReset",
        "kind": "function",
        "signature": "emaReset(ema)",
        "summary": ""
      },
      {
        "name": "windowedStatsCreate",
        "kind": "function",
        "signature": "windowedStatsCreate(windowSize = 60)",
        "summary": ""
      },
      {
        "name": "windowedStatsPush",
        "kind": "function",
        "signature": "windowedStatsPush(ws, value)",
        "summary": ""
      },
      {
        "name": "windowedStatsVariance",
        "kind": "function",
        "signature": "windowedStatsVariance(ws)",
        "summary": ""
      },
      {
        "name": "windowedStatsReset",
        "kind": "function",
        "signature": "windowedStatsReset(ws)",
        "summary": ""
      },
      {
        "name": "runningStatsMean",
        "kind": "function",
        "signature": "runningStatsMean(stats)",
        "summary": ""
      },
      {
        "name": "runningStatsCount",
        "kind": "function",
        "signature": "runningStatsCount(stats)",
        "summary": ""
      },
      {
        "name": "runningStatsMin",
        "kind": "function",
        "signature": "runningStatsMin(stats)",
        "summary": ""
      },
      {
        "name": "runningStatsMax",
        "kind": "function",
        "signature": "runningStatsMax(stats)",
        "summary": ""
      },
      {
        "name": "runningStatsRange",
        "kind": "function",
        "signature": "runningStatsRange(stats)",
        "summary": ""
      },
      {
        "name": "statsStdDev",
        "kind": "function",
        "signature": "statsStdDev(arr)",
        "summary": ""
      },
      {
        "name": "statsPopulationStdDev",
        "kind": "function",
        "signature": "statsPopulationStdDev(arr)",
        "summary": ""
      },
      {
        "name": "statsRange",
        "kind": "function",
        "signature": "statsRange(arr)",
        "summary": ""
      },
      {
        "name": "emaGet",
        "kind": "function",
        "signature": "emaGet(ema)",
        "summary": ""
      },
      {
        "name": "windowedStatsMean",
        "kind": "function",
        "signature": "windowedStatsMean(ws)",
        "summary": ""
      },
      {
        "name": "windowedStatsStdDev",
        "kind": "function",
        "signature": "windowedStatsStdDev(ws)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathValidation",
    "path": "engine/reference/core/math/MathValidation.md",
    "source": "engine/core/math/MathValidation.js",
    "import": "/engine/core/math/MathValidation.js",
    "sourceHash": "eee2e281591f93abbb1adeb566f03fcdf46e3fc194b770af070d9873fb380b88",
    "summary": "MathValidation.js - reusable finite, range, alignment, histogram, and probability reports.",
    "exports": [
      {
        "name": "finiteNumberReport",
        "kind": "function",
        "signature": "finiteNumberReport(value, options = {})",
        "summary": ""
      },
      {
        "name": "finiteArrayReport",
        "kind": "function",
        "signature": "finiteArrayReport(values, options = {})",
        "summary": ""
      },
      {
        "name": "rangeValidationReport",
        "kind": "function",
        "signature": "rangeValidationReport(value, min, max, options = {})",
        "summary": ""
      },
      {
        "name": "alignmentReport",
        "kind": "function",
        "signature": "alignmentReport(offset, alignment, options = {})",
        "summary": ""
      },
      {
        "name": "powerOfTwoReport",
        "kind": "function",
        "signature": "powerOfTwoReport(value)",
        "summary": ""
      },
      {
        "name": "histogramValidationReport",
        "kind": "function",
        "signature": "histogramValidationReport(histogram, options = {})",
        "summary": ""
      },
      {
        "name": "probabilityDistributionReport",
        "kind": "function",
        "signature": "probabilityDistributionReport(probabilities, options = {})",
        "summary": ""
      },
      {
        "name": "typedArrayLayoutReport",
        "kind": "function",
        "signature": "typedArrayLayoutReport(view, options = {})",
        "summary": ""
      },
      {
        "name": "vectorValidationReport",
        "kind": "function",
        "signature": "vectorValidationReport(values, options = {})",
        "summary": ""
      },
      {
        "name": "unitVectorReport",
        "kind": "function",
        "signature": "unitVectorReport(values, options = {})",
        "summary": ""
      },
      {
        "name": "colorValidationReport",
        "kind": "function",
        "signature": "colorValidationReport(color, options = {})",
        "summary": ""
      },
      {
        "name": "schemaValidationReport",
        "kind": "function",
        "signature": "schemaValidationReport(value, schema, options = {})",
        "summary": ""
      },
      {
        "name": "assertValidationReport",
        "kind": "function",
        "signature": "assertValidationReport(report, message = 'validation failed')",
        "summary": ""
      },
      {
        "name": "assertFiniteArray",
        "kind": "function",
        "signature": "assertFiniteArray(values, options = {})",
        "summary": ""
      },
      {
        "name": "assertUnitVector",
        "kind": "function",
        "signature": "assertUnitVector(values, options = {})",
        "summary": ""
      },
      {
        "name": "assertColor",
        "kind": "function",
        "signature": "assertColor(color, options = {})",
        "summary": ""
      },
      {
        "name": "assertSchema",
        "kind": "function",
        "signature": "assertSchema(value, schema, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathVec2",
    "path": "engine/reference/core/math/MathVec2.md",
    "source": "engine/core/math/MathVec2.js",
    "import": "/engine/core/math/MathVec2.js",
    "sourceHash": "7cec804f62adb4fce2436db6eb28d65384d1d95fb7f4c692e520fe8a89761e02",
    "summary": "",
    "exports": [
      {
        "name": "vec2SmoothDamp",
        "kind": "function",
        "signature": "vec2SmoothDamp(current, target, currentVelocity, smoothTime, dt, maxSpeed = Infinity)",
        "summary": ""
      },
      {
        "name": "vec2Refract",
        "kind": "function",
        "signature": "vec2Refract(incident, normal, eta)",
        "summary": ""
      },
      {
        "name": "vec2",
        "kind": "function",
        "signature": "vec2(x = 0, y = 0)",
        "summary": ""
      },
      {
        "name": "vec2FromAngle",
        "kind": "function",
        "signature": "vec2FromAngle(angle, len = 1)",
        "summary": ""
      },
      {
        "name": "vec2FromArray",
        "kind": "function",
        "signature": "vec2FromArray(arr, offset = 0)",
        "summary": ""
      },
      {
        "name": "vec2Zero",
        "kind": "function",
        "signature": "vec2Zero()",
        "summary": ""
      },
      {
        "name": "vec2One",
        "kind": "function",
        "signature": "vec2One()",
        "summary": ""
      },
      {
        "name": "vec2Up",
        "kind": "function",
        "signature": "vec2Up()",
        "summary": ""
      },
      {
        "name": "vec2Down",
        "kind": "function",
        "signature": "vec2Down()",
        "summary": ""
      },
      {
        "name": "vec2Left",
        "kind": "function",
        "signature": "vec2Left()",
        "summary": ""
      },
      {
        "name": "vec2Right",
        "kind": "function",
        "signature": "vec2Right()",
        "summary": ""
      },
      {
        "name": "vec2Clone",
        "kind": "function",
        "signature": "vec2Clone(v)",
        "summary": ""
      },
      {
        "name": "vec2Copy",
        "kind": "function",
        "signature": "vec2Copy(out, v)",
        "summary": ""
      },
      {
        "name": "vec2Set",
        "kind": "function",
        "signature": "vec2Set(out, x, y)",
        "summary": ""
      },
      {
        "name": "vec2Add",
        "kind": "function",
        "signature": "vec2Add(a, b)",
        "summary": ""
      },
      {
        "name": "vec2Sub",
        "kind": "function",
        "signature": "vec2Sub(a, b)",
        "summary": ""
      },
      {
        "name": "vec2Mul",
        "kind": "function",
        "signature": "vec2Mul(a, b)",
        "summary": ""
      },
      {
        "name": "vec2Div",
        "kind": "function",
        "signature": "vec2Div(a, b)",
        "summary": ""
      },
      {
        "name": "vec2Scale",
        "kind": "function",
        "signature": "vec2Scale(v, s)",
        "summary": ""
      },
      {
        "name": "vec2Negate",
        "kind": "function",
        "signature": "vec2Negate(v)",
        "summary": ""
      },
      {
        "name": "vec2Inverse",
        "kind": "function",
        "signature": "vec2Inverse(v)",
        "summary": ""
      },
      {
        "name": "vec2AddInto",
        "kind": "function",
        "signature": "vec2AddInto(out, a, b)",
        "summary": ""
      },
      {
        "name": "vec2SubInto",
        "kind": "function",
        "signature": "vec2SubInto(out, a, b)",
        "summary": ""
      },
      {
        "name": "vec2ScaleInto",
        "kind": "function",
        "signature": "vec2ScaleInto(out, v, s)",
        "summary": ""
      },
      {
        "name": "vec2ScaleAndAdd",
        "kind": "function",
        "signature": "vec2ScaleAndAdd(out, a, b, s)",
        "summary": ""
      },
      {
        "name": "vec2Dot",
        "kind": "function",
        "signature": "vec2Dot(a, b)",
        "summary": ""
      },
      {
        "name": "vec2Cross",
        "kind": "function",
        "signature": "vec2Cross(a, b)",
        "summary": ""
      },
      {
        "name": "vec2LengthSq",
        "kind": "function",
        "signature": "vec2LengthSq(v)",
        "summary": ""
      },
      {
        "name": "vec2Length",
        "kind": "function",
        "signature": "vec2Length(v)",
        "summary": ""
      },
      {
        "name": "vec2DistanceSq",
        "kind": "function",
        "signature": "vec2DistanceSq(a, b)",
        "summary": ""
      },
      {
        "name": "vec2Distance",
        "kind": "function",
        "signature": "vec2Distance(a, b)",
        "summary": ""
      },
      {
        "name": "vec2Manhattan",
        "kind": "function",
        "signature": "vec2Manhattan(a, b)",
        "summary": ""
      },
      {
        "name": "vec2Chebyshev",
        "kind": "function",
        "signature": "vec2Chebyshev(a, b)",
        "summary": ""
      },
      {
        "name": "vec2Normalize",
        "kind": "function",
        "signature": "vec2Normalize(v)",
        "summary": ""
      },
      {
        "name": "vec2NormalizeInto",
        "kind": "function",
        "signature": "vec2NormalizeInto(out, v)",
        "summary": ""
      },
      {
        "name": "vec2SetLength",
        "kind": "function",
        "signature": "vec2SetLength(v, len)",
        "summary": ""
      },
      {
        "name": "vec2ClampLength",
        "kind": "function",
        "signature": "vec2ClampLength(v, min, max)",
        "summary": ""
      },
      {
        "name": "vec2Limit",
        "kind": "function",
        "signature": "vec2Limit(v, maxLen)",
        "summary": ""
      },
      {
        "name": "vec2Lerp",
        "kind": "function",
        "signature": "vec2Lerp(a, b, t)",
        "summary": ""
      },
      {
        "name": "vec2SmoothStep",
        "kind": "function",
        "signature": "vec2SmoothStep(a, b, t)",
        "summary": ""
      },
      {
        "name": "vec2Bezier2",
        "kind": "function",
        "signature": "vec2Bezier2(p0, p1, p2, t)",
        "summary": ""
      },
      {
        "name": "vec2Bezier3",
        "kind": "function",
        "signature": "vec2Bezier3(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "vec2Min",
        "kind": "function",
        "signature": "vec2Min(a, b)",
        "summary": ""
      },
      {
        "name": "vec2Max",
        "kind": "function",
        "signature": "vec2Max(a, b)",
        "summary": ""
      },
      {
        "name": "vec2Clamp",
        "kind": "function",
        "signature": "vec2Clamp(v, min, max)",
        "summary": ""
      },
      {
        "name": "vec2ClampScalar",
        "kind": "function",
        "signature": "vec2ClampScalar(v, min, max)",
        "summary": ""
      },
      {
        "name": "vec2Floor",
        "kind": "function",
        "signature": "vec2Floor(v)",
        "summary": ""
      },
      {
        "name": "vec2Ceil",
        "kind": "function",
        "signature": "vec2Ceil(v)",
        "summary": ""
      },
      {
        "name": "vec2Round",
        "kind": "function",
        "signature": "vec2Round(v)",
        "summary": ""
      },
      {
        "name": "vec2Trunc",
        "kind": "function",
        "signature": "vec2Trunc(v)",
        "summary": ""
      },
      {
        "name": "vec2Fract",
        "kind": "function",
        "signature": "vec2Fract(v)",
        "summary": ""
      },
      {
        "name": "vec2Abs",
        "kind": "function",
        "signature": "vec2Abs(v)",
        "summary": ""
      },
      {
        "name": "vec2Sign",
        "kind": "function",
        "signature": "vec2Sign(v)",
        "summary": ""
      },
      {
        "name": "vec2Snap",
        "kind": "function",
        "signature": "vec2Snap(v, step)",
        "summary": ""
      },
      {
        "name": "vec2SnapV",
        "kind": "function",
        "signature": "vec2SnapV(v, step)",
        "summary": ""
      },
      {
        "name": "vec2Angle",
        "kind": "function",
        "signature": "vec2Angle(v)",
        "summary": ""
      },
      {
        "name": "vec2AngleBetween",
        "kind": "function",
        "signature": "vec2AngleBetween(a, b)",
        "summary": ""
      },
      {
        "name": "vec2AngleTo",
        "kind": "function",
        "signature": "vec2AngleTo(from, to)",
        "summary": ""
      },
      {
        "name": "vec2Rotate",
        "kind": "function",
        "signature": "vec2Rotate(v, angle)",
        "summary": ""
      },
      {
        "name": "vec2RotateAround",
        "kind": "function",
        "signature": "vec2RotateAround(v, center, angle)",
        "summary": ""
      },
      {
        "name": "vec2Perpendicular",
        "kind": "function",
        "signature": "vec2Perpendicular(v)",
        "summary": ""
      },
      {
        "name": "vec2PerpendicularCW",
        "kind": "function",
        "signature": "vec2PerpendicularCW(v)",
        "summary": ""
      },
      {
        "name": "vec2Reflect",
        "kind": "function",
        "signature": "vec2Reflect(v, n)",
        "summary": ""
      },
      {
        "name": "vec2Project",
        "kind": "function",
        "signature": "vec2Project(v, onto)",
        "summary": ""
      },
      {
        "name": "vec2Reject",
        "kind": "function",
        "signature": "vec2Reject(v, from)",
        "summary": ""
      },
      {
        "name": "vec2MoveToward",
        "kind": "function",
        "signature": "vec2MoveToward(cur, tgt, maxDelta)",
        "summary": ""
      },
      {
        "name": "vec2Equals",
        "kind": "function",
        "signature": "vec2Equals(a, b, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "vec2IsZero",
        "kind": "function",
        "signature": "vec2IsZero(v, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "vec2IsNormalized",
        "kind": "function",
        "signature": "vec2IsNormalized(v, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "vec2IsFinite",
        "kind": "function",
        "signature": "vec2IsFinite(v)",
        "summary": ""
      },
      {
        "name": "vec2Random",
        "kind": "function",
        "signature": "vec2Random(scale = 1)",
        "summary": ""
      },
      {
        "name": "vec2RandomInCircle",
        "kind": "function",
        "signature": "vec2RandomInCircle(r = 1)",
        "summary": ""
      },
      {
        "name": "vec2RandomInRect",
        "kind": "function",
        "signature": "vec2RandomInRect(w, h)",
        "summary": ""
      },
      {
        "name": "vec2RandomInRectCentered",
        "kind": "function",
        "signature": "vec2RandomInRectCentered(w, h)",
        "summary": ""
      },
      {
        "name": "vec2ComplexMul",
        "kind": "function",
        "signature": "vec2ComplexMul(a, b)",
        "summary": ""
      },
      {
        "name": "vec2ComplexDiv",
        "kind": "function",
        "signature": "vec2ComplexDiv(a, b)",
        "summary": ""
      },
      {
        "name": "vec2ComplexPow",
        "kind": "function",
        "signature": "vec2ComplexPow(v, n)",
        "summary": ""
      },
      {
        "name": "vec2ComplexSqrt",
        "kind": "function",
        "signature": "vec2ComplexSqrt(v)",
        "summary": ""
      },
      {
        "name": "vec2TransformMat2",
        "kind": "function",
        "signature": "vec2TransformMat2(v, m)",
        "summary": ""
      },
      {
        "name": "vec2TransformMat3",
        "kind": "function",
        "signature": "vec2TransformMat3(v, m)",
        "summary": ""
      },
      {
        "name": "vec2ToString",
        "kind": "function",
        "signature": "vec2ToString(v, precision = 3)",
        "summary": ""
      },
      {
        "name": "vec2ToArray",
        "kind": "function",
        "signature": "vec2ToArray(v, out = [], offset = 0)",
        "summary": ""
      },
      {
        "name": "vec2GetComponent",
        "kind": "function",
        "signature": "vec2GetComponent(v, index)",
        "summary": ""
      },
      {
        "name": "vec2SetComponent",
        "kind": "function",
        "signature": "vec2SetComponent(v, index, value)",
        "summary": ""
      },
      {
        "name": "vec2FromScalar",
        "kind": "function",
        "signature": "vec2FromScalar(s)",
        "summary": ""
      },
      {
        "name": "vec2Infinity",
        "kind": "function",
        "signature": "vec2Infinity()",
        "summary": ""
      },
      {
        "name": "vec2NegInfinity",
        "kind": "function",
        "signature": "vec2NegInfinity()",
        "summary": ""
      },
      {
        "name": "vec2AddScalar",
        "kind": "function",
        "signature": "vec2AddScalar(v, s)",
        "summary": ""
      },
      {
        "name": "vec2SubScalar",
        "kind": "function",
        "signature": "vec2SubScalar(v, s)",
        "summary": ""
      },
      {
        "name": "vec2MulInto",
        "kind": "function",
        "signature": "vec2MulInto(out, a, b)",
        "summary": ""
      },
      {
        "name": "vec2NegateInto",
        "kind": "function",
        "signature": "vec2NegateInto(out, v)",
        "summary": ""
      },
      {
        "name": "vec2ManhattanLength",
        "kind": "function",
        "signature": "vec2ManhattanLength(v)",
        "summary": ""
      },
      {
        "name": "vec2SafeNormalize",
        "kind": "function",
        "signature": "vec2SafeNormalize(v, fallback = [0, 1])",
        "summary": ""
      },
      {
        "name": "vec2LerpInto",
        "kind": "function",
        "signature": "vec2LerpInto(out, a, b, t)",
        "summary": ""
      },
      {
        "name": "vec2LerpUnclamped",
        "kind": "function",
        "signature": "vec2LerpUnclamped(a, b, t)",
        "summary": ""
      },
      {
        "name": "vec2LerpV",
        "kind": "function",
        "signature": "vec2LerpV(a, b, t)",
        "summary": ""
      },
      {
        "name": "vec2Hermite",
        "kind": "function",
        "signature": "vec2Hermite(p0, t0, p1, t1, t)",
        "summary": ""
      },
      {
        "name": "vec2CatmullRom",
        "kind": "function",
        "signature": "vec2CatmullRom(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "vec2BezierDerivative",
        "kind": "function",
        "signature": "vec2BezierDerivative(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "vec2DirectionTo",
        "kind": "function",
        "signature": "vec2DirectionTo(from, to)",
        "summary": ""
      },
      {
        "name": "vec2Midpoint",
        "kind": "function",
        "signature": "vec2Midpoint(a, b)",
        "summary": ""
      },
      {
        "name": "vec2Slide",
        "kind": "function",
        "signature": "vec2Slide(v, n)",
        "summary": ""
      },
      {
        "name": "vec2Bounce",
        "kind": "function",
        "signature": "vec2Bounce(v, n)",
        "summary": ""
      },
      {
        "name": "vec2FaceForward",
        "kind": "function",
        "signature": "vec2FaceForward(v, incident, reference)",
        "summary": ""
      },
      {
        "name": "vec2Saturate",
        "kind": "function",
        "signature": "vec2Saturate(v)",
        "summary": ""
      },
      {
        "name": "vec2InverseSqrt",
        "kind": "function",
        "signature": "vec2InverseSqrt(v)",
        "summary": ""
      },
      {
        "name": "vec2FMA",
        "kind": "function",
        "signature": "vec2FMA(a, b, c)",
        "summary": ""
      },
      {
        "name": "vec2Step",
        "kind": "function",
        "signature": "vec2Step(edge, v)",
        "summary": ""
      },
      {
        "name": "vec2StepScalar",
        "kind": "function",
        "signature": "vec2StepScalar(edge, v)",
        "summary": ""
      },
      {
        "name": "vec2SmoothStepV",
        "kind": "function",
        "signature": "vec2SmoothStepV(low, high, v)",
        "summary": ""
      },
      {
        "name": "vec2PosMod",
        "kind": "function",
        "signature": "vec2PosMod(v, m)",
        "summary": ""
      },
      {
        "name": "vec2PosModV",
        "kind": "function",
        "signature": "vec2PosModV(v, m)",
        "summary": ""
      },
      {
        "name": "vec2MinScalar",
        "kind": "function",
        "signature": "vec2MinScalar(v, s)",
        "summary": ""
      },
      {
        "name": "vec2MaxScalar",
        "kind": "function",
        "signature": "vec2MaxScalar(v, s)",
        "summary": ""
      },
      {
        "name": "vec2ExactEquals",
        "kind": "function",
        "signature": "vec2ExactEquals(a, b)",
        "summary": ""
      },
      {
        "name": "vec2IsNaN",
        "kind": "function",
        "signature": "vec2IsNaN(v)",
        "summary": ""
      },
      {
        "name": "vec2MinComponent",
        "kind": "function",
        "signature": "vec2MinComponent(v)",
        "summary": ""
      },
      {
        "name": "vec2MaxComponent",
        "kind": "function",
        "signature": "vec2MaxComponent(v)",
        "summary": ""
      },
      {
        "name": "vec2Sum",
        "kind": "function",
        "signature": "vec2Sum(v)",
        "summary": ""
      },
      {
        "name": "vec2Average",
        "kind": "function",
        "signature": "vec2Average(v)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathVec3",
    "path": "engine/reference/core/math/MathVec3.md",
    "source": "engine/core/math/MathVec3.js",
    "import": "/engine/core/math/MathVec3.js",
    "sourceHash": "4b2cfa496909f668ecd8975de3f513c01b2a2abddf1624f90a8f45e05111bde2",
    "summary": "MathVec3.js - 3D Vector operations Depends on: MathConstants.js, MathScalar.js, MathRandom.js",
    "exports": [
      {
        "name": "vec3Slerp",
        "kind": "function",
        "signature": "vec3Slerp(a, b, t)",
        "summary": ""
      },
      {
        "name": "vec3SignedAngle",
        "kind": "function",
        "signature": "vec3SignedAngle(from, to, axis)",
        "summary": ""
      },
      {
        "name": "vec3RotateX",
        "kind": "function",
        "signature": "vec3RotateX(v, origin, angle)",
        "summary": ""
      },
      {
        "name": "vec3RotateY",
        "kind": "function",
        "signature": "vec3RotateY(v, origin, angle)",
        "summary": ""
      },
      {
        "name": "vec3RotateZ",
        "kind": "function",
        "signature": "vec3RotateZ(v, origin, angle)",
        "summary": ""
      },
      {
        "name": "vec3RotateAxis",
        "kind": "function",
        "signature": "vec3RotateAxis(v, axis, angle)",
        "summary": ""
      },
      {
        "name": "vec3RandomDirection",
        "kind": "function",
        "signature": "vec3RandomDirection(scale = 1)",
        "summary": ""
      },
      {
        "name": "vec3RandomInSphere",
        "kind": "function",
        "signature": "vec3RandomInSphere(radius = 1)",
        "summary": ""
      },
      {
        "name": "vec3RandomOnSphere",
        "kind": "function",
        "signature": "vec3RandomOnSphere(radius = 1)",
        "summary": ""
      },
      {
        "name": "vec3RandomInHemisphere",
        "kind": "function",
        "signature": "vec3RandomInHemisphere(normal)",
        "summary": ""
      },
      {
        "name": "vec3FromSpherical",
        "kind": "function",
        "signature": "vec3FromSpherical(radius, phi, theta)",
        "summary": ""
      },
      {
        "name": "vec3ToSpherical",
        "kind": "function",
        "signature": "vec3ToSpherical(v)",
        "summary": ""
      },
      {
        "name": "vec3FromCylindrical",
        "kind": "function",
        "signature": "vec3FromCylindrical(radius, theta, y)",
        "summary": ""
      },
      {
        "name": "vec3ToCylindrical",
        "kind": "function",
        "signature": "vec3ToCylindrical(v)",
        "summary": ""
      },
      {
        "name": "vec3TransformMat4",
        "kind": "function",
        "signature": "vec3TransformMat4(v, m)",
        "summary": ""
      },
      {
        "name": "vec3TransformQuat",
        "kind": "function",
        "signature": "vec3TransformQuat(v, q)",
        "summary": ""
      },
      {
        "name": "vec3OrthonormalBasis",
        "kind": "function",
        "signature": "vec3OrthonormalBasis(n)",
        "summary": ""
      },
      {
        "name": "vec3Barycentric",
        "kind": "function",
        "signature": "vec3Barycentric(a, b, c, u, v)",
        "summary": ""
      },
      {
        "name": "vec3RotateTowards",
        "kind": "function",
        "signature": "vec3RotateTowards(current, target, maxRadiansDelta, maxMagnitudeDelta)",
        "summary": ""
      },
      {
        "name": "vec3SmoothDamp",
        "kind": "function",
        "signature": "vec3SmoothDamp(current, target, currentVelocity, smoothTime, dt, maxSpeed = Infinity)",
        "summary": ""
      },
      {
        "name": "vec3OrthoNormalize",
        "kind": "function",
        "signature": "vec3OrthoNormalize(normal, tangent)",
        "summary": ""
      },
      {
        "name": "vec3Refract",
        "kind": "function",
        "signature": "vec3Refract(incident, normal, eta)",
        "summary": ""
      },
      {
        "name": "vec3OctEncode",
        "kind": "function",
        "signature": "vec3OctEncode(n)",
        "summary": ""
      },
      {
        "name": "vec3OctDecode",
        "kind": "function",
        "signature": "vec3OctDecode(uv)",
        "summary": ""
      },
      {
        "name": "vec3Outer",
        "kind": "function",
        "signature": "vec3Outer(a, b)",
        "summary": ""
      },
      {
        "name": "vec3OrthonormalBasisDuff",
        "kind": "function",
        "signature": "vec3OrthonormalBasisDuff(n)",
        "summary": ""
      },
      {
        "name": "vec3",
        "kind": "function",
        "signature": "vec3(x = 0, y = 0, z = 0)",
        "summary": ""
      },
      {
        "name": "vec3FromArray",
        "kind": "function",
        "signature": "vec3FromArray(arr, offset = 0)",
        "summary": ""
      },
      {
        "name": "vec3FromVec2",
        "kind": "function",
        "signature": "vec3FromVec2(v, z = 0)",
        "summary": ""
      },
      {
        "name": "vec3FromScalar",
        "kind": "function",
        "signature": "vec3FromScalar(s)",
        "summary": ""
      },
      {
        "name": "vec3Zero",
        "kind": "function",
        "signature": "vec3Zero()",
        "summary": ""
      },
      {
        "name": "vec3One",
        "kind": "function",
        "signature": "vec3One()",
        "summary": ""
      },
      {
        "name": "vec3Up",
        "kind": "function",
        "signature": "vec3Up()",
        "summary": ""
      },
      {
        "name": "vec3Down",
        "kind": "function",
        "signature": "vec3Down()",
        "summary": ""
      },
      {
        "name": "vec3Left",
        "kind": "function",
        "signature": "vec3Left()",
        "summary": ""
      },
      {
        "name": "vec3Right",
        "kind": "function",
        "signature": "vec3Right()",
        "summary": ""
      },
      {
        "name": "vec3Forward",
        "kind": "function",
        "signature": "vec3Forward()",
        "summary": ""
      },
      {
        "name": "vec3Back",
        "kind": "function",
        "signature": "vec3Back()",
        "summary": ""
      },
      {
        "name": "vec3Clone",
        "kind": "function",
        "signature": "vec3Clone(v)",
        "summary": ""
      },
      {
        "name": "vec3Copy",
        "kind": "function",
        "signature": "vec3Copy(out, v)",
        "summary": ""
      },
      {
        "name": "vec3Set",
        "kind": "function",
        "signature": "vec3Set(out, x, y, z)",
        "summary": ""
      },
      {
        "name": "vec3Add",
        "kind": "function",
        "signature": "vec3Add(a, b)",
        "summary": ""
      },
      {
        "name": "vec3Sub",
        "kind": "function",
        "signature": "vec3Sub(a, b)",
        "summary": ""
      },
      {
        "name": "vec3Mul",
        "kind": "function",
        "signature": "vec3Mul(a, b)",
        "summary": ""
      },
      {
        "name": "vec3Div",
        "kind": "function",
        "signature": "vec3Div(a, b)",
        "summary": ""
      },
      {
        "name": "vec3Scale",
        "kind": "function",
        "signature": "vec3Scale(v, s)",
        "summary": ""
      },
      {
        "name": "vec3Negate",
        "kind": "function",
        "signature": "vec3Negate(v)",
        "summary": ""
      },
      {
        "name": "vec3Inverse",
        "kind": "function",
        "signature": "vec3Inverse(v)",
        "summary": ""
      },
      {
        "name": "vec3AddScalar",
        "kind": "function",
        "signature": "vec3AddScalar(v, s)",
        "summary": ""
      },
      {
        "name": "vec3SubScalar",
        "kind": "function",
        "signature": "vec3SubScalar(v, s)",
        "summary": ""
      },
      {
        "name": "vec3AddInto",
        "kind": "function",
        "signature": "vec3AddInto(out, a, b)",
        "summary": ""
      },
      {
        "name": "vec3SubInto",
        "kind": "function",
        "signature": "vec3SubInto(out, a, b)",
        "summary": ""
      },
      {
        "name": "vec3MulInto",
        "kind": "function",
        "signature": "vec3MulInto(out, a, b)",
        "summary": ""
      },
      {
        "name": "vec3ScaleInto",
        "kind": "function",
        "signature": "vec3ScaleInto(out, v, s)",
        "summary": ""
      },
      {
        "name": "vec3ScaleAndAdd",
        "kind": "function",
        "signature": "vec3ScaleAndAdd(out, a, b, s)",
        "summary": ""
      },
      {
        "name": "vec3NegateInto",
        "kind": "function",
        "signature": "vec3NegateInto(out, v)",
        "summary": ""
      },
      {
        "name": "vec3CrossInto",
        "kind": "function",
        "signature": "vec3CrossInto(out, a, b)",
        "summary": ""
      },
      {
        "name": "vec3Dot",
        "kind": "function",
        "signature": "vec3Dot(a, b)",
        "summary": ""
      },
      {
        "name": "vec3Cross",
        "kind": "function",
        "signature": "vec3Cross(a, b)",
        "summary": ""
      },
      {
        "name": "vec3Triple",
        "kind": "function",
        "signature": "vec3Triple(a, b, c)",
        "summary": ""
      },
      {
        "name": "vec3LengthSq",
        "kind": "function",
        "signature": "vec3LengthSq(v)",
        "summary": ""
      },
      {
        "name": "vec3Length",
        "kind": "function",
        "signature": "vec3Length(v)",
        "summary": ""
      },
      {
        "name": "vec3DistanceSq",
        "kind": "function",
        "signature": "vec3DistanceSq(a, b)",
        "summary": ""
      },
      {
        "name": "vec3Distance",
        "kind": "function",
        "signature": "vec3Distance(a, b)",
        "summary": ""
      },
      {
        "name": "vec3Manhattan",
        "kind": "function",
        "signature": "vec3Manhattan(a, b)",
        "summary": ""
      },
      {
        "name": "vec3Chebyshev",
        "kind": "function",
        "signature": "vec3Chebyshev(a, b)",
        "summary": ""
      },
      {
        "name": "vec3ManhattanLength",
        "kind": "function",
        "signature": "vec3ManhattanLength(v)",
        "summary": ""
      },
      {
        "name": "vec3Normalize",
        "kind": "function",
        "signature": "vec3Normalize(v)",
        "summary": ""
      },
      {
        "name": "vec3NormalizeInto",
        "kind": "function",
        "signature": "vec3NormalizeInto(out, v)",
        "summary": ""
      },
      {
        "name": "vec3SetLength",
        "kind": "function",
        "signature": "vec3SetLength(v, len)",
        "summary": ""
      },
      {
        "name": "vec3ClampLength",
        "kind": "function",
        "signature": "vec3ClampLength(v, min, max)",
        "summary": ""
      },
      {
        "name": "vec3Limit",
        "kind": "function",
        "signature": "vec3Limit(v, maxLen)",
        "summary": ""
      },
      {
        "name": "vec3SafeNormalize",
        "kind": "function",
        "signature": "vec3SafeNormalize(v, fallback = [0, 1, 0])",
        "summary": ""
      },
      {
        "name": "vec3Lerp",
        "kind": "function",
        "signature": "vec3Lerp(a, b, t)",
        "summary": ""
      },
      {
        "name": "vec3LerpInto",
        "kind": "function",
        "signature": "vec3LerpInto(out, a, b, t)",
        "summary": ""
      },
      {
        "name": "vec3SmoothStep",
        "kind": "function",
        "signature": "vec3SmoothStep(a, b, t)",
        "summary": ""
      },
      {
        "name": "vec3Hermite",
        "kind": "function",
        "signature": "vec3Hermite(p0, t0, p1, t1, t)",
        "summary": ""
      },
      {
        "name": "vec3Bezier2",
        "kind": "function",
        "signature": "vec3Bezier2(p0, p1, p2, t)",
        "summary": ""
      },
      {
        "name": "vec3Bezier3",
        "kind": "function",
        "signature": "vec3Bezier3(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "vec3CatmullRom",
        "kind": "function",
        "signature": "vec3CatmullRom(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "vec3Min",
        "kind": "function",
        "signature": "vec3Min(a, b)",
        "summary": ""
      },
      {
        "name": "vec3Max",
        "kind": "function",
        "signature": "vec3Max(a, b)",
        "summary": ""
      },
      {
        "name": "vec3Clamp",
        "kind": "function",
        "signature": "vec3Clamp(v, min, max)",
        "summary": ""
      },
      {
        "name": "vec3ClampScalar",
        "kind": "function",
        "signature": "vec3ClampScalar(v, min, max)",
        "summary": ""
      },
      {
        "name": "vec3Floor",
        "kind": "function",
        "signature": "vec3Floor(v)",
        "summary": ""
      },
      {
        "name": "vec3Ceil",
        "kind": "function",
        "signature": "vec3Ceil(v)",
        "summary": ""
      },
      {
        "name": "vec3Round",
        "kind": "function",
        "signature": "vec3Round(v)",
        "summary": ""
      },
      {
        "name": "vec3Trunc",
        "kind": "function",
        "signature": "vec3Trunc(v)",
        "summary": ""
      },
      {
        "name": "vec3Fract",
        "kind": "function",
        "signature": "vec3Fract(v)",
        "summary": ""
      },
      {
        "name": "vec3Abs",
        "kind": "function",
        "signature": "vec3Abs(v)",
        "summary": ""
      },
      {
        "name": "vec3Sign",
        "kind": "function",
        "signature": "vec3Sign(v)",
        "summary": ""
      },
      {
        "name": "vec3Snap",
        "kind": "function",
        "signature": "vec3Snap(v, step)",
        "summary": ""
      },
      {
        "name": "vec3AngleBetween",
        "kind": "function",
        "signature": "vec3AngleBetween(a, b)",
        "summary": ""
      },
      {
        "name": "vec3Reflect",
        "kind": "function",
        "signature": "vec3Reflect(v, n)",
        "summary": ""
      },
      {
        "name": "vec3Project",
        "kind": "function",
        "signature": "vec3Project(v, onto)",
        "summary": ""
      },
      {
        "name": "vec3Reject",
        "kind": "function",
        "signature": "vec3Reject(v, from)",
        "summary": ""
      },
      {
        "name": "vec3ProjectOnPlane",
        "kind": "function",
        "signature": "vec3ProjectOnPlane(v, planeNormal)",
        "summary": ""
      },
      {
        "name": "vec3Slide",
        "kind": "function",
        "signature": "vec3Slide(v, normal)",
        "summary": ""
      },
      {
        "name": "vec3MoveToward",
        "kind": "function",
        "signature": "vec3MoveToward(cur, tgt, maxDelta)",
        "summary": ""
      },
      {
        "name": "vec3Equals",
        "kind": "function",
        "signature": "vec3Equals(a, b, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "vec3ExactEquals",
        "kind": "function",
        "signature": "vec3ExactEquals(a, b)",
        "summary": ""
      },
      {
        "name": "vec3IsZero",
        "kind": "function",
        "signature": "vec3IsZero(v, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "vec3IsNormalized",
        "kind": "function",
        "signature": "vec3IsNormalized(v, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "vec3IsFinite",
        "kind": "function",
        "signature": "vec3IsFinite(v)",
        "summary": ""
      },
      {
        "name": "vec3IsNaN",
        "kind": "function",
        "signature": "vec3IsNaN(v)",
        "summary": ""
      },
      {
        "name": "vec3Random",
        "kind": "function",
        "signature": "vec3Random()",
        "summary": ""
      },
      {
        "name": "vec3RandomInBox",
        "kind": "function",
        "signature": "vec3RandomInBox(w, h, d)",
        "summary": ""
      },
      {
        "name": "vec3RandomInBoxCentered",
        "kind": "function",
        "signature": "vec3RandomInBoxCentered(w, h, d)",
        "summary": ""
      },
      {
        "name": "vec3TransformMat3",
        "kind": "function",
        "signature": "vec3TransformMat3(v, m)",
        "summary": ""
      },
      {
        "name": "vec3TransformDirection",
        "kind": "function",
        "signature": "vec3TransformDirection(v, m)",
        "summary": ""
      },
      {
        "name": "vec3TransformNormal",
        "kind": "function",
        "signature": "vec3TransformNormal(v, normalMat)",
        "summary": ""
      },
      {
        "name": "vec3MinComponent",
        "kind": "function",
        "signature": "vec3MinComponent(v)",
        "summary": ""
      },
      {
        "name": "vec3MaxComponent",
        "kind": "function",
        "signature": "vec3MaxComponent(v)",
        "summary": ""
      },
      {
        "name": "vec3Sum",
        "kind": "function",
        "signature": "vec3Sum(v)",
        "summary": ""
      },
      {
        "name": "vec3Average",
        "kind": "function",
        "signature": "vec3Average(v)",
        "summary": ""
      },
      {
        "name": "vec3DominantAxis",
        "kind": "function",
        "signature": "vec3DominantAxis(v)",
        "summary": ""
      },
      {
        "name": "vec3ToString",
        "kind": "function",
        "signature": "vec3ToString(v, precision = 3)",
        "summary": ""
      },
      {
        "name": "vec3ToArray",
        "kind": "function",
        "signature": "vec3ToArray(v, out = [], offset = 0)",
        "summary": ""
      },
      {
        "name": "vec3GetComponent",
        "kind": "function",
        "signature": "vec3GetComponent(v, index)",
        "summary": ""
      },
      {
        "name": "vec3SetComponent",
        "kind": "function",
        "signature": "vec3SetComponent(v, index, value)",
        "summary": ""
      },
      {
        "name": "vec3ToVec4Point",
        "kind": "function",
        "signature": "vec3ToVec4Point(v)",
        "summary": ""
      },
      {
        "name": "vec3ToVec4Direction",
        "kind": "function",
        "signature": "vec3ToVec4Direction(v)",
        "summary": ""
      },
      {
        "name": "vec3DirectionTo",
        "kind": "function",
        "signature": "vec3DirectionTo(from, to)",
        "summary": ""
      },
      {
        "name": "vec3Midpoint",
        "kind": "function",
        "signature": "vec3Midpoint(a, b)",
        "summary": ""
      },
      {
        "name": "vec3Bounce",
        "kind": "function",
        "signature": "vec3Bounce(v, n)",
        "summary": ""
      },
      {
        "name": "vec3LerpUnclamped",
        "kind": "function",
        "signature": "vec3LerpUnclamped(a, b, t)",
        "summary": ""
      },
      {
        "name": "vec3LerpV",
        "kind": "function",
        "signature": "vec3LerpV(a, b, t)",
        "summary": ""
      },
      {
        "name": "vec3FaceForward",
        "kind": "function",
        "signature": "vec3FaceForward(v, incident, reference)",
        "summary": ""
      },
      {
        "name": "vec3Saturate",
        "kind": "function",
        "signature": "vec3Saturate(v)",
        "summary": ""
      },
      {
        "name": "vec3InverseSqrt",
        "kind": "function",
        "signature": "vec3InverseSqrt(v)",
        "summary": ""
      },
      {
        "name": "vec3FMA",
        "kind": "function",
        "signature": "vec3FMA(a, b, c)",
        "summary": ""
      },
      {
        "name": "vec3Step",
        "kind": "function",
        "signature": "vec3Step(edge, v)",
        "summary": ""
      },
      {
        "name": "vec3StepScalar",
        "kind": "function",
        "signature": "vec3StepScalar(edge, v)",
        "summary": ""
      },
      {
        "name": "vec3SmoothStepV",
        "kind": "function",
        "signature": "vec3SmoothStepV(low, high, v)",
        "summary": ""
      },
      {
        "name": "vec3PosMod",
        "kind": "function",
        "signature": "vec3PosMod(v, m)",
        "summary": ""
      },
      {
        "name": "vec3PosModV",
        "kind": "function",
        "signature": "vec3PosModV(v, m)",
        "summary": ""
      },
      {
        "name": "vec3MinScalar",
        "kind": "function",
        "signature": "vec3MinScalar(v, s)",
        "summary": ""
      },
      {
        "name": "vec3MaxScalar",
        "kind": "function",
        "signature": "vec3MaxScalar(v, s)",
        "summary": ""
      },
      {
        "name": "vec3SnapV",
        "kind": "function",
        "signature": "vec3SnapV(v, step)",
        "summary": ""
      },
      {
        "name": "vec3BezierDerivative",
        "kind": "function",
        "signature": "vec3BezierDerivative(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "vec3Infinity",
        "kind": "function",
        "signature": "vec3Infinity()",
        "summary": ""
      },
      {
        "name": "vec3NegInfinity",
        "kind": "function",
        "signature": "vec3NegInfinity()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MathVec4",
    "path": "engine/reference/core/math/MathVec4.md",
    "source": "engine/core/math/MathVec4.js",
    "import": "/engine/core/math/MathVec4.js",
    "sourceHash": "08ceec9cae2105c44c3f177a95b24f29064bc6e8cf79b77f0f29087c91755297",
    "summary": "",
    "exports": [
      {
        "name": "vec4",
        "kind": "function",
        "signature": "vec4(x = 0, y = 0, z = 0, w = 1)",
        "summary": ""
      },
      {
        "name": "vec4FromVec3",
        "kind": "function",
        "signature": "vec4FromVec3(v, w = 1)",
        "summary": ""
      },
      {
        "name": "vec4FromVec2",
        "kind": "function",
        "signature": "vec4FromVec2(v, z = 0, w = 1)",
        "summary": ""
      },
      {
        "name": "vec4FromArray",
        "kind": "function",
        "signature": "vec4FromArray(arr, offset = 0)",
        "summary": ""
      },
      {
        "name": "vec4Zero",
        "kind": "function",
        "signature": "vec4Zero()",
        "summary": ""
      },
      {
        "name": "vec4One",
        "kind": "function",
        "signature": "vec4One()",
        "summary": ""
      },
      {
        "name": "vec4Clone",
        "kind": "function",
        "signature": "vec4Clone(v)",
        "summary": ""
      },
      {
        "name": "vec4Copy",
        "kind": "function",
        "signature": "vec4Copy(out, v)",
        "summary": ""
      },
      {
        "name": "vec4Set",
        "kind": "function",
        "signature": "vec4Set(out, x, y, z, w)",
        "summary": ""
      },
      {
        "name": "vec4ToVec3",
        "kind": "function",
        "signature": "vec4ToVec3(v)",
        "summary": ""
      },
      {
        "name": "vec4ToVec2",
        "kind": "function",
        "signature": "vec4ToVec2(v)",
        "summary": ""
      },
      {
        "name": "vec4XYZ",
        "kind": "function",
        "signature": "vec4XYZ(v)",
        "summary": ""
      },
      {
        "name": "vec4XY",
        "kind": "function",
        "signature": "vec4XY(v)",
        "summary": ""
      },
      {
        "name": "vec4Add",
        "kind": "function",
        "signature": "vec4Add(a, b)",
        "summary": ""
      },
      {
        "name": "vec4Sub",
        "kind": "function",
        "signature": "vec4Sub(a, b)",
        "summary": ""
      },
      {
        "name": "vec4Mul",
        "kind": "function",
        "signature": "vec4Mul(a, b)",
        "summary": ""
      },
      {
        "name": "vec4Div",
        "kind": "function",
        "signature": "vec4Div(a, b)",
        "summary": ""
      },
      {
        "name": "vec4Scale",
        "kind": "function",
        "signature": "vec4Scale(v, s)",
        "summary": ""
      },
      {
        "name": "vec4Negate",
        "kind": "function",
        "signature": "vec4Negate(v)",
        "summary": ""
      },
      {
        "name": "vec4Inverse",
        "kind": "function",
        "signature": "vec4Inverse(v)",
        "summary": ""
      },
      {
        "name": "vec4AddInto",
        "kind": "function",
        "signature": "vec4AddInto(out, a, b)",
        "summary": ""
      },
      {
        "name": "vec4SubInto",
        "kind": "function",
        "signature": "vec4SubInto(out, a, b)",
        "summary": ""
      },
      {
        "name": "vec4ScaleInto",
        "kind": "function",
        "signature": "vec4ScaleInto(out, v, s)",
        "summary": ""
      },
      {
        "name": "vec4ScaleAndAdd",
        "kind": "function",
        "signature": "vec4ScaleAndAdd(out, a, b, s)",
        "summary": ""
      },
      {
        "name": "vec4Dot",
        "kind": "function",
        "signature": "vec4Dot(a, b)",
        "summary": ""
      },
      {
        "name": "vec4LengthSq",
        "kind": "function",
        "signature": "vec4LengthSq(v)",
        "summary": ""
      },
      {
        "name": "vec4Length",
        "kind": "function",
        "signature": "vec4Length(v)",
        "summary": ""
      },
      {
        "name": "vec4DistanceSq",
        "kind": "function",
        "signature": "vec4DistanceSq(a, b)",
        "summary": ""
      },
      {
        "name": "vec4Distance",
        "kind": "function",
        "signature": "vec4Distance(a, b)",
        "summary": ""
      },
      {
        "name": "vec4Normalize",
        "kind": "function",
        "signature": "vec4Normalize(v)",
        "summary": ""
      },
      {
        "name": "vec4NormalizeInto",
        "kind": "function",
        "signature": "vec4NormalizeInto(out, v)",
        "summary": ""
      },
      {
        "name": "vec4Lerp",
        "kind": "function",
        "signature": "vec4Lerp(a, b, t)",
        "summary": ""
      },
      {
        "name": "vec4Min",
        "kind": "function",
        "signature": "vec4Min(a, b)",
        "summary": ""
      },
      {
        "name": "vec4Max",
        "kind": "function",
        "signature": "vec4Max(a, b)",
        "summary": ""
      },
      {
        "name": "vec4Clamp",
        "kind": "function",
        "signature": "vec4Clamp(v, min, max)",
        "summary": ""
      },
      {
        "name": "vec4ClampScalar",
        "kind": "function",
        "signature": "vec4ClampScalar(v, min, max)",
        "summary": ""
      },
      {
        "name": "vec4Floor",
        "kind": "function",
        "signature": "vec4Floor(v)",
        "summary": ""
      },
      {
        "name": "vec4Ceil",
        "kind": "function",
        "signature": "vec4Ceil(v)",
        "summary": ""
      },
      {
        "name": "vec4Round",
        "kind": "function",
        "signature": "vec4Round(v)",
        "summary": ""
      },
      {
        "name": "vec4Abs",
        "kind": "function",
        "signature": "vec4Abs(v)",
        "summary": ""
      },
      {
        "name": "vec4PerspectiveDivide",
        "kind": "function",
        "signature": "vec4PerspectiveDivide(v)",
        "summary": ""
      },
      {
        "name": "vec4TransformMat4",
        "kind": "function",
        "signature": "vec4TransformMat4(v, m)",
        "summary": ""
      },
      {
        "name": "vec4TransformMat4Into",
        "kind": "function",
        "signature": "vec4TransformMat4Into(out, v, m)",
        "summary": ""
      },
      {
        "name": "vec4Equals",
        "kind": "function",
        "signature": "vec4Equals(a, b, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "vec4IsZero",
        "kind": "function",
        "signature": "vec4IsZero(v, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "vec4IsFinite",
        "kind": "function",
        "signature": "vec4IsFinite(v)",
        "summary": ""
      },
      {
        "name": "vec4FromRGBA",
        "kind": "function",
        "signature": "vec4FromRGBA(r, g, b, a = 1)",
        "summary": ""
      },
      {
        "name": "vec4ToRGBA",
        "kind": "function",
        "signature": "vec4ToRGBA(v)",
        "summary": ""
      },
      {
        "name": "vec4FromHex",
        "kind": "function",
        "signature": "vec4FromHex(hex)",
        "summary": ""
      },
      {
        "name": "vec4ToHex",
        "kind": "function",
        "signature": "vec4ToHex(v)",
        "summary": ""
      },
      {
        "name": "vec4Premultiply",
        "kind": "function",
        "signature": "vec4Premultiply(v)",
        "summary": ""
      },
      {
        "name": "vec4Unpremultiply",
        "kind": "function",
        "signature": "vec4Unpremultiply(v)",
        "summary": ""
      },
      {
        "name": "vec4Random",
        "kind": "function",
        "signature": "vec4Random()",
        "summary": ""
      },
      {
        "name": "vec4RandomUnit",
        "kind": "function",
        "signature": "vec4RandomUnit()",
        "summary": ""
      },
      {
        "name": "vec4ToString",
        "kind": "function",
        "signature": "vec4ToString(v, precision = 3)",
        "summary": ""
      },
      {
        "name": "vec4ToArray",
        "kind": "function",
        "signature": "vec4ToArray(v, out = [], offset = 0)",
        "summary": ""
      },
      {
        "name": "vec4GetComponent",
        "kind": "function",
        "signature": "vec4GetComponent(v, index)",
        "summary": ""
      },
      {
        "name": "vec4SetComponent",
        "kind": "function",
        "signature": "vec4SetComponent(v, index, value)",
        "summary": ""
      },
      {
        "name": "vec4FromScalar",
        "kind": "function",
        "signature": "vec4FromScalar(s)",
        "summary": ""
      },
      {
        "name": "vec4Infinity",
        "kind": "function",
        "signature": "vec4Infinity()",
        "summary": ""
      },
      {
        "name": "vec4NegInfinity",
        "kind": "function",
        "signature": "vec4NegInfinity()",
        "summary": ""
      },
      {
        "name": "vec4AddScalar",
        "kind": "function",
        "signature": "vec4AddScalar(v, s)",
        "summary": ""
      },
      {
        "name": "vec4SubScalar",
        "kind": "function",
        "signature": "vec4SubScalar(v, s)",
        "summary": ""
      },
      {
        "name": "vec4MulInto",
        "kind": "function",
        "signature": "vec4MulInto(out, a, b)",
        "summary": ""
      },
      {
        "name": "vec4NegateInto",
        "kind": "function",
        "signature": "vec4NegateInto(out, v)",
        "summary": ""
      },
      {
        "name": "vec4Manhattan",
        "kind": "function",
        "signature": "vec4Manhattan(a, b)",
        "summary": ""
      },
      {
        "name": "vec4Chebyshev",
        "kind": "function",
        "signature": "vec4Chebyshev(a, b)",
        "summary": ""
      },
      {
        "name": "vec4ManhattanLength",
        "kind": "function",
        "signature": "vec4ManhattanLength(v)",
        "summary": ""
      },
      {
        "name": "vec4SetLength",
        "kind": "function",
        "signature": "vec4SetLength(v, len)",
        "summary": ""
      },
      {
        "name": "vec4ClampLength",
        "kind": "function",
        "signature": "vec4ClampLength(v, min, max)",
        "summary": ""
      },
      {
        "name": "vec4Limit",
        "kind": "function",
        "signature": "vec4Limit(v, maxLen)",
        "summary": ""
      },
      {
        "name": "vec4SafeNormalize",
        "kind": "function",
        "signature": "vec4SafeNormalize(v, fallback = [0,0,0,1])",
        "summary": ""
      },
      {
        "name": "vec4LerpInto",
        "kind": "function",
        "signature": "vec4LerpInto(out, a, b, t)",
        "summary": ""
      },
      {
        "name": "vec4LerpUnclamped",
        "kind": "function",
        "signature": "vec4LerpUnclamped(a, b, t)",
        "summary": ""
      },
      {
        "name": "vec4LerpV",
        "kind": "function",
        "signature": "vec4LerpV(a, b, t)",
        "summary": ""
      },
      {
        "name": "vec4SmoothStep",
        "kind": "function",
        "signature": "vec4SmoothStep(a, b, t)",
        "summary": ""
      },
      {
        "name": "vec4Midpoint",
        "kind": "function",
        "signature": "vec4Midpoint(a, b)",
        "summary": ""
      },
      {
        "name": "vec4Trunc",
        "kind": "function",
        "signature": "vec4Trunc(v)",
        "summary": ""
      },
      {
        "name": "vec4Fract",
        "kind": "function",
        "signature": "vec4Fract(v)",
        "summary": ""
      },
      {
        "name": "vec4Sign",
        "kind": "function",
        "signature": "vec4Sign(v)",
        "summary": ""
      },
      {
        "name": "vec4Snap",
        "kind": "function",
        "signature": "vec4Snap(v, step)",
        "summary": ""
      },
      {
        "name": "vec4SnapV",
        "kind": "function",
        "signature": "vec4SnapV(v, step)",
        "summary": ""
      },
      {
        "name": "vec4Saturate",
        "kind": "function",
        "signature": "vec4Saturate(v)",
        "summary": ""
      },
      {
        "name": "vec4InverseSqrt",
        "kind": "function",
        "signature": "vec4InverseSqrt(v)",
        "summary": ""
      },
      {
        "name": "vec4FMA",
        "kind": "function",
        "signature": "vec4FMA(a, b, c)",
        "summary": ""
      },
      {
        "name": "vec4Step",
        "kind": "function",
        "signature": "vec4Step(edge, v)",
        "summary": ""
      },
      {
        "name": "vec4StepScalar",
        "kind": "function",
        "signature": "vec4StepScalar(edge, v)",
        "summary": ""
      },
      {
        "name": "vec4SmoothStepV",
        "kind": "function",
        "signature": "vec4SmoothStepV(low, high, v)",
        "summary": ""
      },
      {
        "name": "vec4PosMod",
        "kind": "function",
        "signature": "vec4PosMod(v, m)",
        "summary": ""
      },
      {
        "name": "vec4PosModV",
        "kind": "function",
        "signature": "vec4PosModV(v, m)",
        "summary": ""
      },
      {
        "name": "vec4MinScalar",
        "kind": "function",
        "signature": "vec4MinScalar(v, s)",
        "summary": ""
      },
      {
        "name": "vec4MaxScalar",
        "kind": "function",
        "signature": "vec4MaxScalar(v, s)",
        "summary": ""
      },
      {
        "name": "vec4DirectionTo",
        "kind": "function",
        "signature": "vec4DirectionTo(from, to)",
        "summary": ""
      },
      {
        "name": "vec4ExactEquals",
        "kind": "function",
        "signature": "vec4ExactEquals(a, b)",
        "summary": ""
      },
      {
        "name": "vec4IsNormalized",
        "kind": "function",
        "signature": "vec4IsNormalized(v, eps = EPSILON)",
        "summary": ""
      },
      {
        "name": "vec4IsNaN",
        "kind": "function",
        "signature": "vec4IsNaN(v)",
        "summary": ""
      },
      {
        "name": "vec4MinComponent",
        "kind": "function",
        "signature": "vec4MinComponent(v)",
        "summary": ""
      },
      {
        "name": "vec4MaxComponent",
        "kind": "function",
        "signature": "vec4MaxComponent(v)",
        "summary": ""
      },
      {
        "name": "vec4Sum",
        "kind": "function",
        "signature": "vec4Sum(v)",
        "summary": ""
      },
      {
        "name": "vec4Average",
        "kind": "function",
        "signature": "vec4Average(v)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MediaTimingMath",
    "path": "engine/reference/core/math/MediaTimingMath.md",
    "source": "engine/core/math/MediaTimingMath.js",
    "import": "/engine/core/math/MediaTimingMath.js",
    "sourceHash": "95b4a7b32ac0da1f109f10d01e09edc78495d1188f36fc2d9fa08b4f7475510f",
    "summary": "MediaTimingMath.js - pure WebCodecs-shaped timestamp, cadence, sync, and metadata reports.",
    "exports": [
      {
        "name": "mediaTimestampUs",
        "kind": "function",
        "signature": "mediaTimestampUs(value, options = {})",
        "summary": ""
      },
      {
        "name": "mediaDurationUs",
        "kind": "function",
        "signature": "mediaDurationUs(value, options = {})",
        "summary": ""
      },
      {
        "name": "mediaTimestampReport",
        "kind": "function",
        "signature": "mediaTimestampReport(sample = {}, options = {})",
        "summary": ""
      },
      {
        "name": "mediaFrameIndexAtTimestamp",
        "kind": "function",
        "signature": "mediaFrameIndexAtTimestamp(timestamp, options = {})",
        "summary": ""
      },
      {
        "name": "mediaTimestampForFrameIndex",
        "kind": "function",
        "signature": "mediaTimestampForFrameIndex(frameIndex, options = {})",
        "summary": ""
      },
      {
        "name": "mediaTimelineReport",
        "kind": "function",
        "signature": "mediaTimelineReport(samples = [], options = {})",
        "summary": ""
      },
      {
        "name": "mediaDroppedFrameReport",
        "kind": "function",
        "signature": "mediaDroppedFrameReport(samples = [], options = {})",
        "summary": ""
      },
      {
        "name": "mediaDriftReport",
        "kind": "function",
        "signature": "mediaDriftReport(reference, candidate, options = {})",
        "summary": ""
      },
      {
        "name": "mediaAvSyncReport",
        "kind": "function",
        "signature": "mediaAvSyncReport(audioSamples = [], videoSamples = [], options = {})",
        "summary": ""
      },
      {
        "name": "mediaAudioDataTimingReport",
        "kind": "function",
        "signature": "mediaAudioDataTimingReport(audioData = {}, options = {})",
        "summary": ""
      },
      {
        "name": "mediaColorSpaceReport",
        "kind": "function",
        "signature": "mediaColorSpaceReport(videoFrameOrColorSpace = {}, options = {})",
        "summary": ""
      },
      {
        "name": "mediaQueuePressureReport",
        "kind": "function",
        "signature": "mediaQueuePressureReport(queue = {}, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MemoryLayoutMath",
    "path": "engine/reference/core/math/MemoryLayoutMath.md",
    "source": "engine/core/math/MemoryLayoutMath.js",
    "import": "/engine/core/math/MemoryLayoutMath.js",
    "sourceHash": "d0abb9972625b461ddee8ca01e8bbe103b91797f42c6a53a2b265ef6f4db501a",
    "summary": "MemoryLayoutMath.js - byte alignment, struct, interleaved, planar, WGSL, and std140 layout reports.",
    "exports": [
      {
        "name": "memoryLayoutAlignmentForKind",
        "kind": "function",
        "signature": "memoryLayoutAlignmentForKind(kind, fallback = 1)",
        "summary": ""
      },
      {
        "name": "alignMemoryOffset",
        "kind": "function",
        "signature": "alignMemoryOffset(offset, alignment)",
        "summary": ""
      },
      {
        "name": "memoryPaddingForAlignment",
        "kind": "function",
        "signature": "memoryPaddingForAlignment(offset, alignment)",
        "summary": ""
      },
      {
        "name": "isMemoryAligned",
        "kind": "function",
        "signature": "isMemoryAligned(offset, alignment)",
        "summary": ""
      },
      {
        "name": "alignedMemoryByteSize",
        "kind": "function",
        "signature": "alignedMemoryByteSize(byteSize, alignment)",
        "summary": ""
      },
      {
        "name": "memoryFieldLayout",
        "kind": "function",
        "signature": "memoryFieldLayout(fields, options = {})",
        "summary": ""
      },
      {
        "name": "interleavedVertexLayoutReport",
        "kind": "function",
        "signature": "interleavedVertexLayoutReport(attributes, options = {})",
        "summary": ""
      },
      {
        "name": "planarBufferLayoutReport",
        "kind": "function",
        "signature": "planarBufferLayoutReport(attributes, elementCount, options = {})",
        "summary": ""
      },
      {
        "name": "aosElementByteOffset",
        "kind": "function",
        "signature": "aosElementByteOffset(index, stride, fieldOffset = 0, baseOffset = 0)",
        "summary": ""
      },
      {
        "name": "soaElementByteOffset",
        "kind": "function",
        "signature": "soaElementByteOffset(index, elementByteSize, baseOffset = 0)",
        "summary": ""
      },
      {
        "name": "wgslStructLayoutReport",
        "kind": "function",
        "signature": "wgslStructLayoutReport(wgslCode)",
        "summary": ""
      },
      {
        "name": "std140StructLayoutReport",
        "kind": "function",
        "signature": "std140StructLayoutReport(name, fields)",
        "summary": ""
      },
      {
        "name": "MEMORY_LAYOUT_ALIGNMENTS",
        "kind": "constant",
        "signature": "MEMORY_LAYOUT_ALIGNMENTS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MeshAttributeMath",
    "path": "engine/reference/core/math/MeshAttributeMath.md",
    "source": "engine/core/math/MeshAttributeMath.js",
    "import": "/engine/core/math/MeshAttributeMath.js",
    "sourceHash": "9862c820a47b714c59b21f2bb561997cb6b07b7d7f8616e1221037d371c33801",
    "summary": "MeshAttributeMath.js - glTF-style accessor component, stride, tangent-frame, and decode helpers.",
    "exports": [
      {
        "name": "morphWeightStateReport",
        "kind": "function",
        "signature": "morphWeightStateReport(value, options = {})",
        "summary": "Validate serializable per-model morph control state keyed by stable part index."
      },
      {
        "name": "positionBoundsReport",
        "kind": "function",
        "signature": "positionBoundsReport(positions, options = {})",
        "summary": ""
      },
      {
        "name": "morphAttributeDeltasReport",
        "kind": "function",
        "signature": "morphAttributeDeltasReport(baseValues, morphTargets, morphWeights, options = {})",
        "summary": ""
      },
      {
        "name": "morphedPositionBoundsReport",
        "kind": "function",
        "signature": "morphedPositionBoundsReport(basePositions, morphTargets, morphWeights, options = {})",
        "summary": ""
      },
      {
        "name": "skinnedPositionBoundsReport",
        "kind": "function",
        "signature": "skinnedPositionBoundsReport(bindPositions, jointIndices, jointWeights, skinMatrices, options = {},)",
        "summary": ""
      },
      {
        "name": "componentTypedArray",
        "kind": "function",
        "signature": "componentTypedArray(componentType)",
        "summary": ""
      },
      {
        "name": "componentByteSize",
        "kind": "function",
        "signature": "componentByteSize(componentType)",
        "summary": ""
      },
      {
        "name": "accessorElementCount",
        "kind": "function",
        "signature": "accessorElementCount(type)",
        "summary": ""
      },
      {
        "name": "normalizedComponentRange",
        "kind": "function",
        "signature": "normalizedComponentRange(componentType)",
        "summary": ""
      },
      {
        "name": "normalizeAccessorComponent",
        "kind": "function",
        "signature": "normalizeAccessorComponent(value, componentType)",
        "summary": ""
      },
      {
        "name": "readAccessorComponent",
        "kind": "function",
        "signature": "readAccessorComponent(view, byteOffset, componentType, normalized = false)",
        "summary": ""
      },
      {
        "name": "accessorPackedByteStride",
        "kind": "function",
        "signature": "accessorPackedByteStride(accessor)",
        "summary": ""
      },
      {
        "name": "accessorByteLayout",
        "kind": "function",
        "signature": "accessorByteLayout(accessor, bufferView = {})",
        "summary": ""
      },
      {
        "name": "readAccessorArray",
        "kind": "function",
        "signature": "readAccessorArray(source, accessor, bufferView = {}, options = {})",
        "summary": ""
      },
      {
        "name": "accessorDecodeMetadata",
        "kind": "function",
        "signature": "accessorDecodeMetadata(accessor, bufferView = {})",
        "summary": ""
      },
      {
        "name": "attributeBounds",
        "kind": "function",
        "signature": "attributeBounds(values, componentCount = 3)",
        "summary": ""
      },
      {
        "name": "attributeScaleBiasFromBounds",
        "kind": "function",
        "signature": "attributeScaleBiasFromBounds(min, max)",
        "summary": ""
      },
      {
        "name": "meshoptDecodeMetadata",
        "kind": "function",
        "signature": "meshoptDecodeMetadata(extension = {}, bufferView = {})",
        "summary": ""
      },
      {
        "name": "indexBounds",
        "kind": "function",
        "signature": "indexBounds(indices, vertexCount)",
        "summary": ""
      },
      {
        "name": "tangentHandedness",
        "kind": "function",
        "signature": "tangentHandedness(tangent, fallback = 1)",
        "summary": ""
      },
      {
        "name": "tangentFrameFromNormalTangent",
        "kind": "function",
        "signature": "tangentFrameFromNormalTangent(normal, tangent, options = {})",
        "summary": ""
      },
      {
        "name": "gltfBitangentFromTangent",
        "kind": "function",
        "signature": "gltfBitangentFromTangent(normal, tangent, options = {})",
        "summary": ""
      },
      {
        "name": "decodeNormalTextureSample",
        "kind": "function",
        "signature": "decodeNormalTextureSample(sample, normalScale = 1, options = {})",
        "summary": ""
      },
      {
        "name": "normalTextureSampleToWorld",
        "kind": "function",
        "signature": "normalTextureSampleToWorld(sample, normal, tangent, normalScale = 1, options = {})",
        "summary": ""
      },
      {
        "name": "prepareMikkTSpaceInputGeometry",
        "kind": "function",
        "signature": "prepareMikkTSpaceInputGeometry(geometry)",
        "summary": ""
      },
      {
        "name": "mikkTSpaceReferenceFingerprint",
        "kind": "function",
        "signature": "mikkTSpaceReferenceFingerprint(preparedInput, faceTangents = null)",
        "summary": ""
      },
      {
        "name": "mikkTSpaceReferenceRegistryReport",
        "kind": "function",
        "signature": "mikkTSpaceReferenceRegistryReport(registry = MIKK_REFERENCE_CORPUS_REGISTRY)",
        "summary": ""
      },
      {
        "name": "mikkTSpaceReferenceProofReport",
        "kind": "function",
        "signature": "mikkTSpaceReferenceProofReport(preparedInput, faceTangents, proof = null, registry = MIKK_REFERENCE_CORPUS_REGISTRY)",
        "summary": ""
      },
      {
        "name": "mikkTSpaceFaceTangentOutputReport",
        "kind": "function",
        "signature": "mikkTSpaceFaceTangentOutputReport(faceTangents, expectedVertexCount, options = {})",
        "summary": ""
      },
      {
        "name": "applyMikkTSpaceFaceTangents",
        "kind": "function",
        "signature": "applyMikkTSpaceFaceTangents(preparedInput, faceTangents, options = {})",
        "summary": ""
      },
      {
        "name": "splitGeometryForTangentSpace",
        "kind": "function",
        "signature": "splitGeometryForTangentSpace(geometry, options = {})",
        "summary": ""
      },
      {
        "name": "tangentSpaceCompatibilityReport",
        "kind": "function",
        "signature": "tangentSpaceCompatibilityReport(geometry, referenceTangents = null, options = {})",
        "summary": ""
      },
      {
        "name": "generateTangentsFromGeometry",
        "kind": "function",
        "signature": "generateTangentsFromGeometry(positions, normals, uvs, indices = null, options = {})",
        "summary": ""
      },
      {
        "name": "GLTF_COMPONENT_TYPES",
        "kind": "constant",
        "signature": "GLTF_COMPONENT_TYPES",
        "summary": ""
      },
      {
        "name": "TANGENT_SPACE_GENERATOR_FALLBACK",
        "kind": "constant",
        "signature": "TANGENT_SPACE_GENERATOR_FALLBACK",
        "summary": ""
      },
      {
        "name": "TANGENT_SPACE_GENERATOR_MIKK_FACE_OUTPUT",
        "kind": "constant",
        "signature": "TANGENT_SPACE_GENERATOR_MIKK_FACE_OUTPUT",
        "summary": ""
      },
      {
        "name": "MIKK_REFERENCE_CORPUS_REGISTRY",
        "kind": "constant",
        "signature": "MIKK_REFERENCE_CORPUS_REGISTRY",
        "summary": ""
      },
      {
        "name": "SKINNED_POSITION_BOUNDS_LIMITS",
        "kind": "constant",
        "signature": "SKINNED_POSITION_BOUNDS_LIMITS",
        "summary": ""
      },
      {
        "name": "MORPH_ATTRIBUTE_LIMITS",
        "kind": "constant",
        "signature": "MORPH_ATTRIBUTE_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/MeshMath",
    "path": "engine/reference/core/math/MeshMath.md",
    "source": "engine/core/math/MeshMath.js",
    "import": "/engine/core/math/MeshMath.js",
    "sourceHash": "22e5e1d4b25b5d8e42256692e5ef3088f767cd19399939288286eb017ccaff5d",
    "summary": "MeshMath.js - reusable peer-graph, neighbor, relay, gossip, and mesh-health helpers.",
    "exports": [
      {
        "name": "meshGraphReport",
        "kind": "function",
        "signature": "meshGraphReport(options = {})",
        "summary": ""
      },
      {
        "name": "peerDegreeReport",
        "kind": "function",
        "signature": "peerDegreeReport(options = {})",
        "summary": ""
      },
      {
        "name": "partitionDetectionReport",
        "kind": "function",
        "signature": "partitionDetectionReport(options = {})",
        "summary": ""
      },
      {
        "name": "meshLinkQualityScore",
        "kind": "function",
        "signature": "meshLinkQualityScore(options = {})",
        "summary": ""
      },
      {
        "name": "peerNeighborScoreReport",
        "kind": "function",
        "signature": "peerNeighborScoreReport(peer = {}, options = {})",
        "summary": ""
      },
      {
        "name": "neighborSelectionReport",
        "kind": "function",
        "signature": "neighborSelectionReport(options = {})",
        "summary": ""
      },
      {
        "name": "supernodeScoreReport",
        "kind": "function",
        "signature": "supernodeScoreReport(options = {})",
        "summary": ""
      },
      {
        "name": "relaySelectionReport",
        "kind": "function",
        "signature": "relaySelectionReport(options = {})",
        "summary": ""
      },
      {
        "name": "nearestPeerReport",
        "kind": "function",
        "signature": "nearestPeerReport(options = {})",
        "summary": ""
      },
      {
        "name": "gossipFanoutReport",
        "kind": "function",
        "signature": "gossipFanoutReport(options = {})",
        "summary": ""
      },
      {
        "name": "redundantPathReport",
        "kind": "function",
        "signature": "redundantPathReport(options = {})",
        "summary": ""
      },
      {
        "name": "meshHealthReport",
        "kind": "function",
        "signature": "meshHealthReport(options = {})",
        "summary": ""
      },
      {
        "name": "topologyModeReport",
        "kind": "function",
        "signature": "topologyModeReport(options = {})",
        "summary": ""
      },
      {
        "name": "MESH_MIN_DEGREE",
        "kind": "constant",
        "signature": "MESH_MIN_DEGREE",
        "summary": ""
      },
      {
        "name": "MESH_DEFAULT_IDEAL_DEGREE",
        "kind": "constant",
        "signature": "MESH_DEFAULT_IDEAL_DEGREE",
        "summary": ""
      },
      {
        "name": "MESH_MAX_DEGREE",
        "kind": "constant",
        "signature": "MESH_MAX_DEGREE",
        "summary": ""
      },
      {
        "name": "MESH_SUPERNODE_DEGREE",
        "kind": "constant",
        "signature": "MESH_SUPERNODE_DEGREE",
        "summary": ""
      },
      {
        "name": "MESH_FULL_MESH_CEILING",
        "kind": "constant",
        "signature": "MESH_FULL_MESH_CEILING",
        "summary": ""
      },
      {
        "name": "MESH_SUPERNODE_THRESHOLD",
        "kind": "constant",
        "signature": "MESH_SUPERNODE_THRESHOLD",
        "summary": ""
      },
      {
        "name": "MESH_SUPERNODE_SCORE",
        "kind": "constant",
        "signature": "MESH_SUPERNODE_SCORE",
        "summary": ""
      },
      {
        "name": "MESH_GOSSIP_FACTOR",
        "kind": "constant",
        "signature": "MESH_GOSSIP_FACTOR",
        "summary": ""
      },
      {
        "name": "MESH_GOSSIP_MIN_LAZY",
        "kind": "constant",
        "signature": "MESH_GOSSIP_MIN_LAZY",
        "summary": ""
      },
      {
        "name": "MESH_GOSSIP_ROUNDS",
        "kind": "constant",
        "signature": "MESH_GOSSIP_ROUNDS",
        "summary": ""
      },
      {
        "name": "MESH_NEIGHBOR_SCORE_WEIGHTS",
        "kind": "constant",
        "signature": "MESH_NEIGHBOR_SCORE_WEIGHTS",
        "summary": ""
      },
      {
        "name": "MESH_LINK_QUALITY_WEIGHTS",
        "kind": "constant",
        "signature": "MESH_LINK_QUALITY_WEIGHTS",
        "summary": ""
      },
      {
        "name": "MESH_SUPERNODE_TIER_MULTIPLIER",
        "kind": "constant",
        "signature": "MESH_SUPERNODE_TIER_MULTIPLIER",
        "summary": ""
      },
      {
        "name": "MESH_NEIGHBOR_TIER_PENALTY",
        "kind": "constant",
        "signature": "MESH_NEIGHBOR_TIER_PENALTY",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/NavigationMath",
    "path": "engine/reference/core/math/NavigationMath.md",
    "source": "engine/core/math/NavigationMath.js",
    "import": "/engine/core/math/NavigationMath.js",
    "sourceHash": "95de2633178db6fe90445bfcfe340da30eaa78d1a3bf917e0e3312e9ba6eeb3f",
    "summary": "NavigationMath.js - pure navigation corridor, path, area-cost, and steering reports.",
    "exports": [
      {
        "name": "navPoint2",
        "kind": "function",
        "signature": "navPoint2(point, options = {})",
        "summary": ""
      },
      {
        "name": "navDistance2D",
        "kind": "function",
        "signature": "navDistance2D(a, b, options = {})",
        "summary": ""
      },
      {
        "name": "navPathLength",
        "kind": "function",
        "signature": "navPathLength(waypoints = [], options = {})",
        "summary": ""
      },
      {
        "name": "navPortalReport",
        "kind": "function",
        "signature": "navPortalReport(portal, options = {})",
        "summary": ""
      },
      {
        "name": "navStringPull",
        "kind": "function",
        "signature": "navStringPull(portals = [], options = {})",
        "summary": ""
      },
      {
        "name": "navPathCorridorReport",
        "kind": "function",
        "signature": "navPathCorridorReport(portals = [], options = {})",
        "summary": ""
      },
      {
        "name": "navAreaTraversalCost",
        "kind": "function",
        "signature": "navAreaTraversalCost(distance, area = 0, options = {})",
        "summary": ""
      },
      {
        "name": "navNearestPolyScore",
        "kind": "function",
        "signature": "navNearestPolyScore(point, polygon, options = {})",
        "summary": ""
      },
      {
        "name": "navPackPolyRef",
        "kind": "function",
        "signature": "navPackPolyRef(ref = {}, options = {})",
        "summary": ""
      },
      {
        "name": "navUnpackPolyRef",
        "kind": "function",
        "signature": "navUnpackPolyRef(value, options = {})",
        "summary": ""
      },
      {
        "name": "navSmoothPath",
        "kind": "function",
        "signature": "navSmoothPath(waypoints = [], smoothing = 0.5, options = {})",
        "summary": ""
      },
      {
        "name": "navSteeringTargetReport",
        "kind": "function",
        "signature": "navSteeringTargetReport(currentPosition, waypoints = [], options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/NetworkMetricMath",
    "path": "engine/reference/core/math/NetworkMetricMath.md",
    "source": "engine/core/math/NetworkMetricMath.js",
    "import": "/engine/core/math/NetworkMetricMath.js",
    "sourceHash": "33a7e1aa682956444b31015a9efaf1f011e17bb2e25aba77aa9866e52d59da8a",
    "summary": "NetworkMetricMath.js - reusable RTT, jitter, loss, throughput, goodput, and timeout helpers.",
    "exports": [
      {
        "name": "networkDurationSeconds",
        "kind": "function",
        "signature": "networkDurationSeconds(durationMs)",
        "summary": ""
      },
      {
        "name": "networkRatePerSecond",
        "kind": "function",
        "signature": "networkRatePerSecond(count, durationMs)",
        "summary": ""
      },
      {
        "name": "packetsPerSecond",
        "kind": "function",
        "signature": "packetsPerSecond(packetCount, durationMs)",
        "summary": ""
      },
      {
        "name": "bitrateBps",
        "kind": "function",
        "signature": "bitrateBps(byteCount, durationMs)",
        "summary": ""
      },
      {
        "name": "throughputBps",
        "kind": "function",
        "signature": "throughputBps(byteCount, durationMs)",
        "summary": ""
      },
      {
        "name": "goodputReport",
        "kind": "function",
        "signature": "goodputReport(options = {})",
        "summary": ""
      },
      {
        "name": "packetLossReport",
        "kind": "function",
        "signature": "packetLossReport(options = {})",
        "summary": ""
      },
      {
        "name": "rttSampleMs",
        "kind": "function",
        "signature": "rttSampleMs(options = {})",
        "summary": ""
      },
      {
        "name": "oneWayLatencyEstimateMs",
        "kind": "function",
        "signature": "oneWayLatencyEstimateMs(options = {})",
        "summary": ""
      },
      {
        "name": "timeoutEstimateMs",
        "kind": "function",
        "signature": "timeoutEstimateMs(estimator = {}, options = {})",
        "summary": ""
      },
      {
        "name": "rttEstimatorUpdate",
        "kind": "function",
        "signature": "rttEstimatorUpdate(sampleRttMs, previous = null, options = {})",
        "summary": ""
      },
      {
        "name": "quicProbeTimeoutMs",
        "kind": "function",
        "signature": "quicProbeTimeoutMs(estimator = {}, options = {})",
        "summary": ""
      },
      {
        "name": "rtpTransitTimeMs",
        "kind": "function",
        "signature": "rtpTransitTimeMs(packet = {})",
        "summary": ""
      },
      {
        "name": "interarrivalJitterUpdate",
        "kind": "function",
        "signature": "interarrivalJitterUpdate(previousTransitMs, currentTransitMs, previousJitterMs = 0, options = {})",
        "summary": ""
      },
      {
        "name": "rtpInterarrivalJitterUpdate",
        "kind": "function",
        "signature": "rtpInterarrivalJitterUpdate(previous = null, packet = {})",
        "summary": ""
      },
      {
        "name": "latencyJitterReport",
        "kind": "function",
        "signature": "latencyJitterReport(samplesMs = [])",
        "summary": ""
      },
      {
        "name": "networkQualityReport",
        "kind": "function",
        "signature": "networkQualityReport(options = {})",
        "summary": ""
      },
      {
        "name": "NETWORK_RTO_ALPHA",
        "kind": "constant",
        "signature": "NETWORK_RTO_ALPHA",
        "summary": ""
      },
      {
        "name": "NETWORK_RTO_BETA",
        "kind": "constant",
        "signature": "NETWORK_RTO_BETA",
        "summary": ""
      },
      {
        "name": "NETWORK_RTO_VARIANCE_MULTIPLIER",
        "kind": "constant",
        "signature": "NETWORK_RTO_VARIANCE_MULTIPLIER",
        "summary": ""
      },
      {
        "name": "NETWORK_DEFAULT_MIN_TIMEOUT_MS",
        "kind": "constant",
        "signature": "NETWORK_DEFAULT_MIN_TIMEOUT_MS",
        "summary": ""
      },
      {
        "name": "NETWORK_DEFAULT_MAX_TIMEOUT_MS",
        "kind": "constant",
        "signature": "NETWORK_DEFAULT_MAX_TIMEOUT_MS",
        "summary": ""
      },
      {
        "name": "NETWORK_DEFAULT_CLOCK_GRANULARITY_MS",
        "kind": "constant",
        "signature": "NETWORK_DEFAULT_CLOCK_GRANULARITY_MS",
        "summary": ""
      },
      {
        "name": "NETWORK_RTP_JITTER_GAIN",
        "kind": "constant",
        "signature": "NETWORK_RTP_JITTER_GAIN",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/PacketMath",
    "path": "engine/reference/core/math/PacketMath.md",
    "source": "engine/core/math/PacketMath.js",
    "import": "/engine/core/math/PacketMath.js",
    "sourceHash": "af0324e10600c8b8a0b2e21f5fb31691ba433b1fb188b64e529a217cc115df96",
    "summary": "PacketMath.js - reusable packet sequence, ACK range, fragmentation, flight, and loss helpers.",
    "exports": [
      {
        "name": "packetSequenceModulo",
        "kind": "function",
        "signature": "packetSequenceModulo(sequenceBits = PACKET_SEQUENCE_BITS_DEFAULT)",
        "summary": ""
      },
      {
        "name": "wrapPacketSequence",
        "kind": "function",
        "signature": "wrapPacketSequence(sequence, sequenceBits = PACKET_SEQUENCE_BITS_DEFAULT)",
        "summary": ""
      },
      {
        "name": "advancePacketSequence",
        "kind": "function",
        "signature": "advancePacketSequence(sequence, increment = 1, sequenceBits = PACKET_SEQUENCE_BITS_DEFAULT)",
        "summary": ""
      },
      {
        "name": "packetSequenceForwardDelta",
        "kind": "function",
        "signature": "packetSequenceForwardDelta(fromSequence, toSequence, sequenceBits = PACKET_SEQUENCE_BITS_DEFAULT)",
        "summary": ""
      },
      {
        "name": "packetSequenceSignedDelta",
        "kind": "function",
        "signature": "packetSequenceSignedDelta(fromSequence, toSequence, sequenceBits = PACKET_SEQUENCE_BITS_DEFAULT)",
        "summary": ""
      },
      {
        "name": "comparePacketSequence",
        "kind": "function",
        "signature": "comparePacketSequence(leftSequence, rightSequence, sequenceBits = PACKET_SEQUENCE_BITS_DEFAULT)",
        "summary": ""
      },
      {
        "name": "isPacketSequenceNewer",
        "kind": "function",
        "signature": "isPacketSequenceNewer(candidateSequence, baselineSequence, sequenceBits = PACKET_SEQUENCE_BITS_DEFAULT)",
        "summary": ""
      },
      {
        "name": "packetSequenceWindowReport",
        "kind": "function",
        "signature": "packetSequenceWindowReport(sequence, windowStart, windowSize, sequenceBits = PACKET_SEQUENCE_BITS_DEFAULT)",
        "summary": ""
      },
      {
        "name": "packetAckRangeReport",
        "kind": "function",
        "signature": "packetAckRangeReport(packetNumbers = [], options = {})",
        "summary": ""
      },
      {
        "name": "packetMissingRangeReport",
        "kind": "function",
        "signature": "packetMissingRangeReport(options = {})",
        "summary": ""
      },
      {
        "name": "packetPayloadBudgetReport",
        "kind": "function",
        "signature": "packetPayloadBudgetReport(options = {})",
        "summary": ""
      },
      {
        "name": "packetFragmentPlan",
        "kind": "function",
        "signature": "packetFragmentPlan(payloadBytes, options = {})",
        "summary": ""
      },
      {
        "name": "packetReassemblyReport",
        "kind": "function",
        "signature": "packetReassemblyReport(fragments = [], options = {})",
        "summary": ""
      },
      {
        "name": "packetFlightReport",
        "kind": "function",
        "signature": "packetFlightReport(packets = [])",
        "summary": ""
      },
      {
        "name": "packetSendWindowReport",
        "kind": "function",
        "signature": "packetSendWindowReport(options = {})",
        "summary": ""
      },
      {
        "name": "packetLossCandidateReport",
        "kind": "function",
        "signature": "packetLossCandidateReport(sentPackets = [], options = {})",
        "summary": ""
      },
      {
        "name": "quicPacketNumberEncodingBytes",
        "kind": "function",
        "signature": "quicPacketNumberEncodingBytes(packetNumber, largestAcknowledgedPacket = null)",
        "summary": ""
      },
      {
        "name": "quicDecodeTruncatedPacketNumber",
        "kind": "function",
        "signature": "quicDecodeTruncatedPacketNumber(largestReceivedPacket, truncatedPacketNumber, packetNumberBits)",
        "summary": ""
      },
      {
        "name": "PACKET_SEQUENCE_BITS_DEFAULT",
        "kind": "constant",
        "signature": "PACKET_SEQUENCE_BITS_DEFAULT",
        "summary": ""
      },
      {
        "name": "PACKET_SEQUENCE_BITS_MAX_SAFE",
        "kind": "constant",
        "signature": "PACKET_SEQUENCE_BITS_MAX_SAFE",
        "summary": ""
      },
      {
        "name": "PACKET_LOSS_PACKET_THRESHOLD",
        "kind": "constant",
        "signature": "PACKET_LOSS_PACKET_THRESHOLD",
        "summary": ""
      },
      {
        "name": "PACKET_LOSS_TIME_THRESHOLD",
        "kind": "constant",
        "signature": "PACKET_LOSS_TIME_THRESHOLD",
        "summary": ""
      },
      {
        "name": "PACKET_LOSS_GRANULARITY_MS",
        "kind": "constant",
        "signature": "PACKET_LOSS_GRANULARITY_MS",
        "summary": ""
      },
      {
        "name": "PACKET_DEFAULT_DATAGRAM_BYTES",
        "kind": "constant",
        "signature": "PACKET_DEFAULT_DATAGRAM_BYTES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/ProfileMath",
    "path": "engine/reference/core/math/ProfileMath.md",
    "source": "engine/core/math/ProfileMath.js",
    "import": "/engine/core/math/ProfileMath.js",
    "sourceHash": "d6ea64bf316e631ac1cadf7c0d4843e5925c10d1d95264db5371b79170fe3981",
    "summary": "ProfileMath.js - reusable latency, frame-budget, and stage profile summaries.",
    "exports": [
      {
        "name": "latencyStatsReport",
        "kind": "function",
        "signature": "latencyStatsReport(samplesMs, options = {})",
        "summary": ""
      },
      {
        "name": "frameBudgetReport",
        "kind": "function",
        "signature": "frameBudgetReport(frameTimeMs, options = {})",
        "summary": ""
      },
      {
        "name": "profileStageReport",
        "kind": "function",
        "signature": "profileStageReport(stages, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/QuantMath",
    "path": "engine/reference/core/math/QuantMath.md",
    "source": "engine/core/math/QuantMath.js",
    "import": "/engine/core/math/QuantMath.js",
    "sourceHash": "3cdae6db1997b0214f50224c0815abc35f491410e5aff6823e64752566fa19f4",
    "summary": "QuantMath.js - reusable scalar and array quantization primitives.",
    "exports": [
      {
        "name": "quantizationStep",
        "kind": "function",
        "signature": "quantizationStep(range, maxValue = QUANT_INT16_MAX)",
        "summary": ""
      },
      {
        "name": "quantizationMaxAbsoluteError",
        "kind": "function",
        "signature": "quantizationMaxAbsoluteError(range, maxValue = QUANT_INT16_MAX)",
        "summary": ""
      },
      {
        "name": "quantizeSignedFloat",
        "kind": "function",
        "signature": "quantizeSignedFloat(value, range, maxValue = QUANT_INT16_MAX)",
        "summary": ""
      },
      {
        "name": "dequantizeSignedFloat",
        "kind": "function",
        "signature": "dequantizeSignedFloat(quantized, range, maxValue = QUANT_INT16_MAX)",
        "summary": ""
      },
      {
        "name": "quantizeSignedFloatToInt16",
        "kind": "function",
        "signature": "quantizeSignedFloatToInt16(value, range)",
        "summary": ""
      },
      {
        "name": "dequantizeSignedInt16ToFloat",
        "kind": "function",
        "signature": "dequantizeSignedInt16ToFloat(quantized, range)",
        "summary": ""
      },
      {
        "name": "quantizeSignedFloatToInt8",
        "kind": "function",
        "signature": "quantizeSignedFloatToInt8(value, range)",
        "summary": ""
      },
      {
        "name": "dequantizeSignedInt8ToFloat",
        "kind": "function",
        "signature": "dequantizeSignedInt8ToFloat(quantized, range)",
        "summary": ""
      },
      {
        "name": "quantizeSignedFloatArrayToInt16",
        "kind": "function",
        "signature": "quantizeSignedFloatArrayToInt16(values, range)",
        "summary": ""
      },
      {
        "name": "dequantizeSignedInt16ArrayToFloat32",
        "kind": "function",
        "signature": "dequantizeSignedInt16ArrayToFloat32(quantized, range)",
        "summary": ""
      },
      {
        "name": "quantizeSignedFloatArrayToInt8",
        "kind": "function",
        "signature": "quantizeSignedFloatArrayToInt8(values, range)",
        "summary": ""
      },
      {
        "name": "dequantizeSignedInt8ArrayToFloat32",
        "kind": "function",
        "signature": "dequantizeSignedInt8ArrayToFloat32(quantized, range)",
        "summary": ""
      },
      {
        "name": "quantizeUnitFloatToUint16",
        "kind": "function",
        "signature": "quantizeUnitFloatToUint16(value)",
        "summary": ""
      },
      {
        "name": "dequantizeUint16ToUnitFloat",
        "kind": "function",
        "signature": "dequantizeUint16ToUnitFloat(quantized)",
        "summary": ""
      },
      {
        "name": "quantizeUnitFloatArrayToUint16",
        "kind": "function",
        "signature": "quantizeUnitFloatArrayToUint16(values)",
        "summary": ""
      },
      {
        "name": "dequantizeUint16ArrayToFloat32",
        "kind": "function",
        "signature": "dequantizeUint16ArrayToFloat32(quantized)",
        "summary": ""
      },
      {
        "name": "quantizeVec2ToInt16",
        "kind": "function",
        "signature": "quantizeVec2ToInt16(value, range)",
        "summary": ""
      },
      {
        "name": "dequantizeVec2FromInt16",
        "kind": "function",
        "signature": "dequantizeVec2FromInt16(quantized, range)",
        "summary": ""
      },
      {
        "name": "quantizeVec3ToInt16",
        "kind": "function",
        "signature": "quantizeVec3ToInt16(value, range)",
        "summary": ""
      },
      {
        "name": "dequantizeVec3FromInt16",
        "kind": "function",
        "signature": "dequantizeVec3FromInt16(quantized, range)",
        "summary": ""
      },
      {
        "name": "signedQuantizationMaxValue",
        "kind": "function",
        "signature": "signedQuantizationMaxValue(bitDepth = 16)",
        "summary": ""
      },
      {
        "name": "unsignedQuantizationMaxValue",
        "kind": "function",
        "signature": "unsignedQuantizationMaxValue(bitDepth = 16)",
        "summary": ""
      },
      {
        "name": "quantizeSignedFloatArray",
        "kind": "function",
        "signature": "quantizeSignedFloatArray(values, range, bitDepth = 16)",
        "summary": ""
      },
      {
        "name": "dequantizeSignedFloatArray",
        "kind": "function",
        "signature": "dequantizeSignedFloatArray(quantized, range, bitDepth = 16)",
        "summary": ""
      },
      {
        "name": "quantizeRange",
        "kind": "function",
        "signature": "quantizeRange(value, min, max, bitDepth = 16, fallback = 0)",
        "summary": ""
      },
      {
        "name": "dequantizeRange",
        "kind": "function",
        "signature": "dequantizeRange(quantized, min, max, bitDepth = 16, fallback = 0)",
        "summary": ""
      },
      {
        "name": "quantizeRangeArray",
        "kind": "function",
        "signature": "quantizeRangeArray(values, min, max, bitDepth = 16)",
        "summary": ""
      },
      {
        "name": "dequantizeRangeArray",
        "kind": "function",
        "signature": "dequantizeRangeArray(quantized, min, max, bitDepth = 16)",
        "summary": ""
      },
      {
        "name": "quantizeVec2",
        "kind": "function",
        "signature": "quantizeVec2(value, range, bitDepth = 16)",
        "summary": ""
      },
      {
        "name": "dequantizeVec2",
        "kind": "function",
        "signature": "dequantizeVec2(quantized, range, bitDepth = 16)",
        "summary": ""
      },
      {
        "name": "quantizeVec3",
        "kind": "function",
        "signature": "quantizeVec3(value, range, bitDepth = 16)",
        "summary": ""
      },
      {
        "name": "dequantizeVec3",
        "kind": "function",
        "signature": "dequantizeVec3(quantized, range, bitDepth = 16)",
        "summary": ""
      },
      {
        "name": "quantizeColor",
        "kind": "function",
        "signature": "quantizeColor(color, bitDepth = 8)",
        "summary": ""
      },
      {
        "name": "dequantizeColor",
        "kind": "function",
        "signature": "dequantizeColor(quantized, bitDepth = 8)",
        "summary": ""
      },
      {
        "name": "quantizeColorRGBA8",
        "kind": "function",
        "signature": "quantizeColorRGBA8(color)",
        "summary": ""
      },
      {
        "name": "dequantizeColorRGBA8",
        "kind": "function",
        "signature": "dequantizeColorRGBA8(quantized)",
        "summary": ""
      },
      {
        "name": "quantizeNormal",
        "kind": "function",
        "signature": "quantizeNormal(normal)",
        "summary": ""
      },
      {
        "name": "dequantizeNormal",
        "kind": "function",
        "signature": "dequantizeNormal(packed)",
        "summary": ""
      },
      {
        "name": "deltaQuantize",
        "kind": "function",
        "signature": "deltaQuantize(values, range, bitDepth = 16)",
        "summary": ""
      },
      {
        "name": "deltaDequantize",
        "kind": "function",
        "signature": "deltaDequantize(packed)",
        "summary": ""
      },
      {
        "name": "quantizationErrorReport",
        "kind": "function",
        "signature": "quantizationErrorReport(source, decoded, tolerance = 0)",
        "summary": ""
      },
      {
        "name": "quaternionOrientationErrorReport",
        "kind": "function",
        "signature": "quaternionOrientationErrorReport(source, decoded, toleranceRadians = 0)",
        "summary": ""
      },
      {
        "name": "adaptiveQuantize",
        "kind": "function",
        "signature": "adaptiveQuantize(values, options = {})",
        "summary": ""
      },
      {
        "name": "adaptiveDequantize",
        "kind": "function",
        "signature": "adaptiveDequantize(packed)",
        "summary": ""
      },
      {
        "name": "QUANT_INT16_MAX",
        "kind": "constant",
        "signature": "QUANT_INT16_MAX",
        "summary": ""
      },
      {
        "name": "QUANT_INT8_MAX",
        "kind": "constant",
        "signature": "QUANT_INT8_MAX",
        "summary": ""
      },
      {
        "name": "QUANT_UNORM16_MAX",
        "kind": "constant",
        "signature": "QUANT_UNORM16_MAX",
        "summary": ""
      },
      {
        "name": "dequantizeDelta",
        "kind": "constant",
        "signature": "dequantizeDelta",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/QueueMath",
    "path": "engine/reference/core/math/QueueMath.md",
    "source": "engine/core/math/QueueMath.js",
    "import": "/engine/core/math/QueueMath.js",
    "sourceHash": "a8bd4dc985714e90cc78d81f63692f241660c214a0f202bb2180d1a813b58663",
    "summary": "QueueMath.js - reusable queue depth, delay, bucket, share, ramp, and backpressure helpers.",
    "exports": [
      {
        "name": "queueDepthReport",
        "kind": "function",
        "signature": "queueDepthReport(options = {})",
        "summary": ""
      },
      {
        "name": "queueDrainTimeMs",
        "kind": "function",
        "signature": "queueDrainTimeMs(options = {})",
        "summary": ""
      },
      {
        "name": "queueDelayReport",
        "kind": "function",
        "signature": "queueDelayReport(options = {})",
        "summary": ""
      },
      {
        "name": "queueDrainReport",
        "kind": "function",
        "signature": "queueDrainReport(options = {})",
        "summary": ""
      },
      {
        "name": "tokenBucketRefill",
        "kind": "function",
        "signature": "tokenBucketRefill(tokens, options = {})",
        "summary": ""
      },
      {
        "name": "tokenBucketConsume",
        "kind": "function",
        "signature": "tokenBucketConsume(options = {})",
        "summary": ""
      },
      {
        "name": "singleRateThreeColorMarkerReport",
        "kind": "function",
        "signature": "singleRateThreeColorMarkerReport(options = {})",
        "summary": ""
      },
      {
        "name": "leakyBucketReport",
        "kind": "function",
        "signature": "leakyBucketReport(options = {})",
        "summary": ""
      },
      {
        "name": "queueBudgetReport",
        "kind": "function",
        "signature": "queueBudgetReport(options = {})",
        "summary": ""
      },
      {
        "name": "fairShareRateReport",
        "kind": "function",
        "signature": "fairShareRateReport(options = {})",
        "summary": ""
      },
      {
        "name": "rateRampReport",
        "kind": "function",
        "signature": "rateRampReport(options = {})",
        "summary": ""
      },
      {
        "name": "queueBackpressureReport",
        "kind": "function",
        "signature": "queueBackpressureReport(options = {})",
        "summary": ""
      },
      {
        "name": "QUEUE_DEFAULT_TARGET_DELAY_MS",
        "kind": "constant",
        "signature": "QUEUE_DEFAULT_TARGET_DELAY_MS",
        "summary": ""
      },
      {
        "name": "QUEUE_DEFAULT_INTERVAL_MS",
        "kind": "constant",
        "signature": "QUEUE_DEFAULT_INTERVAL_MS",
        "summary": ""
      },
      {
        "name": "QUEUE_BACKPRESSURE_LOW",
        "kind": "constant",
        "signature": "QUEUE_BACKPRESSURE_LOW",
        "summary": ""
      },
      {
        "name": "QUEUE_BACKPRESSURE_MEDIUM",
        "kind": "constant",
        "signature": "QUEUE_BACKPRESSURE_MEDIUM",
        "summary": ""
      },
      {
        "name": "QUEUE_BACKPRESSURE_HIGH",
        "kind": "constant",
        "signature": "QUEUE_BACKPRESSURE_HIGH",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/RadioMath",
    "path": "engine/reference/core/math/RadioMath.md",
    "source": "engine/core/math/RadioMath.js",
    "import": "/engine/core/math/RadioMath.js",
    "sourceHash": "b04f416b9ee8c059d53d10a229d0f63fa7f50ffabc40411c32b8795d225af0a2",
    "summary": "RadioMath.js - reusable RF power, noise, path-loss, channel, and link-budget helpers.",
    "exports": [
      {
        "name": "linearToDecibels",
        "kind": "function",
        "signature": "linearToDecibels(ratio)",
        "summary": ""
      },
      {
        "name": "decibelsToLinear",
        "kind": "function",
        "signature": "decibelsToLinear(decibels)",
        "summary": ""
      },
      {
        "name": "milliwattsToDbm",
        "kind": "function",
        "signature": "milliwattsToDbm(milliwatts)",
        "summary": ""
      },
      {
        "name": "dbmToMilliwatts",
        "kind": "function",
        "signature": "dbmToMilliwatts(dbm)",
        "summary": ""
      },
      {
        "name": "wattsToDbm",
        "kind": "function",
        "signature": "wattsToDbm(watts)",
        "summary": ""
      },
      {
        "name": "dbmToWatts",
        "kind": "function",
        "signature": "dbmToWatts(dbm)",
        "summary": ""
      },
      {
        "name": "dbmToDbw",
        "kind": "function",
        "signature": "dbmToDbw(dbm)",
        "summary": ""
      },
      {
        "name": "dbwToDbm",
        "kind": "function",
        "signature": "dbwToDbm(dbw)",
        "summary": ""
      },
      {
        "name": "snrDb",
        "kind": "function",
        "signature": "snrDb(signalDbm, noiseDbm)",
        "summary": ""
      },
      {
        "name": "snrLinear",
        "kind": "function",
        "signature": "snrLinear(signalWatts, noiseWatts)",
        "summary": ""
      },
      {
        "name": "thermalNoiseFloorDbm",
        "kind": "function",
        "signature": "thermalNoiseFloorDbm(bandwidthHz, options = {})",
        "summary": ""
      },
      {
        "name": "receiverSensitivityDbm",
        "kind": "function",
        "signature": "receiverSensitivityDbm(options = {})",
        "summary": ""
      },
      {
        "name": "freeSpacePathLossDb",
        "kind": "function",
        "signature": "freeSpacePathLossDb(options = {})",
        "summary": ""
      },
      {
        "name": "logDistancePathLossDb",
        "kind": "function",
        "signature": "logDistancePathLossDb(options = {})",
        "summary": ""
      },
      {
        "name": "receivedPowerDbm",
        "kind": "function",
        "signature": "receivedPowerDbm(options = {})",
        "summary": ""
      },
      {
        "name": "linkBudgetReport",
        "kind": "function",
        "signature": "linkBudgetReport(options = {})",
        "summary": ""
      },
      {
        "name": "channelCapacityBps",
        "kind": "function",
        "signature": "channelCapacityBps(bandwidthHz, options = {})",
        "summary": ""
      },
      {
        "name": "requiredSnrForCapacityDb",
        "kind": "function",
        "signature": "requiredSnrForCapacityDb(capacityBps, bandwidthHz)",
        "summary": ""
      },
      {
        "name": "rssiQualityScore",
        "kind": "function",
        "signature": "rssiQualityScore(rssiDbm, options = {})",
        "summary": ""
      },
      {
        "name": "snrQualityScore",
        "kind": "function",
        "signature": "snrQualityScore(snrValueDb, options = {})",
        "summary": ""
      },
      {
        "name": "channelOverlapReport",
        "kind": "function",
        "signature": "channelOverlapReport(aCenterHz, aBandwidthHz, bCenterHz, bBandwidthHz)",
        "summary": ""
      },
      {
        "name": "interferencePowerDbm",
        "kind": "function",
        "signature": "interferencePowerDbm(powersDbm = [])",
        "summary": ""
      },
      {
        "name": "signalInterferenceNoiseRatioDb",
        "kind": "function",
        "signature": "signalInterferenceNoiseRatioDb(signalDbm, noiseDbm, interferenceDbm = -Infinity)",
        "summary": ""
      },
      {
        "name": "interferenceScore",
        "kind": "function",
        "signature": "interferenceScore(interferenceDbm, signalDbm, options = {})",
        "summary": ""
      },
      {
        "name": "radioLinkQualityReport",
        "kind": "function",
        "signature": "radioLinkQualityReport(options = {})",
        "summary": ""
      },
      {
        "name": "RADIO_SPEED_OF_LIGHT_MPS",
        "kind": "constant",
        "signature": "RADIO_SPEED_OF_LIGHT_MPS",
        "summary": ""
      },
      {
        "name": "RADIO_BOLTZMANN_J_PER_K",
        "kind": "constant",
        "signature": "RADIO_BOLTZMANN_J_PER_K",
        "summary": ""
      },
      {
        "name": "RADIO_REFERENCE_TEMPERATURE_K",
        "kind": "constant",
        "signature": "RADIO_REFERENCE_TEMPERATURE_K",
        "summary": ""
      },
      {
        "name": "RADIO_REFERENCE_NOISE_FLOOR_DBM_PER_HZ",
        "kind": "constant",
        "signature": "RADIO_REFERENCE_NOISE_FLOOR_DBM_PER_HZ",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/RobustNumericMath",
    "path": "engine/reference/core/math/RobustNumericMath.md",
    "source": "engine/core/math/RobustNumericMath.js",
    "import": "/engine/core/math/RobustNumericMath.js",
    "sourceHash": "b25f3b3e254f3bd6ce447930f2af90e2b128f22604286b9e145da719a17575db",
    "summary": "RobustNumericMath.js - floating-point policy, stable sums, cancellation, and filtered predicates.",
    "exports": [
      {
        "name": "float64Bits",
        "kind": "function",
        "signature": "float64Bits(value)",
        "summary": ""
      },
      {
        "name": "float64FromBits",
        "kind": "function",
        "signature": "float64FromBits(bits)",
        "summary": ""
      },
      {
        "name": "float64Classify",
        "kind": "function",
        "signature": "float64Classify(value)",
        "summary": ""
      },
      {
        "name": "float64NextAfter",
        "kind": "function",
        "signature": "float64NextAfter(value, direction)",
        "summary": ""
      },
      {
        "name": "float64Ulp",
        "kind": "function",
        "signature": "float64Ulp(value)",
        "summary": ""
      },
      {
        "name": "float64UlpDistance",
        "kind": "function",
        "signature": "float64UlpDistance(left, right)",
        "summary": ""
      },
      {
        "name": "compensatedSum",
        "kind": "function",
        "signature": "compensatedSum(values)",
        "summary": ""
      },
      {
        "name": "pairwiseSum",
        "kind": "function",
        "signature": "pairwiseSum(values)",
        "summary": ""
      },
      {
        "name": "stableSumReport",
        "kind": "function",
        "signature": "stableSumReport(values)",
        "summary": ""
      },
      {
        "name": "cancellationReport",
        "kind": "function",
        "signature": "cancellationReport(left, right, operation = 'subtract')",
        "summary": ""
      },
      {
        "name": "orientation2DReport",
        "kind": "function",
        "signature": "orientation2DReport(a, b, c, options = {})",
        "summary": ""
      },
      {
        "name": "robustNumericPolicyReport",
        "kind": "function",
        "signature": "robustNumericPolicyReport(values)",
        "summary": ""
      },
      {
        "name": "FLOAT64_SIGNIFICAND_BITS",
        "kind": "constant",
        "signature": "FLOAT64_SIGNIFICAND_BITS",
        "summary": ""
      },
      {
        "name": "FLOAT64_MIN_NORMAL",
        "kind": "constant",
        "signature": "FLOAT64_MIN_NORMAL",
        "summary": ""
      },
      {
        "name": "FLOAT64_MAX_FINITE",
        "kind": "constant",
        "signature": "FLOAT64_MAX_FINITE",
        "summary": ""
      },
      {
        "name": "FLOAT64_EPSILON",
        "kind": "constant",
        "signature": "FLOAT64_EPSILON",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/SIMDLayoutMath",
    "path": "engine/reference/core/math/SIMDLayoutMath.md",
    "source": "engine/core/math/SIMDLayoutMath.js",
    "import": "/engine/core/math/SIMDLayoutMath.js",
    "sourceHash": "dd17f177bbe507effe90177dc4e005d91ba4ee8b767351fa3b2cf48229878e8e",
    "summary": "SIMDLayoutMath.js - WebAssembly-style v128 lane metadata and SoA/AoS layout helpers.",
    "exports": [
      {
        "name": "simdLaneShape",
        "kind": "function",
        "signature": "simdLaneShape(shape = 'f32x4')",
        "summary": ""
      },
      {
        "name": "simdVectorByteSize",
        "kind": "function",
        "signature": "simdVectorByteSize(shape = 'f32x4')",
        "summary": ""
      },
      {
        "name": "simdLaneByteOffset",
        "kind": "function",
        "signature": "simdLaneByteOffset(shape = 'f32x4', vectorIndex = 0, laneIndex = 0, baseOffset = 0)",
        "summary": ""
      },
      {
        "name": "simdVectorAlignmentReport",
        "kind": "function",
        "signature": "simdVectorAlignmentReport(shape = 'f32x4', byteOffset = 0, options = {})",
        "summary": ""
      },
      {
        "name": "simdChunkPlan",
        "kind": "function",
        "signature": "simdChunkPlan(elementCount, shape = 'f32x4')",
        "summary": ""
      },
      {
        "name": "simdLaneMask",
        "kind": "function",
        "signature": "simdLaneMask(shape = 'f32x4', enabledLanes = 'all')",
        "summary": ""
      },
      {
        "name": "simdTailLaneMask",
        "kind": "function",
        "signature": "simdTailLaneMask(elementCount, shape = 'f32x4')",
        "summary": ""
      },
      {
        "name": "simdSoALayoutReport",
        "kind": "function",
        "signature": "simdSoALayoutReport(componentCount, elementCount, options = {})",
        "summary": ""
      },
      {
        "name": "simdAoSToSoA",
        "kind": "function",
        "signature": "simdAoSToSoA(vectors, options = {})",
        "summary": ""
      },
      {
        "name": "simdSoAToAoS",
        "kind": "function",
        "signature": "simdSoAToAoS(soa, options = {})",
        "summary": ""
      },
      {
        "name": "simdScalarFallbackReport",
        "kind": "function",
        "signature": "simdScalarFallbackReport(elementCount, shape = 'f32x4', options = {})",
        "summary": ""
      },
      {
        "name": "SIMD_V128_BIT_SIZE",
        "kind": "constant",
        "signature": "SIMD_V128_BIT_SIZE",
        "summary": ""
      },
      {
        "name": "SIMD_V128_BYTE_SIZE",
        "kind": "constant",
        "signature": "SIMD_V128_BYTE_SIZE",
        "summary": ""
      },
      {
        "name": "SIMD_V128_ALIGNMENT",
        "kind": "constant",
        "signature": "SIMD_V128_ALIGNMENT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/SamplingMath",
    "path": "engine/reference/core/math/SamplingMath.md",
    "source": "engine/core/math/SamplingMath.js",
    "import": "/engine/core/math/SamplingMath.js",
    "sourceHash": "f454b936655f6a88ef3cfca4199f44bc03c977a66bc3e789b7f2739d2749d328",
    "summary": "SamplingMath.js - pure sample-grid, time-window, and sample-rate report helpers.",
    "exports": [
      {
        "name": "sampleRateReport",
        "kind": "function",
        "signature": "sampleRateReport(sampleRate = DEFAULT_SAMPLE_RATE)",
        "summary": ""
      },
      {
        "name": "sampleIndexForTime",
        "kind": "function",
        "signature": "sampleIndexForTime(seconds, sampleRate = DEFAULT_SAMPLE_RATE, options = {})",
        "summary": ""
      },
      {
        "name": "sampleTimeForIndex",
        "kind": "function",
        "signature": "sampleTimeForIndex(index, sampleRate = DEFAULT_SAMPLE_RATE, options = {})",
        "summary": ""
      },
      {
        "name": "sampleWindowReport",
        "kind": "function",
        "signature": "sampleWindowReport(options = {})",
        "summary": ""
      },
      {
        "name": "sampleFrameWindowReport",
        "kind": "function",
        "signature": "sampleFrameWindowReport(sampleCount, windowSize, hopSize, options = {})",
        "summary": ""
      },
      {
        "name": "sampleRateConversionReport",
        "kind": "function",
        "signature": "sampleRateConversionReport(sampleCount, sourceSampleRate, targetSampleRate)",
        "summary": ""
      },
      {
        "name": "samplePlaybackRateReport",
        "kind": "function",
        "signature": "samplePlaybackRateReport(bufferSampleRate, contextSampleRate, playbackRate = 1, options = {})",
        "summary": ""
      },
      {
        "name": "spatialBilinearSampleReport",
        "kind": "function",
        "signature": "spatialBilinearSampleReport(grid, width, height, x, y, options = {})",
        "summary": ""
      },
      {
        "name": "spatialTrilinearSampleReport",
        "kind": "function",
        "signature": "spatialTrilinearSampleReport(grid, width, height, depth, x, y, z, options = {})",
        "summary": ""
      },
      {
        "name": "catmullRomSample",
        "kind": "function",
        "signature": "catmullRomSample(p0, p1, p2, p3, t)",
        "summary": ""
      },
      {
        "name": "catmullRomSampleReport",
        "kind": "function",
        "signature": "catmullRomSampleReport(samples, x, options = {})",
        "summary": ""
      },
      {
        "name": "spatialBicubicSampleReport",
        "kind": "function",
        "signature": "spatialBicubicSampleReport(grid, width, height, x, y, options = {})",
        "summary": ""
      },
      {
        "name": "spatialAreaSampleReport",
        "kind": "function",
        "signature": "spatialAreaSampleReport(grid, width, height, area = {}, options = {})",
        "summary": ""
      },
      {
        "name": "stratifiedSampleGridReport",
        "kind": "function",
        "signature": "stratifiedSampleGridReport(columns, rows, options = {})",
        "summary": ""
      },
      {
        "name": "weightedSampleDistributionReport",
        "kind": "function",
        "signature": "weightedSampleDistributionReport(weights, options = {})",
        "summary": ""
      },
      {
        "name": "discreteImportanceSampleReport",
        "kind": "function",
        "signature": "discreteImportanceSampleReport(weights, u, options = {})",
        "summary": ""
      },
      {
        "name": "blueNoiseSampleSetReport",
        "kind": "function",
        "signature": "blueNoiseSampleSetReport(points, options = {})",
        "summary": ""
      },
      {
        "name": "sobol2DSample",
        "kind": "function",
        "signature": "sobol2DSample(index)",
        "summary": ""
      },
      {
        "name": "lowDiscrepancySequenceReport",
        "kind": "function",
        "signature": "lowDiscrepancySequenceReport(count, options = {})",
        "summary": ""
      },
      {
        "name": "multiJitteredSampleGridReport",
        "kind": "function",
        "signature": "multiJitteredSampleGridReport(size, options = {})",
        "summary": ""
      },
      {
        "name": "sampleSetUniformityReport",
        "kind": "function",
        "signature": "sampleSetUniformityReport(points, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/SceneQueryMath",
    "path": "engine/reference/core/math/SceneQueryMath.md",
    "source": "engine/core/math/SceneQueryMath.js",
    "import": "/engine/core/math/SceneQueryMath.js",
    "sourceHash": "6d64bbd24fb70a6eee2e7ff3e8be61466a054782a1b968887d6c0c40eb7a3b63",
    "summary": "SceneQueryMath.js - pure ray/overlap/sweep query reports for engine callers.",
    "exports": [
      {
        "name": "sceneQueryHitReport",
        "kind": "function",
        "signature": "sceneQueryHitReport(hit, options = {})",
        "summary": ""
      },
      {
        "name": "sceneQueryHitListReport",
        "kind": "function",
        "signature": "sceneQueryHitListReport(hits, options = {})",
        "summary": ""
      },
      {
        "name": "sceneQueryFilterReport",
        "kind": "function",
        "signature": "sceneQueryFilterReport(query = {}, target = {}, options = {})",
        "summary": ""
      },
      {
        "name": "sceneQuerySweptAabbReport",
        "kind": "function",
        "signature": "sceneQuerySweptAabbReport(movingMin, movingMax, staticMin, staticMax, delta, options = {})",
        "summary": ""
      },
      {
        "name": "sceneQueryAabbOverlapReport",
        "kind": "function",
        "signature": "sceneQueryAabbOverlapReport(aMin, aMax, bMin, bMax, options = {})",
        "summary": ""
      },
      {
        "name": "sceneQuerySpherePenetrationReport",
        "kind": "function",
        "signature": "sceneQuerySpherePenetrationReport(centerA, radiusA, centerB, radiusB, options = {})",
        "summary": ""
      },
      {
        "name": "sceneQueryContactNormalReport",
        "kind": "function",
        "signature": "sceneQueryContactNormalReport(normal, options = {})",
        "summary": ""
      },
      {
        "name": "sceneQueryConvexRadiusReport",
        "kind": "function",
        "signature": "sceneQueryConvexRadiusReport(radius, options = {})",
        "summary": ""
      },
      {
        "name": "sceneQueryBroadphasePairScore",
        "kind": "function",
        "signature": "sceneQueryBroadphasePairScore(aMin, aMax, bMin, bMax, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/SignalQualityMath",
    "path": "engine/reference/core/math/SignalQualityMath.md",
    "source": "engine/core/math/SignalQualityMath.js",
    "import": "/engine/core/math/SignalQualityMath.js",
    "sourceHash": "67078c6a522c41c4a34afa8e0fe90123b8708f3484dd0c05d5ace9040d1a4347",
    "summary": "SignalQualityMath.js - reusable signal/link health scoring for radio and WebRTC diagnostics.",
    "exports": [
      {
        "name": "signalLevelQualityScore",
        "kind": "function",
        "signature": "signalLevelQualityScore(valueDb, options = {})",
        "summary": ""
      },
      {
        "name": "signalDeliveryQualityScore",
        "kind": "function",
        "signature": "signalDeliveryQualityScore(options = {})",
        "summary": ""
      },
      {
        "name": "signalLatencyQualityScore",
        "kind": "function",
        "signature": "signalLatencyQualityScore(rttMs, options = {})",
        "summary": ""
      },
      {
        "name": "signalJitterQualityScore",
        "kind": "function",
        "signature": "signalJitterQualityScore(jitterMs, options = {})",
        "summary": ""
      },
      {
        "name": "signalBitrateQualityScore",
        "kind": "function",
        "signature": "signalBitrateQualityScore(bitrateBps, options = {})",
        "summary": ""
      },
      {
        "name": "signalQualityReport",
        "kind": "function",
        "signature": "signalQualityReport(options = {})",
        "summary": ""
      },
      {
        "name": "webrtcStatsSignalReport",
        "kind": "function",
        "signature": "webrtcStatsSignalReport(stats, options = {})",
        "summary": ""
      },
      {
        "name": "signalQualityTrendReport",
        "kind": "function",
        "signature": "signalQualityTrendReport(samples = [], options = {})",
        "summary": ""
      },
      {
        "name": "SIGNAL_QUALITY_DEFAULT_WEIGHTS",
        "kind": "constant",
        "signature": "SIGNAL_QUALITY_DEFAULT_WEIGHTS",
        "summary": ""
      },
      {
        "name": "SIGNAL_QUALITY_DEFAULT_MAX_LOSS_RATIO",
        "kind": "constant",
        "signature": "SIGNAL_QUALITY_DEFAULT_MAX_LOSS_RATIO",
        "summary": ""
      },
      {
        "name": "SIGNAL_QUALITY_DEFAULT_TARGET_RTT_MS",
        "kind": "constant",
        "signature": "SIGNAL_QUALITY_DEFAULT_TARGET_RTT_MS",
        "summary": ""
      },
      {
        "name": "SIGNAL_QUALITY_DEFAULT_MAX_RTT_MS",
        "kind": "constant",
        "signature": "SIGNAL_QUALITY_DEFAULT_MAX_RTT_MS",
        "summary": ""
      },
      {
        "name": "SIGNAL_QUALITY_DEFAULT_TARGET_JITTER_MS",
        "kind": "constant",
        "signature": "SIGNAL_QUALITY_DEFAULT_TARGET_JITTER_MS",
        "summary": ""
      },
      {
        "name": "SIGNAL_QUALITY_DEFAULT_MAX_JITTER_MS",
        "kind": "constant",
        "signature": "SIGNAL_QUALITY_DEFAULT_MAX_JITTER_MS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/SpatialHash",
    "path": "engine/reference/core/math/SpatialHash.md",
    "source": "engine/core/math/SpatialHash.js",
    "import": "/engine/core/math/SpatialHash.js",
    "sourceHash": "d43a46a0d6e893a726d6311db81f0fe0db85756ff1acb033aed558d395c881b2",
    "summary": "SpatialHash.js - Fast spatial queries for particles and entities Uses a grid-based hash for O(1) average-case neighbor queries.",
    "exports": [
      {
        "name": "SpatialHash",
        "kind": "class",
        "signature": "class SpatialHash",
        "summary": "SpatialHash.js - Fast spatial queries for particles and entities Uses a grid-based hash for O(1) average-case neighbor queries."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/SpatialHashCompute",
    "path": "engine/reference/core/math/SpatialHashCompute.md",
    "source": "engine/core/math/SpatialHashCompute.js",
    "import": "/engine/core/math/SpatialHashCompute.js",
    "sourceHash": "be6c41e76886c0f9bb8788f6992ddab404612506e94e9cfb79978561f1001ad9",
    "summary": "",
    "exports": [
      {
        "name": "SpatialHashCompute",
        "kind": "class",
        "signature": "class SpatialHashCompute",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/TensorShapeMath",
    "path": "engine/reference/core/math/TensorShapeMath.md",
    "source": "engine/core/math/TensorShapeMath.js",
    "import": "/engine/core/math/TensorShapeMath.js",
    "sourceHash": "52ccff79dfcb9e8459595109ebdedc051f5bd7d6942805e86bde94b6ac141eda",
    "summary": "TensorShapeMath.js - reusable tensor shape, broadcast, stride, dtype, and graph memory reports.",
    "exports": [
      {
        "name": "normalizeTensorShape",
        "kind": "function",
        "signature": "normalizeTensorShape(shape, options = {})",
        "summary": ""
      },
      {
        "name": "tensorElementCount",
        "kind": "function",
        "signature": "tensorElementCount(shape, options = {})",
        "summary": ""
      },
      {
        "name": "tensorDTypeByteSize",
        "kind": "function",
        "signature": "tensorDTypeByteSize(dtype)",
        "summary": ""
      },
      {
        "name": "contiguousStrides",
        "kind": "function",
        "signature": "contiguousStrides(shape, options = {})",
        "summary": ""
      },
      {
        "name": "tensorIndexToOffset",
        "kind": "function",
        "signature": "tensorIndexToOffset(indices, strides, options = {})",
        "summary": ""
      },
      {
        "name": "tensorOffsetToIndices",
        "kind": "function",
        "signature": "tensorOffsetToIndices(offset, shape, options = {})",
        "summary": ""
      },
      {
        "name": "broadcastShapes",
        "kind": "function",
        "signature": "broadcastShapes(...inputShapes)",
        "summary": ""
      },
      {
        "name": "broadcastReport",
        "kind": "function",
        "signature": "broadcastReport(inputShapes)",
        "summary": ""
      },
      {
        "name": "unidirectionalBroadcastShape",
        "kind": "function",
        "signature": "unidirectionalBroadcastShape(shapeFrom, shapeTo)",
        "summary": ""
      },
      {
        "name": "blockwiseBroadcastReport",
        "kind": "function",
        "signature": "blockwiseBroadcastReport(shapeFrom, shapeTo)",
        "summary": ""
      },
      {
        "name": "reshapeReport",
        "kind": "function",
        "signature": "reshapeReport(inputShape, targetShape, options = {})",
        "summary": ""
      },
      {
        "name": "tensorLayoutReport",
        "kind": "function",
        "signature": "tensorLayoutReport(shape, options = {})",
        "summary": ""
      },
      {
        "name": "tensorBufferSizeReport",
        "kind": "function",
        "signature": "tensorBufferSizeReport(shape, dtype = 'float32', options = {})",
        "summary": ""
      },
      {
        "name": "reductionShape",
        "kind": "function",
        "signature": "reductionShape(shape, axes, options = {})",
        "summary": ""
      },
      {
        "name": "matmulShapeReport",
        "kind": "function",
        "signature": "matmulShapeReport(shapeA, shapeB)",
        "summary": ""
      },
      {
        "name": "elementwiseShapeReport",
        "kind": "function",
        "signature": "elementwiseShapeReport(inputShapes)",
        "summary": ""
      },
      {
        "name": "tensorGraphMemoryReport",
        "kind": "function",
        "signature": "tensorGraphMemoryReport(tensors, options = {})",
        "summary": ""
      },
      {
        "name": "TENSOR_DTYPE_BYTE_SIZE",
        "kind": "constant",
        "signature": "TENSOR_DTYPE_BYTE_SIZE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/TextMetricMath",
    "path": "engine/reference/core/math/TextMetricMath.md",
    "source": "engine/core/math/TextMetricMath.js",
    "import": "/engine/core/math/TextMetricMath.js",
    "sourceHash": "a2b80f4fd55cd689dad46e3a15eaaa409f3774a19dc6f85eff02f51ba5fba741",
    "summary": "TextMetricMath.js - grapheme, text-run, wrap, baseline, selection, and glyph-atlas reports.",
    "exports": [
      {
        "name": "textGraphemeSegments",
        "kind": "function",
        "signature": "textGraphemeSegments(text, options = {})",
        "summary": ""
      },
      {
        "name": "textGraphemeBoundaries",
        "kind": "function",
        "signature": "textGraphemeBoundaries(text, options = {})",
        "summary": ""
      },
      {
        "name": "textCursorAdvance",
        "kind": "function",
        "signature": "textCursorAdvance(text, offset = 0, direction = 1, options = {})",
        "summary": ""
      },
      {
        "name": "textRunMetricReport",
        "kind": "function",
        "signature": "textRunMetricReport(text, options = {})",
        "summary": ""
      },
      {
        "name": "textBidiRunReport",
        "kind": "function",
        "signature": "textBidiRunReport(text, options = {})",
        "summary": ""
      },
      {
        "name": "textLineBreakOpportunityReport",
        "kind": "function",
        "signature": "textLineBreakOpportunityReport(text, options = {})",
        "summary": ""
      },
      {
        "name": "textLineWrapReport",
        "kind": "function",
        "signature": "textLineWrapReport(text, maxWidth = Infinity, options = {})",
        "summary": ""
      },
      {
        "name": "textTruncateReport",
        "kind": "function",
        "signature": "textTruncateReport(text, maxWidth = Infinity, options = {})",
        "summary": ""
      },
      {
        "name": "textBaselineReport",
        "kind": "function",
        "signature": "textBaselineReport(metrics = {}, options = {})",
        "summary": ""
      },
      {
        "name": "textSelectionRects",
        "kind": "function",
        "signature": "textSelectionRects(wrapReport, start = 0, end = start, options = {})",
        "summary": ""
      },
      {
        "name": "glyphAtlasPlacementReport",
        "kind": "function",
        "signature": "glyphAtlasPlacementReport(glyphs = [], options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/TextureMath",
    "path": "engine/reference/core/math/TextureMath.md",
    "source": "engine/core/math/TextureMath.js",
    "import": "/engine/core/math/TextureMath.js",
    "sourceHash": "20dc9b3406e54f1e5fc6989e43c8e4b323a47b6e13d6f26951d4a69b69c2b49b",
    "summary": "TextureMath.js - shared UV, atlas, format, and mip pyramid helpers.",
    "exports": [
      {
        "name": "uvWrap",
        "kind": "function",
        "signature": "uvWrap(uv, min = [0, 0], max = [1, 1])",
        "summary": ""
      },
      {
        "name": "uvClamp",
        "kind": "function",
        "signature": "uvClamp(uv, min = [0, 0], max = [1, 1])",
        "summary": ""
      },
      {
        "name": "uvMirror",
        "kind": "function",
        "signature": "uvMirror(uv)",
        "summary": ""
      },
      {
        "name": "tileUV",
        "kind": "function",
        "signature": "tileUV(uv, scale = [1, 1], offset = [0, 0])",
        "summary": ""
      },
      {
        "name": "textureTransformUV",
        "kind": "function",
        "signature": "textureTransformUV(uv, transform = {})",
        "summary": ""
      },
      {
        "name": "atlasUVTransform",
        "kind": "function",
        "signature": "atlasUVTransform(x, y, width, height, atlasWidth, atlasHeight = atlasWidth)",
        "summary": ""
      },
      {
        "name": "textureMipExtent3D",
        "kind": "function",
        "signature": "textureMipExtent3D(width, height = width, depth = 1, mipLevel = 0)",
        "summary": ""
      },
      {
        "name": "atlasUV",
        "kind": "function",
        "signature": "atlasUV(uv, transform)",
        "summary": ""
      },
      {
        "name": "atlasPaddedExtent",
        "kind": "function",
        "signature": "atlasPaddedExtent(width, height = width, padding = 1)",
        "summary": ""
      },
      {
        "name": "atlasContentRect",
        "kind": "function",
        "signature": "atlasContentRect(x, y, width, height, padding = 1)",
        "summary": ""
      },
      {
        "name": "atlasPaddedRectFromContent",
        "kind": "function",
        "signature": "atlasPaddedRectFromContent(x, y, width, height, padding = 1)",
        "summary": ""
      },
      {
        "name": "atlasPaddedArea",
        "kind": "function",
        "signature": "atlasPaddedArea(width, height, padding = 1)",
        "summary": ""
      },
      {
        "name": "atlasRegionUVs",
        "kind": "function",
        "signature": "atlasRegionUVs(x, y, width, height, atlasWidth, atlasHeight = atlasWidth)",
        "summary": ""
      },
      {
        "name": "virtualTexturePageGrid",
        "kind": "function",
        "signature": "virtualTexturePageGrid(pageTableWidth = 2048, pageTableHeight = pageTableWidth)",
        "summary": ""
      },
      {
        "name": "virtualTexturePageId",
        "kind": "function",
        "signature": "virtualTexturePageId(pageX, pageY, pageTableWidth = 2048, pageTableHeight = pageTableWidth)",
        "summary": ""
      },
      {
        "name": "virtualTexturePageCoord",
        "kind": "function",
        "signature": "virtualTexturePageCoord(pageId, pageTableWidth = 2048, pageTableHeight = pageTableWidth)",
        "summary": ""
      },
      {
        "name": "virtualTexturePageCoordFromUV",
        "kind": "function",
        "signature": "virtualTexturePageCoordFromUV(uv, pageTableWidth = 2048, pageTableHeight = pageTableWidth)",
        "summary": ""
      },
      {
        "name": "virtualTexturePhysicalPageGrid",
        "kind": "function",
        "signature": "virtualTexturePhysicalPageGrid(cacheWidth = 4096, pageSize = 256, cacheHeight = cacheWidth)",
        "summary": ""
      },
      {
        "name": "virtualTexturePhysicalPageOrigin",
        "kind": "function",
        "signature": "virtualTexturePhysicalPageOrigin(slotIndex, cacheWidth = 4096, pageSize = 256, cacheHeight = cacheWidth)",
        "summary": ""
      },
      {
        "name": "virtualTexturePhysicalUV",
        "kind": "function",
        "signature": "virtualTexturePhysicalUV(uv, physicalPage, { pageTableWidth = 2048, pageTableHeight = pageTableWidth, pageSize = 256, cacheWidth = 4096, cacheHeight = cacheWidth, } = {})",
        "summary": ""
      },
      {
        "name": "virtualTexturePageTableEntry",
        "kind": "function",
        "signature": "virtualTexturePageTableEntry(pageId, physicalLocation, { pageTableWidth = 2048, pageTableHeight = pageTableWidth, pageSize = 256, resident = 1, reserved = 0, } = {})",
        "summary": ""
      },
      {
        "name": "virtualTextureFeedbackBufferLayout",
        "kind": "function",
        "signature": "virtualTextureFeedbackBufferLayout(pageTableWidth = 2048, pageTableHeight = pageTableWidth, bytesPerFlag = 4)",
        "summary": ""
      },
      {
        "name": "virtualTextureFeedbackBufferByteSize",
        "kind": "function",
        "signature": "virtualTextureFeedbackBufferByteSize(pageTableWidth = 2048, pageTableHeight = pageTableWidth, bytesPerFlag = 4)",
        "summary": ""
      },
      {
        "name": "virtualTextureFeedbackIndex",
        "kind": "function",
        "signature": "virtualTextureFeedbackIndex(pageId, pageTableWidth = 2048, pageTableHeight = pageTableWidth)",
        "summary": ""
      },
      {
        "name": "compactVirtualTextureFeedback",
        "kind": "function",
        "signature": "compactVirtualTextureFeedback(feedbackData, { pageTableWidth = 2048, pageTableHeight = pageTableWidth, maxRequests = Infinity, residentPages = null, } = {})",
        "summary": ""
      },
      {
        "name": "pixelToUV",
        "kind": "function",
        "signature": "pixelToUV(pixel, textureSize, centered = false)",
        "summary": ""
      },
      {
        "name": "uvToPixel",
        "kind": "function",
        "signature": "uvToPixel(uv, textureSize, centered = false)",
        "summary": ""
      },
      {
        "name": "triplanarWeights",
        "kind": "function",
        "signature": "triplanarWeights(normal, sharpness = 1)",
        "summary": ""
      },
      {
        "name": "textureMipLevelCount",
        "kind": "function",
        "signature": "textureMipLevelCount(width, height = width, depth = 1, maxMipLevels = Infinity)",
        "summary": ""
      },
      {
        "name": "textureMipExtent",
        "kind": "function",
        "signature": "textureMipExtent(width, height, mipLevel = 0)",
        "summary": ""
      },
      {
        "name": "textureMipByteSize",
        "kind": "function",
        "signature": "textureMipByteSize(width, height, bytesPerPixel = 4, mipLevels = 1, depthOrArrayLayers = 1)",
        "summary": ""
      },
      {
        "name": "textureFormatBlockInfo",
        "kind": "function",
        "signature": "textureFormatBlockInfo(format = 'rgba8unorm', fallbackBytesPerPixel = 4)",
        "summary": ""
      },
      {
        "name": "textureFormatFamily",
        "kind": "function",
        "signature": "textureFormatFamily(format = 'rgba8unorm')",
        "summary": ""
      },
      {
        "name": "textureFormatFeature",
        "kind": "function",
        "signature": "textureFormatFeature(format = 'rgba8unorm')",
        "summary": ""
      },
      {
        "name": "textureFormatAlphaMode",
        "kind": "function",
        "signature": "textureFormatAlphaMode(format = 'rgba8unorm')",
        "summary": ""
      },
      {
        "name": "textureFormatIsSupported",
        "kind": "function",
        "signature": "textureFormatIsSupported(format = 'rgba8unorm', features = null)",
        "summary": ""
      },
      {
        "name": "textureDefaultTranscodeTargets",
        "kind": "function",
        "signature": "textureDefaultTranscodeTargets({ needsAlpha = true, preferSrgb = false } = {})",
        "summary": ""
      },
      {
        "name": "textureBytesPerPixel",
        "kind": "function",
        "signature": "textureBytesPerPixel(format = 'rgba8unorm', fallbackBytesPerPixel = 4)",
        "summary": ""
      },
      {
        "name": "textureFormatBitsPerPixel",
        "kind": "function",
        "signature": "textureFormatBitsPerPixel(format = 'rgba8unorm', fallbackBytesPerPixel = 4)",
        "summary": ""
      },
      {
        "name": "textureMipBlockExtent",
        "kind": "function",
        "signature": "textureMipBlockExtent(width, height, format = 'rgba8unorm', mipLevel = 0)",
        "summary": ""
      },
      {
        "name": "textureMipBlockExtent3D",
        "kind": "function",
        "signature": "textureMipBlockExtent3D(width, height, depth = 1, format = 'rgba8unorm', mipLevel = 0)",
        "summary": ""
      },
      {
        "name": "textureFormatMipByteSize",
        "kind": "function",
        "signature": "textureFormatMipByteSize(width, height, format = 'rgba8unorm', mipLevels = 1, depthOrArrayLayers = 1)",
        "summary": ""
      },
      {
        "name": "textureDescriptorByteSize",
        "kind": "function",
        "signature": "textureDescriptorByteSize(descriptor = {})",
        "summary": ""
      },
      {
        "name": "textureContainerLevelByteSize",
        "kind": "function",
        "signature": "textureContainerLevelByteSize({ width, height = width, depth = 1, format = 'rgba8unorm', mipLevel = 0, layerCount = 1, faceCount = 1, } = {})",
        "summary": ""
      },
      {
        "name": "textureKtxLevelAlignment",
        "kind": "function",
        "signature": "textureKtxLevelAlignment(format = 'rgba8unorm', supercompressionScheme = 0)",
        "summary": ""
      },
      {
        "name": "alignByteOffset",
        "kind": "function",
        "signature": "alignByteOffset(byteOffset, alignment = 1)",
        "summary": ""
      },
      {
        "name": "textureKtxMipPadding",
        "kind": "function",
        "signature": "textureKtxMipPadding(byteOffset, format = 'rgba8unorm', supercompressionScheme = 0)",
        "summary": ""
      },
      {
        "name": "textureKtxSupercompressionSchemeInfo",
        "kind": "function",
        "signature": "textureKtxSupercompressionSchemeInfo(supercompressionScheme = 0)",
        "summary": ""
      },
      {
        "name": "textureKtxSupercompressionLevelReport",
        "kind": "function",
        "signature": "textureKtxSupercompressionLevelReport({ byteLength = 0, uncompressedByteLength = byteLength, supercompressionScheme = 0, expectedUncompressedByteLength = null, faceCount = 1, layerCount = 1, } = {})",
        "summary": ""
      },
      {
        "name": "textureKtxSupercompressionGlobalDataRange",
        "kind": "function",
        "signature": "textureKtxSupercompressionGlobalDataRange({ byteOffset = 0, byteLength = 0, precedingByteEnd = 0, supercompressionScheme = 0, } = {})",
        "summary": ""
      },
      {
        "name": "textureKtxSupercompressionPolicy",
        "kind": "function",
        "signature": "textureKtxSupercompressionPolicy({ supercompressionScheme = 0, levels = [], expectedUncompressedByteLengths = null, sgdByteOffset = 0, sgdByteLength = 0, precedingByteEnd = 0, faceCount = 1, layerCount = 1, } = {})",
        "summary": ""
      },
      {
        "name": "textureContainerImageLayout",
        "kind": "function",
        "signature": "textureContainerImageLayout({ width, height = width, depth = 1, format = 'rgba8unorm', mipLevel = 0, layerCount = 1, faceCount = 1, } = {})",
        "summary": ""
      },
      {
        "name": "textureContainerImageByteOffset",
        "kind": "function",
        "signature": "textureContainerImageByteOffset(layout, layer = 0, face = 0, zSlice = 0)",
        "summary": ""
      },
      {
        "name": "textureWebGpuUploadLayout",
        "kind": "function",
        "signature": "textureWebGpuUploadLayout({ width, height = width, depthOrArrayLayers = 1, format = 'rgba8unorm', mipLevel = 0, offset = 0, bytesPerRowAlignment = 1, copyBufferToTexture = false, } = {})",
        "summary": ""
      },
      {
        "name": "textureKtxLevelLayout",
        "kind": "function",
        "signature": "textureKtxLevelLayout({ width, height = width, depth = 1, format = 'rgba8unorm', levelCount = textureMipLevelCount(width, height, depth)",
        "summary": ""
      },
      {
        "name": "textureMemorySavingsRatio",
        "kind": "function",
        "signature": "textureMemorySavingsRatio(width, height, compressedFormat, referenceFormat = 'rgba8unorm', mipLevels = 1)",
        "summary": ""
      },
      {
        "name": "textureQualitySizeScore",
        "kind": "function",
        "signature": "textureQualitySizeScore({ width, height = width, format = 'rgba8unorm', referenceFormat = 'rgba8unorm', mipLevels = 1, depthOrArrayLayers = 1, quality = 1, byteBudget = Infinity, budgetBytes = byteBudget, qualityWeight = 0.7, sizeWeight = 0.3, budgetWeight, } = {})",
        "summary": ""
      },
      {
        "name": "textureTranscodeTargetScore",
        "kind": "function",
        "signature": "textureTranscodeTargetScore(target, { width, height = width, referenceFormat = 'rgba8unorm', mipLevels = 1, depthOrArrayLayers = 1, supportedFeatures = null, needsAlpha = true, allowPunchthroughAlpha = false, preferSrgb = false, byteBudget = Infinity, qualityWeight = 0.7, sizeWeight = 0.3, budgetWeight, } = {})",
        "summary": ""
      },
      {
        "name": "textureRankTranscodeTargets",
        "kind": "function",
        "signature": "textureRankTranscodeTargets({ candidates = null, needsAlpha = true, preferSrgb = false, ...options } = {})",
        "summary": ""
      },
      {
        "name": "textureSelectTranscodeTarget",
        "kind": "function",
        "signature": "textureSelectTranscodeTarget(options = {})",
        "summary": ""
      },
      {
        "name": "textureStreamingPriorityScore",
        "kind": "function",
        "signature": "textureStreamingPriorityScore({ priority = 0, distance = Infinity, lastUsedFrame = 0, frameIndex = 0, distanceScale = 0.01, recencyScale = 0.1, distanceWeight = 10, recencyWeight = 5, } = {})",
        "summary": ""
      },
      {
        "name": "mipLevelFromPixelSize",
        "kind": "function",
        "signature": "mipLevelFromPixelSize(pixelSize, maxMipLevel = Infinity)",
        "summary": ""
      },
      {
        "name": "textureFade",
        "kind": "function",
        "signature": "textureFade(distance, fadeStart, fadeEnd)",
        "summary": ""
      },
      {
        "name": "TEXTURE_FORMAT_BLOCKS",
        "kind": "constant",
        "signature": "TEXTURE_FORMAT_BLOCKS",
        "summary": ""
      },
      {
        "name": "TEXTURE_TRANSCODE_TARGETS",
        "kind": "constant",
        "signature": "TEXTURE_TRANSCODE_TARGETS",
        "summary": ""
      },
      {
        "name": "KTX_SUPERCOMPRESSION_SCHEMES",
        "kind": "constant",
        "signature": "KTX_SUPERCOMPRESSION_SCHEMES",
        "summary": ""
      },
      {
        "name": "WEBGPU_COPY_BYTES_PER_ROW_ALIGNMENT",
        "kind": "constant",
        "signature": "WEBGPU_COPY_BYTES_PER_ROW_ALIGNMENT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/UILayoutMath",
    "path": "engine/reference/core/math/UILayoutMath.md",
    "source": "engine/core/math/UILayoutMath.js",
    "import": "/engine/core/math/UILayoutMath.js",
    "sourceHash": "f1030128260446b3231aec2842263de2f39c4d416662281e2829d00b7cf5a50a",
    "summary": "UILayoutMath.js - pure CSS/UI length, constraint, and responsive layout reports.",
    "exports": [
      {
        "name": "uiCssUnitMetadata",
        "kind": "function",
        "signature": "uiCssUnitMetadata(unit, context = {})",
        "summary": ""
      },
      {
        "name": "uiCssMathFunctionReport",
        "kind": "function",
        "signature": "uiCssMathFunctionReport(value, context = {})",
        "summary": ""
      },
      {
        "name": "uiLayoutValueReport",
        "kind": "function",
        "signature": "uiLayoutValueReport(value, context = {})",
        "summary": ""
      },
      {
        "name": "uiPercentageBasisReport",
        "kind": "function",
        "signature": "uiPercentageBasisReport(value, basis, options = {})",
        "summary": ""
      },
      {
        "name": "uiViewportUnitReport",
        "kind": "function",
        "signature": "uiViewportUnitReport(value, viewport = {}, options = {})",
        "summary": ""
      },
      {
        "name": "uiSafeAreaInsetReport",
        "kind": "function",
        "signature": "uiSafeAreaInsetReport(insets = {}, options = {})",
        "summary": ""
      },
      {
        "name": "uiVisualViewportReport",
        "kind": "function",
        "signature": "uiVisualViewportReport(observed = {}, options = {})",
        "summary": ""
      },
      {
        "name": "uiLayoutClampReport",
        "kind": "function",
        "signature": "uiLayoutClampReport(value, minValue, maxValue, context = {})",
        "summary": ""
      },
      {
        "name": "uiBoxConstraintReport",
        "kind": "function",
        "signature": "uiBoxConstraintReport(style = {}, context = {})",
        "summary": ""
      },
      {
        "name": "uiFlexBasisReport",
        "kind": "function",
        "signature": "uiFlexBasisReport(style = {}, context = {})",
        "summary": ""
      },
      {
        "name": "uiFitContentReport",
        "kind": "function",
        "signature": "uiFitContentReport(options = {})",
        "summary": ""
      },
      {
        "name": "uiIntrinsicSizePolicyReport",
        "kind": "function",
        "signature": "uiIntrinsicSizePolicyReport(value = 'auto', options = {})",
        "summary": ""
      },
      {
        "name": "uiGridTrackSizingReport",
        "kind": "function",
        "signature": "uiGridTrackSizingReport(trackList = [], options = {})",
        "summary": ""
      },
      {
        "name": "uiResponsiveStepReport",
        "kind": "function",
        "signature": "uiResponsiveStepReport(value, steps = [], options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/UnionFind",
    "path": "engine/reference/core/math/UnionFind.md",
    "source": "engine/core/math/UnionFind.js",
    "import": "/engine/core/math/UnionFind.js",
    "sourceHash": "1a2b5e244ac84ee18555e6c12be39c8b3c0da70266870e7af3509bde17f96cc5",
    "summary": "Union-Find specialized for 3D voxel grids",
    "exports": [
      {
        "name": "UnionFind",
        "kind": "class",
        "signature": "class UnionFind",
        "summary": ""
      },
      {
        "name": "VoxelUnionFind",
        "kind": "class",
        "signature": "class VoxelUnionFind extends UnionFind",
        "summary": "Union-Find specialized for 3D voxel grids"
      },
      {
        "name": "HybridConnectivity",
        "kind": "class",
        "signature": "class HybridConnectivity",
        "summary": "Combines GPU flood-fill for initial/full recomputes with CPU Union-Find for incremental updates"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/UnitMath",
    "path": "engine/reference/core/math/UnitMath.md",
    "source": "engine/core/math/UnitMath.js",
    "import": "/engine/core/math/UnitMath.js",
    "sourceHash": "62ed3ffe556dd5b732b8118a48f0395f9d4c9c3cacb449b67eea0e22019f0043",
    "summary": "UnitMath.js - deterministic scalar unit conversion helpers.",
    "exports": [
      {
        "name": "angleToRadians",
        "kind": "function",
        "signature": "angleToRadians(value, unit = 'rad')",
        "summary": ""
      },
      {
        "name": "radiansToAngle",
        "kind": "function",
        "signature": "radiansToAngle(radians, unit = 'rad')",
        "summary": ""
      },
      {
        "name": "secondsToFrames",
        "kind": "function",
        "signature": "secondsToFrames(seconds, frameRate = DEFAULT_FRAME_RATE)",
        "summary": ""
      },
      {
        "name": "framesToSeconds",
        "kind": "function",
        "signature": "framesToSeconds(frames, frameRate = DEFAULT_FRAME_RATE)",
        "summary": ""
      },
      {
        "name": "millisecondsToFrames",
        "kind": "function",
        "signature": "millisecondsToFrames(milliseconds, frameRate = DEFAULT_FRAME_RATE)",
        "summary": ""
      },
      {
        "name": "framesToMilliseconds",
        "kind": "function",
        "signature": "framesToMilliseconds(frames, frameRate = DEFAULT_FRAME_RATE)",
        "summary": ""
      },
      {
        "name": "secondsToSamples",
        "kind": "function",
        "signature": "secondsToSamples(seconds, sampleRate = DEFAULT_SAMPLE_RATE)",
        "summary": ""
      },
      {
        "name": "samplesToSeconds",
        "kind": "function",
        "signature": "samplesToSeconds(samples, sampleRate = DEFAULT_SAMPLE_RATE)",
        "summary": ""
      },
      {
        "name": "sampleIndexAtTime",
        "kind": "function",
        "signature": "sampleIndexAtTime(seconds, sampleRate = DEFAULT_SAMPLE_RATE)",
        "summary": ""
      },
      {
        "name": "samplesToMilliseconds",
        "kind": "function",
        "signature": "samplesToMilliseconds(samples, sampleRate = DEFAULT_SAMPLE_RATE)",
        "summary": ""
      },
      {
        "name": "millisecondsToSamples",
        "kind": "function",
        "signature": "millisecondsToSamples(milliseconds, sampleRate = DEFAULT_SAMPLE_RATE)",
        "summary": ""
      },
      {
        "name": "bpmToSecondsPerBeat",
        "kind": "function",
        "signature": "bpmToSecondsPerBeat(bpm = DEFAULT_BPM)",
        "summary": ""
      },
      {
        "name": "secondsPerBeatToBpm",
        "kind": "function",
        "signature": "secondsPerBeatToBpm(secondsPerBeat)",
        "summary": ""
      },
      {
        "name": "beatsToSeconds",
        "kind": "function",
        "signature": "beatsToSeconds(beats, bpm = DEFAULT_BPM)",
        "summary": ""
      },
      {
        "name": "secondsToBeats",
        "kind": "function",
        "signature": "secondsToBeats(seconds, bpm = DEFAULT_BPM)",
        "summary": ""
      },
      {
        "name": "frequencyToPeriodSeconds",
        "kind": "function",
        "signature": "frequencyToPeriodSeconds(frequencyHz)",
        "summary": ""
      },
      {
        "name": "periodSecondsToFrequencyHz",
        "kind": "function",
        "signature": "periodSecondsToFrequencyHz(periodSeconds)",
        "summary": ""
      },
      {
        "name": "frequencyToWavelengthMeters",
        "kind": "function",
        "signature": "frequencyToWavelengthMeters(frequencyHz, waveSpeed = SPEED_OF_LIGHT)",
        "summary": ""
      },
      {
        "name": "wavelengthMetersToFrequencyHz",
        "kind": "function",
        "signature": "wavelengthMetersToFrequencyHz(wavelengthMeters, waveSpeed = SPEED_OF_LIGHT)",
        "summary": ""
      },
      {
        "name": "gainToDb",
        "kind": "function",
        "signature": "gainToDb(gain, floorDb = -Infinity)",
        "summary": ""
      },
      {
        "name": "powerRatioToDb",
        "kind": "function",
        "signature": "powerRatioToDb(powerRatio, floorDb = -Infinity)",
        "summary": ""
      },
      {
        "name": "frequencyRatioToCents",
        "kind": "function",
        "signature": "frequencyRatioToCents(ratio, floorCents = -Infinity)",
        "summary": ""
      },
      {
        "name": "cssPixelsToDevicePixels",
        "kind": "function",
        "signature": "cssPixelsToDevicePixels(cssPixels, devicePixelRatio = 1)",
        "summary": ""
      },
      {
        "name": "devicePixelsToCssPixels",
        "kind": "function",
        "signature": "devicePixelsToCssPixels(devicePixels, devicePixelRatio = 1)",
        "summary": ""
      },
      {
        "name": "worldUnitsToGridIndex",
        "kind": "function",
        "signature": "worldUnitsToGridIndex(worldValue, cellSize = 1, origin = 0)",
        "summary": ""
      },
      {
        "name": "gridIndexToWorldUnits",
        "kind": "function",
        "signature": "gridIndexToWorldUnits(gridIndex, cellSize = 1, origin = 0, centered = false)",
        "summary": ""
      },
      {
        "name": "worldUnitsToChunkIndex",
        "kind": "function",
        "signature": "worldUnitsToChunkIndex(worldValue, chunkCells = 16, cellSize = 1, origin = 0)",
        "summary": ""
      },
      {
        "name": "chunkIndexToWorldUnits",
        "kind": "function",
        "signature": "chunkIndexToWorldUnits(chunkIndex, chunkCells = 16, cellSize = 1, origin = 0, centered = false)",
        "summary": ""
      },
      {
        "name": "worldUnitsToLocalChunkIndex",
        "kind": "function",
        "signature": "worldUnitsToLocalChunkIndex(worldValue, chunkCells = 16, cellSize = 1, origin = 0)",
        "summary": ""
      },
      {
        "name": "degreesToRadians",
        "kind": "function",
        "signature": "degreesToRadians(degrees)",
        "summary": ""
      },
      {
        "name": "radiansToDegrees",
        "kind": "function",
        "signature": "radiansToDegrees(radians)",
        "summary": ""
      },
      {
        "name": "degreesToTurns",
        "kind": "function",
        "signature": "degreesToTurns(degrees)",
        "summary": ""
      },
      {
        "name": "turnsToDegrees",
        "kind": "function",
        "signature": "turnsToDegrees(turns)",
        "summary": ""
      },
      {
        "name": "radiansToTurns",
        "kind": "function",
        "signature": "radiansToTurns(radians)",
        "summary": ""
      },
      {
        "name": "turnsToRadians",
        "kind": "function",
        "signature": "turnsToRadians(turns)",
        "summary": ""
      },
      {
        "name": "degreesToGradians",
        "kind": "function",
        "signature": "degreesToGradians(degrees)",
        "summary": ""
      },
      {
        "name": "gradiansToDegrees",
        "kind": "function",
        "signature": "gradiansToDegrees(gradians)",
        "summary": ""
      },
      {
        "name": "radiansToGradians",
        "kind": "function",
        "signature": "radiansToGradians(radians)",
        "summary": ""
      },
      {
        "name": "gradiansToRadians",
        "kind": "function",
        "signature": "gradiansToRadians(gradians)",
        "summary": ""
      },
      {
        "name": "turnsToGradians",
        "kind": "function",
        "signature": "turnsToGradians(turns)",
        "summary": ""
      },
      {
        "name": "gradiansToTurns",
        "kind": "function",
        "signature": "gradiansToTurns(gradians)",
        "summary": ""
      },
      {
        "name": "secondsToMilliseconds",
        "kind": "function",
        "signature": "secondsToMilliseconds(seconds)",
        "summary": ""
      },
      {
        "name": "millisecondsToSeconds",
        "kind": "function",
        "signature": "millisecondsToSeconds(milliseconds)",
        "summary": ""
      },
      {
        "name": "secondsToMinutes",
        "kind": "function",
        "signature": "secondsToMinutes(seconds)",
        "summary": ""
      },
      {
        "name": "minutesToSeconds",
        "kind": "function",
        "signature": "minutesToSeconds(minutes)",
        "summary": ""
      },
      {
        "name": "minutesToHours",
        "kind": "function",
        "signature": "minutesToHours(minutes)",
        "summary": ""
      },
      {
        "name": "hoursToMinutes",
        "kind": "function",
        "signature": "hoursToMinutes(hours)",
        "summary": ""
      },
      {
        "name": "hoursToSeconds",
        "kind": "function",
        "signature": "hoursToSeconds(hours)",
        "summary": ""
      },
      {
        "name": "secondsToHours",
        "kind": "function",
        "signature": "secondsToHours(seconds)",
        "summary": ""
      },
      {
        "name": "daysToSeconds",
        "kind": "function",
        "signature": "daysToSeconds(days)",
        "summary": ""
      },
      {
        "name": "secondsToDays",
        "kind": "function",
        "signature": "secondsToDays(seconds)",
        "summary": ""
      },
      {
        "name": "bpmToHz",
        "kind": "function",
        "signature": "bpmToHz(bpm = DEFAULT_BPM)",
        "summary": ""
      },
      {
        "name": "hzToBpm",
        "kind": "function",
        "signature": "hzToBpm(frequencyHz)",
        "summary": ""
      },
      {
        "name": "hzToKhz",
        "kind": "function",
        "signature": "hzToKhz(frequencyHz)",
        "summary": ""
      },
      {
        "name": "khzToHz",
        "kind": "function",
        "signature": "khzToHz(frequencyKHz)",
        "summary": ""
      },
      {
        "name": "dbToGain",
        "kind": "function",
        "signature": "dbToGain(db)",
        "summary": ""
      },
      {
        "name": "dbToPowerRatio",
        "kind": "function",
        "signature": "dbToPowerRatio(db)",
        "summary": ""
      },
      {
        "name": "centsToFrequencyRatio",
        "kind": "function",
        "signature": "centsToFrequencyRatio(cents)",
        "summary": ""
      },
      {
        "name": "bitsToBytes",
        "kind": "function",
        "signature": "bitsToBytes(bits)",
        "summary": ""
      },
      {
        "name": "bytesToBits",
        "kind": "function",
        "signature": "bytesToBits(bytes)",
        "summary": ""
      },
      {
        "name": "bytesToKiB",
        "kind": "function",
        "signature": "bytesToKiB(bytes)",
        "summary": ""
      },
      {
        "name": "kiBToBytes",
        "kind": "function",
        "signature": "kiBToBytes(kibibytes)",
        "summary": ""
      },
      {
        "name": "bytesToMiB",
        "kind": "function",
        "signature": "bytesToMiB(bytes)",
        "summary": ""
      },
      {
        "name": "miBToBytes",
        "kind": "function",
        "signature": "miBToBytes(mebibytes)",
        "summary": ""
      },
      {
        "name": "bytesToGiB",
        "kind": "function",
        "signature": "bytesToGiB(bytes)",
        "summary": ""
      },
      {
        "name": "giBToBytes",
        "kind": "function",
        "signature": "giBToBytes(gibibytes)",
        "summary": ""
      },
      {
        "name": "MILLISECONDS_PER_SECOND",
        "kind": "constant",
        "signature": "MILLISECONDS_PER_SECOND",
        "summary": ""
      },
      {
        "name": "SECONDS_PER_MINUTE",
        "kind": "constant",
        "signature": "SECONDS_PER_MINUTE",
        "summary": ""
      },
      {
        "name": "MINUTES_PER_HOUR",
        "kind": "constant",
        "signature": "MINUTES_PER_HOUR",
        "summary": ""
      },
      {
        "name": "HOURS_PER_DAY",
        "kind": "constant",
        "signature": "HOURS_PER_DAY",
        "summary": ""
      },
      {
        "name": "DEFAULT_FRAME_RATE",
        "kind": "constant",
        "signature": "DEFAULT_FRAME_RATE",
        "summary": ""
      },
      {
        "name": "DEFAULT_SAMPLE_RATE",
        "kind": "constant",
        "signature": "DEFAULT_SAMPLE_RATE",
        "summary": ""
      },
      {
        "name": "DEFAULT_BPM",
        "kind": "constant",
        "signature": "DEFAULT_BPM",
        "summary": ""
      },
      {
        "name": "BITS_PER_BYTE",
        "kind": "constant",
        "signature": "BITS_PER_BYTE",
        "summary": ""
      },
      {
        "name": "BYTES_PER_KIB",
        "kind": "constant",
        "signature": "BYTES_PER_KIB",
        "summary": ""
      },
      {
        "name": "BYTES_PER_MIB",
        "kind": "constant",
        "signature": "BYTES_PER_MIB",
        "summary": ""
      },
      {
        "name": "BYTES_PER_GIB",
        "kind": "constant",
        "signature": "BYTES_PER_GIB",
        "summary": ""
      },
      {
        "name": "frequencyToWavelength",
        "kind": "constant",
        "signature": "frequencyToWavelength",
        "summary": ""
      },
      {
        "name": "wavelengthToFrequency",
        "kind": "constant",
        "signature": "wavelengthToFrequency",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/VideoMath",
    "path": "engine/reference/core/math/VideoMath.md",
    "source": "engine/core/math/VideoMath.js",
    "import": "/engine/core/math/VideoMath.js",
    "sourceHash": "30af104cbba41128a50e3e186eddd9897df736a7bcae55eaf28974d2f3527259",
    "summary": "VideoMath.js - pure sequence-level video/frame math over ImageData-like frames.",
    "exports": [
      {
        "name": "videoSequenceReport",
        "kind": "function",
        "signature": "videoSequenceReport(frames, options = {})",
        "summary": ""
      },
      {
        "name": "videoTemporalBlendFrame",
        "kind": "function",
        "signature": "videoTemporalBlendFrame(referenceFrame, candidateFrame, amount = 0.5, options = {})",
        "summary": ""
      },
      {
        "name": "videoSceneListReport",
        "kind": "function",
        "signature": "videoSceneListReport(frames, options = {})",
        "summary": ""
      },
      {
        "name": "videoKeyframePlanReport",
        "kind": "function",
        "signature": "videoKeyframePlanReport(frames, options = {})",
        "summary": ""
      },
      {
        "name": "videoMotionEntropyReport",
        "kind": "function",
        "signature": "videoMotionEntropyReport(frames, options = {})",
        "summary": ""
      },
      {
        "name": "videoTemporalEntropyReport",
        "kind": "function",
        "signature": "videoTemporalEntropyReport(frames, options = {})",
        "summary": ""
      },
      {
        "name": "videoThumbnailCandidateReport",
        "kind": "function",
        "signature": "videoThumbnailCandidateReport(frames, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/WGSLRegistry",
    "path": "engine/reference/core/math/WGSLRegistry.md",
    "source": "engine/core/math/WGSLRegistry.js",
    "import": "/engine/core/math/WGSLRegistry.js",
    "sourceHash": "ec5a408dcdd7fdcc778398f1c338b8ffef5174b0bc7f79cf5a2250d1d7237037",
    "summary": "WGSLRegistry.js - metadata for reusable WGSL chunks and CPU/WGSL mirror links.",
    "exports": [
      {
        "name": "wgslRegistryEntries",
        "kind": "function",
        "signature": "wgslRegistryEntries(filters = {})",
        "summary": ""
      },
      {
        "name": "wgslRegistryById",
        "kind": "function",
        "signature": "wgslRegistryById(id, registry = WGSL_REGISTRY)",
        "summary": ""
      },
      {
        "name": "wgslMirrorsForChunk",
        "kind": "function",
        "signature": "wgslMirrorsForChunk(chunkId, mirrors = WGSL_MIRROR_REGISTRY)",
        "summary": ""
      },
      {
        "name": "wgslRegistryReport",
        "kind": "function",
        "signature": "wgslRegistryReport(chunks = WGSL_CHUNK_REGISTRY, mirrors = WGSL_MIRROR_REGISTRY, moduleExports = WGSL_MODULE_EXPORTS, moduleExportClassifications = WGSL_MODULE_EXPORT_CLASSIFICATIONS)",
        "summary": ""
      },
      {
        "name": "mathRegistryWGSLMirrorReport",
        "kind": "function",
        "signature": "mathRegistryWGSLMirrorReport(mathFunctions = MATH_FUNCTION_REGISTRY, wgslMirrors = WGSL_MIRROR_REGISTRY)",
        "summary": ""
      },
      {
        "name": "wgslRegistryManifest",
        "kind": "function",
        "signature": "wgslRegistryManifest(chunks = WGSL_CHUNK_REGISTRY, mirrors = WGSL_MIRROR_REGISTRY)",
        "summary": ""
      },
      {
        "name": "WGSL_REGISTRY_VERSION",
        "kind": "constant",
        "signature": "WGSL_REGISTRY_VERSION",
        "summary": ""
      },
      {
        "name": "WGSL_CHUNK_REGISTRY",
        "kind": "constant",
        "signature": "WGSL_CHUNK_REGISTRY",
        "summary": ""
      },
      {
        "name": "WGSL_MIRROR_REGISTRY",
        "kind": "constant",
        "signature": "WGSL_MIRROR_REGISTRY",
        "summary": ""
      },
      {
        "name": "WGSL_REGISTRY",
        "kind": "constant",
        "signature": "WGSL_REGISTRY",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/XRMath",
    "path": "engine/reference/core/math/XRMath.md",
    "source": "engine/core/math/XRMath.js",
    "import": "/engine/core/math/XRMath.js",
    "sourceHash": "11d240db66b96cf05848644b68e38b1a17cc792bcd16827d38be47aa36879794",
    "summary": "XRMath.js - pure WebXR-shaped pose, view, projection, and depth reports.",
    "exports": [
      {
        "name": "xrRigidTransformReport",
        "kind": "function",
        "signature": "xrRigidTransformReport(transform = {}, options = {})",
        "summary": ""
      },
      {
        "name": "xrPoseViewMatrix",
        "kind": "function",
        "signature": "xrPoseViewMatrix(transform = {}, options = {})",
        "summary": ""
      },
      {
        "name": "xrViewProjectionReport",
        "kind": "function",
        "signature": "xrViewProjectionReport(view = {}, options = {})",
        "summary": ""
      },
      {
        "name": "xrViewerPoseReport",
        "kind": "function",
        "signature": "xrViewerPoseReport(views = [], options = {})",
        "summary": ""
      },
      {
        "name": "xrReferenceSpaceOffsetReport",
        "kind": "function",
        "signature": "xrReferenceSpaceOffsetReport(baseTransform = {}, offsetTransform = {}, options = {})",
        "summary": ""
      },
      {
        "name": "xrProjectionDepthRangeReport",
        "kind": "function",
        "signature": "xrProjectionDepthRangeReport(depthNear, depthFar)",
        "summary": ""
      },
      {
        "name": "xrDepthRawToMeters",
        "kind": "function",
        "signature": "xrDepthRawToMeters(rawDepth, rawValueToMeters = 1)",
        "summary": ""
      },
      {
        "name": "xrDepthUvTransformPoint",
        "kind": "function",
        "signature": "xrDepthUvTransformPoint(point = {}, matrix = identity4()",
        "summary": ""
      },
      {
        "name": "xrDepthSampleIndex",
        "kind": "function",
        "signature": "xrDepthSampleIndex(width, height, u, v, options = {})",
        "summary": ""
      },
      {
        "name": "xrDepthSampleMeters",
        "kind": "function",
        "signature": "xrDepthSampleMeters(depthData, width, height, u, v, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/math/index",
    "path": "engine/reference/core/math/index.md",
    "source": "engine/core/math/index.js",
    "import": "/engine/core/math/index.js",
    "sourceHash": "db7ba3d52b24f7b206831140600e43958c66b68bb19b0e7284b713682d58ce81",
    "summary": "engine/core/math/index.js - Math Utilities Barrel Export",
    "exports": [
      {
        "name": "BVHBuilder",
        "kind": "re-export",
        "signature": "BVHBuilder",
        "summary": ""
      },
      {
        "name": "BVHNode",
        "kind": "re-export",
        "signature": "BVHNode",
        "summary": ""
      },
      {
        "name": "BVH_TRAVERSAL_WGSL",
        "kind": "re-export",
        "signature": "BVH_TRAVERSAL_WGSL",
        "summary": ""
      },
      {
        "name": "BezierDistanceCompute",
        "kind": "re-export",
        "signature": "BezierDistanceCompute",
        "summary": ""
      },
      {
        "name": "DEFAULT_BLEND_RADIUS",
        "kind": "re-export",
        "signature": "DEFAULT_BLEND_RADIUS",
        "summary": ""
      },
      {
        "name": "DEFAULT_RESOLUTION",
        "kind": "re-export",
        "signature": "DEFAULT_RESOLUTION",
        "summary": ""
      },
      {
        "name": "GPULineVoxelizer",
        "kind": "re-export",
        "signature": "GPULineVoxelizer",
        "summary": ""
      },
      {
        "name": "HybridConnectivity",
        "kind": "re-export",
        "signature": "HybridConnectivity",
        "summary": ""
      },
      {
        "name": "INF_T",
        "kind": "re-export",
        "signature": "INF_T",
        "summary": ""
      },
      {
        "name": "LineMaterials",
        "kind": "re-export",
        "signature": "LineMaterials",
        "summary": ""
      },
      {
        "name": "LineNetwork",
        "kind": "re-export",
        "signature": "LineNetwork",
        "summary": ""
      },
      {
        "name": "LineToVoxelizer",
        "kind": "re-export",
        "signature": "LineToVoxelizer",
        "summary": ""
      },
      {
        "name": "NetworkEdge",
        "kind": "re-export",
        "signature": "NetworkEdge",
        "summary": ""
      },
      {
        "name": "NetworkNode",
        "kind": "re-export",
        "signature": "NetworkNode",
        "summary": ""
      },
      {
        "name": "SpatialHash",
        "kind": "re-export",
        "signature": "SpatialHash",
        "summary": ""
      },
      {
        "name": "SpatialHashCompute",
        "kind": "re-export",
        "signature": "SpatialHashCompute",
        "summary": ""
      },
      {
        "name": "UnionFind",
        "kind": "re-export",
        "signature": "UnionFind",
        "summary": ""
      },
      {
        "name": "VoxelUnionFind",
        "kind": "re-export",
        "signature": "VoxelUnionFind",
        "summary": ""
      },
      {
        "name": "bezierClosestNewton",
        "kind": "re-export",
        "signature": "bezierClosestNewton",
        "summary": ""
      },
      {
        "name": "bezierDistanceBatch",
        "kind": "re-export",
        "signature": "bezierDistanceBatch",
        "summary": ""
      },
      {
        "name": "bezierDistanceCapsule",
        "kind": "re-export",
        "signature": "bezierDistanceCapsule",
        "summary": ""
      },
      {
        "name": "bezierDistanceHybrid",
        "kind": "re-export",
        "signature": "bezierDistanceHybrid",
        "summary": ""
      },
      {
        "name": "capsuleClosestT",
        "kind": "re-export",
        "signature": "capsuleClosestT",
        "summary": ""
      },
      {
        "name": "createRaycastMesh",
        "kind": "re-export",
        "signature": "createRaycastMesh",
        "summary": ""
      },
      {
        "name": "curvesToGPUBuffer",
        "kind": "re-export",
        "signature": "curvesToGPUBuffer",
        "summary": ""
      },
      {
        "name": "curvesToSegments",
        "kind": "re-export",
        "signature": "curvesToSegments",
        "summary": ""
      },
      {
        "name": "generateRoots",
        "kind": "re-export",
        "signature": "generateRoots",
        "summary": ""
      },
      {
        "name": "generateTree",
        "kind": "re-export",
        "signature": "generateTree",
        "summary": ""
      },
      {
        "name": "generateTunnel",
        "kind": "re-export",
        "signature": "generateTunnel",
        "summary": ""
      },
      {
        "name": "mat4FromRotationTranslation",
        "kind": "re-export",
        "signature": "mat4FromRotationTranslation",
        "summary": ""
      },
      {
        "name": "mat4Identity",
        "kind": "re-export",
        "signature": "mat4Identity",
        "summary": ""
      },
      {
        "name": "mat4Inverse",
        "kind": "re-export",
        "signature": "mat4Inverse",
        "summary": ""
      },
      {
        "name": "mat4LookAt",
        "kind": "re-export",
        "signature": "mat4LookAt",
        "summary": ""
      },
      {
        "name": "mat4Multiply",
        "kind": "re-export",
        "signature": "mat4Multiply",
        "summary": ""
      },
      {
        "name": "mat4Orthographic",
        "kind": "re-export",
        "signature": "mat4Orthographic",
        "summary": ""
      },
      {
        "name": "mat4OrthographicWebGPU",
        "kind": "re-export",
        "signature": "mat4OrthographicWebGPU",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveDeg",
        "kind": "re-export",
        "signature": "mat4PerspectiveDeg",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveDegWebGPU",
        "kind": "re-export",
        "signature": "mat4PerspectiveDegWebGPU",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveRad",
        "kind": "re-export",
        "signature": "mat4PerspectiveRad",
        "summary": ""
      },
      {
        "name": "mat4PerspectiveRadWebGPU",
        "kind": "re-export",
        "signature": "mat4PerspectiveRadWebGPU",
        "summary": ""
      },
      {
        "name": "mat4Scale",
        "kind": "re-export",
        "signature": "mat4Scale",
        "summary": ""
      },
      {
        "name": "mat4Translate",
        "kind": "re-export",
        "signature": "mat4Translate",
        "summary": ""
      },
      {
        "name": "multiCurveDistance",
        "kind": "re-export",
        "signature": "multiCurveDistance",
        "summary": ""
      },
      {
        "name": "multiCurveDistanceSmooth",
        "kind": "re-export",
        "signature": "multiCurveDistanceSmooth",
        "summary": ""
      },
      {
        "name": "rayTriangleIntersect",
        "kind": "re-export",
        "signature": "rayTriangleIntersect",
        "summary": ""
      },
      {
        "name": "sdCapsule",
        "kind": "re-export",
        "signature": "sdCapsule",
        "summary": ""
      },
      {
        "name": "serializeBVHForGPU",
        "kind": "re-export",
        "signature": "serializeBVHForGPU",
        "summary": ""
      },
      {
        "name": "traverseBVH",
        "kind": "re-export",
        "signature": "traverseBVH",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/memory/ChunkBufferPool",
    "path": "engine/reference/core/memory/ChunkBufferPool.md",
    "source": "engine/core/memory/ChunkBufferPool.js",
    "import": "/engine/core/memory/ChunkBufferPool.js",
    "sourceHash": "c317a2220e2616004e1e182406df3d4092f80cec6932c12206783096b699fd72",
    "summary": "",
    "exports": [
      {
        "name": "ChunkBufferPool",
        "kind": "class",
        "signature": "class ChunkBufferPool",
        "summary": ""
      },
      {
        "name": "getChunkBufferPool",
        "kind": "function",
        "signature": "getChunkBufferPool()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/memory/GPUMemoryManager",
    "path": "engine/reference/core/memory/GPUMemoryManager.md",
    "source": "engine/core/memory/GPUMemoryManager.js",
    "import": "/engine/core/memory/GPUMemoryManager.js",
    "sourceHash": "504d5df1092817cc3803cfa9fb55ef3d9d9a3b038c6ae946abaf9acd89de324b",
    "summary": "GPUMemoryManager.js - WebGPU Device Memory Management Implements: - Ring Buffer for dynamic uniform data (per-frame) - Buddy Allocator for static geometry (persistent) - Texture Atlas management with LRU eviction - BindGroup caching and deduplication Goal: Minimize GPU API calls and prevent VRAM fragmentation",
    "exports": [
      {
        "name": "RingBuffer",
        "kind": "class",
        "signature": "class RingBuffer",
        "summary": "Circular buffer for per-frame dynamic data (uniforms, instance data). Wraps around each frame, avoiding buffer creation overhead."
      },
      {
        "name": "BuddyAllocator",
        "kind": "class",
        "signature": "class BuddyAllocator",
        "summary": "Buddy allocator for persistent GPU memory (geometry, textures). Handles allocation/deallocation without fragmentation."
      },
      {
        "name": "StagingBufferPool",
        "kind": "class",
        "signature": "class StagingBufferPool",
        "summary": "Pool of mappable staging buffers for CPU->GPU transfers. Avoids creating new buffers for every upload."
      },
      {
        "name": "BindGroupCache",
        "kind": "class",
        "signature": "class BindGroupCache",
        "summary": "Cache for GPUBindGroup objects to avoid redundant creation. Uses content-based hashing for deduplication."
      },
      {
        "name": "TextureManager",
        "kind": "class",
        "signature": "class TextureManager",
        "summary": "Manages GPU textures with LRU eviction policy."
      },
      {
        "name": "GPUMemoryManager",
        "kind": "class",
        "signature": "class GPUMemoryManager",
        "summary": "Central GPU memory management facade."
      },
      {
        "name": "getGPUMemoryManager",
        "kind": "function",
        "signature": "getGPUMemoryManager(device)",
        "summary": "Get or create GPU memory manager singleton"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/memory/HostMemoryManager",
    "path": "engine/reference/core/memory/HostMemoryManager.md",
    "source": "engine/core/memory/HostMemoryManager.js",
    "import": "/engine/core/memory/HostMemoryManager.js",
    "sourceHash": "81f16b8ccd3ffdcd564162a06a9bf7782e01274ec91f8d8ed4d07db19933695b",
    "summary": "Linear allocator that resets every frame. Provides zero-cost TypedArray views into a pre-allocated buffer.",
    "exports": [
      {
        "name": "SlabAllocator",
        "kind": "class",
        "signature": "class SlabAllocator",
        "summary": "Linear allocator that resets every frame. Provides zero-cost TypedArray views into a pre-allocated buffer."
      },
      {
        "name": "ObjectPool",
        "kind": "class",
        "signature": "class ObjectPool",
        "summary": "Generic object pool for reusable JavaScript objects. Uses LIFO (stack) for hot cache retrieval."
      },
      {
        "name": "SoAContainer",
        "kind": "class",
        "signature": "class SoAContainer",
        "summary": "SoA container for cache-efficient mass entity storage. All properties stored in contiguous TypedArrays."
      },
      {
        "name": "HostMemoryManager",
        "kind": "class",
        "signature": "class HostMemoryManager",
        "summary": "Central manager for all host memory allocation."
      },
      {
        "name": "createCommonPools",
        "kind": "function",
        "signature": "createCommonPools(manager = hostMemory)",
        "summary": "Create common pools for game objects"
      },
      {
        "name": "hostMemory",
        "kind": "constant",
        "signature": "hostMemory",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/memory/MappedBufferRing",
    "path": "engine/reference/core/memory/MappedBufferRing.md",
    "source": "engine/core/memory/MappedBufferRing.js",
    "import": "/engine/core/memory/MappedBufferRing.js",
    "sourceHash": "e108cbec84970f46442ac14d637945f96ce42037aab33803bebeda1b3f48c459",
    "summary": "MappedBufferRing - Efficient GPU data upload with pre-mapped buffers",
    "exports": [
      {
        "name": "MappedBufferRing",
        "kind": "class",
        "signature": "class MappedBufferRing",
        "summary": "MappedBufferRing - Efficient GPU data upload with pre-mapped buffers"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/memory/ObjectPool",
    "path": "engine/reference/core/memory/ObjectPool.md",
    "source": "engine/core/memory/ObjectPool.js",
    "import": "/engine/core/memory/ObjectPool.js",
    "sourceHash": "2fed7dfde7ec8eba92258d495048e3597858944c34db9d3bdb3a1687e7241145",
    "summary": "Generic object pool with factory function",
    "exports": [
      {
        "name": "ObjectPool",
        "kind": "class",
        "signature": "class ObjectPool",
        "summary": "Generic object pool with factory function"
      },
      {
        "name": "acquireVec3",
        "kind": "function",
        "signature": "acquireVec3(x = 0, y = 0, z = 0)",
        "summary": ""
      },
      {
        "name": "releaseVec3",
        "kind": "function",
        "signature": "releaseVec3(v)",
        "summary": ""
      },
      {
        "name": "acquireChunkInfo",
        "kind": "function",
        "signature": "acquireChunkInfo(cx, cy, cz)",
        "summary": ""
      },
      {
        "name": "releaseChunkInfo",
        "kind": "function",
        "signature": "releaseChunkInfo(info)",
        "summary": ""
      },
      {
        "name": "acquireRayResult",
        "kind": "function",
        "signature": "acquireRayResult()",
        "summary": ""
      },
      {
        "name": "releaseRayResult",
        "kind": "function",
        "signature": "releaseRayResult(result)",
        "summary": ""
      },
      {
        "name": "getPoolStats",
        "kind": "function",
        "signature": "getPoolStats()",
        "summary": ""
      },
      {
        "name": "vec3Pool",
        "kind": "constant",
        "signature": "vec3Pool",
        "summary": ""
      },
      {
        "name": "chunkInfoPool",
        "kind": "constant",
        "signature": "chunkInfoPool",
        "summary": ""
      },
      {
        "name": "rayResultPool",
        "kind": "constant",
        "signature": "rayResultPool",
        "summary": ""
      },
      {
        "name": "typedArrayPool",
        "kind": "constant",
        "signature": "typedArrayPool",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/memory/PipelineCache",
    "path": "engine/reference/core/memory/PipelineCache.md",
    "source": "engine/core/memory/PipelineCache.js",
    "import": "/engine/core/memory/PipelineCache.js",
    "sourceHash": "bcc4511bb8a5c18ec8c6df9f01df1ca473b12ad09f4ec3eb26ec53b4ac484b97",
    "summary": "PipelineCache - Async pipeline compilation and caching",
    "exports": [
      {
        "name": "PipelineCache",
        "kind": "class",
        "signature": "class PipelineCache",
        "summary": "PipelineCache - Async pipeline compilation and caching"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/memory/RenderBundleCache",
    "path": "engine/reference/core/memory/RenderBundleCache.md",
    "source": "engine/core/memory/RenderBundleCache.js",
    "import": "/engine/core/memory/RenderBundleCache.js",
    "sourceHash": "5472ec8ec88b2bc120326a2324e4987d5e25e3c153ca4da54b7ba5ae21a8062d",
    "summary": "RenderBundleCache - Manages render bundles for voxel terrain",
    "exports": [
      {
        "name": "RenderBundleCache",
        "kind": "class",
        "signature": "class RenderBundleCache",
        "summary": "RenderBundleCache - Manages render bundles for voxel terrain"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/memory/SubChunkBufferPool",
    "path": "engine/reference/core/memory/SubChunkBufferPool.md",
    "source": "engine/core/memory/SubChunkBufferPool.js",
    "import": "/engine/core/memory/SubChunkBufferPool.js",
    "sourceHash": "f93b20d166a07ba3244171b5b76a56b9961e6ca880d2837eeb0aa2b37081eca9",
    "summary": "SubChunkBufferPool - Manages GPU buffer reuse for sub-chunk meshes",
    "exports": [
      {
        "name": "SubChunkBufferPool",
        "kind": "class",
        "signature": "class SubChunkBufferPool",
        "summary": "SubChunkBufferPool - Manages GPU buffer reuse for sub-chunk meshes"
      },
      {
        "name": "getBufferPool",
        "kind": "function",
        "signature": "getBufferPool()",
        "summary": "Get the global buffer pool instance"
      },
      {
        "name": "initBufferPool",
        "kind": "function",
        "signature": "initBufferPool(device)",
        "summary": "Initialize the global buffer pool"
      },
      {
        "name": "BUCKET_NAMES",
        "kind": "re-export",
        "signature": "BUCKET_NAMES",
        "summary": ""
      },
      {
        "name": "BUCKET_SIZES",
        "kind": "re-export",
        "signature": "BUCKET_SIZES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/memory/UniformBufferRing",
    "path": "engine/reference/core/memory/UniformBufferRing.md",
    "source": "engine/core/memory/UniformBufferRing.js",
    "import": "/engine/core/memory/UniformBufferRing.js",
    "sourceHash": "05a093ea841ce819d9e1bb5c758dc4ee1a20d6a68df9a2b8e1fccbbdcb3b5794",
    "summary": "UniformBufferRing - Rotating uniform buffers",
    "exports": [
      {
        "name": "UniformBufferRing",
        "kind": "class",
        "signature": "class UniformBufferRing",
        "summary": "UniformBufferRing - Rotating uniform buffers"
      },
      {
        "name": "FrameUniformManager",
        "kind": "class",
        "signature": "class FrameUniformManager",
        "summary": "FrameUniformManager - Manages per-frame uniforms with automatic rotation"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/memory/VertexPool",
    "path": "engine/reference/core/memory/VertexPool.md",
    "source": "engine/core/memory/VertexPool.js",
    "import": "/engine/core/memory/VertexPool.js",
    "sourceHash": "a4b2e9239333c20b720d665d29e5086e405331e698d2ecfbb2dcce2c61db8af8",
    "summary": "VertexPool - Manages a large persistent vertex buffer with bucket allocation",
    "exports": [
      {
        "name": "VertexPool",
        "kind": "class",
        "signature": "class VertexPool",
        "summary": "VertexPool - Manages a large persistent vertex buffer with bucket allocation"
      },
      {
        "name": "FaceOrientedVertexPool",
        "kind": "class",
        "signature": "class FaceOrientedVertexPool",
        "summary": "FaceOrientedVertexPool - Vertex pool with 6 sub-buckets per chunk for true back-face culling Each chunk gets 6 smaller buckets, one per face direction"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/memory/index",
    "path": "engine/reference/core/memory/index.md",
    "source": "engine/core/memory/index.js",
    "import": "/engine/core/memory/index.js",
    "sourceHash": "40ae25e7fdb747419c8d8687ea32adab16f16c34576438f6a516be15422925ac",
    "summary": "",
    "exports": [
      {
        "name": "BindGroupCache",
        "kind": "re-export",
        "signature": "BindGroupCache",
        "summary": ""
      },
      {
        "name": "BuddyAllocator",
        "kind": "re-export",
        "signature": "BuddyAllocator",
        "summary": ""
      },
      {
        "name": "GPUMemoryManager",
        "kind": "re-export",
        "signature": "GPUMemoryManager",
        "summary": ""
      },
      {
        "name": "HostMemoryManager",
        "kind": "re-export",
        "signature": "HostMemoryManager",
        "summary": ""
      },
      {
        "name": "ObjectPool",
        "kind": "re-export",
        "signature": "ObjectPool",
        "summary": ""
      },
      {
        "name": "RingBuffer",
        "kind": "re-export",
        "signature": "RingBuffer",
        "summary": ""
      },
      {
        "name": "SlabAllocator",
        "kind": "re-export",
        "signature": "SlabAllocator",
        "summary": ""
      },
      {
        "name": "SoAContainer",
        "kind": "re-export",
        "signature": "SoAContainer",
        "summary": ""
      },
      {
        "name": "StagingBufferPool",
        "kind": "re-export",
        "signature": "StagingBufferPool",
        "summary": ""
      },
      {
        "name": "TextureManager",
        "kind": "re-export",
        "signature": "TextureManager",
        "summary": ""
      },
      {
        "name": "createCommonPools",
        "kind": "re-export",
        "signature": "createCommonPools",
        "summary": ""
      },
      {
        "name": "getGPUMemoryManager",
        "kind": "re-export",
        "signature": "getGPUMemoryManager",
        "summary": ""
      },
      {
        "name": "hostMemory",
        "kind": "re-export",
        "signature": "hostMemory",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/platform/InputPlumbing",
    "path": "engine/reference/core/platform/InputPlumbing.md",
    "source": "engine/core/platform/InputPlumbing.js",
    "import": "/engine/core/platform/InputPlumbing.js",
    "sourceHash": "b7d7cc31c7575fcd6783cd5559402be1e586e70881e6b5e497fdc5740b0972b4",
    "summary": "",
    "exports": [
      {
        "name": "installPointerAndKeyboardListeners",
        "kind": "function",
        "signature": "installPointerAndKeyboardListeners(options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/platform/MainLoop",
    "path": "engine/reference/core/platform/MainLoop.md",
    "source": "engine/core/platform/MainLoop.js",
    "import": "/engine/core/platform/MainLoop.js",
    "sourceHash": "58c9a84e75c26ac5b11bf8d251aa4bdc7ecd5e322626f605a296db99b03aaaac",
    "summary": "",
    "exports": [
      {
        "name": "createMainLoop",
        "kind": "function",
        "signature": "createMainLoop(options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/platform/PlatformCanvas",
    "path": "engine/reference/core/platform/PlatformCanvas.md",
    "source": "engine/core/platform/PlatformCanvas.js",
    "import": "/engine/core/platform/PlatformCanvas.js",
    "sourceHash": "f08eddde9b957884dcc08dccb434fa7f5210d126deb2f9536a0b08bc5b18533e",
    "summary": "",
    "exports": [
      {
        "name": "createCanvasSurface",
        "kind": "function",
        "signature": "createCanvasSurface(gpuDevice, canvasTarget, options = {})",
        "summary": ""
      },
      {
        "name": "createViewportManager",
        "kind": "function",
        "signature": "createViewportManager(gpuDevice, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/profiler/DualRNG",
    "path": "engine/reference/core/profiler/DualRNG.md",
    "source": "engine/core/profiler/DualRNG.js",
    "import": "/engine/core/profiler/DualRNG.js",
    "sourceHash": "9b3b9dd15c3f168d9f35465890007f2519257f9ae1b273f43bff983724344bff",
    "summary": "DualRNG - Manages synchronized and visual RNGs",
    "exports": [
      {
        "name": "DualRNG",
        "kind": "class",
        "signature": "class DualRNG",
        "summary": "DualRNG - Manages synchronized and visual RNGs"
      },
      {
        "name": "positionHash",
        "kind": "function",
        "signature": "positionHash(x, y, z, seed = 0)",
        "summary": "Position-based hash for deterministic randomness at specific coordinates Useful for terrain generation where you need same result for same position"
      },
      {
        "name": "getGlobalRNG",
        "kind": "function",
        "signature": "getGlobalRNG()",
        "summary": "Get or create global DualRNG instance"
      },
      {
        "name": "initGlobalRNG",
        "kind": "function",
        "signature": "initGlobalRNG(seed)",
        "summary": "Initialize global RNG with seed (call from game init)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/profiler/FrameBudgetManager",
    "path": "engine/reference/core/profiler/FrameBudgetManager.md",
    "source": "engine/core/profiler/FrameBudgetManager.js",
    "import": "/engine/core/profiler/FrameBudgetManager.js",
    "sourceHash": "aa20a1d4dbc50641180e2011eb027a1f39aaf1f3703ca7be2e0fcdd3e837aa23",
    "summary": "FrameBudgetManager - Manages per-frame time budgets",
    "exports": [
      {
        "name": "FrameBudgetManager",
        "kind": "class",
        "signature": "class FrameBudgetManager",
        "summary": "FrameBudgetManager - Manages per-frame time budgets"
      },
      {
        "name": "getFrameBudgetManager",
        "kind": "function",
        "signature": "getFrameBudgetManager()",
        "summary": "Get global frame budget manager"
      },
      {
        "name": "shouldSkipWork",
        "kind": "function",
        "signature": "shouldSkipWork(section)",
        "summary": "Quick check if we should skip work this frame"
      },
      {
        "name": "DEFAULT_BUDGETS",
        "kind": "re-export",
        "signature": "DEFAULT_BUDGETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/profiler/GameplayProfiler",
    "path": "engine/reference/core/profiler/GameplayProfiler.md",
    "source": "engine/core/profiler/GameplayProfiler.js",
    "import": "/engine/core/profiler/GameplayProfiler.js",
    "sourceHash": "5690a5acd0afc62e59de9c589332f31d41e6c0a96d4a9a8d07025bbacc6b2b61",
    "summary": "",
    "exports": [
      {
        "name": "GameplayProfiler",
        "kind": "class",
        "signature": "class GameplayProfiler",
        "summary": ""
      },
      {
        "name": "PROFILE_MODE",
        "kind": "constant",
        "signature": "PROFILE_MODE",
        "summary": ""
      },
      {
        "name": "profiler",
        "kind": "constant",
        "signature": "profiler",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/profiler/PerformanceOptimizer",
    "path": "engine/reference/core/profiler/PerformanceOptimizer.md",
    "source": "engine/core/profiler/PerformanceOptimizer.js",
    "import": "/engine/core/profiler/PerformanceOptimizer.js",
    "sourceHash": "639e68a6aa3f54aa5a369f4a068a4236c6ef874a34286c6c63bfbb8a5aa95fe7",
    "summary": "Common workgroup sizes",
    "exports": [
      {
        "name": "WorkgroupTuner",
        "kind": "class",
        "signature": "class WorkgroupTuner",
        "summary": ""
      },
      {
        "name": "PingPongBuffer",
        "kind": "class",
        "signature": "class PingPongBuffer",
        "summary": ""
      },
      {
        "name": "FrameBudgetManager",
        "kind": "class",
        "signature": "class FrameBudgetManager",
        "summary": ""
      },
      {
        "name": "BufferPool",
        "kind": "class",
        "signature": "class BufferPool",
        "summary": ""
      },
      {
        "name": "PerformanceOptimizer",
        "kind": "class",
        "signature": "class PerformanceOptimizer",
        "summary": ""
      },
      {
        "name": "WorkgroupSizes",
        "kind": "constant",
        "signature": "WorkgroupSizes",
        "summary": "Common workgroup sizes"
      },
      {
        "name": "BufferStrategy",
        "kind": "constant",
        "signature": "BufferStrategy",
        "summary": "Buffer strategies"
      },
      {
        "name": "MemoryTier",
        "kind": "constant",
        "signature": "MemoryTier",
        "summary": "Memory allocation tiers"
      },
      {
        "name": "FrameBudget",
        "kind": "constant",
        "signature": "FrameBudget",
        "summary": "Frame budget targets"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/profiler/index",
    "path": "engine/reference/core/profiler/index.md",
    "source": "engine/core/profiler/index.js",
    "import": "/engine/core/profiler/index.js",
    "sourceHash": "d3f3e9b847a627249f09637ac58d03a2a9bbac1e55a202129b85ea3cb6f82371",
    "summary": "",
    "exports": [
      {
        "name": "DEFAULT_BUDGETS",
        "kind": "re-export",
        "signature": "DEFAULT_BUDGETS",
        "summary": ""
      },
      {
        "name": "DualRNG",
        "kind": "re-export",
        "signature": "DualRNG",
        "summary": ""
      },
      {
        "name": "FrameBudgetManager",
        "kind": "re-export",
        "signature": "FrameBudgetManager",
        "summary": ""
      },
      {
        "name": "GameplayProfiler",
        "kind": "re-export",
        "signature": "GameplayProfiler",
        "summary": ""
      },
      {
        "name": "PerformanceOptimizer",
        "kind": "re-export",
        "signature": "PerformanceOptimizer",
        "summary": ""
      },
      {
        "name": "getFrameBudgetManager",
        "kind": "re-export",
        "signature": "getFrameBudgetManager",
        "summary": ""
      },
      {
        "name": "getGlobalRNG",
        "kind": "re-export",
        "signature": "getGlobalRNG",
        "summary": ""
      },
      {
        "name": "initGlobalRNG",
        "kind": "re-export",
        "signature": "initGlobalRNG",
        "summary": ""
      },
      {
        "name": "positionHash",
        "kind": "re-export",
        "signature": "positionHash",
        "summary": ""
      },
      {
        "name": "shouldSkipWork",
        "kind": "re-export",
        "signature": "shouldSkipWork",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/profiling/PerformanceAnalyzer",
    "path": "engine/reference/core/profiling/PerformanceAnalyzer.md",
    "source": "engine/core/profiling/PerformanceAnalyzer.js",
    "import": "/engine/core/profiling/PerformanceAnalyzer.js",
    "sourceHash": "0ea5c3f1dc899c7358ebf0f76d514bd311c173301171373f037acb88208ab55c",
    "summary": "",
    "exports": [
      {
        "name": "PerformanceAnalyzer",
        "kind": "class",
        "signature": "class PerformanceAnalyzer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/save/SaveSystem",
    "path": "engine/reference/core/save/SaveSystem.md",
    "source": "engine/core/save/SaveSystem.js",
    "import": "/engine/core/save/SaveSystem.js",
    "sourceHash": "91d0e3a9839e86d3b22acb56793e0e22615879531b6f9e2a2cb7c8a1f8f7216e",
    "summary": "",
    "exports": [
      {
        "name": "SaveSystem",
        "kind": "class",
        "signature": "class SaveSystem",
        "summary": ""
      },
      {
        "name": "createLocalStorageAdapter",
        "kind": "function",
        "signature": "createLocalStorageAdapter(storage)",
        "summary": ""
      },
      {
        "name": "SAVE_SCHEMA_VERSION",
        "kind": "constant",
        "signature": "SAVE_SCHEMA_VERSION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/save/index",
    "path": "engine/reference/core/save/index.md",
    "source": "engine/core/save/index.js",
    "import": "/engine/core/save/index.js",
    "sourceHash": "610d3e17c7ba73bc6764adb2fba123bee1e2b8b646f96449e3439dbce74664e6",
    "summary": "",
    "exports": [
      {
        "name": "SAVE_SCHEMA_VERSION",
        "kind": "re-export",
        "signature": "SAVE_SCHEMA_VERSION",
        "summary": ""
      },
      {
        "name": "SaveSystem",
        "kind": "re-export",
        "signature": "SaveSystem",
        "summary": ""
      },
      {
        "name": "createLocalStorageAdapter",
        "kind": "re-export",
        "signature": "createLocalStorageAdapter",
        "summary": ""
      },
      {
        "name": "default",
        "kind": "re-export",
        "signature": "default",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/scheduler/TaskScheduler",
    "path": "engine/reference/core/scheduler/TaskScheduler.md",
    "source": "engine/core/scheduler/TaskScheduler.js",
    "import": "/engine/core/scheduler/TaskScheduler.js",
    "sourceHash": "960af72eb56ef755ce4e1ef1144d5a5c8f00207b799d67dda466267ed7945d70",
    "summary": "Represents a unit of work",
    "exports": [
      {
        "name": "Job",
        "kind": "class",
        "signature": "class Job",
        "summary": "Represents a unit of work"
      },
      {
        "name": "WorkerPool",
        "kind": "class",
        "signature": "class WorkerPool",
        "summary": "Pool of Web Workers for parallel job execution"
      },
      {
        "name": "TaskScheduler",
        "kind": "class",
        "signature": "class TaskScheduler",
        "summary": "Main task scheduler with frame budget management"
      },
      {
        "name": "JobPriority",
        "kind": "constant",
        "signature": "JobPriority",
        "summary": ""
      },
      {
        "name": "scheduler",
        "kind": "constant",
        "signature": "scheduler",
        "summary": ""
      },
      {
        "name": "workerTemplate",
        "kind": "constant",
        "signature": "workerTemplate",
        "summary": "Template for worker script. Export this and use with URL.createObjectURL."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/scheduler/index",
    "path": "engine/reference/core/scheduler/index.md",
    "source": "engine/core/scheduler/index.js",
    "import": "/engine/core/scheduler/index.js",
    "sourceHash": "3e708b367f1a07924204365c625b17a8507f5ea08870e0c68547d6b394ebcfef",
    "summary": "",
    "exports": [
      {
        "name": "Job",
        "kind": "re-export",
        "signature": "Job",
        "summary": ""
      },
      {
        "name": "JobPriority",
        "kind": "re-export",
        "signature": "JobPriority",
        "summary": ""
      },
      {
        "name": "TaskScheduler",
        "kind": "re-export",
        "signature": "TaskScheduler",
        "summary": ""
      },
      {
        "name": "WorkerPool",
        "kind": "re-export",
        "signature": "WorkerPool",
        "summary": ""
      },
      {
        "name": "scheduler",
        "kind": "re-export",
        "signature": "scheduler",
        "summary": ""
      },
      {
        "name": "workerTemplate",
        "kind": "re-export",
        "signature": "workerTemplate",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/schema/BrowserRecordContract",
    "path": "engine/reference/core/schema/BrowserRecordContract.md",
    "source": "engine/core/schema/BrowserRecordContract.js",
    "import": "/engine/core/schema/BrowserRecordContract.js",
    "sourceHash": "94304533d4fa512ef7cbdbffcb1b76d2a0964e9635fd43bfcabc2fd23ad82c73",
    "summary": "Shared expand-contract owner for structured browser key/value records.",
    "exports": [
      {
        "name": "BrowserRecordContractError",
        "kind": "class",
        "signature": "class BrowserRecordContractError extends Error",
        "summary": ""
      },
      {
        "name": "createBrowserRecordContract",
        "kind": "function",
        "signature": "createBrowserRecordContract({ schema, legacyKey, currentKey = `${legacyKey}.v2`, payloadKey = 'value', validate, maxBytes = 4 * 1024 * 1024, } = {})",
        "summary": ""
      },
      {
        "name": "BROWSER_RECORD_SCHEMA_VERSION",
        "kind": "constant",
        "signature": "BROWSER_RECORD_SCHEMA_VERSION",
        "summary": "Shared expand-contract owner for structured browser key/value records."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/schema/SchemaEvolutionRegistry",
    "path": "engine/reference/core/schema/SchemaEvolutionRegistry.md",
    "source": "engine/core/schema/SchemaEvolutionRegistry.js",
    "import": "/engine/core/schema/SchemaEvolutionRegistry.js",
    "sourceHash": "59842ed7f57d5c085d7fdddff04b79dcb3cc4bf295b4b8a1ff47e52d48d9f8ef",
    "summary": "Pure registry for explicit schema readers, writers, and migration graphs. It transforms decoded values only and never reads or writes persistence.",
    "exports": [
      {
        "name": "SchemaEvolutionError",
        "kind": "class",
        "signature": "class SchemaEvolutionError extends Error",
        "summary": ""
      },
      {
        "name": "SchemaEvolutionRegistry",
        "kind": "class",
        "signature": "class SchemaEvolutionRegistry",
        "summary": "Pure registry for explicit schema readers, writers, and migration graphs. It transforms decoded values only and never reads or writes persistence."
      },
      {
        "name": "canonicalSchemaValue",
        "kind": "function",
        "signature": "canonicalSchemaValue(value)",
        "summary": ""
      },
      {
        "name": "cloneSchemaValue",
        "kind": "function",
        "signature": "cloneSchemaValue(value)",
        "summary": ""
      },
      {
        "name": "fingerprintSchemaValue",
        "kind": "function",
        "signature": "fingerprintSchemaValue(value)",
        "summary": ""
      },
      {
        "name": "createSchemaEvolutionRegistry",
        "kind": "function",
        "signature": "createSchemaEvolutionRegistry()",
        "summary": ""
      },
      {
        "name": "SCHEMA_MIGRATION_PLAN_FORMAT",
        "kind": "constant",
        "signature": "SCHEMA_MIGRATION_PLAN_FORMAT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/schema/SchemaValidator",
    "path": "engine/reference/core/schema/SchemaValidator.md",
    "source": "engine/core/schema/SchemaValidator.js",
    "import": "/engine/core/schema/SchemaValidator.js",
    "sourceHash": "800783f4d8d032008cb13951de6e7a8bc296f70d63a4caf01b80f26adfd7bd5f",
    "summary": "SchemaValidator — Validates game data against JSON schemas. Lightweight validator (no external deps). Checks required fields, types, enums, min/max, and array items. Reports all errors.",
    "exports": [
      {
        "name": "SchemaValidator",
        "kind": "class",
        "signature": "class SchemaValidator",
        "summary": "SchemaValidator — Validates game data against JSON schemas. Lightweight validator (no external deps). Checks required fields, types, enums, min/max, and array items. Reports all errors."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/schema/index",
    "path": "engine/reference/core/schema/index.md",
    "source": "engine/core/schema/index.js",
    "import": "/engine/core/schema/index.js",
    "sourceHash": "6f2808bd1810808e80b7824a9cdb353d70d80e25fb7b6ee6e54ab9080965f06b",
    "summary": "",
    "exports": [
      {
        "name": "SCHEMA_MIGRATION_PLAN_FORMAT",
        "kind": "re-export",
        "signature": "SCHEMA_MIGRATION_PLAN_FORMAT",
        "summary": ""
      },
      {
        "name": "SchemaEvolutionError",
        "kind": "re-export",
        "signature": "SchemaEvolutionError",
        "summary": ""
      },
      {
        "name": "SchemaEvolutionRegistry",
        "kind": "re-export",
        "signature": "SchemaEvolutionRegistry",
        "summary": ""
      },
      {
        "name": "SchemaValidator",
        "kind": "re-export",
        "signature": "SchemaValidator",
        "summary": ""
      },
      {
        "name": "canonicalSchemaValue",
        "kind": "re-export",
        "signature": "canonicalSchemaValue",
        "summary": ""
      },
      {
        "name": "cloneSchemaValue",
        "kind": "re-export",
        "signature": "cloneSchemaValue",
        "summary": ""
      },
      {
        "name": "createSchemaEvolutionRegistry",
        "kind": "re-export",
        "signature": "createSchemaEvolutionRegistry",
        "summary": ""
      },
      {
        "name": "default",
        "kind": "re-export",
        "signature": "default",
        "summary": ""
      },
      {
        "name": "fingerprintSchemaValue",
        "kind": "re-export",
        "signature": "fingerprintSchemaValue",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/timing/DisplayRefreshEstimator",
    "path": "engine/reference/core/timing/DisplayRefreshEstimator.md",
    "source": "engine/core/timing/DisplayRefreshEstimator.js",
    "import": "/engine/core/timing/DisplayRefreshEstimator.js",
    "sourceHash": "fc39edee4ae3af82519376dd73da91c3d1197803747895bf1afa389bc3e1e43a",
    "summary": "Robustly estimates the host display cadence from requestAnimationFrame intervals. Missed callbacks are filtered before estimation, so a busy frame does not incorrectly turn a 144 Hz display into a 72 Hz quality target.",
    "exports": [
      {
        "name": "DisplayRefreshEstimator",
        "kind": "class",
        "signature": "class DisplayRefreshEstimator",
        "summary": "Robustly estimates the host display cadence from requestAnimationFrame intervals. Missed callbacks are filtered before estimation, so a busy frame does not incorrectly turn a 144 Hz display into a 72 Hz quality target."
      },
      {
        "name": "createDisplayRefreshEstimator",
        "kind": "function",
        "signature": "createDisplayRefreshEstimator(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/timing/FramePacingController",
    "path": "engine/reference/core/timing/FramePacingController.md",
    "source": "engine/core/timing/FramePacingController.js",
    "import": "/engine/core/timing/FramePacingController.js",
    "sourceHash": "555e9b18fed8cf9414c1b87bfbc30482962b16a5892ffc299b06bcc3aaaefe24",
    "summary": "",
    "exports": [
      {
        "name": "FramePacingController",
        "kind": "class",
        "signature": "class FramePacingController",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/timing/index",
    "path": "engine/reference/core/timing/index.md",
    "source": "engine/core/timing/index.js",
    "import": "/engine/core/timing/index.js",
    "sourceHash": "32f749a141ed10649314d4a87a0df92461e9bf682f0040d29f043f008dc62fe0",
    "summary": "",
    "exports": [
      {
        "name": "DisplayRefreshEstimator",
        "kind": "re-export",
        "signature": "DisplayRefreshEstimator",
        "summary": ""
      },
      {
        "name": "FramePacingController",
        "kind": "re-export",
        "signature": "FramePacingController",
        "summary": ""
      },
      {
        "name": "createDisplayRefreshEstimator",
        "kind": "re-export",
        "signature": "createDisplayRefreshEstimator",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "core/workers/WorkerPool",
    "path": "engine/reference/core/workers/WorkerPool.md",
    "source": "engine/core/workers/WorkerPool.js",
    "import": "/engine/core/workers/WorkerPool.js",
    "sourceHash": "ba5da61919ffe21d51f3a7bb37b42a059f51c50163b8f24f127e69de9d31ef48",
    "summary": "Web Worker Pool - Multi-threaded asset loading and processing Eliminates main thread blocking during heavy operations",
    "exports": [
      {
        "name": "WorkerPool",
        "kind": "class",
        "signature": "class WorkerPool",
        "summary": "Web Worker Pool - Multi-threaded asset loading and processing Eliminates main thread blocking during heavy operations"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/ComponentHealer",
    "path": "engine/reference/ecs/ComponentHealer.md",
    "source": "engine/ecs/ComponentHealer.js",
    "import": "/engine/ecs/ComponentHealer.js",
    "sourceHash": "5892b658a75b37005c40faa9665f9fe1d1e9ecd07625049c7a0f44927ab1de55",
    "summary": "ComponentHealer.js - Self-Healing Data Validation System Implements auto-repair for component data using triangulation: - Detects missing/invalid/corrupted data - Infers correct values from multiple sources (redundancy) - Applies intelligent repairs with fallbacks - Logs all healing actions for diagnostics Based on self-healing system principles: 1. Monitoring & Detection 2. Diagnostics Engine 3. Decision-Making Module 4. Execution Framework 5. Knowledge Base (schema defaults + inference rules) 6. Feedback Loop (healing log)",
    "exports": [
      {
        "name": "TriangulationContext",
        "kind": "class",
        "signature": "class TriangulationContext",
        "summary": "Triangulation context - provides multiple sources for inferring values"
      },
      {
        "name": "getHealingLog",
        "kind": "function",
        "signature": "getHealingLog()",
        "summary": ""
      },
      {
        "name": "clearHealingLog",
        "kind": "function",
        "signature": "clearHealingLog()",
        "summary": ""
      },
      {
        "name": "healComponent",
        "kind": "function",
        "signature": "healComponent(componentName, data, ctx = new TriangulationContext()",
        "summary": "Heal a component using schema and triangulation"
      },
      {
        "name": "healAndValidate",
        "kind": "function",
        "signature": "healAndValidate(componentName, data, options = {})",
        "summary": "Heal and validate component data before use This is the main entry point for the healing system"
      },
      {
        "name": "getHealingStats",
        "kind": "function",
        "signature": "getHealingStats()",
        "summary": "Get healing statistics with detailed metrics"
      },
      {
        "name": "batchHealComponents",
        "kind": "function",
        "signature": "batchHealComponents(components, sharedContext = {})",
        "summary": "Batch heal multiple components efficiently"
      },
      {
        "name": "validateComponentData",
        "kind": "function",
        "signature": "validateComponentData(componentName, data)",
        "summary": "Validate component without healing - just check for issues"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/EntityManager",
    "path": "engine/reference/ecs/EntityManager.md",
    "source": "engine/ecs/EntityManager.js",
    "import": "/engine/ecs/EntityManager.js",
    "sourceHash": "d36b9d8fc44ae88eb038d652d354eed6d75157a7d9a565023d0e74c8492c0deb",
    "summary": "Delete an entity with full cleanup of associated resources.",
    "exports": [
      {
        "name": "deleteEntity",
        "kind": "function",
        "signature": "deleteEntity(options)",
        "summary": "Delete an entity with full cleanup of associated resources."
      },
      {
        "name": "deleteSelectedEntity",
        "kind": "function",
        "signature": "deleteSelectedEntity(ecsState, options)",
        "summary": "Delete the currently selected entity."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/EntitySchema",
    "path": "engine/reference/ecs/EntitySchema.md",
    "source": "engine/ecs/EntitySchema.js",
    "import": "/engine/ecs/EntitySchema.js",
    "sourceHash": "554650c58581f66ce473163c3ec1c21f06bbbf06f68026ee42daec73fcd3a198",
    "summary": "Normalize a single field value based on its type definition",
    "exports": [
      {
        "name": "normalizeField",
        "kind": "function",
        "signature": "normalizeField(fieldDef, value)",
        "summary": "Normalize a single field value based on its type definition"
      },
      {
        "name": "normalizeBySchema",
        "kind": "function",
        "signature": "normalizeBySchema(schema, value)",
        "summary": "Normalize a component value using its schema definition This is the primary function component files should use"
      },
      {
        "name": "getSchemaDefaults",
        "kind": "function",
        "signature": "getSchemaDefaults(schema)",
        "summary": "Get default values from a schema"
      },
      {
        "name": "getCollisionMask",
        "kind": "function",
        "signature": "getCollisionMask(...layerNames)",
        "summary": "Helper: Get collision layer mask from layer names"
      },
      {
        "name": "layersCollide",
        "kind": "function",
        "signature": "layersCollide(layerA, maskA, layerB, maskB)",
        "summary": "Helper: Check if two layer masks collide"
      },
      {
        "name": "getPhysXFlagsForCollisionMode",
        "kind": "function",
        "signature": "getPhysXFlagsForCollisionMode(mode)",
        "summary": "Helper: Get collision mode flags for PhysX Returns { pairFlags, shapeFlags } for PhysX configuration"
      },
      {
        "name": "registerComponentSchema",
        "kind": "function",
        "signature": "registerComponentSchema(schema)",
        "summary": "Register a custom component schema at runtime Allows component files to auto-register their schemas"
      },
      {
        "name": "getRegisteredSchemaNames",
        "kind": "function",
        "signature": "getRegisteredSchemaNames()",
        "summary": "Get all registered component schema names"
      },
      {
        "name": "validateComponent",
        "kind": "function",
        "signature": "validateComponent(componentName, value)",
        "summary": "Validate and normalize a component value against its schema"
      },
      {
        "name": "createDefaultComponent",
        "kind": "function",
        "signature": "createDefaultComponent(componentName)",
        "summary": "Create default component data"
      },
      {
        "name": "validateTransform",
        "kind": "function",
        "signature": "validateTransform(value)",
        "summary": "Validate Transform component"
      },
      {
        "name": "validatePhysicsBody",
        "kind": "function",
        "signature": "validatePhysicsBody(value)",
        "summary": "Validate PhysicsBody component"
      },
      {
        "name": "validateCollider",
        "kind": "function",
        "signature": "validateCollider(value)",
        "summary": "Validate Collider component"
      },
      {
        "name": "validateLight",
        "kind": "function",
        "signature": "validateLight(value)",
        "summary": "Validate Light component"
      },
      {
        "name": "validateCamera",
        "kind": "function",
        "signature": "validateCamera(value)",
        "summary": "Validate Camera component"
      },
      {
        "name": "validateRenderable",
        "kind": "function",
        "signature": "validateRenderable(value)",
        "summary": "Validate Renderable component"
      },
      {
        "name": "validateParticleEmitter",
        "kind": "function",
        "signature": "validateParticleEmitter(value)",
        "summary": "Validate ParticleEmitter component"
      },
      {
        "name": "validateNavAgent",
        "kind": "function",
        "signature": "validateNavAgent(value)",
        "summary": "Validate NavAgent component"
      },
      {
        "name": "validatePhysicsChain",
        "kind": "function",
        "signature": "validatePhysicsChain(value)",
        "summary": "Validate PhysicsChain component"
      },
      {
        "name": "createDefaultTransform",
        "kind": "function",
        "signature": "createDefaultTransform()",
        "summary": "Create default Transform"
      },
      {
        "name": "createDefaultPhysicsBody",
        "kind": "function",
        "signature": "createDefaultPhysicsBody()",
        "summary": "Create default PhysicsBody"
      },
      {
        "name": "createDefaultCollider",
        "kind": "function",
        "signature": "createDefaultCollider()",
        "summary": "Create default Collider"
      },
      {
        "name": "createDefaultLight",
        "kind": "function",
        "signature": "createDefaultLight()",
        "summary": "Create default Light"
      },
      {
        "name": "createDefaultCamera",
        "kind": "function",
        "signature": "createDefaultCamera()",
        "summary": "Create default Camera"
      },
      {
        "name": "createDefaultRenderable",
        "kind": "function",
        "signature": "createDefaultRenderable()",
        "summary": "Create default Renderable"
      },
      {
        "name": "createDefaultPhysicsChain",
        "kind": "function",
        "signature": "createDefaultPhysicsChain()",
        "summary": "Create default PhysicsChain"
      },
      {
        "name": "createEmptyEntity",
        "kind": "function",
        "signature": "createEmptyEntity(id)",
        "summary": "Create empty entity"
      },
      {
        "name": "createEntitySnapshot",
        "kind": "function",
        "signature": "createEntitySnapshot(entityId, transform, physicsBody)",
        "summary": "Create entity snapshot"
      },
      {
        "name": "createWorldSnapshot",
        "kind": "function",
        "signature": "createWorldSnapshot(time, frameIndex)",
        "summary": "Create world snapshot"
      },
      {
        "name": "jsonReplacer",
        "kind": "function",
        "signature": "jsonReplacer(key, value)",
        "summary": "JSON replacer function for special values Use with JSON.stringify(obj, jsonReplacer)"
      },
      {
        "name": "jsonReviver",
        "kind": "function",
        "signature": "jsonReviver(key, value)",
        "summary": "JSON reviver function for special values Use with JSON.parse(str, jsonReviver)"
      },
      {
        "name": "serializeComponent",
        "kind": "function",
        "signature": "serializeComponent(componentName, value)",
        "summary": "Serialize component to JSON-safe object"
      },
      {
        "name": "deserializeComponent",
        "kind": "function",
        "signature": "deserializeComponent(componentName, json, healingContext = null)",
        "summary": "Deserialize component from JSON with optional self-healing"
      },
      {
        "name": "serializeEntitySnapshot",
        "kind": "function",
        "signature": "serializeEntitySnapshot(snapshot)",
        "summary": "Serialize entity snapshot to JSON-safe object"
      },
      {
        "name": "serializeWorldSnapshot",
        "kind": "function",
        "signature": "serializeWorldSnapshot(snapshot)",
        "summary": "Serialize world snapshot to JSON-safe object"
      },
      {
        "name": "deserializeWorldSnapshot",
        "kind": "function",
        "signature": "deserializeWorldSnapshot(json)",
        "summary": "Deserialize world snapshot from JSON"
      },
      {
        "name": "lerpVec3",
        "kind": "function",
        "signature": "lerpVec3(a, b, t)",
        "summary": "Interpolate between two vec3 values"
      },
      {
        "name": "lerpQuat",
        "kind": "function",
        "signature": "lerpQuat(a, b, t)",
        "summary": "Interpolate between two quaternions (simple lerp, not slerp)"
      },
      {
        "name": "interpolateTransform",
        "kind": "function",
        "signature": "interpolateTransform(a, b, t)",
        "summary": "Interpolate Transform between two states"
      },
      {
        "name": "interpolatePhysicsBody",
        "kind": "function",
        "signature": "interpolatePhysicsBody(a, b, t)",
        "summary": "Interpolate PhysicsBody between two states"
      },
      {
        "name": "interpolateEntitySnapshot",
        "kind": "function",
        "signature": "interpolateEntitySnapshot(a, b, t)",
        "summary": "Interpolate entity snapshot between two states"
      },
      {
        "name": "getColliderShapeId",
        "kind": "function",
        "signature": "getColliderShapeId(shapeName)",
        "summary": "Get collider shape ID from name"
      },
      {
        "name": "getColliderShapeName",
        "kind": "function",
        "signature": "getColliderShapeName(shapeId)",
        "summary": "Get collider shape name from ID"
      },
      {
        "name": "getLightTypeId",
        "kind": "function",
        "signature": "getLightTypeId(typeName)",
        "summary": "Get light type ID from name"
      },
      {
        "name": "getLightTypeName",
        "kind": "function",
        "signature": "getLightTypeName(typeId)",
        "summary": "Get light type name from ID"
      },
      {
        "name": "getCameraProjectionId",
        "kind": "function",
        "signature": "getCameraProjectionId(projName)",
        "summary": "Get camera projection ID from name"
      },
      {
        "name": "getEmitterShapeId",
        "kind": "function",
        "signature": "getEmitterShapeId(shapeName)",
        "summary": "Get emitter shape ID from name"
      },
      {
        "name": "FIELD_TYPES",
        "kind": "constant",
        "signature": "FIELD_TYPES",
        "summary": "Common field types used across components"
      },
      {
        "name": "TRANSFORM_SCHEMA",
        "kind": "constant",
        "signature": "TRANSFORM_SCHEMA",
        "summary": "Transform component schema"
      },
      {
        "name": "PHYSICS_BODY_SCHEMA",
        "kind": "constant",
        "signature": "PHYSICS_BODY_SCHEMA",
        "summary": "PhysicsBody component schema"
      },
      {
        "name": "COLLIDER_SHAPES",
        "kind": "constant",
        "signature": "COLLIDER_SHAPES",
        "summary": "Collider shapes"
      },
      {
        "name": "COLLIDER_SCHEMA",
        "kind": "constant",
        "signature": "COLLIDER_SCHEMA",
        "summary": "Collider component schema"
      },
      {
        "name": "LIGHT_TYPES",
        "kind": "constant",
        "signature": "LIGHT_TYPES",
        "summary": "Light types"
      },
      {
        "name": "LIGHT_SCHEMA",
        "kind": "constant",
        "signature": "LIGHT_SCHEMA",
        "summary": "Light component schema"
      },
      {
        "name": "CAMERA_PROJECTIONS",
        "kind": "constant",
        "signature": "CAMERA_PROJECTIONS",
        "summary": "Camera projection types"
      },
      {
        "name": "CAMERA_MODES",
        "kind": "constant",
        "signature": "CAMERA_MODES",
        "summary": "Camera modes"
      },
      {
        "name": "CAMERA_SCHEMA",
        "kind": "constant",
        "signature": "CAMERA_SCHEMA",
        "summary": "Camera component schema"
      },
      {
        "name": "RENDERABLE_SCHEMA",
        "kind": "constant",
        "signature": "RENDERABLE_SCHEMA",
        "summary": "Renderable component schema"
      },
      {
        "name": "EMITTER_SHAPES",
        "kind": "constant",
        "signature": "EMITTER_SHAPES",
        "summary": "Emitter shapes for particle spawning"
      },
      {
        "name": "PARTICLE_EMITTER_SCHEMA",
        "kind": "constant",
        "signature": "PARTICLE_EMITTER_SCHEMA",
        "summary": "ParticleEmitter component schema"
      },
      {
        "name": "NAV_AGENT_SCHEMA",
        "kind": "constant",
        "signature": "NAV_AGENT_SCHEMA",
        "summary": "NavAgent component schema"
      },
      {
        "name": "CHAIN_BACKENDS",
        "kind": "constant",
        "signature": "CHAIN_BACKENDS",
        "summary": "Chain physics backends"
      },
      {
        "name": "ROPE_BACKENDS",
        "kind": "constant",
        "signature": "ROPE_BACKENDS",
        "summary": ""
      },
      {
        "name": "PHYSICS_CHAIN_SCHEMA",
        "kind": "constant",
        "signature": "PHYSICS_CHAIN_SCHEMA",
        "summary": "PhysicsChain component schema (unified: particle chains + rigid chains) mode: \"particle\" = PBD/GPU/PhysX particle chain (formerly PhysicsRope) mode: \"rigid\"    = rigid linked chain (formerly PhysicsChain)"
      },
      {
        "name": "PHYSICS_ROPE_SCHEMA",
        "kind": "constant",
        "signature": "PHYSICS_ROPE_SCHEMA",
        "summary": ""
      },
      {
        "name": "TWISTED_ROPE_SCHEMA",
        "kind": "constant",
        "signature": "TWISTED_ROPE_SCHEMA",
        "summary": ""
      },
      {
        "name": "WELD_TYPES",
        "kind": "constant",
        "signature": "WELD_TYPES",
        "summary": "Weld constraint types"
      },
      {
        "name": "WELD_CONSTRAINT_SCHEMA",
        "kind": "constant",
        "signature": "WELD_CONSTRAINT_SCHEMA",
        "summary": "WeldConstraint component schema - Defines a physics weld between two entities Welds merge collision shapes from child into parent, creating compound bodies. When saved: stores entity IDs and offset When loaded: recreates weld during physics init"
      },
      {
        "name": "COLLISION_MODES",
        "kind": "constant",
        "signature": "COLLISION_MODES",
        "summary": "Collision modes - determines how physics engine handles collisions Maps to PhysX PxPairFlags and shape flags"
      },
      {
        "name": "COLLISION_LAYERS",
        "kind": "constant",
        "signature": "COLLISION_LAYERS",
        "summary": "Predefined collision layers (bitmask) Each entity belongs to one layer (collisionLayer) and can collide with multiple layers (collisionMask)"
      },
      {
        "name": "ENTITY_FLAGS_SCHEMA",
        "kind": "constant",
        "signature": "ENTITY_FLAGS_SCHEMA",
        "summary": "EntityFlags component schema - Unified flags for collision, visibility, and editor behavior This component centralizes all entity interaction flags: - Collision: layer/mask filtering, collision mode (solid/trigger/noPush/ghost) - Visibility: render visibility, layer masks, editor-only visibility - Editor: pickable, selectable, locked, hidden in hierarchy - Physics: weldable, pushable, sleepable PhysX Integration: - collisionLayer → PxFilterData.word0 - collisionMask → PxFilterData.word1 - collisionMode → PxPairFlags (eSOLVE_CONTACT, eDETECT_DISCRETE_CONTACT, etc.)"
      },
      {
        "name": "COMPONENT_SCHEMAS",
        "kind": "constant",
        "signature": "COMPONENT_SCHEMAS",
        "summary": ""
      },
      {
        "name": "ENTITY_SCHEMA",
        "kind": "constant",
        "signature": "ENTITY_SCHEMA",
        "summary": "Complete entity schema (entity + components)"
      },
      {
        "name": "ENTITY_SNAPSHOT_SCHEMA",
        "kind": "constant",
        "signature": "ENTITY_SNAPSHOT_SCHEMA",
        "summary": "Entity state snapshot (for rewind)"
      },
      {
        "name": "WORLD_SNAPSHOT_SCHEMA",
        "kind": "constant",
        "signature": "WORLD_SNAPSHOT_SCHEMA",
        "summary": "World snapshot schema"
      },
      {
        "name": "validatePhysicsRope",
        "kind": "constant",
        "signature": "validatePhysicsRope",
        "summary": ""
      },
      {
        "name": "createDefaultPhysicsRope",
        "kind": "constant",
        "signature": "createDefaultPhysicsRope",
        "summary": ""
      },
      {
        "name": "normalizeAny",
        "kind": "re-export",
        "signature": "normalizeAny",
        "summary": ""
      },
      {
        "name": "normalizeArray",
        "kind": "re-export",
        "signature": "normalizeArray",
        "summary": ""
      },
      {
        "name": "normalizeBoolean",
        "kind": "re-export",
        "signature": "normalizeBoolean",
        "summary": ""
      },
      {
        "name": "normalizeEnum",
        "kind": "re-export",
        "signature": "normalizeEnum",
        "summary": ""
      },
      {
        "name": "normalizeNumber",
        "kind": "re-export",
        "signature": "normalizeNumber",
        "summary": ""
      },
      {
        "name": "normalizeQuat",
        "kind": "re-export",
        "signature": "normalizeQuat",
        "summary": ""
      },
      {
        "name": "normalizeString",
        "kind": "re-export",
        "signature": "normalizeString",
        "summary": ""
      },
      {
        "name": "normalizeVec2",
        "kind": "re-export",
        "signature": "normalizeVec2",
        "summary": ""
      },
      {
        "name": "normalizeVec3",
        "kind": "re-export",
        "signature": "normalizeVec3",
        "summary": ""
      },
      {
        "name": "normalizeVec3Nullable",
        "kind": "re-export",
        "signature": "normalizeVec3Nullable",
        "summary": ""
      },
      {
        "name": "normalizeVec4",
        "kind": "re-export",
        "signature": "normalizeVec4",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/SceneInit",
    "path": "engine/reference/ecs/SceneInit.md",
    "source": "engine/ecs/SceneInit.js",
    "import": "/engine/ecs/SceneInit.js",
    "sourceHash": "0191ada9a32aa642d0a83fd27a463bad9cf914975b3f474e71712da07c79ed5b",
    "summary": "Initialize ECS world with physics sandbox scene.",
    "exports": [
      {
        "name": "initEcsWorld",
        "kind": "function",
        "signature": "initEcsWorld(options)",
        "summary": "Initialize ECS world with physics sandbox scene."
      },
      {
        "name": "createMinimalWorld",
        "kind": "function",
        "signature": "createMinimalWorld(options = {})",
        "summary": "Create a minimal ECS world without physics sandbox."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/Camera",
    "path": "engine/reference/ecs/components/Camera.md",
    "source": "engine/ecs/components/Camera.js",
    "import": "/engine/ecs/components/Camera.js",
    "sourceHash": "2f2a6d26b5253b5e5b656832196f0824969b3d67ec83775279ebc18b79adb807",
    "summary": "",
    "exports": [
      {
        "name": "createCamera",
        "kind": "function",
        "signature": "createCamera(initial)",
        "summary": ""
      },
      {
        "name": "CameraDefinition",
        "kind": "constant",
        "signature": "CameraDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/Cloth",
    "path": "engine/reference/ecs/components/Cloth.md",
    "source": "engine/ecs/components/Cloth.js",
    "import": "/engine/ecs/components/Cloth.js",
    "sourceHash": "62973a25300366a157b5b3902519e6b0036ffad000c1f4ff7b5afbf114d67ba0",
    "summary": "",
    "exports": [
      {
        "name": "createCloth",
        "kind": "function",
        "signature": "createCloth(initial)",
        "summary": ""
      },
      {
        "name": "ClothDefinition",
        "kind": "constant",
        "signature": "ClothDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/Collider",
    "path": "engine/reference/ecs/components/Collider.md",
    "source": "engine/ecs/components/Collider.js",
    "import": "/engine/ecs/components/Collider.js",
    "sourceHash": "c338cb8e4f9b9c7c387c24e1a409342eae3e29be7774ce312adcf27f56d49741",
    "summary": "",
    "exports": [
      {
        "name": "createCollider",
        "kind": "function",
        "signature": "createCollider(initial)",
        "summary": ""
      },
      {
        "name": "ColliderDefinition",
        "kind": "constant",
        "signature": "ColliderDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/ComponentRegistry",
    "path": "engine/reference/ecs/components/ComponentRegistry.md",
    "source": "engine/ecs/components/ComponentRegistry.js",
    "import": "/engine/ecs/components/ComponentRegistry.js",
    "sourceHash": "f88996c3cb2d21f5588306dabd04fc3560b3f6f9830e28067ce95afe565365dc",
    "summary": "Get schema for a component from EntitySchema",
    "exports": [
      {
        "name": "defineComponentType",
        "kind": "function",
        "signature": "defineComponentType(config)",
        "summary": ""
      },
      {
        "name": "getComponentDefinition",
        "kind": "function",
        "signature": "getComponentDefinition(name)",
        "summary": ""
      },
      {
        "name": "listComponentDefinitions",
        "kind": "function",
        "signature": "listComponentDefinitions()",
        "summary": ""
      },
      {
        "name": "getComponentSchema",
        "kind": "function",
        "signature": "getComponentSchema(name)",
        "summary": "Get schema for a component from EntitySchema"
      },
      {
        "name": "validateComponentSchema",
        "kind": "function",
        "signature": "validateComponentSchema(name, value)",
        "summary": "Validate component using EntitySchema"
      },
      {
        "name": "createDefaultFromSchema",
        "kind": "function",
        "signature": "createDefaultFromSchema(name)",
        "summary": "Create default component using EntitySchema"
      },
      {
        "name": "getRegisteredSchemaNames",
        "kind": "re-export",
        "signature": "getRegisteredSchemaNames",
        "summary": ""
      },
      {
        "name": "registerComponentSchema",
        "kind": "re-export",
        "signature": "registerComponentSchema",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/FluidSource",
    "path": "engine/reference/ecs/components/FluidSource.md",
    "source": "engine/ecs/components/FluidSource.js",
    "import": "/engine/ecs/components/FluidSource.js",
    "sourceHash": "eefdb3ea87139b4f47c6b987485fbfe12eeda25bcb52b10401af6f8005430f85",
    "summary": "",
    "exports": [
      {
        "name": "createFluidSource",
        "kind": "function",
        "signature": "createFluidSource(initial)",
        "summary": ""
      },
      {
        "name": "FluidSourceDefinition",
        "kind": "constant",
        "signature": "FluidSourceDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/FluidVolume",
    "path": "engine/reference/ecs/components/FluidVolume.md",
    "source": "engine/ecs/components/FluidVolume.js",
    "import": "/engine/ecs/components/FluidVolume.js",
    "sourceHash": "7d050745aacf9674b5a893d6caeda7c1e137f871e8b89d3737d77e567d83d3da",
    "summary": "",
    "exports": [
      {
        "name": "createFluidVolume",
        "kind": "function",
        "signature": "createFluidVolume(initial)",
        "summary": ""
      },
      {
        "name": "FluidVolumeDefinition",
        "kind": "constant",
        "signature": "FluidVolumeDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/Input",
    "path": "engine/reference/ecs/components/Input.md",
    "source": "engine/ecs/components/Input.js",
    "import": "/engine/ecs/components/Input.js",
    "sourceHash": "f6c864bf3d36730e0023711553587b084569f50e9dd4cedfc98939e039b345ce",
    "summary": "",
    "exports": [
      {
        "name": "createInput",
        "kind": "function",
        "signature": "createInput(initial)",
        "summary": ""
      },
      {
        "name": "InputDefinition",
        "kind": "constant",
        "signature": "InputDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/Light",
    "path": "engine/reference/ecs/components/Light.md",
    "source": "engine/ecs/components/Light.js",
    "import": "/engine/ecs/components/Light.js",
    "sourceHash": "deaea5b6fa7421475d414bde33193b7f366c7079db2057e20f3b69dcd07a077a",
    "summary": "",
    "exports": [
      {
        "name": "createLight",
        "kind": "function",
        "signature": "createLight(initial)",
        "summary": ""
      },
      {
        "name": "LightDefinition",
        "kind": "constant",
        "signature": "LightDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/NavAgent",
    "path": "engine/reference/ecs/components/NavAgent.md",
    "source": "engine/ecs/components/NavAgent.js",
    "import": "/engine/ecs/components/NavAgent.js",
    "sourceHash": "8ee7a8b42071f6a987755569aaa90a6d00492ec4dad9b4221f05b15c3a704537",
    "summary": "",
    "exports": [
      {
        "name": "createNavAgent",
        "kind": "function",
        "signature": "createNavAgent(initial)",
        "summary": ""
      },
      {
        "name": "NavAgentDefinition",
        "kind": "constant",
        "signature": "NavAgentDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/NetReplicated",
    "path": "engine/reference/ecs/components/NetReplicated.md",
    "source": "engine/ecs/components/NetReplicated.js",
    "import": "/engine/ecs/components/NetReplicated.js",
    "sourceHash": "ff2cc3c46e8016dd5f0830eabeb787529691e4400a6bac83707a38e1cfab4ddb",
    "summary": "",
    "exports": [
      {
        "name": "createNetReplicated",
        "kind": "function",
        "signature": "createNetReplicated(initial)",
        "summary": ""
      },
      {
        "name": "NetReplicatedDefinition",
        "kind": "constant",
        "signature": "NetReplicatedDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/ParticleEmitter",
    "path": "engine/reference/ecs/components/ParticleEmitter.md",
    "source": "engine/ecs/components/ParticleEmitter.js",
    "import": "/engine/ecs/components/ParticleEmitter.js",
    "sourceHash": "495091be90a49587d51209227d922ab28403d0ae883333f8ea2cacb0401adf72",
    "summary": "",
    "exports": [
      {
        "name": "createParticleEmitter",
        "kind": "function",
        "signature": "createParticleEmitter(initial)",
        "summary": ""
      },
      {
        "name": "ParticleEmitterDefinition",
        "kind": "constant",
        "signature": "ParticleEmitterDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/ParticleField",
    "path": "engine/reference/ecs/components/ParticleField.md",
    "source": "engine/ecs/components/ParticleField.js",
    "import": "/engine/ecs/components/ParticleField.js",
    "sourceHash": "9e15856f40893f783354ed9f609d9e3368ed6a62c22e768958acc77ceb273f2f",
    "summary": "",
    "exports": [
      {
        "name": "createParticleField",
        "kind": "function",
        "signature": "createParticleField(initial)",
        "summary": ""
      },
      {
        "name": "ParticleFieldDefinition",
        "kind": "constant",
        "signature": "ParticleFieldDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/PhysicalMaterial",
    "path": "engine/reference/ecs/components/PhysicalMaterial.md",
    "source": "engine/ecs/components/PhysicalMaterial.js",
    "import": "/engine/ecs/components/PhysicalMaterial.js",
    "sourceHash": "51912f01e27b4bac788677bba12d33502dd95c6be0496d5ea164c5fe2d8966ff",
    "summary": "",
    "exports": [
      {
        "name": "createPhysicalMaterialComponent",
        "kind": "function",
        "signature": "createPhysicalMaterialComponent(initial)",
        "summary": ""
      },
      {
        "name": "PhysicalMaterialDefinition",
        "kind": "constant",
        "signature": "PhysicalMaterialDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/PhysicsBody",
    "path": "engine/reference/ecs/components/PhysicsBody.md",
    "source": "engine/ecs/components/PhysicsBody.js",
    "import": "/engine/ecs/components/PhysicsBody.js",
    "sourceHash": "3294d24e457177c44d3396fa1ca4a76a8e634ade0327d7d9d9fb8acf171601c1",
    "summary": "",
    "exports": [
      {
        "name": "createPhysicsBody",
        "kind": "function",
        "signature": "createPhysicsBody(initial)",
        "summary": ""
      },
      {
        "name": "PhysicsBodyDefinition",
        "kind": "constant",
        "signature": "PhysicsBodyDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/PhysicsChain",
    "path": "engine/reference/ecs/components/PhysicsChain.md",
    "source": "engine/ecs/components/PhysicsChain.js",
    "import": "/engine/ecs/components/PhysicsChain.js",
    "sourceHash": "9b76c6dfb9e056b407c029cfc724ee25e0cd436f53ed38b944ac30d3f51e9860",
    "summary": "",
    "exports": [
      {
        "name": "createPhysicsChain",
        "kind": "function",
        "signature": "createPhysicsChain(initial)",
        "summary": ""
      },
      {
        "name": "PhysicsChainDefinition",
        "kind": "constant",
        "signature": "PhysicsChainDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/PhysicsCloth",
    "path": "engine/reference/ecs/components/PhysicsCloth.md",
    "source": "engine/ecs/components/PhysicsCloth.js",
    "import": "/engine/ecs/components/PhysicsCloth.js",
    "sourceHash": "b3c742066e869e8840ea02a8f779a4ea95ee395cd8ca85de679923878a0e2f24",
    "summary": "",
    "exports": [
      {
        "name": "createPhysicsCloth",
        "kind": "function",
        "signature": "createPhysicsCloth(initial)",
        "summary": ""
      },
      {
        "name": "PhysicsClothDefinition",
        "kind": "constant",
        "signature": "PhysicsClothDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/PhysicsHair",
    "path": "engine/reference/ecs/components/PhysicsHair.md",
    "source": "engine/ecs/components/PhysicsHair.js",
    "import": "/engine/ecs/components/PhysicsHair.js",
    "sourceHash": "9d5fbf8828b48359016961f0d4d32004f81d9eb0287ba4cb593abde420011c69",
    "summary": "",
    "exports": [
      {
        "name": "createPhysicsHair",
        "kind": "function",
        "signature": "createPhysicsHair(initial)",
        "summary": ""
      },
      {
        "name": "PhysicsHairDefinition",
        "kind": "constant",
        "signature": "PhysicsHairDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/PhysicsRope",
    "path": "engine/reference/ecs/components/PhysicsRope.md",
    "source": "engine/ecs/components/PhysicsRope.js",
    "import": "/engine/ecs/components/PhysicsRope.js",
    "sourceHash": "c68804de3d9f98c828a86e540ae40258e731d27e399795b87a42ac4f6b3e0b1d",
    "summary": "",
    "exports": [
      {
        "name": "createPhysicsRope",
        "kind": "function",
        "signature": "createPhysicsRope(initial)",
        "summary": ""
      },
      {
        "name": "PhysicsRopeDefinition",
        "kind": "constant",
        "signature": "PhysicsRopeDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/PhysicsSoftBody",
    "path": "engine/reference/ecs/components/PhysicsSoftBody.md",
    "source": "engine/ecs/components/PhysicsSoftBody.js",
    "import": "/engine/ecs/components/PhysicsSoftBody.js",
    "sourceHash": "7ac7d8e6aa7fef86b46b2d38daf5b0271f8be612c60743c6f5745a04bf56dfa1",
    "summary": "",
    "exports": [
      {
        "name": "createPhysicsSoftBody",
        "kind": "function",
        "signature": "createPhysicsSoftBody(initial)",
        "summary": ""
      },
      {
        "name": "PhysicsSoftBodyDefinition",
        "kind": "constant",
        "signature": "PhysicsSoftBodyDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/PhysicsWire",
    "path": "engine/reference/ecs/components/PhysicsWire.md",
    "source": "engine/ecs/components/PhysicsWire.js",
    "import": "/engine/ecs/components/PhysicsWire.js",
    "sourceHash": "cef57e533c2d76bfb1c9395af163a0b9fad50b905a339050b5f0e79cd6ff01fb",
    "summary": "",
    "exports": [
      {
        "name": "createPhysicsWire",
        "kind": "function",
        "signature": "createPhysicsWire(initial)",
        "summary": ""
      },
      {
        "name": "PhysicsWireDefinition",
        "kind": "constant",
        "signature": "PhysicsWireDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/Renderable",
    "path": "engine/reference/ecs/components/Renderable.md",
    "source": "engine/ecs/components/Renderable.js",
    "import": "/engine/ecs/components/Renderable.js",
    "sourceHash": "21bb42c82a3f13aea4c29f4d96e388154105be43d8117b5218365bfea7145b24",
    "summary": "",
    "exports": [
      {
        "name": "createRenderable",
        "kind": "function",
        "signature": "createRenderable(initial)",
        "summary": ""
      },
      {
        "name": "RenderableDefinition",
        "kind": "constant",
        "signature": "RenderableDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/StickmanRagdoll",
    "path": "engine/reference/ecs/components/StickmanRagdoll.md",
    "source": "engine/ecs/components/StickmanRagdoll.js",
    "import": "/engine/ecs/components/StickmanRagdoll.js",
    "sourceHash": "e18b2bf47447bdc3ec3152956b2226b6079b10e9c6bd228af186dcb4db32a98b",
    "summary": "",
    "exports": [
      {
        "name": "createStickmanRagdoll",
        "kind": "function",
        "signature": "createStickmanRagdoll(initial)",
        "summary": ""
      },
      {
        "name": "StickmanRagdollDefinition",
        "kind": "constant",
        "signature": "StickmanRagdollDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/Transform",
    "path": "engine/reference/ecs/components/Transform.md",
    "source": "engine/ecs/components/Transform.js",
    "import": "/engine/ecs/components/Transform.js",
    "sourceHash": "61e9493e103a2ec9a4a4cda8b4a6c5ee2134114dd4a458bd8a8953863f880f54",
    "summary": "",
    "exports": [
      {
        "name": "createTransform",
        "kind": "function",
        "signature": "createTransform(initial)",
        "summary": ""
      },
      {
        "name": "TransformDefinition",
        "kind": "constant",
        "signature": "TransformDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/TwistedRope",
    "path": "engine/reference/ecs/components/TwistedRope.md",
    "source": "engine/ecs/components/TwistedRope.js",
    "import": "/engine/ecs/components/TwistedRope.js",
    "sourceHash": "50328d830d5a1de0da01bdfe04994abe82323434d05c687abd39689c3b7bb5fc",
    "summary": "",
    "exports": [
      {
        "name": "TwistedRopeDefinition",
        "kind": "constant",
        "signature": "TwistedRopeDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/components/WeldConstraint",
    "path": "engine/reference/ecs/components/WeldConstraint.md",
    "source": "engine/ecs/components/WeldConstraint.js",
    "import": "/engine/ecs/components/WeldConstraint.js",
    "sourceHash": "e6cd106c78dc16269dac6788d2edf04376b1cdfa93609b9c4fb8156852394d40",
    "summary": "Create a new WeldConstraint component",
    "exports": [
      {
        "name": "createWeldConstraint",
        "kind": "function",
        "signature": "createWeldConstraint(initial)",
        "summary": "Create a new WeldConstraint component"
      },
      {
        "name": "createWeld",
        "kind": "function",
        "signature": "createWeld(parentEntityId, childEntityId, options = {})",
        "summary": "Create a weld constraint between two entities"
      },
      {
        "name": "isValidWeld",
        "kind": "function",
        "signature": "isValidWeld(weld)",
        "summary": "Check if a weld constraint is valid"
      },
      {
        "name": "breakWeld",
        "kind": "function",
        "signature": "breakWeld(weld)",
        "summary": "Mark a weld as broken"
      },
      {
        "name": "WeldConstraintDefinition",
        "kind": "constant",
        "signature": "WeldConstraintDefinition",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/prefabs/PrefabRegistry",
    "path": "engine/reference/ecs/prefabs/PrefabRegistry.md",
    "source": "engine/ecs/prefabs/PrefabRegistry.js",
    "import": "/engine/ecs/prefabs/PrefabRegistry.js",
    "sourceHash": "8feaa467513f1ff392a44a9152aabd1843aa293222df835d97bcc64b2dafd914",
    "summary": "PrefabRegistry - Runtime prefab system for entity templates Prefabs define reusable entity configurations including: - Default components - Geometry data - Collider configuration - Visual properties The editor uses spawnables which extend this with spawn UI logic. Runtime uses prefabs directly for instantiation.",
    "exports": [
      {
        "name": "registerPrefab",
        "kind": "function",
        "signature": "registerPrefab(id, definition)",
        "summary": "Register a prefab"
      },
      {
        "name": "getPrefab",
        "kind": "function",
        "signature": "getPrefab(id)",
        "summary": "Get a prefab by ID"
      },
      {
        "name": "getAllPrefabs",
        "kind": "function",
        "signature": "getAllPrefabs()",
        "summary": "Get all registered prefabs"
      },
      {
        "name": "getPrefabsByCategory",
        "kind": "function",
        "signature": "getPrefabsByCategory(category)",
        "summary": "Get prefabs by category"
      },
      {
        "name": "instantiatePrefab",
        "kind": "function",
        "signature": "instantiatePrefab(id, overrides = {})",
        "summary": "Instantiate a prefab into components"
      },
      {
        "name": "clearPrefabs",
        "kind": "function",
        "signature": "clearPrefabs()",
        "summary": "Clear all prefabs (for testing)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/prefabs/index",
    "path": "engine/reference/ecs/prefabs/index.md",
    "source": "engine/ecs/prefabs/index.js",
    "import": "/engine/ecs/prefabs/index.js",
    "sourceHash": "5a267fb89a0a9ced984bde99b265cfa48a9d41aa1d626faa99652438157f69ca",
    "summary": "Prefab System - Runtime entity templates",
    "exports": [
      {
        "name": "clearPrefabs",
        "kind": "re-export",
        "signature": "clearPrefabs",
        "summary": ""
      },
      {
        "name": "getAllPrefabs",
        "kind": "re-export",
        "signature": "getAllPrefabs",
        "summary": ""
      },
      {
        "name": "getPrefab",
        "kind": "re-export",
        "signature": "getPrefab",
        "summary": ""
      },
      {
        "name": "getPrefabsByCategory",
        "kind": "re-export",
        "signature": "getPrefabsByCategory",
        "summary": ""
      },
      {
        "name": "instantiatePrefab",
        "kind": "re-export",
        "signature": "instantiatePrefab",
        "summary": ""
      },
      {
        "name": "registerPrefab",
        "kind": "re-export",
        "signature": "registerPrefab",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/query/Query",
    "path": "engine/reference/ecs/query/Query.md",
    "source": "engine/ecs/query/Query.js",
    "import": "/engine/ecs/query/Query.js",
    "sourceHash": "8d0393bcf53045a15537c60650dd36e309d73b363eee1baa92aad0231e58b6b1",
    "summary": "",
    "exports": [
      {
        "name": "createQuery",
        "kind": "function",
        "signature": "createQuery(options)",
        "summary": ""
      },
      {
        "name": "forEachEntity",
        "kind": "function",
        "signature": "forEachEntity(world, query, callback)",
        "summary": ""
      },
      {
        "name": "getQueryDebugSnapshot",
        "kind": "function",
        "signature": "getQueryDebugSnapshot(world, query)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/replication/ReplicationProfiles",
    "path": "engine/reference/ecs/replication/ReplicationProfiles.md",
    "source": "engine/ecs/replication/ReplicationProfiles.js",
    "import": "/engine/ecs/replication/ReplicationProfiles.js",
    "sourceHash": "fd20614cc73ec7ed47feeaab955a8981d39815dead98671fffbc0b346e335900",
    "summary": "",
    "exports": [
      {
        "name": "defineReplicationProfile",
        "kind": "function",
        "signature": "defineReplicationProfile(name, definition, options = {})",
        "summary": ""
      },
      {
        "name": "getReplicationProfile",
        "kind": "function",
        "signature": "getReplicationProfile(name)",
        "summary": ""
      },
      {
        "name": "listReplicationProfiles",
        "kind": "function",
        "signature": "listReplicationProfiles()",
        "summary": ""
      },
      {
        "name": "resolveReplicationProfile",
        "kind": "function",
        "signature": "resolveReplicationProfile(name, overrides = {})",
        "summary": ""
      },
      {
        "name": "profileAllowsComponent",
        "kind": "function",
        "signature": "profileAllowsComponent(profileOrName, componentName)",
        "summary": ""
      },
      {
        "name": "createReplicationProjection",
        "kind": "function",
        "signature": "createReplicationProjection(netReplicated, components, context = {})",
        "summary": ""
      },
      {
        "name": "REPLICATION_AUTHORITY",
        "kind": "constant",
        "signature": "REPLICATION_AUTHORITY",
        "summary": ""
      },
      {
        "name": "REPLICATION_STRATEGY",
        "kind": "constant",
        "signature": "REPLICATION_STRATEGY",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/storage/ArchetypeStorage",
    "path": "engine/reference/ecs/storage/ArchetypeStorage.md",
    "source": "engine/ecs/storage/ArchetypeStorage.js",
    "import": "/engine/ecs/storage/ArchetypeStorage.js",
    "sourceHash": "4d9861178db23867f8c92b3c48f8ea06dfd30810533a54e9255248568c770be8",
    "summary": "Fast path: update an existing component WITHOUT normalization. Use ONLY when the value is already known-valid (e.g., from physics engine output). The entity MUST already have this component — this will NOT add new components. Returns the value if successful, null if entity/component not found.",
    "exports": [
      {
        "name": "createArchetypeStorage",
        "kind": "function",
        "signature": "createArchetypeStorage(world)",
        "summary": ""
      },
      {
        "name": "getArchetypeStorage",
        "kind": "function",
        "signature": "getArchetypeStorage(world)",
        "summary": ""
      },
      {
        "name": "setEntityComponent",
        "kind": "function",
        "signature": "setEntityComponent(world, entityId, componentName, value)",
        "summary": ""
      },
      {
        "name": "setEntityComponentDirect",
        "kind": "function",
        "signature": "setEntityComponentDirect(world, entityId, componentName, value)",
        "summary": "Fast path: update an existing component WITHOUT normalization. Use ONLY when the value is already known-valid (e.g., from physics engine output). The entity MUST already have this component — this will NOT add new components. Returns the value if successful, null if entity/component not found."
      },
      {
        "name": "removeEntityComponent",
        "kind": "function",
        "signature": "removeEntityComponent(world, entityId, componentName)",
        "summary": ""
      },
      {
        "name": "removeEntityFromStorage",
        "kind": "function",
        "signature": "removeEntityFromStorage(world, entityId)",
        "summary": ""
      },
      {
        "name": "getEntityComponent",
        "kind": "function",
        "signature": "getEntityComponent(world, entityId, componentName)",
        "summary": ""
      },
      {
        "name": "getEntityComponentRecord",
        "kind": "function",
        "signature": "getEntityComponentRecord(world, entityId)",
        "summary": ""
      },
      {
        "name": "getArchetypeStorageSnapshot",
        "kind": "function",
        "signature": "getArchetypeStorageSnapshot(world)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/systems/CameraSystem",
    "path": "engine/reference/ecs/systems/CameraSystem.md",
    "source": "engine/ecs/systems/CameraSystem.js",
    "import": "/engine/ecs/systems/CameraSystem.js",
    "sourceHash": "695afb7622e89a7ad7a22a8c14232989f0037471fbf771d56e86da1ff3b37fc8",
    "summary": "",
    "exports": [
      {
        "name": "registerCameraSystem",
        "kind": "function",
        "signature": "registerCameraSystem(world, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/systems/ClothSystem",
    "path": "engine/reference/ecs/systems/ClothSystem.md",
    "source": "engine/ecs/systems/ClothSystem.js",
    "import": "/engine/ecs/systems/ClothSystem.js",
    "sourceHash": "da58b16f312541cd8a8140e6cbf5eb835602261a56f899dab24e496502eec18e",
    "summary": "",
    "exports": [
      {
        "name": "registerClothSystem",
        "kind": "function",
        "signature": "registerClothSystem(world, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/systems/FluidDebugSystem",
    "path": "engine/reference/ecs/systems/FluidDebugSystem.md",
    "source": "engine/ecs/systems/FluidDebugSystem.js",
    "import": "/engine/ecs/systems/FluidDebugSystem.js",
    "sourceHash": "7836595eb31d688a76af1506153fc176ec521b5923f8d948c943bfec227ed90e",
    "summary": "",
    "exports": [
      {
        "name": "registerFluidDebugSystem",
        "kind": "function",
        "signature": "registerFluidDebugSystem(world, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/systems/FluidSystem",
    "path": "engine/reference/ecs/systems/FluidSystem.md",
    "source": "engine/ecs/systems/FluidSystem.js",
    "import": "/engine/ecs/systems/FluidSystem.js",
    "sourceHash": "eadaaf44eeb6b66e281a30985312b900751b5afd7f76ba51abf139cf8d6b7554",
    "summary": "",
    "exports": [
      {
        "name": "registerFluidSystem",
        "kind": "function",
        "signature": "registerFluidSystem(world, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/systems/NavAgentSystem",
    "path": "engine/reference/ecs/systems/NavAgentSystem.md",
    "source": "engine/ecs/systems/NavAgentSystem.js",
    "import": "/engine/ecs/systems/NavAgentSystem.js",
    "sourceHash": "8517bc7f17d21ea75b99fc393bcb2ce14eeccb9f45a8859ad73414ab14c2ba30",
    "summary": "",
    "exports": [
      {
        "name": "registerNavAgentSystem",
        "kind": "function",
        "signature": "registerNavAgentSystem(world, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/systems/ParticleDebugSystem",
    "path": "engine/reference/ecs/systems/ParticleDebugSystem.md",
    "source": "engine/ecs/systems/ParticleDebugSystem.js",
    "import": "/engine/ecs/systems/ParticleDebugSystem.js",
    "sourceHash": "65ea67c5f6909715799af6f808c3762d7e858db4d5817b7c3d65cd2e87c3b5b1",
    "summary": "",
    "exports": [
      {
        "name": "registerParticleDebugSystem",
        "kind": "function",
        "signature": "registerParticleDebugSystem(world, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/systems/ParticleSystem",
    "path": "engine/reference/ecs/systems/ParticleSystem.md",
    "source": "engine/ecs/systems/ParticleSystem.js",
    "import": "/engine/ecs/systems/ParticleSystem.js",
    "sourceHash": "2efe4fa33f76622ce326f75a689d2c6fcd09670231cdd79e754f3a145098b2ae",
    "summary": "",
    "exports": [
      {
        "name": "registerParticleSystem",
        "kind": "function",
        "signature": "registerParticleSystem(world, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/systems/PerceptionSystem",
    "path": "engine/reference/ecs/systems/PerceptionSystem.md",
    "source": "engine/ecs/systems/PerceptionSystem.js",
    "import": "/engine/ecs/systems/PerceptionSystem.js",
    "sourceHash": "3b2fc98ecd4ea4e301e50f6e32848f8ae36a85b9e80f2197f568a99e80fa02f9",
    "summary": "",
    "exports": [
      {
        "name": "registerPerceptionSystem",
        "kind": "function",
        "signature": "registerPerceptionSystem(world, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/systems/PhysicsSystem",
    "path": "engine/reference/ecs/systems/PhysicsSystem.md",
    "source": "engine/ecs/systems/PhysicsSystem.js",
    "import": "/engine/ecs/systems/PhysicsSystem.js",
    "sourceHash": "17c569aa87fb2dec5d5dcf0a14bc39adf1c0ce9b205e85854161aa58aeaa942b",
    "summary": "",
    "exports": [
      {
        "name": "registerPhysicsSystem",
        "kind": "function",
        "signature": "registerPhysicsSystem(world, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/systems/SystemRegistry",
    "path": "engine/reference/ecs/systems/SystemRegistry.md",
    "source": "engine/ecs/systems/SystemRegistry.js",
    "import": "/engine/ecs/systems/SystemRegistry.js",
    "sourceHash": "bc499fa47c96bb2abb096361d69a79ddaf48f038d5b77e215fde1e63cd7790f2",
    "summary": "",
    "exports": [
      {
        "name": "registerSystem",
        "kind": "function",
        "signature": "registerSystem(world, descriptor)",
        "summary": ""
      },
      {
        "name": "unregisterSystem",
        "kind": "function",
        "signature": "unregisterSystem(world, systemOrId)",
        "summary": ""
      },
      {
        "name": "setSystemEnabled",
        "kind": "function",
        "signature": "setSystemEnabled(world, systemOrId, enabled)",
        "summary": ""
      },
      {
        "name": "getRegisteredSystems",
        "kind": "function",
        "signature": "getRegisteredSystems(world)",
        "summary": ""
      },
      {
        "name": "setSystemGroupEnabled",
        "kind": "function",
        "signature": "setSystemGroupEnabled(world, groupName, enabled)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/systems/ThirdPersonCameraSystem",
    "path": "engine/reference/ecs/systems/ThirdPersonCameraSystem.md",
    "source": "engine/ecs/systems/ThirdPersonCameraSystem.js",
    "import": "/engine/ecs/systems/ThirdPersonCameraSystem.js",
    "sourceHash": "c8aeca77bcc912493caddc269d5f730d70722b23db5d306cc4198bda0439afa4",
    "summary": "",
    "exports": [
      {
        "name": "registerThirdPersonCameraSystem",
        "kind": "function",
        "signature": "registerThirdPersonCameraSystem(world, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/systems/WorldSystem",
    "path": "engine/reference/ecs/systems/WorldSystem.md",
    "source": "engine/ecs/systems/WorldSystem.js",
    "import": "/engine/ecs/systems/WorldSystem.js",
    "sourceHash": "9e1eaad5fcf037e1c26bf67586bddcb0a1caebff0f89f5ec310e226c6be50c4b",
    "summary": "",
    "exports": [
      {
        "name": "registerWorldSystem",
        "kind": "function",
        "signature": "registerWorldSystem(world, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/world/World",
    "path": "engine/reference/ecs/world/World.md",
    "source": "engine/ecs/world/World.js",
    "import": "/engine/ecs/world/World.js",
    "sourceHash": "ae9cd51a68eb5ac3f84d35847cab849c086c8e1e8ab395771bdddb48df435547",
    "summary": "",
    "exports": [
      {
        "name": "createWorld",
        "kind": "function",
        "signature": "createWorld(options = {})",
        "summary": ""
      },
      {
        "name": "createEntity",
        "kind": "function",
        "signature": "createEntity(world)",
        "summary": ""
      },
      {
        "name": "destroyEntity",
        "kind": "function",
        "signature": "destroyEntity(world, id)",
        "summary": ""
      },
      {
        "name": "isEntityAlive",
        "kind": "function",
        "signature": "isEntityAlive(world, id)",
        "summary": ""
      },
      {
        "name": "getWorldStats",
        "kind": "function",
        "signature": "getWorldStats(world)",
        "summary": ""
      },
      {
        "name": "getWorldDebugSnapshot",
        "kind": "function",
        "signature": "getWorldDebugSnapshot(world, options = {})",
        "summary": ""
      },
      {
        "name": "captureWorldSnapshot",
        "kind": "function",
        "signature": "captureWorldSnapshot(world, options)",
        "summary": ""
      },
      {
        "name": "restoreWorldFromSnapshot",
        "kind": "function",
        "signature": "restoreWorldFromSnapshot(world, snapshot)",
        "summary": ""
      },
      {
        "name": "stepWorld",
        "kind": "function",
        "signature": "stepWorld(world, deltaSeconds)",
        "summary": ""
      },
      {
        "name": "stepWorldFrame",
        "kind": "function",
        "signature": "stepWorldFrame(world, deltaSeconds)",
        "summary": ""
      },
      {
        "name": "debugDecodeEntityId",
        "kind": "function",
        "signature": "debugDecodeEntityId(id)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "ecs/world/WorldPersistence",
    "path": "engine/reference/ecs/world/WorldPersistence.md",
    "source": "engine/ecs/world/WorldPersistence.js",
    "import": "/engine/ecs/world/WorldPersistence.js",
    "sourceHash": "1b9a4e02a4dc71814a30f77d22b27145b999a68c60d226a2187e24408be0f871",
    "summary": "",
    "exports": [
      {
        "name": "createWorldSavePayload",
        "kind": "function",
        "signature": "createWorldSavePayload(world, options = {})",
        "summary": ""
      },
      {
        "name": "restoreWorldFromSavePayload",
        "kind": "function",
        "signature": "restoreWorldFromSavePayload(world, payload, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/ai/InstinctGraph",
    "path": "engine/reference/gameplay/ai/InstinctGraph.md",
    "source": "engine/gameplay/ai/InstinctGraph.js",
    "import": "/engine/gameplay/ai/InstinctGraph.js",
    "sourceHash": "e3f49ca87ab1e2118e6b312c680c1826494f2e8749d2a321d1ee4f341cd935f3",
    "summary": "",
    "exports": [
      {
        "name": "InstinctGraph",
        "kind": "class",
        "signature": "class InstinctGraph",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/ai/NPCBrain",
    "path": "engine/reference/gameplay/ai/NPCBrain.md",
    "source": "engine/gameplay/ai/NPCBrain.js",
    "import": "/engine/gameplay/ai/NPCBrain.js",
    "sourceHash": "380ee5aae14fb3b9efa2ade1e794ef8c3fbc46dcf04aebcf2638d326e230b690",
    "summary": "NPCBrain — Tiny JavaScript brain for each NPC. Inputs feed drives. The strongest LEGAL drive wins (RuleGraph filters). Memory changes the weights over time. Drives: fight, flee, protect, steal, obey, betray, comfort, digBuild, follow, reportCrime",
    "exports": [
      {
        "name": "NPCBrain",
        "kind": "class",
        "signature": "class NPCBrain",
        "summary": ""
      },
      {
        "name": "DriveType",
        "kind": "constant",
        "signature": "DriveType",
        "summary": "NPCBrain — Tiny JavaScript brain for each NPC. Inputs feed drives. The strongest LEGAL drive wins (RuleGraph filters). Memory changes the weights over time. Drives: fight, flee, protect, steal, obey, betray, comfort, digBuild, follow, reportCrime"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/ai/index",
    "path": "engine/reference/gameplay/ai/index.md",
    "source": "engine/gameplay/ai/index.js",
    "import": "/engine/gameplay/ai/index.js",
    "sourceHash": "91b8a4123333cce75a789d28d43dc72425d9946e07a265388eed026ed81631c6",
    "summary": "",
    "exports": [
      {
        "name": "DriveType",
        "kind": "re-export",
        "signature": "DriveType",
        "summary": ""
      },
      {
        "name": "InstinctGraph",
        "kind": "re-export",
        "signature": "InstinctGraph",
        "summary": ""
      },
      {
        "name": "NPCBrain",
        "kind": "re-export",
        "signature": "NPCBrain",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/events/EventGraph",
    "path": "engine/reference/gameplay/events/EventGraph.md",
    "source": "engine/gameplay/events/EventGraph.js",
    "import": "/engine/gameplay/events/EventGraph.js",
    "sourceHash": "fb3c16fb62bb6fdab4f74ad772010899c6df6143f1fbb33167f33f242b905081",
    "summary": "EventGraph — The event bus and event log for LIFE. Every meaningful thing in the world becomes an event. Events power: memories, dialogue, reputation, crimes, family history, item souls, resolve changes, and storylet triggers. Events are immutable once created. The log is append-only. Listeners can subscribe to event types or use wildcard '*'.",
    "exports": [
      {
        "name": "EventGraph",
        "kind": "class",
        "signature": "class EventGraph",
        "summary": "EventGraph — global event bus + per-entity event logs."
      },
      {
        "name": "createEvent",
        "kind": "function",
        "signature": "createEvent(config)",
        "summary": "Creates an immutable event object."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/events/index",
    "path": "engine/reference/gameplay/events/index.md",
    "source": "engine/gameplay/events/index.js",
    "import": "/engine/gameplay/events/index.js",
    "sourceHash": "04097b1bef98c583344c7acb44c772b613ba03e153a12762cc0e7631b65b1e0d",
    "summary": "",
    "exports": [
      {
        "name": "EventGraph",
        "kind": "re-export",
        "signature": "EventGraph",
        "summary": ""
      },
      {
        "name": "createEvent",
        "kind": "re-export",
        "signature": "createEvent",
        "summary": ""
      },
      {
        "name": "default",
        "kind": "re-export",
        "signature": "default",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/inventory/Inventory",
    "path": "engine/reference/gameplay/inventory/Inventory.md",
    "source": "engine/gameplay/inventory/Inventory.js",
    "import": "/engine/gameplay/inventory/Inventory.js",
    "sourceHash": "7b0319de588145541bb74705c0e10e90b58c9e9715f0116ad07a7bf113d5ed3f",
    "summary": "",
    "exports": [
      {
        "name": "Inventory",
        "kind": "class",
        "signature": "class Inventory",
        "summary": ""
      },
      {
        "name": "defaultResolveEquipSlot",
        "kind": "function",
        "signature": "defaultResolveEquipSlot(itemData)",
        "summary": ""
      },
      {
        "name": "createInventory",
        "kind": "function",
        "signature": "createInventory(maxSlots, options)",
        "summary": ""
      },
      {
        "name": "EquipSlot",
        "kind": "constant",
        "signature": "EquipSlot",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/inventory/index",
    "path": "engine/reference/gameplay/inventory/index.md",
    "source": "engine/gameplay/inventory/index.js",
    "import": "/engine/gameplay/inventory/index.js",
    "sourceHash": "6b355e89862004a11957f4dce6c669b8a2d3e7dade3978ee898162536bddd4b6",
    "summary": "",
    "exports": [
      {
        "name": "EquipSlot",
        "kind": "re-export",
        "signature": "EquipSlot",
        "summary": ""
      },
      {
        "name": "Inventory",
        "kind": "re-export",
        "signature": "Inventory",
        "summary": ""
      },
      {
        "name": "createInventory",
        "kind": "re-export",
        "signature": "createInventory",
        "summary": ""
      },
      {
        "name": "default",
        "kind": "re-export",
        "signature": "default",
        "summary": ""
      },
      {
        "name": "defaultResolveEquipSlot",
        "kind": "re-export",
        "signature": "defaultResolveEquipSlot",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/items/ItemOwnership",
    "path": "engine/reference/gameplay/items/ItemOwnership.md",
    "source": "engine/gameplay/items/ItemOwnership.js",
    "import": "/engine/gameplay/items/ItemOwnership.js",
    "sourceHash": "b62ba607a847d7ddf95f786d9a2102bca0d5d2b6ba3fa8c4b041e915b4731e0c",
    "summary": "ItemOwnership — Tracks who owns what, detects theft, handles transfers.",
    "exports": [
      {
        "name": "ItemOwnership",
        "kind": "class",
        "signature": "class ItemOwnership",
        "summary": ""
      },
      {
        "name": "createOwnedItem",
        "kind": "function",
        "signature": "createOwnedItem(config)",
        "summary": ""
      },
      {
        "name": "TransferType",
        "kind": "constant",
        "signature": "TransferType",
        "summary": "ItemOwnership — Tracks who owns what, detects theft, handles transfers."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/items/ItemSoulSystem",
    "path": "engine/reference/gameplay/items/ItemSoulSystem.md",
    "source": "engine/gameplay/items/ItemSoulSystem.js",
    "import": "/engine/gameplay/items/ItemSoulSystem.js",
    "sourceHash": "ef9c5771d1798031d9788d8446ce72761497685de5828dc4c1b9ebc4b2b10270",
    "summary": "ItemSoulSystem — Items slowly gain souls through history. Stages: Normal → Remembered → Resonant → Awakened → Talking → Contract Item Soul growth triggers: named, used often, saved someone, repaired many times, inherited, used in major battles, exposed to domains, part of a contract, emotionally important, connected to death/rescue/betrayal/redemption.",
    "exports": [
      {
        "name": "ItemSoulSystem",
        "kind": "class",
        "signature": "class ItemSoulSystem",
        "summary": ""
      },
      {
        "name": "SoulStage",
        "kind": "constant",
        "signature": "SoulStage",
        "summary": "ItemSoulSystem — Items slowly gain souls through history. Stages: Normal → Remembered → Resonant → Awakened → Talking → Contract Item Soul growth triggers: named, used often, saved someone, repaired many times, inherited, used in major battles, exposed to domains, part of a contract, emotionally important, connected to death/rescue/betrayal/redemption."
      },
      {
        "name": "SOUL_STAGE_NAMES",
        "kind": "constant",
        "signature": "SOUL_STAGE_NAMES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/items/index",
    "path": "engine/reference/gameplay/items/index.md",
    "source": "engine/gameplay/items/index.js",
    "import": "/engine/gameplay/items/index.js",
    "sourceHash": "5d574ddaa25664dadf5a2fef3c01f15e2d0228b06ffc9e7da7f74c7389474f34",
    "summary": "",
    "exports": [
      {
        "name": "ItemOwnership",
        "kind": "re-export",
        "signature": "ItemOwnership",
        "summary": ""
      },
      {
        "name": "ItemSoulSystem",
        "kind": "re-export",
        "signature": "ItemSoulSystem",
        "summary": ""
      },
      {
        "name": "SOUL_STAGE_NAMES",
        "kind": "re-export",
        "signature": "SOUL_STAGE_NAMES",
        "summary": ""
      },
      {
        "name": "SoulStage",
        "kind": "re-export",
        "signature": "SoulStage",
        "summary": ""
      },
      {
        "name": "TransferType",
        "kind": "re-export",
        "signature": "TransferType",
        "summary": ""
      },
      {
        "name": "createOwnedItem",
        "kind": "re-export",
        "signature": "createOwnedItem",
        "summary": ""
      },
      {
        "name": "default",
        "kind": "re-export",
        "signature": "default",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/narrative/BackgroundMatcher",
    "path": "engine/reference/gameplay/narrative/BackgroundMatcher.md",
    "source": "engine/gameplay/narrative/BackgroundMatcher.js",
    "import": "/engine/gameplay/narrative/BackgroundMatcher.js",
    "sourceHash": "671b84924877d94019feecd39d644b2af81cf099ddc382040dc9a39e896f1e76",
    "summary": "BackgroundMatcher — Extracts origin tags from player-written background text. The player types a \"soul memory\" and the system extracts semantic tags that drive world generation: family type, culture, social status, early hardships, resolve seeds, and starting storylets. Uses keyword/phrase matching with weighted scoring. No heavy ML needed for the first playable — just pattern matching with synonyms.",
    "exports": [
      {
        "name": "extractOriginTags",
        "kind": "function",
        "signature": "extractOriginTags(text)",
        "summary": "Extract origin tags from player-written background text."
      },
      {
        "name": "mapTagsToOrigin",
        "kind": "function",
        "signature": "mapTagsToOrigin(tagResult)",
        "summary": "Map extracted tags to world generation parameters."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/narrative/DialogueSystem",
    "path": "engine/reference/gameplay/narrative/DialogueSystem.md",
    "source": "engine/gameplay/narrative/DialogueSystem.js",
    "import": "/engine/gameplay/narrative/DialogueSystem.js",
    "sourceHash": "a5580ae0cea0b3eae85580ddb165bdba50dfdee8123ed08abd2de89c46a11b90",
    "summary": "DialogueSystem — Dynamic narrative template system. Pipeline: event → intent → template → mood → voice layer → relationship tone → final line NPC speech uses templates, not generative AI. The voice layer changes sentence length, glue words, confidence, politeness, swearing, emotional intensity.",
    "exports": [
      {
        "name": "DialogueSystem",
        "kind": "class",
        "signature": "class DialogueSystem",
        "summary": ""
      },
      {
        "name": "VoiceStyle",
        "kind": "constant",
        "signature": "VoiceStyle",
        "summary": "DialogueSystem — Dynamic narrative template system. Pipeline: event → intent → template → mood → voice layer → relationship tone → final line NPC speech uses templates, not generative AI. The voice layer changes sentence length, glue words, confidence, politeness, swearing, emotional intensity."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/narrative/DialogueTree",
    "path": "engine/reference/gameplay/narrative/DialogueTree.md",
    "source": "engine/gameplay/narrative/DialogueTree.js",
    "import": "/engine/gameplay/narrative/DialogueTree.js",
    "sourceHash": "45a9de51618888f22958a9be07e9ec14538c6d8d3d129f537bff31427ae0fe4b",
    "summary": "DialogueRunner — Executes a dialogue tree, manages state, and produces UI output.",
    "exports": [
      {
        "name": "DialogueRunner",
        "kind": "class",
        "signature": "class DialogueRunner",
        "summary": "DialogueRunner — Executes a dialogue tree, manages state, and produces UI output."
      },
      {
        "name": "node",
        "kind": "function",
        "signature": "node(type, data)",
        "summary": "Create a dialogue node."
      },
      {
        "name": "textNode",
        "kind": "function",
        "signature": "textNode(speaker, text, next)",
        "summary": "Shorthand builders."
      },
      {
        "name": "choiceNode",
        "kind": "function",
        "signature": "choiceNode(prompt, choices)",
        "summary": ""
      },
      {
        "name": "branchNode",
        "kind": "function",
        "signature": "branchNode(variable, branches, fallback)",
        "summary": ""
      },
      {
        "name": "setNode",
        "kind": "function",
        "signature": "setNode(variable, value, next)",
        "summary": ""
      },
      {
        "name": "endNode",
        "kind": "function",
        "signature": "endNode(action)",
        "summary": ""
      },
      {
        "name": "NodeType",
        "kind": "constant",
        "signature": "NodeType",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/narrative/LifePhases",
    "path": "engine/reference/gameplay/narrative/LifePhases.md",
    "source": "engine/gameplay/narrative/LifePhases.js",
    "import": "/engine/gameplay/narrative/LifePhases.js",
    "sourceHash": "ff0851c9a8188b08b67e4bf57a8192936cd46709432254b730482bb43ba08fb2",
    "summary": "LifePhases — Controls the origin sequence: birth → childhood → crisis → youth → main game. Each phase runs a sequence of events and storylets, then transitions to the next. The player watches/interacts through text during early phases, then gains full control at Youth.",
    "exports": [
      {
        "name": "LifePhases",
        "kind": "class",
        "signature": "class LifePhases",
        "summary": ""
      },
      {
        "name": "Phase",
        "kind": "constant",
        "signature": "Phase",
        "summary": "LifePhases — Controls the origin sequence: birth → childhood → crisis → youth → main game. Each phase runs a sequence of events and storylets, then transitions to the next. The player watches/interacts through text during early phases, then gains full control at Youth."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/narrative/OriginGenerator",
    "path": "engine/reference/gameplay/narrative/OriginGenerator.md",
    "source": "engine/gameplay/narrative/OriginGenerator.js",
    "import": "/engine/gameplay/narrative/OriginGenerator.js",
    "sourceHash": "3afbfb507476636365d4150eda680d1e04b6b7ca01ca71babeedc507e1bb9678",
    "summary": "Generate a full origin from mapped tags.",
    "exports": [
      {
        "name": "generateOrigin",
        "kind": "function",
        "signature": "generateOrigin(origin, suggestedName)",
        "summary": "Generate a full origin from mapped tags."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/narrative/SituationGraph",
    "path": "engine/reference/gameplay/narrative/SituationGraph.md",
    "source": "engine/gameplay/narrative/SituationGraph.js",
    "import": "/engine/gameplay/narrative/SituationGraph.js",
    "sourceHash": "d165a53ca11fe62def64c89710c8d65933518977faeaccd80b3dc895b50c925d",
    "summary": "SituationGraph — Selects life pressure situations for the player. Situation buckets: family, survival, crime, faction, power, exploration, social, build/dig, item soul, law, domain, revenge, redemption. Chooses situations based on player background, family state, location, NPC relationships, faction reputation, active crimes, wealth, danger, resolve path, recent failures/victories.",
    "exports": [
      {
        "name": "SituationGraph",
        "kind": "class",
        "signature": "class SituationGraph",
        "summary": ""
      },
      {
        "name": "SituationBucket",
        "kind": "constant",
        "signature": "SituationBucket",
        "summary": "SituationGraph — Selects life pressure situations for the player. Situation buckets: family, survival, crime, faction, power, exploration, social, build/dig, item soul, law, domain, revenge, redemption. Chooses situations based on player background, family state, location, NPC relationships, faction reputation, active crimes, wealth, danger, resolve path, recent failures/victories."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/narrative/StoryGraph",
    "path": "engine/reference/gameplay/narrative/StoryGraph.md",
    "source": "engine/gameplay/narrative/StoryGraph.js",
    "import": "/engine/gameplay/narrative/StoryGraph.js",
    "sourceHash": "0f44ada44637fa6bde6b879b1cef17ed6d8cbb9f55151accc809254395749168",
    "summary": "StoryGraph — Storylet engine for LIFE. Stories are storylets, not one fixed script. A storylet is a small reusable story event that triggers when conditions are true. Each storylet has: trigger conditions, cast, stakes, choices, consequences, memories, and graph updates.",
    "exports": [
      {
        "name": "StoryGraph",
        "kind": "class",
        "signature": "class StoryGraph",
        "summary": ""
      },
      {
        "name": "createStorylet",
        "kind": "function",
        "signature": "createStorylet(config)",
        "summary": "Create a storylet definition."
      },
      {
        "name": "StoryletRarity",
        "kind": "constant",
        "signature": "StoryletRarity",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/narrative/WorldDirector",
    "path": "engine/reference/gameplay/narrative/WorldDirector.md",
    "source": "engine/gameplay/narrative/WorldDirector.js",
    "import": "/engine/gameplay/narrative/WorldDirector.js",
    "sourceHash": "3d99037389e388a6639ae3978554f1f80454a6a7831f96fccfe5b3a81ad506df",
    "summary": "WorldDirector — Controls pacing and selects world events. Watches: player stress, supplies, family conflict, recent fights, deaths, victories, crew size, base strength, faction anger, unresolved crimes, resolve growth, domain activity. Selects events to create: pressure → relief → pressure → consequence. Not constant chaos.",
    "exports": [
      {
        "name": "WorldDirector",
        "kind": "class",
        "signature": "class WorldDirector",
        "summary": ""
      },
      {
        "name": "DirectorEventType",
        "kind": "constant",
        "signature": "DirectorEventType",
        "summary": "WorldDirector — Controls pacing and selects world events. Watches: player stress, supplies, family conflict, recent fights, deaths, victories, crew size, base strength, faction anger, unresolved crimes, resolve growth, domain activity. Selects events to create: pressure → relief → pressure → consequence. Not constant chaos."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/narrative/index",
    "path": "engine/reference/gameplay/narrative/index.md",
    "source": "engine/gameplay/narrative/index.js",
    "import": "/engine/gameplay/narrative/index.js",
    "sourceHash": "dabd9070596d5a2353c65479a505874df568d3c17a34ec0faa48dacc608fbc3f",
    "summary": "",
    "exports": [
      {
        "name": "CORE_STORYLETS",
        "kind": "re-export",
        "signature": "CORE_STORYLETS",
        "summary": ""
      },
      {
        "name": "DialogueRunner",
        "kind": "re-export",
        "signature": "DialogueRunner",
        "summary": ""
      },
      {
        "name": "DialogueSystem",
        "kind": "re-export",
        "signature": "DialogueSystem",
        "summary": ""
      },
      {
        "name": "DirectorEventType",
        "kind": "re-export",
        "signature": "DirectorEventType",
        "summary": ""
      },
      {
        "name": "LifePhases",
        "kind": "re-export",
        "signature": "LifePhases",
        "summary": ""
      },
      {
        "name": "NodeType",
        "kind": "re-export",
        "signature": "NodeType",
        "summary": ""
      },
      {
        "name": "Phase",
        "kind": "re-export",
        "signature": "Phase",
        "summary": ""
      },
      {
        "name": "SituationBucket",
        "kind": "re-export",
        "signature": "SituationBucket",
        "summary": ""
      },
      {
        "name": "SituationGraph",
        "kind": "re-export",
        "signature": "SituationGraph",
        "summary": ""
      },
      {
        "name": "StoryGraph",
        "kind": "re-export",
        "signature": "StoryGraph",
        "summary": ""
      },
      {
        "name": "StoryletRarity",
        "kind": "re-export",
        "signature": "StoryletRarity",
        "summary": ""
      },
      {
        "name": "VoiceStyle",
        "kind": "re-export",
        "signature": "VoiceStyle",
        "summary": ""
      },
      {
        "name": "WorldDirector",
        "kind": "re-export",
        "signature": "WorldDirector",
        "summary": ""
      },
      {
        "name": "branchNode",
        "kind": "re-export",
        "signature": "branchNode",
        "summary": ""
      },
      {
        "name": "choiceNode",
        "kind": "re-export",
        "signature": "choiceNode",
        "summary": ""
      },
      {
        "name": "createStorylet",
        "kind": "re-export",
        "signature": "createStorylet",
        "summary": ""
      },
      {
        "name": "endNode",
        "kind": "re-export",
        "signature": "endNode",
        "summary": ""
      },
      {
        "name": "extractOriginTags",
        "kind": "re-export",
        "signature": "extractOriginTags",
        "summary": ""
      },
      {
        "name": "generateOrigin",
        "kind": "re-export",
        "signature": "generateOrigin",
        "summary": ""
      },
      {
        "name": "mapTagsToOrigin",
        "kind": "re-export",
        "signature": "mapTagsToOrigin",
        "summary": ""
      },
      {
        "name": "node",
        "kind": "re-export",
        "signature": "node",
        "summary": ""
      },
      {
        "name": "setNode",
        "kind": "re-export",
        "signature": "setNode",
        "summary": ""
      },
      {
        "name": "textNode",
        "kind": "re-export",
        "signature": "textNode",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/narrative/storylets/core_storylets",
    "path": "engine/reference/gameplay/narrative/storylets/core_storylets.md",
    "source": "engine/gameplay/narrative/storylets/core_storylets.js",
    "import": "/engine/gameplay/narrative/storylets/core_storylets.js",
    "sourceHash": "9a62e0aca86c8fc44009f8170d566c27dcb1e92b13a5c1a69c866a099ef68e79",
    "summary": "Core Storylet Library — Initial content for the StoryGraph. Each storylet has trigger conditions, cast selection, and execution logic.",
    "exports": [
      {
        "name": "CORE_STORYLETS",
        "kind": "constant",
        "signature": "CORE_STORYLETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/perception/PerceptionGraph",
    "path": "engine/reference/gameplay/perception/PerceptionGraph.md",
    "source": "engine/gameplay/perception/PerceptionGraph.js",
    "import": "/engine/gameplay/perception/PerceptionGraph.js",
    "sourceHash": "00357cacb6128252042654b842e4c232883a97a4116bad9894f22be7cbfe2b94",
    "summary": "PerceptionGraph — Controls what the player can perceive about NPCs. NPCs have hidden truth. The player sees tags based on perception skill, distance, lighting, relationship, NPC deception, disguise, and domain effects. Tags can be WRONG if the NPC is good at hiding.",
    "exports": [
      {
        "name": "PerceptionGraph",
        "kind": "class",
        "signature": "class PerceptionGraph",
        "summary": ""
      },
      {
        "name": "PerceptionLevel",
        "kind": "constant",
        "signature": "PerceptionLevel",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/perception/index",
    "path": "engine/reference/gameplay/perception/index.md",
    "source": "engine/gameplay/perception/index.js",
    "import": "/engine/gameplay/perception/index.js",
    "sourceHash": "cabc4a1aceb6fc8472f11d955823c7fd395314632d8bbe0ef60f45755ab560db",
    "summary": "",
    "exports": [
      {
        "name": "PerceptionGraph",
        "kind": "re-export",
        "signature": "PerceptionGraph",
        "summary": ""
      },
      {
        "name": "PerceptionLevel",
        "kind": "re-export",
        "signature": "PerceptionLevel",
        "summary": ""
      },
      {
        "name": "default",
        "kind": "re-export",
        "signature": "default",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/progression/ContractSystem",
    "path": "engine/reference/gameplay/progression/ContractSystem.md",
    "source": "engine/gameplay/progression/ContractSystem.js",
    "import": "/engine/gameplay/progression/ContractSystem.js",
    "sourceHash": "8ae80725a5c41eeb6a0dbc4fd6f5075b954b0b9972f711a1e6770256e0e246a4",
    "summary": "",
    "exports": [
      {
        "name": "ContractSystem",
        "kind": "class",
        "signature": "class ContractSystem",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/progression/DomainGraph",
    "path": "engine/reference/gameplay/progression/DomainGraph.md",
    "source": "engine/gameplay/progression/DomainGraph.js",
    "import": "/engine/gameplay/progression/DomainGraph.js",
    "sourceHash": "b5640c030635be785a7c9e3e44b9c00c45da36def79d5b0aff580712ea5d7416",
    "summary": "DomainGraph — Local rule overrides. A domain is a personal law forced onto an area. Domains are rare and earned. They modify rules within a radius, cost stamina/resolve to maintain, and have weaknesses and failure conditions. Domain rules are priority 8 in RuleGraph — they can override local reality but not engine safety or physics.",
    "exports": [
      {
        "name": "DomainGraph",
        "kind": "class",
        "signature": "class DomainGraph",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/progression/PowerGraph",
    "path": "engine/reference/gameplay/progression/PowerGraph.md",
    "source": "engine/gameplay/progression/PowerGraph.js",
    "import": "/engine/gameplay/progression/PowerGraph.js",
    "sourceHash": "0b2fbe1724948d35f8b2490350ee1f61a7c3e25db85dd313c18fc9d84c49f1b4",
    "summary": "",
    "exports": [
      {
        "name": "PowerGraph",
        "kind": "class",
        "signature": "class PowerGraph",
        "summary": ""
      },
      {
        "name": "createPower",
        "kind": "function",
        "signature": "createPower(config)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/progression/ResolveSystem",
    "path": "engine/reference/gameplay/progression/ResolveSystem.md",
    "source": "engine/gameplay/progression/ResolveSystem.js",
    "import": "/engine/gameplay/progression/ResolveSystem.js",
    "sourceHash": "da1f1137044f68962a192858d2d51303318721fdb1b32ed9d59a69be5298c313",
    "summary": "",
    "exports": [
      {
        "name": "ResolveSystem",
        "kind": "class",
        "signature": "class ResolveSystem",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/progression/index",
    "path": "engine/reference/gameplay/progression/index.md",
    "source": "engine/gameplay/progression/index.js",
    "import": "/engine/gameplay/progression/index.js",
    "sourceHash": "d672cec2fe6045ec6baa8fad828da44089d905e1b4c7a40956afd654adb77f98",
    "summary": "",
    "exports": [
      {
        "name": "ContractSystem",
        "kind": "re-export",
        "signature": "ContractSystem",
        "summary": ""
      },
      {
        "name": "DomainGraph",
        "kind": "re-export",
        "signature": "DomainGraph",
        "summary": ""
      },
      {
        "name": "PowerGraph",
        "kind": "re-export",
        "signature": "PowerGraph",
        "summary": ""
      },
      {
        "name": "ResolveSystem",
        "kind": "re-export",
        "signature": "ResolveSystem",
        "summary": ""
      },
      {
        "name": "createPower",
        "kind": "re-export",
        "signature": "createPower",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/rules/RuleGraph",
    "path": "engine/reference/gameplay/rules/RuleGraph.md",
    "source": "engine/gameplay/rules/RuleGraph.js",
    "import": "/engine/gameplay/rules/RuleGraph.js",
    "sourceHash": "8014bcdfe1b098cadf7b966ccb6e87d350b71bdf56a508e9792d13f1b8e40c3d",
    "summary": "RuleGraph — The master rule resolver for LIFE. Everything in the world passes through RuleGraph to decide what is legal. Rules have priorities (1=highest), conditions, effects, and sources. When rules conflict, the highest priority wins. Ties break by specificity. Priority levels: 1 = Engine safety (cannot crash the game) 2 = Physics / material (fire burns wood) 3 = Survival / body (hunger kills) 4 = World rules (gravity, time) 5 = Law / faction (city forbids theft) 6 = Item rules (sword needs two hands) 7 = Contract rules (guardian vow restricts solo fighting) 8 = Domain rules (domain overrides local reality) 9 = Temporary status / visual (buff, aura, particle effect)",
    "exports": [
      {
        "name": "RuleGraph",
        "kind": "class",
        "signature": "class RuleGraph",
        "summary": "RuleGraph — singleton-style rule management and resolution."
      },
      {
        "name": "createRule",
        "kind": "function",
        "signature": "createRule(config)",
        "summary": "Creates a new rule object."
      },
      {
        "name": "RuleCategory",
        "kind": "constant",
        "signature": "RuleCategory",
        "summary": ""
      },
      {
        "name": "RuleEffect",
        "kind": "constant",
        "signature": "RuleEffect",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/rules/index",
    "path": "engine/reference/gameplay/rules/index.md",
    "source": "engine/gameplay/rules/index.js",
    "import": "/engine/gameplay/rules/index.js",
    "sourceHash": "452f3a40c249e728bd436cefb8f61e72fc455c970f7698f248c3c635ce0f7b52",
    "summary": "",
    "exports": [
      {
        "name": "RuleCategory",
        "kind": "re-export",
        "signature": "RuleCategory",
        "summary": ""
      },
      {
        "name": "RuleEffect",
        "kind": "re-export",
        "signature": "RuleEffect",
        "summary": ""
      },
      {
        "name": "RuleGraph",
        "kind": "re-export",
        "signature": "RuleGraph",
        "summary": ""
      },
      {
        "name": "createRule",
        "kind": "re-export",
        "signature": "createRule",
        "summary": ""
      },
      {
        "name": "default",
        "kind": "re-export",
        "signature": "default",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/simulation/SimulationManager",
    "path": "engine/reference/gameplay/simulation/SimulationManager.md",
    "source": "engine/gameplay/simulation/SimulationManager.js",
    "import": "/engine/gameplay/simulation/SimulationManager.js",
    "sourceHash": "c79d82c746d0aa692499661e9156a79f6cf48831cba7f41a94bfe5ced3052217",
    "summary": "SimulationManager — Controls simulation levels for all entities. Active:  Near player — full behavior, every tick Warm:    Same town — slower updates, simplified drives Cold:    Far away — daily summary simulation Frozen:  No updates until touched by event Transition triggers: player proximity, event targeting, faction actions.",
    "exports": [
      {
        "name": "SimulationManager",
        "kind": "class",
        "signature": "class SimulationManager",
        "summary": ""
      },
      {
        "name": "SimLevel",
        "kind": "constant",
        "signature": "SimLevel",
        "summary": "SimulationManager — Controls simulation levels for all entities. Active:  Near player — full behavior, every tick Warm:    Same town — slower updates, simplified drives Cold:    Far away — daily summary simulation Frozen:  No updates until touched by event Transition triggers: player proximity, event targeting, faction actions."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/simulation/index",
    "path": "engine/reference/gameplay/simulation/index.md",
    "source": "engine/gameplay/simulation/index.js",
    "import": "/engine/gameplay/simulation/index.js",
    "sourceHash": "8d45bbf80e2a8299b5592a71ef18e868dc9f95e324009d34d7080bb30a5e6fd7",
    "summary": "",
    "exports": [
      {
        "name": "SimLevel",
        "kind": "re-export",
        "signature": "SimLevel",
        "summary": ""
      },
      {
        "name": "SimulationManager",
        "kind": "re-export",
        "signature": "SimulationManager",
        "summary": ""
      },
      {
        "name": "default",
        "kind": "re-export",
        "signature": "default",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/social/SoulGraph",
    "path": "engine/reference/gameplay/social/SoulGraph.md",
    "source": "engine/gameplay/social/SoulGraph.js",
    "import": "/engine/gameplay/social/SoulGraph.js",
    "sourceHash": "d36fe14946ff800f603c9f7f5fe0f83ddc8736e2265d6fe54e57a22903841300",
    "summary": "SoulGraph — The social nervous system of the world. Each NPC is a \"neuron\" node. Relationships are weighted edges. Events are signals. Mood is activation state. Memory is weight change. Actions are outputs. The graph propagates influence through connections. NPC = soul node Relationship = weighted edge (trust, fear, love, hate, loyalty, resentment, familiarity) Event = signal Mood = activation state Memory = weight change Action = output",
    "exports": [
      {
        "name": "SoulGraph",
        "kind": "class",
        "signature": "class SoulGraph",
        "summary": "SoulGraph — The social nervous system of the world. Each NPC is a \"neuron\" node. Relationships are weighted edges. Events are signals. Mood is activation state. Memory is weight change. Actions are outputs. The graph propagates influence through connections. NPC = soul node Relationship = weighted edge (trust, fear, love, hate, loyalty, resentment, familiarity) Event = signal Mood = activation state Memory = weight change Action = output"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/social/SoulGraphMessaging",
    "path": "engine/reference/gameplay/social/SoulGraphMessaging.md",
    "source": "engine/gameplay/social/SoulGraphMessaging.js",
    "import": "/engine/gameplay/social/SoulGraphMessaging.js",
    "sourceHash": "687588af365ade04ad8bcdaa7cf6c666b3f99b5e160fa46e48639909629093cd",
    "summary": "Create a message.",
    "exports": [
      {
        "name": "SoulGraphMessaging",
        "kind": "class",
        "signature": "class SoulGraphMessaging",
        "summary": ""
      },
      {
        "name": "createMessage",
        "kind": "function",
        "signature": "createMessage(config)",
        "summary": "Create a message."
      },
      {
        "name": "MessageChannel",
        "kind": "constant",
        "signature": "MessageChannel",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/social/index",
    "path": "engine/reference/gameplay/social/index.md",
    "source": "engine/gameplay/social/index.js",
    "import": "/engine/gameplay/social/index.js",
    "sourceHash": "b0a08d4eb47dc2b52ef63fade7f392df360014adf6f3b94532d226842748a75f",
    "summary": "",
    "exports": [
      {
        "name": "MessageChannel",
        "kind": "re-export",
        "signature": "MessageChannel",
        "summary": ""
      },
      {
        "name": "SoulGraph",
        "kind": "re-export",
        "signature": "SoulGraph",
        "summary": ""
      },
      {
        "name": "SoulGraphMessaging",
        "kind": "re-export",
        "signature": "SoulGraphMessaging",
        "summary": ""
      },
      {
        "name": "createMessage",
        "kind": "re-export",
        "signature": "createMessage",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/society/CitySystem",
    "path": "engine/reference/gameplay/society/CitySystem.md",
    "source": "engine/gameplay/society/CitySystem.js",
    "import": "/engine/gameplay/society/CitySystem.js",
    "sourceHash": "240b5aa53fa67642e9ac641a364fc9edf510af72a69a0ba17ba819c97dce6353",
    "summary": "CitySystem — City templates, population, economy, laws, reputation.",
    "exports": [
      {
        "name": "CitySystem",
        "kind": "class",
        "signature": "class CitySystem",
        "summary": ""
      },
      {
        "name": "createCity",
        "kind": "function",
        "signature": "createCity(config)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/society/FactionGraph",
    "path": "engine/reference/gameplay/society/FactionGraph.md",
    "source": "engine/gameplay/society/FactionGraph.js",
    "import": "/engine/gameplay/society/FactionGraph.js",
    "sourceHash": "6896c515aaeca79b4a55a26930a3d8ff4da28997f5207b66bfc435d95a8b1e9a",
    "summary": "FactionGraph — Group souls with politics, reputation, and actions. Factions track: leader, values, laws, territory, resources, enemies/allies, fear, morale, population, reputation toward player, domain users, crimes, contracts.",
    "exports": [
      {
        "name": "FactionGraph",
        "kind": "class",
        "signature": "class FactionGraph",
        "summary": ""
      },
      {
        "name": "createFaction",
        "kind": "function",
        "signature": "createFaction(config)",
        "summary": ""
      },
      {
        "name": "FactionAction",
        "kind": "constant",
        "signature": "FactionAction",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/society/LawGraph",
    "path": "engine/reference/gameplay/society/LawGraph.md",
    "source": "engine/gameplay/society/LawGraph.js",
    "import": "/engine/gameplay/society/LawGraph.js",
    "sourceHash": "878e0574febe2706730f2196d89ca9cfe3da2768966d83ed028a7b35d7e46bb9",
    "summary": "LawGraph — Crime, witnesses, punishment, and justice. Different cities and factions have different laws. Tracks: witnesses, evidence, suspicion, reputation. Punishment: bounty, exile, prison, revenge, retaliation.",
    "exports": [
      {
        "name": "LawGraph",
        "kind": "class",
        "signature": "class LawGraph",
        "summary": ""
      },
      {
        "name": "createCrimeRecord",
        "kind": "function",
        "signature": "createCrimeRecord(config)",
        "summary": ""
      },
      {
        "name": "CrimeType",
        "kind": "constant",
        "signature": "CrimeType",
        "summary": ""
      },
      {
        "name": "PunishmentType",
        "kind": "constant",
        "signature": "PunishmentType",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/society/index",
    "path": "engine/reference/gameplay/society/index.md",
    "source": "engine/gameplay/society/index.js",
    "import": "/engine/gameplay/society/index.js",
    "sourceHash": "d43c6d90ea93a2eb820515f61fa91bf3833856755a5b1378d39f53d6cb644b0c",
    "summary": "",
    "exports": [
      {
        "name": "CitySystem",
        "kind": "re-export",
        "signature": "CitySystem",
        "summary": ""
      },
      {
        "name": "CrimeType",
        "kind": "re-export",
        "signature": "CrimeType",
        "summary": ""
      },
      {
        "name": "FactionAction",
        "kind": "re-export",
        "signature": "FactionAction",
        "summary": ""
      },
      {
        "name": "FactionGraph",
        "kind": "re-export",
        "signature": "FactionGraph",
        "summary": ""
      },
      {
        "name": "LawGraph",
        "kind": "re-export",
        "signature": "LawGraph",
        "summary": ""
      },
      {
        "name": "PunishmentType",
        "kind": "re-export",
        "signature": "PunishmentType",
        "summary": ""
      },
      {
        "name": "createCity",
        "kind": "re-export",
        "signature": "createCity",
        "summary": ""
      },
      {
        "name": "createCrimeRecord",
        "kind": "re-export",
        "signature": "createCrimeRecord",
        "summary": ""
      },
      {
        "name": "createFaction",
        "kind": "re-export",
        "signature": "createFaction",
        "summary": ""
      },
      {
        "name": "default",
        "kind": "re-export",
        "signature": "default",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/spells/SpellElementMixer",
    "path": "engine/reference/gameplay/spells/SpellElementMixer.md",
    "source": "engine/gameplay/spells/SpellElementMixer.js",
    "import": "/engine/gameplay/spells/SpellElementMixer.js",
    "sourceHash": "d536ca217304ea9db223a4f724a0b19a1dbf360e34973d77caab597f4f20ce0d",
    "summary": "SpellElementMixer.js - Element Combination System Handles mixing two or more elements to create combined/hybrid elements: - Fire + Ice = Steam - Fire + Nature = Ash - Lightning + Water = Electrified - etc. Combined elements have unique visual effects and status effects.",
    "exports": [
      {
        "name": "SpellElementMixer",
        "kind": "class",
        "signature": "class SpellElementMixer",
        "summary": ""
      },
      {
        "name": "getSpellElementMixer",
        "kind": "function",
        "signature": "getSpellElementMixer()",
        "summary": ""
      },
      {
        "name": "mixElements",
        "kind": "function",
        "signature": "mixElements(element1, element2)",
        "summary": ""
      },
      {
        "name": "mixMultipleElements",
        "kind": "function",
        "signature": "mixMultipleElements(elements)",
        "summary": ""
      },
      {
        "name": "ELEMENT_COMBINATIONS",
        "kind": "constant",
        "signature": "ELEMENT_COMBINATIONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/spells/SpellGenerator",
    "path": "engine/reference/gameplay/spells/SpellGenerator.md",
    "source": "engine/gameplay/spells/SpellGenerator.js",
    "import": "/engine/gameplay/spells/SpellGenerator.js",
    "sourceHash": "434ec3334ea155bad394df49b3d08b42103d7044afa00f75ff0429f15e43dcd8",
    "summary": "SpellGenerator.js - Procedural Spell Creation System Generates complete spells from parameters: - Element (Fire, Ice, Lightning, Arcane, Nature, Dark, Holy) - Type (Projectile, AOE, Beam, Shield, Buff, Summon) - Modifiers (Homing, Piercing, Explosive, Chain, etc.) - Power level for stat scaling Outputs: - Visual effect (uses CustomParticleEffect SDF) - Collision shape (same SDF as visual) - Particle emitter config - Game stats (damage, mana cost, cooldown) - Sound effect hints MULTIPLAYER: All generation is deterministic via seeded RNG. Never use Math.random() or Date.now() for gameplay-affecting values.",
    "exports": [
      {
        "name": "SpellGenerator",
        "kind": "class",
        "signature": "class SpellGenerator",
        "summary": ""
      },
      {
        "name": "spellDeterministicIdHash",
        "kind": "function",
        "signature": "spellDeterministicIdHash(element, seed)",
        "summary": ""
      },
      {
        "name": "spellParticleEffectHash",
        "kind": "function",
        "signature": "spellParticleEffectHash(elementId, seed)",
        "summary": ""
      },
      {
        "name": "serializeSpellForNetwork",
        "kind": "function",
        "signature": "serializeSpellForNetwork(spell)",
        "summary": "Serialize spell to minimal format for network transmission Only includes data needed to regenerate the spell deterministically"
      },
      {
        "name": "deserializeSpellFromNetwork",
        "kind": "function",
        "signature": "deserializeSpellFromNetwork(data)",
        "summary": "Deserialize spell from network format Regenerates full spell from minimal data"
      },
      {
        "name": "validateSpellIntegrity",
        "kind": "function",
        "signature": "validateSpellIntegrity(spell)",
        "summary": "Validate spell data matches seed (anti-cheat) Returns true if spell stats match what seed would generate"
      },
      {
        "name": "getSpellGenerator",
        "kind": "function",
        "signature": "getSpellGenerator()",
        "summary": ""
      },
      {
        "name": "generateSpell",
        "kind": "function",
        "signature": "generateSpell(params)",
        "summary": ""
      },
      {
        "name": "generateRandomSpell",
        "kind": "function",
        "signature": "generateRandomSpell(constraints)",
        "summary": ""
      },
      {
        "name": "SPELL_ELEMENTS",
        "kind": "constant",
        "signature": "SPELL_ELEMENTS",
        "summary": ""
      },
      {
        "name": "SPELL_TYPES",
        "kind": "constant",
        "signature": "SPELL_TYPES",
        "summary": ""
      },
      {
        "name": "SPELL_MODIFIERS",
        "kind": "constant",
        "signature": "SPELL_MODIFIERS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/spells/SpellGeneratorIntegration",
    "path": "engine/reference/gameplay/spells/SpellGeneratorIntegration.md",
    "source": "engine/gameplay/spells/SpellGeneratorIntegration.js",
    "import": "/engine/gameplay/spells/SpellGeneratorIntegration.js",
    "sourceHash": "6e26b0829944e6f1867ebf71705530a4fbfd1afd220c0a0853f6c089336b0cfb",
    "summary": "SpellGeneratorIntegration.js - Connect SpellGenerator to existing SpellConfig Bridges the procedural spell generator with the existing spell system: - Converts generated spells to SpellConfig format - Integrates with SpellEffectFactory for particle emitters - Provides save/load for generated spells",
    "exports": [
      {
        "name": "generatedSpellToConfig",
        "kind": "function",
        "signature": "generatedSpellToConfig(generatedSpell)",
        "summary": "Convert a generated spell to the existing SpellConfig format Compatible with SpellConfig.js SPELL_PRESETS structure"
      },
      {
        "name": "configToGeneratorFormat",
        "kind": "function",
        "signature": "configToGeneratorFormat(spellConfig)",
        "summary": "Convert existing SpellConfig preset to generator format Allows editing existing spells in the generator"
      },
      {
        "name": "readGeneratedSpellLibraryRecord",
        "kind": "function",
        "signature": "readGeneratedSpellLibraryRecord(storage = globalThis.localStorage)",
        "summary": ""
      },
      {
        "name": "writeGeneratedSpellLibraryRecord",
        "kind": "function",
        "signature": "writeGeneratedSpellLibraryRecord(library, storage = globalThis.localStorage)",
        "summary": ""
      },
      {
        "name": "saveGeneratedSpell",
        "kind": "function",
        "signature": "async saveGeneratedSpell(generatedSpell, storage = globalThis.localStorage)",
        "summary": "Save generated spell to library (IndexedDB via registry pattern)"
      },
      {
        "name": "getSpellLibrary",
        "kind": "function",
        "signature": "getSpellLibrary(storage = globalThis.localStorage)",
        "summary": "Load spell library from storage"
      },
      {
        "name": "getGeneratedSpell",
        "kind": "function",
        "signature": "getGeneratedSpell(id)",
        "summary": "Get a generated spell by ID"
      },
      {
        "name": "deleteGeneratedSpell",
        "kind": "function",
        "signature": "deleteGeneratedSpell(id, storage = globalThis.localStorage)",
        "summary": "Delete a generated spell"
      },
      {
        "name": "getAllGeneratedSpells",
        "kind": "function",
        "signature": "getAllGeneratedSpells(storage = globalThis.localStorage)",
        "summary": "Get all generated spells as array"
      },
      {
        "name": "createEmitterFromGeneratedSpell",
        "kind": "function",
        "signature": "createEmitterFromGeneratedSpell(generatedSpell, options = {})",
        "summary": "Create particle emitter config from generated spell For use with SpellEffectFactory IMPORTANT: Physics parameters (mass, drag, bounciness, collisionEnabled) are included to ensure collision behavior matches visual expectations. The effectId links to the SAME SDF used for both rendering AND collision."
      },
      {
        "name": "quickGenerateSpell",
        "kind": "function",
        "signature": "quickGenerateSpell(element, type, powerLevel = 1.0)",
        "summary": "Quick generate a spell with minimal parameters"
      },
      {
        "name": "generateCombinedSpell",
        "kind": "function",
        "signature": "generateCombinedSpell(element1, element2, type, powerLevel = 1.0)",
        "summary": "Generate a combined element spell"
      },
      {
        "name": "generateLootSpell",
        "kind": "function",
        "signature": "generateLootSpell(rarity = 'common')",
        "summary": "Generate loot-style random spell"
      },
      {
        "name": "GENERATED_SPELL_LIBRARY_SCHEMA",
        "kind": "constant",
        "signature": "GENERATED_SPELL_LIBRARY_SCHEMA",
        "summary": ""
      },
      {
        "name": "GENERATED_SPELL_LIBRARY_SCHEMA_VERSION",
        "kind": "constant",
        "signature": "GENERATED_SPELL_LIBRARY_SCHEMA_VERSION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "gameplay/spells/index",
    "path": "engine/reference/gameplay/spells/index.md",
    "source": "engine/gameplay/spells/index.js",
    "import": "/engine/gameplay/spells/index.js",
    "sourceHash": "2e5ccda254652ea919ce7f39bd7094dc74b60276eb920b83c10340a636983811",
    "summary": "Spell System Exports Barrel file for easy importing of all spell-related modules.",
    "exports": [
      {
        "name": "ELEMENT_COMBINATIONS",
        "kind": "re-export",
        "signature": "ELEMENT_COMBINATIONS",
        "summary": ""
      },
      {
        "name": "SPELL_ELEMENTS",
        "kind": "re-export",
        "signature": "SPELL_ELEMENTS",
        "summary": ""
      },
      {
        "name": "SPELL_MODIFIERS",
        "kind": "re-export",
        "signature": "SPELL_MODIFIERS",
        "summary": ""
      },
      {
        "name": "SPELL_TYPES",
        "kind": "re-export",
        "signature": "SPELL_TYPES",
        "summary": ""
      },
      {
        "name": "SpellElementMixer",
        "kind": "re-export",
        "signature": "SpellElementMixer",
        "summary": ""
      },
      {
        "name": "SpellGenerator",
        "kind": "re-export",
        "signature": "SpellGenerator",
        "summary": ""
      },
      {
        "name": "configToGeneratorFormat",
        "kind": "re-export",
        "signature": "configToGeneratorFormat",
        "summary": ""
      },
      {
        "name": "createEmitterFromGeneratedSpell",
        "kind": "re-export",
        "signature": "createEmitterFromGeneratedSpell",
        "summary": ""
      },
      {
        "name": "deleteGeneratedSpell",
        "kind": "re-export",
        "signature": "deleteGeneratedSpell",
        "summary": ""
      },
      {
        "name": "deserializeSpellFromNetwork",
        "kind": "re-export",
        "signature": "deserializeSpellFromNetwork",
        "summary": ""
      },
      {
        "name": "generateCombinedSpell",
        "kind": "re-export",
        "signature": "generateCombinedSpell",
        "summary": ""
      },
      {
        "name": "generateLootSpell",
        "kind": "re-export",
        "signature": "generateLootSpell",
        "summary": ""
      },
      {
        "name": "generateRandomSpell",
        "kind": "re-export",
        "signature": "generateRandomSpell",
        "summary": ""
      },
      {
        "name": "generateSpell",
        "kind": "re-export",
        "signature": "generateSpell",
        "summary": ""
      },
      {
        "name": "generatedSpellToConfig",
        "kind": "re-export",
        "signature": "generatedSpellToConfig",
        "summary": ""
      },
      {
        "name": "getAllGeneratedSpells",
        "kind": "re-export",
        "signature": "getAllGeneratedSpells",
        "summary": ""
      },
      {
        "name": "getGeneratedSpell",
        "kind": "re-export",
        "signature": "getGeneratedSpell",
        "summary": ""
      },
      {
        "name": "getSpellElementMixer",
        "kind": "re-export",
        "signature": "getSpellElementMixer",
        "summary": ""
      },
      {
        "name": "getSpellGenerator",
        "kind": "re-export",
        "signature": "getSpellGenerator",
        "summary": ""
      },
      {
        "name": "getSpellLibrary",
        "kind": "re-export",
        "signature": "getSpellLibrary",
        "summary": ""
      },
      {
        "name": "mixElements",
        "kind": "re-export",
        "signature": "mixElements",
        "summary": ""
      },
      {
        "name": "mixMultipleElements",
        "kind": "re-export",
        "signature": "mixMultipleElements",
        "summary": ""
      },
      {
        "name": "quickGenerateSpell",
        "kind": "re-export",
        "signature": "quickGenerateSpell",
        "summary": ""
      },
      {
        "name": "saveGeneratedSpell",
        "kind": "re-export",
        "signature": "saveGeneratedSpell",
        "summary": ""
      },
      {
        "name": "serializeSpellForNetwork",
        "kind": "re-export",
        "signature": "serializeSpellForNetwork",
        "summary": ""
      },
      {
        "name": "validateSpellIntegrity",
        "kind": "re-export",
        "signature": "validateSpellIntegrity",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/index",
    "path": "engine/reference/kaolin/index.md",
    "source": "engine/kaolin/index.js",
    "import": "/engine/kaolin/index.js",
    "sourceHash": "7b9094e6622b1fedc822856820d68912e40f86dff63211841bc78bc369b51663",
    "summary": "engine/kaolin — Kaolin-equivalent 3D Geometry Toolkit WebGPU-native geometry operations inspired by NVIDIA Kaolin. Provides representation conversions, mesh ops, SDF tools, point cloud ops, and physics bridges for the engine's particle/softbody/mesh/voxel systems. Usage: import { ops } from '../kaolin/index.js'; const he = new ops.mesh.HalfEdgeMesh(positions, indices); const normals = ops.mesh.computeVertexNormals(positions, indices);",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/io/MeshIO",
    "path": "engine/reference/kaolin/io/MeshIO.md",
    "source": "engine/kaolin/io/MeshIO.js",
    "import": "/engine/kaolin/io/MeshIO.js",
    "sourceHash": "c0446e47b634c9bf1694dc82488895f33f055abffa831172c4f64826570878d8",
    "summary": "MeshIO.js — Programmatic mesh import/export (OBJ, PLY, STL) Pure JS parsers/writers for common mesh formats. No dependencies — works with fetch() or FileReader in browser. All outputs use the Kaolin convention: positions: Float32Array stride 3 indices:   Uint32Array stride 3 normals:   Float32Array stride 3 (optional) uvs:       Float32Array stride 2 (optional) Compatible with: - MeshOps.js, MeshSubdivision.js, MeshTetrahedralize.js - Editor GLB loader (supplementary path for non-GLB formats) - EntityMeshRenderer",
    "exports": [
      {
        "name": "parseOBJ",
        "kind": "function",
        "signature": "parseOBJ(objText, options = {})",
        "summary": "Parse an OBJ string into mesh data."
      },
      {
        "name": "writeOBJ",
        "kind": "function",
        "signature": "writeOBJ(positions, indices, options = {})",
        "summary": "Write mesh data to OBJ format string."
      },
      {
        "name": "parsePLY",
        "kind": "function",
        "signature": "parsePLY(buffer)",
        "summary": "Parse a PLY file (ArrayBuffer) into mesh data. Supports ASCII and binary_little_endian formats."
      },
      {
        "name": "writePLY",
        "kind": "function",
        "signature": "writePLY(positions, indices, options = {})",
        "summary": "Write mesh data to PLY format (ASCII)."
      },
      {
        "name": "parseSTL",
        "kind": "function",
        "signature": "parseSTL(buffer)",
        "summary": "Parse an STL file (ArrayBuffer) into mesh data. Auto-detects ASCII vs binary."
      },
      {
        "name": "writeSTL",
        "kind": "function",
        "signature": "writeSTL(positions, indices, normals = null)",
        "summary": "Write mesh data to binary STL format."
      },
      {
        "name": "loadMesh",
        "kind": "function",
        "signature": "async loadMesh(url)",
        "summary": "Load a mesh from URL (auto-detects format from extension)."
      },
      {
        "name": "downloadMesh",
        "kind": "function",
        "signature": "downloadMesh(filename, data)",
        "summary": "Download mesh as a file (browser)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/io/PointCloudIO",
    "path": "engine/reference/kaolin/io/PointCloudIO.md",
    "source": "engine/kaolin/io/PointCloudIO.js",
    "import": "/engine/kaolin/io/PointCloudIO.js",
    "sourceHash": "9cc4a885c779fa0471ab3db1d3ce69a88bcf5691c0b33e983b4190304809fbd1",
    "summary": "PointCloudIO.js — Point cloud import/export (PLY, PCD, XYZ) Pure JS parsers/writers for point cloud formats. Outputs: Float32Array positions (stride 3) + optional normals/colors. Compatible with: - PointCloudOps.js - MeshToPoints.js / PointsToMesh.js - Particle system (direct spawn from loaded points)",
    "exports": [
      {
        "name": "parsePLYPointCloud",
        "kind": "function",
        "signature": "parsePLYPointCloud(buffer)",
        "summary": "Load a point cloud from PLY (ArrayBuffer). Ignores face data — returns only vertex positions + attributes."
      },
      {
        "name": "writePLYPointCloud",
        "kind": "function",
        "signature": "writePLYPointCloud(points, options = {})",
        "summary": "Write a point cloud to PLY format (ASCII string, no faces)."
      },
      {
        "name": "parseXYZ",
        "kind": "function",
        "signature": "parseXYZ(text)",
        "summary": "Parse XYZ text format. Each line: x y z [nx ny nz] [r g b]"
      },
      {
        "name": "writeXYZ",
        "kind": "function",
        "signature": "writeXYZ(points, options = {})",
        "summary": "Write points to XYZ text format."
      },
      {
        "name": "parsePCD",
        "kind": "function",
        "signature": "parsePCD(text)",
        "summary": "Parse PCD text format (ASCII only)."
      },
      {
        "name": "writePCD",
        "kind": "function",
        "signature": "writePCD(points, options = {})",
        "summary": "Write points to PCD ASCII format."
      },
      {
        "name": "loadPointCloud",
        "kind": "function",
        "signature": "async loadPointCloud(url)",
        "summary": "Load a point cloud from URL (auto-detects format from extension)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/io/index",
    "path": "engine/reference/kaolin/io/index.md",
    "source": "engine/kaolin/io/index.js",
    "import": "/engine/kaolin/io/index.js",
    "sourceHash": "b09c4152a97b8921d81430facd3794cbec8f989c90d39a88dd1ff9109e17f445",
    "summary": "Kaolin IO — Barrel exports Mesh and point cloud import/export (OBJ, PLY, STL, XYZ, PCD).",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/metrics/ChamferDistance",
    "path": "engine/reference/kaolin/metrics/ChamferDistance.md",
    "source": "engine/kaolin/metrics/ChamferDistance.js",
    "import": "/engine/kaolin/metrics/ChamferDistance.js",
    "sourceHash": "48ea5c5a575af5c0552230fe6d8525deb7c06cf0ca923546436b8b52f6752bc0",
    "summary": "ChamferDistance.js — Bidirectional nearest-neighbor distance metric Measures how close two point sets (or meshes) are to each other. For each point in A, find nearest in B (and vice versa), average the distances. Standard metric in 3D reconstruction / generative model evaluation. Used by: agi/ training loops, mesh quality assessment, LOD validation. CPU path with spatial hash acceleration. For GPU path, see future WebGPU compute implementation.",
    "exports": [
      {
        "name": "chamferDistance",
        "kind": "function",
        "signature": "chamferDistance(pointsA, pointsB, options = {})",
        "summary": "Compute Chamfer Distance between two point sets. CD(A, B) = (1/|A|) Σ min_{b∈B} ||a - b||² + (1/|B|) Σ min_{a∈A} ||b - a||²"
      },
      {
        "name": "chamferDistancePerPoint",
        "kind": "function",
        "signature": "chamferDistancePerPoint(pointsA, pointsB)",
        "summary": "Compute per-point nearest distances from A to B. Useful for visualization (color-coded error maps)."
      },
      {
        "name": "earthMoversDistance",
        "kind": "function",
        "signature": "earthMoversDistance(pointsA, pointsB)",
        "summary": "Approximate Earth Mover's Distance via auction algorithm. Both point sets must have the same number of points. This is O(n²) and practical only for small sets (<1000 points)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/metrics/GPUMetrics",
    "path": "engine/reference/kaolin/metrics/GPUMetrics.md",
    "source": "engine/kaolin/metrics/GPUMetrics.js",
    "import": "/engine/kaolin/metrics/GPUMetrics.js",
    "sourceHash": "46595a65454ba210cfee0469f03a635285f165dd93e04260361bfd764ec1c9bd",
    "summary": "GPUMetrics.js — WebGPU compute shader accelerated 3D distance metrics GPU-accelerated implementations of: - Chamfer Distance (bidirectional nearest-neighbor) - Hausdorff Distance (max nearest-neighbor) - Mean Distance / RMSE For each point in set A, a compute shader finds the nearest point in set B using a brute-force O(N*M) scan parallelized across workgroups. Results are reduced on the GPU via a parallel reduction pass. Falls back to CPU path (ChamferDistance.js / HausdorffDistance.js) if WebGPU is unavailable or point counts are below the GPU-beneficial threshold (~2000). Usage: const gpu = new GPUMetrics(device); const result = await gpu.chamferDistance(pointsA, pointsB);",
    "exports": [
      {
        "name": "GPUMetrics",
        "kind": "class",
        "signature": "class GPUMetrics",
        "summary": ""
      },
      {
        "name": "getGPUMetrics",
        "kind": "function",
        "signature": "getGPUMetrics(device)",
        "summary": "Get or create a singleton GPUMetrics instance."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/metrics/HausdorffDistance",
    "path": "engine/reference/kaolin/metrics/HausdorffDistance.md",
    "source": "engine/kaolin/metrics/HausdorffDistance.js",
    "import": "/engine/kaolin/metrics/HausdorffDistance.js",
    "sourceHash": "1b4cb4dc234c976adc4c2f9c82f15c7727fb092f822c38d0d60dff5f5af4c221",
    "summary": "HausdorffDistance.js — Maximum surface deviation metric Measures the worst-case distance between two point sets or meshes. Hausdorff(A, B) = max( max_{a∈A} min_{b∈B} ||a-b||, max_{b∈B} min_{a∈A} ||b-a|| ) Variants: - Standard Hausdorff (max of mins) - Percentile Hausdorff (e.g. 95th percentile — more robust to outliers) - Directed Hausdorff (one direction only) Used by: mesh quality validation, LOD error bounds, surface fitting.",
    "exports": [
      {
        "name": "hausdorffDistance",
        "kind": "function",
        "signature": "hausdorffDistance(pointsA, pointsB, options = {})",
        "summary": "Compute Hausdorff distance between two point sets."
      },
      {
        "name": "directedDistances",
        "kind": "function",
        "signature": "directedDistances(pointsA, pointsB)",
        "summary": "Compute per-point minimum distances from A to B. Returns the distance of each point in A to its nearest neighbor in B."
      },
      {
        "name": "rmse",
        "kind": "function",
        "signature": "rmse(pointsA, pointsB)",
        "summary": "Compute RMSE (Root Mean Square Error) between two point sets. Symmetric: averages both directions."
      },
      {
        "name": "meanDistance",
        "kind": "function",
        "signature": "meanDistance(pointsA, pointsB)",
        "summary": "Compute mean absolute distance between two point sets (one direction)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/metrics/VolumetricIoU",
    "path": "engine/reference/kaolin/metrics/VolumetricIoU.md",
    "source": "engine/kaolin/metrics/VolumetricIoU.js",
    "import": "/engine/kaolin/metrics/VolumetricIoU.js",
    "sourceHash": "5e6dbb19ac870833bed2189edeed74278a306e25eb53d17a467747e131fd7ea4",
    "summary": "VolumetricIoU.js — Intersection over Union for 3D shapes Measures overlap between two 3D shapes by voxelizing both and computing |intersection| / |union|. Also supports direct voxel grid inputs (skip re-voxelization). Used by: agi/ training loops, mesh reconstruction quality, shape matching.",
    "exports": [
      {
        "name": "volumetricIoU",
        "kind": "function",
        "signature": "volumetricIoU(positionsA, indicesA, positionsB, indicesB, options = {})",
        "summary": "Compute Volumetric IoU between two triangle meshes. Voxelizes both at the same resolution/origin, then counts overlap."
      },
      {
        "name": "voxelGridIoU",
        "kind": "function",
        "signature": "voxelGridIoU(gridA, gridB)",
        "summary": "Compute IoU directly from two voxel grids (same dimensions)."
      },
      {
        "name": "fScore",
        "kind": "function",
        "signature": "fScore(pointsPred, pointsGT, threshold)",
        "summary": "F-Score: harmonic mean of precision and recall at a distance threshold. Precision = fraction of predicted points within threshold of ground truth. Recall = fraction of ground truth points within threshold of prediction."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/metrics/index",
    "path": "engine/reference/kaolin/metrics/index.md",
    "source": "engine/kaolin/metrics/index.js",
    "import": "/engine/kaolin/metrics/index.js",
    "sourceHash": "02acaef08727a4c1ee19317b0491b9f813f355d2b038269a8a70d40d7c9cc856",
    "summary": "Kaolin Metrics — Barrel exports 3D shape comparison metrics for training loops and quality assessment.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/conversions/DualContouring",
    "path": "engine/reference/kaolin/ops/conversions/DualContouring.md",
    "source": "engine/kaolin/ops/conversions/DualContouring.js",
    "import": "/engine/kaolin/ops/conversions/DualContouring.js",
    "sourceHash": "f985ede43c3d6df963d7842aa819cef306438024555e81a2346076c1fe089a88",
    "summary": "DualContouring.js — Sharp-feature-preserving isosurface extraction Implements Dual Contouring (Ju et al., 2002) for extracting triangle meshes from SDF fields while preserving sharp edges and corners that Marching Cubes rounds off. Uses Hermite data (intersection points + normals on sign-changing edges) and QEF (Quadratic Error Function) minimization to optimally place vertices within cells. Features: - QEF vertex placement via SVD-free normal equations solver - Sharp edge/corner detection via eigenvalue analysis - Adaptive sharpness threshold (user-configurable) - Manifold quad→tri output with consistent winding - Works with grid SDF arrays or analytical SDF functions Compatible with: - SDFToMesh.js (same input/output conventions) - MeshToVoxel.js voxelGridToSDF() output - CSGShape.js V2 boolean operations",
    "exports": [
      {
        "name": "dualContouringSDF",
        "kind": "function",
        "signature": "dualContouringSDF(sdf, resX, resY, resZ, options = {})",
        "summary": "Extract an isosurface from a 3D SDF grid using Dual Contouring."
      },
      {
        "name": "dualContouringFunction",
        "kind": "function",
        "signature": "dualContouringFunction(sdfFn, boundsMin, boundsMax, resolution = 64, options = {})",
        "summary": "Dual Contour an analytical SDF function."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/conversions/FlexiCubes",
    "path": "engine/reference/kaolin/ops/conversions/FlexiCubes.md",
    "source": "engine/kaolin/ops/conversions/FlexiCubes.js",
    "import": "/engine/kaolin/ops/conversions/FlexiCubes.js",
    "sourceHash": "a9cffce30bc766147eb3448feb1f004ddc8d795439b5c6c56e4d5f19e8ae7075",
    "summary": "FlexiCubes.js — Flexible Marching Cubes mesh extraction An improved isosurface extraction inspired by NVIDIA's FlexiCubes (2023). Key improvements over standard Marching Cubes: 1. **Flexible edge vertices** — Instead of fixed linear interpolation along edges, vertex positions can be adjusted (flexed) to better approximate the true surface, improving triangle quality. 2. **Flexible dual vertices** — Each cube gets a \"dual vertex\" (interior point) that can be optimized. Quads are formed connecting dual vertices of adjacent cubes across sign-changing edges, then split into tris. 3. **Adaptive splitting** — Quad-to-triangle splitting direction is chosen to minimize the max angle, producing more uniform triangulations. 4. **Gradient-aware vertex placement** — Uses SDF gradient (surface normal) to project dual vertices onto the isosurface for better accuracy. Compatible with: - SDFToMesh.js (same API conventions) - DualContouring.js (complementary approach) - MeshToVoxel.js voxelGridToSDF() output",
    "exports": [
      {
        "name": "flexiCubesSDF",
        "kind": "function",
        "signature": "flexiCubesSDF(sdf, resX, resY, resZ, options = {})",
        "summary": "Extract an isosurface from a 3D SDF grid using FlexiCubes."
      },
      {
        "name": "flexiCubesFunction",
        "kind": "function",
        "signature": "flexiCubesFunction(sdfFn, boundsMin, boundsMax, resolution = 64, options = {})",
        "summary": "FlexiCubes extraction from an analytical SDF function."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/conversions/MeshToPoints",
    "path": "engine/reference/kaolin/ops/conversions/MeshToPoints.md",
    "source": "engine/kaolin/ops/conversions/MeshToPoints.js",
    "import": "/engine/kaolin/ops/conversions/MeshToPoints.js",
    "sourceHash": "c946147eb05442949c5ce81f79b6b018077af984479f30df86dd8469c7886610",
    "summary": "MeshToPoints.js — Sample points from triangle meshes Three sampling strategies: 1. Uniform random — area-weighted triangle sampling (fast) 2. Poisson disk — blue-noise distribution (quality) 3. Farthest point — greedy maximin spacing (LOD/coverage) Output: Float32Array of positions (stride 3) + optional normals Compatible with: - Particle system (direct spawn from sampled points) - MeshToParticlesCompute.js (CPU fallback path) - Point cloud operations (PointCloudOps.js)",
    "exports": [
      {
        "name": "sampleUniform",
        "kind": "function",
        "signature": "sampleUniform(positions, indices, numSamples, options = {})",
        "summary": "Sample points uniformly on a triangle mesh surface. Uses area-weighted triangle selection + barycentric random point."
      },
      {
        "name": "samplePoissonDisk",
        "kind": "function",
        "signature": "samplePoissonDisk(positions, indices, minDist, options = {})",
        "summary": "Poisson disk sampling on a triangle mesh surface. Produces well-distributed (blue-noise) point sets. Uses dart-throwing with spatial hash acceleration."
      },
      {
        "name": "farthestPointSample",
        "kind": "function",
        "signature": "farthestPointSample(points, numSamples)",
        "summary": "Farthest point sampling from a set of candidate points. Iteratively picks the point farthest from all previously selected points. Produces excellent coverage for LOD and feature-preserving downsampling."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/conversions/MeshToVoxel",
    "path": "engine/reference/kaolin/ops/conversions/MeshToVoxel.md",
    "source": "engine/kaolin/ops/conversions/MeshToVoxel.js",
    "import": "/engine/kaolin/ops/conversions/MeshToVoxel.js",
    "sourceHash": "5f378d38724da3f123db0945ac776e45f1552221653fd7aa5ddf4d128806bca9",
    "summary": "MeshToVoxel.js — Voxelize any triangle mesh Converts a triangle surface mesh into a 3D voxel grid. Uses conservative voxelization: any voxel that overlaps a triangle is set. Approaches: 1. CPU scanline (simple, robust) — default 2. GPU compute (fast, for large meshes) — requires WebGPU device Output: Uint8Array (1 = solid, 0 = empty) indexed [x + y*resX + z*resX*resY] Compatible with: - engine/voxel/ chunk system (ChunkRegistry) - MarchingCubesMesher (feed density field) - ConnectivityCompute (structural analysis) - VoronoiFracture (fracture source)",
    "exports": [
      {
        "name": "meshToVoxel",
        "kind": "function",
        "signature": "meshToVoxel(positions, indices, options = {})",
        "summary": "Voxelize a triangle mesh on the CPU."
      },
      {
        "name": "voxelGridToDensity",
        "kind": "function",
        "signature": "voxelGridToDensity(grid, resX, resY, resZ)",
        "summary": "Convert voxel grid to a density field (Float32Array) for Marching Cubes. Surface voxels get density 0, interior > 0, exterior < 0."
      },
      {
        "name": "voxelGridToSDF",
        "kind": "function",
        "signature": "voxelGridToSDF(grid, resX, resY, resZ, voxelSize)",
        "summary": "Compute a signed distance field from a voxel grid. Uses distance transform (chamfer approximation)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/conversions/ParticlesToMesh",
    "path": "engine/reference/kaolin/ops/conversions/ParticlesToMesh.md",
    "source": "engine/kaolin/ops/conversions/ParticlesToMesh.js",
    "import": "/engine/kaolin/ops/conversions/ParticlesToMesh.js",
    "sourceHash": "6862661b6cc6d7785637110432a10e046b2f8fa8b9e70193461f6a1204e1aeb2",
    "summary": "ParticlesToMesh.js — Convert particle positions into a triangle mesh Generates an isosurface from particle density fields using metaball-style implicit functions + Marching Cubes extraction. Use cases: - Fluid surface rendering (SPH → mesh) - Particle cloud → solid mesh for physics - Point sprite → mesh conversion for LOD Compatible with: - Particle system readback (ParticleSimWorld positions) - FluidMPM / ParticleSPH output - SDFToMesh.js (shares MC internals)",
    "exports": [
      {
        "name": "particlesToMesh",
        "kind": "function",
        "signature": "particlesToMesh(particlePositions, options = {})",
        "summary": "Build an isosurface mesh from particle positions using metaball density. Each particle contributes a smooth falloff: d(r) = 1 - (r/radius)^2 summed at each grid point. Isosurface at threshold extracts the mesh."
      },
      {
        "name": "particlesToMeshAnisotropic",
        "kind": "function",
        "signature": "particlesToMeshAnisotropic(positions, velocities, options = {})",
        "summary": "Build mesh from particles with anisotropic kernels. Each particle's influence is stretched along its velocity direction."
      },
      {
        "name": "particlesToMeshFast",
        "kind": "function",
        "signature": "particlesToMeshFast(positions, radius, resolution = 24)",
        "summary": "Quick mesh from particles using a simple point-to-voxel splat. Faster than full metaball but lower quality. Good for preview/LOD."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/conversions/PointsToMesh",
    "path": "engine/reference/kaolin/ops/conversions/PointsToMesh.md",
    "source": "engine/kaolin/ops/conversions/PointsToMesh.js",
    "import": "/engine/kaolin/ops/conversions/PointsToMesh.js",
    "sourceHash": "3624813a5da53c2b2ec3aed2148df15fdf221849db17257599d64983ec289c09",
    "summary": "PointsToMesh.js — Surface reconstruction from point clouds Converts unstructured 3D point sets into triangle meshes. Approaches: 1. Ball-Pivoting Algorithm (BPA) — requires oriented normals 2. Poisson Surface Reconstruction (simplified) — smooth, gap-filling 3. Alpha Shapes — convex hull variant with concavity control Compatible with: - MeshToPoints.js output (round-trip) - Particle system readback positions - LiDAR / scan data",
    "exports": [
      {
        "name": "ballPivoting",
        "kind": "function",
        "signature": "ballPivoting(points, normals, radius, options = {})",
        "summary": "Ball-Pivoting Algorithm for surface reconstruction. Rolls a ball of given radius over the point cloud; when it touches exactly 3 points it creates a triangle. Requires oriented normals for consistent triangle winding."
      },
      {
        "name": "alphaShape",
        "kind": "function",
        "signature": "alphaShape(points, alpha)",
        "summary": "Alpha-shape surface reconstruction. Computes 3D Delaunay tetrahedralization, then removes tetrahedra whose circumradius exceeds 1/alpha. Extracts boundary triangles."
      },
      {
        "name": "convexHull",
        "kind": "function",
        "signature": "convexHull(points)",
        "summary": "Convex hull of a 3D point set. Uses incremental algorithm. For large sets, prefer GPUConvexHull.js."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/conversions/SDFToMesh",
    "path": "engine/reference/kaolin/ops/conversions/SDFToMesh.md",
    "source": "engine/kaolin/ops/conversions/SDFToMesh.js",
    "import": "/engine/kaolin/ops/conversions/SDFToMesh.js",
    "sourceHash": "1cf835669df9f6221cf5c4c052d78a8c1963c7d994f2a0340aa94324f0dfede5",
    "summary": "SDFToMesh.js — Extract triangle mesh from a Signed Distance Field Converts a 3D SDF volume (Float32Array grid) into a triangle mesh using Marching Cubes. This is the CPU path for Kaolin conversions; for GPU-accelerated MC see engine/voxel/MarchingCubesMesher.js. Also supports evaluating analytical SDF functions directly. Compatible with: - MeshToVoxel.js voxelGridToSDF() output - MeshSDFGenerator.js baked SDF textures - SDFCollision.js primitives - FlexiCubes (future Phase 3+)",
    "exports": [
      {
        "name": "sdfToMesh",
        "kind": "function",
        "signature": "sdfToMesh(sdf, resX, resY, resZ, options = {})",
        "summary": "Extract an isosurface from a 3D SDF grid using Marching Cubes."
      },
      {
        "name": "sdfFunctionToMesh",
        "kind": "function",
        "signature": "sdfFunctionToMesh(sdfFn, boundsMin, boundsMax, resolution = 64, options = {})",
        "summary": "Mesh an analytical SDF function by evaluating it on a grid."
      },
      {
        "name": "sdfCSGToMesh",
        "kind": "function",
        "signature": "sdfCSGToMesh(ops, boundsMin, boundsMax, resolution = 64)",
        "summary": "Mesh a CSG combination of SDF primitives. Accepts an array of { sdf: fn(x,y,z), op: 'union'|'subtract'|'intersect' }."
      },
      {
        "name": "sdfSphere",
        "kind": "function",
        "signature": "sdfSphere(radius)",
        "summary": "Sphere SDF centered at origin"
      },
      {
        "name": "sdfBox",
        "kind": "function",
        "signature": "sdfBox(halfX, halfY, halfZ)",
        "summary": "Box SDF centered at origin"
      },
      {
        "name": "sdfTorus",
        "kind": "function",
        "signature": "sdfTorus(majorR, minorR)",
        "summary": "Torus SDF centered at origin, in XZ plane"
      },
      {
        "name": "sdfCylinder",
        "kind": "function",
        "signature": "sdfCylinder(radius, halfHeight)",
        "summary": "Cylinder SDF centered at origin, along Y axis"
      },
      {
        "name": "sdfTranslate",
        "kind": "function",
        "signature": "sdfTranslate(sdfFn, tx, ty, tz)",
        "summary": "Translate an SDF function"
      },
      {
        "name": "sdfSmoothUnion",
        "kind": "function",
        "signature": "sdfSmoothUnion(sdfA, sdfB, k)",
        "summary": "Smooth union of two SDF functions"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/conversions/index",
    "path": "engine/reference/kaolin/ops/conversions/index.md",
    "source": "engine/kaolin/ops/conversions/index.js",
    "import": "/engine/kaolin/ops/conversions/index.js",
    "sourceHash": "ed4a42ee6b0fd88382f9a789618d87f6efcf8c6f3ab3a71a8f207f7e7c3cb3d3",
    "summary": "Kaolin Conversions — Barrel exports Representation conversion modules: - Mesh ↔ Voxel - Mesh ↔ Points - Mesh ↔ SDF - Particles → Mesh",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/index",
    "path": "engine/reference/kaolin/ops/index.md",
    "source": "engine/kaolin/ops/index.js",
    "import": "/engine/kaolin/ops/index.js",
    "sourceHash": "ba2904257eecd4ce606e3296dc75967db77403d04fae11bbacb9be8d6423354f",
    "summary": "engine/kaolin/ops — Geometry operations Primitive processing functions for batched 3D models: meshes, voxelgrids, point clouds, and conversions between them.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/mesh/MeshOps",
    "path": "engine/reference/kaolin/ops/mesh/MeshOps.md",
    "source": "engine/kaolin/ops/mesh/MeshOps.js",
    "import": "/engine/kaolin/ops/mesh/MeshOps.js",
    "sourceHash": "12b2869b789a1e8f198f08ac5114197ce9824d7d4280832e244d41a283a9df16",
    "summary": "MeshOps.js — Core Mesh Operations for Kaolin-style 3D Geometry Toolkit Provides half-edge data structure, adjacency queries, normals, area, Laplacian smoothing, validation, and mesh analysis. All operations work on flat typed arrays (GPU-friendly) with optional object wrappers. Data format (Kaolin convention): positions: Float32Array — stride 3 (x, y, z per vertex) indices:   Uint32Array  — stride 3 (v0, v1, v2 per triangle) Compatible with existing engine systems: - MeshDecimation.js (Vertex/Triangle classes) - MeshCutter.js (plain [x,y,z] arrays) - GPUSoftBody.js (SoA GPU buffers) - EntityMeshRenderer (interleaved vertex buffers)",
    "exports": [
      {
        "name": "HalfEdgeMesh",
        "kind": "class",
        "signature": "class HalfEdgeMesh",
        "summary": "Index-based half-edge mesh representation. Each half-edge stores: vertex   — index of the vertex it points TO face     — index of the face it belongs to (-1 for boundary) twin     — index of the opposite half-edge (-1 if boundary) next     — index of the next half-edge in the face loop prev     — index of the previous half-edge in the face loop Stored as parallel typed arrays for cache efficiency."
      },
      {
        "name": "computeFaceNormals",
        "kind": "function",
        "signature": "computeFaceNormals(positions, indices, normalize = true)",
        "summary": "Compute per-face normals (unnormalized = area-weighted, or normalized)."
      },
      {
        "name": "computeVertexNormals",
        "kind": "function",
        "signature": "computeVertexNormals(positions, indices)",
        "summary": "Compute per-vertex normals via area-weighted average of adjacent face normals."
      },
      {
        "name": "computeVertexNormalsAngleWeighted",
        "kind": "function",
        "signature": "computeVertexNormalsAngleWeighted(positions, indices)",
        "summary": "Compute per-vertex normals weighted by the angle at each vertex in each face. More accurate than area-weighted for meshes with very different triangle sizes."
      },
      {
        "name": "computeFaceAreas",
        "kind": "function",
        "signature": "computeFaceAreas(positions, indices)",
        "summary": "Compute area of each triangle face."
      },
      {
        "name": "computeSurfaceArea",
        "kind": "function",
        "signature": "computeSurfaceArea(positions, indices)",
        "summary": "Total surface area of the mesh."
      },
      {
        "name": "computeSignedVolume",
        "kind": "function",
        "signature": "computeSignedVolume(positions, indices)",
        "summary": "Signed volume of a closed triangle mesh (divergence theorem). Positive if normals point outward with consistent winding."
      },
      {
        "name": "computeEdgeLengths",
        "kind": "function",
        "signature": "computeEdgeLengths(positions, indices)",
        "summary": "Compute lengths of all unique edges."
      },
      {
        "name": "computeBoundingBox",
        "kind": "function",
        "signature": "computeBoundingBox(positions)",
        "summary": "Compute axis-aligned bounding box."
      },
      {
        "name": "buildVertexAdjacency",
        "kind": "function",
        "signature": "buildVertexAdjacency(indices, numVertices)",
        "summary": "Build vertex-to-vertex adjacency (sparse neighbor lists)."
      },
      {
        "name": "buildVertexFaceAdjacency",
        "kind": "function",
        "signature": "buildVertexFaceAdjacency(indices, numVertices)",
        "summary": "Build vertex-to-face adjacency."
      },
      {
        "name": "buildFaceAdjacency",
        "kind": "function",
        "signature": "buildFaceAdjacency(indices, numFaces)",
        "summary": "Build face-to-face adjacency (faces sharing an edge)."
      },
      {
        "name": "laplacianSmooth",
        "kind": "function",
        "signature": "laplacianSmooth(positions, indices, iterations = 1, lambda = 0.5, pinned = null)",
        "summary": "Uniform Laplacian smoothing (iterative). Moves each vertex toward the centroid of its neighbors."
      },
      {
        "name": "taubinSmooth",
        "kind": "function",
        "signature": "taubinSmooth(positions, indices, iterations = 5, lambda = 0.5, mu = -0.53, pinned = null)",
        "summary": "Taubin smoothing (λ|μ) — Laplacian smooth that preserves volume. Alternates positive (shrinking) and negative (inflating) steps."
      },
      {
        "name": "cotangentLaplacianSmooth",
        "kind": "function",
        "signature": "cotangentLaplacianSmooth(positions, indices, lambda = 0.5, pinned = null)",
        "summary": "Cotangent-weighted Laplacian smoothing (1 iteration). More geometrically accurate than uniform — preserves curvature better."
      },
      {
        "name": "validateMesh",
        "kind": "function",
        "signature": "validateMesh(positions, indices)",
        "summary": "Validate mesh integrity. Returns a report object."
      },
      {
        "name": "computeCentroid",
        "kind": "function",
        "signature": "computeCentroid(positions)",
        "summary": "Compute mesh centroid (average of vertex positions)."
      },
      {
        "name": "fromVertexTriangleClasses",
        "kind": "function",
        "signature": "fromVertexTriangleClasses(vertices, triangles)",
        "summary": "Convert from MeshDecimation.js Vertex/Triangle classes to flat arrays."
      },
      {
        "name": "fromArrays",
        "kind": "function",
        "signature": "fromArrays(verts, faces)",
        "summary": "Convert from plain [x,y,z] arrays (MeshCutter style) to flat Float32Array."
      },
      {
        "name": "toArrays",
        "kind": "function",
        "signature": "toArrays(positions, indices)",
        "summary": "Convert flat arrays to plain [x,y,z] arrays."
      },
      {
        "name": "fromInterleavedBuffer",
        "kind": "function",
        "signature": "fromInterleavedBuffer(interleavedBuffer, stride, posOffset, indexBuffer)",
        "summary": "Extract positions/indices from an interleaved GPU vertex buffer + index buffer."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/mesh/MeshSubdivision",
    "path": "engine/reference/kaolin/ops/mesh/MeshSubdivision.md",
    "source": "engine/kaolin/ops/mesh/MeshSubdivision.js",
    "import": "/engine/kaolin/ops/mesh/MeshSubdivision.js",
    "sourceHash": "e351e17376afb9d96ba821efcb04aa3febf52c7784b866f238daf7c1305ae32c",
    "summary": "MeshSubdivision.js — Loop & Catmull-Clark Subdivision Subdivision surface algorithms for the Kaolin geometry toolkit. Loop Subdivision (Charles Loop, 1987): - Operates on triangle meshes only - Inserts edge midpoints, reconnects into 4 sub-triangles per face - Uses β-weighting for smooth limit surface (Warren weights) - Boundary edges get special 1/8, 3/4, 1/8 stencil Catmull-Clark Subdivision (Catmull & Clark, 1978): - Operates on quad or mixed meshes - Face points → edge points → vertex points → reconnect - Converges to C² (bi-cubic B-spline) surface away from extraordinary verts - Triangle input is first converted to all-quad via 1-to-3 split Both algorithms support: - Boundary handling (crease preservation) - Pinned vertices (kept fixed) - Multiple subdivision levels Data format matches MeshOps.js: positions: Float32Array — stride 3 indices:   Uint32Array  — stride 3 (triangles) or stride 4 (quads)",
    "exports": [
      {
        "name": "loopSubdivide",
        "kind": "function",
        "signature": "loopSubdivide(positions, indices, options = {})",
        "summary": "Perform one level of Loop subdivision on a triangle mesh."
      },
      {
        "name": "loopSubdivideMulti",
        "kind": "function",
        "signature": "loopSubdivideMulti(positions, indices, levels = 1, options = {})",
        "summary": "Perform multiple levels of Loop subdivision."
      },
      {
        "name": "catmullClarkSubdivide",
        "kind": "function",
        "signature": "catmullClarkSubdivide(positions, faceIndices, faceVertCounts, options = {})",
        "summary": "Perform one level of Catmull-Clark subdivision. Input can be triangle or quad faces (mixed is allowed). - triangles: indices stride 3, faceVertCounts = [3, 3, ...] - quads:     indices stride 4, faceVertCounts = [4, 4, ...] - mixed:     flat indices + faceVertCounts array For simplicity, this implementation accepts two formats: 1. (positions, quadIndices) — all-quad, quadIndices = Uint32Array stride 4 2. (positions, triIndices, { triangleInput: true }) — converts tris to quads first"
      },
      {
        "name": "catmullClarkSubdivideMulti",
        "kind": "function",
        "signature": "catmullClarkSubdivideMulti(positions, faceIndices, faceVertCounts, levels = 1, options = {})",
        "summary": "Perform multiple levels of Catmull-Clark subdivision."
      },
      {
        "name": "trianglesToFaceList",
        "kind": "function",
        "signature": "trianglesToFaceList(triIndices)",
        "summary": "Convert a triangle mesh to the faceIndices + faceVertCounts format expected by catmullClarkSubdivide."
      },
      {
        "name": "quadFacesToTriangles",
        "kind": "function",
        "signature": "quadFacesToTriangles(positions, faceIndices, faceVertCounts)",
        "summary": "Convert Catmull-Clark output (all quads) to triangles for rendering. Each quad is split into 2 triangles along the shorter diagonal."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/mesh/MeshTetrahedralize",
    "path": "engine/reference/kaolin/ops/mesh/MeshTetrahedralize.md",
    "source": "engine/kaolin/ops/mesh/MeshTetrahedralize.js",
    "import": "/engine/kaolin/ops/mesh/MeshTetrahedralize.js",
    "sourceHash": "3dfc6cb8a9d8c8ce29f37ee176d70c99d642bf6815e786729cc0676c8263494c",
    "summary": "MeshTetrahedralize.js — Surface Mesh → Tetrahedral Mesh Converts a closed triangle surface mesh into a tetrahedral volume mesh suitable for FEM soft body simulation (GPUSoftBody.js). Algorithm: Constrained Delaunay Tetrahedralization 1. Compute bounding box, generate interior sample points 2. Combine surface vertices + interior points 3. Build Delaunay tetrahedralization via incremental insertion 4. Remove tets outside the surface (using winding number or ray test) 5. Output: nodePositions (Float32Array stride 3) + tetIndices (Uint32Array stride 4) The output format matches GPUSoftBody.createSoftBody() exactly: nodePositions: Float32Array — [x0, y0, z0, x1, y1, z1, ...] tetIndices:    Uint32Array  — [n0, n1, n2, n3, ...] (4 per tet) References: - Si, \"TetGen: A Delaunay-Based Quality Tetrahedral Mesh Generator\" (2015) - Shewchuk, \"Tetrahedral Mesh Generation by Delaunay Refinement\" (1998) - Jacobson et al., \"Robust Inside-Outside Segmentation using Generalized Winding Numbers\" (2013)",
    "exports": [
      {
        "name": "tetrahedralize",
        "kind": "function",
        "signature": "tetrahedralize(positions, indices, options = {})",
        "summary": "Tetrahedralize a closed triangle surface mesh."
      },
      {
        "name": "tetrahedralizeGrid",
        "kind": "function",
        "signature": "tetrahedralizeGrid(positions, indices, gridRes = 6)",
        "summary": "Quick tetrahedralize using simple grid-based approach. Faster but lower quality than full Delaunay. Good for real-time use."
      },
      {
        "name": "computeTetQuality",
        "kind": "function",
        "signature": "computeTetQuality(positions, tetIndices)",
        "summary": "Compute quality ratio for each tet (radius ratio = circumradius / inradius). Ideal = 3 (regular tet). Higher = worse (slivers)."
      },
      {
        "name": "extractTetSurface",
        "kind": "function",
        "signature": "extractTetSurface(tetIndices)",
        "summary": "Extract the surface triangles of a tetrahedral mesh. Surface faces are those that belong to exactly one tetrahedron."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/mesh/index",
    "path": "engine/reference/kaolin/ops/mesh/index.md",
    "source": "engine/kaolin/ops/mesh/index.js",
    "import": "/engine/kaolin/ops/mesh/index.js",
    "sourceHash": "2a392948d091a5a22d10d545f39c5448cf91191dfaf6d69d2e7e8bdb0dfefd8c",
    "summary": "engine/kaolin/ops/mesh — Core mesh operations Half-edge data structure, adjacency, normals, area, Laplacian smoothing, validation, and subdivision surfaces (Loop + Catmull-Clark).",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/pointcloud/PointCloudOps",
    "path": "engine/reference/kaolin/ops/pointcloud/PointCloudOps.md",
    "source": "engine/kaolin/ops/pointcloud/PointCloudOps.js",
    "import": "/engine/kaolin/ops/pointcloud/PointCloudOps.js",
    "sourceHash": "4ff18a6b98a537bc8c716b076a609995d5881ec913083aeca863331f3a40516f",
    "summary": "PointCloudOps.js — Point cloud geometric analysis Operations on unstructured 3D point sets: - k-NN queries via spatial hash - Normal estimation (PCA on local neighborhood) - Curvature estimation (from fitted normals) - Statistical outlier removal - Voxel downsampling - Centroid / bounding box / oriented bounding box - Normal orientation propagation (MST-based) Compatible with: - MeshToPoints.js output - Particle system readback (Float32Array stride 3) - PointsToMesh.js input (provides normals for BPA)",
    "exports": [
      {
        "name": "buildSpatialHash",
        "kind": "function",
        "signature": "buildSpatialHash(points, cellSize)",
        "summary": "Build a spatial hash for fast neighbor queries."
      },
      {
        "name": "knnQuery",
        "kind": "function",
        "signature": "knnQuery(points, grid, cellSize, qi, k, maxRadius = Infinity)",
        "summary": "Find k nearest neighbors for a single query point."
      },
      {
        "name": "batchKNN",
        "kind": "function",
        "signature": "batchKNN(points, k, searchRadius)",
        "summary": "Batch k-NN for all points."
      },
      {
        "name": "estimateNormals",
        "kind": "function",
        "signature": "estimateNormals(points, k = 12, options = {})",
        "summary": "Estimate normals for a point cloud using PCA on local neighborhoods. For each point, finds k nearest neighbors and fits a plane via PCA. The normal is the eigenvector corresponding to the smallest eigenvalue of the covariance matrix."
      },
      {
        "name": "estimateCurvature",
        "kind": "function",
        "signature": "estimateCurvature(points, normals, k = 12)",
        "summary": "Estimate per-point curvature from normals and neighborhood. Uses the ratio of the smallest eigenvalue to the sum of eigenvalues."
      },
      {
        "name": "removeStatisticalOutliers",
        "kind": "function",
        "signature": "removeStatisticalOutliers(points, k = 20, stdRatio = 2.0)",
        "summary": "Remove statistical outliers based on mean distance to k neighbors. Points with mean distance > (global_mean + stdRatio * global_std) are removed."
      },
      {
        "name": "removeRadiusOutliers",
        "kind": "function",
        "signature": "removeRadiusOutliers(points, radius, minNeighbors = 3)",
        "summary": "Remove points with fewer than minNeighbors within given radius."
      },
      {
        "name": "voxelDownsample",
        "kind": "function",
        "signature": "voxelDownsample(points, voxelSize, normals = null)",
        "summary": "Downsample a point cloud by averaging points within each voxel cell."
      },
      {
        "name": "computeAABB",
        "kind": "function",
        "signature": "computeAABB(points)",
        "summary": "Compute axis-aligned bounding box."
      },
      {
        "name": "computeCentroid",
        "kind": "function",
        "signature": "computeCentroid(points)",
        "summary": "Compute centroid of a point cloud."
      },
      {
        "name": "computeOBB",
        "kind": "function",
        "signature": "computeOBB(points)",
        "summary": "Compute oriented bounding box via PCA. Returns axes (3 Float32Array[3]), half-extents, and center."
      },
      {
        "name": "cropToAABB",
        "kind": "function",
        "signature": "cropToAABB(points, min, max)",
        "summary": "Crop points to an axis-aligned bounding box."
      },
      {
        "name": "cropToSphere",
        "kind": "function",
        "signature": "cropToSphere(points, cx, cy, cz, radius)",
        "summary": "Crop points to a sphere."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/pointcloud/index",
    "path": "engine/reference/kaolin/ops/pointcloud/index.md",
    "source": "engine/kaolin/ops/pointcloud/index.js",
    "import": "/engine/kaolin/ops/pointcloud/index.js",
    "sourceHash": "ce357a5edaaa573ced00e18444788cafd95f5f64da131e858894cac9125506ca",
    "summary": "Kaolin Point Cloud — Barrel exports",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/voxelgrid/VoxelOps",
    "path": "engine/reference/kaolin/ops/voxelgrid/VoxelOps.md",
    "source": "engine/kaolin/ops/voxelgrid/VoxelOps.js",
    "import": "/engine/kaolin/ops/voxelgrid/VoxelOps.js",
    "sourceHash": "b9ca8e462e6f106ef7ec18c6c67f018eb135850c0cd354770452e6e77f4c01b7",
    "summary": "VoxelOps.js — Voxel grid operations Operations on binary/scalar 3D voxel grids: - Fill interior (flood fill) - Hollow (keep only surface shell) - CSG boolean: union, intersect, subtract - Downsample / upsample - Morphological: dilate, erode, open, close - Extract isosurface info (surface voxels, boundary) - Connected component labeling Grid format: Uint8Array indexed [x + y*resX + z*resX*resY] 1 = solid, 0 = empty (unless scalar grid — Float32Array) Compatible with: - MeshToVoxel.js output - engine/voxel/ chunk system (ChunkRegistry) - ConnectivityCompute.js (structural analysis) - VoronoiFracture.js (fracture source)",
    "exports": [
      {
        "name": "voxelUnion",
        "kind": "function",
        "signature": "voxelUnion(gridA, gridB)",
        "summary": "Union of two voxel grids (same dimensions required). Result = A OR B."
      },
      {
        "name": "voxelIntersect",
        "kind": "function",
        "signature": "voxelIntersect(gridA, gridB)",
        "summary": "Intersection of two voxel grids. Result = A AND B."
      },
      {
        "name": "voxelSubtract",
        "kind": "function",
        "signature": "voxelSubtract(gridA, gridB)",
        "summary": "Subtraction: A minus B. Result = A AND NOT B."
      },
      {
        "name": "voxelXOR",
        "kind": "function",
        "signature": "voxelXOR(gridA, gridB)",
        "summary": "Symmetric difference (XOR). Result = A XOR B."
      },
      {
        "name": "voxelInvert",
        "kind": "function",
        "signature": "voxelInvert(grid)",
        "summary": "Invert a voxel grid."
      },
      {
        "name": "voxelFill",
        "kind": "function",
        "signature": "voxelFill(grid, resX, resY, resZ)",
        "summary": "Fill the interior of a closed voxel shell. Uses flood fill from boundary to mark exterior, then inverts."
      },
      {
        "name": "voxelHollow",
        "kind": "function",
        "signature": "voxelHollow(grid, resX, resY, resZ, thickness = 1)",
        "summary": "Hollow a voxel grid — keep only the outer shell (surface voxels). A voxel is surface if it's solid and has at least one empty 6-neighbor."
      },
      {
        "name": "voxelDilate",
        "kind": "function",
        "signature": "voxelDilate(grid, resX, resY, resZ, radius = 1)",
        "summary": "Dilate: expand solid voxels by `radius` voxels (6-connected)."
      },
      {
        "name": "voxelErode",
        "kind": "function",
        "signature": "voxelErode(grid, resX, resY, resZ, radius = 1)",
        "summary": "Erode: shrink solid voxels by `radius` voxels (6-connected)."
      },
      {
        "name": "voxelOpen",
        "kind": "function",
        "signature": "voxelOpen(grid, resX, resY, resZ, radius = 1)",
        "summary": "Morphological open: erode then dilate (removes small protrusions)."
      },
      {
        "name": "voxelClose",
        "kind": "function",
        "signature": "voxelClose(grid, resX, resY, resZ, radius = 1)",
        "summary": "Morphological close: dilate then erode (fills small holes)."
      },
      {
        "name": "voxelDownsample",
        "kind": "function",
        "signature": "voxelDownsample(grid, resX, resY, resZ, factor = 2)",
        "summary": "Downsample a voxel grid by factor (majority vote per super-voxel)."
      },
      {
        "name": "voxelUpsample",
        "kind": "function",
        "signature": "voxelUpsample(grid, resX, resY, resZ, factor = 2)",
        "summary": "Upsample a voxel grid by factor (nearest-neighbor replication)."
      },
      {
        "name": "connectedComponents",
        "kind": "function",
        "signature": "connectedComponents(grid, resX, resY, resZ)",
        "summary": "Label connected components in a voxel grid (6-connected)."
      },
      {
        "name": "removeSmallComponents",
        "kind": "function",
        "signature": "removeSmallComponents(grid, resX, resY, resZ, minSize)",
        "summary": "Remove small connected components below a size threshold."
      },
      {
        "name": "extractSurfaceVoxels",
        "kind": "function",
        "signature": "extractSurfaceVoxels(grid, resX, resY, resZ)",
        "summary": "Extract surface voxels (solid voxels with at least one empty 6-neighbor)."
      },
      {
        "name": "countSolid",
        "kind": "function",
        "signature": "countSolid(grid)",
        "summary": "Count solid voxels."
      },
      {
        "name": "computeVolume",
        "kind": "function",
        "signature": "computeVolume(grid, voxelSize)",
        "summary": "Compute volume in world units."
      },
      {
        "name": "computeSurfaceArea",
        "kind": "function",
        "signature": "computeSurfaceArea(grid, resX, resY, resZ, voxelSize)",
        "summary": "Compute approximate surface area (count exposed faces × voxelSize²)."
      },
      {
        "name": "createGrid",
        "kind": "function",
        "signature": "createGrid(resX, resY, resZ)",
        "summary": "Create an empty voxel grid."
      },
      {
        "name": "createSphere",
        "kind": "function",
        "signature": "createSphere(resX, resY, resZ, cx, cy, cz, radius)",
        "summary": "Create a solid sphere in a voxel grid."
      },
      {
        "name": "createBox",
        "kind": "function",
        "signature": "createBox(resX, resY, resZ, minX, minY, minZ, maxX, maxY, maxZ)",
        "summary": "Create a solid box in a voxel grid."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/ops/voxelgrid/index",
    "path": "engine/reference/kaolin/ops/voxelgrid/index.md",
    "source": "engine/kaolin/ops/voxelgrid/index.js",
    "import": "/engine/kaolin/ops/voxelgrid/index.js",
    "sourceHash": "8a0ab248ec3f75b73b89cc5da8150ebe449096cd385c6d3776b143236c51d4bb",
    "summary": "Kaolin Voxel Grid — Barrel exports",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/physics/AutoTetMesh",
    "path": "engine/reference/kaolin/physics/AutoTetMesh.md",
    "source": "engine/kaolin/physics/AutoTetMesh.js",
    "import": "/engine/kaolin/physics/AutoTetMesh.js",
    "sourceHash": "1f9ab015155aadf821b703eb514ff34eefabf583a810398e5f8def3e2d1a427d",
    "summary": "AutoTetMesh.js — Automatic surface mesh → tetrahedral mesh → GPUSoftBody bridge One-call pipeline: give it a triangle mesh, get back a soft body. Pipeline: 1. Validate + repair mesh (MeshOps.validateMesh) 2. Optionally decimate for performance (MeshDecimation) 3. Tetrahedralize (MeshTetrahedralize) 4. Quality check + optimization 5. Create GPUSoftBody instance Compatible with: - GPUSoftBody.createSoftBody() — exact format match - MeshDecimation.js — LOD before tet generation - EntityMeshRenderer — visual mesh binding - MeshTetrahedralize.js — Delaunay + grid methods",
    "exports": [
      {
        "name": "autoTetMesh",
        "kind": "function",
        "signature": "autoTetMesh(positions, indices, options = {})",
        "summary": "Full pipeline: surface mesh → tet mesh ready for GPUSoftBody."
      },
      {
        "name": "createSoftBodyFromMesh",
        "kind": "function",
        "signature": "createSoftBodyFromMesh(softBodySystem, positions, indices, material = 'rubber', options = {})",
        "summary": "Create a GPUSoftBody from a surface mesh in one call."
      },
      {
        "name": "createSoftBodiesBatch",
        "kind": "function",
        "signature": "createSoftBodiesBatch(softBodySystem, meshes)",
        "summary": "Batch-create multiple soft bodies from meshes."
      },
      {
        "name": "generateTetLODs",
        "kind": "function",
        "signature": "generateTetLODs(positions, indices, gridResolutions = [8, 5, 3])",
        "summary": "Generate multiple LOD levels of tet meshes from a single surface mesh."
      },
      {
        "name": "TET_PRESETS",
        "kind": "constant",
        "signature": "TET_PRESETS",
        "summary": "Preset configurations for different use cases."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/physics/ParticleSkinning",
    "path": "engine/reference/kaolin/physics/ParticleSkinning.md",
    "source": "engine/kaolin/physics/ParticleSkinning.js",
    "import": "/engine/kaolin/physics/ParticleSkinning.js",
    "sourceHash": "5c84a5bf4d40d0c37d057f697ed2ece139a298cacae986eeac5d9f6723d38fdb",
    "summary": "ParticleSkinning.js — Learned reduced deformation basis from particle sim Inspired by NVIDIA Simplicits: learn a small set of skinning weights that approximate the full FEM simulation at a fraction of the cost. Pipeline: 1. Run full sim for N frames → capture deformation snapshots 2. PCA on displacement field → extract dominant deformation modes 3. Compute skinning weights via least-squares fitting 4. At runtime: blend modes with learned weights → fast approximate deformation This enables: - Real-time soft body preview without FEM solve - LOD: near = full FEM, far = skinned approximation - Baking physics to animation for replay Compatible with: - GPUSoftBody.js — reads back node positions for training - EntityMeshRenderer — applies skinned deformation to visual mesh - SkeletalAnimation.js — similar weight/bone concept",
    "exports": [
      {
        "name": "createDeformationCapture",
        "kind": "function",
        "signature": "createDeformationCapture(restPositions)",
        "summary": "Capture deformation snapshots from a running soft body. Call this each frame during a training run."
      },
      {
        "name": "captureFrame",
        "kind": "function",
        "signature": "captureFrame(capture, currentPositions)",
        "summary": "Record a frame's deformed positions."
      },
      {
        "name": "extractDeformationModes",
        "kind": "function",
        "signature": "extractDeformationModes(capture, numModes = 8)",
        "summary": "Extract dominant deformation modes via PCA on displacement snapshots."
      },
      {
        "name": "computeSkinningWeights",
        "kind": "function",
        "signature": "computeSkinningWeights(decomposition, capture)",
        "summary": "Compute skinning weights for each node per deformation mode. Uses least-squares: for each snapshot, find mode weights that best reconstruct the displacement."
      },
      {
        "name": "createSkinningEvaluator",
        "kind": "function",
        "signature": "createSkinningEvaluator(restPositions, modes, meanDisplacement)",
        "summary": "Create a runtime skinning evaluator."
      },
      {
        "name": "evaluateSkinning",
        "kind": "function",
        "signature": "evaluateSkinning(evaluator, coefficients)",
        "summary": "Evaluate skinned deformation with given mode coefficients."
      },
      {
        "name": "fitCoefficients",
        "kind": "function",
        "signature": "fitCoefficients(evaluator, targetPositions)",
        "summary": "Fit mode coefficients to match a target deformation (least-squares). Useful for transitioning from full FEM to skinned approximation."
      },
      {
        "name": "bakeToAnimation",
        "kind": "function",
        "signature": "bakeToAnimation(capture, decomposition, fps = 60)",
        "summary": "Bake deformation snapshots into mode coefficient keyframes. Output can drive the skinning evaluator for replay without physics."
      },
      {
        "name": "sampleAnimation",
        "kind": "function",
        "signature": "sampleAnimation(animation, time)",
        "summary": "Interpolate baked animation at a given time."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "kaolin/physics/index",
    "path": "engine/reference/kaolin/physics/index.md",
    "source": "engine/kaolin/physics/index.js",
    "import": "/engine/kaolin/physics/index.js",
    "sourceHash": "cd051e3b3b8e414f70cb2133e26fe858b3486e761935bc384c76de4ebc44a26a",
    "summary": "Kaolin Physics — Barrel exports Physics bridges: auto tet mesh generation + learned skinning.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/capability/RouteCapability",
    "path": "engine/reference/network/capability/RouteCapability.md",
    "source": "engine/network/capability/RouteCapability.js",
    "import": "/engine/network/capability/RouteCapability.js",
    "sourceHash": "82424c8ab87f3200ad2cce0e76ae843d2b3c0ce5ec7fde4dba35a4c7f270b3ed",
    "summary": "network/capability/RouteCapability.js — capability-based route access for the Particle Global OS Network Layer (network plan §10).  Reuses the Causal State Engine's UCAN-style capability primitive (engine/state/authority/Capability.js: makeCapability/attenuate/authorizes) unmodified. A route capability names a principal (device/profile/membership signer fingerprint), the route as its object, and an allow-list of route/* verbs enforced via a caveat predicate — narrowing-only delegation comes for free from `attenuate()`. `CapabilityRegistry` (also reused as-is) tracks issuance, revocation, and single-use consumption.",
    "exports": [
      {
        "name": "makeRouteCapability",
        "kind": "function",
        "signature": "makeRouteCapability({ principal, routeId, allow = DEFAULT_ROUTE_ALLOW, constraints = {}, expiresAt = null, singleUse = false, delegable = true, } = {})",
        "summary": "Mint a route capability. The capability's own `action` is always `'*'`; the actual allow-list is enforced by a `route-allow` caveat so it composes correctly with further `attenuateRouteCapability()` narrowing."
      },
      {
        "name": "attenuateRouteCapability",
        "kind": "function",
        "signature": "attenuateRouteCapability(cap, { allow, predicate, key, label } = {})",
        "summary": "Narrow an existing route capability's allow-list and/or add an arbitrary extra predicate (e.g. \"only from this device fingerprint\"). Cannot widen beyond the parent's allow-list — throws if it would."
      },
      {
        "name": "authorizesRoute",
        "kind": "function",
        "signature": "authorizesRoute(cap, { principal, routeId, action, epoch, context = {} } = {})",
        "summary": "Check whether a capability authorizes a specific route action right now."
      },
      {
        "name": "createRouteCapabilityRegistry",
        "kind": "function",
        "signature": "createRouteCapabilityRegistry()",
        "summary": "Create a fresh registry to issue/revoke/consume route capabilities in."
      },
      {
        "name": "DEFAULT_ROUTE_ALLOW",
        "kind": "constant",
        "signature": "DEFAULT_ROUTE_ALLOW",
        "summary": "Default allow-list for a freshly-minted route capability (network plan §10)."
      },
      {
        "name": "ROUTE_ACTIONS",
        "kind": "constant",
        "signature": "ROUTE_ACTIONS",
        "summary": "All route verbs the network layer currently understands."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/carrier/AnonymityMode",
    "path": "engine/reference/network/carrier/AnonymityMode.md",
    "source": "engine/network/carrier/AnonymityMode.js",
    "import": "/engine/network/carrier/AnonymityMode.js",
    "sourceHash": "2ad3e61252431762618d92c424dac4919aa16ea4458169b9099f7426c039565e",
    "summary": "network/carrier/AnonymityMode.js — connection mode selection + UI transport-truth labels (network plan §25/§42): the UI must never claim a connection is more private than it actually is.",
    "exports": [
      {
        "name": "selectAnonymityMode",
        "kind": "function",
        "signature": "selectAnonymityMode({ isSelfDevice = false, groupApproved = false, trustPending = false, highRiskOverride = false } = {})",
        "summary": "Decide the anonymity mode for a peer relationship (network plan §25 policy: unknown/public -> anonymous; new invites -> anonymous until approved; group members -> group policy; trusted/own devices -> direct)."
      },
      {
        "name": "transportTruthLabel",
        "kind": "function",
        "signature": "transportTruthLabel(mode)",
        "summary": "Human-readable, honest transport label for the UI (§42)."
      },
      {
        "name": "allowsDirectTransport",
        "kind": "function",
        "signature": "allowsDirectTransport(mode)",
        "summary": "Whether a mode permits direct (non-relayed) transport — direct may reveal network metadata to the peer (§42)."
      },
      {
        "name": "ANONYMITY_MODE",
        "kind": "constant",
        "signature": "ANONYMITY_MODE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/carrier/CarrierForwarder",
    "path": "engine/reference/network/carrier/CarrierForwarder.md",
    "source": "engine/network/carrier/CarrierForwarder.js",
    "import": "/engine/network/carrier/CarrierForwarder.js",
    "sourceHash": "92787daaff6b2f0eacdf713a3c13c3aab58a976fad152c0991a5f981f634b261",
    "summary": "network/carrier/CarrierForwarder.js — the forwarding decision a carrier node makes for a sealed packet, WITHOUT ever inspecting its payload (network plan §24/§35/§36): expiry, hop-limit (TTL), dedupe, and rate limit, in that order. Reuses `chunks/DedupeCache.js` as-is (network plan §29 dedupe applies uniformly to control/route/carrier traffic).",
    "exports": [
      {
        "name": "evaluateForward",
        "kind": "function",
        "signature": "evaluateForward({ packet, dedupeCache, rateLimiter, dedupeTtlMs = 60000, now = Date.now()",
        "summary": "Decide whether to forward a carrier packet."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/carrier/CarrierIdentity",
    "path": "engine/reference/network/carrier/CarrierIdentity.md",
    "source": "engine/network/carrier/CarrierIdentity.js",
    "import": "/engine/network/carrier/CarrierIdentity.js",
    "sourceHash": "097de13581112ac514b3c66b477897df4c92af8e29afd0e913ffdd24ba0e05f2",
    "summary": "network/carrier/CarrierIdentity.js — announces a node's carrier-layer (§26) ECDH onion-recipient public key to its current mesh peers. Closes the gap `CarrierRelay.js`'s own doc flagged: \"another peer can only address this device as an onion hop if it learned the key out-of-band.\" This is that in-band announce: a tiny message sent over the SAME mesh session data channel (via `sendToPeer`, typically from `onPeerJoin`), cached locally so a future `SealedPacket.buildSealedPacket({hops, payload})` call can look up a hop's key without any prior out-of-band exchange.  Deliberately NOT signed/verified against a stronger identity (e.g. the CSE profile/device signer) — WebRTC's own DTLS already authenticates \"these bytes came from the peer this data channel is connected to\"; the remaining trust question (should carrier packets even be routed through this specific peer) is a routing/reputation decision for the caller, not this module's job. `handleCarrierIdentityMessage` only checks that the announce's claimed peerId matches the channel it arrived on (fails closed on mismatch — either a bug or a spoof attempt).",
    "exports": [
      {
        "name": "createCarrierIdentityRegistry",
        "kind": "function",
        "signature": "createCarrierIdentityRegistry()",
        "summary": "Create an empty registry of peerId -> carrier-recipient ECDH public key."
      },
      {
        "name": "buildCarrierIdentityAnnounce",
        "kind": "function",
        "signature": "buildCarrierIdentityAnnounce(selfPeerId, ecdhPublicKeyRaw)",
        "summary": "Build the announce message to hand to a mesh session's `sendToPeer`. Returns null if this node has no key to announce."
      },
      {
        "name": "handleCarrierIdentityMessage",
        "kind": "function",
        "signature": "handleCarrierIdentityMessage(registry, fromPeerId, op)",
        "summary": "Feed every relevant `onOp(peerId, op)` message through this, alongside `ChunkTransport.js`/`CarrierRelay.js`/`DhtTransport.js`'s own handlers (same `(peerId, op) => boolean` chaining pattern)."
      },
      {
        "name": "lookupCarrierRecipientKey",
        "kind": "function",
        "signature": "lookupCarrierRecipientKey(registry, peerId)",
        "summary": "Look up a previously-announced peer's carrier-recipient ECDH public key (raw bytes), or null."
      },
      {
        "name": "listKnownCarrierRecipients",
        "kind": "function",
        "signature": "listKnownCarrierRecipients(registry)",
        "summary": "List peerIds this node has learned a carrier-recipient key for."
      },
      {
        "name": "forgetCarrierRecipient",
        "kind": "function",
        "signature": "forgetCarrierRecipient(registry, peerId)",
        "summary": "Forget a peer's announced key (e.g. on disconnect/leave)."
      },
      {
        "name": "CARRIER_IDENTITY_MESSAGE_TYPE",
        "kind": "constant",
        "signature": "CARRIER_IDENTITY_MESSAGE_TYPE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/carrier/CarrierPacket",
    "path": "engine/reference/network/carrier/CarrierPacket.md",
    "source": "engine/network/carrier/CarrierPacket.js",
    "import": "/engine/network/carrier/CarrierPacket.js",
    "sourceHash": "a94afcc2b175dc373e942cc55d9fda6772c3571db020dc3d9a8bcdaa2cefaff1",
    "summary": "network/carrier/CarrierPacket.js — the carrier layer's OUTER envelope (network plan §26): visible routing metadata (route/ttl/expiry) plus an opaque sealed payload (SealedPacket.js) that carrier nodes forward without ever decrypting.",
    "exports": [
      {
        "name": "makeCarrierPacket",
        "kind": "function",
        "signature": "makeCarrierPacket({ routeId, ttl = 4, expiresAt = null, sealed } = {})",
        "summary": "Wrap a sealed onion packet for carrier forwarding."
      },
      {
        "name": "decrementCarrierTtl",
        "kind": "function",
        "signature": "decrementCarrierTtl(packet)",
        "summary": "Return a new carrier packet with ttl decremented by 1 (does not mutate the input)."
      },
      {
        "name": "isCarrierPacketExpired",
        "kind": "function",
        "signature": "isCarrierPacketExpired(packet, now = Date.now()",
        "summary": ""
      },
      {
        "name": "isCarrierTtlExhausted",
        "kind": "function",
        "signature": "isCarrierTtlExhausted(packet)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/carrier/CarrierRelay",
    "path": "engine/reference/network/carrier/CarrierRelay.md",
    "source": "engine/network/carrier/CarrierRelay.js",
    "import": "/engine/network/carrier/CarrierRelay.js",
    "sourceHash": "c360a804893025dc821a693b07c9b59b00b970404bc66d1b5ae8d27f6bc7c77d",
    "summary": "network/carrier/CarrierRelay.js — routes a CarrierPacket across a real mesh (network plan §24/§35/§36, previously deferred: \"CollabMeshTopology gossip/fanout/TTL wiring for actual multi-peer carrier mesh topology\").  SealedPacket.js's onion path is an ordered peerId list chosen by the SENDER, but not every hop in that path is necessarily a live WebRTC neighbor of the previous hop — K-neighbor partial-mesh/supernode modes deliberately do NOT connect every peer to every peer (see engine/collab/CollabMeshTopology.js's header comment: \"K-neighbor gossip mesh ... messages reach all N peers in ~log_K(N) hops\"). This module bridges that gap: - If the addressed next hop IS a direct neighbor right now, deliver directly — cheapest path, one hop, no flood. - Otherwise, gossip-flood the envelope via CollabMeshTopology's existing TTL+dedupe fanout (`gossipWrap`/`gossipReceive`) so it propagates through the mesh until it reaches a peer who either IS the target or has it as a direct neighbor, at which point THAT peer delivers it directly instead of re-flooding.  Every touch of a carrier packet — direct delivery or gossip relay — always runs through `CarrierForwarder.evaluateForward()` first (onion-layer expiry/TTL/dedupe/rate-limit), independent of and in addition to the mesh gossip's OWN TTL/dedupe: gossip TTL bounds mesh hops for one flood attempt; carrier TTL bounds total onion hops end-to-end. Neither layer ever inspects the sealed payload itself (network plan §24's core guarantee) — only `peelSealedPacket`, called with THIS node's own private key when (and only when) this node is the addressed hop, can see anything beyond the next hop id.",
    "exports": [
      {
        "name": "createCarrierRelay",
        "kind": "function",
        "signature": "createCarrierRelay({ sendToPeer, topology, dedupeCache, rateLimiter, recipientEcdhPrivateKey = null, onPayloadReceived = ()",
        "summary": ""
      },
      {
        "name": "relayCarrierPacket",
        "kind": "function",
        "signature": "relayCarrierPacket(relay, nextHopPeerId, packet)",
        "summary": "Send/relay a carrier packet toward its addressed next hop. Runs the standard forwarding check first — a caller originating a brand-new packet should still go through this (it's the same expiry/TTL/dedupe/rate-limit gate every intermediate hop uses, applied uniformly per network plan §35)."
      },
      {
        "name": "handleCarrierRelayMessage",
        "kind": "function",
        "signature": "async handleCarrierRelayMessage(relay, fromPeerId, op)",
        "summary": "Feed every relevant `onOp(peerId, op)` message through this (e.g. from `createCollabCore({ onOp })`, alongside `ChunkTransport.js`'s own `handleChunkTransportMessage` — both follow the same \"return false if not ours\" chaining pattern). Handles: peeling a layer addressed to this node, delivering the final payload, direct-hop forwarding, and mesh-gossip re-forwarding."
      },
      {
        "name": "CARRIER_RELAY_MESSAGE_TYPE",
        "kind": "constant",
        "signature": "CARRIER_RELAY_MESSAGE_TYPE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/carrier/RateLimiter",
    "path": "engine/reference/network/carrier/RateLimiter.md",
    "source": "engine/network/carrier/RateLimiter.js",
    "import": "/engine/network/carrier/RateLimiter.js",
    "sourceHash": "f8e16317d3349f229b875b0d880e1cda0b14abac4a6dac2a12d7fd1b7c755c89",
    "summary": "network/carrier/RateLimiter.js — token-bucket rate limiting for carrier forwarding (network plan §35/§36 spam controls, V1: rate limits + dedupe, no proof-of-work yet).",
    "exports": [
      {
        "name": "createRateLimiter",
        "kind": "function",
        "signature": "createRateLimiter({ capacity = 30, refillPerSecond = 10 } = {})",
        "summary": "Create a token bucket."
      },
      {
        "name": "tryConsume",
        "kind": "function",
        "signature": "tryConsume(limiter, cost = 1, now = Date.now()",
        "summary": "Try to consume `cost` tokens. Returns false (caller should drop/reject) if insufficient."
      },
      {
        "name": "availableTokens",
        "kind": "function",
        "signature": "availableTokens(limiter, now = Date.now()",
        "summary": "Tokens currently available (after applying refill for elapsed time)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/carrier/SealedPacket",
    "path": "engine/reference/network/carrier/SealedPacket.md",
    "source": "engine/network/carrier/SealedPacket.js",
    "import": "/engine/network/carrier/SealedPacket.js",
    "sourceHash": "2e66d31a51adcf9548c8aba00fb77a8b72b15b2189d3102e0b479ad788028e17",
    "summary": "network/carrier/SealedPacket.js — multi-hop onion-sealed packets (network plan §24/§26 public carrier layer).  Phase 0 audit finding: `engine/collab/CollabAnonymousRelay.js` implements SINGLE-hop anonymization (host relay + garlic-encrypted payload) for one game-collab session. The OS network layer needs TRUE multi-hop onion routing across semi-trusted carrier meshes that are not part of any group. This module builds that generically, reusing the same ECDH P-256 + AES-256-GCM primitives (`CollabCrypto`) rather than inventing new crypto.  Each layer is wrapped from the innermost (final recipient) outward, so only the addressed hop can decrypt its own layer. A peeled layer reveals only the NEXT hop's peerId (or, at the final layer, the actual payload) — never the full path, the true sender, or the payload, matching §26.",
    "exports": [
      {
        "name": "buildSealedPacket",
        "kind": "function",
        "signature": "async buildSealedPacket({ hops, payload } = {})",
        "summary": "Build a multi-hop sealed packet."
      },
      {
        "name": "peelSealedPacket",
        "kind": "function",
        "signature": "async peelSealedPacket(sealedLayer, recipientPrivateKey)",
        "summary": "Peel one layer with this hop's ECDH private key."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/carrier/index",
    "path": "engine/reference/network/carrier/index.md",
    "source": "engine/network/carrier/index.js",
    "import": "/engine/network/carrier/index.js",
    "sourceHash": "b8d1eaa85357a4851afb33d05a71361ed7d98c34782761b34fd13a9e79a724e4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/chunks/ChunkCache",
    "path": "engine/reference/network/chunks/ChunkCache.md",
    "source": "engine/network/chunks/ChunkCache.js",
    "import": "/engine/network/chunks/ChunkCache.js",
    "sourceHash": "080d95eca8da322e2627de08758b9712016f93514f15d1112eade50b19b4a54f",
    "summary": "Bounded in-memory LRU used only while the browser endpoint is alive.",
    "exports": [
      {
        "name": "createChunkCache",
        "kind": "function",
        "signature": "createChunkCache({ maxEntries = 128, maxBytes = 64 * 1024 * 1024 } = {})",
        "summary": "Bounded in-memory LRU used only while the browser endpoint is alive."
      },
      {
        "name": "cacheVerifiedChunk",
        "kind": "function",
        "signature": "cacheVerifiedChunk(cache, { chunkId, fragmentRoot, bytes } = {})",
        "summary": "Store bytes that the caller has already content/Merkle verified."
      },
      {
        "name": "readCachedChunk",
        "kind": "function",
        "signature": "readCachedChunk(cache, chunkId)",
        "summary": ""
      },
      {
        "name": "chunkCacheStatus",
        "kind": "function",
        "signature": "chunkCacheStatus(cache)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/chunks/ChunkFragmenter",
    "path": "engine/reference/network/chunks/ChunkFragmenter.md",
    "source": "engine/network/chunks/ChunkFragmenter.js",
    "import": "/engine/network/chunks/ChunkFragmenter.js",
    "sourceHash": "1c5ebd97202016060cf531bdbf1f1445f97d1e3ccb43601d6c23eeedce5d444f",
    "summary": "network/chunks/ChunkFragmenter.js — split large objects into chunks, and chunks into transport-sized fragments (network plan §27/§31/§32).",
    "exports": [
      {
        "name": "splitIntoChunks",
        "kind": "function",
        "signature": "splitIntoChunks(bytes, chunkSize = DEFAULT_CHUNK_BYTES)",
        "summary": "Split an object's bytes into chunks no larger than `chunkSize` (which must not exceed the network-wide 4MB ceiling)."
      },
      {
        "name": "splitChunkIntoFragments",
        "kind": "function",
        "signature": "splitChunkIntoFragments(chunkBytes, fragmentSize = DEFAULT_FRAGMENT_BYTES)",
        "summary": "Split one chunk's bytes into transport-sized fragments."
      },
      {
        "name": "reassembleFragments",
        "kind": "function",
        "signature": "reassembleFragments(fragments)",
        "summary": "Concatenate fragments back into one chunk's bytes."
      },
      {
        "name": "reassembleChunks",
        "kind": "function",
        "signature": "reassembleChunks(chunks)",
        "summary": "Concatenate chunks back into the full object's bytes."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/chunks/ChunkLimits",
    "path": "engine/reference/network/chunks/ChunkLimits.md",
    "source": "engine/network/chunks/ChunkLimits.js",
    "import": "/engine/network/chunks/ChunkLimits.js",
    "sourceHash": "d83f4d8c7b1e85960f2eb49876fc1ba86ca74a5f940df7eb7dadc0da12e75e21",
    "summary": "network/chunks/ChunkLimits.js — size ceilings/defaults (network plan §27).",
    "exports": [
      {
        "name": "MAX_CHUNK_BYTES",
        "kind": "constant",
        "signature": "MAX_CHUNK_BYTES",
        "summary": "Network-wide hard ceiling for one logical chunk. Not the default — a ceiling."
      },
      {
        "name": "DEFAULT_CHUNK_BYTES",
        "kind": "constant",
        "signature": "DEFAULT_CHUNK_BYTES",
        "summary": "Sensible default chunk size (§27: \"512 KB-1 MB\")."
      },
      {
        "name": "DEFAULT_FRAGMENT_BYTES",
        "kind": "constant",
        "signature": "DEFAULT_FRAGMENT_BYTES",
        "summary": "Default transport fragment size (§27/§28; matches WebRTC DataChannel's assumed default `max-message-size`)."
      },
      {
        "name": "MAX_FRAGMENT_BYTES",
        "kind": "constant",
        "signature": "MAX_FRAGMENT_BYTES",
        "summary": "Experimental larger fragment size for trusted high-bandwidth links."
      },
      {
        "name": "CONTROL_MAX_BYTES",
        "kind": "constant",
        "signature": "CONTROL_MAX_BYTES",
        "summary": "Soft caps for non-bulk message classes (§27)."
      },
      {
        "name": "MANIFEST_MAX_BYTES",
        "kind": "constant",
        "signature": "MANIFEST_MAX_BYTES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/chunks/ChunkTransport",
    "path": "engine/reference/network/chunks/ChunkTransport.md",
    "source": "engine/network/chunks/ChunkTransport.js",
    "import": "/engine/network/chunks/ChunkTransport.js",
    "sourceHash": "93dc7e6b16d2ac9febfdc5a0aacec1dd7d3f80dc920368394569509d773ae13a",
    "summary": "network/chunks/ChunkTransport.js — binds the transport-agnostic chunk pipeline (ChunkFragmenter/MerkleFragments/ChunkVerifier/FlowControl/ DedupeCache) to a real peer connection (network plan §27/§28/§31/§32, previously deferred: \"Real WebRTC DataChannel transport wiring\").  Deliberately transport-agnostic at the call boundary — takes a `sendToPeer` function matching engine/collab/CollabCore.js's `sendToPeer(core, peerId, data)` signature (which already auto-chunks anything over ~60KB to dodge SCTP frame limits and reassembles transparently on the receive side, and round-trips `Uint8Array` natively via CollabCodec.js's msgpack `bin` format) rather than importing CollabCore itself. Callers feed every relevant `onOp(peerId, op)` message through `handleChunkTransportMessage` before their own app-level op handling — same pattern SyncTransport.js uses for MasterServerClient signal events.  Real credit-based backpressure (FlowControl.js's whole point): a CollabCore-style reliable-ordered data channel does NOT drop or backpressure large \"critical\" application messages on its own (see CollabCore.js's `_sendBinary` — only a handful of non-critical types like `__ping__` get dropped under buffer pressure); blasting every fragment of a multi-MB object immediately would build unbounded `bufferedAmount`. This module gates sends on an ACK-based credit window instead: a fragment's credit is only released once the receiver confirms it actually arrived (`CHUNK_FRAGMENT_ACK`), not merely once handed to the transport.",
    "exports": [
      {
        "name": "createChunkTransport",
        "kind": "function",
        "signature": "createChunkTransport({ sendToPeer, maxInFlightBytes, getChunk = async ()",
        "summary": ""
      },
      {
        "name": "requestChunkFromPeer",
        "kind": "function",
        "signature": "requestChunkFromPeer(transport, { peerId, chunkId, fragmentRoot, timeoutMs = REQUEST_TIMEOUT_MS, lane = PRIORITY_LANE.NORMAL, } = {})",
        "summary": "Ask one peer for a manifest-declared chunk and await its verified bytes."
      },
      {
        "name": "enqueueChunkSend",
        "kind": "function",
        "signature": "enqueueChunkSend(transport, { peerId, chunkId, chunkBytes, fragmentRoot, lane = PRIORITY_LANE.NORMAL, fragmentSize = DEFAULT_FRAGMENT_BYTES })",
        "summary": "Enqueue one chunk's fragments for sending to a peer. Actual sends are paced by the credit window (see module doc) — this returns immediately; fragments drain asynchronously as ACKs free up credit."
      },
      {
        "name": "handleChunkTransportMessage",
        "kind": "function",
        "signature": "handleChunkTransportMessage(transport, peerId, op)",
        "summary": "Feed every `onOp(peerId, op)` message through this (e.g. from `createCollabCore({ onOp })`). Handles fragment sends and their acks; returns false for anything that isn't a chunk-transport message so callers can safely chain their own app-level op handling after it."
      },
      {
        "name": "CHUNK_MESSAGE_TYPE",
        "kind": "constant",
        "signature": "CHUNK_MESSAGE_TYPE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/chunks/ChunkVerifier",
    "path": "engine/reference/network/chunks/ChunkVerifier.md",
    "source": "engine/network/chunks/ChunkVerifier.js",
    "import": "/engine/network/chunks/ChunkVerifier.js",
    "sourceHash": "5418977135881e995ef27f1937bf98ebd5b2051323719d7322e0c08757a7f6f4",
    "summary": "network/chunks/ChunkVerifier.js — verify received fragments/chunks against a manifest's declared hashes (network plan §31/§32).",
    "exports": [
      {
        "name": "verifyChunkFragments",
        "kind": "function",
        "signature": "async verifyChunkFragments(fragments, expectedFragmentRoot)",
        "summary": "Verify a fully-received set of fragments for one chunk against the manifest's declared fragment merkle root — before spending time/memory reassembling+hashing the whole chunk."
      },
      {
        "name": "reassembleAndVerifyChunk",
        "kind": "function",
        "signature": "async reassembleAndVerifyChunk(fragments, expectedChunkId)",
        "summary": "Reassemble fragments and verify the resulting chunk's content hash matches the manifest's declared chunkId. Returns the reassembled bytes on success, or null (fails closed) on mismatch."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/chunks/DedupeCache",
    "path": "engine/reference/network/chunks/DedupeCache.md",
    "source": "engine/network/chunks/DedupeCache.js",
    "import": "/engine/network/chunks/DedupeCache.js",
    "sourceHash": "30e612e0be70581ab3b58bce15096a6fc2e530050e50a57f6431b9a171a0bc1f",
    "summary": "network/chunks/DedupeCache.js — generic seen-packet dedupe table (network plan §29), keyed by whatever content/event/packet hash a caller chooses. Type-specific retention: callers pick the ttlMs per dedupe key type (control packets 1-5min, route announcements 5-30min, chunks/ledger events effectively forever via their own content hash, etc.) — this module just enforces \"seen within its TTL -> drop\" generically.",
    "exports": [
      {
        "name": "createDedupeCache",
        "kind": "function",
        "signature": "createDedupeCache()",
        "summary": "Create an empty dedupe cache."
      },
      {
        "name": "hasSeen",
        "kind": "function",
        "signature": "hasSeen(cache, key, now = Date.now()",
        "summary": "True if `key` was marked seen and its TTL hasn't expired yet. Expired entries are lazily evicted."
      },
      {
        "name": "markSeen",
        "kind": "function",
        "signature": "markSeen(cache, key, ttlMs, now = Date.now()",
        "summary": "Mark `key` as seen for `ttlMs` milliseconds."
      },
      {
        "name": "checkAndMark",
        "kind": "function",
        "signature": "checkAndMark(cache, key, ttlMs, now = Date.now()",
        "summary": "Convenience: check-and-mark in one call — the usual receive-path pattern (\"if already seen, drop; otherwise mark seen and process\")."
      },
      {
        "name": "pruneDedupeCache",
        "kind": "function",
        "signature": "pruneDedupeCache(cache, now = Date.now()",
        "summary": "Remove all expired entries. Returns the number removed."
      },
      {
        "name": "dedupeCacheSize",
        "kind": "function",
        "signature": "dedupeCacheSize(cache)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/chunks/FlowControl",
    "path": "engine/reference/network/chunks/FlowControl.md",
    "source": "engine/network/chunks/FlowControl.js",
    "import": "/engine/network/chunks/FlowControl.js",
    "sourceHash": "732ba36307b3b2ee51e3f43e0ccf26a9ca249c53dbe453eaa18a73732df13e4e",
    "summary": "network/chunks/FlowControl.js — credit-based flow control + priority lanes (network plan §28). QUIC-style: a receiver advertises how much in-flight data it can absorb; senders must reserve credit before sending and the receiver restores it once a fragment is verified/written.",
    "exports": [
      {
        "name": "createFlowControl",
        "kind": "function",
        "signature": "createFlowControl({ maxInFlightBytes = 16 * 1024 * 1024 } = {})",
        "summary": "Create a flow-control window."
      },
      {
        "name": "tryReserveCredit",
        "kind": "function",
        "signature": "tryReserveCredit(fc, bytes)",
        "summary": "Try to reserve `bytes` of send credit. Returns false (caller must pause) if it would exceed the window."
      },
      {
        "name": "releaseCredit",
        "kind": "function",
        "signature": "releaseCredit(fc, bytes)",
        "summary": "Restore credit after a fragment is verified/written (or dropped/timed out)."
      },
      {
        "name": "availableCredit",
        "kind": "function",
        "signature": "availableCredit(fc)",
        "summary": "Bytes of credit still available right now."
      },
      {
        "name": "createPriorityQueue",
        "kind": "function",
        "signature": "createPriorityQueue()",
        "summary": "Create an empty multi-lane priority queue."
      },
      {
        "name": "enqueue",
        "kind": "function",
        "signature": "enqueue(pq, lane, item)",
        "summary": "Enqueue an item on a priority lane (lower lane number = served first)."
      },
      {
        "name": "dequeue",
        "kind": "function",
        "signature": "dequeue(pq)",
        "summary": "Dequeue the next item, always draining the lowest non-empty lane first."
      },
      {
        "name": "isQueueEmpty",
        "kind": "function",
        "signature": "isQueueEmpty(pq)",
        "summary": "True if every lane is empty."
      },
      {
        "name": "PRIORITY_LANE",
        "kind": "constant",
        "signature": "PRIORITY_LANE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/chunks/Manifest",
    "path": "engine/reference/network/chunks/Manifest.md",
    "source": "engine/network/chunks/Manifest.js",
    "import": "/engine/network/chunks/Manifest.js",
    "sourceHash": "53acacadce5196033d917466a8242975f965807f2f678c78b7c43409bd1852e9",
    "summary": "network/chunks/Manifest.js — signed object manifests (network plan §31). A manifest describes an object as an ordered list of chunks (each with a content hash + fragment merkle root); the object itself is fetched chunk-by-chunk, possibly from many peers at once (SwarmScheduler.js).",
    "exports": [
      {
        "name": "buildManifest",
        "kind": "function",
        "signature": "async buildManifest({ objectId, scope = 'private', version = 1, chunks = [], permissions = [], encryptionEpoch = null, signer, } = {})",
        "summary": "Build + sign a manifest."
      },
      {
        "name": "verifyManifest",
        "kind": "function",
        "signature": "async verifyManifest(signedManifest)",
        "summary": "Verify a manifest's protocol/type and signature."
      },
      {
        "name": "manifestTotalSize",
        "kind": "function",
        "signature": "manifestTotalSize(signedManifest)",
        "summary": "Total object size implied by a manifest's chunk list."
      },
      {
        "name": "manifestChunkIds",
        "kind": "function",
        "signature": "manifestChunkIds(signedManifest)",
        "summary": "List of chunk ids a manifest references, in order."
      },
      {
        "name": "MAX_MANIFEST_CHUNKS",
        "kind": "constant",
        "signature": "MAX_MANIFEST_CHUNKS",
        "summary": ""
      },
      {
        "name": "MAX_MANIFEST_OBJECT_BYTES",
        "kind": "constant",
        "signature": "MAX_MANIFEST_OBJECT_BYTES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/chunks/MerkleFragments",
    "path": "engine/reference/network/chunks/MerkleFragments.md",
    "source": "engine/network/chunks/MerkleFragments.js",
    "import": "/engine/network/chunks/MerkleFragments.js",
    "sourceHash": "5f335a21c57aacddbca27d4d9b6e879364d12286a17985a55d70acadcfe3b8a0",
    "summary": "network/chunks/MerkleFragments.js — per-fragment hashing + a chunk's merkle root (network plan §32), so receivers can reject a corrupted fragment early instead of only detecting failure after the whole chunk is reassembled. Reuses the engine's existing SHA-256 content hash helper (already used for identity fingerprints elsewhere).",
    "exports": [
      {
        "name": "hashFragment",
        "kind": "function",
        "signature": "async hashFragment(fragmentBytes)",
        "summary": "SHA-256 hex hash of one fragment's raw bytes."
      },
      {
        "name": "computeChunkHash",
        "kind": "function",
        "signature": "async computeChunkHash(chunkBytes)",
        "summary": "SHA-256 hex hash of a full chunk's raw bytes (used as the chunk's content id)."
      },
      {
        "name": "computeFragmentHashes",
        "kind": "function",
        "signature": "async computeFragmentHashes(fragments)",
        "summary": "Hash every fragment of a chunk, in order."
      },
      {
        "name": "computeMerkleRoot",
        "kind": "function",
        "signature": "async computeMerkleRoot(fragmentHashes)",
        "summary": "Compute a chunk's merkle root from its (ordered) fragment hashes: pair up adjacent hashes, hash their concatenation, repeat until one root remains (odd node carries up unchanged, standard merkle tree construction)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/chunks/SwarmFetchCoordinator",
    "path": "engine/reference/network/chunks/SwarmFetchCoordinator.md",
    "source": "engine/network/chunks/SwarmFetchCoordinator.js",
    "import": "/engine/network/chunks/SwarmFetchCoordinator.js",
    "sourceHash": "1f2aa183500cc10a7e45068a253b2668dacad447990d3f71f0cb40ca437dcf3f",
    "summary": "Resolve a signed manifest from many DHT providers, retrying failed peers, verifying every content hash, and preserving manifest chunk order.",
    "exports": [
      {
        "name": "SwarmFetchError",
        "kind": "class",
        "signature": "class SwarmFetchError extends Error",
        "summary": ""
      },
      {
        "name": "fetchManifestFromSwarm",
        "kind": "function",
        "signature": "async fetchManifestFromSwarm({ signedManifest, transport, findProviders, fallbackPeers = ()",
        "summary": "Resolve a signed manifest from many DHT providers, retrying failed peers, verifying every content hash, and preserving manifest chunk order."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/chunks/SwarmScheduler",
    "path": "engine/reference/network/chunks/SwarmScheduler.md",
    "source": "engine/network/chunks/SwarmScheduler.js",
    "import": "/engine/network/chunks/SwarmScheduler.js",
    "sourceHash": "c3dfc7f3efebe126529f846afc00adebc56730077e409262f770a2d74c9265b0",
    "summary": "network/chunks/SwarmScheduler.js — spread chunk fetches across multiple providing peers (network plan §31 swarm fetching). Pure scheduling logic; the actual byte transfer happens over routes/sessions from earlier phases.",
    "exports": [
      {
        "name": "planSwarmFetch",
        "kind": "function",
        "signature": "planSwarmFetch({ chunkIds, providers, maxLanes = 4 } = {})",
        "summary": "Assign each requested chunk to one candidate provider peer, load-balancing so no single peer is asked for every chunk, then group the assignments into fetch \"lanes\" of up to `maxLanes` concurrent requests."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/chunks/index",
    "path": "engine/reference/network/chunks/index.md",
    "source": "engine/network/chunks/index.js",
    "import": "/engine/network/chunks/index.js",
    "sourceHash": "f1c585e6b4afa548d2f361696407d00821e651f717d0e69ed37871a8cc820431",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/crypto/Hpke",
    "path": "engine/reference/network/crypto/Hpke.md",
    "source": "engine/network/crypto/Hpke.js",
    "import": "/engine/network/crypto/Hpke.js",
    "sourceHash": "5c3c8bf3da8c221b1173b59ffb63777e47756ae109cdc90ce41967f451e3b5a2",
    "summary": "RFC 9180 base mode: DHKEM(P-256, HKDF-SHA256), HKDF-SHA256, AES-128-GCM. Signaling uses a fresh encapsulation for every message, so the AEAD sequence number is always zero and the base nonce is used directly.",
    "exports": [
      {
        "name": "generateHpkeKeyPair",
        "kind": "function",
        "signature": "async generateHpkeKeyPair()",
        "summary": ""
      },
      {
        "name": "hpkeSeal",
        "kind": "function",
        "signature": "async hpkeSeal(recipientPublicKeyHex, plaintext, options = {})",
        "summary": ""
      },
      {
        "name": "hpkeOpen",
        "kind": "function",
        "signature": "async hpkeOpen(recipientPrivateKey, encHex, ciphertextHex, options = {})",
        "summary": ""
      },
      {
        "name": "hpkeBytesToHex",
        "kind": "re-export",
        "signature": "hpkeBytesToHex",
        "summary": ""
      },
      {
        "name": "hpkeHexToBytes",
        "kind": "re-export",
        "signature": "hpkeHexToBytes",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/crypto/OpaqueRoute",
    "path": "engine/reference/network/crypto/OpaqueRoute.md",
    "source": "engine/network/crypto/OpaqueRoute.js",
    "import": "/engine/network/crypto/OpaqueRoute.js",
    "sourceHash": "513a9f3e3b94d8793e8533d230b1f997f630f6df370493ee079442094542a06c",
    "summary": "",
    "exports": [
      {
        "name": "deriveOpaqueRoute",
        "kind": "function",
        "signature": "async deriveOpaqueRoute({ routeSecret = null, projectId = 'default' } = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/crypto/Trust",
    "path": "engine/reference/network/crypto/Trust.md",
    "source": "engine/network/crypto/Trust.js",
    "import": "/engine/network/crypto/Trust.js",
    "sourceHash": "9353d1992431e41107807fc1e6d9ac7e525feeefaf8b4fd85cb80c42005185e6",
    "summary": "",
    "exports": [
      {
        "name": "canonicalJson",
        "kind": "function",
        "signature": "canonicalJson(value)",
        "summary": ""
      },
      {
        "name": "sha256Hex",
        "kind": "function",
        "signature": "async sha256Hex(value)",
        "summary": ""
      },
      {
        "name": "verifyRawSignature",
        "kind": "function",
        "signature": "async verifyRawSignature(publicKeyHex, bytes, signatureHex)",
        "summary": ""
      },
      {
        "name": "verifySignedManifest",
        "kind": "function",
        "signature": "async verifySignedManifest(signed, expectedPins, nowSeconds = Math.floor(Date.now()",
        "summary": ""
      },
      {
        "name": "verifySignedV3Manifest",
        "kind": "function",
        "signature": "async verifySignedV3Manifest(signed, expectedPins, nowSeconds = Math.floor(Date.now()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/crypto/index",
    "path": "engine/reference/network/crypto/index.md",
    "source": "engine/network/crypto/index.js",
    "import": "/engine/network/crypto/index.js",
    "sourceHash": "e97417713a16c64884d868d01d9572d19f2facb7e5b23131f2d3ceafbe7359d8",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/daemon/ParticleNetworkDaemon",
    "path": "engine/reference/network/daemon/ParticleNetworkDaemon.md",
    "source": "engine/network/daemon/ParticleNetworkDaemon.js",
    "import": "/engine/network/daemon/ParticleNetworkDaemon.js",
    "sourceHash": "f5f03a19193d574eca1f0130e1455841b9ba753860e97c748ba7f0a07d5fbd43",
    "summary": "Validate and normalize a V2 ICE response. Explicit direct mode is strict so a malformed or compromised response cannot smuggle relay credentials into a no-TURN client. Legacy relay responses remain accepted when they contain a real authenticated TURN URL.",
    "exports": [
      {
        "name": "ParticleNetworkDaemon",
        "kind": "class",
        "signature": "class ParticleNetworkDaemon",
        "summary": ""
      },
      {
        "name": "readParticleTrustFloor",
        "kind": "function",
        "signature": "readParticleTrustFloor(networkRootId, nodeId, storage = globalThis.localStorage)",
        "summary": ""
      },
      {
        "name": "writeParticleTrustFloor",
        "kind": "function",
        "signature": "writeParticleTrustFloor(networkRootId, nodeId, floor, storage = globalThis.localStorage)",
        "summary": ""
      },
      {
        "name": "particleIceConfigurationReport",
        "kind": "function",
        "signature": "particleIceConfigurationReport(value)",
        "summary": "Validate and normalize a V2 ICE response. Explicit direct mode is strict so a malformed or compromised response cannot smuggle relay credentials into a no-TURN client. Legacy relay responses remain accepted when they contain a real authenticated TURN URL."
      },
      {
        "name": "PARTICLE_TRUST_FLOOR_SCHEMA",
        "kind": "constant",
        "signature": "PARTICLE_TRUST_FLOOR_SCHEMA",
        "summary": ""
      },
      {
        "name": "PARTICLE_TRUST_FLOOR_SCHEMA_VERSION",
        "kind": "constant",
        "signature": "PARTICLE_TRUST_FLOOR_SCHEMA_VERSION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/daemon/ParticleNetworkDaemonRegistry",
    "path": "engine/reference/network/daemon/ParticleNetworkDaemonRegistry.md",
    "source": "engine/network/daemon/ParticleNetworkDaemonRegistry.js",
    "import": "/engine/network/daemon/ParticleNetworkDaemonRegistry.js",
    "sourceHash": "ce3ecd4a884f7d262ab28fcfd4c2f0b1777a121eabd54f6fb8ac7026c5e2c563",
    "summary": "",
    "exports": [
      {
        "name": "acquireParticleNetworkDaemon",
        "kind": "function",
        "signature": "acquireParticleNetworkDaemon({ server, deviceSigner, onEvent = null, preferV3 = false } = {})",
        "summary": ""
      },
      {
        "name": "particleNetworkDaemonStats",
        "kind": "function",
        "signature": "particleNetworkDaemonStats()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/daemon/ParticleNetworkPreferredDaemon",
    "path": "engine/reference/network/daemon/ParticleNetworkPreferredDaemon.md",
    "source": "engine/network/daemon/ParticleNetworkPreferredDaemon.js",
    "import": "/engine/network/daemon/ParticleNetworkPreferredDaemon.js",
    "sourceHash": "a07a8c04103287ec7c253b6f2aaaffb5cc65290f4f0d85b09e29690b23c0e6b9",
    "summary": "Selects V3 only from a valid, pinned V2 advertisement. A valid advertisement with no V3 marker selects V2. Any V3 marker commits the connection attempt to V3; V3 integrity failures are forwarded and never retried as V2.",
    "exports": [
      {
        "name": "ParticleNetworkPreferredDaemon",
        "kind": "class",
        "signature": "class ParticleNetworkPreferredDaemon",
        "summary": "Selects V3 only from a valid, pinned V2 advertisement. A valid advertisement with no V3 marker selects V2. Any V3 marker commits the connection attempt to V3; V3 integrity failures are forwarded and never retried as V2."
      },
      {
        "name": "advertisesV3",
        "kind": "re-export",
        "signature": "advertisesV3",
        "summary": ""
      },
      {
        "name": "hasValidV3Advertisement",
        "kind": "re-export",
        "signature": "hasValidV3Advertisement",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/daemon/index",
    "path": "engine/reference/network/daemon/index.md",
    "source": "engine/network/daemon/index.js",
    "import": "/engine/network/daemon/index.js",
    "sourceHash": "9bc9e82076a4d0e7c1d639a5018d7cae6e731498f98d8174644458f7828e5fe5",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/dht/BootstrapSource",
    "path": "engine/reference/network/dht/BootstrapSource.md",
    "source": "engine/network/dht/BootstrapSource.js",
    "import": "/engine/network/dht/BootstrapSource.js",
    "sourceHash": "d4ee5bdc48c69bac68762c081f87f159d95c74e0e66a0d0f20241a75edd7934f",
    "summary": "network/dht/BootstrapSource.js — pluggable bootstrap sources for the no-bootstrap-is-impossible reality check (network plan §37/§47/§48): \"no pure zero-bootstrap global discovery exists\" — cached peers, LAN, invite code, DHT, radio beacon, or a seed/master server are the only starting paths. This module defines a tiny, transport-agnostic interface (`{ id, scan(), advertise(record) }`) and a registry to combine several sources into one bootstrap attempt order; it ships NO concrete transport.  Concrete adapter (wired at the OS integration layer, per this module's engine/network-stays-webgpu-os-free rule): webgpu-os/drivers/ ResidentBootstrapSource.js wraps the OS browser extension's \"resident\" node (webgpu-os/browser-extension/services/ResidentService.js, exposed via BrowserBridgeClient.resident) — a standing MV3 offscreen document that persists a device's PUBLIC identity cert and stays warm via a chrome.alarms keepalive. Kept honest in that adapter: the resident node does NOT answer presence with no OS tab open (it is a lightweight cert vault + heartbeat only, off by default) — its `scan()` returns a \"last remembered identity\" hint, not a confirmed-reachable peer.",
    "exports": [
      {
        "name": "createBootstrapSource",
        "kind": "function",
        "signature": "createBootstrapSource({ id, scan, advertise = null } = {})",
        "summary": "Wrap a bootstrap source implementation."
      },
      {
        "name": "createBootstrapRegistry",
        "kind": "function",
        "signature": "createBootstrapRegistry()",
        "summary": "Create a registry of bootstrap sources, tried in registration order."
      },
      {
        "name": "registerBootstrapSource",
        "kind": "function",
        "signature": "registerBootstrapSource(registry, source)",
        "summary": ""
      },
      {
        "name": "runBootstrap",
        "kind": "function",
        "signature": "async runBootstrap(registry)",
        "summary": "Try each registered source in order, collecting whatever records each one returns (a source throwing/timing out just contributes nothing — this never fails the whole bootstrap attempt)."
      },
      {
        "name": "flattenBootstrapResults",
        "kind": "function",
        "signature": "flattenBootstrapResults(results)",
        "summary": "Flatten runBootstrap()'s per-source results into one record list, tagged with their source."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/dht/DhtMessages",
    "path": "engine/reference/network/dht/DhtMessages.md",
    "source": "engine/network/dht/DhtMessages.js",
    "import": "/engine/network/dht/DhtMessages.js",
    "sourceHash": "e259a4dba5d1a58fba30846560c3d4796dbf80eca257bab0d8265bb6df2e1a30",
    "summary": "network/dht/DhtMessages.js — future Particle DHT message primitives (network plan §47): FIND_PEER / FIND_ROUTE / FIND_PROVIDERS / PEER_EXCHANGE ANNOUNCE_PROVIDER / ANNOUNCE_ROUTE. Low priority per the plan — these are just versioned envelope builders (protocol.js `particle-dht/1`) for a future real DHT transport; no network code lives here yet. Bootstrap is still required even with a DHT (network plan §47: cached peers/LAN/master server/invite) — see BootstrapSource.js.",
    "exports": [
      {
        "name": "makeFindPeerMessage",
        "kind": "function",
        "signature": "makeFindPeerMessage({ targetPeerId, requesterPeerId } = {})",
        "summary": ""
      },
      {
        "name": "makeFindRouteMessage",
        "kind": "function",
        "signature": "makeFindRouteMessage({ routeId, requesterPeerId } = {})",
        "summary": ""
      },
      {
        "name": "makeFindProvidersMessage",
        "kind": "function",
        "signature": "makeFindProvidersMessage({ key, requesterPeerId } = {})",
        "summary": ""
      },
      {
        "name": "makeAnnounceProviderMessage",
        "kind": "function",
        "signature": "makeAnnounceProviderMessage({ key, peerId, ttlMs } = {})",
        "summary": ""
      },
      {
        "name": "makeAnnounceRouteMessage",
        "kind": "function",
        "signature": "makeAnnounceRouteMessage({ routeId, peerId, services = [], ttlMs } = {})",
        "summary": ""
      },
      {
        "name": "makePeerExchangeMessage",
        "kind": "function",
        "signature": "makePeerExchangeMessage({ knownPeers = [] } = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/dht/DhtNode",
    "path": "engine/reference/network/dht/DhtNode.md",
    "source": "engine/network/dht/DhtNode.js",
    "import": "/engine/network/dht/DhtNode.js",
    "sourceHash": "16338f46088164efd73f1954fd48c299833b473d61e55d31cab1c8ea6e522697",
    "summary": "network/dht/DhtNode.js — a local Particle DHT node view (network plan §47, low priority/future). Combines a ProviderStore with a lightweight known- peers registry and answers FIND_PEER/FIND_ROUTE/FIND_PROVIDERS queries from LOCAL knowledge only — this phase delivers the data structures and message-handling logic; real gossip/replication across a live DHT transport is deferred (network plan §47: \"still needs bootstrap\" even once a real DHT exists — see BootstrapSource.js).",
    "exports": [
      {
        "name": "createDhtNode",
        "kind": "function",
        "signature": "createDhtNode({ selfPeerId } = {})",
        "summary": "Create a local DHT node view."
      },
      {
        "name": "rememberPeer",
        "kind": "function",
        "signature": "rememberPeer(node, peerId, { routeHints = [], reportedBy = null, direct = false } = {}, now = Date.now()",
        "summary": "Record/refresh knowledge of a peer (from PEER_EXCHANGE or any direct contact)."
      },
      {
        "name": "handleFindPeer",
        "kind": "function",
        "signature": "handleFindPeer(node, targetPeerId)",
        "summary": "Answer a local FIND_PEER query: do we know this peer, and if so, its route hints?"
      },
      {
        "name": "handleFindRoute",
        "kind": "function",
        "signature": "handleFindRoute(node, routeId, now = Date.now()",
        "summary": "Answer a local FIND_ROUTE query: any peers providing this route?"
      },
      {
        "name": "handleFindProviders",
        "kind": "function",
        "signature": "handleFindProviders(node, key, now = Date.now()",
        "summary": "Answer a local FIND_PROVIDERS query for an arbitrary key (chunk hash, service name, ...)."
      },
      {
        "name": "handleAnnounceProvider",
        "kind": "function",
        "signature": "handleAnnounceProvider(node, { key, peerId, ttlMs } = {}, now = Date.now()",
        "summary": "Ingest an ANNOUNCE_PROVIDER (route or generic key -> peer)."
      },
      {
        "name": "handlePeerExchange",
        "kind": "function",
        "signature": "handlePeerExchange(node, knownPeers = [], now = Date.now()",
        "summary": "Ingest a PEER_EXCHANGE payload (array of `{peerId, routeHints}`)."
      },
      {
        "name": "listKnownPeers",
        "kind": "function",
        "signature": "listKnownPeers(node, { limit = 64 } = {})",
        "summary": "Bounded peer summaries for authenticated PEER_EXCHANGE messages."
      },
      {
        "name": "providersMapForKeys",
        "kind": "function",
        "signature": "providersMapForKeys(node, keys, now = Date.now()",
        "summary": "Build the providers map SwarmScheduler.planSwarmFetch expects for a list of keys."
      },
      {
        "name": "pruneDhtNode",
        "kind": "function",
        "signature": "pruneDhtNode(node, { peerStaleMs = 30 * 60 * 1000 } = {}, now = Date.now()",
        "summary": "Prune expired provider records and stale peer knowledge."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/dht/DhtTransport",
    "path": "engine/reference/network/dht/DhtTransport.md",
    "source": "engine/network/dht/DhtTransport.js",
    "import": "/engine/network/dht/DhtTransport.js",
    "sourceHash": "fee03137768ea8e62051c41512f24811d6beab845411687ae6675afb710be288",
    "summary": "network/dht/DhtTransport.js — a scoped-down real transport for DhtNode.js's FIND_PEER/FIND_ROUTE/FIND_PROVIDERS queries (network plan §47, low priority). Deliberately NOT a full Kademlia DHT (no k-buckets, no XOR distance routing, no iterative closest-node lookup) — this is a minimal query/forward/respond loop over the existing mesh:  1. A query with no local answer is gossip-flooded across the mesh via CollabMeshTopology.js's existing TTL+dedupe fanout (same mechanism CarrierRelay.js uses) — reuses its per-query fingerprint (`_gossip.fp`) as this transport's queryId, so no new id scheme or message-shape changes were needed in DhtMessages.js. 2. Every node that relays a (non-duplicate) query remembers which neighbor it heard the query from (`reversePaths`) — classic flood/reverse-path relay (the same idea AODV uses), not a gossip broadcast itself. 3. Any node with a local answer (from its own DhtNode.js knowledge) sends a direct (non-gossiped) DHT_RESPONSE back along that reverse path, one hop at a time, until it reaches the original requester.  Known MVP limitation (intentional, per the plan's \"low priority\" scope): `reversePaths` entries are not proactively pruned by this module; a real deployment would want a TTL sweep alongside `pruneDhtNode()`.",
    "exports": [
      {
        "name": "createDhtTransport",
        "kind": "function",
        "signature": "createDhtTransport({ sendToPeer, topology, node, verifyControlIdentity = async ()",
        "summary": ""
      },
      {
        "name": "findPeerOverNetwork",
        "kind": "function",
        "signature": "findPeerOverNetwork(transport, targetPeerId, { timeoutMs = DEFAULT_QUERY_TIMEOUT_MS } = {})",
        "summary": "Query the mesh for a peer's route hints. Checks local knowledge first; only floods the network if we don't already know it."
      },
      {
        "name": "findRouteOverNetwork",
        "kind": "function",
        "signature": "findRouteOverNetwork(transport, routeId, { timeoutMs = DEFAULT_QUERY_TIMEOUT_MS } = {})",
        "summary": "Query the mesh for a route's live providers. Checks local knowledge first."
      },
      {
        "name": "findProvidersOverNetwork",
        "kind": "function",
        "signature": "findProvidersOverNetwork(transport, key, { timeoutMs = DEFAULT_QUERY_TIMEOUT_MS } = {})",
        "summary": "Query the mesh for an arbitrary key's providers (chunk hash, service name, ...). Checks local knowledge first."
      },
      {
        "name": "announceProviderOverNetwork",
        "kind": "function",
        "signature": "async announceProviderOverNetwork(transport, { key, ttlMs, signer } = {})",
        "summary": "Authenticated, bounded provider announcement to current mesh neighbors."
      },
      {
        "name": "announceRouteOverNetwork",
        "kind": "function",
        "signature": "async announceRouteOverNetwork(transport, { routeId, services = [], ttlMs, signer } = {})",
        "summary": "Authenticated route announcement; services are descriptive and bounded, never ambient authority."
      },
      {
        "name": "sendPeerExchangeOverNetwork",
        "kind": "function",
        "signature": "async sendPeerExchangeOverNetwork(transport, { peerId, signer, limit = MAX_PEER_EXCHANGE } = {})",
        "summary": "Send a signed, bounded sample of local peer knowledge to one connected peer."
      },
      {
        "name": "getDhtTransportHealth",
        "kind": "function",
        "signature": "getDhtTransportHealth(transport)",
        "summary": ""
      },
      {
        "name": "handleDhtMessage",
        "kind": "function",
        "signature": "handleDhtMessage(transport, fromPeerId, op)",
        "summary": "Feed every relevant `onOp(peerId, op)` message through this, alongside `ChunkTransport.js`'s and `CarrierRelay.js`'s own handlers (same \"return false if not ours\" chaining pattern)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/dht/ProviderStore",
    "path": "engine/reference/network/dht/ProviderStore.md",
    "source": "engine/network/dht/ProviderStore.js",
    "import": "/engine/network/dht/ProviderStore.js",
    "sourceHash": "5551f158a678b6bebf4e77d648206f7ffdc1da81b0d379411ce933370f7d1ee2",
    "summary": "network/dht/ProviderStore.js — local view of \"who provides what\" (network plan §47 DHT objects: network_id -> route providers, manifest_hash -> chunk providers, group_alias -> route hints, service_name -> providers). This is a LOCAL cache only — no network gossip/replication yet (that's the deferred real-DHT transport); it's what a future DHT node would populate from FIND_PROVIDERS/ANNOUNCE_PROVIDER traffic, and what SwarmScheduler.js (Phase 7) already consumes as its `providers` map.",
    "exports": [
      {
        "name": "createProviderStore",
        "kind": "function",
        "signature": "createProviderStore()",
        "summary": "Create an empty provider store."
      },
      {
        "name": "announceProvider",
        "kind": "function",
        "signature": "announceProvider(store, key, peerId, ttlMs = DEFAULT_PROVIDER_TTL_MS, now = Date.now()",
        "summary": "Announce that `peerId` provides `key` (e.g. a manifest chunk hash, route id, service name)."
      },
      {
        "name": "revokeProvider",
        "kind": "function",
        "signature": "revokeProvider(store, key, peerId)",
        "summary": "Remove one provider's record for a key."
      },
      {
        "name": "findProviders",
        "kind": "function",
        "signature": "findProviders(store, key, now = Date.now()",
        "summary": "Live (non-expired) provider peerIds for a key, or []."
      },
      {
        "name": "providersMapFor",
        "kind": "function",
        "signature": "providersMapFor(store, keys, now = Date.now()",
        "summary": "Build the `Map<key, peerId[]>` shape SwarmScheduler.planSwarmFetch expects, for a set of keys."
      },
      {
        "name": "pruneProviderStore",
        "kind": "function",
        "signature": "pruneProviderStore(store, now = Date.now()",
        "summary": "Remove all expired provider records. Returns the number of (key, peerId) pairs removed."
      },
      {
        "name": "DEFAULT_PROVIDER_TTL_MS",
        "kind": "constant",
        "signature": "DEFAULT_PROVIDER_TTL_MS",
        "summary": ""
      },
      {
        "name": "MAX_PROVIDER_TTL_MS",
        "kind": "constant",
        "signature": "MAX_PROVIDER_TTL_MS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/dht/index",
    "path": "engine/reference/network/dht/index.md",
    "source": "engine/network/dht/index.js",
    "import": "/engine/network/dht/index.js",
    "sourceHash": "0c9e539397cf04e5a094244ba6d78a347026f91e7ab885cb67dae41ad8781e41",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/endpoint/ParticleEndpointRuntime",
    "path": "engine/reference/network/endpoint/ParticleEndpointRuntime.md",
    "source": "engine/network/endpoint/ParticleEndpointRuntime.js",
    "import": "/engine/network/endpoint/ParticleEndpointRuntime.js",
    "sourceHash": "6b824e893c20d9d5021bc2ccd3be932bcacb7b67de14369d801d164f4db9373f",
    "summary": "",
    "exports": [
      {
        "name": "ParticleEndpointRuntime",
        "kind": "class",
        "signature": "class ParticleEndpointRuntime",
        "summary": ""
      },
      {
        "name": "createParticleEndpointRuntime",
        "kind": "function",
        "signature": "createParticleEndpointRuntime(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/endpoint/index",
    "path": "engine/reference/network/endpoint/index.md",
    "source": "engine/network/endpoint/index.js",
    "import": "/engine/network/endpoint/index.js",
    "sourceHash": "e0fb8f6a57a8561061de37529d74fae38b06efbca5a3973fe0c19ddc3cb67b8d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/groupCrypto/DeviceEncryptionKey",
    "path": "engine/reference/network/groupCrypto/DeviceEncryptionKey.md",
    "source": "engine/network/groupCrypto/DeviceEncryptionKey.js",
    "import": "/engine/network/groupCrypto/DeviceEncryptionKey.js",
    "sourceHash": "e80089fcef723e0738b8b2766b23d3955ff4686de369f7b1f07918be46da373d",
    "summary": "network/groupCrypto/DeviceEncryptionKey.js — per-device ECDH encryption keypair used to receive group welcome packets (network plan §14).  This is intentionally SEPARATE from the ECDSA signing identities in engine/network/identity/NetworkIdentity.js: signing proves \"who you are\"; this key only exists so other members can encrypt an epoch key TO this specific device. Reuses engine/collab/CollabCrypto.js's ECDH P-256 primitives (the same ones used for peer-to-peer session encryption).",
    "exports": [
      {
        "name": "createDeviceEncryptionKeyPair",
        "kind": "function",
        "signature": "async createDeviceEncryptionKeyPair()",
        "summary": "Generate a fresh ECDH P-256 keypair for this device to receive welcome packets. Ephemeral by design (network plan §14 \"per-device public encryption keys\") — callers that need persistence should store `publicKeyRaw`/export the private key themselves via their own storage."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/groupCrypto/GroupEpoch",
    "path": "engine/reference/network/groupCrypto/GroupEpoch.md",
    "source": "engine/network/groupCrypto/GroupEpoch.js",
    "import": "/engine/network/groupCrypto/GroupEpoch.js",
    "sourceHash": "14c13c2a152c1024269dfd92f4b6edbfba56a7291e58bddc9e6bae4a84e1e281",
    "summary": "network/groupCrypto/GroupEpoch.js — MLS-inspired group encryption epochs (network plan §14 group security / §39 route+key rotation on removal).  Each group has a sequence of \"epochs\"; each epoch has its own AES-256-GCM key. Content sealed under an epoch can only be opened by holders of that epoch's key. Removing a member rotates to a fresh epoch and CRYPTO-ERASES the old one (drops the key reference) so previously-sealed content stays unreadable to anyone who only has the new epoch's key — the removed member's copy of the old epoch key becomes useless going forward, and any FUTURE content is sealed under a key they never received.  This deliberately builds directly on `engine/state/integrity/SecureCrypto.js` (raw AES-256-GCM primitives) rather than the higher-level `SecureRetentionManager` class: welcome packets need to export/re-wrap the raw epoch key material for a specific recipient's ECDH public key, and `SecureRetentionManager` does not expose its internal CryptoKey for export. The crypto-erase SEMANTICS (drop the key reference; GCM tamper detection) are identical to `SecureRetentionManager.cryptoErase()`.",
    "exports": [
      {
        "name": "createGroupCrypto",
        "kind": "function",
        "signature": "createGroupCrypto({ groupId } = {})",
        "summary": "Create an empty group crypto state (no epochs started yet)."
      },
      {
        "name": "startEpoch",
        "kind": "function",
        "signature": "async startEpoch(gc)",
        "summary": "Start the next epoch with a fresh AES-256-GCM key. Returns the new epoch number."
      },
      {
        "name": "getCurrentEpoch",
        "kind": "function",
        "signature": "getCurrentEpoch(gc)",
        "summary": ""
      },
      {
        "name": "isEpochErased",
        "kind": "function",
        "signature": "isEpochErased(gc, epoch)",
        "summary": "True if `epoch` has no live key (never started here, or crypto-erased)."
      },
      {
        "name": "sealForEpoch",
        "kind": "function",
        "signature": "async sealForEpoch(gc, epoch, plaintext)",
        "summary": "Seal a plaintext string under a specific epoch's key."
      },
      {
        "name": "openEnvelope",
        "kind": "function",
        "signature": "async openEnvelope(gc, envelope)",
        "summary": "Open an envelope from `sealForEpoch`. Returns null (fails closed) if the epoch's key is missing/erased, the group id doesn't match, or the GCM authentication tag fails (tampering/wrong key)."
      },
      {
        "name": "rotateEpoch",
        "kind": "function",
        "signature": "async rotateEpoch(gc)",
        "summary": "Rotate to a new epoch and crypto-erase the current one (network plan §14/§39). Removed members keep whatever they already downloaded, but cannot read anything sealed after the rotation, and (once their key reference is dropped) cannot re-derive the old epoch's key either."
      },
      {
        "name": "makeWelcomePacket",
        "kind": "function",
        "signature": "async makeWelcomePacket({ gc, epoch, recipientEcdhPublicKeyRaw } = {})",
        "summary": "Build a welcome packet: an epoch's raw key, ECDH-wrapped to one recipient's device encryption public key. Only that recipient's matching private key can unwrap it."
      },
      {
        "name": "openWelcomePacket",
        "kind": "function",
        "signature": "async openWelcomePacket({ gc, welcomePacket, recipientPrivateKey } = {})",
        "summary": "Recipient side: unwrap a welcome packet with the matching device private key and import the epoch's raw key into the recipient's own GroupCrypto instance (so they can now `openEnvelope()` content sealed under it)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/groupCrypto/index",
    "path": "engine/reference/network/groupCrypto/index.md",
    "source": "engine/network/groupCrypto/index.js",
    "import": "/engine/network/groupCrypto/index.js",
    "sourceHash": "894a58c42a2fe72696b1a22f454192bad0b58cd25393a111f1ba743173ac482c",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/groupLedger/GovernancePolicy",
    "path": "engine/reference/network/groupLedger/GovernancePolicy.md",
    "source": "engine/network/groupLedger/GovernancePolicy.js",
    "import": "/engine/network/groupLedger/GovernancePolicy.js",
    "sourceHash": "0e2320f1ae76ab2b9c350a7f6610967b7d82d06c2733468aa54de668c3d9b29c",
    "summary": "network/groupLedger/GovernancePolicy.js — group governance modes on top of the CSE PolicyEngine (network plan §16 \"adminless and moderatorless groups\"): unanimous / majority / threshold / founder-protected / open-capability. This module decides WHETHER a given vote/approval set is enough for a governance action to commit; GroupLedger.js decides WHAT happens once it does.",
    "exports": [
      {
        "name": "createGovernancePolicy",
        "kind": "function",
        "signature": "createGovernancePolicy({ mode = GOVERNANCE_MODES.MAJORITY, founders = ()",
        "summary": "Build a governance policy for a group."
      },
      {
        "name": "GOVERNANCE_MODES",
        "kind": "constant",
        "signature": "GOVERNANCE_MODES",
        "summary": ""
      },
      {
        "name": "IRREVERSIBLE_ACTIONS",
        "kind": "constant",
        "signature": "IRREVERSIBLE_ACTIONS",
        "summary": "Governance actions that always require approval (network plan §17 eviction/bans)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/groupLedger/GroupLedger",
    "path": "engine/reference/network/groupLedger/GroupLedger.md",
    "source": "engine/network/groupLedger/GroupLedger.js",
    "import": "/engine/network/groupLedger/GroupLedger.js",
    "sourceHash": "506884f7c41002f38d87ee75839dac5c3f8ab8c0d64c748338e509cd0ee1f24f",
    "summary": "network/groupLedger/GroupLedger.js — private append-only group governance ledger (network plan §15/§16/§17).  Reuses the Causal State Engine's `EventLog` (hash-chained append-only log, spec §13) and `CapabilityRegistry` as-is; governance approval decisions go through `GovernancePolicy.js` (PolicyEngine). Every event is a signed protocol envelope (protocol.js `particle-group-ledger/1`), so the ledger itself is a plain array of verifiable receipts — a group's current state is always the result of replaying it, never a separate source of truth.  `EventLog` is in-memory only; callers are responsible for persisting `ledger.eventLog.entries()` (e.g. via webgpu-os/storage/AppSandbox on the OS side) and rehydrating with `replayGroupLedger()` — this module does not import any OS/storage code, keeping the engine layer storage-agnostic.",
    "exports": [
      {
        "name": "createGroupLedger",
        "kind": "function",
        "signature": "createGroupLedger({ groupId, founders = [], mode = GOVERNANCE_MODES.MAJORITY, threshold = null } = {})",
        "summary": "Create a new (empty, ungenesised) group ledger."
      },
      {
        "name": "genesisGroup",
        "kind": "function",
        "signature": "async genesisGroup(ledger, { founderSigner, constitution = {} } = {})",
        "summary": "Append the GROUP_GENESIS event and register the signing founder as the first member."
      },
      {
        "name": "castVote",
        "kind": "function",
        "signature": "castVote(ledger, proposalId, voterMembershipId)",
        "summary": "Cast a vote toward approving a pending proposal (network plan §17 eviction flow)."
      },
      {
        "name": "getVotes",
        "kind": "function",
        "signature": "getVotes(ledger, proposalId)",
        "summary": "Current vote set for a pending proposal (read-only copy)."
      },
      {
        "name": "proposeGroupEvent",
        "kind": "function",
        "signature": "async proposeGroupEvent(ledger, { type, payload = {}, signer, proposalId = null } = {})",
        "summary": "Propose (and, if the governance policy allows, immediately commit) a governance event. Safe/low-risk actions commit right away; irreversible actions (MEMBER_REVOKED/MEMBER_BANNED/KEY_ROTATED/ROLE_CHANGED) require enough prior `castVote()` calls under the same `proposalId` first."
      },
      {
        "name": "verifyGroupLedger",
        "kind": "function",
        "signature": "verifyGroupLedger(ledger)",
        "summary": "True if the ledger's hash chain is intact end-to-end (tamper check)."
      },
      {
        "name": "replayGroupLedger",
        "kind": "function",
        "signature": "replayGroupLedger({ groupId, founders = [], mode = GOVERNANCE_MODES.MAJORITY, threshold = null, entries = [] } = {})",
        "summary": "Rebuild a live ledger from previously-persisted `ledger.eventLog.entries()` (network plan §15 persistence gap — see this file's header comment; OS-side storage, e.g. webgpu-os/storage/AppSandbox, is the caller's job, not this module's). Replays each entry through `EventLog.append()` (recomputing the exact same hash chain deterministically) and re-derives `members`/ `founders` via the same side-effect rules `genesisGroup`/`proposeGroupEvent` apply live, so a rehydrated ledger behaves identically to one built by replaying the same operations in real time — with one honest limitation: `EventLog` entries carry no wall-clock timestamp, and a `GROUP_GENESIS` envelope only embeds the ONE signer's public key, so a `members` entry reconstructed from genesis (unlike a later `MEMBER_ADDED`, whose payload carries full details) will have `joinedAt: null` and, for any co-founder who isn't the genesis envelope's own signer, `publicKeyHex: null`. This does NOT weaken governance security — founder-protected mode checks `ledger.founders` (a Set of principals, fully and exactly restored from the genesis payload), not the `members` map."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/groupLedger/index",
    "path": "engine/reference/network/groupLedger/index.md",
    "source": "engine/network/groupLedger/index.js",
    "import": "/engine/network/groupLedger/index.js",
    "sourceHash": "3c9e0f61a3df1dbe9597f5585fe106cf494423b2f50f4f9d1ad25ebfbf1cf157",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/identity/NetworkIdentity",
    "path": "engine/reference/network/identity/NetworkIdentity.md",
    "source": "engine/network/identity/NetworkIdentity.js",
    "import": "/engine/network/identity/NetworkIdentity.js",
    "sourceHash": "1a0bfef049ab519cbd16a269db2f5fbd78150ee1bb8798f8a194b138c22d5896",
    "summary": "network/identity/NetworkIdentity.js — profile/device/membership identity layer for the Particle Global OS Network Layer (network plan §11).  The network plan keeps several identity levels distinct: profile_id      stable user identity, portable across devices/groups device_id       per-device identity used for route/session proofs membership_id   per-group pseudonymous identity (unlinkable across groups)  engine/state/authority/Identity.js already wraps CollabIdentity (ECDSA P-256) as a generic `createSigner(principal)`, and now mints a SEPARATE persisted keypair per distinct principal string (Phase 0 audit finding — no new crypto, just named keys). This module is a thin, semantically-named layer on top of that: each helper below is just `createSigner()` with a principal string that encodes the identity level.",
    "exports": [
      {
        "name": "bindProfileIdentityProvider",
        "kind": "function",
        "signature": "bindProfileIdentityProvider(provider)",
        "summary": "Bind the OS ProfileDriver as the canonical profile/Passport identity owner. The engine retains its named-key fallback for standalone demos and tests, but an initialized OS always resolves the active profile through this provider."
      },
      {
        "name": "createDeviceIdentity",
        "kind": "function",
        "signature": "async createDeviceIdentity()",
        "summary": "This device's per-device signer — used for low-level route/session proofs with a Masterserver (HELLO/PROVE). Never used as group identity."
      },
      {
        "name": "createProfileIdentity",
        "kind": "function",
        "signature": "async createProfileIdentity(profileId = 'default')",
        "summary": "This user's stable profile signer. One profile per logical user on this device (multiple profiles are supported by passing distinct `profileId`s, e.g. for multi-account testing) — each gets its own persisted keypair."
      },
      {
        "name": "createMembershipIdentity",
        "kind": "function",
        "signature": "async createMembershipIdentity(profileId, groupId)",
        "summary": "A per-group pseudonymous membership signer for a profile. Distinct keypair per (profileId, groupId) pair, so a member's participation in one group cannot be linked to their participation in another, or to their underlying profile, by key alone."
      },
      {
        "name": "peerIdFromSigner",
        "kind": "function",
        "signature": "peerIdFromSigner(signer)",
        "summary": "Derive a stable \"peer id\" string for use in route tables / mesh topology from any signer's fingerprint (device, profile, or membership signer)."
      },
      {
        "name": "computeFingerprint",
        "kind": "constant",
        "signature": "computeFingerprint",
        "summary": "Full SHA-256 public-key fingerprint used by Realm Network identities."
      },
      {
        "name": "verifyWithKey",
        "kind": "re-export",
        "signature": "verifyWithKey",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/index",
    "path": "engine/reference/network/index.md",
    "source": "engine/network/index.js",
    "import": "/engine/network/index.js",
    "sourceHash": "c3ffbc353727cf9138a2147cf2f27474eb9e168ed358bdcb53b64f7eb34be6ad",
    "summary": "network/index.js — public barrel for the Particle Global OS Network Layer.  See C:\\Users\\btspa\\.windsurf\\plans\\particle-network-layer-2bf6f0.md for the full plan. Phase 1 (protocol foundation): versioned envelopes, canonical signing, and profile/device/membership identity + route capabilities on top of the existing engine/collab (P2P) and engine/state (CSE) modules.  Build status: [x] Phase 0 audit  [x] Phase 1 protocol foundation [x] Phase 2 dynamic routes + master server list [x] Phase 2b live Masterserver signaling client (transport/MasterServerClient.js) [x] Phase 3 invites & trust groups   [x] Phase 4 group crypto [x] Phase 5 peer tickets  [x] Phase 6 sync manager/workstations, now WIRED to live transport (syncManager/SyncTransport.js broadcasts/merges workstation CRDT ops over an attached route's MasterServerClient.signal(), gated by SyncManager.shouldSync()) — demoed live in factory/apps/network-manager's Routes tab [x] Phase 7 chunks  [x] Phase 8 carrier layer  [x] Phase 9 DHT-lite (future/low-priority scope), with a concrete BootstrapSource adapter for the browser extension's resident cert vault at webgpu-os/drivers/ResidentBootstrapSource.js (OS-layer glue, per this module's no-webgpu-os-dependency rule — read-only, honestly scoped to \"remembered identity\", not live background reachability)",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/invites/InvitePacket",
    "path": "engine/reference/network/invites/InvitePacket.md",
    "source": "engine/network/invites/InvitePacket.js",
    "import": "/engine/network/invites/InvitePacket.js",
    "sourceHash": "d63f4b877b8f58a1c6048184053d677e8804a7c0196a8a4dbb5359062610ec86",
    "summary": "network/invites/InvitePacket.js — signed, one-time, expiring invites (network plan §13).  An invite is a doorway into a group's approval process, NOT automatic membership: it just names a temporary meeting route and a role offer, and is signed by the inviter so anyone can verify who issued it. It does not itself grant route/group access — that capability is minted only after the join-request identity exchange (see JoinFlow.js), once the joiner's real principal is known. \"Base64 is not security\" (network plan §13) — the encode/decode here is just a convenient transport, the actual guarantee is the ECDSA signature over the canonical envelope (protocol.js).",
    "exports": [
      {
        "name": "makeInvite",
        "kind": "function",
        "signature": "async makeInvite({ groupId, routeId, roleOffer = 'member', oneTime = true, expiresAt = null, inviterSigner, } = {})",
        "summary": "Build + sign an invite packet."
      },
      {
        "name": "encodeInvite",
        "kind": "function",
        "signature": "encodeInvite(signedInvite)",
        "summary": "URL-safe base64 encoding of a signed invite envelope, for sharing as a code/link."
      },
      {
        "name": "decodeInvite",
        "kind": "function",
        "signature": "decodeInvite(inviteCode)",
        "summary": "Decode an invite code back into its (still-UNVERIFIED) signed envelope."
      },
      {
        "name": "verifyInvite",
        "kind": "function",
        "signature": "async verifyInvite(signedInvite, { now = Date.now()",
        "summary": "Verify a decoded invite: known protocol/type, not expired, and the signature actually matches the embedded inviter public key."
      },
      {
        "name": "createInviteRegistry",
        "kind": "function",
        "signature": "createInviteRegistry()",
        "summary": "Create a registry to track which one-time invites have already been used."
      },
      {
        "name": "isInviteConsumed",
        "kind": "function",
        "signature": "isInviteConsumed(registry, inviteId)",
        "summary": ""
      },
      {
        "name": "consumeInvite",
        "kind": "function",
        "signature": "consumeInvite(registry, inviteId)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/invites/JoinFlow",
    "path": "engine/reference/network/invites/JoinFlow.md",
    "source": "engine/network/invites/JoinFlow.js",
    "import": "/engine/network/invites/JoinFlow.js",
    "sourceHash": "83362c93f6fdb4a91dbf9081bc8aeca708f8bcee5af0b053ae368af873ff9448",
    "summary": "network/invites/JoinFlow.js — invite -> temp route -> mutual identity proof exchange -> group policy check (network plan §13 invite pipeline).  This module only establishes \"this join request is a genuine, signed response to a live, unconsumed invite\" — it does NOT decide group policy (vote thresholds, founder approval, etc). That decision belongs to GroupLedger.proposeGroupEvent('MEMBER_ADDED', ...); once that commits, call grantJoinCapability() to actually let the new member attach to the group's real route.",
    "exports": [
      {
        "name": "requestJoin",
        "kind": "function",
        "signature": "async requestJoin({ signedInvite, joinerSigner } = {})",
        "summary": "Joiner side: build a signed join request referencing a (decoded) invite."
      },
      {
        "name": "verifyJoinRequest",
        "kind": "function",
        "signature": "async verifyJoinRequest({ signedInvite, joinRequest, inviteRegistry = null, now = Date.now()",
        "summary": "Inviter/group side: validate an invite together with a join request responding to it."
      },
      {
        "name": "grantJoinCapability",
        "kind": "function",
        "signature": "grantJoinCapability({ signedInvite, joinerPrincipal, groupRouteId, inviteRegistry = null, allow = [ROUTE_ACTIONS.ATTACH, ROUTE_ACTIONS.SUBSCRIBE, ROUTE_ACTIONS.PUBLISH], } = {})",
        "summary": "After the group has approved the join (GroupLedger MEMBER_ADDED commit), mint the new member's first route capability for the group's real route and consume the invite if it was one-time."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/invites/index",
    "path": "engine/reference/network/invites/index.md",
    "source": "engine/network/invites/index.js",
    "import": "/engine/network/invites/index.js",
    "sourceHash": "ab4628d0794e7dbc76b06278ce60f378d81c2957b65d7a7529e0cc6756092903",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/peerTickets/PeerTicket",
    "path": "engine/reference/network/peerTickets/PeerTicket.md",
    "source": "engine/network/peerTickets/PeerTicket.js",
    "import": "/engine/network/peerTickets/PeerTicket.js",
    "sourceHash": "9fd9e5475a1a060ed3604b1234f29f4e97a01920df81ba4b67a580f76472476e",
    "summary": "network/peerTickets/PeerTicket.js — encrypted, remembered reconnect records (network plan §38).  A peer ticket is a signed statement \"peerId X is reachable, offers these services, at these route hints, valid until Y\" — it lets a device reconnect to known peers/groups without the discovery server, once trust has already been established once. Sealing (encrypting the ticket itself) reuses the same ECDH-wrap pattern as group welcome packets (engine/network/groupCrypto/GroupEpoch.js), OR a group's current encryption epoch directly, per network plan §38 \"encrypt to recipient device key OR group epoch key\".",
    "exports": [
      {
        "name": "makePeerTicket",
        "kind": "function",
        "signature": "async makePeerTicket({ peerId, deviceId = null, profileId = null, groupId = null, services = [], routeHints = [], expiresAt = null, routeEpoch = null, encryptionEpoch = null, issuerSigner, } = {})",
        "summary": "Build + sign a peer ticket."
      },
      {
        "name": "verifyPeerTicket",
        "kind": "function",
        "signature": "async verifyPeerTicket(signedTicket, { now = Date.now()",
        "summary": "Verify a peer ticket: known protocol/type, not expired, signature valid."
      },
      {
        "name": "sealPeerTicketToDevice",
        "kind": "function",
        "signature": "async sealPeerTicketToDevice(signedTicket, recipientEcdhPublicKeyRaw)",
        "summary": "ECDH-wrap a signed ticket so only the holder of `recipientEcdhPublicKeyRaw`'s private key can read it."
      },
      {
        "name": "openSealedPeerTicket",
        "kind": "function",
        "signature": "async openSealedPeerTicket(sealed, recipientPrivateKey)",
        "summary": "Recipient side: unwrap a device-sealed ticket. Returns null (fails closed) on any error."
      },
      {
        "name": "sealPeerTicketToEpoch",
        "kind": "function",
        "signature": "async sealPeerTicketToEpoch(groupCrypto, epoch, signedTicket)",
        "summary": "Seal a ticket under a group encryption epoch (readable by any member with that epoch's key)."
      },
      {
        "name": "openSealedPeerTicketFromEpoch",
        "kind": "function",
        "signature": "async openSealedPeerTicketFromEpoch(groupCrypto, envelope)",
        "summary": "Open an epoch-sealed ticket. Returns null if the epoch key is missing/erased or tampered."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/peerTickets/PeerTicketStore",
    "path": "engine/reference/network/peerTickets/PeerTicketStore.md",
    "source": "engine/network/peerTickets/PeerTicketStore.js",
    "import": "/engine/network/peerTickets/PeerTicketStore.js",
    "sourceHash": "38742cd36290902ebe28fe2e0b5875b8634d9d9df78f79f02f9727403b006d6c",
    "summary": "network/peerTickets/PeerTicketStore.js — local reconnect memory (network plan §38). In-memory only; callers persist via their own storage (e.g. webgpu-os/storage/AppSandbox) and rehydrate with addPeerTicket() on boot — engine/network stays storage-agnostic (see GroupLedger.js for the same pattern).",
    "exports": [
      {
        "name": "createPeerTicketStore",
        "kind": "function",
        "signature": "createPeerTicketStore()",
        "summary": "Create an empty peer ticket store."
      },
      {
        "name": "addPeerTicket",
        "kind": "function",
        "signature": "addPeerTicket(store, signedTicket)",
        "summary": "Remember a (already verified) peer ticket, keyed by its peerId. Overwrites any older ticket for the same peer."
      },
      {
        "name": "getPeerTicket",
        "kind": "function",
        "signature": "getPeerTicket(store, peerId)",
        "summary": "Look up the remembered ticket for a peer, or null."
      },
      {
        "name": "removePeerTicket",
        "kind": "function",
        "signature": "removePeerTicket(store, peerId)",
        "summary": "Forget a peer's ticket. Returns true if one existed."
      },
      {
        "name": "pruneExpiredPeerTickets",
        "kind": "function",
        "signature": "pruneExpiredPeerTickets(store, now = Date.now()",
        "summary": "Remove tickets whose payload.expiresAt has passed. Returns the removed peerIds."
      },
      {
        "name": "listPeerTicketsByFreshness",
        "kind": "function",
        "signature": "listPeerTicketsByFreshness(store)",
        "summary": "All remembered tickets, most-recently-received first (network plan §38: try freshest known peers first)."
      },
      {
        "name": "snapshotPeerTicketStore",
        "kind": "function",
        "signature": "snapshotPeerTicketStore(store)",
        "summary": "Full, JSON-serializable snapshot of a peer ticket store for OS-side persistence (network plan §38 persistence gap — see this file's header comment; storage itself, e.g. webgpu-os/storage/AppSandbox, is the caller's job). Same shape `listPeerTicketsByFreshness` already returns — exposed under its own name so the persistence contract (snapshot/hydrate pair) stays explicit even if the internal shape changes later."
      },
      {
        "name": "hydratePeerTicketStore",
        "kind": "function",
        "signature": "hydratePeerTicketStore(snapshot = [])",
        "summary": "Rebuild a peer ticket store from a previously-persisted snapshotPeerTicketStore() array."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/peerTickets/ReconnectOrder",
    "path": "engine/reference/network/peerTickets/ReconnectOrder.md",
    "source": "engine/network/peerTickets/ReconnectOrder.js",
    "import": "/engine/network/peerTickets/ReconnectOrder.js",
    "sourceHash": "5bd310a83aff6131f95ee9a03d5ef10c45ea34529425e57aa42802715fed9715",
    "summary": "network/peerTickets/ReconnectOrder.js — full device-boot reconnect order (network plan §38): cached peer tickets (freshest first) -> LAN -> group gossip -> master servers -> carrier -> DHT. Ties Phase 5 (peer tickets) onto Phase 2's `buildConnectionOrder` (routes/MasterServerList.js) without modifying it.",
    "exports": [
      {
        "name": "buildPeerReconnectOrder",
        "kind": "function",
        "signature": "buildPeerReconnectOrder(store, normalizedMasterServerList)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/peerTickets/index",
    "path": "engine/reference/network/peerTickets/index.md",
    "source": "engine/network/peerTickets/index.js",
    "import": "/engine/network/peerTickets/index.js",
    "sourceHash": "a9807fe95191ae9823d3b2c2c3597e64169c2a9c3106feb4566fabcf9eda184a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/protocol",
    "path": "engine/reference/network/protocol.md",
    "source": "engine/network/protocol.js",
    "import": "/engine/network/protocol.js",
    "sourceHash": "55eaf62a89413aa45b5b747ca8a4a28f9c7ccbe444319122efedd3cd480ab90a",
    "summary": "network/protocol.js — namespaced/versioned message envelopes for the Particle Global OS Network Layer (network plan §34).  Every message on the network carries an explicit, versioned protocol namespace (e.g. `particle-route/1`). Unversioned or unrecognized protocol strings are rejected outright — this is what lets the wire format evolve (particle-route/2, ...) without silently misparsing old/foreign traffic.  Canonical signing reuses the Causal State Engine's deterministic canonicalization (engine/state/util/canonical.js, RFC-8785-style) so that signed envelopes hash/verify identically regardless of key order or JS engine, and reuses CSE's cross-actor verification (verifyWithKey) so a receiver can verify a sender's signature from just their public key hex.",
    "exports": [
      {
        "name": "isKnownProtocol",
        "kind": "function",
        "signature": "isKnownProtocol(protocol)",
        "summary": "True when `protocol` is one of this build's known, versioned namespaces."
      },
      {
        "name": "makeEnvelope",
        "kind": "function",
        "signature": "makeEnvelope({ protocol, type, payload = null, extra = {} } = {})",
        "summary": "Build an unsigned protocol envelope. Throws if `protocol` isn't a known, versioned namespace (spec §34 rule: reject unversioned packets)."
      },
      {
        "name": "assertKnownProtocol",
        "kind": "function",
        "signature": "assertKnownProtocol(msg)",
        "summary": "Assert an inbound (possibly untrusted) message is a well-formed envelope with a known protocol namespace. Does NOT verify signatures — see `verifyEnvelope`. Throws on failure so callers fail closed."
      },
      {
        "name": "signEnvelope",
        "kind": "function",
        "signature": "async signEnvelope(envelope, signer)",
        "summary": "Sign an envelope with a CSE authority signer (engine/state/authority/Identity.js `createSigner`, itself bound to a CollabIdentity ECDSA P-256 keypair). The signature covers the canonical bytes of the envelope BEFORE the signature/signerFingerprint fields exist, so verification reconstructs the same canonical body by stripping those two fields back off."
      },
      {
        "name": "verifyEnvelope",
        "kind": "function",
        "signature": "async verifyEnvelope(signedEnvelope, signer = null)",
        "summary": "Verify a signed envelope. Pass either a `signer` (verifies against its own key — same-principal round-trip) or nothing to verify against the envelope's own embedded `signerPublicKeyHex` (cross-actor verification, the normal case when receiving from a remote peer)."
      },
      {
        "name": "PROTOCOL_VERSIONS",
        "kind": "constant",
        "signature": "PROTOCOL_VERSIONS",
        "summary": "All known/versioned protocol namespaces (network plan §34)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/accord/AccordCapabilityV1",
    "path": "engine/reference/network/realm/accord/AccordCapabilityV1.md",
    "source": "engine/network/realm/accord/AccordCapabilityV1.js",
    "import": "/engine/network/realm/accord/AccordCapabilityV1.js",
    "sourceHash": "a815855f0850eca978e4fdf1c5bcb23f06519bc9aabb35f623e7bc2bdd72004c",
    "summary": "Signed, short-lived Accord capability discovery records.",
    "exports": [
      {
        "name": "createAccordCapabilityAdvertisement",
        "kind": "function",
        "signature": "async createAccordCapabilityAdvertisement(input, signer)",
        "summary": ""
      },
      {
        "name": "verifyAccordCapabilityAdvertisement",
        "kind": "function",
        "signature": "async verifyAccordCapabilityAdvertisement(record, { now = Date.now()",
        "summary": ""
      },
      {
        "name": "negotiateAccordCapability",
        "kind": "function",
        "signature": "async negotiateAccordCapability(advertisements, request, options = {})",
        "summary": "Select a verified capability that can satisfy an exact bounded request."
      },
      {
        "name": "ACCORD_CAPABILITY_ADVERTISEMENT_V1_FORMAT",
        "kind": "constant",
        "signature": "ACCORD_CAPABILITY_ADVERTISEMENT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "ACCORD_CONTEXT_KINDS",
        "kind": "constant",
        "signature": "ACCORD_CONTEXT_KINDS",
        "summary": ""
      },
      {
        "name": "AccordCapabilityAdvertisementV1",
        "kind": "constant",
        "signature": "AccordCapabilityAdvertisementV1",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/accord/AccordCrypto",
    "path": "engine/reference/network/realm/accord/AccordCrypto.md",
    "source": "engine/network/realm/accord/AccordCrypto.js",
    "import": "/engine/network/realm/accord/AccordCrypto.js",
    "sourceHash": "2e3f222d9e305573f0fe61785ffe6dd87858c868bf4c89a65b5e046c822db7a1",
    "summary": "Shared validation and domain-separated signing for the Navi Accord wire protocol.",
    "exports": [
      {
        "name": "safeInteger",
        "kind": "function",
        "signature": "safeInteger(value, name, minimum = 0, maximum = Number.MAX_SAFE_INTEGER)",
        "summary": ""
      },
      {
        "name": "boundedText",
        "kind": "function",
        "signature": "boundedText(value, name, maximum = 512)",
        "summary": ""
      },
      {
        "name": "boundedToken",
        "kind": "function",
        "signature": "boundedToken(value, name, maximum = 128)",
        "summary": ""
      },
      {
        "name": "normalizeNonce",
        "kind": "function",
        "signature": "normalizeNonce(value, name = 'nonce')",
        "summary": ""
      },
      {
        "name": "assertSecureRecordId",
        "kind": "function",
        "signature": "assertSecureRecordId(value, name = 'record ID')",
        "summary": ""
      },
      {
        "name": "normalizeTokenList",
        "kind": "function",
        "signature": "normalizeTokenList(values, name, { maximum = 128, allowEmpty = false } = {})",
        "summary": ""
      },
      {
        "name": "normalizeIdList",
        "kind": "function",
        "signature": "normalizeIdList(values, name, { maximum = 128, allowEmpty = true } = {})",
        "summary": ""
      },
      {
        "name": "assertIdentityId",
        "kind": "function",
        "signature": "assertIdentityId(value, name = 'identity ID')",
        "summary": ""
      },
      {
        "name": "normalizeWindow",
        "kind": "function",
        "signature": "normalizeWindow(input, { issuedAt = Date.now()",
        "summary": ""
      },
      {
        "name": "validateActiveWindow",
        "kind": "function",
        "signature": "validateActiveWindow(record, now = Date.now()",
        "summary": ""
      },
      {
        "name": "normalizeBudget",
        "kind": "function",
        "signature": "normalizeBudget(value, name = 'budget', { allowZero = false } = {})",
        "summary": ""
      },
      {
        "name": "budgetWithin",
        "kind": "function",
        "signature": "budgetWithin(candidate, ceiling)",
        "summary": ""
      },
      {
        "name": "normalizeScope",
        "kind": "function",
        "signature": "normalizeScope(value, name = 'scope')",
        "summary": ""
      },
      {
        "name": "scopeWithin",
        "kind": "function",
        "signature": "scopeWithin(candidate, ceiling)",
        "summary": ""
      },
      {
        "name": "assertSafePublicData",
        "kind": "function",
        "signature": "assertSafePublicData(value, name = 'public data', { maximumBytes = ACCORD_MAX_PUBLIC_BYTES } = {})",
        "summary": "Validate bounded JSON-compatible public data and reject common exfiltration containers. This is deliberately structural: unrestricted session exports, credentials, and private-memory payloads cannot be smuggled under aliases."
      },
      {
        "name": "canonicalPublicCopy",
        "kind": "function",
        "signature": "canonicalPublicCopy(value, name = 'public data', options = {})",
        "summary": ""
      },
      {
        "name": "accordSignerDescriptor",
        "kind": "function",
        "signature": "async accordSignerDescriptor(signer)",
        "summary": ""
      },
      {
        "name": "finishSignedAccordRecord",
        "kind": "function",
        "signature": "async finishSignedAccordRecord(record, idField, signer)",
        "summary": ""
      },
      {
        "name": "verifySignedAccordRecord",
        "kind": "function",
        "signature": "async verifySignedAccordRecord(record, { format, idField })",
        "summary": ""
      },
      {
        "name": "authorizeWith",
        "kind": "function",
        "signature": "async authorizeWith(adapter, record, role)",
        "summary": ""
      },
      {
        "name": "exactKeys",
        "kind": "function",
        "signature": "exactKeys(value, expected, name)",
        "summary": ""
      },
      {
        "name": "normalizedBodyMatches",
        "kind": "function",
        "signature": "normalizedBodyMatches(record, normalized)",
        "summary": ""
      },
      {
        "name": "ACCORD_MAX_LIFETIME_MS",
        "kind": "constant",
        "signature": "ACCORD_MAX_LIFETIME_MS",
        "summary": ""
      },
      {
        "name": "ACCORD_MAX_PUBLIC_BYTES",
        "kind": "constant",
        "signature": "ACCORD_MAX_PUBLIC_BYTES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/accord/AccordDelegationV1",
    "path": "engine/reference/network/realm/accord/AccordDelegationV1.md",
    "source": "engine/network/realm/accord/AccordDelegationV1.js",
    "import": "/engine/network/realm/accord/AccordDelegationV1.js",
    "sourceHash": "8da8bbc642cbe63759ec432927ed6cb4acfe69114e4556e0795046b57a0658ad",
    "summary": "Task-bound capability delegation, revocation, and approval proofs.",
    "exports": [
      {
        "name": "AccordDelegationRegistry",
        "kind": "class",
        "signature": "class AccordDelegationRegistry",
        "summary": ""
      },
      {
        "name": "createAccordDelegation",
        "kind": "function",
        "signature": "async createAccordDelegation(task, input, signer)",
        "summary": ""
      },
      {
        "name": "verifyAccordDelegation",
        "kind": "function",
        "signature": "async verifyAccordDelegation(record, { task, acceptance = null, capabilityGrant, verifyCapabilityGrant, now = Date.now()",
        "summary": ""
      },
      {
        "name": "createAccordDelegationRevocation",
        "kind": "function",
        "signature": "async createAccordDelegationRevocation(delegation, input, signer)",
        "summary": ""
      },
      {
        "name": "verifyAccordDelegationRevocation",
        "kind": "function",
        "signature": "async verifyAccordDelegationRevocation(record, { delegation, now = Date.now()",
        "summary": ""
      },
      {
        "name": "createAccordApprovalProof",
        "kind": "function",
        "signature": "async createAccordApprovalProof(task, input, signer)",
        "summary": ""
      },
      {
        "name": "verifyAccordApprovalProof",
        "kind": "function",
        "signature": "async verifyAccordApprovalProof(record, { task, now = Date.now()",
        "summary": ""
      },
      {
        "name": "ACCORD_DELEGATION_V1_FORMAT",
        "kind": "constant",
        "signature": "ACCORD_DELEGATION_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "ACCORD_DELEGATION_REVOCATION_V1_FORMAT",
        "kind": "constant",
        "signature": "ACCORD_DELEGATION_REVOCATION_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "ACCORD_APPROVAL_PROOF_V1_FORMAT",
        "kind": "constant",
        "signature": "ACCORD_APPROVAL_PROOF_V1_FORMAT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/accord/AccordReplayGuard",
    "path": "engine/reference/network/realm/accord/AccordReplayGuard.md",
    "source": "engine/network/realm/accord/AccordReplayGuard.js",
    "import": "/engine/network/realm/accord/AccordReplayGuard.js",
    "sourceHash": "9a588caf973b509aec089fafc6f7ff63107ed86e273a7146d790b63b788a1e37",
    "summary": "Bounded replay and monotonic-sequence protection for verified Accord records.",
    "exports": [
      {
        "name": "AccordReplayGuard",
        "kind": "class",
        "signature": "class AccordReplayGuard",
        "summary": ""
      },
      {
        "name": "consumeReplay",
        "kind": "function",
        "signature": "consumeReplay(replayGuard, record, { idField, streamKey = null, sequence = null } = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/accord/AccordResultV1",
    "path": "engine/reference/network/realm/accord/AccordResultV1.md",
    "source": "engine/network/realm/accord/AccordResultV1.js",
    "import": "/engine/network/realm/accord/AccordResultV1.js",
    "sourceHash": "c50acff966bdc272ef2e6f5386833241920f75c813a5d7896ef83287f60f19f2",
    "summary": "Signed Accord progress, cancellation, results, and purpose-isolated reputation evidence.",
    "exports": [
      {
        "name": "createAccordProgress",
        "kind": "function",
        "signature": "async createAccordProgress(task, acceptance, input, signer)",
        "summary": ""
      },
      {
        "name": "verifyAccordProgress",
        "kind": "function",
        "signature": "async verifyAccordProgress(record, { task, acceptance, now = Date.now()",
        "summary": ""
      },
      {
        "name": "createAccordCancellation",
        "kind": "function",
        "signature": "async createAccordCancellation(task, input, signer)",
        "summary": ""
      },
      {
        "name": "verifyAccordCancellation",
        "kind": "function",
        "signature": "async verifyAccordCancellation(record, { task, now = Date.now()",
        "summary": ""
      },
      {
        "name": "createAccordResultV1",
        "kind": "function",
        "signature": "async createAccordResultV1(task, acceptance, delegation, input, signer)",
        "summary": ""
      },
      {
        "name": "verifyAccordResultV1",
        "kind": "function",
        "signature": "async verifyAccordResultV1(record, { task, acceptance, delegation, capabilityGrant, verifyCapabilityGrant, contextCapsules = [], approvalProofs = [], cancellation = null, now = Date.now()",
        "summary": ""
      },
      {
        "name": "createAccordReputationEvidence",
        "kind": "function",
        "signature": "async createAccordReputationEvidence(task, result, input, signer)",
        "summary": ""
      },
      {
        "name": "verifyAccordReputationEvidence",
        "kind": "function",
        "signature": "async verifyAccordReputationEvidence(record, { now = Date.now()",
        "summary": ""
      },
      {
        "name": "ACCORD_PROGRESS_V1_FORMAT",
        "kind": "constant",
        "signature": "ACCORD_PROGRESS_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "ACCORD_CANCELLATION_V1_FORMAT",
        "kind": "constant",
        "signature": "ACCORD_CANCELLATION_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "ACCORD_RESULT_V1_FORMAT",
        "kind": "constant",
        "signature": "ACCORD_RESULT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "ACCORD_REPUTATION_EVIDENCE_V1_FORMAT",
        "kind": "constant",
        "signature": "ACCORD_REPUTATION_EVIDENCE_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "AccordResultV1",
        "kind": "constant",
        "signature": "AccordResultV1",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/accord/AccordTaskV1",
    "path": "engine/reference/network/realm/accord/AccordTaskV1.md",
    "source": "engine/network/realm/accord/AccordTaskV1.js",
    "import": "/engine/network/realm/accord/AccordTaskV1.js",
    "sourceHash": "9e86ee24d53027cf7a0895ef6d0f5df9e78a847d9ed42dddb38f8c2ba08174e7",
    "summary": "Requester-signed Accord tasks and executor-signed negotiated acceptance.",
    "exports": [
      {
        "name": "createAccordTask",
        "kind": "function",
        "signature": "async createAccordTask(input, signer)",
        "summary": ""
      },
      {
        "name": "verifyAccordTask",
        "kind": "function",
        "signature": "async verifyAccordTask(record, { now = Date.now()",
        "summary": ""
      },
      {
        "name": "createAccordTaskAcceptance",
        "kind": "function",
        "signature": "async createAccordTaskAcceptance(task, input, signer)",
        "summary": ""
      },
      {
        "name": "verifyAccordTaskAcceptance",
        "kind": "function",
        "signature": "async verifyAccordTaskAcceptance(record, { task, now = Date.now()",
        "summary": ""
      },
      {
        "name": "ACCORD_TASK_V1_FORMAT",
        "kind": "constant",
        "signature": "ACCORD_TASK_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "ACCORD_TASK_ACCEPTANCE_V1_FORMAT",
        "kind": "constant",
        "signature": "ACCORD_TASK_ACCEPTANCE_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "AccordTaskV1",
        "kind": "constant",
        "signature": "AccordTaskV1",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/accord/ContextCapsuleV1",
    "path": "engine/reference/network/realm/accord/ContextCapsuleV1.md",
    "source": "engine/network/realm/accord/ContextCapsuleV1.js",
    "import": "/engine/network/realm/accord/ContextCapsuleV1.js",
    "sourceHash": "bb811bdc6b920fd35ac733662114a17c6869f6c9328d3b9f3a1d15eb90563384",
    "summary": "Recipient-bound, allowlisted, signed context for a single Accord task.",
    "exports": [
      {
        "name": "createContextCapsuleV1",
        "kind": "function",
        "signature": "async createContextCapsuleV1(task, input, signer)",
        "summary": ""
      },
      {
        "name": "verifyContextCapsuleV1",
        "kind": "function",
        "signature": "async verifyContextCapsuleV1(record, { task, acceptance = null, now = Date.now()",
        "summary": ""
      },
      {
        "name": "CONTEXT_CAPSULE_V1_FORMAT",
        "kind": "constant",
        "signature": "CONTEXT_CAPSULE_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "ContextCapsuleV1",
        "kind": "constant",
        "signature": "ContextCapsuleV1",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/accord/index",
    "path": "engine/reference/network/realm/accord/index.md",
    "source": "engine/network/realm/accord/index.js",
    "import": "/engine/network/realm/accord/index.js",
    "sourceHash": "24ad9df4c6176c69089763d392b6b7f9dc08d40548b5ce148f9f6cc95459ac30",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/addressing/RealmAddress",
    "path": "engine/reference/network/realm/addressing/RealmAddress.md",
    "source": "engine/network/realm/addressing/RealmAddress.js",
    "import": "/engine/network/realm/addressing/RealmAddress.js",
    "sourceHash": "0dad5f7981b581cc5f9b8235d01b7818ab5f4bc26431f91eea28d2a66c50de9f",
    "summary": "RealmAddress.js — human aliases that resolve to location-independent IDs.",
    "exports": [
      {
        "name": "RealmAddressResolver",
        "kind": "class",
        "signature": "class RealmAddressResolver",
        "summary": "In-memory verified resolver. Persistence/discovery providers can replay records into it."
      },
      {
        "name": "parseRealmAddress",
        "kind": "function",
        "signature": "parseRealmAddress(address)",
        "summary": "Parse and canonicalize a realm:// alias or direct-ID address."
      },
      {
        "name": "realmAddressForId",
        "kind": "function",
        "signature": "realmAddressForId(realmId)",
        "summary": ""
      },
      {
        "name": "createRealmAliasRecord",
        "kind": "function",
        "signature": "async createRealmAliasRecord(input, signer)",
        "summary": "Create an attributable alias update. Aliases can move; Realm IDs cannot."
      },
      {
        "name": "verifyRealmAliasRecord",
        "kind": "function",
        "signature": "async verifyRealmAliasRecord(record, options = {})",
        "summary": ""
      },
      {
        "name": "REALM_ALIAS_FORMAT",
        "kind": "constant",
        "signature": "REALM_ALIAS_FORMAT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/addressing/RealmIds",
    "path": "engine/reference/network/realm/addressing/RealmIds.md",
    "source": "engine/network/realm/addressing/RealmIds.js",
    "import": "/engine/network/realm/addressing/RealmIds.js",
    "sourceHash": "9cd53b8d5e17aba708075d74c5e63c9902f4e24770ac9eca28d7c8ae89507c76",
    "summary": "RealmIds.js — stable, typed identifiers for Realm Network resources. IDs are deliberately independent of names, hosts, routes, and storage locations.  The digest is SHA-256 over domain-separated canonical data, so the same control material always produces the same identifier while two resource types can never collide with one another.",
    "exports": [
      {
        "name": "realmKeyFingerprint",
        "kind": "function",
        "signature": "async realmKeyFingerprint(publicKey)",
        "summary": "Return the full SHA-256 fingerprint of a raw uncompressed P-256 key."
      },
      {
        "name": "createRealmId",
        "kind": "function",
        "signature": "async createRealmId(type, controlMaterial)",
        "summary": "Derive a typed stable ID from canonical control material. Callers must provide persistent material, never a location or session ID."
      },
      {
        "name": "createKeyControlledRealmId",
        "kind": "function",
        "signature": "async createKeyControlledRealmId(type, publicKey)",
        "summary": "Derive an identity controlled by a specific P-256 public key."
      },
      {
        "name": "createContentRealmId",
        "kind": "function",
        "signature": "async createContentRealmId(type, content)",
        "summary": "Derive an immutable content identity from exact bytes."
      },
      {
        "name": "parseRealmId",
        "kind": "function",
        "signature": "parseRealmId(id)",
        "summary": ""
      },
      {
        "name": "isRealmId",
        "kind": "function",
        "signature": "isRealmId(id, expectedType = null)",
        "summary": ""
      },
      {
        "name": "assertRealmId",
        "kind": "function",
        "signature": "assertRealmId(id, expectedType = null, label = 'Realm ID')",
        "summary": ""
      },
      {
        "name": "REALM_ID_FORMAT",
        "kind": "constant",
        "signature": "REALM_ID_FORMAT",
        "summary": ""
      },
      {
        "name": "REALM_ID_TYPE",
        "kind": "constant",
        "signature": "REALM_ID_TYPE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/addressing/index",
    "path": "engine/reference/network/realm/addressing/index.md",
    "source": "engine/network/realm/addressing/index.js",
    "import": "/engine/network/realm/addressing/index.js",
    "sourceHash": "e4e0dfd366c4c12367db2388a479262029f415316e7aa8013561a17b608b46e7",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/atlas/AtlasProviders",
    "path": "engine/reference/network/realm/atlas/AtlasProviders.md",
    "source": "engine/network/realm/atlas/AtlasProviders.js",
    "import": "/engine/network/realm/atlas/AtlasProviders.js",
    "sourceHash": "c2a15b7b1f75719ed53c4a3a6ac2f10e5be5aea8899b3329f5ff242ccfe1c52f",
    "summary": "Feature-gated Atlas provider contracts with bounded verified in-memory stores.",
    "exports": [
      {
        "name": "AtlasRecordProvider",
        "kind": "class",
        "signature": "class AtlasRecordProvider",
        "summary": "A complete bounded provider suitable for local, direct-contact, organization, and peer-gossip adapters. Network code passes verified records into this contract; no provider becomes active until explicitly enabled."
      },
      {
        "name": "atlasProviderAllowsVisibility",
        "kind": "function",
        "signature": "atlasProviderAllowsVisibility(kind, visibility)",
        "summary": ""
      },
      {
        "name": "createLocalAtlasProvider",
        "kind": "function",
        "signature": "createLocalAtlasProvider(options)",
        "summary": ""
      },
      {
        "name": "createContactAtlasProvider",
        "kind": "function",
        "signature": "createContactAtlasProvider(options)",
        "summary": ""
      },
      {
        "name": "createOrganizationAtlasProvider",
        "kind": "function",
        "signature": "createOrganizationAtlasProvider(options)",
        "summary": ""
      },
      {
        "name": "createPeerGossipAtlasProvider",
        "kind": "function",
        "signature": "createPeerGossipAtlasProvider(options)",
        "summary": ""
      },
      {
        "name": "ATLAS_PROVIDER_KIND",
        "kind": "constant",
        "signature": "ATLAS_PROVIDER_KIND",
        "summary": ""
      },
      {
        "name": "ATLAS_PROVIDER_VISIBILITY",
        "kind": "constant",
        "signature": "ATLAS_PROVIDER_VISIBILITY",
        "summary": ""
      },
      {
        "name": "AtlasProviderV1",
        "kind": "constant",
        "signature": "AtlasProviderV1",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/atlas/AtlasRecordV1",
    "path": "engine/reference/network/realm/atlas/AtlasRecordV1.md",
    "source": "engine/network/realm/atlas/AtlasRecordV1.js",
    "import": "/engine/network/realm/atlas/AtlasRecordV1.js",
    "sourceHash": "9b1be1220b46f2dafd1b8a0fff1e096d5c03a7ee4c21d2a63a72b91a2d251bd4",
    "summary": "Signed, bounded Realm Atlas publication records and visibility policy.",
    "exports": [
      {
        "name": "AtlasReplayGuard",
        "kind": "class",
        "signature": "class AtlasReplayGuard",
        "summary": "Monotonic per-publisher replay guard for verified Atlas histories."
      },
      {
        "name": "createAtlasRecordV1",
        "kind": "function",
        "signature": "async createAtlasRecordV1(input, signer)",
        "summary": "Create a signed immutable AtlasRecordV1."
      },
      {
        "name": "verifyAtlasRecordV1",
        "kind": "function",
        "signature": "async verifyAtlasRecordV1(record, { now = Date.now()",
        "summary": "Verify canonical structure, SHA-256 identity, signature, freshness, and optional publisher authority."
      },
      {
        "name": "atlasVisibilitySemantics",
        "kind": "function",
        "signature": "atlasVisibilitySemantics(visibility)",
        "summary": ""
      },
      {
        "name": "canAccessAtlasRecordV1",
        "kind": "function",
        "signature": "canAccessAtlasRecordV1(record, context = {})",
        "summary": "Evaluate a viewer against the signed audience without granting entry permissions."
      },
      {
        "name": "ATLAS_RECORD_FORMAT",
        "kind": "constant",
        "signature": "ATLAS_RECORD_FORMAT",
        "summary": ""
      },
      {
        "name": "ATLAS_RECORD_MAX_BYTES",
        "kind": "constant",
        "signature": "ATLAS_RECORD_MAX_BYTES",
        "summary": ""
      },
      {
        "name": "ATLAS_RECORD_MAX_TTL_MS",
        "kind": "constant",
        "signature": "ATLAS_RECORD_MAX_TTL_MS",
        "summary": ""
      },
      {
        "name": "ATLAS_RECORD_MIN_TTL_MS",
        "kind": "constant",
        "signature": "ATLAS_RECORD_MIN_TTL_MS",
        "summary": ""
      },
      {
        "name": "ATLAS_VISIBILITY",
        "kind": "constant",
        "signature": "ATLAS_VISIBILITY",
        "summary": ""
      },
      {
        "name": "AtlasRecordV1",
        "kind": "constant",
        "signature": "AtlasRecordV1",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/atlas/BoundedServerAtlasProvider",
    "path": "engine/reference/network/realm/atlas/BoundedServerAtlasProvider.md",
    "source": "engine/network/realm/atlas/BoundedServerAtlasProvider.js",
    "import": "/engine/network/realm/atlas/BoundedServerAtlasProvider.js",
    "sourceHash": "c23a9b910b3435ee93115c3033d0f47e137ca835509f748bbf958ca9fb9fb481",
    "summary": "Optional opaque V3 Atlas provider matching the bounded ephemeral server contract.",
    "exports": [
      {
        "name": "BoundedServerAtlasProvider",
        "kind": "class",
        "signature": "class BoundedServerAtlasProvider",
        "summary": ""
      },
      {
        "name": "deriveAtlasScopeTag",
        "kind": "function",
        "signature": "async deriveAtlasScopeTag(scopeKey)",
        "summary": ""
      },
      {
        "name": "createServerAtlasAdvertisement",
        "kind": "function",
        "signature": "async createServerAtlasAdvertisement(record, { scopeKey, signer, issuedAt = Math.floor(Date.now()",
        "summary": "Build the exact opaque advertisement accepted by the additive V3 server."
      },
      {
        "name": "verifyServerAtlasAdvertisement",
        "kind": "function",
        "signature": "async verifyServerAtlasAdvertisement(record, { now = Math.floor(Date.now()",
        "summary": ""
      },
      {
        "name": "openServerAtlasAdvertisement",
        "kind": "function",
        "signature": "async openServerAtlasAdvertisement(advertisement, { scopeKey, now = Date.now()",
        "summary": "Verify and decrypt one V3 envelope without trusting the server that stored it."
      },
      {
        "name": "SERVER_ATLAS_ADVERTISEMENT_FORMAT",
        "kind": "constant",
        "signature": "SERVER_ATLAS_ADVERTISEMENT_FORMAT",
        "summary": ""
      },
      {
        "name": "SERVER_ATLAS_MAX_TTL_SECONDS",
        "kind": "constant",
        "signature": "SERVER_ATLAS_MAX_TTL_SECONDS",
        "summary": ""
      },
      {
        "name": "SERVER_ATLAS_MAX_PAYLOAD_BYTES",
        "kind": "constant",
        "signature": "SERVER_ATLAS_MAX_PAYLOAD_BYTES",
        "summary": ""
      },
      {
        "name": "SERVER_ATLAS_MAX_QUERY_RECORDS",
        "kind": "constant",
        "signature": "SERVER_ATLAS_MAX_QUERY_RECORDS",
        "summary": ""
      },
      {
        "name": "BoundedAtlasTransportV1",
        "kind": "constant",
        "signature": "BoundedAtlasTransportV1",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/atlas/index",
    "path": "engine/reference/network/realm/atlas/index.md",
    "source": "engine/network/realm/atlas/index.js",
    "import": "/engine/network/realm/atlas/index.js",
    "sourceHash": "7a6ad56d9368a220befb2eb08c82b3149194ef20ac2c29c2db271dee2b3eccab",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/authority/AuthorityHandoff",
    "path": "engine/reference/network/realm/authority/AuthorityHandoff.md",
    "source": "engine/network/realm/authority/AuthorityHandoff.js",
    "import": "/engine/network/realm/authority/AuthorityHandoff.js",
    "sourceHash": "ae55204b2f378b8a1997a29cd2e1c42efb192c1163c1d7865becc4b3da7dbef6",
    "summary": "Checkpoint-backed, signed authority handoff state machine.",
    "exports": [
      {
        "name": "AuthorityHandoffCoordinator",
        "kind": "class",
        "signature": "class AuthorityHandoffCoordinator",
        "summary": ""
      },
      {
        "name": "createAuthorityHandoffMessage",
        "kind": "function",
        "signature": "async createAuthorityHandoffMessage(input, signer)",
        "summary": ""
      },
      {
        "name": "verifyAuthorityHandoffMessage",
        "kind": "function",
        "signature": "async verifyAuthorityHandoffMessage(message, options = {})",
        "summary": ""
      },
      {
        "name": "AUTHORITY_HANDOFF_FORMAT",
        "kind": "constant",
        "signature": "AUTHORITY_HANDOFF_FORMAT",
        "summary": ""
      },
      {
        "name": "AUTHORITY_HANDOFF_STAGE",
        "kind": "constant",
        "signature": "AUTHORITY_HANDOFF_STAGE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/authority/AuthorityLease",
    "path": "engine/reference/network/realm/authority/AuthorityLease.md",
    "source": "engine/network/realm/authority/AuthorityLease.js",
    "import": "/engine/network/realm/authority/AuthorityLease.js",
    "sourceHash": "44c31cf512d713e4fd0e5326c4469ed4fd4bcc69bcfd207c2426473b90772e69",
    "summary": "Signed, fenced authority leases for semantic Realm state. Leases are explicit records. They never confer authority merely because a peer has a connection, hosts a transport, or possesses a Capsule. Every mutation must present the active lease ID and its monotonically increasing fencing token.",
    "exports": [
      {
        "name": "createAuthorityLease",
        "kind": "function",
        "signature": "async createAuthorityLease(input, signer)",
        "summary": ""
      },
      {
        "name": "renewAuthorityLease",
        "kind": "function",
        "signature": "async renewAuthorityLease(previous, input, signer)",
        "summary": ""
      },
      {
        "name": "verifyAuthorityLease",
        "kind": "function",
        "signature": "async verifyAuthorityLease(lease, options = {})",
        "summary": ""
      },
      {
        "name": "createAuthorityRevocation",
        "kind": "function",
        "signature": "async createAuthorityRevocation(input, signer)",
        "summary": ""
      },
      {
        "name": "verifyAuthorityRevocation",
        "kind": "function",
        "signature": "async verifyAuthorityRevocation(record, options = {})",
        "summary": ""
      },
      {
        "name": "AUTHORITY_LEASE_FORMAT",
        "kind": "constant",
        "signature": "AUTHORITY_LEASE_FORMAT",
        "summary": ""
      },
      {
        "name": "AUTHORITY_REVOCATION_FORMAT",
        "kind": "constant",
        "signature": "AUTHORITY_REVOCATION_FORMAT",
        "summary": ""
      },
      {
        "name": "AUTHORITY_POLICY",
        "kind": "constant",
        "signature": "AUTHORITY_POLICY",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/authority/AuthorityLeaseManager",
    "path": "engine/reference/network/realm/authority/AuthorityLeaseManager.md",
    "source": "engine/network/realm/authority/AuthorityLeaseManager.js",
    "import": "/engine/network/realm/authority/AuthorityLeaseManager.js",
    "sourceHash": "ee868e22afb858732a47acf02c832fa7a0e6202d7f77fbb956f6d2692bc90cf7",
    "summary": "In-memory authority decision engine; persistence is supplied by the caller.",
    "exports": [
      {
        "name": "AuthorityLeaseManager",
        "kind": "class",
        "signature": "class AuthorityLeaseManager",
        "summary": "In-memory authority decision engine; persistence is supplied by the caller."
      },
      {
        "name": "createAuthorityLeaseManager",
        "kind": "function",
        "signature": "createAuthorityLeaseManager(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/authority/HostMigrationQuorum",
    "path": "engine/reference/network/realm/authority/HostMigrationQuorum.md",
    "source": "engine/network/realm/authority/HostMigrationQuorum.js",
    "import": "/engine/network/realm/authority/HostMigrationQuorum.js",
    "sourceHash": "4e6a8c275c4b3080cc155b94e14a0f64f1ae480f70d0a166642b0281dd91a6ff",
    "summary": "",
    "exports": [
      {
        "name": "HostMigrationQuorum",
        "kind": "class",
        "signature": "class HostMigrationQuorum",
        "summary": ""
      },
      {
        "name": "createHostMigrationVote",
        "kind": "function",
        "signature": "async createHostMigrationVote(input, signer)",
        "summary": ""
      },
      {
        "name": "verifyHostMigrationVote",
        "kind": "function",
        "signature": "async verifyHostMigrationVote(vote, authorizeVoter = null)",
        "summary": ""
      },
      {
        "name": "HOST_MIGRATION_VOTE_FORMAT",
        "kind": "constant",
        "signature": "HOST_MIGRATION_VOTE_FORMAT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/authority/SemanticReplication",
    "path": "engine/reference/network/realm/authority/SemanticReplication.md",
    "source": "engine/network/realm/authority/SemanticReplication.js",
    "import": "/engine/network/realm/authority/SemanticReplication.js",
    "sourceHash": "e6d7181a8e85d9e9155637e3f6bcc83a63fed47bfa22edd63936a498ee7dfd6e",
    "summary": "Semantic replication records, idempotent inboxes, resumable outboxes, and divergence evidence.",
    "exports": [
      {
        "name": "SemanticInbox",
        "kind": "class",
        "signature": "class SemanticInbox",
        "summary": ""
      },
      {
        "name": "SemanticOutbox",
        "kind": "class",
        "signature": "class SemanticOutbox",
        "summary": ""
      },
      {
        "name": "createSemanticRecord",
        "kind": "function",
        "signature": "createSemanticRecord(input, signer)",
        "summary": ""
      },
      {
        "name": "createSemanticDelta",
        "kind": "function",
        "signature": "createSemanticDelta(input, signer)",
        "summary": ""
      },
      {
        "name": "createSemanticCheckpoint",
        "kind": "function",
        "signature": "createSemanticCheckpoint(input, signer)",
        "summary": ""
      },
      {
        "name": "verifySemanticEnvelope",
        "kind": "function",
        "signature": "async verifySemanticEnvelope(value, options = {})",
        "summary": ""
      },
      {
        "name": "detectSemanticDivergence",
        "kind": "function",
        "signature": "detectSemanticDivergence(local, remote)",
        "summary": ""
      },
      {
        "name": "SEMANTIC_RECORD_FORMAT",
        "kind": "constant",
        "signature": "SEMANTIC_RECORD_FORMAT",
        "summary": ""
      },
      {
        "name": "SEMANTIC_DELTA_FORMAT",
        "kind": "constant",
        "signature": "SEMANTIC_DELTA_FORMAT",
        "summary": ""
      },
      {
        "name": "SEMANTIC_CHECKPOINT_FORMAT",
        "kind": "constant",
        "signature": "SEMANTIC_CHECKPOINT_FORMAT",
        "summary": ""
      },
      {
        "name": "SEMANTIC_ACK_FORMAT",
        "kind": "constant",
        "signature": "SEMANTIC_ACK_FORMAT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/authority/index",
    "path": "engine/reference/network/realm/authority/index.md",
    "source": "engine/network/realm/authority/index.js",
    "import": "/engine/network/realm/authority/index.js",
    "sourceHash": "a1c9ae805d303835fcae9dbea8354a492fc2fed104bac3554b539b9fdb5d5eee",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/branches/BranchStorage",
    "path": "engine/reference/network/realm/branches/BranchStorage.md",
    "source": "engine/network/realm/branches/BranchStorage.js",
    "import": "/engine/network/realm/branches/BranchStorage.js",
    "sourceHash": "b31f60b9064534ebf4808bd42bd9e88e25b6a5e9975599ae16bcd74ba961d6ae",
    "summary": "Bounded persistent storage adapter for branch metadata and offline queues. Capsule/blob bytes remain in the shared RealmContentStore; this adapter never duplicates content-addressed storage.",
    "exports": [
      {
        "name": "RealmBranchStorage",
        "kind": "class",
        "signature": "class RealmBranchStorage",
        "summary": "LocalStorage-compatible persistent key/value adapter."
      },
      {
        "name": "prepareRealmBranchStorageRecord",
        "kind": "function",
        "signature": "prepareRealmBranchStorageRecord(record, label = 'branch storage record')",
        "summary": ""
      },
      {
        "name": "REALM_BRANCH_STORAGE_SCHEMA",
        "kind": "constant",
        "signature": "REALM_BRANCH_STORAGE_SCHEMA",
        "summary": ""
      },
      {
        "name": "REALM_BRANCH_STORAGE_VERSION",
        "kind": "constant",
        "signature": "REALM_BRANCH_STORAGE_VERSION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/branches/MergeProposal",
    "path": "engine/reference/network/realm/branches/MergeProposal.md",
    "source": "engine/network/realm/branches/MergeProposal.js",
    "import": "/engine/network/realm/branches/MergeProposal.js",
    "sourceHash": "bb584d590f8a95631131d780526dfc05b0da89f197365ccb930289ea9b37fd35",
    "summary": "MergeProposalV1 contracts, dependency-safe decisions, and merge commits.",
    "exports": [
      {
        "name": "createMergeProposal",
        "kind": "function",
        "signature": "async createMergeProposal(input, signer)",
        "summary": "Create a signed MergeProposalV1 from a semantic comparison."
      },
      {
        "name": "verifyMergeProposal",
        "kind": "function",
        "signature": "async verifyMergeProposal(proposal, options = {})",
        "summary": "Verify proposal signature, IDs, dependency DAG, authorization, and expiry."
      },
      {
        "name": "buildDefaultMergeDecisions",
        "kind": "function",
        "signature": "buildDefaultMergeDecisions(proposal)",
        "summary": "Default policy: accept clean changes and retain conflicts on the source branch."
      },
      {
        "name": "validateMergeDecisions",
        "kind": "function",
        "signature": "validateMergeDecisions(proposal, decisions)",
        "summary": ""
      },
      {
        "name": "applyMergeProposal",
        "kind": "function",
        "signature": "async applyMergeProposal({ proposal, decisions, base, mine, theirs }, options = {})",
        "summary": "Apply accepted changes to mine; rejected/conflicting source work is untouched."
      },
      {
        "name": "createMergeCommit",
        "kind": "function",
        "signature": "async createMergeCommit(input, signer, options = {})",
        "summary": "Apply a proposal and publish the decision as a signed Chronicle event. Any rejected work receives a stable signed branch rooted at the source head."
      },
      {
        "name": "verifyMergeCommit",
        "kind": "function",
        "signature": "async verifyMergeCommit(event, options = {})",
        "summary": ""
      },
      {
        "name": "MERGE_PROPOSAL_FORMAT",
        "kind": "constant",
        "signature": "MERGE_PROPOSAL_FORMAT",
        "summary": ""
      },
      {
        "name": "MERGE_COMMIT_PAYLOAD_FORMAT",
        "kind": "constant",
        "signature": "MERGE_COMMIT_PAYLOAD_FORMAT",
        "summary": ""
      },
      {
        "name": "MergeProposalV1",
        "kind": "constant",
        "signature": "MergeProposalV1",
        "summary": "Public MergeProposalV1 contract."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/branches/OfflineOperationQueue",
    "path": "engine/reference/network/realm/branches/OfflineOperationQueue.md",
    "source": "engine/network/realm/branches/OfflineOperationQueue.js",
    "import": "/engine/network/realm/branches/OfflineOperationQueue.js",
    "sourceHash": "58fd5ee0038e0ef8536d300fc0e074b86ca72f19512c2d64f4f172efe1db2f6d",
    "summary": "Persistent, causal, resumable queue for signed offline Chronicle events.",
    "exports": [
      {
        "name": "OfflineOperationQueue",
        "kind": "class",
        "signature": "class OfflineOperationQueue",
        "summary": ""
      },
      {
        "name": "OFFLINE_QUEUE_FORMAT",
        "kind": "constant",
        "signature": "OFFLINE_QUEUE_FORMAT",
        "summary": ""
      },
      {
        "name": "OFFLINE_OPERATION_STATUS",
        "kind": "constant",
        "signature": "OFFLINE_OPERATION_STATUS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/branches/RealmBranch",
    "path": "engine/reference/network/realm/branches/RealmBranch.md",
    "source": "engine/network/realm/branches/RealmBranch.js",
    "import": "/engine/network/realm/branches/RealmBranch.js",
    "sourceHash": "81974cf9607263cd53514c7f214beeb34bb830b09bc1eb7d88db4f9f0945efec",
    "summary": "RealmBranchV1 identity, ownership, signed-head chains, and branch DAGs.",
    "exports": [
      {
        "name": "RealmBranchDAG",
        "kind": "class",
        "signature": "class RealmBranchDAG",
        "summary": "Verified in-memory projection of branch descriptors and RealmBranchRefV1 head chains. Persistence is delegated to BranchStorage.js."
      },
      {
        "name": "createRealmBranch",
        "kind": "function",
        "signature": "async createRealmBranch(input, signer)",
        "summary": "Create a stable RealmBranchV1. The label is intentionally excluded from the identity derivation, so renaming or alias changes cannot change branch IDs."
      },
      {
        "name": "verifyRealmBranch",
        "kind": "function",
        "signature": "async verifyRealmBranch(branch, options = {})",
        "summary": "Verify branch identity, controller signature, and optional owner authority."
      },
      {
        "name": "REALM_BRANCH_FORMAT",
        "kind": "constant",
        "signature": "REALM_BRANCH_FORMAT",
        "summary": ""
      },
      {
        "name": "REALM_BRANCH_PURPOSE",
        "kind": "constant",
        "signature": "REALM_BRANCH_PURPOSE",
        "summary": ""
      },
      {
        "name": "RealmBranchV1",
        "kind": "constant",
        "signature": "RealmBranchV1",
        "summary": "Public RealmBranchV1 contract."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/branches/RealmBranchCrypto",
    "path": "engine/reference/network/realm/branches/RealmBranchCrypto.md",
    "source": "engine/network/realm/branches/RealmBranchCrypto.js",
    "import": "/engine/network/realm/branches/RealmBranchCrypto.js",
    "sourceHash": "3819cc3258e549d3a2a6878d82f7fec78c0224437bc4a7052c8b0124d7707762",
    "summary": "Shared signed-record plumbing for Realm branch contracts.",
    "exports": [
      {
        "name": "withoutSignedFields",
        "kind": "function",
        "signature": "withoutSignedFields(record, idField)",
        "summary": ""
      },
      {
        "name": "signBranchRecord",
        "kind": "function",
        "signature": "async signBranchRecord(body, { idField, format }, signer)",
        "summary": ""
      },
      {
        "name": "verifyBranchRecord",
        "kind": "function",
        "signature": "async verifyBranchRecord(record, { idField, format })",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/branches/SemanticAdapters",
    "path": "engine/reference/network/realm/branches/SemanticAdapters.md",
    "source": "engine/network/realm/branches/SemanticAdapters.js",
    "import": "/engine/network/realm/branches/SemanticAdapters.js",
    "sourceHash": "aa923642ed9f2d0174372d2434a3e83744ba7ac58bb3312ba0a5cf9588bbf413",
    "summary": "Explicit semantic and confluence-proven CRDT adapters for three-way merge.",
    "exports": [
      {
        "name": "SemanticAdapterRegistry",
        "kind": "class",
        "signature": "class SemanticAdapterRegistry",
        "summary": ""
      },
      {
        "name": "normalizeSemanticSnapshot",
        "kind": "function",
        "signature": "normalizeSemanticSnapshot(value)",
        "summary": ""
      },
      {
        "name": "hashSemanticChange",
        "kind": "function",
        "signature": "async hashSemanticChange(change)",
        "summary": ""
      },
      {
        "name": "createDefaultSemanticAdapterRegistry",
        "kind": "function",
        "signature": "createDefaultSemanticAdapterRegistry()",
        "summary": ""
      },
      {
        "name": "compareSemanticSnapshots",
        "kind": "function",
        "signature": "async compareSemanticSnapshots({ base, mine, theirs }, registry = createDefaultSemanticAdapterRegistry()",
        "summary": "Produce a deterministic base/mine/theirs semantic comparison."
      },
      {
        "name": "applySemanticChange",
        "kind": "function",
        "signature": "applySemanticChange(snapshot, change, selected, registry)",
        "summary": ""
      },
      {
        "name": "orderSemanticChanges",
        "kind": "function",
        "signature": "orderSemanticChanges(changes)",
        "summary": ""
      },
      {
        "name": "SEMANTIC_COMPARISON_FORMAT",
        "kind": "constant",
        "signature": "SEMANTIC_COMPARISON_FORMAT",
        "summary": ""
      },
      {
        "name": "REALM_MAP_RECORD_TYPE",
        "kind": "constant",
        "signature": "REALM_MAP_RECORD_TYPE",
        "summary": ""
      },
      {
        "name": "REALM_GSET_RECORD_TYPE",
        "kind": "constant",
        "signature": "REALM_GSET_RECORD_TYPE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/branches/index",
    "path": "engine/reference/network/realm/branches/index.md",
    "source": "engine/network/realm/branches/index.js",
    "import": "/engine/network/realm/branches/index.js",
    "sourceHash": "ded2e810f543806e25c3c0024cb717843da05609cdcd061e61f811ce36f3934a",
    "summary": "",
    "exports": [
      {
        "name": "MERGE_COMMIT_PAYLOAD_FORMAT",
        "kind": "re-export",
        "signature": "MERGE_COMMIT_PAYLOAD_FORMAT",
        "summary": ""
      },
      {
        "name": "MERGE_PROPOSAL_FORMAT",
        "kind": "re-export",
        "signature": "MERGE_PROPOSAL_FORMAT",
        "summary": ""
      },
      {
        "name": "MergeProposalV1",
        "kind": "re-export",
        "signature": "MergeProposalV1",
        "summary": ""
      },
      {
        "name": "OFFLINE_OPERATION_STATUS",
        "kind": "re-export",
        "signature": "OFFLINE_OPERATION_STATUS",
        "summary": ""
      },
      {
        "name": "OFFLINE_QUEUE_FORMAT",
        "kind": "re-export",
        "signature": "OFFLINE_QUEUE_FORMAT",
        "summary": ""
      },
      {
        "name": "OfflineOperationQueue",
        "kind": "re-export",
        "signature": "OfflineOperationQueue",
        "summary": ""
      },
      {
        "name": "REALM_BRANCH_FORMAT",
        "kind": "re-export",
        "signature": "REALM_BRANCH_FORMAT",
        "summary": ""
      },
      {
        "name": "REALM_BRANCH_PURPOSE",
        "kind": "re-export",
        "signature": "REALM_BRANCH_PURPOSE",
        "summary": ""
      },
      {
        "name": "REALM_GSET_RECORD_TYPE",
        "kind": "re-export",
        "signature": "REALM_GSET_RECORD_TYPE",
        "summary": ""
      },
      {
        "name": "REALM_MAP_RECORD_TYPE",
        "kind": "re-export",
        "signature": "REALM_MAP_RECORD_TYPE",
        "summary": ""
      },
      {
        "name": "RealmBranchDAG",
        "kind": "re-export",
        "signature": "RealmBranchDAG",
        "summary": ""
      },
      {
        "name": "RealmBranchStorage",
        "kind": "re-export",
        "signature": "RealmBranchStorage",
        "summary": ""
      },
      {
        "name": "RealmBranchV1",
        "kind": "re-export",
        "signature": "RealmBranchV1",
        "summary": ""
      },
      {
        "name": "SEMANTIC_COMPARISON_FORMAT",
        "kind": "re-export",
        "signature": "SEMANTIC_COMPARISON_FORMAT",
        "summary": ""
      },
      {
        "name": "SemanticAdapterRegistry",
        "kind": "re-export",
        "signature": "SemanticAdapterRegistry",
        "summary": ""
      },
      {
        "name": "applyMergeProposal",
        "kind": "re-export",
        "signature": "applyMergeProposal",
        "summary": ""
      },
      {
        "name": "applySemanticChange",
        "kind": "re-export",
        "signature": "applySemanticChange",
        "summary": ""
      },
      {
        "name": "buildDefaultMergeDecisions",
        "kind": "re-export",
        "signature": "buildDefaultMergeDecisions",
        "summary": ""
      },
      {
        "name": "compareSemanticSnapshots",
        "kind": "re-export",
        "signature": "compareSemanticSnapshots",
        "summary": ""
      },
      {
        "name": "createDefaultSemanticAdapterRegistry",
        "kind": "re-export",
        "signature": "createDefaultSemanticAdapterRegistry",
        "summary": ""
      },
      {
        "name": "createMergeCommit",
        "kind": "re-export",
        "signature": "createMergeCommit",
        "summary": ""
      },
      {
        "name": "createMergeProposal",
        "kind": "re-export",
        "signature": "createMergeProposal",
        "summary": ""
      },
      {
        "name": "createRealmBranch",
        "kind": "re-export",
        "signature": "createRealmBranch",
        "summary": ""
      },
      {
        "name": "hashSemanticChange",
        "kind": "re-export",
        "signature": "hashSemanticChange",
        "summary": ""
      },
      {
        "name": "normalizeSemanticSnapshot",
        "kind": "re-export",
        "signature": "normalizeSemanticSnapshot",
        "summary": ""
      },
      {
        "name": "orderSemanticChanges",
        "kind": "re-export",
        "signature": "orderSemanticChanges",
        "summary": ""
      },
      {
        "name": "validateMergeDecisions",
        "kind": "re-export",
        "signature": "validateMergeDecisions",
        "summary": ""
      },
      {
        "name": "verifyMergeCommit",
        "kind": "re-export",
        "signature": "verifyMergeCommit",
        "summary": ""
      },
      {
        "name": "verifyMergeProposal",
        "kind": "re-export",
        "signature": "verifyMergeProposal",
        "summary": ""
      },
      {
        "name": "verifyRealmBranch",
        "kind": "re-export",
        "signature": "verifyRealmBranch",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/capsule/CapsuleAssembler",
    "path": "engine/reference/network/realm/capsule/CapsuleAssembler.md",
    "source": "engine/network/realm/capsule/CapsuleAssembler.js",
    "import": "/engine/network/realm/capsule/CapsuleAssembler.js",
    "sourceHash": "5845d9ade31c91e0ad3536426e7a3ac0b164ca4ef67f473d41949f2ea58d310d",
    "summary": "",
    "exports": [
      {
        "name": "CapsuleAssembler",
        "kind": "class",
        "signature": "class CapsuleAssembler",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/capsule/CapsuleMigration",
    "path": "engine/reference/network/realm/capsule/CapsuleMigration.md",
    "source": "engine/network/realm/capsule/CapsuleMigration.js",
    "import": "/engine/network/realm/capsule/CapsuleMigration.js",
    "sourceHash": "1e5281e4f306569349e4921d48cabcd96e25277d96e314c77d5df8558ea99b0f",
    "summary": "",
    "exports": [
      {
        "name": "CapsuleMigrationRegistry",
        "kind": "class",
        "signature": "class CapsuleMigrationRegistry",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/capsule/RealmBranchRef",
    "path": "engine/reference/network/realm/capsule/RealmBranchRef.md",
    "source": "engine/network/realm/capsule/RealmBranchRef.js",
    "import": "/engine/network/realm/capsule/RealmBranchRef.js",
    "sourceHash": "4815f0b7a1410d904324d3d2ef6fffbe83e6454d150e71bf1418bc7c23863f49",
    "summary": "",
    "exports": [
      {
        "name": "hashRealmBranchRef",
        "kind": "function",
        "signature": "async hashRealmBranchRef(ref)",
        "summary": ""
      },
      {
        "name": "createRealmBranchRef",
        "kind": "function",
        "signature": "async createRealmBranchRef(input, signer, previous = null)",
        "summary": ""
      },
      {
        "name": "verifyRealmBranchRef",
        "kind": "function",
        "signature": "async verifyRealmBranchRef(ref, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/capsule/RealmCapsule",
    "path": "engine/reference/network/realm/capsule/RealmCapsule.md",
    "source": "engine/network/realm/capsule/RealmCapsule.js",
    "import": "/engine/network/realm/capsule/RealmCapsule.js",
    "sourceHash": "cf6288b176a4ab9e8f3dd4777c03da32f61da78e840ea7ac0f63d3ebe1f5682e",
    "summary": "Convert the output of PackageVerifier.parseAny()/verify() into the package input accepted by buildRealmCapsule. Package verification stays owned by the existing package stack; this adapter only binds its verified artifact bytes and roots into the Capsule.",
    "exports": [
      {
        "name": "toUint8Array",
        "kind": "function",
        "signature": "toUint8Array(value)",
        "summary": ""
      },
      {
        "name": "taggedSha256",
        "kind": "function",
        "signature": "taggedSha256(hex)",
        "summary": ""
      },
      {
        "name": "adaptVerifiedPackageArtifact",
        "kind": "function",
        "signature": "async adaptVerifiedPackageArtifact({ artifactBytes, parsedPackage, verification } = {})",
        "summary": "Convert the output of PackageVerifier.parseAny()/verify() into the package input accepted by buildRealmCapsule. Package verification stays owned by the existing package stack; this adapter only binds its verified artifact bytes and roots into the Capsule."
      },
      {
        "name": "computeCapsuleRoot",
        "kind": "function",
        "signature": "async computeCapsuleRoot(body)",
        "summary": ""
      },
      {
        "name": "prepareRealmBlob",
        "kind": "function",
        "signature": "async prepareRealmBlob(input, options = {})",
        "summary": ""
      },
      {
        "name": "buildRealmCapsule",
        "kind": "function",
        "signature": "async buildRealmCapsule(input, signer, options = {})",
        "summary": ""
      },
      {
        "name": "verifyRealmCapsule",
        "kind": "function",
        "signature": "async verifyRealmCapsule(capsule, options = {})",
        "summary": ""
      },
      {
        "name": "verifyBlobAgainstDescriptor",
        "kind": "function",
        "signature": "async verifyBlobAgainstDescriptor(bytesLike, descriptor)",
        "summary": ""
      },
      {
        "name": "bytesToBase64",
        "kind": "function",
        "signature": "bytesToBase64(bytes)",
        "summary": ""
      },
      {
        "name": "base64ToBytes",
        "kind": "function",
        "signature": "base64ToBytes(value)",
        "summary": ""
      },
      {
        "name": "createOfflineCapsuleExport",
        "kind": "function",
        "signature": "async createOfflineCapsuleExport(capsule, resolveBlob, options = {})",
        "summary": ""
      },
      {
        "name": "verifyOfflineCapsuleExport",
        "kind": "function",
        "signature": "async verifyOfflineCapsuleExport(bundle, options = {})",
        "summary": ""
      },
      {
        "name": "reassembleBlobChunks",
        "kind": "function",
        "signature": "reassembleBlobChunks(chunks)",
        "summary": ""
      },
      {
        "name": "RealmCapsuleV1",
        "kind": "constant",
        "signature": "RealmCapsuleV1",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/capsule/RealmCapsuleSchema",
    "path": "engine/reference/network/realm/capsule/RealmCapsuleSchema.md",
    "source": "engine/network/realm/capsule/RealmCapsuleSchema.js",
    "import": "/engine/network/realm/capsule/RealmCapsuleSchema.js",
    "sourceHash": "aa30df2ec1362e94290878285521e1f05520bce436be2e1ecf479d6416605e20",
    "summary": "",
    "exports": [
      {
        "name": "RealmCapsuleValidationError",
        "kind": "class",
        "signature": "class RealmCapsuleValidationError extends TypeError",
        "summary": ""
      },
      {
        "name": "normalizeRights",
        "kind": "function",
        "signature": "normalizeRights(value = {})",
        "summary": ""
      },
      {
        "name": "normalizeProvenance",
        "kind": "function",
        "signature": "normalizeProvenance(value = {})",
        "summary": ""
      },
      {
        "name": "normalizeCompatibility",
        "kind": "function",
        "signature": "normalizeCompatibility(value = {})",
        "summary": ""
      },
      {
        "name": "normalizeCapsuleBody",
        "kind": "function",
        "signature": "normalizeCapsuleBody(value)",
        "summary": ""
      },
      {
        "name": "validateRealmCapsuleShape",
        "kind": "function",
        "signature": "validateRealmCapsuleShape(value, { requireSignature = true } = {})",
        "summary": ""
      },
      {
        "name": "validateDependencyGraph",
        "kind": "function",
        "signature": "validateDependencyGraph(records, options = {})",
        "summary": ""
      },
      {
        "name": "isContentId",
        "kind": "function",
        "signature": "isContentId(value)",
        "summary": ""
      },
      {
        "name": "contentIdHex",
        "kind": "function",
        "signature": "contentIdHex(value)",
        "summary": ""
      },
      {
        "name": "deepFreeze",
        "kind": "function",
        "signature": "deepFreeze(value)",
        "summary": ""
      },
      {
        "name": "REALM_CAPSULE_FORMAT",
        "kind": "constant",
        "signature": "REALM_CAPSULE_FORMAT",
        "summary": ""
      },
      {
        "name": "REALM_CAPSULE_SCHEMA_VERSION",
        "kind": "constant",
        "signature": "REALM_CAPSULE_SCHEMA_VERSION",
        "summary": ""
      },
      {
        "name": "REALM_CAPSULE_EXPORT_FORMAT",
        "kind": "constant",
        "signature": "REALM_CAPSULE_EXPORT_FORMAT",
        "summary": ""
      },
      {
        "name": "REALM_BRANCH_REF_FORMAT",
        "kind": "constant",
        "signature": "REALM_BRANCH_REF_FORMAT",
        "summary": ""
      },
      {
        "name": "DEPENDENCY_CLASSES",
        "kind": "constant",
        "signature": "DEPENDENCY_CLASSES",
        "summary": ""
      },
      {
        "name": "DEPENDENCY_KINDS",
        "kind": "constant",
        "signature": "DEPENDENCY_KINDS",
        "summary": ""
      },
      {
        "name": "RIGHTS_DECISIONS",
        "kind": "constant",
        "signature": "RIGHTS_DECISIONS",
        "summary": ""
      },
      {
        "name": "CAPSULE_LIMITS",
        "kind": "constant",
        "signature": "CAPSULE_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/capsule/index",
    "path": "engine/reference/network/realm/capsule/index.md",
    "source": "engine/network/realm/capsule/index.js",
    "import": "/engine/network/realm/capsule/index.js",
    "sourceHash": "bc88b01280f5c828fd86b354cb7ebacca413d55bbe99612f2eb1cb4048401a43",
    "summary": "",
    "exports": [
      {
        "name": "CAPSULE_LIMITS",
        "kind": "re-export",
        "signature": "CAPSULE_LIMITS",
        "summary": ""
      },
      {
        "name": "CapsuleAssembler",
        "kind": "re-export",
        "signature": "CapsuleAssembler",
        "summary": ""
      },
      {
        "name": "CapsuleMigrationRegistry",
        "kind": "re-export",
        "signature": "CapsuleMigrationRegistry",
        "summary": ""
      },
      {
        "name": "DEPENDENCY_CLASSES",
        "kind": "re-export",
        "signature": "DEPENDENCY_CLASSES",
        "summary": ""
      },
      {
        "name": "DEPENDENCY_KINDS",
        "kind": "re-export",
        "signature": "DEPENDENCY_KINDS",
        "summary": ""
      },
      {
        "name": "REALM_BRANCH_REF_FORMAT",
        "kind": "re-export",
        "signature": "REALM_BRANCH_REF_FORMAT",
        "summary": ""
      },
      {
        "name": "REALM_CAPSULE_EXPORT_FORMAT",
        "kind": "re-export",
        "signature": "REALM_CAPSULE_EXPORT_FORMAT",
        "summary": ""
      },
      {
        "name": "REALM_CAPSULE_FORMAT",
        "kind": "re-export",
        "signature": "REALM_CAPSULE_FORMAT",
        "summary": ""
      },
      {
        "name": "REALM_CAPSULE_SCHEMA_VERSION",
        "kind": "re-export",
        "signature": "REALM_CAPSULE_SCHEMA_VERSION",
        "summary": ""
      },
      {
        "name": "RIGHTS_DECISIONS",
        "kind": "re-export",
        "signature": "RIGHTS_DECISIONS",
        "summary": ""
      },
      {
        "name": "RealmCapsuleV1",
        "kind": "re-export",
        "signature": "RealmCapsuleV1",
        "summary": ""
      },
      {
        "name": "RealmCapsuleValidationError",
        "kind": "re-export",
        "signature": "RealmCapsuleValidationError",
        "summary": ""
      },
      {
        "name": "adaptVerifiedPackageArtifact",
        "kind": "re-export",
        "signature": "adaptVerifiedPackageArtifact",
        "summary": ""
      },
      {
        "name": "base64ToBytes",
        "kind": "re-export",
        "signature": "base64ToBytes",
        "summary": ""
      },
      {
        "name": "buildRealmCapsule",
        "kind": "re-export",
        "signature": "buildRealmCapsule",
        "summary": ""
      },
      {
        "name": "bytesToBase64",
        "kind": "re-export",
        "signature": "bytesToBase64",
        "summary": ""
      },
      {
        "name": "computeCapsuleRoot",
        "kind": "re-export",
        "signature": "computeCapsuleRoot",
        "summary": ""
      },
      {
        "name": "contentIdHex",
        "kind": "re-export",
        "signature": "contentIdHex",
        "summary": ""
      },
      {
        "name": "createOfflineCapsuleExport",
        "kind": "re-export",
        "signature": "createOfflineCapsuleExport",
        "summary": ""
      },
      {
        "name": "createRealmBranchRef",
        "kind": "re-export",
        "signature": "createRealmBranchRef",
        "summary": ""
      },
      {
        "name": "deepFreeze",
        "kind": "re-export",
        "signature": "deepFreeze",
        "summary": ""
      },
      {
        "name": "hashRealmBranchRef",
        "kind": "re-export",
        "signature": "hashRealmBranchRef",
        "summary": ""
      },
      {
        "name": "isContentId",
        "kind": "re-export",
        "signature": "isContentId",
        "summary": ""
      },
      {
        "name": "normalizeCapsuleBody",
        "kind": "re-export",
        "signature": "normalizeCapsuleBody",
        "summary": ""
      },
      {
        "name": "normalizeCompatibility",
        "kind": "re-export",
        "signature": "normalizeCompatibility",
        "summary": ""
      },
      {
        "name": "normalizeProvenance",
        "kind": "re-export",
        "signature": "normalizeProvenance",
        "summary": ""
      },
      {
        "name": "normalizeRights",
        "kind": "re-export",
        "signature": "normalizeRights",
        "summary": ""
      },
      {
        "name": "prepareRealmBlob",
        "kind": "re-export",
        "signature": "prepareRealmBlob",
        "summary": ""
      },
      {
        "name": "reassembleBlobChunks",
        "kind": "re-export",
        "signature": "reassembleBlobChunks",
        "summary": ""
      },
      {
        "name": "taggedSha256",
        "kind": "re-export",
        "signature": "taggedSha256",
        "summary": ""
      },
      {
        "name": "toUint8Array",
        "kind": "re-export",
        "signature": "toUint8Array",
        "summary": ""
      },
      {
        "name": "validateDependencyGraph",
        "kind": "re-export",
        "signature": "validateDependencyGraph",
        "summary": ""
      },
      {
        "name": "validateRealmCapsuleShape",
        "kind": "re-export",
        "signature": "validateRealmCapsuleShape",
        "summary": ""
      },
      {
        "name": "verifyBlobAgainstDescriptor",
        "kind": "re-export",
        "signature": "verifyBlobAgainstDescriptor",
        "summary": ""
      },
      {
        "name": "verifyOfflineCapsuleExport",
        "kind": "re-export",
        "signature": "verifyOfflineCapsuleExport",
        "summary": ""
      },
      {
        "name": "verifyRealmBranchRef",
        "kind": "re-export",
        "signature": "verifyRealmBranchRef",
        "summary": ""
      },
      {
        "name": "verifyRealmCapsule",
        "kind": "re-export",
        "signature": "verifyRealmCapsule",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/chronicle/RealmChronicle",
    "path": "engine/reference/network/realm/chronicle/RealmChronicle.md",
    "source": "engine/network/realm/chronicle/RealmChronicle.js",
    "import": "/engine/network/realm/chronicle/RealmChronicle.js",
    "sourceHash": "d4b40473f143c289ddfa944054b890f5307030cb1c92a1075dafd0e1b4ee40b5",
    "summary": "RealmChronicle.js — signed SHA-256 causal history for a Realm branch. Chronicle events contain semantic records and state-root transitions, not simulation ticks.  The implementation is storage-agnostic so the same verification code is used for local persistence, Capsule import, and peers.",
    "exports": [
      {
        "name": "RealmChronicle",
        "kind": "class",
        "signature": "class RealmChronicle",
        "summary": ""
      },
      {
        "name": "createChronicleEvent",
        "kind": "function",
        "signature": "async createChronicleEvent(input, signer)",
        "summary": "Create a complete signed Chronicle event."
      },
      {
        "name": "verifyChronicleEvent",
        "kind": "function",
        "signature": "async verifyChronicleEvent(event, options = {})",
        "summary": "Verify content hash, event hash, signer fingerprint, signature, and optional actor binding."
      },
      {
        "name": "verifyChronicle",
        "kind": "function",
        "signature": "async verifyChronicle(value, options = {})",
        "summary": "Verify and rebuild a complete Chronicle snapshot or event list."
      },
      {
        "name": "CHRONICLE_EVENT_FORMAT",
        "kind": "constant",
        "signature": "CHRONICLE_EVENT_FORMAT",
        "summary": ""
      },
      {
        "name": "CHRONICLE_FORMAT",
        "kind": "constant",
        "signature": "CHRONICLE_FORMAT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/chronicle/index",
    "path": "engine/reference/network/realm/chronicle/index.md",
    "source": "engine/network/realm/chronicle/index.js",
    "import": "/engine/network/realm/chronicle/index.js",
    "sourceHash": "fb1ffbec25619cc8f6fbeaea531419199116fb0be05a1541ee9a9d16b2b0cd63",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/contracts",
    "path": "engine/reference/network/realm/contracts.md",
    "source": "engine/network/realm/contracts.js",
    "import": "/engine/network/realm/contracts.js",
    "sourceHash": "41d3156962dd71b5d89b0401947cad140fa183d11a6b9f02628f29785aedde76",
    "summary": "Stable Realm Network V1 contract descriptors. Descriptors contain references to the concrete implementations. Importing this module does not create stores, links, providers, timers, or network connections.",
    "exports": [
      {
        "name": "RealmPassportV1",
        "kind": "constant",
        "signature": "RealmPassportV1",
        "summary": ""
      },
      {
        "name": "RealmAddressV1",
        "kind": "constant",
        "signature": "RealmAddressV1",
        "summary": ""
      },
      {
        "name": "ChronicleEventV1",
        "kind": "constant",
        "signature": "ChronicleEventV1",
        "summary": ""
      },
      {
        "name": "RealmLinkV1",
        "kind": "constant",
        "signature": "RealmLinkV1",
        "summary": ""
      },
      {
        "name": "AuthorityLeaseV1",
        "kind": "constant",
        "signature": "AuthorityLeaseV1",
        "summary": ""
      },
      {
        "name": "AtlasRecordV1",
        "kind": "constant",
        "signature": "AtlasRecordV1",
        "summary": ""
      },
      {
        "name": "PresenceV1",
        "kind": "constant",
        "signature": "PresenceV1",
        "summary": ""
      },
      {
        "name": "ContinuityV1",
        "kind": "constant",
        "signature": "ContinuityV1",
        "summary": ""
      },
      {
        "name": "HealthSnapshotV1",
        "kind": "constant",
        "signature": "HealthSnapshotV1",
        "summary": ""
      },
      {
        "name": "REALM_NETWORK_PUBLIC_CONTRACTS_V1",
        "kind": "constant",
        "signature": "REALM_NETWORK_PUBLIC_CONTRACTS_V1",
        "summary": ""
      },
      {
        "name": "REALM_NETWORK_PUBLIC_CONTRACT_NAMES_V1",
        "kind": "constant",
        "signature": "REALM_NETWORK_PUBLIC_CONTRACT_NAMES_V1",
        "summary": ""
      },
      {
        "name": "AccordResultV1",
        "kind": "re-export",
        "signature": "AccordResultV1",
        "summary": ""
      },
      {
        "name": "AccordTaskV1",
        "kind": "re-export",
        "signature": "AccordTaskV1",
        "summary": ""
      },
      {
        "name": "CapabilityGrantV1",
        "kind": "re-export",
        "signature": "CapabilityGrantV1",
        "summary": ""
      },
      {
        "name": "ContextCapsuleV1",
        "kind": "re-export",
        "signature": "ContextCapsuleV1",
        "summary": ""
      },
      {
        "name": "GatePlanV1",
        "kind": "re-export",
        "signature": "GatePlanV1",
        "summary": ""
      },
      {
        "name": "MergeProposalV1",
        "kind": "re-export",
        "signature": "MergeProposalV1",
        "summary": ""
      },
      {
        "name": "OrganizationV1",
        "kind": "re-export",
        "signature": "OrganizationV1",
        "summary": ""
      },
      {
        "name": "RealmBranchV1",
        "kind": "re-export",
        "signature": "RealmBranchV1",
        "summary": ""
      },
      {
        "name": "RealmCapsuleV1",
        "kind": "re-export",
        "signature": "RealmCapsuleV1",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/gate/GatePlanV1",
    "path": "engine/reference/network/realm/gate/GatePlanV1.md",
    "source": "engine/network/realm/gate/GatePlanV1.js",
    "import": "/engine/network/realm/gate/GatePlanV1.js",
    "sourceHash": "7e169d4ade6166a1da781c988b99eb2cf2e036b672ad49cec655951582200b5d",
    "summary": "Fail-closed Realm entry planning over verified identity, content, and policy evidence.",
    "exports": [
      {
        "name": "RealmGate",
        "kind": "class",
        "signature": "class RealmGate",
        "summary": "Runtime Gate evaluator. It owns no persistence and performs no entry itself; it only emits a short-lived signed plan that Shield can enforce."
      },
      {
        "name": "deriveGateOutcome",
        "kind": "function",
        "signature": "deriveGateOutcome(checks)",
        "summary": ""
      },
      {
        "name": "createGatePlan",
        "kind": "function",
        "signature": "async createGatePlan(input, signer)",
        "summary": ""
      },
      {
        "name": "verifyGatePlan",
        "kind": "function",
        "signature": "async verifyGatePlan(record, options = {})",
        "summary": ""
      },
      {
        "name": "GATE_PLAN_V1_FORMAT",
        "kind": "constant",
        "signature": "GATE_PLAN_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "GATE_OUTCOME",
        "kind": "constant",
        "signature": "GATE_OUTCOME",
        "summary": ""
      },
      {
        "name": "GATE_ACTION",
        "kind": "constant",
        "signature": "GATE_ACTION",
        "summary": ""
      },
      {
        "name": "GATE_CHECK",
        "kind": "constant",
        "signature": "GATE_CHECK",
        "summary": ""
      },
      {
        "name": "GatePlanV1",
        "kind": "constant",
        "signature": "GatePlanV1",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/gate/index",
    "path": "engine/reference/network/realm/gate/index.md",
    "source": "engine/network/realm/gate/index.js",
    "import": "/engine/network/realm/gate/index.js",
    "sourceHash": "a3acad02ca0c1c652a8b8249afee26e0485b4195e05ba2d4f068c41d7c357c1b",
    "summary": "",
    "exports": [
      {
        "name": "GATE_ACTION",
        "kind": "re-export",
        "signature": "GATE_ACTION",
        "summary": ""
      },
      {
        "name": "GATE_CHECK",
        "kind": "re-export",
        "signature": "GATE_CHECK",
        "summary": ""
      },
      {
        "name": "GATE_OUTCOME",
        "kind": "re-export",
        "signature": "GATE_OUTCOME",
        "summary": ""
      },
      {
        "name": "GATE_PLAN_V1_FORMAT",
        "kind": "re-export",
        "signature": "GATE_PLAN_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "GatePlanV1",
        "kind": "re-export",
        "signature": "GatePlanV1",
        "summary": ""
      },
      {
        "name": "RealmGate",
        "kind": "re-export",
        "signature": "RealmGate",
        "summary": ""
      },
      {
        "name": "createGatePlan",
        "kind": "re-export",
        "signature": "createGatePlan",
        "summary": ""
      },
      {
        "name": "deriveGateOutcome",
        "kind": "re-export",
        "signature": "deriveGateOutcome",
        "summary": ""
      },
      {
        "name": "verifyGatePlan",
        "kind": "re-export",
        "signature": "verifyGatePlan",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/governance/CapabilityGrantV1",
    "path": "engine/reference/network/realm/governance/CapabilityGrantV1.md",
    "source": "engine/network/realm/governance/CapabilityGrantV1.js",
    "import": "/engine/network/realm/governance/CapabilityGrantV1.js",
    "sourceHash": "138f60c95a6e102b69ff02b033bba767f7217e6c1f4c97cd0e9ca1acd352176a",
    "summary": "Scoped, attenuable, delegable, revocable CapabilityGrantV1 contracts.",
    "exports": [
      {
        "name": "RealmCapabilityRegistry",
        "kind": "class",
        "signature": "class RealmCapabilityRegistry",
        "summary": "Runtime registry with online revocation and dynamic membership/role checks."
      },
      {
        "name": "createCapabilityGrant",
        "kind": "function",
        "signature": "async createCapabilityGrant(input, signer)",
        "summary": ""
      },
      {
        "name": "verifyCapabilityGrant",
        "kind": "function",
        "signature": "async verifyCapabilityGrant(record, options = {})",
        "summary": ""
      },
      {
        "name": "attenuateCapabilityGrant",
        "kind": "function",
        "signature": "async attenuateCapabilityGrant(parentRecord, input, signer)",
        "summary": ""
      },
      {
        "name": "recoverCapabilityGrant",
        "kind": "function",
        "signature": "async recoverCapabilityGrant(previousRecord, input, signer)",
        "summary": ""
      },
      {
        "name": "createCapabilityRevocation",
        "kind": "function",
        "signature": "async createCapabilityRevocation(input, signer)",
        "summary": ""
      },
      {
        "name": "verifyCapabilityRevocation",
        "kind": "function",
        "signature": "async verifyCapabilityRevocation(record, options = {})",
        "summary": ""
      },
      {
        "name": "createCapabilityAuditReceipt",
        "kind": "function",
        "signature": "async createCapabilityAuditReceipt(input, signer)",
        "summary": ""
      },
      {
        "name": "verifyCapabilityAuditReceipt",
        "kind": "function",
        "signature": "async verifyCapabilityAuditReceipt(record, options = {})",
        "summary": ""
      },
      {
        "name": "CAPABILITY_GRANT_V1_FORMAT",
        "kind": "constant",
        "signature": "CAPABILITY_GRANT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "CAPABILITY_REVOCATION_V1_FORMAT",
        "kind": "constant",
        "signature": "CAPABILITY_REVOCATION_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "CAPABILITY_AUDIT_RECEIPT_V1_FORMAT",
        "kind": "constant",
        "signature": "CAPABILITY_AUDIT_RECEIPT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "CapabilityGrantV1",
        "kind": "constant",
        "signature": "CapabilityGrantV1",
        "summary": "Public contract descriptor for callers that discover schemas dynamically."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/governance/GovernanceCrypto",
    "path": "engine/reference/network/realm/governance/GovernanceCrypto.md",
    "source": "engine/network/realm/governance/GovernanceCrypto.js",
    "import": "/engine/network/realm/governance/GovernanceCrypto.js",
    "sourceHash": "5a26102258b7ba992b8ac90e77cee4c8466200a185352dd3017b21a4678fcdee",
    "summary": "Shared signing primitives for Realm organization and capability records.",
    "exports": [
      {
        "name": "signerDescriptor",
        "kind": "function",
        "signature": "async signerDescriptor(signer)",
        "summary": ""
      },
      {
        "name": "finishSignedRecord",
        "kind": "function",
        "signature": "async finishSignedRecord(record, idField, signer)",
        "summary": ""
      },
      {
        "name": "verifySignedRecord",
        "kind": "function",
        "signature": "async verifySignedRecord(record, { format, idField })",
        "summary": ""
      },
      {
        "name": "boundedInteger",
        "kind": "function",
        "signature": "boundedInteger(value, name, minimum = 0)",
        "summary": ""
      },
      {
        "name": "boundedToken",
        "kind": "function",
        "signature": "boundedToken(value, name, maximum = 128, { wildcard = false } = {})",
        "summary": ""
      },
      {
        "name": "boundedText",
        "kind": "function",
        "signature": "boundedText(value, name, maximum = 512)",
        "summary": ""
      },
      {
        "name": "uniqueSorted",
        "kind": "function",
        "signature": "uniqueSorted(values, name, normalize, maximum = 128)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/governance/OrganizationLedger",
    "path": "engine/reference/network/realm/governance/OrganizationLedger.md",
    "source": "engine/network/realm/governance/OrganizationLedger.js",
    "import": "/engine/network/realm/governance/OrganizationLedger.js",
    "sourceHash": "da86b71a128bcd5aa9fe3e15d0c3c340c230081138b9bf1bb60e4630b827618c",
    "summary": "Cryptographically verified organization history. The ledger uses the same contextual verifier for live persistence and replay. A proposal freezes its eligible membership set and quorum at its epoch; later joins cannot vote, while revoked members and superseded keys fail immediately.",
    "exports": [
      {
        "name": "RealmOrganizationLedger",
        "kind": "class",
        "signature": "class RealmOrganizationLedger",
        "summary": ""
      },
      {
        "name": "createGovernanceEnvelope",
        "kind": "function",
        "signature": "async createGovernanceEnvelope(input, signer)",
        "summary": ""
      },
      {
        "name": "verifyGovernanceEnvelope",
        "kind": "function",
        "signature": "async verifyGovernanceEnvelope(record)",
        "summary": ""
      },
      {
        "name": "replayOrganizationLedger",
        "kind": "function",
        "signature": "async replayOrganizationLedger(organizationRecord, envelopes, options = {})",
        "summary": ""
      },
      {
        "name": "GOVERNANCE_ENVELOPE_FORMAT",
        "kind": "constant",
        "signature": "GOVERNANCE_ENVELOPE_FORMAT",
        "summary": ""
      },
      {
        "name": "GOVERNANCE_ENVELOPE_KIND",
        "kind": "constant",
        "signature": "GOVERNANCE_ENVELOPE_KIND",
        "summary": ""
      },
      {
        "name": "ORGANIZATION_ACTION",
        "kind": "constant",
        "signature": "ORGANIZATION_ACTION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/governance/OrganizationV1",
    "path": "engine/reference/network/realm/governance/OrganizationV1.md",
    "source": "engine/network/realm/governance/OrganizationV1.js",
    "import": "/engine/network/realm/governance/OrganizationV1.js",
    "sourceHash": "f5f6e8ea4b06cfb40b83fbff9022537d625682870ba4f4bf8d76eaf39fe92dae",
    "summary": "Signed OrganizationV1 root contract and its fixed governance vocabulary.",
    "exports": [
      {
        "name": "createOrganizationV1",
        "kind": "function",
        "signature": "async createOrganizationV1(input, signer)",
        "summary": ""
      },
      {
        "name": "verifyOrganizationV1",
        "kind": "function",
        "signature": "async verifyOrganizationV1(record)",
        "summary": ""
      },
      {
        "name": "ORGANIZATION_V1_FORMAT",
        "kind": "constant",
        "signature": "ORGANIZATION_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "ORGANIZATION_POWER",
        "kind": "constant",
        "signature": "ORGANIZATION_POWER",
        "summary": ""
      },
      {
        "name": "DEFAULT_ORGANIZATION_ROLES",
        "kind": "constant",
        "signature": "DEFAULT_ORGANIZATION_ROLES",
        "summary": ""
      },
      {
        "name": "OrganizationV1",
        "kind": "constant",
        "signature": "OrganizationV1",
        "summary": "Public contract descriptor for callers that discover schemas dynamically."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/governance/index",
    "path": "engine/reference/network/realm/governance/index.md",
    "source": "engine/network/realm/governance/index.js",
    "import": "/engine/network/realm/governance/index.js",
    "sourceHash": "5a55c50d48cd975774812bd0457868da3f24fabdc79e33b32e3f9a7f99d3ab1f",
    "summary": "",
    "exports": [
      {
        "name": "CAPABILITY_AUDIT_RECEIPT_V1_FORMAT",
        "kind": "re-export",
        "signature": "CAPABILITY_AUDIT_RECEIPT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "CAPABILITY_GRANT_V1_FORMAT",
        "kind": "re-export",
        "signature": "CAPABILITY_GRANT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "CAPABILITY_REVOCATION_V1_FORMAT",
        "kind": "re-export",
        "signature": "CAPABILITY_REVOCATION_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "CapabilityGrantV1",
        "kind": "re-export",
        "signature": "CapabilityGrantV1",
        "summary": ""
      },
      {
        "name": "DEFAULT_ORGANIZATION_ROLES",
        "kind": "re-export",
        "signature": "DEFAULT_ORGANIZATION_ROLES",
        "summary": ""
      },
      {
        "name": "GOVERNANCE_ENVELOPE_FORMAT",
        "kind": "re-export",
        "signature": "GOVERNANCE_ENVELOPE_FORMAT",
        "summary": ""
      },
      {
        "name": "GOVERNANCE_ENVELOPE_KIND",
        "kind": "re-export",
        "signature": "GOVERNANCE_ENVELOPE_KIND",
        "summary": ""
      },
      {
        "name": "ORGANIZATION_ACTION",
        "kind": "re-export",
        "signature": "ORGANIZATION_ACTION",
        "summary": ""
      },
      {
        "name": "ORGANIZATION_POWER",
        "kind": "re-export",
        "signature": "ORGANIZATION_POWER",
        "summary": ""
      },
      {
        "name": "ORGANIZATION_V1_FORMAT",
        "kind": "re-export",
        "signature": "ORGANIZATION_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "OrganizationV1",
        "kind": "re-export",
        "signature": "OrganizationV1",
        "summary": ""
      },
      {
        "name": "RealmCapabilityRegistry",
        "kind": "re-export",
        "signature": "RealmCapabilityRegistry",
        "summary": ""
      },
      {
        "name": "RealmOrganizationLedger",
        "kind": "re-export",
        "signature": "RealmOrganizationLedger",
        "summary": ""
      },
      {
        "name": "attenuateCapabilityGrant",
        "kind": "re-export",
        "signature": "attenuateCapabilityGrant",
        "summary": ""
      },
      {
        "name": "createCapabilityAuditReceipt",
        "kind": "re-export",
        "signature": "createCapabilityAuditReceipt",
        "summary": ""
      },
      {
        "name": "createCapabilityGrant",
        "kind": "re-export",
        "signature": "createCapabilityGrant",
        "summary": ""
      },
      {
        "name": "createCapabilityRevocation",
        "kind": "re-export",
        "signature": "createCapabilityRevocation",
        "summary": ""
      },
      {
        "name": "createGovernanceEnvelope",
        "kind": "re-export",
        "signature": "createGovernanceEnvelope",
        "summary": ""
      },
      {
        "name": "createOrganizationV1",
        "kind": "re-export",
        "signature": "createOrganizationV1",
        "summary": ""
      },
      {
        "name": "recoverCapabilityGrant",
        "kind": "re-export",
        "signature": "recoverCapabilityGrant",
        "summary": ""
      },
      {
        "name": "replayOrganizationLedger",
        "kind": "re-export",
        "signature": "replayOrganizationLedger",
        "summary": ""
      },
      {
        "name": "verifyCapabilityAuditReceipt",
        "kind": "re-export",
        "signature": "verifyCapabilityAuditReceipt",
        "summary": ""
      },
      {
        "name": "verifyCapabilityGrant",
        "kind": "re-export",
        "signature": "verifyCapabilityGrant",
        "summary": ""
      },
      {
        "name": "verifyCapabilityRevocation",
        "kind": "re-export",
        "signature": "verifyCapabilityRevocation",
        "summary": ""
      },
      {
        "name": "verifyGovernanceEnvelope",
        "kind": "re-export",
        "signature": "verifyGovernanceEnvelope",
        "summary": ""
      },
      {
        "name": "verifyOrganizationV1",
        "kind": "re-export",
        "signature": "verifyOrganizationV1",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/health/HealthSnapshot",
    "path": "engine/reference/network/realm/health/HealthSnapshot.md",
    "source": "engine/network/realm/health/HealthSnapshot.js",
    "import": "/engine/network/realm/health/HealthSnapshot.js",
    "sourceHash": "6b19a2a8cb45e013592c0b258d852a4002524b6031f90f511041ab0d5b318a28",
    "summary": "Record a RealmLink snapshot without exposing identities, keys, or payloads.",
    "exports": [
      {
        "name": "createHealthMonitor",
        "kind": "function",
        "signature": "createHealthMonitor({ realmId = null, branchId = null, now = ()",
        "summary": ""
      },
      {
        "name": "recordHealthComponent",
        "kind": "function",
        "signature": "recordHealthComponent(monitor, componentId, { status, reason = null, metrics = {}, ttlMs = 60_000, } = {})",
        "summary": ""
      },
      {
        "name": "removeHealthComponent",
        "kind": "function",
        "signature": "removeHealthComponent(monitor, componentId)",
        "summary": ""
      },
      {
        "name": "subscribeHealth",
        "kind": "function",
        "signature": "subscribeHealth(monitor, subscriber)",
        "summary": ""
      },
      {
        "name": "buildHealthSnapshotV1",
        "kind": "function",
        "signature": "buildHealthSnapshotV1(monitor)",
        "summary": ""
      },
      {
        "name": "observeRealmLinkHealth",
        "kind": "function",
        "signature": "observeRealmLinkHealth(monitor, linkSnapshot, { ttlMs = 30_000 } = {})",
        "summary": "Record a RealmLink snapshot without exposing identities, keys, or payloads."
      },
      {
        "name": "observeDiscoveryHealth",
        "kind": "function",
        "signature": "observeDiscoveryHealth(monitor, providerStatuses, { ttlMs = 60_000 } = {})",
        "summary": ""
      },
      {
        "name": "observePresenceHealth",
        "kind": "function",
        "signature": "observePresenceHealth(monitor, { activeActors = 0, rejected = 0, sequenceGaps = 0 } = {}, { ttlMs = 60_000 } = {})",
        "summary": ""
      },
      {
        "name": "HEALTH_SCHEMA",
        "kind": "constant",
        "signature": "HEALTH_SCHEMA",
        "summary": ""
      },
      {
        "name": "HEALTH_STATUS",
        "kind": "constant",
        "signature": "HEALTH_STATUS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/health/ReachabilityProjection",
    "path": "engine/reference/network/realm/health/ReachabilityProjection.md",
    "source": "engine/network/realm/health/ReachabilityProjection.js",
    "import": "/engine/network/realm/health/ReachabilityProjection.js",
    "sourceHash": "d36c4b7e7bcf5582d8cacb26a7c71c556284ae4962c7cb00644fa8d2145d3764",
    "summary": "Build a secret-free reachability projection from locally observed evidence.",
    "exports": [
      {
        "name": "projectEndpointReachability",
        "kind": "function",
        "signature": "projectEndpointReachability({ residentActive = false, routeCount = 0, masterservers = [], peers = [], observedAt = Date.now()",
        "summary": "Build a secret-free reachability projection from locally observed evidence."
      },
      {
        "name": "ENDPOINT_REACHABILITY",
        "kind": "constant",
        "signature": "ENDPOINT_REACHABILITY",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/health/index",
    "path": "engine/reference/network/realm/health/index.md",
    "source": "engine/network/realm/health/index.js",
    "import": "/engine/network/realm/health/index.js",
    "sourceHash": "78d8045b0250cdea5bfc7f5ef30e2dce6a56baa4ef92f55870da2d4d8b9d8e41",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/identity/RealmPassport",
    "path": "engine/reference/network/realm/identity/RealmPassport.md",
    "source": "engine/network/realm/identity/RealmPassport.js",
    "import": "/engine/network/realm/identity/RealmPassport.js",
    "sourceHash": "9e8d810bcb980b79d88b6ee6414532166850e3290ce72c00dcddec23ba80f7ee",
    "summary": "RealmPassport.js — portable, signed public identity records. This module owns no keys and performs no persistence.  It consumes the existing signer interface and produces canonical records that can be stored, copied, and independently verified by any Realm Network peer.",
    "exports": [
      {
        "name": "createPassportLineage",
        "kind": "function",
        "signature": "async createPassportLineage({ passportId, createdAt = Date.now()",
        "summary": "Create a self-signed genesis lineage. The Passport ID is bound to its root key."
      },
      {
        "name": "appendPassportRotation",
        "kind": "function",
        "signature": "appendPassportRotation(lineage, newSigner, previousSigner, options = {})",
        "summary": ""
      },
      {
        "name": "appendPassportRecovery",
        "kind": "function",
        "signature": "appendPassportRecovery(lineage, newSigner, previousSigner, options = {})",
        "summary": ""
      },
      {
        "name": "appendPassportRevocation",
        "kind": "function",
        "signature": "async appendPassportRevocation(lineage, currentSigner, options = {})",
        "summary": "Append a terminal, signed key-revocation record."
      },
      {
        "name": "verifyPassportLineage",
        "kind": "function",
        "signature": "async verifyPassportLineage(lineage)",
        "summary": "Verify every digest, key fingerprint, link, and signature in a lineage."
      },
      {
        "name": "createDeviceGrant",
        "kind": "function",
        "signature": "async createDeviceGrant(input, passportSigner)",
        "summary": ""
      },
      {
        "name": "verifyDeviceGrant",
        "kind": "function",
        "signature": "async verifyDeviceGrant(grant, options = {})",
        "summary": ""
      },
      {
        "name": "createDeviceRevocation",
        "kind": "function",
        "signature": "async createDeviceRevocation(input, passportSigner)",
        "summary": ""
      },
      {
        "name": "verifyDeviceRevocation",
        "kind": "function",
        "signature": "async verifyDeviceRevocation(record, options = {})",
        "summary": ""
      },
      {
        "name": "createRecoveryPolicy",
        "kind": "function",
        "signature": "async createRecoveryPolicy(input, passportSigner)",
        "summary": ""
      },
      {
        "name": "verifyRecoveryPolicy",
        "kind": "function",
        "signature": "async verifyRecoveryPolicy(policy)",
        "summary": ""
      },
      {
        "name": "createRecoveryRecord",
        "kind": "function",
        "signature": "async createRecoveryRecord(input, passportSigner)",
        "summary": ""
      },
      {
        "name": "verifyRecoveryRecord",
        "kind": "function",
        "signature": "async verifyRecoveryRecord(record, options = {})",
        "summary": ""
      },
      {
        "name": "createRealmPassport",
        "kind": "function",
        "signature": "async createRealmPassport(input, passportSigner)",
        "summary": "Build a signed, allowlisted public Passport projection."
      },
      {
        "name": "verifyRealmPassport",
        "kind": "function",
        "signature": "async verifyRealmPassport(passport)",
        "summary": ""
      },
      {
        "name": "PASSPORT_FORMAT",
        "kind": "constant",
        "signature": "PASSPORT_FORMAT",
        "summary": ""
      },
      {
        "name": "PASSPORT_LINEAGE_FORMAT",
        "kind": "constant",
        "signature": "PASSPORT_LINEAGE_FORMAT",
        "summary": ""
      },
      {
        "name": "PASSPORT_EVENT_FORMAT",
        "kind": "constant",
        "signature": "PASSPORT_EVENT_FORMAT",
        "summary": ""
      },
      {
        "name": "DEVICE_GRANT_FORMAT",
        "kind": "constant",
        "signature": "DEVICE_GRANT_FORMAT",
        "summary": ""
      },
      {
        "name": "DEVICE_REVOCATION_FORMAT",
        "kind": "constant",
        "signature": "DEVICE_REVOCATION_FORMAT",
        "summary": ""
      },
      {
        "name": "RECOVERY_POLICY_FORMAT",
        "kind": "constant",
        "signature": "RECOVERY_POLICY_FORMAT",
        "summary": ""
      },
      {
        "name": "RECOVERY_RECORD_FORMAT",
        "kind": "constant",
        "signature": "RECOVERY_RECORD_FORMAT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/identity/index",
    "path": "engine/reference/network/realm/identity/index.md",
    "source": "engine/network/realm/identity/index.js",
    "import": "/engine/network/realm/identity/index.js",
    "sourceHash": "036cbdb09f13136e820c76a4352323ac114824da7c0cf936efc2223e1a616f1d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/index",
    "path": "engine/reference/network/realm/index.md",
    "source": "engine/network/realm/index.js",
    "import": "/engine/network/realm/index.js",
    "sourceHash": "375f6bf7b884191f4fcc297e3b13d1d9666c0a612f8392ba538ffcfdd5c63736",
    "summary": "Explicit exports win over same-named subsystem descriptors and keep the public V1 contract surface stable while subsystem APIs remain available.",
    "exports": [
      {
        "name": "AccordResultV1",
        "kind": "re-export",
        "signature": "AccordResultV1",
        "summary": ""
      },
      {
        "name": "AccordTaskV1",
        "kind": "re-export",
        "signature": "AccordTaskV1",
        "summary": ""
      },
      {
        "name": "AtlasRecordV1",
        "kind": "re-export",
        "signature": "AtlasRecordV1",
        "summary": ""
      },
      {
        "name": "AuthorityLeaseV1",
        "kind": "re-export",
        "signature": "AuthorityLeaseV1",
        "summary": ""
      },
      {
        "name": "CapabilityGrantV1",
        "kind": "re-export",
        "signature": "CapabilityGrantV1",
        "summary": ""
      },
      {
        "name": "ChronicleEventV1",
        "kind": "re-export",
        "signature": "ChronicleEventV1",
        "summary": ""
      },
      {
        "name": "ContextCapsuleV1",
        "kind": "re-export",
        "signature": "ContextCapsuleV1",
        "summary": ""
      },
      {
        "name": "ContinuityV1",
        "kind": "re-export",
        "signature": "ContinuityV1",
        "summary": ""
      },
      {
        "name": "GatePlanV1",
        "kind": "re-export",
        "signature": "GatePlanV1",
        "summary": ""
      },
      {
        "name": "HealthSnapshotV1",
        "kind": "re-export",
        "signature": "HealthSnapshotV1",
        "summary": ""
      },
      {
        "name": "MergeProposalV1",
        "kind": "re-export",
        "signature": "MergeProposalV1",
        "summary": ""
      },
      {
        "name": "OrganizationV1",
        "kind": "re-export",
        "signature": "OrganizationV1",
        "summary": ""
      },
      {
        "name": "PresenceV1",
        "kind": "re-export",
        "signature": "PresenceV1",
        "summary": ""
      },
      {
        "name": "REALM_NETWORK_PUBLIC_CONTRACTS_V1",
        "kind": "re-export",
        "signature": "REALM_NETWORK_PUBLIC_CONTRACTS_V1",
        "summary": ""
      },
      {
        "name": "REALM_NETWORK_PUBLIC_CONTRACT_NAMES_V1",
        "kind": "re-export",
        "signature": "REALM_NETWORK_PUBLIC_CONTRACT_NAMES_V1",
        "summary": ""
      },
      {
        "name": "RealmAddressV1",
        "kind": "re-export",
        "signature": "RealmAddressV1",
        "summary": ""
      },
      {
        "name": "RealmBranchV1",
        "kind": "re-export",
        "signature": "RealmBranchV1",
        "summary": ""
      },
      {
        "name": "RealmCapsuleV1",
        "kind": "re-export",
        "signature": "RealmCapsuleV1",
        "summary": ""
      },
      {
        "name": "RealmLinkV1",
        "kind": "re-export",
        "signature": "RealmLinkV1",
        "summary": ""
      },
      {
        "name": "RealmPassportV1",
        "kind": "re-export",
        "signature": "RealmPassportV1",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/link/ContinuityStore",
    "path": "engine/reference/network/realm/link/ContinuityStore.md",
    "source": "engine/network/realm/link/ContinuityStore.js",
    "import": "/engine/network/realm/link/ContinuityStore.js",
    "sourceHash": "aae6e0e12aa87b09db4c5721b2feb15760d8dfef121673880956dbb836ea8406",
    "summary": "Storage-agnostic continuity records for reconnect and verified transfer resume. Raw reconnect tokens are deliberately rejected: callers persist an opaque credential only after sealing it with the OS/profile storage layer.",
    "exports": [
      {
        "name": "validateContinuityRecord",
        "kind": "function",
        "signature": "validateContinuityRecord(record)",
        "summary": ""
      },
      {
        "name": "createContinuityRecord",
        "kind": "function",
        "signature": "createContinuityRecord({ linkId, realmId, branchId, localPeerId, remotePeerId = null, sessionEpoch = 0, lastSentSequence = 0, remoteMaxSequence = 0, remoteSeenSequences = [], sealedReconnectCredential = null, peerTicket = null, routeHints = [], transfers = [], updatedAt = Date.now()",
        "summary": ""
      },
      {
        "name": "continuityStorageKey",
        "kind": "function",
        "signature": "continuityStorageKey({ realmId, branchId, linkId })",
        "summary": ""
      },
      {
        "name": "createMemoryContinuityAdapter",
        "kind": "function",
        "signature": "createMemoryContinuityAdapter()",
        "summary": "In-memory adapter for tests and ephemeral sessions; durable OS storage is injected with the same interface."
      },
      {
        "name": "createContinuityStore",
        "kind": "function",
        "signature": "createContinuityStore({ adapter = createMemoryContinuityAdapter()",
        "summary": ""
      },
      {
        "name": "saveContinuity",
        "kind": "function",
        "signature": "async saveContinuity(store, record)",
        "summary": ""
      },
      {
        "name": "loadContinuity",
        "kind": "function",
        "signature": "async loadContinuity(store, ids)",
        "summary": ""
      },
      {
        "name": "removeContinuity",
        "kind": "function",
        "signature": "async removeContinuity(store, ids)",
        "summary": ""
      },
      {
        "name": "updateTransferProgress",
        "kind": "function",
        "signature": "updateTransferProgress(record, update, now = Date.now()",
        "summary": "Update one transfer monotonically; completed/cancelled records cannot be reopened."
      },
      {
        "name": "CONTINUITY_SCHEMA",
        "kind": "constant",
        "signature": "CONTINUITY_SCHEMA",
        "summary": ""
      },
      {
        "name": "TRANSFER_STATE",
        "kind": "constant",
        "signature": "TRANSFER_STATE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/link/DiscoveryProvider",
    "path": "engine/reference/network/realm/link/DiscoveryProvider.md",
    "source": "engine/network/realm/link/DiscoveryProvider.js",
    "import": "/engine/network/realm/link/DiscoveryProvider.js",
    "sourceHash": "d218c7b04f7477a1ec7dfbbb779d812d197fe64e245d5fd8379edf43ee21ce0d",
    "summary": "Realm discovery is an orchestration contract, not a new discovery network. Providers adapt the existing bootstrap, DHT, invite, contact, peer-ticket, and Masterserver mechanisms into one bounded result shape.",
    "exports": [
      {
        "name": "normalizeDiscoveryCandidate",
        "kind": "function",
        "signature": "normalizeDiscoveryCandidate(candidate, { sourceId, now = Date.now()",
        "summary": "Normalize an untrusted provider result into the Realm discovery shape."
      },
      {
        "name": "createDiscoveryProvider",
        "kind": "function",
        "signature": "createDiscoveryProvider({ id, kind = DISCOVERY_KIND.CUSTOM, priority = 0, discover, advertise = null, revoke = null, health = null, } = {})",
        "summary": "Define one discovery provider. Network algorithms remain in the adapted subsystem."
      },
      {
        "name": "createDiscoveryRegistry",
        "kind": "function",
        "signature": "createDiscoveryRegistry({ now = ()",
        "summary": ""
      },
      {
        "name": "registerDiscoveryProvider",
        "kind": "function",
        "signature": "registerDiscoveryProvider(registry, provider)",
        "summary": ""
      },
      {
        "name": "unregisterDiscoveryProvider",
        "kind": "function",
        "signature": "unregisterDiscoveryProvider(registry, providerId)",
        "summary": ""
      },
      {
        "name": "discoverRealmPeers",
        "kind": "function",
        "signature": "async discoverRealmPeers(registry, query = {}, { timeoutMs = 5000, correlationId = null } = {})",
        "summary": "Query all enabled providers concurrently; one provider failure never erases valid peer results."
      },
      {
        "name": "discoveryProviderStatus",
        "kind": "function",
        "signature": "discoveryProviderStatus(registry)",
        "summary": ""
      },
      {
        "name": "createBootstrapRegistryProvider",
        "kind": "function",
        "signature": "createBootstrapRegistryProvider({ id = 'bootstrap', registry, priority = 10 } = {})",
        "summary": "Adapt the existing ordered bootstrap registry without reproducing its scan logic."
      },
      {
        "name": "createPeerTicketDiscoveryProvider",
        "kind": "function",
        "signature": "createPeerTicketDiscoveryProvider({ id = 'peer-tickets', store, priority = 100 } = {})",
        "summary": "Adapt the existing signed peer-ticket store into discovery hints."
      },
      {
        "name": "createDhtDiscoveryProvider",
        "kind": "function",
        "signature": "createDhtDiscoveryProvider({ id = 'dht', transport, priority = 20 } = {})",
        "summary": "Adapt the existing mesh DHT query transport; callers choose exactly one query key."
      },
      {
        "name": "DISCOVERY_KIND",
        "kind": "constant",
        "signature": "DISCOVERY_KIND",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/link/RealmLink",
    "path": "engine/reference/network/realm/link/RealmLink.md",
    "source": "engine/network/realm/link/RealmLink.js",
    "import": "/engine/network/realm/link/RealmLink.js",
    "sourceHash": "91b068c708007eed1d8cb17c9324805b57f7bb902078c69281257013a736be1c",
    "summary": "Create one transport-independent logical link. `verifyIdentity` is required so cryptographic key ownership is also checked against Passport/device authorization rather than trusted from an embedded public key.",
    "exports": [
      {
        "name": "createRealmLink",
        "kind": "function",
        "signature": "createRealmLink({ linkId, realmId, branchId, localIdentity, signer, verifyIdentity, supportedCapabilities = [], authorizeCapabilities = async ({ requested, supported })",
        "summary": "Create one transport-independent logical link. `verifyIdentity` is required so cryptographic key ownership is also checked against Passport/device authorization rather than trusted from an embedded public key."
      },
      {
        "name": "attachRealmLinkTransport",
        "kind": "function",
        "signature": "async attachRealmLinkTransport(link, session, { initiate = true } = {})",
        "summary": "Attach an existing transport session and optionally initiate the authenticated handshake."
      },
      {
        "name": "handleRealmLinkFrame",
        "kind": "function",
        "signature": "async handleRealmLinkFrame(link, frame, { binding = null } = {})",
        "summary": "Verify, deduplicate, authorize, and dispatch one inbound Realm Link frame."
      },
      {
        "name": "sendRealmLinkData",
        "kind": "function",
        "signature": "async sendRealmLinkData(link, kind, payload, { capability = null } = {})",
        "summary": ""
      },
      {
        "name": "upgradeRealmLinkTransport",
        "kind": "function",
        "signature": "async upgradeRealmLinkTransport(link, candidateSession)",
        "summary": "Attempt a higher-priority channel while the current one remains live."
      },
      {
        "name": "snapshotRealmLink",
        "kind": "function",
        "signature": "snapshotRealmLink(link)",
        "summary": ""
      },
      {
        "name": "realmLinkContinuityRecord",
        "kind": "function",
        "signature": "realmLinkContinuityRecord(link, overrides = {})",
        "summary": ""
      },
      {
        "name": "persistRealmLinkContinuity",
        "kind": "function",
        "signature": "async persistRealmLinkContinuity(link, overrides = {})",
        "summary": ""
      },
      {
        "name": "markRealmLinkDisconnected",
        "kind": "function",
        "signature": "async markRealmLinkDisconnected(link, reason = 'transport-disconnected')",
        "summary": ""
      },
      {
        "name": "closeRealmLink",
        "kind": "function",
        "signature": "async closeRealmLink(link, reason = 'local-close')",
        "summary": ""
      },
      {
        "name": "realmLinkEvidence",
        "kind": "function",
        "signature": "realmLinkEvidence(link)",
        "summary": "Canonical digest input for diagnostics/evidence without exposing keys or payloads."
      },
      {
        "name": "REALM_LINK_STATE",
        "kind": "constant",
        "signature": "REALM_LINK_STATE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/link/RealmLinkProtocol",
    "path": "engine/reference/network/realm/link/RealmLinkProtocol.md",
    "source": "engine/network/realm/link/RealmLinkProtocol.js",
    "import": "/engine/network/realm/link/RealmLinkProtocol.js",
    "sourceHash": "cb039d55962b77aaf9d3da910bf8cfee1c0e75aaf4fda1b46426e6c97e49dd80",
    "summary": "Build and sign one control/data frame using the existing authority signer.",
    "exports": [
      {
        "name": "unsignedRealmLinkFrame",
        "kind": "function",
        "signature": "unsignedRealmLinkFrame(frame)",
        "summary": ""
      },
      {
        "name": "signRealmLinkFrame",
        "kind": "function",
        "signature": "async signRealmLinkFrame({ linkId, realmId, branchId, senderPeerId, sessionEpoch, sequence, messageId, issuedAt, type, payload = null, signer, } = {})",
        "summary": "Build and sign one control/data frame using the existing authority signer."
      },
      {
        "name": "verifyRealmLinkFrame",
        "kind": "function",
        "signature": "async verifyRealmLinkFrame(frame, { linkId, realmId, branchId, now = Date.now()",
        "summary": "Cryptographically validate a frame. Passport/device authorization is a separate required hook."
      },
      {
        "name": "createRealmLinkReplayWindow",
        "kind": "function",
        "signature": "createRealmLinkReplayWindow({ width = 256, maxSequence = 0, seen = [] } = {})",
        "summary": "Sliding sequence window supports limited cross-transport reordering while rejecting replay."
      },
      {
        "name": "acceptRealmLinkReplay",
        "kind": "function",
        "signature": "acceptRealmLinkReplay(window, frame, { now = Date.now()",
        "summary": ""
      },
      {
        "name": "snapshotRealmLinkReplayWindow",
        "kind": "function",
        "signature": "snapshotRealmLinkReplayWindow(window)",
        "summary": ""
      },
      {
        "name": "REALM_LINK_PROTOCOL",
        "kind": "constant",
        "signature": "REALM_LINK_PROTOCOL",
        "summary": ""
      },
      {
        "name": "REALM_LINK_FRAME",
        "kind": "constant",
        "signature": "REALM_LINK_FRAME",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/link/TransportProvider",
    "path": "engine/reference/network/realm/link/TransportProvider.md",
    "source": "engine/network/realm/link/TransportProvider.js",
    "import": "/engine/network/realm/link/TransportProvider.js",
    "sourceHash": "faf61dfccb510baea9e2c5d90cf3ee23831f1998f35b75f7062f484de95b5b20",
    "summary": "Realm transport providers adapt existing channels. They do not implement WebRTC, relays, WebSockets, LAN sockets, or encryption themselves.",
    "exports": [
      {
        "name": "assertRealmTransportSession",
        "kind": "function",
        "signature": "assertRealmTransportSession(session)",
        "summary": "Validate the minimal bidirectional channel RealmLink consumes."
      },
      {
        "name": "createTransportProvider",
        "kind": "function",
        "signature": "createTransportProvider({ id, kind = TRANSPORT_KIND.CUSTOM, priority = null, canConnect = ()",
        "summary": ""
      },
      {
        "name": "createTransportRegistry",
        "kind": "function",
        "signature": "createTransportRegistry({ now = ()",
        "summary": ""
      },
      {
        "name": "registerTransportProvider",
        "kind": "function",
        "signature": "registerTransportProvider(registry, provider)",
        "summary": ""
      },
      {
        "name": "unregisterTransportProvider",
        "kind": "function",
        "signature": "unregisterTransportProvider(registry, providerId)",
        "summary": ""
      },
      {
        "name": "connectRealmTransport",
        "kind": "function",
        "signature": "async connectRealmTransport(registry, target, opts = {})",
        "summary": "Try compatible providers in priority order. A failed direct path naturally falls through to an existing relay/WebSocket provider."
      },
      {
        "name": "transportProviderStatus",
        "kind": "function",
        "signature": "transportProviderStatus(registry)",
        "summary": ""
      },
      {
        "name": "isPreferredTransport",
        "kind": "function",
        "signature": "isPreferredTransport(candidate, current)",
        "summary": "True when a candidate session is a meaningful relay-to-direct upgrade."
      },
      {
        "name": "TRANSPORT_KIND",
        "kind": "constant",
        "signature": "TRANSPORT_KIND",
        "summary": ""
      },
      {
        "name": "DEFAULT_TRANSPORT_PRIORITY",
        "kind": "constant",
        "signature": "DEFAULT_TRANSPORT_PRIORITY",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/link/index",
    "path": "engine/reference/network/realm/link/index.md",
    "source": "engine/network/realm/link/index.js",
    "import": "/engine/network/realm/link/index.js",
    "sourceHash": "cc645d46a4eabae5ba70283065f0108f5292a6a0695febead05cad652b6cd14d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/presence/PresenceV1",
    "path": "engine/reference/network/realm/presence/PresenceV1.md",
    "source": "engine/network/realm/presence/PresenceV1.js",
    "import": "/engine/network/realm/presence/PresenceV1.js",
    "sourceHash": "877487bca81f833dae83bc12b48b2a25f245d6d56fd5fdbb366d84e752fba327",
    "summary": "Verify signature, expiry, and Passport/device key authorization.",
    "exports": [
      {
        "name": "createPresenceV1",
        "kind": "function",
        "signature": "createPresenceV1({ realmId, branchId, actorId, deviceId, sessionId, sequence, status = PRESENCE_STATUS.ONLINE, activity = null, location = null, issuedAt = Date.now()",
        "summary": ""
      },
      {
        "name": "signPresenceV1",
        "kind": "function",
        "signature": "async signPresenceV1(record, signer)",
        "summary": ""
      },
      {
        "name": "verifyPresenceV1",
        "kind": "function",
        "signature": "async verifyPresenceV1(record, { authorizeKey, now = Date.now()",
        "summary": "Verify signature, expiry, and Passport/device key authorization."
      },
      {
        "name": "createPresenceTracker",
        "kind": "function",
        "signature": "createPresenceTracker({ authorizeKey, now = ()",
        "summary": ""
      },
      {
        "name": "ingestPresence",
        "kind": "function",
        "signature": "async ingestPresence(tracker, record)",
        "summary": "Accept each signed session sequence once; a gap is surfaced but does not invent missing state."
      },
      {
        "name": "pruneExpiredPresence",
        "kind": "function",
        "signature": "pruneExpiredPresence(tracker, now = tracker.now()",
        "summary": ""
      },
      {
        "name": "presenceSnapshot",
        "kind": "function",
        "signature": "presenceSnapshot(tracker, { realmId = null, branchId = null } = {})",
        "summary": ""
      },
      {
        "name": "PRESENCE_PROTOCOL",
        "kind": "constant",
        "signature": "PRESENCE_PROTOCOL",
        "summary": ""
      },
      {
        "name": "PRESENCE_SCHEMA",
        "kind": "constant",
        "signature": "PRESENCE_SCHEMA",
        "summary": ""
      },
      {
        "name": "PRESENCE_STATUS",
        "kind": "constant",
        "signature": "PRESENCE_STATUS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/presence/index",
    "path": "engine/reference/network/realm/presence/index.md",
    "source": "engine/network/realm/presence/index.js",
    "import": "/engine/network/realm/presence/index.js",
    "sourceHash": "875341afaffb927032e7b4f145096f7503e21ad4953c10fd5b31a525c3bb2cb2",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/publishing/RealmJourneyJournal",
    "path": "engine/reference/network/realm/publishing/RealmJourneyJournal.md",
    "source": "engine/network/realm/publishing/RealmJourneyJournal.js",
    "import": "/engine/network/realm/publishing/RealmJourneyJournal.js",
    "sourceHash": "aea615f86818b20762e6f2886d9a6b94f852c3b21f0aa652b941e6bb8e31ff24",
    "summary": "Signed publish/inspect/enter/leave history with exact branch-aware returns.",
    "exports": [
      {
        "name": "RealmJourneyJournal",
        "kind": "class",
        "signature": "class RealmJourneyJournal",
        "summary": "An append-only signed journal. Entry transitions are replayed locally; no network or storage side effects occur until a caller persists its snapshot."
      },
      {
        "name": "normalizeRealmLocation",
        "kind": "function",
        "signature": "normalizeRealmLocation(value, name = 'Realm location')",
        "summary": ""
      },
      {
        "name": "createJourneyEvent",
        "kind": "function",
        "signature": "async createJourneyEvent(input, signer)",
        "summary": ""
      },
      {
        "name": "verifyJourneyEvent",
        "kind": "function",
        "signature": "async verifyJourneyEvent(record, options = {})",
        "summary": ""
      },
      {
        "name": "verifyJourneyJournal",
        "kind": "function",
        "signature": "async verifyJourneyJournal(events, options = {})",
        "summary": ""
      },
      {
        "name": "REALM_JOURNEY_EVENT_V1_FORMAT",
        "kind": "constant",
        "signature": "REALM_JOURNEY_EVENT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "REALM_JOURNEY_SNAPSHOT_V1_FORMAT",
        "kind": "constant",
        "signature": "REALM_JOURNEY_SNAPSHOT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "REALM_JOURNEY_ACTION",
        "kind": "constant",
        "signature": "REALM_JOURNEY_ACTION",
        "summary": ""
      },
      {
        "name": "RealmJourneyJournalV1",
        "kind": "constant",
        "signature": "RealmJourneyJournalV1",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/publishing/index",
    "path": "engine/reference/network/realm/publishing/index.md",
    "source": "engine/network/realm/publishing/index.js",
    "import": "/engine/network/realm/publishing/index.js",
    "sourceHash": "a73f5eca44e3d648086fad516a8fa2e51007f32f71c01394419d1f1d18593eb6",
    "summary": "",
    "exports": [
      {
        "name": "REALM_JOURNEY_ACTION",
        "kind": "re-export",
        "signature": "REALM_JOURNEY_ACTION",
        "summary": ""
      },
      {
        "name": "REALM_JOURNEY_EVENT_V1_FORMAT",
        "kind": "re-export",
        "signature": "REALM_JOURNEY_EVENT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "REALM_JOURNEY_SNAPSHOT_V1_FORMAT",
        "kind": "re-export",
        "signature": "REALM_JOURNEY_SNAPSHOT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "RealmJourneyJournal",
        "kind": "re-export",
        "signature": "RealmJourneyJournal",
        "summary": ""
      },
      {
        "name": "RealmJourneyJournalV1",
        "kind": "re-export",
        "signature": "RealmJourneyJournalV1",
        "summary": ""
      },
      {
        "name": "createJourneyEvent",
        "kind": "re-export",
        "signature": "createJourneyEvent",
        "summary": ""
      },
      {
        "name": "normalizeRealmLocation",
        "kind": "re-export",
        "signature": "normalizeRealmLocation",
        "summary": ""
      },
      {
        "name": "verifyJourneyEvent",
        "kind": "re-export",
        "signature": "verifyJourneyEvent",
        "summary": ""
      },
      {
        "name": "verifyJourneyJournal",
        "kind": "re-export",
        "signature": "verifyJourneyJournal",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/shield/RealmShield",
    "path": "engine/reference/network/realm/shield/RealmShield.md",
    "source": "engine/network/realm/shield/RealmShield.js",
    "import": "/engine/network/realm/shield/RealmShield.js",
    "sourceHash": "26c45db6e76e4ce929ecca556498c09245052721c32bc7c678a26888f2b73768",
    "summary": "Runtime isolation, quotas, moderation, and tamper-evident audit for Realm entry.",
    "exports": [
      {
        "name": "RealmShield",
        "kind": "class",
        "signature": "class RealmShield",
        "summary": "Realm Shield is deliberately local. It applies signed Gate plans but stores no Realm authority and performs no server-side enforcement."
      },
      {
        "name": "verifyShieldAuditTrail",
        "kind": "function",
        "signature": "async verifyShieldAuditTrail(events)",
        "summary": ""
      },
      {
        "name": "SHIELD_AUDIT_V1_FORMAT",
        "kind": "constant",
        "signature": "SHIELD_AUDIT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "SHIELD_REPORT_V1_FORMAT",
        "kind": "constant",
        "signature": "SHIELD_REPORT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "SHIELD_SNAPSHOT_V1_FORMAT",
        "kind": "constant",
        "signature": "SHIELD_SNAPSHOT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "SHIELD_RESOURCE",
        "kind": "constant",
        "signature": "SHIELD_RESOURCE",
        "summary": ""
      },
      {
        "name": "SHIELD_ACTION",
        "kind": "constant",
        "signature": "SHIELD_ACTION",
        "summary": ""
      },
      {
        "name": "SHIELD_MODERATION_ACTION",
        "kind": "constant",
        "signature": "SHIELD_MODERATION_ACTION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/realm/shield/index",
    "path": "engine/reference/network/realm/shield/index.md",
    "source": "engine/network/realm/shield/index.js",
    "import": "/engine/network/realm/shield/index.js",
    "sourceHash": "e2644ed633df4c0be2b5bafcd52d2953f60f6338d77885c6207965af1a226f36",
    "summary": "",
    "exports": [
      {
        "name": "RealmShield",
        "kind": "re-export",
        "signature": "RealmShield",
        "summary": ""
      },
      {
        "name": "SHIELD_ACTION",
        "kind": "re-export",
        "signature": "SHIELD_ACTION",
        "summary": ""
      },
      {
        "name": "SHIELD_AUDIT_V1_FORMAT",
        "kind": "re-export",
        "signature": "SHIELD_AUDIT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "SHIELD_MODERATION_ACTION",
        "kind": "re-export",
        "signature": "SHIELD_MODERATION_ACTION",
        "summary": ""
      },
      {
        "name": "SHIELD_REPORT_V1_FORMAT",
        "kind": "re-export",
        "signature": "SHIELD_REPORT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "SHIELD_RESOURCE",
        "kind": "re-export",
        "signature": "SHIELD_RESOURCE",
        "summary": ""
      },
      {
        "name": "SHIELD_SNAPSHOT_V1_FORMAT",
        "kind": "re-export",
        "signature": "SHIELD_SNAPSHOT_V1_FORMAT",
        "summary": ""
      },
      {
        "name": "verifyShieldAuditTrail",
        "kind": "re-export",
        "signature": "verifyShieldAuditTrail",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/routes/MasterServerList",
    "path": "engine/reference/network/routes/MasterServerList.md",
    "source": "engine/network/routes/MasterServerList.js",
    "import": "/engine/network/routes/MasterServerList.js",
    "sourceHash": "e384f76070eb04ca2a3aa64950c3f702a3dd1e3839871c5296f7544317e1c5ea",
    "summary": "network/routes/MasterServerList.js — client-shipped master server list + connection fallback ordering (network plan §4).  A master server is a meeting place, not an authority: it introduces peers and forwards signaling, nothing more (network plan §4/§6). This module only normalizes/validates the list shape and computes connection attempt order; it does not open any sockets (that is the signaling tier, Phase 2b/Phase A).",
    "exports": [
      {
        "name": "defaultParticleMasterServers",
        "kind": "function",
        "signature": "defaultParticleMasterServers()",
        "summary": "A fresh, mutable copy of the client-shipped production bootstrap list."
      },
      {
        "name": "readParticleMasterServerRecord",
        "kind": "function",
        "signature": "readParticleMasterServerRecord(storage = globalThis.localStorage)",
        "summary": "Strict read used by writers to quarantine unsupported/corrupt records."
      },
      {
        "name": "loadParticleMasterServers",
        "kind": "function",
        "signature": "loadParticleMasterServers(storage = globalThis.localStorage)",
        "summary": ""
      },
      {
        "name": "saveParticleMasterServers",
        "kind": "function",
        "signature": "saveParticleMasterServers(list, storage = globalThis.localStorage)",
        "summary": ""
      },
      {
        "name": "normalizeMasterServerList",
        "kind": "function",
        "signature": "normalizeMasterServerList(config = {})",
        "summary": "Validate + normalize a client master-server-list config (network plan §4). Unknown/malformed servers are dropped rather than throwing, so a bad entry in a self-hosted community list can't break the whole client."
      },
      {
        "name": "pickNextMasterServer",
        "kind": "function",
        "signature": "pickNextMasterServer(masterServers, { excluded = [] } = {})",
        "summary": "Pick the next enabled master server to try, in priority order, skipping any whose url is in `excluded` (e.g. servers that just failed this round)."
      },
      {
        "name": "buildConnectionOrder",
        "kind": "function",
        "signature": "buildConnectionOrder(normalized)",
        "summary": "Build the full connection attempt order (network plan §4): cached peers -> LAN -> group gossip -> master servers (by priority) -> carrier -> DHT -> relay. Stages disabled via `fallbacks` (or with no master servers configured) are omitted."
      },
      {
        "name": "FALLBACK_STAGES",
        "kind": "constant",
        "signature": "FALLBACK_STAGES",
        "summary": "Fallback stages other than master servers themselves, in priority order (§4)."
      },
      {
        "name": "PARTICLE_MASTER_SERVERS_KEY",
        "kind": "constant",
        "signature": "PARTICLE_MASTER_SERVERS_KEY",
        "summary": ""
      },
      {
        "name": "PARTICLE_MASTER_SERVER_LIST_FORMAT",
        "kind": "constant",
        "signature": "PARTICLE_MASTER_SERVER_LIST_FORMAT",
        "summary": ""
      },
      {
        "name": "PARTICLE_MASTER_SERVER_LIST_VERSION",
        "kind": "constant",
        "signature": "PARTICLE_MASTER_SERVER_LIST_VERSION",
        "summary": ""
      },
      {
        "name": "PARTICLE_PRODUCTION_V2_URL",
        "kind": "constant",
        "signature": "PARTICLE_PRODUCTION_V2_URL",
        "summary": ""
      },
      {
        "name": "PARTICLE_PRODUCTION_V1_URL",
        "kind": "constant",
        "signature": "PARTICLE_PRODUCTION_V1_URL",
        "summary": ""
      },
      {
        "name": "PARTICLE_PRODUCTION_SERVER_KEY_PIN",
        "kind": "constant",
        "signature": "PARTICLE_PRODUCTION_SERVER_KEY_PIN",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/routes/NodeRoleProtocol",
    "path": "engine/reference/network/routes/NodeRoleProtocol.md",
    "source": "engine/network/routes/NodeRoleProtocol.js",
    "import": "/engine/network/routes/NodeRoleProtocol.js",
    "sourceHash": "494bdcd8467bf90115022989b15d722aba2592fed2a987548357318d2763e61f",
    "summary": "Build a signed, expiring role announcement for one route.",
    "exports": [
      {
        "name": "signNodeRoleAnnouncement",
        "kind": "function",
        "signature": "async signNodeRoleAnnouncement({ routeId, nodeId, sequence, availability = 'foreground', roles = ['resident'], capabilities = [], ttlMs = NODE_ROLE_MAX_TTL_MS, signer, now = Date.now()",
        "summary": "Build a signed, expiring role announcement for one route."
      },
      {
        "name": "verifyNodeRoleAnnouncement",
        "kind": "function",
        "signature": "async verifyNodeRoleAnnouncement(message, { routeId, peerId, lastSequence = 0, now = Date.now()",
        "summary": "Verify signature, device-key binding, route scope, freshness, and ordering."
      },
      {
        "name": "NODE_ROLE_MESSAGE_TYPE",
        "kind": "constant",
        "signature": "NODE_ROLE_MESSAGE_TYPE",
        "summary": ""
      },
      {
        "name": "NODE_ROLE_MAX_TTL_MS",
        "kind": "constant",
        "signature": "NODE_ROLE_MAX_TTL_MS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/routes/OsNetworkSession",
    "path": "engine/reference/network/routes/OsNetworkSession.md",
    "source": "engine/network/routes/OsNetworkSession.js",
    "import": "/engine/network/routes/OsNetworkSession.js",
    "sourceHash": "2b14bb708a2e5064d760b7ce058f059bc03b7a4010d5bdcd697ac0d241e9e05b",
    "summary": "network/routes/OsNetworkSession.js — the concrete `createSession(routeId, opts)` factory `RouteSessionManager.js` was designed to take (network plan Phase 2 note: \"typically a thin wrapper around `createCollabCore({ projectId: routeId, ... })`\"). This was the one piece of the plan's own architecture that was designed but never actually instantiated — Phase 2b shipped the simpler Masterserver-relay-as-direct- transport shortcut (`syncManager/SyncTransport.js`) for V1 sync, which left `ChunkTransport.js`/`CarrierRelay.js`/`DhtTransport.js` (all three built against a real peer-addressed `sendToPeer` + `CollabMeshTopology`) with no live mesh to run on. This module closes that gap.  `CollabCore.js`'s Tier 4 signaling (see `CollabSignal.js`'s header comment) already reads `os.network.masterServers` from localStorage and lazily acquires the shared pinned V2 ParticleNetworkDaemon itself. Explicit compatibility endpoints may still use the shared V1 registry. Therefore `createCollabCore({ projectId: routeId })` gets real cross-internet WebRTC signaling over the same Masterserver config the Control Panel manages.  Deliberately skips CollabCore's own peer-identity/ECDH handshake (`publicKeyRaw`/`identityProof`/`ecdhPublicKeyRaw`/`ecdhPrivateKey`, `encrypt: true`): that machinery expects raw `CollabIdentity.js` keys (ECDH keypair + identity proof), which is a different, lower-level API than the CSE-wrapped `createSigner()` this layer's identity/ signers use (see `engine/network/identity/NetworkIdentity.js`'s own header comment). This is not a security gap — every OS-level payload carried over this session already brings its own crypto/verification: `ChunkVerifier.js` content hashes, `SealedPacket.js` onion ECDH, `GroupEpoch.js` AES-GCM, signed `GroupLedger.js`/`PeerTicket.js` envelopes. CollabCore here is used purely as a WebRTC *transport* (data channels + DTLS), the same way `ChunkTransport.js` et al. were written to treat any `sendToPeer`.",
    "exports": [
      {
        "name": "createOsNetworkSession",
        "kind": "function",
        "signature": "createOsNetworkSession(routeId, opts = {})",
        "summary": ""
      },
      {
        "name": "addSessionOpHandler",
        "kind": "function",
        "signature": "addSessionOpHandler(session, handlerFn)",
        "summary": "Register an op handler (e.g. `ChunkTransport.js`'s `handleChunkTransportMessage`, `CarrierRelay.js`'s `handleCarrierRelayMessage`, `DhtTransport.js`'s `handleDhtMessage` — all follow the same `(peerId, op) => boolean` \"handled?\" chaining pattern). Handlers are tried in registration order; the first one that returns `true` consumes the message."
      },
      {
        "name": "registerSessionProtocol",
        "kind": "function",
        "signature": "registerSessionProtocol(session, descriptor)",
        "summary": "Register a bounded, version-aware route protocol handler."
      },
      {
        "name": "sessionSendToPeer",
        "kind": "function",
        "signature": "sessionSendToPeer(session, peerId, data)",
        "summary": "This session's `sendToPeer(peerId, data)` — the exact shape ChunkTransport/CarrierRelay/DhtTransport expect."
      },
      {
        "name": "sessionSendProtocol",
        "kind": "function",
        "signature": "sessionSendProtocol(session, peerId, data, { requireAdvertised = false } = {})",
        "summary": "Send a versioned protocol envelope, optionally requiring peer advertisement."
      },
      {
        "name": "sessionBroadcast",
        "kind": "function",
        "signature": "sessionBroadcast(session, data)",
        "summary": "Broadcast one application op to every connected direct mesh neighbor."
      },
      {
        "name": "sessionBroadcastProtocol",
        "kind": "function",
        "signature": "sessionBroadcastProtocol(session, data, { requireAdvertised = false } = {})",
        "summary": "Broadcast a versioned envelope only to compatible or pre-catalog peers."
      },
      {
        "name": "sessionPeerIds",
        "kind": "function",
        "signature": "sessionPeerIds(session)",
        "summary": "Connected peer IDs for routing and role coordination."
      },
      {
        "name": "sessionTopologyStats",
        "kind": "function",
        "signature": "sessionTopologyStats(session)",
        "summary": "Mesh topology stats for UI display (mode, neighbor count, supernode status, gossip counters)."
      },
      {
        "name": "sessionPeerMetrics",
        "kind": "function",
        "signature": "sessionPeerMetrics(session)",
        "summary": "Locally measured, secret-free peer transport observations."
      },
      {
        "name": "sessionProtocolStatus",
        "kind": "function",
        "signature": "sessionProtocolStatus(session)",
        "summary": "Protocol catalog, peer negotiation, and bounded dispatch counters."
      },
      {
        "name": "destroyOsNetworkSession",
        "kind": "function",
        "signature": "destroyOsNetworkSession(session)",
        "summary": "Tear down a session's WebRTC connections, signaling, and topology timers."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/routes/ReconnectBackoff",
    "path": "engine/reference/network/routes/ReconnectBackoff.md",
    "source": "engine/network/routes/ReconnectBackoff.js",
    "import": "/engine/network/routes/ReconnectBackoff.js",
    "sourceHash": "0f02c92fb693b4022ae6fc032046fc9dd26292fcc01c97a4d892441715cb2016",
    "summary": "network/routes/ReconnectBackoff.js — exponential reconnect backoff with jitter (network plan §8: \"0.5s -> 1s -> 2s -> 4s -> 8s -> max 30s, with random jitter\"). Mirrors the constants already used by engine/collab/CollabCore.js (RECONNECT_BASE_MS=1000, RECONNECT_MAX_MS=30000, MAX_RECONNECT_ATTEMPTS=8) so route-level and WebRTC-level reconnects behave consistently.",
    "exports": [
      {
        "name": "createReconnectBackoff",
        "kind": "function",
        "signature": "createReconnectBackoff(cfg = {})",
        "summary": "Create a reconnect backoff sequence."
      },
      {
        "name": "nextBackoffDelay",
        "kind": "function",
        "signature": "nextBackoffDelay(backoff)",
        "summary": "Compute the next delay (ms) and advance the attempt counter."
      },
      {
        "name": "isBackoffExhausted",
        "kind": "function",
        "signature": "isBackoffExhausted(backoff)",
        "summary": "True once `maxAttempts` has been exceeded (0 = never exhausted). Matches nextBackoffDelay's `exhausted` flag."
      },
      {
        "name": "resetBackoff",
        "kind": "function",
        "signature": "resetBackoff(backoff)",
        "summary": "Reset the attempt counter after a successful (re)connect."
      },
      {
        "name": "DEFAULT_BACKOFF_BASE_MS",
        "kind": "constant",
        "signature": "DEFAULT_BACKOFF_BASE_MS",
        "summary": ""
      },
      {
        "name": "DEFAULT_BACKOFF_MAX_MS",
        "kind": "constant",
        "signature": "DEFAULT_BACKOFF_MAX_MS",
        "summary": ""
      },
      {
        "name": "DEFAULT_BACKOFF_MAX_ATTEMPTS",
        "kind": "constant",
        "signature": "DEFAULT_BACKOFF_MAX_ATTEMPTS",
        "summary": ""
      },
      {
        "name": "DEFAULT_BACKOFF_JITTER_RATIO",
        "kind": "constant",
        "signature": "DEFAULT_BACKOFF_JITTER_RATIO",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/routes/RouteProtocolRegistry",
    "path": "engine/reference/network/routes/RouteProtocolRegistry.md",
    "source": "engine/network/routes/RouteProtocolRegistry.js",
    "import": "/engine/network/routes/RouteProtocolRegistry.js",
    "sourceHash": "6a15e8a54892c149ea2d673af7f23644e4d9784436fb8f25a15032e1bf0aaf55",
    "summary": "Dispatch one route operation. Protocol-bearing traffic always fails closed.",
    "exports": [
      {
        "name": "createRouteProtocolRegistry",
        "kind": "function",
        "signature": "createRouteProtocolRegistry({ now = ()",
        "summary": ""
      },
      {
        "name": "registerRouteProtocol",
        "kind": "function",
        "signature": "registerRouteProtocol(registry, { id, protocols = [], matches = null, handle, authorize = null, validate = null, priority = 0, maxBytes = null, } = {})",
        "summary": ""
      },
      {
        "name": "unregisterRouteProtocol",
        "kind": "function",
        "signature": "unregisterRouteProtocol(registry, descriptorId)",
        "summary": ""
      },
      {
        "name": "routeProtocolCatalog",
        "kind": "function",
        "signature": "routeProtocolCatalog(registry)",
        "summary": ""
      },
      {
        "name": "createRouteProtocolCatalogOp",
        "kind": "function",
        "signature": "createRouteProtocolCatalogOp(registry)",
        "summary": ""
      },
      {
        "name": "forgetRouteProtocolPeer",
        "kind": "function",
        "signature": "forgetRouteProtocolPeer(registry, peerId)",
        "summary": ""
      },
      {
        "name": "peerSupportsRouteProtocol",
        "kind": "function",
        "signature": "peerSupportsRouteProtocol(registry, peerId, protocol)",
        "summary": ""
      },
      {
        "name": "dispatchRouteProtocol",
        "kind": "function",
        "signature": "async dispatchRouteProtocol(registry, peerId, op, context = {})",
        "summary": "Dispatch one route operation. Protocol-bearing traffic always fails closed."
      },
      {
        "name": "routeProtocolRegistryStatus",
        "kind": "function",
        "signature": "routeProtocolRegistryStatus(registry)",
        "summary": ""
      },
      {
        "name": "ROUTE_PROTOCOL_CONTROL",
        "kind": "constant",
        "signature": "ROUTE_PROTOCOL_CONTROL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/routes/RouteSessionManager",
    "path": "engine/reference/network/routes/RouteSessionManager.md",
    "source": "engine/network/routes/RouteSessionManager.js",
    "import": "/engine/network/routes/RouteSessionManager.js",
    "sourceHash": "7587e533c7af021f6c9d2682be9f1138a9b3f4dc82645695d0a89a4220fb2078",
    "summary": "network/routes/RouteSessionManager.js — orchestrates one P2P session per attached route/group.  Phase 0 audit finding: engine/collab/CollabCore.js is built around a single projectId/roomPassword session. The network layer needs many concurrent routes/groups at once, so rather than rewriting CollabCore.js (which would risk existing game-collab call sites), this manager holds N session instances behind a pluggable factory — callers pass in `createSession(routeId, opts) => session` (typically a thin wrapper around `createCollabCore({ projectId: routeId, ... })`) and this module just tracks lifecycle (one session per routeId, created on demand, torn down explicitly or when the route's last local lease is dropped).",
    "exports": [
      {
        "name": "createRouteSessionManager",
        "kind": "function",
        "signature": "createRouteSessionManager({ createSession, destroySession = null } = {})",
        "summary": ""
      },
      {
        "name": "ensureRouteSession",
        "kind": "function",
        "signature": "ensureRouteSession(manager, routeId, opts = {})",
        "summary": "Get the session for `routeId`, creating it via the factory if it doesn't exist yet."
      },
      {
        "name": "acquireRouteSession",
        "kind": "function",
        "signature": "acquireRouteSession(manager, routeId, opts = {})",
        "summary": "Acquire one local consumer lease for a route. The first lease creates the session. The final release tears it down after a bounded idle grace period."
      },
      {
        "name": "releaseRouteSession",
        "kind": "function",
        "signature": "releaseRouteSession(manager, routeId, options = {})",
        "summary": "Release one local route lease without affecting other consumers."
      },
      {
        "name": "routeSessionLeaseStatus",
        "kind": "function",
        "signature": "routeSessionLeaseStatus(manager, routeId)",
        "summary": "Inspect lease ownership without exposing route secrets or session internals."
      },
      {
        "name": "getRouteSession",
        "kind": "function",
        "signature": "getRouteSession(manager, routeId)",
        "summary": "Get an existing session, or null. Does NOT create one."
      },
      {
        "name": "teardownRouteSession",
        "kind": "function",
        "signature": "teardownRouteSession(manager, routeId, options = {})",
        "summary": "Tear down and forget a route's session (calls `destroySession` if provided)."
      },
      {
        "name": "listRouteSessions",
        "kind": "function",
        "signature": "listRouteSessions(manager)",
        "summary": "List routeIds with a live session."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/routes/RouteTable",
    "path": "engine/reference/network/routes/RouteTable.md",
    "source": "engine/network/routes/RouteTable.js",
    "import": "/engine/network/routes/RouteTable.js",
    "sourceHash": "55f92bd54c42af3c6976f771e2993de457eba2b62d1e215be37b5ec77bcb0bfc",
    "summary": "network/routes/RouteTable.js — dynamic, capability-gated routes for the Particle Global OS Network Layer (network plan §9 \"dynamic routes instead of rooms\" + §10 capability checks).  A route is NOT server-owned: it exists in this local table only while a capability-holding principal has attached to it and kept its lease alive via heartbeats. There is no createRoute() — attachRoute() both creates the local entry (if absent) and joins it. Leases expire on their own; nothing here talks to a network — this is pure local bookkeeping that the Masterserver signaling tier (Phase 2b) and per-route session manager below will drive.",
    "exports": [
      {
        "name": "createRouteTable",
        "kind": "function",
        "signature": "createRouteTable(cfg = {})",
        "summary": "Create an empty route table."
      },
      {
        "name": "attachRoute",
        "kind": "function",
        "signature": "attachRoute(table, { routeId, principal, capability, ttlMs = DEFAULT_ROUTE_TTL_MS, meta = {} } = {})",
        "summary": "Attach to a route. Validates the capability authorizes `route/attach` for (principal, routeId) right now; if the route doesn't exist locally yet it is created (this is what \"routes appear when clients attach\" means — there is no separate creation step). Re-attaching refreshes the lease."
      },
      {
        "name": "heartbeatRoute",
        "kind": "function",
        "signature": "heartbeatRoute(table, { routeId, principal, ttlMs = DEFAULT_ROUTE_TTL_MS } = {})",
        "summary": "Refresh a principal's lease on a route (heartbeat). Re-checks the capability so a revoked capability cannot keep renewing its lease."
      },
      {
        "name": "detachRoute",
        "kind": "function",
        "signature": "detachRoute(table, { routeId, principal } = {})",
        "summary": "Detach a principal from a route. Removes the route entirely once empty."
      },
      {
        "name": "pruneExpiredRoutes",
        "kind": "function",
        "signature": "pruneExpiredRoutes(table, now = _now()",
        "summary": "Remove all expired subscriber leases (and any routes left with zero subscribers). Call this periodically (e.g. alongside heartbeat ticks)."
      },
      {
        "name": "isRouteAttached",
        "kind": "function",
        "signature": "isRouteAttached(table, routeId)",
        "summary": "True if `routeId` currently has at least one live subscriber."
      },
      {
        "name": "getRoute",
        "kind": "function",
        "signature": "getRoute(table, routeId)",
        "summary": "Snapshot of a route's subscribers, or null."
      },
      {
        "name": "listRoutes",
        "kind": "function",
        "signature": "listRoutes(table)",
        "summary": "List all currently-live routes (opaque summaries only — no capability objects)."
      },
      {
        "name": "DEFAULT_ROUTE_TTL_MS",
        "kind": "constant",
        "signature": "DEFAULT_ROUTE_TTL_MS",
        "summary": "Default route lease TTL (network plan §9/§35: ~90s)."
      },
      {
        "name": "DEFAULT_HEARTBEAT_MS",
        "kind": "constant",
        "signature": "DEFAULT_HEARTBEAT_MS",
        "summary": "Default heartbeat interval to keep a lease alive (network plan §8: 25-30s)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/routes/index",
    "path": "engine/reference/network/routes/index.md",
    "source": "engine/network/routes/index.js",
    "import": "/engine/network/routes/index.js",
    "sourceHash": "951b88710ae74d0609e8055cb7697f6b85d3730549498ff3e16413dcecdbb290",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/stateChannels/BroadcastStateChannelTransport",
    "path": "engine/reference/network/stateChannels/BroadcastStateChannelTransport.md",
    "source": "engine/network/stateChannels/BroadcastStateChannelTransport.js",
    "import": "/engine/network/stateChannels/BroadcastStateChannelTransport.js",
    "sourceHash": "d8fd0b8632534365cfa988ae8992fee09fe93a0f3b1588e3fd337e0d4154a7a0",
    "summary": "",
    "exports": [
      {
        "name": "BroadcastStateChannelTransport",
        "kind": "class",
        "signature": "class BroadcastStateChannelTransport",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/stateChannels/InProcessStateChannelTransport",
    "path": "engine/reference/network/stateChannels/InProcessStateChannelTransport.md",
    "source": "engine/network/stateChannels/InProcessStateChannelTransport.js",
    "import": "/engine/network/stateChannels/InProcessStateChannelTransport.js",
    "sourceHash": "324393b3d8cc1fec1bcd92900f5342e9a24be07b5fdd358cd284ce2eeb6517ae",
    "summary": "",
    "exports": [
      {
        "name": "InProcessStateChannelTransport",
        "kind": "class",
        "signature": "class InProcessStateChannelTransport",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/stateChannels/MeshStateChannelTransport",
    "path": "engine/reference/network/stateChannels/MeshStateChannelTransport.md",
    "source": "engine/network/stateChannels/MeshStateChannelTransport.js",
    "import": "/engine/network/stateChannels/MeshStateChannelTransport.js",
    "sourceHash": "7be30f8d1f57a0cb9b2f3a18754d2b6c57b8eb5d37dc6cc045f93b1a3a84b743",
    "summary": "State Channel transport over browser-to-browser WebRTC mesh messages.",
    "exports": [
      {
        "name": "MeshStateChannelTransport",
        "kind": "class",
        "signature": "class MeshStateChannelTransport",
        "summary": "State Channel transport over browser-to-browser WebRTC mesh messages."
      },
      {
        "name": "MESH_STATE_CHANNEL_ENVELOPE_TYPE",
        "kind": "constant",
        "signature": "MESH_STATE_CHANNEL_ENVELOPE_TYPE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/stateChannels/ParticleSignalStateChannelTransport",
    "path": "engine/reference/network/stateChannels/ParticleSignalStateChannelTransport.md",
    "source": "engine/network/stateChannels/ParticleSignalStateChannelTransport.js",
    "import": "/engine/network/stateChannels/ParticleSignalStateChannelTransport.js",
    "sourceHash": "85ff6070d5c4ab975d6fed51fbd2cdf4d2c7fc6e6572281560b8f8eea440d908",
    "summary": "",
    "exports": [
      {
        "name": "ParticleSignalStateChannelTransport",
        "kind": "class",
        "signature": "class ParticleSignalStateChannelTransport",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/stateChannels/SseStateChannelTransport",
    "path": "engine/reference/network/stateChannels/SseStateChannelTransport.md",
    "source": "engine/network/stateChannels/SseStateChannelTransport.js",
    "import": "/engine/network/stateChannels/SseStateChannelTransport.js",
    "sourceHash": "7b6ac6015820191ff255b2a048b256ca0856d3d9b48ff6ace1ba866941541ec8",
    "summary": "Default standard transport: SSE projections/receipts down, HTTP intents up.",
    "exports": [
      {
        "name": "SseStateChannelTransport",
        "kind": "class",
        "signature": "class SseStateChannelTransport",
        "summary": "Default standard transport: SSE projections/receipts down, HTTP intents up."
      },
      {
        "name": "createDefaultStateChannelTransport",
        "kind": "function",
        "signature": "createDefaultStateChannelTransport(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/stateChannels/StateChannelAuthority",
    "path": "engine/reference/network/stateChannels/StateChannelAuthority.md",
    "source": "engine/network/stateChannels/StateChannelAuthority.js",
    "import": "/engine/network/stateChannels/StateChannelAuthority.js",
    "sourceHash": "3989938e0fef2635815440c350e228ce35b23141e02a3debb3cd45d2093a1c24",
    "summary": "",
    "exports": [
      {
        "name": "StateChannelAuthority",
        "kind": "class",
        "signature": "class StateChannelAuthority",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/stateChannels/StateChannelAuthorityCoordinator",
    "path": "engine/reference/network/stateChannels/StateChannelAuthorityCoordinator.md",
    "source": "engine/network/stateChannels/StateChannelAuthorityCoordinator.js",
    "import": "/engine/network/stateChannels/StateChannelAuthorityCoordinator.js",
    "sourceHash": "af9e7f97980122a64f38e2a222de061d6bac4dc949b926b49adff2901b29dbfb",
    "summary": "Browser authority lifecycle with signed heartbeats, replicated checkpoints, deterministic takeover, and fencing. It never makes the discovery server an authority and can be attached to any MeshStateChannelTransport.",
    "exports": [
      {
        "name": "StateChannelAuthorityCoordinator",
        "kind": "class",
        "signature": "class StateChannelAuthorityCoordinator",
        "summary": "Browser authority lifecycle with signed heartbeats, replicated checkpoints, deterministic takeover, and fencing. It never makes the discovery server an authority and can be attached to any MeshStateChannelTransport."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/stateChannels/StateChannelClient",
    "path": "engine/reference/network/stateChannels/StateChannelClient.md",
    "source": "engine/network/stateChannels/StateChannelClient.js",
    "import": "/engine/network/stateChannels/StateChannelClient.js",
    "sourceHash": "dc2a139249bd4447465bbcb2c1e212dadbbe2a94b4596034a2c4d5af01030f03",
    "summary": "",
    "exports": [
      {
        "name": "StateChannelClient",
        "kind": "class",
        "signature": "class StateChannelClient",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/stateChannels/StateChannelContract",
    "path": "engine/reference/network/stateChannels/StateChannelContract.md",
    "source": "engine/network/stateChannels/StateChannelContract.js",
    "import": "/engine/network/stateChannels/StateChannelContract.js",
    "sourceHash": "cb26f8181eb249b9990a0f2aa6c757d530a34dee396f0a16526ba6cf32618685",
    "summary": "",
    "exports": [
      {
        "name": "defineStateChannelContract",
        "kind": "function",
        "signature": "defineStateChannelContract(input = {})",
        "summary": ""
      },
      {
        "name": "createStateIntent",
        "kind": "function",
        "signature": "createStateIntent(channelId, action, payload, options = {})",
        "summary": ""
      },
      {
        "name": "createStateProjection",
        "kind": "function",
        "signature": "createStateProjection(channelId, projection, options = {})",
        "summary": ""
      },
      {
        "name": "createStateReceipt",
        "kind": "function",
        "signature": "createStateReceipt(intent, options = {})",
        "summary": ""
      },
      {
        "name": "validateStateChannelMessage",
        "kind": "function",
        "signature": "validateStateChannelMessage(message, channelId = null)",
        "summary": ""
      },
      {
        "name": "readStateChannelMessage",
        "kind": "function",
        "signature": "readStateChannelMessage(message, channelId = null)",
        "summary": ""
      },
      {
        "name": "negotiateStateChannelVersion",
        "kind": "function",
        "signature": "negotiateStateChannelVersion(peerVersions, localVersions = STATE_CHANNEL_SUPPORTED_VERSIONS)",
        "summary": ""
      },
      {
        "name": "applyStateProjection",
        "kind": "function",
        "signature": "applyStateProjection(currentState, message)",
        "summary": ""
      },
      {
        "name": "createMergePatch",
        "kind": "function",
        "signature": "createMergePatch(previous, next)",
        "summary": ""
      },
      {
        "name": "applyMergePatch",
        "kind": "function",
        "signature": "applyMergePatch(target, patch)",
        "summary": ""
      },
      {
        "name": "jsonClone",
        "kind": "function",
        "signature": "jsonClone(value)",
        "summary": ""
      },
      {
        "name": "STATE_CHANNEL_VERSION",
        "kind": "constant",
        "signature": "STATE_CHANNEL_VERSION",
        "summary": ""
      },
      {
        "name": "STATE_CHANNEL_LATEST_VERSION",
        "kind": "constant",
        "signature": "STATE_CHANNEL_LATEST_VERSION",
        "summary": ""
      },
      {
        "name": "STATE_CHANNEL_SUPPORTED_VERSIONS",
        "kind": "constant",
        "signature": "STATE_CHANNEL_SUPPORTED_VERSIONS",
        "summary": ""
      },
      {
        "name": "STATE_CHANNEL_MESSAGE_FORMAT",
        "kind": "constant",
        "signature": "STATE_CHANNEL_MESSAGE_FORMAT",
        "summary": ""
      },
      {
        "name": "DEFAULT_STATE_CHANNEL_TRANSPORT",
        "kind": "constant",
        "signature": "DEFAULT_STATE_CHANNEL_TRANSPORT",
        "summary": ""
      },
      {
        "name": "STATE_CHANNEL_TRANSPORT",
        "kind": "constant",
        "signature": "STATE_CHANNEL_TRANSPORT",
        "summary": ""
      },
      {
        "name": "STATE_CHANNEL_MESSAGE",
        "kind": "constant",
        "signature": "STATE_CHANNEL_MESSAGE",
        "summary": ""
      },
      {
        "name": "STATE_CHANNEL_PROJECTION",
        "kind": "constant",
        "signature": "STATE_CHANNEL_PROJECTION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/stateChannels/StateChannelTransportResolver",
    "path": "engine/reference/network/stateChannels/StateChannelTransportResolver.md",
    "source": "engine/network/stateChannels/StateChannelTransportResolver.js",
    "import": "/engine/network/stateChannels/StateChannelTransportResolver.js",
    "sourceHash": "c49bdb6dda18104df86e79f95e6f73f21cb226e91c29f9562e7eaf7216a189c2",
    "summary": "Resolve transport from authority location. Server-backed channels remain SSE by default; peer authority explicitly selects the WebRTC mesh.",
    "exports": [
      {
        "name": "resolveStateChannelTransport",
        "kind": "function",
        "signature": "resolveStateChannelTransport(options = {})",
        "summary": "Resolve transport from authority location. Server-backed channels remain SSE by default; peer authority explicitly selects the WebRTC mesh."
      },
      {
        "name": "STATE_CHANNEL_AUTHORITY_LOCATION",
        "kind": "constant",
        "signature": "STATE_CHANNEL_AUTHORITY_LOCATION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/stateChannels/index",
    "path": "engine/reference/network/stateChannels/index.md",
    "source": "engine/network/stateChannels/index.js",
    "import": "/engine/network/stateChannels/index.js",
    "sourceHash": "b96f9a6a4e021df6878463299ab1ebd5ac841be69ce239a3adf8f7aef56742c7",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/syncManager/SyncCategory",
    "path": "engine/reference/network/syncManager/SyncCategory.md",
    "source": "engine/network/syncManager/SyncCategory.js",
    "import": "/engine/network/syncManager/SyncCategory.js",
    "sourceHash": "c19ebaca3e9c6a9337eed0c2a62032e7baccefb54e63afae2b2b3d7ae2a45fd3",
    "summary": "network/syncManager/SyncCategory.js — sync categories + target scopes (network plan §20 Sync Manager).",
    "exports": [
      {
        "name": "SYNC_SCOPE",
        "kind": "constant",
        "signature": "SYNC_SCOPE",
        "summary": "What a synced value may fan out to."
      },
      {
        "name": "SYNC_CATEGORIES",
        "kind": "constant",
        "signature": "SYNC_CATEGORIES",
        "summary": "The category groupings a profile's Sync Manager governs (network plan §20)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/syncManager/SyncManager",
    "path": "engine/reference/network/syncManager/SyncManager.md",
    "source": "engine/network/syncManager/SyncManager.js",
    "import": "/engine/network/syncManager/SyncManager.js",
    "sourceHash": "2cb0ae405b8afd459b6eff702576fb02dd5aace3d9bb66ea1eb76db4cde35d22",
    "summary": "network/syncManager/SyncManager.js — per-profile sync rules (network plan §20). This module only decides WHAT should sync WHERE (rules + gating); it does not move any bytes — actual transport goes through the routes/ group crypto layers built in earlier phases. Rules are local, in-memory config; callers persist them via their own storage.",
    "exports": [
      {
        "name": "createSyncManager",
        "kind": "function",
        "signature": "createSyncManager({ rules = {} } = {})",
        "summary": "Create a sync manager with sensible defaults (network plan §20 examples: \"sync AI memory only to my devices\", \"never sync private keys\" — private keys simply have no category here at all, by design)."
      },
      {
        "name": "setSyncRule",
        "kind": "function",
        "signature": "setSyncRule(manager, category, { scope, enabled, targetDeviceIds } = {})",
        "summary": "Set/update a category's sync rule."
      },
      {
        "name": "getSyncRule",
        "kind": "function",
        "signature": "getSyncRule(manager, category)",
        "summary": "Get a category's current rule, or null if unset."
      },
      {
        "name": "listSyncRules",
        "kind": "function",
        "signature": "listSyncRules(manager)",
        "summary": "All rules as a flat array of `{ category, scope, enabled, ... }`."
      },
      {
        "name": "shouldSync",
        "kind": "function",
        "signature": "shouldSync(manager, category, targetScope)",
        "summary": "Should `category` currently sync to `targetScope` right now? Used as a gate before a caller pushes an update over a route/group."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/syncManager/SyncTransport",
    "path": "engine/reference/network/syncManager/SyncTransport.md",
    "source": "engine/network/syncManager/SyncTransport.js",
    "import": "/engine/network/syncManager/SyncTransport.js",
    "sourceHash": "89cbe6ed1a6ed6ffb6801dde34681749041738a8acd7bf6ac43c52c51c229def",
    "summary": "network/syncManager/SyncTransport.js — moves the group-workstation CRDT bytes that SyncManager.js only ever decided WHETHER to send (network plan §20, plus §18/§19's workstation CRDT). Reuses a caller-owned, already connected + already route-attached Particle daemon or explicitly enabled legacy client as the wire: local ops use `client.signal(routeId, ...)` to every other session attached to the route, and incoming SIGNAL events for that routeId are folded in via CRDT join (`mergeWorkstationState`). CRDTs are commutative/idempotent by construction, so no ordering, ack, or conflict-resolution logic is needed here — this is intentionally the entire transport.  This module owns no socket/timer of its own; it is pure glue between SyncManager's gate (`shouldSync`), Workstation's CRDT state, and whatever Particle signaling session + opaque route tag the caller has brought up (e.g. factory/apps/network-manager's Routes tab, or a future group app).",
    "exports": [
      {
        "name": "serializeWorkstationState",
        "kind": "function",
        "signature": "serializeWorkstationState(state)",
        "summary": "Serialize a WorkstationState.js state object into a JSON-safe wire payload."
      },
      {
        "name": "deserializeWorkstationState",
        "kind": "function",
        "signature": "deserializeWorkstationState(wire)",
        "summary": "Inverse of serializeWorkstationState — reconstructs real CRDT instances (not plain values)."
      },
      {
        "name": "createSyncTransport",
        "kind": "function",
        "signature": "createSyncTransport({ client, routeId, syncManager, category, targetScope, getWorkstation, setWorkstation })",
        "summary": "Wire a live group workstation to a connected + route-attached MasterServerClient. Both push (outgoing) and handleEvent (incoming) are gated by the same `shouldSync` check, so disabling a category locally stops us from both broadcasting AND accepting that category's updates."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/syncManager/index",
    "path": "engine/reference/network/syncManager/index.md",
    "source": "engine/network/syncManager/index.js",
    "import": "/engine/network/syncManager/index.js",
    "sourceHash": "3df903799f703106d898c1f5ae2a625d2fae53c59454fecc1f7054a03b778da9",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/transport/MasterServerClient",
    "path": "engine/reference/network/transport/MasterServerClient.md",
    "source": "engine/network/transport/MasterServerClient.js",
    "import": "/engine/network/transport/MasterServerClient.js",
    "sourceHash": "f9ced496c38583e9c7513abbeeac3f83df4f1243431866fd56f6bef81e07d1d6",
    "summary": "network/transport/MasterServerClient.js — live WebSocket signaling client for a single Masterserver (network plan §7/§8/§12, Phase 2b). Speaks the tiny HELLO -> PROVE -> PING/PONG -> DISCOVER wire protocol implemented by Masterserver/app/routes.py. All outgoing envelopes use the `particle-discovery/1` namespace — the server validates `protocol` and `type` independently (Masterserver/app/protocol.py validate_envelope), so a single namespace for every message type from this client is sufficient and matches the confirmed-live wire format.  PROVE requires signing the exact raw challenge bytes the server issued (Masterserver/app/session_crypto.py verifies a raw P1363 ECDSA signature over those bytes) — NOT a stringified/hex-encoded form of them. This is why deviceSigner.signRaw() (engine/state/authority/Identity.js) is used here instead of the string-based signer.sign().",
    "exports": [
      {
        "name": "createMasterServerClient",
        "kind": "function",
        "signature": "createMasterServerClient({ url, deviceSigner = null, onEvent = null } = {})",
        "summary": "Create a live client for one Masterserver. Does not auto-connect — call `connect()` explicitly."
      },
      {
        "name": "MS_CLIENT_STATE",
        "kind": "constant",
        "signature": "MS_CLIENT_STATE",
        "summary": "Connection lifecycle states surfaced via onEvent()."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/transport/MasterServerRegistry",
    "path": "engine/reference/network/transport/MasterServerRegistry.md",
    "source": "engine/network/transport/MasterServerRegistry.js",
    "import": "/engine/network/transport/MasterServerRegistry.js",
    "sourceHash": "f9f361f0e75d53b89c9c1525e70d7595b46af3351519b6d44b2f739a18c914a4",
    "summary": "network/transport/MasterServerRegistry.js — shared, ref-counted transport/MasterServerClient.js registry (network plan §4/§7/§8/§12).  Multiple independent OS consumers can each want a live session to the same Masterserver URL at the same time — e.g. SecureMesh's signaling tier (engine/collab/CollabSignal.js Tier 4) and the Particle Network control panel's live inspector (factory/apps/network-manager/NetworkManagerApp.js). Without this, each would open its own redundant WebSocket + HELLO/PROVE handshake to the same server. This module multiplexes N listeners onto ONE underlying MasterServerClient connection per URL, connecting on first acquire and disconnecting only once every consumer has released it.  A Masterserver route/session concept is per-connection, not per-consumer — sharing one session is exactly what \"a master server introduces peers and forwards signaling\" (README.md's can/cannot boundary) assumes: any number of local app-level features can ride the same proven session and attach their own routes on it independently (ATTACH_ROUTE is additive; a session can be attached to many routes at once).",
    "exports": [
      {
        "name": "acquireSharedMasterServerClient",
        "kind": "function",
        "signature": "acquireSharedMasterServerClient({ url, deviceSigner = null, onEvent = null } = {})",
        "summary": "Acquire a shared, ref-counted MasterServerClient for `url`, connecting it if this is the first consumer. Every event the underlying client emits is fanned out to every registered listener — consumers are expected to filter for events relevant to them (by routeId/message shape), same as they would with their own private client."
      },
      {
        "name": "hasSharedMasterServerClient",
        "kind": "function",
        "signature": "hasSharedMasterServerClient(url)",
        "summary": "True if a shared client for this url already exists (connecting or connected)."
      },
      {
        "name": "sharedMasterServerClientStats",
        "kind": "function",
        "signature": "sharedMasterServerClientStats(url)",
        "summary": "Current listener/ref count for a url's shared client, or null if none exists. Diagnostics only."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/transport/index",
    "path": "engine/reference/network/transport/index.md",
    "source": "engine/network/transport/index.js",
    "import": "/engine/network/transport/index.js",
    "sourceHash": "3dc1089d2cf154591f2eb4eab4af0a06205116f1835ce323d1aa4416e1173a2d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "network/workstation/Workstation",
    "path": "engine/reference/network/workstation/Workstation.md",
    "source": "engine/network/workstation/Workstation.js",
    "import": "/engine/network/workstation/Workstation.js",
    "sourceHash": "84aeae0082573599524b4d808cdd5c9924aa7cf0bf79f96c1384e9aa73cae93a",
    "summary": "network/workstation/Workstation.js — a group's shared OS surface (network plan §18), distinct from any member's personal desktop. Wraps WorkstationState.js (the CRDT layer) with a groupId and a checkpoint-payload builder for GroupLedger's WORKSTATION_CHECKPOINTED event (network plan §19: \"the governance ledger periodically checkpoints collaborative state\" — the ledger stores authority decisions plus a hash of live state, not every live edit).",
    "exports": [
      {
        "name": "createWorkstation",
        "kind": "function",
        "signature": "createWorkstation({ groupId } = {})",
        "summary": "Create a new (empty) group workstation."
      },
      {
        "name": "mergeWorkstation",
        "kind": "function",
        "signature": "mergeWorkstation(workstation, otherState)",
        "summary": "Merge in another replica's CRDT state (order-independent)."
      },
      {
        "name": "computeWorkstationStateRoot",
        "kind": "function",
        "signature": "computeWorkstationStateRoot(workstation)",
        "summary": "Stable content hash of the current workstation state (\"desktopStateRoot\")."
      },
      {
        "name": "buildWorkstationCheckpointPayload",
        "kind": "function",
        "signature": "buildWorkstationCheckpointPayload(workstation, { governanceHead, appRegistryHash = null, manifestRoot = null } = {})",
        "summary": "Build the payload for a WORKSTATION_CHECKPOINTED governance event (network plan §19). Pass the result straight into GroupLedger's `proposeGroupEvent(ledger, { type: 'WORKSTATION_CHECKPOINTED', payload, signer })`."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/workstation/WorkstationState",
    "path": "engine/reference/network/workstation/WorkstationState.md",
    "source": "engine/network/workstation/WorkstationState.js",
    "import": "/engine/network/workstation/WorkstationState.js",
    "sourceHash": "d7f04cd83579b763eb99ec0ad60b17862d6fba1343b270dc402c59a918417bf6",
    "summary": "network/workstation/WorkstationState.js — CRDT-backed group workstation surface (network plan §18/§19: shared desktop layout, app registry, folders, agents — distinct from any member's personal desktop).  Reuses the Causal State Engine's approved CRDT types (ORSet for pinned-apps/folders/agents membership, LWWRegister for per-window layout and wallpaper) unmodified: every mutation returns a NEW state object (non-mutating join algebra), so replicas that exchange state in any order converge without coordination.",
    "exports": [
      {
        "name": "createWorkstationState",
        "kind": "function",
        "signature": "createWorkstationState()",
        "summary": "Create an empty workstation CRDT state."
      },
      {
        "name": "pinApp",
        "kind": "function",
        "signature": "pinApp(state, appId)",
        "summary": ""
      },
      {
        "name": "unpinApp",
        "kind": "function",
        "signature": "unpinApp(state, appId)",
        "summary": ""
      },
      {
        "name": "addFolder",
        "kind": "function",
        "signature": "addFolder(state, folderId)",
        "summary": ""
      },
      {
        "name": "removeFolder",
        "kind": "function",
        "signature": "removeFolder(state, folderId)",
        "summary": ""
      },
      {
        "name": "addAgent",
        "kind": "function",
        "signature": "addAgent(state, agentId)",
        "summary": ""
      },
      {
        "name": "removeAgent",
        "kind": "function",
        "signature": "removeAgent(state, agentId)",
        "summary": ""
      },
      {
        "name": "setWindowLayout",
        "kind": "function",
        "signature": "setWindowLayout(state, windowId, layout, ts, node = '')",
        "summary": "Set a window's layout (LWW: highest (ts, node) wins on merge)."
      },
      {
        "name": "getWindowLayout",
        "kind": "function",
        "signature": "getWindowLayout(state, windowId)",
        "summary": ""
      },
      {
        "name": "setWallpaper",
        "kind": "function",
        "signature": "setWallpaper(state, wallpaper, ts, node = '')",
        "summary": ""
      },
      {
        "name": "mergeWorkstationState",
        "kind": "function",
        "signature": "mergeWorkstationState(a, b)",
        "summary": "Join two workstation states (CRDT merge — order-independent, convergent)."
      },
      {
        "name": "snapshotWorkstationState",
        "kind": "function",
        "signature": "snapshotWorkstationState(state)",
        "summary": "Plain, JSON-serializable snapshot (for hashing/checkpointing/transport)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "network/workstation/index",
    "path": "engine/reference/network/workstation/index.md",
    "source": "engine/network/workstation/index.js",
    "import": "/engine/network/workstation/index.js",
    "sourceHash": "e29ee59b612a9a8b6dd423b55be0c29f0fc07d7731bb0c00f2445e93aa7fdb1a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/CameraMath",
    "path": "engine/reference/render/CameraMath.md",
    "source": "engine/render/CameraMath.js",
    "import": "/engine/render/CameraMath.js",
    "sourceHash": "68be32e7582d28c4a3f78d350802f2513398a90c4c86f763d7a6785c94cc9118",
    "summary": "Compute perspective projection matrix.",
    "exports": [
      {
        "name": "computePerspectiveProjection",
        "kind": "function",
        "signature": "computePerspectiveProjection(camera, aspectFallback, options = {})",
        "summary": "Compute perspective projection matrix."
      },
      {
        "name": "computeOrthographicProjection",
        "kind": "function",
        "signature": "computeOrthographicProjection(camera, viewHeight, aspectFallback)",
        "summary": ""
      },
      {
        "name": "computeViewMatrixFromTransform",
        "kind": "function",
        "signature": "computeViewMatrixFromTransform(transform)",
        "summary": ""
      },
      {
        "name": "computeViewProjMatrix",
        "kind": "function",
        "signature": "computeViewProjMatrix(camera, transform, viewportWidth, viewportHeight)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/DrawHelpers",
    "path": "engine/reference/render/DrawHelpers.md",
    "source": "engine/render/DrawHelpers.js",
    "import": "/engine/render/DrawHelpers.js",
    "sourceHash": "a837c689a0ff6f9491ec181c63ee8846f230d4ed09f920c090d5da9bd2930e03",
    "summary": "Draw a mesh with the given bind group and uniforms.",
    "exports": [
      {
        "name": "drawMesh",
        "kind": "function",
        "signature": "drawMesh(pass, mesh, bindGroup)",
        "summary": "Draw a mesh with the given bind group and uniforms."
      },
      {
        "name": "encodeIndexedMeshClusterCulling",
        "kind": "function",
        "signature": "encodeIndexedMeshClusterCulling(commandEncoder, viewProj, meshes)",
        "summary": ""
      },
      {
        "name": "drawMeshes",
        "kind": "function",
        "signature": "drawMeshes(pass, meshEntries)",
        "summary": "Draw multiple meshes efficiently."
      },
      {
        "name": "beginStandardRenderPass",
        "kind": "function",
        "signature": "beginStandardRenderPass(encoder, options)",
        "summary": "Create a render pass with standard settings."
      },
      {
        "name": "ensureDepthTexture",
        "kind": "function",
        "signature": "ensureDepthTexture(device, current, width, height)",
        "summary": "Ensure depth texture matches canvas size, recreating if needed."
      },
      {
        "name": "ensureSceneColorTexture",
        "kind": "function",
        "signature": "ensureSceneColorTexture(device, current, width, height, format = \"bgra8unorm\")",
        "summary": "Ensure scene color texture matches canvas size, recreating if needed. Used for screen-space water refraction which needs to sample the rendered scene."
      },
      {
        "name": "buildViewProjData",
        "kind": "function",
        "signature": "buildViewProjData(projection, view, multiply, out = null)",
        "summary": "Build viewProj matrix data for a frame buffer."
      },
      {
        "name": "renderParticleBillboards",
        "kind": "function",
        "signature": "renderParticleBillboards(renderPass, particles, options)",
        "summary": "Render particle billboards or points in an existing render pass. Automatically detects point-list vs triangle-list topology."
      },
      {
        "name": "renderVolumetricSmoke",
        "kind": "function",
        "signature": "renderVolumetricSmoke(encoder, swapView, smoke, options)",
        "summary": "Render volumetric smoke in a separate pass after the main render pass."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/DualModeRenderer",
    "path": "engine/reference/render/DualModeRenderer.md",
    "source": "engine/render/DualModeRenderer.js",
    "import": "/engine/render/DualModeRenderer.js",
    "sourceHash": "249e97f6bd096c059590fe7479cb65102d5a21825f856879920e4c7983848abf",
    "summary": "Map velocity to color",
    "exports": [
      {
        "name": "ParticleRenderer",
        "kind": "class",
        "signature": "class ParticleRenderer",
        "summary": ""
      },
      {
        "name": "DualModeRenderer",
        "kind": "class",
        "signature": "class DualModeRenderer",
        "summary": ""
      },
      {
        "name": "velocityToColor",
        "kind": "function",
        "signature": "velocityToColor(vx, vy, vz, scale = 0.1)",
        "summary": "Map velocity to color"
      },
      {
        "name": "generateInstanceData",
        "kind": "function",
        "signature": "generateInstanceData(positions, velocities, particleSize = 1.0, colorScale = 0.1)",
        "summary": "Generate particle instance data from positions and velocities"
      },
      {
        "name": "ViewMode",
        "kind": "constant",
        "signature": "ViewMode",
        "summary": "View modes"
      },
      {
        "name": "LOD_THRESHOLDS",
        "kind": "constant",
        "signature": "LOD_THRESHOLDS",
        "summary": "LOD distance thresholds"
      },
      {
        "name": "ParticleStyle",
        "kind": "constant",
        "signature": "ParticleStyle",
        "summary": "Particle rendering styles"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/IndexedClusterCuller",
    "path": "engine/reference/render/IndexedClusterCuller.md",
    "source": "engine/render/IndexedClusterCuller.js",
    "import": "/engine/render/IndexedClusterCuller.js",
    "sourceHash": "2126dc39b04679ae9c5257b50ebe17ba7f49c4795dece7511da9abd0eafba530",
    "summary": "",
    "exports": [
      {
        "name": "IndexedClusterCuller",
        "kind": "class",
        "signature": "class IndexedClusterCuller",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/LightManager",
    "path": "engine/reference/render/LightManager.md",
    "source": "engine/render/LightManager.js",
    "import": "/engine/render/LightManager.js",
    "sourceHash": "0b711d14fcc20186a62f289f04b45b759686e1def5ef09dc902794ef1b19d9a0",
    "summary": "LightManager.js - Collects ECS Light entities and uploads to GPU Queries all entities with Light + Transform components each frame, builds a GPU uniform buffer, and exposes a bind group for renderers. GPU Layout (std140-aligned): vec3 ambientColor + f32 ambientIntensity        (16 bytes) vec3 sunDirection + f32 sunIntensity             (16 bytes) vec3 sunColor     + u32 lightCount               (16 bytes) f32  globalBrightness + f32 enableDiffuse + f32 enableSun + f32 _pad (16 bytes) Light[16] array                                   (16 * 48 = 768 bytes) Total: 64 + 768 = 832 bytes Each Light (48 bytes, 12 floats): vec3 position  + u32 lightType     (16 bytes) vec3 color     + f32 intensity     (16 bytes) vec3 direction + f32 range         (16 bytes)",
    "exports": [
      {
        "name": "LightManager",
        "kind": "class",
        "signature": "class LightManager",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/Mesh",
    "path": "engine/reference/render/Mesh.md",
    "source": "engine/render/Mesh.js",
    "import": "/engine/render/Mesh.js",
    "sourceHash": "42b3b7969deae78f8c937a899d4378a09d127d695f6e683678cb40d01428cd9b",
    "summary": "",
    "exports": [
      {
        "name": "computeBoundsFromInterleavedPositions",
        "kind": "function",
        "signature": "computeBoundsFromInterleavedPositions(vertexData, strideFloats, positionOffsetFloats = 0)",
        "summary": ""
      },
      {
        "name": "createMesh",
        "kind": "function",
        "signature": "createMesh(device, description)",
        "summary": ""
      },
      {
        "name": "createScreenQuadMesh",
        "kind": "function",
        "signature": "createScreenQuadMesh(device, options = {})",
        "summary": ""
      },
      {
        "name": "createSphereMesh",
        "kind": "function",
        "signature": "createSphereMesh(device, options = {})",
        "summary": ""
      },
      {
        "name": "getVertexBufferLayoutForMesh",
        "kind": "function",
        "signature": "getVertexBufferLayoutForMesh(mesh, slot = 0)",
        "summary": ""
      },
      {
        "name": "createUnitCubeMesh",
        "kind": "function",
        "signature": "createUnitCubeMesh(device, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/MinimapRenderer",
    "path": "engine/reference/render/MinimapRenderer.md",
    "source": "engine/render/MinimapRenderer.js",
    "import": "/engine/render/MinimapRenderer.js",
    "sourceHash": "9a0eb47d8e4bba28bdaab04fdfe5cb0900fbfc1a791dd428e90b9001eb1f34b8",
    "summary": "MinimapRenderer.js - Top-Down Minimap System Renders a 2D top-down view of the terrain showing: - Terrain colors based on block types - Player position and direction indicator - Chunk boundaries (optional) - Points of interest markers",
    "exports": [
      {
        "name": "MinimapRenderer",
        "kind": "class",
        "signature": "class MinimapRenderer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/PlanetPreviewRenderer",
    "path": "engine/reference/render/PlanetPreviewRenderer.md",
    "source": "engine/render/PlanetPreviewRenderer.js",
    "import": "/engine/render/PlanetPreviewRenderer.js",
    "sourceHash": "af9bd935b64b683c814a4a98c69332e2254119a761acfaa620207968df29c3a0",
    "summary": "",
    "exports": [
      {
        "name": "PlanetPreviewRenderer",
        "kind": "class",
        "signature": "class PlanetPreviewRenderer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/RenderBundleManager",
    "path": "engine/reference/render/RenderBundleManager.md",
    "source": "engine/render/RenderBundleManager.js",
    "import": "/engine/render/RenderBundleManager.js",
    "sourceHash": "4f1f60c3093f327f236cdfabea8524822be40eed1532c0ff705809dcdd067cef",
    "summary": "Render Bundle Manager - Pre-record draw commands for massive CPU overhead reduction Based on WebGPU best practices from Toji.dev Reduces draw call overhead by 10x for repeated rendering",
    "exports": [
      {
        "name": "RenderBundleManager",
        "kind": "class",
        "signature": "class RenderBundleManager",
        "summary": "Render Bundle Manager - Pre-record draw commands for massive CPU overhead reduction Based on WebGPU best practices from Toji.dev Reduces draw call overhead by 10x for repeated rendering"
      },
      {
        "name": "ParticleRenderBundleCache",
        "kind": "class",
        "signature": "class ParticleRenderBundleCache",
        "summary": "Particle-specific render bundle optimization Pre-records particle billboard rendering for massive performance gains"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/RenderingInit",
    "path": "engine/reference/render/RenderingInit.md",
    "source": "engine/render/RenderingInit.js",
    "import": "/engine/render/RenderingInit.js",
    "sourceHash": "5dd02ba833d628e28dccb78e44b1529d935c643171296744aa5b0cd176d50176",
    "summary": "Initialize particle simulation and renderer.",
    "exports": [
      {
        "name": "initParticleSystem",
        "kind": "function",
        "signature": "async initParticleSystem(options)",
        "summary": "Initialize particle simulation and renderer."
      },
      {
        "name": "initSmokeRenderer",
        "kind": "function",
        "signature": "async initSmokeRenderer(options)",
        "summary": "Initialize volumetric smoke renderer (fluid sim is lazy)."
      },
      {
        "name": "initSimulationRendering",
        "kind": "function",
        "signature": "async initSimulationRendering(options)",
        "summary": "Initialize particle system and optionally smoke renderer."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/SceneRenderer",
    "path": "engine/reference/render/SceneRenderer.md",
    "source": "engine/render/SceneRenderer.js",
    "import": "/engine/render/SceneRenderer.js",
    "sourceHash": "bb7b5116135e718adb1b29b66d517e6c6e00b9fb77a4dfcf90a98656c032b08b",
    "summary": "Render all spawned ECS entities.",
    "exports": [
      {
        "name": "encodeEntitiesClusterCulling",
        "kind": "function",
        "signature": "encodeEntitiesClusterCulling(options)",
        "summary": ""
      },
      {
        "name": "renderEntities",
        "kind": "function",
        "signature": "renderEntities(options)",
        "summary": "Render all spawned ECS entities."
      },
      {
        "name": "renderRoom",
        "kind": "function",
        "signature": "renderRoom(options)",
        "summary": "Render room geometry (floor, walls, ceiling)."
      },
      {
        "name": "renderLightCube",
        "kind": "function",
        "signature": "renderLightCube(options)",
        "summary": "Render a light cube at a position."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/VolumetricRaymarch",
    "path": "engine/reference/render/VolumetricRaymarch.md",
    "source": "engine/render/VolumetricRaymarch.js",
    "import": "/engine/render/VolumetricRaymarch.js",
    "sourceHash": "fbeef4ee7755edb8b16bee88dc09a0d5ff4bdd2020fba7e578fdf0e922347bb7",
    "summary": "Default raymarch parameters",
    "exports": [
      {
        "name": "VolumetricRaymarcher",
        "kind": "class",
        "signature": "class VolumetricRaymarcher",
        "summary": ""
      },
      {
        "name": "DEFAULT_PARAMS",
        "kind": "constant",
        "signature": "DEFAULT_PARAMS",
        "summary": "Default raymarch parameters"
      },
      {
        "name": "RenderMode",
        "kind": "constant",
        "signature": "RenderMode",
        "summary": "Render modes"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/World3DPreviewRenderer",
    "path": "engine/reference/render/World3DPreviewRenderer.md",
    "source": "engine/render/World3DPreviewRenderer.js",
    "import": "/engine/render/World3DPreviewRenderer.js",
    "sourceHash": "601259fe329aee026b0c6691c1538476e7ae4e65793fe21b18b5512dbd29f82f",
    "summary": "",
    "exports": [
      {
        "name": "World3DPreviewRenderer",
        "kind": "class",
        "signature": "class World3DPreviewRenderer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/WorldParticleRenderer",
    "path": "engine/reference/render/WorldParticleRenderer.md",
    "source": "engine/render/WorldParticleRenderer.js",
    "import": "/engine/render/WorldParticleRenderer.js",
    "sourceHash": "216e1d7887bc14006447f1139b73447e4e08cfdbd988d8170158de44f2d6bf77",
    "summary": "",
    "exports": [
      {
        "name": "WorldParticleRenderer",
        "kind": "class",
        "signature": "class WorldParticleRenderer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/AerialPerspective",
    "path": "engine/reference/render/atmosphere/AerialPerspective.md",
    "source": "engine/render/atmosphere/AerialPerspective.js",
    "import": "/engine/render/atmosphere/AerialPerspective.js",
    "sourceHash": "92cf90646ed56b80f880d6d553df45a6577d1461939e82717ec85afe14b094af",
    "summary": "AerialPerspective - Distance-based color shifting",
    "exports": [
      {
        "name": "AerialPerspective",
        "kind": "class",
        "signature": "class AerialPerspective",
        "summary": "AerialPerspective - Distance-based color shifting"
      },
      {
        "name": "AERIAL_PERSPECTIVE_WGSL",
        "kind": "constant",
        "signature": "AERIAL_PERSPECTIVE_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/AtmosphereUtils",
    "path": "engine/reference/render/atmosphere/AtmosphereUtils.md",
    "source": "engine/render/atmosphere/AtmosphereUtils.js",
    "import": "/engine/render/atmosphere/AtmosphereUtils.js",
    "sourceHash": "823b09a986e3069d324027bd91e45e5ee6cc9a79251524d84d02f0e4b42c29d5",
    "summary": "Calculate recommended Mie asymmetry based on visibility",
    "exports": [
      {
        "name": "getMieAsymmetryFromVisibility",
        "kind": "function",
        "signature": "getMieAsymmetryFromVisibility(visibility)",
        "summary": "Calculate recommended Mie asymmetry based on visibility"
      },
      {
        "name": "getAdaptiveStepMultiplier",
        "kind": "function",
        "signature": "getAdaptiveStepMultiplier(opticalDepth)",
        "summary": "Get step size recommendation based on optical depth"
      },
      {
        "name": "ATMOSPHERE_UTILS_WGSL",
        "kind": "constant",
        "signature": "ATMOSPHERE_UTILS_WGSL",
        "summary": ""
      },
      {
        "name": "MIE_ASYMMETRY",
        "kind": "constant",
        "signature": "MIE_ASYMMETRY",
        "summary": ""
      },
      {
        "name": "ADAPTIVE_STEPS",
        "kind": "constant",
        "signature": "ADAPTIVE_STEPS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/AtmosphericScattering",
    "path": "engine/reference/render/atmosphere/AtmosphericScattering.md",
    "source": "engine/render/atmosphere/AtmosphericScattering.js",
    "import": "/engine/render/atmosphere/AtmosphericScattering.js",
    "sourceHash": "936770afae28b4ea376ddf39ccbf2404dd6ffb955ba5d5098f1f8e6b736d80bf",
    "summary": "AtmosphericScattering - Physical atmosphere simulation",
    "exports": [
      {
        "name": "AtmosphericScattering",
        "kind": "class",
        "signature": "class AtmosphericScattering",
        "summary": "AtmosphericScattering - Physical atmosphere simulation"
      },
      {
        "name": "ATMOSPHERIC_SCATTERING_WGSL",
        "kind": "constant",
        "signature": "ATMOSPHERIC_SCATTERING_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/AuroraPass",
    "path": "engine/reference/render/atmosphere/AuroraPass.md",
    "source": "engine/render/atmosphere/AuroraPass.js",
    "import": "/engine/render/atmosphere/AuroraPass.js",
    "sourceHash": "b7b6b31b380933e5da816fb720f5b8ffe19b6972545b12054a2a1de77a8bec49",
    "summary": "AuroraPass - Volumetric aurora rendering pass",
    "exports": [
      {
        "name": "AuroraPass",
        "kind": "class",
        "signature": "class AuroraPass",
        "summary": "AuroraPass - Volumetric aurora rendering pass"
      },
      {
        "name": "AURORA_WGSL",
        "kind": "constant",
        "signature": "AURORA_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/BlueNoise",
    "path": "engine/reference/render/atmosphere/BlueNoise.md",
    "source": "engine/render/atmosphere/BlueNoise.js",
    "import": "/engine/render/atmosphere/BlueNoise.js",
    "sourceHash": "8985836a5b825213bf6bfcfa1bd6f66dd4abf67dc4a438ff17d4adade01a2587",
    "summary": "BlueNoiseTexture - GPU blue noise texture manager",
    "exports": [
      {
        "name": "BlueNoiseTexture",
        "kind": "class",
        "signature": "class BlueNoiseTexture",
        "summary": "BlueNoiseTexture - GPU blue noise texture manager"
      },
      {
        "name": "BLUE_NOISE_WGSL",
        "kind": "constant",
        "signature": "BLUE_NOISE_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/CelestialMoon",
    "path": "engine/reference/render/atmosphere/CelestialMoon.md",
    "source": "engine/render/atmosphere/CelestialMoon.js",
    "import": "/engine/render/atmosphere/CelestialMoon.js",
    "sourceHash": "1ce6fe609ee24fafcc48ec2f4c2825850bdabe40bea8bacb5d932a5388da311e",
    "summary": "Moon class for orbital mechanics and state management",
    "exports": [
      {
        "name": "Moon",
        "kind": "class",
        "signature": "class Moon",
        "summary": "Moon class for orbital mechanics and state management"
      },
      {
        "name": "MoonSystem",
        "kind": "class",
        "signature": "class MoonSystem",
        "summary": "MoonSystem - Manages multiple moons"
      },
      {
        "name": "MoonType",
        "kind": "constant",
        "signature": "MoonType",
        "summary": ""
      },
      {
        "name": "MoonDefaults",
        "kind": "constant",
        "signature": "MoonDefaults",
        "summary": "Default configurations for different moon types"
      },
      {
        "name": "MoonPresets",
        "kind": "constant",
        "signature": "MoonPresets",
        "summary": "Preset moon configurations for the world"
      },
      {
        "name": "MoonWGSL",
        "kind": "constant",
        "signature": "MoonWGSL",
        "summary": "WGSL shader code for moon rendering"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/CelestialStars",
    "path": "engine/reference/render/atmosphere/CelestialStars.md",
    "source": "engine/render/atmosphere/CelestialStars.js",
    "import": "/engine/render/atmosphere/CelestialStars.js",
    "sourceHash": "f31ba9fa7337306109486c828375ad5c22905af5b4f9214cdaf9c13a62f3f54d",
    "summary": "StarField class for managing star rendering",
    "exports": [
      {
        "name": "StarField",
        "kind": "class",
        "signature": "class StarField",
        "summary": "StarField class for managing star rendering"
      },
      {
        "name": "StarSystem",
        "kind": "class",
        "signature": "class StarSystem",
        "summary": "StarSystem - Complete star management system"
      },
      {
        "name": "StarLayer",
        "kind": "constant",
        "signature": "StarLayer",
        "summary": "Star layer types - for different visual effects"
      },
      {
        "name": "StarDefaults",
        "kind": "constant",
        "signature": "StarDefaults",
        "summary": "Star field configuration defaults"
      },
      {
        "name": "StarLayerPresets",
        "kind": "constant",
        "signature": "StarLayerPresets",
        "summary": "Star layer presets"
      },
      {
        "name": "Constellations",
        "kind": "constant",
        "signature": "Constellations",
        "summary": "Constellation definitions (named star patterns)"
      },
      {
        "name": "StarsWGSL",
        "kind": "constant",
        "signature": "StarsWGSL",
        "summary": "WGSL shader code for star rendering"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/CelestialSun",
    "path": "engine/reference/render/atmosphere/CelestialSun.md",
    "source": "engine/render/atmosphere/CelestialSun.js",
    "import": "/engine/render/atmosphere/CelestialSun.js",
    "sourceHash": "caa37f8fe8d521f2118e9f8ef6e5b3d15eae879839cfac499cf1a56f4ef329b0",
    "summary": "Sun class for orbital mechanics and state management",
    "exports": [
      {
        "name": "Sun",
        "kind": "class",
        "signature": "class Sun",
        "summary": "Sun class for orbital mechanics and state management"
      },
      {
        "name": "SunDefaults",
        "kind": "constant",
        "signature": "SunDefaults",
        "summary": ""
      },
      {
        "name": "SunWGSL",
        "kind": "constant",
        "signature": "SunWGSL",
        "summary": "WGSL shader code for sun rendering"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/DistanceFog",
    "path": "engine/reference/render/atmosphere/DistanceFog.md",
    "source": "engine/render/atmosphere/DistanceFog.js",
    "import": "/engine/render/atmosphere/DistanceFog.js",
    "sourceHash": "b2d65a455568a53ba9c0191cb8db20b1be07dc3859f09e8f4397b911fcaef537",
    "summary": "DistanceFog - Distance-based fog system",
    "exports": [
      {
        "name": "DistanceFog",
        "kind": "class",
        "signature": "class DistanceFog",
        "summary": "DistanceFog - Distance-based fog system"
      },
      {
        "name": "FOG_TYPE",
        "kind": "constant",
        "signature": "FOG_TYPE",
        "summary": ""
      },
      {
        "name": "FOG_WGSL",
        "kind": "constant",
        "signature": "FOG_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/HillaireLUT",
    "path": "engine/reference/render/atmosphere/HillaireLUT.md",
    "source": "engine/render/atmosphere/HillaireLUT.js",
    "import": "/engine/render/atmosphere/HillaireLUT.js",
    "sourceHash": "010aa9d03b1a6a7a68f2a08189bb55eefcc55f09f7fb2082a4eb6d29971bb26c",
    "summary": "HillaireLUT - Main class for Hillaire-style atmospheric LUT system",
    "exports": [
      {
        "name": "HillaireLUT",
        "kind": "class",
        "signature": "class HillaireLUT",
        "summary": "HillaireLUT - Main class for Hillaire-style atmospheric LUT system"
      },
      {
        "name": "TRANSMITTANCE_COMPUTE_WGSL",
        "kind": "constant",
        "signature": "TRANSMITTANCE_COMPUTE_WGSL",
        "summary": ""
      },
      {
        "name": "MULTISCATTER_COMPUTE_WGSL",
        "kind": "constant",
        "signature": "MULTISCATTER_COMPUTE_WGSL",
        "summary": ""
      },
      {
        "name": "SKYVIEW_COMPUTE_WGSL",
        "kind": "constant",
        "signature": "SKYVIEW_COMPUTE_WGSL",
        "summary": ""
      },
      {
        "name": "AERIAL_PERSPECTIVE_COMPUTE_WGSL",
        "kind": "constant",
        "signature": "AERIAL_PERSPECTIVE_COMPUTE_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/PlanetCurvature",
    "path": "engine/reference/render/atmosphere/PlanetCurvature.md",
    "source": "engine/render/atmosphere/PlanetCurvature.js",
    "import": "/engine/render/atmosphere/PlanetCurvature.js",
    "sourceHash": "e5bcf52a5f2edd1a46d16e17d25299ff2c339d7daafc0fb06cc6e463940d4efe",
    "summary": "PlanetCurvature - Planetary curvature simulation",
    "exports": [
      {
        "name": "PlanetCurvature",
        "kind": "class",
        "signature": "class PlanetCurvature",
        "summary": "PlanetCurvature - Planetary curvature simulation"
      },
      {
        "name": "PLANET_CURVATURE_WGSL",
        "kind": "constant",
        "signature": "PLANET_CURVATURE_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/ProceduralSky",
    "path": "engine/reference/render/atmosphere/ProceduralSky.md",
    "source": "engine/render/atmosphere/ProceduralSky.js",
    "import": "/engine/render/atmosphere/ProceduralSky.js",
    "sourceHash": "78ee2a7008c0754c4222462f17730896a662190bb84b812dfb1847023a3b5263",
    "summary": "ProceduralSky - Complete sky system",
    "exports": [
      {
        "name": "ProceduralSky",
        "kind": "class",
        "signature": "class ProceduralSky",
        "summary": "ProceduralSky - Complete sky system"
      },
      {
        "name": "SUN_PHASE",
        "kind": "constant",
        "signature": "SUN_PHASE",
        "summary": ""
      },
      {
        "name": "PROCEDURAL_SKY_WGSL",
        "kind": "constant",
        "signature": "PROCEDURAL_SKY_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/Space",
    "path": "engine/reference/render/atmosphere/Space.md",
    "source": "engine/render/atmosphere/Space.js",
    "import": "/engine/render/atmosphere/Space.js",
    "sourceHash": "6cbed31af4f7286decf8ab612e220dbc2c455955f907729dbfd2338b0d0a85d6",
    "summary": "",
    "exports": [
      {
        "name": "SpaceWGSL",
        "kind": "constant",
        "signature": "SpaceWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/SpectralWeather",
    "path": "engine/reference/render/atmosphere/SpectralWeather.md",
    "source": "engine/render/atmosphere/SpectralWeather.js",
    "import": "/engine/render/atmosphere/SpectralWeather.js",
    "sourceHash": "82739323ab36b7d0ac4b5af6fc35e00944607096c710ad4c95043a806f892bac",
    "summary": "SpectralWeather - T21 spectral weather simulation",
    "exports": [
      {
        "name": "SpectralWeather",
        "kind": "class",
        "signature": "class SpectralWeather",
        "summary": "SpectralWeather - T21 spectral weather simulation"
      },
      {
        "name": "SPECTRAL_WEATHER_WGSL",
        "kind": "constant",
        "signature": "SPECTRAL_WEATHER_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/TemporalAccumulation",
    "path": "engine/reference/render/atmosphere/TemporalAccumulation.md",
    "source": "engine/render/atmosphere/TemporalAccumulation.js",
    "import": "/engine/render/atmosphere/TemporalAccumulation.js",
    "sourceHash": "8d5c01fb45cb2c6d68f636e63fa3329923ea59de5da2e830d145ffda9da7ea49",
    "summary": "TemporalAccumulation - TAA pass for atmosphere",
    "exports": [
      {
        "name": "TemporalAccumulation",
        "kind": "class",
        "signature": "class TemporalAccumulation",
        "summary": "TemporalAccumulation - TAA pass for atmosphere"
      },
      {
        "name": "TEMPORAL_ACCUMULATION_WGSL",
        "kind": "constant",
        "signature": "TEMPORAL_ACCUMULATION_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/index",
    "path": "engine/reference/render/atmosphere/index.md",
    "source": "engine/render/atmosphere/index.js",
    "import": "/engine/render/atmosphere/index.js",
    "sourceHash": "61292cc150decf22960dcfa60aff4239a8d6e54b183403c2be635d7f545ac328",
    "summary": "",
    "exports": [
      {
        "name": "ADAPTIVE_STEPS",
        "kind": "re-export",
        "signature": "ADAPTIVE_STEPS",
        "summary": ""
      },
      {
        "name": "AERIAL_PERSPECTIVE_COMPUTE_WGSL",
        "kind": "re-export",
        "signature": "AERIAL_PERSPECTIVE_COMPUTE_WGSL",
        "summary": ""
      },
      {
        "name": "ATMOSPHERE_UTILS_WGSL",
        "kind": "re-export",
        "signature": "ATMOSPHERE_UTILS_WGSL",
        "summary": ""
      },
      {
        "name": "AURORA_WGSL",
        "kind": "re-export",
        "signature": "AURORA_WGSL",
        "summary": ""
      },
      {
        "name": "AuroraPass",
        "kind": "re-export",
        "signature": "AuroraPass",
        "summary": ""
      },
      {
        "name": "BLUE_NOISE_WGSL",
        "kind": "re-export",
        "signature": "BLUE_NOISE_WGSL",
        "summary": ""
      },
      {
        "name": "BlueNoiseTexture",
        "kind": "re-export",
        "signature": "BlueNoiseTexture",
        "summary": ""
      },
      {
        "name": "HillaireLUT",
        "kind": "re-export",
        "signature": "HillaireLUT",
        "summary": ""
      },
      {
        "name": "MIE_ASYMMETRY",
        "kind": "re-export",
        "signature": "MIE_ASYMMETRY",
        "summary": ""
      },
      {
        "name": "MULTISCATTER_COMPUTE_WGSL",
        "kind": "re-export",
        "signature": "MULTISCATTER_COMPUTE_WGSL",
        "summary": ""
      },
      {
        "name": "SKYVIEW_COMPUTE_WGSL",
        "kind": "re-export",
        "signature": "SKYVIEW_COMPUTE_WGSL",
        "summary": ""
      },
      {
        "name": "SPECTRAL_WEATHER_WGSL",
        "kind": "re-export",
        "signature": "SPECTRAL_WEATHER_WGSL",
        "summary": ""
      },
      {
        "name": "SpectralWeather",
        "kind": "re-export",
        "signature": "SpectralWeather",
        "summary": ""
      },
      {
        "name": "TEMPORAL_ACCUMULATION_WGSL",
        "kind": "re-export",
        "signature": "TEMPORAL_ACCUMULATION_WGSL",
        "summary": ""
      },
      {
        "name": "TRANSMITTANCE_COMPUTE_WGSL",
        "kind": "re-export",
        "signature": "TRANSMITTANCE_COMPUTE_WGSL",
        "summary": ""
      },
      {
        "name": "TemporalAccumulation",
        "kind": "re-export",
        "signature": "TemporalAccumulation",
        "summary": ""
      },
      {
        "name": "getAdaptiveStepMultiplier",
        "kind": "re-export",
        "signature": "getAdaptiveStepMultiplier",
        "summary": ""
      },
      {
        "name": "getMieAsymmetryFromVisibility",
        "kind": "re-export",
        "signature": "getMieAsymmetryFromVisibility",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/atmosphere/sky/index",
    "path": "engine/reference/render/atmosphere/sky/index.md",
    "source": "engine/render/atmosphere/sky/index.js",
    "import": "/engine/render/atmosphere/sky/index.js",
    "sourceHash": "2ca4c1d1f4c4e69ef40ffddd78105b13c1126ceb2f20dd80ae2180600cd89c37",
    "summary": "",
    "exports": [
      {
        "name": "CelestialBodiesWGSL",
        "kind": "constant",
        "signature": "CelestialBodiesWGSL",
        "summary": ""
      },
      {
        "name": "Constellations",
        "kind": "re-export",
        "signature": "Constellations",
        "summary": ""
      },
      {
        "name": "Moon",
        "kind": "re-export",
        "signature": "Moon",
        "summary": ""
      },
      {
        "name": "MoonDefaults",
        "kind": "re-export",
        "signature": "MoonDefaults",
        "summary": ""
      },
      {
        "name": "MoonPresets",
        "kind": "re-export",
        "signature": "MoonPresets",
        "summary": ""
      },
      {
        "name": "MoonSystem",
        "kind": "re-export",
        "signature": "MoonSystem",
        "summary": ""
      },
      {
        "name": "MoonType",
        "kind": "re-export",
        "signature": "MoonType",
        "summary": ""
      },
      {
        "name": "MoonWGSL",
        "kind": "re-export",
        "signature": "MoonWGSL",
        "summary": ""
      },
      {
        "name": "SpaceWGSL",
        "kind": "re-export",
        "signature": "SpaceWGSL",
        "summary": ""
      },
      {
        "name": "StarDefaults",
        "kind": "re-export",
        "signature": "StarDefaults",
        "summary": ""
      },
      {
        "name": "StarField",
        "kind": "re-export",
        "signature": "StarField",
        "summary": ""
      },
      {
        "name": "StarLayer",
        "kind": "re-export",
        "signature": "StarLayer",
        "summary": ""
      },
      {
        "name": "StarLayerPresets",
        "kind": "re-export",
        "signature": "StarLayerPresets",
        "summary": ""
      },
      {
        "name": "StarSystem",
        "kind": "re-export",
        "signature": "StarSystem",
        "summary": ""
      },
      {
        "name": "StarsWGSL",
        "kind": "re-export",
        "signature": "StarsWGSL",
        "summary": ""
      },
      {
        "name": "Sun",
        "kind": "re-export",
        "signature": "Sun",
        "summary": ""
      },
      {
        "name": "SunDefaults",
        "kind": "re-export",
        "signature": "SunDefaults",
        "summary": ""
      },
      {
        "name": "SunWGSL",
        "kind": "re-export",
        "signature": "SunWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/debug/GridRenderer",
    "path": "engine/reference/render/debug/GridRenderer.md",
    "source": "engine/render/debug/GridRenderer.js",
    "import": "/engine/render/debug/GridRenderer.js",
    "sourceHash": "7e5cb9a7a7f108cdb038e89edb56754b9a89e5fe0e5406c33c250f6c57799477",
    "summary": "GridRenderer - Infinite grid for 3D viewport Now powered by vGPU driver",
    "exports": [
      {
        "name": "GridRenderer",
        "kind": "class",
        "signature": "class GridRenderer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/debug/PhysicsLineRenderer",
    "path": "engine/reference/render/debug/PhysicsLineRenderer.md",
    "source": "engine/render/debug/PhysicsLineRenderer.js",
    "import": "/engine/render/debug/PhysicsLineRenderer.js",
    "sourceHash": "0284b3f8694744e5f2090e3da55a157d28ab7182f8a4d1f7b0408ebda511f9d5",
    "summary": "PhysicsLineRenderer.js - GPU Line Rendering for Physics Objects Renders ropes, wires, hair strands, and chain links using GPU instancing. Supports both line primitives and tube geometry for thicker cables.",
    "exports": [
      {
        "name": "PhysicsLineRenderer",
        "kind": "class",
        "signature": "class PhysicsLineRenderer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/debug/WireframeBoxRenderer",
    "path": "engine/reference/render/debug/WireframeBoxRenderer.md",
    "source": "engine/render/debug/WireframeBoxRenderer.js",
    "import": "/engine/render/debug/WireframeBoxRenderer.js",
    "sourceHash": "2a9eeb31dccabedffbea5f1f4d87e73b83fc56c8b8e12902ccf2310507d9390f",
    "summary": "WireframeBoxRenderer - Renders wireframe boxes for debug visualization Used to visualize voxel colliders in the editor Now powered by vGPU driver",
    "exports": [
      {
        "name": "WireframeBoxRenderer",
        "kind": "class",
        "signature": "class WireframeBoxRenderer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/debug/index",
    "path": "engine/reference/render/debug/index.md",
    "source": "engine/render/debug/index.js",
    "import": "/engine/render/debug/index.js",
    "sourceHash": "7036d4b6e1e10925aba41df41de5c15b55ba5e58422af3e793a744a53cface94",
    "summary": "Debug Renderers - GPU debug visualization tools These renderers are useful for both editor and runtime debug visualization.",
    "exports": [
      {
        "name": "GridRenderer",
        "kind": "re-export",
        "signature": "GridRenderer",
        "summary": ""
      },
      {
        "name": "PhysicsLineRenderer",
        "kind": "re-export",
        "signature": "PhysicsLineRenderer",
        "summary": ""
      },
      {
        "name": "WireframeBoxRenderer",
        "kind": "re-export",
        "signature": "WireframeBoxRenderer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/geometry/CapsuleGeometry",
    "path": "engine/reference/render/geometry/CapsuleGeometry.md",
    "source": "engine/render/geometry/CapsuleGeometry.js",
    "import": "/engine/render/geometry/CapsuleGeometry.js",
    "sourceHash": "6062ab7e9d7e3e1c7feb4e7aaa5b7798e0a2d7e36ab87a9f5fbf3089efd16f7b",
    "summary": "",
    "exports": [
      {
        "name": "createCapsuleGeometry",
        "kind": "function",
        "signature": "createCapsuleGeometry(radius = 0.3, height = 1.0, radialSegments = 16, hemisphereSegments = 8)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/geometry/ConeGeometry",
    "path": "engine/reference/render/geometry/ConeGeometry.md",
    "source": "engine/render/geometry/ConeGeometry.js",
    "import": "/engine/render/geometry/ConeGeometry.js",
    "sourceHash": "1a3b41c03df5fca87278f7eef74e887974f85922cb0574800ac3145891fe8930",
    "summary": "",
    "exports": [
      {
        "name": "createConeGeometry",
        "kind": "function",
        "signature": "createConeGeometry(radius = 0.5, height = 1.0, segments = 16)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/geometry/CubeGeometry",
    "path": "engine/reference/render/geometry/CubeGeometry.md",
    "source": "engine/render/geometry/CubeGeometry.js",
    "import": "/engine/render/geometry/CubeGeometry.js",
    "sourceHash": "60b32149ef420964144828f817bb4435cf9b5105e5acd76415287e154643a6ed",
    "summary": "",
    "exports": [
      {
        "name": "createCubeGeometry",
        "kind": "function",
        "signature": "createCubeGeometry(size = 1)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/geometry/CylinderGeometry",
    "path": "engine/reference/render/geometry/CylinderGeometry.md",
    "source": "engine/render/geometry/CylinderGeometry.js",
    "import": "/engine/render/geometry/CylinderGeometry.js",
    "sourceHash": "de08c510ef08f59d630bca95beb5d232861e4d7a87af5303815143a94cdeba2e",
    "summary": "",
    "exports": [
      {
        "name": "createHollowCylinderGeometry",
        "kind": "function",
        "signature": "createHollowCylinderGeometry(outerRadius = 0.5, innerRadius = 0.4, height = 1.0, radialSegments = 24,)",
        "summary": ""
      },
      {
        "name": "createCylinderGeometry",
        "kind": "function",
        "signature": "createCylinderGeometry(radius = 0.5, height = 1.0, radialSegments = 16, heightSegments = 1,)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/geometry/GroundGeometry",
    "path": "engine/reference/render/geometry/GroundGeometry.md",
    "source": "engine/render/geometry/GroundGeometry.js",
    "import": "/engine/render/geometry/GroundGeometry.js",
    "sourceHash": "4b852fef0ba874c4ec600f8cea763dbcdc83ae40b50e156b07493599901f6404",
    "summary": "",
    "exports": [
      {
        "name": "createGroundGeometry",
        "kind": "function",
        "signature": "createGroundGeometry(size = 30)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/geometry/PlaneGeometry",
    "path": "engine/reference/render/geometry/PlaneGeometry.md",
    "source": "engine/render/geometry/PlaneGeometry.js",
    "import": "/engine/render/geometry/PlaneGeometry.js",
    "sourceHash": "ccc29d54ea661fc458686f010638ebe282f1a96d9615d8840271e3f7e55b359f",
    "summary": "",
    "exports": [
      {
        "name": "createPlaneGeometry",
        "kind": "function",
        "signature": "createPlaneGeometry(size = 10, y = 0)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/geometry/PrimitiveGeometry",
    "path": "engine/reference/render/geometry/PrimitiveGeometry.md",
    "source": "engine/render/geometry/PrimitiveGeometry.js",
    "import": "/engine/render/geometry/PrimitiveGeometry.js",
    "sourceHash": "d78db203f9aecc7ce8e03bf89bcbe21921a01b0412bd5fbef030a086003e5dda",
    "summary": "Barrel export file for primitive geometry generators Re-exports all geometry modules for convenient importing",
    "exports": [
      {
        "name": "createCapsuleGeometry",
        "kind": "re-export",
        "signature": "createCapsuleGeometry",
        "summary": ""
      },
      {
        "name": "createConeGeometry",
        "kind": "re-export",
        "signature": "createConeGeometry",
        "summary": ""
      },
      {
        "name": "createCubeGeometry",
        "kind": "re-export",
        "signature": "createCubeGeometry",
        "summary": ""
      },
      {
        "name": "createCylinderGeometry",
        "kind": "re-export",
        "signature": "createCylinderGeometry",
        "summary": ""
      },
      {
        "name": "createGroundGeometry",
        "kind": "re-export",
        "signature": "createGroundGeometry",
        "summary": ""
      },
      {
        "name": "createHollowCylinderGeometry",
        "kind": "re-export",
        "signature": "createHollowCylinderGeometry",
        "summary": ""
      },
      {
        "name": "createPlaneGeometry",
        "kind": "re-export",
        "signature": "createPlaneGeometry",
        "summary": ""
      },
      {
        "name": "createSkyboxGeometry",
        "kind": "re-export",
        "signature": "createSkyboxGeometry",
        "summary": ""
      },
      {
        "name": "createSphereGeometry",
        "kind": "re-export",
        "signature": "createSphereGeometry",
        "summary": ""
      },
      {
        "name": "createTorusGeometry",
        "kind": "re-export",
        "signature": "createTorusGeometry",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/geometry/SkyboxGeometry",
    "path": "engine/reference/render/geometry/SkyboxGeometry.md",
    "source": "engine/render/geometry/SkyboxGeometry.js",
    "import": "/engine/render/geometry/SkyboxGeometry.js",
    "sourceHash": "8b4b1e8702104594a58fc580035de057d314ca973c868e831d83d110307c2616",
    "summary": "",
    "exports": [
      {
        "name": "createSkyboxGeometry",
        "kind": "function",
        "signature": "createSkyboxGeometry(size = 50)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/geometry/SphereGeometry",
    "path": "engine/reference/render/geometry/SphereGeometry.md",
    "source": "engine/render/geometry/SphereGeometry.js",
    "import": "/engine/render/geometry/SphereGeometry.js",
    "sourceHash": "fd4d824f4bcf3984e887455bd880f1a305e89c7f9084511238dd3a70e5d2dac3",
    "summary": "",
    "exports": [
      {
        "name": "createSphereGeometry",
        "kind": "function",
        "signature": "createSphereGeometry(radius = 0.5, widthSegments = 16, heightSegments = 12)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/geometry/StaticMeshBuilder",
    "path": "engine/reference/render/geometry/StaticMeshBuilder.md",
    "source": "engine/render/geometry/StaticMeshBuilder.js",
    "import": "/engine/render/geometry/StaticMeshBuilder.js",
    "sourceHash": "caedd5db47352d8b0b695e6e21d162b6770ccb1e9140d6f9987ed8863a07cea1",
    "summary": "",
    "exports": [
      {
        "name": "staticMeshVertexLayoutForGeometry",
        "kind": "function",
        "signature": "staticMeshVertexLayoutForGeometry(geometry)",
        "summary": ""
      },
      {
        "name": "staticMeshVertexDataFromGeometry",
        "kind": "function",
        "signature": "staticMeshVertexDataFromGeometry(geometry)",
        "summary": ""
      },
      {
        "name": "buildStaticMeshFromGeometry",
        "kind": "function",
        "signature": "buildStaticMeshFromGeometry(device, geometry, label, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/geometry/TorusGeometry",
    "path": "engine/reference/render/geometry/TorusGeometry.md",
    "source": "engine/render/geometry/TorusGeometry.js",
    "import": "/engine/render/geometry/TorusGeometry.js",
    "sourceHash": "f14de78134f776b6d649b6e10617c1ee4ca039c165d2cf0884589a38c48e4262",
    "summary": "",
    "exports": [
      {
        "name": "createTorusGeometry",
        "kind": "function",
        "signature": "createTorusGeometry(majorRadius = 0.4, minorRadius = 0.15, majorSegments = 24, minorSegments = 12)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/gpu/IndirectDrawSystem",
    "path": "engine/reference/render/gpu/IndirectDrawSystem.md",
    "source": "engine/render/gpu/IndirectDrawSystem.js",
    "import": "/engine/render/gpu/IndirectDrawSystem.js",
    "sourceHash": "04a76570c357f074f07a0d264654dd0278ce58badfb4b3b63cd111fec422ed39",
    "summary": "",
    "exports": [
      {
        "name": "IndirectDrawSystem",
        "kind": "class",
        "signature": "class IndirectDrawSystem",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/index",
    "path": "engine/reference/render/index.md",
    "source": "engine/render/index.js",
    "import": "/engine/render/index.js",
    "sourceHash": "0f5f50532d86bf6a44a78e5837037ddf315629c37b22b4f1f448ae515b40c7e6",
    "summary": "Engine Render Modules Exports all render-related utilities from subfolders",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/lighting/RealtimeGI",
    "path": "engine/reference/render/lighting/RealtimeGI.md",
    "source": "engine/render/lighting/RealtimeGI.js",
    "import": "/engine/render/lighting/RealtimeGI.js",
    "sourceHash": "7b44666a07d441c4cdd2a91bb4f834a5381e8c64f9a902670132912c4a236cc0",
    "summary": "",
    "exports": [
      {
        "name": "RealtimeGI",
        "kind": "class",
        "signature": "class RealtimeGI",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/materials/AnimatedMaterialSystem",
    "path": "engine/reference/render/materials/AnimatedMaterialSystem.md",
    "source": "engine/render/materials/AnimatedMaterialSystem.js",
    "import": "/engine/render/materials/AnimatedMaterialSystem.js",
    "sourceHash": "aeff82e937099ba15870230f4703a379569ac2ad0faa5f7febc05487e4b32a30",
    "summary": "AnimatedMaterialSystem.js Per-frame evaluation of animated material node graphs. Materials with Time nodes in their graph get evaluated every frame, producing live PBR values (baseColor, metallic, roughness, emissive) that the viewport renderer uses instead of static material definitions.",
    "exports": [
      {
        "name": "initAnimatedMaterials",
        "kind": "function",
        "signature": "async initAnimatedMaterials(materialLibrary)",
        "summary": "Initialize the animated material system. Scans all materials for animated node graphs and caches them."
      },
      {
        "name": "tickAnimatedMaterials",
        "kind": "function",
        "signature": "tickAnimatedMaterials()",
        "summary": "Evaluate all animated material graphs for this frame. Call once per frame before rendering entities."
      },
      {
        "name": "getAnimatedPBR",
        "kind": "function",
        "signature": "getAnimatedPBR(materialId)",
        "summary": "Get the current-frame animated PBR values for a material. Returns null if the material is not animated."
      },
      {
        "name": "isAnimatedMaterial",
        "kind": "function",
        "signature": "isAnimatedMaterial(materialId)",
        "summary": "Check if a material is registered as animated."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/materials/BindGroupManager",
    "path": "engine/reference/render/materials/BindGroupManager.md",
    "source": "engine/render/materials/BindGroupManager.js",
    "import": "/engine/render/materials/BindGroupManager.js",
    "sourceHash": "847bbcbda58f2ff535ec4694ab546e60ac7995aae2d7c3dad537e38ebfd1cb41",
    "summary": "BindGroupLayoutBuilder - Fluent API for building bind group layouts",
    "exports": [
      {
        "name": "BindGroupLayoutBuilder",
        "kind": "class",
        "signature": "class BindGroupLayoutBuilder",
        "summary": "BindGroupLayoutBuilder - Fluent API for building bind group layouts"
      },
      {
        "name": "FrameBindGroup",
        "kind": "class",
        "signature": "class FrameBindGroup",
        "summary": "FrameBindGroup - Manages Group 0 (per-frame global data)"
      },
      {
        "name": "MaterialBindGroup",
        "kind": "class",
        "signature": "class MaterialBindGroup",
        "summary": "MaterialBindGroup - Manages Group 1 (per-material data)"
      },
      {
        "name": "ObjectBindGroup",
        "kind": "class",
        "signature": "class ObjectBindGroup",
        "summary": "ObjectBindGroup - Manages Group 2 (per-object data like transforms)"
      },
      {
        "name": "BindGroupCache",
        "kind": "class",
        "signature": "class BindGroupCache",
        "summary": "BindGroupCache - Caches bind groups to avoid recreation"
      },
      {
        "name": "createVoxelBindGroupLayouts",
        "kind": "function",
        "signature": "createVoxelBindGroupLayouts(device)",
        "summary": "Create the standard voxel renderer bind group layouts"
      },
      {
        "name": "BIND_GROUP_FREQUENCY",
        "kind": "constant",
        "signature": "BIND_GROUP_FREQUENCY",
        "summary": "Bind group frequency tiers"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/materials/MaterialLibrary",
    "path": "engine/reference/render/materials/MaterialLibrary.md",
    "source": "engine/render/materials/MaterialLibrary.js",
    "import": "/engine/render/materials/MaterialLibrary.js",
    "sourceHash": "da56fe8b87daaedec0f3ef7f8880727b951c41185917b2f231ac25386fa994bd",
    "summary": "MaterialLibrary.js - Material CRUD & Persistence Manages a collection of PBR material definitions. Each material has: - PBR scalar properties (metallic, roughness, emissive intensity) - Color values (baseColor, emissiveColor) - Texture slot paths (albedo, normal, metallicRoughness, emissive, ao) - Metadata (id, label, tags) Persists to localStorage and can export/import JSON.",
    "exports": [
      {
        "name": "readMaterialLibraryRecord",
        "kind": "function",
        "signature": "readMaterialLibraryRecord(storage = globalThis.localStorage)",
        "summary": ""
      },
      {
        "name": "writeMaterialLibraryRecord",
        "kind": "function",
        "signature": "writeMaterialLibraryRecord(materials, storage = globalThis.localStorage)",
        "summary": ""
      },
      {
        "name": "normalizeMaterial",
        "kind": "function",
        "signature": "normalizeMaterial(input)",
        "summary": "Normalize a material descriptor, filling missing fields with defaults."
      },
      {
        "name": "createMaterialLibrary",
        "kind": "function",
        "signature": "createMaterialLibrary(storage = globalThis.localStorage)",
        "summary": "Create a MaterialLibrary instance."
      },
      {
        "name": "MATERIAL_LIBRARY_SCHEMA",
        "kind": "constant",
        "signature": "MATERIAL_LIBRARY_SCHEMA",
        "summary": ""
      },
      {
        "name": "MATERIAL_LIBRARY_SCHEMA_VERSION",
        "kind": "constant",
        "signature": "MATERIAL_LIBRARY_SCHEMA_VERSION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/materials/MaterialSystem",
    "path": "engine/reference/render/materials/MaterialSystem.md",
    "source": "engine/render/materials/MaterialSystem.js",
    "import": "/engine/render/materials/MaterialSystem.js",
    "sourceHash": "0efbdaf20e183c1b1a7632887511bea6745287c2386178b75b181b6c1efab815",
    "summary": "",
    "exports": [
      {
        "name": "normalizeMaterialDescriptor",
        "kind": "function",
        "signature": "normalizeMaterialDescriptor(input)",
        "summary": ""
      },
      {
        "name": "createMaterialSystem",
        "kind": "function",
        "signature": "createMaterialSystem(device, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/materials/PipelineCache",
    "path": "engine/reference/render/materials/PipelineCache.md",
    "source": "engine/render/materials/PipelineCache.js",
    "import": "/engine/render/materials/PipelineCache.js",
    "sourceHash": "b210e97a7906b46d028552d0c10240a2572363a58d44c76729e80f0e9206dc3d",
    "summary": "PipelineCache.js - WebGPU Pipeline Caching and Specialization Implements: 1. Pipeline caching with composite keys (shader + overrides + render state) 2. Async pipeline compilation to prevent frame hitches 3. Pipeline specialization via override constants 4. Automatic pipeline invalidation on shader changes",
    "exports": [
      {
        "name": "RenderStateDescriptor",
        "kind": "class",
        "signature": "class RenderStateDescriptor",
        "summary": "RenderStateDescriptor - Describes render pipeline state"
      },
      {
        "name": "PipelineDescriptor",
        "kind": "class",
        "signature": "class PipelineDescriptor",
        "summary": "PipelineDescriptor - Complete pipeline configuration"
      },
      {
        "name": "ComputePipelineDescriptor",
        "kind": "class",
        "signature": "class ComputePipelineDescriptor",
        "summary": ""
      },
      {
        "name": "PipelineCache",
        "kind": "class",
        "signature": "class PipelineCache",
        "summary": "PipelineCache - Caches compiled pipelines"
      },
      {
        "name": "ComputePipelineCache",
        "kind": "class",
        "signature": "class ComputePipelineCache",
        "summary": ""
      },
      {
        "name": "ShaderModuleCache",
        "kind": "class",
        "signature": "class ShaderModuleCache",
        "summary": "ShaderModuleCache - Caches compiled shader modules"
      },
      {
        "name": "MaterialPipelineManager",
        "kind": "class",
        "signature": "class MaterialPipelineManager",
        "summary": "MaterialPipelineManager - High-level material-to-pipeline management"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/materials/ShaderComposer",
    "path": "engine/reference/render/materials/ShaderComposer.md",
    "source": "engine/render/materials/ShaderComposer.js",
    "import": "/engine/render/materials/ShaderComposer.js",
    "sourceHash": "241e9acad1aa0f4ca5a84d42cbee32d3b4a4fe50154ac75a4d593be608670d3e",
    "summary": "ShaderChunkRegistry - Central registry for shader code chunks",
    "exports": [
      {
        "name": "ShaderChunkRegistry",
        "kind": "class",
        "signature": "class ShaderChunkRegistry",
        "summary": "ShaderChunkRegistry - Central registry for shader code chunks"
      },
      {
        "name": "PipelineOverrides",
        "kind": "class",
        "signature": "class PipelineOverrides",
        "summary": "PipelineOverrides - Manage WGSL override constants WGSL override constants allow compile-time specialization: ```wgsl override USE_NORMAL_MAP: bool = false; override ALPHA_CUTOFF: f32 = 0.5; ```"
      },
      {
        "name": "ShaderVariant",
        "kind": "class",
        "signature": "class ShaderVariant",
        "summary": "ShaderVariant - A specific configuration of a shader"
      },
      {
        "name": "UberShaderBuilder",
        "kind": "class",
        "signature": "class UberShaderBuilder",
        "summary": "UberShaderBuilder - Build ubershaders with feature toggles"
      },
      {
        "name": "createDefaultRegistry",
        "kind": "function",
        "signature": "createDefaultRegistry()",
        "summary": "Create a default shader chunk registry with standard chunks"
      },
      {
        "name": "STANDARD_CHUNKS",
        "kind": "constant",
        "signature": "STANDARD_CHUNKS",
        "summary": "Standard WGSL chunks for voxel rendering"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/materials/Std140Layout",
    "path": "engine/reference/render/materials/Std140Layout.md",
    "source": "engine/render/materials/Std140Layout.js",
    "import": "/engine/render/materials/Std140Layout.js",
    "sourceHash": "b302a6d42b557f2538074fbd90dd56c4c53e42df3c3042a0bd1880f3b41c3261",
    "summary": "Std140StructBuilder - Build CPU-side structs that match GPU layout exactly",
    "exports": [
      {
        "name": "Std140StructBuilder",
        "kind": "class",
        "signature": "class Std140StructBuilder",
        "summary": "Std140StructBuilder - Build CPU-side structs that match GPU layout exactly"
      },
      {
        "name": "Std140StructLayout",
        "kind": "class",
        "signature": "class Std140StructLayout",
        "summary": "Std140StructLayout - Immutable layout definition with write methods"
      },
      {
        "name": "alignOffset",
        "kind": "function",
        "signature": "alignOffset(currentOffset, alignment)",
        "summary": "Calculate aligned offset for a field"
      },
      {
        "name": "createFrameUniformsLayout",
        "kind": "function",
        "signature": "createFrameUniformsLayout()",
        "summary": "Create a FrameUniforms layout matching the VoxelRenderer"
      },
      {
        "name": "createChunkUniformsLayout",
        "kind": "function",
        "signature": "createChunkUniformsLayout()",
        "summary": "Create a ChunkUniforms layout"
      },
      {
        "name": "createPBRMaterialLayout",
        "kind": "function",
        "signature": "createPBRMaterialLayout()",
        "summary": "Create a MaterialUniforms layout for PBR materials"
      },
      {
        "name": "STD140_TYPES",
        "kind": "constant",
        "signature": "STD140_TYPES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/materials/TextureManager",
    "path": "engine/reference/render/materials/TextureManager.md",
    "source": "engine/render/materials/TextureManager.js",
    "import": "/engine/render/materials/TextureManager.js",
    "sourceHash": "f3af0fb1e7d010e34a4b56151e64068398a8c91994e25047151001cfc15670f5",
    "summary": "Create a TextureManager instance.",
    "exports": [
      {
        "name": "createTextureManager",
        "kind": "function",
        "signature": "createTextureManager(device, options = {})",
        "summary": "Create a TextureManager instance."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/materials/VoxelMaterial",
    "path": "engine/reference/render/materials/VoxelMaterial.md",
    "source": "engine/render/materials/VoxelMaterial.js",
    "import": "/engine/render/materials/VoxelMaterial.js",
    "sourceHash": "5bb14e08250cb9bf9e85eb226a0b8d6cb6cb6bf3df74ee76049da4d0347a5379",
    "summary": "VoxelMaterial.js - Production Voxel Material Implementation Now powered by vGPU driver Demonstrates the complete material system architecture: - Frequency-based bind groups (Frame/Material/Chunk) - std140-compliant uniform layouts - Pipeline specialization with override constants - Modular shader composition",
    "exports": [
      {
        "name": "VoxelMaterial",
        "kind": "class",
        "signature": "class VoxelMaterial",
        "summary": "VoxelMaterial - Complete material implementation for voxel rendering"
      },
      {
        "name": "createVoxelFrameLayout",
        "kind": "function",
        "signature": "createVoxelFrameLayout()",
        "summary": "Create the Frame uniforms layout (Group 0)"
      },
      {
        "name": "createVoxelMaterialLayout",
        "kind": "function",
        "signature": "createVoxelMaterialLayout()",
        "summary": "Create the Material uniforms layout (Group 1)"
      },
      {
        "name": "createVoxelChunkLayout",
        "kind": "function",
        "signature": "createVoxelChunkLayout()",
        "summary": "Create the Chunk uniforms layout (Group 2)"
      },
      {
        "name": "VOXEL_VERTEX_LAYOUT",
        "kind": "constant",
        "signature": "VOXEL_VERTEX_LAYOUT",
        "summary": "Standard voxel vertex buffer layout"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/materials/VoxelMaterialIntegration",
    "path": "engine/reference/render/materials/VoxelMaterialIntegration.md",
    "source": "engine/render/materials/VoxelMaterialIntegration.js",
    "import": "/engine/render/materials/VoxelMaterialIntegration.js",
    "sourceHash": "93e4962749e0688a62fe44404f57f136c37e25d969710a85cb1ad823942f5f70",
    "summary": "VoxelMaterialManager - Manages voxel materials with the new system",
    "exports": [
      {
        "name": "VoxelMaterialManager",
        "kind": "class",
        "signature": "class VoxelMaterialManager",
        "summary": "VoxelMaterialManager - Manages voxel materials with the new system"
      },
      {
        "name": "createVoxelFrameUniformsLayout",
        "kind": "function",
        "signature": "createVoxelFrameUniformsLayout()",
        "summary": "Create validated Frame uniforms layout matching VoxelRenderer shader"
      },
      {
        "name": "createVoxelChunkUniformsLayout",
        "kind": "function",
        "signature": "createVoxelChunkUniformsLayout()",
        "summary": "Create validated Chunk uniforms layout"
      },
      {
        "name": "createDefaultVoxelOverrides",
        "kind": "function",
        "signature": "createDefaultVoxelOverrides()",
        "summary": "Create default voxel pipeline overrides"
      },
      {
        "name": "createLowQualityOverrides",
        "kind": "function",
        "signature": "createLowQualityOverrides()",
        "summary": "Create low-quality overrides for performance"
      },
      {
        "name": "integrateWithVoxelRenderer",
        "kind": "function",
        "signature": "integrateWithVoxelRenderer(renderer, device)",
        "summary": "Integrate material system with existing VoxelRenderer"
      },
      {
        "name": "createValidatedFrameUniformsBuffer",
        "kind": "function",
        "signature": "createValidatedFrameUniformsBuffer(device)",
        "summary": "Create frame uniforms buffer with validated layout"
      },
      {
        "name": "createValidatedChunkUniformsBuffer",
        "kind": "function",
        "signature": "createValidatedChunkUniformsBuffer(device)",
        "summary": "Create chunk uniforms buffer with validated layout"
      },
      {
        "name": "VOXEL_FEATURES",
        "kind": "constant",
        "signature": "VOXEL_FEATURES",
        "summary": "Voxel shader features that can be toggled via overrides"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/materials/index",
    "path": "engine/reference/render/materials/index.md",
    "source": "engine/render/materials/index.js",
    "import": "/engine/render/materials/index.js",
    "sourceHash": "d5cbf10dc5a31e76ef0db245c541932218072c4ab989722337a84b5c162c34e6",
    "summary": "Create a complete material system for voxel rendering",
    "exports": [
      {
        "name": "createVoxelMaterialSystem",
        "kind": "function",
        "signature": "createVoxelMaterialSystem(device)",
        "summary": "Create a complete material system for voxel rendering"
      },
      {
        "name": "BIND_GROUP_FREQUENCY",
        "kind": "re-export",
        "signature": "BIND_GROUP_FREQUENCY",
        "summary": ""
      },
      {
        "name": "BindGroupCache",
        "kind": "re-export",
        "signature": "BindGroupCache",
        "summary": ""
      },
      {
        "name": "BindGroupLayoutBuilder",
        "kind": "re-export",
        "signature": "BindGroupLayoutBuilder",
        "summary": ""
      },
      {
        "name": "ComputePipelineCache",
        "kind": "re-export",
        "signature": "ComputePipelineCache",
        "summary": ""
      },
      {
        "name": "ComputePipelineDescriptor",
        "kind": "re-export",
        "signature": "ComputePipelineDescriptor",
        "summary": ""
      },
      {
        "name": "FrameBindGroup",
        "kind": "re-export",
        "signature": "FrameBindGroup",
        "summary": ""
      },
      {
        "name": "MaterialBindGroup",
        "kind": "re-export",
        "signature": "MaterialBindGroup",
        "summary": ""
      },
      {
        "name": "MaterialPipelineManager",
        "kind": "re-export",
        "signature": "MaterialPipelineManager",
        "summary": ""
      },
      {
        "name": "ObjectBindGroup",
        "kind": "re-export",
        "signature": "ObjectBindGroup",
        "summary": ""
      },
      {
        "name": "PipelineCache",
        "kind": "re-export",
        "signature": "PipelineCache",
        "summary": ""
      },
      {
        "name": "PipelineDescriptor",
        "kind": "re-export",
        "signature": "PipelineDescriptor",
        "summary": ""
      },
      {
        "name": "PipelineOverrides",
        "kind": "re-export",
        "signature": "PipelineOverrides",
        "summary": ""
      },
      {
        "name": "RenderStateDescriptor",
        "kind": "re-export",
        "signature": "RenderStateDescriptor",
        "summary": ""
      },
      {
        "name": "STANDARD_CHUNKS",
        "kind": "re-export",
        "signature": "STANDARD_CHUNKS",
        "summary": ""
      },
      {
        "name": "STD140_TYPES",
        "kind": "re-export",
        "signature": "STD140_TYPES",
        "summary": ""
      },
      {
        "name": "ShaderChunkRegistry",
        "kind": "re-export",
        "signature": "ShaderChunkRegistry",
        "summary": ""
      },
      {
        "name": "ShaderModuleCache",
        "kind": "re-export",
        "signature": "ShaderModuleCache",
        "summary": ""
      },
      {
        "name": "ShaderVariant",
        "kind": "re-export",
        "signature": "ShaderVariant",
        "summary": ""
      },
      {
        "name": "Std140StructBuilder",
        "kind": "re-export",
        "signature": "Std140StructBuilder",
        "summary": ""
      },
      {
        "name": "Std140StructLayout",
        "kind": "re-export",
        "signature": "Std140StructLayout",
        "summary": ""
      },
      {
        "name": "UberShaderBuilder",
        "kind": "re-export",
        "signature": "UberShaderBuilder",
        "summary": ""
      },
      {
        "name": "VOXEL_FEATURES",
        "kind": "re-export",
        "signature": "VOXEL_FEATURES",
        "summary": ""
      },
      {
        "name": "VoxelMaterialManager",
        "kind": "re-export",
        "signature": "VoxelMaterialManager",
        "summary": ""
      },
      {
        "name": "alignOffset",
        "kind": "re-export",
        "signature": "alignOffset",
        "summary": ""
      },
      {
        "name": "createChunkUniformsLayout",
        "kind": "re-export",
        "signature": "createChunkUniformsLayout",
        "summary": ""
      },
      {
        "name": "createDefaultRegistry",
        "kind": "re-export",
        "signature": "createDefaultRegistry",
        "summary": ""
      },
      {
        "name": "createDefaultVoxelOverrides",
        "kind": "re-export",
        "signature": "createDefaultVoxelOverrides",
        "summary": ""
      },
      {
        "name": "createFrameUniformsLayout",
        "kind": "re-export",
        "signature": "createFrameUniformsLayout",
        "summary": ""
      },
      {
        "name": "createLowQualityOverrides",
        "kind": "re-export",
        "signature": "createLowQualityOverrides",
        "summary": ""
      },
      {
        "name": "createMaterialLibrary",
        "kind": "re-export",
        "signature": "createMaterialLibrary",
        "summary": ""
      },
      {
        "name": "createMaterialSystem",
        "kind": "re-export",
        "signature": "createMaterialSystem",
        "summary": ""
      },
      {
        "name": "createPBRMaterialLayout",
        "kind": "re-export",
        "signature": "createPBRMaterialLayout",
        "summary": ""
      },
      {
        "name": "createTextureManager",
        "kind": "re-export",
        "signature": "createTextureManager",
        "summary": ""
      },
      {
        "name": "createValidatedChunkUniformsBuffer",
        "kind": "re-export",
        "signature": "createValidatedChunkUniformsBuffer",
        "summary": ""
      },
      {
        "name": "createValidatedFrameUniformsBuffer",
        "kind": "re-export",
        "signature": "createValidatedFrameUniformsBuffer",
        "summary": ""
      },
      {
        "name": "createVoxelBindGroupLayouts",
        "kind": "re-export",
        "signature": "createVoxelBindGroupLayouts",
        "summary": ""
      },
      {
        "name": "createVoxelChunkUniformsLayout",
        "kind": "re-export",
        "signature": "createVoxelChunkUniformsLayout",
        "summary": ""
      },
      {
        "name": "createVoxelFrameUniformsLayout",
        "kind": "re-export",
        "signature": "createVoxelFrameUniformsLayout",
        "summary": ""
      },
      {
        "name": "integrateWithVoxelRenderer",
        "kind": "re-export",
        "signature": "integrateWithVoxelRenderer",
        "summary": ""
      },
      {
        "name": "normalizeMaterial",
        "kind": "re-export",
        "signature": "normalizeMaterial",
        "summary": ""
      },
      {
        "name": "normalizeMaterialDescriptor",
        "kind": "re-export",
        "signature": "normalizeMaterialDescriptor",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/mesh/ClothMeshRenderer",
    "path": "engine/reference/render/mesh/ClothMeshRenderer.md",
    "source": "engine/render/mesh/ClothMeshRenderer.js",
    "import": "/engine/render/mesh/ClothMeshRenderer.js",
    "sourceHash": "df5205d002a6f32f0e755c3ff6f638b8fce929ced06570c8ff6619299980d376",
    "summary": "ClothMeshRenderer.js - GPU Cloth Mesh Rendering Renders cloth simulations as triangle meshes with proper shading. Reads particle positions from GPU buffer and generates mesh on the fly.",
    "exports": [
      {
        "name": "ClothMeshRenderer",
        "kind": "class",
        "signature": "class ClothMeshRenderer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/mesh/CustomMeshRegistry",
    "path": "engine/reference/render/mesh/CustomMeshRegistry.md",
    "source": "engine/render/mesh/CustomMeshRegistry.js",
    "import": "/engine/render/mesh/CustomMeshRegistry.js",
    "sourceHash": "09896bc5b783e59ff67753e2f9d11b30340a2d0b646a1d694bb300d416194c3f",
    "summary": "============================================================================ CustomMeshRegistry.js - Store imported mesh geometry for custom models ============================================================================",
    "exports": [
      {
        "name": "registerCustomMesh",
        "kind": "function",
        "signature": "registerCustomMesh(meshKey, geo)",
        "summary": "Register a custom mesh geometry."
      },
      {
        "name": "unregisterCustomMesh",
        "kind": "function",
        "signature": "unregisterCustomMesh(meshKey)",
        "summary": "Unregister a custom mesh."
      },
      {
        "name": "getCustomMesh",
        "kind": "function",
        "signature": "getCustomMesh(meshKey)",
        "summary": "Get geometry data for a custom mesh."
      },
      {
        "name": "isCustomMesh",
        "kind": "function",
        "signature": "isCustomMesh(meshType)",
        "summary": "Check if a meshType is a custom (imported) mesh."
      },
      {
        "name": "getRegisteredMeshTypes",
        "kind": "function",
        "signature": "getRegisteredMeshTypes()",
        "summary": "Get all registered custom mesh keys."
      },
      {
        "name": "onMeshRegistered",
        "kind": "function",
        "signature": "onMeshRegistered(fn)",
        "summary": "Subscribe to mesh registration events. Callback: (meshKey, geo) => void"
      },
      {
        "name": "getCustomMeshCount",
        "kind": "function",
        "signature": "getCustomMeshCount()",
        "summary": "Get count of registered custom meshes."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/mesh/EntityMeshRenderer",
    "path": "engine/reference/render/mesh/EntityMeshRenderer.md",
    "source": "engine/render/mesh/EntityMeshRenderer.js",
    "import": "/engine/render/mesh/EntityMeshRenderer.js",
    "sourceHash": "4c596adc351c3e2126ff808d7094db220c2bdacdee3efad9da959e2ede5a61bb",
    "summary": "",
    "exports": [
      {
        "name": "EntityMeshRenderer",
        "kind": "class",
        "signature": "class EntityMeshRenderer",
        "summary": ""
      },
      {
        "name": "entityMaterialParamsData",
        "kind": "function",
        "signature": "entityMaterialParamsData(options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/mesh/GPUSkinning",
    "path": "engine/reference/render/mesh/GPUSkinning.md",
    "source": "engine/render/mesh/GPUSkinning.js",
    "import": "/engine/render/mesh/GPUSkinning.js",
    "sourceHash": "8d9afd01100c42fbe1f1c544b3fce3fc21e1ae59996e54210ff8b1356e485a95",
    "summary": "============================================================================ GPUSkinning.js — Compute-shader skeletal skinning  Moves vertex skinning from CPU to GPU. Per skinned mesh: Static buffers (uploaded once):  bind-pose positions+normals+tangents, UVs, joint indices, joint weights Dynamic buffer (per frame):       skin matrices (jointCount × mat4x4) Output:                           interleaved vertex buffer (pos3+norm3+uv2+tangent4) with STORAGE|VERTEX usage so the existing render pipeline reads it directly.  The compute shader skins all vertices in parallel (workgroup_size=64). ============================================================================",
    "exports": [
      {
        "name": "GPUSkinning",
        "kind": "class",
        "signature": "class GPUSkinning",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/mesh/ProceduralSkeleton",
    "path": "engine/reference/render/mesh/ProceduralSkeleton.md",
    "source": "engine/render/mesh/ProceduralSkeleton.js",
    "import": "/engine/render/mesh/ProceduralSkeleton.js",
    "sourceHash": "b0fffec3d355091069957c1d9c828eeaf9645dbd5077d9d23114ef0edcaeac03",
    "summary": "============================================================================ ProceduralSkeleton.js — Auto-generate skeleton + skin weights for arbitrary meshes  Uses PCA to find principal axes, places bones along them, and computes smooth distance-based vertex weights (4 influences per vertex). Output format matches glTF import so it plugs directly into registerSkinnedMesh() / SkeletalAnimation.js. ============================================================================",
    "exports": [
      {
        "name": "generateProceduralSkeleton",
        "kind": "function",
        "signature": "generateProceduralSkeleton(positions, normals, options = {})",
        "summary": "Generate a procedural skeleton for an arbitrary mesh. Algorithm: 1. Compute mesh centroid + covariance matrix 2. PCA via Jacobi iteration → 3 principal axes sorted by extent 3. Place bones along principal axis (chain), with optional branches along secondary axis if mesh is wide enough 4. Compute per-vertex weights: 4 nearest bones, inverse-distance 5. Build inverse bind matrices (identity rotation, translation only)"
      },
      {
        "name": "augmentGeoWithSkeleton",
        "kind": "function",
        "signature": "augmentGeoWithSkeleton(geo, options)",
        "summary": "Convenience: generate skeleton AND augment geo object in-place. Returns the skeleton object for passing to registerSkinnedMesh."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/mesh/RopeMeshRenderer",
    "path": "engine/reference/render/mesh/RopeMeshRenderer.md",
    "source": "engine/render/mesh/RopeMeshRenderer.js",
    "import": "/engine/render/mesh/RopeMeshRenderer.js",
    "sourceHash": "4267285e542d7ae57b7055f634c1f37c4cd56203678896fd19961af15b860617",
    "summary": "RopeMeshRenderer.js - GPU Rope Mesh Rendering with Anisotropic Fiber Shading Renders rope simulations as smooth tube meshes with Marschner hair shading model. Supports twist, color blending, and material properties for realistic fiber appearance.",
    "exports": [
      {
        "name": "RopeMeshRenderer",
        "kind": "class",
        "signature": "class RopeMeshRenderer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/mesh/SkeletalAnimation",
    "path": "engine/reference/render/mesh/SkeletalAnimation.md",
    "source": "engine/render/mesh/SkeletalAnimation.js",
    "import": "/engine/render/mesh/SkeletalAnimation.js",
    "sourceHash": "4b4bff67cacdb1d683e8b968483b7d34e57d74e1077bd5e49d264b219b52820d",
    "summary": "============================================================================ SkeletalAnimation.js - CPU skeletal animation + skinning for imported models  Evaluates glTF animations per-frame, computes joint world matrices, and skins vertex positions/normals/tangents on CPU. Updates the GPU vertex buffer via EntityMeshRenderer. ============================================================================",
    "exports": [
      {
        "name": "registerSkinnedMesh",
        "kind": "function",
        "signature": "registerSkinnedMesh(meshKey, geo, skeleton, animations)",
        "summary": "Register a skinned mesh for animation playback."
      },
      {
        "name": "unregisterSkinnedMesh",
        "kind": "function",
        "signature": "unregisterSkinnedMesh(meshKey)",
        "summary": "Unregister a skinned mesh."
      },
      {
        "name": "getSkinnedMesh",
        "kind": "function",
        "signature": "getSkinnedMesh(meshKey)",
        "summary": "Get a skinned mesh instance."
      },
      {
        "name": "tickSkeletalAnimations",
        "kind": "function",
        "signature": "tickSkeletalAnimations(dt)",
        "summary": "Tick all active skinned meshes. Call once per frame before rendering."
      },
      {
        "name": "registerModelNodeAnimation",
        "kind": "function",
        "signature": "registerModelNodeAnimation(modelInstanceId, graph, animations, playbackState = null)",
        "summary": "Register ordinary glTF node animation once per model entity instance."
      },
      {
        "name": "unregisterModelNodeAnimation",
        "kind": "function",
        "signature": "unregisterModelNodeAnimation(modelInstanceId)",
        "summary": ""
      },
      {
        "name": "getModelNodeAnimation",
        "kind": "function",
        "signature": "getModelNodeAnimation(modelInstanceId)",
        "summary": ""
      },
      {
        "name": "getModelNodeAnimationState",
        "kind": "function",
        "signature": "getModelNodeAnimationState(modelInstanceId)",
        "summary": ""
      },
      {
        "name": "getModelNodeAnimationDescriptor",
        "kind": "function",
        "signature": "getModelNodeAnimationDescriptor(modelInstanceId)",
        "summary": ""
      },
      {
        "name": "setModelNodeAnimationState",
        "kind": "function",
        "signature": "setModelNodeAnimationState(modelInstanceId, playbackState)",
        "summary": ""
      },
      {
        "name": "getModelNodeWorldMatrix",
        "kind": "function",
        "signature": "getModelNodeWorldMatrix(modelInstanceId, nodeIndex)",
        "summary": ""
      },
      {
        "name": "getModelNodeAnimationKeys",
        "kind": "function",
        "signature": "getModelNodeAnimationKeys()",
        "summary": ""
      },
      {
        "name": "consumeModelNodeAnimationDirty",
        "kind": "function",
        "signature": "consumeModelNodeAnimationDirty(modelInstanceId)",
        "summary": ""
      },
      {
        "name": "bindSkinnedMeshNodeAnimation",
        "kind": "function",
        "signature": "bindSkinnedMeshNodeAnimation(meshKey, modelInstanceId)",
        "summary": ""
      },
      {
        "name": "isSkinnedMesh",
        "kind": "function",
        "signature": "isSkinnedMesh(meshKey)",
        "summary": "Check if a meshKey has skeletal animation."
      },
      {
        "name": "getSkinnedGeometry",
        "kind": "function",
        "signature": "getSkinnedGeometry(meshKey)",
        "summary": "Get the current skinned positions/normals/tangents for a mesh. Returns null if not a skinned mesh."
      },
      {
        "name": "getSkinnedBounds",
        "kind": "function",
        "signature": "getSkinnedBounds(meshKey)",
        "summary": "Compute current local-space skinned bounds from bind vertices and live skin matrices. This remains authoritative when GPU skinning intentionally leaves CPU outputs stale."
      },
      {
        "name": "getCachedSkinnedBounds",
        "kind": "function",
        "signature": "getCachedSkinnedBounds(meshKey)",
        "summary": "Get the current bounds already refreshed by the animation/ragdoll tick."
      },
      {
        "name": "getMorphWeights",
        "kind": "function",
        "signature": "getMorphWeights(meshKey)",
        "summary": ""
      },
      {
        "name": "setMorphWeights",
        "kind": "function",
        "signature": "setMorphWeights(meshKey, weights)",
        "summary": ""
      },
      {
        "name": "getMorphTargetCount",
        "kind": "function",
        "signature": "getMorphTargetCount(meshKey)",
        "summary": ""
      },
      {
        "name": "getModelMorphState",
        "kind": "function",
        "signature": "getModelMorphState(parts)",
        "summary": ""
      },
      {
        "name": "getModelMorphDescriptor",
        "kind": "function",
        "signature": "getModelMorphDescriptor(parts)",
        "summary": ""
      },
      {
        "name": "setModelMorphState",
        "kind": "function",
        "signature": "setModelMorphState(parts, state)",
        "summary": ""
      },
      {
        "name": "getSkinnedMeshKeys",
        "kind": "function",
        "signature": "getSkinnedMeshKeys()",
        "summary": "Get all registered skinned mesh keys."
      },
      {
        "name": "getBoneCapsules",
        "kind": "function",
        "signature": "getBoneCapsules(meshKey)",
        "summary": "Get per-bone capsule dimensions computed from vertex weights. Returns cached data computed once at registration time."
      },
      {
        "name": "getAnimatedBoneShapes",
        "kind": "function",
        "signature": "getAnimatedBoneShapes(meshKey, entityPos)",
        "summary": "Get ANIMATED bone shapes for visual overlay rendering. Returns current-frame bone positions/rotations with mesh-measured capsule sizes. Uses the CURRENT animated worldMatrices so capsules track the animation exactly. This is the PRIMARY API for the visual bone overlay in Viewport.js. Each bone returns: - pos: world position (midpoint between bone and first child) - rot: quaternion aligning Y-axis with bone direction - radius: mesh-measured perpendicular distance (90th percentile) - halfHeight: half the bone length minus radius - name: bone name for debug/classification - parentIndex: parent bone index (-1 for roots) - isTerminal: true for end/nub bones (skip rendering)"
      },
      {
        "name": "getBindPoseBones",
        "kind": "function",
        "signature": "getBindPoseBones(meshKey, entityPos)",
        "summary": "Get bind-pose bone data WITHOUT modifying state (no ragdoll, no animation stop). Used for edit-mode SDF collider visualization preview."
      },
      {
        "name": "enableRagdoll",
        "kind": "function",
        "signature": "enableRagdoll(meshKey, entityPos)",
        "summary": "Enable ragdoll mode for a skinned mesh. Stops animation and returns bind-pose bone world positions + hierarchy for creating physics bodies."
      },
      {
        "name": "setRagdollBoneTransforms",
        "kind": "function",
        "signature": "setRagdollBoneTransforms(meshKey, boneWorldMatrices)",
        "summary": "Update bone world matrices from ragdoll physics transforms, then reskin."
      },
      {
        "name": "disableRagdoll",
        "kind": "function",
        "signature": "disableRagdoll(meshKey)",
        "summary": "Disable ragdoll mode, resuming animation."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/mesh/VirtualGeometrySystem",
    "path": "engine/reference/render/mesh/VirtualGeometrySystem.md",
    "source": "engine/render/mesh/VirtualGeometrySystem.js",
    "import": "/engine/render/mesh/VirtualGeometrySystem.js",
    "sourceHash": "e357de7c40817d095e56143d5abde6ea61b1b7ef4df4a030f02d4f3db2886a18",
    "summary": "",
    "exports": [
      {
        "name": "VirtualGeometrySystem",
        "kind": "class",
        "signature": "class VirtualGeometrySystem",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/mesh/index",
    "path": "engine/reference/render/mesh/index.md",
    "source": "engine/render/mesh/index.js",
    "import": "/engine/render/mesh/index.js",
    "sourceHash": "a1a44fa691c576dc2e6235c36b911fd552a8dfb45876e44463a77443226b704b",
    "summary": "Mesh Renderers - GPU mesh rendering utilities",
    "exports": [
      {
        "name": "ClothMeshRenderer",
        "kind": "re-export",
        "signature": "ClothMeshRenderer",
        "summary": ""
      },
      {
        "name": "EntityMeshRenderer",
        "kind": "re-export",
        "signature": "EntityMeshRenderer",
        "summary": ""
      },
      {
        "name": "RopeMeshRenderer",
        "kind": "re-export",
        "signature": "RopeMeshRenderer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/assets/MorphAssetCodec",
    "path": "engine/reference/render/morphfield/assets/MorphAssetCodec.md",
    "source": "engine/render/morphfield/assets/MorphAssetCodec.js",
    "import": "/engine/render/morphfield/assets/MorphAssetCodec.js",
    "sourceHash": "0bbd5e27ba6414d4b92606e64c4e8ff950d6129acbd9ec6de602e2517bbab11d",
    "summary": "",
    "exports": [
      {
        "name": "encodeMorphAsset",
        "kind": "function",
        "signature": "async encodeMorphAsset(sceneInput, options = {})",
        "summary": ""
      },
      {
        "name": "decodeMorphAsset",
        "kind": "function",
        "signature": "async decodeMorphAsset(input, options = {})",
        "summary": ""
      },
      {
        "name": "loadMorphAsset",
        "kind": "function",
        "signature": "async loadMorphAsset(source, options = {})",
        "summary": ""
      },
      {
        "name": "writeMorphAsset",
        "kind": "constant",
        "signature": "writeMorphAsset",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/assets/MorphAssetFormat",
    "path": "engine/reference/render/morphfield/assets/MorphAssetFormat.md",
    "source": "engine/render/morphfield/assets/MorphAssetFormat.js",
    "import": "/engine/render/morphfield/assets/MorphAssetFormat.js",
    "sourceHash": "e7445cceb4685d4faba9713be4d96acde50da3eaecb6aeb5683d554df602752d",
    "summary": "",
    "exports": [
      {
        "name": "fourCCToUint32",
        "kind": "function",
        "signature": "fourCCToUint32(value)",
        "summary": ""
      },
      {
        "name": "uint32ToFourCC",
        "kind": "function",
        "signature": "uint32ToFourCC(value)",
        "summary": ""
      },
      {
        "name": "MORPH_ASSET_MAGIC",
        "kind": "constant",
        "signature": "MORPH_ASSET_MAGIC",
        "summary": ""
      },
      {
        "name": "MORPH_ASSET_HEADER_BYTES",
        "kind": "constant",
        "signature": "MORPH_ASSET_HEADER_BYTES",
        "summary": ""
      },
      {
        "name": "MORPH_ASSET_DIRECTORY_ENTRY_BYTES",
        "kind": "constant",
        "signature": "MORPH_ASSET_DIRECTORY_ENTRY_BYTES",
        "summary": ""
      },
      {
        "name": "MORPH_ASSET_VERSION",
        "kind": "constant",
        "signature": "MORPH_ASSET_VERSION",
        "summary": ""
      },
      {
        "name": "MORPH_HEADER_FLAG",
        "kind": "constant",
        "signature": "MORPH_HEADER_FLAG",
        "summary": ""
      },
      {
        "name": "MORPH_HEADER_FLAG_MASK",
        "kind": "constant",
        "signature": "MORPH_HEADER_FLAG_MASK",
        "summary": ""
      },
      {
        "name": "MORPH_CHUNK_FLAG",
        "kind": "constant",
        "signature": "MORPH_CHUNK_FLAG",
        "summary": ""
      },
      {
        "name": "MORPH_CHUNK_FLAG_MASK",
        "kind": "constant",
        "signature": "MORPH_CHUNK_FLAG_MASK",
        "summary": ""
      },
      {
        "name": "MORPH_COMPRESSION",
        "kind": "constant",
        "signature": "MORPH_COMPRESSION",
        "summary": ""
      },
      {
        "name": "MORPH_COMPRESSION_NAME",
        "kind": "constant",
        "signature": "MORPH_COMPRESSION_NAME",
        "summary": ""
      },
      {
        "name": "MORPH_CHUNK_TYPE",
        "kind": "constant",
        "signature": "MORPH_CHUNK_TYPE",
        "summary": ""
      },
      {
        "name": "MORPH_KNOWN_CHUNK_TYPES",
        "kind": "constant",
        "signature": "MORPH_KNOWN_CHUNK_TYPES",
        "summary": ""
      },
      {
        "name": "MORPH_ASSET_LIMITS",
        "kind": "constant",
        "signature": "MORPH_ASSET_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/assets/index",
    "path": "engine/reference/render/morphfield/assets/index.md",
    "source": "engine/render/morphfield/assets/index.js",
    "import": "/engine/render/morphfield/assets/index.js",
    "sourceHash": "dfaeada42bc84e4b921ef4f66848840bad244faeddc29f5787e3b8829300f09c",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/assets/selfTest",
    "path": "engine/reference/render/morphfield/assets/selfTest.md",
    "source": "engine/render/morphfield/assets/selfTest.js",
    "import": "/engine/render/morphfield/assets/selfTest.js",
    "sourceHash": "874c17b28dcf9c996dc3624585306313b94b13918e6444836021eacfb80c0bd2",
    "summary": "",
    "exports": [
      {
        "name": "runMorphAssetSelfTests",
        "kind": "function",
        "signature": "async runMorphAssetSelfTests()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/core/AabbBvh",
    "path": "engine/reference/render/morphfield/core/AabbBvh.md",
    "source": "engine/render/morphfield/core/AabbBvh.js",
    "import": "/engine/render/morphfield/core/AabbBvh.js",
    "sourceHash": "6a7a10f7e837d3fd73244cbceb19b805aee604c467663080650d12352a2c059f",
    "summary": "",
    "exports": [
      {
        "name": "AabbBvh",
        "kind": "class",
        "signature": "class AabbBvh",
        "summary": ""
      },
      {
        "name": "buildAabbBvh",
        "kind": "function",
        "signature": "buildAabbBvh(leaves)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/core/FieldletAbi",
    "path": "engine/reference/render/morphfield/core/FieldletAbi.md",
    "source": "engine/render/morphfield/core/FieldletAbi.js",
    "import": "/engine/render/morphfield/core/FieldletAbi.js",
    "sourceHash": "69d5f798feae1331d13bc63ac99bcb2fb38241f875550b5eb7de3743d1f1e954",
    "summary": "",
    "exports": [
      {
        "name": "createOutwardF32Bounds",
        "kind": "function",
        "signature": "createOutwardF32Bounds(bounds, expansion = 0)",
        "summary": ""
      },
      {
        "name": "packFieldletMeta",
        "kind": "function",
        "signature": "packFieldletMeta({ subtype = 0, family = 0, queryMask = 0, flags = 0 } = {})",
        "summary": ""
      },
      {
        "name": "unpackFieldletMeta",
        "kind": "function",
        "signature": "unpackFieldletMeta(meta)",
        "summary": ""
      },
      {
        "name": "createFieldletHeader",
        "kind": "function",
        "signature": "createFieldletHeader({ boundsRef, payloadRef, meta, certificateRef = INVALID_REF })",
        "summary": ""
      },
      {
        "name": "writeFieldletHeader",
        "kind": "function",
        "signature": "writeFieldletHeader(view, byteOffset, header)",
        "summary": ""
      },
      {
        "name": "readFieldletHeader",
        "kind": "function",
        "signature": "readFieldletHeader(view, byteOffset = 0)",
        "summary": ""
      },
      {
        "name": "createCertificateBundle",
        "kind": "function",
        "signature": "createCertificateBundle({ surfaceRef = INVALID_REF, mediumRef = INVALID_REF, motionRef = INVALID_REF, collisionRef = INVALID_REF, } = {})",
        "summary": ""
      },
      {
        "name": "createSurfaceCertificate",
        "kind": "function",
        "signature": "createSurfaceCertificate({ fieldValueErrorMax = 0, lipschitzMax, fallbackBand = 0, motionRadiusMax = 0, })",
        "summary": ""
      },
      {
        "name": "createMediumCertificate",
        "kind": "function",
        "signature": "createMediumCertificate({ densityMax = 0, extinctionMax = 0, emissionLuminanceMax = 0, motionRadiusMax = 0, } = {})",
        "summary": ""
      },
      {
        "name": "createMotionCertificate",
        "kind": "function",
        "signature": "createMotionCertificate({ displacementMax = 0, speedMax = 0, accelerationMax = 0, validDuration = 0, } = {})",
        "summary": ""
      },
      {
        "name": "createCollisionCertificate",
        "kind": "function",
        "signature": "createCollisionCertificate({ fieldValueErrorMax = 0, lipschitzMax, contactOffset, contactSlop = 0, motionRadiusMax = 0, })",
        "summary": ""
      },
      {
        "name": "safeCertifiedStep",
        "kind": "function",
        "signature": "safeCertifiedStep(fieldEstimate, certificate)",
        "summary": ""
      },
      {
        "name": "validateFieldletAbi",
        "kind": "function",
        "signature": "validateFieldletAbi()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/core/MeshTopologyValidation",
    "path": "engine/reference/render/morphfield/core/MeshTopologyValidation.md",
    "source": "engine/render/morphfield/core/MeshTopologyValidation.js",
    "import": "/engine/render/morphfield/core/MeshTopologyValidation.js",
    "sourceHash": "3874c1d485cfa1edc782a9998870ffb6337d56d3b3b56a5e176da14e73c62516",
    "summary": "Validate finite indexed triangle geometry and, when requested, prove an oriented closed 2-manifold index topology. This is shared by authored indexed Nexels and extracted surface-cache publication.",
    "exports": [
      {
        "name": "validateIndexedTriangleMesh",
        "kind": "function",
        "signature": "validateIndexedTriangleMesh(mesh, options = {})",
        "summary": "Validate finite indexed triangle geometry and, when requested, prove an oriented closed 2-manifold index topology. This is shared by authored indexed Nexels and extracted surface-cache publication."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/core/MorphFieldCompiler",
    "path": "engine/reference/render/morphfield/core/MorphFieldCompiler.md",
    "source": "engine/render/morphfield/core/MorphFieldCompiler.js",
    "import": "/engine/render/morphfield/core/MorphFieldCompiler.js",
    "sourceHash": "f30c828239cc9ff5ebdfc6a61b415022bc627ef8200fa6e7f356c4b8209959d6",
    "summary": "Qualify a structured-cloned/worker result by deterministically recompiling its authoritative semantic snapshot and comparing every executable ABI byte. This is the cross-realm path; normal same-realm compiler output uses the private registry above and does not pay for a second compilation.",
    "exports": [
      {
        "name": "MorphFieldCompiler",
        "kind": "class",
        "signature": "class MorphFieldCompiler",
        "summary": ""
      },
      {
        "name": "isCompilerProducedCompiledScene",
        "kind": "function",
        "signature": "isCompilerProducedCompiledScene(value)",
        "summary": ""
      },
      {
        "name": "verifyCompiledSceneProvenance",
        "kind": "function",
        "signature": "verifyCompiledSceneProvenance(value)",
        "summary": "Qualify a structured-cloned/worker result by deterministically recompiling its authoritative semantic snapshot and comparing every executable ABI byte. This is the cross-realm path; normal same-realm compiler output uses the private registry above and does not pay for a second compilation."
      },
      {
        "name": "inspectNexelCompilerFeasibility",
        "kind": "function",
        "signature": "inspectNexelCompilerFeasibility(input)",
        "summary": "Run the compiler's exact isolated-descriptor admission gates synchronously. Capability inspection uses this probe so it cannot claim a direct GPU path for a descriptor that compilation would later reject."
      },
      {
        "name": "createMorphFieldCompiler",
        "kind": "function",
        "signature": "createMorphFieldCompiler(options)",
        "summary": ""
      },
      {
        "name": "compileMorphFieldScene",
        "kind": "function",
        "signature": "async compileMorphFieldScene(scene, options)",
        "summary": ""
      },
      {
        "name": "COMPILED_PATCH_SCHEMA",
        "kind": "re-export",
        "signature": "COMPILED_PATCH_SCHEMA",
        "summary": ""
      },
      {
        "name": "COMPILED_SCENE_SCHEMA",
        "kind": "re-export",
        "signature": "COMPILED_SCENE_SCHEMA",
        "summary": ""
      },
      {
        "name": "RUNTIME_DELTA_SCHEMA",
        "kind": "re-export",
        "signature": "RUNTIME_DELTA_SCHEMA",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/core/NexelScene",
    "path": "engine/reference/render/morphfield/core/NexelScene.md",
    "source": "engine/render/morphfield/core/NexelScene.js",
    "import": "/engine/render/morphfield/core/NexelScene.js",
    "sourceHash": "c96f3e0e5dc1e6eb51606550ad58c272e4125e6316aea2ad155cb4680ef3fa69",
    "summary": "",
    "exports": [
      {
        "name": "NexelScene",
        "kind": "class",
        "signature": "class NexelScene",
        "summary": ""
      },
      {
        "name": "normalizeNexelPatch",
        "kind": "function",
        "signature": "normalizeNexelPatch(input)",
        "summary": ""
      },
      {
        "name": "createNexelScene",
        "kind": "function",
        "signature": "createNexelScene(options)",
        "summary": ""
      },
      {
        "name": "isNexelScene",
        "kind": "function",
        "signature": "isNexelScene(value)",
        "summary": ""
      },
      {
        "name": "NEXEL_PATCH_SCHEMA",
        "kind": "re-export",
        "signature": "NEXEL_PATCH_SCHEMA",
        "summary": ""
      },
      {
        "name": "NEXEL_SCENE_SCHEMA",
        "kind": "re-export",
        "signature": "NEXEL_SCENE_SCHEMA",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/core/ReferenceQueries",
    "path": "engine/reference/render/morphfield/core/ReferenceQueries.md",
    "source": "engine/render/morphfield/core/ReferenceQueries.js",
    "import": "/engine/render/morphfield/core/ReferenceQueries.js",
    "sourceHash": "0dfdeb837f906c5cb597751cb91b03172d35ad36b296e91b25ab820a0f531581",
    "summary": "",
    "exports": [
      {
        "name": "MorphFieldReferenceEvaluator",
        "kind": "class",
        "signature": "class MorphFieldReferenceEvaluator",
        "summary": ""
      },
      {
        "name": "evaluateSourceDistance",
        "kind": "function",
        "signature": "evaluateSourceDistance(source, pointValue)",
        "summary": ""
      },
      {
        "name": "evaluateNexelDistance",
        "kind": "function",
        "signature": "evaluateNexelDistance(nexelValue, pointValue)",
        "summary": ""
      },
      {
        "name": "createMorphFieldReferenceEvaluator",
        "kind": "function",
        "signature": "createMorphFieldReferenceEvaluator(sceneOrCompiled)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/core/Transform",
    "path": "engine/reference/render/morphfield/core/Transform.md",
    "source": "engine/render/morphfield/core/Transform.js",
    "import": "/engine/render/morphfield/core/Transform.js",
    "sourceHash": "b86e4be3c9d2ec8af42a442579bbccf0683dda261b4c83b6c4d354b37a48aded",
    "summary": "",
    "exports": [
      {
        "name": "normalizeVector3",
        "kind": "function",
        "signature": "normalizeVector3(value, path = 'vector', fallback = [0, 0, 0])",
        "summary": ""
      },
      {
        "name": "normalizeQuaternion",
        "kind": "function",
        "signature": "normalizeQuaternion(value, path = 'rotation')",
        "summary": ""
      },
      {
        "name": "matrixFromRigidUniformTransform",
        "kind": "function",
        "signature": "matrixFromRigidUniformTransform(translation, rotation, scale)",
        "summary": ""
      },
      {
        "name": "normalizeTransform",
        "kind": "function",
        "signature": "normalizeTransform(input = undefined, path = 'transform')",
        "summary": ""
      },
      {
        "name": "isIdentityTransform",
        "kind": "function",
        "signature": "isIdentityTransform(transform)",
        "summary": ""
      },
      {
        "name": "transformPoint",
        "kind": "function",
        "signature": "transformPoint(matrix, point)",
        "summary": ""
      },
      {
        "name": "transformDirection",
        "kind": "function",
        "signature": "transformDirection(matrix, direction)",
        "summary": ""
      },
      {
        "name": "transformAabb",
        "kind": "function",
        "signature": "transformAabb(bounds, transform)",
        "summary": ""
      },
      {
        "name": "composeTransforms",
        "kind": "function",
        "signature": "composeTransforms(parent, child)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/core/constants",
    "path": "engine/reference/render/morphfield/core/constants.md",
    "source": "engine/render/morphfield/core/constants.js",
    "import": "/engine/render/morphfield/core/constants.js",
    "sourceHash": "922ff6ecd178ff759bab70df00d42539551e54380a5f1fa133a231ecf83a9c45",
    "summary": "",
    "exports": [
      {
        "name": "queryMaskForKind",
        "kind": "function",
        "signature": "queryMaskForKind(kind)",
        "summary": ""
      },
      {
        "name": "MORPHFIELD_SCHEMA_VERSION",
        "kind": "constant",
        "signature": "MORPHFIELD_SCHEMA_VERSION",
        "summary": ""
      },
      {
        "name": "FIELDLET_FAMILY",
        "kind": "constant",
        "signature": "FIELDLET_FAMILY",
        "summary": ""
      },
      {
        "name": "FIELDLET_FAMILY_NAME",
        "kind": "constant",
        "signature": "FIELDLET_FAMILY_NAME",
        "summary": ""
      },
      {
        "name": "FIELDLET_SUBTYPE",
        "kind": "constant",
        "signature": "FIELDLET_SUBTYPE",
        "summary": ""
      },
      {
        "name": "QUERY_KIND",
        "kind": "constant",
        "signature": "QUERY_KIND",
        "summary": ""
      },
      {
        "name": "QUERY_MASK",
        "kind": "constant",
        "signature": "QUERY_MASK",
        "summary": ""
      },
      {
        "name": "FIELDLET_FLAG",
        "kind": "constant",
        "signature": "FIELDLET_FLAG",
        "summary": ""
      },
      {
        "name": "META_LAYOUT",
        "kind": "constant",
        "signature": "META_LAYOUT",
        "summary": ""
      },
      {
        "name": "INVALID_REF",
        "kind": "constant",
        "signature": "INVALID_REF",
        "summary": ""
      },
      {
        "name": "FIELDLET_HEADER_BYTES",
        "kind": "constant",
        "signature": "FIELDLET_HEADER_BYTES",
        "summary": ""
      },
      {
        "name": "FIELDLET_HEADER_WORDS",
        "kind": "constant",
        "signature": "FIELDLET_HEADER_WORDS",
        "summary": ""
      },
      {
        "name": "CERTIFICATE_BUNDLE_BYTES",
        "kind": "constant",
        "signature": "CERTIFICATE_BUNDLE_BYTES",
        "summary": ""
      },
      {
        "name": "CERTIFICATE_RECORD_BYTES",
        "kind": "constant",
        "signature": "CERTIFICATE_RECORD_BYTES",
        "summary": ""
      },
      {
        "name": "FIELDLET_HEADER_WORD",
        "kind": "constant",
        "signature": "FIELDLET_HEADER_WORD",
        "summary": ""
      },
      {
        "name": "CERTIFICATE_BUNDLE_WORD",
        "kind": "constant",
        "signature": "CERTIFICATE_BUNDLE_WORD",
        "summary": ""
      },
      {
        "name": "ANALYTIC_OPCODE",
        "kind": "constant",
        "signature": "ANALYTIC_OPCODE",
        "summary": ""
      },
      {
        "name": "PAYLOAD_SHAPE",
        "kind": "constant",
        "signature": "PAYLOAD_SHAPE",
        "summary": ""
      },
      {
        "name": "ANALYTIC_LIMITS",
        "kind": "constant",
        "signature": "ANALYTIC_LIMITS",
        "summary": ""
      },
      {
        "name": "ANALYTIC_GPU_PARAMETER_MINIMUM",
        "kind": "constant",
        "signature": "ANALYTIC_GPU_PARAMETER_MINIMUM",
        "summary": ""
      },
      {
        "name": "NEXEL_LIMITS",
        "kind": "constant",
        "signature": "NEXEL_LIMITS",
        "summary": ""
      },
      {
        "name": "SOURCE_KIND",
        "kind": "constant",
        "signature": "SOURCE_KIND",
        "summary": ""
      },
      {
        "name": "CSG_OPERATION",
        "kind": "constant",
        "signature": "CSG_OPERATION",
        "summary": ""
      },
      {
        "name": "UPDATE_CLASS",
        "kind": "constant",
        "signature": "UPDATE_CLASS",
        "summary": ""
      },
      {
        "name": "TOPOLOGY_REQUIREMENT",
        "kind": "constant",
        "signature": "TOPOLOGY_REQUIREMENT",
        "summary": ""
      },
      {
        "name": "FEATURE_MODE",
        "kind": "constant",
        "signature": "FEATURE_MODE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/core/errors",
    "path": "engine/reference/render/morphfield/core/errors.md",
    "source": "engine/render/morphfield/core/errors.js",
    "import": "/engine/render/morphfield/core/errors.js",
    "sourceHash": "533330a8f55988171313011c0a7052d9a5ec18b7ca44239d91c872fb08f5fde1",
    "summary": "",
    "exports": [
      {
        "name": "MorphFieldError",
        "kind": "class",
        "signature": "class MorphFieldError extends Error",
        "summary": ""
      },
      {
        "name": "failMorphField",
        "kind": "function",
        "signature": "failMorphField(code, message, details = undefined)",
        "summary": ""
      },
      {
        "name": "invariant",
        "kind": "function",
        "signature": "invariant(condition, code, message, details = undefined)",
        "summary": ""
      },
      {
        "name": "asMorphFieldError",
        "kind": "function",
        "signature": "asMorphFieldError(error, code, message, details = undefined)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/core/index",
    "path": "engine/reference/render/morphfield/core/index.md",
    "source": "engine/render/morphfield/core/index.js",
    "import": "/engine/render/morphfield/core/index.js",
    "sourceHash": "53a4ac433583e78c18ea7680cf24bb4e9f722ec5112bd32f95c778e934775629",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/core/selfTest",
    "path": "engine/reference/render/morphfield/core/selfTest.md",
    "source": "engine/render/morphfield/core/selfTest.js",
    "import": "/engine/render/morphfield/core/selfTest.js",
    "sourceHash": "252515dd36ce7197d17b634a7cbf02d8317989720cd938cc757db1dd3a956016",
    "summary": "",
    "exports": [
      {
        "name": "runMorphFieldCoreSelfTests",
        "kind": "function",
        "signature": "async runMorphFieldCoreSelfTests()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/core/serialization",
    "path": "engine/reference/render/morphfield/core/serialization.md",
    "source": "engine/render/morphfield/core/serialization.js",
    "import": "/engine/render/morphfield/core/serialization.js",
    "sourceHash": "3fd1e9aa583b9962d5079d5db9f7b4b6ae63d9b96e334d6c27bc09ff7853904a",
    "summary": "Compare identifiers by ECMAScript UTF-16 code-unit order. Unlike localeCompare(), this ordering is independent of the host locale and ICU version, so packed Fieldlet indices remain reproducible across machines.",
    "exports": [
      {
        "name": "isPlainObject",
        "kind": "function",
        "signature": "isPlainObject(value)",
        "summary": ""
      },
      {
        "name": "compareCanonicalStrings",
        "kind": "function",
        "signature": "compareCanonicalStrings(left, right)",
        "summary": "Compare identifiers by ECMAScript UTF-16 code-unit order. Unlike localeCompare(), this ordering is independent of the host locale and ICU version, so packed Fieldlet indices remain reproducible across machines."
      },
      {
        "name": "canonicalize",
        "kind": "function",
        "signature": "canonicalize(value, path = '$', options = {})",
        "summary": ""
      },
      {
        "name": "canonicalStringify",
        "kind": "function",
        "signature": "canonicalStringify(value, options = {})",
        "summary": ""
      },
      {
        "name": "canonicalParse",
        "kind": "function",
        "signature": "canonicalParse(text, options = {})",
        "summary": ""
      },
      {
        "name": "deepFreeze",
        "kind": "function",
        "signature": "deepFreeze(value, visited = new WeakSet()",
        "summary": ""
      },
      {
        "name": "cloneCanonical",
        "kind": "function",
        "signature": "cloneCanonical(value)",
        "summary": ""
      },
      {
        "name": "utf8Encode",
        "kind": "function",
        "signature": "utf8Encode(text)",
        "summary": ""
      },
      {
        "name": "utf8Decode",
        "kind": "function",
        "signature": "utf8Decode(bytes, options = {})",
        "summary": ""
      },
      {
        "name": "MORPHFIELD_CANONICAL_LIMITS",
        "kind": "constant",
        "signature": "MORPHFIELD_CANONICAL_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/core/validation",
    "path": "engine/reference/render/morphfield/core/validation.md",
    "source": "engine/render/morphfield/core/validation.js",
    "import": "/engine/render/morphfield/core/validation.js",
    "sourceHash": "4978d7f3cb256e8c36df8109264d64f50a79f2941884070167bfd2fb176d2f64",
    "summary": "",
    "exports": [
      {
        "name": "normalizeBounds",
        "kind": "function",
        "signature": "normalizeBounds(value, path = 'bounds')",
        "summary": ""
      },
      {
        "name": "normalizeSource",
        "kind": "function",
        "signature": "normalizeSource(input, path = 'source', depth = 0, options = {})",
        "summary": ""
      },
      {
        "name": "validateMaterialF32Channels",
        "kind": "function",
        "signature": "validateMaterialF32Channels(material, path = 'material')",
        "summary": ""
      },
      {
        "name": "validateNexelId",
        "kind": "function",
        "signature": "validateNexelId(value, path = 'id')",
        "summary": ""
      },
      {
        "name": "normalizeNexelDescriptor",
        "kind": "function",
        "signature": "normalizeNexelDescriptor(input, path = 'nexel')",
        "summary": ""
      },
      {
        "name": "planRepresentation",
        "kind": "function",
        "signature": "planRepresentation(source)",
        "summary": ""
      },
      {
        "name": "computeSourceBounds",
        "kind": "function",
        "signature": "computeSourceBounds(source)",
        "summary": ""
      },
      {
        "name": "computeNexelBounds",
        "kind": "function",
        "signature": "computeNexelBounds(nexel)",
        "summary": ""
      },
      {
        "name": "computeNexelQueryMask",
        "kind": "function",
        "signature": "computeNexelQueryMask(nexel)",
        "summary": ""
      },
      {
        "name": "sourceContainsLocalTransforms",
        "kind": "function",
        "signature": "sourceContainsLocalTransforms(source)",
        "summary": ""
      },
      {
        "name": "countAnalyticInstructions",
        "kind": "function",
        "signature": "countAnalyticInstructions(source)",
        "summary": ""
      },
      {
        "name": "maximumAnalyticStackDepth",
        "kind": "function",
        "signature": "maximumAnalyticStackDepth(source)",
        "summary": ""
      },
      {
        "name": "MORPHFIELD_F32_MAX",
        "kind": "constant",
        "signature": "MORPHFIELD_F32_MAX",
        "summary": ""
      },
      {
        "name": "ORIENTED_KERNEL_SUPPORT_SQUARED_RADIUS",
        "kind": "constant",
        "signature": "ORIENTED_KERNEL_SUPPORT_SQUARED_RADIUS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/index",
    "path": "engine/reference/render/morphfield/index.md",
    "source": "engine/render/morphfield/index.js",
    "import": "/engine/render/morphfield/index.js",
    "sourceHash": "6fbe91a745a7d5298b89c516e1a2377d651a56bc01799221c5dd89ebe94b3d60",
    "summary": "Create a device-independent semantic Nexel scene.",
    "exports": [
      {
        "name": "createScene",
        "kind": "function",
        "signature": "createScene(options)",
        "summary": "Create a device-independent semantic Nexel scene."
      },
      {
        "name": "createCompiler",
        "kind": "function",
        "signature": "createCompiler(options)",
        "summary": "Create a deterministic device-independent MorphField compiler."
      },
      {
        "name": "encodeAsset",
        "kind": "function",
        "signature": "encodeAsset(scene, options)",
        "summary": "Encode a semantic scene into a bounded, checksummed MOR2 container."
      },
      {
        "name": "loadAsset",
        "kind": "function",
        "signature": "async loadAsset(source, options)",
        "summary": "Load a MOR2 container and return its authoritative semantic Nexel scene. Use inspectAsset() when chunk metadata or provenance is also required."
      },
      {
        "name": "inspectAsset",
        "kind": "function",
        "signature": "inspectAsset(source, options)",
        "summary": "Decode a MOR2 container while retaining provenance and optional chunks."
      },
      {
        "name": "createRenderer",
        "kind": "function",
        "signature": "createRenderer(options)",
        "summary": "Create an external-encoder renderer that borrows its host GPUDevice."
      },
      {
        "name": "createPathTracer",
        "kind": "function",
        "signature": "createPathTracer(options)",
        "summary": "Create the bounded-queue progressive compute path tracer."
      },
      {
        "name": "createMicrostructureRenderer",
        "kind": "function",
        "signature": "createMicrostructureRenderer(options)",
        "summary": "Create the portable u32 render-cluster decoder on a borrowed GPU device."
      },
      {
        "name": "createAffineBrickRenderer",
        "kind": "function",
        "signature": "createAffineBrickRenderer(options)",
        "summary": "Create the direct 32-byte AFFINE4 brick decoder on a borrowed GPU device."
      },
      {
        "name": "MorphField",
        "kind": "constant",
        "signature": "MorphField",
        "summary": "Stable public namespace used by Engine.MorphField and bundled window.PE. Internal implementation groups remain inspectable without flattening conflicting ABI aliases into the public method surface."
      },
      {
        "name": "MORPHFIELD_LOGICAL_PHASES",
        "kind": "re-export",
        "signature": "MORPHFIELD_LOGICAL_PHASES",
        "summary": ""
      },
      {
        "name": "MORPHFIELD_QUALITY_TIERS",
        "kind": "re-export",
        "signature": "MORPHFIELD_QUALITY_TIERS",
        "summary": ""
      },
      {
        "name": "MorphFieldQueryEncoder",
        "kind": "re-export",
        "signature": "MorphFieldQueryEncoder",
        "summary": ""
      },
      {
        "name": "MorphFieldRenderer",
        "kind": "re-export",
        "signature": "MorphFieldRenderer",
        "summary": ""
      },
      {
        "name": "MorphFieldWavefrontPathTracer",
        "kind": "re-export",
        "signature": "MorphFieldWavefrontPathTracer",
        "summary": ""
      },
      {
        "name": "NexelAffineBrickRenderer",
        "kind": "re-export",
        "signature": "NexelAffineBrickRenderer",
        "summary": ""
      },
      {
        "name": "NexelMicrostructureRenderer",
        "kind": "re-export",
        "signature": "NexelMicrostructureRenderer",
        "summary": ""
      },
      {
        "name": "canonicalizeCompiledScene",
        "kind": "re-export",
        "signature": "canonicalizeCompiledScene",
        "summary": ""
      },
      {
        "name": "createNexelAffineBrickRenderer",
        "kind": "re-export",
        "signature": "createNexelAffineBrickRenderer",
        "summary": ""
      },
      {
        "name": "createNexelMicrostructureRenderer",
        "kind": "re-export",
        "signature": "createNexelMicrostructureRenderer",
        "summary": ""
      },
      {
        "name": "createWavefrontPathTracer",
        "kind": "re-export",
        "signature": "createWavefrontPathTracer",
        "summary": ""
      },
      {
        "name": "inspectDeviceCapabilities",
        "kind": "re-export",
        "signature": "inspectDeviceCapabilities",
        "summary": ""
      },
      {
        "name": "inspectNexelComputeCapabilities",
        "kind": "re-export",
        "signature": "inspectNexelComputeCapabilities",
        "summary": ""
      },
      {
        "name": "validateBorrowedDevice",
        "kind": "re-export",
        "signature": "validateBorrowedDevice",
        "summary": ""
      },
      {
        "name": "validateCompiledSceneAbi",
        "kind": "re-export",
        "signature": "validateCompiledSceneAbi",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/AdaptiveQualityGovernor",
    "path": "engine/reference/render/morphfield/runtime/AdaptiveQualityGovernor.md",
    "source": "engine/render/morphfield/runtime/AdaptiveQualityGovernor.js",
    "import": "/engine/render/morphfield/runtime/AdaptiveQualityGovernor.js",
    "sourceHash": "909f4ea54d5aa39a4e8c5a355c948be07789461ddea1d2349b4f80e6e790e914",
    "summary": "",
    "exports": [
      {
        "name": "normalizeQualityDecision",
        "kind": "function",
        "signature": "normalizeQualityDecision(decision, fallback, options = {})",
        "summary": ""
      },
      {
        "name": "MORPHFIELD_QUALITY_TIERS",
        "kind": "constant",
        "signature": "MORPHFIELD_QUALITY_TIERS",
        "summary": ""
      },
      {
        "name": "AdaptiveQualityGovernor",
        "kind": "re-export",
        "signature": "AdaptiveQualityGovernor",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/MorphFieldRenderer",
    "path": "engine/reference/render/morphfield/runtime/MorphFieldRenderer.md",
    "source": "engine/render/morphfield/runtime/MorphFieldRenderer.js",
    "import": "/engine/render/morphfield/runtime/MorphFieldRenderer.js",
    "sourceHash": "c3eef7dc3c65f61b9864d77c133b1000ac5bb572ee462af31cf8bbffac776258",
    "summary": "",
    "exports": [
      {
        "name": "MorphFieldRenderer",
        "kind": "class",
        "signature": "class MorphFieldRenderer",
        "summary": ""
      },
      {
        "name": "MORPHFIELD_LOGICAL_PHASES",
        "kind": "re-export",
        "signature": "MORPHFIELD_LOGICAL_PHASES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/NexelAffineBrickRenderer",
    "path": "engine/reference/render/morphfield/runtime/NexelAffineBrickRenderer.md",
    "source": "engine/render/morphfield/runtime/NexelAffineBrickRenderer.js",
    "import": "/engine/render/morphfield/runtime/NexelAffineBrickRenderer.js",
    "sourceHash": "2e44dde5c6ca2951530ee7c30dac61f494774cbb01b885d4e260a50865da9df8",
    "summary": "Directly expands 32-byte AFFINE4 morphology payloads into render-only cells. Simulation/collision remains attached to the authoritative MorphField scene.",
    "exports": [
      {
        "name": "NexelAffineBrickRenderer",
        "kind": "class",
        "signature": "class NexelAffineBrickRenderer",
        "summary": "Directly expands 32-byte AFFINE4 morphology payloads into render-only cells. Simulation/collision remains attached to the authoritative MorphField scene."
      },
      {
        "name": "createNexelAffineBrickRenderer",
        "kind": "function",
        "signature": "createNexelAffineBrickRenderer(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/NexelAffineBrickShaders",
    "path": "engine/reference/render/morphfield/runtime/NexelAffineBrickShaders.md",
    "source": "engine/render/morphfield/runtime/NexelAffineBrickShaders.js",
    "import": "/engine/render/morphfield/runtime/NexelAffineBrickShaders.js",
    "sourceHash": "83edf0228f426022de2f3636f986de264d0e9b4590673899a9fcdc41e95938be",
    "summary": "Direct GPU expansion of a 32-byte, sixty-four-microcube AFFINE4 payload.",
    "exports": [
      {
        "name": "NEXEL_AFFINE_BRICK_SHADER_WGSL",
        "kind": "constant",
        "signature": "NEXEL_AFFINE_BRICK_SHADER_WGSL",
        "summary": "Direct GPU expansion of a 32-byte, sixty-four-microcube AFFINE4 payload."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/NexelMicrostructureRenderer",
    "path": "engine/reference/render/morphfield/runtime/NexelMicrostructureRenderer.md",
    "source": "engine/render/morphfield/runtime/NexelMicrostructureRenderer.js",
    "import": "/engine/render/morphfield/runtime/NexelMicrostructureRenderer.js",
    "sourceHash": "24d588ca09b699e4839bcc59197e5d77e91fc020044912ccab4b7e5b1b3213f9",
    "summary": "A borrowed-device, external-encoder renderer. Each 32-byte parent Nexel is decoded directly in WGSL into at most eight render-only samples.",
    "exports": [
      {
        "name": "NexelMicrostructureRenderer",
        "kind": "class",
        "signature": "class NexelMicrostructureRenderer",
        "summary": "A borrowed-device, external-encoder renderer. Each 32-byte parent Nexel is decoded directly in WGSL into at most eight render-only samples."
      },
      {
        "name": "createNexelMicrostructureRenderer",
        "kind": "function",
        "signature": "createNexelMicrostructureRenderer(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/NexelMicrostructureShaders",
    "path": "engine/reference/render/morphfield/runtime/NexelMicrostructureShaders.md",
    "source": "engine/render/morphfield/runtime/NexelMicrostructureShaders.js",
    "import": "/engine/render/morphfield/runtime/NexelMicrostructureShaders.js",
    "sourceHash": "967ac5f1a526d125366c003242bf9e30a3e86585ff6bb03bed3168c364159369",
    "summary": "Portable u32 direct-decode renderer for RM(1,3) Nexel clusters.",
    "exports": [
      {
        "name": "NEXEL_MICROSTRUCTURE_SHADER_WGSL",
        "kind": "constant",
        "signature": "NEXEL_MICROSTRUCTURE_SHADER_WGSL",
        "summary": "Portable u32 direct-decode renderer for RM(1,3) Nexel clusters."
      },
      {
        "name": "NEXEL_AFFINE_SHADER_PLAN_SIGNATURE",
        "kind": "re-export",
        "signature": "NEXEL_AFFINE_SHADER_PLAN_SIGNATURE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/NexelPresentationRuntime",
    "path": "engine/reference/render/morphfield/runtime/NexelPresentationRuntime.md",
    "source": "engine/render/morphfield/runtime/NexelPresentationRuntime.js",
    "import": "/engine/render/morphfield/runtime/NexelPresentationRuntime.js",
    "sourceHash": "a18cd7f36ae3a3923227fed97f0afe5867ba7544824516e0e21172d4fc6529de",
    "summary": "",
    "exports": [
      {
        "name": "finiteNexelNumber",
        "kind": "function",
        "signature": "finiteNexelNumber(value, fallback = 0)",
        "summary": ""
      },
      {
        "name": "clampNexelNumber",
        "kind": "function",
        "signature": "clampNexelNumber(value, minimum, maximum)",
        "summary": ""
      },
      {
        "name": "checkedNexelU32",
        "kind": "function",
        "signature": "checkedNexelU32(value, label)",
        "summary": ""
      },
      {
        "name": "finiteNexelVector",
        "kind": "function",
        "signature": "finiteNexelVector(value, length, label)",
        "summary": ""
      },
      {
        "name": "packNexelRgba8",
        "kind": "function",
        "signature": "packNexelRgba8(color)",
        "summary": ""
      },
      {
        "name": "nextNexelCapacity",
        "kind": "function",
        "signature": "nextNexelCapacity(required, maximum)",
        "summary": ""
      },
      {
        "name": "assertNexelShaderCompiles",
        "kind": "function",
        "signature": "async assertNexelShaderCompiles(module, label)",
        "summary": ""
      },
      {
        "name": "writeNexelFrameUniforms",
        "kind": "function",
        "signature": "writeNexelFrameUniforms(target, { camera, viewport, time, frameCount, quality, pointGain, projectionScale, opacity, } = {})",
        "summary": ""
      },
      {
        "name": "createNexelOverlayPassDescriptor",
        "kind": "function",
        "signature": "createNexelOverlayPassDescriptor(label, target, depthFormat)",
        "summary": ""
      },
      {
        "name": "NEXEL_FRAME_UNIFORM_BYTES",
        "kind": "constant",
        "signature": "NEXEL_FRAME_UNIFORM_BYTES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/NexelShaderPlan",
    "path": "engine/reference/render/morphfield/runtime/NexelShaderPlan.md",
    "source": "engine/render/morphfield/runtime/NexelShaderPlan.js",
    "import": "/engine/render/morphfield/runtime/NexelShaderPlan.js",
    "sourceHash": "5bb707bba078bb2d314f0ba9d700d637d35015dae526411f48887f4c64693a29",
    "summary": "Root-Algebra-style immutable execution plan shared by every Nexel shader.",
    "exports": [
      {
        "name": "NEXEL_AFFINE_SHADER_PLAN_SIGNATURE",
        "kind": "constant",
        "signature": "NEXEL_AFFINE_SHADER_PLAN_SIGNATURE",
        "summary": ""
      },
      {
        "name": "NEXEL_AFFINE_DECODER_WGSL",
        "kind": "constant",
        "signature": "NEXEL_AFFINE_DECODER_WGSL",
        "summary": "Root-Algebra-style immutable execution plan shared by every Nexel shader."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/QueryEncoder",
    "path": "engine/reference/render/morphfield/runtime/QueryEncoder.md",
    "source": "engine/render/morphfield/runtime/QueryEncoder.js",
    "import": "/engine/render/morphfield/runtime/QueryEncoder.js",
    "sourceHash": "9e7739f619a66fb05d3ceb5b0793173bed9d3041c06b8549755a7dd331dac055",
    "summary": "",
    "exports": [
      {
        "name": "MorphFieldQueryEncoder",
        "kind": "class",
        "signature": "class MorphFieldQueryEncoder",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/ResourceOwnershipTracker",
    "path": "engine/reference/render/morphfield/runtime/ResourceOwnershipTracker.md",
    "source": "engine/render/morphfield/runtime/ResourceOwnershipTracker.js",
    "import": "/engine/render/morphfield/runtime/ResourceOwnershipTracker.js",
    "sourceHash": "57c2f817d361f3d270229d3d8bb01d807771dfdab0eb5748a7334700c5983ba3",
    "summary": "",
    "exports": [
      {
        "name": "ResourceOwnershipTracker",
        "kind": "class",
        "signature": "class ResourceOwnershipTracker",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/RuntimeShaders",
    "path": "engine/reference/render/morphfield/runtime/RuntimeShaders.md",
    "source": "engine/render/morphfield/runtime/RuntimeShaders.js",
    "import": "/engine/render/morphfield/runtime/RuntimeShaders.js",
    "sourceHash": "010d0db982a29a0c1a5d125eaed3a364444dbedd6b8387aa2fe23cba240f7b3e",
    "summary": "",
    "exports": [
      {
        "name": "FRAME_UNIFORMS_WGSL",
        "kind": "constant",
        "signature": "FRAME_UNIFORMS_WGSL",
        "summary": ""
      },
      {
        "name": "FIELDLET_SCENE_WGSL",
        "kind": "constant",
        "signature": "FIELDLET_SCENE_WGSL",
        "summary": ""
      },
      {
        "name": "FIELDLET_SCENE_LINEAR_WGSL",
        "kind": "constant",
        "signature": "FIELDLET_SCENE_LINEAR_WGSL",
        "summary": ""
      },
      {
        "name": "FIELDLET_SCENE_TILE_LINEAR_WGSL",
        "kind": "constant",
        "signature": "FIELDLET_SCENE_TILE_LINEAR_WGSL",
        "summary": ""
      },
      {
        "name": "TRACE_SHADER_WGSL",
        "kind": "constant",
        "signature": "TRACE_SHADER_WGSL",
        "summary": ""
      },
      {
        "name": "TRACE_LINEAR_SHADER_WGSL",
        "kind": "constant",
        "signature": "TRACE_LINEAR_SHADER_WGSL",
        "summary": ""
      },
      {
        "name": "TRACE_TILE_BVH_SHADER_WGSL",
        "kind": "constant",
        "signature": "TRACE_TILE_BVH_SHADER_WGSL",
        "summary": ""
      },
      {
        "name": "TILE_BVH_BIN_SHADER_WGSL",
        "kind": "constant",
        "signature": "TILE_BVH_BIN_SHADER_WGSL",
        "summary": ""
      },
      {
        "name": "PHASE_SHADER_WGSL",
        "kind": "constant",
        "signature": "PHASE_SHADER_WGSL",
        "summary": ""
      },
      {
        "name": "ACCUMULATION_SHADER_WGSL",
        "kind": "constant",
        "signature": "ACCUMULATION_SHADER_WGSL",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_RESOLVE_SHADER_WGSL",
        "kind": "constant",
        "signature": "WAVEFRONT_RESOLVE_SHADER_WGSL",
        "summary": ""
      },
      {
        "name": "COMPOSITE_SHADER_WGSL",
        "kind": "constant",
        "signature": "COMPOSITE_SHADER_WGSL",
        "summary": ""
      },
      {
        "name": "QUERY_SHADER_WGSL",
        "kind": "constant",
        "signature": "QUERY_SHADER_WGSL",
        "summary": ""
      },
      {
        "name": "QUERY_LINEAR_SHADER_WGSL",
        "kind": "constant",
        "signature": "QUERY_LINEAR_SHADER_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/SceneBufferUploader",
    "path": "engine/reference/render/morphfield/runtime/SceneBufferUploader.md",
    "source": "engine/render/morphfield/runtime/SceneBufferUploader.js",
    "import": "/engine/render/morphfield/runtime/SceneBufferUploader.js",
    "sourceHash": "a96b919792bdade5c69730a2e9f5458eeacea525e28892f00fc3adbed18dc5b1",
    "summary": "Validate the compiler-to-runtime binary contract without granting runtime trust.  This is intentionally useful for diagnostics and fuzzing; renderer activation separately requires the private compiler-origin registry.",
    "exports": [
      {
        "name": "SceneBufferUploader",
        "kind": "class",
        "signature": "class SceneBufferUploader",
        "summary": ""
      },
      {
        "name": "validateCompiledSceneAbi",
        "kind": "function",
        "signature": "validateCompiledSceneAbi(scene)",
        "summary": "Validate the compiler-to-runtime binary contract without granting runtime trust.  This is intentionally useful for diagnostics and fuzzing; renderer activation separately requires the private compiler-origin registry."
      },
      {
        "name": "normalizeCompiledScene",
        "kind": "function",
        "signature": "normalizeCompiledScene(scene)",
        "summary": ""
      },
      {
        "name": "packSpatialRecords",
        "kind": "function",
        "signature": "packSpatialRecords(canonical)",
        "summary": "Pack Fieldlet bounds, compiler BVH nodes, per-Fieldlet collision metadata, and one validated scene trailer in a single storage binding. WebGPU guarantees only eight storage buffers per shader stage on the portable baseline, so tracing and queries cannot add separate spatial or collision bindings to the existing scene ABI."
      },
      {
        "name": "FIELDLET_FAMILY",
        "kind": "constant",
        "signature": "FIELDLET_FAMILY",
        "summary": ""
      },
      {
        "name": "ANALYTIC_SUBTYPE",
        "kind": "constant",
        "signature": "ANALYTIC_SUBTYPE",
        "summary": ""
      },
      {
        "name": "FIELDLET_SUBTYPE",
        "kind": "constant",
        "signature": "FIELDLET_SUBTYPE",
        "summary": ""
      },
      {
        "name": "QUERY_KIND",
        "kind": "constant",
        "signature": "QUERY_KIND",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/capabilities",
    "path": "engine/reference/render/morphfield/runtime/capabilities.md",
    "source": "engine/render/morphfield/runtime/capabilities.js",
    "import": "/engine/render/morphfield/runtime/capabilities.js",
    "sourceHash": "a030419dd4c8a377f0d0875b75973911faf51cbb70dd975dbb6ddb171c462843",
    "summary": "Reports optional compute paths separately from the portable u32 baseline. Support is not evidence that a pipeline selected or used a feature; callers must record those two states alongside benchmark results.",
    "exports": [
      {
        "name": "bufferUsage",
        "kind": "function",
        "signature": "bufferUsage(...names)",
        "summary": ""
      },
      {
        "name": "textureUsage",
        "kind": "function",
        "signature": "textureUsage(...names)",
        "summary": ""
      },
      {
        "name": "shaderStages",
        "kind": "function",
        "signature": "shaderStages(...names)",
        "summary": ""
      },
      {
        "name": "validateBorrowedDevice",
        "kind": "function",
        "signature": "validateBorrowedDevice(device)",
        "summary": ""
      },
      {
        "name": "validateExternalEncoder",
        "kind": "function",
        "signature": "validateExternalEncoder(encoder)",
        "summary": ""
      },
      {
        "name": "inspectDeviceCapabilities",
        "kind": "function",
        "signature": "inspectDeviceCapabilities(device)",
        "summary": ""
      },
      {
        "name": "inspectNexelComputeCapabilities",
        "kind": "function",
        "signature": "inspectNexelComputeCapabilities(device, { wgslLanguageFeatures } = {})",
        "summary": "Reports optional compute paths separately from the portable u32 baseline. Support is not evidence that a pipeline selected or used a feature; callers must record those two states alongside benchmark results."
      },
      {
        "name": "positiveExtent",
        "kind": "function",
        "signature": "positiveExtent(value, maximum)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/index",
    "path": "engine/reference/render/morphfield/runtime/index.md",
    "source": "engine/render/morphfield/runtime/index.js",
    "import": "/engine/render/morphfield/runtime/index.js",
    "sourceHash": "509b437fe307177f1c9c1dd49539e757e0bbb127c826764cf10a65be4df8422b",
    "summary": "Validates and detaches the canonical typed-array ABI published by this realm's MorphFieldCompiler. Authored object Fieldlets and cloned certificate arrays are not a certification boundary and are rejected.",
    "exports": [
      {
        "name": "createRenderer",
        "kind": "function",
        "signature": "async createRenderer(options)",
        "summary": ""
      },
      {
        "name": "canonicalizeCompiledScene",
        "kind": "function",
        "signature": "canonicalizeCompiledScene(scene)",
        "summary": "Validates and detaches the canonical typed-array ABI published by this realm's MorphFieldCompiler. Authored object Fieldlets and cloned certificate arrays are not a certification boundary and are rejected."
      },
      {
        "name": "ANALYTIC_SUBTYPE",
        "kind": "re-export",
        "signature": "ANALYTIC_SUBTYPE",
        "summary": ""
      },
      {
        "name": "AdaptiveQualityGovernor",
        "kind": "re-export",
        "signature": "AdaptiveQualityGovernor",
        "summary": ""
      },
      {
        "name": "FIELDLET_FAMILY",
        "kind": "re-export",
        "signature": "FIELDLET_FAMILY",
        "summary": ""
      },
      {
        "name": "FIELDLET_SUBTYPE",
        "kind": "re-export",
        "signature": "FIELDLET_SUBTYPE",
        "summary": ""
      },
      {
        "name": "MORPHFIELD_LOGICAL_PHASES",
        "kind": "re-export",
        "signature": "MORPHFIELD_LOGICAL_PHASES",
        "summary": ""
      },
      {
        "name": "MORPHFIELD_QUALITY_TIERS",
        "kind": "re-export",
        "signature": "MORPHFIELD_QUALITY_TIERS",
        "summary": ""
      },
      {
        "name": "MorphFieldQueryEncoder",
        "kind": "re-export",
        "signature": "MorphFieldQueryEncoder",
        "summary": ""
      },
      {
        "name": "MorphFieldRenderer",
        "kind": "re-export",
        "signature": "MorphFieldRenderer",
        "summary": ""
      },
      {
        "name": "MorphFieldWavefrontPathTracer",
        "kind": "re-export",
        "signature": "MorphFieldWavefrontPathTracer",
        "summary": ""
      },
      {
        "name": "NexelAffineBrickRenderer",
        "kind": "re-export",
        "signature": "NexelAffineBrickRenderer",
        "summary": ""
      },
      {
        "name": "NexelMicrostructureRenderer",
        "kind": "re-export",
        "signature": "NexelMicrostructureRenderer",
        "summary": ""
      },
      {
        "name": "QUERY_KIND",
        "kind": "re-export",
        "signature": "QUERY_KIND",
        "summary": ""
      },
      {
        "name": "createNexelAffineBrickRenderer",
        "kind": "re-export",
        "signature": "createNexelAffineBrickRenderer",
        "summary": ""
      },
      {
        "name": "createNexelMicrostructureRenderer",
        "kind": "re-export",
        "signature": "createNexelMicrostructureRenderer",
        "summary": ""
      },
      {
        "name": "createWavefrontPathTracer",
        "kind": "re-export",
        "signature": "createWavefrontPathTracer",
        "summary": ""
      },
      {
        "name": "inspectDeviceCapabilities",
        "kind": "re-export",
        "signature": "inspectDeviceCapabilities",
        "summary": ""
      },
      {
        "name": "inspectNexelComputeCapabilities",
        "kind": "re-export",
        "signature": "inspectNexelComputeCapabilities",
        "summary": ""
      },
      {
        "name": "validateBorrowedDevice",
        "kind": "re-export",
        "signature": "validateBorrowedDevice",
        "summary": ""
      },
      {
        "name": "validateCompiledSceneAbi",
        "kind": "re-export",
        "signature": "validateCompiledSceneAbi",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer",
    "path": "engine/reference/render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer.md",
    "source": "engine/render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer.js",
    "import": "/engine/render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer.js",
    "sourceHash": "6580cdd8f0f0a896d1c03f4660e0fa0e3ca68974cdeb2a6b65fd5c0617ed9321",
    "summary": "Buffer-only compute wavefront path tracer for compiled MorphField scenes. It borrows every host object, records only into the supplied encoder, and owns only its pipelines, queue/state buffers, uniforms, and accumulation.",
    "exports": [
      {
        "name": "MorphFieldWavefrontPathTracer",
        "kind": "class",
        "signature": "class MorphFieldWavefrontPathTracer",
        "summary": "Buffer-only compute wavefront path tracer for compiled MorphField scenes. It borrows every host object, records only into the supplied encoder, and owns only its pipelines, queue/state buffers, uniforms, and accumulation."
      },
      {
        "name": "createWavefrontPathTracer",
        "kind": "function",
        "signature": "async createWavefrontPathTracer(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/wavefront/WavefrontShaders",
    "path": "engine/reference/render/morphfield/runtime/wavefront/WavefrontShaders.md",
    "source": "engine/render/morphfield/runtime/wavefront/WavefrontShaders.js",
    "import": "/engine/render/morphfield/runtime/wavefront/WavefrontShaders.js",
    "sourceHash": "ed597e806e04668ed95acc506a092699d4300feed1f17740b5e81fd969daf7d0",
    "summary": "",
    "exports": [
      {
        "name": "WAVEFRONT_GENERATE_WGSL",
        "kind": "constant",
        "signature": "WAVEFRONT_GENERATE_WGSL",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_INTERSECT_WGSL",
        "kind": "constant",
        "signature": "WAVEFRONT_INTERSECT_WGSL",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_SHADE_WGSL",
        "kind": "constant",
        "signature": "WAVEFRONT_SHADE_WGSL",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_SHADOW_WGSL",
        "kind": "constant",
        "signature": "WAVEFRONT_SHADOW_WGSL",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_FINALIZE_WGSL",
        "kind": "constant",
        "signature": "WAVEFRONT_FINALIZE_WGSL",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_SHADER_SOURCES",
        "kind": "constant",
        "signature": "WAVEFRONT_SHADER_SOURCES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/wavefront/constants",
    "path": "engine/reference/render/morphfield/runtime/wavefront/constants.md",
    "source": "engine/render/morphfield/runtime/wavefront/constants.js",
    "import": "/engine/render/morphfield/runtime/wavefront/constants.js",
    "sourceHash": "31678f569559164161e0e8c2295748ba531e67c175d350651ec5ee8859ed3ad4",
    "summary": "Packs one extension record per material as [transmissionFactor, ior, clearcoatFactor, clearcoatRoughness].",
    "exports": [
      {
        "name": "queueByteSize",
        "kind": "function",
        "signature": "queueByteSize(capacity, recordBytes)",
        "summary": ""
      },
      {
        "name": "packMaterialExtensions",
        "kind": "function",
        "signature": "packMaterialExtensions(descriptors = [])",
        "summary": "Packs one extension record per material as [transmissionFactor, ior, clearcoatFactor, clearcoatRoughness]."
      },
      {
        "name": "WAVEFRONT_WORKGROUP_SIZE",
        "kind": "constant",
        "signature": "WAVEFRONT_WORKGROUP_SIZE",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_MAX_BOUNCES",
        "kind": "constant",
        "signature": "WAVEFRONT_MAX_BOUNCES",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_MAX_TRACE_STEPS",
        "kind": "constant",
        "signature": "WAVEFRONT_MAX_TRACE_STEPS",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_RECORD_BYTES",
        "kind": "constant",
        "signature": "WAVEFRONT_RECORD_BYTES",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_OUTPUT_ENCODING",
        "kind": "constant",
        "signature": "WAVEFRONT_OUTPUT_ENCODING",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_SCENE_BUFFER_ABI",
        "kind": "constant",
        "signature": "WAVEFRONT_SCENE_BUFFER_ABI",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_LIMITATIONS",
        "kind": "constant",
        "signature": "WAVEFRONT_LIMITATIONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/wavefront/index",
    "path": "engine/reference/render/morphfield/runtime/wavefront/index.md",
    "source": "engine/render/morphfield/runtime/wavefront/index.js",
    "import": "/engine/render/morphfield/runtime/wavefront/index.js",
    "sourceHash": "f682c6b16b96a24b0557be031adf7293f8e5cd13b27edcdc2c2ca94b4c3fcf53",
    "summary": "",
    "exports": [
      {
        "name": "MorphFieldWavefrontPathTracer",
        "kind": "re-export",
        "signature": "MorphFieldWavefrontPathTracer",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_FINALIZE_WGSL",
        "kind": "re-export",
        "signature": "WAVEFRONT_FINALIZE_WGSL",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_GENERATE_WGSL",
        "kind": "re-export",
        "signature": "WAVEFRONT_GENERATE_WGSL",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_INTERSECT_WGSL",
        "kind": "re-export",
        "signature": "WAVEFRONT_INTERSECT_WGSL",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_LIMITATIONS",
        "kind": "re-export",
        "signature": "WAVEFRONT_LIMITATIONS",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_MAX_BOUNCES",
        "kind": "re-export",
        "signature": "WAVEFRONT_MAX_BOUNCES",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_MAX_TRACE_STEPS",
        "kind": "re-export",
        "signature": "WAVEFRONT_MAX_TRACE_STEPS",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_OUTPUT_ENCODING",
        "kind": "re-export",
        "signature": "WAVEFRONT_OUTPUT_ENCODING",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_RECORD_BYTES",
        "kind": "re-export",
        "signature": "WAVEFRONT_RECORD_BYTES",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_SCENE_BUFFER_ABI",
        "kind": "re-export",
        "signature": "WAVEFRONT_SCENE_BUFFER_ABI",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_SHADER_SOURCES",
        "kind": "re-export",
        "signature": "WAVEFRONT_SHADER_SOURCES",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_SHADE_WGSL",
        "kind": "re-export",
        "signature": "WAVEFRONT_SHADE_WGSL",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_SHADOW_WGSL",
        "kind": "re-export",
        "signature": "WAVEFRONT_SHADOW_WGSL",
        "summary": ""
      },
      {
        "name": "WAVEFRONT_WORKGROUP_SIZE",
        "kind": "re-export",
        "signature": "WAVEFRONT_WORKGROUP_SIZE",
        "summary": ""
      },
      {
        "name": "createWavefrontPathTracer",
        "kind": "re-export",
        "signature": "createWavefrontPathTracer",
        "summary": ""
      },
      {
        "name": "packMaterialExtensions",
        "kind": "re-export",
        "signature": "packMaterialExtensions",
        "summary": ""
      },
      {
        "name": "queueByteSize",
        "kind": "re-export",
        "signature": "queueByteSize",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/runtime/wavefront/selfTest",
    "path": "engine/reference/render/morphfield/runtime/wavefront/selfTest.md",
    "source": "engine/render/morphfield/runtime/wavefront/selfTest.js",
    "import": "/engine/render/morphfield/runtime/wavefront/selfTest.js",
    "sourceHash": "ab3bdc5ce4d8b77fc5a7c2bcbc10c03bed8b9c2bae6c47b50009c08cfcb16eb9",
    "summary": "",
    "exports": [
      {
        "name": "runWavefrontSelfTest",
        "kind": "function",
        "signature": "async runWavefrontSelfTest({ realWebGpu = false, device = null } = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/schemas/ids",
    "path": "engine/reference/render/morphfield/schemas/ids.md",
    "source": "engine/render/morphfield/schemas/ids.js",
    "import": "/engine/render/morphfield/schemas/ids.js",
    "sourceHash": "34de4173a36bdf6b5777d9a344fba2e5110ccf850e6c00c3766f81e206d2183e",
    "summary": "",
    "exports": [
      {
        "name": "MORPHFIELD_JSON_SCHEMA_DIALECT",
        "kind": "constant",
        "signature": "MORPHFIELD_JSON_SCHEMA_DIALECT",
        "summary": ""
      },
      {
        "name": "MORPHFIELD_SCHEMA_IDS",
        "kind": "constant",
        "signature": "MORPHFIELD_SCHEMA_IDS",
        "summary": ""
      },
      {
        "name": "MORPHFIELD_SCHEMA_FILES",
        "kind": "constant",
        "signature": "MORPHFIELD_SCHEMA_FILES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/schemas/index",
    "path": "engine/reference/render/morphfield/schemas/index.md",
    "source": "engine/render/morphfield/schemas/index.js",
    "import": "/engine/render/morphfield/schemas/index.js",
    "sourceHash": "dd5c75ee43bdabd404765ef314cb85996bab911920c0ac5db9f09c259a761f19",
    "summary": "Normalize one semantic Nexel and report the execution/query capabilities the current R2 implementation can honestly provide for it.",
    "exports": [
      {
        "name": "inspectNexelCapabilities",
        "kind": "function",
        "signature": "inspectNexelCapabilities(input)",
        "summary": "Normalize one semantic Nexel and report the execution/query capabilities the current R2 implementation can honestly provide for it."
      },
      {
        "name": "NEXEL_COMPILER_MODE",
        "kind": "constant",
        "signature": "NEXEL_COMPILER_MODE",
        "summary": ""
      },
      {
        "name": "NEXEL_GPU_QUERY_MODE",
        "kind": "constant",
        "signature": "NEXEL_GPU_QUERY_MODE",
        "summary": ""
      },
      {
        "name": "NEXEL_CAPABILITY_PROFILE",
        "kind": "constant",
        "signature": "NEXEL_CAPABILITY_PROFILE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/EngineSimulationAdapters",
    "path": "engine/reference/render/morphfield/systems/EngineSimulationAdapters.md",
    "source": "engine/render/morphfield/systems/EngineSimulationAdapters.js",
    "import": "/engine/render/morphfield/systems/EngineSimulationAdapters.js",
    "sourceHash": "5a7b16a009c1208eda606e148adf60b9172bc1bdd053e639f42669ecbd6a9b20",
    "summary": "Adapt the existing particle world to the shared host encoder.",
    "exports": [
      {
        "name": "createParticleWorldAdapter",
        "kind": "function",
        "signature": "createParticleWorldAdapter(world, options = {})",
        "summary": "Adapt the existing particle world to the shared host encoder."
      },
      {
        "name": "createFluidWorldAdapter",
        "kind": "function",
        "signature": "createFluidWorldAdapter(world, options = {})",
        "summary": "Adapt the existing external-encoder fluid grid."
      },
      {
        "name": "createVolumeSystemAdapter",
        "kind": "function",
        "signature": "createVolumeSystemAdapter(volumeSystem, options = {})",
        "summary": "Adapt an existing volume system exposing update(encoder, camera)."
      },
      {
        "name": "createGpuSimulationAdapter",
        "kind": "function",
        "signature": "createGpuSimulationAdapter(descriptor)",
        "summary": "Generic bridge for a caller-owned GPU simulation. It deliberately does not invent domain-specific solver names or resource ownership."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/KernelMedia",
    "path": "engine/reference/render/morphfield/systems/KernelMedia.md",
    "source": "engine/render/morphfield/systems/KernelMedia.js",
    "import": "/engine/render/morphfield/systems/KernelMedia.js",
    "sourceHash": "72577f511465fbb1384366529237afe81554397edd654557aa13ba27ff52c7f8",
    "summary": "CPU reference and bin-builder for semantic anisotropic oriented kernels.",
    "exports": [
      {
        "name": "OrientedKernelSet",
        "kind": "class",
        "signature": "class OrientedKernelSet",
        "summary": "CPU reference and bin-builder for semantic anisotropic oriented kernels."
      },
      {
        "name": "LayeredOITAccumulator",
        "kind": "class",
        "signature": "class LayeredOITAccumulator",
        "summary": "Four exact sorted layers followed by a bounded weighted-blended tail."
      },
      {
        "name": "integrateMedium",
        "kind": "function",
        "signature": "integrateMedium(ray, evaluateMedium, options = {})",
        "summary": "Deterministic reference integrator using a certified extinction majorant."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/NexelMicrostructure",
    "path": "engine/reference/render/morphfield/systems/NexelMicrostructure.md",
    "source": "engine/render/morphfield/systems/NexelMicrostructure.js",
    "import": "/engine/render/morphfield/systems/NexelMicrostructure.js",
    "sourceHash": "4286af7c5032f82315cd6517898c6b1249f6bd7be256af084a14dc7be698b77f",
    "summary": "Portable binary microstructure tools for Nexel render clusters and voxel bricks. These helpers describe local storage and verification only; they do not replace a chunk CRC/authentication tag or an outer error-correcting code.",
    "exports": [
      {
        "name": "compileNexelAffineDecodePlan",
        "kind": "function",
        "signature": "compileNexelAffineDecodePlan()",
        "summary": "Compile the eight affine Boolean equations into one u32 of nibble masks, then exhaustively prove the branch-free parity plan against the reducer. This follows Root Algebra Lab's validated-plan discipline without adopting its deliberately research-only carry/sign multiplier."
      },
      {
        "name": "compileNexelDictionary",
        "kind": "function",
        "signature": "compileNexelDictionary(dictionary = [])",
        "summary": "Compile an immutable exact dictionary and reverse lookup once per codebook."
      },
      {
        "name": "affineCubeSample",
        "kind": "function",
        "signature": "affineCubeSample(morphology, corner)",
        "summary": "Evaluate one corner of an RM(1,3) affine microcube."
      },
      {
        "name": "expandAffineCube",
        "kind": "function",
        "signature": "expandAffineCube(morphology)",
        "summary": "Expand an affine morphology into its exact eight-bit occupancy mask."
      },
      {
        "name": "decodeAffineCube",
        "kind": "function",
        "signature": "decodeAffineCube(pattern)",
        "summary": "Return the affine morphology for a pattern, or null for a non-codeword."
      },
      {
        "name": "affineFaceParitySyndrome",
        "kind": "function",
        "signature": "affineFaceParitySyndrome(pattern)",
        "summary": "Six-bit local face-parity syndrome ordered x0,x1,y0,y1,z0,z1. A valid RM(1,3) word has zero syndrome; another valid word can still evade it."
      },
      {
        "name": "inspectAffineCube",
        "kind": "function",
        "signature": "inspectAffineCube(pattern)",
        "summary": ""
      },
      {
        "name": "countSetBits8",
        "kind": "function",
        "signature": "countSetBits8(value)",
        "summary": ""
      },
      {
        "name": "hammingDistance8",
        "kind": "function",
        "signature": "hammingDistance8(left, right)",
        "summary": ""
      },
      {
        "name": "packNexelMorton3D5",
        "kind": "function",
        "signature": "packNexelMorton3D5(x, y, z)",
        "summary": "Interleave three five-bit coordinates into the descriptor's 15-bit Morton field."
      },
      {
        "name": "unpackNexelMorton3D5",
        "kind": "function",
        "signature": "unpackNexelMorton3D5(mortonCoordinate)",
        "summary": ""
      },
      {
        "name": "encodeNexelMicrocube",
        "kind": "function",
        "signature": "encodeNexelMicrocube(pattern, { dictionary } = {})",
        "summary": "Choose the smallest lossless local mode under the supplied dictionary."
      },
      {
        "name": "decodeNexelMicrocube",
        "kind": "function",
        "signature": "decodeNexelMicrocube(encoded, { dictionary } = {})",
        "summary": ""
      },
      {
        "name": "packNexelDescriptor",
        "kind": "function",
        "signature": "packNexelDescriptor({ mortonCoordinate = 0, material = 0, morphology = 0, state = 0, lod = 0, flags = 0, } = {})",
        "summary": "Pack the research descriptor: 15/6/4/3/2/2 exact integer fields."
      },
      {
        "name": "unpackNexelDescriptor",
        "kind": "function",
        "signature": "unpackNexelDescriptor(word)",
        "summary": ""
      },
      {
        "name": "packAffine4Brick",
        "kind": "function",
        "signature": "packAffine4Brick(patterns)",
        "summary": "Pack sixty-four affine microcubes into eight u32 words (32 bytes)."
      },
      {
        "name": "packAffine4Morphologies",
        "kind": "function",
        "signature": "packAffine4Morphologies(morphologies)",
        "summary": "Pack already-proven morphology nibbles without expanding and re-decoding."
      },
      {
        "name": "unpackAffine4Brick",
        "kind": "function",
        "signature": "unpackAffine4Brick(words)",
        "summary": ""
      },
      {
        "name": "crc32Bytes",
        "kind": "function",
        "signature": "crc32Bytes(bytes)",
        "summary": ""
      },
      {
        "name": "computeAffineBrickFaceSignatures",
        "kind": "function",
        "signature": "computeAffineBrickFaceSignatures(patterns)",
        "summary": ""
      },
      {
        "name": "createAffineNexelBrick",
        "kind": "function",
        "signature": "createAffineNexelBrick(patterns, options = {})",
        "summary": ""
      },
      {
        "name": "createAffineNexelBrickFromMorphologies",
        "kind": "function",
        "signature": "createAffineNexelBrickFromMorphologies(morphologies, options = {})",
        "summary": "Build a brick directly from its sixty-four affine morphology nibbles."
      },
      {
        "name": "verifyAffineNexelBrick",
        "kind": "function",
        "signature": "verifyAffineNexelBrick(brick)",
        "summary": "Recompute every local brick invariant without trusting stored TypedArrays."
      },
      {
        "name": "nexelClusterCornerOrder",
        "kind": "function",
        "signature": "nexelClusterCornerOrder(seed = 0)",
        "summary": "Return a deterministic, exact permutation of the eight microcube corners."
      },
      {
        "name": "NEXEL_MICROCUBE_MODE",
        "kind": "constant",
        "signature": "NEXEL_MICROCUBE_MODE",
        "summary": ""
      },
      {
        "name": "NEXEL_DESCRIPTOR_LAYOUT",
        "kind": "constant",
        "signature": "NEXEL_DESCRIPTOR_LAYOUT",
        "summary": ""
      },
      {
        "name": "NEXEL_CLUSTER_CORNER_ORDER",
        "kind": "constant",
        "signature": "NEXEL_CLUSTER_CORNER_ORDER",
        "summary": ""
      },
      {
        "name": "NEXEL_AFFINE_DECODE_PLAN",
        "kind": "constant",
        "signature": "NEXEL_AFFINE_DECODE_PLAN",
        "summary": ""
      },
      {
        "name": "NEXEL_AFFINE_OCCUPANCY_LUT",
        "kind": "constant",
        "signature": "NEXEL_AFFINE_OCCUPANCY_LUT",
        "summary": ""
      },
      {
        "name": "NEXEL_ACTIVE_CORNER_LUT",
        "kind": "constant",
        "signature": "NEXEL_ACTIVE_CORNER_LUT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/NexelPbdCollisionAdapter",
    "path": "engine/reference/render/morphfield/systems/NexelPbdCollisionAdapter.md",
    "source": "engine/render/morphfield/systems/NexelPbdCollisionAdapter.js",
    "import": "/engine/render/morphfield/systems/NexelPbdCollisionAdapter.js",
    "sourceHash": "cdde9454a1d1cdc88417dc5c3a0dbc003cec79a1bf2c6fcd571b045ad30c6b75",
    "summary": "Compile semantic static Nexels into PBDSolver collider inputs. PBDSolver's contactRadius remains a predictive OGC shell, while the solver geometry is inset by contactOffset-restOffset so the rendered and collision surfaces settle at the requested restOffset (zero by default).",
    "exports": [
      {
        "name": "NexelPbdCollisionAdapter",
        "kind": "class",
        "signature": "class NexelPbdCollisionAdapter",
        "summary": ""
      },
      {
        "name": "compileNexelPbdColliderSet",
        "kind": "function",
        "signature": "compileNexelPbdColliderSet(descriptorInput, { contactOffset = 0.002, restOffset = 0, friction = 0.36, } = {})",
        "summary": "Compile semantic static Nexels into PBDSolver collider inputs. PBDSolver's contactRadius remains a predictive OGC shell, while the solver geometry is inset by contactOffset-restOffset so the rendered and collision surfaces settle at the requested restOffset (zero by default)."
      },
      {
        "name": "applyNexelPbdColliderSet",
        "kind": "function",
        "signature": "applyNexelPbdColliderSet(solver, colliderSet)",
        "summary": "Apply a compiled collider set without taking ownership of the solver."
      },
      {
        "name": "createNexelPbdCollisionAdapter",
        "kind": "function",
        "signature": "createNexelPbdCollisionAdapter(options)",
        "summary": ""
      },
      {
        "name": "NEXEL_PBD_COLLIDER_KIND",
        "kind": "re-export",
        "signature": "NEXEL_PBD_COLLIDER_KIND",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/ParticleChainNexelAdapter",
    "path": "engine/reference/render/morphfield/systems/ParticleChainNexelAdapter.md",
    "source": "engine/render/morphfield/systems/ParticleChainNexelAdapter.js",
    "import": "/engine/render/morphfield/systems/ParticleChainNexelAdapter.js",
    "sourceHash": "3f0ba2452ac9658dfe4b788c0b6f5f4882d3bceafc19a67a136ad532764e564f",
    "summary": "Convert a caller-owned particle-chain snapshot into stable sphere/capsule Nexels. The simulation remains authoritative; this adapter performs no stepping, GPU readback, queue submission, or resource ownership transfer. Editor PhysicsChain component `links`, CPU PBD `particles`, and ordinary `[x,y,z]` arrays intentionally share this one input contract.",
    "exports": [
      {
        "name": "createParticleChainNexelDescriptors",
        "kind": "function",
        "signature": "createParticleChainNexelDescriptors(snapshot, options = {})",
        "summary": "Convert a caller-owned particle-chain snapshot into stable sphere/capsule Nexels. The simulation remains authoritative; this adapter performs no stepping, GPU readback, queue submission, or resource ownership transfer. Editor PhysicsChain component `links`, CPU PBD `particles`, and ordinary `[x,y,z]` arrays intentionally share this one input contract."
      },
      {
        "name": "createParticleChainNexelPatch",
        "kind": "function",
        "signature": "createParticleChainNexelPatch(scene, snapshot, options = {})",
        "summary": "Build an incremental scene patch while preserving stable chain IDs."
      },
      {
        "name": "PARTICLE_CHAIN_NEXEL_LIMITS",
        "kind": "constant",
        "signature": "PARTICLE_CHAIN_NEXEL_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/QefSolver",
    "path": "engine/reference/render/morphfield/systems/QefSolver.md",
    "source": "engine/render/morphfield/systems/QefSolver.js",
    "import": "/engine/render/morphfield/systems/QefSolver.js",
    "sourceHash": "0a5338dc2576bae0609dc43d06438fdea79710e0678950e82d7171120ff98b8e",
    "summary": "Rank-aware QEF solver using a Jacobi eigendecomposition of the local normal covariance and a truncated pseudoinverse. Coordinates are translated to the cell center before solving to preserve f32-compatible numerical scale.",
    "exports": [
      {
        "name": "solveQef",
        "kind": "function",
        "signature": "solveQef(intersections, normals, bounds, options = {})",
        "summary": "Rank-aware QEF solver using a Jacobi eigendecomposition of the local normal covariance and a truncated pseudoinverse. Coordinates are translated to the cell center before solving to preserve f32-compatible numerical scale."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/RepresentationPlanner",
    "path": "engine/reference/render/morphfield/systems/RepresentationPlanner.md",
    "source": "engine/render/morphfield/systems/RepresentationPlanner.js",
    "import": "/engine/render/morphfield/systems/RepresentationPlanner.js",
    "sourceHash": "6ed000dffdb613adb9727a573e9ea7a5fb327ffcf2eef8a1a16aa9e4331cecb3",
    "summary": "Stable top-level MorphField execution families.",
    "exports": [
      {
        "name": "RepresentationPlanner",
        "kind": "class",
        "signature": "class RepresentationPlanner",
        "summary": "Deterministic representation planner. Source semantics and certificates are authoritative; performance history can only promote an eligible surface to a disposable cache."
      },
      {
        "name": "selectSurfaceExtractor",
        "kind": "function",
        "signature": "selectSurfaceExtractor(intent = {}, capabilities = {})",
        "summary": "Selects a single extractor for an entire connected seam domain. The selector intentionally returns direct rendering when a requested topology guarantee cannot be supported by certified Hermite data."
      },
      {
        "name": "EXECUTION_FAMILY",
        "kind": "constant",
        "signature": "EXECUTION_FAMILY",
        "summary": "Stable top-level MorphField execution families."
      },
      {
        "name": "SURFACE_EXTRACTOR",
        "kind": "constant",
        "signature": "SURFACE_EXTRACTOR",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/ResidualHierarchy",
    "path": "engine/reference/render/morphfield/systems/ResidualHierarchy.md",
    "source": "engine/render/morphfield/systems/ResidualHierarchy.js",
    "import": "/engine/render/morphfield/systems/ResidualHierarchy.js",
    "sourceHash": "009e61bee560637fc050c6a454b1f07cefef0cac7654ce52162e26e2cc8e4619",
    "summary": "Certified scalar residual brick with deterministic trilinear sampling.",
    "exports": [
      {
        "name": "CertifiedResidualBrick",
        "kind": "class",
        "signature": "class CertifiedResidualBrick",
        "summary": "Certified scalar residual brick with deterministic trilinear sampling."
      },
      {
        "name": "ResidualHierarchy",
        "kind": "class",
        "signature": "class ResidualHierarchy",
        "summary": "Revisioned, fixed-budget residual residency manager. The coarsest level is pinned, so every accepted source always has a certified fallback."
      },
      {
        "name": "composeResidualCertificate",
        "kind": "function",
        "signature": "composeResidualCertificate(analytic, residual)",
        "summary": "Compose analytic and residual surface certificates conservatively."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/SimulationScheduler",
    "path": "engine/reference/render/morphfield/systems/SimulationScheduler.md",
    "source": "engine/render/morphfield/systems/SimulationScheduler.js",
    "import": "/engine/render/morphfield/systems/SimulationScheduler.js",
    "sourceHash": "e2edf166ba796f1dc8542c72726fa13512ca3871fd0accd9a7e42e0e1ac3c7b6",
    "summary": "Fixed-step scheduler for external-encoder simulation domains.",
    "exports": [
      {
        "name": "FixedStepSimulationScheduler",
        "kind": "class",
        "signature": "class FixedStepSimulationScheduler",
        "summary": "Fixed-step scheduler for external-encoder simulation domains."
      },
      {
        "name": "createExternalEncoderAdapter",
        "kind": "function",
        "signature": "createExternalEncoderAdapter({ id, authority = 'authoritative', encode, interpolate, updateStride = 1 })",
        "summary": "Wrap an existing external-encoder simulation API without changing its name."
      },
      {
        "name": "createKinematicAdapter",
        "kind": "function",
        "signature": "createKinematicAdapter({ id, sample, apply, authority = 'authoritative' })",
        "summary": "Kinematic adapter that advances a caller-owned transform source."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/SurfaceCacheExtractor",
    "path": "engine/reference/render/morphfield/systems/SurfaceCacheExtractor.md",
    "source": "engine/render/morphfield/systems/SurfaceCacheExtractor.js",
    "import": "/engine/render/morphfield/systems/SurfaceCacheExtractor.js",
    "sourceHash": "9c100ec2a6c7efacb49414a4f6517549dc577c465046991bfab45c205d13eeff",
    "summary": "Device-independent surface cache extractor and validation boundary.",
    "exports": [
      {
        "name": "SurfaceCacheExtractor",
        "kind": "class",
        "signature": "class SurfaceCacheExtractor",
        "summary": "Device-independent surface cache extractor and validation boundary."
      },
      {
        "name": "SurfaceCacheManager",
        "kind": "class",
        "signature": "class SurfaceCacheManager",
        "summary": "Stages complete connected domains and atomically replaces validated entries."
      },
      {
        "name": "validateMesh",
        "kind": "function",
        "signature": "validateMesh(mesh, topologyRequirement = 'unspecified')",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/index",
    "path": "engine/reference/render/morphfield/systems/index.md",
    "source": "engine/render/morphfield/systems/index.js",
    "import": "/engine/render/morphfield/systems/index.js",
    "sourceHash": "d1d3fed255b00b41e3bba384a4cab3720796db00ba91f31f64b0510468ef2686",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/transitions/TransitionBoundary",
    "path": "engine/reference/render/morphfield/systems/transitions/TransitionBoundary.md",
    "source": "engine/render/morphfield/systems/transitions/TransitionBoundary.js",
    "import": "/engine/render/morphfield/systems/transitions/TransitionBoundary.js",
    "sourceHash": "ce86119135f06a253962865bdb9f88d6f41703bc0ed95c5aa3ac02a2aadcb4fc",
    "summary": "Build canonical signatures from the open edges of a transition mesh. Signatures contain complete sorted segment records as well as a compact hash; comparisons therefore never rely on hash equality alone.  World-space quantization makes opposite local face orientations compare identically.",
    "exports": [
      {
        "name": "createTransitionBoundarySignatures",
        "kind": "function",
        "signature": "createTransitionBoundarySignatures(mesh, options = {})",
        "summary": "Build canonical signatures from the open edges of a transition mesh. Signatures contain complete sorted segment records as well as a compact hash; comparisons therefore never rely on hash equality alone.  World-space quantization makes opposite local face orientations compare identically."
      },
      {
        "name": "compareTransitionBoundarySignatures",
        "kind": "function",
        "signature": "compareTransitionBoundarySignatures(left, right)",
        "summary": ""
      },
      {
        "name": "compareTransitionBoundaries",
        "kind": "function",
        "signature": "compareTransitionBoundaries(left, leftFace, right, rightFace)",
        "summary": ""
      },
      {
        "name": "assertTransitionBoundaryMatch",
        "kind": "function",
        "signature": "assertTransitionBoundaryMatch(left, leftFace, right, rightFace)",
        "summary": ""
      },
      {
        "name": "TRANSITION_BOUNDARY_SCHEMA",
        "kind": "constant",
        "signature": "TRANSITION_BOUNDARY_SCHEMA",
        "summary": ""
      },
      {
        "name": "TRANSITION_FACE",
        "kind": "constant",
        "signature": "TRANSITION_FACE",
        "summary": ""
      },
      {
        "name": "TRANSITION_FACE_ORDER",
        "kind": "constant",
        "signature": "TRANSITION_FACE_ORDER",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/transitions/TransitionCellExtractor",
    "path": "engine/reference/render/morphfield/systems/transitions/TransitionCellExtractor.md",
    "source": "engine/render/morphfield/systems/transitions/TransitionCellExtractor.js",
    "import": "/engine/render/morphfield/systems/transitions/TransitionCellExtractor.js",
    "sourceHash": "7564d754a463aa532798fb67b2f684bca3cda6228b6027ecfa6aebcffe7613b3",
    "summary": "Extract a deterministic transition slab for one exact-2:1 grid pair.",
    "exports": [
      {
        "name": "TransitionExtractionError",
        "kind": "class",
        "signature": "class TransitionExtractionError extends Error",
        "summary": ""
      },
      {
        "name": "TransitionCellExtractor",
        "kind": "class",
        "signature": "class TransitionCellExtractor",
        "summary": ""
      },
      {
        "name": "validateExact2To1GridPair",
        "kind": "function",
        "signature": "validateExact2To1GridPair(fineInput, coarseInput)",
        "summary": ""
      },
      {
        "name": "extractTransitionInterface",
        "kind": "function",
        "signature": "extractTransitionInterface(input)",
        "summary": "Extract a deterministic transition slab for one exact-2:1 grid pair."
      },
      {
        "name": "TRANSITION_INTERFACE_SCHEMA",
        "kind": "constant",
        "signature": "TRANSITION_INTERFACE_SCHEMA",
        "summary": ""
      },
      {
        "name": "TRANSITION_LIMITS",
        "kind": "constant",
        "signature": "TRANSITION_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/transitions/TransitionValidation",
    "path": "engine/reference/render/morphfield/systems/transitions/TransitionValidation.md",
    "source": "engine/render/morphfield/systems/transitions/TransitionValidation.js",
    "import": "/engine/render/morphfield/systems/transitions/TransitionValidation.js",
    "sourceHash": "f4240952d698cc53b3d8ee8d50cf8bb494dd45513c62eeded2122d7ab4f727cb",
    "summary": "Validate geometry, local manifoldness, winding, exact-2:1 metadata, and all recorded boundary signatures.  Open edges are valid only on one of the six transition-prism faces.",
    "exports": [
      {
        "name": "validateTransitionInterface",
        "kind": "function",
        "signature": "validateTransitionInterface(mesh, options = {})",
        "summary": "Validate geometry, local manifoldness, winding, exact-2:1 metadata, and all recorded boundary signatures.  Open edges are valid only on one of the six transition-prism faces."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/transitions/index",
    "path": "engine/reference/render/morphfield/systems/transitions/index.md",
    "source": "engine/render/morphfield/systems/transitions/index.js",
    "import": "/engine/render/morphfield/systems/transitions/index.js",
    "sourceHash": "6c12fbd148381d590846bcc0c70666f3340bb87dd70193b5b3688b2378a89e60",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/morphfield/systems/transitions/selfTest",
    "path": "engine/reference/render/morphfield/systems/transitions/selfTest.md",
    "source": "engine/render/morphfield/systems/transitions/selfTest.js",
    "import": "/engine/render/morphfield/systems/transitions/selfTest.js",
    "sourceHash": "756a525930d025f1f4daa6e4f3b0d1141dde54fc2342debd095992c60734f4e6",
    "summary": "",
    "exports": [
      {
        "name": "runMorphFieldTransitionSelfTests",
        "kind": "function",
        "signature": "runMorphFieldTransitionSelfTests()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/CustomParticleEffect",
    "path": "engine/reference/render/particles/CustomParticleEffect.md",
    "source": "engine/render/particles/CustomParticleEffect.js",
    "import": "/engine/render/particles/CustomParticleEffect.js",
    "sourceHash": "dd1cfce2edd82e360cae0c47d839fd4313cd98cd3abb2d6f60370fcaa0beba95",
    "summary": "CustomParticleEffect.js - Unified Particle Effect System KEY PRINCIPLE: ONE SDF function defines BOTH: 1. Visual rendering (raymarching in fragment shader) 2. Collision detection (compute shader physics) This ensures particle appearance ALWAYS matches collision shape.",
    "exports": [
      {
        "name": "createCustomEffectId",
        "kind": "function",
        "signature": "createCustomEffectId()",
        "summary": ""
      },
      {
        "name": "createCustomEffectCloneId",
        "kind": "function",
        "signature": "createCustomEffectCloneId(effectId)",
        "summary": ""
      },
      {
        "name": "createImportedEffectId",
        "kind": "function",
        "signature": "createImportedEffectId(effectId)",
        "summary": ""
      },
      {
        "name": "generateVisualShader",
        "kind": "function",
        "signature": "generateVisualShader(effect, options = {})",
        "summary": "Generate visual raymarching shader from effect"
      },
      {
        "name": "generateCollisionShader",
        "kind": "function",
        "signature": "generateCollisionShader(effect)",
        "summary": "Generate collision compute shader from effect"
      },
      {
        "name": "validateEffect",
        "kind": "function",
        "signature": "validateEffect(effect)",
        "summary": "Validate effect WGSL code"
      },
      {
        "name": "compileEffect",
        "kind": "function",
        "signature": "async compileEffect(device, effect)",
        "summary": "Compile effect shaders on device (validates WGSL syntax)"
      },
      {
        "name": "createEffect",
        "kind": "function",
        "signature": "createEffect(options = {})",
        "summary": "Create a new custom effect from template"
      },
      {
        "name": "cloneEffect",
        "kind": "function",
        "signature": "cloneEffect(effect, newId)",
        "summary": "Clone an existing effect"
      },
      {
        "name": "getPresets",
        "kind": "function",
        "signature": "getPresets()",
        "summary": "Get all built-in presets as array"
      },
      {
        "name": "getPreset",
        "kind": "function",
        "signature": "getPreset(id)",
        "summary": "Get preset by ID"
      },
      {
        "name": "CUSTOM_PARTICLE_SPARKLE_PCG_HASH_WGSL",
        "kind": "constant",
        "signature": "CUSTOM_PARTICLE_SPARKLE_PCG_HASH_WGSL",
        "summary": ""
      },
      {
        "name": "SDF_HELPERS_WGSL",
        "kind": "constant",
        "signature": "SDF_HELPERS_WGSL",
        "summary": ""
      },
      {
        "name": "EFFECT_PRESETS",
        "kind": "constant",
        "signature": "EFFECT_PRESETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/CustomParticleEffectIntegration",
    "path": "engine/reference/render/particles/CustomParticleEffectIntegration.md",
    "source": "engine/render/particles/CustomParticleEffectIntegration.js",
    "import": "/engine/render/particles/CustomParticleEffectIntegration.js",
    "sourceHash": "6dd0acdcd19a076833ee7879b27654d6b03f07852f9d6a87d653160358276e39",
    "summary": "CustomParticleEffectIntegration.js - Integration Layer Wires the custom particle effect system into the engine: - Initializes registry on engine startup - Provides utilities for applying effects to emitters - Connects visual effects to collision system",
    "exports": [
      {
        "name": "initCustomParticleEffects",
        "kind": "function",
        "signature": "async initCustomParticleEffects(device)",
        "summary": "Initialize the custom particle effect system Call this during engine initialization"
      },
      {
        "name": "getCompiledEffect",
        "kind": "function",
        "signature": "async getCompiledEffect(device, effectId)",
        "summary": "Get compiled effect shaders for an effect ID"
      },
      {
        "name": "getCollisionSDFSystem",
        "kind": "function",
        "signature": "getCollisionSDFSystem()",
        "summary": "Get the collision SDF system"
      },
      {
        "name": "applyEffectToEmitter",
        "kind": "function",
        "signature": "applyEffectToEmitter(emitterComponent, effectId, params = null)",
        "summary": "Apply a custom effect to a particle emitter component"
      },
      {
        "name": "getEffectForRendering",
        "kind": "function",
        "signature": "getEffectForRendering(effectId)",
        "summary": "Get effect data for rendering"
      },
      {
        "name": "createEffectParamsData",
        "kind": "function",
        "signature": "createEffectParamsData(emitter)",
        "summary": "Create effect parameters buffer data for GPU Returns a reusable Float32Array - DO NOT modify after passing to GPU"
      },
      {
        "name": "getParticleSDF",
        "kind": "function",
        "signature": "getParticleSDF(effectId)",
        "summary": "Get the effective SDF for a particle (for collision queries) Returns a function that evaluates the SDF at a local position"
      },
      {
        "name": "isCustomEffectsInitialized",
        "kind": "function",
        "signature": "isCustomEffectsInitialized()",
        "summary": "Check if custom effects system is initialized"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleAgeRenderer",
    "path": "engine/reference/render/particles/ParticleAgeRenderer.md",
    "source": "engine/render/particles/ParticleAgeRenderer.js",
    "import": "/engine/render/particles/ParticleAgeRenderer.js",
    "sourceHash": "6fde28bc1fa07d51d587a5722effacc7056ecec30aa08c490a4544be24ed41ed",
    "summary": "",
    "exports": [
      {
        "name": "createParticleAgeRenderer",
        "kind": "function",
        "signature": "async createParticleAgeRenderer(options)",
        "summary": ""
      },
      {
        "name": "createParticleAgeDataBindGroup",
        "kind": "function",
        "signature": "createParticleAgeDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)",
        "summary": ""
      },
      {
        "name": "setParticleAgeParams",
        "kind": "function",
        "signature": "setParticleAgeParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleAlbedoRenderer",
    "path": "engine/reference/render/particles/ParticleAlbedoRenderer.md",
    "source": "engine/render/particles/ParticleAlbedoRenderer.js",
    "import": "/engine/render/particles/ParticleAlbedoRenderer.js",
    "sourceHash": "db404a9004fd4728bc8c66e8b95dbd5ce5caad99d1237a97353f88b2a63fa5b7",
    "summary": "Create particle albedo pass renderer",
    "exports": [
      {
        "name": "createParticleAlbedoRenderer",
        "kind": "function",
        "signature": "async createParticleAlbedoRenderer(options)",
        "summary": "Create particle albedo pass renderer"
      },
      {
        "name": "createParticleAlbedoDataBindGroup",
        "kind": "function",
        "signature": "createParticleAlbedoDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)",
        "summary": "Create data bind group for albedo pass"
      },
      {
        "name": "setParticleAlbedoParams",
        "kind": "function",
        "signature": "setParticleAlbedoParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })",
        "summary": "Update albedo pass parameters"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleBeamRenderer",
    "path": "engine/reference/render/particles/ParticleBeamRenderer.md",
    "source": "engine/render/particles/ParticleBeamRenderer.js",
    "import": "/engine/render/particles/ParticleBeamRenderer.js",
    "sourceHash": "177fd3e2b45bff5e7846b9c9d4bf2a78f055ec7891ec0f2e2e81f48c5bd91d10",
    "summary": "ParticleBeamRenderer.js - Beam / Lightning Particle Renderer (GAP 14) Renders connected line segments between sequential particles as thick beams. Supports: - Chain mode: connect particles in sequence (particle 0→1→2→3...) - Source mode: connect all particles to a single source point - Lightning mode: chain + per-segment jitter for electric arcs Each beam segment is a camera-facing quad strip (2 triangles per segment). Width can vary per particle (from meta.w size) and taper at ends. Usage: const beam = await createParticleBeamRenderer(device, { format }); renderBeamParticles(pass, beam, world, { viewProj, instanceCount });",
    "exports": [
      {
        "name": "createParticleBeamRenderer",
        "kind": "function",
        "signature": "async createParticleBeamRenderer(device, options = {})",
        "summary": "Create a particle beam renderer."
      },
      {
        "name": "bindBeamParticleData",
        "kind": "function",
        "signature": "bindBeamParticleData(renderer, world)",
        "summary": "Bind particle data from a particle world."
      },
      {
        "name": "renderBeamParticles",
        "kind": "function",
        "signature": "renderBeamParticles(pass, renderer, options = {})",
        "summary": "Render beam particles."
      },
      {
        "name": "setBeamParams",
        "kind": "function",
        "signature": "setBeamParams(renderer, params = {})",
        "summary": "Update beam parameters."
      },
      {
        "name": "destroyParticleBeamRenderer",
        "kind": "function",
        "signature": "destroyParticleBeamRenderer(renderer)",
        "summary": "Destroy the beam renderer."
      },
      {
        "name": "BEAM_MODE_CHAIN",
        "kind": "constant",
        "signature": "BEAM_MODE_CHAIN",
        "summary": ""
      },
      {
        "name": "BEAM_MODE_SOURCE",
        "kind": "constant",
        "signature": "BEAM_MODE_SOURCE",
        "summary": ""
      },
      {
        "name": "BEAM_MODE_LIGHTNING",
        "kind": "constant",
        "signature": "BEAM_MODE_LIGHTNING",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleBillboardRenderer",
    "path": "engine/reference/render/particles/ParticleBillboardRenderer.md",
    "source": "engine/render/particles/ParticleBillboardRenderer.js",
    "import": "/engine/render/particles/ParticleBillboardRenderer.js",
    "sourceHash": "5e9913adcf6d458591938ae829fb077d5572899bb243fd68f6f2467f6410a861",
    "summary": "Creates a particle point renderer (spheres instead of flat billboards). This renders particles as actual points with spherical falloff.",
    "exports": [
      {
        "name": "createParticlePointRenderer",
        "kind": "function",
        "signature": "async createParticlePointRenderer(options)",
        "summary": "Creates a particle point renderer (spheres instead of flat billboards). This renders particles as actual points with spherical falloff."
      },
      {
        "name": "createParticleBillboardRenderer",
        "kind": "function",
        "signature": "async createParticleBillboardRenderer(options)",
        "summary": "Creates a particle billboard renderer. This is a pure rendering module - it does not own particle simulation."
      },
      {
        "name": "createParticleBillboardDataBindGroup",
        "kind": "function",
        "signature": "createParticleBillboardDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer, uvBuffer, albedoTextureView, albedoSampler)",
        "summary": "Creates a data bind group for a specific particle world. Call this once per particle world you want to render."
      },
      {
        "name": "setParticleBillboardParams",
        "kind": "function",
        "signature": "setParticleBillboardParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0, rotationRate = 0, useColorGradient = false, stretchFactor = 0, facingMode = 0, })",
        "summary": "Updates particle rendering parameters including quality settings."
      },
      {
        "name": "setParticleBillboardDepth",
        "kind": "function",
        "signature": "setParticleBillboardDepth(renderer, depthTextureView, aliveListBuffer)",
        "summary": "Create or update the scene depth + alive list bind group (GAP 17 + 18). Call this when the depth texture changes (e.g. on resize) or when connecting the alive list from IndirectDispatch for GPU indirect draw."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleBlackbodyRenderer",
    "path": "engine/reference/render/particles/ParticleBlackbodyRenderer.md",
    "source": "engine/render/particles/ParticleBlackbodyRenderer.js",
    "import": "/engine/render/particles/ParticleBlackbodyRenderer.js",
    "sourceHash": "40c5027bab6af922823b77aa23eebd9c776d2b590f5a6395f4609b476ebcc253",
    "summary": "ParticleBlackbodyRenderer.js - Blackbody Radiation Renderer (GAP 39) Creates and manages the 1D blackbody LUT texture. Provides bind group for particle fragment shaders to sample temperature → color. Integrates with existing billboard and SDF renderers. Usage: const bb = createBlackbodySystem(device); const bindGroup = getBlackbodyBindGroup(bb); // Set as additional bind group in particle render pass",
    "exports": [
      {
        "name": "createBlackbodySystem",
        "kind": "function",
        "signature": "createBlackbodySystem(device, options = {})",
        "summary": "Create the blackbody rendering system with LUT texture."
      },
      {
        "name": "createBlackbodyBindGroupLayout",
        "kind": "function",
        "signature": "createBlackbodyBindGroupLayout(device)",
        "summary": "Create a bind group layout for blackbody resources. Typically bound as an additional group in particle render pipelines."
      },
      {
        "name": "getBlackbodyBindGroup",
        "kind": "function",
        "signature": "getBlackbodyBindGroup(system, layout)",
        "summary": "Create the bind group for blackbody resources."
      },
      {
        "name": "setBlackbodyEmission",
        "kind": "function",
        "signature": "setBlackbodyEmission(system, strength)",
        "summary": "Update emission strength at runtime."
      },
      {
        "name": "destroyBlackbodySystem",
        "kind": "function",
        "signature": "destroyBlackbodySystem(system)",
        "summary": "Destroy."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleBondRenderer",
    "path": "engine/reference/render/particles/ParticleBondRenderer.md",
    "source": "engine/render/particles/ParticleBondRenderer.js",
    "import": "/engine/render/particles/ParticleBondRenderer.js",
    "sourceHash": "b291e93541019f010779b60822f481c29004e6a2bd655deed4f1cfbad7a451b7",
    "summary": "ParticleBondRenderer.js - Bond Line / Stick Renderer (GAP 41) Renders molecular bonds as camera-facing quads between bonded particle pairs. Reads a bond buffer (vec4<u32> per bond: particleA, particleB, bondType, bondOrder). Color blends between element CPK colors at each endpoint. Supports covalent (solid), ionic (dashed), metallic (thick), hydrogen (dotted). Usage: const br = createBondRenderer(device, format); initBondRendererBindGroups(br, device, posBuffer, velBuffer, bondBuffer, colorLutBuffer, elementBuffer); uploadBonds(br, device, bondArray); renderBonds(pass, br, viewProj, cameraPos, viewRight, viewUp, bondCount);",
    "exports": [
      {
        "name": "createBondRenderer",
        "kind": "function",
        "signature": "createBondRenderer(device, format)",
        "summary": "Create the bond renderer."
      },
      {
        "name": "initBondRendererBindGroups",
        "kind": "function",
        "signature": "initBondRendererBindGroups(renderer, device, positionBuffer, velocityBuffer, metaBuffer, thermalBuffer)",
        "summary": "Initialize bind groups."
      },
      {
        "name": "uploadBonds",
        "kind": "function",
        "signature": "uploadBonds(renderer, device, bondData, bondCount)",
        "summary": "Upload bond data from CPU."
      },
      {
        "name": "renderBonds",
        "kind": "function",
        "signature": "renderBonds(pass, renderer, viewProj, cameraPos, viewRight, viewUp)",
        "summary": "Render bonds in the given render pass."
      },
      {
        "name": "destroyBondRenderer",
        "kind": "function",
        "signature": "destroyBondRenderer(renderer)",
        "summary": "Destroy."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleCollisionSDF",
    "path": "engine/reference/render/particles/ParticleCollisionSDF.md",
    "source": "engine/render/particles/ParticleCollisionSDF.js",
    "import": "/engine/render/particles/ParticleCollisionSDF.js",
    "sourceHash": "f75a833456fa3eb3c1212bc0608d0f3578d1d7b0d482ca640418d7e8ada3c659",
    "summary": "ParticleCollisionSDF.js - Custom SDF Collision Integration Integrates custom particle effect SDFs into the collision system. The same SDF code used for visual rendering is used for collision detection. This module: 1. Generates collision compute shaders with custom SDFs 2. Manages effect-to-index mapping for GPU dispatch 3. Provides collision evaluation utilities",
    "exports": [
      {
        "name": "ParticleCollisionSDFSystem",
        "kind": "class",
        "signature": "class ParticleCollisionSDFSystem",
        "summary": ""
      },
      {
        "name": "registerEffectForCollision",
        "kind": "function",
        "signature": "registerEffectForCollision(effectId)",
        "summary": "Register an effect for collision (assigns an index)"
      },
      {
        "name": "getEffectIndex",
        "kind": "function",
        "signature": "getEffectIndex(effectId)",
        "summary": "Get effect index (0 if not registered)"
      },
      {
        "name": "getEffectByIndex",
        "kind": "function",
        "signature": "getEffectByIndex(index)",
        "summary": "Get effect by index"
      },
      {
        "name": "generateMultiEffectCollisionShader",
        "kind": "function",
        "signature": "generateMultiEffectCollisionShader(registeredEffects)",
        "summary": "Generate the multi-effect collision shader This shader supports switching between different SDFs based on effectId"
      },
      {
        "name": "createCollisionPipeline",
        "kind": "function",
        "signature": "createCollisionPipeline(device, options = {})",
        "summary": "Create collision compute pipeline with custom SDFs"
      },
      {
        "name": "createParticleCollisionSDFSystem",
        "kind": "function",
        "signature": "createParticleCollisionSDFSystem(device)",
        "summary": "Create a particle collision SDF system"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleDecalRenderer",
    "path": "engine/reference/render/particles/ParticleDecalRenderer.md",
    "source": "engine/render/particles/ParticleDecalRenderer.js",
    "import": "/engine/render/particles/ParticleDecalRenderer.js",
    "sourceHash": "4b5e0f5b28037ab94357b71933213e3a091db8e16f3de1e699d6a819a19a5d7a",
    "summary": "ParticleDecalRenderer.js - Render projected decals from particle collisions Renders decal quads at particle impact points (scorch marks, frost patches, wet splats). Reads from ParticleDecalSpawner's CPU-side pool each frame. Pipeline: 1. ParticleDecalSpawner (sim/) creates decal descriptors from collision events 2. This renderer uploads active decals to a GPU storage buffer 3. Instanced draw: each decal = screen-aligned quad projected onto surface 4. Blends onto scene with src-alpha / one-minus-src-alpha Decal data per instance (12 floats): [posX, posY, posZ, size, normX, normY, normZ, age/lifetime, r, g, b, a]",
    "exports": [
      {
        "name": "createDecalRenderer",
        "kind": "function",
        "signature": "createDecalRenderer(device, format)",
        "summary": "Create a decal rendering system"
      },
      {
        "name": "uploadDecals",
        "kind": "function",
        "signature": "uploadDecals(renderer, decals)",
        "summary": "Upload active decals from the CPU-side spawner pool to GPU"
      },
      {
        "name": "renderDecals",
        "kind": "function",
        "signature": "renderDecals(pass, renderer, frameData)",
        "summary": "Render decals into the current render pass"
      },
      {
        "name": "destroyDecalRenderer",
        "kind": "function",
        "signature": "destroyDecalRenderer(renderer)",
        "summary": "Destroy decal renderer resources"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleDepthRenderer",
    "path": "engine/reference/render/particles/ParticleDepthRenderer.md",
    "source": "engine/render/particles/ParticleDepthRenderer.js",
    "import": "/engine/render/particles/ParticleDepthRenderer.js",
    "sourceHash": "bf78f8ccc20f2dff968ffc7f5f93d81803a8b0ecd6a7fcd5044cd4da006388a3",
    "summary": "Create particle depth pass renderer",
    "exports": [
      {
        "name": "createParticleDepthRenderer",
        "kind": "function",
        "signature": "async createParticleDepthRenderer(options)",
        "summary": "Create particle depth pass renderer"
      },
      {
        "name": "createParticleDepthDataBindGroup",
        "kind": "function",
        "signature": "createParticleDepthDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)",
        "summary": "Create data bind group for depth pass"
      },
      {
        "name": "setParticleDepthParams",
        "kind": "function",
        "signature": "setParticleDepthParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })",
        "summary": "Update depth pass parameters"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleDistortionRenderer",
    "path": "engine/reference/render/particles/ParticleDistortionRenderer.md",
    "source": "engine/render/particles/ParticleDistortionRenderer.js",
    "import": "/engine/render/particles/ParticleDistortionRenderer.js",
    "sourceHash": "8a637fb3f6a3bbc3b227bf260e200dec5be12b634bce71861a80627da112f125",
    "summary": "ParticleDistortionRenderer.js - Heat haze / distortion from particles PopcornFX/Niagara parity: particles can distort the scene behind them. Hot particles, explosions, and magic effects create screen-space UV offsets. Pipeline: 1. Render distortion-emitting particles to an RG16float texture (UV offset) 2. Composite pass samples scene color with distorted UVs The distortion texture stores per-pixel UV offset (R=deltaU, G=deltaV). Particles contribute based on temperature/emissive strength.",
    "exports": [
      {
        "name": "createParticleDistortionRenderer",
        "kind": "function",
        "signature": "createParticleDistortionRenderer(device, sceneFormat, width, height)",
        "summary": "Create the particle distortion rendering system"
      },
      {
        "name": "initDistortionBindGroups",
        "kind": "function",
        "signature": "initDistortionBindGroups(renderer, particleWorld, sceneColorView)",
        "summary": "Create bind groups for the distortion pass (call once when particle buffers are ready)"
      },
      {
        "name": "setDistortionParams",
        "kind": "function",
        "signature": "setDistortionParams(renderer, params = {})",
        "summary": "Update distortion params"
      },
      {
        "name": "renderDistortionPass",
        "kind": "function",
        "signature": "renderDistortionPass(encoder, renderer, instanceCount, frameData)",
        "summary": "Render distortion pass: accumulate UV offsets from hot particles"
      },
      {
        "name": "compositeDistortion",
        "kind": "function",
        "signature": "compositeDistortion(pass, renderer)",
        "summary": "Composite distortion onto scene (fullscreen triangle)"
      },
      {
        "name": "resizeDistortionRenderer",
        "kind": "function",
        "signature": "resizeDistortionRenderer(renderer, width, height)",
        "summary": "Resize distortion texture when viewport changes"
      },
      {
        "name": "destroyDistortionRenderer",
        "kind": "function",
        "signature": "destroyDistortionRenderer(renderer)",
        "summary": "Destroy distortion renderer resources"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleEffectRegistry",
    "path": "engine/reference/render/particles/ParticleEffectRegistry.md",
    "source": "engine/render/particles/ParticleEffectRegistry.js",
    "import": "/engine/render/particles/ParticleEffectRegistry.js",
    "sourceHash": "cf9ac56edbe03f6cb30f7890c30def5fc063278d255ee2767963db86907536b2",
    "summary": "ParticleEffectRegistry.js - Custom Particle Effect Storage & Management Features: - IndexedDB persistence across sessions - Import/export as JSON files - Built-in presets always available - Version tracking for effect updates - Event-based notifications for changes",
    "exports": [
      {
        "name": "ParticleEffectRegistry",
        "kind": "class",
        "signature": "class ParticleEffectRegistry",
        "summary": ""
      },
      {
        "name": "particleEffectCurrentId",
        "kind": "function",
        "signature": "particleEffectCurrentId(effectId)",
        "summary": ""
      },
      {
        "name": "prepareParticleEffectRecord",
        "kind": "function",
        "signature": "prepareParticleEffectRecord(record)",
        "summary": "Validate one exact v1/v2 record; no lossy upcasts are attempted."
      },
      {
        "name": "getParticleEffectRegistry",
        "kind": "function",
        "signature": "getParticleEffectRegistry()",
        "summary": "Get the global registry instance"
      },
      {
        "name": "initParticleEffectRegistry",
        "kind": "function",
        "signature": "async initParticleEffectRegistry()",
        "summary": "Initialize the global registry"
      },
      {
        "name": "PARTICLE_EFFECT_DB_NAME",
        "kind": "constant",
        "signature": "PARTICLE_EFFECT_DB_NAME",
        "summary": ""
      },
      {
        "name": "PARTICLE_EFFECT_STORE_NAME",
        "kind": "constant",
        "signature": "PARTICLE_EFFECT_STORE_NAME",
        "summary": ""
      },
      {
        "name": "PARTICLE_EFFECT_RECORD_SCHEMA",
        "kind": "constant",
        "signature": "PARTICLE_EFFECT_RECORD_SCHEMA",
        "summary": ""
      },
      {
        "name": "PARTICLE_EFFECT_RECORD_VERSION",
        "kind": "constant",
        "signature": "PARTICLE_EFFECT_RECORD_VERSION",
        "summary": ""
      },
      {
        "name": "PARTICLE_EFFECT_RECORD_LIMITS",
        "kind": "constant",
        "signature": "PARTICLE_EFFECT_RECORD_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleEmissiveRenderer",
    "path": "engine/reference/render/particles/ParticleEmissiveRenderer.md",
    "source": "engine/render/particles/ParticleEmissiveRenderer.js",
    "import": "/engine/render/particles/ParticleEmissiveRenderer.js",
    "sourceHash": "b8d39e89d64f5a0c37669819e5f9c40cfad239e2f10598588db043c39b6985c3",
    "summary": "",
    "exports": [
      {
        "name": "createParticleEmissiveRenderer",
        "kind": "function",
        "signature": "async createParticleEmissiveRenderer(options)",
        "summary": ""
      },
      {
        "name": "createParticleEmissiveDataBindGroup",
        "kind": "function",
        "signature": "createParticleEmissiveDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)",
        "summary": ""
      },
      {
        "name": "setParticleEmissiveParams",
        "kind": "function",
        "signature": "setParticleEmissiveParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleFieldRenderer",
    "path": "engine/reference/render/particles/ParticleFieldRenderer.md",
    "source": "engine/render/particles/ParticleFieldRenderer.js",
    "import": "/engine/render/particles/ParticleFieldRenderer.js",
    "sourceHash": "417b126cb5d892a66c00d6b174751c8753f61846ef4f1594c7f131512b99d087",
    "summary": "ParticleFieldRenderer.js - Electromagnetic Field Visualizer (GAP 42) Renders electric/magnetic field lines and force arrows around charged particles. Computes field probe grid on CPU from charged particle positions, uploads to GPU. Supports arrow glyphs showing force direction/magnitude. Color: red=positive/repulsion, blue=negative/attraction, intensity=magnitude. Usage: const fr = createFieldRenderer(device, format); updateFieldProbes(fr, device, chargedParticles, probeGrid); renderFieldArrows(pass, fr, viewProj, cameraPos, viewRight, viewUp);",
    "exports": [
      {
        "name": "createFieldRenderer",
        "kind": "function",
        "signature": "createFieldRenderer(device, format)",
        "summary": "Create the field renderer."
      },
      {
        "name": "initFieldRendererBindGroups",
        "kind": "function",
        "signature": "initFieldRendererBindGroups(renderer, device)",
        "summary": "Initialize bind groups."
      },
      {
        "name": "updateFieldProbes",
        "kind": "function",
        "signature": "updateFieldProbes(renderer, device, chargedParticles, gridConfig)",
        "summary": "Generate field probes from charged particle positions (CPU-side). Creates a 3D grid of probe points and computes the E field at each."
      },
      {
        "name": "renderFieldArrows",
        "kind": "function",
        "signature": "renderFieldArrows(pass, renderer, viewProj, cameraPos, viewRight, viewUp)",
        "summary": "Render field arrows in the given render pass."
      },
      {
        "name": "destroyFieldRenderer",
        "kind": "function",
        "signature": "destroyFieldRenderer(renderer)",
        "summary": "Destroy."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleHalfResComposite",
    "path": "engine/reference/render/particles/ParticleHalfResComposite.md",
    "source": "engine/render/particles/ParticleHalfResComposite.js",
    "import": "/engine/render/particles/ParticleHalfResComposite.js",
    "sourceHash": "82a8741c6e1284a4de66efb68b345780be1931e5b48dca60c80c0f6d95c90bac",
    "summary": "ParticleHalfResComposite.js - Half-resolution particle rendering + bilateral composite Renders particles to a half-res RGBA target, then composites onto the main framebuffer with alpha blending. Provides 4× fill-rate reduction for particle rendering. ==================== PIPELINE OVERVIEW (for future AI/developers) ==================== The particle color pipeline works as follows: 1. CPU writes per-particle color to metaBuffer in ParticleEmitterSystem.js: singleMeta[0..2] = emitterColor[0..2] (RGB from elementMixToEmitterConfig) → uploaded via device.queue.writeBuffer to GPU metaBuffer 2. SDF vertex shader (particles_sdf_billboard.js) reads: uMeta[ii].xyz → input.color Uses instance_index (ii) directly — NO alive list indirection in SDF path. The billboard shader (particles_billboard_vertex.js) DOES use uAliveList, but the active renderer is SDF (set in EditorParticles.js: particles.pipeline = sdfRenderer.pipeline). 3. SDF fragment shader applies volumetric lighting + thermal glow to input.color, outputs vec4<f32>(lit, finalAlpha) — NON-premultiplied. 4. SDF pipeline renders INTO this half-res texture with blend mode: color: src-alpha, one-minus-src-alpha  (standard alpha blend) This produces PRE-MULTIPLIED RGB in the texture because: result.rgb = src.rgb * src.a + cleared_black * (1 - src.a) = src.rgb * src.a 5. This composite pass reads the half-res texture and blends onto the scene. MUST use pre-multiplied blend (srcFactor='one') because step 4 already multiplied RGB by alpha. Using srcFactor='src-alpha' would DOUBLE the alpha (lit * alpha²), making low-alpha particles nearly invisible. CRITICAL: If you change the SDF pipeline blend mode, you must update this composite blend mode to match. src-alpha render → 'one' composite. premultiplied render → 'one' composite. Ref: GPU Gems 3 Ch.23 \"High-Speed Off-Screen Particles\"",
    "exports": [
      {
        "name": "createHalfResCompositeSystem",
        "kind": "function",
        "signature": "createHalfResCompositeSystem(device, format, fullWidth, fullHeight)",
        "summary": "Create the half-resolution particle rendering + composite system."
      },
      {
        "name": "resizeHalfResTargets",
        "kind": "function",
        "signature": "resizeHalfResTargets(system, fullWidth, fullHeight)",
        "summary": "Resize half-res render targets. Call when the window/canvas resizes."
      },
      {
        "name": "getHalfResPassDescriptor",
        "kind": "function",
        "signature": "getHalfResPassDescriptor(system)",
        "summary": "Get the render pass descriptor for the half-res particle pass. Clear to transparent black (0,0,0,0) so alpha blending composites correctly. After particles render here with src-alpha blend, the texture contains pre-multiplied color: rgb = lit * alpha, a = combined alpha."
      },
      {
        "name": "executeComposite",
        "kind": "function",
        "signature": "executeComposite(system, encoder, mainTextureView)",
        "summary": "Execute the composite pass: upsample half-res particles onto main framebuffer."
      },
      {
        "name": "destroyHalfResCompositeSystem",
        "kind": "function",
        "signature": "destroyHalfResCompositeSystem(system)",
        "summary": "Destroy half-res composite system resources."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleLightingRenderer",
    "path": "engine/reference/render/particles/ParticleLightingRenderer.md",
    "source": "engine/render/particles/ParticleLightingRenderer.js",
    "import": "/engine/render/particles/ParticleLightingRenderer.js",
    "sourceHash": "5775a84d833bd8caea8e02672d166ae9e444cc2934df2ed8f25e79c9bd693204",
    "summary": "Create particle lighting pass renderer",
    "exports": [
      {
        "name": "createParticleLightingRenderer",
        "kind": "function",
        "signature": "async createParticleLightingRenderer(options)",
        "summary": "Create particle lighting pass renderer"
      },
      {
        "name": "createParticleLightingDataBindGroup",
        "kind": "function",
        "signature": "createParticleLightingDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)",
        "summary": "Create data bind group for lighting pass"
      },
      {
        "name": "setParticleLightingParams",
        "kind": "function",
        "signature": "setParticleLightingParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })",
        "summary": "Update lighting pass parameters"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleMeshRenderer",
    "path": "engine/reference/render/particles/ParticleMeshRenderer.md",
    "source": "engine/render/particles/ParticleMeshRenderer.js",
    "import": "/engine/render/particles/ParticleMeshRenderer.js",
    "sourceHash": "cf7ed0013f445f8e55046d90776ecdabf4fea1d68124d97dfec1156ed6919fd2",
    "summary": "ParticleMeshRenderer.js - Instanced Mesh Particle Renderer (GAP 9) Renders each particle as a 3D mesh instance instead of a billboard. Supports both regular triangle meshes AND voxel meshes (compact u32 format). Each particle's position/velocity/meta drives a mesh instance: - Position from particle positions buffer - Rotation from velocity direction (velocity-aligned) or billboard - Scale from meta.w packed size - Color tint from meta.rgb - Age-based fade from pos.w / vel.w Usage: const renderer = await createParticleMeshRenderer(device, { format, mesh }); // In render loop: renderMeshParticles(pass, renderer, world, { viewProj, instanceCount });",
    "exports": [
      {
        "name": "createParticleMeshRenderer",
        "kind": "function",
        "signature": "async createParticleMeshRenderer(device, options = {})",
        "summary": "Create a particle mesh renderer."
      },
      {
        "name": "setParticleMesh",
        "kind": "function",
        "signature": "setParticleMesh(renderer, mesh)",
        "summary": "Set the mesh to render per particle."
      },
      {
        "name": "bindParticleData",
        "kind": "function",
        "signature": "bindParticleData(renderer, world)",
        "summary": "Bind particle data buffers from a particle world."
      },
      {
        "name": "renderMeshParticles",
        "kind": "function",
        "signature": "renderMeshParticles(pass, renderer, options = {})",
        "summary": "Render mesh particles into a render pass."
      },
      {
        "name": "setMeshParticleParams",
        "kind": "function",
        "signature": "setMeshParticleParams(renderer, params = {})",
        "summary": "Update mesh particle renderer params."
      },
      {
        "name": "initShadowPipeline",
        "kind": "function",
        "signature": "initShadowPipeline(renderer)",
        "summary": "Lazily initialize the shadow depth pipeline for particle mesh shadow casting. Call once before the first flushShadowDepth. Requires dataBindGroup to be set."
      },
      {
        "name": "flushShadowDepth",
        "kind": "function",
        "signature": "flushShadowDepth(pass, renderer, lightViewProj, instanceCount)",
        "summary": "Render mesh particles into a shadow depth pass (depth-only, no color). Compatible with ShadowMapPass.renderShadowDepth()."
      },
      {
        "name": "destroyParticleMeshRenderer",
        "kind": "function",
        "signature": "destroyParticleMeshRenderer(renderer)",
        "summary": "Destroy the renderer."
      },
      {
        "name": "MESH_FRAME_STRUCT",
        "kind": "constant",
        "signature": "MESH_FRAME_STRUCT",
        "summary": ""
      },
      {
        "name": "MESH_ALIGN_VELOCITY",
        "kind": "constant",
        "signature": "MESH_ALIGN_VELOCITY",
        "summary": ""
      },
      {
        "name": "MESH_ALIGN_BILLBOARD",
        "kind": "constant",
        "signature": "MESH_ALIGN_BILLBOARD",
        "summary": ""
      },
      {
        "name": "MESH_ALIGN_WORLD",
        "kind": "constant",
        "signature": "MESH_ALIGN_WORLD",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleNormalsRenderer",
    "path": "engine/reference/render/particles/ParticleNormalsRenderer.md",
    "source": "engine/render/particles/ParticleNormalsRenderer.js",
    "import": "/engine/render/particles/ParticleNormalsRenderer.js",
    "sourceHash": "33573e49191c99b2978b77f08a1eac0b29f98a573015ca443653870c379b1b5f",
    "summary": "Create particle normals pass renderer",
    "exports": [
      {
        "name": "createParticleNormalsRenderer",
        "kind": "function",
        "signature": "async createParticleNormalsRenderer(options)",
        "summary": "Create particle normals pass renderer"
      },
      {
        "name": "createParticleNormalsDataBindGroup",
        "kind": "function",
        "signature": "createParticleNormalsDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)",
        "summary": "Create data bind group for normals pass"
      },
      {
        "name": "setParticleNormalsParams",
        "kind": "function",
        "signature": "setParticleNormalsParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })",
        "summary": "Update normals pass parameters"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleOrbitalRenderer",
    "path": "engine/reference/render/particles/ParticleOrbitalRenderer.md",
    "source": "engine/render/particles/ParticleOrbitalRenderer.js",
    "import": "/engine/render/particles/ParticleOrbitalRenderer.js",
    "sourceHash": "8456ed7dba8364604bf54daae4ac22b91ce6f7c1db18f58cc15ba52f83be1342",
    "summary": "ParticleOrbitalRenderer.js - Electron Cloud / Orbital Renderer (GAP 40) Renders electron probability clouds around atom-particles using raymarched spherical harmonics. Color by element (CPK convention) from element table. LOD: full orbital at close range, simple sphere at distance. Usage: const orb = createOrbitalRenderer(device, format); renderOrbitals(pass, orb, { positionBuffer, elementBuffer, colorLutBuffer, camera });",
    "exports": [
      {
        "name": "createOrbitalRenderer",
        "kind": "function",
        "signature": "createOrbitalRenderer(device, format)",
        "summary": "Create the orbital renderer."
      },
      {
        "name": "initOrbitalBindGroups",
        "kind": "function",
        "signature": "initOrbitalBindGroups(renderer, device, positionBuffer, velocityBuffer, elementBuffer, lutBuffer, colorLutBuffer)",
        "summary": "Initialize bind groups for orbital rendering."
      },
      {
        "name": "renderOrbitals",
        "kind": "function",
        "signature": "renderOrbitals(pass, renderer, viewProj, cameraPos, viewRight, viewUp, instanceCount)",
        "summary": "Render orbital clouds in the given render pass."
      },
      {
        "name": "destroyOrbitalRenderer",
        "kind": "function",
        "signature": "destroyOrbitalRenderer(renderer)",
        "summary": "Destroy."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticlePhaseVFX",
    "path": "engine/reference/render/particles/ParticlePhaseVFX.md",
    "source": "engine/render/particles/ParticlePhaseVFX.js",
    "import": "/engine/render/particles/ParticlePhaseVFX.js",
    "sourceHash": "689f15494e8833f4de83b9be82bcab6c4636f114ff95c0e36db538236b3fb85f",
    "summary": "ParticlePhaseVFX.js - Phase Transition Visual Effects Manager (GAP 43) Manages phase-transition visual effects for particle rendering. Provides WGSL snippet injection for existing billboard/SDF fragment shaders. Controls: frost crystallization, melt sheen, boiling bubbles, ionization arcs. The actual rendering is done by injecting applyPhaseVFX() into existing particle fragment shaders. This module manages the configuration and provides the WGSL code for inclusion. Usage: import { phaseVFXWGSL } from '../shaders/modules/core/particles_phase_vfx.js'; // Include phaseVFXWGSL in particle fragment shader // Call applyPhaseVFX(baseColor, uv, time, phase, temperature, latentProgress)",
    "exports": [
      {
        "name": "createPhaseVFXConfig",
        "kind": "function",
        "signature": "createPhaseVFXConfig(overrides = {})",
        "summary": "Create a phase VFX configuration object."
      },
      {
        "name": "getPhaseVFXShader",
        "kind": "function",
        "signature": "getPhaseVFXShader()",
        "summary": "Get the WGSL snippet for phase VFX. Include this in particle fragment shaders to enable phase transition effects."
      },
      {
        "name": "PHASE_VFX_DEFAULTS",
        "kind": "constant",
        "signature": "PHASE_VFX_DEFAULTS",
        "summary": "Phase VFX configuration. These values are passed to shaders via existing particle uniform buffers."
      },
      {
        "name": "phaseVFXWGSL",
        "kind": "re-export",
        "signature": "phaseVFXWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleQualityManager",
    "path": "engine/reference/render/particles/ParticleQualityManager.md",
    "source": "engine/render/particles/ParticleQualityManager.js",
    "import": "/engine/render/particles/ParticleQualityManager.js",
    "sourceHash": "1ce63623fe509469e9ff75f7c54850a9a99d4b16363b9ea01fca8309735bbc80",
    "summary": "Create a particle quality manager",
    "exports": [
      {
        "name": "createParticleQualityManager",
        "kind": "function",
        "signature": "createParticleQualityManager(options = {})",
        "summary": "Create a particle quality manager"
      },
      {
        "name": "QUALITY_PRESETS",
        "kind": "constant",
        "signature": "QUALITY_PRESETS",
        "summary": "Default quality presets"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleSPHSurfaceRenderer",
    "path": "engine/reference/render/particles/ParticleSPHSurfaceRenderer.md",
    "source": "engine/render/particles/ParticleSPHSurfaceRenderer.js",
    "import": "/engine/render/particles/ParticleSPHSurfaceRenderer.js",
    "sourceHash": "fcd931c1a832a6ed3008c72e2619d325ac88df8e081f8b554a2ad44f92ea9753",
    "summary": "ParticleSPHSurfaceRenderer.js - SPH Fluid Surface Renderer (GAP 44) Screen-space rendering of SPH fluid particles as smooth liquid surface. Bridges SPH particle data (GAP 36) into the existing FluidWaterPass pipeline. Pipeline: 1. Render SPH particles as sphere impostors → depth texture 2. Bilateral blur → smooth surface 3. Thickness accumulation → subsurface scattering 4. Composite with refraction + reflection + Fresnel Per-element tint from element table: water=blue, lava=orange, blood=red. Usage: const ssr = createSPHSurfaceRenderer(device, format, width, height); initSPHSurfaceBindGroups(ssr, device, positionBuffer, velocityBuffer, elementBuffer, colorLutBuffer); renderSPHSurface(ssr, encoder, { sceneColor, sceneDepth, camera, particleCount });",
    "exports": [
      {
        "name": "createSPHSurfaceRenderer",
        "kind": "function",
        "signature": "createSPHSurfaceRenderer(device, format, width, height)",
        "summary": "Create the SPH surface renderer. Full SSFR pipeline: depth → bilateral blur (H+V) → thickness → normals + composite."
      },
      {
        "name": "initSPHSurfaceBindGroups",
        "kind": "function",
        "signature": "initSPHSurfaceBindGroups(renderer, device, positionBuffer, velocityBuffer, thermalBuffer)",
        "summary": "Initialize bind groups for all SSFR passes."
      },
      {
        "name": "initSPHCompositeBindGroup",
        "kind": "function",
        "signature": "initSPHCompositeBindGroup(renderer, device, sceneColorView)",
        "summary": "Create composite bind group (needs scene color texture view). Reads smoothed depth (blurTextureB) + thickness for full SSFR composite."
      },
      {
        "name": "setSPHSurfaceTint",
        "kind": "function",
        "signature": "setSPHSurfaceTint(renderer, r, g, b)",
        "summary": "Set fluid tint color (e.g., from element)."
      },
      {
        "name": "renderSPHSurface",
        "kind": "function",
        "signature": "renderSPHSurface(renderer, encoder, options)",
        "summary": "Render SPH fluid surface (full SSFR pipeline). Pass 1: Depth (sphere impostors) Pass 2: Bilateral blur H Pass 3: Bilateral blur V Pass 4: Thickness (additive)"
      },
      {
        "name": "compositeSPHSurface",
        "kind": "function",
        "signature": "compositeSPHSurface(pass, renderer)",
        "summary": "Composite SPH surface onto the scene in a render pass."
      },
      {
        "name": "destroySPHSurfaceRenderer",
        "kind": "function",
        "signature": "destroySPHSurfaceRenderer(renderer)",
        "summary": "Destroy."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleSdfRenderer",
    "path": "engine/reference/render/particles/ParticleSdfRenderer.md",
    "source": "engine/render/particles/ParticleSdfRenderer.js",
    "import": "/engine/render/particles/ParticleSdfRenderer.js",
    "sourceHash": "58fb728cc44affa864d1337e7c46e2cd07a9437be75da75b6639e72d007e5fca",
    "summary": "Create volumetric SDF particle renderer",
    "exports": [
      {
        "name": "createParticleSdfRenderer",
        "kind": "function",
        "signature": "async createParticleSdfRenderer(options)",
        "summary": "Create volumetric SDF particle renderer"
      },
      {
        "name": "createParticleSdfDataBindGroup",
        "kind": "function",
        "signature": "createParticleSdfDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer, thermalBuffer, sphDensityBuffer, classBuffer)",
        "summary": "Create data bind group for SDF particle world. Binds the shared particle buffers (position, meta, velocity, thermal) to group 1. The metaBuffer contains per-particle color at .rgb — written by ParticleEmitterSystem.js. If thermalBuffer is missing, a fallback with room-temp defaults (293K) is created."
      },
      {
        "name": "createParticleSdfDepthBindGroup",
        "kind": "function",
        "signature": "createParticleSdfDepthBindGroup(renderer, depthTextureView)",
        "summary": "Create depth bind group for soft particles (scene depth texture). Must be recreated when the depth texture changes (e.g. on resize). Only binds depth texture (binding 0). Does NOT include alive list buffer — the SDF vertex shader uses instance_index directly, unlike the billboard shader which uses uAliveList for indirection."
      },
      {
        "name": "createParticleSdfLutSixWayBindGroup",
        "kind": "function",
        "signature": "createParticleSdfLutSixWayBindGroup(renderer, colorGradientView, colorGradientSampler, lifetimeCurvesView, lifetimeCurvesSampler, sixWaySystem)",
        "summary": "Create combined LUT + six-way lighting bind group (group 3). Bindings 0-3: color gradient + lifetime curves LUT textures. Bindings 4-11: six directional lightmap textures + sampler + params. Merged into one group to stay within WebGPU maxBindGroups=4."
      },
      {
        "name": "setParticleSdfParams",
        "kind": "function",
        "signature": "setParticleSdfParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })",
        "summary": "Update SDF particle rendering parameters"
      },
      {
        "name": "SDF_FRAME_STRUCT",
        "kind": "constant",
        "signature": "SDF_FRAME_STRUCT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleShadowCaster",
    "path": "engine/reference/render/particles/ParticleShadowCaster.md",
    "source": "engine/render/particles/ParticleShadowCaster.js",
    "import": "/engine/render/particles/ParticleShadowCaster.js",
    "sourceHash": "2c0352c05debb9f9a66658c61237f08649553d041a9c5b6a13c9b38c2270ffdd",
    "summary": "",
    "exports": [
      {
        "name": "createParticleShadowCaster",
        "kind": "function",
        "signature": "async createParticleShadowCaster(device)",
        "summary": ""
      },
      {
        "name": "registerCaster",
        "kind": "function",
        "signature": "registerCaster(caster, id, flushFn)",
        "summary": ""
      },
      {
        "name": "unregisterCaster",
        "kind": "function",
        "signature": "unregisterCaster(caster, id)",
        "summary": ""
      },
      {
        "name": "bindShadowParticleData",
        "kind": "function",
        "signature": "bindShadowParticleData(caster, world)",
        "summary": ""
      },
      {
        "name": "flushBillboardShadowDepth",
        "kind": "function",
        "signature": "flushBillboardShadowDepth(pass, caster, lightViewProj, sunDir, instanceCount)",
        "summary": ""
      },
      {
        "name": "flushAllParticleShadows",
        "kind": "function",
        "signature": "flushAllParticleShadows(pass, caster, lightViewProj, sunDir, billboardInstanceCount)",
        "summary": ""
      },
      {
        "name": "createRopeShadowCaster",
        "kind": "function",
        "signature": "async createRopeShadowCaster(device, ropeRenderer)",
        "summary": ""
      },
      {
        "name": "destroyParticleShadowCaster",
        "kind": "function",
        "signature": "destroyParticleShadowCaster(caster)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleSixWayLighting",
    "path": "engine/reference/render/particles/ParticleSixWayLighting.md",
    "source": "engine/render/particles/ParticleSixWayLighting.js",
    "import": "/engine/render/particles/ParticleSixWayLighting.js",
    "sourceHash": "651dcea180d06f365727e796154ef9f1b40961f66fdfce887fbd9810dce841f2",
    "summary": "ParticleSixWayLighting.js - Six-Way Lightmap Particles (GAP 24) Pre-baked lighting from 6 directions (+X, -X, +Y, -Y, +Z, -Z) sampled based on dominant light direction. Creates a fake 3D volumetric look on flat billboard particles, especially useful for smoke and fog. Matches Unity VFX Graph six-way lighting feature. The system bakes a 6-channel lightmap texture (3 RGBA8 textures for 6 directions, or a single RGBA16float with packed channels). At render time, the fragment shader blends between the 6 maps based on the light direction relative to the billboard. Usage: const sixway = createSixWayLightingSystem(device); loadSixWayTextures(sixway, device, { right, left, top, bottom, front, back }); // Or generate procedural maps: generateProceduralSixWay(sixway, device, 'smoke'); // Bind to particle renderer: bindSixWayToRenderer(sixway, renderer);",
    "exports": [
      {
        "name": "createSixWayLightingSystem",
        "kind": "function",
        "signature": "createSixWayLightingSystem(device, config = {})",
        "summary": "Create a six-way lighting system."
      },
      {
        "name": "generateProceduralSixWay",
        "kind": "function",
        "signature": "generateProceduralSixWay(system, device, preset = 'smoke')",
        "summary": "Generate procedural six-way lightmaps."
      },
      {
        "name": "loadSixWayTextures",
        "kind": "function",
        "signature": "async loadSixWayTextures(system, device, images)",
        "summary": "Load six-way textures from external image data."
      },
      {
        "name": "setSixWayLightDirection",
        "kind": "function",
        "signature": "setSixWayLightDirection(system, lightDir, intensity = 1.0)",
        "summary": "Update the dominant light direction."
      },
      {
        "name": "destroySixWayLightingSystem",
        "kind": "function",
        "signature": "destroySixWayLightingSystem(system)",
        "summary": "Destroy the system."
      },
      {
        "name": "SIX_WAY_LIGHTING_WGSL",
        "kind": "constant",
        "signature": "SIX_WAY_LIGHTING_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleSizeRenderer",
    "path": "engine/reference/render/particles/ParticleSizeRenderer.md",
    "source": "engine/render/particles/ParticleSizeRenderer.js",
    "import": "/engine/render/particles/ParticleSizeRenderer.js",
    "sourceHash": "0ddc7579738b43317d9334d999c0d30505f99cca087f60c2901cf9b30b135e47",
    "summary": "",
    "exports": [
      {
        "name": "createParticleSizeRenderer",
        "kind": "function",
        "signature": "async createParticleSizeRenderer(options)",
        "summary": ""
      },
      {
        "name": "createParticleSizeDataBindGroup",
        "kind": "function",
        "signature": "createParticleSizeDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)",
        "summary": ""
      },
      {
        "name": "setParticleSizeParams",
        "kind": "function",
        "signature": "setParticleSizeParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleThermalRenderer",
    "path": "engine/reference/render/particles/ParticleThermalRenderer.md",
    "source": "engine/render/particles/ParticleThermalRenderer.js",
    "import": "/engine/render/particles/ParticleThermalRenderer.js",
    "sourceHash": "fa77c55f948062bebe2dd384eb55e68b1f75dee0127a9c2e8dcaa019b6c61450",
    "summary": "Particle Thermal/Blackbody Debug Pass Renderer Renders particle temperature as blackbody radiation color for debug visualization. Requires thermalData buffer (binding 4) in addition to standard particle buffers.",
    "exports": [
      {
        "name": "createParticleThermalRenderer",
        "kind": "function",
        "signature": "async createParticleThermalRenderer(options)",
        "summary": ""
      },
      {
        "name": "createParticleThermalDataBindGroup",
        "kind": "function",
        "signature": "createParticleThermalDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer, thermalBuffer)",
        "summary": ""
      },
      {
        "name": "setParticleThermalParams",
        "kind": "function",
        "signature": "setParticleThermalParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleTrailHistory",
    "path": "engine/reference/render/particles/ParticleTrailHistory.md",
    "source": "engine/render/particles/ParticleTrailHistory.js",
    "import": "/engine/render/particles/ParticleTrailHistory.js",
    "sourceHash": "6a412001397160fd62408f2b48bde7bcac3386057964fc6179f48668659fa0a8",
    "summary": "ParticleTrailHistory.js - Per-Particle Trail Histories (GAP 26) Individual per-particle position history trails. Unlike ribbon trails (which connect sequential particles into a strip), this stores N frames of position history PER particle and renders each as a fading afterimage. Think sparks leaving comet tails, or tracers behind projectiles. Architecture: - Ring buffer: historyBuffer[maxParticles × historyLength × vec4] stores position snapshots - GPU compute shader shifts history and writes current position each frame - Render pass draws each trail point as a small billboard, fading by age Usage: const trails = createTrailHistorySystem(device, maxParticles, { historyLength: 16 }); initTrailHistoryBindGroups(trails, device, positionBuffer, velocityBuffer); // Each frame: updateTrailHistories(trails, device, particleCount); renderTrailHistories(pass, trails, frameBindGroup);",
    "exports": [
      {
        "name": "createTrailHistorySystem",
        "kind": "function",
        "signature": "createTrailHistorySystem(device, maxParticles, config = {})",
        "summary": "Create a per-particle trail history system."
      },
      {
        "name": "initTrailHistoryBindGroups",
        "kind": "function",
        "signature": "initTrailHistoryBindGroups(system, device, positionBuffer, velocityBuffer, metaBuffer)",
        "summary": "Initialize bind groups."
      },
      {
        "name": "updateTrailHistories",
        "kind": "function",
        "signature": "updateTrailHistories(system, device, particleCount, dt = 1/60)",
        "summary": "Update trail histories (GPU compute pass). Call once per frame before rendering trails."
      },
      {
        "name": "renderTrailHistories",
        "kind": "function",
        "signature": "renderTrailHistories(pass, system, frameBindGroup, particleCount)",
        "summary": "Render trail histories as additive fading billboards."
      },
      {
        "name": "destroyTrailHistorySystem",
        "kind": "function",
        "signature": "destroyTrailHistorySystem(system)",
        "summary": "Destroy the system."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/ParticleVelocityRenderer",
    "path": "engine/reference/render/particles/ParticleVelocityRenderer.md",
    "source": "engine/render/particles/ParticleVelocityRenderer.js",
    "import": "/engine/render/particles/ParticleVelocityRenderer.js",
    "sourceHash": "e59bcc493497639b45fad6102acef8cc87f0b0f60f276bc5813aa729494fa150",
    "summary": "",
    "exports": [
      {
        "name": "createParticleVelocityRenderer",
        "kind": "function",
        "signature": "async createParticleVelocityRenderer(options)",
        "summary": ""
      },
      {
        "name": "createParticleVelocityDataBindGroup",
        "kind": "function",
        "signature": "createParticleVelocityDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)",
        "summary": ""
      },
      {
        "name": "setParticleVelocityParams",
        "kind": "function",
        "signature": "setParticleVelocityParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/RopeGPURenderer",
    "path": "engine/reference/render/particles/RopeGPURenderer.md",
    "source": "engine/render/particles/RopeGPURenderer.js",
    "import": "/engine/render/particles/RopeGPURenderer.js",
    "sourceHash": "1589b3aad62bf54ab336eb8f0bb1a2a6214b6f0afed7b6657cbf0e85fac503c8",
    "summary": "RopeGPURenderer.js - GPU-driven rope/tube mesh generation Generates tube geometry from rope particle positions entirely on the GPU. Reads particle positions from the simulation buffer and outputs vertex data for rendering as a triangle mesh. Features: - Compute shader generates tube vertices from particle chain - Configurable tube radius and segment count - Automatic tangent/normal/binormal frame calculation - Twist-resistant frame propagation (parallel transport) - Indirect draw support for variable-length ropes",
    "exports": [
      {
        "name": "RopeGPURenderer",
        "kind": "class",
        "signature": "class RopeGPURenderer",
        "summary": ""
      },
      {
        "name": "createRopeGPURenderer",
        "kind": "function",
        "signature": "createRopeGPURenderer(device, options = {})",
        "summary": "Create a rope GPU renderer instance"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/RopeRenderSystem",
    "path": "engine/reference/render/particles/RopeRenderSystem.md",
    "source": "engine/render/particles/RopeRenderSystem.js",
    "import": "/engine/render/particles/RopeRenderSystem.js",
    "sourceHash": "2a27f884d2c9584986ba0d2766217bcc2a7a94ba4c69c3ee8043f521986a8643",
    "summary": "RopeRenderSystem.js - Integration layer for GPU rope rendering Connects the RopeGPURenderer with the particle simulation world's rope chain registry. Manages multiple ropes and batches rendering.",
    "exports": [
      {
        "name": "RopeRenderSystem",
        "kind": "class",
        "signature": "class RopeRenderSystem",
        "summary": ""
      },
      {
        "name": "createRopeRenderSystem",
        "kind": "function",
        "signature": "createRopeRenderSystem(device, options = {})",
        "summary": "Create a rope render system"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/billboard/index",
    "path": "engine/reference/render/particles/billboard/index.md",
    "source": "engine/render/particles/billboard/index.js",
    "import": "/engine/render/particles/billboard/index.js",
    "sourceHash": "42ead5475a75091562ee89bc78a35ea570a9296214769181bd26c90f27abd51b",
    "summary": "billboard/index.js — Re-exports for billboard particle rendering.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/custom/index",
    "path": "engine/reference/render/particles/custom/index.md",
    "source": "engine/render/particles/custom/index.js",
    "import": "/engine/render/particles/custom/index.js",
    "sourceHash": "63b2e5a1df963262c53a8665fd95ff838df8f7e9bc636477b32627f8c2f7151d",
    "summary": "custom/index.js — Re-exports for custom particle effects.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/debug/index",
    "path": "engine/reference/render/particles/debug/index.md",
    "source": "engine/render/particles/debug/index.js",
    "import": "/engine/render/particles/debug/index.js",
    "sourceHash": "381f505a650a3801312e7a3911513a148301dd7f82094c6c51c509c5c76e8201",
    "summary": "debug/index.js — Re-exports for debug visualization renderers.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/distortion/index",
    "path": "engine/reference/render/particles/distortion/index.md",
    "source": "engine/render/particles/distortion/index.js",
    "import": "/engine/render/particles/distortion/index.js",
    "sourceHash": "122fd9109fd3a7fc64be14fae20ccd5a182173a28cfab0509bcdb04674dd68c2",
    "summary": "distortion/index.js — Re-exports for distortion and phase VFX rendering.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/index",
    "path": "engine/reference/render/particles/index.md",
    "source": "engine/render/particles/index.js",
    "import": "/engine/render/particles/index.js",
    "sourceHash": "1ddf819acb8d7b12caf57b80e2d7571bc47b6ac04799090494d87a9397060bf9",
    "summary": "Particle System Exports Barrel file for easy importing of all particle-related modules.",
    "exports": [
      {
        "name": "EFFECT_PRESETS",
        "kind": "re-export",
        "signature": "EFFECT_PRESETS",
        "summary": ""
      },
      {
        "name": "PHASE_VFX_DEFAULTS",
        "kind": "re-export",
        "signature": "PHASE_VFX_DEFAULTS",
        "summary": ""
      },
      {
        "name": "ParticleCollisionSDFSystem",
        "kind": "re-export",
        "signature": "ParticleCollisionSDFSystem",
        "summary": ""
      },
      {
        "name": "ParticleEffectRegistry",
        "kind": "re-export",
        "signature": "ParticleEffectRegistry",
        "summary": ""
      },
      {
        "name": "SDF_HELPERS_WGSL",
        "kind": "re-export",
        "signature": "SDF_HELPERS_WGSL",
        "summary": ""
      },
      {
        "name": "applyEffectToEmitter",
        "kind": "re-export",
        "signature": "applyEffectToEmitter",
        "summary": ""
      },
      {
        "name": "cloneEffect",
        "kind": "re-export",
        "signature": "cloneEffect",
        "summary": ""
      },
      {
        "name": "compileEffect",
        "kind": "re-export",
        "signature": "compileEffect",
        "summary": ""
      },
      {
        "name": "compositeSPHSurface",
        "kind": "re-export",
        "signature": "compositeSPHSurface",
        "summary": ""
      },
      {
        "name": "createBlackbodyBindGroupLayout",
        "kind": "re-export",
        "signature": "createBlackbodyBindGroupLayout",
        "summary": ""
      },
      {
        "name": "createBlackbodySystem",
        "kind": "re-export",
        "signature": "createBlackbodySystem",
        "summary": ""
      },
      {
        "name": "createBondRenderer",
        "kind": "re-export",
        "signature": "createBondRenderer",
        "summary": ""
      },
      {
        "name": "createCollisionPipeline",
        "kind": "re-export",
        "signature": "createCollisionPipeline",
        "summary": ""
      },
      {
        "name": "createEffect",
        "kind": "re-export",
        "signature": "createEffect",
        "summary": ""
      },
      {
        "name": "createEffectParamsData",
        "kind": "re-export",
        "signature": "createEffectParamsData",
        "summary": ""
      },
      {
        "name": "createFieldRenderer",
        "kind": "re-export",
        "signature": "createFieldRenderer",
        "summary": ""
      },
      {
        "name": "createOrbitalRenderer",
        "kind": "re-export",
        "signature": "createOrbitalRenderer",
        "summary": ""
      },
      {
        "name": "createParticleCollisionSDFSystem",
        "kind": "re-export",
        "signature": "createParticleCollisionSDFSystem",
        "summary": ""
      },
      {
        "name": "createParticleSdfDataBindGroup",
        "kind": "re-export",
        "signature": "createParticleSdfDataBindGroup",
        "summary": ""
      },
      {
        "name": "createParticleSdfRenderer",
        "kind": "re-export",
        "signature": "createParticleSdfRenderer",
        "summary": ""
      },
      {
        "name": "createPhaseVFXConfig",
        "kind": "re-export",
        "signature": "createPhaseVFXConfig",
        "summary": ""
      },
      {
        "name": "createSPHSurfaceRenderer",
        "kind": "re-export",
        "signature": "createSPHSurfaceRenderer",
        "summary": ""
      },
      {
        "name": "destroyBlackbodySystem",
        "kind": "re-export",
        "signature": "destroyBlackbodySystem",
        "summary": ""
      },
      {
        "name": "destroyBondRenderer",
        "kind": "re-export",
        "signature": "destroyBondRenderer",
        "summary": ""
      },
      {
        "name": "destroyFieldRenderer",
        "kind": "re-export",
        "signature": "destroyFieldRenderer",
        "summary": ""
      },
      {
        "name": "destroyOrbitalRenderer",
        "kind": "re-export",
        "signature": "destroyOrbitalRenderer",
        "summary": ""
      },
      {
        "name": "destroySPHSurfaceRenderer",
        "kind": "re-export",
        "signature": "destroySPHSurfaceRenderer",
        "summary": ""
      },
      {
        "name": "generateCollisionShader",
        "kind": "re-export",
        "signature": "generateCollisionShader",
        "summary": ""
      },
      {
        "name": "generateMultiEffectCollisionShader",
        "kind": "re-export",
        "signature": "generateMultiEffectCollisionShader",
        "summary": ""
      },
      {
        "name": "generateVisualShader",
        "kind": "re-export",
        "signature": "generateVisualShader",
        "summary": ""
      },
      {
        "name": "getBlackbodyBindGroup",
        "kind": "re-export",
        "signature": "getBlackbodyBindGroup",
        "summary": ""
      },
      {
        "name": "getCollisionSDFSystem",
        "kind": "re-export",
        "signature": "getCollisionSDFSystem",
        "summary": ""
      },
      {
        "name": "getCompiledEffect",
        "kind": "re-export",
        "signature": "getCompiledEffect",
        "summary": ""
      },
      {
        "name": "getEffectByIndex",
        "kind": "re-export",
        "signature": "getEffectByIndex",
        "summary": ""
      },
      {
        "name": "getEffectForRendering",
        "kind": "re-export",
        "signature": "getEffectForRendering",
        "summary": ""
      },
      {
        "name": "getEffectIndex",
        "kind": "re-export",
        "signature": "getEffectIndex",
        "summary": ""
      },
      {
        "name": "getParticleEffectRegistry",
        "kind": "re-export",
        "signature": "getParticleEffectRegistry",
        "summary": ""
      },
      {
        "name": "getParticleSDF",
        "kind": "re-export",
        "signature": "getParticleSDF",
        "summary": ""
      },
      {
        "name": "getPhaseVFXShader",
        "kind": "re-export",
        "signature": "getPhaseVFXShader",
        "summary": ""
      },
      {
        "name": "getPreset",
        "kind": "re-export",
        "signature": "getPreset",
        "summary": ""
      },
      {
        "name": "getPresets",
        "kind": "re-export",
        "signature": "getPresets",
        "summary": ""
      },
      {
        "name": "initBondRendererBindGroups",
        "kind": "re-export",
        "signature": "initBondRendererBindGroups",
        "summary": ""
      },
      {
        "name": "initCustomParticleEffects",
        "kind": "re-export",
        "signature": "initCustomParticleEffects",
        "summary": ""
      },
      {
        "name": "initFieldRendererBindGroups",
        "kind": "re-export",
        "signature": "initFieldRendererBindGroups",
        "summary": ""
      },
      {
        "name": "initOrbitalBindGroups",
        "kind": "re-export",
        "signature": "initOrbitalBindGroups",
        "summary": ""
      },
      {
        "name": "initParticleEffectRegistry",
        "kind": "re-export",
        "signature": "initParticleEffectRegistry",
        "summary": ""
      },
      {
        "name": "initSPHCompositeBindGroup",
        "kind": "re-export",
        "signature": "initSPHCompositeBindGroup",
        "summary": ""
      },
      {
        "name": "initSPHSurfaceBindGroups",
        "kind": "re-export",
        "signature": "initSPHSurfaceBindGroups",
        "summary": ""
      },
      {
        "name": "isCustomEffectsInitialized",
        "kind": "re-export",
        "signature": "isCustomEffectsInitialized",
        "summary": ""
      },
      {
        "name": "phaseVFXWGSL",
        "kind": "re-export",
        "signature": "phaseVFXWGSL",
        "summary": ""
      },
      {
        "name": "registerEffectForCollision",
        "kind": "re-export",
        "signature": "registerEffectForCollision",
        "summary": ""
      },
      {
        "name": "renderBonds",
        "kind": "re-export",
        "signature": "renderBonds",
        "summary": ""
      },
      {
        "name": "renderFieldArrows",
        "kind": "re-export",
        "signature": "renderFieldArrows",
        "summary": ""
      },
      {
        "name": "renderOrbitals",
        "kind": "re-export",
        "signature": "renderOrbitals",
        "summary": ""
      },
      {
        "name": "renderSPHSurface",
        "kind": "re-export",
        "signature": "renderSPHSurface",
        "summary": ""
      },
      {
        "name": "setBlackbodyEmission",
        "kind": "re-export",
        "signature": "setBlackbodyEmission",
        "summary": ""
      },
      {
        "name": "setParticleSdfParams",
        "kind": "re-export",
        "signature": "setParticleSdfParams",
        "summary": ""
      },
      {
        "name": "setSPHSurfaceTint",
        "kind": "re-export",
        "signature": "setSPHSurfaceTint",
        "summary": ""
      },
      {
        "name": "updateFieldProbes",
        "kind": "re-export",
        "signature": "updateFieldProbes",
        "summary": ""
      },
      {
        "name": "uploadBonds",
        "kind": "re-export",
        "signature": "uploadBonds",
        "summary": ""
      },
      {
        "name": "validateEffect",
        "kind": "re-export",
        "signature": "validateEffect",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/mesh/index",
    "path": "engine/reference/render/particles/mesh/index.md",
    "source": "engine/render/particles/mesh/index.js",
    "import": "/engine/render/particles/mesh/index.js",
    "sourceHash": "a00238d9b03e517115893bc4297dfeafef6293a685e4006cab04ee443090c24a",
    "summary": "mesh/index.js — Re-exports for mesh particle rendering.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/rope/index",
    "path": "engine/reference/render/particles/rope/index.md",
    "source": "engine/render/particles/rope/index.js",
    "import": "/engine/render/particles/rope/index.js",
    "sourceHash": "50393f5a83eb8809569900db5f296835a7aa1119afde0eb3843f8754c089fb33",
    "summary": "rope/index.js — Re-exports for rope/wire rendering.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/sdf/index",
    "path": "engine/reference/render/particles/sdf/index.md",
    "source": "engine/render/particles/sdf/index.js",
    "import": "/engine/render/particles/sdf/index.js",
    "sourceHash": "1a81c9d4fa5068dc143dd0d637ca6a471d9bcff5ce6195aca8ba2a8c783e6f5f",
    "summary": "sdf/index.js — Re-exports for SDF volumetric particle rendering.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/surface/index",
    "path": "engine/reference/render/particles/surface/index.md",
    "source": "engine/render/particles/surface/index.js",
    "import": "/engine/render/particles/surface/index.js",
    "sourceHash": "3c66e3f75515adaed25a56a79d814ad5b771c2aa995c6b92204be6ad51de0f4c",
    "summary": "surface/index.js — Re-exports for SSFR surface rendering pipeline.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/particles/trail/index",
    "path": "engine/reference/render/particles/trail/index.md",
    "source": "engine/render/particles/trail/index.js",
    "import": "/engine/render/particles/trail/index.js",
    "sourceHash": "e4cc1e091ed3eb9f370bcb661aa0941dbcf8e7c5ab38325bc7bccaaf5551b43c",
    "summary": "trail/index.js — Re-exports for trail and beam rendering.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/AbyssalCameraRig",
    "path": "engine/reference/render/passes/AbyssalCameraRig.md",
    "source": "engine/render/passes/AbyssalCameraRig.js",
    "import": "/engine/render/passes/AbyssalCameraRig.js",
    "sourceHash": "ede5f517cddb196883b925e8c6c82cef5c81cc7f9a446980bee7602b678dc221",
    "summary": "Applies a restrained floating-camera offset to isolated DOM scenery planes. WebGPU/2D canvases and document-root styles are deliberately excluded so animation cannot invalidate the page or disrupt GPU presentation textures.",
    "exports": [
      {
        "name": "AbyssalCameraRig",
        "kind": "class",
        "signature": "class AbyssalCameraRig",
        "summary": "Applies a restrained floating-camera offset to isolated DOM scenery planes. WebGPU/2D canvases and document-root styles are deliberately excluded so animation cannot invalidate the page or disrupt GPU presentation textures."
      },
      {
        "name": "startAbyssalCameraRig",
        "kind": "function",
        "signature": "startAbyssalCameraRig(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/AbyssalDiveTeam",
    "path": "engine/reference/render/passes/AbyssalDiveTeam.md",
    "source": "engine/render/passes/AbyssalDiveTeam.js",
    "import": "/engine/render/passes/AbyssalDiveTeam.js",
    "sourceHash": "5463887ff1e838b78090d3d1fc0ec01c084e592795f0cffc7636fd4c7d2c878f",
    "summary": "Authored three-person dive team for the abyssal landing scene. The team uses a deterministic mission-state controller instead of random action switching: swim, illuminate, inspect, signal, then inspect again. Individual response, phase, depth, and kick timing keep the formation alive without compromising buddy proximity or opaque paint ordering.",
    "exports": [
      {
        "name": "AbyssalDiveTeam",
        "kind": "class",
        "signature": "class AbyssalDiveTeam",
        "summary": "Authored three-person dive team for the abyssal landing scene. The team uses a deterministic mission-state controller instead of random action switching: swim, illuminate, inspect, signal, then inspect again. Individual response, phase, depth, and kick timing keep the formation alive without compromising buddy proximity or opaque paint ordering."
      },
      {
        "name": "startAbyssalDiveTeam",
        "kind": "function",
        "signature": "startAbyssalDiveTeam(layers, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/AbyssalFaunaField",
    "path": "engine/reference/render/passes/AbyssalFaunaField.md",
    "source": "engine/render/passes/AbyssalFaunaField.js",
    "import": "/engine/render/passes/AbyssalFaunaField.js",
    "sourceHash": "9ec30171f5b64a65660e1786d28900eb8f2b6a7782dfb7955bfd8548cbbbda13",
    "summary": "Small DOM fauna field for the authored abyssal landing scene. Local flock rules are deliberately limited to fish on the same depth plane.",
    "exports": [
      {
        "name": "AbyssalFaunaField",
        "kind": "class",
        "signature": "class AbyssalFaunaField",
        "summary": "Small DOM fauna field for the authored abyssal landing scene. Local flock rules are deliberately limited to fish on the same depth plane."
      },
      {
        "name": "startAbyssalFaunaField",
        "kind": "function",
        "signature": "startAbyssalFaunaField(layers, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/AbyssalSmokeAnimator",
    "path": "engine/reference/render/passes/AbyssalSmokeAnimator.md",
    "source": "engine/render/passes/AbyssalSmokeAnimator.js",
    "import": "/engine/render/passes/AbyssalSmokeAnimator.js",
    "sourceHash": "31b63e2426264412c11b1b563200452b7f68badd0a3fe80a14c0552bd426aeb6",
    "summary": "Cross-faded cel animator for the authored abyssal mineral plume. Two staggered lifecycles share the registered atlas. Each lifecycle changes drawing, rises, spreads, sheds opacity, and disappears while its successor is already forming at the vent. Adjacent-frame alpha always sums to one, which prevents the bright flashes produced by transition races.",
    "exports": [
      {
        "name": "AbyssalSmokeAnimator",
        "kind": "class",
        "signature": "class AbyssalSmokeAnimator",
        "summary": "Cross-faded cel animator for the authored abyssal mineral plume. Two staggered lifecycles share the registered atlas. Each lifecycle changes drawing, rises, spreads, sheds opacity, and disappears while its successor is already forming at the vent. Adjacent-frame alpha always sums to one, which prevents the bright flashes produced by transition races."
      },
      {
        "name": "startAbyssalSmokeAnimator",
        "kind": "function",
        "signature": "startAbyssalSmokeAnimator(stage, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/AreaResamplePass",
    "path": "engine/reference/render/passes/AreaResamplePass.md",
    "source": "engine/render/passes/AreaResamplePass.js",
    "import": "/engine/render/passes/AreaResamplePass.js",
    "sourceHash": "a8cd97fbd83e7df2e2abf1eadbdb455360818dd17839bc72ec8faedf75215b56",
    "summary": "AreaResamplePass - GPU-accelerated area-weighted resampling Better quality than bilinear for arbitrary scale factors. Especially useful for upscaling low-res renders.",
    "exports": [
      {
        "name": "AreaResamplePass",
        "kind": "class",
        "signature": "class AreaResamplePass",
        "summary": "AreaResamplePass - GPU-accelerated area-weighted resampling Better quality than bilinear for arbitrary scale factors. Especially useful for upscaling low-res renders."
      },
      {
        "name": "areaResampleCPU",
        "kind": "function",
        "signature": "areaResampleCPU(input, outputWidth, outputHeight)",
        "summary": "CPU area-weighted resample for ImageData (fallback or small images)"
      },
      {
        "name": "AREA_RESAMPLE_SHADER",
        "kind": "re-export",
        "signature": "AREA_RESAMPLE_SHADER",
        "summary": ""
      },
      {
        "name": "BLIT_FRAGMENT_SHADER",
        "kind": "re-export",
        "signature": "BLIT_FRAGMENT_SHADER",
        "summary": ""
      },
      {
        "name": "BLIT_VERTEX_SHADER",
        "kind": "re-export",
        "signature": "BLIT_VERTEX_SHADER",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/AutoExposurePass",
    "path": "engine/reference/render/passes/AutoExposurePass.md",
    "source": "engine/render/passes/AutoExposurePass.js",
    "import": "/engine/render/passes/AutoExposurePass.js",
    "sourceHash": "289bb72a8a4f7fe605398825141be6375a86057a322e867d69adf22137e893ce",
    "summary": "",
    "exports": [
      {
        "name": "AutoExposurePass",
        "kind": "class",
        "signature": "class AutoExposurePass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/BloomPass",
    "path": "engine/reference/render/passes/BloomPass.md",
    "source": "engine/render/passes/BloomPass.js",
    "import": "/engine/render/passes/BloomPass.js",
    "sourceHash": "2ed0e4b0dc53eecbd555e7c0e7b984d0919a633d5a263e76511f5b1a4e7609b1",
    "summary": "",
    "exports": [
      {
        "name": "BloomPass",
        "kind": "class",
        "signature": "class BloomPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/CascadeMetrics",
    "path": "engine/reference/render/passes/CascadeMetrics.md",
    "source": "engine/render/passes/CascadeMetrics.js",
    "import": "/engine/render/passes/CascadeMetrics.js",
    "sourceHash": "9a7e80605570ddda58395922a37e9ceb4b430bd125dd2b1ce6b250f322237b62",
    "summary": "CascadeMetrics - Central metrics collection for cascaded chunk system",
    "exports": [
      {
        "name": "CascadeMetrics",
        "kind": "class",
        "signature": "class CascadeMetrics",
        "summary": "CascadeMetrics - Central metrics collection for cascaded chunk system"
      },
      {
        "name": "getMetrics",
        "kind": "function",
        "signature": "getMetrics()",
        "summary": "Get global metrics instance"
      },
      {
        "name": "resetMetrics",
        "kind": "function",
        "signature": "resetMetrics()",
        "summary": "Reset global metrics"
      },
      {
        "name": "CATEGORY",
        "kind": "re-export",
        "signature": "CATEGORY",
        "summary": ""
      },
      {
        "name": "Counter",
        "kind": "re-export",
        "signature": "Counter",
        "summary": ""
      },
      {
        "name": "RollingStats",
        "kind": "re-export",
        "signature": "RollingStats",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/CascadedShadows",
    "path": "engine/reference/render/passes/CascadedShadows.md",
    "source": "engine/render/passes/CascadedShadows.js",
    "import": "/engine/render/passes/CascadedShadows.js",
    "sourceHash": "f86d4f9679e598a56f470fed8f80e7d1e637fdf4f131687b762ab5f72d1f3f67",
    "summary": "CascadedShadowMap - Multi-cascade shadow mapping system",
    "exports": [
      {
        "name": "CascadedShadowMap",
        "kind": "class",
        "signature": "class CascadedShadowMap",
        "summary": "CascadedShadowMap - Multi-cascade shadow mapping system"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/ChromaticAberrationPass",
    "path": "engine/reference/render/passes/ChromaticAberrationPass.md",
    "source": "engine/render/passes/ChromaticAberrationPass.js",
    "import": "/engine/render/passes/ChromaticAberrationPass.js",
    "sourceHash": "7faa00915cdb9553b9ed6a6dea1e9a31f17f7529b45f205d6fd624204387894d",
    "summary": "",
    "exports": [
      {
        "name": "ChromaticAberrationPass",
        "kind": "class",
        "signature": "class ChromaticAberrationPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/ClearPass",
    "path": "engine/reference/render/passes/ClearPass.md",
    "source": "engine/render/passes/ClearPass.js",
    "import": "/engine/render/passes/ClearPass.js",
    "sourceHash": "da8f91ab513e5ebaa7c5217e2c5e32fc8eb35fd9c1dc8796e390349739618863",
    "summary": "",
    "exports": [
      {
        "name": "ensureColorAttachmentResource",
        "kind": "function",
        "signature": "ensureColorAttachmentResource(frameGraph, name, descriptor)",
        "summary": ""
      },
      {
        "name": "addCanvasClearPass",
        "kind": "function",
        "signature": "addCanvasClearPass(frameGraph, options = {})",
        "summary": ""
      },
      {
        "name": "ClearPass",
        "kind": "re-export",
        "signature": "ClearPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/ClothDebugController",
    "path": "engine/reference/render/passes/ClothDebugController.md",
    "source": "engine/render/passes/ClothDebugController.js",
    "import": "/engine/render/passes/ClothDebugController.js",
    "sourceHash": "7043267305dd46eeae61aa140adf69965f2a6c21658d989e05e04b3d8655623c",
    "summary": "",
    "exports": [
      {
        "name": "createClothDebugController",
        "kind": "function",
        "signature": "createClothDebugController(options = {})",
        "summary": ""
      },
      {
        "name": "ClothDebugController",
        "kind": "re-export",
        "signature": "ClothDebugController",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/ClothDebugPass",
    "path": "engine/reference/render/passes/ClothDebugPass.md",
    "source": "engine/render/passes/ClothDebugPass.js",
    "import": "/engine/render/passes/ClothDebugPass.js",
    "sourceHash": "61c278b9e7bacc033ef3bbb4994b1b42b600d6d287536e4fbb08fca30996b501",
    "summary": "",
    "exports": [
      {
        "name": "addClothDebugPass",
        "kind": "function",
        "signature": "addClothDebugPass(frameGraph, options = {})",
        "summary": ""
      },
      {
        "name": "ClothDebugPass",
        "kind": "re-export",
        "signature": "ClothDebugPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/ColorGradingPass",
    "path": "engine/reference/render/passes/ColorGradingPass.md",
    "source": "engine/render/passes/ColorGradingPass.js",
    "import": "/engine/render/passes/ColorGradingPass.js",
    "sourceHash": "30fbda12e56a0818808b266f74e7ac3bcc4c04b7d2c84aa5ce58d25764f03ebc",
    "summary": "",
    "exports": [
      {
        "name": "ColorGradingPass",
        "kind": "class",
        "signature": "class ColorGradingPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/ContactShadowsPass",
    "path": "engine/reference/render/passes/ContactShadowsPass.md",
    "source": "engine/render/passes/ContactShadowsPass.js",
    "import": "/engine/render/passes/ContactShadowsPass.js",
    "sourceHash": "7114d9f93ca4eb815592c5f0e05d1fe02c81d85aabc8844c95f6fc0bc4b44ed4",
    "summary": "",
    "exports": [
      {
        "name": "ContactShadowsPass",
        "kind": "class",
        "signature": "class ContactShadowsPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/DepthOfFieldPass",
    "path": "engine/reference/render/passes/DepthOfFieldPass.md",
    "source": "engine/render/passes/DepthOfFieldPass.js",
    "import": "/engine/render/passes/DepthOfFieldPass.js",
    "sourceHash": "f8cbe3e254df56d9bb05aa7d703bcee9597720cf687eb42826277adbe2f1459d",
    "summary": "",
    "exports": [
      {
        "name": "DepthOfFieldPass",
        "kind": "class",
        "signature": "class DepthOfFieldPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/DepthVisualizerPass",
    "path": "engine/reference/render/passes/DepthVisualizerPass.md",
    "source": "engine/render/passes/DepthVisualizerPass.js",
    "import": "/engine/render/passes/DepthVisualizerPass.js",
    "sourceHash": "dd18538bcb26873929f5233d2b6d479b245178a6597376ee1f0ebc32e1160a6f",
    "summary": "Execute depth visualizer pass",
    "exports": [
      {
        "name": "createDepthVisualizerPass",
        "kind": "function",
        "signature": "async createDepthVisualizerPass(device, outputFormat)",
        "summary": ""
      },
      {
        "name": "executeDepthVisualizerPass",
        "kind": "function",
        "signature": "executeDepthVisualizerPass(pass, visualizer, depthTexture, params = {})",
        "summary": "Execute depth visualizer pass"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/FSRPass",
    "path": "engine/reference/render/passes/FSRPass.md",
    "source": "engine/render/passes/FSRPass.js",
    "import": "/engine/render/passes/FSRPass.js",
    "sourceHash": "3ab53526f3bc4bd4e6e8390dc97a0b77103973a2c56c98d35c1701d1df1ad4b4",
    "summary": "FSRPass.js - FidelityFX Super Resolution 1.0 (Spatial Upscaler) Pure WebGPU/WGSL port of AMD's open-source FSR 1.0 algorithm. Two-pass spatial upscaler: EASU (Edge-Adaptive Spatial Upsampling) + RCAS (Sharpening). Use cases: - Fallback when temporal history is invalid (camera cuts, teleports) - Standalone spatial upscaling for non-temporal content - Combined with TSR as the spatial component Pipeline: Low-res input → EASU (directional upscale) → RCAS (adaptive sharpen) → Full-res output EASU: Analyzes local edge direction and applies a directionally-aware 12-tap filter. Detects edges via luminance gradients and stretches the filter kernel along the edge. This preserves edge sharpness while smoothing along edges (not across them). RCAS: Contrast-adaptive sharpening that avoids ringing artifacts. Computes local contrast from a cross-shaped sample pattern and applies sharpening proportional to inverse contrast (sharp where flat, gentle on edges).",
    "exports": [
      {
        "name": "FSRPass",
        "kind": "class",
        "signature": "class FSRPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/FXAAPass",
    "path": "engine/reference/render/passes/FXAAPass.md",
    "source": "engine/render/passes/FXAAPass.js",
    "import": "/engine/render/passes/FXAAPass.js",
    "sourceHash": "9f6dd69609017fd06156283221efb5b3bc07ca461c392219fa174c772f41885f",
    "summary": "",
    "exports": [
      {
        "name": "FXAAPass",
        "kind": "class",
        "signature": "class FXAAPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/FilmGrainPass",
    "path": "engine/reference/render/passes/FilmGrainPass.md",
    "source": "engine/render/passes/FilmGrainPass.js",
    "import": "/engine/render/passes/FilmGrainPass.js",
    "sourceHash": "17cddf642ff0bd5de799c3ec80e070a3bf75041b2b0ccd7d4fc64d46a713889d",
    "summary": "",
    "exports": [
      {
        "name": "FilmGrainPass",
        "kind": "class",
        "signature": "class FilmGrainPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/FluidDebugController",
    "path": "engine/reference/render/passes/FluidDebugController.md",
    "source": "engine/render/passes/FluidDebugController.js",
    "import": "/engine/render/passes/FluidDebugController.js",
    "sourceHash": "674b20d49c33ab003b9ce468117dd624543684e9370ee84efcee5021be1a2c80",
    "summary": "",
    "exports": [
      {
        "name": "createFluidDebugController",
        "kind": "function",
        "signature": "createFluidDebugController(options = {})",
        "summary": ""
      },
      {
        "name": "FluidDebugController",
        "kind": "re-export",
        "signature": "FluidDebugController",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/FluidDebugPass",
    "path": "engine/reference/render/passes/FluidDebugPass.md",
    "source": "engine/render/passes/FluidDebugPass.js",
    "import": "/engine/render/passes/FluidDebugPass.js",
    "sourceHash": "9fe1ef0e0561181556459cec6892df421c72502f35a090e9da9b06a0880a629a",
    "summary": "",
    "exports": [
      {
        "name": "addFluidDebugPass",
        "kind": "function",
        "signature": "addFluidDebugPass(frameGraph, options = {})",
        "summary": ""
      },
      {
        "name": "FluidDebugPass",
        "kind": "re-export",
        "signature": "FluidDebugPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/FluidWaterPass",
    "path": "engine/reference/render/passes/FluidWaterPass.md",
    "source": "engine/render/passes/FluidWaterPass.js",
    "import": "/engine/render/passes/FluidWaterPass.js",
    "sourceHash": "5165f7675b0d7af0cc873ecdf85d67bc2839ffa0e14262da70bf3e2feabe1ebf",
    "summary": "Create resources for the fluid water rendering pass",
    "exports": [
      {
        "name": "createFluidWaterPass",
        "kind": "function",
        "signature": "createFluidWaterPass(device, options = {})",
        "summary": "Create resources for the fluid water rendering pass"
      },
      {
        "name": "renderFluidWater",
        "kind": "function",
        "signature": "renderFluidWater(pass, encoder, options = {})",
        "summary": "Render water/metaball surfaces from particles"
      },
      {
        "name": "resizeFluidWaterPass",
        "kind": "function",
        "signature": "resizeFluidWaterPass(pass, width, height)",
        "summary": "Resize the fluid water pass textures"
      },
      {
        "name": "destroyFluidWaterPass",
        "kind": "function",
        "signature": "destroyFluidWaterPass(pass)",
        "summary": "Destroy the fluid water pass resources"
      },
      {
        "name": "FluidWaterPass",
        "kind": "re-export",
        "signature": "FluidWaterPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/GeometryPass",
    "path": "engine/reference/render/passes/GeometryPass.md",
    "source": "engine/render/passes/GeometryPass.js",
    "import": "/engine/render/passes/GeometryPass.js",
    "sourceHash": "fe839ea86c1ae54d96615ef7b7b930fef3d5f46cccce8e5db46c757f3042ed62",
    "summary": "",
    "exports": [
      {
        "name": "addMainGeometryPass",
        "kind": "function",
        "signature": "addMainGeometryPass(frameGraph, options = {})",
        "summary": ""
      },
      {
        "name": "GeometryPass",
        "kind": "re-export",
        "signature": "GeometryPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/GodRays",
    "path": "engine/reference/render/passes/GodRays.md",
    "source": "engine/render/passes/GodRays.js",
    "import": "/engine/render/passes/GodRays.js",
    "sourceHash": "92bd9cc5e57ed346537faf13a82cd2016f1f9505f82c1c8235639548bbc9790b",
    "summary": "GodRays - Volumetric light scattering effect WebGPU implementation with fixed 32-sample radial blur",
    "exports": [
      {
        "name": "GodRays",
        "kind": "class",
        "signature": "class GodRays",
        "summary": "GodRays - Volumetric light scattering effect WebGPU implementation with fixed 32-sample radial blur"
      },
      {
        "name": "GOD_RAYS_WGSL",
        "kind": "constant",
        "signature": "GOD_RAYS_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/GroundShadowPass",
    "path": "engine/reference/render/passes/GroundShadowPass.md",
    "source": "engine/render/passes/GroundShadowPass.js",
    "import": "/engine/render/passes/GroundShadowPass.js",
    "sourceHash": "35290af3e3843c8269df3623ab6440efcb28e51e35f0a9ec55f633ce3e854994",
    "summary": "GroundShadowPass.js - Analytical Blob Shadows on Ground Plane Projects entity shadow casters onto the y=0 ground plane along the sun direction and renders soft circular shadows. This is the standard technique used by mobile games (Minecraft, Animal Crossing) and many 3D editors. Advantages over screen-space ray marching: - No depth buffer artifacts (banding, streaking) - Works from any camera angle - Smooth, soft shadow edges with no aliasing - Very fast (one distance check per caster per pixel) Shadow casters are passed via a storage buffer (position + radius per entity). Output: Alpha-blended darkening composited over the scene.",
    "exports": [
      {
        "name": "GroundShadowPass",
        "kind": "class",
        "signature": "class GroundShadowPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/HDRPipeline",
    "path": "engine/reference/render/passes/HDRPipeline.md",
    "source": "engine/render/passes/HDRPipeline.js",
    "import": "/engine/render/passes/HDRPipeline.js",
    "sourceHash": "bc88b51310e741efd0b3801a480ac3c67b3893158d572060356667e0af15962f",
    "summary": "HDRPipeline - Complete HDR rendering pipeline",
    "exports": [
      {
        "name": "HDRPipeline",
        "kind": "class",
        "signature": "class HDRPipeline",
        "summary": "HDRPipeline - Complete HDR rendering pipeline"
      },
      {
        "name": "HDR_PIPELINE_WGSL",
        "kind": "constant",
        "signature": "HDR_PIPELINE_WGSL",
        "summary": ""
      },
      {
        "name": "TONEMAP_OPERATOR",
        "kind": "constant",
        "signature": "TONEMAP_OPERATOR",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/HiZPass",
    "path": "engine/reference/render/passes/HiZPass.md",
    "source": "engine/render/passes/HiZPass.js",
    "import": "/engine/render/passes/HiZPass.js",
    "sourceHash": "7ffd080be7fe5af343492a5bbe3a71d35fa4d70091100aa77b43063509baaff1",
    "summary": "",
    "exports": [
      {
        "name": "HiZPass",
        "kind": "class",
        "signature": "class HiZPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/ImageHeatHazePass",
    "path": "engine/reference/render/passes/ImageHeatHazePass.md",
    "source": "engine/render/passes/ImageHeatHazePass.js",
    "import": "/engine/render/passes/ImageHeatHazePass.js",
    "sourceHash": "b860be7c106c9550d42d3dda250b17a4ef4acf61ce17c8032031ec565f3232ba",
    "summary": "ImageHeatHazePass.js - Layered water optics for an authored mineral plate. This is the static-image counterpart to ParticleDistortionRenderer. The authored plate owns geology; this pass owns water refraction, attenuation, caustics, texture-broken god rays, heat haze, and color-aware lava emission.",
    "exports": [
      {
        "name": "ImageHeatHazePass",
        "kind": "class",
        "signature": "class ImageHeatHazePass",
        "summary": ""
      },
      {
        "name": "projectImagePointToViewport",
        "kind": "function",
        "signature": "projectImagePointToViewport(imageUV, viewportWidth = window.innerWidth, viewportHeight = window.innerHeight, imageAspect = 1.5,)",
        "summary": "Project a point in authored-image UV space into the backdrop viewport. Keep this in sync with the landing page's background-size breakpoints."
      },
      {
        "name": "startImageHeatHaze",
        "kind": "function",
        "signature": "async startImageHeatHaze(canvas, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/LensFlarePass",
    "path": "engine/reference/render/passes/LensFlarePass.md",
    "source": "engine/render/passes/LensFlarePass.js",
    "import": "/engine/render/passes/LensFlarePass.js",
    "sourceHash": "95ea2fee13682056030fdf1f8cefec96ae6c5f61b3e6c8f865cced3f2419a085",
    "summary": "",
    "exports": [
      {
        "name": "LensFlarePass",
        "kind": "class",
        "signature": "class LensFlarePass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/LightingPass",
    "path": "engine/reference/render/passes/LightingPass.md",
    "source": "engine/render/passes/LightingPass.js",
    "import": "/engine/render/passes/LightingPass.js",
    "sourceHash": "5a0746bae391d440cbf5b988cef327890d084ecc8b7037903996545e5c0bc348",
    "summary": "",
    "exports": [
      {
        "name": "addLightingPass",
        "kind": "function",
        "signature": "addLightingPass(frameGraph, options = {})",
        "summary": ""
      },
      {
        "name": "LightingPass",
        "kind": "re-export",
        "signature": "LightingPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/MotionBlurPass",
    "path": "engine/reference/render/passes/MotionBlurPass.md",
    "source": "engine/render/passes/MotionBlurPass.js",
    "import": "/engine/render/passes/MotionBlurPass.js",
    "sourceHash": "238e2eb13d42e8bd53818e67203f778e0b3ce13789e18f4a2d7da4622f5bfea3",
    "summary": "",
    "exports": [
      {
        "name": "MotionBlurPass",
        "kind": "class",
        "signature": "class MotionBlurPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/OutlinePass",
    "path": "engine/reference/render/passes/OutlinePass.md",
    "source": "engine/render/passes/OutlinePass.js",
    "import": "/engine/render/passes/OutlinePass.js",
    "sourceHash": "e7038e8e729d7c198f7e1fcdd329a3e00b7f037f67a20d525f78725f5149aa95",
    "summary": "",
    "exports": [
      {
        "name": "OutlinePass",
        "kind": "class",
        "signature": "class OutlinePass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/PaniniProjectionPass",
    "path": "engine/reference/render/passes/PaniniProjectionPass.md",
    "source": "engine/render/passes/PaniniProjectionPass.js",
    "import": "/engine/render/passes/PaniniProjectionPass.js",
    "sourceHash": "1776bbec07c7a30210e2252b0b113ae240646efdb251d7049ff81fa8226a0b6a",
    "summary": "PaniniProjectionPass.js - Wide FOV Distortion Correction Now powered by vGPU driver Reduces the \"fish-eye\" distortion that occurs with wide field of view. Based on the Panini projection which maps perspective to a cylinder. Parameters: - strength: How much correction to apply (0 = none, 1 = full panini) - fov: Current field of view in degrees - cropToFit: Scale to avoid black edges (0 = no crop, 1 = full crop)",
    "exports": [
      {
        "name": "PaniniProjectionPass",
        "kind": "class",
        "signature": "class PaniniProjectionPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/ParticlePass",
    "path": "engine/reference/render/passes/ParticlePass.md",
    "source": "engine/render/passes/ParticlePass.js",
    "import": "/engine/render/passes/ParticlePass.js",
    "sourceHash": "1fc79eabf581da2aa7276d4d67782f8c4aa9b11ce2f03aa77dc058116076a5e5",
    "summary": "",
    "exports": [
      {
        "name": "addParticleBillboardPass",
        "kind": "function",
        "signature": "addParticleBillboardPass(frameGraph, options = {})",
        "summary": ""
      },
      {
        "name": "ParticlePass",
        "kind": "re-export",
        "signature": "ParticlePass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/PathTracingPass",
    "path": "engine/reference/render/passes/PathTracingPass.md",
    "source": "engine/render/passes/PathTracingPass.js",
    "import": "/engine/render/passes/PathTracingPass.js",
    "sourceHash": "8148a15ebabfc1cabef8d28f65b94cfaa6c62062aa824115afb55548f61e8be2",
    "summary": "",
    "exports": [
      {
        "name": "PathTracingPass",
        "kind": "class",
        "signature": "class PathTracingPass",
        "summary": ""
      },
      {
        "name": "PATH_TRACING_PCG_HASH_WGSL",
        "kind": "constant",
        "signature": "PATH_TRACING_PCG_HASH_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/PostProcessChainPass",
    "path": "engine/reference/render/passes/PostProcessChainPass.md",
    "source": "engine/render/passes/PostProcessChainPass.js",
    "import": "/engine/render/passes/PostProcessChainPass.js",
    "sourceHash": "afb758cb7abaaf5da143d4dd7d213bb2ce1d09e264c41571f67fd9805f30110d",
    "summary": "",
    "exports": [
      {
        "name": "addPostProcessChainPass",
        "kind": "function",
        "signature": "addPostProcessChainPass(frameGraph, options = {})",
        "summary": ""
      },
      {
        "name": "PostProcessChainPass",
        "kind": "re-export",
        "signature": "PostProcessChainPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/PostProcessController",
    "path": "engine/reference/render/passes/PostProcessController.md",
    "source": "engine/render/passes/PostProcessController.js",
    "import": "/engine/render/passes/PostProcessController.js",
    "sourceHash": "b670a877fa3999aad848efcc2b4a425f30e6ef3fb76ca0b79488b653697c35ac",
    "summary": "",
    "exports": [
      {
        "name": "createPostProcessController",
        "kind": "function",
        "signature": "createPostProcessController(options = {})",
        "summary": ""
      },
      {
        "name": "PostProcessController",
        "kind": "re-export",
        "signature": "PostProcessController",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/PurkinjeEffectPass",
    "path": "engine/reference/render/passes/PurkinjeEffectPass.md",
    "source": "engine/render/passes/PurkinjeEffectPass.js",
    "import": "/engine/render/passes/PurkinjeEffectPass.js",
    "sourceHash": "5e1c119ed321bb0fe2e2719136c4ff16a040fd87f9182379e1051d67541456e4",
    "summary": "",
    "exports": [
      {
        "name": "PurkinjeEffectPass",
        "kind": "class",
        "signature": "class PurkinjeEffectPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/ReSTIRGIPass",
    "path": "engine/reference/render/passes/ReSTIRGIPass.md",
    "source": "engine/render/passes/ReSTIRGIPass.js",
    "import": "/engine/render/passes/ReSTIRGIPass.js",
    "sourceHash": "c2b431cd5ff98282f3e0d1c5f1e5fb8283d89f7ae9757bf9e78a4fb65c60cf49",
    "summary": "",
    "exports": [
      {
        "name": "ReSTIRGIPass",
        "kind": "class",
        "signature": "class ReSTIRGIPass",
        "summary": ""
      },
      {
        "name": "RESTIR_TEMPORAL_PCG_HASH_WGSL",
        "kind": "constant",
        "signature": "RESTIR_TEMPORAL_PCG_HASH_WGSL",
        "summary": ""
      },
      {
        "name": "RESTIR_SPATIAL_PCG_HASH_WGSL",
        "kind": "constant",
        "signature": "RESTIR_SPATIAL_PCG_HASH_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/ReconstructionProvider",
    "path": "engine/reference/render/passes/ReconstructionProvider.md",
    "source": "engine/render/passes/ReconstructionProvider.js",
    "import": "/engine/render/passes/ReconstructionProvider.js",
    "sourceHash": "23141cb45df43984f6f6c0437a75d886626f5075a8b3d22d2004a60ac8f56aa8",
    "summary": "ReconstructionProvider.js - Unified Upscaling & Reconstruction Interface Abstracts over multiple reconstruction backends: - TSR (Temporal Super-Resolution) - best quality, uses temporal history - FSR (FidelityFX Super Resolution) - spatial only, fallback for camera cuts - SVGF (Denoiser) - for path-traced/GI content - Native TAA - no upscaling, just anti-aliasing - None - passthrough Future-proofed for: - WebNN neural upscaling (when browser API matures) - Custom ML models via WebGPU compute Usage: const provider = new ReconstructionProvider(device); await provider.init(displayWidth, displayHeight); provider.setMode('tsr', TSRQuality.QUALITY); // In render loop: const { width, height } = provider.getRenderSize(); const jitteredProj = provider.applyJitter(projMatrix); // ... render scene at width×height ... provider.execute(encoder, colorTex, depthTex, motionTex, outputTex);",
    "exports": [
      {
        "name": "ReconstructionProvider",
        "kind": "class",
        "signature": "class ReconstructionProvider",
        "summary": ""
      },
      {
        "name": "ReconstructionMode",
        "kind": "constant",
        "signature": "ReconstructionMode",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/RenderPassManager",
    "path": "engine/reference/render/passes/RenderPassManager.md",
    "source": "engine/render/passes/RenderPassManager.js",
    "import": "/engine/render/passes/RenderPassManager.js",
    "sourceHash": "da251f09012e1d696aef884a4048a502bc91625ff71d419ffbda38e5ba8df90a",
    "summary": "Render Pass Manager Manages multi-pass rendering pipeline with pass selection and visualization. Handles render target allocation, pass execution, and debug visualization.",
    "exports": [
      {
        "name": "RenderPassManager",
        "kind": "class",
        "signature": "class RenderPassManager",
        "summary": "Render Pass Manager Manages multi-pass rendering pipeline with pass selection and visualization. Handles render target allocation, pass execution, and debug visualization."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/SSAOPass",
    "path": "engine/reference/render/passes/SSAOPass.md",
    "source": "engine/render/passes/SSAOPass.js",
    "import": "/engine/render/passes/SSAOPass.js",
    "sourceHash": "6f095a49e114b50c3740944411b604eb118484a04c7e126dc98f2a2ce599e922",
    "summary": "SSAO Pass Manager",
    "exports": [
      {
        "name": "SSAOPass",
        "kind": "class",
        "signature": "class SSAOPass",
        "summary": "SSAO Pass Manager"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/SSGIPass",
    "path": "engine/reference/render/passes/SSGIPass.md",
    "source": "engine/render/passes/SSGIPass.js",
    "import": "/engine/render/passes/SSGIPass.js",
    "sourceHash": "84f8132c932cca11020b0bb7a5fcdff456aff1d419c22b547b7a9c071cc3ceb8",
    "summary": "",
    "exports": [
      {
        "name": "SSGIPass",
        "kind": "class",
        "signature": "class SSGIPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/SSRPass",
    "path": "engine/reference/render/passes/SSRPass.md",
    "source": "engine/render/passes/SSRPass.js",
    "import": "/engine/render/passes/SSRPass.js",
    "sourceHash": "dc27c00ade96f1ba4107d59bad34785818ddd94e06ff40a59af8f98620d8d396",
    "summary": "SSRPass - Screen-Space Reflections render pass",
    "exports": [
      {
        "name": "SSRPass",
        "kind": "class",
        "signature": "class SSRPass",
        "summary": "SSRPass - Screen-Space Reflections render pass"
      },
      {
        "name": "SSR_JITTER_PCG_HASH_WGSL",
        "kind": "constant",
        "signature": "SSR_JITTER_PCG_HASH_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/SVGFDenoise",
    "path": "engine/reference/render/passes/SVGFDenoise.md",
    "source": "engine/render/passes/SVGFDenoise.js",
    "import": "/engine/render/passes/SVGFDenoise.js",
    "sourceHash": "1dc61bfe63e917256e2c4541642d9676c50298384d4ab765d0318174a5545ba8",
    "summary": "SVGFDenoise.js - Spatiotemporal Variance-Guided Filtering Full SVGF denoising pipeline for compute-based path tracing / GI. Converts noisy 1-spp (or low-spp) input into clean output. Based on: - \"Spatiotemporal Variance-Guided Filtering\" (Schied et al., HPG 2017) - NVIDIA SVGF implementation techniques - À-Trous wavelet decomposition with edge-stopping functions Pipeline (per frame): 1. Temporal Accumulation: Reproject history, blend with current, track variance 2. Variance Estimation: Compute spatial variance from accumulated moments 3. À-Trous Wavelet Filter: 1-5 iterations of edge-preserving spatial blur - Edge-stopping by normal, depth, luminance, and variance - Increasing step size each iteration (1, 2, 4, 8, 16) - Firefly suppression via luminance clamping Inputs Required: - Noisy color (1-spp path trace output) - World-space normals - Linear depth - Motion vectors Outputs: - Denoised color (rgba16float) - Accumulated variance (for adaptive sampling feedback)",
    "exports": [
      {
        "name": "SVGFDenoise",
        "kind": "class",
        "signature": "class SVGFDenoise",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/SceneDebugVisualizerPass",
    "path": "engine/reference/render/passes/SceneDebugVisualizerPass.md",
    "source": "engine/render/passes/SceneDebugVisualizerPass.js",
    "import": "/engine/render/passes/SceneDebugVisualizerPass.js",
    "sourceHash": "193e24d26f750c8a5757d1eab192c48b6f0d73aadd568c5932088d04747b5081",
    "summary": "Scene Debug Visualizer Pass Fullscreen post-process that reads the ACTUAL scene depth buffer (depth24plus) and renders industry-standard debug visualizations: - Depth: linearized grayscale (near=white, far=black) - Normals: world-space normals reconstructed from depth (RGB = XYZ) Unlike the particle-only debug renderers, this shows the FULL scene (entity meshes + particles + everything that wrote to the depth buffer).",
    "exports": [
      {
        "name": "createSceneDebugVisualizerPass",
        "kind": "function",
        "signature": "async createSceneDebugVisualizerPass(device, outputFormat)",
        "summary": "Create the scene debug visualizer pass"
      },
      {
        "name": "executeSceneDebugVisualizerPass",
        "kind": "function",
        "signature": "executeSceneDebugVisualizerPass(encoder, outputView, depthView, visualizer, opts)",
        "summary": "Execute the scene debug visualizer pass"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/ShadowAtlas",
    "path": "engine/reference/render/passes/ShadowAtlas.md",
    "source": "engine/render/passes/ShadowAtlas.js",
    "import": "/engine/render/passes/ShadowAtlas.js",
    "sourceHash": "5ff6c5d7fa6708d733035958d8daa25658f86b17944ec435936c7a96e9aae9e1",
    "summary": "ShadowAtlas.js - Unified Shadow Depth Atlas Single shared depth texture that ALL shadow casters render into. Inspired by Wicked Engine's shadow atlas architecture (2024): - One depth texture, one clear, one uninterrupted render pass - All geometry types (voxels, entities, particles, ropes) write sequentially - All fragment shaders sample from the same atlas - Comparison sampler for hardware PCF Replaces the separate shadow systems: - VoxelRenderer.shadowMapTexture  → ShadowAtlas.texture - ShadowMapPass.shadowTexture     → ShadowAtlas.texture Usage: const atlas = createShadowAtlas(device, { size: 2048 }); atlas.beginFrame(); atlas.addCaster(x, y, z, radius);  // for frustum fitting const lightVP = atlas.computeLightMatrix(sunDir); atlas.renderDepth(encoder, casters);  // all casters in one pass atlas.composite(encoder, ...);        // fullscreen darken Caster interface: { flush(pass: GPURenderPassEncoder, lightViewProj: Float32Array): void }",
    "exports": [
      {
        "name": "createShadowAtlas",
        "kind": "function",
        "signature": "createShadowAtlas(device, options = {})",
        "summary": ""
      },
      {
        "name": "beginFrame",
        "kind": "function",
        "signature": "beginFrame(atlas)",
        "summary": ""
      },
      {
        "name": "addCaster",
        "kind": "function",
        "signature": "addCaster(atlas, x, y, z, radius)",
        "summary": ""
      },
      {
        "name": "computeLightMatrix",
        "kind": "function",
        "signature": "computeLightMatrix(atlas, sunDir, cameraPos)",
        "summary": ""
      },
      {
        "name": "registerAtlasCaster",
        "kind": "function",
        "signature": "registerAtlasCaster(atlas, caster)",
        "summary": ""
      },
      {
        "name": "unregisterAtlasCaster",
        "kind": "function",
        "signature": "unregisterAtlasCaster(atlas, caster)",
        "summary": ""
      },
      {
        "name": "addCategoryCaster",
        "kind": "function",
        "signature": "addCategoryCaster(atlas, categoryName, caster)",
        "summary": ""
      },
      {
        "name": "renderAndCompositeAll",
        "kind": "function",
        "signature": "renderAndCompositeAll(atlas, encoder, outputView, sceneDepthTexture, invViewProj, screenW, screenH, cameraPos)",
        "summary": ""
      },
      {
        "name": "renderDepth",
        "kind": "function",
        "signature": "renderDepth(atlas, encoder, extraCasters)",
        "summary": ""
      },
      {
        "name": "composite",
        "kind": "function",
        "signature": "composite(atlas, encoder, outputView, sceneDepthTexture, invViewProj, screenW, screenH, cameraPos)",
        "summary": ""
      },
      {
        "name": "destroyShadowAtlas",
        "kind": "function",
        "signature": "destroyShadowAtlas(atlas)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/ShadowMapPass",
    "path": "engine/reference/render/passes/ShadowMapPass.md",
    "source": "engine/render/passes/ShadowMapPass.js",
    "import": "/engine/render/passes/ShadowMapPass.js",
    "sourceHash": "7812c79e7c993d2f3b0eceafad716ccab8f229c79ada70be65b6db8cce93c991",
    "summary": "ShadowMapPass.js - Real Geometry Shadow Maps Renders entity depth from the sun's perspective into a shadow map texture, then composites geometry-accurate shadows onto the scene as a fullscreen pass. Architecture: 1. Shadow depth pass: EntityMeshRenderer.flushShadowDepth() draws all instanced entities into a depth32float texture from the light's orthographic projection. This runs AFTER the main flush() so the GPU instance buffer already contains this frame's data. 2. Composite pass: A fullscreen triangle reads the scene depth buffer, reconstructs world positions, projects them into light space, and samples the shadow map with PCF 3×3 filtering. Output is alpha-blended darkening. The light matrix is computed per-frame from the sun direction and a bounding sphere that encompasses all shadow casters (not the camera frustum), so off-screen entities still cast shadows into the visible area.",
    "exports": [
      {
        "name": "ShadowMapPass",
        "kind": "class",
        "signature": "class ShadowMapPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/ShadowPass",
    "path": "engine/reference/render/passes/ShadowPass.md",
    "source": "engine/render/passes/ShadowPass.js",
    "import": "/engine/render/passes/ShadowPass.js",
    "sourceHash": "79d94087be4cc83121e59c83c6024c4b9f806c72b9b1f43f89e95ae4e3f3e1b5",
    "summary": "",
    "exports": [
      {
        "name": "addDirectionalShadowPass",
        "kind": "function",
        "signature": "addDirectionalShadowPass(frameGraph, options = {})",
        "summary": ""
      },
      {
        "name": "ShadowPass",
        "kind": "re-export",
        "signature": "ShadowPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/SharpeningPass",
    "path": "engine/reference/render/passes/SharpeningPass.md",
    "source": "engine/render/passes/SharpeningPass.js",
    "import": "/engine/render/passes/SharpeningPass.js",
    "sourceHash": "3a25793c1714b9a578dc2bdd2adfdbebf9469028409eec0a20af40921d703813",
    "summary": "",
    "exports": [
      {
        "name": "SharpeningPass",
        "kind": "class",
        "signature": "class SharpeningPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/SpellEffectPass",
    "path": "engine/reference/render/passes/SpellEffectPass.md",
    "source": "engine/render/passes/SpellEffectPass.js",
    "import": "/engine/render/passes/SpellEffectPass.js",
    "sourceHash": "68b7ee06650e5679da3d6d5385dc13dac901a6d58f0cae7b92d2bdba5d232b73",
    "summary": "Create the spell effect rendering pass",
    "exports": [
      {
        "name": "createSpellEffectPass",
        "kind": "function",
        "signature": "createSpellEffectPass(device, options = {})",
        "summary": "Create the spell effect rendering pass"
      },
      {
        "name": "renderSpellEffects",
        "kind": "function",
        "signature": "renderSpellEffects(pass, encoder, targetView, options = {})",
        "summary": "Render active spell effects"
      },
      {
        "name": "spellElementToEffectType",
        "kind": "function",
        "signature": "spellElementToEffectType(element)",
        "summary": "Map spell element to effect type"
      },
      {
        "name": "spellConfigToInstance",
        "kind": "function",
        "signature": "spellConfigToInstance(spellConfig, position, time, phase = 0.5)",
        "summary": "Convert a spell config to a renderable spell instance"
      },
      {
        "name": "EFFECT_TYPES",
        "kind": "constant",
        "signature": "EFFECT_TYPES",
        "summary": ""
      },
      {
        "name": "SPELL_TYPES",
        "kind": "constant",
        "signature": "SPELL_TYPES",
        "summary": ""
      },
      {
        "name": "SpellEffectPass",
        "kind": "re-export",
        "signature": "SpellEffectPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/TAAPass",
    "path": "engine/reference/render/passes/TAAPass.md",
    "source": "engine/render/passes/TAAPass.js",
    "import": "/engine/render/passes/TAAPass.js",
    "sourceHash": "1bc47ddb20577cc83ee4d132465c9b404596e8664eedd400434960c6c841f295",
    "summary": "TAAPass - Temporal Anti-Aliasing render pass",
    "exports": [
      {
        "name": "TAAPass",
        "kind": "class",
        "signature": "class TAAPass",
        "summary": "TAAPass - Temporal Anti-Aliasing render pass"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/TemporalSuperResolution",
    "path": "engine/reference/render/passes/TemporalSuperResolution.md",
    "source": "engine/render/passes/TemporalSuperResolution.js",
    "import": "/engine/render/passes/TemporalSuperResolution.js",
    "sourceHash": "248dd0deb0dc727f9ff8642871b4122166966f3cc3514ae2bd981ce23be4a607",
    "summary": "TemporalSuperResolution.js - Temporal Upscaling System Renders at reduced internal resolution and reconstructs full-res output using temporal reprojection, motion vectors, and edge-aware upsampling. Inspired by Unreal Engine TSR, AMD FSR 2, and Intel XeSS. Pure WebGPU/WGSL compute implementation. Pipeline: Render at renderScale (e.g. 50-75%) resolution ↓ Dilate motion vectors (fill gaps from thin geometry) ↓ Reproject history to current frame ↓ Neighborhood clamp in YCoCg (anti-ghosting) ↓ Compute per-pixel confidence (depth, motion, disocclusion) ↓ Adaptive blend current + history ↓ Lanczos-weighted upscale to output resolution ↓ RCAS sharpening pass ↓ Full-resolution output Quality Modes: Ultra Performance: 33% (3x upscale) Performance:       50% (2x upscale) Balanced:          58% (~1.7x upscale) Quality:           67% (1.5x upscale) Ultra Quality:     77% (1.3x upscale) Native AA:        100% (TAA replacement, no upscale)",
    "exports": [
      {
        "name": "TemporalSuperResolution",
        "kind": "class",
        "signature": "class TemporalSuperResolution",
        "summary": ""
      },
      {
        "name": "TSRQuality",
        "kind": "constant",
        "signature": "TSRQuality",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/TonemapPass",
    "path": "engine/reference/render/passes/TonemapPass.md",
    "source": "engine/render/passes/TonemapPass.js",
    "import": "/engine/render/passes/TonemapPass.js",
    "sourceHash": "a25f9d9baafc74e85bf55705e18348cc8a43a24b29a9b6f303a4e57ad359c8ba",
    "summary": "TonemapPass.js - Final Post-Processing Pass Applied as the very last pass after bloom. Provides: 1. ACES filmic tonemapping (HDR → LDR, matches playground SDF demo) 2. Vignette (darkened edges for cinematic look) 3. Distance fog (blend toward sky color at far range) Uses a single fullscreen triangle — no vertex buffer, no index buffer.",
    "exports": [
      {
        "name": "TonemapPass",
        "kind": "class",
        "signature": "class TonemapPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/UIHudPass",
    "path": "engine/reference/render/passes/UIHudPass.md",
    "source": "engine/render/passes/UIHudPass.js",
    "import": "/engine/render/passes/UIHudPass.js",
    "sourceHash": "51c08dccdf4ae28480ca432cb31e029f48fb132921a457f723f870da30944ecb",
    "summary": "",
    "exports": [
      {
        "name": "addUIHudPass",
        "kind": "function",
        "signature": "addUIHudPass(frameGraph, options = {})",
        "summary": ""
      },
      {
        "name": "UIHudPass",
        "kind": "re-export",
        "signature": "UIHudPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/UnderwaterPass",
    "path": "engine/reference/render/passes/UnderwaterPass.md",
    "source": "engine/render/passes/UnderwaterPass.js",
    "import": "/engine/render/passes/UnderwaterPass.js",
    "sourceHash": "61cda61d1826fc1c37d43fc7ef7ba620e737c60ccc31c99a855d6287e4f608f2",
    "summary": "",
    "exports": [
      {
        "name": "UnderwaterPass",
        "kind": "class",
        "signature": "class UnderwaterPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/UnderwaterSiltField",
    "path": "engine/reference/render/passes/UnderwaterSiltField.md",
    "source": "engine/render/passes/UnderwaterSiltField.js",
    "import": "/engine/render/passes/UnderwaterSiltField.js",
    "sourceHash": "774631eb5c176fea264e3c8fd6b469c2f8bb6fabdb432d4a556b9d205bf13c02",
    "summary": "UnderwaterSiltField.js - Lightweight interactive particulate atmosphere. A capped Canvas2D pass draws shallow caustic traces, depth-layered volcanic ash/mineral flecks, and upper-left refracted light shafts. Particles follow a slow analytic flow field and receive a local tangential impulse when the pointer disturbs the water. The module has no runtime dependencies so release pages can ship it beside the standalone authored-image backdrop pass.",
    "exports": [
      {
        "name": "UnderwaterSiltField",
        "kind": "class",
        "signature": "class UnderwaterSiltField",
        "summary": ""
      },
      {
        "name": "startUnderwaterSiltField",
        "kind": "function",
        "signature": "startUnderwaterSiltField(canvas, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/VignettePass",
    "path": "engine/reference/render/passes/VignettePass.md",
    "source": "engine/render/passes/VignettePass.js",
    "import": "/engine/render/passes/VignettePass.js",
    "sourceHash": "7db26d586c766cd46b4d540698a6dc80929cf6584a51fb0bcb5962a131188739",
    "summary": "",
    "exports": [
      {
        "name": "VignettePass",
        "kind": "class",
        "signature": "class VignettePass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/VolumetricCloudsPass",
    "path": "engine/reference/render/passes/VolumetricCloudsPass.md",
    "source": "engine/render/passes/VolumetricCloudsPass.js",
    "import": "/engine/render/passes/VolumetricCloudsPass.js",
    "sourceHash": "4a36a08a7bf799679f856f352d4fb45afea400335a2b45bf32566150bd6fb39f",
    "summary": "VolumetricCloudsPass.js - 3D Volumetric Clouds Now powered by vGPU driver Renders realistic volumetric clouds using ray marching through 3D noise-based density fields. Includes lighting and shadowing. Algorithm: 1. Ray march from camera through cloud layer 2. Sample 3D noise for cloud density 3. Accumulate light scattering and extinction 4. Apply shadow from sun direction Parameters: - coverage: Cloud coverage (0-1) - altitude: Cloud layer altitude in meters - thickness: Cloud layer thickness - density: Cloud density multiplier",
    "exports": [
      {
        "name": "VolumetricCloudsPass",
        "kind": "class",
        "signature": "class VolumetricCloudsPass",
        "summary": ""
      },
      {
        "name": "VOLUMETRIC_CLOUDS_JITTER_PCG_HASH_WGSL",
        "kind": "constant",
        "signature": "VOLUMETRIC_CLOUDS_JITTER_PCG_HASH_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/index",
    "path": "engine/reference/render/passes/index.md",
    "source": "engine/render/passes/index.js",
    "import": "/engine/render/passes/index.js",
    "sourceHash": "a2da5c4e699d16ccebf4a4bd8ce81267cfd0ff897d19d12f0d1fc2e1cc9a6530",
    "summary": "",
    "exports": [
      {
        "name": "AreaResamplePass",
        "kind": "re-export",
        "signature": "AreaResamplePass",
        "summary": ""
      },
      {
        "name": "AutoExposurePass",
        "kind": "re-export",
        "signature": "AutoExposurePass",
        "summary": ""
      },
      {
        "name": "BloomPass",
        "kind": "re-export",
        "signature": "BloomPass",
        "summary": ""
      },
      {
        "name": "CascadeMetrics",
        "kind": "re-export",
        "signature": "CascadeMetrics",
        "summary": ""
      },
      {
        "name": "CascadedShadowMap",
        "kind": "re-export",
        "signature": "CascadedShadowMap",
        "summary": ""
      },
      {
        "name": "CascadedShadowMapper",
        "kind": "re-export",
        "signature": "CascadedShadowMapper",
        "summary": ""
      },
      {
        "name": "ChromaticAberrationPass",
        "kind": "re-export",
        "signature": "ChromaticAberrationPass",
        "summary": ""
      },
      {
        "name": "ClearPass",
        "kind": "re-export",
        "signature": "ClearPass",
        "summary": ""
      },
      {
        "name": "ClothDebugController",
        "kind": "re-export",
        "signature": "ClothDebugController",
        "summary": ""
      },
      {
        "name": "ClothDebugPass",
        "kind": "re-export",
        "signature": "ClothDebugPass",
        "summary": ""
      },
      {
        "name": "ColorGradingPass",
        "kind": "re-export",
        "signature": "ColorGradingPass",
        "summary": ""
      },
      {
        "name": "ContactShadowsPass",
        "kind": "re-export",
        "signature": "ContactShadowsPass",
        "summary": ""
      },
      {
        "name": "DepthOfFieldPass",
        "kind": "re-export",
        "signature": "DepthOfFieldPass",
        "summary": ""
      },
      {
        "name": "FSRPass",
        "kind": "re-export",
        "signature": "FSRPass",
        "summary": ""
      },
      {
        "name": "FXAAPass",
        "kind": "re-export",
        "signature": "FXAAPass",
        "summary": ""
      },
      {
        "name": "FilmGrainPass",
        "kind": "re-export",
        "signature": "FilmGrainPass",
        "summary": ""
      },
      {
        "name": "FluidDebugController",
        "kind": "re-export",
        "signature": "FluidDebugController",
        "summary": ""
      },
      {
        "name": "FluidDebugPass",
        "kind": "re-export",
        "signature": "FluidDebugPass",
        "summary": ""
      },
      {
        "name": "FluidWaterPass",
        "kind": "re-export",
        "signature": "FluidWaterPass",
        "summary": ""
      },
      {
        "name": "GOD_RAYS_WGSL",
        "kind": "re-export",
        "signature": "GOD_RAYS_WGSL",
        "summary": ""
      },
      {
        "name": "GeometryPass",
        "kind": "re-export",
        "signature": "GeometryPass",
        "summary": ""
      },
      {
        "name": "GodRays",
        "kind": "re-export",
        "signature": "GodRays",
        "summary": ""
      },
      {
        "name": "HDRPipeline",
        "kind": "re-export",
        "signature": "HDRPipeline",
        "summary": ""
      },
      {
        "name": "HDR_PIPELINE_WGSL",
        "kind": "re-export",
        "signature": "HDR_PIPELINE_WGSL",
        "summary": ""
      },
      {
        "name": "HiZPass",
        "kind": "re-export",
        "signature": "HiZPass",
        "summary": ""
      },
      {
        "name": "LensFlarePass",
        "kind": "re-export",
        "signature": "LensFlarePass",
        "summary": ""
      },
      {
        "name": "LightingPass",
        "kind": "re-export",
        "signature": "LightingPass",
        "summary": ""
      },
      {
        "name": "MotionBlurPass",
        "kind": "re-export",
        "signature": "MotionBlurPass",
        "summary": ""
      },
      {
        "name": "OutlinePass",
        "kind": "re-export",
        "signature": "OutlinePass",
        "summary": ""
      },
      {
        "name": "PaniniProjectionPass",
        "kind": "re-export",
        "signature": "PaniniProjectionPass",
        "summary": ""
      },
      {
        "name": "ParticlePass",
        "kind": "re-export",
        "signature": "ParticlePass",
        "summary": ""
      },
      {
        "name": "PathTracingPass",
        "kind": "re-export",
        "signature": "PathTracingPass",
        "summary": ""
      },
      {
        "name": "PostProcessChainPass",
        "kind": "re-export",
        "signature": "PostProcessChainPass",
        "summary": ""
      },
      {
        "name": "PostProcessController",
        "kind": "re-export",
        "signature": "PostProcessController",
        "summary": ""
      },
      {
        "name": "PurkinjeEffectPass",
        "kind": "re-export",
        "signature": "PurkinjeEffectPass",
        "summary": ""
      },
      {
        "name": "ReSTIRGIPass",
        "kind": "re-export",
        "signature": "ReSTIRGIPass",
        "summary": ""
      },
      {
        "name": "ReconstructionMode",
        "kind": "re-export",
        "signature": "ReconstructionMode",
        "summary": ""
      },
      {
        "name": "ReconstructionProvider",
        "kind": "re-export",
        "signature": "ReconstructionProvider",
        "summary": ""
      },
      {
        "name": "SSAOPass",
        "kind": "re-export",
        "signature": "SSAOPass",
        "summary": ""
      },
      {
        "name": "SSGIPass",
        "kind": "re-export",
        "signature": "SSGIPass",
        "summary": ""
      },
      {
        "name": "SSRPass",
        "kind": "re-export",
        "signature": "SSRPass",
        "summary": ""
      },
      {
        "name": "SVGFDenoise",
        "kind": "re-export",
        "signature": "SVGFDenoise",
        "summary": ""
      },
      {
        "name": "ShadowPass",
        "kind": "re-export",
        "signature": "ShadowPass",
        "summary": ""
      },
      {
        "name": "SharpeningPass",
        "kind": "re-export",
        "signature": "SharpeningPass",
        "summary": ""
      },
      {
        "name": "SpellEffectPass",
        "kind": "re-export",
        "signature": "SpellEffectPass",
        "summary": ""
      },
      {
        "name": "TAAPass",
        "kind": "re-export",
        "signature": "TAAPass",
        "summary": ""
      },
      {
        "name": "TONEMAP_OPERATOR",
        "kind": "re-export",
        "signature": "TONEMAP_OPERATOR",
        "summary": ""
      },
      {
        "name": "TSRQuality",
        "kind": "re-export",
        "signature": "TSRQuality",
        "summary": ""
      },
      {
        "name": "TemporalSuperResolution",
        "kind": "re-export",
        "signature": "TemporalSuperResolution",
        "summary": ""
      },
      {
        "name": "UIHudPass",
        "kind": "re-export",
        "signature": "UIHudPass",
        "summary": ""
      },
      {
        "name": "UnderwaterPass",
        "kind": "re-export",
        "signature": "UnderwaterPass",
        "summary": ""
      },
      {
        "name": "VignettePass",
        "kind": "re-export",
        "signature": "VignettePass",
        "summary": ""
      },
      {
        "name": "VolumetricCloudsPass",
        "kind": "re-export",
        "signature": "VolumetricCloudsPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/passes/spellpacks/index",
    "path": "engine/reference/render/passes/spellpacks/index.md",
    "source": "engine/render/passes/spellpacks/index.js",
    "import": "/engine/render/passes/spellpacks/index.js",
    "sourceHash": "acede6b21fbdf71d5dad06484e60e585768d44830ee80440e9b867fc1836a18a",
    "summary": "spellpacks/index.js — placeholder for GPU spell effect manifests. The original data lived in an external sibling tree; this local stub lets SpellEffectPass compile until the spellpack manifest pipeline is merged.",
    "exports": [
      {
        "name": "collectGpuShaders",
        "kind": "function",
        "signature": "collectGpuShaders()",
        "summary": "spellpacks/index.js — placeholder for GPU spell effect manifests. The original data lived in an external sibling tree; this local stub lets SpellEffectPass compile until the spellpack manifest pipeline is merged."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/postprocess/TemporalAA",
    "path": "engine/reference/render/postprocess/TemporalAA.md",
    "source": "engine/render/postprocess/TemporalAA.js",
    "import": "/engine/render/postprocess/TemporalAA.js",
    "sourceHash": "6d70a31f104a34278d390bd5d8548307f6cdc2f4a1d7c29d13c79f2c0f6f3bea",
    "summary": "",
    "exports": [
      {
        "name": "TemporalAA",
        "kind": "class",
        "signature": "class TemporalAA",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/proxy/ProxyBillboardAlign",
    "path": "engine/reference/render/proxy/ProxyBillboardAlign.md",
    "source": "engine/render/proxy/ProxyBillboardAlign.js",
    "import": "/engine/render/proxy/ProxyBillboardAlign.js",
    "sourceHash": "29f9d80c08076d2c3dc3d598013b82f10a6844180218642b0dd71508a2f61717",
    "summary": "ProxyBillboardAlign — GPU Compute Pass for Billboard Instance Rotation Aligns BILLBOARD-mode proxy instances to face the camera each frame. Equivalent to Blender's \"Track To\" constraint + \"Align Euler to Vector\" in Geometry Nodes. Input:  instance buffer (read-write) containing worldMat per instance Output: updated rotation portion of worldMat in-place Only processes instances where proxyMode == PROXY_MODE_BILLBOARD (1u). BOX proxies are skipped (their orientation is set by the developer).",
    "exports": [
      {
        "name": "ProxyBillboardAlign",
        "kind": "class",
        "signature": "class ProxyBillboardAlign",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/proxy/ProxyGBufferPass",
    "path": "engine/reference/render/proxy/ProxyGBufferPass.md",
    "source": "engine/render/proxy/ProxyGBufferPass.js",
    "import": "/engine/render/proxy/ProxyGBufferPass.js",
    "sourceHash": "939630271c0627a8a3f11bc71625d161690685f671c93499cecd5d44195f3b5b",
    "summary": "ProxyGBufferPass — Rasterize Proxy AABB Cubes into the GBuffer ID Texture Renders invisible proxy bounding boxes (one per instance) to stamp a 1-indexed proxy instance ID into a r32uint GBuffer attachment. The depth buffer ensures correct occlusion against scene geometry. The r32uint texture is then read by ProxyMaskPass, which fires per-pixel rays only for pixels where instanceId > 0. Pipeline: Proxy cube geometry (GPU instanced) → vertex: transform by instance worldMat → fragment: write flat instanceId to r32uint attachment → depth: standard scene depth (proxy boxes occluded correctly) The proxy cubes are invisible in the color attachment — they only tag the ID texture. ProxyShadePass writes final color to the HDR buffer.",
    "exports": [
      {
        "name": "ProxyGBufferPass",
        "kind": "class",
        "signature": "class ProxyGBufferPass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/proxy/ProxyGeometrySystem",
    "path": "engine/reference/render/proxy/ProxyGeometrySystem.md",
    "source": "engine/render/proxy/ProxyGeometrySystem.js",
    "import": "/engine/render/proxy/ProxyGeometrySystem.js",
    "sourceHash": "ab1d751c033070314a39286f82e3e5e7c9ed27f8ed70fe5691e130599e73672d",
    "summary": "ProxyGeometrySystem — Main Orchestrator Decouples visual complexity from geometric complexity using the Ray Portal proxy technique adapted from Blender Cycles + 8 researched engine approaches. Architecture: 1. registerTarget(assetId, mesh, material) → Builds BLAS (BVH via BVHAccel), bakes SDF, bakes Octahedral atlas 2. addInstance(assetId, worldMatrix, mode) → Adds to instance buffer + TLAS 3. update(fps, cameraPos, encoder) → Billboard align compute, FPS-driven tier selection, TLAS refit 4. render(encoder, gbuffer, hdrTarget) → ProxyMaskPass → ProxyShadePass Quality tiers (auto-selected by FPS): ULTRA  (>55 FPS) — TLAS/BLAS per-pixel ray portal HIGH   (>40 FPS) — SDF cone march MED    (>28 FPS) — True impostor (height field billboard) LOW    (  <28  ) — Octahedral impostor atlas (baked) Public API: registerTarget(assetId, positions, indices, uvs, material) addInstance(assetId, worldMatrix, mode)        → instanceId removeInstance(instanceId) updateInstanceTransform(instanceId, worldMatrix) setQualityMode('auto' | 'ultra' | 'high' | 'med' | 'low') update(fps, cameraPos, commandEncoder) render(commandEncoder, gbufferTargets, hdrTarget) getStats() destroy()",
    "exports": [
      {
        "name": "ProxyGeometrySystem",
        "kind": "class",
        "signature": "class ProxyGeometrySystem",
        "summary": ""
      },
      {
        "name": "PROXY_MODE",
        "kind": "constant",
        "signature": "PROXY_MODE",
        "summary": ""
      },
      {
        "name": "PROXY_TIER",
        "kind": "re-export",
        "signature": "PROXY_TIER",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/proxy/ProxyMaskPass",
    "path": "engine/reference/render/proxy/ProxyMaskPass.md",
    "source": "engine/render/proxy/ProxyMaskPass.js",
    "import": "/engine/render/proxy/ProxyMaskPass.js",
    "sourceHash": "c0a81ac86c61ca9140febd5c0715e66975a43c41a7242d9568205c735e713aa3",
    "summary": "ProxyMaskPass — Compute Pass: Per-Pixel Ray → Hit Mask + Hit Data This is the engine equivalent of Blender's Raycast Node. For each screen pixel tagged with a proxy instance ID (written by the GBuffer proxy rasterization pass), fires a ray into the appropriate quality tier: ULTRA (0) — TLAS/BLAS two-level BVH traversal (exact, per-pixel) HIGH  (1) — SDF cone marching (correct topology, slightly cheaper) MED   (2) — True impostor height-field ray march (billboard) LOW   (3) — Octahedral impostor atlas sample (baked, near zero cost) Outputs four textures consumed by ProxyShadePass: hitMask   — r8uint:  0 = miss (transparent), 1 = hit hitPos    — rgba32float: world-space hit position hitNormal — rgba16float: world-space hit normal hitUV     — rg16float:   UV for material sampling \"Is Hit\" = 0 causes ProxyShadePass to discard that pixel, producing the transparent cutout that hides the proxy box edges (Blender Transparent BSDF).",
    "exports": [
      {
        "name": "ProxyMaskPass",
        "kind": "class",
        "signature": "class ProxyMaskPass",
        "summary": ""
      },
      {
        "name": "PROXY_TIER",
        "kind": "constant",
        "signature": "PROXY_TIER",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/proxy/ProxyOctahedralCache",
    "path": "engine/reference/render/proxy/ProxyOctahedralCache.md",
    "source": "engine/render/proxy/ProxyOctahedralCache.js",
    "import": "/engine/render/proxy/ProxyOctahedralCache.js",
    "sourceHash": "5dd1115914d35f880bc133f0f00a3c8c3b050605ab57260ffaf931004de615d9",
    "summary": "ProxyOctahedralCache — Baked Octahedral Impostor Atlas Pre-renders a target asset from N×N octahedral viewpoints and packs the results into a single texture atlas. At runtime, proxy billboards sample the nearest 4 frames (bilinearly blended in octahedral space). Technique from: Emil Poulsen / Unity Pixyz / UE5 Nanite fallback. Atlas layout: - atlasFrames × atlasFrames grid of FRAME_SIZE×FRAME_SIZE RGBA tiles - Each tile stores: RGB = color, A = alpha mask - An additional normal atlas stores XYZ normals (for lighting correction) Pros:  Near-zero runtime cost, excellent at distance. Cons:  Baked offline (re-bake if mesh changes); limited parallax. Fix:   Dirty flag triggers async re-bake; irradiance probe augments lighting.",
    "exports": [
      {
        "name": "ProxyOctahedralCache",
        "kind": "class",
        "signature": "class ProxyOctahedralCache",
        "summary": ""
      },
      {
        "name": "OCTAHEDRAL_WGSL",
        "kind": "constant",
        "signature": "OCTAHEDRAL_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/proxy/ProxySDF",
    "path": "engine/reference/render/proxy/ProxySDF.md",
    "source": "engine/render/proxy/ProxySDF.js",
    "import": "/engine/render/proxy/ProxySDF.js",
    "sourceHash": "d3f2d985cf41f1439435af10c4e69832bbc6b7724ab244d9b6ae820d32bbc534",
    "summary": "ProxySDF — SDF Proxy Baking + Runtime Cone March (HIGH tier) Wraps MeshSDFGenerator to produce 3D SDF textures for registered proxy assets. At runtime, the GPU cone marches (sphere traces) through the SDF to produce pixel-perfect silhouettes, normals, and depth from any viewing angle. Advantages over octahedral impostor: - Handles ANY topology (torus, rings, handles — not just height fields) - Normals derived from SDF gradient (analytically smooth) - SDF soft shadows / AO available for free via cone angle Known problems + solutions: Problem: O(n³) memory for 3D texture Fix:     Sparse SDF using VoxelCompression; only near-surface voxels stored Problem: UV data absent from SDF Fix:     Parallel volume storing nearest-triangle barycentric → UV lookup Problem: Thin features lose precision at low grid resolution Fix:     2-level SDF: coarse 32³ + fine 64³ near-surface refinement",
    "exports": [
      {
        "name": "ProxySDF",
        "kind": "class",
        "signature": "class ProxySDF",
        "summary": ""
      },
      {
        "name": "SDF_PROXY_WGSL",
        "kind": "constant",
        "signature": "SDF_PROXY_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/proxy/ProxyShadePass",
    "path": "engine/reference/render/proxy/ProxyShadePass.md",
    "source": "engine/render/proxy/ProxyShadePass.js",
    "import": "/engine/render/proxy/ProxyShadePass.js",
    "sourceHash": "49bfee938d567f47411159e90cfd005a3c1ce026b1b22ca9ea432c93388cb903",
    "summary": "ProxyShadePass — Material Evaluation + Composite to HDR Buffer Reads the hit data textures produced by ProxyMaskPass and: 1. Discards pixels where hitMask = 0 (transparent cutout — Blender Transparent BSDF) 2. Samples the target asset's material at hitUV (albedo, roughness, metallic, normal) 3. Evaluates PBR lighting using the engine's LightManager shader functions 4. Alpha-composites into the HDR color buffer before tonemapping This is the deferred equivalent of Blender's Mix Shader: Mix(factor=IsHit, A=RayPortalBSDF, B=TransparentBSDF) → HDR output",
    "exports": [
      {
        "name": "ProxyShadePass",
        "kind": "class",
        "signature": "class ProxyShadePass",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/proxy/TLASBuilder",
    "path": "engine/reference/render/proxy/TLASBuilder.md",
    "source": "engine/render/proxy/TLASBuilder.js",
    "import": "/engine/render/proxy/TLASBuilder.js",
    "sourceHash": "96b6a21a4dec44588a9247463376ecedd22a0a887e1db31e887b5aa0a809fd00",
    "summary": "TLASBuilder — Two-Level Acceleration Structure for Proxy Geometry Implements the TLAS (Top-Level Acceleration Structure) over proxy instances, each referencing a BLAS (Bottom-Level Acceleration Structure = the per-asset BVH built by BVHAccel.js / BVHBuilder). Key insight (from Jacco Bikker / Interplay of Light research): \"Given a mesh with a BVH in object space and a 4x4 matrix, we intersect its BVH in world space by applying the inverse transform to the ray.\" This means: - BLAS is built ONCE per unique asset, stored in object space - TLAS stores instance bounding boxes (world space) + inverse world matrices - Per-ray: traverse TLAS → at leaf, transform ray into object space → traverse BLAS - Adding 1000 instances of the same mesh = 1 BLAS + 1000 TLAS entries (not 1000 BVHes) GPU buffer layout designed for direct use in ray_portal.js WGSL traversal.",
    "exports": [
      {
        "name": "TLASBuilder",
        "kind": "class",
        "signature": "class TLASBuilder",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/proxy/index",
    "path": "engine/reference/render/proxy/index.md",
    "source": "engine/render/proxy/index.js",
    "import": "/engine/render/proxy/index.js",
    "sourceHash": "d2319ce371dd7953dc19b2a286a4cc5acffc2b9bb00b206125ade20047dfcd60",
    "summary": "Proxy Geometry System — Public Exports Ray Portal Proxy Topology rendering system: Decouples visual complexity from geometric complexity using 5 quality tiers that switch dynamically based on FPS. Primary entry point: ProxyGeometrySystem Usage: import { ProxyGeometrySystem, PROXY_MODE, PROXY_TIER } from './proxy/index.js'; const proxy = new ProxyGeometrySystem(device, width, height); await proxy.registerTarget(0, positions, indices, uvs, material); proxy.addInstance(0, worldMatrix, PROXY_MODE.BOX); // Per frame: proxy.update(fps, cameraPos, encoder); proxy.render(encoder, gbuffer, hdrTarget, sceneData);",
    "exports": [
      {
        "name": "OCTAHEDRAL_WGSL",
        "kind": "re-export",
        "signature": "OCTAHEDRAL_WGSL",
        "summary": ""
      },
      {
        "name": "PROXY_MODE",
        "kind": "re-export",
        "signature": "PROXY_MODE",
        "summary": ""
      },
      {
        "name": "PROXY_TIER",
        "kind": "re-export",
        "signature": "PROXY_TIER",
        "summary": ""
      },
      {
        "name": "ProxyBillboardAlign",
        "kind": "re-export",
        "signature": "ProxyBillboardAlign",
        "summary": ""
      },
      {
        "name": "ProxyGBufferPass",
        "kind": "re-export",
        "signature": "ProxyGBufferPass",
        "summary": ""
      },
      {
        "name": "ProxyGeometrySystem",
        "kind": "re-export",
        "signature": "ProxyGeometrySystem",
        "summary": ""
      },
      {
        "name": "ProxyMaskPass",
        "kind": "re-export",
        "signature": "ProxyMaskPass",
        "summary": ""
      },
      {
        "name": "ProxyOctahedralCache",
        "kind": "re-export",
        "signature": "ProxyOctahedralCache",
        "summary": ""
      },
      {
        "name": "ProxySDF",
        "kind": "re-export",
        "signature": "ProxySDF",
        "summary": ""
      },
      {
        "name": "ProxyShadePass",
        "kind": "re-export",
        "signature": "ProxyShadePass",
        "summary": ""
      },
      {
        "name": "RAY_PORTAL_WGSL",
        "kind": "re-export",
        "signature": "RAY_PORTAL_WGSL",
        "summary": ""
      },
      {
        "name": "SDF_PROXY_WGSL",
        "kind": "re-export",
        "signature": "SDF_PROXY_WGSL",
        "summary": ""
      },
      {
        "name": "TLASBuilder",
        "kind": "re-export",
        "signature": "TLASBuilder",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/scenes/StandardEntityRenderResources",
    "path": "engine/reference/render/scenes/StandardEntityRenderResources.md",
    "source": "engine/render/scenes/StandardEntityRenderResources.js",
    "import": "/engine/render/scenes/StandardEntityRenderResources.js",
    "sourceHash": "3962e8deccb25f98edb867aeb5b683a89684c0125acea1b4790c7b8f7cf36b0d",
    "summary": "",
    "exports": [
      {
        "name": "createStandardEntityRenderResources",
        "kind": "function",
        "signature": "createStandardEntityRenderResources(device, renderPipeline, lightsBuffer, entityId, uniformByteLength)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/scenes/StandardRoomRenderer",
    "path": "engine/reference/render/scenes/StandardRoomRenderer.md",
    "source": "engine/render/scenes/StandardRoomRenderer.js",
    "import": "/engine/render/scenes/StandardRoomRenderer.js",
    "sourceHash": "d08e4dca29b6598f339ab014a320d491cef84d1619236a892c19f7c533082d14",
    "summary": "",
    "exports": [
      {
        "name": "createStandardRoomRenderer",
        "kind": "function",
        "signature": "async createStandardRoomRenderer(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/scenes/StandardUniforms",
    "path": "engine/reference/render/scenes/StandardUniforms.md",
    "source": "engine/render/scenes/StandardUniforms.js",
    "import": "/engine/render/scenes/StandardUniforms.js",
    "sourceHash": "a62ec6c22a8ad363c3788ba40e405362df208db1c196b484ee07bbf9e806b174",
    "summary": "",
    "exports": [
      {
        "name": "updateStandardLights",
        "kind": "function",
        "signature": "updateStandardLights(device, lightsBuffer, lightsData, options = {})",
        "summary": ""
      },
      {
        "name": "updateStandardUniforms",
        "kind": "function",
        "signature": "updateStandardUniforms(device, targetBuffer, uniformData, uniformDataU32, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/scenes/VoxelWorldRenderer",
    "path": "engine/reference/render/scenes/VoxelWorldRenderer.md",
    "source": "engine/render/scenes/VoxelWorldRenderer.js",
    "import": "/engine/render/scenes/VoxelWorldRenderer.js",
    "sourceHash": "dfd316dab1b8cfd78a0ac378275c3942dee9e355b4a6f36c9bebe28ec0c9eab1",
    "summary": "Create a voxel world renderer.",
    "exports": [
      {
        "name": "createVoxelWorldRenderer",
        "kind": "function",
        "signature": "async createVoxelWorldRenderer(options)",
        "summary": "Create a voxel world renderer."
      },
      {
        "name": "updateVoxelWorldFrameUniforms",
        "kind": "function",
        "signature": "updateVoxelWorldFrameUniforms(device, frameBuffer, viewProj, view, proj, cameraPos, time,)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/sdf/MeshSDFGenerator",
    "path": "engine/reference/render/sdf/MeshSDFGenerator.md",
    "source": "engine/render/sdf/MeshSDFGenerator.js",
    "import": "/engine/render/sdf/MeshSDFGenerator.js",
    "sourceHash": "f27a66a4f93afefcea59324e4368ea97ab77a521de4f1e39fd276007b8d03b29",
    "summary": "Validate and repair mesh data - removes invalid vertices and degenerate triangles",
    "exports": [
      {
        "name": "validateMesh",
        "kind": "function",
        "signature": "validateMesh(positions, indices)",
        "summary": "Validate and repair mesh data - removes invalid vertices and degenerate triangles"
      },
      {
        "name": "simplifyMesh",
        "kind": "function",
        "signature": "simplifyMesh(positions, indices, targetTriangles = 1000)",
        "summary": "Simplify high-poly mesh for faster SDF generation"
      },
      {
        "name": "analyzeMesh",
        "kind": "function",
        "signature": "analyzeMesh(positions, indices)",
        "summary": "Analyze mesh and determine best SDF approach"
      },
      {
        "name": "computeBounds",
        "kind": "function",
        "signature": "computeBounds(positions)",
        "summary": "Compute axis-aligned bounding box"
      },
      {
        "name": "fitPrimitive",
        "kind": "function",
        "signature": "fitPrimitive(positions, indices)",
        "summary": "Auto-fit best primitive shape to mesh"
      },
      {
        "name": "fitCapsules",
        "kind": "function",
        "signature": "fitCapsules(positions, indices, maxCapsules = 8)",
        "summary": "Fit multiple capsules to a mesh (for ragdoll bodies)"
      },
      {
        "name": "generateTriangleBuffer",
        "kind": "function",
        "signature": "generateTriangleBuffer(positions, indices)",
        "summary": "Generate triangle buffer data for GPU SDF sampling"
      },
      {
        "name": "bakeSDF3D",
        "kind": "function",
        "signature": "bakeSDF3D(positions, indices, resolution = 32)",
        "summary": "Bake 3D SDF texture from mesh using BVH acceleration"
      },
      {
        "name": "initGPUBaker",
        "kind": "function",
        "signature": "async initGPUBaker(device)",
        "summary": "Initialize GPU SDF baker"
      },
      {
        "name": "hasGPUBaker",
        "kind": "function",
        "signature": "hasGPUBaker()",
        "summary": "Check if GPU baking is available"
      },
      {
        "name": "bakeSDF3DGPU",
        "kind": "function",
        "signature": "async bakeSDF3DGPU(positions, indices, resolution = 32)",
        "summary": "Bake 3D SDF texture using GPU compute (~100x faster) Falls back to CPU if GPU not available"
      },
      {
        "name": "generateMeshSDF",
        "kind": "function",
        "signature": "generateMeshSDF(positions, indices, options = {})",
        "summary": "Generate hybrid SDF for a mesh - automatically chooses best approach Now with mesh validation, simplification, and voxel acceleration"
      },
      {
        "name": "getCachedMeshSDF",
        "kind": "function",
        "signature": "getCachedMeshSDF(meshId, positions, indices, options = {})",
        "summary": "Get or generate cached SDF for a mesh"
      },
      {
        "name": "clearSDFCache",
        "kind": "function",
        "signature": "clearSDFCache()",
        "summary": "Clear SDF cache"
      },
      {
        "name": "generateMeshSDFAsync",
        "kind": "function",
        "signature": "async generateMeshSDFAsync(positions, indices, options = {})",
        "summary": "Async version of generateMeshSDF with GPU acceleration Use this for high-resolution baking (64³+)"
      },
      {
        "name": "SDF_TYPE",
        "kind": "constant",
        "signature": "SDF_TYPE",
        "summary": ""
      },
      {
        "name": "TRIANGLE_SDF_WGSL",
        "kind": "constant",
        "signature": "TRIANGLE_SDF_WGSL",
        "summary": "WGSL shader code for triangle buffer SDF sampling"
      },
      {
        "name": "BAKED_SDF_WGSL",
        "kind": "constant",
        "signature": "BAKED_SDF_WGSL",
        "summary": "WGSL shader code for 3D texture SDF sampling"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/sdf/SDFBakeCompute",
    "path": "engine/reference/render/sdf/SDFBakeCompute.md",
    "source": "engine/render/sdf/SDFBakeCompute.js",
    "import": "/engine/render/sdf/SDFBakeCompute.js",
    "sourceHash": "a43917fbb2aa8f564685bc747b40113addbe6859baf2083f6f82ba2aca795fe7",
    "summary": "SDFBakeCompute.js - GPU Compute Shader for 3D SDF Baking Now powered by vGPU driver Accelerates SDF texture generation using WebGPU compute shaders. ~100x faster than CPU for high resolution (64³+) SDF textures. Pipeline: 1. Upload triangle data to GPU buffer 2. Dispatch compute shader to calculate SDF for each voxel in parallel 3. Read back SDF texture data",
    "exports": [
      {
        "name": "SDFBakeCompute",
        "kind": "class",
        "signature": "class SDFBakeCompute",
        "summary": "GPU-accelerated SDF baker"
      },
      {
        "name": "createSDFBaker",
        "kind": "function",
        "signature": "createSDFBaker(device)",
        "summary": "Create GPU SDF baker instance"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/sdf/index",
    "path": "engine/reference/render/sdf/index.md",
    "source": "engine/render/sdf/index.js",
    "import": "/engine/render/sdf/index.js",
    "sourceHash": "08974cf0051060e3804fcc39c7f43cc3c37ea1bc0c8a82bd77fa21b183ea624d",
    "summary": "SDF Utilities - Signed Distance Field generation and baking",
    "exports": [
      {
        "name": "SDFBakeCompute",
        "kind": "re-export",
        "signature": "SDFBakeCompute",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/ShaderComposer",
    "path": "engine/reference/render/shaders/ShaderComposer.md",
    "source": "engine/render/shaders/ShaderComposer.js",
    "import": "/engine/render/shaders/ShaderComposer.js",
    "sourceHash": "7c38366eddee924aa499963175278a1bc2f369c541c3cec37085590fddbffd96",
    "summary": "",
    "exports": [
      {
        "name": "ShaderComposer",
        "kind": "class",
        "signature": "class ShaderComposer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/ShaderLoader",
    "path": "engine/reference/render/shaders/ShaderLoader.md",
    "source": "engine/render/shaders/ShaderLoader.js",
    "import": "/engine/render/shaders/ShaderLoader.js",
    "sourceHash": "835504a8138bdca92eef601ebc19d1c0704fb68521f06905376176ab1b9813f2",
    "summary": "",
    "exports": [
      {
        "name": "createShaderLoader",
        "kind": "function",
        "signature": "createShaderLoader(options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/ShaderLoaderJS",
    "path": "engine/reference/render/shaders/ShaderLoaderJS.md",
    "source": "engine/render/shaders/ShaderLoaderJS.js",
    "import": "/engine/render/shaders/ShaderLoaderJS.js",
    "sourceHash": "668ea4d73011cd661ba6d16be48ec0cc1fd1c3ca90a4a798d9a45e812ca80c53",
    "summary": "",
    "exports": [
      {
        "name": "getShaderSource",
        "kind": "function",
        "signature": "getShaderSource(name)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/ShaderSchema",
    "path": "engine/reference/render/shaders/ShaderSchema.md",
    "source": "engine/render/shaders/ShaderSchema.js",
    "import": "/engine/render/shaders/ShaderSchema.js",
    "sourceHash": "464128c6c41d9901c241d280ec263d9b51f4270f282450e4796c976b6e375f84",
    "summary": "Generate WGSL struct definition from schema",
    "exports": [
      {
        "name": "generateStructWGSL",
        "kind": "function",
        "signature": "generateStructWGSL(schema)",
        "summary": "Generate WGSL struct definition from schema"
      },
      {
        "name": "generateBindingsWGSL",
        "kind": "function",
        "signature": "generateBindingsWGSL(groupSchema)",
        "summary": "Generate WGSL binding declarations from binding group schema"
      },
      {
        "name": "generateVertexInputWGSL",
        "kind": "function",
        "signature": "generateVertexInputWGSL(layout)",
        "summary": "Generate WGSL vertex input struct from vertex layout"
      },
      {
        "name": "alignOffset",
        "kind": "function",
        "signature": "alignOffset(offset, alignment)",
        "summary": "Calculate aligned byte offset for a field"
      },
      {
        "name": "calculateBufferSize",
        "kind": "function",
        "signature": "calculateBufferSize(schema)",
        "summary": "Calculate total buffer size from schema (with alignment)"
      },
      {
        "name": "createUniformBuffer",
        "kind": "function",
        "signature": "createUniformBuffer(schema)",
        "summary": "Create a typed array buffer matching schema"
      },
      {
        "name": "writeUniformField",
        "kind": "function",
        "signature": "writeUniformField(buffer, schema, fieldName, value)",
        "summary": "Write a value to a uniform buffer at the field's offset"
      },
      {
        "name": "readUniformField",
        "kind": "function",
        "signature": "readUniformField(buffer, schema, fieldName)",
        "summary": "Read a value from a uniform buffer at the field's offset"
      },
      {
        "name": "validateUniformBuffer",
        "kind": "function",
        "signature": "validateUniformBuffer(buffer, schema)",
        "summary": "Validate a uniform buffer against schema"
      },
      {
        "name": "validateBindingGroup",
        "kind": "function",
        "signature": "validateBindingGroup(entries, groupSchema)",
        "summary": "Validate binding group layout"
      },
      {
        "name": "createFrameUniformsBuffer",
        "kind": "function",
        "signature": "createFrameUniformsBuffer()",
        "summary": "Create frame uniforms buffer with defaults"
      },
      {
        "name": "createModelUniformsBuffer",
        "kind": "function",
        "signature": "createModelUniformsBuffer()",
        "summary": "Create model uniforms buffer with defaults"
      },
      {
        "name": "createMaterialUniformsBuffer",
        "kind": "function",
        "signature": "createMaterialUniformsBuffer()",
        "summary": "Create material uniforms buffer with defaults"
      },
      {
        "name": "createParticleParamsBuffer",
        "kind": "function",
        "signature": "createParticleParamsBuffer()",
        "summary": "Create particle params buffer with defaults"
      },
      {
        "name": "WGSL_TYPES",
        "kind": "constant",
        "signature": "WGSL_TYPES",
        "summary": "WGSL type sizes in bytes (aligned to 16-byte boundaries for uniforms)"
      },
      {
        "name": "BUFFER_USAGE",
        "kind": "constant",
        "signature": "BUFFER_USAGE",
        "summary": "Buffer usage types"
      },
      {
        "name": "TEXTURE_TYPES",
        "kind": "constant",
        "signature": "TEXTURE_TYPES",
        "summary": "Texture types"
      },
      {
        "name": "FRAME_UNIFORMS_SCHEMA",
        "kind": "constant",
        "signature": "FRAME_UNIFORMS_SCHEMA",
        "summary": "Frame uniforms - camera and time data, updated every frame"
      },
      {
        "name": "MODEL_UNIFORMS_SCHEMA",
        "kind": "constant",
        "signature": "MODEL_UNIFORMS_SCHEMA",
        "summary": "Model uniforms - per-object transform data"
      },
      {
        "name": "LIGHT_STRUCT_SCHEMA",
        "kind": "constant",
        "signature": "LIGHT_STRUCT_SCHEMA",
        "summary": "Light struct for dynamic lighting"
      },
      {
        "name": "MATERIAL_UNIFORMS_SCHEMA",
        "kind": "constant",
        "signature": "MATERIAL_UNIFORMS_SCHEMA",
        "summary": "PBR material uniforms"
      },
      {
        "name": "PARTICLE_PARAMS_SCHEMA",
        "kind": "constant",
        "signature": "PARTICLE_PARAMS_SCHEMA",
        "summary": "Particle render params"
      },
      {
        "name": "POSTFX_PARAMS_SCHEMA",
        "kind": "constant",
        "signature": "POSTFX_PARAMS_SCHEMA",
        "summary": "Post-process common params"
      },
      {
        "name": "BINDING_GROUPS",
        "kind": "constant",
        "signature": "BINDING_GROUPS",
        "summary": "Standard binding group layouts"
      },
      {
        "name": "VERTEX_LAYOUTS",
        "kind": "constant",
        "signature": "VERTEX_LAYOUTS",
        "summary": "Standard vertex layouts"
      },
      {
        "name": "UNIFORM_SCHEMAS",
        "kind": "constant",
        "signature": "UNIFORM_SCHEMAS",
        "summary": ""
      },
      {
        "name": "COMMON_WGSL",
        "kind": "constant",
        "signature": "COMMON_WGSL",
        "summary": "Common WGSL utility functions"
      },
      {
        "name": "FULLSCREEN_TRIANGLE_VS",
        "kind": "constant",
        "signature": "FULLSCREEN_TRIANGLE_VS",
        "summary": "Full-screen triangle vertex shader"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/ShaderSources",
    "path": "engine/reference/render/shaders/ShaderSources.md",
    "source": "engine/render/shaders/ShaderSources.js",
    "import": "/engine/render/shaders/ShaderSources.js",
    "sourceHash": "0424b1914cbf82a77a83f03e8095c83a50310e59bba9bf1ea775a6fbe4cce683",
    "summary": "",
    "exports": [
      {
        "name": "ShaderSources",
        "kind": "constant",
        "signature": "ShaderSources",
        "summary": ""
      },
      {
        "name": "BINDING_GROUPS",
        "kind": "re-export",
        "signature": "BINDING_GROUPS",
        "summary": ""
      },
      {
        "name": "COMMON_WGSL",
        "kind": "re-export",
        "signature": "COMMON_WGSL",
        "summary": ""
      },
      {
        "name": "F32_TILE_64",
        "kind": "re-export",
        "signature": "F32_TILE_64",
        "summary": ""
      },
      {
        "name": "FRAME_UNIFORMS_SCHEMA",
        "kind": "re-export",
        "signature": "FRAME_UNIFORMS_SCHEMA",
        "summary": ""
      },
      {
        "name": "FULLSCREEN_TRIANGLE_VS",
        "kind": "re-export",
        "signature": "FULLSCREEN_TRIANGLE_VS",
        "summary": ""
      },
      {
        "name": "GpuTile",
        "kind": "re-export",
        "signature": "GpuTile",
        "summary": ""
      },
      {
        "name": "LIGHT_STRUCT_SCHEMA",
        "kind": "re-export",
        "signature": "LIGHT_STRUCT_SCHEMA",
        "summary": ""
      },
      {
        "name": "MATERIAL_UNIFORMS_SCHEMA",
        "kind": "re-export",
        "signature": "MATERIAL_UNIFORMS_SCHEMA",
        "summary": ""
      },
      {
        "name": "MODEL_UNIFORMS_SCHEMA",
        "kind": "re-export",
        "signature": "MODEL_UNIFORMS_SCHEMA",
        "summary": ""
      },
      {
        "name": "PARTICLE_PARAMS_SCHEMA",
        "kind": "re-export",
        "signature": "PARTICLE_PARAMS_SCHEMA",
        "summary": ""
      },
      {
        "name": "TILED_NBODY_EXAMPLE_WGSL",
        "kind": "re-export",
        "signature": "TILED_NBODY_EXAMPLE_WGSL",
        "summary": ""
      },
      {
        "name": "UNIFORM_SCHEMAS",
        "kind": "re-export",
        "signature": "UNIFORM_SCHEMAS",
        "summary": ""
      },
      {
        "name": "VEC2_TILE_64",
        "kind": "re-export",
        "signature": "VEC2_TILE_64",
        "summary": ""
      },
      {
        "name": "VEC4_TILE_128",
        "kind": "re-export",
        "signature": "VEC4_TILE_128",
        "summary": ""
      },
      {
        "name": "VEC4_TILE_64",
        "kind": "re-export",
        "signature": "VEC4_TILE_64",
        "summary": ""
      },
      {
        "name": "VERTEX_LAYOUTS",
        "kind": "re-export",
        "signature": "VERTEX_LAYOUTS",
        "summary": ""
      },
      {
        "name": "WGSL_TYPES",
        "kind": "re-export",
        "signature": "WGSL_TYPES",
        "summary": ""
      },
      {
        "name": "animeExplosionWGSL",
        "kind": "re-export",
        "signature": "animeExplosionWGSL",
        "summary": ""
      },
      {
        "name": "animeToonWGSL",
        "kind": "re-export",
        "signature": "animeToonWGSL",
        "summary": ""
      },
      {
        "name": "areaLightingWGSL",
        "kind": "re-export",
        "signature": "areaLightingWGSL",
        "summary": ""
      },
      {
        "name": "bloomBlurWGSL",
        "kind": "re-export",
        "signature": "bloomBlurWGSL",
        "summary": ""
      },
      {
        "name": "bloomCompositeWGSL",
        "kind": "re-export",
        "signature": "bloomCompositeWGSL",
        "summary": ""
      },
      {
        "name": "bloomSinglePassWGSL",
        "kind": "re-export",
        "signature": "bloomSinglePassWGSL",
        "summary": ""
      },
      {
        "name": "bloomThresholdWGSL",
        "kind": "re-export",
        "signature": "bloomThresholdWGSL",
        "summary": ""
      },
      {
        "name": "cameraStructWGSL",
        "kind": "re-export",
        "signature": "cameraStructWGSL",
        "summary": ""
      },
      {
        "name": "cameraUtilsWGSL",
        "kind": "re-export",
        "signature": "cameraUtilsWGSL",
        "summary": ""
      },
      {
        "name": "colorMathWGSL",
        "kind": "re-export",
        "signature": "colorMathWGSL",
        "summary": ""
      },
      {
        "name": "createFrameUniformsBuffer",
        "kind": "re-export",
        "signature": "createFrameUniformsBuffer",
        "summary": ""
      },
      {
        "name": "createMaterialUniformsBuffer",
        "kind": "re-export",
        "signature": "createMaterialUniformsBuffer",
        "summary": ""
      },
      {
        "name": "createModelUniformsBuffer",
        "kind": "re-export",
        "signature": "createModelUniformsBuffer",
        "summary": ""
      },
      {
        "name": "createUniformBuffer",
        "kind": "re-export",
        "signature": "createUniformBuffer",
        "summary": ""
      },
      {
        "name": "denoiseWGSL",
        "kind": "re-export",
        "signature": "denoiseWGSL",
        "summary": ""
      },
      {
        "name": "electricityWGSL",
        "kind": "re-export",
        "signature": "electricityWGSL",
        "summary": ""
      },
      {
        "name": "fireTurbulenceWGSL",
        "kind": "re-export",
        "signature": "fireTurbulenceWGSL",
        "summary": ""
      },
      {
        "name": "fluidWaterCompositeWGSL",
        "kind": "re-export",
        "signature": "fluidWaterCompositeWGSL",
        "summary": ""
      },
      {
        "name": "fractalEdgesWGSL",
        "kind": "re-export",
        "signature": "fractalEdgesWGSL",
        "summary": ""
      },
      {
        "name": "frameUniformsWGSL",
        "kind": "re-export",
        "signature": "frameUniformsWGSL",
        "summary": ""
      },
      {
        "name": "fullscreenQuadVertexWGSL",
        "kind": "re-export",
        "signature": "fullscreenQuadVertexWGSL",
        "summary": ""
      },
      {
        "name": "generateBindingsWGSL",
        "kind": "re-export",
        "signature": "generateBindingsWGSL",
        "summary": ""
      },
      {
        "name": "generateStructWGSL",
        "kind": "re-export",
        "signature": "generateStructWGSL",
        "summary": ""
      },
      {
        "name": "generateVertexInputWGSL",
        "kind": "re-export",
        "signature": "generateVertexInputWGSL",
        "summary": ""
      },
      {
        "name": "gpuTile",
        "kind": "re-export",
        "signature": "gpuTile",
        "summary": ""
      },
      {
        "name": "lightStructWGSL",
        "kind": "re-export",
        "signature": "lightStructWGSL",
        "summary": ""
      },
      {
        "name": "lightingModuleWGSL",
        "kind": "re-export",
        "signature": "lightingModuleWGSL",
        "summary": ""
      },
      {
        "name": "magicEffectsWGSL",
        "kind": "re-export",
        "signature": "magicEffectsWGSL",
        "summary": ""
      },
      {
        "name": "mathCommonWGSL",
        "kind": "re-export",
        "signature": "mathCommonWGSL",
        "summary": ""
      },
      {
        "name": "noise2dWGSL",
        "kind": "re-export",
        "signature": "noise2dWGSL",
        "summary": ""
      },
      {
        "name": "noise3dWGSL",
        "kind": "re-export",
        "signature": "noise3dWGSL",
        "summary": ""
      },
      {
        "name": "packingWGSL",
        "kind": "re-export",
        "signature": "packingWGSL",
        "summary": ""
      },
      {
        "name": "pathtracingGIWGSL",
        "kind": "re-export",
        "signature": "pathtracingGIWGSL",
        "summary": ""
      },
      {
        "name": "pbrMaterialsWGSL",
        "kind": "re-export",
        "signature": "pbrMaterialsWGSL",
        "summary": ""
      },
      {
        "name": "quaternionWGSL",
        "kind": "re-export",
        "signature": "quaternionWGSL",
        "summary": ""
      },
      {
        "name": "rayIntersectWGSL",
        "kind": "re-export",
        "signature": "rayIntersectWGSL",
        "summary": ""
      },
      {
        "name": "rayTerminationWGSL",
        "kind": "re-export",
        "signature": "rayTerminationWGSL",
        "summary": ""
      },
      {
        "name": "rayTracingWGSL",
        "kind": "re-export",
        "signature": "rayTracingWGSL",
        "summary": ""
      },
      {
        "name": "raymarchingModuleWGSL",
        "kind": "re-export",
        "signature": "raymarchingModuleWGSL",
        "summary": ""
      },
      {
        "name": "readUniformField",
        "kind": "re-export",
        "signature": "readUniformField",
        "summary": ""
      },
      {
        "name": "restirGuidePolicyWGSL",
        "kind": "re-export",
        "signature": "restirGuidePolicyWGSL",
        "summary": ""
      },
      {
        "name": "sdfPrimitivesWGSL",
        "kind": "re-export",
        "signature": "sdfPrimitivesWGSL",
        "summary": ""
      },
      {
        "name": "shadowsAoMacrosWGSL",
        "kind": "re-export",
        "signature": "shadowsAoMacrosWGSL",
        "summary": ""
      },
      {
        "name": "shadowsAoWGSL",
        "kind": "re-export",
        "signature": "shadowsAoWGSL",
        "summary": ""
      },
      {
        "name": "spellParticlesWGSL",
        "kind": "re-export",
        "signature": "spellParticlesWGSL",
        "summary": ""
      },
      {
        "name": "temporalAAWGSL",
        "kind": "re-export",
        "signature": "temporalAAWGSL",
        "summary": ""
      },
      {
        "name": "volumetricCloudsWGSL",
        "kind": "re-export",
        "signature": "volumetricCloudsWGSL",
        "summary": ""
      },
      {
        "name": "voronoiWGSL",
        "kind": "re-export",
        "signature": "voronoiWGSL",
        "summary": ""
      },
      {
        "name": "wgsl",
        "kind": "re-export",
        "signature": "wgsl",
        "summary": ""
      },
      {
        "name": "wgslFor",
        "kind": "re-export",
        "signature": "wgslFor",
        "summary": ""
      },
      {
        "name": "wgslIf",
        "kind": "re-export",
        "signature": "wgslIf",
        "summary": ""
      },
      {
        "name": "wgslVariant",
        "kind": "re-export",
        "signature": "wgslVariant",
        "summary": ""
      },
      {
        "name": "writeUniformField",
        "kind": "re-export",
        "signature": "writeUniformField",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/WgslPreprocessor",
    "path": "engine/reference/render/shaders/WgslPreprocessor.md",
    "source": "engine/render/shaders/WgslPreprocessor.js",
    "import": "/engine/render/shaders/WgslPreprocessor.js",
    "sourceHash": "93946d9994191be5b25d7105b9df8b3a3524c03fae865303aed5ff24e0835ee3",
    "summary": "Tagged template literal for WGSL preprocessing",
    "exports": [
      {
        "name": "wgsl",
        "kind": "function",
        "signature": "wgsl(strings, ...values)",
        "summary": "Tagged template literal for WGSL preprocessing"
      },
      {
        "name": "wgslIf",
        "kind": "function",
        "signature": "wgslIf(condition, ifTrue, ifFalse = '')",
        "summary": "Simple string-based conditionals without tagged template Useful for simpler cases"
      },
      {
        "name": "wgslFor",
        "kind": "function",
        "signature": "wgslFor(count, template)",
        "summary": "Repeat a string N times with index substitution ${i} in the template is replaced with the iteration index"
      },
      {
        "name": "wgslVariant",
        "kind": "function",
        "signature": "wgslVariant(features, variants)",
        "summary": "Create a shader variant by selecting features"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/core/clear_color",
    "path": "engine/reference/render/shaders/core/clear_color.md",
    "source": "engine/render/shaders/core/clear_color.js",
    "import": "/engine/render/shaders/core/clear_color.js",
    "sourceHash": "cfd9913790d25dbf2b5e686197f89f3854b0fafc21d1b71a80258d37f95cca87",
    "summary": "Clear Color Shader - Full-screen clear with uniform color",
    "exports": [
      {
        "name": "clearColorWGSL",
        "kind": "constant",
        "signature": "clearColorWGSL",
        "summary": "Clear Color Shader - Full-screen clear with uniform color"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/core/global_common",
    "path": "engine/reference/render/shaders/core/global_common.md",
    "source": "engine/render/shaders/core/global_common.js",
    "import": "/engine/render/shaders/core/global_common.js",
    "sourceHash": "f302c1d7fd3b7379299cbcd1b3b91720ee2b8d88a82c75889a3225a97cdc8a01",
    "summary": "",
    "exports": [
      {
        "name": "minimalFrameUniformsWGSL",
        "kind": "constant",
        "signature": "minimalFrameUniformsWGSL",
        "summary": ""
      },
      {
        "name": "globalCommonWGSL",
        "kind": "constant",
        "signature": "globalCommonWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/core/lighting",
    "path": "engine/reference/render/shaders/core/lighting.md",
    "source": "engine/render/shaders/core/lighting.js",
    "import": "/engine/render/shaders/core/lighting.js",
    "sourceHash": "d5b5299ebf19635d4c6a52adff673a91d4c64d1fb617ef19911fda72233d9bfe",
    "summary": "",
    "exports": [
      {
        "name": "simpleLightStructWGSL",
        "kind": "constant",
        "signature": "simpleLightStructWGSL",
        "summary": ""
      },
      {
        "name": "legacyLightingWGSL",
        "kind": "constant",
        "signature": "legacyLightingWGSL",
        "summary": ""
      },
      {
        "name": "lightingWGSL",
        "kind": "constant",
        "signature": "lightingWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/core/monitor_patterns",
    "path": "engine/reference/render/shaders/core/monitor_patterns.md",
    "source": "engine/render/shaders/core/monitor_patterns.js",
    "import": "/engine/render/shaders/core/monitor_patterns.js",
    "sourceHash": "3fd99ae2861cf4d89916478b81adf7cb08fe3e7b4742cd80d7b0b200a59b6662",
    "summary": "Monitor Patterns - Test patterns for display calibration",
    "exports": [
      {
        "name": "monitorPatternsWGSL",
        "kind": "constant",
        "signature": "monitorPatternsWGSL",
        "summary": "Monitor Patterns - Test patterns for display calibration"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/core/particles_billboard_legacy",
    "path": "engine/reference/render/shaders/core/particles_billboard_legacy.md",
    "source": "engine/render/shaders/core/particles_billboard_legacy.js",
    "import": "/engine/render/shaders/core/particles_billboard_legacy.js",
    "sourceHash": "ddb6b79ccc2048ddbf4ff4dd0cef8e3964a5481b1286fdf9ab4e56d0f28f6f4e",
    "summary": "Legacy Particles Billboard - Horizontal quad particles with cloud-like appearance Note: The main particles_billboard shader is in modules/core/particles_billboard.js",
    "exports": [
      {
        "name": "particlesBillboardLegacyWGSL",
        "kind": "constant",
        "signature": "particlesBillboardLegacyWGSL",
        "summary": "Legacy Particles Billboard - Horizontal quad particles with cloud-like appearance Note: The main particles_billboard shader is in modules/core/particles_billboard.js"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/core/solid_color",
    "path": "engine/reference/render/shaders/core/solid_color.md",
    "source": "engine/render/shaders/core/solid_color.js",
    "import": "/engine/render/shaders/core/solid_color.js",
    "sourceHash": "e406bfd56fcf0633f1870fa754d680ca3038491e939a4abd705e2168bde683ac",
    "summary": "Solid Color Shader - Simple vertex color passthrough",
    "exports": [
      {
        "name": "solidColorWGSL",
        "kind": "constant",
        "signature": "solidColorWGSL",
        "summary": "Solid Color Shader - Simple vertex color passthrough"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/core/standard",
    "path": "engine/reference/render/shaders/core/standard.md",
    "source": "engine/render/shaders/core/standard.js",
    "import": "/engine/render/shaders/core/standard.js",
    "sourceHash": "028581c8f6ad4e1fc33ac1368dc28459f1de67d972306e600906f2901212dd75",
    "summary": "============================================================================ STANDARD PBR SHADER WITH MULTI-TYPE LIGHTING ============================================================================ Supports three light types: - Point (type 0): Position-based with quadratic distance falloff - Directional (type 1): Direction-based, no distance falloff (sun-like) - Spot (type 2): Position + direction + cone falloff GPU BUFFER LAYOUT: Group 0 (Uniforms): Binding 0: Uniforms - projection, view, model matrices - color, alpha - lightCount, feature flags, sunDir, sunColor Binding 1: lights array<Light, 64> - position (vec3) + lightType (u32) - color (vec3) + innerCone (f32) - direction (vec3) + outerCone (f32)",
    "exports": [
      {
        "name": "standardShaderWGSL",
        "kind": "constant",
        "signature": "standardShaderWGSL",
        "summary": "============================================================================ STANDARD PBR SHADER WITH MULTI-TYPE LIGHTING ============================================================================ Supports three light types: - Point (type 0): Position-based with quadratic distance falloff - Directional (type 1): Direction-based, no distance falloff (sun-like) - Spot (type 2): Position + direction + cone falloff GPU BUFFER LAYOUT: Group 0 (Uniforms): Binding 0: Uniforms - projection, view, model matrices - color, alpha - lightCount, feature flags, sunDir, sunColor Binding 1: lights array<Light, 64> - position (vec3) + lightType (u32) - color (vec3) + innerCone (f32) - direction (vec3) + outerCone (f32)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/core/textured_quad",
    "path": "engine/reference/render/shaders/core/textured_quad.md",
    "source": "engine/render/shaders/core/textured_quad.js",
    "import": "/engine/render/shaders/core/textured_quad.js",
    "sourceHash": "1a7ef733b2d4e71564af682b5487296a9aaec452e851554b3f830321b6a24edf",
    "summary": "Textured Quad Shader - Simple texture sampling",
    "exports": [
      {
        "name": "texturedQuadWGSL",
        "kind": "constant",
        "signature": "texturedQuadWGSL",
        "summary": "Textured Quad Shader - Simple texture sampling"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/debug/cloth_debug",
    "path": "engine/reference/render/shaders/debug/cloth_debug.md",
    "source": "engine/render/shaders/debug/cloth_debug.js",
    "import": "/engine/render/shaders/debug/cloth_debug.js",
    "sourceHash": "c2ebc1ea1756fd4f55e72c8a3c6f3623ec99ef652d7a6ab09c792bdfbf067a47",
    "summary": "Cloth Debug Shader - Visualize cloth mesh with normal-based coloring",
    "exports": [
      {
        "name": "clothDebugWGSL",
        "kind": "constant",
        "signature": "clothDebugWGSL",
        "summary": "Cloth Debug Shader - Visualize cloth mesh with normal-based coloring"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/debug/debug_views",
    "path": "engine/reference/render/shaders/debug/debug_views.md",
    "source": "engine/render/shaders/debug/debug_views.js",
    "import": "/engine/render/shaders/debug/debug_views.js",
    "sourceHash": "c9ceefdeb6347511236eeb0a33a212b3ac1e0c10de15ca132628961b428764b4",
    "summary": "Debug Views Shader - Visualize different render targets (color, depth, normals, roughness/metallic)",
    "exports": [
      {
        "name": "debugViewsWGSL",
        "kind": "constant",
        "signature": "debugViewsWGSL",
        "summary": "Debug Views Shader - Visualize different render targets (color, depth, normals, roughness/metallic)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/debug/fluid_debug",
    "path": "engine/reference/render/shaders/debug/fluid_debug.md",
    "source": "engine/render/shaders/debug/fluid_debug.js",
    "import": "/engine/render/shaders/debug/fluid_debug.js",
    "sourceHash": "8c98f177723f42f05768e7a9b5102174a5625510e7f240837d87aea1343ee266",
    "summary": "Fluid Debug Shader - Visualize fluid density grid slices or max projection",
    "exports": [
      {
        "name": "fluidDebugWGSL",
        "kind": "constant",
        "signature": "fluidDebugWGSL",
        "summary": "Fluid Debug Shader - Visualize fluid density grid slices or max projection"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/effects/spell_effects.wgsl",
    "path": "engine/reference/render/shaders/effects/spell_effects.wgsl.md",
    "source": "engine/render/shaders/effects/spell_effects.wgsl.js",
    "import": "/engine/render/shaders/effects/spell_effects.wgsl.js",
    "sourceHash": "d2779c42f60ff6afa20582a0f75ca27ba8a32ffb6bc08722ca9d09602caba298",
    "summary": "",
    "exports": [
      {
        "name": "spellEffectsWGSL",
        "kind": "constant",
        "signature": "spellEffectsWGSL",
        "summary": ""
      },
      {
        "name": "SPELL_TYPE_CONSTS",
        "kind": "re-export",
        "signature": "SPELL_TYPE_CONSTS",
        "summary": ""
      },
      {
        "name": "spellEffectFragmentWGSL",
        "kind": "re-export",
        "signature": "spellEffectFragmentWGSL",
        "summary": ""
      },
      {
        "name": "spellUniformsWGSL",
        "kind": "re-export",
        "signature": "spellUniformsWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/materials/pbr_brdf",
    "path": "engine/reference/render/shaders/materials/pbr_brdf.md",
    "source": "engine/render/shaders/materials/pbr_brdf.js",
    "import": "/engine/render/shaders/materials/pbr_brdf.js",
    "sourceHash": "6b4c04a1409961463f0896c46e438a31e6b57a679e55c5000d6cb9ecdf7aa4d9",
    "summary": "PBR BRDF - Physically-based rendering BRDF functions (GGX/Schlick) Dependencies: Requires mathCommonWGSL for saturate() and PI. These are provided separately to avoid duplication when composing shaders.",
    "exports": [
      {
        "name": "pbrInputsStructWGSL",
        "kind": "constant",
        "signature": "pbrInputsStructWGSL",
        "summary": ""
      },
      {
        "name": "pbrBrdfFunctionsWGSL",
        "kind": "constant",
        "signature": "pbrBrdfFunctionsWGSL",
        "summary": ""
      },
      {
        "name": "pbrBrdfWGSL",
        "kind": "constant",
        "signature": "pbrBrdfWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/materials/pbr_extensions",
    "path": "engine/reference/render/shaders/materials/pbr_extensions.md",
    "source": "engine/render/shaders/materials/pbr_extensions.js",
    "import": "/engine/render/shaders/materials/pbr_extensions.js",
    "sourceHash": "181438d8646c3f9a4647cbfdba64e5cac2f6a4704e988e3123d7a966ac3e8ec5",
    "summary": "PBR Extensions - Placeholder hooks for subsurface scattering, fog, and post-lighting effects",
    "exports": [
      {
        "name": "pbrExtensionsWGSL",
        "kind": "constant",
        "signature": "pbrExtensionsWGSL",
        "summary": "PBR Extensions - Placeholder hooks for subsurface scattering, fog, and post-lighting effects"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/materials/pbr_ibl",
    "path": "engine/reference/render/shaders/materials/pbr_ibl.md",
    "source": "engine/render/shaders/materials/pbr_ibl.js",
    "import": "/engine/render/shaders/materials/pbr_ibl.js",
    "sourceHash": "7b095a186166d13d41151af7311c5d137d38fe0026c3b8094670036a73d94332",
    "summary": "PBR IBL - Image-based lighting for diffuse irradiance and specular reflections",
    "exports": [
      {
        "name": "pbrIblWGSL",
        "kind": "constant",
        "signature": "pbrIblWGSL",
        "summary": "PBR IBL - Image-based lighting for diffuse irradiance and specular reflections"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/materials/pbr_material_uniforms",
    "path": "engine/reference/render/shaders/materials/pbr_material_uniforms.md",
    "source": "engine/render/shaders/materials/pbr_material_uniforms.js",
    "import": "/engine/render/shaders/materials/pbr_material_uniforms.js",
    "sourceHash": "cc82de9995330d1a22e55834d2e5b70f19e0a172ed2dc7436493954747253d2a",
    "summary": "PBR Material Uniforms - Standard material parameter bindings",
    "exports": [
      {
        "name": "pbrMaterialUniformsWGSL",
        "kind": "constant",
        "signature": "pbrMaterialUniformsWGSL",
        "summary": "PBR Material Uniforms - Standard material parameter bindings"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/materials/shadow_pcf",
    "path": "engine/reference/render/shaders/materials/shadow_pcf.md",
    "source": "engine/render/shaders/materials/shadow_pcf.js",
    "import": "/engine/render/shaders/materials/shadow_pcf.js",
    "sourceHash": "2ff3844dae92f0503d2eb0553a27e1402de7ab38c6fe8b0744cabfc2478a40b0",
    "summary": "Shadow PCF - Percentage-closer filtering for soft shadows",
    "exports": [
      {
        "name": "shadowPcfWGSL",
        "kind": "constant",
        "signature": "shadowPcfWGSL",
        "summary": "Shadow PCF - Percentage-closer filtering for soft shadows"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/materials/unlit_world",
    "path": "engine/reference/render/shaders/materials/unlit_world.md",
    "source": "engine/render/shaders/materials/unlit_world.js",
    "import": "/engine/render/shaders/materials/unlit_world.js",
    "sourceHash": "962475c5eacc6f6d64921799680c09e6454df8f9a1210ded7c6f4b0da203765a",
    "summary": "Unlit World Shader - Simple unlit rendering with checkerboard floor",
    "exports": [
      {
        "name": "unlitWorldWGSL",
        "kind": "constant",
        "signature": "unlitWorldWGSL",
        "summary": "Unlit World Shader - Simple unlit rendering with checkerboard floor"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/materials/voxel_world",
    "path": "engine/reference/render/shaders/materials/voxel_world.md",
    "source": "engine/render/shaders/materials/voxel_world.js",
    "import": "/engine/render/shaders/materials/voxel_world.js",
    "sourceHash": "940f04b1e6ed0d02531b08706917ad12b910dd04c7bdaa942061a4591df7c087",
    "summary": "",
    "exports": [
      {
        "name": "voxelWorldWGSL",
        "kind": "constant",
        "signature": "voxelWorldWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/anime_explosion",
    "path": "engine/reference/render/shaders/modules/chunks/anime_explosion.md",
    "source": "engine/render/shaders/modules/chunks/anime_explosion.js",
    "import": "/engine/render/shaders/modules/chunks/anime_explosion.js",
    "sourceHash": "2e5c8bac538a08773c9cbb3803b897dbdbb6fd624103b2ee15229067bcd26034",
    "summary": "Anime Explosion Effects Stylized explosion effects inspired by anime/manga aesthetics. Key Features: 1. Spiky burst shapes - Sharp radial spikes 2. Color banding - Discrete anime-style colors 3. Impact rays - Speed lines radiating outward 4. Shockwave rings - Expanding circular waves 5. Debris particles - Flying sparks and chunks 6. Smoke puffs - Stylized cloud shapes Functions: - explosionBurst(uv, time) - Main explosion shape - impactRays(uv, count, time) - Speed lines - shockwaveRing(uv, time, speed) - Expanding ring - animeColorBand(intensity, colors) - Discrete color steps",
    "exports": [
      {
        "name": "animeExplosionWGSL",
        "kind": "constant",
        "signature": "animeExplosionWGSL",
        "summary": "Anime Explosion Effects Stylized explosion effects inspired by anime/manga aesthetics. Key Features: 1. Spiky burst shapes - Sharp radial spikes 2. Color banding - Discrete anime-style colors 3. Impact rays - Speed lines radiating outward 4. Shockwave rings - Expanding circular waves 5. Debris particles - Flying sparks and chunks 6. Smoke puffs - Stylized cloud shapes Functions: - explosionBurst(uv, time) - Main explosion shape - impactRays(uv, count, time) - Speed lines - shockwaveRing(uv, time, speed) - Expanding ring - animeColorBand(intensity, colors) - Discrete color steps"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/anime_toon",
    "path": "engine/reference/render/shaders/modules/chunks/anime_toon.md",
    "source": "engine/render/shaders/modules/chunks/anime_toon.js",
    "import": "/engine/render/shaders/modules/chunks/anime_toon.js",
    "sourceHash": "784061c1fed2887e860cbaeccf11b5c8d3eb029de7fb81b36699e9f5f4905f0c",
    "summary": "Anime / Toon Shading Stylized rendering techniques for anime/manga aesthetic. Key Concepts: 1. Multi-step shading - Discrete color bands 2. Outline rendering - Edge detection 3. Specular highlights - Sharp anime-style 4. Rim lighting - Edge glow 5. Hatching/cross-hatching - Manga shadows 6. Subsurface scattering - Skin glow Eye/Face Functions: - animeEye() - Full eye with iris, highlights - animeBrow() - Eyebrow curves - animeBlush() - Cheek flush marks - animeMouth() - Lip curves",
    "exports": [
      {
        "name": "animeToonWGSL",
        "kind": "constant",
        "signature": "animeToonWGSL",
        "summary": "Anime / Toon Shading Stylized rendering techniques for anime/manga aesthetic. Key Concepts: 1. Multi-step shading - Discrete color bands 2. Outline rendering - Edge detection 3. Specular highlights - Sharp anime-style 4. Rim lighting - Edge glow 5. Hatching/cross-hatching - Manga shadows 6. Subsurface scattering - Skin glow Eye/Face Functions: - animeEye() - Full eye with iris, highlights - animeBrow() - Eyebrow curves - animeBlush() - Cheek flush marks - animeMouth() - Lip curves"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/area_lighting",
    "path": "engine/reference/render/shaders/modules/chunks/area_lighting.md",
    "source": "engine/render/shaders/modules/chunks/area_lighting.js",
    "import": "/engine/render/shaders/modules/chunks/area_lighting.js",
    "sourceHash": "8c1f5cf6a403a3e39b07323a318a5fdf531f47fc0fffbc0d6366b6c5894a4d78",
    "summary": "Area Lighting & Soft Shadows Physically-based area light calculations for soft shadows and lighting. Supports spherical lights and occluders. Key Concepts: 1. Sphere occlusion - AO contribution from nearby spheres 2. Area shadows - Soft shadows from spherical lights/occluders 3. Sphere area lights - Proper falloff for spherical emitters 4. Floor occlusion - Ground plane ambient darkening Functions: - sphOcclusion(pos, nor, sph) - AO from single sphere - sphAreaShadow(P, light, occluder) - Soft shadow - sphAreaLight(P, N, light) - Area light contribution - floorOcclusion(P, N, floorY) - Ground plane AO",
    "exports": [
      {
        "name": "areaLightingWGSL",
        "kind": "constant",
        "signature": "areaLightingWGSL",
        "summary": "Area Lighting & Soft Shadows Physically-based area light calculations for soft shadows and lighting. Supports spherical lights and occluders. Key Concepts: 1. Sphere occlusion - AO contribution from nearby spheres 2. Area shadows - Soft shadows from spherical lights/occluders 3. Sphere area lights - Proper falloff for spherical emitters 4. Floor occlusion - Ground plane ambient darkening Functions: - sphOcclusion(pos, nor, sph) - AO from single sphere - sphAreaShadow(P, light, occluder) - Soft shadow - sphAreaLight(P, N, light) - Area light contribution - floorOcclusion(P, N, floorY) - Ground plane AO"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/blend_math",
    "path": "engine/reference/render/shaders/modules/chunks/blend_math.md",
    "source": "engine/render/shaders/modules/chunks/blend_math.js",
    "import": "/engine/render/shaders/modules/chunks/blend_math.js",
    "sourceHash": "9fa67bcf2fbbc556af908b6c87947a6cc76cd85fa595198b991760f06163ad01",
    "summary": "Shared alpha compositing, separable blend, coverage, and ordered-dither helpers for WGSL.",
    "exports": [
      {
        "name": "blendMathWGSL",
        "kind": "constant",
        "signature": "blendMathWGSL",
        "summary": "Shared alpha compositing, separable blend, coverage, and ordered-dither helpers for WGSL."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/camera_utils",
    "path": "engine/reference/render/shaders/modules/chunks/camera_utils.md",
    "source": "engine/render/shaders/modules/chunks/camera_utils.js",
    "import": "/engine/render/shaders/modules/chunks/camera_utils.js",
    "sourceHash": "605e7280721b7ec4e83385c29d7bb4cc306f7feba9aaad9507f2a51ac25bc378",
    "summary": "Camera Utilities for Shaders Common camera operations for ray generation and view transforms. Used by: ray marching, ray tracing, post-processing Functions: - getCameraMatrix(ro, ta, roll) - Look-at camera matrix - getRay(uv, ro, ta) - Generate ray from UV and camera - screenToWorld(uv, invViewProj) - Unproject screen to world",
    "exports": [
      {
        "name": "cameraUtilsWGSL",
        "kind": "constant",
        "signature": "cameraUtilsWGSL",
        "summary": "Camera Utilities for Shaders Common camera operations for ray generation and view transforms. Used by: ray marching, ray tracing, post-processing Functions: - getCameraMatrix(ro, ta, roll) - Look-at camera matrix - getRay(uv, ro, ta) - Generate ray from UV and camera - screenToWorld(uv, invViewProj) - Unproject screen to world"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/color_math",
    "path": "engine/reference/render/shaders/modules/chunks/color_math.md",
    "source": "engine/render/shaders/modules/chunks/color_math.js",
    "import": "/engine/render/shaders/modules/chunks/color_math.js",
    "sourceHash": "d9217091d8ff8d79835336e003ba36cda05c652e17d8ec192c378aaa3878f2b2",
    "summary": "Shared sRGB, luminance, contrast, YUV/YCbCr, and tone-map helpers for WGSL.",
    "exports": [
      {
        "name": "colorMathWGSL",
        "kind": "constant",
        "signature": "colorMathWGSL",
        "summary": "Shared sRGB, luminance, contrast, YUV/YCbCr, and tone-map helpers for WGSL."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/denoise",
    "path": "engine/reference/render/shaders/modules/chunks/denoise.md",
    "source": "engine/render/shaders/modules/chunks/denoise.js",
    "import": "/engine/render/shaders/modules/chunks/denoise.js",
    "sourceHash": "38c87c529bff408ff483e0ad620edf67a64779261933338706854669c5f67245",
    "summary": "Denoising for Path Tracing Edge-aware filtering and temporal accumulation for noisy renders. Key Concepts: 1. À-Trous Wavelet Transform - Multi-scale edge-aware blur 2. Bilateral filtering - Edge-preserving smoothing 3. Temporal AA/Accumulation - Frame blending with clamping 4. YUV color space - Better for temporal clamping 5. SVGF-style weights - Color, normal, depth weighting",
    "exports": [
      {
        "name": "denoiseWGSL",
        "kind": "constant",
        "signature": "denoiseWGSL",
        "summary": "Denoising for Path Tracing Edge-aware filtering and temporal accumulation for noisy renders. Key Concepts: 1. À-Trous Wavelet Transform - Multi-scale edge-aware blur 2. Bilateral filtering - Edge-preserving smoothing 3. Temporal AA/Accumulation - Frame blending with clamping 4. YUV color space - Better for temporal clamping 5. SVGF-style weights - Color, normal, depth weighting"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/electricity",
    "path": "engine/reference/render/shaders/modules/chunks/electricity.md",
    "source": "engine/render/shaders/modules/chunks/electricity.js",
    "import": "/engine/render/shaders/modules/chunks/electricity.js",
    "sourceHash": "f591713b66bd2977b5d53b24ace818c6606441a223c963913ddbaf7aa1f6527d",
    "summary": "Electricity & Plasma Effects Patterns for lightning, plasma, energy beams, and electrical arcs. Key Concepts: 1. Simplex 3D noise - Smooth organic patterns 2. Sharp glow falloff - Electric intensity 3. Color intensification - Plasma color math 4. Animated distortion - Moving energy Functions: - simplex3d(p) - 3D simplex noise - electricNoise(p) - Multi-octave electric noise - plasmaGlow(intensity, falloff) - Sharp glow - electricArc(uv, time) - Lightning bolt pattern - plasmaColor(intensity, baseColor) - Energy coloring",
    "exports": [
      {
        "name": "electricityWGSL",
        "kind": "constant",
        "signature": "electricityWGSL",
        "summary": "Electricity & Plasma Effects Patterns for lightning, plasma, energy beams, and electrical arcs. Key Concepts: 1. Simplex 3D noise - Smooth organic patterns 2. Sharp glow falloff - Electric intensity 3. Color intensification - Plasma color math 4. Animated distortion - Moving energy Functions: - simplex3d(p) - 3D simplex noise - electricNoise(p) - Multi-octave electric noise - plasmaGlow(intensity, falloff) - Sharp glow - electricArc(uv, time) - Lightning bolt pattern - plasmaColor(intensity, baseColor) - Energy coloring"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/fire_turbulence",
    "path": "engine/reference/render/shaders/modules/chunks/fire_turbulence.md",
    "source": "engine/render/shaders/modules/chunks/fire_turbulence.js",
    "import": "/engine/render/shaders/modules/chunks/fire_turbulence.js",
    "sourceHash": "c1700e27a0c1b68f7527e50b03273c5e69de6d4195ac3c1e907d02251d545a33",
    "summary": "Fire & Turbulence Effects Reusable patterns for fire, smoke, and turbulent effects. Based on multi-frequency wave accumulation technique. Key Concepts: 1. Turbulence: Sum of cos() waves at increasing frequencies 2. Twist: Rotate XZ based on Y for spiral motion 3. Expansion: Divide by height for spreading flames 4. Hollow cone SDF: Classic flame silhouette shape Functions: - fireTurbulence(pos, time, octaves) - Multi-octave distortion - fireColor(heat, turbulence) - Heat-based color gradient - flameShape(pos) - Hollow cone distance field - twistPosition(pos, rate) - Helical twist transform",
    "exports": [
      {
        "name": "fireTurbulenceWGSL",
        "kind": "constant",
        "signature": "fireTurbulenceWGSL",
        "summary": "Fire & Turbulence Effects Reusable patterns for fire, smoke, and turbulent effects. Based on multi-frequency wave accumulation technique. Key Concepts: 1. Turbulence: Sum of cos() waves at increasing frequencies 2. Twist: Rotate XZ based on Y for spiral motion 3. Expansion: Divide by height for spreading flames 4. Hollow cone SDF: Classic flame silhouette shape Functions: - fireTurbulence(pos, time, octaves) - Multi-octave distortion - fireColor(heat, turbulence) - Heat-based color gradient - flameShape(pos) - Hollow cone distance field - twistPosition(pos, rate) - Helical twist transform"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/fractal_edges",
    "path": "engine/reference/render/shaders/modules/chunks/fractal_edges.md",
    "source": "engine/render/shaders/modules/chunks/fractal_edges.js",
    "import": "/engine/render/shaders/modules/chunks/fractal_edges.js",
    "sourceHash": "caae5cdb1f034c19438ecb84c4b948592c6c0a044710fff45d47a4367e11c91f",
    "summary": "Fractal & Edge Detection Effects Raymarching fractals with stylized edge rendering. Key Concepts: 1. Fractal distance functions - Amazing Surface, Mandelbulb, etc. 2. Edge detection via Laplacian - Dark outlines from SDF 3. Normal-based coloring - No lighting, just normal as color 4. Rainbow/color bands - Animated stripes 5. Stylized sky/sun - Radial gradient with rays 6. Camera path animation - Smooth path following",
    "exports": [
      {
        "name": "fractalEdgesWGSL",
        "kind": "constant",
        "signature": "fractalEdgesWGSL",
        "summary": "Fractal & Edge Detection Effects Raymarching fractals with stylized edge rendering. Key Concepts: 1. Fractal distance functions - Amazing Surface, Mandelbulb, etc. 2. Edge detection via Laplacian - Dark outlines from SDF 3. Normal-based coloring - No lighting, just normal as color 4. Rainbow/color bands - Animated stripes 5. Stylized sky/sun - Radial gradient with rays 6. Camera path animation - Smooth path following"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/fullscreen_quad",
    "path": "engine/reference/render/shaders/modules/chunks/fullscreen_quad.md",
    "source": "engine/render/shaders/modules/chunks/fullscreen_quad.js",
    "import": "/engine/render/shaders/modules/chunks/fullscreen_quad.js",
    "sourceHash": "6f2178e987734dbbf00b75bb4930a819c4ee8b62ad1d530ea1c7e685019cb304",
    "summary": "Fullscreen Quad Vertex Shader - Reusable for post-processing effects Renders a fullscreen triangle (more efficient than quad) using vertex index. No vertex buffer needed - just draw 3 vertices. Usage: const myPostFx = `${fullscreenQuadVertexWGSL}${myFragmentShader}`;",
    "exports": [
      {
        "name": "fullscreenQuadVertexWGSL",
        "kind": "constant",
        "signature": "fullscreenQuadVertexWGSL",
        "summary": "Fullscreen Quad Vertex Shader - Reusable for post-processing effects Renders a fullscreen triangle (more efficient than quad) using vertex index. No vertex buffer needed - just draw 3 vertices. Usage: const myPostFx = `${fullscreenQuadVertexWGSL}${myFragmentShader}`;"
      },
      {
        "name": "fullscreenQuadExplicitWGSL",
        "kind": "constant",
        "signature": "fullscreenQuadExplicitWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/lighting_common",
    "path": "engine/reference/render/shaders/modules/chunks/lighting_common.md",
    "source": "engine/render/shaders/modules/chunks/lighting_common.js",
    "import": "/engine/render/shaders/modules/chunks/lighting_common.js",
    "sourceHash": "3d443be2b8617ddc62f98b619f11e10767275bedaf3fd5973eb06848cf2742a2",
    "summary": "",
    "exports": [
      {
        "name": "lightAttenuationWGSL",
        "kind": "constant",
        "signature": "lightAttenuationWGSL",
        "summary": ""
      },
      {
        "name": "diffuseLightingWGSL",
        "kind": "constant",
        "signature": "diffuseLightingWGSL",
        "summary": ""
      },
      {
        "name": "specularLightingWGSL",
        "kind": "constant",
        "signature": "specularLightingWGSL",
        "summary": ""
      },
      {
        "name": "lightCalculationWGSL",
        "kind": "constant",
        "signature": "lightCalculationWGSL",
        "summary": ""
      },
      {
        "name": "lightingModuleWGSL",
        "kind": "constant",
        "signature": "lightingModuleWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/magic_effects",
    "path": "engine/reference/render/shaders/modules/chunks/magic_effects.md",
    "source": "engine/render/shaders/modules/chunks/magic_effects.js",
    "import": "/engine/render/shaders/modules/chunks/magic_effects.js",
    "sourceHash": "78a655451f7e8f56bf0abed5928549b590f4eefc0c9d308dbfa90749b209d886",
    "summary": "",
    "exports": [
      {
        "name": "magicEffectsWGSL",
        "kind": "constant",
        "signature": "magicEffectsWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/math_common",
    "path": "engine/reference/render/shaders/modules/chunks/math_common.md",
    "source": "engine/render/shaders/modules/chunks/math_common.js",
    "import": "/engine/render/shaders/modules/chunks/math_common.js",
    "sourceHash": "c76c486d61921a52d0b55b4c87fd9a552aff3dbd7db3fa4487915473db80fbfd",
    "summary": "Shared Math Constants & Utilities for WGSL Shaders Usage: Import and concatenate at the beginning of shaders that need these. Example: `${mathCommonWGSL}` + yourShaderCode",
    "exports": [
      {
        "name": "mathCommonWGSL",
        "kind": "constant",
        "signature": "mathCommonWGSL",
        "summary": "Shared Math Constants & Utilities for WGSL Shaders Usage: Import and concatenate at the beginning of shaders that need these. Example: `${mathCommonWGSL}` + yourShaderCode"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/noise2d",
    "path": "engine/reference/render/shaders/modules/chunks/noise2d.md",
    "source": "engine/render/shaders/modules/chunks/noise2d.js",
    "import": "/engine/render/shaders/modules/chunks/noise2d.js",
    "sourceHash": "187bff708031dd49d8b8aa50c51bd086a75c30300a548654748e182a4895658d",
    "summary": "Shared 2D Noise Functions for WGSL Shaders Used by: particles_billboard, volume_smoke, future effects Functions provided: - hash2d(p) - Pseudo-random hash for 2D position - noise2d(p) - Smooth value noise - fbm2d(p) - Fractal Brownian Motion (4 octaves)",
    "exports": [
      {
        "name": "noise2dWGSL",
        "kind": "constant",
        "signature": "noise2dWGSL",
        "summary": "Shared 2D Noise Functions for WGSL Shaders Used by: particles_billboard, volume_smoke, future effects Functions provided: - hash2d(p) - Pseudo-random hash for 2D position - noise2d(p) - Smooth value noise - fbm2d(p) - Fractal Brownian Motion (4 octaves)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/noise3d",
    "path": "engine/reference/render/shaders/modules/chunks/noise3d.md",
    "source": "engine/render/shaders/modules/chunks/noise3d.js",
    "import": "/engine/render/shaders/modules/chunks/noise3d.js",
    "sourceHash": "a74606f0a74c2a1cffdb0ecccabc85e4884f7ae11842e21c3a7cabdb2f9c2d4c",
    "summary": "Shared 3D Noise Functions for WGSL Shaders Used by: volume_smoke, future volumetric effects Functions provided: - hash3d(p) - Pseudo-random hash for 3D position - noise3d(p) - Smooth value noise - fbm3d(p, octaves) - Fractal Brownian Motion (variable octaves) - fbm3dRotated(p, octaves) - FBM with rotation between octaves (reduces banding) - fbm3dVec(p) - Returns 3 independent noise values for domain warping - domainWarp(p, scale, intensity) - Warp position for organic turbulence",
    "exports": [
      {
        "name": "noise3dWGSL",
        "kind": "constant",
        "signature": "noise3dWGSL",
        "summary": "Shared 3D Noise Functions for WGSL Shaders Used by: volume_smoke, future volumetric effects Functions provided: - hash3d(p) - Pseudo-random hash for 3D position - noise3d(p) - Smooth value noise - fbm3d(p, octaves) - Fractal Brownian Motion (variable octaves) - fbm3dRotated(p, octaves) - FBM with rotation between octaves (reduces banding) - fbm3dVec(p) - Returns 3 independent noise values for domain warping - domainWarp(p, scale, intensity) - Warp position for organic turbulence"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/packing",
    "path": "engine/reference/render/shaders/modules/chunks/packing.md",
    "source": "engine/render/shaders/modules/chunks/packing.js",
    "import": "/engine/render/shaders/modules/chunks/packing.js",
    "sourceHash": "51cd4ab99a5e4533480ffac33475adf3555036e81dd1b0a4d2e9a0240d4f622c",
    "summary": "Normalized integer packing helpers mirrored from engine/core/math/MathPacking.js.",
    "exports": [
      {
        "name": "packingWGSL",
        "kind": "constant",
        "signature": "packingWGSL",
        "summary": "Normalized integer packing helpers mirrored from engine/core/math/MathPacking.js."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/pathtracing_gi",
    "path": "engine/reference/render/shaders/modules/chunks/pathtracing_gi.md",
    "source": "engine/render/shaders/modules/chunks/pathtracing_gi.js",
    "import": "/engine/render/shaders/modules/chunks/pathtracing_gi.js",
    "sourceHash": "43ed14dfb61a8f28d6c4f252ef95b48b6cb7e989c836c1da5654c196e9bb0942",
    "summary": "",
    "exports": [
      {
        "name": "pathtracingGIWGSL",
        "kind": "constant",
        "signature": "pathtracingGIWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/pbr_materials",
    "path": "engine/reference/render/shaders/modules/chunks/pbr_materials.md",
    "source": "engine/render/shaders/modules/chunks/pbr_materials.js",
    "import": "/engine/render/shaders/modules/chunks/pbr_materials.js",
    "sourceHash": "8c0318b5759833a31c76590f1d7097d0d83da734a886dbec3f5f9d6c20db9775",
    "summary": "PBR Materials for Path Tracing Physically-based materials with roughness, metallic, and Fresnel. Key Concepts: 1. Fresnel-Schlick - Reflectance at grazing angles 2. GGX/Roughness sampling - Importance sampling for specular 3. Metallic workflow - Dielectric vs conductor 4. Glass/refraction - Transparent materials 5. Energy conservation - Diffuse + specular balance",
    "exports": [
      {
        "name": "pbrMaterialsWGSL",
        "kind": "constant",
        "signature": "pbrMaterialsWGSL",
        "summary": "PBR Materials for Path Tracing Physically-based materials with roughness, metallic, and Fresnel. Key Concepts: 1. Fresnel-Schlick - Reflectance at grazing angles 2. GGX/Roughness sampling - Importance sampling for specular 3. Metallic workflow - Dielectric vs conductor 4. Glass/refraction - Transparent materials 5. Energy conservation - Diffuse + specular balance"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/quadtree",
    "path": "engine/reference/render/shaders/modules/chunks/quadtree.md",
    "source": "engine/render/shaders/modules/chunks/quadtree.js",
    "import": "/engine/render/shaders/modules/chunks/quadtree.js",
    "sourceHash": "67ddbe92c5a4f22a0556762ec76e1773d58f34900cb0fafade7c617a3aec2a67",
    "summary": "Quadtree / Recursive Cell Pattern Helpers (WGSL) Port of a Shadertoy-style quadtree zoom pattern into reusable WGSL. Functions: - quadtreeCellLevel(uv, time, maxLevels, baseRadius, resolutionY) Returns how deep the recursive subdivision went and a mask for the disc. - quadtreeMask(uv, time) Simple convenience wrapper returning a [0,1] mask based on level.",
    "exports": [
      {
        "name": "quadtreeWGSL",
        "kind": "constant",
        "signature": "quadtreeWGSL",
        "summary": "Quadtree / Recursive Cell Pattern Helpers (WGSL) Port of a Shadertoy-style quadtree zoom pattern into reusable WGSL. Functions: - quadtreeCellLevel(uv, time, maxLevels, baseRadius, resolutionY) Returns how deep the recursive subdivision went and a mask for the disc. - quadtreeMask(uv, time) Simple convenience wrapper returning a [0,1] mask based on level."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/quaternion",
    "path": "engine/reference/render/shaders/modules/chunks/quaternion.md",
    "source": "engine/render/shaders/modules/chunks/quaternion.js",
    "import": "/engine/render/shaders/modules/chunks/quaternion.js",
    "sourceHash": "343928d6d6112ea1846c7a5af88ec8c82e818ecc4ca0de1d8b0212888fb3e7df",
    "summary": "Quaternion Math for Shader Animation Full quaternion operations for skeletal animation and rotation. Key Concepts: 1. Quaternion multiplication - Compose rotations 2. Quaternion inverse/conjugate - Reverse rotation 3. Slerp interpolation - Smooth rotation blending 4. Point rotation - Apply quaternion to position 5. Matrix conversion - Quaternion to mat4 Functions: - quaternionMul(a, b) - Multiply quaternions - quaternionInverse(q) - Inverse rotation - quaternionSlerp(a, b, t) - Spherical interpolation - rotatePoint(p, center, q) - Rotate point - quaternionToMatrix(q, offset) - Convert to mat4",
    "exports": [
      {
        "name": "quaternionWGSL",
        "kind": "constant",
        "signature": "quaternionWGSL",
        "summary": "Quaternion Math for Shader Animation Full quaternion operations for skeletal animation and rotation. Key Concepts: 1. Quaternion multiplication - Compose rotations 2. Quaternion inverse/conjugate - Reverse rotation 3. Slerp interpolation - Smooth rotation blending 4. Point rotation - Apply quaternion to position 5. Matrix conversion - Quaternion to mat4 Functions: - quaternionMul(a, b) - Multiply quaternions - quaternionInverse(q) - Inverse rotation - quaternionSlerp(a, b, t) - Spherical interpolation - rotatePoint(p, center, q) - Rotate point - quaternionToMatrix(q, offset) - Convert to mat4"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/ray_intersect",
    "path": "engine/reference/render/shaders/modules/chunks/ray_intersect.md",
    "source": "engine/render/shaders/modules/chunks/ray_intersect.js",
    "import": "/engine/render/shaders/modules/chunks/ray_intersect.js",
    "sourceHash": "1837b9a4d51bad83321cfe1c5e95c61d62a97c5b36ab1d147431fed23ca283f2",
    "summary": "Ray-Primitive Intersection Library Analytic ray intersection routines for various geometric primitives. Returns intersection distance and surface normal. All functions follow the pattern: fn iShape(ro, rd, ...) -> RayHit Where RayHit contains: - dist: distance along ray (MAX_RAY_DIST if no hit) - normal: surface normal at intersection Primitives: - Plane, Disk - Sphere, Ellipsoid - Box, Rounded Box - Cylinder, Capsule - Cone, Rounded Cone - Torus - Triangle, Quad",
    "exports": [
      {
        "name": "rayIntersectWGSL",
        "kind": "constant",
        "signature": "rayIntersectWGSL",
        "summary": "Ray-Primitive Intersection Library Analytic ray intersection routines for various geometric primitives. Returns intersection distance and surface normal. All functions follow the pattern: fn iShape(ro, rd, ...) -> RayHit Where RayHit contains: - dist: distance along ray (MAX_RAY_DIST if no hit) - normal: surface normal at intersection Primitives: - Plane, Disk - Sphere, Ellipsoid - Box, Rounded Box - Cylinder, Capsule - Cone, Rounded Cone - Torus - Triangle, Quad"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/ray_termination",
    "path": "engine/reference/render/shaders/modules/chunks/ray_termination.md",
    "source": "engine/render/shaders/modules/chunks/ray_termination.js",
    "import": "/engine/render/shaders/modules/chunks/ray_termination.js",
    "sourceHash": "afa47f67300c9cc5b8a0cff8195131916c19766a445f584e69d71e2fc4f8f70e",
    "summary": "",
    "exports": [
      {
        "name": "rayTerminationWGSL",
        "kind": "constant",
        "signature": "rayTerminationWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/ray_tracing",
    "path": "engine/reference/render/shaders/modules/chunks/ray_tracing.md",
    "source": "engine/render/shaders/modules/chunks/ray_tracing.js",
    "import": "/engine/render/shaders/modules/chunks/ray_tracing.js",
    "sourceHash": "19060cc646c814fad8b8ca8af71a4e672fdc92335a4a9e525f17398543d8a188",
    "summary": "Ray Tracing Utilities Helper functions for path tracing and ray-based rendering. Includes materials, sampling, and lighting utilities. Functions: - Material handling (Lambertian, Metal, Dielectric) - Random sampling (hemisphere, disk, importance sampling) - Fresnel and BRDF calculations - Sky/environment sampling",
    "exports": [
      {
        "name": "rayTracingWGSL",
        "kind": "constant",
        "signature": "rayTracingWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/raymarching",
    "path": "engine/reference/render/shaders/modules/chunks/raymarching.md",
    "source": "engine/render/shaders/modules/chunks/raymarching.js",
    "import": "/engine/render/shaders/modules/chunks/raymarching.js",
    "sourceHash": "d991d037f2f953de380e26114c0b37af0361c9bc06f845f8c7bb1bd60d36d784",
    "summary": "",
    "exports": [
      {
        "name": "rayBoxIntersectWGSL",
        "kind": "constant",
        "signature": "rayBoxIntersectWGSL",
        "summary": ""
      },
      {
        "name": "raySphereIntersectWGSL",
        "kind": "constant",
        "signature": "raySphereIntersectWGSL",
        "summary": ""
      },
      {
        "name": "depthUtilsWGSL",
        "kind": "constant",
        "signature": "depthUtilsWGSL",
        "summary": ""
      },
      {
        "name": "trilinearSampleWGSL",
        "kind": "constant",
        "signature": "trilinearSampleWGSL",
        "summary": ""
      },
      {
        "name": "phaseFunctionsWGSL",
        "kind": "constant",
        "signature": "phaseFunctionsWGSL",
        "summary": ""
      },
      {
        "name": "beerLambertWGSL",
        "kind": "constant",
        "signature": "beerLambertWGSL",
        "summary": ""
      },
      {
        "name": "raymarchingModuleWGSL",
        "kind": "constant",
        "signature": "raymarchingModuleWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/restir_guide_policy",
    "path": "engine/reference/render/shaders/modules/chunks/restir_guide_policy.md",
    "source": "engine/render/shaders/modules/chunks/restir_guide_policy.js",
    "import": "/engine/render/shaders/modules/chunks/restir_guide_policy.js",
    "sourceHash": "92c27dcbfb15f8139ad652fec9e7e9d6c3e443ccadd4ccfae0bc307a20cd0549",
    "summary": "",
    "exports": [
      {
        "name": "restirGuidePolicyWGSL",
        "kind": "constant",
        "signature": "restirGuidePolicyWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/sdf_primitives",
    "path": "engine/reference/render/shaders/modules/chunks/sdf_primitives.md",
    "source": "engine/render/shaders/modules/chunks/sdf_primitives.js",
    "import": "/engine/render/shaders/modules/chunks/sdf_primitives.js",
    "sourceHash": "5bffa7e2d55c5ebbcb705397a6997f2018ec24cfb4b2b3c835a5c7cf249a6cac",
    "summary": "Signed Distance Field Primitives Common SDF shapes for ray marching. Used by: volume rendering, procedural geometry, collision detection Functions: - sdSphere(p, r) - Sphere SDF - sdBox(p, b) - Box SDF - sdPlane(p, n) - Plane SDF (n.xyz = normal, n.w = distance) - sdCapsule(p, a, b, r) - Capsule/cylinder SDF - sdTorus(p, t) - Torus SDF - opUnion(d1, d2) - Union of two SDFs - opSubtract(d1, d2) - Subtraction (d1 - d2) - opIntersect(d1, d2) - Intersection - opSmoothUnion(d1, d2, k) - Smooth blend union",
    "exports": [
      {
        "name": "sdfPrimitivesWGSL",
        "kind": "constant",
        "signature": "sdfPrimitivesWGSL",
        "summary": "Signed Distance Field Primitives Common SDF shapes for ray marching. Used by: volume rendering, procedural geometry, collision detection Functions: - sdSphere(p, r) - Sphere SDF - sdBox(p, b) - Box SDF - sdPlane(p, n) - Plane SDF (n.xyz = normal, n.w = distance) - sdCapsule(p, a, b, r) - Capsule/cylinder SDF - sdTorus(p, t) - Torus SDF - opUnion(d1, d2) - Union of two SDFs - opSubtract(d1, d2) - Subtraction (d1 - d2) - opIntersect(d1, d2) - Intersection - opSmoothUnion(d1, d2, k) - Smooth blend union"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/shadows_ao",
    "path": "engine/reference/render/shaders/modules/chunks/shadows_ao.md",
    "source": "engine/render/shaders/modules/chunks/shadows_ao.js",
    "import": "/engine/render/shaders/modules/chunks/shadows_ao.js",
    "sourceHash": "b6f2142015d0894818ab4ed8cc43a736b36bbaa522a29391b9df7f1cd1bc3c63",
    "summary": "Soft Shadows and Ambient Occlusion for Ray Marching Used by: SDF rendering, volumetric effects, global illumination Functions: - calcSoftShadow(ro, rd, sceneSDF, mint, maxt, k) - Penumbra soft shadows - calcAO(pos, nor, sceneSDF) - Ambient occlusion via ray marching - calcHardShadow(ro, rd, sceneSDF, mint, maxt) - Binary shadow test",
    "exports": [
      {
        "name": "shadowsAoWGSL",
        "kind": "constant",
        "signature": "shadowsAoWGSL",
        "summary": "Soft Shadows and Ambient Occlusion for Ray Marching Used by: SDF rendering, volumetric effects, global illumination Functions: - calcSoftShadow(ro, rd, sceneSDF, mint, maxt, k) - Penumbra soft shadows - calcAO(pos, nor, sceneSDF) - Ambient occlusion via ray marching - calcHardShadow(ro, rd, sceneSDF, mint, maxt) - Binary shadow test"
      },
      {
        "name": "shadowsAoMacrosWGSL",
        "kind": "constant",
        "signature": "shadowsAoMacrosWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/spell_particles",
    "path": "engine/reference/render/shaders/modules/chunks/spell_particles.md",
    "source": "engine/render/shaders/modules/chunks/spell_particles.js",
    "import": "/engine/render/shaders/modules/chunks/spell_particles.js",
    "sourceHash": "6708aaf17cb9e133e8189f2a8f36e106b9eb4bcdb6d05b3323bf9a5e297b7828",
    "summary": "Spell Particle Effects - WGSL Shader Chunk Particle behaviors for spell effects including projectiles, shields, auras, and various magical effects.",
    "exports": [
      {
        "name": "spellParticlesWGSL",
        "kind": "constant",
        "signature": "spellParticlesWGSL",
        "summary": "Spell Particle Effects - WGSL Shader Chunk Particle behaviors for spell effects including projectiles, shields, auras, and various magical effects."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/structs_common",
    "path": "engine/reference/render/shaders/modules/chunks/structs_common.md",
    "source": "engine/render/shaders/modules/chunks/structs_common.js",
    "import": "/engine/render/shaders/modules/chunks/structs_common.js",
    "sourceHash": "40d552dfa639ee82206128385d97ebcd8b72e36f3971f0a3e26da9bafe77f08d",
    "summary": "",
    "exports": [
      {
        "name": "lightStructWGSL",
        "kind": "constant",
        "signature": "lightStructWGSL",
        "summary": ""
      },
      {
        "name": "cameraStructWGSL",
        "kind": "constant",
        "signature": "cameraStructWGSL",
        "summary": ""
      },
      {
        "name": "frameUniformsWGSL",
        "kind": "constant",
        "signature": "frameUniformsWGSL",
        "summary": ""
      },
      {
        "name": "pbrMaterialStructWGSL",
        "kind": "constant",
        "signature": "pbrMaterialStructWGSL",
        "summary": ""
      },
      {
        "name": "standardVertexOutputWGSL",
        "kind": "constant",
        "signature": "standardVertexOutputWGSL",
        "summary": ""
      },
      {
        "name": "fullscreenVertexOutputWGSL",
        "kind": "constant",
        "signature": "fullscreenVertexOutputWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/temporal_aa",
    "path": "engine/reference/render/shaders/modules/chunks/temporal_aa.md",
    "source": "engine/render/shaders/modules/chunks/temporal_aa.js",
    "import": "/engine/render/shaders/modules/chunks/temporal_aa.js",
    "sourceHash": "a6951772dd79ce5902cc1aec1099b3f4c5cccf9100868e7b5f2c6b075da8e0a3",
    "summary": "Temporal Anti-Aliasing (TAA) Utilities Functions for implementing high-quality temporal anti-aliasing. Key Concepts: 1. Jittered sampling (Halton sequence) 2. History reprojection 3. Neighborhood clamping (ghosting prevention) 4. YCoCg color space (better clamping) 5. Catmull-Rom history sampling 6. Sharpening filter Functions: - halton23(index) - Halton 2,3 sequence for jitter - rgb2YCoCg / yCoCg2Rgb - Color space conversion - clipToBox - Neighborhood clamping - catmullRomSample - High quality history sampling",
    "exports": [
      {
        "name": "temporalAAWGSL",
        "kind": "constant",
        "signature": "temporalAAWGSL",
        "summary": "Temporal Anti-Aliasing (TAA) Utilities Functions for implementing high-quality temporal anti-aliasing. Key Concepts: 1. Jittered sampling (Halton sequence) 2. History reprojection 3. Neighborhood clamping (ghosting prevention) 4. YCoCg color space (better clamping) 5. Catmull-Rom history sampling 6. Sharpening filter Functions: - halton23(index) - Halton 2,3 sequence for jitter - rgb2YCoCg / yCoCg2Rgb - Color space conversion - clipToBox - Neighborhood clamping - catmullRomSample - High quality history sampling"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/texture_math",
    "path": "engine/reference/render/shaders/modules/chunks/texture_math.md",
    "source": "engine/render/shaders/modules/chunks/texture_math.js",
    "import": "/engine/render/shaders/modules/chunks/texture_math.js",
    "sourceHash": "422ead92e8516de4a7572024f922f79c2a312ca1ce430330cec087fac6def077",
    "summary": "Shared texture coordinate, mip, atlas, and virtual-texture helpers for WGSL.",
    "exports": [
      {
        "name": "textureMathWGSL",
        "kind": "constant",
        "signature": "textureMathWGSL",
        "summary": "Shared texture coordinate, mip, atlas, and virtual-texture helpers for WGSL."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/volumetric_clouds",
    "path": "engine/reference/render/shaders/modules/chunks/volumetric_clouds.md",
    "source": "engine/render/shaders/modules/chunks/volumetric_clouds.js",
    "import": "/engine/render/shaders/modules/chunks/volumetric_clouds.js",
    "sourceHash": "08031ecd713934199694d8ad9a6d0315f2971f50cb6c09839ba88040e93f83b6",
    "summary": "Volumetric Clouds & Fog Rendering Advanced volumetric rendering with dynamic step size and fog integration. Key Concepts: 1. Deformed periodic grid noise - Cheap volume noise 2. Dynamic step size - Adaptive raymarch based on density 3. Fog integral difference - Proper fog accumulation 4. Multi-octave displacement - FBM-like volume noise 5. Saturation-preserving interpolation - Better color blending",
    "exports": [
      {
        "name": "volumetricCloudsWGSL",
        "kind": "constant",
        "signature": "volumetricCloudsWGSL",
        "summary": "Volumetric Clouds & Fog Rendering Advanced volumetric rendering with dynamic step size and fog integration. Key Concepts: 1. Deformed periodic grid noise - Cheap volume noise 2. Dynamic step size - Adaptive raymarch based on density 3. Fog integral difference - Proper fog accumulation 4. Multi-octave displacement - FBM-like volume noise 5. Saturation-preserving interpolation - Better color blending"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/voronoi",
    "path": "engine/reference/render/shaders/modules/chunks/voronoi.md",
    "source": "engine/render/shaders/modules/chunks/voronoi.js",
    "import": "/engine/render/shaders/modules/chunks/voronoi.js",
    "sourceHash": "5721f3b1952a86fc73a50f967701e6d9edae29a107a3c34c2af97607c8e4deb9",
    "summary": "Voronoi & Cellular Noise Patterns Functions for voronoi diagrams, cellular textures, and organic patterns. Key Concepts: 1. Voronoi cells - Animated cellular patterns 2. Smooth voronoi - Blended cell boundaries 3. Polar coordinates - Radial patterns 4. Ring patterns - Concentric ripples 5. FBM with rotation - Reduced axis artifacts Functions: - voronoi2d(p, time) - Basic 2D voronoi - voronoiSmooth(p, w, time) - Smoothed cell edges - toPolar(v) - Cartesian to polar - ringPattern(p, time) - Concentric rings with noise",
    "exports": [
      {
        "name": "voronoiWGSL",
        "kind": "constant",
        "signature": "voronoiWGSL",
        "summary": "Voronoi & Cellular Noise Patterns Functions for voronoi diagrams, cellular textures, and organic patterns. Key Concepts: 1. Voronoi cells - Animated cellular patterns 2. Smooth voronoi - Blended cell boundaries 3. Polar coordinates - Radial patterns 4. Ring patterns - Concentric ripples 5. FBM with rotation - Reduced axis artifacts Functions: - voronoi2d(p, time) - Basic 2D voronoi - voronoiSmooth(p, w, time) - Smoothed cell edges - toPolar(v) - Cartesian to polar - ringPattern(p, time) - Concentric rings with noise"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/chunks/voxel_world",
    "path": "engine/reference/render/shaders/modules/chunks/voxel_world.md",
    "source": "engine/render/shaders/modules/chunks/voxel_world.js",
    "import": "/engine/render/shaders/modules/chunks/voxel_world.js",
    "sourceHash": "a22a0a9eaf778bd4434bcfb2adb16a0b9b45a1df11a27a406c8cf78b006c6d50",
    "summary": "Voxel World Module - shared terrain functions for voxel-style materials. This chunk does NOT declare entry points. It only provides reusable WGSL helpers for triplanar noise, terrain palette, and voxel edge darkening.",
    "exports": [
      {
        "name": "voxelWorldModuleWGSL",
        "kind": "constant",
        "signature": "voxelWorldModuleWGSL",
        "summary": "Voxel World Module - shared terrain functions for voxel-style materials. This chunk does NOT declare entry points. It only provides reusable WGSL helpers for triplanar noise, terrain palette, and voxel edge darkening."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/compute/gpu_tile",
    "path": "engine/reference/render/shaders/modules/compute/gpu_tile.md",
    "source": "engine/render/shaders/modules/compute/gpu_tile.js",
    "import": "/engine/render/shaders/modules/compute/gpu_tile.js",
    "sourceHash": "b3e499f3c87c68734e2b01e47cd1c119c47914af08035bd5ae7784a0a42721b4",
    "summary": "GpuTile - WebGPU workgroup shared-memory tile (WebGPU equivalent of NVIDIA cuda-tile) Inspired by: https://github.com/NVIDIA/cuda-tile CONCEPT: Every thread in a workgroup cooperatively loads one element of a global buffer into fast workgroup-shared memory (\"the tile\"), then ALL threads process the cached tile before advancing to the next tile.  This amortises global-memory latency across the whole group — the same idea that makes tiled matrix-multiply orders of magnitude faster than naive O(N²) reads. CUDA term         WebGPU/WGSL equivalent ─────────────     ───────────────────── __shared__        var<workgroup> template<T,N>     JS class with type / tileSize parameters (build-time) __syncthreads()   workgroupBarrier() threadIdx.x       @builtin(local_invocation_id) USAGE (JavaScript side, shader build-time): import { GpuTile } from \".../modules/compute/gpu_tile.js\"; const bodyTile = new GpuTile({ name: 'bodyTile', type: 'vec4f', tileSize: 64 }); const shader = ` // --- module scope --- ${bodyTile.declareWGSL()} @compute @workgroup_size(64) fn cs(@builtin(global_invocation_id) gid: vec3u, @builtin(local_invocation_id)  lid: vec3u) { let i   = gid.x; let myPos = bodies[i].pos.xyz; var acc = vec3f(0.); ${bodyTile.tiledLoopWGSL({ bufExpr:   'bodies',        // storage buffer binding name elemExpr:  'b.pos',         // expression to extract from element countExpr: 'u.count', lidExpr:   'lid.x', bodyWGSL: ` for (var k = 0u; k < _bodyTile_len; k++) { let b = ${bodyTile.getWGSL('k')}; let d = b.xyz - myPos; acc += d / (dot(d,d) + 0.01); }` })} } `; ADVANCED — multiple simultaneous tiles: Give each a unique `name` so their var<workgroup> identifiers don't collide. const posTile = new GpuTile({ name: 'posTile', type: 'vec4f', tileSize: 64 }); const velTile = new GpuTile({ name: 'velTile', type: 'vec4f', tileSize: 64 }); // In shader: ${posTile.declareWGSL()} ${velTile.declareWGSL()}",
    "exports": [
      {
        "name": "GpuTile",
        "kind": "class",
        "signature": "class GpuTile",
        "summary": "GpuTile - WebGPU workgroup shared-memory tile (WebGPU equivalent of NVIDIA cuda-tile) Inspired by: https://github.com/NVIDIA/cuda-tile CONCEPT: Every thread in a workgroup cooperatively loads one element of a global buffer into fast workgroup-shared memory (\"the tile\"), then ALL threads process the cached tile before advancing to the next tile.  This amortises global-memory latency across the whole group — the same idea that makes tiled matrix-multiply orders of magnitude faster than naive O(N²) reads. CUDA term         WebGPU/WGSL equivalent ─────────────     ───────────────────── __shared__        var<workgroup> template<T,N>     JS class with type / tileSize parameters (build-time) __syncthreads()   workgroupBarrier() threadIdx.x       @builtin(local_invocation_id) USAGE (JavaScript side, shader build-time): import { GpuTile } from \".../modules/compute/gpu_tile.js\"; const bodyTile = new GpuTile({ name: 'bodyTile', type: 'vec4f', tileSize: 64 }); const shader = ` // --- module scope --- ${bodyTile.declareWGSL()} @compute @workgroup_size(64) fn cs(@builtin(global_invocation_id) gid: vec3u, @builtin(local_invocation_id)  lid: vec3u) { let i   = gid.x; let myPos = bodies[i].pos.xyz; var acc = vec3f(0.); ${bodyTile.tiledLoopWGSL({ bufExpr:   'bodies',        // storage buffer binding name elemExpr:  'b.pos',         // expression to extract from element countExpr: 'u.count', lidExpr:   'lid.x', bodyWGSL: ` for (var k = 0u; k < _bodyTile_len; k++) { let b = ${bodyTile.getWGSL('k')}; let d = b.xyz - myPos; acc += d / (dot(d,d) + 0.01); }` })} } `; ADVANCED — multiple simultaneous tiles: Give each a unique `name` so their var<workgroup> identifiers don't collide. const posTile = new GpuTile({ name: 'posTile', type: 'vec4f', tileSize: 64 }); const velTile = new GpuTile({ name: 'velTile', type: 'vec4f', tileSize: 64 }); // In shader: ${posTile.declareWGSL()} ${velTile.declareWGSL()}"
      },
      {
        "name": "gpuTile",
        "kind": "function",
        "signature": "gpuTile(opts)",
        "summary": "Convenience factory — same as `new GpuTile(opts)`."
      },
      {
        "name": "TILED_NBODY_EXAMPLE_WGSL",
        "kind": "function",
        "signature": "TILED_NBODY_EXAMPLE_WGSL()",
        "summary": "Ready-to-paste WGSL string demonstrating the 64-thread tiled N-body pattern. This is the same code used in the playground N-Body demo, expressed via GpuTile."
      },
      {
        "name": "VEC4_TILE_64",
        "kind": "constant",
        "signature": "VEC4_TILE_64",
        "summary": "vec4f tile, 64 threads — matches the N-Body pattern exactly"
      },
      {
        "name": "VEC4_TILE_128",
        "kind": "constant",
        "signature": "VEC4_TILE_128",
        "summary": "vec4f tile, 128 threads — good for higher-throughput passes"
      },
      {
        "name": "F32_TILE_64",
        "kind": "constant",
        "signature": "F32_TILE_64",
        "summary": "f32 tile, 64 threads — useful for scalar reduction passes"
      },
      {
        "name": "VEC2_TILE_64",
        "kind": "constant",
        "signature": "VEC2_TILE_64",
        "summary": "vec2f tile, 64 threads — 2-D positions / UVs"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/compute/grid_splat",
    "path": "engine/reference/render/shaders/modules/compute/grid_splat.md",
    "source": "engine/render/shaders/modules/compute/grid_splat.js",
    "import": "/engine/render/shaders/modules/compute/grid_splat.js",
    "sourceHash": "e635a64fe731e35264be3fe1fc9e2d2166532ee7ac19a3c5e1970cbda6c311b5",
    "summary": "Grid Splat Compute Shader Splats particles/vertices to a 3D density grid for volumetric rendering Input: Particle positions, colors, velocities Output: Density grid + Color grid (for raymarching)",
    "exports": [
      {
        "name": "gridSplatComputeWGSL",
        "kind": "constant",
        "signature": "gridSplatComputeWGSL",
        "summary": "Grid Splat Compute Shader Splats particles/vertices to a 3D density grid for volumetric rendering Input: Particle positions, colors, velocities Output: Density grid + Color grid (for raymarching)"
      },
      {
        "name": "gridClearComputeWGSL",
        "kind": "constant",
        "signature": "gridClearComputeWGSL",
        "summary": ""
      },
      {
        "name": "gridFinalizeComputeWGSL",
        "kind": "constant",
        "signature": "gridFinalizeComputeWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_billboard",
    "path": "engine/reference/render/shaders/modules/core/particles_billboard.md",
    "source": "engine/render/shaders/modules/core/particles_billboard.js",
    "import": "/engine/render/shaders/modules/core/particles_billboard.js",
    "sourceHash": "7253c68178f840401d3a5591f6d831bb4403179c2267508eeb12d53e5e3d140a",
    "summary": "",
    "exports": [
      {
        "name": "particlesBillboardWGSL",
        "kind": "constant",
        "signature": "particlesBillboardWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_billboard_fragment",
    "path": "engine/reference/render/shaders/modules/core/particles_billboard_fragment.md",
    "source": "engine/render/shaders/modules/core/particles_billboard_fragment.js",
    "import": "/engine/render/shaders/modules/core/particles_billboard_fragment.js",
    "sourceHash": "8265e2b030e6ce162ea125fc8f8f77d20cdedd90fe4324bc0cb63b839cb4dd27",
    "summary": "============================================================================ PARTICLE FRAGMENT SHADER - PER-PARTICLE SHAPE RENDERING ============================================================================ This shader renders each particle according to its emitter's shape setting. The shape type is passed from the vertex shader (extracted from meta buffer). SHAPE TYPES: 0 = SPHERE - 3D shaded ball with fake diffuse lighting - Hard circle cutoff (no square corners) - Calculates fake Z depth for sphere surface - Applies directional light from upper-right - Best for: fire, water drops, magic orbs 1 = POINT - Tiny bright dot with small radius - Extra bright center for visibility - Discards most of the quad for small appearance - Best for: sparks, stars, snow, dust 2 = SOFT - Organic smoke/cloud shape with noise-distorted edges - Uses FBM noise to break circular silhouette - Wispy tendrils and irregular boundaries - Best for: smoke, fog, clouds, magic auras 3 = SPARK - Star/cross shape with 4 points - Creates X pattern with bright center - Good for emphasis and magical effects - Best for: magic sparks, highlights, flares INPUTS (from vertex shader): - localPos.xy: Normalized position within quad (-1 to 1) - color: RGBA from emitter - age: Particle age for lifetime fading - shape: Shape type (0-3) OUTPUT: - Final RGBA color with alpha for blending",
    "exports": [
      {
        "name": "particlesBillboardFragmentWGSL",
        "kind": "constant",
        "signature": "particlesBillboardFragmentWGSL",
        "summary": "============================================================================ PARTICLE FRAGMENT SHADER - PER-PARTICLE SHAPE RENDERING ============================================================================ This shader renders each particle according to its emitter's shape setting. The shape type is passed from the vertex shader (extracted from meta buffer). SHAPE TYPES: 0 = SPHERE - 3D shaded ball with fake diffuse lighting - Hard circle cutoff (no square corners) - Calculates fake Z depth for sphere surface - Applies directional light from upper-right - Best for: fire, water drops, magic orbs 1 = POINT - Tiny bright dot with small radius - Extra bright center for visibility - Discards most of the quad for small appearance - Best for: sparks, stars, snow, dust 2 = SOFT - Organic smoke/cloud shape with noise-distorted edges - Uses FBM noise to break circular silhouette - Wispy tendrils and irregular boundaries - Best for: smoke, fog, clouds, magic auras 3 = SPARK - Star/cross shape with 4 points - Creates X pattern with bright center - Good for emphasis and magical effects - Best for: magic sparks, highlights, flares INPUTS (from vertex shader): - localPos.xy: Normalized position within quad (-1 to 1) - color: RGBA from emitter - age: Particle age for lifetime fading - shape: Shape type (0-3) OUTPUT: - Final RGBA color with alpha for blending"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_billboard_vertex",
    "path": "engine/reference/render/shaders/modules/core/particles_billboard_vertex.md",
    "source": "engine/render/shaders/modules/core/particles_billboard_vertex.js",
    "import": "/engine/render/shaders/modules/core/particles_billboard_vertex.js",
    "sourceHash": "db24e24e899b5a5465064d9d8ed821a4063ff196e1caffea11be1067e6366e16",
    "summary": "============================================================================ PARTICLE BILLBOARD VERTEX SHADER ============================================================================ This shader renders particles as SCREEN-ALIGNED quads (always face camera). HOW IT WORKS: 1. Each particle is rendered as 6 vertices (2 triangles = 1 quad) 2. The particle center is transformed to CLIP SPACE first 3. Screen-space offsets are added to create a quad that always faces the camera 4. Per-particle data (color, size, shape) is read from the meta buffer INPUTS (from GPU buffers): - uPositions[ii]: vec4 containing [x, y, z, age] - uMeta[ii]: vec4 containing [r, g, b, packed_size_shape] - uVelocities[ii]: vec4 containing [vx, vy, vz, lifetime] - uParams: Default fallback values OUTPUTS (to fragment shader): - position: Clip-space position for rasterization - color: RGBA color from emitter - localPos: Normalized quad coordinates (-1 to 1) for shape rendering - age: Particle age for lifetime effects - shape: Shape type (0=sphere, 1=point, 2=soft, 3=spark) - lifetime: Per-particle lifetime from emitter SIZE/SHAPE/BEHAVIOR ENCODING: The meta.w value packs size, renderMode, shape, and behavior: meta.w = size * 1000 + renderMode * 100 + shape * 10 + behavior - size: 0-65 (floor(meta.w / 1000)) - renderMode: 0-9 (floor(meta.w / 100) % 10) - shape: 0-9 (floor(meta.w / 10) % 10) - behavior: 0-9 (meta.w % 10) Example: 4302 = size 4, renderMode 3, shape 0, behavior 2",
    "exports": [
      {
        "name": "particlesBillboardVertexWGSL",
        "kind": "constant",
        "signature": "particlesBillboardVertexWGSL",
        "summary": "============================================================================ PARTICLE BILLBOARD VERTEX SHADER ============================================================================ This shader renders particles as SCREEN-ALIGNED quads (always face camera). HOW IT WORKS: 1. Each particle is rendered as 6 vertices (2 triangles = 1 quad) 2. The particle center is transformed to CLIP SPACE first 3. Screen-space offsets are added to create a quad that always faces the camera 4. Per-particle data (color, size, shape) is read from the meta buffer INPUTS (from GPU buffers): - uPositions[ii]: vec4 containing [x, y, z, age] - uMeta[ii]: vec4 containing [r, g, b, packed_size_shape] - uVelocities[ii]: vec4 containing [vx, vy, vz, lifetime] - uParams: Default fallback values OUTPUTS (to fragment shader): - position: Clip-space position for rasterization - color: RGBA color from emitter - localPos: Normalized quad coordinates (-1 to 1) for shape rendering - age: Particle age for lifetime effects - shape: Shape type (0=sphere, 1=point, 2=soft, 3=spark) - lifetime: Per-particle lifetime from emitter SIZE/SHAPE/BEHAVIOR ENCODING: The meta.w value packs size, renderMode, shape, and behavior: meta.w = size * 1000 + renderMode * 100 + shape * 10 + behavior - size: 0-65 (floor(meta.w / 1000)) - renderMode: 0-9 (floor(meta.w / 100) % 10) - shape: 0-9 (floor(meta.w / 10) % 10) - behavior: 0-9 (meta.w % 10) Example: 4302 = size 4, renderMode 3, shape 0, behavior 2"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_blackbody",
    "path": "engine/reference/render/shaders/modules/core/particles_blackbody.md",
    "source": "engine/render/shaders/modules/core/particles_blackbody.js",
    "import": "/engine/render/shaders/modules/core/particles_blackbody.js",
    "sourceHash": "8b5a79363cc5bef06ae3142a5af90525a7895bca70e357f8a73198265646ae19",
    "summary": "particles_blackbody.js - Blackbody Radiation Color Shader (GAP 39) Converts particle temperature → physically-based color + emission. Uses CIE 1931 approximation of Planck's law for blackbody radiation. Stefan-Boltzmann T⁴ scaling for emissive intensity. Generates a 1D LUT texture (256 texels, 300K-30000K → sRGB). Fragment shader samples LUT based on thermalData.x temperature.",
    "exports": [
      {
        "name": "generateBlackbodyLUT",
        "kind": "function",
        "signature": "generateBlackbodyLUT(minTemp = 300, maxTemp = 30000)",
        "summary": "Generate blackbody LUT as Float32Array (256 × RGBA). Maps temperature range [minT, maxT] linearly across 256 texels. Alpha channel = relative emissive intensity (Stefan-Boltzmann T⁴ scaling)."
      },
      {
        "name": "blackbodyWGSL",
        "kind": "constant",
        "signature": "blackbodyWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_bond_line",
    "path": "engine/reference/render/shaders/modules/core/particles_bond_line.md",
    "source": "engine/render/shaders/modules/core/particles_bond_line.js",
    "import": "/engine/render/shaders/modules/core/particles_bond_line.js",
    "sourceHash": "ee61a1bc2b1ad37b3d9b32c3b816ff875b87dc817fd60acc4c403740dd54bd14",
    "summary": "particles_bond_line.js - Bond Line / Stick Shader (GAP 41) Renders molecular bonds as lines/cylinders between bonded particles. Reads constraint buffer to find bonded pairs. Supports single/double/triple bond visualization. Color by bond type: ionic=dashed, covalent=solid, metallic=thick.",
    "exports": [
      {
        "name": "bondLineVertexWGSL",
        "kind": "constant",
        "signature": "bondLineVertexWGSL",
        "summary": "particles_bond_line.js - Bond Line / Stick Shader (GAP 41) Renders molecular bonds as lines/cylinders between bonded particles. Reads constraint buffer to find bonded pairs. Supports single/double/triple bond visualization. Color by bond type: ionic=dashed, covalent=solid, metallic=thick."
      },
      {
        "name": "bondLineFragmentWGSL",
        "kind": "constant",
        "signature": "bondLineFragmentWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_field_lines",
    "path": "engine/reference/render/shaders/modules/core/particles_field_lines.md",
    "source": "engine/render/shaders/modules/core/particles_field_lines.js",
    "import": "/engine/render/shaders/modules/core/particles_field_lines.js",
    "sourceHash": "9d77cf118373351bda392b742661ef504eb42c84acb667baea1020710ef93b19",
    "summary": "particles_field_lines.js - Electromagnetic Field Visualization Shader (GAP 42) Renders electric/magnetic field lines and force arrows around charged particles. Supports: field lines, arrow glyphs, heat map, equipotential surfaces. Color: blue=attraction, red=repulsion, intensity=magnitude.",
    "exports": [
      {
        "name": "fieldLineVertexWGSL",
        "kind": "constant",
        "signature": "fieldLineVertexWGSL",
        "summary": "particles_field_lines.js - Electromagnetic Field Visualization Shader (GAP 42) Renders electric/magnetic field lines and force arrows around charged particles. Supports: field lines, arrow glyphs, heat map, equipotential surfaces. Color: blue=attraction, red=repulsion, intensity=magnitude."
      },
      {
        "name": "fieldLineFragmentWGSL",
        "kind": "constant",
        "signature": "fieldLineFragmentWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_orbital",
    "path": "engine/reference/render/shaders/modules/core/particles_orbital.md",
    "source": "engine/render/shaders/modules/core/particles_orbital.js",
    "import": "/engine/render/shaders/modules/core/particles_orbital.js",
    "sourceHash": "0192982e2883223f4b5c5091c8d628941531956310da0e07fb9f392d689e46fb",
    "summary": "particles_orbital.js - Electron Cloud / Orbital Shader (GAP 40) Raymarched spherical harmonics for visualizing electron probability clouds. Renders hydrogen-like orbital shapes (1s, 2p, 3d, etc.) around atom-particles. Color by element using CPK convention. LOD: at distance → simple sphere; close → full orbital volume.",
    "exports": [
      {
        "name": "orbitalWGSL",
        "kind": "constant",
        "signature": "orbitalWGSL",
        "summary": "particles_orbital.js - Electron Cloud / Orbital Shader (GAP 40) Raymarched spherical harmonics for visualizing electron probability clouds. Renders hydrogen-like orbital shapes (1s, 2p, 3d, etc.) around atom-particles. Color by element using CPK convention. LOD: at distance → simple sphere; close → full orbital volume."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_phase_vfx",
    "path": "engine/reference/render/shaders/modules/core/particles_phase_vfx.md",
    "source": "engine/render/shaders/modules/core/particles_phase_vfx.js",
    "import": "/engine/render/shaders/modules/core/particles_phase_vfx.js",
    "sourceHash": "85d3e87ac2e07a83049b3ee12aaa7555aedc494da113df5f83da8f2f7fe78ab0",
    "summary": "particles_phase_vfx.js - Phase Transition Visual Effects Shader (GAP 43) Visual feedback when particles change phase: - Melt: wet/glossy sheen, drip distortion - Freeze: frost crystallization pattern, ice crackle - Boil: bubble emission pattern, steam distortion - Ionize: plasma glow + electricity arcs Per-particle phase from thermalData.y → drives material blend in fragment. Transition animation uses latentEnergy (thermalData.w) as 0→1 progress.",
    "exports": [
      {
        "name": "phaseVFXWGSL",
        "kind": "constant",
        "signature": "phaseVFXWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_point",
    "path": "engine/reference/render/shaders/modules/core/particles_point.md",
    "source": "engine/render/shaders/modules/core/particles_point.js",
    "import": "/engine/render/shaders/modules/core/particles_point.js",
    "sourceHash": "71ab80fbc12f2787ea94490b6f856c2afbcce668698566154c1d16dfbac8e769",
    "summary": "",
    "exports": [
      {
        "name": "particlesPointWGSL",
        "kind": "constant",
        "signature": "particlesPointWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_point_fragment",
    "path": "engine/reference/render/shaders/modules/core/particles_point_fragment.md",
    "source": "engine/render/shaders/modules/core/particles_point_fragment.js",
    "import": "/engine/render/shaders/modules/core/particles_point_fragment.js",
    "sourceHash": "b2a6b1367b05de6a06f9b9f851c014e905d3529b093a6f8da47536f930d7aac7",
    "summary": "",
    "exports": [
      {
        "name": "particlesPointFragmentWGSL",
        "kind": "constant",
        "signature": "particlesPointFragmentWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_point_vertex",
    "path": "engine/reference/render/shaders/modules/core/particles_point_vertex.md",
    "source": "engine/render/shaders/modules/core/particles_point_vertex.js",
    "import": "/engine/render/shaders/modules/core/particles_point_vertex.js",
    "sourceHash": "67254164a7bd60d5fc4c1722e7121f3a69cd9523343c08c4de0621cb298bd4a5",
    "summary": "",
    "exports": [
      {
        "name": "particlesPointVertexWGSL",
        "kind": "constant",
        "signature": "particlesPointVertexWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_sdf_billboard",
    "path": "engine/reference/render/shaders/modules/core/particles_sdf_billboard.md",
    "source": "engine/render/shaders/modules/core/particles_sdf_billboard.js",
    "import": "/engine/render/shaders/modules/core/particles_sdf_billboard.js",
    "sourceHash": "93b92ed4eae17cd6fe1aff9d514df0a0950301cbc7e4ef55423da16e880c96e4",
    "summary": "",
    "exports": [
      {
        "name": "particlesSdfBillboardShader",
        "kind": "constant",
        "signature": "particlesSdfBillboardShader",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_sdf_fragment",
    "path": "engine/reference/render/shaders/modules/core/particles_sdf_fragment.md",
    "source": "engine/render/shaders/modules/core/particles_sdf_fragment.js",
    "import": "/engine/render/shaders/modules/core/particles_sdf_fragment.js",
    "sourceHash": "6cd9f0459c3758add9c5d6df469d84836264bef991e66f68609843ad8b0bcd62",
    "summary": "",
    "exports": [
      {
        "name": "particlesSdfFragmentShader",
        "kind": "constant",
        "signature": "particlesSdfFragmentShader",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/core/particles_shared",
    "path": "engine/reference/render/shaders/modules/core/particles_shared.md",
    "source": "engine/render/shaders/modules/core/particles_shared.js",
    "import": "/engine/render/shaders/modules/core/particles_shared.js",
    "sourceHash": "ad408734f9091d8f5718f65f1b54f6598ffbac09480b3b9913ddbc02666241db",
    "summary": "============================================================================ PARTICLE SHADER SHARED DEFINITIONS ============================================================================ This file contains WGSL struct definitions and buffer bindings shared between the vertex and fragment shaders for particle rendering. Uses ShaderSchema.js for consistent buffer layouts. See BINDING_GROUPS.particles and PARTICLE_PARAMS_SCHEMA for schema definitions. GPU BUFFER LAYOUT (from ShaderSchema.js): Group 0: FrameUniforms (camera, time) Group 1: Particle buffers (positions, meta, params, velocities, uvs, texture) PACK FORMAT (from ParticleSchema.js): meta.w = mass * 1e8 + drag * 1e6 + size * 1e4 + renderMode * 1e3 + shape * 10 + behavior",
    "exports": [
      {
        "name": "particleStructsWGSL",
        "kind": "constant",
        "signature": "particleStructsWGSL",
        "summary": "============================================================================ PARTICLE SHADER SHARED DEFINITIONS ============================================================================ This file contains WGSL struct definitions and buffer bindings shared between the vertex and fragment shaders for particle rendering. Uses ShaderSchema.js for consistent buffer layouts. See BINDING_GROUPS.particles and PARTICLE_PARAMS_SCHEMA for schema definitions. GPU BUFFER LAYOUT (from ShaderSchema.js): Group 0: FrameUniforms (camera, time) Group 1: Particle buffers (positions, meta, params, velocities, uvs, texture) PACK FORMAT (from ParticleSchema.js): meta.w = mass * 1e8 + drag * 1e6 + size * 1e4 + renderMode * 1e3 + shape * 10 + behavior"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/color/blend",
    "path": "engine/reference/render/shaders/modules/lib/color/blend.md",
    "source": "engine/render/shaders/modules/lib/color/blend.js",
    "import": "/engine/render/shaders/modules/lib/color/blend.js",
    "sourceHash": "43a6b3ea37443158db096435cb3d9d2ec9655a39d8b0c34a1ab51c0118b58e9d",
    "summary": "Color Blending Functions Various blend modes for compositing colors. Photoshop-style blend modes and custom game-specific blending.",
    "exports": [
      {
        "name": "colorBlendWGSL",
        "kind": "constant",
        "signature": "colorBlendWGSL",
        "summary": "Color Blending Functions Various blend modes for compositing colors. Photoshop-style blend modes and custom game-specific blending."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/color/index",
    "path": "engine/reference/render/shaders/modules/lib/color/index.md",
    "source": "engine/render/shaders/modules/lib/color/index.js",
    "import": "/engine/render/shaders/modules/lib/color/index.js",
    "sourceHash": "9ea945c915b288c3969643b18f4b181f4325ab8397e7086d054db5d034ba3c6e",
    "summary": "",
    "exports": [
      {
        "name": "colorLibWGSL",
        "kind": "constant",
        "signature": "colorLibWGSL",
        "summary": ""
      },
      {
        "name": "colorBlendWGSL",
        "kind": "re-export",
        "signature": "colorBlendWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/density/falloff",
    "path": "engine/reference/render/shaders/modules/lib/density/falloff.md",
    "source": "engine/render/shaders/modules/lib/density/falloff.js",
    "import": "/engine/render/shaders/modules/lib/density/falloff.js",
    "sourceHash": "bcc3cff98fe784763a93bc19245b9b7e89c088ae60c4c8bb8220394bd6c60e8b",
    "summary": "Density Falloff Functions Various falloff curves for volumetric density, particle opacity, etc. Controls how density/opacity decreases with distance.",
    "exports": [
      {
        "name": "densityFalloffWGSL",
        "kind": "constant",
        "signature": "densityFalloffWGSL",
        "summary": "Density Falloff Functions Various falloff curves for volumetric density, particle opacity, etc. Controls how density/opacity decreases with distance."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/density/index",
    "path": "engine/reference/render/shaders/modules/lib/density/index.md",
    "source": "engine/render/shaders/modules/lib/density/index.js",
    "import": "/engine/render/shaders/modules/lib/density/index.js",
    "sourceHash": "237ab7ac5f9767055f589e6c6da3c10d0cd90df21d424a7a40b44cfb95c29ba4",
    "summary": "",
    "exports": [
      {
        "name": "densityLibWGSL",
        "kind": "constant",
        "signature": "densityLibWGSL",
        "summary": ""
      },
      {
        "name": "densityFalloffWGSL",
        "kind": "re-export",
        "signature": "densityFalloffWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/depth/index",
    "path": "engine/reference/render/shaders/modules/lib/depth/index.md",
    "source": "engine/render/shaders/modules/lib/depth/index.js",
    "import": "/engine/render/shaders/modules/lib/depth/index.js",
    "sourceHash": "151cb010aa691167bdcd855d9002de7836d33e7ea5075bd92ed3c54a2fee029a",
    "summary": "",
    "exports": [
      {
        "name": "depthLibWGSL",
        "kind": "constant",
        "signature": "depthLibWGSL",
        "summary": ""
      },
      {
        "name": "depthLinearizeWGSL",
        "kind": "re-export",
        "signature": "depthLinearizeWGSL",
        "summary": ""
      },
      {
        "name": "depthReconstructWGSL",
        "kind": "re-export",
        "signature": "depthReconstructWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/depth/linearize",
    "path": "engine/reference/render/shaders/modules/lib/depth/linearize.md",
    "source": "engine/render/shaders/modules/lib/depth/linearize.js",
    "import": "/engine/render/shaders/modules/lib/depth/linearize.js",
    "sourceHash": "5e30f18c770c4003f869b0aa7a0a271099542c4c915d6cd6a0009a9571a22c2a",
    "summary": "Depth Buffer Utilities - Linearization Functions for linearizing depth values from perspective projection. WebGPU uses [0,1] depth range with perspective non-linearity.",
    "exports": [
      {
        "name": "depthLinearizeWGSL",
        "kind": "constant",
        "signature": "depthLinearizeWGSL",
        "summary": "Depth Buffer Utilities - Linearization Functions for linearizing depth values from perspective projection. WebGPU uses [0,1] depth range with perspective non-linearity."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/depth/reconstruct",
    "path": "engine/reference/render/shaders/modules/lib/depth/reconstruct.md",
    "source": "engine/render/shaders/modules/lib/depth/reconstruct.js",
    "import": "/engine/render/shaders/modules/lib/depth/reconstruct.js",
    "sourceHash": "064064af63a73145df8b76fe8ab668a60580bcf5e4b3c26f3d1498cb144e3dec",
    "summary": "",
    "exports": [
      {
        "name": "depthReconstructWGSL",
        "kind": "constant",
        "signature": "depthReconstructWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/distortion/domain_warp",
    "path": "engine/reference/render/shaders/modules/lib/distortion/domain_warp.md",
    "source": "engine/render/shaders/modules/lib/distortion/domain_warp.js",
    "import": "/engine/render/shaders/modules/lib/distortion/domain_warp.js",
    "sourceHash": "36c2520108fb94d946fe007f194cc147f49295cbf1b39de9679fa790ae38f7e7",
    "summary": "",
    "exports": [
      {
        "name": "domainWarpWGSL",
        "kind": "constant",
        "signature": "domainWarpWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/distortion/index",
    "path": "engine/reference/render/shaders/modules/lib/distortion/index.md",
    "source": "engine/render/shaders/modules/lib/distortion/index.js",
    "import": "/engine/render/shaders/modules/lib/distortion/index.js",
    "sourceHash": "e23899c89e5f2f66e96a6fc8268c1ff14d377fa34f66cc8538b05a96929eb81f",
    "summary": "",
    "exports": [
      {
        "name": "distortionLibWGSL",
        "kind": "constant",
        "signature": "distortionLibWGSL",
        "summary": ""
      },
      {
        "name": "domainWarpWGSL",
        "kind": "re-export",
        "signature": "domainWarpWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/index",
    "path": "engine/reference/render/shaders/modules/lib/index.md",
    "source": "engine/render/shaders/modules/lib/index.js",
    "import": "/engine/render/shaders/modules/lib/index.js",
    "sourceHash": "f7264e526d625ef3b8b9e6d7966ed5769c8955b5fc9047a271ce70dd777dbca1",
    "summary": "",
    "exports": [
      {
        "name": "fullShaderLibWGSL",
        "kind": "constant",
        "signature": "fullShaderLibWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/lighting/index",
    "path": "engine/reference/render/shaders/modules/lib/lighting/index.md",
    "source": "engine/render/shaders/modules/lib/lighting/index.js",
    "import": "/engine/render/shaders/modules/lib/lighting/index.js",
    "sourceHash": "3f6400edac6e8e57fe59c2b7d9e13837ab94fcab672953470c159eb2d79c4864",
    "summary": "",
    "exports": [
      {
        "name": "lightingLibWGSL",
        "kind": "constant",
        "signature": "lightingLibWGSL",
        "summary": ""
      },
      {
        "name": "lightScatterWGSL",
        "kind": "re-export",
        "signature": "lightScatterWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/lighting/scatter",
    "path": "engine/reference/render/shaders/modules/lib/lighting/scatter.md",
    "source": "engine/render/shaders/modules/lib/lighting/scatter.js",
    "import": "/engine/render/shaders/modules/lib/lighting/scatter.js",
    "sourceHash": "00870be42745dbfb3fafa10b912d9ed1ee7e33f3edd33435736f81f1a38c6c6d",
    "summary": "Light Scattering Functions Physical and approximated scattering models for volumetric lighting. Includes phase functions and multiple scattering approximations.",
    "exports": [
      {
        "name": "lightScatterWGSL",
        "kind": "constant",
        "signature": "lightScatterWGSL",
        "summary": "Light Scattering Functions Physical and approximated scattering models for volumetric lighting. Includes phase functions and multiple scattering approximations."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/math/index",
    "path": "engine/reference/render/shaders/modules/lib/math/index.md",
    "source": "engine/render/shaders/modules/lib/math/index.js",
    "import": "/engine/render/shaders/modules/lib/math/index.js",
    "sourceHash": "065f9cda652d1bf325bd50c2615b826852d97424ae045fea8a4160d73b4b771c",
    "summary": "",
    "exports": [
      {
        "name": "mathLibWGSL",
        "kind": "constant",
        "signature": "mathLibWGSL",
        "summary": ""
      },
      {
        "name": "interpolationWGSL",
        "kind": "re-export",
        "signature": "interpolationWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/math/interpolation",
    "path": "engine/reference/render/shaders/modules/lib/math/interpolation.md",
    "source": "engine/render/shaders/modules/lib/math/interpolation.js",
    "import": "/engine/render/shaders/modules/lib/math/interpolation.js",
    "sourceHash": "c3e5ea27b1a2c21e817b6dbd83401b365b4ecccd58d1519aa55b48d4f4bd6e3b",
    "summary": "Interpolation Functions Various interpolation curves and easing functions.",
    "exports": [
      {
        "name": "interpolationWGSL",
        "kind": "constant",
        "signature": "interpolationWGSL",
        "summary": "Interpolation Functions Various interpolation curves and easing functions."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/noise/curl",
    "path": "engine/reference/render/shaders/modules/lib/noise/curl.md",
    "source": "engine/render/shaders/modules/lib/noise/curl.js",
    "import": "/engine/render/shaders/modules/lib/noise/curl.js",
    "sourceHash": "55acbe63182e62a3d466ac7d06debc2221c07553fde0885f40bd88b6fe51c8ae",
    "summary": "",
    "exports": [
      {
        "name": "curlNoiseWGSL",
        "kind": "constant",
        "signature": "curlNoiseWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/noise/fbm",
    "path": "engine/reference/render/shaders/modules/lib/noise/fbm.md",
    "source": "engine/render/shaders/modules/lib/noise/fbm.js",
    "import": "/engine/render/shaders/modules/lib/noise/fbm.js",
    "sourceHash": "7599404052e50196f2961fb47ac61de2c30a72b16401e308f711f9b6cf0826dc",
    "summary": "",
    "exports": [
      {
        "name": "fbmWGSL",
        "kind": "constant",
        "signature": "fbmWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/noise/hash",
    "path": "engine/reference/render/shaders/modules/lib/noise/hash.md",
    "source": "engine/render/shaders/modules/lib/noise/hash.js",
    "import": "/engine/render/shaders/modules/lib/noise/hash.js",
    "sourceHash": "67fc13c561868b6510dfd9f4b7b6d6f7e0ddea043070c269f491cb5cf73cd41b",
    "summary": "Hash Functions for Pseudo-Random Noise Generation Provides various hash functions for generating pseudo-random values from coordinate inputs. Used as basis for procedural noise.",
    "exports": [
      {
        "name": "hashWGSL",
        "kind": "constant",
        "signature": "hashWGSL",
        "summary": "Hash Functions for Pseudo-Random Noise Generation Provides various hash functions for generating pseudo-random values from coordinate inputs. Used as basis for procedural noise."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/noise/index",
    "path": "engine/reference/render/shaders/modules/lib/noise/index.md",
    "source": "engine/render/shaders/modules/lib/noise/index.js",
    "import": "/engine/render/shaders/modules/lib/noise/index.js",
    "sourceHash": "dbb4583c67e70c2b75f6803d75c73619d05ab21878970dca939eb3a5fc62e33f",
    "summary": "",
    "exports": [
      {
        "name": "noiseLibWGSL",
        "kind": "constant",
        "signature": "noiseLibWGSL",
        "summary": ""
      },
      {
        "name": "curlNoiseWGSL",
        "kind": "re-export",
        "signature": "curlNoiseWGSL",
        "summary": ""
      },
      {
        "name": "fbmWGSL",
        "kind": "re-export",
        "signature": "fbmWGSL",
        "summary": ""
      },
      {
        "name": "hashWGSL",
        "kind": "re-export",
        "signature": "hashWGSL",
        "summary": ""
      },
      {
        "name": "valueNoiseWGSL",
        "kind": "re-export",
        "signature": "valueNoiseWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/noise/noise3d",
    "path": "engine/reference/render/shaders/modules/lib/noise/noise3d.md",
    "source": "engine/render/shaders/modules/lib/noise/noise3d.js",
    "import": "/engine/render/shaders/modules/lib/noise/noise3d.js",
    "sourceHash": "c49338b29b5d1e6986bdecb06035dac255c8b0f2a8d54de106a256f4600d71e3",
    "summary": "3D Noise Functions for Volumetric Effects Used for smoke turbulence, wispy distortion, and organic blending",
    "exports": [
      {
        "name": "noise3dLibrary",
        "kind": "constant",
        "signature": "noise3dLibrary",
        "summary": "3D Noise Functions for Volumetric Effects Used for smoke turbulence, wispy distortion, and organic blending"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/noise/value",
    "path": "engine/reference/render/shaders/modules/lib/noise/value.md",
    "source": "engine/render/shaders/modules/lib/noise/value.js",
    "import": "/engine/render/shaders/modules/lib/noise/value.js",
    "sourceHash": "607fe7ab3687ec0b3aaf22b5c8a05ee021c32d0132132638d259e9b196b9d79e",
    "summary": "",
    "exports": [
      {
        "name": "valueNoiseWGSL",
        "kind": "constant",
        "signature": "valueNoiseWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/lib/sdf/shapes",
    "path": "engine/reference/render/shaders/modules/lib/sdf/shapes.md",
    "source": "engine/render/shaders/modules/lib/sdf/shapes.js",
    "import": "/engine/render/shaders/modules/lib/sdf/shapes.js",
    "sourceHash": "ef5064305ed4666faa1a56938c5d2bcee35f7e6d0a79f9f59364951c498c9a60",
    "summary": "SDF Shape Library Signed Distance Field functions for volumetric particle rendering. Based on Inigo Quilez's distance functions: https://iquilezles.org/articles/distfunctions/",
    "exports": [
      {
        "name": "sdfShapesLibrary",
        "kind": "constant",
        "signature": "sdfShapesLibrary",
        "summary": "SDF Shape Library Signed Distance Field functions for volumetric particle rendering. Based on Inigo Quilez's distance functions: https://iquilezles.org/articles/distfunctions/"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/passes/depth_visualizer",
    "path": "engine/reference/render/shaders/modules/passes/depth_visualizer.md",
    "source": "engine/render/shaders/modules/passes/depth_visualizer.js",
    "import": "/engine/render/shaders/modules/passes/depth_visualizer.js",
    "sourceHash": "2d2aac899f6e0b7ef1a25d681684c3bd7bff63e0f588822cc2fc549574c87670",
    "summary": "",
    "exports": [
      {
        "name": "depthVisualizerShader",
        "kind": "constant",
        "signature": "depthVisualizerShader",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/passes/particle_age",
    "path": "engine/reference/render/shaders/modules/passes/particle_age.md",
    "source": "engine/render/shaders/modules/passes/particle_age.js",
    "import": "/engine/render/shaders/modules/passes/particle_age.js",
    "sourceHash": "ef0d2371b8c88e094292ed68668e542e8909e487ff521e0e1b92bf223a3e9a24",
    "summary": "",
    "exports": [
      {
        "name": "particleAgePassShader",
        "kind": "constant",
        "signature": "particleAgePassShader",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/passes/particle_albedo",
    "path": "engine/reference/render/shaders/modules/passes/particle_albedo.md",
    "source": "engine/render/shaders/modules/passes/particle_albedo.js",
    "import": "/engine/render/shaders/modules/passes/particle_albedo.js",
    "sourceHash": "5a13b1bf6490da839a1fcf0261a39bc2e5181e4fd99c546fe5d94d525af95811",
    "summary": "",
    "exports": [
      {
        "name": "particleAlbedoPassShader",
        "kind": "constant",
        "signature": "particleAlbedoPassShader",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/passes/particle_depth",
    "path": "engine/reference/render/shaders/modules/passes/particle_depth.md",
    "source": "engine/render/shaders/modules/passes/particle_depth.js",
    "import": "/engine/render/shaders/modules/passes/particle_depth.js",
    "sourceHash": "76e0905ace7f216b500841f70b4e4ee40443b2f559c8b2872f0fb29b9478cc65",
    "summary": "",
    "exports": [
      {
        "name": "particleDepthPassShader",
        "kind": "constant",
        "signature": "particleDepthPassShader",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/passes/particle_emissive",
    "path": "engine/reference/render/shaders/modules/passes/particle_emissive.md",
    "source": "engine/render/shaders/modules/passes/particle_emissive.js",
    "import": "/engine/render/shaders/modules/passes/particle_emissive.js",
    "sourceHash": "0daedfcf7103d22b041209b253d009dc9e4b30702ddafcddb728ca511b08d025",
    "summary": "",
    "exports": [
      {
        "name": "particleEmissivePassShader",
        "kind": "constant",
        "signature": "particleEmissivePassShader",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/passes/particle_lighting",
    "path": "engine/reference/render/shaders/modules/passes/particle_lighting.md",
    "source": "engine/render/shaders/modules/passes/particle_lighting.js",
    "import": "/engine/render/shaders/modules/passes/particle_lighting.js",
    "sourceHash": "6ec81c6237d6c345f960013c5adf1e0e6ecb96c0fd83adafa0cfd8586cf34062",
    "summary": "",
    "exports": [
      {
        "name": "particleLightingPassShader",
        "kind": "constant",
        "signature": "particleLightingPassShader",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/passes/particle_normals",
    "path": "engine/reference/render/shaders/modules/passes/particle_normals.md",
    "source": "engine/render/shaders/modules/passes/particle_normals.js",
    "import": "/engine/render/shaders/modules/passes/particle_normals.js",
    "sourceHash": "d782965eada8cd228dfeec79ac58e00fdc330ab6b8f7d53faf4933ce4e68fbba",
    "summary": "",
    "exports": [
      {
        "name": "particleNormalsPassShader",
        "kind": "constant",
        "signature": "particleNormalsPassShader",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/passes/particle_size",
    "path": "engine/reference/render/shaders/modules/passes/particle_size.md",
    "source": "engine/render/shaders/modules/passes/particle_size.js",
    "import": "/engine/render/shaders/modules/passes/particle_size.js",
    "sourceHash": "ee20ca9a432789b924a5541811af61e14df4b8b64e5c4f9173adf5812add1124",
    "summary": "",
    "exports": [
      {
        "name": "particleSizePassShader",
        "kind": "constant",
        "signature": "particleSizePassShader",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/passes/particle_thermal",
    "path": "engine/reference/render/shaders/modules/passes/particle_thermal.md",
    "source": "engine/render/shaders/modules/passes/particle_thermal.js",
    "import": "/engine/render/shaders/modules/passes/particle_thermal.js",
    "sourceHash": "41bc75788b924a3cde10eb30eb031b69cb321966eaac161a3eae7fd428351661",
    "summary": "Particle Thermal/Blackbody Debug Pass Visualizes particle temperature as blackbody radiation color. Cold (blue) → Room temp (invisible) → Hot (red/orange/white). Requires uThermalData buffer (binding 4) for per-particle temperature.",
    "exports": [
      {
        "name": "particleThermalPassShader",
        "kind": "constant",
        "signature": "particleThermalPassShader",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/passes/particle_velocity",
    "path": "engine/reference/render/shaders/modules/passes/particle_velocity.md",
    "source": "engine/render/shaders/modules/passes/particle_velocity.js",
    "import": "/engine/render/shaders/modules/passes/particle_velocity.js",
    "sourceHash": "4270ac6ca531de77d5aff3b5abcf96b71749e20928c73210a16755b92699f0e7",
    "summary": "",
    "exports": [
      {
        "name": "particleVelocityPassShader",
        "kind": "constant",
        "signature": "particleVelocityPassShader",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/passes/scene_debug_visualizer",
    "path": "engine/reference/render/shaders/modules/passes/scene_debug_visualizer.md",
    "source": "engine/render/shaders/modules/passes/scene_debug_visualizer.js",
    "import": "/engine/render/shaders/modules/passes/scene_debug_visualizer.js",
    "sourceHash": "ba395235e04aabc79e2f3988cd1778d3733da38360e57903bc3fc3c7007af7c4",
    "summary": "Scene Debug Visualizer Shader Fullscreen post-process that reads the ACTUAL scene depth buffer (texture_depth_2d) containing both entity meshes and particles, and visualizes: Mode 0: Depth — linearized grayscale (near=white, far=black, industry standard) Mode 1: Normals — world-space normals reconstructed from depth (RGB = XYZ) Mode 2: Albedo — passthrough of scene color (placeholder) Mode 3: Lighting — scene luminance only Reads from texture_depth_2d (depth24plus) — NOT texture_2d<f32>.",
    "exports": [
      {
        "name": "sceneDebugVisualizerShader",
        "kind": "constant",
        "signature": "sceneDebugVisualizerShader",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/postfx/bloom",
    "path": "engine/reference/render/shaders/modules/postfx/bloom.md",
    "source": "engine/render/shaders/modules/postfx/bloom.js",
    "import": "/engine/render/shaders/modules/postfx/bloom.js",
    "sourceHash": "5ddcf4c83ccf67f63e86e887082b5e115c328a74d1f617ae1a2c6d8fe17e82f2",
    "summary": "",
    "exports": [
      {
        "name": "bloomThresholdWGSL",
        "kind": "constant",
        "signature": "bloomThresholdWGSL",
        "summary": ""
      },
      {
        "name": "bloomBlurWGSL",
        "kind": "constant",
        "signature": "bloomBlurWGSL",
        "summary": ""
      },
      {
        "name": "bloomCompositeWGSL",
        "kind": "constant",
        "signature": "bloomCompositeWGSL",
        "summary": ""
      },
      {
        "name": "bloomSinglePassWGSL",
        "kind": "constant",
        "signature": "bloomSinglePassWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/postfx/fluid_water_blur",
    "path": "engine/reference/render/shaders/modules/postfx/fluid_water_blur.md",
    "source": "engine/render/shaders/modules/postfx/fluid_water_blur.js",
    "import": "/engine/render/shaders/modules/postfx/fluid_water_blur.js",
    "sourceHash": "8584e4968798b3e2b10b19cff8371c581ba5d987a1b3523cba36f425d1bedafe",
    "summary": "",
    "exports": [
      {
        "name": "fluidWaterBlurWGSL",
        "kind": "constant",
        "signature": "fluidWaterBlurWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/postfx/fluid_water_composite",
    "path": "engine/reference/render/shaders/modules/postfx/fluid_water_composite.md",
    "source": "engine/render/shaders/modules/postfx/fluid_water_composite.js",
    "import": "/engine/render/shaders/modules/postfx/fluid_water_composite.js",
    "sourceHash": "dc53068aa9337a19060f411ea7917c1d08f6a6038ee71035da4e8f2e0eaaaf95",
    "summary": "",
    "exports": [
      {
        "name": "fluidWaterCompositeWGSL",
        "kind": "constant",
        "signature": "fluidWaterCompositeWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/postfx/fluid_water_depth",
    "path": "engine/reference/render/shaders/modules/postfx/fluid_water_depth.md",
    "source": "engine/render/shaders/modules/postfx/fluid_water_depth.js",
    "import": "/engine/render/shaders/modules/postfx/fluid_water_depth.js",
    "sourceHash": "798f14c19358a7379029f595b3d43407742de51c9bee104bf44eecdf53524371",
    "summary": "",
    "exports": [
      {
        "name": "fluidWaterDepthWGSL",
        "kind": "constant",
        "signature": "fluidWaterDepthWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/postfx/fluid_water_thickness",
    "path": "engine/reference/render/shaders/modules/postfx/fluid_water_thickness.md",
    "source": "engine/render/shaders/modules/postfx/fluid_water_thickness.js",
    "import": "/engine/render/shaders/modules/postfx/fluid_water_thickness.js",
    "sourceHash": "4c40d7e543d1977c2a9fdece73cd505798e4a0c700271ee98bc305f642cd0c4b",
    "summary": "",
    "exports": [
      {
        "name": "fluidWaterThicknessWGSL",
        "kind": "constant",
        "signature": "fluidWaterThicknessWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/postfx/volume_isosurface",
    "path": "engine/reference/render/shaders/modules/postfx/volume_isosurface.md",
    "source": "engine/render/shaders/modules/postfx/volume_isosurface.js",
    "import": "/engine/render/shaders/modules/postfx/volume_isosurface.js",
    "sourceHash": "7438677421898ea8b9ed0e5200e46b06f057f8f1a9ec7ab44cf3d8ff6d66951e",
    "summary": "",
    "exports": [
      {
        "name": "volumeIsoSurfaceWGSL",
        "kind": "constant",
        "signature": "volumeIsoSurfaceWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/postfx/volume_smoke",
    "path": "engine/reference/render/shaders/modules/postfx/volume_smoke.md",
    "source": "engine/render/shaders/modules/postfx/volume_smoke.js",
    "import": "/engine/render/shaders/modules/postfx/volume_smoke.js",
    "sourceHash": "dda52e4e7da6510dddcd7e3e0cc0e63e15c7774738a786f42f8957c24d48f6c3",
    "summary": "",
    "exports": [
      {
        "name": "volumeSmokeWGSL",
        "kind": "constant",
        "signature": "volumeSmokeWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/proxy/ray_portal",
    "path": "engine/reference/render/shaders/modules/proxy/ray_portal.md",
    "source": "engine/render/shaders/modules/proxy/ray_portal.js",
    "import": "/engine/render/shaders/modules/proxy/ray_portal.js",
    "sourceHash": "f4b287454e6f487fc95167142ce28fd84a46ed415fb586621558bba10981564f",
    "summary": "Ray Portal WGSL Shader Module Provides WGSL functions for all proxy geometry quality tiers: ULTRA  — TLAS/BLAS two-level BVH traversal with ray redirect HIGH   — SDF cone marching proxy MED    — True impostor (billboarded SDF/height-field) LOW    — Octahedral impostor atlas sampling All functions are pure WGSL and intended to be embedded via template literals into compute shader source strings.",
    "exports": [
      {
        "name": "RAY_PORTAL_WGSL",
        "kind": "constant",
        "signature": "RAY_PORTAL_WGSL",
        "summary": "Ray Portal WGSL Shader Module Provides WGSL functions for all proxy geometry quality tiers: ULTRA  — TLAS/BLAS two-level BVH traversal with ray redirect HIGH   — SDF cone marching proxy MED    — True impostor (billboarded SDF/height-field) LOW    — Octahedral impostor atlas sampling All functions are pure WGSL and intended to be embedded via template literals into compute shader source strings."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/shaders/modules/proxy/tlas_refit",
    "path": "engine/reference/render/shaders/modules/proxy/tlas_refit.md",
    "source": "engine/render/shaders/modules/proxy/tlas_refit.js",
    "import": "/engine/render/shaders/modules/proxy/tlas_refit.js",
    "sourceHash": "b5806d13abe9b72420f90530e1417217b94976a2ef72eab3e071b02d0ccab971",
    "summary": "",
    "exports": [
      {
        "name": "tlasRefitWGSL",
        "kind": "constant",
        "signature": "tlasRefitWGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/spectral/CoherentWaveOpticsPass",
    "path": "engine/reference/render/spectral/CoherentWaveOpticsPass.md",
    "source": "engine/render/spectral/CoherentWaveOpticsPass.js",
    "import": "/engine/render/spectral/CoherentWaveOpticsPass.js",
    "sourceHash": "cb9b2b12022e91407b639874e6653d26172d2e0843ac939a8aa8a948dc42b6d1",
    "summary": "",
    "exports": [
      {
        "name": "CoherentWaveOpticsPass",
        "kind": "class",
        "signature": "class CoherentWaveOpticsPass",
        "summary": ""
      },
      {
        "name": "createCoherentWaveOpticsPass",
        "kind": "function",
        "signature": "createCoherentWaveOpticsPass(device, options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/spectral/SpectralPhotonMapper",
    "path": "engine/reference/render/spectral/SpectralPhotonMapper.md",
    "source": "engine/render/spectral/SpectralPhotonMapper.js",
    "import": "/engine/render/spectral/SpectralPhotonMapper.js",
    "sourceHash": "8d6bbbd1b7184158cf6d15b360095fbde7b5454004c7925c0ae6a0cfbea6bae2",
    "summary": "",
    "exports": [
      {
        "name": "SpectralPhotonMapper",
        "kind": "class",
        "signature": "class SpectralPhotonMapper",
        "summary": ""
      },
      {
        "name": "createSpectralPhotonMapper",
        "kind": "function",
        "signature": "createSpectralPhotonMapper(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/spectral/SpectralPhotonMappingPass",
    "path": "engine/reference/render/spectral/SpectralPhotonMappingPass.md",
    "source": "engine/render/spectral/SpectralPhotonMappingPass.js",
    "import": "/engine/render/spectral/SpectralPhotonMappingPass.js",
    "sourceHash": "3cf7a2beb5286daab88fe872e106091519af9ee63774496291a62f45cb59fbba",
    "summary": "",
    "exports": [
      {
        "name": "SpectralPhotonMappingPass",
        "kind": "class",
        "signature": "class SpectralPhotonMappingPass",
        "summary": ""
      },
      {
        "name": "createSpectralPhotonMappingPass",
        "kind": "function",
        "signature": "createSpectralPhotonMappingPass(device, options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/spectral/SpectralPhotonStore",
    "path": "engine/reference/render/spectral/SpectralPhotonStore.md",
    "source": "engine/render/spectral/SpectralPhotonStore.js",
    "import": "/engine/render/spectral/SpectralPhotonStore.js",
    "sourceHash": "f88f944c8af587697320703a7be5cb0da8d3a4404d878d51ef1498e19baf3cf0",
    "summary": "",
    "exports": [
      {
        "name": "SpectralPhotonStore",
        "kind": "class",
        "signature": "class SpectralPhotonStore",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/spectral/SpectralScattering",
    "path": "engine/reference/render/spectral/SpectralScattering.md",
    "source": "engine/render/spectral/SpectralScattering.js",
    "import": "/engine/render/spectral/SpectralScattering.js",
    "sourceHash": "42dc1d10f286f9dea288404ec02a68898412034f6916551a32f42ea9fb2848e7",
    "summary": "",
    "exports": [
      {
        "name": "sellmeierIor",
        "kind": "function",
        "signature": "sellmeierIor(lambdaNm, coefficients = null)",
        "summary": ""
      },
      {
        "name": "fresnelDielectric",
        "kind": "function",
        "signature": "fresnelDielectric(cosThetaI, etaI, etaT)",
        "summary": ""
      },
      {
        "name": "beerLambert",
        "kind": "function",
        "signature": "beerLambert(sigmaT, distance)",
        "summary": ""
      },
      {
        "name": "henyeyGreenstein",
        "kind": "function",
        "signature": "henyeyGreenstein(cosTheta, g = 0)",
        "summary": ""
      },
      {
        "name": "lambertBsdf",
        "kind": "function",
        "signature": "lambertBsdf(reflectance)",
        "summary": ""
      },
      {
        "name": "prismMinimumDeviation",
        "kind": "function",
        "signature": "prismMinimumDeviation(lambdaNm, apexRadians = Math.PI / 3, coefficients = null)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/spectral/SpectralSensor",
    "path": "engine/reference/render/spectral/SpectralSensor.md",
    "source": "engine/render/spectral/SpectralSensor.js",
    "import": "/engine/render/spectral/SpectralSensor.js",
    "sourceHash": "e5262ea419eff57dd47b912fabae2052d725bff243b29308be37a9e113ddbed0",
    "summary": "",
    "exports": [
      {
        "name": "wavelengthToXyz",
        "kind": "function",
        "signature": "wavelengthToXyz(lambdaNm, value = 1)",
        "summary": ""
      },
      {
        "name": "xyzToLinearSrgb",
        "kind": "function",
        "signature": "xyzToLinearSrgb(xyz)",
        "summary": ""
      },
      {
        "name": "encodeSrgbChannel",
        "kind": "function",
        "signature": "encodeSrgbChannel(v)",
        "summary": ""
      },
      {
        "name": "acesToneMap",
        "kind": "function",
        "signature": "acesToneMap(rgb, exposure = 1)",
        "summary": ""
      },
      {
        "name": "spectralSamplesToXyz",
        "kind": "function",
        "signature": "spectralSamplesToXyz(samples)",
        "summary": ""
      },
      {
        "name": "spectralSamplesToDisplayRgb",
        "kind": "function",
        "signature": "spectralSamplesToDisplayRgb(samples, exposure = 1)",
        "summary": ""
      },
      {
        "name": "normalizeRgb",
        "kind": "function",
        "signature": "normalizeRgb(rgb)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/spectral/SpectralTypes",
    "path": "engine/reference/render/spectral/SpectralTypes.md",
    "source": "engine/render/spectral/SpectralTypes.js",
    "import": "/engine/render/spectral/SpectralTypes.js",
    "sourceHash": "b84d01105746c6b740a8b57ba08aac7d12b6e62a1d5c8460727e037407956b24",
    "summary": "",
    "exports": [
      {
        "name": "clamp01",
        "kind": "function",
        "signature": "clamp01(value)",
        "summary": ""
      },
      {
        "name": "clampRange",
        "kind": "function",
        "signature": "clampRange(value, min, max)",
        "summary": ""
      },
      {
        "name": "createWavelengthPacket",
        "kind": "function",
        "signature": "createWavelengthPacket(lambda, pdf, activeMask = 1, hero = 0)",
        "summary": ""
      },
      {
        "name": "createPhotonPacket",
        "kind": "function",
        "signature": "createPhotonPacket(position, direction, lambdaNm, flux, flags = 0, normal = null)",
        "summary": ""
      },
      {
        "name": "createVisiblePoint",
        "kind": "function",
        "signature": "createVisiblePoint(position, normal, materialId = 0, radius = SPECTRAL_DEFAULTS.photonRadius)",
        "summary": ""
      },
      {
        "name": "SPECTRAL_RANGE",
        "kind": "constant",
        "signature": "SPECTRAL_RANGE",
        "summary": ""
      },
      {
        "name": "SPECTRAL_DEFAULTS",
        "kind": "constant",
        "signature": "SPECTRAL_DEFAULTS",
        "summary": ""
      },
      {
        "name": "SPECTRUM_KIND",
        "kind": "constant",
        "signature": "SPECTRUM_KIND",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/spectral/SpectrumAsset",
    "path": "engine/reference/render/spectral/SpectrumAsset.md",
    "source": "engine/render/spectral/SpectrumAsset.js",
    "import": "/engine/render/spectral/SpectrumAsset.js",
    "sourceHash": "0b636a83dd3f19d0330f3e221812083b9107c39d7f17e861ef70fd745ae1d12e",
    "summary": "",
    "exports": [
      {
        "name": "SpectrumAsset",
        "kind": "class",
        "signature": "class SpectrumAsset",
        "summary": ""
      },
      {
        "name": "createConstantSpectrum",
        "kind": "function",
        "signature": "createConstantSpectrum(value = 1, scale = 1)",
        "summary": ""
      },
      {
        "name": "createTabulatedSpectrum",
        "kind": "function",
        "signature": "createTabulatedSpectrum(samples, scale = 1)",
        "summary": ""
      },
      {
        "name": "createBlackbodySpectrum",
        "kind": "function",
        "signature": "createBlackbodySpectrum(temperatureK = 6500, scale = 1)",
        "summary": ""
      },
      {
        "name": "createRgbSpectrum",
        "kind": "function",
        "signature": "createRgbSpectrum(rgb, scale = 1)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/spectral/WavelengthSampling",
    "path": "engine/reference/render/spectral/WavelengthSampling.md",
    "source": "engine/render/spectral/WavelengthSampling.js",
    "import": "/engine/render/spectral/WavelengthSampling.js",
    "sourceHash": "edcebe8c5f7c3c40143b19474d6530bf11a14a6f1a618bc9ce2128d555475986",
    "summary": "",
    "exports": [
      {
        "name": "visibleImportance",
        "kind": "function",
        "signature": "visibleImportance(lambdaNm)",
        "summary": ""
      },
      {
        "name": "wavelengthToBand",
        "kind": "function",
        "signature": "wavelengthToBand(lambdaNm, bandCount = 18, minNm = SPECTRAL_RANGE.minNm, maxNm = SPECTRAL_RANGE.maxNm)",
        "summary": ""
      },
      {
        "name": "bandCenterWavelength",
        "kind": "function",
        "signature": "bandCenterWavelength(band, bandCount = 18, minNm = SPECTRAL_RANGE.minNm, maxNm = SPECTRAL_RANGE.maxNm)",
        "summary": ""
      },
      {
        "name": "sampleVisibleWavelength",
        "kind": "function",
        "signature": "sampleVisibleWavelength(u = uniformDistribution(0, 1, Math.random)",
        "summary": ""
      },
      {
        "name": "sampleStratifiedVisiblePacket",
        "kind": "function",
        "signature": "sampleStratifiedVisiblePacket(seed = 1, count = 4)",
        "summary": ""
      },
      {
        "name": "samplePhotonWavelength",
        "kind": "function",
        "signature": "samplePhotonWavelength(lightSpectrum, seed = 1, bandCount = 18)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/spectral/index",
    "path": "engine/reference/render/spectral/index.md",
    "source": "engine/render/spectral/index.js",
    "import": "/engine/render/spectral/index.js",
    "sourceHash": "480a78fa603f5876178ffd827f504d0268f3d00321609f7090b376327d22c2ae",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "render/state/StateFirstEcsSourceAdapter",
    "path": "engine/reference/render/state/StateFirstEcsSourceAdapter.md",
    "source": "engine/render/state/StateFirstEcsSourceAdapter.js",
    "import": "/engine/render/state/StateFirstEcsSourceAdapter.js",
    "sourceHash": "49855335aa323042296c1096fcd80110eb5edf39ebd58f8b954c04b3a31efcad",
    "summary": "Typed, read-only adapter from the authoritative ECS Transform + Renderable archetypes to the State-First presentation source protocol. ECS continues to own identity and transform/renderable state. Presentation owns mesh bounds, importance, dirty state, and the currently materialized representation through explicit resolver callbacks. The adapter retains no entity records and applies policy only through `applyPresentation`.",
    "exports": [
      {
        "name": "StateFirstEcsSourceAdapter",
        "kind": "class",
        "signature": "class StateFirstEcsSourceAdapter",
        "summary": ""
      },
      {
        "name": "createStateFirstEcsSourceAdapter",
        "kind": "function",
        "signature": "createStateFirstEcsSourceAdapter(world, options)",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_ECS_METADATA_VERSION",
        "kind": "constant",
        "signature": "STATE_FIRST_ECS_METADATA_VERSION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/state/StateFirstExecutionBackend",
    "path": "engine/reference/render/state/StateFirstExecutionBackend.md",
    "source": "engine/render/state/StateFirstExecutionBackend.js",
    "import": "/engine/render/state/StateFirstExecutionBackend.js",
    "sourceHash": "1f43b5947f2c42e296ed3d33a4952909d54f8a1bdfaca9e105e7fa9b2687b81e",
    "summary": "Backend-neutral execution policy for State-First simulations. This object owns selection, frame-boundary switching, and measured reports. It deliberately does not own a CPU step function or GPU shader so the same contract can be shared by every State-First simulation.",
    "exports": [
      {
        "name": "StateFirstExecutionBackend",
        "kind": "class",
        "signature": "class StateFirstExecutionBackend",
        "summary": ""
      },
      {
        "name": "createStateFirstExecutionBackend",
        "kind": "function",
        "signature": "createStateFirstExecutionBackend(options = {})",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_EXECUTION_BACKEND",
        "kind": "constant",
        "signature": "STATE_FIRST_EXECUTION_BACKEND",
        "summary": "Backend-neutral execution policy for State-First simulations. This object owns selection, frame-boundary switching, and measured reports. It deliberately does not own a CPU step function or GPU shader so the same contract can be shared by every State-First simulation."
      },
      {
        "name": "STATE_FIRST_PARITY_STATUS",
        "kind": "constant",
        "signature": "STATE_FIRST_PARITY_STATUS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/state/StateFirstGpuCuller",
    "path": "engine/reference/render/state/StateFirstGpuCuller.md",
    "source": "engine/render/state/StateFirstGpuCuller.js",
    "import": "/engine/render/state/StateFirstGpuCuller.js",
    "sourceHash": "0bbf7d509cc367e70c49f553fa2f638770744ce32da984bff4f90fe5ddf2dbdf",
    "summary": "",
    "exports": [
      {
        "name": "StateFirstGpuCuller",
        "kind": "class",
        "signature": "class StateFirstGpuCuller",
        "summary": ""
      },
      {
        "name": "createStateFirstGpuCuller",
        "kind": "function",
        "signature": "createStateFirstGpuCuller(device, options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/state/StateFirstRasterizer",
    "path": "engine/reference/render/state/StateFirstRasterizer.md",
    "source": "engine/render/state/StateFirstRasterizer.js",
    "import": "/engine/render/state/StateFirstRasterizer.js",
    "sourceHash": "e858ad2cd4ef7dd69802d80c8b9cea705e7e857417ef5d0d916bc631b538f247",
    "summary": "",
    "exports": [
      {
        "name": "StateFirstRasterizer",
        "kind": "class",
        "signature": "class StateFirstRasterizer",
        "summary": ""
      },
      {
        "name": "stateFirstModeLabel",
        "kind": "function",
        "signature": "stateFirstModeLabel(mode)",
        "summary": ""
      },
      {
        "name": "chooseStateFirstRepresentation",
        "kind": "function",
        "signature": "chooseStateFirstRepresentation(pixelRadius, importance = 0, current = STATE_FIRST_REPRESENTATION.POINT, holdFrames = 0, thresholds = DEFAULT_THRESHOLDS, policy = null, lodRank = 0.5)",
        "summary": ""
      },
      {
        "name": "createStateFirstRasterizer",
        "kind": "function",
        "signature": "createStateFirstRasterizer(options)",
        "summary": ""
      },
      {
        "name": "RASTERIZER_MODE",
        "kind": "constant",
        "signature": "RASTERIZER_MODE",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_REPRESENTATION",
        "kind": "constant",
        "signature": "STATE_FIRST_REPRESENTATION",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_DIRTY",
        "kind": "constant",
        "signature": "STATE_FIRST_DIRTY",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_REPRESENTATION_NAMES",
        "kind": "constant",
        "signature": "STATE_FIRST_REPRESENTATION_NAMES",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_QUALITY_PROFILE",
        "kind": "constant",
        "signature": "STATE_FIRST_QUALITY_PROFILE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/state/StateFirstRetainedStorage",
    "path": "engine/reference/render/state/StateFirstRetainedStorage.md",
    "source": "engine/render/state/StateFirstRetainedStorage.js",
    "import": "/engine/render/state/StateFirstRetainedStorage.js",
    "sourceHash": "bc0e7fde8fd1632c852cfe04173f6f90d39dbcfba7247404fdc01d674afc7853",
    "summary": "Retained state backing for state-first renderers. Entity state lives at a stable entity-id-derived offset while each visual representation owns a dense u32 indirection bucket.  Representation changes therefore never move authoritative state, and an entity may participate in two buckets while an LOD cross-fade is in progress.",
    "exports": [
      {
        "name": "StateFirstRetainedStorage",
        "kind": "class",
        "signature": "class StateFirstRetainedStorage",
        "summary": ""
      },
      {
        "name": "createStateFirstRetainedStorage",
        "kind": "function",
        "signature": "createStateFirstRetainedStorage(device, options)",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_RETAINED_RECORD_FLOATS",
        "kind": "constant",
        "signature": "STATE_FIRST_RETAINED_RECORD_FLOATS",
        "summary": "Retained state backing for state-first renderers. Entity state lives at a stable entity-id-derived offset while each visual representation owns a dense u32 indirection bucket.  Representation changes therefore never move authoritative state, and an entity may participate in two buckets while an LOD cross-fade is in progress."
      },
      {
        "name": "STATE_FIRST_RETAINED_RECORD_BYTES",
        "kind": "constant",
        "signature": "STATE_FIRST_RETAINED_RECORD_BYTES",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_RETAINED_INDEX_BYTES",
        "kind": "constant",
        "signature": "STATE_FIRST_RETAINED_INDEX_BYTES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/state/StateFirstSourceBridge",
    "path": "engine/reference/render/state/StateFirstSourceBridge.md",
    "source": "engine/render/state/StateFirstSourceBridge.js",
    "import": "/engine/render/state/StateFirstSourceBridge.js",
    "sourceHash": "7fdf9016f5e51df92d649d8bf3768d7d65d807f603d6d068cb31737448ce5193",
    "summary": "Explicit runtime bridge between authoritative simulation state and the State-First presentation policy. The bridge deliberately does not guess GPU layouts or invent renderable entities from arbitrary objects. A source must publish the V1 protocol, provide semantic presentation entities, and consume the resulting plan. GPU sources additionally prove that their active byte range fits in the authoritative GPUBuffer on every update, which makes ping-pong buffers and capacity growth safe to expose without readback.",
    "exports": [
      {
        "name": "StateFirstSourceBridge",
        "kind": "class",
        "signature": "class StateFirstSourceBridge",
        "summary": ""
      },
      {
        "name": "discoverStateFirstSource",
        "kind": "function",
        "signature": "discoverStateFirstSource(candidate)",
        "summary": ""
      },
      {
        "name": "createStateFirstSourceBridge",
        "kind": "function",
        "signature": "createStateFirstSourceBridge(rasterizer, options)",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_SOURCE",
        "kind": "constant",
        "signature": "STATE_FIRST_SOURCE",
        "summary": "Explicit runtime bridge between authoritative simulation state and the State-First presentation policy. The bridge deliberately does not guess GPU layouts or invent renderable entities from arbitrary objects. A source must publish the V1 protocol, provide semantic presentation entities, and consume the resulting plan. GPU sources additionally prove that their active byte range fits in the authoritative GPUBuffer on every update, which makes ping-pong buffers and capacity growth safe to expose without readback."
      },
      {
        "name": "STATE_FIRST_SOURCE_VERSION",
        "kind": "constant",
        "signature": "STATE_FIRST_SOURCE_VERSION",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_SOURCE_KIND",
        "kind": "constant",
        "signature": "STATE_FIRST_SOURCE_KIND",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/state/index",
    "path": "engine/reference/render/state/index.md",
    "source": "engine/render/state/index.js",
    "import": "/engine/render/state/index.js",
    "sourceHash": "9df865d83ab650e3a287f9fb5527bcd16eddd143861868307a919dfb709dcfe7",
    "summary": "",
    "exports": [
      {
        "name": "RASTERIZER_MODE",
        "kind": "re-export",
        "signature": "RASTERIZER_MODE",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_DIRTY",
        "kind": "re-export",
        "signature": "STATE_FIRST_DIRTY",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_ECS_METADATA_VERSION",
        "kind": "re-export",
        "signature": "STATE_FIRST_ECS_METADATA_VERSION",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_EXECUTION_BACKEND",
        "kind": "re-export",
        "signature": "STATE_FIRST_EXECUTION_BACKEND",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_PARITY_STATUS",
        "kind": "re-export",
        "signature": "STATE_FIRST_PARITY_STATUS",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_QUALITY_PROFILE",
        "kind": "re-export",
        "signature": "STATE_FIRST_QUALITY_PROFILE",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_REPRESENTATION",
        "kind": "re-export",
        "signature": "STATE_FIRST_REPRESENTATION",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_REPRESENTATION_NAMES",
        "kind": "re-export",
        "signature": "STATE_FIRST_REPRESENTATION_NAMES",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_RETAINED_INDEX_BYTES",
        "kind": "re-export",
        "signature": "STATE_FIRST_RETAINED_INDEX_BYTES",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_RETAINED_RECORD_BYTES",
        "kind": "re-export",
        "signature": "STATE_FIRST_RETAINED_RECORD_BYTES",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_RETAINED_RECORD_FLOATS",
        "kind": "re-export",
        "signature": "STATE_FIRST_RETAINED_RECORD_FLOATS",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_SOURCE",
        "kind": "re-export",
        "signature": "STATE_FIRST_SOURCE",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_SOURCE_KIND",
        "kind": "re-export",
        "signature": "STATE_FIRST_SOURCE_KIND",
        "summary": ""
      },
      {
        "name": "STATE_FIRST_SOURCE_VERSION",
        "kind": "re-export",
        "signature": "STATE_FIRST_SOURCE_VERSION",
        "summary": ""
      },
      {
        "name": "StateFirstEcsSourceAdapter",
        "kind": "re-export",
        "signature": "StateFirstEcsSourceAdapter",
        "summary": ""
      },
      {
        "name": "StateFirstExecutionBackend",
        "kind": "re-export",
        "signature": "StateFirstExecutionBackend",
        "summary": ""
      },
      {
        "name": "StateFirstGpuCuller",
        "kind": "re-export",
        "signature": "StateFirstGpuCuller",
        "summary": ""
      },
      {
        "name": "StateFirstRasterizer",
        "kind": "re-export",
        "signature": "StateFirstRasterizer",
        "summary": ""
      },
      {
        "name": "StateFirstRetainedStorage",
        "kind": "re-export",
        "signature": "StateFirstRetainedStorage",
        "summary": ""
      },
      {
        "name": "StateFirstSourceBridge",
        "kind": "re-export",
        "signature": "StateFirstSourceBridge",
        "summary": ""
      },
      {
        "name": "chooseStateFirstRepresentation",
        "kind": "re-export",
        "signature": "chooseStateFirstRepresentation",
        "summary": ""
      },
      {
        "name": "createStateFirstEcsSourceAdapter",
        "kind": "re-export",
        "signature": "createStateFirstEcsSourceAdapter",
        "summary": ""
      },
      {
        "name": "createStateFirstExecutionBackend",
        "kind": "re-export",
        "signature": "createStateFirstExecutionBackend",
        "summary": ""
      },
      {
        "name": "createStateFirstGpuCuller",
        "kind": "re-export",
        "signature": "createStateFirstGpuCuller",
        "summary": ""
      },
      {
        "name": "createStateFirstRasterizer",
        "kind": "re-export",
        "signature": "createStateFirstRasterizer",
        "summary": ""
      },
      {
        "name": "createStateFirstRetainedStorage",
        "kind": "re-export",
        "signature": "createStateFirstRetainedStorage",
        "summary": ""
      },
      {
        "name": "createStateFirstSourceBridge",
        "kind": "re-export",
        "signature": "createStateFirstSourceBridge",
        "summary": ""
      },
      {
        "name": "discoverStateFirstSource",
        "kind": "re-export",
        "signature": "discoverStateFirstSource",
        "summary": ""
      },
      {
        "name": "stateFirstModeLabel",
        "kind": "re-export",
        "signature": "stateFirstModeLabel",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/streaming/VirtualTexturingSystem",
    "path": "engine/reference/render/streaming/VirtualTexturingSystem.md",
    "source": "engine/render/streaming/VirtualTexturingSystem.js",
    "import": "/engine/render/streaming/VirtualTexturingSystem.js",
    "sourceHash": "26b4abb484e5e4568b2f0586f877eea0c4e82173c41c9291f9009a8a7a02fd7f",
    "summary": "Virtual Texturing System - On-demand texture streaming Megatexture/Sparse Virtual Texture implementation Used for massive open worlds with unlimited texture detail Now powered by vGPU driver",
    "exports": [
      {
        "name": "VirtualTexturingSystem",
        "kind": "class",
        "signature": "class VirtualTexturingSystem",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/volumes/HybridVolumeSystem",
    "path": "engine/reference/render/volumes/HybridVolumeSystem.md",
    "source": "engine/render/volumes/HybridVolumeSystem.js",
    "import": "/engine/render/volumes/HybridVolumeSystem.js",
    "sourceHash": "c5655791c77cc0fed1e2164317c3ad2d2a2bed681bea069ae388c2f0fa1a9782",
    "summary": "",
    "exports": [
      {
        "name": "HybridVolumeSystem",
        "kind": "class",
        "signature": "class HybridVolumeSystem",
        "summary": ""
      },
      {
        "name": "VolumeRenderMode",
        "kind": "constant",
        "signature": "VolumeRenderMode",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/volumes/IsoSurfaceVolumeRenderer",
    "path": "engine/reference/render/volumes/IsoSurfaceVolumeRenderer.md",
    "source": "engine/render/volumes/IsoSurfaceVolumeRenderer.js",
    "import": "/engine/render/volumes/IsoSurfaceVolumeRenderer.js",
    "sourceHash": "e8b1918be7a702d7ae2cef2150180fbd5eaaf340ca2503415924dcb00a90e23b",
    "summary": "",
    "exports": [
      {
        "name": "createIsoSurfaceVolumeRenderer",
        "kind": "function",
        "signature": "async createIsoSurfaceVolumeRenderer(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/volumes/ParticleVolumeConnector",
    "path": "engine/reference/render/volumes/ParticleVolumeConnector.md",
    "source": "engine/render/volumes/ParticleVolumeConnector.js",
    "import": "/engine/render/volumes/ParticleVolumeConnector.js",
    "sourceHash": "c5dcbd1f76d8076c620dd82bef349cb6e8a4e4165760285329a813c1321d1a20",
    "summary": "Quick factory to create a connector and initialize it",
    "exports": [
      {
        "name": "ParticleVolumeConnector",
        "kind": "class",
        "signature": "class ParticleVolumeConnector",
        "summary": ""
      },
      {
        "name": "createParticleVolumeConnector",
        "kind": "function",
        "signature": "async createParticleVolumeConnector(device, options = {})",
        "summary": "Quick factory to create a connector and initialize it"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/volumes/SmokeVolumeRenderer",
    "path": "engine/reference/render/volumes/SmokeVolumeRenderer.md",
    "source": "engine/render/volumes/SmokeVolumeRenderer.js",
    "import": "/engine/render/volumes/SmokeVolumeRenderer.js",
    "sourceHash": "72d31c71d7e7c80be91fb5ac3931c2aec51fff485d368411d4af01a032dd8a2d",
    "summary": "",
    "exports": [
      {
        "name": "createSmokeVolumeRenderer",
        "kind": "function",
        "signature": "async createSmokeVolumeRenderer(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/volumes/UnifiedVolumeRenderer",
    "path": "engine/reference/render/volumes/UnifiedVolumeRenderer.md",
    "source": "engine/render/volumes/UnifiedVolumeRenderer.js",
    "import": "/engine/render/volumes/UnifiedVolumeRenderer.js",
    "sourceHash": "1868f2c598c7512c0d6a73dd865d98bb648ae00a1346f1b5c83f292a7b6b92c8",
    "summary": "",
    "exports": [
      {
        "name": "UnifiedVolumeRenderer",
        "kind": "class",
        "signature": "class UnifiedVolumeRenderer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/volumes/VolumeIntegration",
    "path": "engine/reference/render/volumes/VolumeIntegration.md",
    "source": "engine/render/volumes/VolumeIntegration.js",
    "import": "/engine/render/volumes/VolumeIntegration.js",
    "sourceHash": "4130ec95268343649274f700d0ea1666250f0ad548c4d935bf729b32a8873bfc",
    "summary": "",
    "exports": [
      {
        "name": "VolumeIntegration",
        "kind": "class",
        "signature": "class VolumeIntegration",
        "summary": ""
      },
      {
        "name": "createVolumeIntegration",
        "kind": "function",
        "signature": "createVolumeIntegration(device, options = {})",
        "summary": ""
      },
      {
        "name": "VolumeRenderMode",
        "kind": "re-export",
        "signature": "VolumeRenderMode",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "render/volumes/index",
    "path": "engine/reference/render/volumes/index.md",
    "source": "engine/render/volumes/index.js",
    "import": "/engine/render/volumes/index.js",
    "sourceHash": "f87e26cf6c6ea2d429d0f7508e2bb5db702bacf4d021cb0ff1b7440a3f15f798",
    "summary": "Quick factory to create a complete volumetric setup",
    "exports": [
      {
        "name": "createVolumetricSystem",
        "kind": "function",
        "signature": "async createVolumetricSystem(device, options = {})",
        "summary": "Quick factory to create a complete volumetric setup"
      },
      {
        "name": "DEFAULT_PARAMS",
        "kind": "re-export",
        "signature": "DEFAULT_PARAMS",
        "summary": ""
      },
      {
        "name": "DualModeRenderer",
        "kind": "re-export",
        "signature": "DualModeRenderer",
        "summary": ""
      },
      {
        "name": "HybridVolumeSystem",
        "kind": "re-export",
        "signature": "HybridVolumeSystem",
        "summary": ""
      },
      {
        "name": "LOD_THRESHOLDS",
        "kind": "re-export",
        "signature": "LOD_THRESHOLDS",
        "summary": ""
      },
      {
        "name": "ParticleVolumeConnector",
        "kind": "re-export",
        "signature": "ParticleVolumeConnector",
        "summary": ""
      },
      {
        "name": "RenderMode",
        "kind": "re-export",
        "signature": "RenderMode",
        "summary": ""
      },
      {
        "name": "UnifiedVolumeRenderer",
        "kind": "re-export",
        "signature": "UnifiedVolumeRenderer",
        "summary": ""
      },
      {
        "name": "ViewMode",
        "kind": "re-export",
        "signature": "ViewMode",
        "summary": ""
      },
      {
        "name": "VolumeIntegration",
        "kind": "re-export",
        "signature": "VolumeIntegration",
        "summary": ""
      },
      {
        "name": "VolumeRenderMode",
        "kind": "re-export",
        "signature": "VolumeRenderMode",
        "summary": ""
      },
      {
        "name": "VolumetricRaymarcher",
        "kind": "re-export",
        "signature": "VolumetricRaymarcher",
        "summary": ""
      },
      {
        "name": "createIsoSurfaceVolumeRenderer",
        "kind": "re-export",
        "signature": "createIsoSurfaceVolumeRenderer",
        "summary": ""
      },
      {
        "name": "createParticleVolumeConnector",
        "kind": "re-export",
        "signature": "createParticleVolumeConnector",
        "summary": ""
      },
      {
        "name": "createSmokeVolumeRenderer",
        "kind": "re-export",
        "signature": "createSmokeVolumeRenderer",
        "summary": ""
      },
      {
        "name": "createVolumeIntegration",
        "kind": "re-export",
        "signature": "createVolumeIntegration",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "scenes/PhysicsSandboxScene",
    "path": "engine/reference/scenes/PhysicsSandboxScene.md",
    "source": "engine/scenes/PhysicsSandboxScene.js",
    "import": "/engine/scenes/PhysicsSandboxScene.js",
    "sourceHash": "b585dad400a5ea82c23e0befef84a55f0b5b7bf4c3466e36adf7af370bc8f481",
    "summary": "",
    "exports": [
      {
        "name": "configurePhysicsSandboxScene",
        "kind": "function",
        "signature": "configurePhysicsSandboxScene(world, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/SimulationUpdate",
    "path": "engine/reference/sim/SimulationUpdate.md",
    "source": "engine/sim/SimulationUpdate.js",
    "import": "/engine/sim/SimulationUpdate.js",
    "sourceHash": "3649bffd9c68f739a609cc69f902a35797b3c6b3f4ada484a986d235dd55c508",
    "summary": "Step the particle simulation (emission, colliders, physics).",
    "exports": [
      {
        "name": "stepParticles",
        "kind": "function",
        "signature": "stepParticles(particles, options)",
        "summary": "Step the particle simulation (emission, colliders, physics)."
      },
      {
        "name": "stepFluid",
        "kind": "function",
        "signature": "stepFluid(smoke, particles, gpuDevice, delta, options = {})",
        "summary": "Step the fluid simulation (density splatting, advection)."
      },
      {
        "name": "stepAllSimulations",
        "kind": "function",
        "signature": "stepAllSimulations(state, delta, entities, options = {})",
        "summary": "Step all simulations in one call."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIAiming",
    "path": "engine/reference/sim/ai/AIAiming.md",
    "source": "engine/sim/ai/AIAiming.js",
    "import": "/engine/sim/ai/AIAiming.js",
    "sourceHash": "634491d239c2b7d114d0694e802f5848723eca77ffd94099bfed37663c4b9456",
    "summary": "Create a ray with pre-computed inverse direction for fast intersection tests",
    "exports": [
      {
        "name": "createRay",
        "kind": "function",
        "signature": "createRay(origin, direction)",
        "summary": "Create a ray with pre-computed inverse direction for fast intersection tests"
      },
      {
        "name": "rayAABBIntersect",
        "kind": "function",
        "signature": "rayAABBIntersect(ray, aabbMin, aabbMax)",
        "summary": "Ray-AABB intersection using the slab method Used by NVIDIA OptiX and other professional engines"
      },
      {
        "name": "raySphereIntersect",
        "kind": "function",
        "signature": "raySphereIntersect(rayOrigin, rayDir, sphereCenter, radius)",
        "summary": "Ray-sphere intersection using quadratic formula Good for character hitboxes and bounding spheres"
      },
      {
        "name": "hasLineOfSight",
        "kind": "function",
        "signature": "hasLineOfSight(from, to, obstacles, options = {})",
        "summary": "Check line of sight between two points against obstacle list"
      },
      {
        "name": "hasLineOfSightSpheres",
        "kind": "function",
        "signature": "hasLineOfSightSpheres(from, to, spheres, ignoreIds = [])",
        "summary": "Check line of sight with sphere obstacles (characters)"
      },
      {
        "name": "predictiveAim",
        "kind": "function",
        "signature": "predictiveAim(shooterPos, projectileSpeed, targetPos, targetVel)",
        "summary": "Calculate aim point to intercept a moving target Solves: |P + V×t|² = (S×t)² (quadratic intercept equation)"
      },
      {
        "name": "predictiveAimWithAcceleration",
        "kind": "function",
        "signature": "predictiveAimWithAcceleration(shooterPos, projectileSpeed, targetPos, targetVel, targetAccel, iterations = 4)",
        "summary": "Iterative predictive aim for accelerating targets"
      },
      {
        "name": "gaussianRandom",
        "kind": "function",
        "signature": "gaussianRandom(mean = 0, stdDev = 1, rng = null)",
        "summary": "Generate Gaussian-distributed random number using Box-Muller transform"
      },
      {
        "name": "applyAccuracySpread2D",
        "kind": "function",
        "signature": "applyAccuracySpread2D(aimDirection, spreadAngleRad)",
        "summary": "Apply accuracy spread to aim direction (2D version)"
      },
      {
        "name": "applyAccuracySpread3D",
        "kind": "function",
        "signature": "applyAccuracySpread3D(aimDirection, spreadAngleRad)",
        "summary": "Apply accuracy spread to aim direction (3D version) Generates a cone of spread around the aim direction"
      },
      {
        "name": "calculateThreatScore",
        "kind": "function",
        "signature": "calculateThreatScore(npc, target, options = {})",
        "summary": "Calculate threat score for a potential target"
      },
      {
        "name": "selectTarget",
        "kind": "function",
        "signature": "selectTarget(npc, candidates, options = {})",
        "summary": "Select best target from candidates with hysteresis"
      },
      {
        "name": "createTargetMemory",
        "kind": "function",
        "signature": "createTargetMemory()",
        "summary": "Create a target memory tracker for an NPC Remembers lost targets for a duration"
      },
      {
        "name": "updateTargetMemory",
        "kind": "function",
        "signature": "updateTargetMemory(memory, visibleTarget, now)",
        "summary": "Update target memory with current perception"
      },
      {
        "name": "getAimPointFromMemory",
        "kind": "function",
        "signature": "getAimPointFromMemory(memory, visibleTarget, now)",
        "summary": "Get aim point considering target memory"
      },
      {
        "name": "calculateAccuracyModifier",
        "kind": "function",
        "signature": "calculateAccuracyModifier(params)",
        "summary": "Calculate accuracy modifier based on combat conditions"
      },
      {
        "name": "degToRad",
        "kind": "function",
        "signature": "degToRad(deg)",
        "summary": "Convert degrees to radians"
      },
      {
        "name": "radToDeg",
        "kind": "function",
        "signature": "radToDeg(rad)",
        "summary": "Convert radians to degrees"
      },
      {
        "name": "distanceSquared",
        "kind": "function",
        "signature": "distanceSquared(a, b)",
        "summary": "Squared distance between two points (faster than actual distance)"
      },
      {
        "name": "distance",
        "kind": "function",
        "signature": "distance(a, b)",
        "summary": "Actual distance between two points"
      },
      {
        "name": "isWithinRange",
        "kind": "function",
        "signature": "isWithinRange(a, b, range)",
        "summary": "Check if distance is within range (uses squared comparison)"
      },
      {
        "name": "SKILL_LEVELS",
        "kind": "constant",
        "signature": "SKILL_LEVELS",
        "summary": "Skill level presets for accuracy parameters"
      },
      {
        "name": "DEFAULT_THREAT_WEIGHTS",
        "kind": "constant",
        "signature": "DEFAULT_THREAT_WEIGHTS",
        "summary": "Default threat weight factors"
      },
      {
        "name": "TARGET_SWITCH_THRESHOLD",
        "kind": "constant",
        "signature": "TARGET_SWITCH_THRESHOLD",
        "summary": "Hysteresis threshold - only switch targets if new threat exceeds by this factor"
      },
      {
        "name": "TARGET_MEMORY_DURATION_MS",
        "kind": "constant",
        "signature": "TARGET_MEMORY_DURATION_MS",
        "summary": "Time to remember lost targets (ms)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIAimingSystem",
    "path": "engine/reference/sim/ai/AIAimingSystem.md",
    "source": "engine/sim/ai/AIAimingSystem.js",
    "import": "/engine/sim/ai/AIAimingSystem.js",
    "sourceHash": "ae557fac8b8f7d926adc886061fa9fb4f5759b5ce9520480834159ad0319ad36",
    "summary": "Create an NPC combat controller",
    "exports": [
      {
        "name": "createNPCCombatController",
        "kind": "function",
        "signature": "createNPCCombatController(config = {})",
        "summary": "Create an NPC combat controller"
      },
      {
        "name": "initNPCWeapons",
        "kind": "function",
        "signature": "initNPCWeapons(npc, weaponList)",
        "summary": "Initialize weapons for an NPC"
      },
      {
        "name": "initNPCMelee",
        "kind": "function",
        "signature": "initNPCMelee(npc, config = {})",
        "summary": "Initialize melee for an NPC"
      },
      {
        "name": "createAIAimingSystem",
        "kind": "function",
        "signature": "createAIAimingSystem(config = {})",
        "summary": "Create the main AI aiming system"
      },
      {
        "name": "registerNPC",
        "kind": "function",
        "signature": "registerNPC(system, npc)",
        "summary": "Register an NPC with the aiming system"
      },
      {
        "name": "unregisterNPC",
        "kind": "function",
        "signature": "unregisterNPC(system, npcId)",
        "summary": "Unregister an NPC from the aiming system"
      },
      {
        "name": "updatePlayerPosition",
        "kind": "function",
        "signature": "updatePlayerPosition(system, position)",
        "summary": "Update player position for LOD calculations"
      },
      {
        "name": "updateAIAimingSystem",
        "kind": "function",
        "signature": "updateAIAimingSystem(system, deltaTimeMs, potentialTargets, obstacles)",
        "summary": "Main update function for the AI aiming system"
      },
      {
        "name": "npcFireWeapon",
        "kind": "function",
        "signature": "npcFireWeapon(system, npc, targets, obstacles)",
        "summary": "Command NPC to fire current weapon"
      },
      {
        "name": "npcMeleeAttack",
        "kind": "function",
        "signature": "npcMeleeAttack(npc, targets)",
        "summary": "Command NPC to perform melee attack"
      },
      {
        "name": "applyDamageToNPC",
        "kind": "function",
        "signature": "applyDamageToNPC(npc, damage, attackerId)",
        "summary": "Apply damage to NPC"
      },
      {
        "name": "decayDamageMemory",
        "kind": "function",
        "signature": "decayDamageMemory(npc, deltaTimeMs, decayRate = 10)",
        "summary": "Decay recent damage memory over time"
      },
      {
        "name": "getBatchRays",
        "kind": "function",
        "signature": "getBatchRays(system)",
        "summary": "Get all rays for GPU batch processing"
      },
      {
        "name": "applyBatchRayResults",
        "kind": "function",
        "signature": "applyBatchRayResults(system, results)",
        "summary": "Apply batch ray results from GPU"
      },
      {
        "name": "COMBAT_STATE",
        "kind": "constant",
        "signature": "COMBAT_STATE",
        "summary": "NPC combat states"
      },
      {
        "name": "LOD_UPDATE_INTERVALS",
        "kind": "constant",
        "signature": "LOD_UPDATE_INTERVALS",
        "summary": "LOD update frequencies (frame intervals)"
      },
      {
        "name": "ATTACK_PHASE",
        "kind": "re-export",
        "signature": "ATTACK_PHASE",
        "summary": ""
      },
      {
        "name": "SKILL_LEVELS",
        "kind": "re-export",
        "signature": "SKILL_LEVELS",
        "summary": ""
      },
      {
        "name": "WEAPON_PRESETS",
        "kind": "re-export",
        "signature": "WEAPON_PRESETS",
        "summary": ""
      },
      {
        "name": "WEAPON_TYPE",
        "kind": "re-export",
        "signature": "WEAPON_TYPE",
        "summary": ""
      },
      {
        "name": "applyAccuracySpread3D",
        "kind": "re-export",
        "signature": "applyAccuracySpread3D",
        "summary": ""
      },
      {
        "name": "calculateThreatScore",
        "kind": "re-export",
        "signature": "calculateThreatScore",
        "summary": ""
      },
      {
        "name": "createGrenade",
        "kind": "re-export",
        "signature": "createGrenade",
        "summary": ""
      },
      {
        "name": "createMeleeArc",
        "kind": "re-export",
        "signature": "createMeleeArc",
        "summary": ""
      },
      {
        "name": "createMeleeAttackState",
        "kind": "re-export",
        "signature": "createMeleeAttackState",
        "summary": ""
      },
      {
        "name": "createObjectPool",
        "kind": "re-export",
        "signature": "createObjectPool",
        "summary": ""
      },
      {
        "name": "createProjectile",
        "kind": "re-export",
        "signature": "createProjectile",
        "summary": ""
      },
      {
        "name": "createRay",
        "kind": "re-export",
        "signature": "createRay",
        "summary": ""
      },
      {
        "name": "createSpatialHash",
        "kind": "re-export",
        "signature": "createSpatialHash",
        "summary": ""
      },
      {
        "name": "fireHitscan",
        "kind": "re-export",
        "signature": "fireHitscan",
        "summary": ""
      },
      {
        "name": "fireShotgun",
        "kind": "re-export",
        "signature": "fireShotgun",
        "summary": ""
      },
      {
        "name": "gaussianRandom",
        "kind": "re-export",
        "signature": "gaussianRandom",
        "summary": ""
      },
      {
        "name": "isInCircularAoE",
        "kind": "re-export",
        "signature": "isInCircularAoE",
        "summary": ""
      },
      {
        "name": "isInConeAoE",
        "kind": "re-export",
        "signature": "isInConeAoE",
        "summary": ""
      },
      {
        "name": "isInMeleeArc",
        "kind": "re-export",
        "signature": "isInMeleeArc",
        "summary": ""
      },
      {
        "name": "poolAcquire",
        "kind": "re-export",
        "signature": "poolAcquire",
        "summary": ""
      },
      {
        "name": "poolRelease",
        "kind": "re-export",
        "signature": "poolRelease",
        "summary": ""
      },
      {
        "name": "predictiveAim",
        "kind": "re-export",
        "signature": "predictiveAim",
        "summary": ""
      },
      {
        "name": "predictiveAimWithAcceleration",
        "kind": "re-export",
        "signature": "predictiveAimWithAcceleration",
        "summary": ""
      },
      {
        "name": "rayAABBIntersect",
        "kind": "re-export",
        "signature": "rayAABBIntersect",
        "summary": ""
      },
      {
        "name": "raySphereIntersect",
        "kind": "re-export",
        "signature": "raySphereIntersect",
        "summary": ""
      },
      {
        "name": "spatialHashInsert",
        "kind": "re-export",
        "signature": "spatialHashInsert",
        "summary": ""
      },
      {
        "name": "spatialHashQueryRadius",
        "kind": "re-export",
        "signature": "spatialHashQueryRadius",
        "summary": ""
      },
      {
        "name": "spatialHashRemove",
        "kind": "re-export",
        "signature": "spatialHashRemove",
        "summary": ""
      },
      {
        "name": "spatialHashUpdate",
        "kind": "re-export",
        "signature": "spatialHashUpdate",
        "summary": ""
      },
      {
        "name": "updateGrenade",
        "kind": "re-export",
        "signature": "updateGrenade",
        "summary": ""
      },
      {
        "name": "updateProjectile",
        "kind": "re-export",
        "signature": "updateProjectile",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIBehaviorTree",
    "path": "engine/reference/sim/ai/AIBehaviorTree.md",
    "source": "engine/sim/ai/AIBehaviorTree.js",
    "import": "/engine/sim/ai/AIBehaviorTree.js",
    "sourceHash": "eb167158a8bab1a5c5cdb82b1bf9652c120e667117ea7e9190d22f5bacfc6b3b",
    "summary": "Create a Selector node (OR logic) Runs children left-to-right, succeeds if ANY child succeeds",
    "exports": [
      {
        "name": "createSelector",
        "kind": "function",
        "signature": "createSelector(name, children = [])",
        "summary": "Create a Selector node (OR logic) Runs children left-to-right, succeeds if ANY child succeeds"
      },
      {
        "name": "createSequence",
        "kind": "function",
        "signature": "createSequence(name, children = [])",
        "summary": "Create a Sequence node (AND logic) Runs children left-to-right, fails if ANY child fails"
      },
      {
        "name": "createParallel",
        "kind": "function",
        "signature": "createParallel(name, children = [], successThreshold = -1, failureThreshold = 1)",
        "summary": "Create a Parallel node Runs all children simultaneously"
      },
      {
        "name": "createRandomSelector",
        "kind": "function",
        "signature": "createRandomSelector(name, children = [])",
        "summary": "Create a Random Selector (picks random child)"
      },
      {
        "name": "createInverter",
        "kind": "function",
        "signature": "createInverter(name, child)",
        "summary": "Create an Inverter decorator Inverts child result: SUCCESS ↔ FAILURE"
      },
      {
        "name": "createRepeater",
        "kind": "function",
        "signature": "createRepeater(name, child, times = -1)",
        "summary": "Create a Repeater decorator Repeats child N times or until failure"
      },
      {
        "name": "createUntilFail",
        "kind": "function",
        "signature": "createUntilFail(name, child)",
        "summary": "Create an UntilFail decorator Repeats child until it fails"
      },
      {
        "name": "createUntilSuccess",
        "kind": "function",
        "signature": "createUntilSuccess(name, child)",
        "summary": "Create an UntilSuccess decorator Repeats child until it succeeds"
      },
      {
        "name": "createSucceeder",
        "kind": "function",
        "signature": "createSucceeder(name, child)",
        "summary": "Create a Succeeder decorator Always returns SUCCESS"
      },
      {
        "name": "createFailer",
        "kind": "function",
        "signature": "createFailer(name, child)",
        "summary": "Create a Failer decorator Always returns FAILURE"
      },
      {
        "name": "createCooldown",
        "kind": "function",
        "signature": "createCooldown(name, child, cooldownMs)",
        "summary": "Create a Cooldown decorator Prevents child from running until cooldown expires"
      },
      {
        "name": "createConditionGuard",
        "kind": "function",
        "signature": "createConditionGuard(name, child, condition)",
        "summary": "Create a Condition Guard decorator Only runs child if condition is met"
      },
      {
        "name": "createAction",
        "kind": "function",
        "signature": "createAction(name, action)",
        "summary": "Create an Action leaf node"
      },
      {
        "name": "createCondition",
        "kind": "function",
        "signature": "createCondition(name, condition)",
        "summary": "Create a Condition leaf node"
      },
      {
        "name": "createWait",
        "kind": "function",
        "signature": "createWait(name, durationMs)",
        "summary": "Create a Wait leaf node"
      },
      {
        "name": "createLog",
        "kind": "function",
        "signature": "createLog(name, message)",
        "summary": "Create a Log leaf node (for debugging)"
      },
      {
        "name": "tickNode",
        "kind": "function",
        "signature": "tickNode(node, blackboard, deltaTime)",
        "summary": "Tick a behavior tree node"
      },
      {
        "name": "resetNode",
        "kind": "function",
        "signature": "resetNode(node)",
        "summary": "Reset a behavior tree node and all children"
      },
      {
        "name": "createTreeRunner",
        "kind": "function",
        "signature": "createTreeRunner(rootNode, blackboard)",
        "summary": "Create a behavior tree runner"
      },
      {
        "name": "tickTree",
        "kind": "function",
        "signature": "tickTree(runner, deltaTime)",
        "summary": "Tick the behavior tree"
      },
      {
        "name": "createCombatTree",
        "kind": "function",
        "signature": "createCombatTree(actions)",
        "summary": "Create a common combat behavior tree"
      },
      {
        "name": "NODE_STATUS",
        "kind": "constant",
        "signature": "NODE_STATUS",
        "summary": ""
      },
      {
        "name": "NODE_TYPES",
        "kind": "re-export",
        "signature": "NODE_TYPES",
        "summary": ""
      },
      {
        "name": "getNodeTypeId",
        "kind": "re-export",
        "signature": "getNodeTypeId",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AICover",
    "path": "engine/reference/sim/ai/AICover.md",
    "source": "engine/sim/ai/AICover.js",
    "import": "/engine/sim/ai/AICover.js",
    "sourceHash": "1060f329acd8c23cc1ad1addc08216d0145838fa1a379abe293c8320b8c11207",
    "summary": "Create a cover point definition",
    "exports": [
      {
        "name": "createCoverPoint",
        "kind": "function",
        "signature": "createCoverPoint(position, normal, options = {})",
        "summary": "Create a cover point definition"
      },
      {
        "name": "computePeekPositions",
        "kind": "function",
        "signature": "computePeekPositions(cover)",
        "summary": "Pre-compute peek positions for a cover point"
      },
      {
        "name": "detectCoverPoints",
        "kind": "function",
        "signature": "detectCoverPoints(obstacles, sampleSpacing = 2)",
        "summary": "Find cover points from obstacle geometry"
      },
      {
        "name": "scoreCoverPoint",
        "kind": "function",
        "signature": "scoreCoverPoint(cover, npcPos, threatPos, obstacles, options = {})",
        "summary": "Score a cover point for a given tactical situation"
      },
      {
        "name": "findBestCover",
        "kind": "function",
        "signature": "findBestCover(coverPoints, npcPos, threatPos, obstacles, options = {})",
        "summary": "Find best cover point from available options"
      },
      {
        "name": "createCoverState",
        "kind": "function",
        "signature": "createCoverState()",
        "summary": "Create NPC cover state tracker"
      },
      {
        "name": "enterCover",
        "kind": "function",
        "signature": "enterCover(state, cover, npcId)",
        "summary": "Enter cover at a cover point"
      },
      {
        "name": "exitCover",
        "kind": "function",
        "signature": "exitCover(state)",
        "summary": "Exit current cover"
      },
      {
        "name": "startPeek",
        "kind": "function",
        "signature": "startPeek(state, action, now)",
        "summary": "Start peek action from cover"
      },
      {
        "name": "updateCoverState",
        "kind": "function",
        "signature": "updateCoverState(state, now)",
        "summary": "Update cover state"
      },
      {
        "name": "getCoverShootPosition",
        "kind": "function",
        "signature": "getCoverShootPosition(state, basePos)",
        "summary": "Get current shoot position based on cover action"
      },
      {
        "name": "canShootFromCover",
        "kind": "function",
        "signature": "canShootFromCover(state)",
        "summary": "Check if NPC can shoot from current cover state"
      },
      {
        "name": "applySuppression",
        "kind": "function",
        "signature": "applySuppression(state, duration, now)",
        "summary": "Apply suppression to an NPC"
      },
      {
        "name": "isSuppressed",
        "kind": "function",
        "signature": "isSuppressed(state, now)",
        "summary": "Check if NPC is suppressed"
      },
      {
        "name": "damageCover",
        "kind": "function",
        "signature": "damageCover(cover, damage)",
        "summary": "Apply damage to cover point"
      },
      {
        "name": "findFlankingPositions",
        "kind": "function",
        "signature": "findFlankingPositions(targetPos, targetFacing, flankDistance, coverPoints, obstacles)",
        "summary": "Find flanking positions around a target"
      },
      {
        "name": "findRetreatCover",
        "kind": "function",
        "signature": "findRetreatCover(npcPos, threatPos, coverPoints, obstacles, minRetreatDist = 10)",
        "summary": "Find retreat positions away from threat"
      },
      {
        "name": "COVER_QUALITY",
        "kind": "constant",
        "signature": "COVER_QUALITY",
        "summary": "Cover quality thresholds"
      },
      {
        "name": "COVER_ACTION",
        "kind": "constant",
        "signature": "COVER_ACTION",
        "summary": "Cover action types"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AICrowd",
    "path": "engine/reference/sim/ai/AICrowd.md",
    "source": "engine/sim/ai/AICrowd.js",
    "import": "/engine/sim/ai/AICrowd.js",
    "sourceHash": "1bd559a5b547aedc624190346c5750064e16706e1d26817245aae2ee6f192a36",
    "summary": "Calculate social force (Helbing model)",
    "exports": [
      {
        "name": "calculateSocialForce",
        "kind": "function",
        "signature": "calculateSocialForce(agent, neighbors, walls, goal)",
        "summary": "Calculate social force (Helbing model)"
      },
      {
        "name": "createCrowdAgent",
        "kind": "function",
        "signature": "createCrowdAgent(position, config = {})",
        "summary": "Create crowd agent"
      },
      {
        "name": "createCrowdSystem",
        "kind": "function",
        "signature": "createCrowdSystem(config = {})",
        "summary": "Create crowd system"
      },
      {
        "name": "addCrowdAgent",
        "kind": "function",
        "signature": "addCrowdAgent(crowd, agent)",
        "summary": "Add agent to crowd"
      },
      {
        "name": "removeCrowdAgent",
        "kind": "function",
        "signature": "removeCrowdAgent(crowd, agentId)",
        "summary": "Remove agent from crowd"
      },
      {
        "name": "addCrowdWall",
        "kind": "function",
        "signature": "addCrowdWall(crowd, start, end)",
        "summary": "Add wall to crowd system"
      },
      {
        "name": "addAttractor",
        "kind": "function",
        "signature": "addAttractor(crowd, position, strength, radius)",
        "summary": "Add attractor (draws crowd)"
      },
      {
        "name": "triggerPanic",
        "kind": "function",
        "signature": "triggerPanic(crowd, source, radius, intensity = 1)",
        "summary": "Trigger panic"
      },
      {
        "name": "triggerEvacuation",
        "kind": "function",
        "signature": "triggerEvacuation(crowd)",
        "summary": "Set evacuation mode"
      },
      {
        "name": "updateCrowd",
        "kind": "function",
        "signature": "updateCrowd(crowd, deltaTime)",
        "summary": "Update crowd simulation"
      },
      {
        "name": "getCrowdStats",
        "kind": "function",
        "signature": "getCrowdStats(crowd)",
        "summary": "Get crowd statistics"
      },
      {
        "name": "CROWD_BEHAVIOR",
        "kind": "constant",
        "signature": "CROWD_BEHAVIOR",
        "summary": "Crowd behavior modes"
      },
      {
        "name": "AGENT_STATE",
        "kind": "constant",
        "signature": "AGENT_STATE",
        "summary": "Individual agent states"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIDialogue",
    "path": "engine/reference/sim/ai/AIDialogue.md",
    "source": "engine/sim/ai/AIDialogue.js",
    "import": "/engine/sim/ai/AIDialogue.js",
    "sourceHash": "e60add376dceaf9aead5f23e8be9a8d74628b816071d70ad57d02d520703e55e",
    "summary": "Create a dialogue tree",
    "exports": [
      {
        "name": "createDialogueTree",
        "kind": "function",
        "signature": "createDialogueTree(id, config = {})",
        "summary": "Create a dialogue tree"
      },
      {
        "name": "createDialogueNode",
        "kind": "function",
        "signature": "createDialogueNode(config)",
        "summary": "Create a dialogue node"
      },
      {
        "name": "addDialogueNode",
        "kind": "function",
        "signature": "addDialogueNode(tree, node)",
        "summary": "Add node to dialogue tree"
      },
      {
        "name": "createDialogueState",
        "kind": "function",
        "signature": "createDialogueState()",
        "summary": "Create dialogue state for an NPC"
      },
      {
        "name": "addDialogueTree",
        "kind": "function",
        "signature": "addDialogueTree(state, tree)",
        "summary": "Add dialogue tree to NPC"
      },
      {
        "name": "setDialogueFlag",
        "kind": "function",
        "signature": "setDialogueFlag(state, flag, value)",
        "summary": "Set dialogue flag"
      },
      {
        "name": "getDialogueFlag",
        "kind": "function",
        "signature": "getDialogueFlag(state, flag, defaultValue = null)",
        "summary": "Get dialogue flag"
      },
      {
        "name": "startConversation",
        "kind": "function",
        "signature": "startConversation(state, context = {})",
        "summary": "Start conversation with NPC"
      },
      {
        "name": "processCurrentNode",
        "kind": "function",
        "signature": "processCurrentNode(state, context = {})",
        "summary": "Process current dialogue node"
      },
      {
        "name": "selectChoice",
        "kind": "function",
        "signature": "selectChoice(state, choiceIndex, context = {})",
        "summary": "Select player choice"
      },
      {
        "name": "continueDialogue",
        "kind": "function",
        "signature": "continueDialogue(state, context = {})",
        "summary": "Continue to next dialogue (for NPC lines)"
      },
      {
        "name": "dialogueBuilder",
        "kind": "function",
        "signature": "dialogueBuilder(id)",
        "summary": "Fluent dialogue tree builder"
      },
      {
        "name": "NODE_TYPE",
        "kind": "constant",
        "signature": "NODE_TYPE",
        "summary": "Node types"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIDirector",
    "path": "engine/reference/sim/ai/AIDirector.md",
    "source": "engine/sim/ai/AIDirector.js",
    "import": "/engine/sim/ai/AIDirector.js",
    "sourceHash": "b10ac27dd06d407530f1d370ffd4856103d7ce037e6eed5b5c5aac55e51d7505",
    "summary": "Create player state tracker",
    "exports": [
      {
        "name": "createPlayerState",
        "kind": "function",
        "signature": "createPlayerState()",
        "summary": "Create player state tracker"
      },
      {
        "name": "updatePlayerState",
        "kind": "function",
        "signature": "updatePlayerState(state, data, deltaTime)",
        "summary": "Update player state metrics"
      },
      {
        "name": "createPacingController",
        "kind": "function",
        "signature": "createPacingController(config = {})",
        "summary": "Create pacing controller"
      },
      {
        "name": "updatePacing",
        "kind": "function",
        "signature": "updatePacing(pacing, playerState, deltaTime)",
        "summary": "Update pacing state"
      },
      {
        "name": "createSpawnDirector",
        "kind": "function",
        "signature": "createSpawnDirector(config = {})",
        "summary": "Create spawn director"
      },
      {
        "name": "registerSpawnType",
        "kind": "function",
        "signature": "registerSpawnType(director, intensity, spawnType)",
        "summary": "Register spawn type"
      },
      {
        "name": "addSpawnPoint",
        "kind": "function",
        "signature": "addSpawnPoint(director, point)",
        "summary": "Add spawn point"
      },
      {
        "name": "updateSpawnDirector",
        "kind": "function",
        "signature": "updateSpawnDirector(director, pacing, playerPosition, deltaTime)",
        "summary": "Update spawn director"
      },
      {
        "name": "reportSpawnKilled",
        "kind": "function",
        "signature": "reportSpawnKilled(director, spawnId)",
        "summary": "Report spawn killed"
      },
      {
        "name": "createDifficultyScaler",
        "kind": "function",
        "signature": "createDifficultyScaler(config = {})",
        "summary": "Create difficulty scaler"
      },
      {
        "name": "updateDifficulty",
        "kind": "function",
        "signature": "updateDifficulty(scaler, playerState, deltaTime)",
        "summary": "Update difficulty based on player performance"
      },
      {
        "name": "createAIDirector",
        "kind": "function",
        "signature": "createAIDirector(config = {})",
        "summary": "Create complete AI Director"
      },
      {
        "name": "updateAIDirector",
        "kind": "function",
        "signature": "updateAIDirector(director, gameData, deltaTime)",
        "summary": "Update AI Director"
      },
      {
        "name": "PACING_STATE",
        "kind": "constant",
        "signature": "PACING_STATE",
        "summary": "Pacing states"
      },
      {
        "name": "INTENSITY_LEVEL",
        "kind": "constant",
        "signature": "INTENSITY_LEVEL",
        "summary": "Intensity levels"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIEcology",
    "path": "engine/reference/sim/ai/AIEcology.md",
    "source": "engine/sim/ai/AIEcology.js",
    "import": "/engine/sim/ai/AIEcology.js",
    "sourceHash": "69bd4af8e6f80748e89bb42d7c08882e3ec9ef0a0072124b04782c1466db257e",
    "summary": "Create species definition",
    "exports": [
      {
        "name": "createSpecies",
        "kind": "function",
        "signature": "createSpecies(config)",
        "summary": "Create species definition"
      },
      {
        "name": "createCreature",
        "kind": "function",
        "signature": "createCreature(species, position)",
        "summary": "Create creature instance"
      },
      {
        "name": "createEcosystem",
        "kind": "function",
        "signature": "createEcosystem(config = {})",
        "summary": "Create ecosystem manager"
      },
      {
        "name": "registerSpecies",
        "kind": "function",
        "signature": "registerSpecies(eco, species)",
        "summary": "Register species in ecosystem"
      },
      {
        "name": "spawnCreature",
        "kind": "function",
        "signature": "spawnCreature(eco, speciesId, position)",
        "summary": "Spawn creature in ecosystem"
      },
      {
        "name": "removeCreature",
        "kind": "function",
        "signature": "removeCreature(eco, creatureId, cause = \"natural\")",
        "summary": "Remove creature from ecosystem"
      },
      {
        "name": "createFoodSource",
        "kind": "function",
        "signature": "createFoodSource(eco, position, type, nutrition)",
        "summary": "Create food source"
      },
      {
        "name": "consumeFood",
        "kind": "function",
        "signature": "consumeFood(eco, foodId, amount)",
        "summary": "Consume food source"
      },
      {
        "name": "createPack",
        "kind": "function",
        "signature": "createPack(eco, speciesId, leaderId)",
        "summary": "Create pack/herd"
      },
      {
        "name": "addToPack",
        "kind": "function",
        "signature": "addToPack(eco, packId, creatureId)",
        "summary": "Add creature to pack"
      },
      {
        "name": "updateCreature",
        "kind": "function",
        "signature": "updateCreature(eco, creature, deltaHours)",
        "summary": "Update creature behavior"
      },
      {
        "name": "updateEcosystem",
        "kind": "function",
        "signature": "updateEcosystem(eco, deltaHours)",
        "summary": "Update entire ecosystem"
      },
      {
        "name": "getEcosystemStats",
        "kind": "function",
        "signature": "getEcosystemStats(eco)",
        "summary": "Get ecosystem statistics"
      },
      {
        "name": "SPECIES_ROLE",
        "kind": "constant",
        "signature": "SPECIES_ROLE",
        "summary": "Species roles in ecosystem"
      },
      {
        "name": "CREATURE_STATE",
        "kind": "constant",
        "signature": "CREATURE_STATE",
        "summary": "Activity states"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIEconomy",
    "path": "engine/reference/sim/ai/AIEconomy.md",
    "source": "engine/sim/ai/AIEconomy.js",
    "import": "/engine/sim/ai/AIEconomy.js",
    "sourceHash": "b8f0adf00b470a6d0b1bb7d4179819db63d609eb3ceceb2a01e24b7e8ad78089",
    "summary": "Create resource definition",
    "exports": [
      {
        "name": "createResource",
        "kind": "function",
        "signature": "createResource(config)",
        "summary": "Create resource definition"
      },
      {
        "name": "createMarket",
        "kind": "function",
        "signature": "createMarket(config = {})",
        "summary": "Create a market (trading location)"
      },
      {
        "name": "initMarketResource",
        "kind": "function",
        "signature": "initMarketResource(market, resource, initialSupply = 100, baseDemand = 10)",
        "summary": "Initialize resource in market"
      },
      {
        "name": "calculatePrice",
        "kind": "function",
        "signature": "calculatePrice(market, resourceId)",
        "summary": "Calculate current price based on supply/demand"
      },
      {
        "name": "updateMarketPrices",
        "kind": "function",
        "signature": "updateMarketPrices(market, deltaHours)",
        "summary": "Update market prices"
      },
      {
        "name": "buyFromMarket",
        "kind": "function",
        "signature": "buyFromMarket(market, resourceId, quantity, buyer)",
        "summary": "Execute a buy transaction"
      },
      {
        "name": "sellToMarket",
        "kind": "function",
        "signature": "sellToMarket(market, resourceId, quantity, seller)",
        "summary": "Execute a sell transaction"
      },
      {
        "name": "createInventory",
        "kind": "function",
        "signature": "createInventory(capacity = 100)",
        "summary": "Create inventory"
      },
      {
        "name": "addToInventory",
        "kind": "function",
        "signature": "addToInventory(inventory, resourceId, quantity, resourceDef)",
        "summary": "Add items to inventory"
      },
      {
        "name": "removeFromInventory",
        "kind": "function",
        "signature": "removeFromInventory(inventory, resourceId, quantity, resourceDef)",
        "summary": "Remove items from inventory"
      },
      {
        "name": "createRecipe",
        "kind": "function",
        "signature": "createRecipe(config)",
        "summary": "Create crafting recipe"
      },
      {
        "name": "canCraft",
        "kind": "function",
        "signature": "canCraft(recipe, inventory, skills = {})",
        "summary": "Check if can craft recipe"
      },
      {
        "name": "craft",
        "kind": "function",
        "signature": "craft(recipe, inventory, resourceDefs, skills = {})",
        "summary": "Execute crafting"
      },
      {
        "name": "createProductionBuilding",
        "kind": "function",
        "signature": "createProductionBuilding(config)",
        "summary": "Create production building"
      },
      {
        "name": "updateProductionBuilding",
        "kind": "function",
        "signature": "updateProductionBuilding(building, recipes, resourceDefs, deltaHours)",
        "summary": "Update production building"
      },
      {
        "name": "createEconomyManager",
        "kind": "function",
        "signature": "createEconomyManager()",
        "summary": "Create economy manager"
      },
      {
        "name": "registerResource",
        "kind": "function",
        "signature": "registerResource(manager, resource)",
        "summary": "Register resource"
      },
      {
        "name": "registerRecipe",
        "kind": "function",
        "signature": "registerRecipe(manager, recipe)",
        "summary": "Register recipe"
      },
      {
        "name": "updateEconomy",
        "kind": "function",
        "signature": "updateEconomy(manager, deltaHours)",
        "summary": "Update entire economy"
      },
      {
        "name": "RESOURCE_CATEGORY",
        "kind": "constant",
        "signature": "RESOURCE_CATEGORY",
        "summary": "Resource categories"
      },
      {
        "name": "MARKET_TREND",
        "kind": "constant",
        "signature": "MARKET_TREND",
        "summary": "Market trend directions"
      },
      {
        "name": "PRESET_RESOURCES",
        "kind": "constant",
        "signature": "PRESET_RESOURCES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIEvasion",
    "path": "engine/reference/sim/ai/AIEvasion.md",
    "source": "engine/sim/ai/AIEvasion.js",
    "import": "/engine/sim/ai/AIEvasion.js",
    "sourceHash": "7c4c3237b4789b534aab9867498323f5592f7d7c79cfb6fb9a4e17c855c19186",
    "summary": "Create evasion state for an NPC",
    "exports": [
      {
        "name": "createEvasionState",
        "kind": "function",
        "signature": "createEvasionState(params = {})",
        "summary": "Create evasion state for an NPC"
      },
      {
        "name": "startDodge",
        "kind": "function",
        "signature": "startDodge(state, dodgeType, npcPos, npcFacing, now)",
        "summary": "Attempt to dodge in a direction"
      },
      {
        "name": "updateEvasion",
        "kind": "function",
        "signature": "updateEvasion(state, now)",
        "summary": "Update evasion state"
      },
      {
        "name": "isEvading",
        "kind": "function",
        "signature": "isEvading(state)",
        "summary": "Check if NPC is currently evading"
      },
      {
        "name": "canDodge",
        "kind": "function",
        "signature": "canDodge(state, now)",
        "summary": "Check if NPC can dodge"
      },
      {
        "name": "updateStrafe",
        "kind": "function",
        "signature": "updateStrafe(state, npcFacing, deltaTime)",
        "summary": "Update strafe behavior"
      },
      {
        "name": "setStrafeDirection",
        "kind": "function",
        "signature": "setStrafeDirection(state, direction)",
        "summary": "Set explicit strafe direction"
      },
      {
        "name": "reactToThreat",
        "kind": "function",
        "signature": "reactToThreat(state, npcPos, npcFacing, threatDir, now, options = {})",
        "summary": "React to incoming threat (projectile, attack)"
      },
      {
        "name": "checkProjectileThreats",
        "kind": "function",
        "signature": "checkProjectileThreats(state, npcPos, npcFacing, projectiles, now)",
        "summary": "Check for incoming projectiles and react"
      },
      {
        "name": "checkGrenadeThreats",
        "kind": "function",
        "signature": "checkGrenadeThreats(state, npcPos, npcFacing, grenades, now)",
        "summary": "Check for grenades and react"
      },
      {
        "name": "generateCombatMovement",
        "kind": "function",
        "signature": "generateCombatMovement(state, npcPos, targetPos, deltaTimeMs)",
        "summary": "Generate unpredictable movement pattern"
      },
      {
        "name": "circleStrafe",
        "kind": "function",
        "signature": "circleStrafe(npcPos, targetPos, direction, speed)",
        "summary": "Calculate circle-strafe velocity around target"
      },
      {
        "name": "getEvasionParamsForSkill",
        "kind": "function",
        "signature": "getEvasionParamsForSkill(skill)",
        "summary": "Get evasion parameters for skill level"
      },
      {
        "name": "EVASION_TYPE",
        "kind": "constant",
        "signature": "EVASION_TYPE",
        "summary": "Evasion action types"
      },
      {
        "name": "DEFAULT_EVASION_PARAMS",
        "kind": "constant",
        "signature": "DEFAULT_EVASION_PARAMS",
        "summary": "Default evasion parameters"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIFaction",
    "path": "engine/reference/sim/ai/AIFaction.md",
    "source": "engine/sim/ai/AIFaction.js",
    "import": "/engine/sim/ai/AIFaction.js",
    "sourceHash": "75f7eae497b4e4f998467e7745f9ac65bfc7deccd0f826ebf2d820b62712697f",
    "summary": "Create a faction",
    "exports": [
      {
        "name": "createFaction",
        "kind": "function",
        "signature": "createFaction(config)",
        "summary": "Create a faction"
      },
      {
        "name": "createFactionManager",
        "kind": "function",
        "signature": "createFactionManager()",
        "summary": "Create faction manager"
      },
      {
        "name": "registerFaction",
        "kind": "function",
        "signature": "registerFaction(manager, faction)",
        "summary": "Register a faction"
      },
      {
        "name": "getEntityFaction",
        "kind": "function",
        "signature": "getEntityFaction(manager, entityId)",
        "summary": "Get entity's faction"
      },
      {
        "name": "addToFaction",
        "kind": "function",
        "signature": "addToFaction(manager, entityId, factionId)",
        "summary": "Add entity to faction"
      },
      {
        "name": "setDiplomaticStance",
        "kind": "function",
        "signature": "setDiplomaticStance(manager, factionA, factionB, stance)",
        "summary": "Set diplomatic stance between factions"
      },
      {
        "name": "getDiplomaticStance",
        "kind": "function",
        "signature": "getDiplomaticStance(manager, factionA, factionB)",
        "summary": "Get diplomatic stance between factions"
      },
      {
        "name": "areFactionsHostile",
        "kind": "function",
        "signature": "areFactionsHostile(manager, factionA, factionB)",
        "summary": "Check if factions are hostile"
      },
      {
        "name": "areFactionsAllied",
        "kind": "function",
        "signature": "areFactionsAllied(manager, factionA, factionB)",
        "summary": "Check if factions are allied"
      },
      {
        "name": "areEntitiesHostile",
        "kind": "function",
        "signature": "areEntitiesHostile(manager, entityA, entityB)",
        "summary": "Check if two entities are hostile to each other"
      },
      {
        "name": "modifyPlayerReputation",
        "kind": "function",
        "signature": "modifyPlayerReputation(manager, factionId, delta)",
        "summary": "Modify player reputation with faction"
      },
      {
        "name": "getPlayerReputationLevel",
        "kind": "function",
        "signature": "getPlayerReputationLevel(manager, factionId)",
        "summary": "Get player reputation level with faction"
      },
      {
        "name": "canAccessFactionService",
        "kind": "function",
        "signature": "canAccessFactionService(manager, factionId, service)",
        "summary": "Check if player can access faction services"
      },
      {
        "name": "createTreaty",
        "kind": "function",
        "signature": "createTreaty(config)",
        "summary": "Create a treaty"
      },
      {
        "name": "proposeTreaty",
        "kind": "function",
        "signature": "proposeTreaty(manager, treaty)",
        "summary": "Propose treaty"
      },
      {
        "name": "declareWar",
        "kind": "function",
        "signature": "declareWar(manager, aggressor, target)",
        "summary": "Declare war"
      },
      {
        "name": "claimTerritory",
        "kind": "function",
        "signature": "claimTerritory(manager, factionId, territoryId)",
        "summary": "Claim territory for faction"
      },
      {
        "name": "getTerritoryOwner",
        "kind": "function",
        "signature": "getTerritoryOwner(manager, territoryId)",
        "summary": "Get territory owner"
      },
      {
        "name": "calculateFactionPower",
        "kind": "function",
        "signature": "calculateFactionPower(manager, factionId)",
        "summary": "Calculate faction power"
      },
      {
        "name": "DIPLOMATIC_STANCE",
        "kind": "constant",
        "signature": "DIPLOMATIC_STANCE",
        "summary": "Diplomatic stance"
      },
      {
        "name": "REPUTATION_LEVEL",
        "kind": "constant",
        "signature": "REPUTATION_LEVEL",
        "summary": "Reputation thresholds - from AISchema"
      },
      {
        "name": "TREATY_TYPE",
        "kind": "constant",
        "signature": "TREATY_TYPE",
        "summary": "Treaty types"
      },
      {
        "name": "getReputationLevel",
        "kind": "re-export",
        "signature": "getReputationLevel",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIFormation",
    "path": "engine/reference/sim/ai/AIFormation.md",
    "source": "engine/sim/ai/AIFormation.js",
    "import": "/engine/sim/ai/AIFormation.js",
    "sourceHash": "a83d400bb417fc0e2e26ff4d7efa21ea855c379f336a6b523076077b90b4a6f0",
    "summary": "Create formation definition",
    "exports": [
      {
        "name": "createFormation",
        "kind": "function",
        "signature": "createFormation(type, options = {})",
        "summary": "Create formation definition"
      },
      {
        "name": "generateFormationSlots",
        "kind": "function",
        "signature": "generateFormationSlots(formation, unitCount)",
        "summary": "Generate formation slot positions"
      },
      {
        "name": "createFormationManager",
        "kind": "function",
        "signature": "createFormationManager(formation)",
        "summary": "Create formation manager for a group"
      },
      {
        "name": "assignToFormation",
        "kind": "function",
        "signature": "assignToFormation(manager, unitId, isLeader = false)",
        "summary": "Assign unit to formation slot"
      },
      {
        "name": "removeFromFormation",
        "kind": "function",
        "signature": "removeFromFormation(manager, unitId)",
        "summary": "Remove unit from formation"
      },
      {
        "name": "getFormationPosition",
        "kind": "function",
        "signature": "getFormationPosition(manager, unitId)",
        "summary": "Get unit's target position in formation"
      },
      {
        "name": "moveFormation",
        "kind": "function",
        "signature": "moveFormation(manager, targetCenter, targetFacing = null)",
        "summary": "Move formation to target"
      },
      {
        "name": "updateFormationMovement",
        "kind": "function",
        "signature": "updateFormationMovement(manager, deltaTime)",
        "summary": "Update formation movement"
      },
      {
        "name": "changeFormation",
        "kind": "function",
        "signature": "changeFormation(manager, newType, options = {})",
        "summary": "Change formation type"
      },
      {
        "name": "getAllFormationPositions",
        "kind": "function",
        "signature": "getAllFormationPositions(manager)",
        "summary": "Get all unit target positions"
      },
      {
        "name": "isFormationComplete",
        "kind": "function",
        "signature": "isFormationComplete(manager, currentPositions, threshold = 1)",
        "summary": "Check if formation is formed up"
      },
      {
        "name": "FORMATION_TYPE",
        "kind": "constant",
        "signature": "FORMATION_TYPE",
        "summary": "Formation patterns"
      },
      {
        "name": "PRESET_FORMATIONS",
        "kind": "constant",
        "signature": "PRESET_FORMATIONS",
        "summary": "Create preset formations for common scenarios"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIHitDetection",
    "path": "engine/reference/sim/ai/AIHitDetection.md",
    "source": "engine/sim/ai/AIHitDetection.js",
    "import": "/engine/sim/ai/AIHitDetection.js",
    "sourceHash": "da03ef9c7c457e989acd8ef5ebb8d0aaaf40886d98802999e85c78b6a1957ac4",
    "summary": "Spatial hash for efficient broad-phase collision detection",
    "exports": [
      {
        "name": "SpatialHash",
        "kind": "class",
        "signature": "class SpatialHash",
        "summary": "Spatial hash for efficient broad-phase collision detection"
      },
      {
        "name": "sweptSphereSphere",
        "kind": "function",
        "signature": "sweptSphereSphere(sphereStart, sphereEnd, sphereRadius, targetCenter, targetRadius)",
        "summary": "Swept sphere vs static sphere intersection Finds time t in [0,1] when moving sphere first touches static sphere"
      },
      {
        "name": "sweptSphereSphereMoving",
        "kind": "function",
        "signature": "sweptSphereSphereMoving(sphereA, sphereB)",
        "summary": "Swept sphere vs moving sphere intersection Handles both objects moving (relative velocity approach)"
      },
      {
        "name": "capsuleSphereIntersect",
        "kind": "function",
        "signature": "capsuleSphereIntersect(capsuleStart, capsuleEnd, capsuleRadius, targetCenter, targetRadius)",
        "summary": "Swept capsule collision (projectile path as line segment) Creates a capsule from start to end position with given radius"
      },
      {
        "name": "calculateDamageFalloff",
        "kind": "function",
        "signature": "calculateDamageFalloff(baseDamage, distance, radius, falloffType = FALLOFF_TYPE.LINEAR, options = {})",
        "summary": "Calculate damage with distance falloff"
      },
      {
        "name": "getAoETargets",
        "kind": "function",
        "signature": "getAoETargets(center, radius, targets, options = {})",
        "summary": "Find all targets within an Area of Effect"
      },
      {
        "name": "getConeTargets",
        "kind": "function",
        "signature": "getConeTargets(origin, direction, halfAngle, range, targets, options = {})",
        "summary": "Cone-shaped AoE (dragon breath, flamethrower)"
      },
      {
        "name": "checkProjectileHit",
        "kind": "function",
        "signature": "checkProjectileHit(projectile, targets, options = {})",
        "summary": "Check projectile hit with swept collision and spatial optimization"
      },
      {
        "name": "checkBeamHit",
        "kind": "function",
        "signature": "checkBeamHit(origin, direction, maxRange, targets, options = {})",
        "summary": "Check beam/ray hit against multiple targets"
      },
      {
        "name": "FALLOFF_TYPE",
        "kind": "constant",
        "signature": "FALLOFF_TYPE",
        "summary": "Damage falloff types"
      },
      {
        "name": "HITBOX_TYPE",
        "kind": "constant",
        "signature": "HITBOX_TYPE",
        "summary": "Hitbox types"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIInfluenceMap",
    "path": "engine/reference/sim/ai/AIInfluenceMap.md",
    "source": "engine/sim/ai/AIInfluenceMap.js",
    "import": "/engine/sim/ai/AIInfluenceMap.js",
    "sourceHash": "ffe3ffa6cce26808f4bb8a795256cbb9e4487940e5911f58a483546c567fee86",
    "summary": "Create an influence map layer",
    "exports": [
      {
        "name": "createInfluenceLayer",
        "kind": "function",
        "signature": "createInfluenceLayer(width, height, cellSize, origin = [0, 0])",
        "summary": "Create an influence map layer"
      },
      {
        "name": "createInfluenceMap",
        "kind": "function",
        "signature": "createInfluenceMap(width, height, cellSize, origin = [0, 0])",
        "summary": "Create a multi-layer influence map"
      },
      {
        "name": "worldToInfluenceCell",
        "kind": "function",
        "signature": "worldToInfluenceCell(map, worldX, worldZ)",
        "summary": "World position to grid cell"
      },
      {
        "name": "influenceCellToWorld",
        "kind": "function",
        "signature": "influenceCellToWorld(map, cellX, cellY)",
        "summary": "Grid cell to world position (center of cell)"
      },
      {
        "name": "getInfluenceAt",
        "kind": "function",
        "signature": "getInfluenceAt(layer, worldX, worldZ)",
        "summary": "Get influence value at world position"
      },
      {
        "name": "setInfluenceAt",
        "kind": "function",
        "signature": "setInfluenceAt(layer, worldX, worldZ, value)",
        "summary": "Set influence value at world position"
      },
      {
        "name": "addInfluenceAt",
        "kind": "function",
        "signature": "addInfluenceAt(layer, worldX, worldZ, value)",
        "summary": "Add influence at world position"
      },
      {
        "name": "stampInfluence",
        "kind": "function",
        "signature": "stampInfluence(layer, worldX, worldZ, radius, value, falloff = \"linear\")",
        "summary": "Stamp circular influence at position"
      },
      {
        "name": "propagateInfluence",
        "kind": "function",
        "signature": "propagateInfluence(layer, decayFactor = 0.9)",
        "summary": "Propagate influence to neighboring cells (blur/spread)"
      },
      {
        "name": "decayInfluence",
        "kind": "function",
        "signature": "decayInfluence(layer, decayRate = 0.1)",
        "summary": "Decay all influence values"
      },
      {
        "name": "clearInfluence",
        "kind": "function",
        "signature": "clearInfluence(layer)",
        "summary": "Clear all influence"
      },
      {
        "name": "findLowestInfluence",
        "kind": "function",
        "signature": "findLowestInfluence(layer, worldX, worldZ, searchRadius)",
        "summary": "Find position with lowest influence in radius"
      },
      {
        "name": "findHighestInfluence",
        "kind": "function",
        "signature": "findHighestInfluence(layer, worldX, worldZ, searchRadius)",
        "summary": "Find position with highest influence in radius"
      },
      {
        "name": "sampleCombinedInfluence",
        "kind": "function",
        "signature": "sampleCombinedInfluence(map, worldX, worldZ, weights)",
        "summary": "Sample combined influence from multiple layers"
      },
      {
        "name": "findChokePoints",
        "kind": "function",
        "signature": "findChokePoints(walkabilityGrid, influenceMap)",
        "summary": "Analyze terrain for choke points"
      },
      {
        "name": "updateThreatInfluence",
        "kind": "function",
        "signature": "updateThreatInfluence(map, enemies)",
        "summary": "Update threat layer from enemy positions"
      },
      {
        "name": "updateAllyInfluence",
        "kind": "function",
        "signature": "updateAllyInfluence(map, allies)",
        "summary": "Update ally layer from friendly positions"
      },
      {
        "name": "reservePath",
        "kind": "function",
        "signature": "reservePath(map, path, reserveValue = 1.0)",
        "summary": "Reserve a path on the influence map"
      },
      {
        "name": "clearPathReservations",
        "kind": "function",
        "signature": "clearPathReservations(map)",
        "summary": "Clear path reservation"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIKnowledge",
    "path": "engine/reference/sim/ai/AIKnowledge.md",
    "source": "engine/sim/ai/AIKnowledge.js",
    "import": "/engine/sim/ai/AIKnowledge.js",
    "sourceHash": "5aac2f6d25a4f5a66cd883b9d24f70267ae590acc8cfbaddd097efb9b399f322",
    "summary": "Create knowledge item",
    "exports": [
      {
        "name": "createKnowledge",
        "kind": "function",
        "signature": "createKnowledge(config)",
        "summary": "Create knowledge item"
      },
      {
        "name": "distortKnowledge",
        "kind": "function",
        "signature": "distortKnowledge(knowledge, distortion = 0.1)",
        "summary": "Create a distorted copy (for rumor spreading)"
      },
      {
        "name": "createKnowledgeBase",
        "kind": "function",
        "signature": "createKnowledgeBase()",
        "summary": "Create NPC knowledge base"
      },
      {
        "name": "addKnowledge",
        "kind": "function",
        "signature": "addKnowledge(kb, knowledge)",
        "summary": "Add knowledge to NPC's knowledge base"
      },
      {
        "name": "queryKnowledge",
        "kind": "function",
        "signature": "queryKnowledge(kb, query)",
        "summary": "Query knowledge base"
      },
      {
        "name": "hasKnowledgeOf",
        "kind": "function",
        "signature": "hasKnowledgeOf(kb, subject)",
        "summary": "Check if NPC knows about something"
      },
      {
        "name": "shareKnowledge",
        "kind": "function",
        "signature": "shareKnowledge(giver, receiver, knowledge, giverNpcId)",
        "summary": "Share knowledge between NPCs"
      },
      {
        "name": "spreadKnowledge",
        "kind": "function",
        "signature": "spreadKnowledge(network, knowledge, originNpcId, maxHops = 3)",
        "summary": "Spread knowledge through social network"
      },
      {
        "name": "createWorldKnowledgeManager",
        "kind": "function",
        "signature": "createWorldKnowledgeManager()",
        "summary": "Create world knowledge manager"
      },
      {
        "name": "registerNPCKnowledge",
        "kind": "function",
        "signature": "registerNPCKnowledge(manager, npcId, config = {})",
        "summary": "Register NPC with knowledge system"
      },
      {
        "name": "connectNPCs",
        "kind": "function",
        "signature": "connectNPCs(manager, npc1, npc2)",
        "summary": "Connect two NPCs in social network"
      },
      {
        "name": "announcePublicKnowledge",
        "kind": "function",
        "signature": "announcePublicKnowledge(manager, knowledge)",
        "summary": "Announce public knowledge"
      },
      {
        "name": "updateKnowledgePropagation",
        "kind": "function",
        "signature": "updateKnowledgePropagation(manager, gameTime)",
        "summary": "Update knowledge propagation"
      },
      {
        "name": "INFO_TYPE",
        "kind": "constant",
        "signature": "INFO_TYPE",
        "summary": "Information types"
      },
      {
        "name": "RELIABILITY",
        "kind": "constant",
        "signature": "RELIABILITY",
        "summary": "Information reliability"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AILoot",
    "path": "engine/reference/sim/ai/AILoot.md",
    "source": "engine/sim/ai/AILoot.js",
    "import": "/engine/sim/ai/AILoot.js",
    "sourceHash": "6f0a484d5039293dce33182e229f0f16dd975f061510ae1692aaa36fedf123c4",
    "summary": "Create item definition",
    "exports": [
      {
        "name": "createItemDef",
        "kind": "function",
        "signature": "createItemDef(config)",
        "summary": "Create item definition"
      },
      {
        "name": "createItemInstance",
        "kind": "function",
        "signature": "createItemInstance(itemDef, options = {})",
        "summary": "Create item instance from definition"
      },
      {
        "name": "createAffix",
        "kind": "function",
        "signature": "createAffix(config)",
        "summary": "Create affix definition"
      },
      {
        "name": "applyAffix",
        "kind": "function",
        "signature": "applyAffix(item, affix)",
        "summary": "Apply affix to item"
      },
      {
        "name": "generateItemName",
        "kind": "function",
        "signature": "generateItemName(item)",
        "summary": "Generate item name from affixes"
      },
      {
        "name": "createLootEntry",
        "kind": "function",
        "signature": "createLootEntry(config)",
        "summary": "Create loot table entry"
      },
      {
        "name": "createLootTable",
        "kind": "function",
        "signature": "createLootTable(config)",
        "summary": "Create loot table"
      },
      {
        "name": "rollLootTable",
        "kind": "function",
        "signature": "rollLootTable(table, itemDefs, context = {})",
        "summary": "Roll loot from table"
      },
      {
        "name": "rollRarity",
        "kind": "function",
        "signature": "rollRarity(luckBonus = 0)",
        "summary": "Roll rarity based on luck"
      },
      {
        "name": "createLootManager",
        "kind": "function",
        "signature": "createLootManager()",
        "summary": "Create loot manager"
      },
      {
        "name": "registerItemDef",
        "kind": "function",
        "signature": "registerItemDef(manager, itemDef)",
        "summary": "Register item definition"
      },
      {
        "name": "registerAffix",
        "kind": "function",
        "signature": "registerAffix(manager, affix)",
        "summary": "Register affix"
      },
      {
        "name": "registerLootTable",
        "kind": "function",
        "signature": "registerLootTable(manager, table)",
        "summary": "Register loot table"
      },
      {
        "name": "dropLoot",
        "kind": "function",
        "signature": "dropLoot(manager, tableId, position, context = {})",
        "summary": "Drop loot at position"
      },
      {
        "name": "cleanupDrops",
        "kind": "function",
        "signature": "cleanupDrops(manager)",
        "summary": "Clean up expired drops"
      },
      {
        "name": "RARITY",
        "kind": "constant",
        "signature": "RARITY",
        "summary": "Rarity tiers"
      },
      {
        "name": "RARITY_COLORS",
        "kind": "constant",
        "signature": "RARITY_COLORS",
        "summary": "Rarity color codes"
      },
      {
        "name": "ITEM_CATEGORY",
        "kind": "constant",
        "signature": "ITEM_CATEGORY",
        "summary": "Item categories"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIMelee",
    "path": "engine/reference/sim/ai/AIMelee.md",
    "source": "engine/sim/ai/AIMelee.js",
    "import": "/engine/sim/ai/AIMelee.js",
    "sourceHash": "f74eedf064ca3e2a234e231c10d851861b3fe119a657cad2a8c3ae94a0b745cb",
    "summary": "Create a melee attack arc (pie-slice shaped hitbox)",
    "exports": [
      {
        "name": "createMeleeArc",
        "kind": "function",
        "signature": "createMeleeArc(origin, direction, range, arcAngleDeg)",
        "summary": "Create a melee attack arc (pie-slice shaped hitbox)"
      },
      {
        "name": "isInMeleeArc",
        "kind": "function",
        "signature": "isInMeleeArc(arc, targetPos, targetRadius = 0)",
        "summary": "Check if a point is within the melee arc (2D horizontal check) Uses cosine comparison for efficiency (avoids atan2)"
      },
      {
        "name": "isInMeleeArc3D",
        "kind": "function",
        "signature": "isInMeleeArc3D(arc, targetPos, targetRadius = 0, verticalToleranceRad = Math.PI / 4)",
        "summary": "Check if target is in 3D melee arc (includes vertical angle)"
      },
      {
        "name": "createMeleeAttackState",
        "kind": "function",
        "signature": "createMeleeAttackState(config)",
        "summary": "Create a melee attack state tracker"
      },
      {
        "name": "startMeleeAttack",
        "kind": "function",
        "signature": "startMeleeAttack(state, now)",
        "summary": "Start a melee attack"
      },
      {
        "name": "updateMeleeAttack",
        "kind": "function",
        "signature": "updateMeleeAttack(state, now)",
        "summary": "Update melee attack state and check phase transitions"
      },
      {
        "name": "interruptMeleeAttack",
        "kind": "function",
        "signature": "interruptMeleeAttack(state)",
        "summary": "Try to interrupt a melee attack (e.g., from stagger)"
      },
      {
        "name": "checkMeleeHits",
        "kind": "function",
        "signature": "checkMeleeHits(state, attackerPos, attackerDir, targets)",
        "summary": "Check for hits during active phase"
      },
      {
        "name": "chainComboAttack",
        "kind": "function",
        "signature": "chainComboAttack(state, now)",
        "summary": "Chain to next combo attack"
      },
      {
        "name": "getComboMultiplier",
        "kind": "function",
        "signature": "getComboMultiplier(comboStep)",
        "summary": "Get combo multiplier for current step"
      },
      {
        "name": "sweepMeleeArc",
        "kind": "function",
        "signature": "sweepMeleeArc(origin, startDir, endDir, range, targets, sweepSamples = 5)",
        "summary": "Perform a sweeping melee attack across multiple positions Useful for wide slash attacks"
      },
      {
        "name": "getPhaseTimeRemaining",
        "kind": "function",
        "signature": "getPhaseTimeRemaining(state, now)",
        "summary": "Get remaining time in current phase"
      },
      {
        "name": "getPhaseProgress",
        "kind": "function",
        "signature": "getPhaseProgress(state, now)",
        "summary": "Get phase progress (0-1)"
      },
      {
        "name": "ATTACK_PHASE",
        "kind": "constant",
        "signature": "ATTACK_PHASE",
        "summary": "Attack phase types"
      },
      {
        "name": "DEFAULT_PHASE_DURATIONS",
        "kind": "constant",
        "signature": "DEFAULT_PHASE_DURATIONS",
        "summary": "Default phase durations in milliseconds"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIMemory",
    "path": "engine/reference/sim/ai/AIMemory.md",
    "source": "engine/sim/ai/AIMemory.js",
    "import": "/engine/sim/ai/AIMemory.js",
    "sourceHash": "b5320a23dd2762b858f505b68d4e3e0102eba6a46493c1ad8673cbd3ef90b7c9",
    "summary": "Create working memory (limited capacity short-term)",
    "exports": [
      {
        "name": "createWorkingMemory",
        "kind": "function",
        "signature": "createWorkingMemory(capacity = 7)",
        "summary": "Create working memory (limited capacity short-term)"
      },
      {
        "name": "workingMemoryPush",
        "kind": "function",
        "signature": "workingMemoryPush(memory, item)",
        "summary": "Add item to working memory (displaces oldest if full)"
      },
      {
        "name": "setFocus",
        "kind": "function",
        "signature": "setFocus(memory, type, data)",
        "summary": "Set focus of attention"
      },
      {
        "name": "getWorkingMemoryByType",
        "kind": "function",
        "signature": "getWorkingMemoryByType(memory, type)",
        "summary": "Get items from working memory by type"
      },
      {
        "name": "clearWorkingMemory",
        "kind": "function",
        "signature": "clearWorkingMemory(memory)",
        "summary": "Clear working memory"
      },
      {
        "name": "createEpisodicMemory",
        "kind": "function",
        "signature": "createEpisodicMemory(maxEpisodes = 1000)",
        "summary": "Create episodic memory (personal experiences)"
      },
      {
        "name": "createEpisode",
        "kind": "function",
        "signature": "createEpisode(data)",
        "summary": "Create an episode (memory of an event)"
      },
      {
        "name": "storeEpisode",
        "kind": "function",
        "signature": "storeEpisode(memory, episode)",
        "summary": "Store an episode"
      },
      {
        "name": "recallEpisodesWithEntity",
        "kind": "function",
        "signature": "recallEpisodesWithEntity(memory, entityId, limit = 10)",
        "summary": "Recall episodes involving an entity"
      },
      {
        "name": "recallEpisodesWithEmotion",
        "kind": "function",
        "signature": "recallEpisodesWithEmotion(memory, emotion, limit = 10)",
        "summary": "Recall episodes by emotion"
      },
      {
        "name": "recallRecentEpisodes",
        "kind": "function",
        "signature": "recallRecentEpisodes(memory, count = 5)",
        "summary": "Recall recent episodes"
      },
      {
        "name": "searchEpisodes",
        "kind": "function",
        "signature": "searchEpisodes(memory, criteria)",
        "summary": "Search episodes by criteria"
      },
      {
        "name": "createSemanticMemory",
        "kind": "function",
        "signature": "createSemanticMemory()",
        "summary": "Create semantic memory (facts and knowledge)"
      },
      {
        "name": "storeFact",
        "kind": "function",
        "signature": "storeFact(memory, key, value, meta = {})",
        "summary": "Store a fact"
      },
      {
        "name": "getFact",
        "kind": "function",
        "signature": "getFact(memory, key)",
        "summary": "Retrieve a fact"
      },
      {
        "name": "storeRelationship",
        "kind": "function",
        "signature": "storeRelationship(memory, subject, predicate, object, confidence = 1.0)",
        "summary": "Store a relationship between entities"
      },
      {
        "name": "queryRelationships",
        "kind": "function",
        "signature": "queryRelationships(memory, query)",
        "summary": "Query relationships"
      },
      {
        "name": "storeBelief",
        "kind": "function",
        "signature": "storeBelief(memory, topic, belief, confidence = 0.5)",
        "summary": "Store a belief"
      },
      {
        "name": "challengeBelief",
        "kind": "function",
        "signature": "challengeBelief(memory, topic, evidenceStrength = 0.1)",
        "summary": "Challenge a belief (potentially weakens it)"
      },
      {
        "name": "createProceduralMemory",
        "kind": "function",
        "signature": "createProceduralMemory()",
        "summary": "Create procedural memory (skills and habits)"
      },
      {
        "name": "practiceSkill",
        "kind": "function",
        "signature": "practiceSkill(memory, skill, success = true)",
        "summary": "Record skill practice"
      },
      {
        "name": "getSkillProficiency",
        "kind": "function",
        "signature": "getSkillProficiency(memory, skill)",
        "summary": "Get skill proficiency"
      },
      {
        "name": "formHabit",
        "kind": "function",
        "signature": "formHabit(memory, trigger, action, initialStrength = 0.3)",
        "summary": "Form a habit"
      },
      {
        "name": "getHabitualResponse",
        "kind": "function",
        "signature": "getHabitualResponse(memory, trigger)",
        "summary": "Get habitual response to trigger"
      },
      {
        "name": "createMemorySystem",
        "kind": "function",
        "signature": "createMemorySystem(config = {})",
        "summary": "Create complete NPC memory system"
      },
      {
        "name": "consolidateMemories",
        "kind": "function",
        "signature": "consolidateMemories(memSystem)",
        "summary": "Consolidate memories (transfer from working to long-term)"
      },
      {
        "name": "getEntityImpression",
        "kind": "function",
        "signature": "getEntityImpression(memSystem, entityId)",
        "summary": "Get overall impression of an entity"
      },
      {
        "name": "MEMORY_TYPE",
        "kind": "constant",
        "signature": "MEMORY_TYPE",
        "summary": "Memory types"
      },
      {
        "name": "IMPORTANCE",
        "kind": "constant",
        "signature": "IMPORTANCE",
        "summary": "Event importance levels"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIMorale",
    "path": "engine/reference/sim/ai/AIMorale.md",
    "source": "engine/sim/ai/AIMorale.js",
    "import": "/engine/sim/ai/AIMorale.js",
    "sourceHash": "ea3637bd2d5be51886b0b34bf95a71eee11c54fbf5d70c465a2b2790772c643c",
    "summary": "Create morale state for an NPC",
    "exports": [
      {
        "name": "createMoraleState",
        "kind": "function",
        "signature": "createMoraleState(params = {})",
        "summary": "Create morale state for an NPC"
      },
      {
        "name": "changeMorale",
        "kind": "function",
        "signature": "changeMorale(state, delta)",
        "summary": "Apply morale change"
      },
      {
        "name": "applySuppression",
        "kind": "function",
        "signature": "applySuppression(state, amount)",
        "summary": "Apply suppression"
      },
      {
        "name": "processDamageMorale",
        "kind": "function",
        "signature": "processDamageMorale(state, damage, fromBehind = false)",
        "summary": "Process taking damage"
      },
      {
        "name": "processAllyDeath",
        "kind": "function",
        "signature": "processAllyDeath(state, wasLeader = false)",
        "summary": "Process ally death"
      },
      {
        "name": "processEnemyDeath",
        "kind": "function",
        "signature": "processEnemyDeath(state, wasLeader = false)",
        "summary": "Process enemy death"
      },
      {
        "name": "rally",
        "kind": "function",
        "signature": "rally(state)",
        "summary": "Rally (leader ability)"
      },
      {
        "name": "updateMorale",
        "kind": "function",
        "signature": "updateMorale(state, deltaTimeSec, inCombat, inCover)",
        "summary": "Update morale over time (recovery, suppression decay)"
      },
      {
        "name": "updateMoraleContext",
        "kind": "function",
        "signature": "updateMoraleContext(state, alliesNearby, enemiesVisible, leaderNearby)",
        "summary": "Update context (allies, enemies, leader)"
      },
      {
        "name": "getMoraleAccuracyMod",
        "kind": "function",
        "signature": "getMoraleAccuracyMod(state)",
        "summary": "Get accuracy modifier based on morale"
      },
      {
        "name": "getMoraleSpeedMod",
        "kind": "function",
        "signature": "getMoraleSpeedMod(state)",
        "summary": "Get movement speed modifier based on morale"
      },
      {
        "name": "getMoraleReactionMod",
        "kind": "function",
        "signature": "getMoraleReactionMod(state)",
        "summary": "Get reaction time modifier based on morale"
      },
      {
        "name": "shouldFlee",
        "kind": "function",
        "signature": "shouldFlee(state)",
        "summary": "Check if NPC should flee"
      },
      {
        "name": "shouldSurrender",
        "kind": "function",
        "signature": "shouldSurrender(state, canEscape = true)",
        "summary": "Check if NPC should surrender"
      },
      {
        "name": "shouldSeekCover",
        "kind": "function",
        "signature": "shouldSeekCover(state, currentlyInCover)",
        "summary": "Check if NPC should take cover"
      },
      {
        "name": "shouldBeAggressive",
        "kind": "function",
        "signature": "shouldBeAggressive(state)",
        "summary": "Check if NPC should be aggressive (charge, flank)"
      },
      {
        "name": "moraleCheck",
        "kind": "function",
        "signature": "moraleCheck(state, difficulty)",
        "summary": "Roll morale check for risky action"
      },
      {
        "name": "getGroupMorale",
        "kind": "function",
        "signature": "getGroupMorale(moraleStates)",
        "summary": "Calculate group morale average"
      },
      {
        "name": "isGroupRouting",
        "kind": "function",
        "signature": "isGroupRouting(moraleStates)",
        "summary": "Check if group is routing (majority broken)"
      },
      {
        "name": "groupRally",
        "kind": "function",
        "signature": "groupRally(moraleStates)",
        "summary": "Apply group rally (leader ability affecting all nearby)"
      },
      {
        "name": "MORALE_STATE",
        "kind": "constant",
        "signature": "MORALE_STATE",
        "summary": "Morale states"
      },
      {
        "name": "DEFAULT_MORALE_PARAMS",
        "kind": "constant",
        "signature": "DEFAULT_MORALE_PARAMS",
        "summary": "Default morale parameters"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIPerception",
    "path": "engine/reference/sim/ai/AIPerception.md",
    "source": "engine/sim/ai/AIPerception.js",
    "import": "/engine/sim/ai/AIPerception.js",
    "sourceHash": "13537f469d28780d89e5c29c2e8021e0e56236b163a72e7c58b8196e6709ea68",
    "summary": "Create perception state for an NPC",
    "exports": [
      {
        "name": "createPerceptionState",
        "kind": "function",
        "signature": "createPerceptionState(params = {})",
        "summary": "Create perception state for an NPC"
      },
      {
        "name": "checkVision",
        "kind": "function",
        "signature": "checkVision(perception, npcPos, npcFacing, targetPos, obstacles)",
        "summary": "Check if target is in vision cone"
      },
      {
        "name": "calculateDetectionRate",
        "kind": "function",
        "signature": "calculateDetectionRate(visionResult, perception, options = {})",
        "summary": "Calculate detection rate based on visibility conditions"
      },
      {
        "name": "createNoiseEvent",
        "kind": "function",
        "signature": "createNoiseEvent(position, loudness, type, sourceId = null)",
        "summary": "Create a noise event"
      },
      {
        "name": "checkHearing",
        "kind": "function",
        "signature": "checkHearing(perception, npcPos, noise)",
        "summary": "Check if NPC can hear a noise event"
      },
      {
        "name": "processVisualDetection",
        "kind": "function",
        "signature": "processVisualDetection(perception, npcPos, npcFacing, target, obstacles, deltaTimeSec, options = {})",
        "summary": "Process visual detection of a target"
      },
      {
        "name": "processNoiseEvent",
        "kind": "function",
        "signature": "processNoiseEvent(perception, npcPos, noise)",
        "summary": "Process a noise event"
      },
      {
        "name": "processDamage",
        "kind": "function",
        "signature": "processDamage(perception, damageDirection = null, attackerId = null)",
        "summary": "Process taking damage"
      },
      {
        "name": "shareTeamInfo",
        "kind": "function",
        "signature": "shareTeamInfo(perception, targetId, targetPos)",
        "summary": "Share threat info from teammate"
      },
      {
        "name": "getLastKnownPosition",
        "kind": "function",
        "signature": "getLastKnownPosition(perception, entityId)",
        "summary": "Get last known position of an entity"
      },
      {
        "name": "getMostThreateningEntity",
        "kind": "function",
        "signature": "getMostThreateningEntity(perception)",
        "summary": "Get the most threatening known entity"
      },
      {
        "name": "decayAwareness",
        "kind": "function",
        "signature": "decayAwareness(perception, deltaTimeSec, canSeeThreats)",
        "summary": "Decay awareness over time"
      },
      {
        "name": "checkInvestigationComplete",
        "kind": "function",
        "signature": "checkInvestigationComplete(perception, npcPos, arrivalRadius = 2)",
        "summary": "Check if investigation is complete"
      },
      {
        "name": "updatePerception",
        "kind": "function",
        "signature": "updatePerception(perception, npcPos, npcFacing, targets, noiseEvents, obstacles, deltaTimeSec)",
        "summary": "Full perception update tick"
      },
      {
        "name": "AWARENESS_STATE",
        "kind": "constant",
        "signature": "AWARENESS_STATE",
        "summary": "Awareness states"
      },
      {
        "name": "SENSE_TYPE",
        "kind": "constant",
        "signature": "SENSE_TYPE",
        "summary": "Sense types"
      },
      {
        "name": "DEFAULT_PERCEPTION_PARAMS",
        "kind": "constant",
        "signature": "DEFAULT_PERCEPTION_PARAMS",
        "summary": "Default perception parameters - from AISchema"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIPersonality",
    "path": "engine/reference/sim/ai/AIPersonality.md",
    "source": "engine/sim/ai/AIPersonality.js",
    "import": "/engine/sim/ai/AIPersonality.js",
    "sourceHash": "088c67d33c1d0f8e048fe25277fdae93b552dbdd7370085ddd4e411e2dc9f2f2",
    "summary": "Create personality profile",
    "exports": [
      {
        "name": "createPersonality",
        "kind": "function",
        "signature": "createPersonality(traits = {})",
        "summary": "Create personality profile"
      },
      {
        "name": "createPersonalityFromArchetype",
        "kind": "function",
        "signature": "createPersonalityFromArchetype(archetype)",
        "summary": "Create personality from archetype"
      },
      {
        "name": "getPersonalityBehaviorMod",
        "kind": "function",
        "signature": "getPersonalityBehaviorMod(personality, behavior)",
        "summary": "Get personality-based behavior modifier"
      },
      {
        "name": "createEmotionalState",
        "kind": "function",
        "signature": "createEmotionalState()",
        "summary": "Create emotional state"
      },
      {
        "name": "applyEmotionalStimulus",
        "kind": "function",
        "signature": "applyEmotionalStimulus(state, emotion, intensity, personality = null)",
        "summary": "Apply emotional stimulus"
      },
      {
        "name": "decayEmotions",
        "kind": "function",
        "signature": "decayEmotions(state, deltaTimeSec, decayRate = 0.1)",
        "summary": "Decay emotions over time"
      },
      {
        "name": "hasComplexEmotion",
        "kind": "function",
        "signature": "hasComplexEmotion(state, complexEmotion, threshold = 0.3)",
        "summary": "Check for complex emotion"
      },
      {
        "name": "createRelationshipTracker",
        "kind": "function",
        "signature": "createRelationshipTracker()",
        "summary": "Create relationship tracker"
      },
      {
        "name": "getRelationship",
        "kind": "function",
        "signature": "getRelationship(tracker, entityId)",
        "summary": "Create or get relationship with entity"
      },
      {
        "name": "recordInteraction",
        "kind": "function",
        "signature": "recordInteraction(tracker, entityId, interactionType, valence, intensity = 0.5)",
        "summary": "Record interaction with entity"
      },
      {
        "name": "getDisposition",
        "kind": "function",
        "signature": "getDisposition(tracker, entityId)",
        "summary": "Get disposition toward entity"
      },
      {
        "name": "willHelp",
        "kind": "function",
        "signature": "willHelp(tracker, entityId, personality = null)",
        "summary": "Will entity help another"
      },
      {
        "name": "createCharacterState",
        "kind": "function",
        "signature": "createCharacterState(config = {})",
        "summary": "Create complete character psychological state"
      },
      {
        "name": "updateCharacterState",
        "kind": "function",
        "signature": "updateCharacterState(state, deltaTimeSec)",
        "summary": "Update character state"
      },
      {
        "name": "TRAIT",
        "kind": "constant",
        "signature": "TRAIT",
        "summary": "Personality trait ranges: -1 to 1"
      },
      {
        "name": "EMOTION",
        "kind": "constant",
        "signature": "EMOTION",
        "summary": "Primary emotions"
      },
      {
        "name": "COMPLEX_EMOTION",
        "kind": "constant",
        "signature": "COMPLEX_EMOTION",
        "summary": "Emotion combinations"
      },
      {
        "name": "RELATIONSHIP_TYPE",
        "kind": "constant",
        "signature": "RELATIONSHIP_TYPE",
        "summary": "Relationship types"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIQuest",
    "path": "engine/reference/sim/ai/AIQuest.md",
    "source": "engine/sim/ai/AIQuest.js",
    "import": "/engine/sim/ai/AIQuest.js",
    "sourceHash": "edd2f332c3f46f7a4513205cac34fd055939861340e9b24581f7593fdf73bfb8",
    "summary": "Create quest objective",
    "exports": [
      {
        "name": "createObjective",
        "kind": "function",
        "signature": "createObjective(config)",
        "summary": "Create quest objective"
      },
      {
        "name": "updateObjectiveProgress",
        "kind": "function",
        "signature": "updateObjectiveProgress(objective, amount = 1)",
        "summary": "Update objective progress"
      },
      {
        "name": "createQuest",
        "kind": "function",
        "signature": "createQuest(config)",
        "summary": "Create quest"
      },
      {
        "name": "canAcceptQuest",
        "kind": "function",
        "signature": "canAcceptQuest(quest, playerState)",
        "summary": "Check if quest can be accepted"
      },
      {
        "name": "acceptQuest",
        "kind": "function",
        "signature": "acceptQuest(quest)",
        "summary": "Accept quest"
      },
      {
        "name": "checkQuestComplete",
        "kind": "function",
        "signature": "checkQuestComplete(quest)",
        "summary": "Check quest completion"
      },
      {
        "name": "turnInQuest",
        "kind": "function",
        "signature": "turnInQuest(quest)",
        "summary": "Turn in quest and get rewards"
      },
      {
        "name": "failQuest",
        "kind": "function",
        "signature": "failQuest(quest, reason = \"unknown\")",
        "summary": "Fail quest"
      },
      {
        "name": "createQuestManager",
        "kind": "function",
        "signature": "createQuestManager()",
        "summary": "Create quest manager"
      },
      {
        "name": "registerQuest",
        "kind": "function",
        "signature": "registerQuest(manager, quest)",
        "summary": "Register quest"
      },
      {
        "name": "updateAvailableQuests",
        "kind": "function",
        "signature": "updateAvailableQuests(manager, playerState)",
        "summary": "Update available quests based on player state"
      },
      {
        "name": "reportQuestEvent",
        "kind": "function",
        "signature": "reportQuestEvent(manager, eventType, eventData)",
        "summary": "Report event for quest objectives"
      },
      {
        "name": "generateQuest",
        "kind": "function",
        "signature": "generateQuest(templateId, params, context = {})",
        "summary": "Generate procedural quest"
      },
      {
        "name": "generateDailyQuests",
        "kind": "function",
        "signature": "generateDailyQuests(context, count = 3)",
        "summary": "Generate daily quests"
      },
      {
        "name": "QUEST_TYPE",
        "kind": "constant",
        "signature": "QUEST_TYPE",
        "summary": "Quest types"
      },
      {
        "name": "QUEST_STATUS",
        "kind": "constant",
        "signature": "QUEST_STATUS",
        "summary": "Quest status"
      },
      {
        "name": "QUEST_PRIORITY",
        "kind": "constant",
        "signature": "QUEST_PRIORITY",
        "summary": "Quest priority"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIRandom",
    "path": "engine/reference/sim/ai/AIRandom.md",
    "source": "engine/sim/ai/AIRandom.js",
    "import": "/engine/sim/ai/AIRandom.js",
    "sourceHash": "2050852dd1e9ce7da989d3d3a11adaf85031e1c084030beb7d577b142b092772",
    "summary": "Set the global AI RNG context. Call this at the start of each game tick.",
    "exports": [
      {
        "name": "setAIRngContext",
        "kind": "function",
        "signature": "setAIRngContext(worldSeed, tick)",
        "summary": "Set the global AI RNG context. Call this at the start of each game tick."
      },
      {
        "name": "getEntityRngState",
        "kind": "function",
        "signature": "getEntityRngState(entityId)",
        "summary": "Get RNG state for a specific entity (deterministic per entity+tick)"
      },
      {
        "name": "getPositionRngState",
        "kind": "function",
        "signature": "getPositionRngState(x, y, z)",
        "summary": "Get RNG state for a position (terrain, spawns, etc.)"
      },
      {
        "name": "getInteractionRngState",
        "kind": "function",
        "signature": "getInteractionRngState(entityA, entityB)",
        "summary": "Get RNG state for interaction between two entities"
      },
      {
        "name": "createEntityRng",
        "kind": "function",
        "signature": "createEntityRng(entityId)",
        "summary": "Create RNG stream for a specific entity Use when you need multiple random values for one entity in the same tick"
      },
      {
        "name": "createPositionRng",
        "kind": "function",
        "signature": "createPositionRng(x, y, z)",
        "summary": "Create RNG stream for a world position"
      },
      {
        "name": "aiRng",
        "kind": "constant",
        "signature": "aiRng",
        "summary": ""
      },
      {
        "name": "pcgHash",
        "kind": "re-export",
        "signature": "pcgHash",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIRaycastGPU",
    "path": "engine/reference/sim/ai/AIRaycastGPU.md",
    "source": "engine/sim/ai/AIRaycastGPU.js",
    "import": "/engine/sim/ai/AIRaycastGPU.js",
    "sourceHash": "134499f4372845b82940ab0dceab4c3f4b003caf04dcfb2610b2a9452c1a27da",
    "summary": "Create a GPU raycast system",
    "exports": [
      {
        "name": "createGPURaycastSystem",
        "kind": "function",
        "signature": "async createGPURaycastSystem(device, options = {})",
        "summary": "Create a GPU raycast system"
      },
      {
        "name": "uploadRays",
        "kind": "function",
        "signature": "uploadRays(system, rays)",
        "summary": "Upload ray data to GPU"
      },
      {
        "name": "uploadAABBTargets",
        "kind": "function",
        "signature": "uploadAABBTargets(system, targets)",
        "summary": "Upload AABB targets to GPU"
      },
      {
        "name": "uploadSphereTargets",
        "kind": "function",
        "signature": "uploadSphereTargets(system, targets)",
        "summary": "Upload sphere targets to GPU"
      },
      {
        "name": "dispatchAABBRaycast",
        "kind": "function",
        "signature": "dispatchAABBRaycast(system, encoder)",
        "summary": "Dispatch GPU raycast against AABBs"
      },
      {
        "name": "dispatchSphereRaycast",
        "kind": "function",
        "signature": "dispatchSphereRaycast(system, encoder)",
        "summary": "Dispatch GPU raycast against spheres"
      },
      {
        "name": "copyResultsToReadback",
        "kind": "function",
        "signature": "copyResultsToReadback(system, encoder)",
        "summary": "Copy results to readback buffer"
      },
      {
        "name": "readbackResults",
        "kind": "function",
        "signature": "async readbackResults(system)",
        "summary": "Read back results from GPU (async)"
      },
      {
        "name": "batchRaycast",
        "kind": "function",
        "signature": "async batchRaycast(system, rays, targets, targetType = \"sphere\")",
        "summary": "Full batch raycast operation"
      },
      {
        "name": "destroyGPURaycastSystem",
        "kind": "function",
        "signature": "destroyGPURaycastSystem(system)",
        "summary": "Destroy GPU raycast system and free resources"
      },
      {
        "name": "shouldUseGPURaycast",
        "kind": "function",
        "signature": "shouldUseGPURaycast(rayCount, threshold = 500)",
        "summary": "Determine if GPU raycast should be used based on ray count"
      },
      {
        "name": "benchmarkRaycast",
        "kind": "function",
        "signature": "async benchmarkRaycast(system, rayCount = 1000, targetCount = 100)",
        "summary": "Benchmark CPU vs GPU raycast for calibration"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIScheduler",
    "path": "engine/reference/sim/ai/AIScheduler.md",
    "source": "engine/sim/ai/AIScheduler.js",
    "import": "/engine/sim/ai/AIScheduler.js",
    "sourceHash": "3b6ffe38bc7cf95c623fc68517773e0db1be1fa9201df3346e31097cd58e9eeb",
    "summary": "Create needs state",
    "exports": [
      {
        "name": "createNeedsState",
        "kind": "function",
        "signature": "createNeedsState(initial = {})",
        "summary": "Create needs state"
      },
      {
        "name": "updateNeeds",
        "kind": "function",
        "signature": "updateNeeds(needs, gameHours)",
        "summary": "Update needs over time"
      },
      {
        "name": "satisfyNeed",
        "kind": "function",
        "signature": "satisfyNeed(needs, need, amount)",
        "summary": "Satisfy a need"
      },
      {
        "name": "getMostUrgentNeed",
        "kind": "function",
        "signature": "getMostUrgentNeed(needs)",
        "summary": "Get most urgent need"
      },
      {
        "name": "getCriticalNeeds",
        "kind": "function",
        "signature": "getCriticalNeeds(needs)",
        "summary": "Get all critical needs"
      },
      {
        "name": "calculateWellbeing",
        "kind": "function",
        "signature": "calculateWellbeing(needs)",
        "summary": "Calculate overall wellbeing"
      },
      {
        "name": "createActivity",
        "kind": "function",
        "signature": "createActivity(config)",
        "summary": "Create an activity definition"
      },
      {
        "name": "scoreActivity",
        "kind": "function",
        "signature": "scoreActivity(activity, needs, gameHour = 12)",
        "summary": "Score an activity based on needs"
      },
      {
        "name": "selectActivity",
        "kind": "function",
        "signature": "selectActivity(activities, needs, gameHour = 12)",
        "summary": "Select best activity from options"
      },
      {
        "name": "createSchedule",
        "kind": "function",
        "signature": "createSchedule()",
        "summary": "Create a daily schedule"
      },
      {
        "name": "addScheduleEntry",
        "kind": "function",
        "signature": "addScheduleEntry(schedule, hour, activityId, priority = 1, days = null)",
        "summary": "Add scheduled entry"
      },
      {
        "name": "getScheduledActivity",
        "kind": "function",
        "signature": "getScheduledActivity(schedule, gameHour, dayOfWeek = 0)",
        "summary": "Get scheduled activity for time"
      },
      {
        "name": "createJob",
        "kind": "function",
        "signature": "createJob(config)",
        "summary": "Create job definition"
      },
      {
        "name": "isWorkTime",
        "kind": "function",
        "signature": "isWorkTime(job, gameHour, dayOfWeek)",
        "summary": "Check if currently work hours"
      },
      {
        "name": "createNPCScheduler",
        "kind": "function",
        "signature": "createNPCScheduler(config = {})",
        "summary": "Create NPC scheduler"
      },
      {
        "name": "updateScheduler",
        "kind": "function",
        "signature": "updateScheduler(scheduler, gameHour, dayOfWeek, deltaGameHours)",
        "summary": "Update NPC scheduler"
      },
      {
        "name": "NEED",
        "kind": "constant",
        "signature": "NEED",
        "summary": "Basic need types"
      },
      {
        "name": "URGENCY",
        "kind": "constant",
        "signature": "URGENCY",
        "summary": "Need urgency thresholds"
      },
      {
        "name": "JOB_TYPE",
        "kind": "constant",
        "signature": "JOB_TYPE",
        "summary": "Job types"
      },
      {
        "name": "PRESET_ACTIVITIES",
        "kind": "constant",
        "signature": "PRESET_ACTIVITIES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AISchema",
    "path": "engine/reference/sim/ai/AISchema.md",
    "source": "engine/sim/ai/AISchema.js",
    "import": "/engine/sim/ai/AISchema.js",
    "sourceHash": "07535f43fb70f2be387bf96fa343e3418cdf50be9ea51b2eba78f0f8e2b2ddaa",
    "summary": "Get node type ID from name",
    "exports": [
      {
        "name": "getNodeTypeId",
        "kind": "function",
        "signature": "getNodeTypeId(typeName)",
        "summary": "Get node type ID from name"
      },
      {
        "name": "getAwarenessStateId",
        "kind": "function",
        "signature": "getAwarenessStateId(stateName)",
        "summary": "Get awareness state ID from name"
      },
      {
        "name": "getAwarenessStateName",
        "kind": "function",
        "signature": "getAwarenessStateName(stateId)",
        "summary": "Get awareness state name from ID"
      },
      {
        "name": "getReputationLevel",
        "kind": "function",
        "signature": "getReputationLevel(value)",
        "summary": "Get reputation level from value"
      },
      {
        "name": "validatePerception",
        "kind": "function",
        "signature": "validatePerception(config)",
        "summary": "Validate perception parameters"
      },
      {
        "name": "validateSteeringAgent",
        "kind": "function",
        "signature": "validateSteeringAgent(config)",
        "summary": "Validate steering agent config"
      },
      {
        "name": "validatePersonality",
        "kind": "function",
        "signature": "validatePersonality(config)",
        "summary": "Validate personality"
      },
      {
        "name": "createDefaultPerception",
        "kind": "function",
        "signature": "createDefaultPerception()",
        "summary": "Create default perception config"
      },
      {
        "name": "createDefaultSteeringAgent",
        "kind": "function",
        "signature": "createDefaultSteeringAgent()",
        "summary": "Create default steering agent"
      },
      {
        "name": "createDefaultPersonality",
        "kind": "function",
        "signature": "createDefaultPersonality()",
        "summary": "Create default personality"
      },
      {
        "name": "createDefaultFaction",
        "kind": "function",
        "signature": "createDefaultFaction(id, name)",
        "summary": "Create default faction"
      },
      {
        "name": "NODE_STATUS",
        "kind": "constant",
        "signature": "NODE_STATUS",
        "summary": "Behavior tree node status"
      },
      {
        "name": "NODE_TYPES",
        "kind": "constant",
        "signature": "NODE_TYPES",
        "summary": "Behavior tree node types"
      },
      {
        "name": "AWARENESS_STATES",
        "kind": "constant",
        "signature": "AWARENESS_STATES",
        "summary": "NPC awareness states"
      },
      {
        "name": "SENSE_TYPES",
        "kind": "constant",
        "signature": "SENSE_TYPES",
        "summary": "Sense types for perception"
      },
      {
        "name": "PERCEPTION_SCHEMA",
        "kind": "constant",
        "signature": "PERCEPTION_SCHEMA",
        "summary": "Perception parameters schema"
      },
      {
        "name": "STEERING_BEHAVIORS",
        "kind": "constant",
        "signature": "STEERING_BEHAVIORS",
        "summary": "Steering behavior types"
      },
      {
        "name": "STEERING_AGENT_SCHEMA",
        "kind": "constant",
        "signature": "STEERING_AGENT_SCHEMA",
        "summary": "Steering agent schema"
      },
      {
        "name": "DIPLOMATIC_STANCES",
        "kind": "constant",
        "signature": "DIPLOMATIC_STANCES",
        "summary": "Diplomatic stances"
      },
      {
        "name": "REPUTATION_LEVELS",
        "kind": "constant",
        "signature": "REPUTATION_LEVELS",
        "summary": "Reputation levels"
      },
      {
        "name": "FACTION_SCHEMA",
        "kind": "constant",
        "signature": "FACTION_SCHEMA",
        "summary": "Faction schema"
      },
      {
        "name": "PERSONALITY_TRAITS",
        "kind": "constant",
        "signature": "PERSONALITY_TRAITS",
        "summary": "Personality traits (Big Five + custom)"
      },
      {
        "name": "PERSONALITY_SCHEMA",
        "kind": "constant",
        "signature": "PERSONALITY_SCHEMA",
        "summary": "Personality schema"
      },
      {
        "name": "NPC_AI_SCHEMA",
        "kind": "constant",
        "signature": "NPC_AI_SCHEMA",
        "summary": "Complete NPC AI schema"
      },
      {
        "name": "PERSONALITY_PRESETS",
        "kind": "constant",
        "signature": "PERSONALITY_PRESETS",
        "summary": "Create preset personality"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AISenses",
    "path": "engine/reference/sim/ai/AISenses.md",
    "source": "engine/sim/ai/AISenses.js",
    "import": "/engine/sim/ai/AISenses.js",
    "sourceHash": "b81abdf74771cb9ee370b7bd178850baa44c91703e637eda33bacb157f676edb",
    "summary": "Create scent particle",
    "exports": [
      {
        "name": "createScentParticle",
        "kind": "function",
        "signature": "createScentParticle(config)",
        "summary": "Create scent particle"
      },
      {
        "name": "createScentTrail",
        "kind": "function",
        "signature": "createScentTrail(sourceId, type)",
        "summary": "Create scent trail (series of particles)"
      },
      {
        "name": "addTrailParticle",
        "kind": "function",
        "signature": "addTrailParticle(trail, position, intensity = 1.0)",
        "summary": "Add particle to trail"
      },
      {
        "name": "createScentSystem",
        "kind": "function",
        "signature": "createScentSystem()",
        "summary": "Create scent system"
      },
      {
        "name": "updateScentSystem",
        "kind": "function",
        "signature": "updateScentSystem(system, deltaTime)",
        "summary": "Update scent system"
      },
      {
        "name": "smellAt",
        "kind": "function",
        "signature": "smellAt(system, position, range, sensitivity = 1.0)",
        "summary": "Smell at position"
      },
      {
        "name": "followScentTrail",
        "kind": "function",
        "signature": "followScentTrail(system, position, targetSourceId, range)",
        "summary": "Follow scent trail"
      },
      {
        "name": "createVibration",
        "kind": "function",
        "signature": "createVibration(config)",
        "summary": "Create vibration event"
      },
      {
        "name": "createTremorSense",
        "kind": "function",
        "signature": "createTremorSense()",
        "summary": "Create tremor sense system"
      },
      {
        "name": "emitVibration",
        "kind": "function",
        "signature": "emitVibration(system, vibration)",
        "summary": "Emit vibration"
      },
      {
        "name": "senseVibrations",
        "kind": "function",
        "signature": "senseVibrations(system, position, sensitivity = 1.0)",
        "summary": "Sense vibrations at position"
      },
      {
        "name": "createDangerSense",
        "kind": "function",
        "signature": "createDangerSense()",
        "summary": "Create danger sense system"
      },
      {
        "name": "registerThreat",
        "kind": "function",
        "signature": "registerThreat(system, threatId, position, dangerLevel, type = \"unknown\")",
        "summary": "Register threat"
      },
      {
        "name": "removeThreat",
        "kind": "function",
        "signature": "removeThreat(system, threatId)",
        "summary": "Remove threat"
      },
      {
        "name": "senseDanger",
        "kind": "function",
        "signature": "senseDanger(system, position, range, sensitivity = 1.0)",
        "summary": "Sense danger level at position"
      },
      {
        "name": "createEnvironmentSensor",
        "kind": "function",
        "signature": "createEnvironmentSensor()",
        "summary": "Create environmental sensor"
      },
      {
        "name": "updateEnvironmentReadings",
        "kind": "function",
        "signature": "updateEnvironmentReadings(sensor, readings)",
        "summary": "Update environment readings"
      },
      {
        "name": "getEnvironmentalComfort",
        "kind": "function",
        "signature": "getEnvironmentalComfort(sensor)",
        "summary": "Get environmental comfort level"
      },
      {
        "name": "detectEnvironmentTrend",
        "kind": "function",
        "signature": "detectEnvironmentTrend(sensor, property)",
        "summary": "Detect environmental trend"
      },
      {
        "name": "SCENT_TYPE",
        "kind": "constant",
        "signature": "SCENT_TYPE",
        "summary": "Scent types"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AISmartObjects",
    "path": "engine/reference/sim/ai/AISmartObjects.md",
    "source": "engine/sim/ai/AISmartObjects.js",
    "import": "/engine/sim/ai/AISmartObjects.js",
    "sourceHash": "bc96fadae73232ba60b86b85e1e8cc8c5b6820a4356b29934bea016039eb914b",
    "summary": "Create a smart object",
    "exports": [
      {
        "name": "createSmartObject",
        "kind": "function",
        "signature": "createSmartObject(config)",
        "summary": "Create a smart object"
      },
      {
        "name": "getSlotWorldPosition",
        "kind": "function",
        "signature": "getSlotWorldPosition(smartObject, slotIndex = 0)",
        "summary": "Get world position of an interaction slot"
      },
      {
        "name": "findAvailableSlot",
        "kind": "function",
        "signature": "findAvailableSlot(smartObject)",
        "summary": "Find available slot for interaction"
      },
      {
        "name": "reserveSlot",
        "kind": "function",
        "signature": "reserveSlot(smartObject, slotIndex, npcId)",
        "summary": "Reserve a slot for an NPC"
      },
      {
        "name": "releaseSlot",
        "kind": "function",
        "signature": "releaseSlot(smartObject, slotIndex)",
        "summary": "Release a slot"
      },
      {
        "name": "checkPrerequisites",
        "kind": "function",
        "signature": "checkPrerequisites(smartObject, npcState)",
        "summary": "Check if NPC meets prerequisites for interaction"
      },
      {
        "name": "createInteraction",
        "kind": "function",
        "signature": "createInteraction(smartObject, npcId, slotIndex)",
        "summary": "Create an interaction session"
      },
      {
        "name": "updateInteraction",
        "kind": "function",
        "signature": "updateInteraction(interaction, npcPos, npcFacing, now)",
        "summary": "Update interaction state"
      },
      {
        "name": "completeInteraction",
        "kind": "function",
        "signature": "completeInteraction(smartObject, interaction, npcState)",
        "summary": "Complete interaction and apply effects"
      },
      {
        "name": "createSmartObjectRegistry",
        "kind": "function",
        "signature": "createSmartObjectRegistry()",
        "summary": "Create a smart object registry"
      },
      {
        "name": "registerSmartObject",
        "kind": "function",
        "signature": "registerSmartObject(registry, smartObject)",
        "summary": "Register a smart object"
      },
      {
        "name": "findByCategory",
        "kind": "function",
        "signature": "findByCategory(registry, category)",
        "summary": "Find smart objects by category"
      },
      {
        "name": "findByTag",
        "kind": "function",
        "signature": "findByTag(registry, tag)",
        "summary": "Find smart objects by tag"
      },
      {
        "name": "findNearestUsable",
        "kind": "function",
        "signature": "findNearestUsable(registry, position, npcState, filters = {})",
        "summary": "Find nearest usable smart object"
      },
      {
        "name": "createHealthStation",
        "kind": "function",
        "signature": "createHealthStation(id, position, healAmount = 50)",
        "summary": "Create a health station smart object"
      },
      {
        "name": "createAmmoCrate",
        "kind": "function",
        "signature": "createAmmoCrate(id, position, ammoAmount = 30)",
        "summary": "Create an ammo crate smart object"
      },
      {
        "name": "createDoor",
        "kind": "function",
        "signature": "createDoor(id, position, rotation = 0)",
        "summary": "Create a door smart object"
      },
      {
        "name": "OBJECT_CATEGORY",
        "kind": "constant",
        "signature": "OBJECT_CATEGORY",
        "summary": "Smart object categories"
      },
      {
        "name": "INTERACTION_STATE",
        "kind": "constant",
        "signature": "INTERACTION_STATE",
        "summary": "Interaction states"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AISound",
    "path": "engine/reference/sim/ai/AISound.md",
    "source": "engine/sim/ai/AISound.js",
    "import": "/engine/sim/ai/AISound.js",
    "sourceHash": "d39b20cacac1289018b899f8f9c3e7f463eac7a8ec0898cc8950598873d47ad6",
    "summary": "Create a sound event",
    "exports": [
      {
        "name": "createSoundEvent",
        "kind": "function",
        "signature": "createSoundEvent(config)",
        "summary": "Create a sound event"
      },
      {
        "name": "createSoundSystem",
        "kind": "function",
        "signature": "createSoundSystem(config = {})",
        "summary": "Create sound propagation system"
      },
      {
        "name": "registerListener",
        "kind": "function",
        "signature": "registerListener(system, entityId, config = {})",
        "summary": "Register listener (AI agent that can hear)"
      },
      {
        "name": "updateListenerPosition",
        "kind": "function",
        "signature": "updateListenerPosition(system, entityId, position)",
        "summary": "Update listener position"
      },
      {
        "name": "addSoundOccluder",
        "kind": "function",
        "signature": "addSoundOccluder(system, wall)",
        "summary": "Add wall/occluder"
      },
      {
        "name": "emitSound",
        "kind": "function",
        "signature": "emitSound(system, soundConfig)",
        "summary": "Emit sound"
      },
      {
        "name": "calculateSoundIntensity",
        "kind": "function",
        "signature": "calculateSoundIntensity(sound, position, walls)",
        "summary": "Calculate sound intensity at position"
      },
      {
        "name": "updateSoundSystem",
        "kind": "function",
        "signature": "updateSoundSystem(system, deltaTime)",
        "summary": "Update sound propagation and detection"
      },
      {
        "name": "getRecentDetections",
        "kind": "function",
        "signature": "getRecentDetections(system, entityId, maxAge = 5000)",
        "summary": "Get recent detections for entity"
      },
      {
        "name": "getHighestPriorityDetection",
        "kind": "function",
        "signature": "getHighestPriorityDetection(system, entityId)",
        "summary": "Get highest priority unhandled detection"
      },
      {
        "name": "emitFootstep",
        "kind": "function",
        "signature": "emitFootstep(system, position, surface = SURFACE_TYPE.CONCRETE, running = false)",
        "summary": "Emit footstep sound"
      },
      {
        "name": "emitGunshot",
        "kind": "function",
        "signature": "emitGunshot(system, position, weaponType = \"pistol\")",
        "summary": "Emit gunshot sound"
      },
      {
        "name": "emitExplosion",
        "kind": "function",
        "signature": "emitExplosion(system, position, size = 1.0)",
        "summary": "Emit explosion sound"
      },
      {
        "name": "SOUND_CATEGORY",
        "kind": "constant",
        "signature": "SOUND_CATEGORY",
        "summary": "Sound categories"
      },
      {
        "name": "SURFACE_TYPE",
        "kind": "constant",
        "signature": "SURFACE_TYPE",
        "summary": "Surface types for acoustic properties"
      },
      {
        "name": "SOUND_PRIORITY",
        "kind": "constant",
        "signature": "SOUND_PRIORITY",
        "summary": "Sound priority for AI attention"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AISquad",
    "path": "engine/reference/sim/ai/AISquad.md",
    "source": "engine/sim/ai/AISquad.js",
    "import": "/engine/sim/ai/AISquad.js",
    "sourceHash": "97b073e58e921f839113ddd74f680ca4a418aa5f0e867f782d3251f8a13e8af8",
    "summary": "Create a squad manager",
    "exports": [
      {
        "name": "createSquadManager",
        "kind": "function",
        "signature": "createSquadManager()",
        "summary": "Create a squad manager"
      },
      {
        "name": "createSquad",
        "kind": "function",
        "signature": "createSquad(manager, leader)",
        "summary": "Create a new squad"
      },
      {
        "name": "addToSquad",
        "kind": "function",
        "signature": "addToSquad(manager, squad, npc, role = SQUAD_ROLE.NONE)",
        "summary": "Add NPC to squad"
      },
      {
        "name": "removeFromSquad",
        "kind": "function",
        "signature": "removeFromSquad(manager, npcId)",
        "summary": "Remove NPC from their squad"
      },
      {
        "name": "disbandSquad",
        "kind": "function",
        "signature": "disbandSquad(manager, squad)",
        "summary": "Disband a squad"
      },
      {
        "name": "updateSquadFormations",
        "kind": "function",
        "signature": "updateSquadFormations(manager, npcs)",
        "summary": "Update squad formations based on proximity NPCs within range form impromptu squads"
      },
      {
        "name": "assignSquadRoles",
        "kind": "function",
        "signature": "assignSquadRoles(squad, threatPos)",
        "summary": "Assign tactical roles to squad members"
      },
      {
        "name": "calculateAttackPositions",
        "kind": "function",
        "signature": "calculateAttackPositions(squad, targetPos, coverPoints)",
        "summary": "Calculate attack positions for coordinated assault"
      },
      {
        "name": "planSuppressionManeuver",
        "kind": "function",
        "signature": "planSuppressionManeuver(squad, targetPos)",
        "summary": "Check if squad should coordinate suppression fire"
      },
      {
        "name": "queueBark",
        "kind": "function",
        "signature": "queueBark(squad, npcId, barkType, data = {})",
        "summary": "Queue a bark for the squad"
      },
      {
        "name": "processBarkQueue",
        "kind": "function",
        "signature": "processBarkQueue(squad)",
        "summary": "Process pending barks"
      },
      {
        "name": "getBarkText",
        "kind": "function",
        "signature": "getBarkText(barkType)",
        "summary": "Get bark text for a bark type"
      },
      {
        "name": "updateSquadTactics",
        "kind": "function",
        "signature": "updateSquadTactics(manager, squad, threatPos, options = {})",
        "summary": "Update squad tactical state"
      },
      {
        "name": "getSquadForNPC",
        "kind": "function",
        "signature": "getSquadForNPC(manager, npcId)",
        "summary": "Get squad for an NPC"
      },
      {
        "name": "getTeammates",
        "kind": "function",
        "signature": "getTeammates(manager, npcId)",
        "summary": "Get teammates for an NPC (excluding self)"
      },
      {
        "name": "SQUAD_ROLE",
        "kind": "constant",
        "signature": "SQUAD_ROLE",
        "summary": "Squad roles"
      },
      {
        "name": "BARK_TYPE",
        "kind": "constant",
        "signature": "BARK_TYPE",
        "summary": "Communication bark types"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AISteering",
    "path": "engine/reference/sim/ai/AISteering.md",
    "source": "engine/sim/ai/AISteering.js",
    "import": "/engine/sim/ai/AISteering.js",
    "sourceHash": "4ec77443410e33f7679cf24c863ac23be78602277ced9201e5551b317947cb71",
    "summary": "Create a steering agent Uses AISchema defaults for consistent configuration",
    "exports": [
      {
        "name": "createSteeringAgent",
        "kind": "function",
        "signature": "createSteeringAgent(config = {})",
        "summary": "Create a steering agent Uses AISchema defaults for consistent configuration"
      },
      {
        "name": "applyForce",
        "kind": "function",
        "signature": "applyForce(agent, force)",
        "summary": "Apply steering force to agent"
      },
      {
        "name": "updateSteering",
        "kind": "function",
        "signature": "updateSteering(agent, deltaTime)",
        "summary": "Update agent physics"
      },
      {
        "name": "seek",
        "kind": "function",
        "signature": "seek(agent, target)",
        "summary": "Seek: steer toward target"
      },
      {
        "name": "flee",
        "kind": "function",
        "signature": "flee(agent, target)",
        "summary": "Flee: steer away from target"
      },
      {
        "name": "arrive",
        "kind": "function",
        "signature": "arrive(agent, target, slowingRadius = 5)",
        "summary": "Arrive: seek with slowing near target"
      },
      {
        "name": "pursue",
        "kind": "function",
        "signature": "pursue(agent, targetPos, targetVel)",
        "summary": "Pursue: seek predicted future position of moving target"
      },
      {
        "name": "evade",
        "kind": "function",
        "signature": "evade(agent, targetPos, targetVel)",
        "summary": "Evade: flee from predicted future position"
      },
      {
        "name": "wander",
        "kind": "function",
        "signature": "wander(agent)",
        "summary": "Wander: random steering"
      },
      {
        "name": "avoidObstacles",
        "kind": "function",
        "signature": "avoidObstacles(agent, obstacles)",
        "summary": "Avoid obstacles using ray casting"
      },
      {
        "name": "avoidWalls",
        "kind": "function",
        "signature": "avoidWalls(agent, walls)",
        "summary": "Avoid walls using feeler rays"
      },
      {
        "name": "separation",
        "kind": "function",
        "signature": "separation(agent, neighbors, separationRadius = 3)",
        "summary": "Separation: steer away from nearby agents"
      },
      {
        "name": "alignment",
        "kind": "function",
        "signature": "alignment(agent, neighbors, alignmentRadius = 5)",
        "summary": "Alignment: steer toward average heading of neighbors"
      },
      {
        "name": "cohesion",
        "kind": "function",
        "signature": "cohesion(agent, neighbors, cohesionRadius = 8)",
        "summary": "Cohesion: steer toward center of neighbors"
      },
      {
        "name": "flock",
        "kind": "function",
        "signature": "flock(agent, neighbors, weights = {})",
        "summary": "Combined flocking behavior"
      },
      {
        "name": "followPath",
        "kind": "function",
        "signature": "followPath(agent, path, pathRadius = 2)",
        "summary": "Follow a path"
      },
      {
        "name": "createFlowField",
        "kind": "function",
        "signature": "createFlowField(width, height, cellSize)",
        "summary": "Create a flow field"
      },
      {
        "name": "setFlowDirection",
        "kind": "function",
        "signature": "setFlowDirection(field, x, y, dirX, dirZ)",
        "summary": "Set flow field cell direction"
      },
      {
        "name": "getFlowDirection",
        "kind": "function",
        "signature": "getFlowDirection(field, worldX, worldZ)",
        "summary": "Get flow direction at world position"
      },
      {
        "name": "followFlowField",
        "kind": "function",
        "signature": "followFlowField(agent, field)",
        "summary": "Follow flow field"
      },
      {
        "name": "generateFlowFieldToTarget",
        "kind": "function",
        "signature": "generateFlowFieldToTarget(field, targetX, targetZ)",
        "summary": "Generate flow field toward target"
      },
      {
        "name": "STEERING_BEHAVIORS",
        "kind": "re-export",
        "signature": "STEERING_BEHAVIORS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AITerrain",
    "path": "engine/reference/sim/ai/AITerrain.md",
    "source": "engine/sim/ai/AITerrain.js",
    "import": "/engine/sim/ai/AITerrain.js",
    "sourceHash": "73bd38d9411cd01706032100e5eff15b8912740b7db70c9fa4c5898292ef0e8e",
    "summary": "Create terrain grid",
    "exports": [
      {
        "name": "createTerrainGrid",
        "kind": "function",
        "signature": "createTerrainGrid(width, height, cellSize)",
        "summary": "Create terrain grid"
      },
      {
        "name": "setTerrainType",
        "kind": "function",
        "signature": "setTerrainType(grid, x, y, type)",
        "summary": "Set terrain type at cell"
      },
      {
        "name": "getTerrainType",
        "kind": "function",
        "signature": "getTerrainType(grid, x, y)",
        "summary": "Get terrain type at cell"
      },
      {
        "name": "setTerrainHeight",
        "kind": "function",
        "signature": "setTerrainHeight(grid, x, y, height)",
        "summary": "Set height at cell"
      },
      {
        "name": "getTerrainHeight",
        "kind": "function",
        "signature": "getTerrainHeight(grid, x, y)",
        "summary": "Get height at cell"
      },
      {
        "name": "worldToTerrainCell",
        "kind": "function",
        "signature": "worldToTerrainCell(grid, worldX, worldZ)",
        "summary": "World to grid coordinates"
      },
      {
        "name": "terrainCellToWorld",
        "kind": "function",
        "signature": "terrainCellToWorld(grid, cellX, cellY)",
        "summary": "Grid to world coordinates (cell center)"
      },
      {
        "name": "getTerrainPropertiesAt",
        "kind": "function",
        "signature": "getTerrainPropertiesAt(grid, worldX, worldZ)",
        "summary": "Get terrain properties at world position"
      },
      {
        "name": "calculateMovementCost",
        "kind": "function",
        "signature": "calculateMovementCost(grid, fromX, fromZ, toX, toZ)",
        "summary": "Calculate movement cost between two points"
      },
      {
        "name": "getStealthModifier",
        "kind": "function",
        "signature": "getStealthModifier(grid, worldX, worldZ)",
        "summary": "Get stealth modifier at position"
      },
      {
        "name": "getNoiseModifier",
        "kind": "function",
        "signature": "getNoiseModifier(grid, worldX, worldZ)",
        "summary": "Get noise modifier at position"
      },
      {
        "name": "calculateHeightAdvantage",
        "kind": "function",
        "signature": "calculateHeightAdvantage(grid, attackerX, attackerZ, defenderX, defenderZ)",
        "summary": "Calculate height advantage"
      },
      {
        "name": "findHighGround",
        "kind": "function",
        "signature": "findHighGround(grid, centerX, centerZ, radius, count = 5)",
        "summary": "Find high ground positions in area"
      },
      {
        "name": "findConcealment",
        "kind": "function",
        "signature": "findConcealment(grid, centerX, centerZ, radius, count = 5)",
        "summary": "Find concealment positions"
      },
      {
        "name": "detectChokepoints",
        "kind": "function",
        "signature": "detectChokepoints(grid, minX, minZ, maxX, maxZ)",
        "summary": "Detect chokepoints in area"
      },
      {
        "name": "evaluateTacticalPosition",
        "kind": "function",
        "signature": "evaluateTacticalPosition(grid, worldX, worldZ, threatDirection = null)",
        "summary": "Evaluate tactical position value"
      },
      {
        "name": "TERRAIN_TYPE",
        "kind": "constant",
        "signature": "TERRAIN_TYPE",
        "summary": "Terrain types"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIUtility",
    "path": "engine/reference/sim/ai/AIUtility.md",
    "source": "engine/sim/ai/AIUtility.js",
    "import": "/engine/sim/ai/AIUtility.js",
    "sourceHash": "fa5b52b61032ead15125bcc841d7c0f7ed9f2e23b827def2921209d04ff25fa3",
    "summary": "Linear curve: y = mx + b",
    "exports": [
      {
        "name": "linearCurve",
        "kind": "function",
        "signature": "linearCurve(slope = 1, intercept = 0)",
        "summary": "Linear curve: y = mx + b"
      },
      {
        "name": "inverseLinearCurve",
        "kind": "function",
        "signature": "inverseLinearCurve()",
        "summary": "Inverse linear curve: y = 1 - x"
      },
      {
        "name": "quadraticCurve",
        "kind": "function",
        "signature": "quadraticCurve(scale = 1, offset = 0)",
        "summary": "Quadratic curve: y = (x - offset)^2 * scale"
      },
      {
        "name": "exponentialCurve",
        "kind": "function",
        "signature": "exponentialCurve(k = 2)",
        "summary": "Exponential curve: y = e^(kx) normalized"
      },
      {
        "name": "logisticCurve",
        "kind": "function",
        "signature": "logisticCurve(k = 10, midpoint = 0.5)",
        "summary": "Logistic (S-curve): y = 1 / (1 + e^(-k(x - midpoint)))"
      },
      {
        "name": "smoothstepCurve",
        "kind": "function",
        "signature": "smoothstepCurve()",
        "summary": "Smoothstep curve: 3x^2 - 2x^3"
      },
      {
        "name": "stepCurve",
        "kind": "function",
        "signature": "stepCurve(threshold = 0.5)",
        "summary": "Step curve: returns 0 below threshold, 1 above"
      },
      {
        "name": "bellCurve",
        "kind": "function",
        "signature": "bellCurve(center = 0.5, width = 0.3)",
        "summary": "Bell curve (Gaussian-like): peaks at center"
      },
      {
        "name": "customCurve",
        "kind": "function",
        "signature": "customCurve(points)",
        "summary": "Custom curve from control points (piecewise linear)"
      },
      {
        "name": "createConsideration",
        "kind": "function",
        "signature": "createConsideration(name, inputFn, curve, weight = 1)",
        "summary": "Create a consideration (single scoring factor)"
      },
      {
        "name": "evaluateConsideration",
        "kind": "function",
        "signature": "evaluateConsideration(consideration, context)",
        "summary": "Evaluate a consideration"
      },
      {
        "name": "createUtilityAction",
        "kind": "function",
        "signature": "createUtilityAction(name, considerations, execute, options = {})",
        "summary": "Create a utility action"
      },
      {
        "name": "scoreAction",
        "kind": "function",
        "signature": "scoreAction(action, context)",
        "summary": "Score an action"
      },
      {
        "name": "selectBestAction",
        "kind": "function",
        "signature": "selectBestAction(actions, context)",
        "summary": "Select best action from candidates"
      },
      {
        "name": "selectActionWeighted",
        "kind": "function",
        "signature": "selectActionWeighted(actions, context, randomFactor = 0.2)",
        "summary": "Select action with weighted randomization Higher scores = higher chance, but not guaranteed"
      },
      {
        "name": "selectActionBucketed",
        "kind": "function",
        "signature": "selectActionBucketed(actions, context, bucketSize = 3)",
        "summary": "Select from top N actions (bucketing)"
      },
      {
        "name": "createUtilityBrain",
        "kind": "function",
        "signature": "createUtilityBrain(actions, options = {})",
        "summary": "Create a utility AI brain"
      },
      {
        "name": "updateUtilityBrain",
        "kind": "function",
        "signature": "updateUtilityBrain(brain, context, now = performance.now()",
        "summary": "Update utility brain and select action"
      },
      {
        "name": "executeCurrentAction",
        "kind": "function",
        "signature": "executeCurrentAction(brain, context)",
        "summary": "Execute the current action"
      },
      {
        "name": "createHealthConsideration",
        "kind": "function",
        "signature": "createHealthConsideration(criticalThreshold = 0.3)",
        "summary": "Create health consideration"
      },
      {
        "name": "createDistanceConsideration",
        "kind": "function",
        "signature": "createDistanceConsideration(idealDistance, maxDistance)",
        "summary": "Create distance consideration"
      },
      {
        "name": "createAmmoConsideration",
        "kind": "function",
        "signature": "createAmmoConsideration()",
        "summary": "Create ammo consideration"
      },
      {
        "name": "createThreatConsideration",
        "kind": "function",
        "signature": "createThreatConsideration()",
        "summary": "Create threat consideration"
      },
      {
        "name": "createCoverConsideration",
        "kind": "function",
        "signature": "createCoverConsideration()",
        "summary": "Create cover consideration"
      },
      {
        "name": "createLOSConsideration",
        "kind": "function",
        "signature": "createLOSConsideration()",
        "summary": "Create line of sight consideration"
      },
      {
        "name": "createCombatActions",
        "kind": "function",
        "signature": "createCombatActions(handlers)",
        "summary": "Create basic combat action set"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIValues",
    "path": "engine/reference/sim/ai/AIValues.md",
    "source": "engine/sim/ai/AIValues.js",
    "import": "/engine/sim/ai/AIValues.js",
    "sourceHash": "3cd1cfed5cc159d3b2d8adcb366ee2bd4fb61ff77c007dbc806aa0e2b69a3863",
    "summary": "Create NPC values system",
    "exports": [
      {
        "name": "createValueSystem",
        "kind": "function",
        "signature": "createValueSystem(config = {})",
        "summary": "Create NPC values system"
      },
      {
        "name": "createLifeGoal",
        "kind": "function",
        "signature": "createLifeGoal(config)",
        "summary": "Create a life goal"
      },
      {
        "name": "getValue",
        "kind": "function",
        "signature": "getValue(system, value)",
        "summary": "Get value strength"
      },
      {
        "name": "setValue",
        "kind": "function",
        "signature": "setValue(system, value, level)",
        "summary": "Set value strength"
      },
      {
        "name": "modifyValue",
        "kind": "function",
        "signature": "modifyValue(system, value, delta)",
        "summary": "Modify value (shift toward a direction)"
      },
      {
        "name": "valuesPositively",
        "kind": "function",
        "signature": "valuesPositively(system, value)",
        "summary": "Check if NPC values something"
      },
      {
        "name": "getTopValues",
        "kind": "function",
        "signature": "getTopValues(system, count = 5)",
        "summary": "Get top values (what they care about most)"
      },
      {
        "name": "satisfyPsychNeed",
        "kind": "function",
        "signature": "satisfyPsychNeed(system, need, delta)",
        "summary": "Update psychological need"
      },
      {
        "name": "decayPsychNeeds",
        "kind": "function",
        "signature": "decayPsychNeeds(system, deltaTime)",
        "summary": "Decay psychological needs over time"
      },
      {
        "name": "getMostDeprivedNeed",
        "kind": "function",
        "signature": "getMostDeprivedNeed(system)",
        "summary": "Get most deprived psychological need"
      },
      {
        "name": "calculateWellbeing",
        "kind": "function",
        "signature": "calculateWellbeing(system)",
        "summary": "Calculate overall psychological wellbeing"
      },
      {
        "name": "addLifeGoal",
        "kind": "function",
        "signature": "addLifeGoal(system, goal)",
        "summary": "Add life goal"
      },
      {
        "name": "updateGoalProgress",
        "kind": "function",
        "signature": "updateGoalProgress(system, goalId, progress)",
        "summary": "Update goal progress"
      },
      {
        "name": "pursueGoal",
        "kind": "function",
        "signature": "pursueGoal(system, goalId)",
        "summary": "Start pursuing a goal"
      },
      {
        "name": "getActiveGoals",
        "kind": "function",
        "signature": "getActiveGoals(system)",
        "summary": "Get active goals being pursued"
      },
      {
        "name": "getUnfulfilledDreams",
        "kind": "function",
        "signature": "getUnfulfilledDreams(system)",
        "summary": "Get unfulfilled dreams"
      },
      {
        "name": "scoreActionByValues",
        "kind": "function",
        "signature": "scoreActionByValues(system, action)",
        "summary": "Score an action based on values"
      },
      {
        "name": "wouldDoAction",
        "kind": "function",
        "signature": "wouldDoAction(system, action, threshold = 0)",
        "summary": "Would NPC do this action based on values?"
      },
      {
        "name": "createFromPreset",
        "kind": "function",
        "signature": "createFromPreset(preset)",
        "summary": "Create value system from preset"
      },
      {
        "name": "VALUE",
        "kind": "constant",
        "signature": "VALUE",
        "summary": "Value types - things an NPC can care about"
      },
      {
        "name": "VALUE_LEVEL",
        "kind": "constant",
        "signature": "VALUE_LEVEL",
        "summary": "Value strength levels"
      },
      {
        "name": "GOAL_TYPE",
        "kind": "constant",
        "signature": "GOAL_TYPE",
        "summary": "Types of life goals"
      },
      {
        "name": "GOAL_STATUS",
        "kind": "constant",
        "signature": "GOAL_STATUS",
        "summary": "Goal status"
      },
      {
        "name": "PSYCH_NEED",
        "kind": "constant",
        "signature": "PSYCH_NEED",
        "summary": "Higher-order psychological needs"
      },
      {
        "name": "PREF_CATEGORY",
        "kind": "constant",
        "signature": "PREF_CATEGORY",
        "summary": "Preference categories"
      },
      {
        "name": "VALUE_PRESETS",
        "kind": "constant",
        "signature": "VALUE_PRESETS",
        "summary": "Value presets for quick character creation"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIVehicle",
    "path": "engine/reference/sim/ai/AIVehicle.md",
    "source": "engine/sim/ai/AIVehicle.js",
    "import": "/engine/sim/ai/AIVehicle.js",
    "sourceHash": "93a2ff7c8c0b951778f395a8be3c9356c96bf27cde4cf4aacf2cd2cd0e5913d3",
    "summary": "AIVehicle.js ⚠️ MULTIPLAYER: Uses deterministic RNG from AIRandom.js",
    "exports": [
      {
        "name": "createVehicleType",
        "kind": "function",
        "signature": "createVehicleType(config)",
        "summary": "Create vehicle definition"
      },
      {
        "name": "createVehicle",
        "kind": "function",
        "signature": "createVehicle(vehicleType, position, heading = 0)",
        "summary": "Create vehicle instance"
      },
      {
        "name": "updateVehiclePhysics",
        "kind": "function",
        "signature": "updateVehiclePhysics(vehicle, deltaTime)",
        "summary": "Update vehicle physics"
      },
      {
        "name": "updateVehicleAI",
        "kind": "function",
        "signature": "updateVehicleAI(vehicle, world, deltaTime)",
        "summary": "Update vehicle AI"
      },
      {
        "name": "setVehiclePath",
        "kind": "function",
        "signature": "setVehiclePath(vehicle, path)",
        "summary": "Set vehicle path"
      },
      {
        "name": "createTrafficSystem",
        "kind": "function",
        "signature": "createTrafficSystem(config = {})",
        "summary": "Create traffic system"
      },
      {
        "name": "updateTrafficSystem",
        "kind": "function",
        "signature": "updateTrafficSystem(traffic, deltaTime)",
        "summary": "Update traffic system"
      },
      {
        "name": "DRIVE_MODE",
        "kind": "constant",
        "signature": "DRIVE_MODE",
        "summary": "Vehicle behavior modes"
      },
      {
        "name": "TRAFFIC_LIGHT",
        "kind": "constant",
        "signature": "TRAFFIC_LIGHT",
        "summary": "Traffic light states"
      },
      {
        "name": "PRESET_VEHICLES",
        "kind": "constant",
        "signature": "PRESET_VEHICLES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIWeapons",
    "path": "engine/reference/sim/ai/AIWeapons.md",
    "source": "engine/sim/ai/AIWeapons.js",
    "import": "/engine/sim/ai/AIWeapons.js",
    "sourceHash": "0062a523463a6ab8eac286154facd6ea6891767ebbcc7dde4e2f119c4d6b366e",
    "summary": "Fire a hitscan weapon (instant ray hit)",
    "exports": [
      {
        "name": "fireHitscan",
        "kind": "function",
        "signature": "fireHitscan(origin, direction, weapon, targets, obstacles = [])",
        "summary": "Fire a hitscan weapon (instant ray hit)"
      },
      {
        "name": "fireShotgun",
        "kind": "function",
        "signature": "fireShotgun(origin, direction, weapon, targets, obstacles = [])",
        "summary": "Fire a shotgun (multiple pellets in ring pattern)"
      },
      {
        "name": "calculateDamageFalloff",
        "kind": "function",
        "signature": "calculateDamageFalloff(baseDamage, distance, rangeModifier = 0.98)",
        "summary": "Calculate damage falloff (CS:GO style exponential)"
      },
      {
        "name": "createProjectile",
        "kind": "function",
        "signature": "createProjectile(position, velocity, config = {})",
        "summary": "Create a projectile entity"
      },
      {
        "name": "updateProjectile",
        "kind": "function",
        "signature": "updateProjectile(projectile, deltaTimeSec)",
        "summary": "Update projectile position (kinematic motion)"
      },
      {
        "name": "getProjectilePositionAtTime",
        "kind": "function",
        "signature": "getProjectilePositionAtTime(projectile, timeSec)",
        "summary": "Get projectile position at future time (prediction) P(t) = P₀ + V₀×t + ½×g×t²"
      },
      {
        "name": "checkProjectileCollision",
        "kind": "function",
        "signature": "checkProjectileCollision(projectile, targets, projectileRadius = 0.5)",
        "summary": "Check projectile collision with targets"
      },
      {
        "name": "isInCircularAoE",
        "kind": "function",
        "signature": "isInCircularAoE(targetPos, center, radius)",
        "summary": "Check if target is in circular AoE"
      },
      {
        "name": "calculateAoEDamage",
        "kind": "function",
        "signature": "calculateAoEDamage(baseDamage, dist, radius)",
        "summary": "Calculate AoE damage with quadratic falloff"
      },
      {
        "name": "resolveCircularAoE",
        "kind": "function",
        "signature": "resolveCircularAoE(center, radius, baseDamage, targets)",
        "summary": "Get all targets in circular AoE with damage"
      },
      {
        "name": "isInConeAoE",
        "kind": "function",
        "signature": "isInConeAoE(targetPos, origin, direction, halfAngleRad, range)",
        "summary": "Check if target is in cone AoE"
      },
      {
        "name": "resolveConeAoE",
        "kind": "function",
        "signature": "resolveConeAoE(origin, direction, coneAngleDeg, range, baseDamage, targets)",
        "summary": "Get all targets in cone AoE"
      },
      {
        "name": "createBeamWeapon",
        "kind": "function",
        "signature": "createBeamWeapon(config = {})",
        "summary": "Create a beam weapon state"
      },
      {
        "name": "updateBeamTracking",
        "kind": "function",
        "signature": "updateBeamTracking(beam, origin, targetPos, deltaTimeSec)",
        "summary": "Update beam weapon direction toward target"
      },
      {
        "name": "fireBeam",
        "kind": "function",
        "signature": "fireBeam(beam, origin, targets, obstacles, deltaTimeSec)",
        "summary": "Fire beam weapon (continuous damage)"
      },
      {
        "name": "createGrenade",
        "kind": "function",
        "signature": "createGrenade(position, velocity, config = {})",
        "summary": "Create a grenade projectile"
      },
      {
        "name": "updateGrenade",
        "kind": "function",
        "signature": "updateGrenade(grenade, deltaTimeSec, surfaces = [])",
        "summary": "Update grenade physics"
      },
      {
        "name": "calculateGrenadeLaunchVelocity",
        "kind": "function",
        "signature": "calculateGrenadeLaunchVelocity(start, target, gravity, launchAngleDeg)",
        "summary": "Calculate grenade launch velocity to hit target"
      },
      {
        "name": "createWeaponController",
        "kind": "function",
        "signature": "createWeaponController()",
        "summary": "Create an NPC weapon controller for multi-weapon management"
      },
      {
        "name": "addWeapon",
        "kind": "function",
        "signature": "addWeapon(controller, name, config)",
        "summary": "Add weapon to controller"
      },
      {
        "name": "selectBestWeapon",
        "kind": "function",
        "signature": "selectBestWeapon(controller, params)",
        "summary": "Select best weapon for situation"
      },
      {
        "name": "canFireWeapon",
        "kind": "function",
        "signature": "canFireWeapon(controller, weaponName, now)",
        "summary": "Check if weapon can fire (fire rate cooldown)"
      },
      {
        "name": "recordWeaponFire",
        "kind": "function",
        "signature": "recordWeaponFire(controller, weaponName, now)",
        "summary": "Record weapon fire"
      },
      {
        "name": "WEAPON_TYPE",
        "kind": "constant",
        "signature": "WEAPON_TYPE",
        "summary": "Weapon type constants"
      },
      {
        "name": "WEAPON_PRESETS",
        "kind": "constant",
        "signature": "WEAPON_PRESETS",
        "summary": "Default weapon configurations"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/AIWorld",
    "path": "engine/reference/sim/ai/AIWorld.md",
    "source": "engine/sim/ai/AIWorld.js",
    "import": "/engine/sim/ai/AIWorld.js",
    "sourceHash": "b86f138f93aacb26abc23ae04e944070daa653b7808527141ad4fcd00ce58711",
    "summary": "Create world time system",
    "exports": [
      {
        "name": "createWorldTime",
        "kind": "function",
        "signature": "createWorldTime(config = {})",
        "summary": "Create world time system"
      },
      {
        "name": "advanceTime",
        "kind": "function",
        "signature": "advanceTime(time, realDeltaSeconds)",
        "summary": "Advance world time"
      },
      {
        "name": "getSeason",
        "kind": "function",
        "signature": "getSeason(time)",
        "summary": "Get current season"
      },
      {
        "name": "getDayPhase",
        "kind": "function",
        "signature": "getDayPhase(time)",
        "summary": "Get day/night phase"
      },
      {
        "name": "formatTime",
        "kind": "function",
        "signature": "formatTime(time)",
        "summary": "Get formatted time string"
      },
      {
        "name": "formatDate",
        "kind": "function",
        "signature": "formatDate(time)",
        "summary": "Get formatted date string"
      },
      {
        "name": "createWeatherSystem",
        "kind": "function",
        "signature": "createWeatherSystem(config = {})",
        "summary": "Create weather system"
      },
      {
        "name": "updateWeather",
        "kind": "function",
        "signature": "updateWeather(weather, time, deltaHours)",
        "summary": "Update weather"
      },
      {
        "name": "getWeatherEffects",
        "kind": "function",
        "signature": "getWeatherEffects(weather)",
        "summary": "Get weather effects on gameplay"
      },
      {
        "name": "createWorldEvent",
        "kind": "function",
        "signature": "createWorldEvent(config)",
        "summary": "Create world event"
      },
      {
        "name": "createEventManager",
        "kind": "function",
        "signature": "createEventManager()",
        "summary": "Create world event manager"
      },
      {
        "name": "scheduleEvent",
        "kind": "function",
        "signature": "scheduleEvent(manager, event)",
        "summary": "Schedule world event"
      },
      {
        "name": "updateEvents",
        "kind": "function",
        "signature": "updateEvents(manager, currentTime, deltaHours)",
        "summary": "Update world events"
      },
      {
        "name": "createWorldState",
        "kind": "function",
        "signature": "createWorldState(config = {})",
        "summary": "Create complete world state"
      },
      {
        "name": "updateWorldState",
        "kind": "function",
        "signature": "updateWorldState(world, realDeltaSeconds)",
        "summary": "Update world state"
      },
      {
        "name": "SEASON",
        "kind": "constant",
        "signature": "SEASON",
        "summary": "Seasons"
      },
      {
        "name": "DAY_OF_WEEK",
        "kind": "constant",
        "signature": "DAY_OF_WEEK",
        "summary": "Days of week"
      },
      {
        "name": "MONTH",
        "kind": "constant",
        "signature": "MONTH",
        "summary": "Months"
      },
      {
        "name": "WEATHER_TYPE",
        "kind": "constant",
        "signature": "WEATHER_TYPE",
        "summary": "Weather types"
      },
      {
        "name": "EVENT_TYPE",
        "kind": "constant",
        "signature": "EVENT_TYPE",
        "summary": "Event types"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/Blackboard",
    "path": "engine/reference/sim/ai/Blackboard.md",
    "source": "engine/sim/ai/Blackboard.js",
    "import": "/engine/sim/ai/Blackboard.js",
    "sourceHash": "94de8c90d1d268e9f238b4257883c497177e5bde0af9db2f713e1673c0d04d83",
    "summary": "",
    "exports": [
      {
        "name": "createBlackboard",
        "kind": "function",
        "signature": "createBlackboard(initial = {})",
        "summary": ""
      },
      {
        "name": "getBlackboardValue",
        "kind": "function",
        "signature": "getBlackboardValue(blackboard, key, defaultValue)",
        "summary": ""
      },
      {
        "name": "setBlackboardValue",
        "kind": "function",
        "signature": "setBlackboardValue(blackboard, key, value)",
        "summary": ""
      },
      {
        "name": "removeBlackboardValue",
        "kind": "function",
        "signature": "removeBlackboardValue(blackboard, key)",
        "summary": ""
      },
      {
        "name": "clearBlackboard",
        "kind": "function",
        "signature": "clearBlackboard(blackboard)",
        "summary": ""
      },
      {
        "name": "exportBlackboard",
        "kind": "function",
        "signature": "exportBlackboard(blackboard)",
        "summary": ""
      },
      {
        "name": "createBlackboardRegistry",
        "kind": "function",
        "signature": "createBlackboardRegistry()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/NavGrid",
    "path": "engine/reference/sim/ai/NavGrid.md",
    "source": "engine/sim/ai/NavGrid.js",
    "import": "/engine/sim/ai/NavGrid.js",
    "sourceHash": "6b2bace3fff5a5dcf805deb1c03f7869ecf5540f1adb94e44c66efae8554fc3a",
    "summary": "Convert axial (q, r) to cube (q, r, s) coordinates",
    "exports": [
      {
        "name": "createNavGrid",
        "kind": "function",
        "signature": "createNavGrid(options = {})",
        "summary": ""
      },
      {
        "name": "destroyNavGrid",
        "kind": "function",
        "signature": "destroyNavGrid(grid)",
        "summary": ""
      },
      {
        "name": "worldToGrid",
        "kind": "function",
        "signature": "worldToGrid(grid, worldX, worldZ)",
        "summary": ""
      },
      {
        "name": "gridToWorld",
        "kind": "function",
        "signature": "gridToWorld(grid, gx, gz)",
        "summary": ""
      },
      {
        "name": "isCellWalkable",
        "kind": "function",
        "signature": "isCellWalkable(grid, gx, gz)",
        "summary": ""
      },
      {
        "name": "setCellWalkable",
        "kind": "function",
        "signature": "setCellWalkable(grid, gx, gz, value)",
        "summary": ""
      },
      {
        "name": "bakeNavGridFromWorldSim",
        "kind": "function",
        "signature": "bakeNavGridFromWorldSim(grid, worldSim, options = {})",
        "summary": ""
      },
      {
        "name": "axialToCube",
        "kind": "function",
        "signature": "axialToCube(q, r)",
        "summary": "Convert axial (q, r) to cube (q, r, s) coordinates"
      },
      {
        "name": "cubeToAxial",
        "kind": "function",
        "signature": "cubeToAxial(q, r, s)",
        "summary": "Convert cube to axial coordinates"
      },
      {
        "name": "hexToWorld",
        "kind": "function",
        "signature": "hexToWorld(q, r, size = 1)",
        "summary": "Convert cube coordinates to world position (pointy-top hexes)"
      },
      {
        "name": "worldToHex",
        "kind": "function",
        "signature": "worldToHex(x, z, size = 1)",
        "summary": "Convert world position to cube hex coordinates"
      },
      {
        "name": "cubeRound",
        "kind": "function",
        "signature": "cubeRound(q, r, s)",
        "summary": "Round fractional cube coordinates to nearest hex"
      },
      {
        "name": "hexNeighbors",
        "kind": "function",
        "signature": "hexNeighbors(q, r, s)",
        "summary": "Get 6 hex neighbors in cube coordinates"
      },
      {
        "name": "hexDistance",
        "kind": "function",
        "signature": "hexDistance(q1, r1, s1, q2, r2, s2)",
        "summary": "Calculate hex distance in cube coordinates"
      },
      {
        "name": "hexRange",
        "kind": "function",
        "signature": "hexRange(q, r, range)",
        "summary": "Get all hexes within range of center"
      },
      {
        "name": "hexRing",
        "kind": "function",
        "signature": "hexRing(q, r, radius)",
        "summary": "Get hex ring at exact distance from center"
      },
      {
        "name": "hexLine",
        "kind": "function",
        "signature": "hexLine(q1, r1, q2, r2)",
        "summary": "Linear interpolation between two hexes (for line drawing)"
      },
      {
        "name": "createHexGrid",
        "kind": "function",
        "signature": "createHexGrid(radius, hexSize = 1)",
        "summary": "Create hex grid for strategy layer"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/NavWorld",
    "path": "engine/reference/sim/ai/NavWorld.md",
    "source": "engine/sim/ai/NavWorld.js",
    "import": "/engine/sim/ai/NavWorld.js",
    "sourceHash": "86bc6bb218f82f4fb91b064358c82a657e9f4227ea81e4005922f199bec30460",
    "summary": "",
    "exports": [
      {
        "name": "createNavWorld",
        "kind": "function",
        "signature": "createNavWorld(options = {})",
        "summary": ""
      },
      {
        "name": "destroyNavWorld",
        "kind": "function",
        "signature": "destroyNavWorld(navWorld)",
        "summary": ""
      },
      {
        "name": "addGridLayer",
        "kind": "function",
        "signature": "addGridLayer(navWorld, name, grid)",
        "summary": ""
      },
      {
        "name": "getGridLayer",
        "kind": "function",
        "signature": "getGridLayer(navWorld, name)",
        "summary": ""
      },
      {
        "name": "removeGridLayer",
        "kind": "function",
        "signature": "removeGridLayer(navWorld, name)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/Pathfinder",
    "path": "engine/reference/sim/ai/Pathfinder.md",
    "source": "engine/sim/ai/Pathfinder.js",
    "import": "/engine/sim/ai/Pathfinder.js",
    "sourceHash": "9cc03cfaae2e5e431fb55784883b03e8bc3dadec7d25ed63bb134f3e806cffb8",
    "summary": "",
    "exports": [
      {
        "name": "findPathOnGrid",
        "kind": "function",
        "signature": "findPathOnGrid(grid, start, goal, options = {})",
        "summary": ""
      },
      {
        "name": "findPathInNavWorld",
        "kind": "function",
        "signature": "findPathInNavWorld(navWorld, layerName, start, goal, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/SpatialHash",
    "path": "engine/reference/sim/ai/SpatialHash.md",
    "source": "engine/sim/ai/SpatialHash.js",
    "import": "/engine/sim/ai/SpatialHash.js",
    "sourceHash": "74e7cb3ccb26a7f01b6104dd97639d2b8b91465b59acc65784b1e8b89c321fb5",
    "summary": "Create a 3D spatial hash grid",
    "exports": [
      {
        "name": "createSpatialHash",
        "kind": "function",
        "signature": "createSpatialHash(cellSize = 10)",
        "summary": "Create a 3D spatial hash grid"
      },
      {
        "name": "spatialHashInsert",
        "kind": "function",
        "signature": "spatialHashInsert(hash, entity)",
        "summary": "Insert an entity into the spatial hash"
      },
      {
        "name": "spatialHashRemove",
        "kind": "function",
        "signature": "spatialHashRemove(hash, entityId)",
        "summary": "Remove an entity from the spatial hash"
      },
      {
        "name": "spatialHashUpdate",
        "kind": "function",
        "signature": "spatialHashUpdate(hash, entity)",
        "summary": "Update an entity's position in the spatial hash"
      },
      {
        "name": "spatialHashQueryRadius",
        "kind": "function",
        "signature": "spatialHashQueryRadius(hash, x, y, z, radius)",
        "summary": "Query all entities within radius of a point"
      },
      {
        "name": "spatialHashQueryRadius2D",
        "kind": "function",
        "signature": "spatialHashQueryRadius2D(hash, x, z, radius)",
        "summary": "Query all entities within radius (2D, ignores Y)"
      },
      {
        "name": "spatialHashQueryAABB",
        "kind": "function",
        "signature": "spatialHashQueryAABB(hash, min, max)",
        "summary": "Query entities in an AABB"
      },
      {
        "name": "spatialHashKNearest",
        "kind": "function",
        "signature": "spatialHashKNearest(hash, x, y, z, k, maxRadius = 100)",
        "summary": "Get K nearest neighbors to a point"
      },
      {
        "name": "spatialHashClear",
        "kind": "function",
        "signature": "spatialHashClear(hash)",
        "summary": "Clear all entities from the spatial hash"
      },
      {
        "name": "spatialHashCount",
        "kind": "function",
        "signature": "spatialHashCount(hash)",
        "summary": "Get total entity count"
      },
      {
        "name": "spatialHashRebuild",
        "kind": "function",
        "signature": "spatialHashRebuild(hash, entities)",
        "summary": "Rebuild the spatial hash from an entity array"
      },
      {
        "name": "createObjectPool",
        "kind": "function",
        "signature": "createObjectPool(factory, reset = null, initialSize = 100)",
        "summary": "Create an object pool for reducing GC pressure"
      },
      {
        "name": "poolAcquire",
        "kind": "function",
        "signature": "poolAcquire(pool)",
        "summary": "Acquire an object from the pool"
      },
      {
        "name": "poolRelease",
        "kind": "function",
        "signature": "poolRelease(pool, obj)",
        "summary": "Release an object back to the pool"
      },
      {
        "name": "poolReleaseAll",
        "kind": "function",
        "signature": "poolReleaseAll(pool)",
        "summary": "Release all active objects back to pool"
      },
      {
        "name": "poolStats",
        "kind": "function",
        "signature": "poolStats(pool)",
        "summary": "Get pool statistics"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/ai/index",
    "path": "engine/reference/sim/ai/index.md",
    "source": "engine/sim/ai/index.js",
    "import": "/engine/sim/ai/index.js",
    "sourceHash": "607ef48d8b7e58bf87dd4162a2fbfca5f56b666eb834b30695e65862c7031f11",
    "summary": "",
    "exports": [
      {
        "name": "AGENT_STATE",
        "kind": "re-export",
        "signature": "AGENT_STATE",
        "summary": ""
      },
      {
        "name": "ATTACK_PHASE",
        "kind": "re-export",
        "signature": "ATTACK_PHASE",
        "summary": ""
      },
      {
        "name": "AWARENESS_STATE",
        "kind": "re-export",
        "signature": "AWARENESS_STATE",
        "summary": ""
      },
      {
        "name": "AWARENESS_STATES",
        "kind": "re-export",
        "signature": "AWARENESS_STATES",
        "summary": ""
      },
      {
        "name": "BARK_TYPE",
        "kind": "re-export",
        "signature": "BARK_TYPE",
        "summary": ""
      },
      {
        "name": "COMBAT_STATE",
        "kind": "re-export",
        "signature": "COMBAT_STATE",
        "summary": ""
      },
      {
        "name": "COMPLEX_EMOTION",
        "kind": "re-export",
        "signature": "COMPLEX_EMOTION",
        "summary": ""
      },
      {
        "name": "COVER_ACTION",
        "kind": "re-export",
        "signature": "COVER_ACTION",
        "summary": ""
      },
      {
        "name": "COVER_QUALITY",
        "kind": "re-export",
        "signature": "COVER_QUALITY",
        "summary": ""
      },
      {
        "name": "CREATURE_STATE",
        "kind": "re-export",
        "signature": "CREATURE_STATE",
        "summary": ""
      },
      {
        "name": "CROWD_BEHAVIOR",
        "kind": "re-export",
        "signature": "CROWD_BEHAVIOR",
        "summary": ""
      },
      {
        "name": "DAY_OF_WEEK",
        "kind": "re-export",
        "signature": "DAY_OF_WEEK",
        "summary": ""
      },
      {
        "name": "DEFAULT_EVASION_PARAMS",
        "kind": "re-export",
        "signature": "DEFAULT_EVASION_PARAMS",
        "summary": ""
      },
      {
        "name": "DEFAULT_MORALE_PARAMS",
        "kind": "re-export",
        "signature": "DEFAULT_MORALE_PARAMS",
        "summary": ""
      },
      {
        "name": "DEFAULT_PERCEPTION_PARAMS",
        "kind": "re-export",
        "signature": "DEFAULT_PERCEPTION_PARAMS",
        "summary": ""
      },
      {
        "name": "DEFAULT_PHASE_DURATIONS",
        "kind": "re-export",
        "signature": "DEFAULT_PHASE_DURATIONS",
        "summary": ""
      },
      {
        "name": "DEFAULT_THREAT_WEIGHTS",
        "kind": "re-export",
        "signature": "DEFAULT_THREAT_WEIGHTS",
        "summary": ""
      },
      {
        "name": "DIPLOMATIC_STANCE",
        "kind": "re-export",
        "signature": "DIPLOMATIC_STANCE",
        "summary": ""
      },
      {
        "name": "DIPLOMATIC_STANCES",
        "kind": "re-export",
        "signature": "DIPLOMATIC_STANCES",
        "summary": ""
      },
      {
        "name": "DRIVE_MODE",
        "kind": "re-export",
        "signature": "DRIVE_MODE",
        "summary": ""
      },
      {
        "name": "EMOTION",
        "kind": "re-export",
        "signature": "EMOTION",
        "summary": ""
      },
      {
        "name": "EVASION_TYPE",
        "kind": "re-export",
        "signature": "EVASION_TYPE",
        "summary": ""
      },
      {
        "name": "EVENT_TYPE",
        "kind": "re-export",
        "signature": "EVENT_TYPE",
        "summary": ""
      },
      {
        "name": "FACTION_SCHEMA",
        "kind": "re-export",
        "signature": "FACTION_SCHEMA",
        "summary": ""
      },
      {
        "name": "FALLOFF_TYPE",
        "kind": "re-export",
        "signature": "FALLOFF_TYPE",
        "summary": ""
      },
      {
        "name": "FORMATION_TYPE",
        "kind": "re-export",
        "signature": "FORMATION_TYPE",
        "summary": ""
      },
      {
        "name": "GOAL_STATUS",
        "kind": "re-export",
        "signature": "GOAL_STATUS",
        "summary": ""
      },
      {
        "name": "GOAL_TYPE",
        "kind": "re-export",
        "signature": "GOAL_TYPE",
        "summary": ""
      },
      {
        "name": "HITBOX_TYPE",
        "kind": "re-export",
        "signature": "HITBOX_TYPE",
        "summary": ""
      },
      {
        "name": "IMPORTANCE",
        "kind": "re-export",
        "signature": "IMPORTANCE",
        "summary": ""
      },
      {
        "name": "INFO_TYPE",
        "kind": "re-export",
        "signature": "INFO_TYPE",
        "summary": ""
      },
      {
        "name": "INTENSITY_LEVEL",
        "kind": "re-export",
        "signature": "INTENSITY_LEVEL",
        "summary": ""
      },
      {
        "name": "INTERACTION_STATE",
        "kind": "re-export",
        "signature": "INTERACTION_STATE",
        "summary": ""
      },
      {
        "name": "ITEM_CATEGORY",
        "kind": "re-export",
        "signature": "ITEM_CATEGORY",
        "summary": ""
      },
      {
        "name": "JOB_TYPE",
        "kind": "re-export",
        "signature": "JOB_TYPE",
        "summary": ""
      },
      {
        "name": "LOD_UPDATE_INTERVALS",
        "kind": "re-export",
        "signature": "LOD_UPDATE_INTERVALS",
        "summary": ""
      },
      {
        "name": "MARKET_TREND",
        "kind": "re-export",
        "signature": "MARKET_TREND",
        "summary": ""
      },
      {
        "name": "MEMORY_TYPE",
        "kind": "re-export",
        "signature": "MEMORY_TYPE",
        "summary": ""
      },
      {
        "name": "MONTH",
        "kind": "re-export",
        "signature": "MONTH",
        "summary": ""
      },
      {
        "name": "MORALE_STATE",
        "kind": "re-export",
        "signature": "MORALE_STATE",
        "summary": ""
      },
      {
        "name": "NEED",
        "kind": "re-export",
        "signature": "NEED",
        "summary": ""
      },
      {
        "name": "NODE_STATUS",
        "kind": "re-export",
        "signature": "NODE_STATUS",
        "summary": ""
      },
      {
        "name": "NODE_TYPE",
        "kind": "re-export",
        "signature": "NODE_TYPE",
        "summary": ""
      },
      {
        "name": "NODE_TYPES",
        "kind": "re-export",
        "signature": "NODE_TYPES",
        "summary": ""
      },
      {
        "name": "NPC_AI_SCHEMA",
        "kind": "re-export",
        "signature": "NPC_AI_SCHEMA",
        "summary": ""
      },
      {
        "name": "OBJECT_CATEGORY",
        "kind": "re-export",
        "signature": "OBJECT_CATEGORY",
        "summary": ""
      },
      {
        "name": "PACING_STATE",
        "kind": "re-export",
        "signature": "PACING_STATE",
        "summary": ""
      },
      {
        "name": "PERCEPTION_SCHEMA",
        "kind": "re-export",
        "signature": "PERCEPTION_SCHEMA",
        "summary": ""
      },
      {
        "name": "PERSONALITY_PRESETS",
        "kind": "re-export",
        "signature": "PERSONALITY_PRESETS",
        "summary": ""
      },
      {
        "name": "PERSONALITY_SCHEMA",
        "kind": "re-export",
        "signature": "PERSONALITY_SCHEMA",
        "summary": ""
      },
      {
        "name": "PERSONALITY_TRAITS",
        "kind": "re-export",
        "signature": "PERSONALITY_TRAITS",
        "summary": ""
      },
      {
        "name": "PREF_CATEGORY",
        "kind": "re-export",
        "signature": "PREF_CATEGORY",
        "summary": ""
      },
      {
        "name": "PRESET_ACTIVITIES",
        "kind": "re-export",
        "signature": "PRESET_ACTIVITIES",
        "summary": ""
      },
      {
        "name": "PRESET_FORMATIONS",
        "kind": "re-export",
        "signature": "PRESET_FORMATIONS",
        "summary": ""
      },
      {
        "name": "PRESET_RESOURCES",
        "kind": "re-export",
        "signature": "PRESET_RESOURCES",
        "summary": ""
      },
      {
        "name": "PRESET_VEHICLES",
        "kind": "re-export",
        "signature": "PRESET_VEHICLES",
        "summary": ""
      },
      {
        "name": "PSYCH_NEED",
        "kind": "re-export",
        "signature": "PSYCH_NEED",
        "summary": ""
      },
      {
        "name": "QUEST_PRIORITY",
        "kind": "re-export",
        "signature": "QUEST_PRIORITY",
        "summary": ""
      },
      {
        "name": "QUEST_STATUS",
        "kind": "re-export",
        "signature": "QUEST_STATUS",
        "summary": ""
      },
      {
        "name": "QUEST_TYPE",
        "kind": "re-export",
        "signature": "QUEST_TYPE",
        "summary": ""
      },
      {
        "name": "RARITY",
        "kind": "re-export",
        "signature": "RARITY",
        "summary": ""
      },
      {
        "name": "RARITY_COLORS",
        "kind": "re-export",
        "signature": "RARITY_COLORS",
        "summary": ""
      },
      {
        "name": "RELATIONSHIP_TYPE",
        "kind": "re-export",
        "signature": "RELATIONSHIP_TYPE",
        "summary": ""
      },
      {
        "name": "RELIABILITY",
        "kind": "re-export",
        "signature": "RELIABILITY",
        "summary": ""
      },
      {
        "name": "REPUTATION_LEVEL",
        "kind": "re-export",
        "signature": "REPUTATION_LEVEL",
        "summary": ""
      },
      {
        "name": "REPUTATION_LEVELS",
        "kind": "re-export",
        "signature": "REPUTATION_LEVELS",
        "summary": ""
      },
      {
        "name": "RESOURCE_CATEGORY",
        "kind": "re-export",
        "signature": "RESOURCE_CATEGORY",
        "summary": ""
      },
      {
        "name": "SCENT_TYPE",
        "kind": "re-export",
        "signature": "SCENT_TYPE",
        "summary": ""
      },
      {
        "name": "SCHEMA_NODE_STATUS",
        "kind": "re-export",
        "signature": "SCHEMA_NODE_STATUS",
        "summary": ""
      },
      {
        "name": "SEASON",
        "kind": "re-export",
        "signature": "SEASON",
        "summary": ""
      },
      {
        "name": "SENSE_TYPE",
        "kind": "re-export",
        "signature": "SENSE_TYPE",
        "summary": ""
      },
      {
        "name": "SENSE_TYPES",
        "kind": "re-export",
        "signature": "SENSE_TYPES",
        "summary": ""
      },
      {
        "name": "SKILL_LEVELS",
        "kind": "re-export",
        "signature": "SKILL_LEVELS",
        "summary": ""
      },
      {
        "name": "SOUND_CATEGORY",
        "kind": "re-export",
        "signature": "SOUND_CATEGORY",
        "summary": ""
      },
      {
        "name": "SOUND_PRIORITY",
        "kind": "re-export",
        "signature": "SOUND_PRIORITY",
        "summary": ""
      },
      {
        "name": "SPECIES_ROLE",
        "kind": "re-export",
        "signature": "SPECIES_ROLE",
        "summary": ""
      },
      {
        "name": "SQUAD_ROLE",
        "kind": "re-export",
        "signature": "SQUAD_ROLE",
        "summary": ""
      },
      {
        "name": "STEERING_AGENT_SCHEMA",
        "kind": "re-export",
        "signature": "STEERING_AGENT_SCHEMA",
        "summary": ""
      },
      {
        "name": "STEERING_BEHAVIORS",
        "kind": "re-export",
        "signature": "STEERING_BEHAVIORS",
        "summary": ""
      },
      {
        "name": "SURFACE_TYPE",
        "kind": "re-export",
        "signature": "SURFACE_TYPE",
        "summary": ""
      },
      {
        "name": "SpatialHash",
        "kind": "re-export",
        "signature": "SpatialHash",
        "summary": ""
      },
      {
        "name": "TARGET_MEMORY_DURATION_MS",
        "kind": "re-export",
        "signature": "TARGET_MEMORY_DURATION_MS",
        "summary": ""
      },
      {
        "name": "TARGET_SWITCH_THRESHOLD",
        "kind": "re-export",
        "signature": "TARGET_SWITCH_THRESHOLD",
        "summary": ""
      },
      {
        "name": "TERRAIN_TYPE",
        "kind": "re-export",
        "signature": "TERRAIN_TYPE",
        "summary": ""
      },
      {
        "name": "TRAFFIC_LIGHT",
        "kind": "re-export",
        "signature": "TRAFFIC_LIGHT",
        "summary": ""
      },
      {
        "name": "TRAIT",
        "kind": "re-export",
        "signature": "TRAIT",
        "summary": ""
      },
      {
        "name": "TREATY_TYPE",
        "kind": "re-export",
        "signature": "TREATY_TYPE",
        "summary": ""
      },
      {
        "name": "URGENCY",
        "kind": "re-export",
        "signature": "URGENCY",
        "summary": ""
      },
      {
        "name": "VALUE",
        "kind": "re-export",
        "signature": "VALUE",
        "summary": ""
      },
      {
        "name": "VALUE_LEVEL",
        "kind": "re-export",
        "signature": "VALUE_LEVEL",
        "summary": ""
      },
      {
        "name": "VALUE_PRESETS",
        "kind": "re-export",
        "signature": "VALUE_PRESETS",
        "summary": ""
      },
      {
        "name": "WEAPON_PRESETS",
        "kind": "re-export",
        "signature": "WEAPON_PRESETS",
        "summary": ""
      },
      {
        "name": "WEAPON_TYPE",
        "kind": "re-export",
        "signature": "WEAPON_TYPE",
        "summary": ""
      },
      {
        "name": "WEATHER_TYPE",
        "kind": "re-export",
        "signature": "WEATHER_TYPE",
        "summary": ""
      },
      {
        "name": "acceptQuest",
        "kind": "re-export",
        "signature": "acceptQuest",
        "summary": ""
      },
      {
        "name": "addAttractor",
        "kind": "re-export",
        "signature": "addAttractor",
        "summary": ""
      },
      {
        "name": "addCrowdAgent",
        "kind": "re-export",
        "signature": "addCrowdAgent",
        "summary": ""
      },
      {
        "name": "addCrowdWall",
        "kind": "re-export",
        "signature": "addCrowdWall",
        "summary": ""
      },
      {
        "name": "addDialogueNode",
        "kind": "re-export",
        "signature": "addDialogueNode",
        "summary": ""
      },
      {
        "name": "addDialogueTree",
        "kind": "re-export",
        "signature": "addDialogueTree",
        "summary": ""
      },
      {
        "name": "addGridLayer",
        "kind": "re-export",
        "signature": "addGridLayer",
        "summary": ""
      },
      {
        "name": "addInfluenceAt",
        "kind": "re-export",
        "signature": "addInfluenceAt",
        "summary": ""
      },
      {
        "name": "addKnowledge",
        "kind": "re-export",
        "signature": "addKnowledge",
        "summary": ""
      },
      {
        "name": "addLifeGoal",
        "kind": "re-export",
        "signature": "addLifeGoal",
        "summary": ""
      },
      {
        "name": "addScheduleEntry",
        "kind": "re-export",
        "signature": "addScheduleEntry",
        "summary": ""
      },
      {
        "name": "addSoundOccluder",
        "kind": "re-export",
        "signature": "addSoundOccluder",
        "summary": ""
      },
      {
        "name": "addSpawnPoint",
        "kind": "re-export",
        "signature": "addSpawnPoint",
        "summary": ""
      },
      {
        "name": "addToFaction",
        "kind": "re-export",
        "signature": "addToFaction",
        "summary": ""
      },
      {
        "name": "addToInventory",
        "kind": "re-export",
        "signature": "addToInventory",
        "summary": ""
      },
      {
        "name": "addToPack",
        "kind": "re-export",
        "signature": "addToPack",
        "summary": ""
      },
      {
        "name": "addToSquad",
        "kind": "re-export",
        "signature": "addToSquad",
        "summary": ""
      },
      {
        "name": "addTrailParticle",
        "kind": "re-export",
        "signature": "addTrailParticle",
        "summary": ""
      },
      {
        "name": "addWeapon",
        "kind": "re-export",
        "signature": "addWeapon",
        "summary": ""
      },
      {
        "name": "advanceTime",
        "kind": "re-export",
        "signature": "advanceTime",
        "summary": ""
      },
      {
        "name": "aiRng",
        "kind": "re-export",
        "signature": "aiRng",
        "summary": ""
      },
      {
        "name": "alignment",
        "kind": "re-export",
        "signature": "alignment",
        "summary": ""
      },
      {
        "name": "announcePublicKnowledge",
        "kind": "re-export",
        "signature": "announcePublicKnowledge",
        "summary": ""
      },
      {
        "name": "applyAccuracySpread2D",
        "kind": "re-export",
        "signature": "applyAccuracySpread2D",
        "summary": ""
      },
      {
        "name": "applyAccuracySpread3D",
        "kind": "re-export",
        "signature": "applyAccuracySpread3D",
        "summary": ""
      },
      {
        "name": "applyAffix",
        "kind": "re-export",
        "signature": "applyAffix",
        "summary": ""
      },
      {
        "name": "applyBatchRayResults",
        "kind": "re-export",
        "signature": "applyBatchRayResults",
        "summary": ""
      },
      {
        "name": "applyDamageToNPC",
        "kind": "re-export",
        "signature": "applyDamageToNPC",
        "summary": ""
      },
      {
        "name": "applyEmotionalStimulus",
        "kind": "re-export",
        "signature": "applyEmotionalStimulus",
        "summary": ""
      },
      {
        "name": "applyForce",
        "kind": "re-export",
        "signature": "applyForce",
        "summary": ""
      },
      {
        "name": "applyMoraleSuppression",
        "kind": "re-export",
        "signature": "applyMoraleSuppression",
        "summary": ""
      },
      {
        "name": "applySuppression",
        "kind": "re-export",
        "signature": "applySuppression",
        "summary": ""
      },
      {
        "name": "areEntitiesHostile",
        "kind": "re-export",
        "signature": "areEntitiesHostile",
        "summary": ""
      },
      {
        "name": "areFactionsAllied",
        "kind": "re-export",
        "signature": "areFactionsAllied",
        "summary": ""
      },
      {
        "name": "areFactionsHostile",
        "kind": "re-export",
        "signature": "areFactionsHostile",
        "summary": ""
      },
      {
        "name": "arrive",
        "kind": "re-export",
        "signature": "arrive",
        "summary": ""
      },
      {
        "name": "assignSquadRoles",
        "kind": "re-export",
        "signature": "assignSquadRoles",
        "summary": ""
      },
      {
        "name": "assignToFormation",
        "kind": "re-export",
        "signature": "assignToFormation",
        "summary": ""
      },
      {
        "name": "avoidObstacles",
        "kind": "re-export",
        "signature": "avoidObstacles",
        "summary": ""
      },
      {
        "name": "avoidWalls",
        "kind": "re-export",
        "signature": "avoidWalls",
        "summary": ""
      },
      {
        "name": "bakeNavGridFromWorldSim",
        "kind": "re-export",
        "signature": "bakeNavGridFromWorldSim",
        "summary": ""
      },
      {
        "name": "batchRaycast",
        "kind": "re-export",
        "signature": "batchRaycast",
        "summary": ""
      },
      {
        "name": "bellCurve",
        "kind": "re-export",
        "signature": "bellCurve",
        "summary": ""
      },
      {
        "name": "benchmarkRaycast",
        "kind": "re-export",
        "signature": "benchmarkRaycast",
        "summary": ""
      },
      {
        "name": "buyFromMarket",
        "kind": "re-export",
        "signature": "buyFromMarket",
        "summary": ""
      },
      {
        "name": "calculateAccuracyModifier",
        "kind": "re-export",
        "signature": "calculateAccuracyModifier",
        "summary": ""
      },
      {
        "name": "calculateAoEDamage",
        "kind": "re-export",
        "signature": "calculateAoEDamage",
        "summary": ""
      },
      {
        "name": "calculateAttackPositions",
        "kind": "re-export",
        "signature": "calculateAttackPositions",
        "summary": ""
      },
      {
        "name": "calculateDamageFalloff",
        "kind": "re-export",
        "signature": "calculateDamageFalloff",
        "summary": ""
      },
      {
        "name": "calculateDetectionRate",
        "kind": "re-export",
        "signature": "calculateDetectionRate",
        "summary": ""
      },
      {
        "name": "calculateFactionPower",
        "kind": "re-export",
        "signature": "calculateFactionPower",
        "summary": ""
      },
      {
        "name": "calculateGrenadeLaunchVelocity",
        "kind": "re-export",
        "signature": "calculateGrenadeLaunchVelocity",
        "summary": ""
      },
      {
        "name": "calculateHeightAdvantage",
        "kind": "re-export",
        "signature": "calculateHeightAdvantage",
        "summary": ""
      },
      {
        "name": "calculateHitDamageFalloff",
        "kind": "re-export",
        "signature": "calculateHitDamageFalloff",
        "summary": ""
      },
      {
        "name": "calculateMovementCost",
        "kind": "re-export",
        "signature": "calculateMovementCost",
        "summary": ""
      },
      {
        "name": "calculateNeedsWellbeing",
        "kind": "re-export",
        "signature": "calculateNeedsWellbeing",
        "summary": ""
      },
      {
        "name": "calculatePrice",
        "kind": "re-export",
        "signature": "calculatePrice",
        "summary": ""
      },
      {
        "name": "calculateSocialForce",
        "kind": "re-export",
        "signature": "calculateSocialForce",
        "summary": ""
      },
      {
        "name": "calculateSoundIntensity",
        "kind": "re-export",
        "signature": "calculateSoundIntensity",
        "summary": ""
      },
      {
        "name": "calculateThreatScore",
        "kind": "re-export",
        "signature": "calculateThreatScore",
        "summary": ""
      },
      {
        "name": "calculateValuesWellbeing",
        "kind": "re-export",
        "signature": "calculateValuesWellbeing",
        "summary": ""
      },
      {
        "name": "calculateWellbeing",
        "kind": "re-export",
        "signature": "calculateWellbeing",
        "summary": ""
      },
      {
        "name": "canAcceptQuest",
        "kind": "re-export",
        "signature": "canAcceptQuest",
        "summary": ""
      },
      {
        "name": "canAccessFactionService",
        "kind": "re-export",
        "signature": "canAccessFactionService",
        "summary": ""
      },
      {
        "name": "canCraft",
        "kind": "re-export",
        "signature": "canCraft",
        "summary": ""
      },
      {
        "name": "canDodge",
        "kind": "re-export",
        "signature": "canDodge",
        "summary": ""
      },
      {
        "name": "canFireWeapon",
        "kind": "re-export",
        "signature": "canFireWeapon",
        "summary": ""
      },
      {
        "name": "canShootFromCover",
        "kind": "re-export",
        "signature": "canShootFromCover",
        "summary": ""
      },
      {
        "name": "capsuleSphereIntersect",
        "kind": "re-export",
        "signature": "capsuleSphereIntersect",
        "summary": ""
      },
      {
        "name": "chainComboAttack",
        "kind": "re-export",
        "signature": "chainComboAttack",
        "summary": ""
      },
      {
        "name": "challengeBelief",
        "kind": "re-export",
        "signature": "challengeBelief",
        "summary": ""
      },
      {
        "name": "changeFormation",
        "kind": "re-export",
        "signature": "changeFormation",
        "summary": ""
      },
      {
        "name": "changeMorale",
        "kind": "re-export",
        "signature": "changeMorale",
        "summary": ""
      },
      {
        "name": "checkBeamHit",
        "kind": "re-export",
        "signature": "checkBeamHit",
        "summary": ""
      },
      {
        "name": "checkGrenadeThreats",
        "kind": "re-export",
        "signature": "checkGrenadeThreats",
        "summary": ""
      },
      {
        "name": "checkHearing",
        "kind": "re-export",
        "signature": "checkHearing",
        "summary": ""
      },
      {
        "name": "checkInvestigationComplete",
        "kind": "re-export",
        "signature": "checkInvestigationComplete",
        "summary": ""
      },
      {
        "name": "checkMeleeHits",
        "kind": "re-export",
        "signature": "checkMeleeHits",
        "summary": ""
      },
      {
        "name": "checkPrerequisites",
        "kind": "re-export",
        "signature": "checkPrerequisites",
        "summary": ""
      },
      {
        "name": "checkProjectileCollision",
        "kind": "re-export",
        "signature": "checkProjectileCollision",
        "summary": ""
      },
      {
        "name": "checkProjectileHit",
        "kind": "re-export",
        "signature": "checkProjectileHit",
        "summary": ""
      },
      {
        "name": "checkProjectileThreats",
        "kind": "re-export",
        "signature": "checkProjectileThreats",
        "summary": ""
      },
      {
        "name": "checkQuestComplete",
        "kind": "re-export",
        "signature": "checkQuestComplete",
        "summary": ""
      },
      {
        "name": "checkVision",
        "kind": "re-export",
        "signature": "checkVision",
        "summary": ""
      },
      {
        "name": "circleStrafe",
        "kind": "re-export",
        "signature": "circleStrafe",
        "summary": ""
      },
      {
        "name": "claimTerritory",
        "kind": "re-export",
        "signature": "claimTerritory",
        "summary": ""
      },
      {
        "name": "cleanupDrops",
        "kind": "re-export",
        "signature": "cleanupDrops",
        "summary": ""
      },
      {
        "name": "clearBlackboard",
        "kind": "re-export",
        "signature": "clearBlackboard",
        "summary": ""
      },
      {
        "name": "clearInfluence",
        "kind": "re-export",
        "signature": "clearInfluence",
        "summary": ""
      },
      {
        "name": "clearPathReservations",
        "kind": "re-export",
        "signature": "clearPathReservations",
        "summary": ""
      },
      {
        "name": "clearWorkingMemory",
        "kind": "re-export",
        "signature": "clearWorkingMemory",
        "summary": ""
      },
      {
        "name": "cohesion",
        "kind": "re-export",
        "signature": "cohesion",
        "summary": ""
      },
      {
        "name": "completeInteraction",
        "kind": "re-export",
        "signature": "completeInteraction",
        "summary": ""
      },
      {
        "name": "computePeekPositions",
        "kind": "re-export",
        "signature": "computePeekPositions",
        "summary": ""
      },
      {
        "name": "connectNPCs",
        "kind": "re-export",
        "signature": "connectNPCs",
        "summary": ""
      },
      {
        "name": "consolidateMemories",
        "kind": "re-export",
        "signature": "consolidateMemories",
        "summary": ""
      },
      {
        "name": "consumeFood",
        "kind": "re-export",
        "signature": "consumeFood",
        "summary": ""
      },
      {
        "name": "continueDialogue",
        "kind": "re-export",
        "signature": "continueDialogue",
        "summary": ""
      },
      {
        "name": "copyResultsToReadback",
        "kind": "re-export",
        "signature": "copyResultsToReadback",
        "summary": ""
      },
      {
        "name": "craft",
        "kind": "re-export",
        "signature": "craft",
        "summary": ""
      },
      {
        "name": "createAIAimingSystem",
        "kind": "re-export",
        "signature": "createAIAimingSystem",
        "summary": ""
      },
      {
        "name": "createAIDirector",
        "kind": "re-export",
        "signature": "createAIDirector",
        "summary": ""
      },
      {
        "name": "createAction",
        "kind": "re-export",
        "signature": "createAction",
        "summary": ""
      },
      {
        "name": "createActivity",
        "kind": "re-export",
        "signature": "createActivity",
        "summary": ""
      },
      {
        "name": "createAffix",
        "kind": "re-export",
        "signature": "createAffix",
        "summary": ""
      },
      {
        "name": "createAmmoConsideration",
        "kind": "re-export",
        "signature": "createAmmoConsideration",
        "summary": ""
      },
      {
        "name": "createAmmoCrate",
        "kind": "re-export",
        "signature": "createAmmoCrate",
        "summary": ""
      },
      {
        "name": "createBeamWeapon",
        "kind": "re-export",
        "signature": "createBeamWeapon",
        "summary": ""
      },
      {
        "name": "createBlackboard",
        "kind": "re-export",
        "signature": "createBlackboard",
        "summary": ""
      },
      {
        "name": "createBlackboardRegistry",
        "kind": "re-export",
        "signature": "createBlackboardRegistry",
        "summary": ""
      },
      {
        "name": "createCharacterState",
        "kind": "re-export",
        "signature": "createCharacterState",
        "summary": ""
      },
      {
        "name": "createCombatActions",
        "kind": "re-export",
        "signature": "createCombatActions",
        "summary": ""
      },
      {
        "name": "createCombatTree",
        "kind": "re-export",
        "signature": "createCombatTree",
        "summary": ""
      },
      {
        "name": "createCondition",
        "kind": "re-export",
        "signature": "createCondition",
        "summary": ""
      },
      {
        "name": "createConditionGuard",
        "kind": "re-export",
        "signature": "createConditionGuard",
        "summary": ""
      },
      {
        "name": "createConsideration",
        "kind": "re-export",
        "signature": "createConsideration",
        "summary": ""
      },
      {
        "name": "createCooldown",
        "kind": "re-export",
        "signature": "createCooldown",
        "summary": ""
      },
      {
        "name": "createCoverConsideration",
        "kind": "re-export",
        "signature": "createCoverConsideration",
        "summary": ""
      },
      {
        "name": "createCoverPoint",
        "kind": "re-export",
        "signature": "createCoverPoint",
        "summary": ""
      },
      {
        "name": "createCoverState",
        "kind": "re-export",
        "signature": "createCoverState",
        "summary": ""
      },
      {
        "name": "createCreature",
        "kind": "re-export",
        "signature": "createCreature",
        "summary": ""
      },
      {
        "name": "createCrowdAgent",
        "kind": "re-export",
        "signature": "createCrowdAgent",
        "summary": ""
      },
      {
        "name": "createCrowdSystem",
        "kind": "re-export",
        "signature": "createCrowdSystem",
        "summary": ""
      },
      {
        "name": "createDangerSense",
        "kind": "re-export",
        "signature": "createDangerSense",
        "summary": ""
      },
      {
        "name": "createDefaultFaction",
        "kind": "re-export",
        "signature": "createDefaultFaction",
        "summary": ""
      },
      {
        "name": "createDefaultPerception",
        "kind": "re-export",
        "signature": "createDefaultPerception",
        "summary": ""
      },
      {
        "name": "createDefaultPersonality",
        "kind": "re-export",
        "signature": "createDefaultPersonality",
        "summary": ""
      },
      {
        "name": "createDefaultSteeringAgent",
        "kind": "re-export",
        "signature": "createDefaultSteeringAgent",
        "summary": ""
      },
      {
        "name": "createDialogueNode",
        "kind": "re-export",
        "signature": "createDialogueNode",
        "summary": ""
      },
      {
        "name": "createDialogueState",
        "kind": "re-export",
        "signature": "createDialogueState",
        "summary": ""
      },
      {
        "name": "createDialogueTree",
        "kind": "re-export",
        "signature": "createDialogueTree",
        "summary": ""
      },
      {
        "name": "createDifficultyScaler",
        "kind": "re-export",
        "signature": "createDifficultyScaler",
        "summary": ""
      },
      {
        "name": "createDistanceConsideration",
        "kind": "re-export",
        "signature": "createDistanceConsideration",
        "summary": ""
      },
      {
        "name": "createDoor",
        "kind": "re-export",
        "signature": "createDoor",
        "summary": ""
      },
      {
        "name": "createEconomyManager",
        "kind": "re-export",
        "signature": "createEconomyManager",
        "summary": ""
      },
      {
        "name": "createEcosystem",
        "kind": "re-export",
        "signature": "createEcosystem",
        "summary": ""
      },
      {
        "name": "createEmotionalState",
        "kind": "re-export",
        "signature": "createEmotionalState",
        "summary": ""
      },
      {
        "name": "createEntityRng",
        "kind": "re-export",
        "signature": "createEntityRng",
        "summary": ""
      },
      {
        "name": "createEnvironmentSensor",
        "kind": "re-export",
        "signature": "createEnvironmentSensor",
        "summary": ""
      },
      {
        "name": "createEpisode",
        "kind": "re-export",
        "signature": "createEpisode",
        "summary": ""
      },
      {
        "name": "createEpisodicMemory",
        "kind": "re-export",
        "signature": "createEpisodicMemory",
        "summary": ""
      },
      {
        "name": "createEvasionState",
        "kind": "re-export",
        "signature": "createEvasionState",
        "summary": ""
      },
      {
        "name": "createEventManager",
        "kind": "re-export",
        "signature": "createEventManager",
        "summary": ""
      },
      {
        "name": "createFaction",
        "kind": "re-export",
        "signature": "createFaction",
        "summary": ""
      },
      {
        "name": "createFactionManager",
        "kind": "re-export",
        "signature": "createFactionManager",
        "summary": ""
      },
      {
        "name": "createFailer",
        "kind": "re-export",
        "signature": "createFailer",
        "summary": ""
      },
      {
        "name": "createFlowField",
        "kind": "re-export",
        "signature": "createFlowField",
        "summary": ""
      },
      {
        "name": "createFoodSource",
        "kind": "re-export",
        "signature": "createFoodSource",
        "summary": ""
      },
      {
        "name": "createFormation",
        "kind": "re-export",
        "signature": "createFormation",
        "summary": ""
      },
      {
        "name": "createFormationManager",
        "kind": "re-export",
        "signature": "createFormationManager",
        "summary": ""
      },
      {
        "name": "createFromPreset",
        "kind": "re-export",
        "signature": "createFromPreset",
        "summary": ""
      },
      {
        "name": "createGPURaycastSystem",
        "kind": "re-export",
        "signature": "createGPURaycastSystem",
        "summary": ""
      },
      {
        "name": "createGrenade",
        "kind": "re-export",
        "signature": "createGrenade",
        "summary": ""
      },
      {
        "name": "createHealthConsideration",
        "kind": "re-export",
        "signature": "createHealthConsideration",
        "summary": ""
      },
      {
        "name": "createHealthStation",
        "kind": "re-export",
        "signature": "createHealthStation",
        "summary": ""
      },
      {
        "name": "createInfluenceLayer",
        "kind": "re-export",
        "signature": "createInfluenceLayer",
        "summary": ""
      },
      {
        "name": "createInfluenceMap",
        "kind": "re-export",
        "signature": "createInfluenceMap",
        "summary": ""
      },
      {
        "name": "createInteraction",
        "kind": "re-export",
        "signature": "createInteraction",
        "summary": ""
      },
      {
        "name": "createInventory",
        "kind": "re-export",
        "signature": "createInventory",
        "summary": ""
      },
      {
        "name": "createInverter",
        "kind": "re-export",
        "signature": "createInverter",
        "summary": ""
      },
      {
        "name": "createItemDef",
        "kind": "re-export",
        "signature": "createItemDef",
        "summary": ""
      },
      {
        "name": "createItemInstance",
        "kind": "re-export",
        "signature": "createItemInstance",
        "summary": ""
      },
      {
        "name": "createJob",
        "kind": "re-export",
        "signature": "createJob",
        "summary": ""
      },
      {
        "name": "createKnowledge",
        "kind": "re-export",
        "signature": "createKnowledge",
        "summary": ""
      },
      {
        "name": "createKnowledgeBase",
        "kind": "re-export",
        "signature": "createKnowledgeBase",
        "summary": ""
      },
      {
        "name": "createLOSConsideration",
        "kind": "re-export",
        "signature": "createLOSConsideration",
        "summary": ""
      },
      {
        "name": "createLifeGoal",
        "kind": "re-export",
        "signature": "createLifeGoal",
        "summary": ""
      },
      {
        "name": "createLog",
        "kind": "re-export",
        "signature": "createLog",
        "summary": ""
      },
      {
        "name": "createLootEntry",
        "kind": "re-export",
        "signature": "createLootEntry",
        "summary": ""
      },
      {
        "name": "createLootManager",
        "kind": "re-export",
        "signature": "createLootManager",
        "summary": ""
      },
      {
        "name": "createLootTable",
        "kind": "re-export",
        "signature": "createLootTable",
        "summary": ""
      },
      {
        "name": "createMarket",
        "kind": "re-export",
        "signature": "createMarket",
        "summary": ""
      },
      {
        "name": "createMeleeArc",
        "kind": "re-export",
        "signature": "createMeleeArc",
        "summary": ""
      },
      {
        "name": "createMeleeAttackState",
        "kind": "re-export",
        "signature": "createMeleeAttackState",
        "summary": ""
      },
      {
        "name": "createMemorySystem",
        "kind": "re-export",
        "signature": "createMemorySystem",
        "summary": ""
      },
      {
        "name": "createMoraleState",
        "kind": "re-export",
        "signature": "createMoraleState",
        "summary": ""
      },
      {
        "name": "createNPCCombatController",
        "kind": "re-export",
        "signature": "createNPCCombatController",
        "summary": ""
      },
      {
        "name": "createNPCScheduler",
        "kind": "re-export",
        "signature": "createNPCScheduler",
        "summary": ""
      },
      {
        "name": "createNavGrid",
        "kind": "re-export",
        "signature": "createNavGrid",
        "summary": ""
      },
      {
        "name": "createNavWorld",
        "kind": "re-export",
        "signature": "createNavWorld",
        "summary": ""
      },
      {
        "name": "createNeedsState",
        "kind": "re-export",
        "signature": "createNeedsState",
        "summary": ""
      },
      {
        "name": "createNoiseEvent",
        "kind": "re-export",
        "signature": "createNoiseEvent",
        "summary": ""
      },
      {
        "name": "createObjectPool",
        "kind": "re-export",
        "signature": "createObjectPool",
        "summary": ""
      },
      {
        "name": "createObjective",
        "kind": "re-export",
        "signature": "createObjective",
        "summary": ""
      },
      {
        "name": "createPacingController",
        "kind": "re-export",
        "signature": "createPacingController",
        "summary": ""
      },
      {
        "name": "createPack",
        "kind": "re-export",
        "signature": "createPack",
        "summary": ""
      },
      {
        "name": "createParallel",
        "kind": "re-export",
        "signature": "createParallel",
        "summary": ""
      },
      {
        "name": "createPerceptionState",
        "kind": "re-export",
        "signature": "createPerceptionState",
        "summary": ""
      },
      {
        "name": "createPersonality",
        "kind": "re-export",
        "signature": "createPersonality",
        "summary": ""
      },
      {
        "name": "createPersonalityFromArchetype",
        "kind": "re-export",
        "signature": "createPersonalityFromArchetype",
        "summary": ""
      },
      {
        "name": "createPlayerState",
        "kind": "re-export",
        "signature": "createPlayerState",
        "summary": ""
      },
      {
        "name": "createPositionRng",
        "kind": "re-export",
        "signature": "createPositionRng",
        "summary": ""
      },
      {
        "name": "createProceduralMemory",
        "kind": "re-export",
        "signature": "createProceduralMemory",
        "summary": ""
      },
      {
        "name": "createProductionBuilding",
        "kind": "re-export",
        "signature": "createProductionBuilding",
        "summary": ""
      },
      {
        "name": "createProjectile",
        "kind": "re-export",
        "signature": "createProjectile",
        "summary": ""
      },
      {
        "name": "createQuest",
        "kind": "re-export",
        "signature": "createQuest",
        "summary": ""
      },
      {
        "name": "createQuestManager",
        "kind": "re-export",
        "signature": "createQuestManager",
        "summary": ""
      },
      {
        "name": "createRandomSelector",
        "kind": "re-export",
        "signature": "createRandomSelector",
        "summary": ""
      },
      {
        "name": "createRay",
        "kind": "re-export",
        "signature": "createRay",
        "summary": ""
      },
      {
        "name": "createRecipe",
        "kind": "re-export",
        "signature": "createRecipe",
        "summary": ""
      },
      {
        "name": "createRelationshipTracker",
        "kind": "re-export",
        "signature": "createRelationshipTracker",
        "summary": ""
      },
      {
        "name": "createRepeater",
        "kind": "re-export",
        "signature": "createRepeater",
        "summary": ""
      },
      {
        "name": "createResource",
        "kind": "re-export",
        "signature": "createResource",
        "summary": ""
      },
      {
        "name": "createScentParticle",
        "kind": "re-export",
        "signature": "createScentParticle",
        "summary": ""
      },
      {
        "name": "createScentSystem",
        "kind": "re-export",
        "signature": "createScentSystem",
        "summary": ""
      },
      {
        "name": "createScentTrail",
        "kind": "re-export",
        "signature": "createScentTrail",
        "summary": ""
      },
      {
        "name": "createSchedule",
        "kind": "re-export",
        "signature": "createSchedule",
        "summary": ""
      },
      {
        "name": "createSelector",
        "kind": "re-export",
        "signature": "createSelector",
        "summary": ""
      },
      {
        "name": "createSemanticMemory",
        "kind": "re-export",
        "signature": "createSemanticMemory",
        "summary": ""
      },
      {
        "name": "createSequence",
        "kind": "re-export",
        "signature": "createSequence",
        "summary": ""
      },
      {
        "name": "createSmartObject",
        "kind": "re-export",
        "signature": "createSmartObject",
        "summary": ""
      },
      {
        "name": "createSmartObjectRegistry",
        "kind": "re-export",
        "signature": "createSmartObjectRegistry",
        "summary": ""
      },
      {
        "name": "createSoundEvent",
        "kind": "re-export",
        "signature": "createSoundEvent",
        "summary": ""
      },
      {
        "name": "createSoundSystem",
        "kind": "re-export",
        "signature": "createSoundSystem",
        "summary": ""
      },
      {
        "name": "createSpatialHash",
        "kind": "re-export",
        "signature": "createSpatialHash",
        "summary": ""
      },
      {
        "name": "createSpawnDirector",
        "kind": "re-export",
        "signature": "createSpawnDirector",
        "summary": ""
      },
      {
        "name": "createSpecies",
        "kind": "re-export",
        "signature": "createSpecies",
        "summary": ""
      },
      {
        "name": "createSquad",
        "kind": "re-export",
        "signature": "createSquad",
        "summary": ""
      },
      {
        "name": "createSquadManager",
        "kind": "re-export",
        "signature": "createSquadManager",
        "summary": ""
      },
      {
        "name": "createSteeringAgent",
        "kind": "re-export",
        "signature": "createSteeringAgent",
        "summary": ""
      },
      {
        "name": "createSucceeder",
        "kind": "re-export",
        "signature": "createSucceeder",
        "summary": ""
      },
      {
        "name": "createTargetMemory",
        "kind": "re-export",
        "signature": "createTargetMemory",
        "summary": ""
      },
      {
        "name": "createTerrainGrid",
        "kind": "re-export",
        "signature": "createTerrainGrid",
        "summary": ""
      },
      {
        "name": "createThreatConsideration",
        "kind": "re-export",
        "signature": "createThreatConsideration",
        "summary": ""
      },
      {
        "name": "createTrafficSystem",
        "kind": "re-export",
        "signature": "createTrafficSystem",
        "summary": ""
      },
      {
        "name": "createTreaty",
        "kind": "re-export",
        "signature": "createTreaty",
        "summary": ""
      },
      {
        "name": "createTreeRunner",
        "kind": "re-export",
        "signature": "createTreeRunner",
        "summary": ""
      },
      {
        "name": "createTremorSense",
        "kind": "re-export",
        "signature": "createTremorSense",
        "summary": ""
      },
      {
        "name": "createUntilFail",
        "kind": "re-export",
        "signature": "createUntilFail",
        "summary": ""
      },
      {
        "name": "createUntilSuccess",
        "kind": "re-export",
        "signature": "createUntilSuccess",
        "summary": ""
      },
      {
        "name": "createUtilityAction",
        "kind": "re-export",
        "signature": "createUtilityAction",
        "summary": ""
      },
      {
        "name": "createUtilityBrain",
        "kind": "re-export",
        "signature": "createUtilityBrain",
        "summary": ""
      },
      {
        "name": "createValueSystem",
        "kind": "re-export",
        "signature": "createValueSystem",
        "summary": ""
      },
      {
        "name": "createVehicle",
        "kind": "re-export",
        "signature": "createVehicle",
        "summary": ""
      },
      {
        "name": "createVehicleType",
        "kind": "re-export",
        "signature": "createVehicleType",
        "summary": ""
      },
      {
        "name": "createVibration",
        "kind": "re-export",
        "signature": "createVibration",
        "summary": ""
      },
      {
        "name": "createWait",
        "kind": "re-export",
        "signature": "createWait",
        "summary": ""
      },
      {
        "name": "createWeaponController",
        "kind": "re-export",
        "signature": "createWeaponController",
        "summary": ""
      },
      {
        "name": "createWeatherSystem",
        "kind": "re-export",
        "signature": "createWeatherSystem",
        "summary": ""
      },
      {
        "name": "createWorkingMemory",
        "kind": "re-export",
        "signature": "createWorkingMemory",
        "summary": ""
      },
      {
        "name": "createWorldEvent",
        "kind": "re-export",
        "signature": "createWorldEvent",
        "summary": ""
      },
      {
        "name": "createWorldKnowledgeManager",
        "kind": "re-export",
        "signature": "createWorldKnowledgeManager",
        "summary": ""
      },
      {
        "name": "createWorldState",
        "kind": "re-export",
        "signature": "createWorldState",
        "summary": ""
      },
      {
        "name": "createWorldTime",
        "kind": "re-export",
        "signature": "createWorldTime",
        "summary": ""
      },
      {
        "name": "customCurve",
        "kind": "re-export",
        "signature": "customCurve",
        "summary": ""
      },
      {
        "name": "damageCover",
        "kind": "re-export",
        "signature": "damageCover",
        "summary": ""
      },
      {
        "name": "decayAwareness",
        "kind": "re-export",
        "signature": "decayAwareness",
        "summary": ""
      },
      {
        "name": "decayDamageMemory",
        "kind": "re-export",
        "signature": "decayDamageMemory",
        "summary": ""
      },
      {
        "name": "decayEmotions",
        "kind": "re-export",
        "signature": "decayEmotions",
        "summary": ""
      },
      {
        "name": "decayInfluence",
        "kind": "re-export",
        "signature": "decayInfluence",
        "summary": ""
      },
      {
        "name": "decayPsychNeeds",
        "kind": "re-export",
        "signature": "decayPsychNeeds",
        "summary": ""
      },
      {
        "name": "declareWar",
        "kind": "re-export",
        "signature": "declareWar",
        "summary": ""
      },
      {
        "name": "degToRad",
        "kind": "re-export",
        "signature": "degToRad",
        "summary": ""
      },
      {
        "name": "destroyGPURaycastSystem",
        "kind": "re-export",
        "signature": "destroyGPURaycastSystem",
        "summary": ""
      },
      {
        "name": "destroyNavGrid",
        "kind": "re-export",
        "signature": "destroyNavGrid",
        "summary": ""
      },
      {
        "name": "destroyNavWorld",
        "kind": "re-export",
        "signature": "destroyNavWorld",
        "summary": ""
      },
      {
        "name": "detectChokepoints",
        "kind": "re-export",
        "signature": "detectChokepoints",
        "summary": ""
      },
      {
        "name": "detectCoverPoints",
        "kind": "re-export",
        "signature": "detectCoverPoints",
        "summary": ""
      },
      {
        "name": "detectEnvironmentTrend",
        "kind": "re-export",
        "signature": "detectEnvironmentTrend",
        "summary": ""
      },
      {
        "name": "dialogueBuilder",
        "kind": "re-export",
        "signature": "dialogueBuilder",
        "summary": ""
      },
      {
        "name": "disbandSquad",
        "kind": "re-export",
        "signature": "disbandSquad",
        "summary": ""
      },
      {
        "name": "dispatchAABBRaycast",
        "kind": "re-export",
        "signature": "dispatchAABBRaycast",
        "summary": ""
      },
      {
        "name": "dispatchSphereRaycast",
        "kind": "re-export",
        "signature": "dispatchSphereRaycast",
        "summary": ""
      },
      {
        "name": "distance",
        "kind": "re-export",
        "signature": "distance",
        "summary": ""
      },
      {
        "name": "distanceSquared",
        "kind": "re-export",
        "signature": "distanceSquared",
        "summary": ""
      },
      {
        "name": "distortKnowledge",
        "kind": "re-export",
        "signature": "distortKnowledge",
        "summary": ""
      },
      {
        "name": "dropLoot",
        "kind": "re-export",
        "signature": "dropLoot",
        "summary": ""
      },
      {
        "name": "emitExplosion",
        "kind": "re-export",
        "signature": "emitExplosion",
        "summary": ""
      },
      {
        "name": "emitFootstep",
        "kind": "re-export",
        "signature": "emitFootstep",
        "summary": ""
      },
      {
        "name": "emitGunshot",
        "kind": "re-export",
        "signature": "emitGunshot",
        "summary": ""
      },
      {
        "name": "emitSound",
        "kind": "re-export",
        "signature": "emitSound",
        "summary": ""
      },
      {
        "name": "emitVibration",
        "kind": "re-export",
        "signature": "emitVibration",
        "summary": ""
      },
      {
        "name": "enterCover",
        "kind": "re-export",
        "signature": "enterCover",
        "summary": ""
      },
      {
        "name": "evade",
        "kind": "re-export",
        "signature": "evade",
        "summary": ""
      },
      {
        "name": "evaluateConsideration",
        "kind": "re-export",
        "signature": "evaluateConsideration",
        "summary": ""
      },
      {
        "name": "evaluateTacticalPosition",
        "kind": "re-export",
        "signature": "evaluateTacticalPosition",
        "summary": ""
      },
      {
        "name": "executeCurrentAction",
        "kind": "re-export",
        "signature": "executeCurrentAction",
        "summary": ""
      },
      {
        "name": "exitCover",
        "kind": "re-export",
        "signature": "exitCover",
        "summary": ""
      },
      {
        "name": "exponentialCurve",
        "kind": "re-export",
        "signature": "exponentialCurve",
        "summary": ""
      },
      {
        "name": "exportBlackboard",
        "kind": "re-export",
        "signature": "exportBlackboard",
        "summary": ""
      },
      {
        "name": "failQuest",
        "kind": "re-export",
        "signature": "failQuest",
        "summary": ""
      },
      {
        "name": "findAvailableSlot",
        "kind": "re-export",
        "signature": "findAvailableSlot",
        "summary": ""
      },
      {
        "name": "findBestCover",
        "kind": "re-export",
        "signature": "findBestCover",
        "summary": ""
      },
      {
        "name": "findByCategory",
        "kind": "re-export",
        "signature": "findByCategory",
        "summary": ""
      },
      {
        "name": "findByTag",
        "kind": "re-export",
        "signature": "findByTag",
        "summary": ""
      },
      {
        "name": "findChokePoints",
        "kind": "re-export",
        "signature": "findChokePoints",
        "summary": ""
      },
      {
        "name": "findConcealment",
        "kind": "re-export",
        "signature": "findConcealment",
        "summary": ""
      },
      {
        "name": "findFlankingPositions",
        "kind": "re-export",
        "signature": "findFlankingPositions",
        "summary": ""
      },
      {
        "name": "findHighGround",
        "kind": "re-export",
        "signature": "findHighGround",
        "summary": ""
      },
      {
        "name": "findHighestInfluence",
        "kind": "re-export",
        "signature": "findHighestInfluence",
        "summary": ""
      },
      {
        "name": "findLowestInfluence",
        "kind": "re-export",
        "signature": "findLowestInfluence",
        "summary": ""
      },
      {
        "name": "findNearestUsable",
        "kind": "re-export",
        "signature": "findNearestUsable",
        "summary": ""
      },
      {
        "name": "findPathInNavWorld",
        "kind": "re-export",
        "signature": "findPathInNavWorld",
        "summary": ""
      },
      {
        "name": "findPathOnGrid",
        "kind": "re-export",
        "signature": "findPathOnGrid",
        "summary": ""
      },
      {
        "name": "findRetreatCover",
        "kind": "re-export",
        "signature": "findRetreatCover",
        "summary": ""
      },
      {
        "name": "fireBeam",
        "kind": "re-export",
        "signature": "fireBeam",
        "summary": ""
      },
      {
        "name": "fireHitscan",
        "kind": "re-export",
        "signature": "fireHitscan",
        "summary": ""
      },
      {
        "name": "fireShotgun",
        "kind": "re-export",
        "signature": "fireShotgun",
        "summary": ""
      },
      {
        "name": "flee",
        "kind": "re-export",
        "signature": "flee",
        "summary": ""
      },
      {
        "name": "flock",
        "kind": "re-export",
        "signature": "flock",
        "summary": ""
      },
      {
        "name": "followFlowField",
        "kind": "re-export",
        "signature": "followFlowField",
        "summary": ""
      },
      {
        "name": "followPath",
        "kind": "re-export",
        "signature": "followPath",
        "summary": ""
      },
      {
        "name": "followScentTrail",
        "kind": "re-export",
        "signature": "followScentTrail",
        "summary": ""
      },
      {
        "name": "formHabit",
        "kind": "re-export",
        "signature": "formHabit",
        "summary": ""
      },
      {
        "name": "formatDate",
        "kind": "re-export",
        "signature": "formatDate",
        "summary": ""
      },
      {
        "name": "formatTime",
        "kind": "re-export",
        "signature": "formatTime",
        "summary": ""
      },
      {
        "name": "gaussianRandom",
        "kind": "re-export",
        "signature": "gaussianRandom",
        "summary": ""
      },
      {
        "name": "generateCombatMovement",
        "kind": "re-export",
        "signature": "generateCombatMovement",
        "summary": ""
      },
      {
        "name": "generateDailyQuests",
        "kind": "re-export",
        "signature": "generateDailyQuests",
        "summary": ""
      },
      {
        "name": "generateFlowFieldToTarget",
        "kind": "re-export",
        "signature": "generateFlowFieldToTarget",
        "summary": ""
      },
      {
        "name": "generateFormationSlots",
        "kind": "re-export",
        "signature": "generateFormationSlots",
        "summary": ""
      },
      {
        "name": "generateItemName",
        "kind": "re-export",
        "signature": "generateItemName",
        "summary": ""
      },
      {
        "name": "generateQuest",
        "kind": "re-export",
        "signature": "generateQuest",
        "summary": ""
      },
      {
        "name": "getActiveGoals",
        "kind": "re-export",
        "signature": "getActiveGoals",
        "summary": ""
      },
      {
        "name": "getAimPointFromMemory",
        "kind": "re-export",
        "signature": "getAimPointFromMemory",
        "summary": ""
      },
      {
        "name": "getAllFormationPositions",
        "kind": "re-export",
        "signature": "getAllFormationPositions",
        "summary": ""
      },
      {
        "name": "getAoETargets",
        "kind": "re-export",
        "signature": "getAoETargets",
        "summary": ""
      },
      {
        "name": "getAwarenessStateId",
        "kind": "re-export",
        "signature": "getAwarenessStateId",
        "summary": ""
      },
      {
        "name": "getAwarenessStateName",
        "kind": "re-export",
        "signature": "getAwarenessStateName",
        "summary": ""
      },
      {
        "name": "getBarkText",
        "kind": "re-export",
        "signature": "getBarkText",
        "summary": ""
      },
      {
        "name": "getBatchRays",
        "kind": "re-export",
        "signature": "getBatchRays",
        "summary": ""
      },
      {
        "name": "getBlackboardValue",
        "kind": "re-export",
        "signature": "getBlackboardValue",
        "summary": ""
      },
      {
        "name": "getComboMultiplier",
        "kind": "re-export",
        "signature": "getComboMultiplier",
        "summary": ""
      },
      {
        "name": "getConeTargets",
        "kind": "re-export",
        "signature": "getConeTargets",
        "summary": ""
      },
      {
        "name": "getCoverShootPosition",
        "kind": "re-export",
        "signature": "getCoverShootPosition",
        "summary": ""
      },
      {
        "name": "getCriticalNeeds",
        "kind": "re-export",
        "signature": "getCriticalNeeds",
        "summary": ""
      },
      {
        "name": "getCrowdStats",
        "kind": "re-export",
        "signature": "getCrowdStats",
        "summary": ""
      },
      {
        "name": "getDayPhase",
        "kind": "re-export",
        "signature": "getDayPhase",
        "summary": ""
      },
      {
        "name": "getDialogueFlag",
        "kind": "re-export",
        "signature": "getDialogueFlag",
        "summary": ""
      },
      {
        "name": "getDiplomaticStance",
        "kind": "re-export",
        "signature": "getDiplomaticStance",
        "summary": ""
      },
      {
        "name": "getDisposition",
        "kind": "re-export",
        "signature": "getDisposition",
        "summary": ""
      },
      {
        "name": "getEcosystemStats",
        "kind": "re-export",
        "signature": "getEcosystemStats",
        "summary": ""
      },
      {
        "name": "getEntityFaction",
        "kind": "re-export",
        "signature": "getEntityFaction",
        "summary": ""
      },
      {
        "name": "getEntityImpression",
        "kind": "re-export",
        "signature": "getEntityImpression",
        "summary": ""
      },
      {
        "name": "getEntityRngState",
        "kind": "re-export",
        "signature": "getEntityRngState",
        "summary": ""
      },
      {
        "name": "getEnvironmentalComfort",
        "kind": "re-export",
        "signature": "getEnvironmentalComfort",
        "summary": ""
      },
      {
        "name": "getEvasionParamsForSkill",
        "kind": "re-export",
        "signature": "getEvasionParamsForSkill",
        "summary": ""
      },
      {
        "name": "getFact",
        "kind": "re-export",
        "signature": "getFact",
        "summary": ""
      },
      {
        "name": "getFlowDirection",
        "kind": "re-export",
        "signature": "getFlowDirection",
        "summary": ""
      },
      {
        "name": "getFormationPosition",
        "kind": "re-export",
        "signature": "getFormationPosition",
        "summary": ""
      },
      {
        "name": "getGridLayer",
        "kind": "re-export",
        "signature": "getGridLayer",
        "summary": ""
      },
      {
        "name": "getGroupMorale",
        "kind": "re-export",
        "signature": "getGroupMorale",
        "summary": ""
      },
      {
        "name": "getHabitualResponse",
        "kind": "re-export",
        "signature": "getHabitualResponse",
        "summary": ""
      },
      {
        "name": "getHighestPriorityDetection",
        "kind": "re-export",
        "signature": "getHighestPriorityDetection",
        "summary": ""
      },
      {
        "name": "getInfluenceAt",
        "kind": "re-export",
        "signature": "getInfluenceAt",
        "summary": ""
      },
      {
        "name": "getInteractionRngState",
        "kind": "re-export",
        "signature": "getInteractionRngState",
        "summary": ""
      },
      {
        "name": "getLastKnownPosition",
        "kind": "re-export",
        "signature": "getLastKnownPosition",
        "summary": ""
      },
      {
        "name": "getMoraleAccuracyMod",
        "kind": "re-export",
        "signature": "getMoraleAccuracyMod",
        "summary": ""
      },
      {
        "name": "getMoraleReactionMod",
        "kind": "re-export",
        "signature": "getMoraleReactionMod",
        "summary": ""
      },
      {
        "name": "getMoraleSpeedMod",
        "kind": "re-export",
        "signature": "getMoraleSpeedMod",
        "summary": ""
      },
      {
        "name": "getMostDeprivedNeed",
        "kind": "re-export",
        "signature": "getMostDeprivedNeed",
        "summary": ""
      },
      {
        "name": "getMostThreateningEntity",
        "kind": "re-export",
        "signature": "getMostThreateningEntity",
        "summary": ""
      },
      {
        "name": "getMostUrgentNeed",
        "kind": "re-export",
        "signature": "getMostUrgentNeed",
        "summary": ""
      },
      {
        "name": "getNodeTypeId",
        "kind": "re-export",
        "signature": "getNodeTypeId",
        "summary": ""
      },
      {
        "name": "getNoiseModifier",
        "kind": "re-export",
        "signature": "getNoiseModifier",
        "summary": ""
      },
      {
        "name": "getPersonalityBehaviorMod",
        "kind": "re-export",
        "signature": "getPersonalityBehaviorMod",
        "summary": ""
      },
      {
        "name": "getPhaseProgress",
        "kind": "re-export",
        "signature": "getPhaseProgress",
        "summary": ""
      },
      {
        "name": "getPhaseTimeRemaining",
        "kind": "re-export",
        "signature": "getPhaseTimeRemaining",
        "summary": ""
      },
      {
        "name": "getPlayerReputationLevel",
        "kind": "re-export",
        "signature": "getPlayerReputationLevel",
        "summary": ""
      },
      {
        "name": "getPositionRngState",
        "kind": "re-export",
        "signature": "getPositionRngState",
        "summary": ""
      },
      {
        "name": "getProjectilePositionAtTime",
        "kind": "re-export",
        "signature": "getProjectilePositionAtTime",
        "summary": ""
      },
      {
        "name": "getRecentDetections",
        "kind": "re-export",
        "signature": "getRecentDetections",
        "summary": ""
      },
      {
        "name": "getRelationship",
        "kind": "re-export",
        "signature": "getRelationship",
        "summary": ""
      },
      {
        "name": "getReputationLevel",
        "kind": "re-export",
        "signature": "getReputationLevel",
        "summary": ""
      },
      {
        "name": "getScheduledActivity",
        "kind": "re-export",
        "signature": "getScheduledActivity",
        "summary": ""
      },
      {
        "name": "getSeason",
        "kind": "re-export",
        "signature": "getSeason",
        "summary": ""
      },
      {
        "name": "getSkillProficiency",
        "kind": "re-export",
        "signature": "getSkillProficiency",
        "summary": ""
      },
      {
        "name": "getSlotWorldPosition",
        "kind": "re-export",
        "signature": "getSlotWorldPosition",
        "summary": ""
      },
      {
        "name": "getSquadForNPC",
        "kind": "re-export",
        "signature": "getSquadForNPC",
        "summary": ""
      },
      {
        "name": "getStealthModifier",
        "kind": "re-export",
        "signature": "getStealthModifier",
        "summary": ""
      },
      {
        "name": "getTeammates",
        "kind": "re-export",
        "signature": "getTeammates",
        "summary": ""
      },
      {
        "name": "getTerrainHeight",
        "kind": "re-export",
        "signature": "getTerrainHeight",
        "summary": ""
      },
      {
        "name": "getTerrainPropertiesAt",
        "kind": "re-export",
        "signature": "getTerrainPropertiesAt",
        "summary": ""
      },
      {
        "name": "getTerrainType",
        "kind": "re-export",
        "signature": "getTerrainType",
        "summary": ""
      },
      {
        "name": "getTerritoryOwner",
        "kind": "re-export",
        "signature": "getTerritoryOwner",
        "summary": ""
      },
      {
        "name": "getTopValues",
        "kind": "re-export",
        "signature": "getTopValues",
        "summary": ""
      },
      {
        "name": "getUnfulfilledDreams",
        "kind": "re-export",
        "signature": "getUnfulfilledDreams",
        "summary": ""
      },
      {
        "name": "getValue",
        "kind": "re-export",
        "signature": "getValue",
        "summary": ""
      },
      {
        "name": "getWeatherEffects",
        "kind": "re-export",
        "signature": "getWeatherEffects",
        "summary": ""
      },
      {
        "name": "getWorkingMemoryByType",
        "kind": "re-export",
        "signature": "getWorkingMemoryByType",
        "summary": ""
      },
      {
        "name": "gridToWorld",
        "kind": "re-export",
        "signature": "gridToWorld",
        "summary": ""
      },
      {
        "name": "groupRally",
        "kind": "re-export",
        "signature": "groupRally",
        "summary": ""
      },
      {
        "name": "hasComplexEmotion",
        "kind": "re-export",
        "signature": "hasComplexEmotion",
        "summary": ""
      },
      {
        "name": "hasKnowledgeOf",
        "kind": "re-export",
        "signature": "hasKnowledgeOf",
        "summary": ""
      },
      {
        "name": "hasLineOfSight",
        "kind": "re-export",
        "signature": "hasLineOfSight",
        "summary": ""
      },
      {
        "name": "hasLineOfSightSpheres",
        "kind": "re-export",
        "signature": "hasLineOfSightSpheres",
        "summary": ""
      },
      {
        "name": "influenceCellToWorld",
        "kind": "re-export",
        "signature": "influenceCellToWorld",
        "summary": ""
      },
      {
        "name": "initMarketResource",
        "kind": "re-export",
        "signature": "initMarketResource",
        "summary": ""
      },
      {
        "name": "initNPCMelee",
        "kind": "re-export",
        "signature": "initNPCMelee",
        "summary": ""
      },
      {
        "name": "initNPCWeapons",
        "kind": "re-export",
        "signature": "initNPCWeapons",
        "summary": ""
      },
      {
        "name": "interruptMeleeAttack",
        "kind": "re-export",
        "signature": "interruptMeleeAttack",
        "summary": ""
      },
      {
        "name": "inverseLinearCurve",
        "kind": "re-export",
        "signature": "inverseLinearCurve",
        "summary": ""
      },
      {
        "name": "isCellWalkable",
        "kind": "re-export",
        "signature": "isCellWalkable",
        "summary": ""
      },
      {
        "name": "isEvading",
        "kind": "re-export",
        "signature": "isEvading",
        "summary": ""
      },
      {
        "name": "isFormationComplete",
        "kind": "re-export",
        "signature": "isFormationComplete",
        "summary": ""
      },
      {
        "name": "isGroupRouting",
        "kind": "re-export",
        "signature": "isGroupRouting",
        "summary": ""
      },
      {
        "name": "isInCircularAoE",
        "kind": "re-export",
        "signature": "isInCircularAoE",
        "summary": ""
      },
      {
        "name": "isInConeAoE",
        "kind": "re-export",
        "signature": "isInConeAoE",
        "summary": ""
      },
      {
        "name": "isInMeleeArc",
        "kind": "re-export",
        "signature": "isInMeleeArc",
        "summary": ""
      },
      {
        "name": "isInMeleeArc3D",
        "kind": "re-export",
        "signature": "isInMeleeArc3D",
        "summary": ""
      },
      {
        "name": "isSuppressed",
        "kind": "re-export",
        "signature": "isSuppressed",
        "summary": ""
      },
      {
        "name": "isWithinRange",
        "kind": "re-export",
        "signature": "isWithinRange",
        "summary": ""
      },
      {
        "name": "isWorkTime",
        "kind": "re-export",
        "signature": "isWorkTime",
        "summary": ""
      },
      {
        "name": "linearCurve",
        "kind": "re-export",
        "signature": "linearCurve",
        "summary": ""
      },
      {
        "name": "logisticCurve",
        "kind": "re-export",
        "signature": "logisticCurve",
        "summary": ""
      },
      {
        "name": "modifyPlayerReputation",
        "kind": "re-export",
        "signature": "modifyPlayerReputation",
        "summary": ""
      },
      {
        "name": "modifyValue",
        "kind": "re-export",
        "signature": "modifyValue",
        "summary": ""
      },
      {
        "name": "moraleCheck",
        "kind": "re-export",
        "signature": "moraleCheck",
        "summary": ""
      },
      {
        "name": "moveFormation",
        "kind": "re-export",
        "signature": "moveFormation",
        "summary": ""
      },
      {
        "name": "npcFireWeapon",
        "kind": "re-export",
        "signature": "npcFireWeapon",
        "summary": ""
      },
      {
        "name": "npcMeleeAttack",
        "kind": "re-export",
        "signature": "npcMeleeAttack",
        "summary": ""
      },
      {
        "name": "pcgHash",
        "kind": "re-export",
        "signature": "pcgHash",
        "summary": ""
      },
      {
        "name": "planSuppressionManeuver",
        "kind": "re-export",
        "signature": "planSuppressionManeuver",
        "summary": ""
      },
      {
        "name": "poolAcquire",
        "kind": "re-export",
        "signature": "poolAcquire",
        "summary": ""
      },
      {
        "name": "poolRelease",
        "kind": "re-export",
        "signature": "poolRelease",
        "summary": ""
      },
      {
        "name": "poolReleaseAll",
        "kind": "re-export",
        "signature": "poolReleaseAll",
        "summary": ""
      },
      {
        "name": "poolStats",
        "kind": "re-export",
        "signature": "poolStats",
        "summary": ""
      },
      {
        "name": "practiceSkill",
        "kind": "re-export",
        "signature": "practiceSkill",
        "summary": ""
      },
      {
        "name": "predictiveAim",
        "kind": "re-export",
        "signature": "predictiveAim",
        "summary": ""
      },
      {
        "name": "predictiveAimWithAcceleration",
        "kind": "re-export",
        "signature": "predictiveAimWithAcceleration",
        "summary": ""
      },
      {
        "name": "processAllyDeath",
        "kind": "re-export",
        "signature": "processAllyDeath",
        "summary": ""
      },
      {
        "name": "processBarkQueue",
        "kind": "re-export",
        "signature": "processBarkQueue",
        "summary": ""
      },
      {
        "name": "processDamage",
        "kind": "re-export",
        "signature": "processDamage",
        "summary": ""
      },
      {
        "name": "processDamageMorale",
        "kind": "re-export",
        "signature": "processDamageMorale",
        "summary": ""
      },
      {
        "name": "processEnemyDeath",
        "kind": "re-export",
        "signature": "processEnemyDeath",
        "summary": ""
      },
      {
        "name": "processNoiseEvent",
        "kind": "re-export",
        "signature": "processNoiseEvent",
        "summary": ""
      },
      {
        "name": "processVisualDetection",
        "kind": "re-export",
        "signature": "processVisualDetection",
        "summary": ""
      },
      {
        "name": "propagateInfluence",
        "kind": "re-export",
        "signature": "propagateInfluence",
        "summary": ""
      },
      {
        "name": "proposeTreaty",
        "kind": "re-export",
        "signature": "proposeTreaty",
        "summary": ""
      },
      {
        "name": "pursue",
        "kind": "re-export",
        "signature": "pursue",
        "summary": ""
      },
      {
        "name": "pursueGoal",
        "kind": "re-export",
        "signature": "pursueGoal",
        "summary": ""
      },
      {
        "name": "quadraticCurve",
        "kind": "re-export",
        "signature": "quadraticCurve",
        "summary": ""
      },
      {
        "name": "queryKnowledge",
        "kind": "re-export",
        "signature": "queryKnowledge",
        "summary": ""
      },
      {
        "name": "queryRelationships",
        "kind": "re-export",
        "signature": "queryRelationships",
        "summary": ""
      },
      {
        "name": "queueBark",
        "kind": "re-export",
        "signature": "queueBark",
        "summary": ""
      },
      {
        "name": "radToDeg",
        "kind": "re-export",
        "signature": "radToDeg",
        "summary": ""
      },
      {
        "name": "rally",
        "kind": "re-export",
        "signature": "rally",
        "summary": ""
      },
      {
        "name": "rayAABBIntersect",
        "kind": "re-export",
        "signature": "rayAABBIntersect",
        "summary": ""
      },
      {
        "name": "raySphereIntersect",
        "kind": "re-export",
        "signature": "raySphereIntersect",
        "summary": ""
      },
      {
        "name": "reactToThreat",
        "kind": "re-export",
        "signature": "reactToThreat",
        "summary": ""
      },
      {
        "name": "readbackResults",
        "kind": "re-export",
        "signature": "readbackResults",
        "summary": ""
      },
      {
        "name": "recallEpisodesWithEmotion",
        "kind": "re-export",
        "signature": "recallEpisodesWithEmotion",
        "summary": ""
      },
      {
        "name": "recallEpisodesWithEntity",
        "kind": "re-export",
        "signature": "recallEpisodesWithEntity",
        "summary": ""
      },
      {
        "name": "recallRecentEpisodes",
        "kind": "re-export",
        "signature": "recallRecentEpisodes",
        "summary": ""
      },
      {
        "name": "recordInteraction",
        "kind": "re-export",
        "signature": "recordInteraction",
        "summary": ""
      },
      {
        "name": "recordWeaponFire",
        "kind": "re-export",
        "signature": "recordWeaponFire",
        "summary": ""
      },
      {
        "name": "registerAffix",
        "kind": "re-export",
        "signature": "registerAffix",
        "summary": ""
      },
      {
        "name": "registerFaction",
        "kind": "re-export",
        "signature": "registerFaction",
        "summary": ""
      },
      {
        "name": "registerItemDef",
        "kind": "re-export",
        "signature": "registerItemDef",
        "summary": ""
      },
      {
        "name": "registerListener",
        "kind": "re-export",
        "signature": "registerListener",
        "summary": ""
      },
      {
        "name": "registerLootTable",
        "kind": "re-export",
        "signature": "registerLootTable",
        "summary": ""
      },
      {
        "name": "registerNPC",
        "kind": "re-export",
        "signature": "registerNPC",
        "summary": ""
      },
      {
        "name": "registerNPCKnowledge",
        "kind": "re-export",
        "signature": "registerNPCKnowledge",
        "summary": ""
      },
      {
        "name": "registerQuest",
        "kind": "re-export",
        "signature": "registerQuest",
        "summary": ""
      },
      {
        "name": "registerRecipe",
        "kind": "re-export",
        "signature": "registerRecipe",
        "summary": ""
      },
      {
        "name": "registerResource",
        "kind": "re-export",
        "signature": "registerResource",
        "summary": ""
      },
      {
        "name": "registerSmartObject",
        "kind": "re-export",
        "signature": "registerSmartObject",
        "summary": ""
      },
      {
        "name": "registerSpawnType",
        "kind": "re-export",
        "signature": "registerSpawnType",
        "summary": ""
      },
      {
        "name": "registerSpecies",
        "kind": "re-export",
        "signature": "registerSpecies",
        "summary": ""
      },
      {
        "name": "registerThreat",
        "kind": "re-export",
        "signature": "registerThreat",
        "summary": ""
      },
      {
        "name": "releaseSlot",
        "kind": "re-export",
        "signature": "releaseSlot",
        "summary": ""
      },
      {
        "name": "removeBlackboardValue",
        "kind": "re-export",
        "signature": "removeBlackboardValue",
        "summary": ""
      },
      {
        "name": "removeCreature",
        "kind": "re-export",
        "signature": "removeCreature",
        "summary": ""
      },
      {
        "name": "removeCrowdAgent",
        "kind": "re-export",
        "signature": "removeCrowdAgent",
        "summary": ""
      },
      {
        "name": "removeFromFormation",
        "kind": "re-export",
        "signature": "removeFromFormation",
        "summary": ""
      },
      {
        "name": "removeFromInventory",
        "kind": "re-export",
        "signature": "removeFromInventory",
        "summary": ""
      },
      {
        "name": "removeFromSquad",
        "kind": "re-export",
        "signature": "removeFromSquad",
        "summary": ""
      },
      {
        "name": "removeGridLayer",
        "kind": "re-export",
        "signature": "removeGridLayer",
        "summary": ""
      },
      {
        "name": "removeThreat",
        "kind": "re-export",
        "signature": "removeThreat",
        "summary": ""
      },
      {
        "name": "reportQuestEvent",
        "kind": "re-export",
        "signature": "reportQuestEvent",
        "summary": ""
      },
      {
        "name": "reportSpawnKilled",
        "kind": "re-export",
        "signature": "reportSpawnKilled",
        "summary": ""
      },
      {
        "name": "reservePath",
        "kind": "re-export",
        "signature": "reservePath",
        "summary": ""
      },
      {
        "name": "reserveSlot",
        "kind": "re-export",
        "signature": "reserveSlot",
        "summary": ""
      },
      {
        "name": "resetNode",
        "kind": "re-export",
        "signature": "resetNode",
        "summary": ""
      },
      {
        "name": "resolveCircularAoE",
        "kind": "re-export",
        "signature": "resolveCircularAoE",
        "summary": ""
      },
      {
        "name": "resolveConeAoE",
        "kind": "re-export",
        "signature": "resolveConeAoE",
        "summary": ""
      },
      {
        "name": "rollLootTable",
        "kind": "re-export",
        "signature": "rollLootTable",
        "summary": ""
      },
      {
        "name": "rollRarity",
        "kind": "re-export",
        "signature": "rollRarity",
        "summary": ""
      },
      {
        "name": "sampleCombinedInfluence",
        "kind": "re-export",
        "signature": "sampleCombinedInfluence",
        "summary": ""
      },
      {
        "name": "satisfyNeed",
        "kind": "re-export",
        "signature": "satisfyNeed",
        "summary": ""
      },
      {
        "name": "satisfyPsychNeed",
        "kind": "re-export",
        "signature": "satisfyPsychNeed",
        "summary": ""
      },
      {
        "name": "scheduleEvent",
        "kind": "re-export",
        "signature": "scheduleEvent",
        "summary": ""
      },
      {
        "name": "scoreAction",
        "kind": "re-export",
        "signature": "scoreAction",
        "summary": ""
      },
      {
        "name": "scoreActionByValues",
        "kind": "re-export",
        "signature": "scoreActionByValues",
        "summary": ""
      },
      {
        "name": "scoreActivity",
        "kind": "re-export",
        "signature": "scoreActivity",
        "summary": ""
      },
      {
        "name": "scoreCoverPoint",
        "kind": "re-export",
        "signature": "scoreCoverPoint",
        "summary": ""
      },
      {
        "name": "searchEpisodes",
        "kind": "re-export",
        "signature": "searchEpisodes",
        "summary": ""
      },
      {
        "name": "seek",
        "kind": "re-export",
        "signature": "seek",
        "summary": ""
      },
      {
        "name": "selectActionBucketed",
        "kind": "re-export",
        "signature": "selectActionBucketed",
        "summary": ""
      },
      {
        "name": "selectActionWeighted",
        "kind": "re-export",
        "signature": "selectActionWeighted",
        "summary": ""
      },
      {
        "name": "selectActivity",
        "kind": "re-export",
        "signature": "selectActivity",
        "summary": ""
      },
      {
        "name": "selectBestAction",
        "kind": "re-export",
        "signature": "selectBestAction",
        "summary": ""
      },
      {
        "name": "selectBestWeapon",
        "kind": "re-export",
        "signature": "selectBestWeapon",
        "summary": ""
      },
      {
        "name": "selectChoice",
        "kind": "re-export",
        "signature": "selectChoice",
        "summary": ""
      },
      {
        "name": "selectTarget",
        "kind": "re-export",
        "signature": "selectTarget",
        "summary": ""
      },
      {
        "name": "sellToMarket",
        "kind": "re-export",
        "signature": "sellToMarket",
        "summary": ""
      },
      {
        "name": "senseDanger",
        "kind": "re-export",
        "signature": "senseDanger",
        "summary": ""
      },
      {
        "name": "senseVibrations",
        "kind": "re-export",
        "signature": "senseVibrations",
        "summary": ""
      },
      {
        "name": "separation",
        "kind": "re-export",
        "signature": "separation",
        "summary": ""
      },
      {
        "name": "setAIRngContext",
        "kind": "re-export",
        "signature": "setAIRngContext",
        "summary": ""
      },
      {
        "name": "setBlackboardValue",
        "kind": "re-export",
        "signature": "setBlackboardValue",
        "summary": ""
      },
      {
        "name": "setCellWalkable",
        "kind": "re-export",
        "signature": "setCellWalkable",
        "summary": ""
      },
      {
        "name": "setDialogueFlag",
        "kind": "re-export",
        "signature": "setDialogueFlag",
        "summary": ""
      },
      {
        "name": "setDiplomaticStance",
        "kind": "re-export",
        "signature": "setDiplomaticStance",
        "summary": ""
      },
      {
        "name": "setFlowDirection",
        "kind": "re-export",
        "signature": "setFlowDirection",
        "summary": ""
      },
      {
        "name": "setFocus",
        "kind": "re-export",
        "signature": "setFocus",
        "summary": ""
      },
      {
        "name": "setInfluenceAt",
        "kind": "re-export",
        "signature": "setInfluenceAt",
        "summary": ""
      },
      {
        "name": "setStrafeDirection",
        "kind": "re-export",
        "signature": "setStrafeDirection",
        "summary": ""
      },
      {
        "name": "setTerrainHeight",
        "kind": "re-export",
        "signature": "setTerrainHeight",
        "summary": ""
      },
      {
        "name": "setTerrainType",
        "kind": "re-export",
        "signature": "setTerrainType",
        "summary": ""
      },
      {
        "name": "setValue",
        "kind": "re-export",
        "signature": "setValue",
        "summary": ""
      },
      {
        "name": "setVehiclePath",
        "kind": "re-export",
        "signature": "setVehiclePath",
        "summary": ""
      },
      {
        "name": "shareKnowledge",
        "kind": "re-export",
        "signature": "shareKnowledge",
        "summary": ""
      },
      {
        "name": "shareTeamInfo",
        "kind": "re-export",
        "signature": "shareTeamInfo",
        "summary": ""
      },
      {
        "name": "shouldBeAggressive",
        "kind": "re-export",
        "signature": "shouldBeAggressive",
        "summary": ""
      },
      {
        "name": "shouldFlee",
        "kind": "re-export",
        "signature": "shouldFlee",
        "summary": ""
      },
      {
        "name": "shouldSeekCover",
        "kind": "re-export",
        "signature": "shouldSeekCover",
        "summary": ""
      },
      {
        "name": "shouldSurrender",
        "kind": "re-export",
        "signature": "shouldSurrender",
        "summary": ""
      },
      {
        "name": "shouldUseGPURaycast",
        "kind": "re-export",
        "signature": "shouldUseGPURaycast",
        "summary": ""
      },
      {
        "name": "smellAt",
        "kind": "re-export",
        "signature": "smellAt",
        "summary": ""
      },
      {
        "name": "smoothstepCurve",
        "kind": "re-export",
        "signature": "smoothstepCurve",
        "summary": ""
      },
      {
        "name": "spatialHashClear",
        "kind": "re-export",
        "signature": "spatialHashClear",
        "summary": ""
      },
      {
        "name": "spatialHashCount",
        "kind": "re-export",
        "signature": "spatialHashCount",
        "summary": ""
      },
      {
        "name": "spatialHashInsert",
        "kind": "re-export",
        "signature": "spatialHashInsert",
        "summary": ""
      },
      {
        "name": "spatialHashKNearest",
        "kind": "re-export",
        "signature": "spatialHashKNearest",
        "summary": ""
      },
      {
        "name": "spatialHashQueryAABB",
        "kind": "re-export",
        "signature": "spatialHashQueryAABB",
        "summary": ""
      },
      {
        "name": "spatialHashQueryRadius",
        "kind": "re-export",
        "signature": "spatialHashQueryRadius",
        "summary": ""
      },
      {
        "name": "spatialHashQueryRadius2D",
        "kind": "re-export",
        "signature": "spatialHashQueryRadius2D",
        "summary": ""
      },
      {
        "name": "spatialHashRebuild",
        "kind": "re-export",
        "signature": "spatialHashRebuild",
        "summary": ""
      },
      {
        "name": "spatialHashRemove",
        "kind": "re-export",
        "signature": "spatialHashRemove",
        "summary": ""
      },
      {
        "name": "spatialHashUpdate",
        "kind": "re-export",
        "signature": "spatialHashUpdate",
        "summary": ""
      },
      {
        "name": "spawnCreature",
        "kind": "re-export",
        "signature": "spawnCreature",
        "summary": ""
      },
      {
        "name": "spreadKnowledge",
        "kind": "re-export",
        "signature": "spreadKnowledge",
        "summary": ""
      },
      {
        "name": "stampInfluence",
        "kind": "re-export",
        "signature": "stampInfluence",
        "summary": ""
      },
      {
        "name": "startConversation",
        "kind": "re-export",
        "signature": "startConversation",
        "summary": ""
      },
      {
        "name": "startDodge",
        "kind": "re-export",
        "signature": "startDodge",
        "summary": ""
      },
      {
        "name": "startMeleeAttack",
        "kind": "re-export",
        "signature": "startMeleeAttack",
        "summary": ""
      },
      {
        "name": "startPeek",
        "kind": "re-export",
        "signature": "startPeek",
        "summary": ""
      },
      {
        "name": "stepCurve",
        "kind": "re-export",
        "signature": "stepCurve",
        "summary": ""
      },
      {
        "name": "storeBelief",
        "kind": "re-export",
        "signature": "storeBelief",
        "summary": ""
      },
      {
        "name": "storeEpisode",
        "kind": "re-export",
        "signature": "storeEpisode",
        "summary": ""
      },
      {
        "name": "storeFact",
        "kind": "re-export",
        "signature": "storeFact",
        "summary": ""
      },
      {
        "name": "storeRelationship",
        "kind": "re-export",
        "signature": "storeRelationship",
        "summary": ""
      },
      {
        "name": "sweepMeleeArc",
        "kind": "re-export",
        "signature": "sweepMeleeArc",
        "summary": ""
      },
      {
        "name": "sweptSphereSphere",
        "kind": "re-export",
        "signature": "sweptSphereSphere",
        "summary": ""
      },
      {
        "name": "sweptSphereSphereMoving",
        "kind": "re-export",
        "signature": "sweptSphereSphereMoving",
        "summary": ""
      },
      {
        "name": "terrainCellToWorld",
        "kind": "re-export",
        "signature": "terrainCellToWorld",
        "summary": ""
      },
      {
        "name": "tickNode",
        "kind": "re-export",
        "signature": "tickNode",
        "summary": ""
      },
      {
        "name": "tickTree",
        "kind": "re-export",
        "signature": "tickTree",
        "summary": ""
      },
      {
        "name": "triggerEvacuation",
        "kind": "re-export",
        "signature": "triggerEvacuation",
        "summary": ""
      },
      {
        "name": "triggerPanic",
        "kind": "re-export",
        "signature": "triggerPanic",
        "summary": ""
      },
      {
        "name": "turnInQuest",
        "kind": "re-export",
        "signature": "turnInQuest",
        "summary": ""
      },
      {
        "name": "unregisterNPC",
        "kind": "re-export",
        "signature": "unregisterNPC",
        "summary": ""
      },
      {
        "name": "updateAIAimingSystem",
        "kind": "re-export",
        "signature": "updateAIAimingSystem",
        "summary": ""
      },
      {
        "name": "updateAIDirector",
        "kind": "re-export",
        "signature": "updateAIDirector",
        "summary": ""
      },
      {
        "name": "updateAllyInfluence",
        "kind": "re-export",
        "signature": "updateAllyInfluence",
        "summary": ""
      },
      {
        "name": "updateAvailableQuests",
        "kind": "re-export",
        "signature": "updateAvailableQuests",
        "summary": ""
      },
      {
        "name": "updateBeamTracking",
        "kind": "re-export",
        "signature": "updateBeamTracking",
        "summary": ""
      },
      {
        "name": "updateCharacterState",
        "kind": "re-export",
        "signature": "updateCharacterState",
        "summary": ""
      },
      {
        "name": "updateCoverState",
        "kind": "re-export",
        "signature": "updateCoverState",
        "summary": ""
      },
      {
        "name": "updateCreature",
        "kind": "re-export",
        "signature": "updateCreature",
        "summary": ""
      },
      {
        "name": "updateCrowd",
        "kind": "re-export",
        "signature": "updateCrowd",
        "summary": ""
      },
      {
        "name": "updateDifficulty",
        "kind": "re-export",
        "signature": "updateDifficulty",
        "summary": ""
      },
      {
        "name": "updateEconomy",
        "kind": "re-export",
        "signature": "updateEconomy",
        "summary": ""
      },
      {
        "name": "updateEcosystem",
        "kind": "re-export",
        "signature": "updateEcosystem",
        "summary": ""
      },
      {
        "name": "updateEnvironmentReadings",
        "kind": "re-export",
        "signature": "updateEnvironmentReadings",
        "summary": ""
      },
      {
        "name": "updateEvasion",
        "kind": "re-export",
        "signature": "updateEvasion",
        "summary": ""
      },
      {
        "name": "updateEvents",
        "kind": "re-export",
        "signature": "updateEvents",
        "summary": ""
      },
      {
        "name": "updateFormationMovement",
        "kind": "re-export",
        "signature": "updateFormationMovement",
        "summary": ""
      },
      {
        "name": "updateGoalProgress",
        "kind": "re-export",
        "signature": "updateGoalProgress",
        "summary": ""
      },
      {
        "name": "updateGrenade",
        "kind": "re-export",
        "signature": "updateGrenade",
        "summary": ""
      },
      {
        "name": "updateInteraction",
        "kind": "re-export",
        "signature": "updateInteraction",
        "summary": ""
      },
      {
        "name": "updateKnowledgePropagation",
        "kind": "re-export",
        "signature": "updateKnowledgePropagation",
        "summary": ""
      },
      {
        "name": "updateListenerPosition",
        "kind": "re-export",
        "signature": "updateListenerPosition",
        "summary": ""
      },
      {
        "name": "updateMarketPrices",
        "kind": "re-export",
        "signature": "updateMarketPrices",
        "summary": ""
      },
      {
        "name": "updateMeleeAttack",
        "kind": "re-export",
        "signature": "updateMeleeAttack",
        "summary": ""
      },
      {
        "name": "updateMorale",
        "kind": "re-export",
        "signature": "updateMorale",
        "summary": ""
      },
      {
        "name": "updateMoraleContext",
        "kind": "re-export",
        "signature": "updateMoraleContext",
        "summary": ""
      },
      {
        "name": "updateNeeds",
        "kind": "re-export",
        "signature": "updateNeeds",
        "summary": ""
      },
      {
        "name": "updateObjectiveProgress",
        "kind": "re-export",
        "signature": "updateObjectiveProgress",
        "summary": ""
      },
      {
        "name": "updatePacing",
        "kind": "re-export",
        "signature": "updatePacing",
        "summary": ""
      },
      {
        "name": "updatePerception",
        "kind": "re-export",
        "signature": "updatePerception",
        "summary": ""
      },
      {
        "name": "updatePlayerPosition",
        "kind": "re-export",
        "signature": "updatePlayerPosition",
        "summary": ""
      },
      {
        "name": "updatePlayerState",
        "kind": "re-export",
        "signature": "updatePlayerState",
        "summary": ""
      },
      {
        "name": "updateProductionBuilding",
        "kind": "re-export",
        "signature": "updateProductionBuilding",
        "summary": ""
      },
      {
        "name": "updateProjectile",
        "kind": "re-export",
        "signature": "updateProjectile",
        "summary": ""
      },
      {
        "name": "updateScentSystem",
        "kind": "re-export",
        "signature": "updateScentSystem",
        "summary": ""
      },
      {
        "name": "updateScheduler",
        "kind": "re-export",
        "signature": "updateScheduler",
        "summary": ""
      },
      {
        "name": "updateSoundSystem",
        "kind": "re-export",
        "signature": "updateSoundSystem",
        "summary": ""
      },
      {
        "name": "updateSpawnDirector",
        "kind": "re-export",
        "signature": "updateSpawnDirector",
        "summary": ""
      },
      {
        "name": "updateSquadFormations",
        "kind": "re-export",
        "signature": "updateSquadFormations",
        "summary": ""
      },
      {
        "name": "updateSquadTactics",
        "kind": "re-export",
        "signature": "updateSquadTactics",
        "summary": ""
      },
      {
        "name": "updateSteering",
        "kind": "re-export",
        "signature": "updateSteering",
        "summary": ""
      },
      {
        "name": "updateStrafe",
        "kind": "re-export",
        "signature": "updateStrafe",
        "summary": ""
      },
      {
        "name": "updateTargetMemory",
        "kind": "re-export",
        "signature": "updateTargetMemory",
        "summary": ""
      },
      {
        "name": "updateThreatInfluence",
        "kind": "re-export",
        "signature": "updateThreatInfluence",
        "summary": ""
      },
      {
        "name": "updateTrafficSystem",
        "kind": "re-export",
        "signature": "updateTrafficSystem",
        "summary": ""
      },
      {
        "name": "updateUtilityBrain",
        "kind": "re-export",
        "signature": "updateUtilityBrain",
        "summary": ""
      },
      {
        "name": "updateVehicleAI",
        "kind": "re-export",
        "signature": "updateVehicleAI",
        "summary": ""
      },
      {
        "name": "updateVehiclePhysics",
        "kind": "re-export",
        "signature": "updateVehiclePhysics",
        "summary": ""
      },
      {
        "name": "updateWeather",
        "kind": "re-export",
        "signature": "updateWeather",
        "summary": ""
      },
      {
        "name": "updateWorldState",
        "kind": "re-export",
        "signature": "updateWorldState",
        "summary": ""
      },
      {
        "name": "uploadAABBTargets",
        "kind": "re-export",
        "signature": "uploadAABBTargets",
        "summary": ""
      },
      {
        "name": "uploadRays",
        "kind": "re-export",
        "signature": "uploadRays",
        "summary": ""
      },
      {
        "name": "uploadSphereTargets",
        "kind": "re-export",
        "signature": "uploadSphereTargets",
        "summary": ""
      },
      {
        "name": "validatePerception",
        "kind": "re-export",
        "signature": "validatePerception",
        "summary": ""
      },
      {
        "name": "validatePersonality",
        "kind": "re-export",
        "signature": "validatePersonality",
        "summary": ""
      },
      {
        "name": "validateSteeringAgent",
        "kind": "re-export",
        "signature": "validateSteeringAgent",
        "summary": ""
      },
      {
        "name": "valuesPositively",
        "kind": "re-export",
        "signature": "valuesPositively",
        "summary": ""
      },
      {
        "name": "wander",
        "kind": "re-export",
        "signature": "wander",
        "summary": ""
      },
      {
        "name": "willHelp",
        "kind": "re-export",
        "signature": "willHelp",
        "summary": ""
      },
      {
        "name": "workingMemoryPush",
        "kind": "re-export",
        "signature": "workingMemoryPush",
        "summary": ""
      },
      {
        "name": "worldToGrid",
        "kind": "re-export",
        "signature": "worldToGrid",
        "summary": ""
      },
      {
        "name": "worldToInfluenceCell",
        "kind": "re-export",
        "signature": "worldToInfluenceCell",
        "summary": ""
      },
      {
        "name": "worldToTerrainCell",
        "kind": "re-export",
        "signature": "worldToTerrainCell",
        "summary": ""
      },
      {
        "name": "wouldDoAction",
        "kind": "re-export",
        "signature": "wouldDoAction",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/cloth/ClothSimWorld",
    "path": "engine/reference/sim/cloth/ClothSimWorld.md",
    "source": "engine/sim/cloth/ClothSimWorld.js",
    "import": "/engine/sim/cloth/ClothSimWorld.js",
    "sourceHash": "6d164b298bf0832b0451a7aafb33e8c3d98de0d3e19b1423bd5ec6743d47577d",
    "summary": "",
    "exports": [
      {
        "name": "createClothSimWorld",
        "kind": "function",
        "signature": "createClothSimWorld(options = {})",
        "summary": ""
      },
      {
        "name": "destroyClothSimWorld",
        "kind": "function",
        "signature": "destroyClothSimWorld(world)",
        "summary": ""
      },
      {
        "name": "addClothInstance",
        "kind": "function",
        "signature": "addClothInstance(world, descriptor)",
        "summary": ""
      },
      {
        "name": "removeClothInstance",
        "kind": "function",
        "signature": "removeClothInstance(world, instanceId)",
        "summary": ""
      },
      {
        "name": "stepClothSimWorld",
        "kind": "function",
        "signature": "stepClothSimWorld(world, deltaSeconds, options = {})",
        "summary": ""
      },
      {
        "name": "getClothInstanceRenderData",
        "kind": "function",
        "signature": "getClothInstanceRenderData(world, instanceId)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/FDTDSolver",
    "path": "engine/reference/sim/fluids/FDTDSolver.md",
    "source": "engine/sim/fluids/FDTDSolver.js",
    "import": "/engine/sim/fluids/FDTDSolver.js",
    "sourceHash": "01adf43e7c4d726151478071d8074a86ece5883450f2723d34a6022ec08be1e3",
    "summary": "Yee cell field components Staggered grid: E at integers, H at half-integers",
    "exports": [
      {
        "name": "YeeCell",
        "kind": "class",
        "signature": "class YeeCell",
        "summary": "Yee cell field components Staggered grid: E at integers, H at half-integers"
      },
      {
        "name": "TimeVaryingMaterial",
        "kind": "class",
        "signature": "class TimeVaryingMaterial",
        "summary": "Time-varying material properties"
      },
      {
        "name": "FDTDSource",
        "kind": "class",
        "signature": "class FDTDSource",
        "summary": ""
      },
      {
        "name": "FDTDSolver",
        "kind": "class",
        "signature": "class FDTDSolver",
        "summary": ""
      },
      {
        "name": "PHYSICS",
        "kind": "constant",
        "signature": "PHYSICS",
        "summary": "Physical constants"
      },
      {
        "name": "MaterialType",
        "kind": "constant",
        "signature": "MaterialType",
        "summary": "Material types"
      },
      {
        "name": "BoundaryCondition",
        "kind": "constant",
        "signature": "BoundaryCondition",
        "summary": "Boundary conditions"
      },
      {
        "name": "SourceType",
        "kind": "constant",
        "signature": "SourceType",
        "summary": "Source types"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/FluidBoundary",
    "path": "engine/reference/sim/fluids/FluidBoundary.md",
    "source": "engine/sim/fluids/FluidBoundary.js",
    "import": "/engine/sim/fluids/FluidBoundary.js",
    "sourceHash": "b26f5abe060c42247dec6134be23f2bdeb0207c22dc9bc350d68c577bb55e6fe",
    "summary": "Generate WGSL shader for applying solid boundaries to velocity This should run after the pressure projection step",
    "exports": [
      {
        "name": "createBoundaryShader",
        "kind": "function",
        "signature": "createBoundaryShader(workgroupSize = 256)",
        "summary": "Generate WGSL shader for applying solid boundaries to velocity This should run after the pressure projection step"
      },
      {
        "name": "createPressureSolveWithBoundaryShader",
        "kind": "function",
        "signature": "createPressureSolveWithBoundaryShader(workgroupSize = 256)",
        "summary": "Generate WGSL shader for pressure solve with solid boundaries Modifies the Jacobi iteration to handle solid cells"
      },
      {
        "name": "createBoundaryPipeline",
        "kind": "function",
        "signature": "createBoundaryPipeline(device, options = {})",
        "summary": "Create boundary enforcement pipeline"
      },
      {
        "name": "applyBoundaries",
        "kind": "function",
        "signature": "applyBoundaries(encoder, config)",
        "summary": "Apply solid boundaries to velocity field"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/FluidConfig",
    "path": "engine/reference/sim/fluids/FluidConfig.md",
    "source": "engine/sim/fluids/FluidConfig.js",
    "import": "/engine/sim/fluids/FluidConfig.js",
    "sourceHash": "31bce74b2726dd1c8e25465dbcb6b588f98c95e9130192517ed24ba9946397b5",
    "summary": "",
    "exports": [
      {
        "name": "normalizeFluidGridSize",
        "kind": "function",
        "signature": "normalizeFluidGridSize(input)",
        "summary": ""
      },
      {
        "name": "DEFAULT_FLUID_GRID_SIZE",
        "kind": "constant",
        "signature": "DEFAULT_FLUID_GRID_SIZE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/FluidCpuWorld",
    "path": "engine/reference/sim/fluids/FluidCpuWorld.md",
    "source": "engine/sim/fluids/FluidCpuWorld.js",
    "import": "/engine/sim/fluids/FluidCpuWorld.js",
    "sourceHash": "10ab03c7926992cfce74e481fbe7bed3a2b8255108a5a0ea9d285766fae6c136",
    "summary": "",
    "exports": [
      {
        "name": "createFluidCpuWorld",
        "kind": "function",
        "signature": "createFluidCpuWorld(options = {})",
        "summary": ""
      },
      {
        "name": "destroyFluidCpuWorld",
        "kind": "function",
        "signature": "destroyFluidCpuWorld(world)",
        "summary": ""
      },
      {
        "name": "stepFluidCpuWorld",
        "kind": "function",
        "signature": "stepFluidCpuWorld(world, deltaSeconds)",
        "summary": ""
      },
      {
        "name": "applyFluidSourcesCpu",
        "kind": "function",
        "signature": "applyFluidSourcesCpu(world, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/FluidMPM",
    "path": "engine/reference/sim/fluids/FluidMPM.md",
    "source": "engine/sim/fluids/FluidMPM.js",
    "import": "/engine/sim/fluids/FluidMPM.js",
    "sourceHash": "2ff1934cce0b34f40834e21d8aeeb26bb46a1c0614486838dc7bb7d1642421a8",
    "summary": "Create MPM-specific buffers for the fluid simulation",
    "exports": [
      {
        "name": "createMPMBuffers",
        "kind": "function",
        "signature": "createMPMBuffers(device, gridSize, maxParticles)",
        "summary": "Create MPM-specific buffers for the fluid simulation"
      },
      {
        "name": "destroyMPMBuffers",
        "kind": "function",
        "signature": "destroyMPMBuffers(mpm)",
        "summary": "Destroy MPM buffers"
      },
      {
        "name": "createP2GShader",
        "kind": "function",
        "signature": "createP2GShader(workgroupSize = 256)",
        "summary": "Generate the P2G (Particle to Grid) compute shader Uses linear kernel (tent function) for simplicity"
      },
      {
        "name": "createGridUpdateShader",
        "kind": "function",
        "signature": "createGridUpdateShader(workgroupSize = 256)",
        "summary": "Generate the Grid Update compute shader Converts accumulated momentum to velocity, applies forces and boundaries"
      },
      {
        "name": "createG2PShader",
        "kind": "function",
        "signature": "createG2PShader(workgroupSize = 256)",
        "summary": "Generate the G2P (Grid to Particle) compute shader"
      },
      {
        "name": "createMPMPipelines",
        "kind": "function",
        "signature": "createMPMPipelines(device, options = {})",
        "summary": "Create MPM compute pipelines"
      },
      {
        "name": "createMPMWorld",
        "kind": "function",
        "signature": "createMPMWorld(device, options = {})",
        "summary": "Create a complete MPM simulation world"
      },
      {
        "name": "destroyMPMWorld",
        "kind": "function",
        "signature": "destroyMPMWorld(world)",
        "summary": "Destroy MPM world"
      },
      {
        "name": "stepMPMWorld",
        "kind": "function",
        "signature": "stepMPMWorld(world, particles, dt, options = {})",
        "summary": "Step the MPM simulation"
      },
      {
        "name": "setMPMWorldBounds",
        "kind": "function",
        "signature": "setMPMWorldBounds(world, worldMin, worldMax)",
        "summary": "Update MPM world bounds"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/FluidPhaseChange",
    "path": "engine/reference/sim/fluids/FluidPhaseChange.md",
    "source": "engine/sim/fluids/FluidPhaseChange.js",
    "import": "/engine/sim/fluids/FluidPhaseChange.js",
    "sourceHash": "2b94f59f3bf52fa9582c3d5f39114a21d9ba4bade7d41504742d6f8defd8299a",
    "summary": "Create phase change data structures",
    "exports": [
      {
        "name": "createPhaseChangeBuffers",
        "kind": "function",
        "signature": "createPhaseChangeBuffers(device, gridSize, maxParticles)",
        "summary": "Create phase change data structures"
      },
      {
        "name": "createSpellForce",
        "kind": "function",
        "signature": "createSpellForce(position, direction, power, element)",
        "summary": "Spell force injection point"
      },
      {
        "name": "createSpellForceShader",
        "kind": "function",
        "signature": "createSpellForceShader(workgroupSize = 256)",
        "summary": "Generate shader for applying spell forces to fluid"
      },
      {
        "name": "createFreezeShader",
        "kind": "function",
        "signature": "createFreezeShader(workgroupSize = 256)",
        "summary": "Generate shader for freeze effect (temperature-based phase transition)"
      },
      {
        "name": "createCrystallizationShader",
        "kind": "function",
        "signature": "createCrystallizationShader(workgroupSize = 256)",
        "summary": "Generate shader for particle-based crystallization chain reaction Physics-based with latent heat buffer, hysteresis, and asymmetric rates Key concepts from real physics: - Latent heat: Energy absorbed/released during phase change while temp stays constant - Hysteresis: Different thresholds for freezing vs melting (prevents flickering) - Supercooling: Fluid can stay liquid below freezing until nucleation occurs"
      },
      {
        "name": "createSolidCollisionShader",
        "kind": "function",
        "signature": "createSolidCollisionShader(workgroupSize = 256)",
        "summary": "Generate shader for solid particle collision Frozen particles get rigid collision with world, entities, AND other particles Also handles temperature transfer on contact"
      },
      {
        "name": "createCrystalBondShader",
        "kind": "function",
        "signature": "createCrystalBondShader(workgroupSize = 256)",
        "summary": "Generate shader for crystal bond formation Finds nearby frozen particles and creates rigid bonds between them"
      },
      {
        "name": "createBondConstraintShader",
        "kind": "function",
        "signature": "createBondConstraintShader(workgroupSize = 256)",
        "summary": "Generate shader for bond constraint solving (Position-Based Dynamics) Maintains rigid crystal structure by keeping bonded particles at fixed distances"
      },
      {
        "name": "createSolidCollisionPipeline",
        "kind": "function",
        "signature": "createSolidCollisionPipeline(device, workgroupSize = 256)",
        "summary": "Create compute pipeline for solid particle collision"
      },
      {
        "name": "createCrystalBondPipeline",
        "kind": "function",
        "signature": "createCrystalBondPipeline(device, workgroupSize = 256)",
        "summary": "Create compute pipeline for crystal bond formation"
      },
      {
        "name": "createBondConstraintPipeline",
        "kind": "function",
        "signature": "createBondConstraintPipeline(device, workgroupSize = 256)",
        "summary": "Create compute pipeline for bond constraint solving"
      },
      {
        "name": "stepSolidCollision",
        "kind": "function",
        "signature": "stepSolidCollision(device, collisionPipeline, phaseBuffers, particleWorld, colliderData, roomBounds, dt, options = {})",
        "summary": "Step the solid collision system"
      },
      {
        "name": "stepCrystalBonds",
        "kind": "function",
        "signature": "stepCrystalBonds(device, bondPipeline, phaseBuffers, particleWorld, options = {})",
        "summary": "Step the crystal bond formation system"
      },
      {
        "name": "stepBondConstraints",
        "kind": "function",
        "signature": "stepBondConstraints(device, constraintPipeline, phaseBuffers, particleWorld, bondCount, options = {})",
        "summary": "Step the bond constraint solver (PBD) Run multiple iterations for stability"
      },
      {
        "name": "readBondCount",
        "kind": "function",
        "signature": "async readBondCount(device, phaseBuffers)",
        "summary": "Read bond count from GPU (async)"
      },
      {
        "name": "clearBonds",
        "kind": "function",
        "signature": "clearBonds(device, phaseBuffers)",
        "summary": "Clear all bonds (for reset or when spawning rigid body)"
      },
      {
        "name": "stepCrystalSystem",
        "kind": "function",
        "signature": "stepCrystalSystem(device, systems, phaseBuffers, particleWorld, colliderData, roomBounds, dt, options = {})",
        "summary": "Full crystal system - combines all steps Call this each frame to handle solidification, collision, bonding, and constraints"
      },
      {
        "name": "createCrystalSystemPipelines",
        "kind": "function",
        "signature": "createCrystalSystemPipelines(device, workgroupSize = 256)",
        "summary": "Create all crystal system pipelines at once"
      },
      {
        "name": "extractCrystalClusters",
        "kind": "function",
        "signature": "async extractCrystalClusters(device, phaseBuffers, particleWorld, minClusterSize = 5)",
        "summary": "Extract connected crystal clusters from bonds for rigid body spawning Uses Union-Find algorithm to identify connected components"
      },
      {
        "name": "createSeedInjectionParams",
        "kind": "function",
        "signature": "createSeedInjectionParams(position, radius, seedStrength, temperature, magicSaturation)",
        "summary": "Inject seed particles at a position (ice spell impact, magic anchor, etc.)"
      },
      {
        "name": "createCrystallizationPipeline",
        "kind": "function",
        "signature": "createCrystallizationPipeline(device, workgroupSize = 256)",
        "summary": "Create compute pipeline for crystallization chain reaction"
      },
      {
        "name": "stepCrystallization",
        "kind": "function",
        "signature": "stepCrystallization(device, crystallization, phaseBuffers, particleWorld, dt, options = {})",
        "summary": "Step the crystallization system - run compute pass to propagate freezing"
      },
      {
        "name": "injectFreezeSeeds",
        "kind": "function",
        "signature": "injectFreezeSeeds(device, phaseBuffers, particleWorld, seedParams)",
        "summary": "Inject freeze seeds at a world position (for ice spell impact) Affects particles within radius - sets their temp/magic/seed values"
      },
      {
        "name": "injectHeatSeeds",
        "kind": "function",
        "signature": "injectHeatSeeds(device, phaseBuffers, particleWorld, seedParams)",
        "summary": ""
      },
      {
        "name": "applyPhaseVisuals",
        "kind": "function",
        "signature": "applyPhaseVisuals(device, phaseBuffers, particleWorld, options = {})",
        "summary": "Apply visual effects based on phase state (color frozen particles blue/white) Call this after stepCrystallization to update particle rendering"
      },
      {
        "name": "extractFrozenShape",
        "kind": "function",
        "signature": "async extractFrozenShape(device, phaseChangeBuffers, gridSize, worldMin, cellSize)",
        "summary": "Extract frozen region as convex hull for rigid body creation This runs on CPU after GPU freeze pass"
      },
      {
        "name": "clearFreezeRegion",
        "kind": "function",
        "signature": "clearFreezeRegion(device, phaseChangeBuffers)",
        "summary": "Clear freeze region after rigid body is spawned"
      },
      {
        "name": "injectMeltedFluid",
        "kind": "function",
        "signature": "injectMeltedFluid(device, fluidWorld, position, velocity, mass, radius)",
        "summary": "Inject mass/momentum when melting a rigid body"
      },
      {
        "name": "destroyPhaseChangeBuffers",
        "kind": "function",
        "signature": "destroyPhaseChangeBuffers(buffers)",
        "summary": "Destroy phase change buffers"
      },
      {
        "name": "destroyCrystalSystemPipelines",
        "kind": "function",
        "signature": "destroyCrystalSystemPipelines(systems)",
        "summary": "Destroy crystal system pipelines"
      },
      {
        "name": "extractFrozenParticles",
        "kind": "function",
        "signature": "async extractFrozenParticles(device, phaseBuffer, positionBuffer, particleCount, minClusterSize = 5)",
        "summary": "Extract frozen particle cluster for rigid body spawning Returns particles that are FROZEN phase and form a connected cluster"
      },
      {
        "name": "FluidPhase",
        "kind": "constant",
        "signature": "FluidPhase",
        "summary": "Phase states for fluid cells/particles"
      },
      {
        "name": "PARTICLE_PHASE_STRIDE",
        "kind": "constant",
        "signature": "PARTICLE_PHASE_STRIDE",
        "summary": "Particle solidification attributes (per-particle) - temperature: Current temp (ambient ~20, freezing < 0) - magicSaturation: 0-1, how much \"freeze magic\" has accumulated - solidPhase: 0=fluid, 1=freezing, 2=frozen - seedStrength: If > 0, this particle spreads solidification"
      },
      {
        "name": "BOND_STRIDE",
        "kind": "constant",
        "signature": "BOND_STRIDE",
        "summary": "Crystal bond attributes (per-bond) Stores connections between frozen particles forming crystal lattice - particleA: index of first particle - particleB: index of second particle - restDistance: original distance when bond formed (constraint target) - stiffness: bond strength (0-1, higher = more rigid)"
      },
      {
        "name": "MAX_BONDS_PER_PARTICLE",
        "kind": "constant",
        "signature": "MAX_BONDS_PER_PARTICLE",
        "summary": ""
      },
      {
        "name": "DEFAULT_CRYSTAL_PARAMS",
        "kind": "constant",
        "signature": "DEFAULT_CRYSTAL_PARAMS",
        "summary": "Default crystallization parameters - tuned for fast freeze, slow melt"
      },
      {
        "name": "DEFAULT_SOLID_COLLISION_PARAMS",
        "kind": "constant",
        "signature": "DEFAULT_SOLID_COLLISION_PARAMS",
        "summary": "Default solid collision parameters"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/FluidSimWorld",
    "path": "engine/reference/sim/fluids/FluidSimWorld.md",
    "source": "engine/sim/fluids/FluidSimWorld.js",
    "import": "/engine/sim/fluids/FluidSimWorld.js",
    "sourceHash": "037697cc4da869262c5332059293f8ff3aa319482908f1b5dc6f9c32daf8251e",
    "summary": "Clear/reset the density and velocity buffers to zero. Use this when bounds change significantly to prevent stale data from appearing at wrong world-space locations.",
    "exports": [
      {
        "name": "createFluidSimWorld",
        "kind": "function",
        "signature": "async createFluidSimWorld(gpuDevice, options = {})",
        "summary": ""
      },
      {
        "name": "destroyFluidSimWorld",
        "kind": "function",
        "signature": "destroyFluidSimWorld(world)",
        "summary": ""
      },
      {
        "name": "clearFluidSimWorld",
        "kind": "function",
        "signature": "clearFluidSimWorld(world)",
        "summary": "Clear/reset the density and velocity buffers to zero. Use this when bounds change significantly to prevent stale data from appearing at wrong world-space locations."
      },
      {
        "name": "stepFluidSimWorld",
        "kind": "function",
        "signature": "stepFluidSimWorld(world, deltaSeconds, options = {})",
        "summary": ""
      },
      {
        "name": "clearFluidDensity",
        "kind": "function",
        "signature": "clearFluidDensity(world, options = {})",
        "summary": "Clear the density and color buffers to zero. Used in particle-as-smoke mode to reset before splatting particle positions/colors."
      },
      {
        "name": "initFluidSimWorldLazy",
        "kind": "function",
        "signature": "async initFluidSimWorldLazy(options)",
        "summary": "Initialize fluid sim world lazily with bind group creation for smoke rendering. This is a convenience function that handles the full setup sequence."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/FluidSimulation",
    "path": "engine/reference/sim/fluids/FluidSimulation.md",
    "source": "engine/sim/fluids/FluidSimulation.js",
    "import": "/engine/sim/fluids/FluidSimulation.js",
    "sourceHash": "1fd8b00464f1eb30af8ef2addb07c01849fc41e9fb9528075aa45fbe414dfe34",
    "summary": "Per-voxel simulation metadata Stored separately from material ID to avoid expanding chunks",
    "exports": [
      {
        "name": "FluidMetadata",
        "kind": "class",
        "signature": "class FluidMetadata",
        "summary": "Per-voxel simulation metadata Stored separately from material ID to avoid expanding chunks"
      },
      {
        "name": "FluidSimulator",
        "kind": "class",
        "signature": "class FluidSimulator",
        "summary": ""
      },
      {
        "name": "MATERIAL_PROPERTIES",
        "kind": "constant",
        "signature": "MATERIAL_PROPERTIES",
        "summary": "Physical properties for each material type Properties: - type: 'solid' | 'powder' | 'liquid' | 'gas' | 'fire' - density: Higher density sinks below lower density (0-100) - viscosity: How slowly liquid spreads (0=instant, 1=very slow) - flammable: Can catch fire - burnTime: Ticks until destroyed by fire - spreadRate: How many cells to check for spreading (liquids/gases)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/FluidSourceSplat",
    "path": "engine/reference/sim/fluids/FluidSourceSplat.md",
    "source": "engine/sim/fluids/FluidSourceSplat.js",
    "import": "/engine/sim/fluids/FluidSourceSplat.js",
    "sourceHash": "fd6cea4442f86c5b9dfd46318e1ea95bfdd2f073323e025390bd694efba0f9bd",
    "summary": "PARTICLES AS SMOKE - splat density at each particle position. Each particle IS the smoke - not a separate effect. Inherits from particle: - Position → where density is splatted - Size (from meta.a) → splat radius - Color (from meta.rgb) → smoke color (sampled by smoke shader) - Age/Lifetime → fade behavior When raymarched, overlapping particles merge into smooth fluid blobs.",
    "exports": [
      {
        "name": "splatFluidSources",
        "kind": "function",
        "signature": "async splatFluidSources(fluidWorld, gpuDevice, options = {})",
        "summary": ""
      },
      {
        "name": "disposeFluidSourceSplat",
        "kind": "function",
        "signature": "disposeFluidSourceSplat(device)",
        "summary": ""
      },
      {
        "name": "splatParticleDensity",
        "kind": "function",
        "signature": "splatParticleDensity(fluidWorld, particleWorld, options = {})",
        "summary": "PARTICLES AS SMOKE - splat density at each particle position. Each particle IS the smoke - not a separate effect. Inherits from particle: - Position → where density is splatted - Size (from meta.a) → splat radius - Color (from meta.rgb) → smoke color (sampled by smoke shader) - Age/Lifetime → fade behavior When raymarched, overlapping particles merge into smooth fluid blobs."
      },
      {
        "name": "disposeParticleSplat",
        "kind": "function",
        "signature": "disposeParticleSplat(device)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/FluidWorldDomain",
    "path": "engine/reference/sim/fluids/FluidWorldDomain.md",
    "source": "engine/sim/fluids/FluidWorldDomain.js",
    "import": "/engine/sim/fluids/FluidWorldDomain.js",
    "sourceHash": "3e16ef46377dc6b75d6173e42655faaf92b0a68e12521e15e1393abdea78aed2",
    "summary": "Build fluid domain from ECS world colliders",
    "exports": [
      {
        "name": "buildFluidDomainFromColliders",
        "kind": "function",
        "signature": "buildFluidDomainFromColliders(ecsWorld, options = {})",
        "summary": "Build fluid domain from ECS world colliders"
      },
      {
        "name": "createSolidMaskTexture",
        "kind": "function",
        "signature": "createSolidMaskTexture(device, domain, gridSize)",
        "summary": "Create a 3D solid mask texture from colliders Each cell is 0 (fluid) or 1 (solid)"
      },
      {
        "name": "createWorldFluidDomain",
        "kind": "function",
        "signature": "createWorldFluidDomain(device, ecsWorld, options = {})",
        "summary": "Create a world fluid domain with solid mask"
      },
      {
        "name": "updateWorldFluidDomainParams",
        "kind": "function",
        "signature": "updateWorldFluidDomainParams(worldDomain)",
        "summary": "Update world fluid domain params buffer"
      },
      {
        "name": "destroyWorldFluidDomain",
        "kind": "function",
        "signature": "destroyWorldFluidDomain(worldDomain)",
        "summary": "Destroy world fluid domain"
      },
      {
        "name": "rebuildSolidMask",
        "kind": "function",
        "signature": "rebuildSolidMask(worldDomain, ecsWorld)",
        "summary": "Rebuild solid mask when scene changes"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/PhasorRays",
    "path": "engine/reference/sim/fluids/PhasorRays.md",
    "source": "engine/sim/fluids/PhasorRays.js",
    "import": "/engine/sim/fluids/PhasorRays.js",
    "sourceHash": "fa1b6e4da19bb9a35598468b023b7f28c65a87b483f5f93e09497a533bdb67c9",
    "summary": "Ray with wave properties (phasor representation)",
    "exports": [
      {
        "name": "PhasorRay",
        "kind": "class",
        "signature": "class PhasorRay",
        "summary": "Ray with wave properties (phasor representation)"
      },
      {
        "name": "RayMaterialInteraction",
        "kind": "class",
        "signature": "class RayMaterialInteraction",
        "summary": ""
      },
      {
        "name": "PhasorRayTracer",
        "kind": "class",
        "signature": "class PhasorRayTracer",
        "summary": ""
      },
      {
        "name": "frequencyToColor",
        "kind": "function",
        "signature": "frequencyToColor(frequency)",
        "summary": "Convert frequency to visible color (RGB)"
      },
      {
        "name": "wavelengthToColor",
        "kind": "function",
        "signature": "wavelengthToColor(wavelength)",
        "summary": "Convert wavelength to color"
      },
      {
        "name": "dopplerColor",
        "kind": "function",
        "signature": "dopplerColor(baseFrequency, observedFrequency)",
        "summary": "Apply Doppler shift color"
      },
      {
        "name": "generateRayVisualization",
        "kind": "function",
        "signature": "generateRayVisualization(rays, time)",
        "summary": "Generate visualization data for rays"
      },
      {
        "name": "VISIBLE_SPECTRUM",
        "kind": "constant",
        "signature": "VISIBLE_SPECTRUM",
        "summary": "Base visible light frequencies"
      },
      {
        "name": "RayInteraction",
        "kind": "constant",
        "signature": "RayInteraction",
        "summary": "Ray interaction types"
      },
      {
        "name": "RayState",
        "kind": "constant",
        "signature": "RayState",
        "summary": "Ray state"
      },
      {
        "name": "PhasorRays",
        "kind": "re-export",
        "signature": "PhasorRays",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/PhotonicCrystal",
    "path": "engine/reference/sim/fluids/PhotonicCrystal.md",
    "source": "engine/sim/fluids/PhotonicCrystal.js",
    "import": "/engine/sim/fluids/PhotonicCrystal.js",
    "sourceHash": "2eb897f52efbf7a1769ded056427914cf561c0315a346807b9446d3c3d8367ec",
    "summary": "Computes dispersion relation for time-varying medium For photonic time crystal: ω(k) has gaps in k-space (momentum gaps)",
    "exports": [
      {
        "name": "DispersionCalculator",
        "kind": "class",
        "signature": "class DispersionCalculator",
        "summary": "Computes dispersion relation for time-varying medium For photonic time crystal: ω(k) has gaps in k-space (momentum gaps)"
      },
      {
        "name": "PhotonicTimeCrystal",
        "kind": "class",
        "signature": "class PhotonicTimeCrystal",
        "summary": ""
      },
      {
        "name": "TimeReflectionEvent",
        "kind": "class",
        "signature": "class TimeReflectionEvent",
        "summary": "Represents a sudden change in ε that creates time reflection"
      },
      {
        "name": "TemporalCloak",
        "kind": "class",
        "signature": "class TemporalCloak",
        "summary": "Temporal cloaking using time lens approach Opens and closes a gap in the time domain"
      },
      {
        "name": "PhotonicCrystalManager",
        "kind": "class",
        "signature": "class PhotonicCrystalManager",
        "summary": ""
      },
      {
        "name": "CrystalType",
        "kind": "constant",
        "signature": "CrystalType",
        "summary": "Photonic crystal types"
      },
      {
        "name": "ModulationWaveform",
        "kind": "constant",
        "signature": "ModulationWaveform",
        "summary": "Modulation waveforms"
      },
      {
        "name": "TemporalEffect",
        "kind": "constant",
        "signature": "TemporalEffect",
        "summary": "Time crystal effects"
      },
      {
        "name": "PhotonicCrystal",
        "kind": "re-export",
        "signature": "PhotonicCrystal",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/VolumeFieldSmooth",
    "path": "engine/reference/sim/fluids/VolumeFieldSmooth.md",
    "source": "engine/sim/fluids/VolumeFieldSmooth.js",
    "import": "/engine/sim/fluids/VolumeFieldSmooth.js",
    "sourceHash": "b973442f5509944ba41964e148a63159767e24b17b19b1d8f07394c74cac7b5b",
    "summary": "",
    "exports": [
      {
        "name": "smoothVolumeField",
        "kind": "function",
        "signature": "smoothVolumeField(world, options = {})",
        "summary": ""
      },
      {
        "name": "disposeVolumeFieldSmooth",
        "kind": "function",
        "signature": "disposeVolumeFieldSmooth(device)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/VolumeFieldWorld",
    "path": "engine/reference/sim/fluids/VolumeFieldWorld.md",
    "source": "engine/sim/fluids/VolumeFieldWorld.js",
    "import": "/engine/sim/fluids/VolumeFieldWorld.js",
    "sourceHash": "8c7ae593147280829745b4d221dc7889ac63a67a709e9b7ee180cea1c8d8a901",
    "summary": "",
    "exports": [
      {
        "name": "createVolumeFieldWorld",
        "kind": "function",
        "signature": "async createVolumeFieldWorld(gpuDevice, options = {})",
        "summary": ""
      },
      {
        "name": "destroyVolumeFieldWorld",
        "kind": "function",
        "signature": "destroyVolumeFieldWorld(world)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/fluids/index",
    "path": "engine/reference/sim/fluids/index.md",
    "source": "engine/sim/fluids/index.js",
    "import": "/engine/sim/fluids/index.js",
    "sourceHash": "1f1b7fd7938f032c46549bc767dca52171091c432a2087ee00c743f798f2ac50",
    "summary": "",
    "exports": [
      {
        "name": "FDTDSolver",
        "kind": "re-export",
        "signature": "FDTDSolver",
        "summary": ""
      },
      {
        "name": "FluidBoundary",
        "kind": "re-export",
        "signature": "FluidBoundary",
        "summary": ""
      },
      {
        "name": "FluidConfig",
        "kind": "re-export",
        "signature": "FluidConfig",
        "summary": ""
      },
      {
        "name": "FluidCpuWorld",
        "kind": "re-export",
        "signature": "FluidCpuWorld",
        "summary": ""
      },
      {
        "name": "FluidMPM",
        "kind": "re-export",
        "signature": "FluidMPM",
        "summary": ""
      },
      {
        "name": "FluidPhaseChange",
        "kind": "re-export",
        "signature": "FluidPhaseChange",
        "summary": ""
      },
      {
        "name": "FluidSimWorld",
        "kind": "re-export",
        "signature": "FluidSimWorld",
        "summary": ""
      },
      {
        "name": "FluidSimulator",
        "kind": "re-export",
        "signature": "FluidSimulator",
        "summary": ""
      },
      {
        "name": "FluidSourceSplat",
        "kind": "re-export",
        "signature": "FluidSourceSplat",
        "summary": ""
      },
      {
        "name": "FluidWorldDomain",
        "kind": "re-export",
        "signature": "FluidWorldDomain",
        "summary": ""
      },
      {
        "name": "PhasorRays",
        "kind": "re-export",
        "signature": "PhasorRays",
        "summary": ""
      },
      {
        "name": "PhotonicCrystal",
        "kind": "re-export",
        "signature": "PhotonicCrystal",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/AsyncSnapshotManager",
    "path": "engine/reference/sim/particles/AsyncSnapshotManager.md",
    "source": "engine/sim/particles/AsyncSnapshotManager.js",
    "import": "/engine/sim/particles/AsyncSnapshotManager.js",
    "sourceHash": "b8cf0c38beceec7ce27cb0b782dd74e4258e963b318d0f2fc539e9d4288b83ff",
    "summary": "AsyncSnapshotManager.js - Async wrapper for worker-based snapshot capture Coordinates between main thread (GPU readback) and worker (compression). Uses TRIPLE buffering for completely non-blocking capture: Buffer A: Being filled from GPU readback Buffer B: Being processed by worker Buffer C: Completed and ready for use This ensures the render loop NEVER waits for GPU or worker.",
    "exports": [
      {
        "name": "initAsyncSnapshotSystem",
        "kind": "function",
        "signature": "initAsyncSnapshotSystem(options = {})",
        "summary": "Initialize the async snapshot system"
      },
      {
        "name": "captureFrameAsync",
        "kind": "function",
        "signature": "async captureFrameAsync(snapshot, particleState, emitters, currentTimeMs)",
        "summary": "Capture a frame asynchronously GPU readback happens on main thread, compression in worker"
      },
      {
        "name": "captureFrameTripleBuffered",
        "kind": "function",
        "signature": "captureFrameTripleBuffered(snapshot, particleState, emitters, currentTimeMs)",
        "summary": "Triple-buffered capture - completely non-blocking Returns immediately, GPU readback and worker processing happen in background"
      },
      {
        "name": "destroyAsyncSnapshot",
        "kind": "function",
        "signature": "destroyAsyncSnapshot()",
        "summary": "Clean up"
      },
      {
        "name": "setSnapshotCaptureInterval",
        "kind": "function",
        "signature": "setSnapshotCaptureInterval(intervalMs)",
        "summary": "Set capture interval (for quality/performance tradeoff)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/AttachedParticlesCompute",
    "path": "engine/reference/sim/particles/AttachedParticlesCompute.md",
    "source": "engine/sim/particles/AttachedParticlesCompute.js",
    "import": "/engine/sim/particles/AttachedParticlesCompute.js",
    "sourceHash": "be3341f5135f54995a29790807e00e8da1f453bd3884fdc54523b6200ee7fae1",
    "summary": "",
    "exports": [
      {
        "name": "updateAttachedParticlesIntoWorld",
        "kind": "function",
        "signature": "async updateAttachedParticlesIntoWorld(gpuDevice, meshBuffers, particleWorld, attachmentBuffer, options = {})",
        "summary": ""
      },
      {
        "name": "updateAttachedParticlesIntoParticlesState",
        "kind": "function",
        "signature": "async updateAttachedParticlesIntoParticlesState(particles, meshBuffers, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/BoneAttachedParticlesCompute",
    "path": "engine/reference/sim/particles/BoneAttachedParticlesCompute.md",
    "source": "engine/sim/particles/BoneAttachedParticlesCompute.js",
    "import": "/engine/sim/particles/BoneAttachedParticlesCompute.js",
    "sourceHash": "e10ce4bd99d1972dde5a2694bc15651ff89df781bf40e7332ca70d94d31e3a11",
    "summary": "",
    "exports": [
      {
        "name": "assignParticlesToBonesIntoWorld",
        "kind": "function",
        "signature": "async assignParticlesToBonesIntoWorld(gpuDevice, boneBuffer, particleWorld, attachmentBuffer, options = {})",
        "summary": ""
      },
      {
        "name": "updateBoneAttachedParticlesIntoWorld",
        "kind": "function",
        "signature": "async updateBoneAttachedParticlesIntoWorld(gpuDevice, boneBuffer, particleWorld, attachmentBuffer, options = {})",
        "summary": ""
      },
      {
        "name": "assignParticlesToBonesIntoParticlesState",
        "kind": "function",
        "signature": "async assignParticlesToBonesIntoParticlesState(particles, boneBuffer, options = {})",
        "summary": ""
      },
      {
        "name": "updateBoneAttachedParticlesIntoParticlesState",
        "kind": "function",
        "signature": "async updateBoneAttachedParticlesIntoParticlesState(particles, boneBuffer, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/CustomSDFCollisionBridge",
    "path": "engine/reference/sim/particles/CustomSDFCollisionBridge.md",
    "source": "engine/sim/particles/CustomSDFCollisionBridge.js",
    "import": "/engine/sim/particles/CustomSDFCollisionBridge.js",
    "sourceHash": "c853d547647cfc76c04faa083b133f888d114694a04ed9fcde31b765c8a61250",
    "summary": "CustomSDFCollisionBridge.js - Bridge Custom Particle Effects to Physics Collision Ensures visual SDF and collision SDF are IDENTICAL by: 1. Generating collision shaders from the same SDF code as visual effects 2. Providing a unified API for registering custom effects with physics 3. Syncing effect parameters between render and simulation This ensures \"what you see is what collides\" - particles collide exactly with the shape that's being rendered.",
    "exports": [
      {
        "name": "generateCustomEffectCollisionShader",
        "kind": "function",
        "signature": "generateCustomEffectCollisionShader(registeredEffects)",
        "summary": "Generate collision shader that uses the SAME SDF code as visual rendering This is the key to ensuring physics matches visuals exactly"
      },
      {
        "name": "createCustomEffectCollisionSystem",
        "kind": "function",
        "signature": "createCustomEffectCollisionSystem(device, registeredEffects = [])",
        "summary": "Create custom effect collision system Uses the same SDF code as visual rendering for exact physics/visual match"
      },
      {
        "name": "addCustomEffectCollider",
        "kind": "function",
        "signature": "addCustomEffectCollider(system, device, effectId, center, radius, effectParams = [0, 0, 0, 0])",
        "summary": "Add a custom effect collider Uses the same effect ID as visual rendering for exact match"
      },
      {
        "name": "updateCustomEffectCollider",
        "kind": "function",
        "signature": "updateCustomEffectCollider(system, device, index, center, radius, effectParams)",
        "summary": "Update collider transform (for moving effects)"
      },
      {
        "name": "initCustomEffectCollisionBindGroup",
        "kind": "function",
        "signature": "initCustomEffectCollisionBindGroup(system, device, positionsBuffer, velocitiesBuffer, metaBuffer = null)",
        "summary": "Initialize bind group with particle buffers"
      },
      {
        "name": "executeCustomEffectCollision",
        "kind": "function",
        "signature": "executeCustomEffectCollision(system, device, queue, particleCount, time, dt, bounciness = 0.3, friction = 0.1, fallbackRadius = 0.1)",
        "summary": "Execute custom effect collision pass"
      },
      {
        "name": "rebuildCustomEffectCollisionSystem",
        "kind": "function",
        "signature": "rebuildCustomEffectCollisionSystem(device, existingSystem)",
        "summary": "Rebuild collision system when effects change Call this after registering new custom effects"
      },
      {
        "name": "clearCustomEffectColliders",
        "kind": "function",
        "signature": "clearCustomEffectColliders(system)",
        "summary": "Clear all colliders"
      },
      {
        "name": "destroyCustomEffectCollisionSystem",
        "kind": "function",
        "signature": "destroyCustomEffectCollisionSystem(system)",
        "summary": "Destroy system and release GPU resources"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/GPUParticleSorter",
    "path": "engine/reference/sim/particles/GPUParticleSorter.md",
    "source": "engine/sim/particles/GPUParticleSorter.js",
    "import": "/engine/sim/particles/GPUParticleSorter.js",
    "sourceHash": "d8fb6ceaa89ad7a96bc44aa4e4ba77dca78d964a5d3bea049afdcdc483af3c48",
    "summary": "",
    "exports": [
      {
        "name": "GPUParticleSorter",
        "kind": "class",
        "signature": "class GPUParticleSorter",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/MeshToParticlesCompute",
    "path": "engine/reference/sim/particles/MeshToParticlesCompute.md",
    "source": "engine/sim/particles/MeshToParticlesCompute.js",
    "import": "/engine/sim/particles/MeshToParticlesCompute.js",
    "sourceHash": "7e7fa691cf94bf23012d8c9caeeb7f1bb25612ce442cd8b3de851151b8e58ef1",
    "summary": "",
    "exports": [
      {
        "name": "createMeshParticleBuffers",
        "kind": "function",
        "signature": "createMeshParticleBuffers(device, mesh)",
        "summary": ""
      },
      {
        "name": "getAttrOffsetFloats",
        "kind": "function",
        "signature": "getAttrOffsetFloats(attributes, key)",
        "summary": ""
      },
      {
        "name": "generateMeshParticlesIntoWorld",
        "kind": "function",
        "signature": "async generateMeshParticlesIntoWorld(gpuDevice, meshBuffers, particleWorld, options = {})",
        "summary": ""
      },
      {
        "name": "generateMeshParticlesIntoParticlesState",
        "kind": "function",
        "signature": "async generateMeshParticlesIntoParticlesState(particles, meshBuffers, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/MeshToParticlesPipelineCache",
    "path": "engine/reference/sim/particles/MeshToParticlesPipelineCache.md",
    "source": "engine/sim/particles/MeshToParticlesPipelineCache.js",
    "import": "/engine/sim/particles/MeshToParticlesPipelineCache.js",
    "sourceHash": "68f12bfafe67f2ca4c9eaf80287b463515f9b81eaae60aa7c0b3e0ad5d0af7eb",
    "summary": "",
    "exports": [
      {
        "name": "prewarmMeshToParticlesPipeline",
        "kind": "function",
        "signature": "async prewarmMeshToParticlesPipeline(gpuDevice)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleAdaptiveSubstep",
    "path": "engine/reference/sim/particles/ParticleAdaptiveSubstep.md",
    "source": "engine/sim/particles/ParticleAdaptiveSubstep.js",
    "import": "/engine/sim/particles/ParticleAdaptiveSubstep.js",
    "sourceHash": "a567cdddbd2ee784ffd32c5bd2f83fd34d738e94eb12a5d0487902a4e6de6046",
    "summary": "ParticleAdaptiveSubstep.js - Adaptive Substeps with CFL Condition (GAP 20) Automatically determines the number of simulation substeps per frame based on the maximum particle velocity (CFL condition), preventing tunneling for fast particles without wasting substeps on slow ones. CFL: dt_sub = cellSize * cflFactor / maxSpeed Substeps = ceil(dt_frame / dt_sub), clamped to [minSubsteps, maxSubsteps] Uses GPU readback of max velocity (from indirect dispatch counters or a separate reduction pass) when available, falls back to CPU-side estimate. Ref: Houdini POP Solver CFL, PhysX particle substeps",
    "exports": [
      {
        "name": "createAdaptiveSubstepController",
        "kind": "function",
        "signature": "createAdaptiveSubstepController(config = {})",
        "summary": "Create an adaptive substep controller."
      },
      {
        "name": "computeAdaptiveSubsteps",
        "kind": "function",
        "signature": "computeAdaptiveSubsteps(controller, frameDt, maxSpeed)",
        "summary": "Compute the number of substeps needed for this frame."
      },
      {
        "name": "estimateMaxSpeedCPU",
        "kind": "function",
        "signature": "estimateMaxSpeedCPU(velocityData, particleCount, sampleCount = 256)",
        "summary": "Estimate max particle speed from CPU-side velocity data. Use this as fallback when GPU readback is not available."
      },
      {
        "name": "resetAdaptiveSubsteps",
        "kind": "function",
        "signature": "resetAdaptiveSubsteps(controller)",
        "summary": "Reset the controller state."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleAdvanced",
    "path": "engine/reference/sim/particles/ParticleAdvanced.md",
    "source": "engine/sim/particles/ParticleAdvanced.js",
    "import": "/engine/sim/particles/ParticleAdvanced.js",
    "sourceHash": "f8b5e46d39b950fd58d722f2139738525e4b4408b70ab514601d46dde14c5211",
    "summary": "ParticleAdvanced.js - GPU Sorting, Chunked Buffers, Wire Constraints, SDF Collision Advanced particle system features: - Bitonic GPU sorting for transparency - Chunked buffer management for 100M+ particles - Wire/spring constraints between particles - SDF mesh collision - GPU particle seeding - Volumetric lighting integration",
    "exports": [
      {
        "name": "createGPUSortSystem",
        "kind": "function",
        "signature": "createGPUSortSystem(device, maxParticles)",
        "summary": "Create GPU sorting system for transparent particle rendering"
      },
      {
        "name": "initSortBindGroup",
        "kind": "function",
        "signature": "initSortBindGroup(sortSystem, device, positionsBuffer)",
        "summary": "Initialize sort bind group with position buffer"
      },
      {
        "name": "executeGPUSort",
        "kind": "function",
        "signature": "executeGPUSort(sortSystem, device, particleCount, cameraPos)",
        "summary": "Execute GPU sort pass"
      },
      {
        "name": "createChunkedBufferSystem",
        "kind": "function",
        "signature": "createChunkedBufferSystem(device, maxParticles, bytesPerParticle = 16)",
        "summary": "Create chunked particle buffer system for 100M+ particles"
      },
      {
        "name": "getChunkForParticle",
        "kind": "function",
        "signature": "getChunkForParticle(chunkedSystem, particleIndex)",
        "summary": "Get chunk index for a particle index"
      },
      {
        "name": "getLocalIndex",
        "kind": "function",
        "signature": "getLocalIndex(chunkedSystem, particleIndex)",
        "summary": "Get local index within a chunk"
      },
      {
        "name": "destroyChunkedBufferSystem",
        "kind": "function",
        "signature": "destroyChunkedBufferSystem(chunkedSystem)",
        "summary": "Destroy chunked buffer system"
      },
      {
        "name": "createWireConstraintSystem",
        "kind": "function",
        "signature": "createWireConstraintSystem(device, maxWires = 10000)",
        "summary": "Create wire constraint system"
      },
      {
        "name": "addWireConstraint",
        "kind": "function",
        "signature": "addWireConstraint(wireSystem, device, particleA, particleB, restLength, stiffness = 0.5)",
        "summary": "Add a wire constraint between two particles"
      },
      {
        "name": "initWireBindGroup",
        "kind": "function",
        "signature": "initWireBindGroup(wireSystem, device, positionsBuffer, velocitiesBuffer)",
        "summary": "Initialize wire constraint bind group"
      },
      {
        "name": "solveWireConstraints",
        "kind": "function",
        "signature": "solveWireConstraints(wireSystem, device, iterations = 4)",
        "summary": "Solve wire constraints"
      },
      {
        "name": "createSDFCollisionSystem",
        "kind": "function",
        "signature": "createSDFCollisionSystem(device, initialCapacity = 64)",
        "summary": "Create SDF collision system"
      },
      {
        "name": "addSDFCollider",
        "kind": "function",
        "signature": "addSDFCollider(sdfSystem, device, type, center, radius, halfExtents = [1, 1, 1])",
        "summary": "Add an SDF collider"
      },
      {
        "name": "clearSDFColliders",
        "kind": "function",
        "signature": "clearSDFColliders(sdfSystem)",
        "summary": "Clear all SDF colliders (for per-frame rebuild from entity shapes)"
      },
      {
        "name": "rebuildSDFColliders",
        "kind": "function",
        "signature": "rebuildSDFColliders(sdfSystem, device, colliders)",
        "summary": "Batch-write SDF colliders from an array of collider descriptors. Much more efficient than calling addSDFCollider() in a loop."
      },
      {
        "name": "initSDFBindGroup",
        "kind": "function",
        "signature": "initSDFBindGroup(sdfSystem, device, positionsBuffer, velocitiesBuffer, metaBuffer = null)",
        "summary": "Initialize SDF collision bind group"
      },
      {
        "name": "executeSDFCollision",
        "kind": "function",
        "signature": "executeSDFCollision(sdfSystem, device, particleCount, bounciness = 0.3, friction = 0.1, options = {})",
        "summary": "Execute SDF collision pass"
      },
      {
        "name": "createSeedingSystem",
        "kind": "function",
        "signature": "createSeedingSystem(device)",
        "summary": "Create GPU particle seeding system"
      },
      {
        "name": "initSeedingBindGroup",
        "kind": "function",
        "signature": "initSeedingBindGroup(seedSystem, device, positionsBuffer, velocitiesBuffer)",
        "summary": "Initialize seeding bind group"
      },
      {
        "name": "seedParticlesGPU",
        "kind": "function",
        "signature": "seedParticlesGPU(seedSystem, device, particleCount, options = {})",
        "summary": "Seed particles on GPU"
      },
      {
        "name": "createVolumetricLightingSystem",
        "kind": "function",
        "signature": "createVolumetricLightingSystem(device, maxParticles)",
        "summary": "Create volumetric lighting system for particles"
      },
      {
        "name": "initVolumetricBindGroup",
        "kind": "function",
        "signature": "initVolumetricBindGroup(volSystem, device, positionsBuffer, thermalBuffer, velocitiesBuffer)",
        "summary": "Initialize volumetric lighting bind group"
      },
      {
        "name": "computeVolumetricLighting",
        "kind": "function",
        "signature": "computeVolumetricLighting(volSystem, device, particleCount, lightPos, lightColor, options = {})",
        "summary": "Compute volumetric lighting for particles"
      },
      {
        "name": "createDepthCollisionSystem",
        "kind": "function",
        "signature": "createDepthCollisionSystem(device, maxParticles)",
        "summary": "Create depth buffer collision system. Bind group is created separately via initDepthCollisionBindGroup (recreate on depth texture resize)."
      },
      {
        "name": "initDepthCollisionBindGroup",
        "kind": "function",
        "signature": "initDepthCollisionBindGroup(system, device, positionsBuffer, velocitiesBuffer, depthTextureView)",
        "summary": "Initialize or recreate the depth collision bind group. Must be called whenever the depth texture changes (e.g., on window resize)."
      },
      {
        "name": "executeDepthCollision",
        "kind": "function",
        "signature": "executeDepthCollision(system, device, particleCount, viewProj, invViewProj, options = {})",
        "summary": "Execute depth buffer collision compute pass."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleAttributeReader",
    "path": "engine/reference/sim/particles/ParticleAttributeReader.md",
    "source": "engine/sim/particles/ParticleAttributeReader.js",
    "import": "/engine/sim/particles/ParticleAttributeReader.js",
    "sourceHash": "489ec800ab3d1e0e1ec3e0bea254ec1eaee32cc71304cb81412696b92d8bc2cf",
    "summary": "ParticleAttributeReader.js - Cross-Emitter Attribute Reader (GAP 21) Allows one emitter to read particle data from another emitter's buffers. Enables leader-follower, flocking, synchronized multi-layer effects. Matches Niagara's Particle Attribute Reader data interface. Two modes: 1. Direct index: read specific particle by index (leader-follower) 2. Nearest query: find closest particle to a given position (via spatial grid) Usage: const reader = createAttributeReader(sourceWorld); // In consumer emitter logic: const pos = readParticlePosition(reader, particleIndex); const vel = readParticleVelocity(reader, particleIndex); const nearest = findNearestParticle(reader, queryPos);",
    "exports": [
      {
        "name": "createAttributeReader",
        "kind": "function",
        "signature": "createAttributeReader(sourceWorld, options = {})",
        "summary": "Create an attribute reader bound to a source particle world."
      },
      {
        "name": "refreshAttributeCache",
        "kind": "function",
        "signature": "async refreshAttributeCache(reader, frameIndex)",
        "summary": "Refresh CPU-side cache from GPU buffers (async). Call once per frame before reading attributes."
      },
      {
        "name": "readParticlePosition",
        "kind": "function",
        "signature": "readParticlePosition(reader, index)",
        "summary": "Read a particle's position and age."
      },
      {
        "name": "readParticleVelocity",
        "kind": "function",
        "signature": "readParticleVelocity(reader, index)",
        "summary": "Read a particle's velocity and lifetime."
      },
      {
        "name": "readParticleMeta",
        "kind": "function",
        "signature": "readParticleMeta(reader, index)",
        "summary": "Read a particle's color and packed meta."
      },
      {
        "name": "findNearestParticle",
        "kind": "function",
        "signature": "findNearestParticle(reader, queryPos, maxParticles)",
        "summary": "Find the nearest alive particle to a query position (brute force). For large counts, use the spatial grid instead."
      },
      {
        "name": "findParticlesInRadius",
        "kind": "function",
        "signature": "findParticlesInRadius(reader, queryPos, radius, maxResults = 32)",
        "summary": "Find all particles within a radius of a query position."
      },
      {
        "name": "destroyAttributeReader",
        "kind": "function",
        "signature": "destroyAttributeReader(reader)",
        "summary": "Destroy the reader."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleAudioBridge",
    "path": "engine/reference/sim/particles/ParticleAudioBridge.md",
    "source": "engine/sim/particles/ParticleAudioBridge.js",
    "import": "/engine/sim/particles/ParticleAudioBridge.js",
    "sourceHash": "c900b09bddf0e4c9b178db0075f54a6f3f8902655fdab24567e994cb63a1214b",
    "summary": "ParticleAudioBridge.js - Real-Time Procedural Spatial Audio for Particle Systems Zero-latency audio driven by GPU particle events via onParticleEvent callbacks. Every collision triggers sound immediately — no polling, no timers. Architecture informed by FMOD, PopcornFX, and Web Audio API perf research: - HRTF panning — binaural left/right ear simulation with elevation + front/back cues - Spatial clustering — nearby same-material impacts merge into single louder sound - Priority classes — critical/high/normal/low tiers (FMOD-style, not just volume) - Fade-out on voice steal — 5ms gain ramp prevents audible clicks - Separate ambient bus — continuous loops bypass transient compressor (no pumping) - Listener orientation — correct panning from camera forward/up vectors - Shared AudioContext — accepts external context to avoid browser resource limits - Per-material spatial cooldown — dedupes only within a radius, not globally - Dynamic compressor on impact bus — tames peak transients without affecting ambients Usage: const bridge = createAudioBridge({ maxVoices: 32, maxDistance: 100 }); wireEventCallbacks(bridge, world.eventSystem, getMaterialForEvent); // Per-frame (for ambient loops + listener tracking): updateListenerFromCamera(bridge, camera); updateEmitterAmbients(bridge, emitters); // Cleanup: destroyAudioBridge(bridge);",
    "exports": [
      {
        "name": "createAudioBridge",
        "kind": "function",
        "signature": "createAudioBridge(config = {})",
        "summary": "Create an audio bridge with full voice management."
      },
      {
        "name": "destroyAudioBridge",
        "kind": "function",
        "signature": "destroyAudioBridge(bridge)",
        "summary": "Destroy the bridge and release all audio resources."
      },
      {
        "name": "setAudioListenerPos",
        "kind": "function",
        "signature": "setAudioListenerPos(bridge, x, y, z)",
        "summary": ""
      },
      {
        "name": "updateListenerFromCamera",
        "kind": "function",
        "signature": "updateListenerFromCamera(bridge, camera)",
        "summary": "Update listener from a camera object. Sets both position AND orientation for correct spatial panning (research: without orientation, all panning is wrong)."
      },
      {
        "name": "flushImpactBatches",
        "kind": "function",
        "signature": "flushImpactBatches(bridge)",
        "summary": ""
      },
      {
        "name": "triggerImpact",
        "kind": "function",
        "signature": "triggerImpact(bridge, material, position, speed = 2, temperature = 300, priorityClass = PRIORITY_NORMAL, velocity = null)",
        "summary": "Trigger an impact sound immediately. Used for reaction events and manual triggers. For collision/death events, use the batched system (flushImpactBatches) instead."
      },
      {
        "name": "wireEventCallbacks",
        "kind": "function",
        "signature": "wireEventCallbacks(bridge, eventSystem, getMaterial)",
        "summary": "Wire the bridge into the ParticleEventSystem via onParticleEvent callbacks. Fires immediately when readbackEvents completes — zero polling, zero timers. Registers for collision events (type 2, 3) and death events (type 1)."
      },
      {
        "name": "unwireEventCallbacks",
        "kind": "function",
        "signature": "unwireEventCallbacks(bridge)",
        "summary": "Unwire event callbacks (for cleanup). Actually removes the callback functions from the event system's callback arrays."
      },
      {
        "name": "updateAmbientLoop",
        "kind": "function",
        "signature": "updateAmbientLoop(bridge, emitterId, material, position, params = {})",
        "summary": ""
      },
      {
        "name": "stopAmbientLoop",
        "kind": "function",
        "signature": "stopAmbientLoop(bridge, emitterId)",
        "summary": ""
      },
      {
        "name": "stopAllAmbientLoops",
        "kind": "function",
        "signature": "stopAllAmbientLoops(bridge)",
        "summary": ""
      },
      {
        "name": "stopAllSounds",
        "kind": "function",
        "signature": "stopAllSounds(bridge)",
        "summary": "Immediately silence ALL particle audio — impacts + ambients. Called when the editor exits play mode (Stop button)."
      },
      {
        "name": "updateEmitterAmbients",
        "kind": "function",
        "signature": "updateEmitterAmbients(bridge, emitters)",
        "summary": ""
      },
      {
        "name": "setParticleAudioVolume",
        "kind": "function",
        "signature": "setParticleAudioVolume(bridge, volume)",
        "summary": ""
      },
      {
        "name": "setReverbParams",
        "kind": "function",
        "signature": "setReverbParams(bridge, params = {})",
        "summary": "Update reverb parameters at runtime (e.g., when entering a cave or outdoor area)."
      },
      {
        "name": "setImpactVolume",
        "kind": "function",
        "signature": "setImpactVolume(bridge, volume)",
        "summary": "Set impact bus volume independently (0-1). Smoothed to avoid zipper noise."
      },
      {
        "name": "setAmbientVolume",
        "kind": "function",
        "signature": "setAmbientVolume(bridge, volume)",
        "summary": "Set ambient bus volume independently (0-1). Smoothed to avoid zipper noise."
      },
      {
        "name": "resumeAudioContext",
        "kind": "function",
        "signature": "resumeAudioContext(bridge)",
        "summary": "Resume AudioContext after browser autoplay policy suspension. Research (Chrome/Safari): Context starts 'suspended' until user gesture. Call this from your first click/keydown handler."
      },
      {
        "name": "autoUnlockAudioContext",
        "kind": "function",
        "signature": "autoUnlockAudioContext(bridge)",
        "summary": "Auto-unlock AudioContext on first user interaction (Safari/iOS workaround). Research (Matt Montag): Safari requires resume() from touch/click handler. Registers one-shot listeners that self-remove after first successful resume."
      },
      {
        "name": "pauseAllAudio",
        "kind": "function",
        "signature": "pauseAllAudio(bridge)",
        "summary": "Pause all audio (suspend context). Use when tab hidden or game paused. Research (web.dev Fieldrunners): every game should pause audio on tab hide to prevent wasted CPU and audio buildup."
      },
      {
        "name": "resumeAllAudio",
        "kind": "function",
        "signature": "resumeAllAudio(bridge)",
        "summary": "Resume all audio after pause."
      },
      {
        "name": "hookVisibilityAutoPause",
        "kind": "function",
        "signature": "hookVisibilityAutoPause(bridge)",
        "summary": "Hook into Page Visibility API to auto-pause/resume audio. Call once after createAudioBridge."
      },
      {
        "name": "getAudioBridgeStats",
        "kind": "function",
        "signature": "getAudioBridgeStats(bridge)",
        "summary": ""
      },
      {
        "name": "setOcclusionCallback",
        "kind": "function",
        "signature": "setOcclusionCallback(bridge, fn)",
        "summary": "Set an occlusion callback. The function receives (sourcePos, listenerPos) and returns 0-1 (0=fully occluded, 1=clear). Used to modulate LPF cutoff for obstruction. Game code provides the raycast logic; audio system just applies the result."
      },
      {
        "name": "soloMaterial",
        "kind": "function",
        "signature": "soloMaterial(bridge, patchKey)",
        "summary": "Debug: solo a specific material (only that material plays). Pass null to clear."
      },
      {
        "name": "muteMaterial",
        "kind": "function",
        "signature": "muteMaterial(bridge, patchKey)",
        "summary": "Debug: mute a specific material. Pass null to unmute all."
      },
      {
        "name": "resetAudioBridgeStats",
        "kind": "function",
        "signature": "resetAudioBridgeStats(bridge)",
        "summary": "Reset per-frame stats counters for delta profiling. Call after getAudioBridgeStats each frame."
      },
      {
        "name": "registerAudioCue",
        "kind": "function",
        "signature": "registerAudioCue()",
        "summary": ""
      },
      {
        "name": "processAudioEvents",
        "kind": "function",
        "signature": "processAudioEvents()",
        "summary": ""
      },
      {
        "name": "flushPendingAudio",
        "kind": "function",
        "signature": "flushPendingAudio()",
        "summary": ""
      },
      {
        "name": "unregisterAudioCue",
        "kind": "function",
        "signature": "unregisterAudioCue()",
        "summary": ""
      },
      {
        "name": "processParticleEvents",
        "kind": "function",
        "signature": "processParticleEvents()",
        "summary": ""
      },
      {
        "name": "PRIORITY_CRITICAL",
        "kind": "constant",
        "signature": "PRIORITY_CRITICAL",
        "summary": ""
      },
      {
        "name": "PRIORITY_HIGH",
        "kind": "constant",
        "signature": "PRIORITY_HIGH",
        "summary": ""
      },
      {
        "name": "PRIORITY_NORMAL",
        "kind": "constant",
        "signature": "PRIORITY_NORMAL",
        "summary": ""
      },
      {
        "name": "PRIORITY_LOW",
        "kind": "constant",
        "signature": "PRIORITY_LOW",
        "summary": ""
      },
      {
        "name": "PRIORITY_AMBIENT",
        "kind": "constant",
        "signature": "PRIORITY_AMBIENT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleBonds",
    "path": "engine/reference/sim/particles/ParticleBonds.md",
    "source": "engine/sim/particles/ParticleBonds.js",
    "import": "/engine/sim/particles/ParticleBonds.js",
    "sourceHash": "6dadff8e5d6710eaf288c3775f6cb08e74d1b59b7451e232abf33d6956c091fc",
    "summary": "ParticleBonds.js - Dynamic Bond Formation & Breaking System Manages runtime creation and destruction of particle bonds (WELD, STICKY constraints) driven by proximity, temperature, and particle flags. Features: - Bond formation: WELDABLE particles within threshold + temperature conditions → WELD constraint - Bond breaking: Constraints with FLAG_BROKEN get cleaned up + optional break effects - Temperature-driven dynamics: Freezing forms bonds, melting breaks them - Rate limiting: Max bonds per frame to prevent GPU stalls",
    "exports": [
      {
        "name": "createBondSystem",
        "kind": "function",
        "signature": "createBondSystem(world)",
        "summary": "Create a bond management system."
      },
      {
        "name": "stepBondFormation",
        "kind": "function",
        "signature": "stepBondFormation(world, bondSystem, options = {})",
        "summary": "Attempt to form bonds between nearby particles. Called each frame from the simulation loop."
      },
      {
        "name": "stepBondBreaking",
        "kind": "function",
        "signature": "stepBondBreaking(world, bondSystem, options = {})",
        "summary": "Process broken bonds and clean them up. Call after constraint solver has run."
      },
      {
        "name": "stepBondSystem",
        "kind": "function",
        "signature": "stepBondSystem(world, bondSystem, options = {})",
        "summary": "Step the full bond system (formation + breaking)."
      },
      {
        "name": "getBondStats",
        "kind": "function",
        "signature": "getBondStats(bondSystem)",
        "summary": "Get bond system stats."
      },
      {
        "name": "destroyBondSystem",
        "kind": "function",
        "signature": "destroyBondSystem(bondSystem)",
        "summary": "Destroy bond system and clear all bonds."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleChemistry",
    "path": "engine/reference/sim/particles/ParticleChemistry.md",
    "source": "engine/sim/particles/ParticleChemistry.js",
    "import": "/engine/sim/particles/ParticleChemistry.js",
    "sourceHash": "01d855dd87f332decf685bac74ff66d2bd9aee35ca4ad2c48a960635693b0407",
    "summary": "ParticleChemistry.js - Chemical Reaction System (GAP 38) GPU compute: valence-electron driven bond formation/breaking. Bonds form when electronegativity difference permits, release/absorb energy that feeds directly into the thermal system. Features: - Valence electron tracking per particle (from element table) - Bond formation: electronegativity difference → ionic vs covalent - Reaction energy ΔH → feeds thermal buffer - Temperature-dependent reaction rate (Arrhenius: k = A·e^(-Ea/RT)) - Bond dissociation at high temperature - Uses neighbor grid (GAP 25) for spatial queries - Outputs bond pairs to CPU for constraint creation (GAP existing) Two-pass approach: Pass 1 (GPU): scan neighbors, compute bond eligibility, write bond candidates Pass 2 (CPU): read back candidates, create constraints, update valence Usage: const chem = createChemistrySystem(device, maxParticles); initChemistryBindGroups(chem, device, posBuffer, velBuffer, gridBuffers, elementTable); executeChemistry(chem, device, particleCount, dt);",
    "exports": [
      {
        "name": "createChemistrySystem",
        "kind": "function",
        "signature": "createChemistrySystem(device, maxParticles)",
        "summary": "Create the chemistry system."
      },
      {
        "name": "initChemistryBindGroups",
        "kind": "function",
        "signature": "initChemistryBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers, elementTable, thermalBuffer)",
        "summary": "Initialize bind groups."
      },
      {
        "name": "initParticleValence",
        "kind": "function",
        "signature": "initParticleValence(system, device, elementData, startIndex, count)",
        "summary": "Initialize valence electrons for a range of particles based on their element."
      },
      {
        "name": "executeChemistry",
        "kind": "function",
        "signature": "executeChemistry(system, device, particleCount, dt)",
        "summary": "Execute chemistry compute (bond formation + dissociation)."
      },
      {
        "name": "getValenceBuffer",
        "kind": "function",
        "signature": "getValenceBuffer(system)",
        "summary": "Get the valence buffer for external use."
      },
      {
        "name": "destroyChemistrySystem",
        "kind": "function",
        "signature": "destroyChemistrySystem(system)",
        "summary": "Destroy."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleClassifier",
    "path": "engine/reference/sim/particles/ParticleClassifier.md",
    "source": "engine/sim/particles/ParticleClassifier.js",
    "import": "/engine/sim/particles/ParticleClassifier.js",
    "sourceHash": "2f3955f4ed42318faa3a9867f2dc7200af0abd4113df2c29d5b07caf3202e855",
    "summary": "ParticleClassifier.js - GPU Particle Classification for Fluid Rendering Classifies each liquid particle into categories based on SPH density and velocity. Used by renderers to route particles to different visual styles: - Bulk fluid → SSFR surface rendering (smooth continuous surface) - Surface → SSFR + edge highlight - Spray → Small SDF billboard with fading alpha - Foam → White-tinted SDF billboard on surface - Bubble → Tiny transparent rising sphere Output: per-particle u32 classification buffer (binding for vertex shaders). Classification IDs: 0 = unclassified / non-liquid 1 = bulk (dense interior) 2 = surface (boundary) 3 = spray (isolated, fast) 4 = foam (isolated, slow, near surface) 5 = bubble (isolated, rising) Usage: const cls = createClassifierSystem(device, maxParticles); initClassifierBindGroups(cls, device, posBuffer, velBuffer, thermalBuffer, sphDensityBuffer); executeClassifier(cls, device, particleCount); // cls.classBuffer is a storage buffer readable by vertex shaders",
    "exports": [
      {
        "name": "createClassifierSystem",
        "kind": "function",
        "signature": "createClassifierSystem(device, maxParticles)",
        "summary": "Create the classifier system."
      },
      {
        "name": "initClassifierBindGroups",
        "kind": "function",
        "signature": "initClassifierBindGroups(system, device, positionBuffer, velocityBuffer, thermalBuffer, sphDensityBuffer)",
        "summary": "Initialize bind groups."
      },
      {
        "name": "executeClassifier",
        "kind": "function",
        "signature": "executeClassifier(system, device, particleCount)",
        "summary": "Execute the classification compute pass."
      },
      {
        "name": "getClassificationBuffer",
        "kind": "function",
        "signature": "getClassificationBuffer(system)",
        "summary": "Get the classification buffer for use by renderers."
      },
      {
        "name": "setClassifierParams",
        "kind": "function",
        "signature": "setClassifierParams(system, config)",
        "summary": "Update classifier thresholds at runtime."
      },
      {
        "name": "destroyClassifierSystem",
        "kind": "function",
        "signature": "destroyClassifierSystem(system)",
        "summary": "Destroy classifier system."
      },
      {
        "name": "CLASS_NONE",
        "kind": "constant",
        "signature": "CLASS_NONE",
        "summary": ""
      },
      {
        "name": "CLASS_BULK",
        "kind": "constant",
        "signature": "CLASS_BULK",
        "summary": ""
      },
      {
        "name": "CLASS_SURFACE",
        "kind": "constant",
        "signature": "CLASS_SURFACE",
        "summary": ""
      },
      {
        "name": "CLASS_SPRAY",
        "kind": "constant",
        "signature": "CLASS_SPRAY",
        "summary": ""
      },
      {
        "name": "CLASS_FOAM",
        "kind": "constant",
        "signature": "CLASS_FOAM",
        "summary": ""
      },
      {
        "name": "CLASS_BUBBLE",
        "kind": "constant",
        "signature": "CLASS_BUBBLE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleColorGradient",
    "path": "engine/reference/sim/particles/ParticleColorGradient.md",
    "source": "engine/sim/particles/ParticleColorGradient.js",
    "import": "/engine/sim/particles/ParticleColorGradient.js",
    "sourceHash": "d4c21a3e1d17794ce0947485cc381194801a0ac7a8d8a0dc3b68b834330fc82e",
    "summary": "ParticleColorGradient.js - N-point color gradient for particles Niagara/PopcornFX parity: arbitrary color ramps over particle lifetime. Replaces the 2-point linear (color → colorEnd) with full gradient control. CPU builds a 1D RGBA LUT texture, GPU samples with t = age/lifetime. Usage: const grad = createColorGradient([ { t: 0.0, color: [1, 0.6, 0.1, 0.0] },  // orange, transparent { t: 0.2, color: [1, 0.8, 0.2, 1.0] },  // bright yellow, full { t: 0.7, color: [0.8, 0.2, 0.0, 0.8] }, // red { t: 1.0, color: [0.3, 0.3, 0.3, 0.0] }, // grey smoke, fade out ]); const texture = uploadGradientTexture(device, grad);",
    "exports": [
      {
        "name": "createColorGradient",
        "kind": "function",
        "signature": "createColorGradient(stops, resolution = 64)",
        "summary": "Create a color gradient from an array of color stops Each color is [r, g, b] or [r, g, b, a] with values 0-1"
      },
      {
        "name": "sampleGradient",
        "kind": "function",
        "signature": "sampleGradient(stops, t)",
        "summary": "Sample a color gradient at a given t value"
      },
      {
        "name": "uploadGradientTexture",
        "kind": "function",
        "signature": "uploadGradientTexture(device, gradient)",
        "summary": "Upload a color gradient as a 1D GPU texture for shader sampling"
      },
      {
        "name": "destroyGradientTexture",
        "kind": "function",
        "signature": "destroyGradientTexture(gradientTexture)",
        "summary": "Destroy a gradient texture"
      },
      {
        "name": "gradientFromLegacy",
        "kind": "function",
        "signature": "gradientFromLegacy(color, colorEnd, alphaOverLife = [1, 1, 1])",
        "summary": "Convert a legacy color/colorEnd pair to a gradient"
      },
      {
        "name": "GRADIENT_PRESETS",
        "kind": "constant",
        "signature": "GRADIENT_PRESETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleCompression",
    "path": "engine/reference/sim/particles/ParticleCompression.md",
    "source": "engine/sim/particles/ParticleCompression.js",
    "import": "/engine/sim/particles/ParticleCompression.js",
    "sourceHash": "95ff42d96eaaff126c69e17a74133b3d39cfe6676c1e34ed6fd84126986e0a9a",
    "summary": "ParticleCompression.js - Compression utilities for particle snapshots Extracted from ParticleSnapshotDelta.js for modularity Includes: - Run-length encoding - Variable-length integer packing - PCA + DCT compression - Position/velocity quantization - Interpolation algorithms",
    "exports": [
      {
        "name": "runLengthEncode",
        "kind": "function",
        "signature": "runLengthEncode(indices)",
        "summary": ""
      },
      {
        "name": "runLengthDecode",
        "kind": "function",
        "signature": "runLengthDecode(encoded)",
        "summary": ""
      },
      {
        "name": "packSmallIntegers",
        "kind": "function",
        "signature": "packSmallIntegers(values)",
        "summary": ""
      },
      {
        "name": "unpackSmallIntegers",
        "kind": "function",
        "signature": "unpackSmallIntegers(packed)",
        "summary": ""
      },
      {
        "name": "computeCovarianceMatrix",
        "kind": "function",
        "signature": "computeCovarianceMatrix(trajectories)",
        "summary": ""
      },
      {
        "name": "powerIteration",
        "kind": "function",
        "signature": "powerIteration(matrix, iterations = 20)",
        "summary": ""
      },
      {
        "name": "dct1d",
        "kind": "function",
        "signature": "dct1d(signal)",
        "summary": ""
      },
      {
        "name": "idct1d",
        "kind": "function",
        "signature": "idct1d(coeffs)",
        "summary": ""
      },
      {
        "name": "quantizeDCT",
        "kind": "function",
        "signature": "quantizeDCT(coeffs, retention = 0.7)",
        "summary": ""
      },
      {
        "name": "quantizeFloat",
        "kind": "function",
        "signature": "quantizeFloat(value, range)",
        "summary": ""
      },
      {
        "name": "dequantizeFloat",
        "kind": "function",
        "signature": "dequantizeFloat(quantized, range)",
        "summary": ""
      },
      {
        "name": "quantizePosition",
        "kind": "function",
        "signature": "quantizePosition(x, y, z, age)",
        "summary": ""
      },
      {
        "name": "quantizeVelocity",
        "kind": "function",
        "signature": "quantizeVelocity(vx, vy, vz, lifetime)",
        "summary": ""
      },
      {
        "name": "dequantizePosition",
        "kind": "function",
        "signature": "dequantizePosition(quantized)",
        "summary": ""
      },
      {
        "name": "dequantizeVelocity",
        "kind": "function",
        "signature": "dequantizeVelocity(quantized)",
        "summary": ""
      },
      {
        "name": "quantizePositionArray",
        "kind": "function",
        "signature": "quantizePositionArray(positions)",
        "summary": ""
      },
      {
        "name": "quantizeVelocityArray",
        "kind": "function",
        "signature": "quantizeVelocityArray(velocities)",
        "summary": ""
      },
      {
        "name": "dequantizePositionArray",
        "kind": "function",
        "signature": "dequantizePositionArray(quantized)",
        "summary": ""
      },
      {
        "name": "dequantizeVelocityArray",
        "kind": "function",
        "signature": "dequantizeVelocityArray(quantized)",
        "summary": ""
      },
      {
        "name": "catmullRomInterpolate",
        "kind": "function",
        "signature": "catmullRomInterpolate(p0, p1, p2, p3, t, tension = 0.5)",
        "summary": ""
      },
      {
        "name": "hermiteInterpolate",
        "kind": "function",
        "signature": "hermiteInterpolate(p0, p1, v0, v1, t)",
        "summary": ""
      },
      {
        "name": "entropyEncodeResiduals",
        "kind": "function",
        "signature": "entropyEncodeResiduals(residuals)",
        "summary": ""
      },
      {
        "name": "entropyDecodeResiduals",
        "kind": "function",
        "signature": "entropyDecodeResiduals(encoded, length)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleConfig",
    "path": "engine/reference/sim/particles/ParticleConfig.md",
    "source": "engine/sim/particles/ParticleConfig.js",
    "import": "/engine/sim/particles/ParticleConfig.js",
    "sourceHash": "ca35999d7de429af97a3250bd3842a22a33bbbafbce0e4750165099c2e8b12df",
    "summary": "",
    "exports": [
      {
        "name": "DEFAULT_MAX_PARTICLES",
        "kind": "constant",
        "signature": "DEFAULT_MAX_PARTICLES",
        "summary": ""
      },
      {
        "name": "PARTICLE_CONFIG",
        "kind": "constant",
        "signature": "PARTICLE_CONFIG",
        "summary": ""
      },
      {
        "name": "WORKGROUP_SIZES",
        "kind": "constant",
        "signature": "WORKGROUP_SIZES",
        "summary": ""
      },
      {
        "name": "EMITTER_CONFIG_SCHEMA",
        "kind": "re-export",
        "signature": "EMITTER_CONFIG_SCHEMA",
        "summary": ""
      },
      {
        "name": "PARTICLE_BEHAVIORS",
        "kind": "re-export",
        "signature": "PARTICLE_BEHAVIORS",
        "summary": ""
      },
      {
        "name": "PARTICLE_BUFFER_SCHEMA",
        "kind": "re-export",
        "signature": "PARTICLE_BUFFER_SCHEMA",
        "summary": ""
      },
      {
        "name": "PARTICLE_PARAMS_SCHEMA",
        "kind": "re-export",
        "signature": "PARTICLE_PARAMS_SCHEMA",
        "summary": ""
      },
      {
        "name": "PARTICLE_SHAPES",
        "kind": "re-export",
        "signature": "PARTICLE_SHAPES",
        "summary": ""
      },
      {
        "name": "RENDER_MODES",
        "kind": "re-export",
        "signature": "RENDER_MODES",
        "summary": ""
      },
      {
        "name": "createDefaultEmitterConfig",
        "kind": "re-export",
        "signature": "createDefaultEmitterConfig",
        "summary": ""
      },
      {
        "name": "createDefaultParticleParams",
        "kind": "re-export",
        "signature": "createDefaultParticleParams",
        "summary": ""
      },
      {
        "name": "getBehaviorId",
        "kind": "re-export",
        "signature": "getBehaviorId",
        "summary": ""
      },
      {
        "name": "getRenderModeId",
        "kind": "re-export",
        "signature": "getRenderModeId",
        "summary": ""
      },
      {
        "name": "getShapeId",
        "kind": "re-export",
        "signature": "getShapeId",
        "summary": ""
      },
      {
        "name": "packParticleMeta",
        "kind": "re-export",
        "signature": "packParticleMeta",
        "summary": ""
      },
      {
        "name": "unpackParticleMeta",
        "kind": "re-export",
        "signature": "unpackParticleMeta",
        "summary": ""
      },
      {
        "name": "validateEmitterConfig",
        "kind": "re-export",
        "signature": "validateEmitterConfig",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleConstraints",
    "path": "engine/reference/sim/particles/ParticleConstraints.md",
    "source": "engine/sim/particles/ParticleConstraints.js",
    "import": "/engine/sim/particles/ParticleConstraints.js",
    "sourceHash": "94bb33c6ed35815e5fa87c36c77dd5fa49c5de6ac489301dadb21841fb5176f0",
    "summary": "ParticleConstraints.js - GPU Constraint Solver for Rope/Wire/Cloth Unified constraint system for particle-based physics: - Distance constraints (maintain rest length between particles) - Attachment constraints (pin particle to world position) - Angle constraints (maintain angle between 3 particles) [future] - Bending constraints (maintain curvature) [future] Part of the Unified Rope-Particle System (Phase 2)",
    "exports": [
      {
        "name": "createRopeConstraintSystem",
        "kind": "function",
        "signature": "createRopeConstraintSystem(device, maxConstraints = 100000)",
        "summary": "Create rope/constraint solver system"
      },
      {
        "name": "initRopeConstraintBindGroup",
        "kind": "function",
        "signature": "initRopeConstraintBindGroup(system, device, positionsBuffer, velocitiesBuffer, thermalBuffer)",
        "summary": "Initialize constraint system bind group"
      },
      {
        "name": "addDistanceConstraint",
        "kind": "function",
        "signature": "addDistanceConstraint(system, device, particleA, particleB, restLength, stiffness = 0.9)",
        "summary": "Add a distance constraint between two particles"
      },
      {
        "name": "addAttachmentConstraint",
        "kind": "function",
        "signature": "addAttachmentConstraint(system, device, particleIndex, worldPos, stiffness = 1.0)",
        "summary": "Add an attachment constraint (pin to world position)"
      },
      {
        "name": "addRopeInextensibleConstraint",
        "kind": "function",
        "signature": "addRopeInextensibleConstraint(system, device, particleA, particleB, restLength, opts = {})",
        "summary": "Add a rope inextensible constraint (mass-aware, with breaking support)"
      },
      {
        "name": "updateAttachmentTarget",
        "kind": "function",
        "signature": "updateAttachmentTarget(system, device, constraintIndex, worldPos)",
        "summary": "Update an attachment constraint's target position"
      },
      {
        "name": "updateRopeConstraintPhysics",
        "kind": "function",
        "signature": "updateRopeConstraintPhysics(system, device, constraintIndex, opts)",
        "summary": "Update rope constraint physics properties"
      },
      {
        "name": "addBendingConstraint",
        "kind": "function",
        "signature": "addBendingConstraint(system, device, particleA, particleB, particleC, restAngle = Math.PI, opts = {})",
        "summary": "Add a bending/angle constraint between 3 particles - UNTESTED Maintains angle at center particle (particleB)"
      },
      {
        "name": "addSpringConstraint",
        "kind": "function",
        "signature": "addSpringConstraint(system, device, particleA, particleB, restLength, opts = {})",
        "summary": "Add a spring constraint - UNTESTED Unlike distance, springs can compress AND extend (Hooke's law)"
      },
      {
        "name": "addStickyConstraint",
        "kind": "function",
        "signature": "addStickyConstraint(system, device, particleA, target, opts = {})",
        "summary": "Add a sticky/adhesion constraint - UNTESTED Particle sticks to a world position or another particle"
      },
      {
        "name": "addCohesionConstraint",
        "kind": "function",
        "signature": "addCohesionConstraint(system, device, particleA, particleB, opts = {})",
        "summary": "Add a cohesion constraint - UNTESTED Particles attract each other within a radius (like water droplets)"
      },
      {
        "name": "addCollisionConstraint",
        "kind": "function",
        "signature": "addCollisionConstraint(system, device, particleA, particleB, opts = {})",
        "summary": "Add a collision constraint - UNTESTED Particle-particle collision with friction and restitution (bounce)"
      },
      {
        "name": "addWeldConstraint",
        "kind": "function",
        "signature": "addWeldConstraint(system, device, particleA, particleB, restDistance = 0)",
        "summary": "Add a weld constraint - UNTESTED Permanently joins two particles (rigid connection)"
      },
      {
        "name": "applyMaterialPreset",
        "kind": "function",
        "signature": "applyMaterialPreset(system, device, presetName, constraintIndices)",
        "summary": "Apply a material preset to particle constraints - UNTESTED"
      },
      {
        "name": "createRopeConstraints",
        "kind": "function",
        "signature": "createRopeConstraints(system, device, particleStart, particleCount, opts = {})",
        "summary": "Create all constraints for a rope"
      },
      {
        "name": "solveRopeConstraints",
        "kind": "function",
        "signature": "solveRopeConstraints(system, device, iterations = 8, dt = 1/60, opts = {})",
        "summary": "Solve all constraints with rope physics options"
      },
      {
        "name": "clearRopeConstraints",
        "kind": "function",
        "signature": "clearRopeConstraints(system, entityId)",
        "summary": "Clear all constraints for a rope"
      },
      {
        "name": "destroyRopeConstraintSystem",
        "kind": "function",
        "signature": "destroyRopeConstraintSystem(system)",
        "summary": "Destroy constraint system"
      },
      {
        "name": "CONSTRAINT_TYPE",
        "kind": "constant",
        "signature": "CONSTRAINT_TYPE",
        "summary": ""
      },
      {
        "name": "PARTICLE_FLAGS",
        "kind": "constant",
        "signature": "PARTICLE_FLAGS",
        "summary": ""
      },
      {
        "name": "CHAIN_PHYSICS_DEFAULTS",
        "kind": "constant",
        "signature": "CHAIN_PHYSICS_DEFAULTS",
        "summary": ""
      },
      {
        "name": "ROPE_PHYSICS_DEFAULTS",
        "kind": "constant",
        "signature": "ROPE_PHYSICS_DEFAULTS",
        "summary": ""
      },
      {
        "name": "PARTICLE_MATERIAL_PRESETS",
        "kind": "constant",
        "signature": "PARTICLE_MATERIAL_PRESETS",
        "summary": ""
      },
      {
        "name": "PHASE_SOLID",
        "kind": "constant",
        "signature": "PHASE_SOLID",
        "summary": ""
      },
      {
        "name": "PHASE_LIQUID",
        "kind": "constant",
        "signature": "PHASE_LIQUID",
        "summary": ""
      },
      {
        "name": "PHASE_GAS",
        "kind": "constant",
        "signature": "PHASE_GAS",
        "summary": ""
      },
      {
        "name": "PHASE_PLASMA",
        "kind": "constant",
        "signature": "PHASE_PLASMA",
        "summary": ""
      },
      {
        "name": "THERMAL_MATERIAL_PRESETS",
        "kind": "constant",
        "signature": "THERMAL_MATERIAL_PRESETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleDecalSpawner",
    "path": "engine/reference/sim/particles/ParticleDecalSpawner.md",
    "source": "engine/sim/particles/ParticleDecalSpawner.js",
    "import": "/engine/sim/particles/ParticleDecalSpawner.js",
    "sourceHash": "f5fae34903db83f2089be5c1b5d4b53d8f10011fc08eb23eddb5f67cb6b96869",
    "summary": "ParticleDecalSpawner.js - Spawn Decals from Particle Collisions (GAP 22) Consumes GPU event readback data (collision events) to spawn projected texture decals at impact points. Integrates with the GPU event system (GAP 6) via CPU readback callbacks. Each collision event provides: position, velocity (impact direction), and event type. The spawner creates decal descriptors that the game's decal system can render (projected quads aligned to surface normal). Usage: const spawner = createDecalSpawner({ maxDecals: 200 }); // Register with event system: onParticleEvent(world.eventSystem, (events) => { feedCollisionEvents(spawner, events); }); // Each frame: const decals = getActiveDecals(spawner); // Render decals with your decal system",
    "exports": [
      {
        "name": "createDecalSpawner",
        "kind": "function",
        "signature": "createDecalSpawner(config = {})",
        "summary": "Create a decal spawner with a fixed-size ring buffer pool."
      },
      {
        "name": "feedCollisionEvents",
        "kind": "function",
        "signature": "feedCollisionEvents(spawner, eventData, eventCount, options = {})",
        "summary": "Feed collision events from GPU event readback into the decal spawner. Events are expected to be Float32Array with 8 floats per event: [posX, posY, posZ, velX, velY, velZ, eventType, particleIndex]"
      },
      {
        "name": "updateDecals",
        "kind": "function",
        "signature": "updateDecals(spawner, dt)",
        "summary": "Update decal ages, fade, and expire old decals."
      },
      {
        "name": "getActiveDecals",
        "kind": "function",
        "signature": "getActiveDecals(spawner)",
        "summary": "Get all active decals as an array of descriptors."
      },
      {
        "name": "getDecalCount",
        "kind": "function",
        "signature": "getDecalCount(spawner)",
        "summary": "Get active decal count."
      },
      {
        "name": "clearDecals",
        "kind": "function",
        "signature": "clearDecals(spawner)",
        "summary": "Clear all decals."
      },
      {
        "name": "destroyDecalSpawner",
        "kind": "function",
        "signature": "destroyDecalSpawner(spawner)",
        "summary": "Destroy the spawner."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleEffects",
    "path": "engine/reference/sim/particles/ParticleEffects.md",
    "source": "engine/sim/particles/ParticleEffects.js",
    "import": "/engine/sim/particles/ParticleEffects.js",
    "sourceHash": "fdc0158736d07c5cab9c3a9be97e8fdd48085932ff0b70a78c6d3a9406ba75a5",
    "summary": "Create force point buffer for attractors/repellers Each force point: [x, y, z, strength] where negative = repel",
    "exports": [
      {
        "name": "createForcePointBuffer",
        "kind": "function",
        "signature": "createForcePointBuffer(device, maxPoints = MAX_FORCE_POINTS)",
        "summary": "Create force point buffer for attractors/repellers Each force point: [x, y, z, strength] where negative = repel"
      },
      {
        "name": "updateForcePoints",
        "kind": "function",
        "signature": "updateForcePoints(device, buffer, forcePoints)",
        "summary": "Update force points in the buffer"
      },
      {
        "name": "calculateDissolve",
        "kind": "function",
        "signature": "calculateDissolve(startTime, duration, direction = 'in')",
        "summary": "Calculate dissolve factor for fade in/out"
      },
      {
        "name": "processSubEmitters",
        "kind": "function",
        "signature": "processSubEmitters(particles, subEmitterConfig, currentTime)",
        "summary": "Process sub-emitter spawning from dead particles This CPU fallback scans all slots and has 1-2 frame latency from GPU readback."
      },
      {
        "name": "createTrailBuffer",
        "kind": "function",
        "signature": "createTrailBuffer(device, maxParticles, historyLength = 8)",
        "summary": "Create trail history buffer Stores N previous positions per particle for trail rendering"
      },
      {
        "name": "generateParticleAtlas",
        "kind": "function",
        "signature": "generateParticleAtlas(device, size = 512, tilesPerRow = 4)",
        "summary": "Generate a procedural particle texture atlas"
      },
      {
        "name": "SUB_EMITTER_EVENTS",
        "kind": "constant",
        "signature": "SUB_EMITTER_EVENTS",
        "summary": "Sub-emitter configuration"
      },
      {
        "name": "PARTICLE_TEXTURES",
        "kind": "constant",
        "signature": "PARTICLE_TEXTURES",
        "summary": "Particle texture atlas configuration"
      },
      {
        "name": "BITONIC_SORT_SHADER",
        "kind": "re-export",
        "signature": "BITONIC_SORT_SHADER",
        "summary": ""
      },
      {
        "name": "CURL_NOISE_SNIPPET",
        "kind": "re-export",
        "signature": "CURL_NOISE_SNIPPET",
        "summary": ""
      },
      {
        "name": "FORCE_POINTS_SNIPPET",
        "kind": "re-export",
        "signature": "FORCE_POINTS_SNIPPET",
        "summary": ""
      },
      {
        "name": "LINE_COMPUTE_SHADER",
        "kind": "re-export",
        "signature": "LINE_COMPUTE_SHADER",
        "summary": ""
      },
      {
        "name": "LINE_RENDER_SHADER",
        "kind": "re-export",
        "signature": "LINE_RENDER_SHADER",
        "summary": ""
      },
      {
        "name": "MAX_FORCE_POINTS",
        "kind": "re-export",
        "signature": "MAX_FORCE_POINTS",
        "summary": ""
      },
      {
        "name": "MOUSE_INTERACTION_SNIPPET",
        "kind": "re-export",
        "signature": "MOUSE_INTERACTION_SNIPPET",
        "summary": ""
      },
      {
        "name": "TRAIL_UPDATE_SNIPPET",
        "kind": "re-export",
        "signature": "TRAIL_UPDATE_SNIPPET",
        "summary": ""
      },
      {
        "name": "VOLUMETRIC_LIGHTING_SNIPPET",
        "kind": "re-export",
        "signature": "VOLUMETRIC_LIGHTING_SNIPPET",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleElectromagnetic",
    "path": "engine/reference/sim/particles/ParticleElectromagnetic.md",
    "source": "engine/sim/particles/ParticleElectromagnetic.js",
    "import": "/engine/sim/particles/ParticleElectromagnetic.js",
    "sourceHash": "0845b909409efb75663fe99711b052e45ca94ef2fe97ef5319c0e8e0846773b7",
    "summary": "ParticleElectromagnetic.js - Electromagnetic Forces (GAP 35) GPU compute: Coulomb electrostatic + Lorentz magnetic force. F_coulomb = k · q₁·q₂ / r²  (along r) F_lorentz = q · (v × B)       (perpendicular to v and B) Per-particle charge from element table (GAP 33) charge buffer. Optional: sample E/H fields from FDTDSolver.js if attached. Uses neighbor grid (GAP 25) for O(N) spatial queries. Debye shielding at high density to prevent runaway forces. Usage: const em = createElectromagneticSystem(device, maxParticles); initEMBindGroups(em, device, positionBuffer, velocityBuffer, gridBuffers, chargeBuffer); setExternalField(em, { Ex, Ey, Ez, Bx, By, Bz }); executeElectromagnetic(em, device, particleCount, dt);",
    "exports": [
      {
        "name": "createElectromagneticSystem",
        "kind": "function",
        "signature": "createElectromagneticSystem(device, maxParticles)",
        "summary": "Create the electromagnetic system."
      },
      {
        "name": "initEMBindGroups",
        "kind": "function",
        "signature": "initEMBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers, chargeBuffer, thermalBuffer)",
        "summary": "Initialize bind groups."
      },
      {
        "name": "setExternalField",
        "kind": "function",
        "signature": "setExternalField(system, fields)",
        "summary": "Set external E and B fields."
      },
      {
        "name": "executeElectromagnetic",
        "kind": "function",
        "signature": "executeElectromagnetic(system, device, particleCount, dt)",
        "summary": "Execute the electromagnetic compute pass."
      },
      {
        "name": "destroyElectromagneticSystem",
        "kind": "function",
        "signature": "destroyElectromagneticSystem(system)",
        "summary": "Destroy."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleElementRegistry",
    "path": "engine/reference/sim/particles/ParticleElementRegistry.md",
    "source": "engine/sim/particles/ParticleElementRegistry.js",
    "import": "/engine/sim/particles/ParticleElementRegistry.js",
    "sourceHash": "2d10dd544d2720d8578380d870de3ff85819f1e2c946d8ac813ce2b9f7e6fe27",
    "summary": "ParticleElementRegistry.js - Unified Element Registry Bridges the two previously disconnected element systems: - Particle ELEMENTS (fire, water, magic, smoke) from ParticleEmitterSystem.js - Spell SPELL_ELEMENTS (fire, ice, lightning, arcane, nature, dark, holy) from SpellGenerator.js Each unified element defines particle properties (color, materialIndex, temperature, physics modifiers), spell properties (spellColors, effects, damageType), and combination rules (from SpellElementMixer). Also provides bridge functions: - elementMixToEmitterConfig(elements[]) → full emitter config derived from mix - getElementCombination(a, b) → combination result",
    "exports": [
      {
        "name": "setRegistryTrace",
        "kind": "function",
        "signature": "setRegistryTrace(enabled, throttleMs = 500)",
        "summary": "Enable or disable element registry trace logging. When enabled, logs every element mix derivation with full pipeline details."
      },
      {
        "name": "getRegistryElement",
        "kind": "function",
        "signature": "getRegistryElement(id)",
        "summary": "Get a registry element by ID. Handles backward-compat aliases (e.g., \"magic\" → \"arcane\"). Falls back to REACTION_PRODUCTS for byproduct IDs (e.g., \"smoke\")."
      },
      {
        "name": "isPrimaryElement",
        "kind": "function",
        "signature": "isPrimaryElement(id)",
        "summary": "Check if an element ID is a primary element (user-selectable) vs reaction product."
      },
      {
        "name": "getAllRegistryElements",
        "kind": "function",
        "signature": "getAllRegistryElements()",
        "summary": "Get all registry elements as an array."
      },
      {
        "name": "getRegistryElementsByCategory",
        "kind": "function",
        "signature": "getRegistryElementsByCategory()",
        "summary": "Get element IDs grouped by category."
      },
      {
        "name": "getElementCombination",
        "kind": "function",
        "signature": "getElementCombination(elementA, elementB)",
        "summary": "Look up the combination result for two elements."
      },
      {
        "name": "getCombinationsFor",
        "kind": "function",
        "signature": "getCombinationsFor(elementId)",
        "summary": "Get all combinations involving a specific element."
      },
      {
        "name": "elementMixToEmitterConfig",
        "kind": "function",
        "signature": "elementMixToEmitterConfig(elements)",
        "summary": "Given an array of active element layers [{id, power, enabled}], derive a complete emitter property set: color, colorEnd, temperature, materialIndex, gravityMod, and combination info. This replaces the separate deriveColorFromElements + deriveTemperatureFromElements + deriveMaterialIndexFromElements calls with one unified function."
      },
      {
        "name": "metaSlidersToPhysics",
        "kind": "function",
        "signature": "metaSlidersToPhysics(meta)",
        "summary": "Convert meta-slider values (Intensity 0-1, Spread 0-1, Lifetime 0-1) into concrete emitter physics parameters. Used by Simple Mode to provide easy controls."
      },
      {
        "name": "elementMixToSpellParams",
        "kind": "function",
        "signature": "elementMixToSpellParams(elements)",
        "summary": "Convert an active element mix into spell generator parameters. Used by the \"Create Spell From This\" button."
      },
      {
        "name": "REGISTRY_ELEMENTS",
        "kind": "constant",
        "signature": "REGISTRY_ELEMENTS",
        "summary": ""
      },
      {
        "name": "REACTION_PRODUCTS",
        "kind": "constant",
        "signature": "REACTION_PRODUCTS",
        "summary": ""
      },
      {
        "name": "AUTO_BYPRODUCTS",
        "kind": "constant",
        "signature": "AUTO_BYPRODUCTS",
        "summary": ""
      },
      {
        "name": "COMBINATION_BYPRODUCTS",
        "kind": "constant",
        "signature": "COMBINATION_BYPRODUCTS",
        "summary": ""
      },
      {
        "name": "ELEMENT_ALIASES",
        "kind": "constant",
        "signature": "ELEMENT_ALIASES",
        "summary": ""
      },
      {
        "name": "ELEMENT_COMBINATIONS",
        "kind": "constant",
        "signature": "ELEMENT_COMBINATIONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleElementTable",
    "path": "engine/reference/sim/particles/ParticleElementTable.md",
    "source": "engine/sim/particles/ParticleElementTable.js",
    "import": "/engine/sim/particles/ParticleElementTable.js",
    "sourceHash": "90c1935622e7ef7859d64c104df6aab1a6f3b67d535bdd049292f502151c2f97",
    "summary": "ParticleElementTable.js - Element Property System / Periodic Table (GAP 33) Data foundation for universal matter simulation. Every other physics system (Lennard-Jones, Coulomb, SPH, Chemistry) reads element properties from here. Provides: - Full periodic table data for 118 elements - Per-particle element buffer (GPU storage, u32 per particle) - Element lookup by atomic number or symbol - Common molecule/compound presets - LJ parameters (epsilon, sigma) per element - Integration with existing thermal material system Usage: const table = createElementTable(device, maxParticles); setParticleElement(table, device, particleIndex, ELEMENTS.Fe); const iron = getElement(26); // by atomic number const gold = getElementBySymbol('Au');",
    "exports": [
      {
        "name": "getElement",
        "kind": "function",
        "signature": "getElement(atomicNumber)",
        "summary": "Get element by atomic number (1-118)."
      },
      {
        "name": "getElementBySymbol",
        "kind": "function",
        "signature": "getElementBySymbol(symbol)",
        "summary": "Get element by symbol ('H', 'Fe', 'Au', etc.)."
      },
      {
        "name": "getAllElements",
        "kind": "function",
        "signature": "getAllElements()",
        "summary": "Get all elements."
      },
      {
        "name": "ljMixingRule",
        "kind": "function",
        "signature": "ljMixingRule(z1, z2)",
        "summary": "Compute Lennard-Jones cross-interaction parameters using Lorentz-Berthelot rules."
      },
      {
        "name": "createElementTable",
        "kind": "function",
        "signature": "createElementTable(device, maxParticles)",
        "summary": "Create the element table system with per-particle element buffer."
      },
      {
        "name": "setParticleElements",
        "kind": "function",
        "signature": "setParticleElements(system, device, startIndex, count, atomicNumber)",
        "summary": "Set element type for a range of particles."
      },
      {
        "name": "setParticleCharges",
        "kind": "function",
        "signature": "setParticleCharges(system, device, startIndex, count, charge)",
        "summary": "Set charge for a range of particles (overrides element default)."
      },
      {
        "name": "destroyElementTable",
        "kind": "function",
        "signature": "destroyElementTable(system)",
        "summary": "Destroy the element table system."
      },
      {
        "name": "ELEMENTS",
        "kind": "constant",
        "signature": "ELEMENTS",
        "summary": "Quick access: ELEMENTS.H = 1, ELEMENTS.Fe = 26, etc."
      },
      {
        "name": "MOLECULE_PRESETS",
        "kind": "constant",
        "signature": "MOLECULE_PRESETS",
        "summary": "Common molecule presets — arrays of { element, count, charge }."
      },
      {
        "name": "ELEMENT_LUT_WGSL",
        "kind": "constant",
        "signature": "ELEMENT_LUT_WGSL",
        "summary": "WGSL struct and accessor for element LUT. Bind elementLUT as storage buffer, elementTypes and charges as storage buffers."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleEmitterLOD",
    "path": "engine/reference/sim/particles/ParticleEmitterLOD.md",
    "source": "engine/sim/particles/ParticleEmitterLOD.js",
    "import": "/engine/sim/particles/ParticleEmitterLOD.js",
    "sourceHash": "6178a093a2da8c2aba13a3e3ff0919844f24c28e93050270d96e13e26b2db91d",
    "summary": "ParticleEmitterLOD.js - Emitter-Level LOD System (GAP 19) Distance/screen-size based LOD for particle emitters. Unlike per-particle quality fade, this operates at the EMITTER level: - Reduce spawn rate by LOD tier - Disable expensive features (collision, turbulence) at distance - Switch renderer (billboard → point → cull) by distance - Scale particle lifetime to reduce total particle count Matches Niagara scalability / PopcornFX LOD layers. Usage: const lod = createEmitterLOD({ tiers: [...] }); // Each frame: const tier = evaluateEmitterLOD(lod, cameraPos, emitterPos); // Use tier.spawnRateScale, tier.features, etc. to drive emitter config",
    "exports": [
      {
        "name": "createEmitterLOD",
        "kind": "function",
        "signature": "createEmitterLOD(config = {})",
        "summary": "Create an emitter LOD controller."
      },
      {
        "name": "evaluateEmitterLOD",
        "kind": "function",
        "signature": "evaluateEmitterLOD(lod, cameraPos, emitterPos, dt = 1/60)",
        "summary": "Evaluate LOD tier for an emitter based on camera distance. Returns the active tier config with interpolated values."
      },
      {
        "name": "evaluateEmitterLODByScreenSize",
        "kind": "function",
        "signature": "evaluateEmitterLODByScreenSize(lod, screenSize, screenThresholds)",
        "summary": "Evaluate LOD by screen-space size instead of distance. Useful for effects that vary in world scale."
      },
      {
        "name": "getCurrentLODTier",
        "kind": "function",
        "signature": "getCurrentLODTier(lod)",
        "summary": "Get the current LOD tier without re-evaluation."
      },
      {
        "name": "setForcedLODTier",
        "kind": "function",
        "signature": "setForcedLODTier(lod, tierIndex)",
        "summary": "Force a specific LOD tier."
      },
      {
        "name": "DEFAULT_LOD_TIERS",
        "kind": "constant",
        "signature": "DEFAULT_LOD_TIERS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleEmitterSystem",
    "path": "engine/reference/sim/particles/ParticleEmitterSystem.md",
    "source": "engine/sim/particles/ParticleEmitterSystem.js",
    "import": "/engine/sim/particles/ParticleEmitterSystem.js",
    "sourceHash": "a630d7934bb38580c11c734eb5f0efff8f9ea9b8a178534f9c87c3b9a1effd84",
    "summary": "Resolve a substance string to { atomicNumber, temperature, charge, element }. Accepts element symbols (\"Fe\"), compound keys (\"H2O\"), preset names (\"fire\"), or null.",
    "exports": [
      {
        "name": "resolveSubstance",
        "kind": "function",
        "signature": "resolveSubstance(substance)",
        "summary": "Resolve a substance string to { atomicNumber, temperature, charge, element }. Accepts element symbols (\"Fe\"), compound keys (\"H2O\"), preset names (\"fire\"), or null."
      },
      {
        "name": "deriveState",
        "kind": "function",
        "signature": "deriveState(temperature, element)",
        "summary": "Derive the state of matter from temperature and element melt/boil points."
      },
      {
        "name": "derivePhysicsProfile",
        "kind": "function",
        "signature": "derivePhysicsProfile(substance, temperatureOverride)",
        "summary": "Derive which physics systems an emitter needs based on substance + temperature. Returns a physics profile object."
      },
      {
        "name": "deriveColorFromElements",
        "kind": "function",
        "signature": "deriveColorFromElements(elements)",
        "summary": "Derive color from element layers (weighted blend)"
      },
      {
        "name": "deriveTemperatureFromElements",
        "kind": "function",
        "signature": "deriveTemperatureFromElements(elements)",
        "summary": ""
      },
      {
        "name": "deriveMaterialIndexFromElements",
        "kind": "function",
        "signature": "deriveMaterialIndexFromElements(elements)",
        "summary": "Derive materialIndex from element layers (picks highest-power element's material)"
      },
      {
        "name": "getStates",
        "kind": "function",
        "signature": "getStates()",
        "summary": "Get available states of matter"
      },
      {
        "name": "getElements",
        "kind": "function",
        "signature": "getElements()",
        "summary": "Get available elements"
      },
      {
        "name": "getPresetList",
        "kind": "function",
        "signature": "getPresetList()",
        "summary": "Get all presets grouped by category for UI consumption."
      },
      {
        "name": "applyPreset",
        "kind": "function",
        "signature": "applyPreset(emitterCfg, presetKey)",
        "summary": "Apply a preset to an emitter config object, mutating it in place. Sets substance, temperature, charge, emitter type, elements, and physics."
      },
      {
        "name": "getEmitterTypes",
        "kind": "function",
        "signature": "getEmitterTypes()",
        "summary": "Get available emitter type IDs."
      },
      {
        "name": "getEmitterPreset",
        "kind": "function",
        "signature": "getEmitterPreset(typeId)",
        "summary": "Get emitter type preset by ID."
      },
      {
        "name": "normalizeElementPower",
        "kind": "function",
        "signature": "normalizeElementPower(elementPower)",
        "summary": ""
      },
      {
        "name": "mixElementPower",
        "kind": "function",
        "signature": "mixElementPower(a, b, options = {})",
        "summary": ""
      },
      {
        "name": "buildEffectKeyFromElements",
        "kind": "function",
        "signature": "buildEffectKeyFromElements(elementPower, options = {})",
        "summary": ""
      },
      {
        "name": "computeVisualPower",
        "kind": "function",
        "signature": "computeVisualPower(elementPower, options = {})",
        "summary": ""
      },
      {
        "name": "createEmittersForEffect",
        "kind": "function",
        "signature": "createEmittersForEffect(effectId, options = {})",
        "summary": ""
      },
      {
        "name": "createEmitter",
        "kind": "function",
        "signature": "createEmitter(options = {})",
        "summary": "============================================================================ CREATE PARTICLE EMITTER ============================================================================ Creates an emitter instance from a preset type. The emitter controls all aspects of its particles: visual appearance, physics, and timing."
      },
      {
        "name": "stepEmitters",
        "kind": "function",
        "signature": "stepEmitters(emitters, particleWorld, dt, options = {})",
        "summary": "Step all emitters and emit particles into the particle world. Returns the number of new particles emitted."
      },
      {
        "name": "updateParticleCounts",
        "kind": "function",
        "signature": "updateParticleCounts(particles, currentTime)",
        "summary": "Update particle counts by scanning for dead particles. Adds dead slots to freeSlots array and updates live/dead counts. Call this periodically (e.g., every 0.5s) to refresh counts."
      },
      {
        "name": "ageAndCullParticles",
        "kind": "function",
        "signature": "ageAndCullParticles(particles, hiddenDuration, options = {})",
        "summary": "Age all particles by a given duration and cull those that died. Call this when resuming from hidden/minimized to skip dead particles."
      },
      {
        "name": "initSlotTracking",
        "kind": "function",
        "signature": "initSlotTracking(particles, maxCount)",
        "summary": "Initialize slot tracking for a particle system. Call once after creating particles state."
      },
      {
        "name": "buildColliderBuffer",
        "kind": "function",
        "signature": "buildColliderBuffer(particleWorld, entities, options = {})",
        "summary": "Build AABB collider buffer from ECS entities for particle collisions. Returns the number of colliders written."
      },
      {
        "name": "buildFluidSources",
        "kind": "function",
        "signature": "buildFluidSources(emitters, options = {})",
        "summary": "Build fluid sources from emitters for density splatting."
      },
      {
        "name": "SUBSTANCE_PRESETS",
        "kind": "constant",
        "signature": "SUBSTANCE_PRESETS",
        "summary": ""
      },
      {
        "name": "ELEMENTS",
        "kind": "constant",
        "signature": "ELEMENTS",
        "summary": ""
      },
      {
        "name": "STATES",
        "kind": "constant",
        "signature": "STATES",
        "summary": ""
      },
      {
        "name": "EMITTER_TYPES",
        "kind": "constant",
        "signature": "EMITTER_TYPES",
        "summary": ""
      },
      {
        "name": "EMITTER_PRESETS",
        "kind": "constant",
        "signature": "EMITTER_PRESETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleEulerianFluid",
    "path": "engine/reference/sim/particles/ParticleEulerianFluid.md",
    "source": "engine/sim/particles/ParticleEulerianFluid.js",
    "import": "/engine/sim/particles/ParticleEulerianFluid.js",
    "sourceHash": "60141cf590a4049dca8aea9fac4785881a208d5707529c23ed1f25a8df1f03a8",
    "summary": "ParticleEulerianFluid.js - Self-Contained Eulerian Fluid Solver (GAP 32) GPU grid-based 3D fluid simulation using the Stable Fluids algorithm: 1. Advect velocity field (semi-Lagrangian) 2. Apply external forces (buoyancy, source injection) 3. Compute divergence 4. Pressure solve (Jacobi iteration) 5. Subtract pressure gradient (make divergence-free) 6. Advect density/temperature fields Particles can sample this velocity field via the existing fluidVelocity binding in ParticleSimWorld (attachFluidWorld). Matches Niagara Fluids Grid3D Gas simulation. Usage: const fluid = createEulerianFluidSolver(device, { gridSize: [32, 32, 32] }); addFluidSource(fluid, { position: [0, 0, 0], density: 1, temperature: 500 }); // Each frame: stepEulerianFluid(fluid, device, dt); // Connect to particles: attachFluidWorld(particleWorld, fluid, worldMin, worldMax);",
    "exports": [
      {
        "name": "createEulerianFluidSolver",
        "kind": "function",
        "signature": "createEulerianFluidSolver(device, config = {})",
        "summary": "Create a self-contained Eulerian fluid solver."
      },
      {
        "name": "initFluidBindGroups",
        "kind": "function",
        "signature": "initFluidBindGroups(solver)",
        "summary": "Build bind groups (call once after creation)."
      },
      {
        "name": "addFluidSource",
        "kind": "function",
        "signature": "addFluidSource(solver, source)",
        "summary": "Add a fluid source (emitter of density/temperature/velocity)."
      },
      {
        "name": "stepEulerianFluid",
        "kind": "function",
        "signature": "stepEulerianFluid(solver, device, dt)",
        "summary": "Step the fluid simulation."
      },
      {
        "name": "destroyEulerianFluidSolver",
        "kind": "function",
        "signature": "destroyEulerianFluidSolver(solver)",
        "summary": "Destroy the solver."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleEventSpawn",
    "path": "engine/reference/sim/particles/ParticleEventSpawn.md",
    "source": "engine/sim/particles/ParticleEventSpawn.js",
    "import": "/engine/sim/particles/ParticleEventSpawn.js",
    "sourceHash": "3999d8b2ff2d2e4376b5153f7919253b04fc4e39a98f370ee7617b7abeb9b67b",
    "summary": "ParticleEventSpawn.js - GPU-driven sub-emitter spawning from particle events Exceeds Niagara parity: Niagara events are CPU-only, this is fully GPU. Zero-frame latency — sub-particles appear the same frame as the trigger event. Pipeline: 1. Main sim shader appends events to eventBuffer (death, collision, kill zone) 2. IndirectDispatch builds freeList of dead particle slot indices 3. THIS SHADER reads events + consumes free slots + writes new particles Each workgroup handles one event. Threads within the workgroup spawn sub-particles. Free slots are consumed atomically from the free list (no CPU involvement).",
    "exports": [
      {
        "name": "createEventSpawnSystem",
        "kind": "function",
        "signature": "createEventSpawnSystem(device, options = {})",
        "summary": "Create the GPU event spawn system"
      },
      {
        "name": "initEventSpawnBindGroups",
        "kind": "function",
        "signature": "initEventSpawnBindGroups(system, world)",
        "summary": "Initialize bind groups for the event spawn system"
      },
      {
        "name": "setEventSpawnConfig",
        "kind": "function",
        "signature": "setEventSpawnConfig(system, config = {})",
        "summary": "Update sub-emitter spawn configuration"
      },
      {
        "name": "executeEventSpawn",
        "kind": "function",
        "signature": "executeEventSpawn(encoder, system, world)",
        "summary": "Execute the event spawn compute pass Call AFTER stepParticleSimWorld (events generated) and AFTER executeIndirectScan (free list built)"
      },
      {
        "name": "destroyEventSpawnSystem",
        "kind": "function",
        "signature": "destroyEventSpawnSystem(system)",
        "summary": "Destroy event spawn system"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleEventSystem",
    "path": "engine/reference/sim/particles/ParticleEventSystem.md",
    "source": "engine/sim/particles/ParticleEventSystem.js",
    "import": "/engine/sim/particles/ParticleEventSystem.js",
    "sourceHash": "0359af12a5f05e92acd2b8acd0728114023eac573c38ca4ba1078573826db3ae",
    "summary": "ParticleEventSystem.js - GPU Particle Event System (exceeds Niagara parity) Niagara events are CPU-only. This system is fully GPU-driven with zero-frame latency. Architecture: 1. Main sim shader appends events to eventBuffer (death, collision, kill zone) 2. IndirectDispatch builds freeList of dead particle slot indices 3. EventSpawn compute shader reads events + consumes free slots + writes new particles 4. (Optional) CPU readback for gameplay callbacks (sound, damage, etc.) Usage: const evtSys = initParticleEventSystem(world); registerEventHandler(evtSys, { event: 'death', subCount: 4, speed: 2 }); // In render loop (after stepParticleSimWorld + executeIndirectScan): stepEventSystem(evtSys, world); // Optional async readback for gameplay: const events = await readbackEvents(evtSys);",
    "exports": [
      {
        "name": "initParticleEventSystem",
        "kind": "function",
        "signature": "initParticleEventSystem(world, options = {})",
        "summary": "Initialize the GPU particle event system on a particle world. Call after createParticleSimWorld + initAllAdvancedSystems (needs indirectSystem.freeList)."
      },
      {
        "name": "registerEventHandler",
        "kind": "function",
        "signature": "registerEventHandler(system, config = {})",
        "summary": "Register/update the sub-emitter event handler configuration."
      },
      {
        "name": "onParticleEvent",
        "kind": "function",
        "signature": "onParticleEvent(system, eventType, callback)",
        "summary": "Register a CPU callback for a specific event type (called after readback)"
      },
      {
        "name": "offParticleEvent",
        "kind": "function",
        "signature": "offParticleEvent(system, eventType)",
        "summary": "Remove all callbacks for an event type"
      },
      {
        "name": "stepEventSystem",
        "kind": "function",
        "signature": "stepEventSystem(system)",
        "summary": "Step the event system: execute GPU event spawn. Call AFTER stepParticleSimWorld + executeIndirectScan."
      },
      {
        "name": "readbackEvents",
        "kind": "function",
        "signature": "async readbackEvents(system)",
        "summary": "Async readback of particle events from GPU for gameplay callbacks. Returns array of events. Tolerates 1-2 frame latency."
      },
      {
        "name": "getLastEvents",
        "kind": "function",
        "signature": "getLastEvents(system)",
        "summary": "Get the last readback events (non-async, returns cached result)"
      },
      {
        "name": "enableEventSystem",
        "kind": "function",
        "signature": "enableEventSystem(system)",
        "summary": ""
      },
      {
        "name": "disableEventSystem",
        "kind": "function",
        "signature": "disableEventSystem(system)",
        "summary": ""
      },
      {
        "name": "destroyParticleEventSystem",
        "kind": "function",
        "signature": "destroyParticleEventSystem(system)",
        "summary": ""
      },
      {
        "name": "EVENT_DEATH",
        "kind": "constant",
        "signature": "EVENT_DEATH",
        "summary": ""
      },
      {
        "name": "EVENT_GROUND_COLLISION",
        "kind": "constant",
        "signature": "EVENT_GROUND_COLLISION",
        "summary": ""
      },
      {
        "name": "EVENT_ENTITY_COLLISION",
        "kind": "constant",
        "signature": "EVENT_ENTITY_COLLISION",
        "summary": ""
      },
      {
        "name": "EVENT_KILL_ZONE",
        "kind": "constant",
        "signature": "EVENT_KILL_ZONE",
        "summary": ""
      },
      {
        "name": "EVENT_REACTION",
        "kind": "constant",
        "signature": "EVENT_REACTION",
        "summary": ""
      },
      {
        "name": "EVENT_MASK_DEATH",
        "kind": "constant",
        "signature": "EVENT_MASK_DEATH",
        "summary": ""
      },
      {
        "name": "EVENT_MASK_GROUND_COLLISION",
        "kind": "constant",
        "signature": "EVENT_MASK_GROUND_COLLISION",
        "summary": ""
      },
      {
        "name": "EVENT_MASK_ENTITY_COLLISION",
        "kind": "constant",
        "signature": "EVENT_MASK_ENTITY_COLLISION",
        "summary": ""
      },
      {
        "name": "EVENT_MASK_KILL_ZONE",
        "kind": "constant",
        "signature": "EVENT_MASK_KILL_ZONE",
        "summary": ""
      },
      {
        "name": "EVENT_MASK_REACTION",
        "kind": "constant",
        "signature": "EVENT_MASK_REACTION",
        "summary": ""
      },
      {
        "name": "EVENT_MASK_ALL",
        "kind": "constant",
        "signature": "EVENT_MASK_ALL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleFMM",
    "path": "engine/reference/sim/particles/ParticleFMM.md",
    "source": "engine/sim/particles/ParticleFMM.js",
    "import": "/engine/sim/particles/ParticleFMM.js",
    "sourceHash": "9e09e95d78ab7fcc4fbf36891c3c96497067d3ab7297aea73cfcb5c18ef7fc78",
    "summary": "Uniform-octree Fast Multipole Method for open-boundary gravitational forces. The GPU path is deliberately self-contained and opt-in. It performs the full FMM sequence P2M -> M2M -> M2L -> L2L -> L2P + P2P. The first implementation uses monopole source expansions and first-order Cartesian local expansions; the direct solver remains the accuracy oracle and small-N fallback.",
    "exports": [
      {
        "name": "createFmmSystem",
        "kind": "function",
        "signature": "createFmmSystem(device, maxParticles, options = {})",
        "summary": ""
      },
      {
        "name": "initFmmBindGroups",
        "kind": "function",
        "signature": "initFmmBindGroups(system, device, positionBuffer, velocityBuffer, metaBuffer, thermalBuffer,)",
        "summary": ""
      },
      {
        "name": "setFmmParams",
        "kind": "function",
        "signature": "setFmmParams(system, config = {})",
        "summary": ""
      },
      {
        "name": "executeFmm",
        "kind": "function",
        "signature": "executeFmm(system, device, particleCount, dt, options = {})",
        "summary": ""
      },
      {
        "name": "readFmmDiagnostics",
        "kind": "function",
        "signature": "async readFmmDiagnostics(system)",
        "summary": ""
      },
      {
        "name": "destroyFmmSystem",
        "kind": "function",
        "signature": "destroyFmmSystem(system)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleFlocking",
    "path": "engine/reference/sim/particles/ParticleFlocking.md",
    "source": "engine/sim/particles/ParticleFlocking.js",
    "import": "/engine/sim/particles/ParticleFlocking.js",
    "sourceHash": "5efaa7ef75a27406266315f017d26aa36b0e1da1983cf0a4de5f38902a7afa5e",
    "summary": "ParticleFlocking.js - GPU Flocking / Boids System (GAP 27) Dedicated GPU compute shader implementing classic boid rules: 1. Separation — steer away from nearby neighbors 2. Alignment — match velocity direction of nearby neighbors 3. Cohesion — steer toward center of mass of nearby neighbors 4. Goal seeking — steer toward target position(s) 5. Obstacle avoidance — steer away from repulsion points 6. Speed regulation — maintain target speed range Uses the NeighborGrid (GAP 25) for O(N) spatial queries instead of O(N²). Each force has independent radius + weight for fine-tuned behavior. Matches PopcornFX CParticleEvolver_Flocking. Usage: const flock = createFlockingSystem(device, maxParticles); initFlockingBindGroups(flock, device, positionBuffer, velocityBuffer, gridBuffers); setFlockingParams(flock, { separationWeight: 1.5, alignmentWeight: 1.0, ... }); // Each frame (after neighbor grid is built): executeFlocking(flock, device, particleCount, dt);",
    "exports": [
      {
        "name": "createFlockingSystem",
        "kind": "function",
        "signature": "createFlockingSystem(device, maxParticles)",
        "summary": "Create the flocking system."
      },
      {
        "name": "initFlockingBindGroups",
        "kind": "function",
        "signature": "initFlockingBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers)",
        "summary": "Initialize bind groups. Requires neighbor grid buffers."
      },
      {
        "name": "setFlockingParams",
        "kind": "function",
        "signature": "setFlockingParams(system, params)",
        "summary": "Update flocking parameters."
      },
      {
        "name": "executeFlocking",
        "kind": "function",
        "signature": "executeFlocking(system, device, particleCount, dt)",
        "summary": "Execute the flocking compute pass."
      },
      {
        "name": "destroyFlockingSystem",
        "kind": "function",
        "signature": "destroyFlockingSystem(system)",
        "summary": "Destroy the system."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleFxApi",
    "path": "engine/reference/sim/particles/ParticleFxApi.md",
    "source": "engine/sim/particles/ParticleFxApi.js",
    "import": "/engine/sim/particles/ParticleFxApi.js",
    "sourceHash": "742dad7247d928357d7977aa7f88f822a75bf0f243a14a29bf4116d070d07376",
    "summary": "",
    "exports": [
      {
        "name": "spawnParticleEmitterEntity",
        "kind": "function",
        "signature": "spawnParticleEmitterEntity(world, options = {})",
        "summary": ""
      },
      {
        "name": "attachParticleEmitter",
        "kind": "function",
        "signature": "attachParticleEmitter(world, entityId, emitterDesc)",
        "summary": ""
      },
      {
        "name": "updateParticleEmitter",
        "kind": "function",
        "signature": "updateParticleEmitter(world, entityId, changes)",
        "summary": ""
      },
      {
        "name": "disableParticleEmitter",
        "kind": "function",
        "signature": "disableParticleEmitter(world, entityId)",
        "summary": ""
      },
      {
        "name": "removeParticleEmitter",
        "kind": "function",
        "signature": "removeParticleEmitter(world, entityId)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleIndirectDispatch",
    "path": "engine/reference/sim/particles/ParticleIndirectDispatch.md",
    "source": "engine/sim/particles/ParticleIndirectDispatch.js",
    "import": "/engine/sim/particles/ParticleIndirectDispatch.js",
    "sourceHash": "a57ed42ce62f909c2a49cde72f7038d53cbe11c0075f681a292616adb33df43c",
    "summary": "ParticleIndirectDispatch.js - GPU-driven indirect draw + dispatch Replaces CPU-side particle count tracking for rendering and compute dispatch. A small \"scan alive\" compute pass runs once per frame, atomically counting alive particles and finding the highest alive slot. A \"finalize\" micro-pass writes the results into draw indirect and dispatch indirect buffers. Benefits: - Eliminates CPU→GPU sync for particle counts - drawIndirect uses GPU-computed instance count - dispatchWorkgroupsIndirect uses GPU-computed workgroup count - Prepares infrastructure for full alive list compaction (Phase 3) Ref: Wicked Engine GPU particle architecture, UE5 Niagara indirect dispatch",
    "exports": [
      {
        "name": "createIndirectDispatchSystem",
        "kind": "function",
        "signature": "createIndirectDispatchSystem(device, maxParticles, workgroupSize = 256)",
        "summary": "Create the indirect dispatch system."
      },
      {
        "name": "initIndirectDispatchBindGroups",
        "kind": "function",
        "signature": "initIndirectDispatchBindGroups(system, device, positionsBuffer, velocitiesBuffer)",
        "summary": "Initialize bind groups. Call after position/velocity buffers are available."
      },
      {
        "name": "executeIndirectScan",
        "kind": "function",
        "signature": "executeIndirectScan(system, device, options = {})",
        "summary": "Execute the scan + finalize passes. Run ONCE per frame, before any other particle work. After this call, drawIndirectBuffer and dispatchIndirectBuffer contain GPU-computed values."
      },
      {
        "name": "updateIndirectMaxSlots",
        "kind": "function",
        "signature": "updateIndirectMaxSlots(system, device, maxSlots)",
        "summary": "Update maxSlots (e.g., when particle capacity changes)."
      },
      {
        "name": "destroyIndirectDispatchSystem",
        "kind": "function",
        "signature": "destroyIndirectDispatchSystem(system)",
        "summary": "Destroy indirect dispatch system resources."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleLennardJones",
    "path": "engine/reference/sim/particles/ParticleLennardJones.md",
    "source": "engine/sim/particles/ParticleLennardJones.js",
    "import": "/engine/sim/particles/ParticleLennardJones.js",
    "sourceHash": "36c81178e32972c1c31c32240ef47306f489beda6d11e4626baa2c28796a36b5",
    "summary": "ParticleLennardJones.js - Lennard-Jones Intermolecular Potential (GAP 34) GPU compute shader implementing the Lennard-Jones 12-6 potential: V(r) = 4ε[(σ/r)¹² - (σ/r)⁶] F(r) = 24ε/r [2(σ/r)¹² - (σ/r)⁶] This single equation creates realistic solid/liquid/gas behavior: - r < σ: strong repulsion (Pauli exclusion) - r = σ·2^(1/6): equilibrium (minimum energy) - r > σ·2^(1/6): weak attraction (van der Waals) - r > 2.5σ: effectively zero (cutoff) Per-element ε and σ from element table (GAP 33). Cross-element interactions use Lorentz-Berthelot mixing rules. Uses neighbor grid (GAP 25) for O(N) spatial queries. Usage: const lj = createLennardJonesSystem(device, maxParticles); initLJBindGroups(lj, device, positionBuffer, velocityBuffer, gridBuffers, elementTable); executeLennardJones(lj, device, particleCount, dt);",
    "exports": [
      {
        "name": "createLennardJonesSystem",
        "kind": "function",
        "signature": "createLennardJonesSystem(device, maxParticles)",
        "summary": "Create the Lennard-Jones system."
      },
      {
        "name": "initLJBindGroups",
        "kind": "function",
        "signature": "initLJBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers, elementTable, thermalBuffer)",
        "summary": "Initialize bind groups. Requires neighbor grid + element table buffers."
      },
      {
        "name": "executeLennardJones",
        "kind": "function",
        "signature": "executeLennardJones(system, device, particleCount, dt)",
        "summary": "Execute the Lennard-Jones compute pass."
      },
      {
        "name": "destroyLennardJonesSystem",
        "kind": "function",
        "signature": "destroyLennardJonesSystem(system)",
        "summary": "Destroy the system."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleLifetimeCurves",
    "path": "engine/reference/sim/particles/ParticleLifetimeCurves.md",
    "source": "engine/sim/particles/ParticleLifetimeCurves.js",
    "import": "/engine/sim/particles/ParticleLifetimeCurves.js",
    "sourceHash": "d3c1a7bf7059f6262d22dec1419b234fa03867faa07d1f7b906c3e6c33b9f674",
    "summary": "ParticleLifetimeCurves.js - GPU N-point Bezier curves for particle properties over lifetime Extends the color gradient LUT pattern to size, alpha, and velocity. Generates a 1D RGBA16float texture (256 texels): R = size multiplier G = alpha multiplier B = velocity multiplier A = reserved (1.0) Sampled in vertex shader (size), fragment shader (alpha), and optionally sim shader (velocity). Supports N-point curves with Catmull-Rom interpolation for smooth results.",
    "exports": [
      {
        "name": "curveFromLegacy3",
        "kind": "function",
        "signature": "curveFromLegacy3(arr)",
        "summary": "Convert a legacy 3-point array [start, mid, end] to a curve."
      },
      {
        "name": "generateCurveLUT",
        "kind": "function",
        "signature": "generateCurveLUT(config = {})",
        "summary": "Generate the RGBA LUT data (Float16 or Float32 depending on use)."
      },
      {
        "name": "createCurveLUTTexture",
        "kind": "function",
        "signature": "createCurveLUTTexture(device, config = {})",
        "summary": "Create a GPU 1D LUT texture for lifetime curves."
      },
      {
        "name": "updateCurveLUTTexture",
        "kind": "function",
        "signature": "updateCurveLUTTexture(device, texture, config = {})",
        "summary": "Update an existing LUT texture with new curve data."
      },
      {
        "name": "createLifetimeCurvesSystem",
        "kind": "function",
        "signature": "createLifetimeCurvesSystem(device, config = {})",
        "summary": "Create a lifetime curves system for a particle world."
      },
      {
        "name": "setLifetimeCurves",
        "kind": "function",
        "signature": "setLifetimeCurves(system, config)",
        "summary": "Update curves at runtime."
      },
      {
        "name": "destroyLifetimeCurvesSystem",
        "kind": "function",
        "signature": "destroyLifetimeCurvesSystem(system)",
        "summary": "Destroy the system."
      },
      {
        "name": "CURVE_PRESETS",
        "kind": "constant",
        "signature": "CURVE_PRESETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleLightEmission",
    "path": "engine/reference/sim/particles/ParticleLightEmission.md",
    "source": "engine/sim/particles/ParticleLightEmission.js",
    "import": "/engine/sim/particles/ParticleLightEmission.js",
    "sourceHash": "f4b8b7c63c9ca48505922860397d104f4a11ba2d7b26ee509adf3118e5ba1959",
    "summary": "ParticleLightEmission.js - Particles as dynamic point lights Niagara/PopcornFX parity: emissive particles contribute point lights to the scene. Pipeline: 1. GPU compute shader finds the top-N brightest/hottest particles 2. Results are read back to CPU as an array of point light descriptors 3. Any lighting system can consume these as dynamic lights This avoids tight coupling to a specific lighting implementation. The consumer (LightingPass, voxel lighting, etc.) reads the light array each frame.",
    "exports": [
      {
        "name": "createParticleLightSystem",
        "kind": "function",
        "signature": "createParticleLightSystem(device, options = {})",
        "summary": "Create particle light emission system"
      },
      {
        "name": "initParticleLightBindGroup",
        "kind": "function",
        "signature": "initParticleLightBindGroup(system, particleWorld)",
        "summary": "Initialize bind group (call once when particle buffers are ready)"
      },
      {
        "name": "extractParticleLights",
        "kind": "function",
        "signature": "extractParticleLights(encoder, system, particleCount)",
        "summary": "Execute the light extraction compute pass"
      },
      {
        "name": "readbackParticleLights",
        "kind": "function",
        "signature": "async readbackParticleLights(system)",
        "summary": "Read back extracted lights from GPU (async, call after command buffer submit) Returns array of { position: [x,y,z], radius, color: [r,g,b], intensity }"
      },
      {
        "name": "getParticleLights",
        "kind": "function",
        "signature": "getParticleLights(system)",
        "summary": "Get the current particle lights (non-async, returns last readback result)"
      },
      {
        "name": "destroyParticleLightSystem",
        "kind": "function",
        "signature": "destroyParticleLightSystem(system)",
        "summary": "Destroy particle light system"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleLocalSpace",
    "path": "engine/reference/sim/particles/ParticleLocalSpace.md",
    "source": "engine/sim/particles/ParticleLocalSpace.js",
    "import": "/engine/sim/particles/ParticleLocalSpace.js",
    "sourceHash": "034a3b5e00160a190753c720afca89e1a8cc7fd0359af7252e2888a409589ab1",
    "summary": "ParticleLocalSpace.js - Local/World Space Toggle (GAP 30) Per-emitter transform for local-space simulation. When enabled, particles are simulated in the emitter's local coordinate frame and transformed to world space only for rendering. Moving the emitter moves all its particles. When disabled (default), particles are emitted in world space and the emitter can move without affecting existing particles. GPU compute shader transforms between local and world space using the emitter's model matrix each frame. Matches PopcornFX CParticleEvolver_Localspace. Usage: const ls = createLocalSpaceSystem(device, maxParticles); initLocalSpaceBindGroups(ls, device, positionBuffer, velocityBuffer); setEmitterTransform(ls, modelMatrix); // Before sim step: transform world→local executeWorldToLocal(ls, device, particleCount); // ... run simulation in local space ... // After sim step: transform local→world executeLocalToWorld(ls, device, particleCount);",
    "exports": [
      {
        "name": "createLocalSpaceSystem",
        "kind": "function",
        "signature": "createLocalSpaceSystem(device, maxParticles)",
        "summary": "Create local space transform system."
      },
      {
        "name": "initLocalSpaceBindGroups",
        "kind": "function",
        "signature": "initLocalSpaceBindGroups(system, device, positionBuffer, velocityBuffer)",
        "summary": "Initialize bind groups."
      },
      {
        "name": "setEmitterTransform",
        "kind": "function",
        "signature": "setEmitterTransform(system, matrix)",
        "summary": "Set the emitter transform (4x4 column-major matrix). Automatically computes the inverse."
      },
      {
        "name": "setEmitterTransformFromPosRot",
        "kind": "function",
        "signature": "setEmitterTransformFromPosRot(system, pos, rotation)",
        "summary": "Set emitter transform from position + rotation (Euler angles in radians)."
      },
      {
        "name": "executeWorldToLocal",
        "kind": "function",
        "signature": "executeWorldToLocal(system, device, particleCount)",
        "summary": "Transform particles from world space to local space (run before sim step)."
      },
      {
        "name": "executeLocalToWorld",
        "kind": "function",
        "signature": "executeLocalToWorld(system, device, particleCount)",
        "summary": "Transform particles from local space to world space (run after sim step)."
      },
      {
        "name": "destroyLocalSpaceSystem",
        "kind": "function",
        "signature": "destroyLocalSpaceSystem(system)",
        "summary": "Destroy the system."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleLongRangeMath",
    "path": "engine/reference/sim/particles/ParticleLongRangeMath.md",
    "source": "engine/sim/particles/ParticleLongRangeMath.js",
    "import": "/engine/sim/particles/ParticleLongRangeMath.js",
    "sourceHash": "be43617b49172533f8fde165074bbe161fe2cb181842b4264c95cecfb104dba0",
    "summary": "Pure configuration, layout, and validation math shared by long-range particle solvers.",
    "exports": [
      {
        "name": "fmmLevelCellCount",
        "kind": "function",
        "signature": "fmmLevelCellCount(level)",
        "summary": ""
      },
      {
        "name": "fmmLevelOffset",
        "kind": "function",
        "signature": "fmmLevelOffset(level)",
        "summary": ""
      },
      {
        "name": "fmmTotalCellCount",
        "kind": "function",
        "signature": "fmmTotalCellCount(depth)",
        "summary": ""
      },
      {
        "name": "fmmSelectDepth",
        "kind": "function",
        "signature": "fmmSelectDepth(particleCount, options = {})",
        "summary": ""
      },
      {
        "name": "normalizeFmmConfig",
        "kind": "function",
        "signature": "normalizeFmmConfig(config = {})",
        "summary": ""
      },
      {
        "name": "estimateFmmMemory",
        "kind": "function",
        "signature": "estimateFmmMemory(config = {})",
        "summary": ""
      },
      {
        "name": "normalizeParticleMeshConfig",
        "kind": "function",
        "signature": "normalizeParticleMeshConfig(config = {})",
        "summary": ""
      },
      {
        "name": "estimateParticleMeshMemory",
        "kind": "function",
        "signature": "estimateParticleMeshMemory(config = {})",
        "summary": ""
      },
      {
        "name": "generateProlateWindowTable",
        "kind": "function",
        "signature": "generateProlateWindowTable(options = {})",
        "summary": "Samples the positive, even, order-zero PSWF. Inverse iteration solves the spheroidal Sturm-Liouville operator in an orthonormal even-Legendre basis; the GPU linearly interpolates the resulting half-window."
      },
      {
        "name": "generateProlateSplitTable",
        "kind": "function",
        "signature": "generateProlateSplitTable(windowTable)",
        "summary": "Builds the normalized radial density and complementary local kernel used by the PSWF Ewald split. The density integrates to one on [0, 1], while the complement falls from one to zero at the real-space cutoff."
      },
      {
        "name": "prolateSplitFourierResponse",
        "kind": "function",
        "signature": "prolateSplitFourierResponse(splitDensity, angularFrequency)",
        "summary": "Cosine transform of the normalized even PSWF splitting kernel."
      },
      {
        "name": "fmmCellCoordinate",
        "kind": "function",
        "signature": "fmmCellCoordinate(index, level)",
        "summary": ""
      },
      {
        "name": "fmmMortonCellIndex",
        "kind": "function",
        "signature": "fmmMortonCellIndex(x, y, z, level)",
        "summary": ""
      },
      {
        "name": "fmmInteractionCells",
        "kind": "function",
        "signature": "fmmInteractionCells(targetIndex, level)",
        "summary": ""
      },
      {
        "name": "directLongRangeAccelerations",
        "kind": "function",
        "signature": "directLongRangeAccelerations(positions, sources, options = {})",
        "summary": ""
      },
      {
        "name": "compareLongRangeVectors",
        "kind": "function",
        "signature": "compareLongRangeVectors(reference, approximate)",
        "summary": ""
      },
      {
        "name": "PARTICLE_LONG_RANGE_BACKENDS",
        "kind": "constant",
        "signature": "PARTICLE_LONG_RANGE_BACKENDS",
        "summary": "Pure configuration, layout, and validation math shared by long-range particle solvers."
      },
      {
        "name": "PARTICLE_LONG_RANGE_BOUNDARIES",
        "kind": "constant",
        "signature": "PARTICLE_LONG_RANGE_BOUNDARIES",
        "summary": ""
      },
      {
        "name": "FMM_MIN_DEPTH",
        "kind": "constant",
        "signature": "FMM_MIN_DEPTH",
        "summary": ""
      },
      {
        "name": "FMM_MAX_DEPTH",
        "kind": "constant",
        "signature": "FMM_MAX_DEPTH",
        "summary": ""
      },
      {
        "name": "FMM_DEFAULT_LEAF_OCCUPANCY",
        "kind": "constant",
        "signature": "FMM_DEFAULT_LEAF_OCCUPANCY",
        "summary": ""
      },
      {
        "name": "FMM_CELL_MOMENT_BYTES",
        "kind": "constant",
        "signature": "FMM_CELL_MOMENT_BYTES",
        "summary": ""
      },
      {
        "name": "FMM_CELL_LOCAL_BYTES",
        "kind": "constant",
        "signature": "FMM_CELL_LOCAL_BYTES",
        "summary": ""
      },
      {
        "name": "PARTICLE_MESH_MIN_GRID_SIZE",
        "kind": "constant",
        "signature": "PARTICLE_MESH_MIN_GRID_SIZE",
        "summary": ""
      },
      {
        "name": "PARTICLE_MESH_MAX_GRID_SIZE",
        "kind": "constant",
        "signature": "PARTICLE_MESH_MAX_GRID_SIZE",
        "summary": ""
      },
      {
        "name": "PARTICLE_MESH_WINDOW_SAMPLES",
        "kind": "constant",
        "signature": "PARTICLE_MESH_WINDOW_SAMPLES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleMeshEwald",
    "path": "engine/reference/sim/particles/ParticleMeshEwald.md",
    "source": "engine/sim/particles/ParticleMeshEwald.js",
    "import": "/engine/sim/particles/ParticleMeshEwald.js",
    "sourceHash": "1583f6d568b0412f2f2051f44c70ef83fb0af90e113df67598b075910e8160a1",
    "summary": "Periodic particle-mesh Ewald solver with cubic B-spline PME and an experimental numerically sampled prolate-spheroidal (ESP) split and window. The solver uses exact integer cell counting/scatter, a separable 3D complex FFT, reciprocal-space screened Poisson solve, interpolated mesh gradients, and the complementary short-range Ewald force.",
    "exports": [
      {
        "name": "createParticleMeshEwaldSystem",
        "kind": "function",
        "signature": "createParticleMeshEwaldSystem(device, maxParticles, options = {})",
        "summary": ""
      },
      {
        "name": "initParticleMeshEwaldBindGroups",
        "kind": "function",
        "signature": "initParticleMeshEwaldBindGroups(system, device, positionBuffer, velocityBuffer, metaBuffer, thermalBuffer,)",
        "summary": ""
      },
      {
        "name": "setParticleMeshEwaldParams",
        "kind": "function",
        "signature": "setParticleMeshEwaldParams(system, config = {})",
        "summary": ""
      },
      {
        "name": "executeParticleMeshEwald",
        "kind": "function",
        "signature": "executeParticleMeshEwald(system, device, particleCount, dt, options = {})",
        "summary": ""
      },
      {
        "name": "readParticleMeshEwaldDiagnostics",
        "kind": "function",
        "signature": "async readParticleMeshEwaldDiagnostics(system)",
        "summary": ""
      },
      {
        "name": "destroyParticleMeshEwaldSystem",
        "kind": "function",
        "signature": "destroyParticleMeshEwaldSystem(system)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleNBody",
    "path": "engine/reference/sim/particles/ParticleNBody.md",
    "source": "engine/sim/particles/ParticleNBody.js",
    "import": "/engine/sim/particles/ParticleNBody.js",
    "sourceHash": "dea7f42546235777a0261ff298bf41ed4105242b9fdd814181c0cfa668f12f8f",
    "summary": "ParticleNBody.js - N-Body Gravitational Dynamics (GAP 37) GPU compute: every particle attracts every other via gravity. F = G · m₁·m₂ / (r² + ε²)^(3/2) Direct summation O(N²) — suitable for up to ~100K particles on modern GPUs. Softening parameter ε prevents singularities at close range. Configurable G for different scales (molecular, macro, celestial). Uses tiled shared-memory approach: each workgroup loads a tile of particles into shared memory, computes interactions, then loads next tile. Usage: const nb = createNBodySystem(device, maxParticles); initNBodyBindGroups(nb, device, positionBuffer, velocityBuffer, metaBuffer); executeNBody(nb, device, particleCount, dt);",
    "exports": [
      {
        "name": "createNBodySystem",
        "kind": "function",
        "signature": "createNBodySystem(device, maxParticles)",
        "summary": "Create the N-body gravity system."
      },
      {
        "name": "initNBodyBindGroups",
        "kind": "function",
        "signature": "initNBodyBindGroups(system, device, positionBuffer, velocityBuffer, metaBuffer, thermalBuffer)",
        "summary": "Initialize bind groups."
      },
      {
        "name": "setNBodyParams",
        "kind": "function",
        "signature": "setNBodyParams(system, config)",
        "summary": "Set N-body parameters at runtime."
      },
      {
        "name": "executeNBody",
        "kind": "function",
        "signature": "executeNBody(system, device, particleCount, dt, options = {})",
        "summary": "Execute the N-body compute pass."
      },
      {
        "name": "destroyNBodySystem",
        "kind": "function",
        "signature": "destroyNBodySystem(system)",
        "summary": "Destroy."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleNeighborGrid",
    "path": "engine/reference/sim/particles/ParticleNeighborGrid.md",
    "source": "engine/sim/particles/ParticleNeighborGrid.js",
    "import": "/engine/sim/particles/ParticleNeighborGrid.js",
    "sourceHash": "3f7aa96213f7e299541b20d4e89fdd0c1df01f9a3a4f436f6d880c2ab66f62e3",
    "summary": "ParticleNeighborGrid.js - General-Purpose Neighbor Grid (GAP 25) GPU spatial query structure for arbitrary particle-to-particle interactions. Unlike the collision-specific spatial grid, this is a general-purpose 3D grid that any system can query: flocking, color transfer, interaction, etc. Matches Niagara Neighbor Grid 3D and PopcornFX Spatial Layers. Architecture (hash-modulo bucket approach — inspired by NVIDIA CUDA Particles): 1. Clear cell counts via encoder.clearBuffer (GPU memset, no dispatch limit) 2. Insert particles into hash buckets (compute pass, atomic append) 3. Query neighbors from any other compute pass via grid lookup Instead of allocating one bucket per 3D cell (can exceed millions), we use numBuckets = min(totalCells, maxParticles). The flat cell index is modulo'd into this smaller range. Hash collisions are harmless — consumer shaders already do distance checks that filter false positives. Grid stores up to maxNeighborsPerCell particle indices per bucket. Query returns indices of particles in same + adjacent cells (27-cell neighborhood).",
    "exports": [
      {
        "name": "createNeighborGridSystem",
        "kind": "function",
        "signature": "createNeighborGridSystem(device, config = {})",
        "summary": "Create a general-purpose neighbor grid."
      },
      {
        "name": "initNeighborGridBindGroups",
        "kind": "function",
        "signature": "initNeighborGridBindGroups(system, device, positionBuffer, velocityBuffer)",
        "summary": "Initialize bind groups (call after particle buffers are created)."
      },
      {
        "name": "setNeighborGridParticleCount",
        "kind": "function",
        "signature": "setNeighborGridParticleCount(system, particleCount)",
        "summary": "Update the particle count in params (call each frame if count changes)."
      },
      {
        "name": "buildNeighborGrid",
        "kind": "function",
        "signature": "buildNeighborGrid(system, device, particleCount)",
        "summary": "Execute clear + insert passes. Call once per frame before any queries."
      },
      {
        "name": "getNeighborGridBuffers",
        "kind": "function",
        "signature": "getNeighborGridBuffers(system)",
        "summary": "Get the grid buffers for use in consumer compute shaders. Consumer shaders should bind cellCountsBuffer and cellEntriesBuffer as read-only storage."
      },
      {
        "name": "destroyNeighborGridSystem",
        "kind": "function",
        "signature": "destroyNeighborGridSystem(system)",
        "summary": "Destroy the system."
      },
      {
        "name": "NEIGHBOR_QUERY_WGSL",
        "kind": "constant",
        "signature": "NEIGHBOR_QUERY_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleNoiseTexture",
    "path": "engine/reference/sim/particles/ParticleNoiseTexture.md",
    "source": "engine/sim/particles/ParticleNoiseTexture.js",
    "import": "/engine/sim/particles/ParticleNoiseTexture.js",
    "sourceHash": "764823344fbde5b66b9100b61d5e6d4a687357568855fabdeacdd65e212c0c15",
    "summary": "ParticleNoiseTexture.js - Pre-baked 3D curl noise volume texture Replaces expensive per-particle gradientNoise calls with one filtered sample from a two-pass vector-potential -> discrete-curl 3D texture bake. 6-24× cheaper turbulence depending on octave count. The noise is tileable: baked with periodic boundary conditions and sampled with repeat addressing mode for seamless spatial tiling. Ref: GPU Gems 3 Ch.1 \"Generating Complex Procedural Terrains Using the GPU\"",
    "exports": [
      {
        "name": "createNoiseTextureSystem",
        "kind": "function",
        "signature": "async createNoiseTextureSystem(device, resolution = 64, period = DEFAULT_NOISE_PERIOD)",
        "summary": "Create the 3D noise texture system."
      },
      {
        "name": "bakeNoiseTexture",
        "kind": "function",
        "signature": "bakeNoiseTexture(system, device)",
        "summary": "Bake the noise volume texture. Call once after creation. This is a one-time GPU operation (~1ms for 64³, ~8ms for 128³)."
      },
      {
        "name": "createDummyNoiseTexture",
        "kind": "function",
        "signature": "createDummyNoiseTexture(device)",
        "summary": "Create a 1×1×1 dummy noise texture for use when the real texture isn't ready. Returns { textureView, sampler, paramsBuffer } suitable for bind group creation."
      },
      {
        "name": "destroyNoiseTextureSystem",
        "kind": "function",
        "signature": "destroyNoiseTextureSystem(system)",
        "summary": "Destroy noise texture system resources."
      },
      {
        "name": "NOISE_TEXTURE_BINDINGS_SNIPPET",
        "kind": "constant",
        "signature": "NOISE_TEXTURE_BINDINGS_SNIPPET",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleRadixSort",
    "path": "engine/reference/sim/particles/ParticleRadixSort.md",
    "source": "engine/sim/particles/ParticleRadixSort.js",
    "import": "/engine/sim/particles/ParticleRadixSort.js",
    "sourceHash": "826d4aec433706085a923b997ab16c1f443cca09902906c297b9ad5797a00f6c",
    "summary": "ParticleRadixSort.js - GPU 4-way radix sort for particle distance sorting Replaces bitonic sort (O(n log²n) dispatches) with radix sort (O(n), fixed 8 passes). For 100K particles: bitonic = ~289 dispatches, radix = ~24 dispatches (12× fewer). Architecture: - 4-bit radix: 16 buckets per pass, 8 passes for 32-bit keys - Float-to-sortable-uint conversion for correct float ordering - Per-pass: histogram → prefix sum → scatter (3 dispatches) - Double-buffered keys+values for ping-pong between passes - \"Order check\" optimization: skip sort when data is already sorted Ref: \"Fast 4-way parallel radix sorting on GPUs\" (Ha et al.) kishimisu/WebGPU-Radix-Sort",
    "exports": [
      {
        "name": "createRadixSortSystem",
        "kind": "function",
        "signature": "createRadixSortSystem(device, maxParticles)",
        "summary": "Create GPU radix sort system for transparent particle rendering. Drop-in replacement for the bitonic sort system."
      },
      {
        "name": "initRadixSortBindGroups",
        "kind": "function",
        "signature": "initRadixSortBindGroups(system, device, positionsBuffer)",
        "summary": ""
      },
      {
        "name": "executeRadixSort",
        "kind": "function",
        "signature": "executeRadixSort(system, device, particleCount, cameraPos)",
        "summary": "Execute GPU radix sort. Drop-in replacement for executeGPUSort."
      },
      {
        "name": "destroyRadixSortSystem",
        "kind": "function",
        "signature": "destroyRadixSortSystem(system)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleReactionTable",
    "path": "engine/reference/sim/particles/ParticleReactionTable.md",
    "source": "engine/sim/particles/ParticleReactionTable.js",
    "import": "/engine/sim/particles/ParticleReactionTable.js",
    "sourceHash": "ad3c963517ea10ed4f1d95e1d6bb94245bc2f446b37b41236b9ceda0f46eed73",
    "summary": "ParticleReactionTable.js - Cross-Emitter Particle Reaction System GPU-driven reaction table: when particles with different materialIdx collide, the collision shader scans this table for a matching (matA, matB) rule. If found: apply energy, optionally kill reactants, emit reaction event (type 5). EventSpawn reads the rule index to spawn product particles with correct properties. Exceeds Niagara/PopcornFX/Unity VFX Graph — none support particle-particle reactions. Usage: const table = createReactionTable(device); addReaction(table, MATERIAL.FIRE, MATERIAL.WATER, { ... }); registerDefaultReactions(table); // Bind table.buffer to sim shader group",
    "exports": [
      {
        "name": "createReactionTable",
        "kind": "function",
        "signature": "createReactionTable(device)",
        "summary": "Create a reaction table with GPU uniform buffer."
      },
      {
        "name": "destroyReactionTable",
        "kind": "function",
        "signature": "destroyReactionTable(table)",
        "summary": "Destroy the reaction table and release GPU resources."
      },
      {
        "name": "addReaction",
        "kind": "function",
        "signature": "addReaction(table, matA, matB, config = {})",
        "summary": "Add a reaction rule to the table."
      },
      {
        "name": "removeReaction",
        "kind": "function",
        "signature": "removeReaction(table, index)",
        "summary": "Remove a reaction rule by index."
      },
      {
        "name": "clearReactions",
        "kind": "function",
        "signature": "clearReactions(table)",
        "summary": "Remove all reaction rules."
      },
      {
        "name": "uploadReactionTable",
        "kind": "function",
        "signature": "uploadReactionTable(table)",
        "summary": "Upload the reaction table to the GPU uniform buffer. Call once after adding/removing reactions (not every frame)."
      },
      {
        "name": "registerDefaultReactions",
        "kind": "function",
        "signature": "registerDefaultReactions(table)",
        "summary": "Register built-in reaction presets."
      },
      {
        "name": "getReactions",
        "kind": "function",
        "signature": "getReactions(table)",
        "summary": "Get the current reaction rules."
      },
      {
        "name": "getMaterialName",
        "kind": "function",
        "signature": "getMaterialName(matId)",
        "summary": "Get a material name from its ID."
      },
      {
        "name": "getMaterialForSubstance",
        "kind": "function",
        "signature": "getMaterialForSubstance(substanceKey)",
        "summary": "Look up the material ID for a substance preset key."
      },
      {
        "name": "MATERIAL",
        "kind": "constant",
        "signature": "MATERIAL",
        "summary": ""
      },
      {
        "name": "SUBSTANCE_TO_MATERIAL",
        "kind": "constant",
        "signature": "SUBSTANCE_TO_MATERIAL",
        "summary": ""
      },
      {
        "name": "REACTION_KILL_A",
        "kind": "constant",
        "signature": "REACTION_KILL_A",
        "summary": ""
      },
      {
        "name": "REACTION_KILL_B",
        "kind": "constant",
        "signature": "REACTION_KILL_B",
        "summary": ""
      },
      {
        "name": "REACTION_SPAWN_PRODUCT",
        "kind": "constant",
        "signature": "REACTION_SPAWN_PRODUCT",
        "summary": ""
      },
      {
        "name": "REACTION_KILL_BOTH",
        "kind": "constant",
        "signature": "REACTION_KILL_BOTH",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleRibbonTrail",
    "path": "engine/reference/sim/particles/ParticleRibbonTrail.md",
    "source": "engine/sim/particles/ParticleRibbonTrail.js",
    "import": "/engine/sim/particles/ParticleRibbonTrail.js",
    "sourceHash": "10ca8d9603093690de50cfffdafa723179772dbff06c03840b8101c77e7271e2",
    "summary": "ParticleRibbonTrail.js - GPU ribbon/trail rendering for particles Connects particle position history into continuous camera-facing triangle strips for smoke trails, magic effects, and motion streaks. Architecture: 1. Trail Update (compute): shifts history ring buffer back, inserts current position 2. Ribbon Render (vertex+fragment): reads trail history, generates camera-facing triangle strip with width tapering and alpha fade Each particle trail is rendered as one triangle strip instance. Vertex count per instance = historyLength × 2. No intermediate vertex buffer needed — the vertex shader reads history directly. Ref: GPU Gems 3 Ch.23, UE5 Niagara ribbon renderer",
    "exports": [
      {
        "name": "createRibbonTrailSystem",
        "kind": "function",
        "signature": "createRibbonTrailSystem(device, maxParticles, historyLength = 8, targetFormat = 'bgra8unorm', options = {})",
        "summary": "Create ribbon trail system."
      },
      {
        "name": "initRibbonTrailBindGroups",
        "kind": "function",
        "signature": "initRibbonTrailBindGroups(system, device, positionsBuffer, velocitiesBuffer)",
        "summary": "Initialize bind groups for the trail system. Call after the position buffer is available."
      },
      {
        "name": "updateTrailHistory",
        "kind": "function",
        "signature": "updateTrailHistory(system, device)",
        "summary": "Update trail history for all particles (compute pass). Call once per frame AFTER the main sim step."
      },
      {
        "name": "renderRibbonTrails",
        "kind": "function",
        "signature": "renderRibbonTrails(pass, system, viewProjMatrix, cameraPos, instanceCount)",
        "summary": "Render ribbon trails into the current render pass."
      },
      {
        "name": "destroyRibbonTrailSystem",
        "kind": "function",
        "signature": "destroyRibbonTrailSystem(system)",
        "summary": "Destroy ribbon trail system resources."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleSDFAttraction",
    "path": "engine/reference/sim/particles/ParticleSDFAttraction.md",
    "source": "engine/sim/particles/ParticleSDFAttraction.js",
    "import": "/engine/sim/particles/ParticleSDFAttraction.js",
    "sourceHash": "41566f192a61f37b548eabcd712779e5441e37e14ca156b86b6daf8d7b49971c",
    "summary": "ParticleSDFAttraction.js - SDF Attraction/Repulsion Force (GAP 15) Attract or repel particles toward/from SDF surfaces. Unlike SDF collision (hard boundary), this applies a smooth force field based on signed distance, so particles orbit, hover near, or flee from surfaces. Force = -gradient(SDF) × strength / (|SDF| + softness) Modes: - attract: particles pulled toward surface (strength > 0) - repel: particles pushed away from surface (strength < 0) - orbit: attract + tangential velocity (strength > 0, orbitalFactor > 0) - surface-lock: very strong attraction with damping (particles stick to surface) Uses a GPU compute shader that evaluates SDF primitives and applies forces.",
    "exports": [
      {
        "name": "createSDFAttractionSystem",
        "kind": "function",
        "signature": "createSDFAttractionSystem(device)",
        "summary": "Create an SDF attraction system."
      },
      {
        "name": "addSDFAttractor",
        "kind": "function",
        "signature": "addSDFAttractor(system, config = {})",
        "summary": "Add an SDF attractor."
      },
      {
        "name": "updateSDFAttractor",
        "kind": "function",
        "signature": "updateSDFAttractor(system, index, config)",
        "summary": "Update an existing attractor."
      },
      {
        "name": "initSDFAttractionBindGroup",
        "kind": "function",
        "signature": "initSDFAttractionBindGroup(system, device, positionBuffer, velocityBuffer)",
        "summary": "Initialize bind group (call after particle buffers are created)."
      },
      {
        "name": "executeSDFAttraction",
        "kind": "function",
        "signature": "executeSDFAttraction(system, device, particleCount, dt = 1/60, time = 0)",
        "summary": "Execute SDF attraction compute pass."
      },
      {
        "name": "clearSDFAttractors",
        "kind": "function",
        "signature": "clearSDFAttractors(system)",
        "summary": "Clear all attractors."
      },
      {
        "name": "destroySDFAttractionSystem",
        "kind": "function",
        "signature": "destroySDFAttractionSystem(system)",
        "summary": "Destroy the system."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleSPH",
    "path": "engine/reference/sim/particles/ParticleSPH.md",
    "source": "engine/sim/particles/ParticleSPH.js",
    "import": "/engine/sim/particles/ParticleSPH.js",
    "sourceHash": "f76044e081e6826fbfab2405ccc8050600582d21941e54c7662b035058143f7a",
    "summary": "ParticleSPH.js - Smoothed Particle Hydrodynamics (GAP 36) True Lagrangian particle-based fluid simulation where particles ARE the fluid. Complements Eulerian grid solver (GAP 32) for free-surface liquids. Two-pass GPU compute: Pass 1 (density): estimate density at each particle via Poly6 kernel Pass 2 (forces):  pressure (Spiky), viscosity, surface tension, XSPH correction Navier-Stokes in SPH form: ρᵢ = Σⱼ mⱼ W(rᵢ-rⱼ, h)           (density) aᵢ = -Σⱼ mⱼ(Pᵢ/ρᵢ² + Pⱼ/ρⱼ²)∇W  (pressure) aᵢ += μ Σⱼ mⱼ(vⱼ-vᵢ)/ρⱼ ∇²W      (viscosity) Per-element rest density and viscosity from element table (GAP 33). Uses neighbor grid (GAP 25) for O(N) spatial queries. Usage: const sph = createSPHSystem(device, maxParticles); initSPHBindGroups(sph, device, posBuffer, velBuffer, gridBuffers); executeSPH(sph, device, particleCount, dt);",
    "exports": [
      {
        "name": "createSPHSystem",
        "kind": "function",
        "signature": "createSPHSystem(device, maxParticles)",
        "summary": "Create the SPH fluid system."
      },
      {
        "name": "initSPHBindGroups",
        "kind": "function",
        "signature": "initSPHBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers, thermalBuffer)",
        "summary": "Initialize bind groups. Requires neighbor grid buffers."
      },
      {
        "name": "setSPHParams",
        "kind": "function",
        "signature": "setSPHParams(system, config)",
        "summary": "Set SPH parameters at runtime."
      },
      {
        "name": "executeSPH",
        "kind": "function",
        "signature": "executeSPH(system, device, particleCount, dt)",
        "summary": "Execute the two-pass SPH compute."
      },
      {
        "name": "getSPHDensityBuffer",
        "kind": "function",
        "signature": "getSPHDensityBuffer(system)",
        "summary": "Get the density/pressure buffer for use by surface renderers."
      },
      {
        "name": "destroySPHSystem",
        "kind": "function",
        "signature": "destroySPHSystem(system)",
        "summary": "Destroy."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleSchema",
    "path": "engine/reference/sim/particles/ParticleSchema.md",
    "source": "engine/sim/particles/ParticleSchema.js",
    "import": "/engine/sim/particles/ParticleSchema.js",
    "sourceHash": "37b23558db7206e04ca88e0460b24f39af3e6e40667523a1641e43085c26aaf9",
    "summary": "Pack meta.w value from individual components (full format with physics) Format: mass * 1e8 + drag * 1e6 + size * 1e4 + renderMode * 1e3 + shape * 10 + behavior",
    "exports": [
      {
        "name": "packParticleMeta",
        "kind": "function",
        "signature": "packParticleMeta(size, renderMode, shape, behavior = 0, mass = 1.0, drag = 0.02)",
        "summary": "Pack meta.w value from individual components (full format with physics) Format: mass * 1e8 + drag * 1e6 + size * 1e4 + renderMode * 1e3 + shape * 10 + behavior"
      },
      {
        "name": "unpackParticleMeta",
        "kind": "function",
        "signature": "unpackParticleMeta(packed)",
        "summary": "Unpack meta.w value to individual components"
      },
      {
        "name": "getBehaviorId",
        "kind": "function",
        "signature": "getBehaviorId(behaviorName)",
        "summary": "Get behavior ID from behavior name"
      },
      {
        "name": "validateField",
        "kind": "function",
        "signature": "validateField(value, fieldSchema)",
        "summary": "Validate a value against a schema field"
      },
      {
        "name": "validateEmitterConfig",
        "kind": "function",
        "signature": "validateEmitterConfig(config)",
        "summary": "Validate an emitter config against schema"
      },
      {
        "name": "createDefaultEmitterConfig",
        "kind": "function",
        "signature": "createDefaultEmitterConfig(overrides = {})",
        "summary": "Create a default emitter config"
      },
      {
        "name": "createDefaultParticleParams",
        "kind": "function",
        "signature": "createDefaultParticleParams(overrides = {})",
        "summary": "Create a default particle params uniform buffer data"
      },
      {
        "name": "createEmptySnapshot",
        "kind": "function",
        "signature": "createEmptySnapshot(time, frameIndex)",
        "summary": "Create an empty particle snapshot"
      },
      {
        "name": "createEmitterSnapshot",
        "kind": "function",
        "signature": "createEmitterSnapshot(emitter)",
        "summary": "Create an emitter snapshot from live emitter state"
      },
      {
        "name": "getShapeId",
        "kind": "function",
        "signature": "getShapeId(shapeName)",
        "summary": "Get shape ID from shape name"
      },
      {
        "name": "getRenderModeId",
        "kind": "function",
        "signature": "getRenderModeId(modeName)",
        "summary": "Get render mode ID from mode name"
      },
      {
        "name": "getShapeName",
        "kind": "function",
        "signature": "getShapeName(shapeId)",
        "summary": "Get shape name from ID"
      },
      {
        "name": "getRenderModeName",
        "kind": "function",
        "signature": "getRenderModeName(modeId)",
        "summary": "Get render mode name from ID"
      },
      {
        "name": "serializeEmitterConfig",
        "kind": "function",
        "signature": "serializeEmitterConfig(config)",
        "summary": "Serialize emitter config to JSON-safe object"
      },
      {
        "name": "deserializeEmitterConfig",
        "kind": "function",
        "signature": "deserializeEmitterConfig(json)",
        "summary": "Deserialize emitter config from JSON"
      },
      {
        "name": "serializeSnapshot",
        "kind": "function",
        "signature": "serializeSnapshot(snapshot)",
        "summary": "Serialize particle snapshot to JSON-safe object"
      },
      {
        "name": "deserializeSnapshot",
        "kind": "function",
        "signature": "deserializeSnapshot(json)",
        "summary": "Deserialize particle snapshot from JSON"
      },
      {
        "name": "PARTICLE_BUFFER_SCHEMA",
        "kind": "constant",
        "signature": "PARTICLE_BUFFER_SCHEMA",
        "summary": "Per-particle data layout in GPU buffers. Each particle uses 3 vec4s (48 bytes total)."
      },
      {
        "name": "FRAME_UNIFORMS_SCHEMA",
        "kind": "constant",
        "signature": "FRAME_UNIFORMS_SCHEMA",
        "summary": "Frame uniforms passed to all particle shaders"
      },
      {
        "name": "PARTICLE_PARAMS_SCHEMA",
        "kind": "constant",
        "signature": "PARTICLE_PARAMS_SCHEMA",
        "summary": "Per-draw particle parameters"
      },
      {
        "name": "FORCE_PARAMS_SCHEMA",
        "kind": "constant",
        "signature": "FORCE_PARAMS_SCHEMA",
        "summary": "Force parameters uniform (group 2 binding 0 in main particle compute shader) Controls global wind, turbulence, force points, vortex, and velocity clamping."
      },
      {
        "name": "PARTICLE_SHAPES",
        "kind": "constant",
        "signature": "PARTICLE_SHAPES",
        "summary": "Shape types for particle rendering"
      },
      {
        "name": "RENDER_MODES",
        "kind": "constant",
        "signature": "RENDER_MODES",
        "summary": "Render modes for particle blending"
      },
      {
        "name": "PARTICLE_BEHAVIORS",
        "kind": "constant",
        "signature": "PARTICLE_BEHAVIORS",
        "summary": "Behavior types for particle movement patterns"
      },
      {
        "name": "EMITTER_CONFIG_SCHEMA",
        "kind": "constant",
        "signature": "EMITTER_CONFIG_SCHEMA",
        "summary": "Complete emitter configuration schema"
      },
      {
        "name": "ELEMENT_LAYER_SCHEMA",
        "kind": "constant",
        "signature": "ELEMENT_LAYER_SCHEMA",
        "summary": "Element layer for emitter mixing"
      },
      {
        "name": "PARTICLE_SNAPSHOT_ENTRY_SCHEMA",
        "kind": "constant",
        "signature": "PARTICLE_SNAPSHOT_ENTRY_SCHEMA",
        "summary": "Single particle snapshot entry"
      },
      {
        "name": "EMITTER_SNAPSHOT_SCHEMA",
        "kind": "constant",
        "signature": "EMITTER_SNAPSHOT_SCHEMA",
        "summary": "Emitter state snapshot"
      },
      {
        "name": "PARTICLE_SYSTEM_SNAPSHOT_SCHEMA",
        "kind": "constant",
        "signature": "PARTICLE_SYSTEM_SNAPSHOT_SCHEMA",
        "summary": "Complete particle system snapshot"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleSharedMemCollision",
    "path": "engine/reference/sim/particles/ParticleSharedMemCollision.md",
    "source": "engine/sim/particles/ParticleSharedMemCollision.js",
    "import": "/engine/sim/particles/ParticleSharedMemCollision.js",
    "sourceHash": "89b5425fdec31d8e93ee866995c90e3749373a28cf5117b07915c2d8ce96f17d",
    "summary": "ParticleSharedMemCollision.js - Workgroup shared memory particle collision Drop-in replacement for the grid collision `collide` pass that uses workgroup shared memory to eliminate random global memory reads. Architecture: - Uses the same grid infrastructure (clearGrid + binParticles are unchanged) - Dispatches one workgroup PER grid cell (cell-centric) - All threads in a workgroup share the same cell → same neighbor cells - Neighbor particles loaded into shared memory in tiles of TILE_SIZE - Each thread checks its particle against shared memory (fast L1/register access) Memory access improvement: - Old: Each thread reads random global positions/velocities for neighbors - New: Workgroup cooperatively loads sequential global reads → shared memory Then all threads read from shared memory (100× faster than global) Uses the SAME bind group layout as the existing grid collision system, so the existing bind group can be reused directly. Ref: GPU Gems 3 Ch.31 \"Fast N-Body Simulation with CUDA\"",
    "exports": [
      {
        "name": "createSharedMemCollidePipeline",
        "kind": "function",
        "signature": "createSharedMemCollidePipeline(device, bindGroupLayout, tileSize = 256)",
        "summary": "Create the shared-memory collide pipeline. This pipeline uses the SAME bind group layout as the existing grid collision system."
      },
      {
        "name": "dispatchSharedMemCollide",
        "kind": "function",
        "signature": "dispatchSharedMemCollide(pipeline, bindGroup, pass, gridDims)",
        "summary": "Execute the shared-memory collide pass. Dispatches one workgroup per grid cell. Uses the existing grid bind group."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleSimWorld",
    "path": "engine/reference/sim/particles/ParticleSimWorld.md",
    "source": "engine/sim/particles/ParticleSimWorld.js",
    "import": "/engine/sim/particles/ParticleSimWorld.js",
    "sourceHash": "52d6382d8cf822e0e756f6eb2e9694eeed32863524b7b8b324937a0eb1809e0d",
    "summary": "Initialize spatial grid and line buffers for advanced particle features. Call this after createParticleSimWorld to enable line connections and neighbor lookups.",
    "exports": [
      {
        "name": "createParticleSimWorld",
        "kind": "function",
        "signature": "async createParticleSimWorld(gpuDevice, options = {})",
        "summary": ""
      },
      {
        "name": "destroyParticleSimWorld",
        "kind": "function",
        "signature": "destroyParticleSimWorld(world)",
        "summary": ""
      },
      {
        "name": "initAdvancedParticleBuffers",
        "kind": "function",
        "signature": "initAdvancedParticleBuffers(world, options = {})",
        "summary": "Initialize spatial grid and line buffers for advanced particle features. Call this after createParticleSimWorld to enable line connections and neighbor lookups."
      },
      {
        "name": "initAllAdvancedSystems",
        "kind": "function",
        "signature": "async initAllAdvancedSystems(world, options = {})",
        "summary": "Initialize all advanced particle systems (sorting, wire constraints, SDF collision, etc.) Call after createParticleSimWorld and initAdvancedParticleBuffers."
      },
      {
        "name": "createHeatConductionSystem",
        "kind": "function",
        "signature": "createHeatConductionSystem(world)",
        "summary": "Create heat conduction + phase transition compute system. Requires spatial grid to be initialized (gridCountsBuffer, gridIndicesBuffer)."
      },
      {
        "name": "stepHeatConduction",
        "kind": "function",
        "signature": "stepHeatConduction(world, dt)",
        "summary": "Execute heat conduction compute pass."
      },
      {
        "name": "stepAdvancedSystems",
        "kind": "function",
        "signature": "stepAdvancedSystems(world, dt, options = {})",
        "summary": "Execute all active advanced particle systems in the simulation step."
      },
      {
        "name": "renderWorldRibbonTrails",
        "kind": "function",
        "signature": "renderWorldRibbonTrails(pass, world, viewProjMatrix, cameraPos, instanceCount)",
        "summary": "Render ribbon trails into the given render pass. Call during the render loop AFTER particle rendering."
      },
      {
        "name": "sortParticlesForRendering",
        "kind": "function",
        "signature": "sortParticlesForRendering(world, cameraPos)",
        "summary": "Execute GPU sorting for transparent particle rendering. Call before rendering particles back-to-front. Respects world.sortFrameInterval to skip sorting on intermediate frames (e.g. interval=2 sorts every other frame, reducing GPU cost for large counts)."
      },
      {
        "name": "addParticleWire",
        "kind": "function",
        "signature": "addParticleWire(world, particleA, particleB, restLength, stiffness = 0.5)",
        "summary": "Add a wire constraint between two particles."
      },
      {
        "name": "createGPURope",
        "kind": "function",
        "signature": "createGPURope(world, startPos, endPos, segments, opts = {})",
        "summary": "Create a GPU-simulated rope with particles and constraints"
      },
      {
        "name": "uploadParticleVelocities",
        "kind": "function",
        "signature": "uploadParticleVelocities(world, particleOffset, velocities)",
        "summary": "Upload particle velocities to GPU buffer"
      },
      {
        "name": "updateRopeAttachment",
        "kind": "function",
        "signature": "updateRopeAttachment(world, entityId, which, worldPos)",
        "summary": "Update attachment constraint target position"
      },
      {
        "name": "destroyGPURope",
        "kind": "function",
        "signature": "destroyGPURope(world, entityId)",
        "summary": "Destroy a GPU rope and release its resources"
      },
      {
        "name": "addParticleCollider",
        "kind": "function",
        "signature": "addParticleCollider(world, type, center, radius, halfExtents)",
        "summary": "Add an SDF collider to the particle system."
      },
      {
        "name": "clearParticleColliders",
        "kind": "function",
        "signature": "clearParticleColliders(world)",
        "summary": "Clear all SDF colliders (call before per-frame rebuild)."
      },
      {
        "name": "rebuildParticleColliders",
        "kind": "function",
        "signature": "rebuildParticleColliders(world, colliders)",
        "summary": "Batch-rebuild SDF colliders from an array of descriptors. Call each frame with entity SDF shapes for proper mesh collision."
      },
      {
        "name": "seedParticles",
        "kind": "function",
        "signature": "seedParticles(world, count, options = {})",
        "summary": "Seed particles on GPU with random positions/velocities."
      },
      {
        "name": "setParticleAtlasMode",
        "kind": "function",
        "signature": "setParticleAtlasMode(world, mode)",
        "summary": "Set texture atlas sprite assignment mode."
      },
      {
        "name": "initSnapshotSystem",
        "kind": "function",
        "signature": "initSnapshotSystem(world, options = {})",
        "summary": "Initialize snapshot system for time rewind."
      },
      {
        "name": "updateSnapshots",
        "kind": "function",
        "signature": "updateSnapshots(world, emitters, currentTimeMs)",
        "summary": "Auto-capture snapshots during simulation (call each frame)."
      },
      {
        "name": "captureSnapshot",
        "kind": "function",
        "signature": "captureSnapshot(world, emitters, currentTimeMs)",
        "summary": "Manually take a snapshot."
      },
      {
        "name": "beginRewind",
        "kind": "function",
        "signature": "beginRewind(world)",
        "summary": "Start time rewind mode."
      },
      {
        "name": "endRewind",
        "kind": "function",
        "signature": "endRewind(world)",
        "summary": "Stop time rewind and resume simulation."
      },
      {
        "name": "updateRewind",
        "kind": "function",
        "signature": "updateRewind(world, emitters, dt)",
        "summary": "Step rewind playback (call each frame while rewinding)."
      },
      {
        "name": "rewindToTime",
        "kind": "function",
        "signature": "rewindToTime(world, emitters, targetTimeMs)",
        "summary": "Seek to a specific time in history."
      },
      {
        "name": "rewindToFrame",
        "kind": "function",
        "signature": "rewindToFrame(world, emitters, frameIndex)",
        "summary": "Restore a specific frame from history."
      },
      {
        "name": "setRewindSpeed",
        "kind": "function",
        "signature": "setRewindSpeed(world, speed)",
        "summary": "Set rewind playback speed (-1 = reverse, 1 = forward, 0.5 = slow, etc.)"
      },
      {
        "name": "getRewindInfo",
        "kind": "function",
        "signature": "getRewindInfo(world)",
        "summary": "Get snapshot/rewind status info."
      },
      {
        "name": "isRewinding",
        "kind": "function",
        "signature": "isRewinding(world)",
        "summary": "Check if currently in rewind mode."
      },
      {
        "name": "clearSnapshots",
        "kind": "function",
        "signature": "clearSnapshots(world)",
        "summary": "Clear all snapshot history."
      },
      {
        "name": "updateAdaptiveQuality",
        "kind": "function",
        "signature": "updateAdaptiveQuality(world, frameTimeMs)",
        "summary": "Update adaptive quality based on frame time. Automatically adjusts activeParticleCount to maintain target FPS. TECHNIQUES FROM AAA GAME INDUSTRY (DRS Best Practices): 1. Frame-rate independent exponential smoothing 2. Spike filtering - only reduce after sustained poor performance 3. Panic mode - aggressive drop when critically over budget 4. Fast recovery - don't be over-cautious when headroom exists 5. Proportional response - bigger adjustments when further from target 6. Target slightly under budget for safety margin"
      },
      {
        "name": "getParticleStats",
        "kind": "function",
        "signature": "getParticleStats(world)",
        "summary": "Get particle system stats for performance overlay."
      },
      {
        "name": "readbackPositionsFromGPU",
        "kind": "function",
        "signature": "async readbackPositionsFromGPU(world, targetPositions, particleCount)",
        "summary": ""
      },
      {
        "name": "readbackVelocitiesFromGPU",
        "kind": "function",
        "signature": "async readbackVelocitiesFromGPU(world, targetVelocities, particleCount)",
        "summary": ""
      },
      {
        "name": "readbackThermalFromGPU",
        "kind": "function",
        "signature": "async readbackThermalFromGPU(world, targetThermal, particleCount)",
        "summary": ""
      },
      {
        "name": "attachFluidWorld",
        "kind": "function",
        "signature": "attachFluidWorld(particleWorld, fluidWorld, worldMin, worldMax)",
        "summary": "Attach a fluid world to the particle simulation. Particles will sample and follow the fluid velocity field."
      },
      {
        "name": "stepParticleSimWorld",
        "kind": "function",
        "signature": "stepParticleSimWorld(world, deltaSeconds, options = {})",
        "summary": ""
      },
      {
        "name": "createLineRenderPipeline",
        "kind": "function",
        "signature": "createLineRenderPipeline(device, format)",
        "summary": "Create line rendering pipeline for particle connections"
      },
      {
        "name": "createLineComputePipelines",
        "kind": "function",
        "signature": "createLineComputePipelines(device)",
        "summary": "Create line compute pipelines for spatial grid and line generation"
      },
      {
        "name": "createLineUniformBuffer",
        "kind": "function",
        "signature": "createLineUniformBuffer(device)",
        "summary": "Create line uniform buffer for compute and render"
      },
      {
        "name": "initLineRenderingSystem",
        "kind": "function",
        "signature": "initLineRenderingSystem(world, format)",
        "summary": "Initialize complete line rendering system"
      },
      {
        "name": "stepLineGeneration",
        "kind": "function",
        "signature": "stepLineGeneration(world, options = {})",
        "summary": "Execute line generation compute passes"
      },
      {
        "name": "renderParticleLines",
        "kind": "function",
        "signature": "renderParticleLines(world, pass, viewProj)",
        "summary": "Render particle connection lines"
      },
      {
        "name": "updateMouseInteraction",
        "kind": "function",
        "signature": "updateMouseInteraction(ndcX, ndcY, active = true)",
        "summary": "Update mouse state for particle interaction"
      },
      {
        "name": "getMouseState",
        "kind": "function",
        "signature": "getMouseState()",
        "summary": "Get current mouse state"
      },
      {
        "name": "addForcePoint",
        "kind": "function",
        "signature": "addForcePoint(point)",
        "summary": "Add an attractor or repeller force point"
      },
      {
        "name": "removeForcePoint",
        "kind": "function",
        "signature": "removeForcePoint(index)",
        "summary": "Remove a force point by index"
      },
      {
        "name": "clearForcePoints",
        "kind": "function",
        "signature": "clearForcePoints()",
        "summary": "Clear all force points"
      },
      {
        "name": "getForcePoints",
        "kind": "function",
        "signature": "getForcePoints()",
        "summary": "Get all force points"
      },
      {
        "name": "updateForcePoint",
        "kind": "function",
        "signature": "updateForcePoint(index, x, y, z, strength)",
        "summary": "Update force point position"
      },
      {
        "name": "attachWindSystem",
        "kind": "function",
        "signature": "attachWindSystem(world, windSystem)",
        "summary": "Attach a WindSystem instance to the particle world. Once attached, stepParticleSimWorld will automatically read wind params each frame."
      },
      {
        "name": "detachWindSystem",
        "kind": "function",
        "signature": "detachWindSystem(world)",
        "summary": "Detach wind system from particle world"
      },
      {
        "name": "updateKillZones",
        "kind": "function",
        "signature": "updateKillZones(world, zones)",
        "summary": "Update kill zones for a particle world. Particles inside kill zones are killed."
      },
      {
        "name": "clearKillZones",
        "kind": "function",
        "signature": "clearKillZones(world)",
        "summary": "Clear all kill zones"
      },
      {
        "name": "startDissolve",
        "kind": "function",
        "signature": "startDissolve(groupId, duration = 1.0, direction = 'out')",
        "summary": "Start a dissolve effect for a particle group"
      },
      {
        "name": "getDissolve",
        "kind": "function",
        "signature": "getDissolve(groupId)",
        "summary": "Get dissolve factor for a group (0 = invisible, 1 = fully visible)"
      },
      {
        "name": "sampleCurlNoise",
        "kind": "function",
        "signature": "sampleCurlNoise(x, y, z, scale = 1, time = 0)",
        "summary": "Sample curl noise at a position (CPU version for debugging)"
      },
      {
        "name": "initTrailSystem",
        "kind": "function",
        "signature": "initTrailSystem(world, historyLength = 8)",
        "summary": "Initialize trail history buffer for particles"
      },
      {
        "name": "registerSubEmitter",
        "kind": "function",
        "signature": "registerSubEmitter(parentType, config)",
        "summary": "Register a sub-emitter configuration"
      },
      {
        "name": "getSubEmitterConfig",
        "kind": "function",
        "signature": "getSubEmitterConfig(parentType)",
        "summary": "Get sub-emitter config for a particle type"
      },
      {
        "name": "clearSubEmitters",
        "kind": "function",
        "signature": "clearSubEmitters()",
        "summary": "Clear all sub-emitter configs"
      },
      {
        "name": "configureParticleLongRange",
        "kind": "function",
        "signature": "configureParticleLongRange(world, config = {})",
        "summary": "Select exactly one long-range force backend without changing the legacy default."
      },
      {
        "name": "getParticleLongRangeState",
        "kind": "function",
        "signature": "getParticleLongRangeState(world)",
        "summary": ""
      },
      {
        "name": "ensureSystemEnabled",
        "kind": "function",
        "signature": "ensureSystemEnabled(world, systemName, config)",
        "summary": "Lazily enable a particle system on an existing world if not already initialized. Call from editor/runtime when an emitter's physics profile requires a system that wasn't enabled at init time."
      },
      {
        "name": "warmUpParticleWorld",
        "kind": "function",
        "signature": "warmUpParticleWorld(world, warmUpSeconds = 2.0, options = {})",
        "summary": "Pre-simulate a particle world for N seconds before the first visible frame. Runs stepParticleSimWorld repeatedly with fixed timestep so effects look \"established\" immediately (e.g. fire already burning, smoke already rising)."
      },
      {
        "name": "reserveParticles",
        "kind": "function",
        "signature": "reserveParticles(particleWorld, count, backend = 'free')",
        "summary": "Reserve a range of particles for a specific backend"
      },
      {
        "name": "releaseParticles",
        "kind": "function",
        "signature": "releaseParticles(particleWorld, count, backend)",
        "summary": "Release reserved particles (e.g., when rope is destroyed)"
      },
      {
        "name": "uploadParticles",
        "kind": "function",
        "signature": "uploadParticles(particleWorld, particleOffset, positions)",
        "summary": ""
      },
      {
        "name": "registerRopeChain",
        "kind": "function",
        "signature": "registerRopeChain(particleWorld, ropeMetadata)",
        "summary": "Register a rope chain in the particle system"
      },
      {
        "name": "unregisterRopeChain",
        "kind": "function",
        "signature": "unregisterRopeChain(particleWorld, entityId)",
        "summary": "Unregister a rope chain from the particle system"
      },
      {
        "name": "getTotalReservedParticles",
        "kind": "function",
        "signature": "getTotalReservedParticles(particleWorld)",
        "summary": "Get total particle count across all backends"
      },
      {
        "name": "CLASS_BUBBLE",
        "kind": "re-export",
        "signature": "CLASS_BUBBLE",
        "summary": ""
      },
      {
        "name": "CLASS_BULK",
        "kind": "re-export",
        "signature": "CLASS_BULK",
        "summary": ""
      },
      {
        "name": "CLASS_FOAM",
        "kind": "re-export",
        "signature": "CLASS_FOAM",
        "summary": ""
      },
      {
        "name": "CLASS_NONE",
        "kind": "re-export",
        "signature": "CLASS_NONE",
        "summary": ""
      },
      {
        "name": "CLASS_SPRAY",
        "kind": "re-export",
        "signature": "CLASS_SPRAY",
        "summary": ""
      },
      {
        "name": "CLASS_SURFACE",
        "kind": "re-export",
        "signature": "CLASS_SURFACE",
        "summary": ""
      },
      {
        "name": "CURVE_PRESETS",
        "kind": "re-export",
        "signature": "CURVE_PRESETS",
        "summary": ""
      },
      {
        "name": "DEFAULT_LOD_TIERS",
        "kind": "re-export",
        "signature": "DEFAULT_LOD_TIERS",
        "summary": ""
      },
      {
        "name": "ELEMENTS",
        "kind": "re-export",
        "signature": "ELEMENTS",
        "summary": ""
      },
      {
        "name": "ELEMENT_LUT_WGSL",
        "kind": "re-export",
        "signature": "ELEMENT_LUT_WGSL",
        "summary": ""
      },
      {
        "name": "EVENT_DEATH",
        "kind": "re-export",
        "signature": "EVENT_DEATH",
        "summary": ""
      },
      {
        "name": "EVENT_ENTITY_COLLISION",
        "kind": "re-export",
        "signature": "EVENT_ENTITY_COLLISION",
        "summary": ""
      },
      {
        "name": "EVENT_GROUND_COLLISION",
        "kind": "re-export",
        "signature": "EVENT_GROUND_COLLISION",
        "summary": ""
      },
      {
        "name": "EVENT_KILL_ZONE",
        "kind": "re-export",
        "signature": "EVENT_KILL_ZONE",
        "summary": ""
      },
      {
        "name": "EVENT_MASK_ALL",
        "kind": "re-export",
        "signature": "EVENT_MASK_ALL",
        "summary": ""
      },
      {
        "name": "INTERACTION_COOL",
        "kind": "re-export",
        "signature": "INTERACTION_COOL",
        "summary": ""
      },
      {
        "name": "INTERACTION_CORRODE",
        "kind": "re-export",
        "signature": "INTERACTION_CORRODE",
        "summary": ""
      },
      {
        "name": "INTERACTION_HEAT",
        "kind": "re-export",
        "signature": "INTERACTION_HEAT",
        "summary": ""
      },
      {
        "name": "INTERACTION_MOISTURE",
        "kind": "re-export",
        "signature": "INTERACTION_MOISTURE",
        "summary": ""
      },
      {
        "name": "MOLECULE_PRESETS",
        "kind": "re-export",
        "signature": "MOLECULE_PRESETS",
        "summary": ""
      },
      {
        "name": "ROPE_INTERACTION_MATERIALS",
        "kind": "re-export",
        "signature": "ROPE_INTERACTION_MATERIALS",
        "summary": ""
      },
      {
        "name": "addContainmentVolume",
        "kind": "re-export",
        "signature": "addContainmentVolume",
        "summary": ""
      },
      {
        "name": "addFluidSource",
        "kind": "re-export",
        "signature": "addFluidSource",
        "summary": ""
      },
      {
        "name": "addProjectionSurface",
        "kind": "re-export",
        "signature": "addProjectionSurface",
        "summary": ""
      },
      {
        "name": "addSDFAttractor",
        "kind": "re-export",
        "signature": "addSDFAttractor",
        "summary": ""
      },
      {
        "name": "buildNeighborGrid",
        "kind": "re-export",
        "signature": "buildNeighborGrid",
        "summary": ""
      },
      {
        "name": "clearContainmentVolumes",
        "kind": "re-export",
        "signature": "clearContainmentVolumes",
        "summary": ""
      },
      {
        "name": "clearDecals",
        "kind": "re-export",
        "signature": "clearDecals",
        "summary": ""
      },
      {
        "name": "clearProjectionSurfaces",
        "kind": "re-export",
        "signature": "clearProjectionSurfaces",
        "summary": ""
      },
      {
        "name": "clearSDFAttractors",
        "kind": "re-export",
        "signature": "clearSDFAttractors",
        "summary": ""
      },
      {
        "name": "computeAdaptiveSubsteps",
        "kind": "re-export",
        "signature": "computeAdaptiveSubsteps",
        "summary": ""
      },
      {
        "name": "createAdaptiveSubstepController",
        "kind": "re-export",
        "signature": "createAdaptiveSubstepController",
        "summary": ""
      },
      {
        "name": "createAttributeReader",
        "kind": "re-export",
        "signature": "createAttributeReader",
        "summary": ""
      },
      {
        "name": "createAudioBridge",
        "kind": "re-export",
        "signature": "createAudioBridge",
        "summary": ""
      },
      {
        "name": "createChemistrySystem",
        "kind": "re-export",
        "signature": "createChemistrySystem",
        "summary": ""
      },
      {
        "name": "createClassifierSystem",
        "kind": "re-export",
        "signature": "createClassifierSystem",
        "summary": ""
      },
      {
        "name": "createDecalSpawner",
        "kind": "re-export",
        "signature": "createDecalSpawner",
        "summary": ""
      },
      {
        "name": "createElectromagneticSystem",
        "kind": "re-export",
        "signature": "createElectromagneticSystem",
        "summary": ""
      },
      {
        "name": "createElementTable",
        "kind": "re-export",
        "signature": "createElementTable",
        "summary": ""
      },
      {
        "name": "createEmitterLOD",
        "kind": "re-export",
        "signature": "createEmitterLOD",
        "summary": ""
      },
      {
        "name": "createEulerianFluidSolver",
        "kind": "re-export",
        "signature": "createEulerianFluidSolver",
        "summary": ""
      },
      {
        "name": "createFlockingSystem",
        "kind": "re-export",
        "signature": "createFlockingSystem",
        "summary": ""
      },
      {
        "name": "createFmmSystem",
        "kind": "re-export",
        "signature": "createFmmSystem",
        "summary": ""
      },
      {
        "name": "createLennardJonesSystem",
        "kind": "re-export",
        "signature": "createLennardJonesSystem",
        "summary": ""
      },
      {
        "name": "createLifetimeCurvesSystem",
        "kind": "re-export",
        "signature": "createLifetimeCurvesSystem",
        "summary": ""
      },
      {
        "name": "createLocalSpaceSystem",
        "kind": "re-export",
        "signature": "createLocalSpaceSystem",
        "summary": ""
      },
      {
        "name": "createNBodySystem",
        "kind": "re-export",
        "signature": "createNBodySystem",
        "summary": ""
      },
      {
        "name": "createNeighborGridSystem",
        "kind": "re-export",
        "signature": "createNeighborGridSystem",
        "summary": ""
      },
      {
        "name": "createParticleMeshEwaldSystem",
        "kind": "re-export",
        "signature": "createParticleMeshEwaldSystem",
        "summary": ""
      },
      {
        "name": "createRopeInteractionSystem",
        "kind": "re-export",
        "signature": "createRopeInteractionSystem",
        "summary": ""
      },
      {
        "name": "createRopeNodeState",
        "kind": "re-export",
        "signature": "createRopeNodeState",
        "summary": ""
      },
      {
        "name": "createSDFAttractionSystem",
        "kind": "re-export",
        "signature": "createSDFAttractionSystem",
        "summary": ""
      },
      {
        "name": "createSPHSystem",
        "kind": "re-export",
        "signature": "createSPHSystem",
        "summary": ""
      },
      {
        "name": "createSoftContainmentSystem",
        "kind": "re-export",
        "signature": "createSoftContainmentSystem",
        "summary": ""
      },
      {
        "name": "createSplineFollowSystem",
        "kind": "re-export",
        "signature": "createSplineFollowSystem",
        "summary": ""
      },
      {
        "name": "createSurfaceProjectionSystem",
        "kind": "re-export",
        "signature": "createSurfaceProjectionSystem",
        "summary": ""
      },
      {
        "name": "createVectorFieldSystem",
        "kind": "re-export",
        "signature": "createVectorFieldSystem",
        "summary": ""
      },
      {
        "name": "curveFromLegacy3",
        "kind": "re-export",
        "signature": "curveFromLegacy3",
        "summary": ""
      },
      {
        "name": "destroyAttributeReader",
        "kind": "re-export",
        "signature": "destroyAttributeReader",
        "summary": ""
      },
      {
        "name": "destroyAudioBridge",
        "kind": "re-export",
        "signature": "destroyAudioBridge",
        "summary": ""
      },
      {
        "name": "destroyChemistrySystem",
        "kind": "re-export",
        "signature": "destroyChemistrySystem",
        "summary": ""
      },
      {
        "name": "destroyClassifierSystem",
        "kind": "re-export",
        "signature": "destroyClassifierSystem",
        "summary": ""
      },
      {
        "name": "destroyDecalSpawner",
        "kind": "re-export",
        "signature": "destroyDecalSpawner",
        "summary": ""
      },
      {
        "name": "destroyElectromagneticSystem",
        "kind": "re-export",
        "signature": "destroyElectromagneticSystem",
        "summary": ""
      },
      {
        "name": "destroyElementTable",
        "kind": "re-export",
        "signature": "destroyElementTable",
        "summary": ""
      },
      {
        "name": "destroyEulerianFluidSolver",
        "kind": "re-export",
        "signature": "destroyEulerianFluidSolver",
        "summary": ""
      },
      {
        "name": "destroyFlockingSystem",
        "kind": "re-export",
        "signature": "destroyFlockingSystem",
        "summary": ""
      },
      {
        "name": "destroyFmmSystem",
        "kind": "re-export",
        "signature": "destroyFmmSystem",
        "summary": ""
      },
      {
        "name": "destroyLennardJonesSystem",
        "kind": "re-export",
        "signature": "destroyLennardJonesSystem",
        "summary": ""
      },
      {
        "name": "destroyLifetimeCurvesSystem",
        "kind": "re-export",
        "signature": "destroyLifetimeCurvesSystem",
        "summary": ""
      },
      {
        "name": "destroyLocalSpaceSystem",
        "kind": "re-export",
        "signature": "destroyLocalSpaceSystem",
        "summary": ""
      },
      {
        "name": "destroyNBodySystem",
        "kind": "re-export",
        "signature": "destroyNBodySystem",
        "summary": ""
      },
      {
        "name": "destroyNeighborGridSystem",
        "kind": "re-export",
        "signature": "destroyNeighborGridSystem",
        "summary": ""
      },
      {
        "name": "destroyParticleMeshEwaldSystem",
        "kind": "re-export",
        "signature": "destroyParticleMeshEwaldSystem",
        "summary": ""
      },
      {
        "name": "destroyRopeInteractionSystem",
        "kind": "re-export",
        "signature": "destroyRopeInteractionSystem",
        "summary": ""
      },
      {
        "name": "destroySDFAttractionSystem",
        "kind": "re-export",
        "signature": "destroySDFAttractionSystem",
        "summary": ""
      },
      {
        "name": "destroySPHSystem",
        "kind": "re-export",
        "signature": "destroySPHSystem",
        "summary": ""
      },
      {
        "name": "destroySoftContainmentSystem",
        "kind": "re-export",
        "signature": "destroySoftContainmentSystem",
        "summary": ""
      },
      {
        "name": "destroySplineFollowSystem",
        "kind": "re-export",
        "signature": "destroySplineFollowSystem",
        "summary": ""
      },
      {
        "name": "destroySurfaceProjectionSystem",
        "kind": "re-export",
        "signature": "destroySurfaceProjectionSystem",
        "summary": ""
      },
      {
        "name": "destroyVectorFieldSystem",
        "kind": "re-export",
        "signature": "destroyVectorFieldSystem",
        "summary": ""
      },
      {
        "name": "disableEventSystem",
        "kind": "re-export",
        "signature": "disableEventSystem",
        "summary": ""
      },
      {
        "name": "enableEventSystem",
        "kind": "re-export",
        "signature": "enableEventSystem",
        "summary": ""
      },
      {
        "name": "estimateMaxSpeedCPU",
        "kind": "re-export",
        "signature": "estimateMaxSpeedCPU",
        "summary": ""
      },
      {
        "name": "evaluateEmitterLOD",
        "kind": "re-export",
        "signature": "evaluateEmitterLOD",
        "summary": ""
      },
      {
        "name": "evaluateEmitterLODByScreenSize",
        "kind": "re-export",
        "signature": "evaluateEmitterLODByScreenSize",
        "summary": ""
      },
      {
        "name": "executeChemistry",
        "kind": "re-export",
        "signature": "executeChemistry",
        "summary": ""
      },
      {
        "name": "executeClassifier",
        "kind": "re-export",
        "signature": "executeClassifier",
        "summary": ""
      },
      {
        "name": "executeElectromagnetic",
        "kind": "re-export",
        "signature": "executeElectromagnetic",
        "summary": ""
      },
      {
        "name": "executeFlocking",
        "kind": "re-export",
        "signature": "executeFlocking",
        "summary": ""
      },
      {
        "name": "executeFmm",
        "kind": "re-export",
        "signature": "executeFmm",
        "summary": ""
      },
      {
        "name": "executeLennardJones",
        "kind": "re-export",
        "signature": "executeLennardJones",
        "summary": ""
      },
      {
        "name": "executeLocalToWorld",
        "kind": "re-export",
        "signature": "executeLocalToWorld",
        "summary": ""
      },
      {
        "name": "executeNBody",
        "kind": "re-export",
        "signature": "executeNBody",
        "summary": ""
      },
      {
        "name": "executeParticleMeshEwald",
        "kind": "re-export",
        "signature": "executeParticleMeshEwald",
        "summary": ""
      },
      {
        "name": "executeSDFAttraction",
        "kind": "re-export",
        "signature": "executeSDFAttraction",
        "summary": ""
      },
      {
        "name": "executeSPH",
        "kind": "re-export",
        "signature": "executeSPH",
        "summary": ""
      },
      {
        "name": "executeSoftContainment",
        "kind": "re-export",
        "signature": "executeSoftContainment",
        "summary": ""
      },
      {
        "name": "executeSplineFollow",
        "kind": "re-export",
        "signature": "executeSplineFollow",
        "summary": ""
      },
      {
        "name": "executeSurfaceProjection",
        "kind": "re-export",
        "signature": "executeSurfaceProjection",
        "summary": ""
      },
      {
        "name": "executeWorldToLocal",
        "kind": "re-export",
        "signature": "executeWorldToLocal",
        "summary": ""
      },
      {
        "name": "feedCollisionEvents",
        "kind": "re-export",
        "signature": "feedCollisionEvents",
        "summary": ""
      },
      {
        "name": "findNearestParticle",
        "kind": "re-export",
        "signature": "findNearestParticle",
        "summary": ""
      },
      {
        "name": "findParticlesInRadius",
        "kind": "re-export",
        "signature": "findParticlesInRadius",
        "summary": ""
      },
      {
        "name": "flushPendingAudio",
        "kind": "re-export",
        "signature": "flushPendingAudio",
        "summary": ""
      },
      {
        "name": "generateProceduralVectorField",
        "kind": "re-export",
        "signature": "generateProceduralVectorField",
        "summary": ""
      },
      {
        "name": "getActiveDecals",
        "kind": "re-export",
        "signature": "getActiveDecals",
        "summary": ""
      },
      {
        "name": "getClassificationBuffer",
        "kind": "re-export",
        "signature": "getClassificationBuffer",
        "summary": ""
      },
      {
        "name": "getCurrentLODTier",
        "kind": "re-export",
        "signature": "getCurrentLODTier",
        "summary": ""
      },
      {
        "name": "getDecalCount",
        "kind": "re-export",
        "signature": "getDecalCount",
        "summary": ""
      },
      {
        "name": "getElement",
        "kind": "re-export",
        "signature": "getElement",
        "summary": ""
      },
      {
        "name": "getElementBySymbol",
        "kind": "re-export",
        "signature": "getElementBySymbol",
        "summary": ""
      },
      {
        "name": "getLastEvents",
        "kind": "re-export",
        "signature": "getLastEvents",
        "summary": ""
      },
      {
        "name": "getNeighborGridBuffers",
        "kind": "re-export",
        "signature": "getNeighborGridBuffers",
        "summary": ""
      },
      {
        "name": "getRopeInteractionMaterial",
        "kind": "re-export",
        "signature": "getRopeInteractionMaterial",
        "summary": ""
      },
      {
        "name": "getRopeInteractionState",
        "kind": "re-export",
        "signature": "getRopeInteractionState",
        "summary": ""
      },
      {
        "name": "getSPHDensityBuffer",
        "kind": "re-export",
        "signature": "getSPHDensityBuffer",
        "summary": ""
      },
      {
        "name": "getSubstanceInteraction",
        "kind": "re-export",
        "signature": "getSubstanceInteraction",
        "summary": ""
      },
      {
        "name": "getValenceBuffer",
        "kind": "re-export",
        "signature": "getValenceBuffer",
        "summary": ""
      },
      {
        "name": "initChemistryBindGroups",
        "kind": "re-export",
        "signature": "initChemistryBindGroups",
        "summary": ""
      },
      {
        "name": "initClassifierBindGroups",
        "kind": "re-export",
        "signature": "initClassifierBindGroups",
        "summary": ""
      },
      {
        "name": "initContainmentBindGroups",
        "kind": "re-export",
        "signature": "initContainmentBindGroups",
        "summary": ""
      },
      {
        "name": "initEMBindGroups",
        "kind": "re-export",
        "signature": "initEMBindGroups",
        "summary": ""
      },
      {
        "name": "initFlockingBindGroups",
        "kind": "re-export",
        "signature": "initFlockingBindGroups",
        "summary": ""
      },
      {
        "name": "initFluidBindGroups",
        "kind": "re-export",
        "signature": "initFluidBindGroups",
        "summary": ""
      },
      {
        "name": "initFmmBindGroups",
        "kind": "re-export",
        "signature": "initFmmBindGroups",
        "summary": ""
      },
      {
        "name": "initLJBindGroups",
        "kind": "re-export",
        "signature": "initLJBindGroups",
        "summary": ""
      },
      {
        "name": "initLocalSpaceBindGroups",
        "kind": "re-export",
        "signature": "initLocalSpaceBindGroups",
        "summary": ""
      },
      {
        "name": "initNBodyBindGroups",
        "kind": "re-export",
        "signature": "initNBodyBindGroups",
        "summary": ""
      },
      {
        "name": "initNeighborGridBindGroups",
        "kind": "re-export",
        "signature": "initNeighborGridBindGroups",
        "summary": ""
      },
      {
        "name": "initParticleMeshEwaldBindGroups",
        "kind": "re-export",
        "signature": "initParticleMeshEwaldBindGroups",
        "summary": ""
      },
      {
        "name": "initParticleValence",
        "kind": "re-export",
        "signature": "initParticleValence",
        "summary": ""
      },
      {
        "name": "initProjectionBindGroups",
        "kind": "re-export",
        "signature": "initProjectionBindGroups",
        "summary": ""
      },
      {
        "name": "initSDFAttractionBindGroup",
        "kind": "re-export",
        "signature": "initSDFAttractionBindGroup",
        "summary": ""
      },
      {
        "name": "initSPHBindGroups",
        "kind": "re-export",
        "signature": "initSPHBindGroups",
        "summary": ""
      },
      {
        "name": "initSplineFollowBindGroups",
        "kind": "re-export",
        "signature": "initSplineFollowBindGroups",
        "summary": ""
      },
      {
        "name": "ljMixingRule",
        "kind": "re-export",
        "signature": "ljMixingRule",
        "summary": ""
      },
      {
        "name": "loadVectorFieldFromData",
        "kind": "re-export",
        "signature": "loadVectorFieldFromData",
        "summary": ""
      },
      {
        "name": "offParticleEvent",
        "kind": "re-export",
        "signature": "offParticleEvent",
        "summary": ""
      },
      {
        "name": "onParticleEvent",
        "kind": "re-export",
        "signature": "onParticleEvent",
        "summary": ""
      },
      {
        "name": "parseFGA",
        "kind": "re-export",
        "signature": "parseFGA",
        "summary": ""
      },
      {
        "name": "processAudioEvents",
        "kind": "re-export",
        "signature": "processAudioEvents",
        "summary": ""
      },
      {
        "name": "readFmmDiagnostics",
        "kind": "re-export",
        "signature": "readFmmDiagnostics",
        "summary": ""
      },
      {
        "name": "readParticleMeshEwaldDiagnostics",
        "kind": "re-export",
        "signature": "readParticleMeshEwaldDiagnostics",
        "summary": ""
      },
      {
        "name": "readParticleMeta",
        "kind": "re-export",
        "signature": "readParticleMeta",
        "summary": ""
      },
      {
        "name": "readParticlePosition",
        "kind": "re-export",
        "signature": "readParticlePosition",
        "summary": ""
      },
      {
        "name": "readParticleVelocity",
        "kind": "re-export",
        "signature": "readParticleVelocity",
        "summary": ""
      },
      {
        "name": "readbackEvents",
        "kind": "re-export",
        "signature": "readbackEvents",
        "summary": ""
      },
      {
        "name": "refreshAttributeCache",
        "kind": "re-export",
        "signature": "refreshAttributeCache",
        "summary": ""
      },
      {
        "name": "registerAudioCue",
        "kind": "re-export",
        "signature": "registerAudioCue",
        "summary": ""
      },
      {
        "name": "registerEventHandler",
        "kind": "re-export",
        "signature": "registerEventHandler",
        "summary": ""
      },
      {
        "name": "registerRopeForInteraction",
        "kind": "re-export",
        "signature": "registerRopeForInteraction",
        "summary": ""
      },
      {
        "name": "resetAdaptiveSubsteps",
        "kind": "re-export",
        "signature": "resetAdaptiveSubsteps",
        "summary": ""
      },
      {
        "name": "setAudioListenerPos",
        "kind": "re-export",
        "signature": "setAudioListenerPos",
        "summary": ""
      },
      {
        "name": "setClassifierParams",
        "kind": "re-export",
        "signature": "setClassifierParams",
        "summary": ""
      },
      {
        "name": "setEmitterTransform",
        "kind": "re-export",
        "signature": "setEmitterTransform",
        "summary": ""
      },
      {
        "name": "setEmitterTransformFromPosRot",
        "kind": "re-export",
        "signature": "setEmitterTransformFromPosRot",
        "summary": ""
      },
      {
        "name": "setExternalField",
        "kind": "re-export",
        "signature": "setExternalField",
        "summary": ""
      },
      {
        "name": "setFlockingParams",
        "kind": "re-export",
        "signature": "setFlockingParams",
        "summary": ""
      },
      {
        "name": "setFmmParams",
        "kind": "re-export",
        "signature": "setFmmParams",
        "summary": ""
      },
      {
        "name": "setForcedLODTier",
        "kind": "re-export",
        "signature": "setForcedLODTier",
        "summary": ""
      },
      {
        "name": "setLifetimeCurves",
        "kind": "re-export",
        "signature": "setLifetimeCurves",
        "summary": ""
      },
      {
        "name": "setNBodyParams",
        "kind": "re-export",
        "signature": "setNBodyParams",
        "summary": ""
      },
      {
        "name": "setParticleCharges",
        "kind": "re-export",
        "signature": "setParticleCharges",
        "summary": ""
      },
      {
        "name": "setParticleElements",
        "kind": "re-export",
        "signature": "setParticleElements",
        "summary": ""
      },
      {
        "name": "setParticleMeshEwaldParams",
        "kind": "re-export",
        "signature": "setParticleMeshEwaldParams",
        "summary": ""
      },
      {
        "name": "setSPHParams",
        "kind": "re-export",
        "signature": "setSPHParams",
        "summary": ""
      },
      {
        "name": "setSplineControlPoints",
        "kind": "re-export",
        "signature": "setSplineControlPoints",
        "summary": ""
      },
      {
        "name": "setSplineFollowParams",
        "kind": "re-export",
        "signature": "setSplineFollowParams",
        "summary": ""
      },
      {
        "name": "setVectorFieldParams",
        "kind": "re-export",
        "signature": "setVectorFieldParams",
        "summary": ""
      },
      {
        "name": "stepEulerianFluid",
        "kind": "re-export",
        "signature": "stepEulerianFluid",
        "summary": ""
      },
      {
        "name": "stepRopeInteraction",
        "kind": "re-export",
        "signature": "stepRopeInteraction",
        "summary": ""
      },
      {
        "name": "unregisterRopeInteraction",
        "kind": "re-export",
        "signature": "unregisterRopeInteraction",
        "summary": ""
      },
      {
        "name": "updateDecals",
        "kind": "re-export",
        "signature": "updateDecals",
        "summary": ""
      },
      {
        "name": "updateSDFAttractor",
        "kind": "re-export",
        "signature": "updateSDFAttractor",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleSnapshot",
    "path": "engine/reference/sim/particles/ParticleSnapshot.md",
    "source": "engine/sim/particles/ParticleSnapshot.js",
    "import": "/engine/sim/particles/ParticleSnapshot.js",
    "sourceHash": "3e2abf3b5bd98569c6dfd6d48b19659cba32d18167bed862002c7f6e1f5ddc18",
    "summary": "Create particle snapshot system for time rewind",
    "exports": [
      {
        "name": "createSnapshotSystem",
        "kind": "function",
        "signature": "createSnapshotSystem(device, maxParticles, options = {})",
        "summary": "Create particle snapshot system for time rewind"
      },
      {
        "name": "initSnapshotBindGroups",
        "kind": "function",
        "signature": "initSnapshotBindGroups(snapshot, positionBuffer, velocityBuffer, metaBuffer, thermalBuffer)",
        "summary": "Initialize bind groups with particle buffers"
      },
      {
        "name": "takeSnapshot",
        "kind": "function",
        "signature": "takeSnapshot(snapshot, emitters, currentTimeMs)",
        "summary": "Take a snapshot of current state"
      },
      {
        "name": "autoSnapshot",
        "kind": "function",
        "signature": "autoSnapshot(snapshot, emitters, currentTimeMs)",
        "summary": "Auto-snapshot based on interval (call every frame)"
      },
      {
        "name": "restoreFrame",
        "kind": "function",
        "signature": "restoreFrame(snapshot, emitters, frameIndex)",
        "summary": "Restore exact frame from history"
      },
      {
        "name": "restoreInterpolated",
        "kind": "function",
        "signature": "restoreInterpolated(snapshot, emitters, frameA, frameB, t)",
        "summary": "Restore with interpolation between two frames"
      },
      {
        "name": "seekToTime",
        "kind": "function",
        "signature": "seekToTime(snapshot, emitters, targetTimeMs)",
        "summary": "Seek to a specific time in history"
      },
      {
        "name": "startRewind",
        "kind": "function",
        "signature": "startRewind(snapshot)",
        "summary": "Start rewind mode"
      },
      {
        "name": "stopRewind",
        "kind": "function",
        "signature": "stopRewind(snapshot)",
        "summary": "Stop rewind and resume simulation"
      },
      {
        "name": "stepRewind",
        "kind": "function",
        "signature": "stepRewind(snapshot, emitters, dt)",
        "summary": "Step rewind playback (call each frame while rewinding)"
      },
      {
        "name": "setPlaybackSpeed",
        "kind": "function",
        "signature": "setPlaybackSpeed(snapshot, speed)",
        "summary": "Set playback speed (-1 = reverse, 1 = forward, 0.5 = slow forward, etc.)"
      },
      {
        "name": "getSnapshotInfo",
        "kind": "function",
        "signature": "getSnapshotInfo(snapshot)",
        "summary": "Get current playback info"
      },
      {
        "name": "clearHistory",
        "kind": "function",
        "signature": "clearHistory(snapshot)",
        "summary": "Clear all history"
      },
      {
        "name": "destroySnapshotSystem",
        "kind": "function",
        "signature": "destroySnapshotSystem(snapshot)",
        "summary": "Destroy snapshot system"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleSnapshotDelta",
    "path": "engine/reference/sim/particles/ParticleSnapshotDelta.md",
    "source": "engine/sim/particles/ParticleSnapshotDelta.js",
    "import": "/engine/sim/particles/ParticleSnapshotDelta.js",
    "sourceHash": "39a100183e2fffbf0923c93f67f1d733c8e6873e0cca7ad082a6d0e59719947c",
    "summary": "ParticleSnapshotDelta.js - Delta-Compressed Particle State History Like the WorldTimeline system, uses delta compression to store only changes: - Keyframes: Full state snapshots at intervals - Delta frames: Only particles that moved significantly - No max frame limit - unlimited history with efficient storage Compression approach: - Track which particles changed since last frame - Store only changed particle indices + their new state - Periodic keyframes for random access",
    "exports": [
      {
        "name": "hashParticleKeyframe",
        "kind": "function",
        "signature": "hashParticleKeyframe(frame)",
        "summary": ""
      },
      {
        "name": "hashParticleKeyframeSemantic",
        "kind": "function",
        "signature": "hashParticleKeyframeSemantic(frame, sampleVec4Count = 1024)",
        "summary": ""
      },
      {
        "name": "createDeltaSnapshotSystem",
        "kind": "function",
        "signature": "createDeltaSnapshotSystem(options = {})",
        "summary": "Create delta-compressed particle snapshot system"
      },
      {
        "name": "captureFrame",
        "kind": "function",
        "signature": "async captureFrame(snapshot, particleState, emitters, currentTimeMs)",
        "summary": "Capture a snapshot (keyframe or delta based on interval) Captures EVERYTHING: positions, velocities, meta, slotInfo, liveCount, freeSlots"
      },
      {
        "name": "autoCapture",
        "kind": "function",
        "signature": "async autoCapture(snapshot, particleState, emitters, currentTimeMs)",
        "summary": "Auto-capture based on interval - NON-BLOCKING version Uses double-buffered GPU readback to avoid blocking the main thread"
      },
      {
        "name": "reconstructState",
        "kind": "function",
        "signature": "reconstructState(snapshot, frameIndex)",
        "summary": "Reconstruct FULL particle state at a specific frame by applying deltas from keyframe Includes positions, velocities, meta, slotInfo, liveCount, freeSlots - everything needed for complete rewind Handles both quantized (Int16) and unquantized (Float32) data formats"
      },
      {
        "name": "restoreToFrame",
        "kind": "function",
        "signature": "restoreToFrame(snapshot, particleState, emitters, frameIndex)",
        "summary": "Restore FULL particle state to a specific frame"
      },
      {
        "name": "restoreInterpolated",
        "kind": "function",
        "signature": "restoreInterpolated(snapshot, particleState, emitters, frameA, frameB, t)",
        "summary": "Restore with interpolation between two frames"
      },
      {
        "name": "seekToTime",
        "kind": "function",
        "signature": "seekToTime(snapshot, particleState, emitters, targetTimeMs)",
        "summary": "Seek to specific time"
      },
      {
        "name": "startRewind",
        "kind": "function",
        "signature": "startRewind(snapshot)",
        "summary": "Start rewind mode"
      },
      {
        "name": "stopRewind",
        "kind": "function",
        "signature": "stopRewind(snapshot)",
        "summary": "Stop rewind"
      },
      {
        "name": "stepRewind",
        "kind": "function",
        "signature": "stepRewind(snapshot, particleState, emitters, dtMs)",
        "summary": "Step rewind playback - restores FULL particle state including spawn/death"
      },
      {
        "name": "setPlaybackSpeed",
        "kind": "function",
        "signature": "setPlaybackSpeed(snapshot, speed)",
        "summary": "Set playback speed"
      },
      {
        "name": "setEasingType",
        "kind": "function",
        "signature": "setEasingType(snapshot, easingType)",
        "summary": "Set easing type for interpolation"
      },
      {
        "name": "getEasingTypes",
        "kind": "function",
        "signature": "getEasingTypes()",
        "summary": "Get available easing types"
      },
      {
        "name": "getSnapshotInfo",
        "kind": "function",
        "signature": "getSnapshotInfo(snapshot)",
        "summary": "Get snapshot info"
      },
      {
        "name": "truncateHistoryAfterTime",
        "kind": "function",
        "signature": "truncateHistoryAfterTime(snapshot, timeMs)",
        "summary": ""
      },
      {
        "name": "clearHistory",
        "kind": "function",
        "signature": "clearHistory(snapshot)",
        "summary": "Clear all history"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleSoftContainment",
    "path": "engine/reference/sim/particles/ParticleSoftContainment.md",
    "source": "engine/sim/particles/ParticleSoftContainment.js",
    "import": "/engine/sim/particles/ParticleSoftContainment.js",
    "sourceHash": "346761529124fa5ced66d2943c96aa19b0914cf86a502f3eb62232c1be561248",
    "summary": "ParticleSoftContainment.js - Soft Containment Volumes (GAP 31) GPU compute shader that keeps particles inside shape volumes using soft bounce forces instead of hard kill zones. Particles approaching the boundary receive a proportional repulsion force pushing them back inside. Supports: sphere, box, cylinder containment volumes. Unlike kill zones (hard removal), soft containment preserves particles and creates natural-looking bounded effects. Matches PopcornFX CParticleEvolver_Containment. Usage: const cont = createSoftContainmentSystem(device, maxParticles); addContainmentVolume(cont, { type: 'sphere', center: [0,5,0], radius: 10 }); initContainmentBindGroups(cont, device, positionBuffer, velocityBuffer); executeSoftContainment(cont, device, particleCount, dt);",
    "exports": [
      {
        "name": "createSoftContainmentSystem",
        "kind": "function",
        "signature": "createSoftContainmentSystem(device, maxParticles)",
        "summary": "Create the soft containment system."
      },
      {
        "name": "addContainmentVolume",
        "kind": "function",
        "signature": "addContainmentVolume(system, volume)",
        "summary": "Add a containment volume."
      },
      {
        "name": "initContainmentBindGroups",
        "kind": "function",
        "signature": "initContainmentBindGroups(system, device, positionBuffer, velocityBuffer)",
        "summary": "Initialize bind groups."
      },
      {
        "name": "executeSoftContainment",
        "kind": "function",
        "signature": "executeSoftContainment(system, device, particleCount, dt)",
        "summary": "Execute the soft containment compute pass."
      },
      {
        "name": "clearContainmentVolumes",
        "kind": "function",
        "signature": "clearContainmentVolumes(system)",
        "summary": "Clear all volumes."
      },
      {
        "name": "destroySoftContainmentSystem",
        "kind": "function",
        "signature": "destroySoftContainmentSystem(system)",
        "summary": "Destroy the system."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleSpawnShapes",
    "path": "engine/reference/sim/particles/ParticleSpawnShapes.md",
    "source": "engine/sim/particles/ParticleSpawnShapes.js",
    "import": "/engine/sim/particles/ParticleSpawnShapes.js",
    "sourceHash": "48638ee6686e3bc43005b9b2758418d7ce0e7647143c67fe16da463bceda8501",
    "summary": "ParticleSpawnShapes.js - Spawn shape primitives for particle emission Niagara/PopcornFX/Houdini parity: spawn particles in structured shapes instead of just point + random spread. Each function returns { position: [x,y,z], normal: [nx,ny,nz] } Normal points outward from the shape surface — useful for initial velocity direction. ⚠️ MULTIPLAYER: Uses deterministic RNG from AIRandom.js",
    "exports": [
      {
        "name": "spawnSphere",
        "kind": "function",
        "signature": "spawnSphere(center, radius, surfaceOnly = false)",
        "summary": "Spawn inside or on a sphere"
      },
      {
        "name": "spawnHemisphere",
        "kind": "function",
        "signature": "spawnHemisphere(center, radius, axis = [0, 1, 0], surfaceOnly = false)",
        "summary": "Spawn on a hemisphere (oriented along axis)"
      },
      {
        "name": "spawnBox",
        "kind": "function",
        "signature": "spawnBox(min, max, surfaceOnly = false)",
        "summary": "Spawn inside or on a box (AABB)"
      },
      {
        "name": "spawnBoxCenter",
        "kind": "function",
        "signature": "spawnBoxCenter(center, halfExtents, surfaceOnly = false)",
        "summary": "Spawn inside or on a box defined by center + half-extents"
      },
      {
        "name": "spawnCylinder",
        "kind": "function",
        "signature": "spawnCylinder(center, axis, radius, height, surfaceOnly = false)",
        "summary": "Spawn inside or on a cylinder"
      },
      {
        "name": "spawnCone",
        "kind": "function",
        "signature": "spawnCone(apex, axis, angle, height, surfaceOnly = false)",
        "summary": "Spawn inside or on a cone"
      },
      {
        "name": "spawnRing",
        "kind": "function",
        "signature": "spawnRing(center, axis, radius, thickness = 0)",
        "summary": "Spawn on a ring (circle in 3D space)"
      },
      {
        "name": "spawnTorus",
        "kind": "function",
        "signature": "spawnTorus(center, axis, majorRadius, minorRadius, surfaceOnly = false)",
        "summary": "Spawn inside or on a torus"
      },
      {
        "name": "spawnLine",
        "kind": "function",
        "signature": "spawnLine(a, b, thickness = 0)",
        "summary": "Spawn along a line segment"
      },
      {
        "name": "spawnDisc",
        "kind": "function",
        "signature": "spawnDisc(center, normal, radius, innerRadius = 0)",
        "summary": "Spawn on a disc (filled circle in 3D space)"
      },
      {
        "name": "spawnGrid",
        "kind": "function",
        "signature": "spawnGrid(origin, axisU, axisV, countU, countV, index, jitter = 0)",
        "summary": "Spawn at grid positions (deterministic placement, good for walls/floors of particles)"
      },
      {
        "name": "spawnFromShape",
        "kind": "function",
        "signature": "spawnFromShape(shape, emitterPos, index = 0)",
        "summary": "Spawn a particle using a shape configuration object"
      },
      {
        "name": "velocityFromNormal",
        "kind": "function",
        "signature": "velocityFromNormal(normal, speed, spread = 0.2)",
        "summary": "Generate initial velocity from spawn shape result"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleSplineFollow",
    "path": "engine/reference/sim/particles/ParticleSplineFollow.md",
    "source": "engine/sim/particles/ParticleSplineFollow.js",
    "import": "/engine/sim/particles/ParticleSplineFollow.js",
    "sourceHash": "355820138465f1bfbe55001c16910f385d08a088ce7f37356b43181a0b93c6f3",
    "summary": "ParticleSplineFollow.js - Spline/Path Following (GAP 28) GPU compute shader that steers particles along bezier or catmull-rom spline paths. Each particle tracks its progress (t parameter) along the curve and applies a steering force toward the next point on the path. Supports: - Cubic Bezier paths (4 control points per segment) - Catmull-Rom splines (N control points, smooth interpolation) - Per-particle speed along path - Spread: particles can deviate from path center by a configurable radius - Looping and ping-pong modes Control points are uploaded as a storage buffer (max 64 points). Each particle stores its path progress in thermalData.w (repurposed when not using thermal system) or a dedicated progress buffer. Usage: const spline = createSplineFollowSystem(device, maxParticles); setSplineControlPoints(spline, device, points); initSplineFollowBindGroups(spline, device, positionBuffer, velocityBuffer); executeSplineFollow(spline, device, particleCount, dt);",
    "exports": [
      {
        "name": "createSplineFollowSystem",
        "kind": "function",
        "signature": "createSplineFollowSystem(device, maxParticles)",
        "summary": "Create the spline follow system."
      },
      {
        "name": "setSplineControlPoints",
        "kind": "function",
        "signature": "setSplineControlPoints(system, device, points)",
        "summary": "Upload control points (array of [x, y, z])."
      },
      {
        "name": "initSplineFollowBindGroups",
        "kind": "function",
        "signature": "initSplineFollowBindGroups(system, device, positionBuffer, velocityBuffer)",
        "summary": "Initialize bind groups."
      },
      {
        "name": "setSplineFollowParams",
        "kind": "function",
        "signature": "setSplineFollowParams(system, params)",
        "summary": "Update spline follow parameters."
      },
      {
        "name": "executeSplineFollow",
        "kind": "function",
        "signature": "executeSplineFollow(system, device, particleCount, dt)",
        "summary": "Execute the spline follow compute pass."
      },
      {
        "name": "destroySplineFollowSystem",
        "kind": "function",
        "signature": "destroySplineFollowSystem(system)",
        "summary": "Destroy the system."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleSplitting",
    "path": "engine/reference/sim/particles/ParticleSplitting.md",
    "source": "engine/sim/particles/ParticleSplitting.js",
    "import": "/engine/sim/particles/ParticleSplitting.js",
    "sourceHash": "14404283683d59eff768665af3ad1f1c11fdbb56521d6919971c8a84cde96918",
    "summary": "ParticleSplitting.js - Adaptive Particle Refinement for Fluid When water stretches thin (low SPH density, high velocity, few neighbors), particles split into smaller child particles. When many small particles cluster in a dense area, they merge back. This is how water naturally breaks apart into spray/droplets and reforms. GPU compute shader scans liquid particles, identifies split candidates, and uses atomic counters to claim dead particle slots for children. Split trigger: density < threshold AND speed > threshold Merge trigger: two particles within close range, both small, low relative velocity Mass conservation: Split: parent shrinks to 0.7× size, child spawns at 0.7× size (2 × 0.7³ ≈ 0.686 volume — slight loss acceptable for stability) Merge: surviving particle grows by merged particle's volume^(1/3) Usage: const split = createSplittingSystem(device, maxParticles); initSplittingBindGroups(split, device, posBuffer, velBuffer, thermalBuffer, metaBuffer, sphDensityBuffer); executeSplitting(split, device, particleCount, dt);",
    "exports": [
      {
        "name": "createSplittingSystem",
        "kind": "function",
        "signature": "createSplittingSystem(device, maxParticles)",
        "summary": "Create the splitting system."
      },
      {
        "name": "initSplittingBindGroups",
        "kind": "function",
        "signature": "initSplittingBindGroups(system, device, positionBuffer, velocityBuffer, thermalBuffer, metaBuffer, sphDensityBuffer)",
        "summary": "Initialize bind groups."
      },
      {
        "name": "executeSplitting",
        "kind": "function",
        "signature": "executeSplitting(system, device, particleCount, dt)",
        "summary": "Execute the splitting compute pass."
      },
      {
        "name": "setSplittingParams",
        "kind": "function",
        "signature": "setSplittingParams(system, config)",
        "summary": "Update splitting parameters at runtime."
      },
      {
        "name": "destroySplittingSystem",
        "kind": "function",
        "signature": "destroySplittingSystem(system)",
        "summary": "Destroy splitting system."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleSurfaceProjection",
    "path": "engine/reference/sim/particles/ParticleSurfaceProjection.md",
    "source": "engine/sim/particles/ParticleSurfaceProjection.js",
    "import": "/engine/sim/particles/ParticleSurfaceProjection.js",
    "sourceHash": "02b2a2e45688347809af333f95a35273c63b9203699426bd18ad9736994d6b2a",
    "summary": "ParticleSurfaceProjection.js - Surface Projection / Conform (GAP 29) GPU compute shader that projects particles onto shape surfaces. Particles are snapped or attracted to the nearest point on a surface, enabling effects like particles crawling along walls, flowing over terrain, or conforming to mesh silhouettes. Supports analytical shapes (sphere, box, plane, cylinder) on GPU. For arbitrary meshes, uses a signed distance field (SDF) with gradient descent to find the nearest surface point. Matches PopcornFX CParticleEvolver_Projection. Usage: const proj = createSurfaceProjectionSystem(device, maxParticles); addProjectionSurface(proj, { type: 'sphere', center: [0,0,0], radius: 5 }); initProjectionBindGroups(proj, device, positionBuffer, velocityBuffer); executeSurfaceProjection(proj, device, particleCount, dt);",
    "exports": [
      {
        "name": "createSurfaceProjectionSystem",
        "kind": "function",
        "signature": "createSurfaceProjectionSystem(device, maxParticles)",
        "summary": "Create the surface projection system."
      },
      {
        "name": "addProjectionSurface",
        "kind": "function",
        "signature": "addProjectionSurface(system, surface)",
        "summary": "Add a projection surface."
      },
      {
        "name": "initProjectionBindGroups",
        "kind": "function",
        "signature": "initProjectionBindGroups(system, device, positionBuffer, velocityBuffer)",
        "summary": "Initialize bind groups."
      },
      {
        "name": "executeSurfaceProjection",
        "kind": "function",
        "signature": "executeSurfaceProjection(system, device, particleCount, dt)",
        "summary": "Execute the surface projection compute pass."
      },
      {
        "name": "clearProjectionSurfaces",
        "kind": "function",
        "signature": "clearProjectionSurfaces(system)",
        "summary": "Clear all surfaces."
      },
      {
        "name": "destroySurfaceProjectionSystem",
        "kind": "function",
        "signature": "destroySurfaceProjectionSystem(system)",
        "summary": "Destroy the system."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleTextureAtlas",
    "path": "engine/reference/sim/particles/ParticleTextureAtlas.md",
    "source": "engine/sim/particles/ParticleTextureAtlas.js",
    "import": "/engine/sim/particles/ParticleTextureAtlas.js",
    "sourceHash": "2bdef5a5390df8ee67baefd4d4dd35169c3cb549ba238a41497d10ee0ff210ee",
    "summary": "Create texture atlas configuration",
    "exports": [
      {
        "name": "createAtlasConfig",
        "kind": "function",
        "signature": "createAtlasConfig(options = {})",
        "summary": "Create texture atlas configuration"
      },
      {
        "name": "createTextureAtlasSystem",
        "kind": "function",
        "signature": "createTextureAtlasSystem(device, maxParticles, config = {})",
        "summary": "Create texture atlas system"
      },
      {
        "name": "loadAtlasTexture",
        "kind": "function",
        "signature": "async loadAtlasTexture(atlasSystem, device, imageUrl)",
        "summary": "Load texture atlas from image"
      },
      {
        "name": "createProceduralAtlas",
        "kind": "function",
        "signature": "createProceduralAtlas(atlasSystem, device, options = {})",
        "summary": "Create procedural atlas texture (for testing)"
      },
      {
        "name": "initAtlasBindGroup",
        "kind": "function",
        "signature": "initAtlasBindGroup(atlasSystem, device, positionsBuffer, velocitiesBuffer)",
        "summary": "Initialize sprite assignment bind group"
      },
      {
        "name": "assignSpritesGPU",
        "kind": "function",
        "signature": "assignSpritesGPU(atlasSystem, device, particleCount, time)",
        "summary": "Assign sprites to particles via GPU"
      },
      {
        "name": "getAtlasUniforms",
        "kind": "function",
        "signature": "getAtlasUniforms(atlasSystem, time)",
        "summary": "Get atlas uniforms for rendering"
      },
      {
        "name": "setAssignmentMode",
        "kind": "function",
        "signature": "setAssignmentMode(atlasSystem, mode)",
        "summary": "Set sprite assignment mode"
      },
      {
        "name": "destroyTextureAtlasSystem",
        "kind": "function",
        "signature": "destroyTextureAtlasSystem(atlasSystem)",
        "summary": "Destroy texture atlas system"
      },
      {
        "name": "TEXTURE_ATLAS_TYPES",
        "kind": "constant",
        "signature": "TEXTURE_ATLAS_TYPES",
        "summary": ""
      },
      {
        "name": "TEXTURE_ATLAS_FUNCTIONS",
        "kind": "constant",
        "signature": "TEXTURE_ATLAS_FUNCTIONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticleVectorField",
    "path": "engine/reference/sim/particles/ParticleVectorField.md",
    "source": "engine/sim/particles/ParticleVectorField.js",
    "import": "/engine/sim/particles/ParticleVectorField.js",
    "sourceHash": "724488039996cad3d586630fc26f6f56840492979eac51f0c94454b302b77673",
    "summary": "Create a filterable 3D vector-field texture compatible with linear sampling.",
    "exports": [
      {
        "name": "createVectorFieldTexture",
        "kind": "function",
        "signature": "createVectorFieldTexture(device, resolution, label = 'VectorField.texture')",
        "summary": "Create a filterable 3D vector-field texture compatible with linear sampling."
      },
      {
        "name": "createVectorFieldSystem",
        "kind": "function",
        "signature": "createVectorFieldSystem(device, options = {})",
        "summary": "Create a vector field system."
      },
      {
        "name": "loadVectorFieldFromData",
        "kind": "function",
        "signature": "loadVectorFieldFromData(system, data, size)",
        "summary": "Load raw velocity data into the vector field."
      },
      {
        "name": "generateProceduralVectorField",
        "kind": "function",
        "signature": "generateProceduralVectorField(system, type = 'tornado')",
        "summary": "Generate a procedural vector field."
      },
      {
        "name": "setVectorFieldParams",
        "kind": "function",
        "signature": "setVectorFieldParams(system, params = {})",
        "summary": "Update vector field parameters."
      },
      {
        "name": "parseFGA",
        "kind": "function",
        "signature": "parseFGA(fgaText)",
        "summary": "Parse FGA format (FluidNinja/Houdini vector field export). FGA is a simple text format: header lines then XYZ velocity per voxel."
      },
      {
        "name": "destroyVectorFieldSystem",
        "kind": "function",
        "signature": "destroyVectorFieldSystem(system)",
        "summary": "Destroy the vector field system."
      },
      {
        "name": "PARTICLE_VECTOR_FIELD_TEXTURE_FORMAT",
        "kind": "constant",
        "signature": "PARTICLE_VECTOR_FIELD_TEXTURE_FORMAT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/ParticlesStateRegistry",
    "path": "engine/reference/sim/particles/ParticlesStateRegistry.md",
    "source": "engine/sim/particles/ParticlesStateRegistry.js",
    "import": "/engine/sim/particles/ParticlesStateRegistry.js",
    "sourceHash": "046469a146ada821d18d120ff7b67265352ac702d04b34a0a4ba78731c7ca0ac",
    "summary": "",
    "exports": [
      {
        "name": "setActiveParticlesState",
        "kind": "function",
        "signature": "setActiveParticlesState(particlesState)",
        "summary": ""
      },
      {
        "name": "getActiveParticlesState",
        "kind": "function",
        "signature": "getActiveParticlesState()",
        "summary": ""
      },
      {
        "name": "clearActiveParticlesState",
        "kind": "function",
        "signature": "clearActiveParticlesState()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/RopeMaterial",
    "path": "engine/reference/sim/particles/RopeMaterial.md",
    "source": "engine/sim/particles/RopeMaterial.js",
    "import": "/engine/sim/particles/RopeMaterial.js",
    "sourceHash": "e4a7f9dce6243ee6d6d31186469fa11301c4646e11dcbb6a14a5764d18f76713",
    "summary": "RopeMaterial.js — Thermal & interaction properties for rope/chain fiber materials. Extends the visual-only FIBER_MATERIALS from RopeSchema with physics properties needed for particle↔rope interaction: flammability, moisture absorption, thermal conductivity, burn/break temperatures, mass modifiers. EVERY material (including steel and chain) participates in interactions — metal softens and breaks at high enough temperatures, organic materials burn, all materials conduct heat along the chain. Thresholds differ per material. Interaction types by substance: - Fire/lava/plasma → heat transfer → softening → burning/melting → chain split - Water/blood/honey → moisture absorption → heavier → sag → wet stiffness change - Ice/snow → cooling → stiffening → freeze-brittle - Acid → corrosion → integrity loss → chain split - Sparks/debris → minor heat transfer",
    "exports": [
      {
        "name": "getSubstanceInteraction",
        "kind": "function",
        "signature": "getSubstanceInteraction(substance)",
        "summary": "Map particle substance to interaction type and intensity. Returns null if the substance doesn't interact with rope."
      },
      {
        "name": "createRopeNodeState",
        "kind": "function",
        "signature": "createRopeNodeState(nodeCount, ambientTemp = 293)",
        "summary": "Create per-node interaction state for a rope."
      },
      {
        "name": "getRopeInteractionMaterial",
        "kind": "function",
        "signature": "getRopeInteractionMaterial(fiberMaterial)",
        "summary": "Get the interaction material for a fiber material name. Falls back to hemp if unknown."
      },
      {
        "name": "ROPE_INTERACTION_MATERIALS",
        "kind": "constant",
        "signature": "ROPE_INTERACTION_MATERIALS",
        "summary": ""
      },
      {
        "name": "INTERACTION_HEAT",
        "kind": "constant",
        "signature": "INTERACTION_HEAT",
        "summary": ""
      },
      {
        "name": "INTERACTION_MOISTURE",
        "kind": "constant",
        "signature": "INTERACTION_MOISTURE",
        "summary": ""
      },
      {
        "name": "INTERACTION_COOL",
        "kind": "constant",
        "signature": "INTERACTION_COOL",
        "summary": ""
      },
      {
        "name": "INTERACTION_CORRODE",
        "kind": "constant",
        "signature": "INTERACTION_CORRODE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/RopeParticleInteraction",
    "path": "engine/reference/sim/particles/RopeParticleInteraction.md",
    "source": "engine/sim/particles/RopeParticleInteraction.js",
    "import": "/engine/sim/particles/RopeParticleInteraction.js",
    "sourceHash": "5bc3ecd4a0717be3c499261d61c1cec26b34ad7b5c10e9a11407a8a3781d9818",
    "summary": "RopeParticleInteraction.js — CPU-side per-tick bridge between free particles and ropes. Runs each simulation frame and performs: 1. Spatial proximity query: find free particles near each rope node 2. Heat transfer: fire/lava/plasma → rope heats up; ice/snow → rope cools 3. Moisture absorption: water/blood/honey near rope → rope gets heavier, sags 4. Corrosion: acid particles eat away rope integrity 5. Thermal conduction: heat spreads along the rope between adjacent nodes 6. Burning: when node temperature exceeds burn threshold → ignite, char, break 7. Chain splitting: when integrity reaches 0 → break constraint → 2 separate chains Works with ALL materials including steel/chain — metal softens and eventually breaks at high enough temperatures (lava, plasma). Thresholds differ per material. This is a CPU-side system because it needs to: - Make topology decisions (break constraints, split chains) - Spawn new emitters (fire/smoke on burning rope) - Modify per-constraint mass values (moisture → heavier)",
    "exports": [
      {
        "name": "createRopeInteractionSystem",
        "kind": "function",
        "signature": "createRopeInteractionSystem()",
        "summary": "Create the rope↔particle interaction system. Attach to the particle world and call stepRopeInteraction() each tick."
      },
      {
        "name": "registerRopeForInteraction",
        "kind": "function",
        "signature": "registerRopeForInteraction(system, entityId, ropeMetadata, fiberMaterial, ambientTemp = 293)",
        "summary": "Register a rope for interaction tracking. Call this after createGPURope."
      },
      {
        "name": "unregisterRopeInteraction",
        "kind": "function",
        "signature": "unregisterRopeInteraction(system, entityId)",
        "summary": "Unregister a rope (cleanup)."
      },
      {
        "name": "stepRopeInteraction",
        "kind": "function",
        "signature": "stepRopeInteraction(system, world, positionsCPU, thermalCPU, metaCPU, dt, callbacks = {})",
        "summary": "Step the rope↔particle interaction system."
      },
      {
        "name": "getRopeInteractionState",
        "kind": "function",
        "signature": "getRopeInteractionState(system, entityId)",
        "summary": "Get the current interaction state for a rope."
      },
      {
        "name": "getRopeAverageTemperature",
        "kind": "function",
        "signature": "getRopeAverageTemperature(system, entityId)",
        "summary": "Get average temperature of a rope."
      },
      {
        "name": "getRopeAverageMoisture",
        "kind": "function",
        "signature": "getRopeAverageMoisture(system, entityId)",
        "summary": "Get average moisture saturation of a rope."
      },
      {
        "name": "destroyRopeInteractionSystem",
        "kind": "function",
        "signature": "destroyRopeInteractionSystem(system)",
        "summary": "Destroy the interaction system and release all state."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/RopePhysics",
    "path": "engine/reference/sim/particles/RopePhysics.md",
    "source": "engine/sim/particles/RopePhysics.js",
    "import": "/engine/sim/particles/RopePhysics.js",
    "sourceHash": "02dccea675fe37457f09c27cefdfe669f186a4b9b5070e8319430bb3e23c5908",
    "summary": "RopePhysics.js - Advanced Rope Physics System GPU-accelerated rope physics with: - Tension/slack simulation - Attachment constraints (fixed points, entity attachments) - Rope cutting and rejoining - Stretching/compression limits - Wind/external force response",
    "exports": [
      {
        "name": "RopePhysicsSystem",
        "kind": "class",
        "signature": "class RopePhysicsSystem",
        "summary": ""
      },
      {
        "name": "createRopePhysicsSystem",
        "kind": "function",
        "signature": "createRopePhysicsSystem(device, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/SnapshotWorker",
    "path": "engine/reference/sim/particles/SnapshotWorker.md",
    "source": "engine/sim/particles/SnapshotWorker.js",
    "import": "/engine/sim/particles/SnapshotWorker.js",
    "sourceHash": "a22d8fc06e9de8a48bb7db99411b558c76de1533145805cd5908cbf651b5488d",
    "summary": "SnapshotWorker.js - Offload heavy snapshot compression to a separate thread This worker handles: - Delta calculation between frames - Quantization of position/velocity data - Compression of frame data - Memory management for snapshot history The main thread only does GPU readback (can't be done in workers) and sends the raw data here for processing.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/SpellEffectComposer",
    "path": "engine/reference/sim/particles/SpellEffectComposer.md",
    "source": "engine/sim/particles/SpellEffectComposer.js",
    "import": "/engine/sim/particles/SpellEffectComposer.js",
    "sourceHash": "d23e8bf23c22aabb8b6b0273c1b3cb25be54e0814e7d2ce7eec7060f2276674b",
    "summary": "SpellEffectComposer.js — Auto-blending multi-layer VFX composition ==================== ARCHITECTURE (for future AI/developers) ==================== Industry VFX standard (Niagara, Unity VFX Graph, PopcornFX, Houdini POP): A spell/effect is composed of MULTIPLE visual layers, each serving a distinct role: 1. CORE    — Main volumetric body (SDF particles, standard blend) 2. GLOW    — Larger, softer aura around core (bright color, low alpha, additive feel) 3. ACCENT  — Small bright particles: embers, snowflakes, sparkles, droplets 4. WISPS   — Secondary volumetric layer: smoke tendrils, mist, steam 5. RING    — Expanding shockwave/halo (burst spawn, grows outward) 6. TRAILS  — Ribbon trails following particles 7. LIGHT   — Dynamic point light matching effect color This system auto-generates these layers from an element mix. Given elements like [fire(0.8), ice(0.6)], it produces an array of emitter configs — one per visual layer. Each config is a complete Emitter component that can be passed to editor.createEntity(). USAGE: import { composeSpellEffect } from './SpellEffectComposer.js'; const layers = composeSpellEffect(activeElements, baseEmitterConfig); // layers = [{ name, layerType, emitterConfig }, ...] // Each layer.emitterConfig is a full Emitter component for createEntity The \"Create Spell From This\" button in EmitterInspectorCard.js calls this, then EditorParticles.createComposedSpellEffect() creates child emitter entities.",
    "exports": [
      {
        "name": "composeSpellEffect",
        "kind": "function",
        "signature": "composeSpellEffect(elements, baseConfig = {}, options = {})",
        "summary": "Compose a multi-layer spell effect from an element mix."
      },
      {
        "name": "getAvailableRecipes",
        "kind": "function",
        "signature": "getAvailableRecipes()",
        "summary": "Get available element recipe IDs."
      },
      {
        "name": "COMBINATION_RECIPES",
        "kind": "re-export",
        "signature": "COMBINATION_RECIPES",
        "summary": ""
      },
      {
        "name": "ELEMENT_RECIPES",
        "kind": "re-export",
        "signature": "ELEMENT_RECIPES",
        "summary": ""
      },
      {
        "name": "LAYER_TEMPLATES",
        "kind": "re-export",
        "signature": "LAYER_TEMPLATES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/data/index",
    "path": "engine/reference/sim/particles/data/index.md",
    "source": "engine/sim/particles/data/index.js",
    "import": "/engine/sim/particles/data/index.js",
    "sourceHash": "dac103de92c71848adee777df4c465b162d10b1b067064cffd9e1e827265e07d",
    "summary": "data/index.js — Re-exports for schema, config, attributes, and compression.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/effects/index",
    "path": "engine/reference/sim/particles/effects/index.md",
    "source": "engine/sim/particles/effects/index.js",
    "import": "/engine/sim/particles/effects/index.js",
    "sourceHash": "686751b9865818e092dbc5af4f0de8fbb0c9750f418972d5000418ad67737c6e",
    "summary": "effects/index.js — Re-exports for visual effects, trails, and lines.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/emitters/index",
    "path": "engine/reference/sim/particles/emitters/index.md",
    "source": "engine/sim/particles/emitters/index.js",
    "import": "/engine/sim/particles/emitters/index.js",
    "sourceHash": "f9d56b0c0ccee18b4869368025467e90aec01bd2dec826218c56b5b29e84ef7a",
    "summary": "emitters/index.js — Organized re-exports for emitter creation, presets, and lifecycle. New code should import from here. Original files remain in parent directory.",
    "exports": [
      {
        "name": "EMITTER_PRESETS",
        "kind": "re-export",
        "signature": "EMITTER_PRESETS",
        "summary": ""
      },
      {
        "name": "EMITTER_TYPES",
        "kind": "re-export",
        "signature": "EMITTER_TYPES",
        "summary": ""
      },
      {
        "name": "EmitterLOD",
        "kind": "re-export",
        "signature": "EmitterLOD",
        "summary": ""
      },
      {
        "name": "STATES",
        "kind": "re-export",
        "signature": "STATES",
        "summary": ""
      },
      {
        "name": "SUBSTANCE_PRESETS",
        "kind": "re-export",
        "signature": "SUBSTANCE_PRESETS",
        "summary": ""
      },
      {
        "name": "applyPreset",
        "kind": "re-export",
        "signature": "applyPreset",
        "summary": ""
      },
      {
        "name": "createEmitter",
        "kind": "re-export",
        "signature": "createEmitter",
        "summary": ""
      },
      {
        "name": "derivePhysicsProfile",
        "kind": "re-export",
        "signature": "derivePhysicsProfile",
        "summary": ""
      },
      {
        "name": "deriveState",
        "kind": "re-export",
        "signature": "deriveState",
        "summary": ""
      },
      {
        "name": "destroyEmitter",
        "kind": "re-export",
        "signature": "destroyEmitter",
        "summary": ""
      },
      {
        "name": "getEmitterPreset",
        "kind": "re-export",
        "signature": "getEmitterPreset",
        "summary": ""
      },
      {
        "name": "getEmitterTypes",
        "kind": "re-export",
        "signature": "getEmitterTypes",
        "summary": ""
      },
      {
        "name": "getStates",
        "kind": "re-export",
        "signature": "getStates",
        "summary": ""
      },
      {
        "name": "hasLiquidEmitters",
        "kind": "re-export",
        "signature": "hasLiquidEmitters",
        "summary": ""
      },
      {
        "name": "resolveSubstance",
        "kind": "re-export",
        "signature": "resolveSubstance",
        "summary": ""
      },
      {
        "name": "syncWorldSystemsToEmitters",
        "kind": "re-export",
        "signature": "syncWorldSystemsToEmitters",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/events/index",
    "path": "engine/reference/sim/particles/events/index.md",
    "source": "engine/sim/particles/events/index.js",
    "import": "/engine/sim/particles/events/index.js",
    "sourceHash": "8facf82059b09aa134c80f224ba011f04433b2dbe7b1525d6a10c721c509c68c",
    "summary": "events/index.js — Re-exports for event system, audio, and decals.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/mesh/index",
    "path": "engine/reference/sim/particles/mesh/index.md",
    "source": "engine/sim/particles/mesh/index.js",
    "import": "/engine/sim/particles/mesh/index.js",
    "sourceHash": "35fc111566ebe0dcde93231c2072894f921cd99f6fc6ed0d4f265b7a29f523e2",
    "summary": "mesh/index.js — Re-exports for mesh-to-particle conversion and instancing.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/physics/collision/index",
    "path": "engine/reference/sim/particles/physics/collision/index.md",
    "source": "engine/sim/particles/physics/collision/index.js",
    "import": "/engine/sim/particles/physics/collision/index.js",
    "sourceHash": "9334650ad747542a8db65b1d5ccc9db49ba00a093558eab1168a4fff74e65e6b",
    "summary": "physics/collision/index.js — Re-exports for collision systems.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/physics/compute/index",
    "path": "engine/reference/sim/particles/physics/compute/index.md",
    "source": "engine/sim/particles/physics/compute/index.js",
    "import": "/engine/sim/particles/physics/compute/index.js",
    "sourceHash": "f84a923a38fa8fa233f39c935423fad0dc00ae2ecccc3c53b199e6633384bc6a",
    "summary": "physics/compute/index.js — Re-exports for compute utilities.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/physics/constraints/index",
    "path": "engine/reference/sim/particles/physics/constraints/index.md",
    "source": "engine/sim/particles/physics/constraints/index.js",
    "import": "/engine/sim/particles/physics/constraints/index.js",
    "sourceHash": "22e1a4f97e6727e5819276182973552a917afe5659606f0eb4a833e58975f14c",
    "summary": "physics/constraints/index.js — Re-exports for constraint solvers.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/physics/fluids/index",
    "path": "engine/reference/sim/particles/physics/fluids/index.md",
    "source": "engine/sim/particles/physics/fluids/index.js",
    "import": "/engine/sim/particles/physics/fluids/index.js",
    "sourceHash": "851ac9784314f532cfb7abf44c9bc0ef81ee53933b4130742fec555cb7c78259",
    "summary": "physics/fluids/index.js — Re-exports for fluid solvers.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/physics/forces/index",
    "path": "engine/reference/sim/particles/physics/forces/index.md",
    "source": "engine/sim/particles/physics/forces/index.js",
    "import": "/engine/sim/particles/physics/forces/index.js",
    "sourceHash": "b2f552296d0a004b55d3487f1df06e482590a5f4b092f2368e90bb634a83f67c",
    "summary": "physics/forces/index.js — Re-exports for force systems.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/physics/index",
    "path": "engine/reference/sim/particles/physics/index.md",
    "source": "engine/sim/particles/physics/index.js",
    "import": "/engine/sim/particles/physics/index.js",
    "sourceHash": "8baccd3837667c1d09ad0a25015f85bc98ff53ee3a8b1fd42033ea6d9deb1ffd",
    "summary": "physics/index.js — Organized re-exports for GPU physics compute solvers. New code should import from here. Original files remain in parent directory.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/rope/index",
    "path": "engine/reference/sim/particles/rope/index.md",
    "source": "engine/sim/particles/rope/index.js",
    "import": "/engine/sim/particles/rope/index.js",
    "sourceHash": "3192d3bbab47767d8605680d1b06377d7c55d8c7ac6dadaba6aab8291a20cc82",
    "summary": "rope/index.js — Re-exports for rope/wire constraint systems.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/snapshots/index",
    "path": "engine/reference/sim/particles/snapshots/index.md",
    "source": "engine/sim/particles/snapshots/index.js",
    "import": "/engine/sim/particles/snapshots/index.js",
    "sourceHash": "5a2fda2c36842026aa0fa6b2c7097f6de3a3c5ca99ac8f4e1169c2ba56730545",
    "summary": "snapshots/index.js — Re-exports for snapshot, playback, and async management.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/SandboxMaterialCatalog",
    "path": "engine/reference/sim/particles/substances/SandboxMaterialCatalog.md",
    "source": "engine/sim/particles/substances/SandboxMaterialCatalog.js",
    "import": "/engine/sim/particles/substances/SandboxMaterialCatalog.js",
    "sourceHash": "a16e62bbbe549969258b2edaff3a636c28abe87b73484c30a693fe9c53e98c5a",
    "summary": "Engine-owned material facade for dense cellular sandboxes. Atomic numbers, particle material IDs, and sandbox cell codes are separate identities.  A sandbox code is only a compact runtime index.  The catalog keeps the canonical references beside it so the Editor, demos, and future authoring tools can share labels and properties without conflating those identity spaces. The generated behaviour is qualitative and mesoscale.  It does not claim that a grid cell is an atom or that periodic-table properties alone predict chemistry.  Only explicitly flagged reaction classes react in a solver.",
    "exports": [
      {
        "name": "createSandboxMaterialCatalog",
        "kind": "function",
        "signature": "createSandboxMaterialCatalog()",
        "summary": "Build an immutable shared element/substance/object view for dense sandboxes."
      },
      {
        "name": "createSandboxSpeciesLut",
        "kind": "function",
        "signature": "createSandboxSpeciesLut(catalog = createSandboxMaterialCatalog()",
        "summary": "Compile the shared catalog into one vec4<u32> record per cell code."
      },
      {
        "name": "temperatureToSandboxBucket",
        "kind": "function",
        "signature": "temperatureToSandboxBucket(temperatureK)",
        "summary": ""
      },
      {
        "name": "sandboxBucketToTemperature",
        "kind": "function",
        "signature": "sandboxBucketToTemperature(bucket)",
        "summary": ""
      },
      {
        "name": "packSandboxCell",
        "kind": "function",
        "signature": "packSandboxCell(speciesCode, temperatureK = SANDBOX_REFERENCE_TEMPERATURE_K, life = 255, variant = 0)",
        "summary": ""
      },
      {
        "name": "unpackSandboxCell",
        "kind": "function",
        "signature": "unpackSandboxCell(cell)",
        "summary": ""
      },
      {
        "name": "packSandboxObject",
        "kind": "function",
        "signature": "packSandboxObject(objectId, sourceSpeciesCode = 0, strength = 255, direction = 0)",
        "summary": ""
      },
      {
        "name": "unpackSandboxObject",
        "kind": "function",
        "signature": "unpackSandboxObject(objectWord)",
        "summary": ""
      },
      {
        "name": "sandboxSpeciesIdForSubstance",
        "kind": "function",
        "signature": "sandboxSpeciesIdForSubstance(materialId)",
        "summary": ""
      },
      {
        "name": "validateSandboxMaterialCatalog",
        "kind": "function",
        "signature": "validateSandboxMaterialCatalog(catalog)",
        "summary": ""
      },
      {
        "name": "SANDBOX_REFERENCE_TEMPERATURE_K",
        "kind": "constant",
        "signature": "SANDBOX_REFERENCE_TEMPERATURE_K",
        "summary": ""
      },
      {
        "name": "SANDBOX_TEMPERATURE_STEP_K",
        "kind": "constant",
        "signature": "SANDBOX_TEMPERATURE_STEP_K",
        "summary": ""
      },
      {
        "name": "SANDBOX_SPECIES_CAPACITY",
        "kind": "constant",
        "signature": "SANDBOX_SPECIES_CAPACITY",
        "summary": ""
      },
      {
        "name": "SANDBOX_SUBSTANCE_CODE_BASE",
        "kind": "constant",
        "signature": "SANDBOX_SUBSTANCE_CODE_BASE",
        "summary": ""
      },
      {
        "name": "SANDBOX_BEHAVIOR",
        "kind": "constant",
        "signature": "SANDBOX_BEHAVIOR",
        "summary": ""
      },
      {
        "name": "SANDBOX_PHASE",
        "kind": "constant",
        "signature": "SANDBOX_PHASE",
        "summary": ""
      },
      {
        "name": "SANDBOX_FLAGS",
        "kind": "constant",
        "signature": "SANDBOX_FLAGS",
        "summary": ""
      },
      {
        "name": "SANDBOX_REACTION",
        "kind": "constant",
        "signature": "SANDBOX_REACTION",
        "summary": ""
      },
      {
        "name": "SANDBOX_INTERACTION",
        "kind": "constant",
        "signature": "SANDBOX_INTERACTION",
        "summary": "Pairwise interaction traits compiled into the high byte of LUT word 3."
      },
      {
        "name": "SANDBOX_OBJECT",
        "kind": "constant",
        "signature": "SANDBOX_OBJECT",
        "summary": ""
      },
      {
        "name": "SANDBOX_OBJECTS",
        "kind": "constant",
        "signature": "SANDBOX_OBJECTS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/SubstanceMixer",
    "path": "engine/reference/sim/particles/substances/SubstanceMixer.md",
    "source": "engine/sim/particles/substances/SubstanceMixer.js",
    "import": "/engine/sim/particles/substances/SubstanceMixer.js",
    "sourceHash": "335e479d1a54781412ebe1b944c0defc05afba93198fd8f287bc25518159b6a5",
    "summary": "SubstanceMixer.js — Multi-substance blending for mixed emitters. When an emitter uses multiple elements (e.g. fire 0.8 + smoke 0.3), this module blends their substance properties into a single effective definition. Replaces scattered mixing logic in ParticleEmitterSystem.js (deriveTemperatureFromElements, deriveMaterialIndexFromElements, elementMixToEmitterConfig).",
    "exports": [
      {
        "name": "mixSubstances",
        "kind": "function",
        "signature": "mixSubstances(layers)",
        "summary": "Mix multiple substances into a blended definition."
      },
      {
        "name": "deriveFromElements",
        "kind": "function",
        "signature": "deriveFromElements(elementLayers)",
        "summary": "Derive a substance approximation from element layers (used by emitter system). Maps element IDs to substance IDs and mixes them."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/SubstanceRegistry",
    "path": "engine/reference/sim/particles/substances/SubstanceRegistry.md",
    "source": "engine/sim/particles/substances/SubstanceRegistry.js",
    "import": "/engine/sim/particles/substances/SubstanceRegistry.js",
    "sourceHash": "b59f63f78599cb75cbfccbcafc18ad8cf15748051cf5c32791056356548ef23e",
    "summary": "SubstanceRegistry.js — Central registry for all substance definitions. Provides a unified API to: - Register/unregister substance definitions - Look up substances by id, materialId, category, or tag - Derive physics profiles, phase state, thermal presets, SSFR tint, etc. Each substance is a plain object assembled from per-substance sub-files: { id, materialId, label, icon, category, tags, chemistry, thermal, physics, sph, visual, emitter, audio, decals, reactions, spell } Replaces scattered lookups across ParticleEmitterSystem, ParticleConstraints, ParticleReactionTable, EditorParticles, and ParticleElementRegistry.",
    "exports": [
      {
        "name": "registerSubstance",
        "kind": "function",
        "signature": "registerSubstance(def)",
        "summary": "Register a substance definition. Overwrites if id already exists."
      },
      {
        "name": "unregisterSubstance",
        "kind": "function",
        "signature": "unregisterSubstance(id)",
        "summary": "Unregister a substance by id."
      },
      {
        "name": "getSubstance",
        "kind": "function",
        "signature": "getSubstance(id)",
        "summary": "Get substance by id (e.g. 'water', 'lava', 'fire')."
      },
      {
        "name": "getSubstanceByMaterialId",
        "kind": "function",
        "signature": "getSubstanceByMaterialId(matId)",
        "summary": "Get substance by material ID number."
      },
      {
        "name": "getAllSubstances",
        "kind": "function",
        "signature": "getAllSubstances()",
        "summary": "Get all registered substances."
      },
      {
        "name": "getSubstancesByCategory",
        "kind": "function",
        "signature": "getSubstancesByCategory(category)",
        "summary": "Get substances filtered by category."
      },
      {
        "name": "getSubstancesByTag",
        "kind": "function",
        "signature": "getSubstancesByTag(tag)",
        "summary": "Get substances filtered by tag."
      },
      {
        "name": "getSubstanceIds",
        "kind": "function",
        "signature": "getSubstanceIds()",
        "summary": "Get substance IDs as an array."
      },
      {
        "name": "resolveSubstance",
        "kind": "function",
        "signature": "resolveSubstance(key)",
        "summary": "Resolve a substance key (preset name, element symbol, compound) to a substance definition. Falls back to partial matching."
      },
      {
        "name": "deriveState",
        "kind": "function",
        "signature": "deriveState(substanceId, temperature)",
        "summary": "Derive the phase of matter for a substance at a given temperature."
      },
      {
        "name": "derivePhysicsProfile",
        "kind": "function",
        "signature": "derivePhysicsProfile(substanceId, temperature)",
        "summary": "Derive which physics systems to enable for a substance at a given temperature."
      },
      {
        "name": "getSSFRTint",
        "kind": "function",
        "signature": "getSSFRTint(substanceId)",
        "summary": "Get SSFR tint for a substance."
      },
      {
        "name": "getThermalPreset",
        "kind": "function",
        "signature": "getThermalPreset(substanceId)",
        "summary": "Get thermal preset for a substance."
      },
      {
        "name": "getSPHParams",
        "kind": "function",
        "signature": "getSPHParams(substanceId)",
        "summary": "Get SPH fluid parameters for a substance."
      },
      {
        "name": "getEmitterDefaults",
        "kind": "function",
        "signature": "getEmitterDefaults(substanceId)",
        "summary": "Get emitter defaults for a substance."
      },
      {
        "name": "getAudioCues",
        "kind": "function",
        "signature": "getAudioCues(substanceId)",
        "summary": "Get audio cues for a substance."
      },
      {
        "name": "getReactions",
        "kind": "function",
        "signature": "getReactions(substanceId)",
        "summary": "Get reactions for a substance."
      },
      {
        "name": "getMaterialForSubstance",
        "kind": "function",
        "signature": "getMaterialForSubstance(key)",
        "summary": "Get material ID for a substance key (replaces SUBSTANCE_TO_MATERIAL lookup)."
      },
      {
        "name": "buildThermalPresets",
        "kind": "function",
        "signature": "buildThermalPresets()",
        "summary": "Build THERMAL_MATERIAL_PRESETS-compatible object from all registered substances. For backward compatibility with ParticleConstraints.js consumers."
      },
      {
        "name": "buildSubstanceToMaterial",
        "kind": "function",
        "signature": "buildSubstanceToMaterial()",
        "summary": "Build SUBSTANCE_TO_MATERIAL-compatible object from all registered substances. For backward compatibility with ParticleReactionTable.js consumers."
      },
      {
        "name": "getSubstanceCount",
        "kind": "function",
        "signature": "getSubstanceCount()",
        "summary": "Total number of registered substances."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/SubstanceSchema",
    "path": "engine/reference/sim/particles/substances/SubstanceSchema.md",
    "source": "engine/sim/particles/substances/SubstanceSchema.js",
    "import": "/engine/sim/particles/substances/SubstanceSchema.js",
    "sourceHash": "70a2bbf79772e3fdcca4f6220cb93a1699c1695c367881cbbaf721b8d707d626",
    "summary": "SubstanceSchema.js — Shared constants and type definitions for the substance system. Single source of truth for: - Phase constants (PHASE_SOLID, PHASE_LIQUID, PHASE_GAS, PHASE_PLASMA) - Material ID enum (MATERIAL) - Reverse lookup helpers Replaces scattered definitions in ParticleConstraints.js and ParticleReactionTable.js. Those files re-export from here for backward compatibility.",
    "exports": [
      {
        "name": "getPhaseName",
        "kind": "function",
        "signature": "getPhaseName(phase)",
        "summary": "Get phase name string from phase constant."
      },
      {
        "name": "getPhaseFromName",
        "kind": "function",
        "signature": "getPhaseFromName(name)",
        "summary": "Get phase constant from name string."
      },
      {
        "name": "getMaterialName",
        "kind": "function",
        "signature": "getMaterialName(materialId)",
        "summary": "Get material name from material ID."
      },
      {
        "name": "getMaterialId",
        "kind": "function",
        "signature": "getMaterialId(name)",
        "summary": "Get material ID from name string."
      },
      {
        "name": "PHASE_SOLID",
        "kind": "constant",
        "signature": "PHASE_SOLID",
        "summary": ""
      },
      {
        "name": "PHASE_LIQUID",
        "kind": "constant",
        "signature": "PHASE_LIQUID",
        "summary": ""
      },
      {
        "name": "PHASE_GAS",
        "kind": "constant",
        "signature": "PHASE_GAS",
        "summary": ""
      },
      {
        "name": "PHASE_PLASMA",
        "kind": "constant",
        "signature": "PHASE_PLASMA",
        "summary": ""
      },
      {
        "name": "PHASE_NAMES",
        "kind": "constant",
        "signature": "PHASE_NAMES",
        "summary": ""
      },
      {
        "name": "MATERIAL",
        "kind": "constant",
        "signature": "MATERIAL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/elements/MoleculePresets",
    "path": "engine/reference/sim/particles/substances/elements/MoleculePresets.md",
    "source": "engine/sim/particles/substances/elements/MoleculePresets.js",
    "import": "/engine/sim/particles/substances/elements/MoleculePresets.js",
    "sourceHash": "c469d81acee690af74e73fd2b4b451e5a756170cf32cf97ce541514c7ffebd45",
    "summary": "MoleculePresets.js — Common molecule/compound definitions. Re-export of MOLECULE_PRESETS from ParticleElementTable.js. Lives in substances/elements/ for organizational clarity.",
    "exports": [
      {
        "name": "MOLECULE_PRESETS",
        "kind": "re-export",
        "signature": "MOLECULE_PRESETS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/elements/PeriodicTable",
    "path": "engine/reference/sim/particles/substances/elements/PeriodicTable.md",
    "source": "engine/sim/particles/substances/elements/PeriodicTable.js",
    "import": "/engine/sim/particles/substances/elements/PeriodicTable.js",
    "sourceHash": "bce1185029723e3d520d770d61bc8e58ec642383940f74c5beeccd3295022ba1",
    "summary": "PeriodicTable.js — Full periodic table data for 118 elements. Re-export of the core element data from ParticleElementTable.js. This file lives in the new substances/elements/ folder for organizational clarity. The original ParticleElementTable.js remains functional and re-exports from here for backward compatibility. Provides: - ELEMENT_DATA raw array - ELEMENTS_BY_Z / ELEMENTS_BY_SYMBOL parsed lookups - getElement, getElementBySymbol, getAllElements - ELEMENTS shorthand constants - ljMixingRule for LJ cross-interactions - GPU buffer creation (createElementTable, etc.)",
    "exports": [
      {
        "name": "ELEMENTS",
        "kind": "re-export",
        "signature": "ELEMENTS",
        "summary": ""
      },
      {
        "name": "ELEMENT_LUT_WGSL",
        "kind": "re-export",
        "signature": "ELEMENT_LUT_WGSL",
        "summary": ""
      },
      {
        "name": "createElementTable",
        "kind": "re-export",
        "signature": "createElementTable",
        "summary": ""
      },
      {
        "name": "destroyElementTable",
        "kind": "re-export",
        "signature": "destroyElementTable",
        "summary": ""
      },
      {
        "name": "getAllElements",
        "kind": "re-export",
        "signature": "getAllElements",
        "summary": ""
      },
      {
        "name": "getElement",
        "kind": "re-export",
        "signature": "getElement",
        "summary": ""
      },
      {
        "name": "getElementBySymbol",
        "kind": "re-export",
        "signature": "getElementBySymbol",
        "summary": ""
      },
      {
        "name": "ljMixingRule",
        "kind": "re-export",
        "signature": "ljMixingRule",
        "summary": ""
      },
      {
        "name": "setParticleCharges",
        "kind": "re-export",
        "signature": "setParticleCharges",
        "summary": ""
      },
      {
        "name": "setParticleElements",
        "kind": "re-export",
        "signature": "setParticleElements",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/index",
    "path": "engine/reference/sim/particles/substances/index.md",
    "source": "engine/sim/particles/substances/index.js",
    "import": "/engine/sim/particles/substances/index.js",
    "sourceHash": "295f04b9fe4d1c81dd6c1c695649c8cd44620a4df77248f392c3c53f3f2e87b9",
    "summary": "substances/index.js — Barrel export for the substance system. Single import point: import { getSubstance, MATERIAL, PHASE_LIQUID, ... } from './substances/index.js';",
    "exports": [
      {
        "name": "ELEMENTS",
        "kind": "re-export",
        "signature": "ELEMENTS",
        "summary": ""
      },
      {
        "name": "ELEMENT_LUT_WGSL",
        "kind": "re-export",
        "signature": "ELEMENT_LUT_WGSL",
        "summary": ""
      },
      {
        "name": "MATERIAL",
        "kind": "re-export",
        "signature": "MATERIAL",
        "summary": ""
      },
      {
        "name": "MOLECULE_PRESETS",
        "kind": "re-export",
        "signature": "MOLECULE_PRESETS",
        "summary": ""
      },
      {
        "name": "PHASE_GAS",
        "kind": "re-export",
        "signature": "PHASE_GAS",
        "summary": ""
      },
      {
        "name": "PHASE_LIQUID",
        "kind": "re-export",
        "signature": "PHASE_LIQUID",
        "summary": ""
      },
      {
        "name": "PHASE_NAMES",
        "kind": "re-export",
        "signature": "PHASE_NAMES",
        "summary": ""
      },
      {
        "name": "PHASE_PLASMA",
        "kind": "re-export",
        "signature": "PHASE_PLASMA",
        "summary": ""
      },
      {
        "name": "PHASE_SOLID",
        "kind": "re-export",
        "signature": "PHASE_SOLID",
        "summary": ""
      },
      {
        "name": "SANDBOX_BEHAVIOR",
        "kind": "re-export",
        "signature": "SANDBOX_BEHAVIOR",
        "summary": ""
      },
      {
        "name": "SANDBOX_FLAGS",
        "kind": "re-export",
        "signature": "SANDBOX_FLAGS",
        "summary": ""
      },
      {
        "name": "SANDBOX_INTERACTION",
        "kind": "re-export",
        "signature": "SANDBOX_INTERACTION",
        "summary": ""
      },
      {
        "name": "SANDBOX_OBJECT",
        "kind": "re-export",
        "signature": "SANDBOX_OBJECT",
        "summary": ""
      },
      {
        "name": "SANDBOX_OBJECTS",
        "kind": "re-export",
        "signature": "SANDBOX_OBJECTS",
        "summary": ""
      },
      {
        "name": "SANDBOX_PHASE",
        "kind": "re-export",
        "signature": "SANDBOX_PHASE",
        "summary": ""
      },
      {
        "name": "SANDBOX_REACTION",
        "kind": "re-export",
        "signature": "SANDBOX_REACTION",
        "summary": ""
      },
      {
        "name": "SANDBOX_REFERENCE_TEMPERATURE_K",
        "kind": "re-export",
        "signature": "SANDBOX_REFERENCE_TEMPERATURE_K",
        "summary": ""
      },
      {
        "name": "SANDBOX_SPECIES_CAPACITY",
        "kind": "re-export",
        "signature": "SANDBOX_SPECIES_CAPACITY",
        "summary": ""
      },
      {
        "name": "SANDBOX_SUBSTANCE_CODE_BASE",
        "kind": "re-export",
        "signature": "SANDBOX_SUBSTANCE_CODE_BASE",
        "summary": ""
      },
      {
        "name": "SANDBOX_TEMPERATURE_STEP_K",
        "kind": "re-export",
        "signature": "SANDBOX_TEMPERATURE_STEP_K",
        "summary": ""
      },
      {
        "name": "buildSubstanceToMaterial",
        "kind": "re-export",
        "signature": "buildSubstanceToMaterial",
        "summary": ""
      },
      {
        "name": "buildThermalPresets",
        "kind": "re-export",
        "signature": "buildThermalPresets",
        "summary": ""
      },
      {
        "name": "createElementTable",
        "kind": "re-export",
        "signature": "createElementTable",
        "summary": ""
      },
      {
        "name": "createSandboxMaterialCatalog",
        "kind": "re-export",
        "signature": "createSandboxMaterialCatalog",
        "summary": ""
      },
      {
        "name": "createSandboxSpeciesLut",
        "kind": "re-export",
        "signature": "createSandboxSpeciesLut",
        "summary": ""
      },
      {
        "name": "deriveFromElements",
        "kind": "re-export",
        "signature": "deriveFromElements",
        "summary": ""
      },
      {
        "name": "derivePhysicsProfile",
        "kind": "re-export",
        "signature": "derivePhysicsProfile",
        "summary": ""
      },
      {
        "name": "deriveState",
        "kind": "re-export",
        "signature": "deriveState",
        "summary": ""
      },
      {
        "name": "destroyElementTable",
        "kind": "re-export",
        "signature": "destroyElementTable",
        "summary": ""
      },
      {
        "name": "getAllElements",
        "kind": "re-export",
        "signature": "getAllElements",
        "summary": ""
      },
      {
        "name": "getAllSubstances",
        "kind": "re-export",
        "signature": "getAllSubstances",
        "summary": ""
      },
      {
        "name": "getAudioCues",
        "kind": "re-export",
        "signature": "getAudioCues",
        "summary": ""
      },
      {
        "name": "getElement",
        "kind": "re-export",
        "signature": "getElement",
        "summary": ""
      },
      {
        "name": "getElementBySymbol",
        "kind": "re-export",
        "signature": "getElementBySymbol",
        "summary": ""
      },
      {
        "name": "getEmitterDefaults",
        "kind": "re-export",
        "signature": "getEmitterDefaults",
        "summary": ""
      },
      {
        "name": "getMaterialForSubstance",
        "kind": "re-export",
        "signature": "getMaterialForSubstance",
        "summary": ""
      },
      {
        "name": "getMaterialId",
        "kind": "re-export",
        "signature": "getMaterialId",
        "summary": ""
      },
      {
        "name": "getMaterialName",
        "kind": "re-export",
        "signature": "getMaterialName",
        "summary": ""
      },
      {
        "name": "getPhaseFromName",
        "kind": "re-export",
        "signature": "getPhaseFromName",
        "summary": ""
      },
      {
        "name": "getPhaseName",
        "kind": "re-export",
        "signature": "getPhaseName",
        "summary": ""
      },
      {
        "name": "getReactions",
        "kind": "re-export",
        "signature": "getReactions",
        "summary": ""
      },
      {
        "name": "getSPHParams",
        "kind": "re-export",
        "signature": "getSPHParams",
        "summary": ""
      },
      {
        "name": "getSSFRTint",
        "kind": "re-export",
        "signature": "getSSFRTint",
        "summary": ""
      },
      {
        "name": "getSubstance",
        "kind": "re-export",
        "signature": "getSubstance",
        "summary": ""
      },
      {
        "name": "getSubstanceByMaterialId",
        "kind": "re-export",
        "signature": "getSubstanceByMaterialId",
        "summary": ""
      },
      {
        "name": "getSubstanceCount",
        "kind": "re-export",
        "signature": "getSubstanceCount",
        "summary": ""
      },
      {
        "name": "getSubstanceIds",
        "kind": "re-export",
        "signature": "getSubstanceIds",
        "summary": ""
      },
      {
        "name": "getSubstancesByCategory",
        "kind": "re-export",
        "signature": "getSubstancesByCategory",
        "summary": ""
      },
      {
        "name": "getSubstancesByTag",
        "kind": "re-export",
        "signature": "getSubstancesByTag",
        "summary": ""
      },
      {
        "name": "getThermalPreset",
        "kind": "re-export",
        "signature": "getThermalPreset",
        "summary": ""
      },
      {
        "name": "ljMixingRule",
        "kind": "re-export",
        "signature": "ljMixingRule",
        "summary": ""
      },
      {
        "name": "mixSubstances",
        "kind": "re-export",
        "signature": "mixSubstances",
        "summary": ""
      },
      {
        "name": "packSandboxCell",
        "kind": "re-export",
        "signature": "packSandboxCell",
        "summary": ""
      },
      {
        "name": "packSandboxObject",
        "kind": "re-export",
        "signature": "packSandboxObject",
        "summary": ""
      },
      {
        "name": "registerSubstance",
        "kind": "re-export",
        "signature": "registerSubstance",
        "summary": ""
      },
      {
        "name": "resolveSubstance",
        "kind": "re-export",
        "signature": "resolveSubstance",
        "summary": ""
      },
      {
        "name": "sandboxBucketToTemperature",
        "kind": "re-export",
        "signature": "sandboxBucketToTemperature",
        "summary": ""
      },
      {
        "name": "sandboxSpeciesIdForSubstance",
        "kind": "re-export",
        "signature": "sandboxSpeciesIdForSubstance",
        "summary": ""
      },
      {
        "name": "setParticleCharges",
        "kind": "re-export",
        "signature": "setParticleCharges",
        "summary": ""
      },
      {
        "name": "setParticleElements",
        "kind": "re-export",
        "signature": "setParticleElements",
        "summary": ""
      },
      {
        "name": "temperatureToSandboxBucket",
        "kind": "re-export",
        "signature": "temperatureToSandboxBucket",
        "summary": ""
      },
      {
        "name": "unpackSandboxCell",
        "kind": "re-export",
        "signature": "unpackSandboxCell",
        "summary": ""
      },
      {
        "name": "unpackSandboxObject",
        "kind": "re-export",
        "signature": "unpackSandboxObject",
        "summary": ""
      },
      {
        "name": "unregisterSubstance",
        "kind": "re-export",
        "signature": "unregisterSubstance",
        "summary": ""
      },
      {
        "name": "validateSandboxMaterialCatalog",
        "kind": "re-export",
        "signature": "validateSandboxMaterialCatalog",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/acid/audio",
    "path": "engine/reference/sim/particles/substances/materials/acid/audio.md",
    "source": "engine/sim/particles/substances/materials/acid/audio.js",
    "import": "/engine/sim/particles/substances/materials/acid/audio.js",
    "sourceHash": "5258e9f441432004e44a974df49617d7bc744f555fb571d1688da8972e1effdb",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/acid/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/acid/chemistry.md",
    "source": "engine/sim/particles/substances/materials/acid/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/acid/chemistry.js",
    "sourceHash": "920a7aa460d9df9eaac8d98c5fb86545ab992864d4110fe77de8cc939b234c92",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/acid/decals",
    "path": "engine/reference/sim/particles/substances/materials/acid/decals.md",
    "source": "engine/sim/particles/substances/materials/acid/decals.js",
    "import": "/engine/sim/particles/substances/materials/acid/decals.js",
    "sourceHash": "3071f517192cca2e0b6129567f491e95306a37dc0ccbc1779c2d90ed3cedf9d7",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/acid/emitter",
    "path": "engine/reference/sim/particles/substances/materials/acid/emitter.md",
    "source": "engine/sim/particles/substances/materials/acid/emitter.js",
    "import": "/engine/sim/particles/substances/materials/acid/emitter.js",
    "sourceHash": "e1900cb022b846851af92a988ffda16f0e00c07f4a790db82904cdfac819d094",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/acid/identity",
    "path": "engine/reference/sim/particles/substances/materials/acid/identity.md",
    "source": "engine/sim/particles/substances/materials/acid/identity.js",
    "import": "/engine/sim/particles/substances/materials/acid/identity.js",
    "sourceHash": "ef3652cce39be3dff6752e75dc09c84a01c2427515d3ea971ad6b9ddce6431cb",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/acid/index",
    "path": "engine/reference/sim/particles/substances/materials/acid/index.md",
    "source": "engine/sim/particles/substances/materials/acid/index.js",
    "import": "/engine/sim/particles/substances/materials/acid/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/acid/physics",
    "path": "engine/reference/sim/particles/substances/materials/acid/physics.md",
    "source": "engine/sim/particles/substances/materials/acid/physics.js",
    "import": "/engine/sim/particles/substances/materials/acid/physics.js",
    "sourceHash": "6f890935b2370c1ca48026922cedd4a61fa215efe6af7be69140fa53e87d8b9d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/acid/reactions",
    "path": "engine/reference/sim/particles/substances/materials/acid/reactions.md",
    "source": "engine/sim/particles/substances/materials/acid/reactions.js",
    "import": "/engine/sim/particles/substances/materials/acid/reactions.js",
    "sourceHash": "17d70664fbd5bfc0105508bcda2b4071c30d47afe3439408c30a8eda17d2e887",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/acid/spell",
    "path": "engine/reference/sim/particles/substances/materials/acid/spell.md",
    "source": "engine/sim/particles/substances/materials/acid/spell.js",
    "import": "/engine/sim/particles/substances/materials/acid/spell.js",
    "sourceHash": "8cf69cdf401acf6e52467e904080c51996d0930adff55b833346a87442754490",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/acid/sph",
    "path": "engine/reference/sim/particles/substances/materials/acid/sph.md",
    "source": "engine/sim/particles/substances/materials/acid/sph.js",
    "import": "/engine/sim/particles/substances/materials/acid/sph.js",
    "sourceHash": "eadfcab225b62ee6d4a1a1367da2303c5045da9e162477eee4b2bf30cbf60645",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/acid/thermal",
    "path": "engine/reference/sim/particles/substances/materials/acid/thermal.md",
    "source": "engine/sim/particles/substances/materials/acid/thermal.js",
    "import": "/engine/sim/particles/substances/materials/acid/thermal.js",
    "sourceHash": "1cacc1a4dac76fabf744f310ae000b9e8c03c32301d4a071336c9e706e501e8f",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/acid/visual",
    "path": "engine/reference/sim/particles/substances/materials/acid/visual.md",
    "source": "engine/sim/particles/substances/materials/acid/visual.js",
    "import": "/engine/sim/particles/substances/materials/acid/visual.js",
    "sourceHash": "18f428279e8c728f67b82f7e2302315fcc42df5b8ec90aef49b3066424c5bdcc",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/blood/audio",
    "path": "engine/reference/sim/particles/substances/materials/blood/audio.md",
    "source": "engine/sim/particles/substances/materials/blood/audio.js",
    "import": "/engine/sim/particles/substances/materials/blood/audio.js",
    "sourceHash": "706ff0bb072a682222dd3294384986a3f8f8f73afffb9e95a889b478f6a7a632",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/blood/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/blood/chemistry.md",
    "source": "engine/sim/particles/substances/materials/blood/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/blood/chemistry.js",
    "sourceHash": "47df2e1b97ad02549a4366cb290ec210ff3691baed8d46722cbe4c4936d4a09d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/blood/decals",
    "path": "engine/reference/sim/particles/substances/materials/blood/decals.md",
    "source": "engine/sim/particles/substances/materials/blood/decals.js",
    "import": "/engine/sim/particles/substances/materials/blood/decals.js",
    "sourceHash": "39bc77895069fcc46d523d333a12030d637a425bdeddb4dc2b08ae64b598e9d5",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/blood/emitter",
    "path": "engine/reference/sim/particles/substances/materials/blood/emitter.md",
    "source": "engine/sim/particles/substances/materials/blood/emitter.js",
    "import": "/engine/sim/particles/substances/materials/blood/emitter.js",
    "sourceHash": "69453d5007c7cfab7204746605db7e3d04a307fd1a0460d1af29df7e54924b1d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/blood/identity",
    "path": "engine/reference/sim/particles/substances/materials/blood/identity.md",
    "source": "engine/sim/particles/substances/materials/blood/identity.js",
    "import": "/engine/sim/particles/substances/materials/blood/identity.js",
    "sourceHash": "02dbfa50af18b549006af3c66463827b5c9e44842588b89310f32f827678bad1",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/blood/index",
    "path": "engine/reference/sim/particles/substances/materials/blood/index.md",
    "source": "engine/sim/particles/substances/materials/blood/index.js",
    "import": "/engine/sim/particles/substances/materials/blood/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/blood/physics",
    "path": "engine/reference/sim/particles/substances/materials/blood/physics.md",
    "source": "engine/sim/particles/substances/materials/blood/physics.js",
    "import": "/engine/sim/particles/substances/materials/blood/physics.js",
    "sourceHash": "67f6fab40c39ec56a3334527216969d9b7603296458d42c77958fcb5b1ee1e73",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/blood/reactions",
    "path": "engine/reference/sim/particles/substances/materials/blood/reactions.md",
    "source": "engine/sim/particles/substances/materials/blood/reactions.js",
    "import": "/engine/sim/particles/substances/materials/blood/reactions.js",
    "sourceHash": "e2c4282a5f58bd615466e0ed52df2f86e3ca759c36f3b35cbf78b678bc7df0d0",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/blood/spell",
    "path": "engine/reference/sim/particles/substances/materials/blood/spell.md",
    "source": "engine/sim/particles/substances/materials/blood/spell.js",
    "import": "/engine/sim/particles/substances/materials/blood/spell.js",
    "sourceHash": "8817dc527300274071eadbf21f7fb709851a9149f68c0df991b426d3443bfc4e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/blood/sph",
    "path": "engine/reference/sim/particles/substances/materials/blood/sph.md",
    "source": "engine/sim/particles/substances/materials/blood/sph.js",
    "import": "/engine/sim/particles/substances/materials/blood/sph.js",
    "sourceHash": "869e209d8ed8097a34b9af823e146febe153843c44c5d9ec16df4ef2cf230d41",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/blood/thermal",
    "path": "engine/reference/sim/particles/substances/materials/blood/thermal.md",
    "source": "engine/sim/particles/substances/materials/blood/thermal.js",
    "import": "/engine/sim/particles/substances/materials/blood/thermal.js",
    "sourceHash": "cdeb8de1e91f071dfb052ff45323284fa20f276bc135ed0c85ca3c7d886a517b",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/blood/visual",
    "path": "engine/reference/sim/particles/substances/materials/blood/visual.md",
    "source": "engine/sim/particles/substances/materials/blood/visual.js",
    "import": "/engine/sim/particles/substances/materials/blood/visual.js",
    "sourceHash": "e690c3109fa7c0e7168de2159b20f854422b81886b96813342ba0126b06b3608",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/debris/audio",
    "path": "engine/reference/sim/particles/substances/materials/debris/audio.md",
    "source": "engine/sim/particles/substances/materials/debris/audio.js",
    "import": "/engine/sim/particles/substances/materials/debris/audio.js",
    "sourceHash": "bb2d29b61e155ec27f99295c6d4a20c67a22c3d86f98402be1efb0a22dde71fe",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/debris/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/debris/chemistry.md",
    "source": "engine/sim/particles/substances/materials/debris/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/debris/chemistry.js",
    "sourceHash": "9ec1ec2e724dfb0a3449d160b55c828451f29d4376ce349050e4cc88ce7c6b54",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/debris/decals",
    "path": "engine/reference/sim/particles/substances/materials/debris/decals.md",
    "source": "engine/sim/particles/substances/materials/debris/decals.js",
    "import": "/engine/sim/particles/substances/materials/debris/decals.js",
    "sourceHash": "df5cf13e94544a74d456f651213e9798ea23a7018a8476e927d6419227afe9de",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/debris/emitter",
    "path": "engine/reference/sim/particles/substances/materials/debris/emitter.md",
    "source": "engine/sim/particles/substances/materials/debris/emitter.js",
    "import": "/engine/sim/particles/substances/materials/debris/emitter.js",
    "sourceHash": "571e63af88b196c8ca0ddf3f79c2e1d46bca550714a26c7fd031e80b5ea38d3b",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/debris/identity",
    "path": "engine/reference/sim/particles/substances/materials/debris/identity.md",
    "source": "engine/sim/particles/substances/materials/debris/identity.js",
    "import": "/engine/sim/particles/substances/materials/debris/identity.js",
    "sourceHash": "f210d991c17b06930500f14b62328a4563fcde2831d6828c11ed43b6b5b30afd",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/debris/index",
    "path": "engine/reference/sim/particles/substances/materials/debris/index.md",
    "source": "engine/sim/particles/substances/materials/debris/index.js",
    "import": "/engine/sim/particles/substances/materials/debris/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/debris/physics",
    "path": "engine/reference/sim/particles/substances/materials/debris/physics.md",
    "source": "engine/sim/particles/substances/materials/debris/physics.js",
    "import": "/engine/sim/particles/substances/materials/debris/physics.js",
    "sourceHash": "dca9e13732eecfb0e254373746bd4788e6c725c3ae4891cb8b4e33f73194c8dd",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/debris/reactions",
    "path": "engine/reference/sim/particles/substances/materials/debris/reactions.md",
    "source": "engine/sim/particles/substances/materials/debris/reactions.js",
    "import": "/engine/sim/particles/substances/materials/debris/reactions.js",
    "sourceHash": "b79fb6f98f498b8ca9149efd302a8287c33174c4b7a36a141d4c17b88f16de02",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/debris/spell",
    "path": "engine/reference/sim/particles/substances/materials/debris/spell.md",
    "source": "engine/sim/particles/substances/materials/debris/spell.js",
    "import": "/engine/sim/particles/substances/materials/debris/spell.js",
    "sourceHash": "729eaa612122348131c89241073b4a841e7bde5b4bf4f47dc99ccf83c5acb1aa",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/debris/sph",
    "path": "engine/reference/sim/particles/substances/materials/debris/sph.md",
    "source": "engine/sim/particles/substances/materials/debris/sph.js",
    "import": "/engine/sim/particles/substances/materials/debris/sph.js",
    "sourceHash": "d01e0b897d6eea9d7191bd12b836303394fee3ec5b2bdd1c8fed01613e2cc56d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/debris/thermal",
    "path": "engine/reference/sim/particles/substances/materials/debris/thermal.md",
    "source": "engine/sim/particles/substances/materials/debris/thermal.js",
    "import": "/engine/sim/particles/substances/materials/debris/thermal.js",
    "sourceHash": "022e312eba5c7730439ede04e7901d22fa77b0ac26879c0c0e6ce2011dbf8fed",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/debris/visual",
    "path": "engine/reference/sim/particles/substances/materials/debris/visual.md",
    "source": "engine/sim/particles/substances/materials/debris/visual.js",
    "import": "/engine/sim/particles/substances/materials/debris/visual.js",
    "sourceHash": "6f69d464d8273cac5dbee5a99788bf4a47d7293e2eccc017384bdc14d090d695",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/fire/audio",
    "path": "engine/reference/sim/particles/substances/materials/fire/audio.md",
    "source": "engine/sim/particles/substances/materials/fire/audio.js",
    "import": "/engine/sim/particles/substances/materials/fire/audio.js",
    "sourceHash": "91ecbaeb8967905af99c41e1c3765fbdd24e3c4378c06178222e309153136324",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/fire/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/fire/chemistry.md",
    "source": "engine/sim/particles/substances/materials/fire/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/fire/chemistry.js",
    "sourceHash": "413ba9c326c5b632af5c70408bac1bd5ac91071d9469f6121b77caebdbd282b4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/fire/decals",
    "path": "engine/reference/sim/particles/substances/materials/fire/decals.md",
    "source": "engine/sim/particles/substances/materials/fire/decals.js",
    "import": "/engine/sim/particles/substances/materials/fire/decals.js",
    "sourceHash": "a188e60f905ea8c856aa666f57eac0016ad9130b2f07e0ff3a259c69f0d3b58f",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/fire/emitter",
    "path": "engine/reference/sim/particles/substances/materials/fire/emitter.md",
    "source": "engine/sim/particles/substances/materials/fire/emitter.js",
    "import": "/engine/sim/particles/substances/materials/fire/emitter.js",
    "sourceHash": "8ae745503a085c8d9da74f25214f24038e7a678253105704ff8875bbbb448bc9",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/fire/identity",
    "path": "engine/reference/sim/particles/substances/materials/fire/identity.md",
    "source": "engine/sim/particles/substances/materials/fire/identity.js",
    "import": "/engine/sim/particles/substances/materials/fire/identity.js",
    "sourceHash": "37c2d004d91775c3298254978a0a1ef0c4efc98888dc2930e7d54979a40ee196",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/fire/index",
    "path": "engine/reference/sim/particles/substances/materials/fire/index.md",
    "source": "engine/sim/particles/substances/materials/fire/index.js",
    "import": "/engine/sim/particles/substances/materials/fire/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/fire/physics",
    "path": "engine/reference/sim/particles/substances/materials/fire/physics.md",
    "source": "engine/sim/particles/substances/materials/fire/physics.js",
    "import": "/engine/sim/particles/substances/materials/fire/physics.js",
    "sourceHash": "507d0026a7af34250c93b812e5cc3f5d2674d48930644ef9d613468de28331a1",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/fire/reactions",
    "path": "engine/reference/sim/particles/substances/materials/fire/reactions.md",
    "source": "engine/sim/particles/substances/materials/fire/reactions.js",
    "import": "/engine/sim/particles/substances/materials/fire/reactions.js",
    "sourceHash": "5d766fd447cd5f2b5b9aafd61311bdfb7821a8c7a08270239d354ff22dc19bb7",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/fire/spell",
    "path": "engine/reference/sim/particles/substances/materials/fire/spell.md",
    "source": "engine/sim/particles/substances/materials/fire/spell.js",
    "import": "/engine/sim/particles/substances/materials/fire/spell.js",
    "sourceHash": "89064877da5d7ff5b32b2fcd34bd4507533f66381596293496d7089cc0f72ffe",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/fire/sph",
    "path": "engine/reference/sim/particles/substances/materials/fire/sph.md",
    "source": "engine/sim/particles/substances/materials/fire/sph.js",
    "import": "/engine/sim/particles/substances/materials/fire/sph.js",
    "sourceHash": "d01e0b897d6eea9d7191bd12b836303394fee3ec5b2bdd1c8fed01613e2cc56d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/fire/thermal",
    "path": "engine/reference/sim/particles/substances/materials/fire/thermal.md",
    "source": "engine/sim/particles/substances/materials/fire/thermal.js",
    "import": "/engine/sim/particles/substances/materials/fire/thermal.js",
    "sourceHash": "739c1e84cdb9d592022cd476522ead95cb11e2fa8851a31ea98622f3d9940899",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/fire/visual",
    "path": "engine/reference/sim/particles/substances/materials/fire/visual.md",
    "source": "engine/sim/particles/substances/materials/fire/visual.js",
    "import": "/engine/sim/particles/substances/materials/fire/visual.js",
    "sourceHash": "2cd05a8def3d10da4dcb5e86200c1e322c7f0a995aadfc0beff197d3d2e60590",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/glass/audio",
    "path": "engine/reference/sim/particles/substances/materials/glass/audio.md",
    "source": "engine/sim/particles/substances/materials/glass/audio.js",
    "import": "/engine/sim/particles/substances/materials/glass/audio.js",
    "sourceHash": "5d6052bd553721b74aa93ac30cc1bfa02520adc7e88c3e1359c409ab02ae66ce",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/glass/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/glass/chemistry.md",
    "source": "engine/sim/particles/substances/materials/glass/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/glass/chemistry.js",
    "sourceHash": "9ec1ec2e724dfb0a3449d160b55c828451f29d4376ce349050e4cc88ce7c6b54",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/glass/decals",
    "path": "engine/reference/sim/particles/substances/materials/glass/decals.md",
    "source": "engine/sim/particles/substances/materials/glass/decals.js",
    "import": "/engine/sim/particles/substances/materials/glass/decals.js",
    "sourceHash": "10520a3b2c78f7fb1d6585a01b78fc304dbd6712558a67050d00d0ce173cf937",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/glass/emitter",
    "path": "engine/reference/sim/particles/substances/materials/glass/emitter.md",
    "source": "engine/sim/particles/substances/materials/glass/emitter.js",
    "import": "/engine/sim/particles/substances/materials/glass/emitter.js",
    "sourceHash": "bef3d7f9d27c14fd6ca8662d751a2fae5492b52d20da4c10d9fe55357effc7c4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/glass/identity",
    "path": "engine/reference/sim/particles/substances/materials/glass/identity.md",
    "source": "engine/sim/particles/substances/materials/glass/identity.js",
    "import": "/engine/sim/particles/substances/materials/glass/identity.js",
    "sourceHash": "594dffd6d5a4bc96cc2ccd2490a3a5b0758614ea1b79e816f27dfa15f04035a9",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/glass/index",
    "path": "engine/reference/sim/particles/substances/materials/glass/index.md",
    "source": "engine/sim/particles/substances/materials/glass/index.js",
    "import": "/engine/sim/particles/substances/materials/glass/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/glass/physics",
    "path": "engine/reference/sim/particles/substances/materials/glass/physics.md",
    "source": "engine/sim/particles/substances/materials/glass/physics.js",
    "import": "/engine/sim/particles/substances/materials/glass/physics.js",
    "sourceHash": "2c9200731900cbe6377be7c5fa38e0245911673efbd2b9b91cdbb877ce7b4db3",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/glass/reactions",
    "path": "engine/reference/sim/particles/substances/materials/glass/reactions.md",
    "source": "engine/sim/particles/substances/materials/glass/reactions.js",
    "import": "/engine/sim/particles/substances/materials/glass/reactions.js",
    "sourceHash": "ee4587bd89ec979cbe9371dca91f76fe57a502b4b499d18785b0fe5541d504a3",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/glass/spell",
    "path": "engine/reference/sim/particles/substances/materials/glass/spell.md",
    "source": "engine/sim/particles/substances/materials/glass/spell.js",
    "import": "/engine/sim/particles/substances/materials/glass/spell.js",
    "sourceHash": "5747be8b3c8f98df70819eec6bd146e5d6648d9b41cbbcfe66742667192837bd",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/glass/sph",
    "path": "engine/reference/sim/particles/substances/materials/glass/sph.md",
    "source": "engine/sim/particles/substances/materials/glass/sph.js",
    "import": "/engine/sim/particles/substances/materials/glass/sph.js",
    "sourceHash": "d8c2378cbdc829a8b3d6d2f82ae5b1e6b92d5730e3cf2b1fa799cbafa5743a43",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/glass/thermal",
    "path": "engine/reference/sim/particles/substances/materials/glass/thermal.md",
    "source": "engine/sim/particles/substances/materials/glass/thermal.js",
    "import": "/engine/sim/particles/substances/materials/glass/thermal.js",
    "sourceHash": "937811c18f48724390bb1dbf10271977620d0635c76ef45fbf8b900d9b906093",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/glass/visual",
    "path": "engine/reference/sim/particles/substances/materials/glass/visual.md",
    "source": "engine/sim/particles/substances/materials/glass/visual.js",
    "import": "/engine/sim/particles/substances/materials/glass/visual.js",
    "sourceHash": "e5b5e3ddcf373401b5229dbdac28c6665680f755b585fda3b4e65d1ddd4e9e98",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/honey/audio",
    "path": "engine/reference/sim/particles/substances/materials/honey/audio.md",
    "source": "engine/sim/particles/substances/materials/honey/audio.js",
    "import": "/engine/sim/particles/substances/materials/honey/audio.js",
    "sourceHash": "ede9caedec32ead0100fc2e30c4a662f026a3ed772a647d08f272695bc4e5f1e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/honey/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/honey/chemistry.md",
    "source": "engine/sim/particles/substances/materials/honey/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/honey/chemistry.js",
    "sourceHash": "413ba9c326c5b632af5c70408bac1bd5ac91071d9469f6121b77caebdbd282b4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/honey/decals",
    "path": "engine/reference/sim/particles/substances/materials/honey/decals.md",
    "source": "engine/sim/particles/substances/materials/honey/decals.js",
    "import": "/engine/sim/particles/substances/materials/honey/decals.js",
    "sourceHash": "eb626c2a34ea41e20abc14041203c5e3845b58c293d33c4f50f3852c24702de2",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/honey/emitter",
    "path": "engine/reference/sim/particles/substances/materials/honey/emitter.md",
    "source": "engine/sim/particles/substances/materials/honey/emitter.js",
    "import": "/engine/sim/particles/substances/materials/honey/emitter.js",
    "sourceHash": "c1639d760c0a0395ad840cad769677b7797773eacd36ef2aef174fabf7f899da",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/honey/identity",
    "path": "engine/reference/sim/particles/substances/materials/honey/identity.md",
    "source": "engine/sim/particles/substances/materials/honey/identity.js",
    "import": "/engine/sim/particles/substances/materials/honey/identity.js",
    "sourceHash": "48990e68e89e69033c8e39e89d366f8ed141255fd8127384d122b8d81e57b72e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/honey/index",
    "path": "engine/reference/sim/particles/substances/materials/honey/index.md",
    "source": "engine/sim/particles/substances/materials/honey/index.js",
    "import": "/engine/sim/particles/substances/materials/honey/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/honey/physics",
    "path": "engine/reference/sim/particles/substances/materials/honey/physics.md",
    "source": "engine/sim/particles/substances/materials/honey/physics.js",
    "import": "/engine/sim/particles/substances/materials/honey/physics.js",
    "sourceHash": "d8e064e2ccc04a2a193d723a8ec1bca55d2e6ef884a8e3494b255d0293ac39dc",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/honey/reactions",
    "path": "engine/reference/sim/particles/substances/materials/honey/reactions.md",
    "source": "engine/sim/particles/substances/materials/honey/reactions.js",
    "import": "/engine/sim/particles/substances/materials/honey/reactions.js",
    "sourceHash": "7cc4f9179db01278834fcbcf465ce73f5dff1d58a71117b0d3be966860e9fd6f",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/honey/spell",
    "path": "engine/reference/sim/particles/substances/materials/honey/spell.md",
    "source": "engine/sim/particles/substances/materials/honey/spell.js",
    "import": "/engine/sim/particles/substances/materials/honey/spell.js",
    "sourceHash": "aa3a9d993457201e5c1a79af220ad39d303d186b8cb0a06b78af73bdb0da2f6a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/honey/sph",
    "path": "engine/reference/sim/particles/substances/materials/honey/sph.md",
    "source": "engine/sim/particles/substances/materials/honey/sph.js",
    "import": "/engine/sim/particles/substances/materials/honey/sph.js",
    "sourceHash": "59d6475928cf04e167a197a0e801afab6d9cdf6d48d61b29d75eaff24f73634a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/honey/thermal",
    "path": "engine/reference/sim/particles/substances/materials/honey/thermal.md",
    "source": "engine/sim/particles/substances/materials/honey/thermal.js",
    "import": "/engine/sim/particles/substances/materials/honey/thermal.js",
    "sourceHash": "676db215c1fa538393f41cd97c6a242793c3ce0a06af008736254241fbc63bcb",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/honey/visual",
    "path": "engine/reference/sim/particles/substances/materials/honey/visual.md",
    "source": "engine/sim/particles/substances/materials/honey/visual.js",
    "import": "/engine/sim/particles/substances/materials/honey/visual.js",
    "sourceHash": "c8b4b978bcb6b252788f225118b4a63dd309930f6cf426645b634a44ec6e8da4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/ice/audio",
    "path": "engine/reference/sim/particles/substances/materials/ice/audio.md",
    "source": "engine/sim/particles/substances/materials/ice/audio.js",
    "import": "/engine/sim/particles/substances/materials/ice/audio.js",
    "sourceHash": "645146b988520275f9421befdf6598066f32c53e840d035e2b8f0d9f45d019b1",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/ice/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/ice/chemistry.md",
    "source": "engine/sim/particles/substances/materials/ice/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/ice/chemistry.js",
    "sourceHash": "cc0bdc2d1d97712c71c31f40f48ff372d257f3ec5053f7b8333992d492773890",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/ice/decals",
    "path": "engine/reference/sim/particles/substances/materials/ice/decals.md",
    "source": "engine/sim/particles/substances/materials/ice/decals.js",
    "import": "/engine/sim/particles/substances/materials/ice/decals.js",
    "sourceHash": "6e2b95ab3abf003f0ef03c90c0e4621a20d659a3056c09798c100a074e7c20bc",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/ice/emitter",
    "path": "engine/reference/sim/particles/substances/materials/ice/emitter.md",
    "source": "engine/sim/particles/substances/materials/ice/emitter.js",
    "import": "/engine/sim/particles/substances/materials/ice/emitter.js",
    "sourceHash": "643654627bce4e4152e5668848273dad5e71b20e268df48aeb6b50c7873e19dc",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/ice/identity",
    "path": "engine/reference/sim/particles/substances/materials/ice/identity.md",
    "source": "engine/sim/particles/substances/materials/ice/identity.js",
    "import": "/engine/sim/particles/substances/materials/ice/identity.js",
    "sourceHash": "4ad0e85aff3002b522acca08484d68c2d9243382ff3a5845a6c2e451a262f7b4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/ice/index",
    "path": "engine/reference/sim/particles/substances/materials/ice/index.md",
    "source": "engine/sim/particles/substances/materials/ice/index.js",
    "import": "/engine/sim/particles/substances/materials/ice/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/ice/physics",
    "path": "engine/reference/sim/particles/substances/materials/ice/physics.md",
    "source": "engine/sim/particles/substances/materials/ice/physics.js",
    "import": "/engine/sim/particles/substances/materials/ice/physics.js",
    "sourceHash": "5200b0d75881fa35f3d85bdf9f8424368833cbc542515b6650f2c9f318af4681",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/ice/reactions",
    "path": "engine/reference/sim/particles/substances/materials/ice/reactions.md",
    "source": "engine/sim/particles/substances/materials/ice/reactions.js",
    "import": "/engine/sim/particles/substances/materials/ice/reactions.js",
    "sourceHash": "1ce97456f0376ba71a966467c068bc4c4111d7918b5868521311b498475f0fea",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/ice/spell",
    "path": "engine/reference/sim/particles/substances/materials/ice/spell.md",
    "source": "engine/sim/particles/substances/materials/ice/spell.js",
    "import": "/engine/sim/particles/substances/materials/ice/spell.js",
    "sourceHash": "f5a19de8dd6dad62020e1515ff63b5b70e2cdc7ba72dfc06c95192fa8163ed65",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/ice/sph",
    "path": "engine/reference/sim/particles/substances/materials/ice/sph.md",
    "source": "engine/sim/particles/substances/materials/ice/sph.js",
    "import": "/engine/sim/particles/substances/materials/ice/sph.js",
    "sourceHash": "420fd4e2984de17f6e1c96eda767d734342383e48607274f8a9b137a7352e9d4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/ice/thermal",
    "path": "engine/reference/sim/particles/substances/materials/ice/thermal.md",
    "source": "engine/sim/particles/substances/materials/ice/thermal.js",
    "import": "/engine/sim/particles/substances/materials/ice/thermal.js",
    "sourceHash": "7c34cf70f06ba337632932ce4d687a8fa0802ef35cf94ca542498de3d5ba333d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/ice/visual",
    "path": "engine/reference/sim/particles/substances/materials/ice/visual.md",
    "source": "engine/sim/particles/substances/materials/ice/visual.js",
    "import": "/engine/sim/particles/substances/materials/ice/visual.js",
    "sourceHash": "904b95cb709257f06695a1e4f3c00e047b1c9c1e61616fd08eca52ea50eec884",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/index",
    "path": "engine/reference/sim/particles/substances/materials/index.md",
    "source": "engine/sim/particles/substances/materials/index.js",
    "import": "/engine/sim/particles/substances/materials/index.js",
    "sourceHash": "3b05954e9f732b2b426dd2c1a846b5759dbb0f5ca035b01ba0250af26ae9f588",
    "summary": "materials/index.js — Auto-registers all substance definitions with SubstanceRegistry. Import this file to ensure all built-in substances are registered. Each substance folder exports a default object assembled from its sub-files.",
    "exports": [
      {
        "name": "ALL_SUBSTANCES",
        "kind": "re-export",
        "signature": "ALL_SUBSTANCES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/lava/audio",
    "path": "engine/reference/sim/particles/substances/materials/lava/audio.md",
    "source": "engine/sim/particles/substances/materials/lava/audio.js",
    "import": "/engine/sim/particles/substances/materials/lava/audio.js",
    "sourceHash": "99cbe55b5684de7916d12d2062f4ff7c9af5fd1d9013c7b268188f4f84460d6b",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/lava/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/lava/chemistry.md",
    "source": "engine/sim/particles/substances/materials/lava/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/lava/chemistry.js",
    "sourceHash": "9ec1ec2e724dfb0a3449d160b55c828451f29d4376ce349050e4cc88ce7c6b54",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/lava/decals",
    "path": "engine/reference/sim/particles/substances/materials/lava/decals.md",
    "source": "engine/sim/particles/substances/materials/lava/decals.js",
    "import": "/engine/sim/particles/substances/materials/lava/decals.js",
    "sourceHash": "a755beedb92ab9dd0056130bd2d473a91ae2e733b17a44fbe637d3a545c8d8df",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/lava/emitter",
    "path": "engine/reference/sim/particles/substances/materials/lava/emitter.md",
    "source": "engine/sim/particles/substances/materials/lava/emitter.js",
    "import": "/engine/sim/particles/substances/materials/lava/emitter.js",
    "sourceHash": "7a38043ab22c5194d6ba9e2efddbd2c23c8f183910dd8a4363ec2ae75a9976ab",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/lava/identity",
    "path": "engine/reference/sim/particles/substances/materials/lava/identity.md",
    "source": "engine/sim/particles/substances/materials/lava/identity.js",
    "import": "/engine/sim/particles/substances/materials/lava/identity.js",
    "sourceHash": "b198ba7417e2fbc3a2501844df17995e314a7c6ad92819f481367b0db19026a9",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/lava/index",
    "path": "engine/reference/sim/particles/substances/materials/lava/index.md",
    "source": "engine/sim/particles/substances/materials/lava/index.js",
    "import": "/engine/sim/particles/substances/materials/lava/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/lava/physics",
    "path": "engine/reference/sim/particles/substances/materials/lava/physics.md",
    "source": "engine/sim/particles/substances/materials/lava/physics.js",
    "import": "/engine/sim/particles/substances/materials/lava/physics.js",
    "sourceHash": "adc5712a98872908d513c2a9ce9ee1a8222dfef4435fec47b18b5c91e21c26a9",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/lava/reactions",
    "path": "engine/reference/sim/particles/substances/materials/lava/reactions.md",
    "source": "engine/sim/particles/substances/materials/lava/reactions.js",
    "import": "/engine/sim/particles/substances/materials/lava/reactions.js",
    "sourceHash": "2fbf22a36a90702730b4543e6544fb2bbb971b74200d13570fc74e1ae8acca21",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/lava/spell",
    "path": "engine/reference/sim/particles/substances/materials/lava/spell.md",
    "source": "engine/sim/particles/substances/materials/lava/spell.js",
    "import": "/engine/sim/particles/substances/materials/lava/spell.js",
    "sourceHash": "e2842d9795437574d16ff048f4662780a3c4504027f5ac089194c9f60bc312e3",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/lava/sph",
    "path": "engine/reference/sim/particles/substances/materials/lava/sph.md",
    "source": "engine/sim/particles/substances/materials/lava/sph.js",
    "import": "/engine/sim/particles/substances/materials/lava/sph.js",
    "sourceHash": "bbd15a58eb3a346900c3b0274bea19e90edf917d20225bcc22bccf595833f602",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/lava/thermal",
    "path": "engine/reference/sim/particles/substances/materials/lava/thermal.md",
    "source": "engine/sim/particles/substances/materials/lava/thermal.js",
    "import": "/engine/sim/particles/substances/materials/lava/thermal.js",
    "sourceHash": "4e7b0d917a9f9998454620177d1aeb8b11db9ed81802948f9b8a3d5894d0173c",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/lava/visual",
    "path": "engine/reference/sim/particles/substances/materials/lava/visual.md",
    "source": "engine/sim/particles/substances/materials/lava/visual.js",
    "import": "/engine/sim/particles/substances/materials/lava/visual.js",
    "sourceHash": "f37fa763968ab1f3617971a6f276eac7e40fa07d6bcd79218b85b6a74655d698",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/mercury/audio",
    "path": "engine/reference/sim/particles/substances/materials/mercury/audio.md",
    "source": "engine/sim/particles/substances/materials/mercury/audio.js",
    "import": "/engine/sim/particles/substances/materials/mercury/audio.js",
    "sourceHash": "5c9e76e038e5d34387f1fed104e06277320d8f74db6237e05fd247a4284b300a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/mercury/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/mercury/chemistry.md",
    "source": "engine/sim/particles/substances/materials/mercury/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/mercury/chemistry.js",
    "sourceHash": "902ed78183358567b4fb8cca8277a0045e26d89724e9b4f307e41595ca4db337",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/mercury/decals",
    "path": "engine/reference/sim/particles/substances/materials/mercury/decals.md",
    "source": "engine/sim/particles/substances/materials/mercury/decals.js",
    "import": "/engine/sim/particles/substances/materials/mercury/decals.js",
    "sourceHash": "547b9c0add00abee6ae43cf157bba92854dc14a746aee7820e742df0a8b0ff66",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/mercury/emitter",
    "path": "engine/reference/sim/particles/substances/materials/mercury/emitter.md",
    "source": "engine/sim/particles/substances/materials/mercury/emitter.js",
    "import": "/engine/sim/particles/substances/materials/mercury/emitter.js",
    "sourceHash": "faa15094eddf0d5d2490b9bf2408f94e2787d3a8361a9d1262bde2c0bdef7548",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/mercury/identity",
    "path": "engine/reference/sim/particles/substances/materials/mercury/identity.md",
    "source": "engine/sim/particles/substances/materials/mercury/identity.js",
    "import": "/engine/sim/particles/substances/materials/mercury/identity.js",
    "sourceHash": "5eb6b68f5e18906c0ea170d6992953f2115e477f5890fd7460a2bbaf31fd0867",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/mercury/index",
    "path": "engine/reference/sim/particles/substances/materials/mercury/index.md",
    "source": "engine/sim/particles/substances/materials/mercury/index.js",
    "import": "/engine/sim/particles/substances/materials/mercury/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/mercury/physics",
    "path": "engine/reference/sim/particles/substances/materials/mercury/physics.md",
    "source": "engine/sim/particles/substances/materials/mercury/physics.js",
    "import": "/engine/sim/particles/substances/materials/mercury/physics.js",
    "sourceHash": "bb07616b3913572e3c5d3c51057966d055e890ab30ade08fe1b1bea4779043ee",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/mercury/reactions",
    "path": "engine/reference/sim/particles/substances/materials/mercury/reactions.md",
    "source": "engine/sim/particles/substances/materials/mercury/reactions.js",
    "import": "/engine/sim/particles/substances/materials/mercury/reactions.js",
    "sourceHash": "8f00a6f210cfdbd5b2a2811370cebdd98321c9a196ed058574d6a3d30dd4b7da",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/mercury/spell",
    "path": "engine/reference/sim/particles/substances/materials/mercury/spell.md",
    "source": "engine/sim/particles/substances/materials/mercury/spell.js",
    "import": "/engine/sim/particles/substances/materials/mercury/spell.js",
    "sourceHash": "e7b7c25a24784b9a4721080f15293327a0df9c7bbfc18a0863be2125cbcd80e7",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/mercury/sph",
    "path": "engine/reference/sim/particles/substances/materials/mercury/sph.md",
    "source": "engine/sim/particles/substances/materials/mercury/sph.js",
    "import": "/engine/sim/particles/substances/materials/mercury/sph.js",
    "sourceHash": "8e89471cdb62d146a7e20ef3602a4aebbb86d6baa6677433e9d16122cd1bfc55",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/mercury/thermal",
    "path": "engine/reference/sim/particles/substances/materials/mercury/thermal.md",
    "source": "engine/sim/particles/substances/materials/mercury/thermal.js",
    "import": "/engine/sim/particles/substances/materials/mercury/thermal.js",
    "sourceHash": "3a01364146eb996efed0e4d432de55a6115bec6c8a021d7724644bc79889371a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/mercury/visual",
    "path": "engine/reference/sim/particles/substances/materials/mercury/visual.md",
    "source": "engine/sim/particles/substances/materials/mercury/visual.js",
    "import": "/engine/sim/particles/substances/materials/mercury/visual.js",
    "sourceHash": "59768504b264f858fc4716b8c59fa792468ca53e0e4e2ed0077935734dbb9395",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/metal/audio",
    "path": "engine/reference/sim/particles/substances/materials/metal/audio.md",
    "source": "engine/sim/particles/substances/materials/metal/audio.js",
    "import": "/engine/sim/particles/substances/materials/metal/audio.js",
    "sourceHash": "67c751c7edc17919ed8cf672c4fd82baeeedc0296e16d1d5820f0458f257c0cb",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/metal/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/metal/chemistry.md",
    "source": "engine/sim/particles/substances/materials/metal/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/metal/chemistry.js",
    "sourceHash": "433010aa32c0f92d51d6424faa294ed93fc31c04b17655dbc52f082b09bebb08",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/metal/decals",
    "path": "engine/reference/sim/particles/substances/materials/metal/decals.md",
    "source": "engine/sim/particles/substances/materials/metal/decals.js",
    "import": "/engine/sim/particles/substances/materials/metal/decals.js",
    "sourceHash": "85afda68fcffdeab379d7a973657bd029d769afd7912031c947823203ed90a44",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/metal/emitter",
    "path": "engine/reference/sim/particles/substances/materials/metal/emitter.md",
    "source": "engine/sim/particles/substances/materials/metal/emitter.js",
    "import": "/engine/sim/particles/substances/materials/metal/emitter.js",
    "sourceHash": "c6ba9ea31dec38cb6e4409c4a1570ee3f5b957d8fd8e8f795c255d1101dd1d85",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/metal/identity",
    "path": "engine/reference/sim/particles/substances/materials/metal/identity.md",
    "source": "engine/sim/particles/substances/materials/metal/identity.js",
    "import": "/engine/sim/particles/substances/materials/metal/identity.js",
    "sourceHash": "89dc2d315be796ea26bfbd2a19b527dfc474d7788c8107ce3f6c6353bb15632a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/metal/index",
    "path": "engine/reference/sim/particles/substances/materials/metal/index.md",
    "source": "engine/sim/particles/substances/materials/metal/index.js",
    "import": "/engine/sim/particles/substances/materials/metal/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/metal/physics",
    "path": "engine/reference/sim/particles/substances/materials/metal/physics.md",
    "source": "engine/sim/particles/substances/materials/metal/physics.js",
    "import": "/engine/sim/particles/substances/materials/metal/physics.js",
    "sourceHash": "d866d975dc82f405e0fd3dfaabdbf44c4061cb1c07f289e0fc51910a1f927f65",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/metal/reactions",
    "path": "engine/reference/sim/particles/substances/materials/metal/reactions.md",
    "source": "engine/sim/particles/substances/materials/metal/reactions.js",
    "import": "/engine/sim/particles/substances/materials/metal/reactions.js",
    "sourceHash": "3b4847a8e2857d4b45f0d023852f7ef7107f74f189c2de3a77c6281b6513abc5",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/metal/spell",
    "path": "engine/reference/sim/particles/substances/materials/metal/spell.md",
    "source": "engine/sim/particles/substances/materials/metal/spell.js",
    "import": "/engine/sim/particles/substances/materials/metal/spell.js",
    "sourceHash": "becb6ba739c64a8ef68b29d44fb7136cda1447be731adac6f15bbc05377ee10c",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/metal/sph",
    "path": "engine/reference/sim/particles/substances/materials/metal/sph.md",
    "source": "engine/sim/particles/substances/materials/metal/sph.js",
    "import": "/engine/sim/particles/substances/materials/metal/sph.js",
    "sourceHash": "9b8f588ef70baa0b0c77a7e6780c52427a55c8dae8b8c90600bd8421a69f6fe0",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/metal/thermal",
    "path": "engine/reference/sim/particles/substances/materials/metal/thermal.md",
    "source": "engine/sim/particles/substances/materials/metal/thermal.js",
    "import": "/engine/sim/particles/substances/materials/metal/thermal.js",
    "sourceHash": "e081fe5406ecb825d2941a762f8f83f9449a9eab3fe624d74b6ca1acfcf143e4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/metal/visual",
    "path": "engine/reference/sim/particles/substances/materials/metal/visual.md",
    "source": "engine/sim/particles/substances/materials/metal/visual.js",
    "import": "/engine/sim/particles/substances/materials/metal/visual.js",
    "sourceHash": "124ad1785033d1d2a65ca0a665586e050a4ee1390cacf432a1b288a20b5da868",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/oil/audio",
    "path": "engine/reference/sim/particles/substances/materials/oil/audio.md",
    "source": "engine/sim/particles/substances/materials/oil/audio.js",
    "import": "/engine/sim/particles/substances/materials/oil/audio.js",
    "sourceHash": "9c29a6b2421c994b54bdcb330efa8889d0ff4b4587079356346241b807172ae9",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/oil/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/oil/chemistry.md",
    "source": "engine/sim/particles/substances/materials/oil/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/oil/chemistry.js",
    "sourceHash": "e5da9dbf5524da9209aa78cd4a86c7baea0c126ad3d1cb16297d32e0f87184bb",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/oil/decals",
    "path": "engine/reference/sim/particles/substances/materials/oil/decals.md",
    "source": "engine/sim/particles/substances/materials/oil/decals.js",
    "import": "/engine/sim/particles/substances/materials/oil/decals.js",
    "sourceHash": "491dd2330bc53b46a83b64856d8fba9fb8f5101c3934467683f3dc468e8e9d48",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/oil/emitter",
    "path": "engine/reference/sim/particles/substances/materials/oil/emitter.md",
    "source": "engine/sim/particles/substances/materials/oil/emitter.js",
    "import": "/engine/sim/particles/substances/materials/oil/emitter.js",
    "sourceHash": "f3a9179aa665caaadf7f676be93fd85439385a675146abaeba6847ebec1961b4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/oil/identity",
    "path": "engine/reference/sim/particles/substances/materials/oil/identity.md",
    "source": "engine/sim/particles/substances/materials/oil/identity.js",
    "import": "/engine/sim/particles/substances/materials/oil/identity.js",
    "sourceHash": "b0e2a2ad97ad3d4b17e5a1d454dba0b8e4ca831401e4854ce7178916ec32bcec",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/oil/index",
    "path": "engine/reference/sim/particles/substances/materials/oil/index.md",
    "source": "engine/sim/particles/substances/materials/oil/index.js",
    "import": "/engine/sim/particles/substances/materials/oil/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/oil/physics",
    "path": "engine/reference/sim/particles/substances/materials/oil/physics.md",
    "source": "engine/sim/particles/substances/materials/oil/physics.js",
    "import": "/engine/sim/particles/substances/materials/oil/physics.js",
    "sourceHash": "3119a49550b8e3036081978f23198a4903ea15ce96289b6d073540ef1c2de8b2",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/oil/reactions",
    "path": "engine/reference/sim/particles/substances/materials/oil/reactions.md",
    "source": "engine/sim/particles/substances/materials/oil/reactions.js",
    "import": "/engine/sim/particles/substances/materials/oil/reactions.js",
    "sourceHash": "b61abe5ef4c636e334fd651bd07e484aa4705dde4602940acb75b10e3eb9860a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/oil/spell",
    "path": "engine/reference/sim/particles/substances/materials/oil/spell.md",
    "source": "engine/sim/particles/substances/materials/oil/spell.js",
    "import": "/engine/sim/particles/substances/materials/oil/spell.js",
    "sourceHash": "d117abe61d91ebade8ec8c810b687a0ffc787123e928b43154d8bea7d96205f1",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/oil/sph",
    "path": "engine/reference/sim/particles/substances/materials/oil/sph.md",
    "source": "engine/sim/particles/substances/materials/oil/sph.js",
    "import": "/engine/sim/particles/substances/materials/oil/sph.js",
    "sourceHash": "2fa5fbf90fba177254441c2f410a018d0d4cf7f7a117c4d1d07d0f61029e181e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/oil/thermal",
    "path": "engine/reference/sim/particles/substances/materials/oil/thermal.md",
    "source": "engine/sim/particles/substances/materials/oil/thermal.js",
    "import": "/engine/sim/particles/substances/materials/oil/thermal.js",
    "sourceHash": "1cedae6ea7650caf50de9e31f309255921d91aebefef67c03c44a9822ab3c7b9",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/oil/visual",
    "path": "engine/reference/sim/particles/substances/materials/oil/visual.md",
    "source": "engine/sim/particles/substances/materials/oil/visual.js",
    "import": "/engine/sim/particles/substances/materials/oil/visual.js",
    "sourceHash": "a340634a82502b8a726d1ad307b2657cfa07fe9e0eca1a7527fc998f8787656c",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/plasma/audio",
    "path": "engine/reference/sim/particles/substances/materials/plasma/audio.md",
    "source": "engine/sim/particles/substances/materials/plasma/audio.js",
    "import": "/engine/sim/particles/substances/materials/plasma/audio.js",
    "sourceHash": "8ea8efbb514a255fbf414069426053b63436b953c2114d3b5e6ff3f96b3e2c9d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/plasma/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/plasma/chemistry.md",
    "source": "engine/sim/particles/substances/materials/plasma/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/plasma/chemistry.js",
    "sourceHash": "80a73c4fd427fce91eebebe390c74c50c119e5be7ec6b695aa728394dd4ab9d6",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/plasma/decals",
    "path": "engine/reference/sim/particles/substances/materials/plasma/decals.md",
    "source": "engine/sim/particles/substances/materials/plasma/decals.js",
    "import": "/engine/sim/particles/substances/materials/plasma/decals.js",
    "sourceHash": "0f48b1fe24a9c1a8a360b2a590d9b9b8e5ff4dfa4ec15ae3011e6f377f09d4c1",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/plasma/emitter",
    "path": "engine/reference/sim/particles/substances/materials/plasma/emitter.md",
    "source": "engine/sim/particles/substances/materials/plasma/emitter.js",
    "import": "/engine/sim/particles/substances/materials/plasma/emitter.js",
    "sourceHash": "a3aec70bf84349bde7dd7c3a279d77bc3931cd97dddce2e90e8b731fa7013142",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/plasma/identity",
    "path": "engine/reference/sim/particles/substances/materials/plasma/identity.md",
    "source": "engine/sim/particles/substances/materials/plasma/identity.js",
    "import": "/engine/sim/particles/substances/materials/plasma/identity.js",
    "sourceHash": "8d6724518e9130853b4a14c21100b8862aeb173ef977695b65f8881c3b811327",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/plasma/index",
    "path": "engine/reference/sim/particles/substances/materials/plasma/index.md",
    "source": "engine/sim/particles/substances/materials/plasma/index.js",
    "import": "/engine/sim/particles/substances/materials/plasma/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/plasma/physics",
    "path": "engine/reference/sim/particles/substances/materials/plasma/physics.md",
    "source": "engine/sim/particles/substances/materials/plasma/physics.js",
    "import": "/engine/sim/particles/substances/materials/plasma/physics.js",
    "sourceHash": "d936e33c19d102f12aaa84c2ead6b8cde36c9b1786bc17082d81d8b8aac6ae20",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/plasma/reactions",
    "path": "engine/reference/sim/particles/substances/materials/plasma/reactions.md",
    "source": "engine/sim/particles/substances/materials/plasma/reactions.js",
    "import": "/engine/sim/particles/substances/materials/plasma/reactions.js",
    "sourceHash": "e3a67960385f8a045c61045b193f6905863701ffd737adbdc1976a16675388f4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/plasma/spell",
    "path": "engine/reference/sim/particles/substances/materials/plasma/spell.md",
    "source": "engine/sim/particles/substances/materials/plasma/spell.js",
    "import": "/engine/sim/particles/substances/materials/plasma/spell.js",
    "sourceHash": "ebfff341ed23b671c80782c5d9362e2a3d93e4f828fc926229b4128b62b6b0c4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/plasma/sph",
    "path": "engine/reference/sim/particles/substances/materials/plasma/sph.md",
    "source": "engine/sim/particles/substances/materials/plasma/sph.js",
    "import": "/engine/sim/particles/substances/materials/plasma/sph.js",
    "sourceHash": "d01e0b897d6eea9d7191bd12b836303394fee3ec5b2bdd1c8fed01613e2cc56d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/plasma/thermal",
    "path": "engine/reference/sim/particles/substances/materials/plasma/thermal.md",
    "source": "engine/sim/particles/substances/materials/plasma/thermal.js",
    "import": "/engine/sim/particles/substances/materials/plasma/thermal.js",
    "sourceHash": "195c20cd8d7b817c7ccdc7750b4b5596a1cb2fa557238b84df5f0e8985b3d6c5",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/plasma/visual",
    "path": "engine/reference/sim/particles/substances/materials/plasma/visual.md",
    "source": "engine/sim/particles/substances/materials/plasma/visual.js",
    "import": "/engine/sim/particles/substances/materials/plasma/visual.js",
    "sourceHash": "a9562688e979b604e9b8911e99f38cdb5f255d28721c461c7608a5081d36bcbb",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sand/audio",
    "path": "engine/reference/sim/particles/substances/materials/sand/audio.md",
    "source": "engine/sim/particles/substances/materials/sand/audio.js",
    "import": "/engine/sim/particles/substances/materials/sand/audio.js",
    "sourceHash": "09586f539c046036cf438243ed67b099989fe6117835beaef8bcd39156263f9c",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sand/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/sand/chemistry.md",
    "source": "engine/sim/particles/substances/materials/sand/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/sand/chemistry.js",
    "sourceHash": "9ec1ec2e724dfb0a3449d160b55c828451f29d4376ce349050e4cc88ce7c6b54",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sand/decals",
    "path": "engine/reference/sim/particles/substances/materials/sand/decals.md",
    "source": "engine/sim/particles/substances/materials/sand/decals.js",
    "import": "/engine/sim/particles/substances/materials/sand/decals.js",
    "sourceHash": "0940bdf9e97fd911eed29601a48c14fca5d493747d98e019ba063607ff046872",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sand/emitter",
    "path": "engine/reference/sim/particles/substances/materials/sand/emitter.md",
    "source": "engine/sim/particles/substances/materials/sand/emitter.js",
    "import": "/engine/sim/particles/substances/materials/sand/emitter.js",
    "sourceHash": "bb4715ad6c528241a6ad17b45cb257c5163d799c36c1e77eca4d3d361c5ff36f",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sand/identity",
    "path": "engine/reference/sim/particles/substances/materials/sand/identity.md",
    "source": "engine/sim/particles/substances/materials/sand/identity.js",
    "import": "/engine/sim/particles/substances/materials/sand/identity.js",
    "sourceHash": "112908d65d0761865e0e3aecd43f85f4ec24880d68c54d60293f454ddf8042e4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sand/index",
    "path": "engine/reference/sim/particles/substances/materials/sand/index.md",
    "source": "engine/sim/particles/substances/materials/sand/index.js",
    "import": "/engine/sim/particles/substances/materials/sand/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sand/physics",
    "path": "engine/reference/sim/particles/substances/materials/sand/physics.md",
    "source": "engine/sim/particles/substances/materials/sand/physics.js",
    "import": "/engine/sim/particles/substances/materials/sand/physics.js",
    "sourceHash": "aef030e5fc85c9a5be6970b7138f40e861891c2b2bae4785f23fda5d8b08a9bc",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sand/reactions",
    "path": "engine/reference/sim/particles/substances/materials/sand/reactions.md",
    "source": "engine/sim/particles/substances/materials/sand/reactions.js",
    "import": "/engine/sim/particles/substances/materials/sand/reactions.js",
    "sourceHash": "dfe5c12b7a4de8325ecffb91eafc6d2295d3f7a3633c845c0ae1d452c422d3f5",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sand/spell",
    "path": "engine/reference/sim/particles/substances/materials/sand/spell.md",
    "source": "engine/sim/particles/substances/materials/sand/spell.js",
    "import": "/engine/sim/particles/substances/materials/sand/spell.js",
    "sourceHash": "91e22ddf248a18fd375d0cef965c74fe49ea15f2f44aaf72d620b8939d32ad0e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sand/sph",
    "path": "engine/reference/sim/particles/substances/materials/sand/sph.md",
    "source": "engine/sim/particles/substances/materials/sand/sph.js",
    "import": "/engine/sim/particles/substances/materials/sand/sph.js",
    "sourceHash": "ff093c67acd1b750ed1d33954fc8d168182327c7567e4eadb92259d047448f9e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sand/thermal",
    "path": "engine/reference/sim/particles/substances/materials/sand/thermal.md",
    "source": "engine/sim/particles/substances/materials/sand/thermal.js",
    "import": "/engine/sim/particles/substances/materials/sand/thermal.js",
    "sourceHash": "1fdce1b2a665d51c18994faad6eb8ddc4a604d7f9b771b98d4ba718c2d267327",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sand/visual",
    "path": "engine/reference/sim/particles/substances/materials/sand/visual.md",
    "source": "engine/sim/particles/substances/materials/sand/visual.js",
    "import": "/engine/sim/particles/substances/materials/sand/visual.js",
    "sourceHash": "c80aa5e34abced8b5eb7d23b4e96101d1d59a0d8bd90915ccff6ddc14fc18e6f",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/smoke/audio",
    "path": "engine/reference/sim/particles/substances/materials/smoke/audio.md",
    "source": "engine/sim/particles/substances/materials/smoke/audio.js",
    "import": "/engine/sim/particles/substances/materials/smoke/audio.js",
    "sourceHash": "b50db4c034712354e056f01fa3d1c3bb42c6e4aa9bc10d06bd4fa8e5078cf13f",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/smoke/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/smoke/chemistry.md",
    "source": "engine/sim/particles/substances/materials/smoke/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/smoke/chemistry.js",
    "sourceHash": "84874534aadefdeb690be05d92f0a7ebd4ecf2a2e5429f0ec7cebf945acd56f6",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/smoke/decals",
    "path": "engine/reference/sim/particles/substances/materials/smoke/decals.md",
    "source": "engine/sim/particles/substances/materials/smoke/decals.js",
    "import": "/engine/sim/particles/substances/materials/smoke/decals.js",
    "sourceHash": "9fa5670d3b70562935caff4e435ab5d2b9426fd0e596b394fc8e0d5e73d1f783",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/smoke/emitter",
    "path": "engine/reference/sim/particles/substances/materials/smoke/emitter.md",
    "source": "engine/sim/particles/substances/materials/smoke/emitter.js",
    "import": "/engine/sim/particles/substances/materials/smoke/emitter.js",
    "sourceHash": "6e97af19eca2a4a77107dc2d1569d64c7a2a20ecd9d504b054c2d94542e8b831",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/smoke/identity",
    "path": "engine/reference/sim/particles/substances/materials/smoke/identity.md",
    "source": "engine/sim/particles/substances/materials/smoke/identity.js",
    "import": "/engine/sim/particles/substances/materials/smoke/identity.js",
    "sourceHash": "8c8a9ba67dbe32c230fd9942fcba50a82ced07c613a63498dcda0d7885a35d13",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/smoke/index",
    "path": "engine/reference/sim/particles/substances/materials/smoke/index.md",
    "source": "engine/sim/particles/substances/materials/smoke/index.js",
    "import": "/engine/sim/particles/substances/materials/smoke/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/smoke/physics",
    "path": "engine/reference/sim/particles/substances/materials/smoke/physics.md",
    "source": "engine/sim/particles/substances/materials/smoke/physics.js",
    "import": "/engine/sim/particles/substances/materials/smoke/physics.js",
    "sourceHash": "a0efb42aa36354deb991ed248dbcaccf32076356af3847f0d6013df6b2919237",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/smoke/reactions",
    "path": "engine/reference/sim/particles/substances/materials/smoke/reactions.md",
    "source": "engine/sim/particles/substances/materials/smoke/reactions.js",
    "import": "/engine/sim/particles/substances/materials/smoke/reactions.js",
    "sourceHash": "e3a67960385f8a045c61045b193f6905863701ffd737adbdc1976a16675388f4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/smoke/spell",
    "path": "engine/reference/sim/particles/substances/materials/smoke/spell.md",
    "source": "engine/sim/particles/substances/materials/smoke/spell.js",
    "import": "/engine/sim/particles/substances/materials/smoke/spell.js",
    "sourceHash": "53399a68a3c8ff906291c15c43abbf5cd19853917a633c52a2d9ac8b200edf73",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/smoke/sph",
    "path": "engine/reference/sim/particles/substances/materials/smoke/sph.md",
    "source": "engine/sim/particles/substances/materials/smoke/sph.js",
    "import": "/engine/sim/particles/substances/materials/smoke/sph.js",
    "sourceHash": "d01e0b897d6eea9d7191bd12b836303394fee3ec5b2bdd1c8fed01613e2cc56d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/smoke/thermal",
    "path": "engine/reference/sim/particles/substances/materials/smoke/thermal.md",
    "source": "engine/sim/particles/substances/materials/smoke/thermal.js",
    "import": "/engine/sim/particles/substances/materials/smoke/thermal.js",
    "sourceHash": "e8d2eba0356531df009f88050a864bda57f22ea2299e4a33ea59b8e61cd5439a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/smoke/visual",
    "path": "engine/reference/sim/particles/substances/materials/smoke/visual.md",
    "source": "engine/sim/particles/substances/materials/smoke/visual.js",
    "import": "/engine/sim/particles/substances/materials/smoke/visual.js",
    "sourceHash": "db84296e164e475d83413db1552e88278f1d2348c4ffca0300f8ec7e732cc98f",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/snow/audio",
    "path": "engine/reference/sim/particles/substances/materials/snow/audio.md",
    "source": "engine/sim/particles/substances/materials/snow/audio.js",
    "import": "/engine/sim/particles/substances/materials/snow/audio.js",
    "sourceHash": "ae641a3aee2fd83161ea60ae804d94356caf2f9bfac66c7a13238e99d4607e4b",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/snow/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/snow/chemistry.md",
    "source": "engine/sim/particles/substances/materials/snow/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/snow/chemistry.js",
    "sourceHash": "cc0bdc2d1d97712c71c31f40f48ff372d257f3ec5053f7b8333992d492773890",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/snow/decals",
    "path": "engine/reference/sim/particles/substances/materials/snow/decals.md",
    "source": "engine/sim/particles/substances/materials/snow/decals.js",
    "import": "/engine/sim/particles/substances/materials/snow/decals.js",
    "sourceHash": "2075f61ce1c11404770539d35371bf220d203815f6964fd9356f4b2f3804fc58",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/snow/emitter",
    "path": "engine/reference/sim/particles/substances/materials/snow/emitter.md",
    "source": "engine/sim/particles/substances/materials/snow/emitter.js",
    "import": "/engine/sim/particles/substances/materials/snow/emitter.js",
    "sourceHash": "911fd0901e7a758153595f7b76106964012e40f04a288edd16ebf9afd32ae17e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/snow/identity",
    "path": "engine/reference/sim/particles/substances/materials/snow/identity.md",
    "source": "engine/sim/particles/substances/materials/snow/identity.js",
    "import": "/engine/sim/particles/substances/materials/snow/identity.js",
    "sourceHash": "817c8cc6ea57b427687b0f4c7f17471543dc3e6129295cc089ee9ddbaec0eb90",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/snow/index",
    "path": "engine/reference/sim/particles/substances/materials/snow/index.md",
    "source": "engine/sim/particles/substances/materials/snow/index.js",
    "import": "/engine/sim/particles/substances/materials/snow/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/snow/physics",
    "path": "engine/reference/sim/particles/substances/materials/snow/physics.md",
    "source": "engine/sim/particles/substances/materials/snow/physics.js",
    "import": "/engine/sim/particles/substances/materials/snow/physics.js",
    "sourceHash": "73dd4d03bccc50302f7f9478f970a83c97e6d62e5b73dbb061a591d9b4fe576b",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/snow/reactions",
    "path": "engine/reference/sim/particles/substances/materials/snow/reactions.md",
    "source": "engine/sim/particles/substances/materials/snow/reactions.js",
    "import": "/engine/sim/particles/substances/materials/snow/reactions.js",
    "sourceHash": "7385e4c70f6a92c923df306789e9582cc689e690485fe658da07560431acf253",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/snow/spell",
    "path": "engine/reference/sim/particles/substances/materials/snow/spell.md",
    "source": "engine/sim/particles/substances/materials/snow/spell.js",
    "import": "/engine/sim/particles/substances/materials/snow/spell.js",
    "sourceHash": "aa460e8c3d5fcbd161f23f52ecc68bfb2390bbf7d346627623ebb1e6e9077d61",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/snow/sph",
    "path": "engine/reference/sim/particles/substances/materials/snow/sph.md",
    "source": "engine/sim/particles/substances/materials/snow/sph.js",
    "import": "/engine/sim/particles/substances/materials/snow/sph.js",
    "sourceHash": "59a5fa01723cc267e03be44725a615c562546b927bd3af933b5eb42c4bb0372a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/snow/thermal",
    "path": "engine/reference/sim/particles/substances/materials/snow/thermal.md",
    "source": "engine/sim/particles/substances/materials/snow/thermal.js",
    "import": "/engine/sim/particles/substances/materials/snow/thermal.js",
    "sourceHash": "f7bd5fb425992aedf4571f7976976f456e3f6bda4c20a724318be0a8e9dbdf4d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/snow/visual",
    "path": "engine/reference/sim/particles/substances/materials/snow/visual.md",
    "source": "engine/sim/particles/substances/materials/snow/visual.js",
    "import": "/engine/sim/particles/substances/materials/snow/visual.js",
    "sourceHash": "88677d42a742a121492712f85e9c17ebe0c274cdb097114f38e1ad692c723337",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sparks/audio",
    "path": "engine/reference/sim/particles/substances/materials/sparks/audio.md",
    "source": "engine/sim/particles/substances/materials/sparks/audio.js",
    "import": "/engine/sim/particles/substances/materials/sparks/audio.js",
    "sourceHash": "ee321c51874fbc79e202ad918850e051a56ef6ad6e6e9e324b1f111b35f5c1f3",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sparks/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/sparks/chemistry.md",
    "source": "engine/sim/particles/substances/materials/sparks/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/sparks/chemistry.js",
    "sourceHash": "433010aa32c0f92d51d6424faa294ed93fc31c04b17655dbc52f082b09bebb08",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sparks/decals",
    "path": "engine/reference/sim/particles/substances/materials/sparks/decals.md",
    "source": "engine/sim/particles/substances/materials/sparks/decals.js",
    "import": "/engine/sim/particles/substances/materials/sparks/decals.js",
    "sourceHash": "35fc167edf9e3b8fa4de0bbf6ac28dc83391c06688462d9c48f86eef8b3b917b",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sparks/emitter",
    "path": "engine/reference/sim/particles/substances/materials/sparks/emitter.md",
    "source": "engine/sim/particles/substances/materials/sparks/emitter.js",
    "import": "/engine/sim/particles/substances/materials/sparks/emitter.js",
    "sourceHash": "fe2c77feca636a4518f55ac7e8c34cda1bcdad4a122cf8d9a9893f78feba439e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sparks/identity",
    "path": "engine/reference/sim/particles/substances/materials/sparks/identity.md",
    "source": "engine/sim/particles/substances/materials/sparks/identity.js",
    "import": "/engine/sim/particles/substances/materials/sparks/identity.js",
    "sourceHash": "e290afa99344c23712503d5ddf32ea58be9b9c503179393050a1a7d7ab12ef1a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sparks/index",
    "path": "engine/reference/sim/particles/substances/materials/sparks/index.md",
    "source": "engine/sim/particles/substances/materials/sparks/index.js",
    "import": "/engine/sim/particles/substances/materials/sparks/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sparks/physics",
    "path": "engine/reference/sim/particles/substances/materials/sparks/physics.md",
    "source": "engine/sim/particles/substances/materials/sparks/physics.js",
    "import": "/engine/sim/particles/substances/materials/sparks/physics.js",
    "sourceHash": "2af754bc2c2091400b61a7b5e5134b415f89e4afab04b0bc35484d5e39df21c2",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sparks/reactions",
    "path": "engine/reference/sim/particles/substances/materials/sparks/reactions.md",
    "source": "engine/sim/particles/substances/materials/sparks/reactions.js",
    "import": "/engine/sim/particles/substances/materials/sparks/reactions.js",
    "sourceHash": "e3a67960385f8a045c61045b193f6905863701ffd737adbdc1976a16675388f4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sparks/spell",
    "path": "engine/reference/sim/particles/substances/materials/sparks/spell.md",
    "source": "engine/sim/particles/substances/materials/sparks/spell.js",
    "import": "/engine/sim/particles/substances/materials/sparks/spell.js",
    "sourceHash": "665a2713adbeba987b69f6b10b7ed3b7b268b14a3bfdf843afe65d59ea8ccf90",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sparks/sph",
    "path": "engine/reference/sim/particles/substances/materials/sparks/sph.md",
    "source": "engine/sim/particles/substances/materials/sparks/sph.js",
    "import": "/engine/sim/particles/substances/materials/sparks/sph.js",
    "sourceHash": "d01e0b897d6eea9d7191bd12b836303394fee3ec5b2bdd1c8fed01613e2cc56d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sparks/thermal",
    "path": "engine/reference/sim/particles/substances/materials/sparks/thermal.md",
    "source": "engine/sim/particles/substances/materials/sparks/thermal.js",
    "import": "/engine/sim/particles/substances/materials/sparks/thermal.js",
    "sourceHash": "1304be92ab86d682b1b04e83dcc1c2ceb68642d044736ccd732c304e2bd94920",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/sparks/visual",
    "path": "engine/reference/sim/particles/substances/materials/sparks/visual.md",
    "source": "engine/sim/particles/substances/materials/sparks/visual.js",
    "import": "/engine/sim/particles/substances/materials/sparks/visual.js",
    "sourceHash": "a52418de92fbe0a73d4b5919d86044b6fbda388a7c3051c2591b4f40ed5392b7",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/steam/audio",
    "path": "engine/reference/sim/particles/substances/materials/steam/audio.md",
    "source": "engine/sim/particles/substances/materials/steam/audio.js",
    "import": "/engine/sim/particles/substances/materials/steam/audio.js",
    "sourceHash": "fe1460b471cbea9b17432ab8b317909640d5de1971644915dfa4a562606219eb",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/steam/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/steam/chemistry.md",
    "source": "engine/sim/particles/substances/materials/steam/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/steam/chemistry.js",
    "sourceHash": "cc0bdc2d1d97712c71c31f40f48ff372d257f3ec5053f7b8333992d492773890",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/steam/decals",
    "path": "engine/reference/sim/particles/substances/materials/steam/decals.md",
    "source": "engine/sim/particles/substances/materials/steam/decals.js",
    "import": "/engine/sim/particles/substances/materials/steam/decals.js",
    "sourceHash": "f8f3f48dfe7c5594da75c7c8cfe5040f2acc90b0d218d3997f934cdbd5256572",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/steam/emitter",
    "path": "engine/reference/sim/particles/substances/materials/steam/emitter.md",
    "source": "engine/sim/particles/substances/materials/steam/emitter.js",
    "import": "/engine/sim/particles/substances/materials/steam/emitter.js",
    "sourceHash": "f6c5e488ae3ac0dbf8fac7c241c33bb7684861ffd49c570041a1dc37356ccad1",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/steam/identity",
    "path": "engine/reference/sim/particles/substances/materials/steam/identity.md",
    "source": "engine/sim/particles/substances/materials/steam/identity.js",
    "import": "/engine/sim/particles/substances/materials/steam/identity.js",
    "sourceHash": "e55a822f5ff16d90559c1a62ef4b3cc17544e8c89d9146e67625fcebfc6e9aad",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/steam/index",
    "path": "engine/reference/sim/particles/substances/materials/steam/index.md",
    "source": "engine/sim/particles/substances/materials/steam/index.js",
    "import": "/engine/sim/particles/substances/materials/steam/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/steam/physics",
    "path": "engine/reference/sim/particles/substances/materials/steam/physics.md",
    "source": "engine/sim/particles/substances/materials/steam/physics.js",
    "import": "/engine/sim/particles/substances/materials/steam/physics.js",
    "sourceHash": "fdebcdf9cd87c3ecf428e5ef4557b2945655d142dfc7567a613a68d7afa618c0",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/steam/reactions",
    "path": "engine/reference/sim/particles/substances/materials/steam/reactions.md",
    "source": "engine/sim/particles/substances/materials/steam/reactions.js",
    "import": "/engine/sim/particles/substances/materials/steam/reactions.js",
    "sourceHash": "79bf9a94807d40050ed9b98a0f17716f75eb496828d1a515f34c470df6308c58",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/steam/spell",
    "path": "engine/reference/sim/particles/substances/materials/steam/spell.md",
    "source": "engine/sim/particles/substances/materials/steam/spell.js",
    "import": "/engine/sim/particles/substances/materials/steam/spell.js",
    "sourceHash": "65838a79d099717aba0fd7f369442f8362e1eb790a4aee4047c48bcdd9baee3a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/steam/sph",
    "path": "engine/reference/sim/particles/substances/materials/steam/sph.md",
    "source": "engine/sim/particles/substances/materials/steam/sph.js",
    "import": "/engine/sim/particles/substances/materials/steam/sph.js",
    "sourceHash": "d01e0b897d6eea9d7191bd12b836303394fee3ec5b2bdd1c8fed01613e2cc56d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/steam/thermal",
    "path": "engine/reference/sim/particles/substances/materials/steam/thermal.md",
    "source": "engine/sim/particles/substances/materials/steam/thermal.js",
    "import": "/engine/sim/particles/substances/materials/steam/thermal.js",
    "sourceHash": "858f76917b47b3c0624bfe346fcd13a097647205a1b7dfdabfc681926d1c665f",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/steam/visual",
    "path": "engine/reference/sim/particles/substances/materials/steam/visual.md",
    "source": "engine/sim/particles/substances/materials/steam/visual.js",
    "import": "/engine/sim/particles/substances/materials/steam/visual.js",
    "sourceHash": "0e7f5e6b99fe861611acfff174fd745128098d0962a14060bd343aae7ee641fe",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/stone/audio",
    "path": "engine/reference/sim/particles/substances/materials/stone/audio.md",
    "source": "engine/sim/particles/substances/materials/stone/audio.js",
    "import": "/engine/sim/particles/substances/materials/stone/audio.js",
    "sourceHash": "13a21038180a55236eb3515a50adc9e3dbbdce72bb8d92c0ad1fc8da700224a3",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/stone/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/stone/chemistry.md",
    "source": "engine/sim/particles/substances/materials/stone/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/stone/chemistry.js",
    "sourceHash": "9ec1ec2e724dfb0a3449d160b55c828451f29d4376ce349050e4cc88ce7c6b54",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/stone/decals",
    "path": "engine/reference/sim/particles/substances/materials/stone/decals.md",
    "source": "engine/sim/particles/substances/materials/stone/decals.js",
    "import": "/engine/sim/particles/substances/materials/stone/decals.js",
    "sourceHash": "34d92b9fb1d37edf3c42d533535e77d8cdee2274ced6e0ff1a17e28923b90e25",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/stone/emitter",
    "path": "engine/reference/sim/particles/substances/materials/stone/emitter.md",
    "source": "engine/sim/particles/substances/materials/stone/emitter.js",
    "import": "/engine/sim/particles/substances/materials/stone/emitter.js",
    "sourceHash": "b44b4e264c374658f71d18cd9d359baee6a3c61f1355878ed72b267e6ece3436",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/stone/identity",
    "path": "engine/reference/sim/particles/substances/materials/stone/identity.md",
    "source": "engine/sim/particles/substances/materials/stone/identity.js",
    "import": "/engine/sim/particles/substances/materials/stone/identity.js",
    "sourceHash": "a3b9648e770428364c9a80b7ea3be5917fa8e2f59a99b66089a60e7ff2d95c7b",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/stone/index",
    "path": "engine/reference/sim/particles/substances/materials/stone/index.md",
    "source": "engine/sim/particles/substances/materials/stone/index.js",
    "import": "/engine/sim/particles/substances/materials/stone/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/stone/physics",
    "path": "engine/reference/sim/particles/substances/materials/stone/physics.md",
    "source": "engine/sim/particles/substances/materials/stone/physics.js",
    "import": "/engine/sim/particles/substances/materials/stone/physics.js",
    "sourceHash": "e98491edd414e29ac7da1bc3935aa136946009877a93f46b72800c84d346731b",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/stone/reactions",
    "path": "engine/reference/sim/particles/substances/materials/stone/reactions.md",
    "source": "engine/sim/particles/substances/materials/stone/reactions.js",
    "import": "/engine/sim/particles/substances/materials/stone/reactions.js",
    "sourceHash": "b79fb6f98f498b8ca9149efd302a8287c33174c4b7a36a141d4c17b88f16de02",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/stone/spell",
    "path": "engine/reference/sim/particles/substances/materials/stone/spell.md",
    "source": "engine/sim/particles/substances/materials/stone/spell.js",
    "import": "/engine/sim/particles/substances/materials/stone/spell.js",
    "sourceHash": "e284fb97686237ddf096c9aa225d6d976e7c58e4eb6d25e724d5aad00d99d62b",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/stone/sph",
    "path": "engine/reference/sim/particles/substances/materials/stone/sph.md",
    "source": "engine/sim/particles/substances/materials/stone/sph.js",
    "import": "/engine/sim/particles/substances/materials/stone/sph.js",
    "sourceHash": "9d758336deaf224f570ab529b726619bca146558c41e1e7405503d55f0a53452",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/stone/thermal",
    "path": "engine/reference/sim/particles/substances/materials/stone/thermal.md",
    "source": "engine/sim/particles/substances/materials/stone/thermal.js",
    "import": "/engine/sim/particles/substances/materials/stone/thermal.js",
    "sourceHash": "60bddfb22670d3c1527b7d4e58632c8a4e9dfa5469044b6f97e69972b86319af",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/stone/visual",
    "path": "engine/reference/sim/particles/substances/materials/stone/visual.md",
    "source": "engine/sim/particles/substances/materials/stone/visual.js",
    "import": "/engine/sim/particles/substances/materials/stone/visual.js",
    "sourceHash": "339081b6ae3b56935c77d1750789e2696f2994dd39e05de1e9cbe540318a99a7",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/water/audio",
    "path": "engine/reference/sim/particles/substances/materials/water/audio.md",
    "source": "engine/sim/particles/substances/materials/water/audio.js",
    "import": "/engine/sim/particles/substances/materials/water/audio.js",
    "sourceHash": "d26f3ebc6fa14b3f56e9dfb8d83d5039d5fca6c182f1e1405a8f3073c0c1aece",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/water/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/water/chemistry.md",
    "source": "engine/sim/particles/substances/materials/water/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/water/chemistry.js",
    "sourceHash": "cc0bdc2d1d97712c71c31f40f48ff372d257f3ec5053f7b8333992d492773890",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/water/decals",
    "path": "engine/reference/sim/particles/substances/materials/water/decals.md",
    "source": "engine/sim/particles/substances/materials/water/decals.js",
    "import": "/engine/sim/particles/substances/materials/water/decals.js",
    "sourceHash": "0538b9e3e82a5287ac44f2f96b9cce85908d1e5d973bd41d1d6355980c47100e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/water/emitter",
    "path": "engine/reference/sim/particles/substances/materials/water/emitter.md",
    "source": "engine/sim/particles/substances/materials/water/emitter.js",
    "import": "/engine/sim/particles/substances/materials/water/emitter.js",
    "sourceHash": "51ca05a89c831da0f0b7389901b671374388475bb22d1aa4620c63cba60e6f36",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/water/identity",
    "path": "engine/reference/sim/particles/substances/materials/water/identity.md",
    "source": "engine/sim/particles/substances/materials/water/identity.js",
    "import": "/engine/sim/particles/substances/materials/water/identity.js",
    "sourceHash": "e3dca444f99ddd49ee71c82a57f96b4d033b93978ebc4160cbd2b85ac58c4f89",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/water/index",
    "path": "engine/reference/sim/particles/substances/materials/water/index.md",
    "source": "engine/sim/particles/substances/materials/water/index.js",
    "import": "/engine/sim/particles/substances/materials/water/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/water/physics",
    "path": "engine/reference/sim/particles/substances/materials/water/physics.md",
    "source": "engine/sim/particles/substances/materials/water/physics.js",
    "import": "/engine/sim/particles/substances/materials/water/physics.js",
    "sourceHash": "8174b1a302d4ca010c13cb336f29271e8077a4f668ffc49d3012cc7545da7a3b",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/water/reactions",
    "path": "engine/reference/sim/particles/substances/materials/water/reactions.md",
    "source": "engine/sim/particles/substances/materials/water/reactions.js",
    "import": "/engine/sim/particles/substances/materials/water/reactions.js",
    "sourceHash": "05ceaa994fc260e0c17ebcfac8e650a9d2ffdb9a69fc985d253952f065d55450",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/water/spell",
    "path": "engine/reference/sim/particles/substances/materials/water/spell.md",
    "source": "engine/sim/particles/substances/materials/water/spell.js",
    "import": "/engine/sim/particles/substances/materials/water/spell.js",
    "sourceHash": "09ca75f97be7c97fda27748f9c0041eafc9e3e2b70002718f7ee7c28fd20fc14",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/water/sph",
    "path": "engine/reference/sim/particles/substances/materials/water/sph.md",
    "source": "engine/sim/particles/substances/materials/water/sph.js",
    "import": "/engine/sim/particles/substances/materials/water/sph.js",
    "sourceHash": "dcef15a8db414311379ab6c7ee47a7d74adda427a1043a3d137643588ec3817b",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/water/thermal",
    "path": "engine/reference/sim/particles/substances/materials/water/thermal.md",
    "source": "engine/sim/particles/substances/materials/water/thermal.js",
    "import": "/engine/sim/particles/substances/materials/water/thermal.js",
    "sourceHash": "7868bc2656836e88a2ff90c2b8545ee03ef56c606ec6107585259572851d4749",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/water/visual",
    "path": "engine/reference/sim/particles/substances/materials/water/visual.md",
    "source": "engine/sim/particles/substances/materials/water/visual.js",
    "import": "/engine/sim/particles/substances/materials/water/visual.js",
    "sourceHash": "39eacd4baf16d2d254b4ccf0fe95203711244bb85d5f2cd48b6d9817054088a4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wax/audio",
    "path": "engine/reference/sim/particles/substances/materials/wax/audio.md",
    "source": "engine/sim/particles/substances/materials/wax/audio.js",
    "import": "/engine/sim/particles/substances/materials/wax/audio.js",
    "sourceHash": "48c8450e7873287843b4477815f39ba16444189773e4401e2da2535aa3a3b412",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wax/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/wax/chemistry.md",
    "source": "engine/sim/particles/substances/materials/wax/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/wax/chemistry.js",
    "sourceHash": "413ba9c326c5b632af5c70408bac1bd5ac91071d9469f6121b77caebdbd282b4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wax/decals",
    "path": "engine/reference/sim/particles/substances/materials/wax/decals.md",
    "source": "engine/sim/particles/substances/materials/wax/decals.js",
    "import": "/engine/sim/particles/substances/materials/wax/decals.js",
    "sourceHash": "0cd79c91fe84e787d122c551df48ee40a8f2a788dccf9f9738568ebdd0671d01",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wax/emitter",
    "path": "engine/reference/sim/particles/substances/materials/wax/emitter.md",
    "source": "engine/sim/particles/substances/materials/wax/emitter.js",
    "import": "/engine/sim/particles/substances/materials/wax/emitter.js",
    "sourceHash": "58bfbdd7b520b4b86249326f55bb7f297e82d8ceb81cc6ec764447eaab9b6ba5",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wax/identity",
    "path": "engine/reference/sim/particles/substances/materials/wax/identity.md",
    "source": "engine/sim/particles/substances/materials/wax/identity.js",
    "import": "/engine/sim/particles/substances/materials/wax/identity.js",
    "sourceHash": "d553b0a3dfef8fbf1eaff305ed295bf3826ec336cc9fe7de4e18e70dca732b60",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wax/index",
    "path": "engine/reference/sim/particles/substances/materials/wax/index.md",
    "source": "engine/sim/particles/substances/materials/wax/index.js",
    "import": "/engine/sim/particles/substances/materials/wax/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wax/physics",
    "path": "engine/reference/sim/particles/substances/materials/wax/physics.md",
    "source": "engine/sim/particles/substances/materials/wax/physics.js",
    "import": "/engine/sim/particles/substances/materials/wax/physics.js",
    "sourceHash": "525a09b646a3fe6f85e37682cb1d64d274860c1360a2db2d72441d8365439ab1",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wax/reactions",
    "path": "engine/reference/sim/particles/substances/materials/wax/reactions.md",
    "source": "engine/sim/particles/substances/materials/wax/reactions.js",
    "import": "/engine/sim/particles/substances/materials/wax/reactions.js",
    "sourceHash": "c07a32932408c241d860d6aab5b3c980ef5920d30de30658daee27e1a4302dbc",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wax/spell",
    "path": "engine/reference/sim/particles/substances/materials/wax/spell.md",
    "source": "engine/sim/particles/substances/materials/wax/spell.js",
    "import": "/engine/sim/particles/substances/materials/wax/spell.js",
    "sourceHash": "a0a50c83fea6e8fe0a307966d9b195ffbd13c10a0dca94ac1aa368a1ba69bf11",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wax/sph",
    "path": "engine/reference/sim/particles/substances/materials/wax/sph.md",
    "source": "engine/sim/particles/substances/materials/wax/sph.js",
    "import": "/engine/sim/particles/substances/materials/wax/sph.js",
    "sourceHash": "cabf8105eeb23c7f6a9493a68485a43848eafabe6c6e8ee41d4e941f7c0b923c",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wax/thermal",
    "path": "engine/reference/sim/particles/substances/materials/wax/thermal.md",
    "source": "engine/sim/particles/substances/materials/wax/thermal.js",
    "import": "/engine/sim/particles/substances/materials/wax/thermal.js",
    "sourceHash": "2b2ad3dc7f16ba9e0880f51f36fc7290375f4d5e1755e183c26804a860c8c39a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wax/visual",
    "path": "engine/reference/sim/particles/substances/materials/wax/visual.md",
    "source": "engine/sim/particles/substances/materials/wax/visual.js",
    "import": "/engine/sim/particles/substances/materials/wax/visual.js",
    "sourceHash": "5e70a160f17530606a405f90ada19075ba8e8f15cc607d9b53017d88b453e412",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wood/audio",
    "path": "engine/reference/sim/particles/substances/materials/wood/audio.md",
    "source": "engine/sim/particles/substances/materials/wood/audio.js",
    "import": "/engine/sim/particles/substances/materials/wood/audio.js",
    "sourceHash": "9dbd99b9d422d30df4d70af7760882cb475baf3138dbf8fac1bea6678258f16a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wood/chemistry",
    "path": "engine/reference/sim/particles/substances/materials/wood/chemistry.md",
    "source": "engine/sim/particles/substances/materials/wood/chemistry.js",
    "import": "/engine/sim/particles/substances/materials/wood/chemistry.js",
    "sourceHash": "413ba9c326c5b632af5c70408bac1bd5ac91071d9469f6121b77caebdbd282b4",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wood/decals",
    "path": "engine/reference/sim/particles/substances/materials/wood/decals.md",
    "source": "engine/sim/particles/substances/materials/wood/decals.js",
    "import": "/engine/sim/particles/substances/materials/wood/decals.js",
    "sourceHash": "d9aeae455817d3655ae1873e5f68fe656d670d215b7eda84842e758e8269a2a9",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wood/emitter",
    "path": "engine/reference/sim/particles/substances/materials/wood/emitter.md",
    "source": "engine/sim/particles/substances/materials/wood/emitter.js",
    "import": "/engine/sim/particles/substances/materials/wood/emitter.js",
    "sourceHash": "da295741b45276a4b8f584831fd4b1eec9a17f9b49690b68423cacab60b67791",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wood/identity",
    "path": "engine/reference/sim/particles/substances/materials/wood/identity.md",
    "source": "engine/sim/particles/substances/materials/wood/identity.js",
    "import": "/engine/sim/particles/substances/materials/wood/identity.js",
    "sourceHash": "f03767f97810dd1aae4487477d0253027c0e959d723339dd8da85c3b6353fedf",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wood/index",
    "path": "engine/reference/sim/particles/substances/materials/wood/index.md",
    "source": "engine/sim/particles/substances/materials/wood/index.js",
    "import": "/engine/sim/particles/substances/materials/wood/index.js",
    "sourceHash": "11f7e1b13b541a1b143f598b4f5b2022bce4624c4128dd292354a7ae5ab9735e",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wood/physics",
    "path": "engine/reference/sim/particles/substances/materials/wood/physics.md",
    "source": "engine/sim/particles/substances/materials/wood/physics.js",
    "import": "/engine/sim/particles/substances/materials/wood/physics.js",
    "sourceHash": "b42652b7ea4731ebeb321ca2c0ce8605e9d82401b466557d037bf9cc0028bcd7",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wood/reactions",
    "path": "engine/reference/sim/particles/substances/materials/wood/reactions.md",
    "source": "engine/sim/particles/substances/materials/wood/reactions.js",
    "import": "/engine/sim/particles/substances/materials/wood/reactions.js",
    "sourceHash": "2a0d646fdf00ea353a9ee34fc98850d76e5cae29354c505da145b22e64493fe0",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wood/spell",
    "path": "engine/reference/sim/particles/substances/materials/wood/spell.md",
    "source": "engine/sim/particles/substances/materials/wood/spell.js",
    "import": "/engine/sim/particles/substances/materials/wood/spell.js",
    "sourceHash": "5a3da0bf2092de6b056b05d99e067cedbf4b413c78a7363fcc1a321ffefeba55",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wood/sph",
    "path": "engine/reference/sim/particles/substances/materials/wood/sph.md",
    "source": "engine/sim/particles/substances/materials/wood/sph.js",
    "import": "/engine/sim/particles/substances/materials/wood/sph.js",
    "sourceHash": "d01e0b897d6eea9d7191bd12b836303394fee3ec5b2bdd1c8fed01613e2cc56d",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wood/thermal",
    "path": "engine/reference/sim/particles/substances/materials/wood/thermal.md",
    "source": "engine/sim/particles/substances/materials/wood/thermal.js",
    "import": "/engine/sim/particles/substances/materials/wood/thermal.js",
    "sourceHash": "1bde9448d52207715b57d46caf5670c690e8dd0829e8962f661437019b7073a9",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/substances/materials/wood/visual",
    "path": "engine/reference/sim/particles/substances/materials/wood/visual.md",
    "source": "engine/sim/particles/substances/materials/wood/visual.js",
    "import": "/engine/sim/particles/substances/materials/wood/visual.js",
    "sourceHash": "96f27fff1aa28b668e7526e26195df97818be209cc04671b1fd5e0957ea684c0",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/particles/thermal/index",
    "path": "engine/reference/sim/particles/thermal/index.md",
    "source": "engine/sim/particles/thermal/index.js",
    "import": "/engine/sim/particles/thermal/index.js",
    "sourceHash": "e5a61b0e7abcb90e1c8d58513a729d6561b590640b0b820ddd416f588e7c394e",
    "summary": "thermal/index.js — Re-exports for heat, phase transitions, and chemistry.",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/ConnectivityCompute",
    "path": "engine/reference/sim/physics/ConnectivityCompute.md",
    "source": "engine/sim/physics/ConnectivityCompute.js",
    "import": "/engine/sim/physics/ConnectivityCompute.js",
    "sourceHash": "014bfd2481478190885f6809df41d1d31f1b9cd85d0b56d146d2e4c4715b0a4a",
    "summary": "ConnectivityCompute.js - GPU-Accelerated Voxel Connectivity Analysis Problem: When voxels are destroyed, we need to detect which parts are still connected to anchors (ground) vs floating (should fall). CPU flood-fill is O(n) and too slow for real-time destruction. Solution: GPU wave propagation using ping-pong buffers. Each iteration, voxels adopt the minimum component ID of their neighbors. After log(n) iterations, all connected voxels share the same ID. Algorithm: 1. Initialize: Each solid voxel gets unique ID, anchors get ID=1 2. Propagate: Each voxel takes min(self, neighbors) if solid 3. Repeat until no changes (typically 10-20 iterations for 32³) 4. Result: All voxels connected to anchors have ID=1, others form islands Performance Target: <1ms for 32³ chunk (10-20 iterations)",
    "exports": [
      {
        "name": "ConnectivityCompute",
        "kind": "class",
        "signature": "class ConnectivityCompute",
        "summary": ""
      },
      {
        "name": "indexTo3D",
        "kind": "function",
        "signature": "indexTo3D(idx, size)",
        "summary": "Convert 1D index to 3D position"
      },
      {
        "name": "positionToIndex",
        "kind": "function",
        "signature": "positionToIndex(x, y, z, size)",
        "summary": "Convert 3D position to 1D index"
      },
      {
        "name": "MAX_ITERATIONS",
        "kind": "constant",
        "signature": "MAX_ITERATIONS",
        "summary": "Maximum iterations before forcing stop (prevents infinite loops)"
      },
      {
        "name": "WORKGROUP_SIZE",
        "kind": "constant",
        "signature": "WORKGROUP_SIZE",
        "summary": "Workgroup size for compute shaders"
      },
      {
        "name": "ANCHOR_COMPONENT_ID",
        "kind": "constant",
        "signature": "ANCHOR_COMPONENT_ID",
        "summary": "Component ID for anchored voxels (ground, supports)"
      },
      {
        "name": "EMPTY_COMPONENT_ID",
        "kind": "constant",
        "signature": "EMPTY_COMPONENT_ID",
        "summary": "Component ID for empty/air voxels"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/ConvexDecomposition",
    "path": "engine/reference/sim/physics/ConvexDecomposition.md",
    "source": "engine/sim/physics/ConvexDecomposition.js",
    "import": "/engine/sim/physics/ConvexDecomposition.js",
    "sourceHash": "ff54f4f794001bc44949754b575d5b6c82e4a9f09840f11243f0fa34476e3995",
    "summary": "ConvexDecomposition.js - V-HACD Style Convex Decomposition Implements Volumetric Hierarchical Approximate Convex Decomposition (V-HACD) for breaking concave meshes into convex pieces suitable for physics collision. This is essential for: - Complex mesh colliders (characters, vehicles, props) - Hollow objects (cups, bowls, tubes) - Concave terrain features The algorithm: 1. Voxelize the mesh at a given resolution 2. Recursively split voxel regions using optimal cutting planes 3. Compute convex hulls for each region 4. Simplify hulls to reduce vertex count",
    "exports": [
      {
        "name": "voxelizeMesh",
        "kind": "function",
        "signature": "voxelizeMesh(vertices, indices, resolution = 64)",
        "summary": "Voxelize a mesh into a 3D grid"
      },
      {
        "name": "decomposeMesh",
        "kind": "function",
        "signature": "decomposeMesh(vertices, indices, options = {})",
        "summary": "Decompose a mesh into convex hulls"
      },
      {
        "name": "hullsToCompoundCollider",
        "kind": "function",
        "signature": "hullsToCompoundCollider(hulls)",
        "summary": "Convert decomposition result to PhysX compound collider format"
      },
      {
        "name": "createDecomposedCollider",
        "kind": "function",
        "signature": "createDecomposedCollider(vertices, indices, options = {})",
        "summary": "High-level function: Decompose mesh and create PhysX collider"
      },
      {
        "name": "DECOMPOSITION_DEFAULTS",
        "kind": "constant",
        "signature": "DECOMPOSITION_DEFAULTS",
        "summary": "Default decomposition parameters"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/DynamicMeshCollider",
    "path": "engine/reference/sim/physics/DynamicMeshCollider.md",
    "source": "engine/sim/physics/DynamicMeshCollider.js",
    "import": "/engine/sim/physics/DynamicMeshCollider.js",
    "sourceHash": "0e373c43c972d51ffbd7057d2b90a7345ab105af13c617a6764e9fcaa2a5151f",
    "summary": "",
    "exports": [
      {
        "name": "cookMeshColliderFromVertices",
        "kind": "function",
        "signature": "cookMeshColliderFromVertices(world, meshId, positions)",
        "summary": ""
      },
      {
        "name": "cookMeshColliderFromRenderMesh",
        "kind": "function",
        "signature": "cookMeshColliderFromRenderMesh(world, renderMesh)",
        "summary": ""
      },
      {
        "name": "getColliderConfigForMesh",
        "kind": "function",
        "signature": "getColliderConfigForMesh(meshId, halfExtents = [0.5, 0.5, 0.5])",
        "summary": ""
      },
      {
        "name": "createUniversalCollider",
        "kind": "function",
        "signature": "createUniversalCollider(world, meshType, geometryFn, halfExtents = [0.5, 0.5, 0.5], material = null, density = 1.0)",
        "summary": ""
      },
      {
        "name": "clearMeshColliderCache",
        "kind": "function",
        "signature": "clearMeshColliderCache()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/FragmentPhysics",
    "path": "engine/reference/sim/physics/FragmentPhysics.md",
    "source": "engine/sim/physics/FragmentPhysics.js",
    "import": "/engine/sim/physics/FragmentPhysics.js",
    "sourceHash": "4a20e15be985dbacf32972f3b0537a167bb5c51486430d2a47f98108f30bbc0d",
    "summary": "FragmentPhysics.js - Physics Integration for Mesh Fragments Handles physics simulation for fracture fragments using PhysX. Features: - Convex hull generation for rigid body collision - Mass distribution based on volume/material - Structural connection graph for progressive collapse - Fragment → particle conversion for small pieces",
    "exports": [
      {
        "name": "StructuralConnection",
        "kind": "class",
        "signature": "class StructuralConnection",
        "summary": "Represents a connection between two fragments"
      },
      {
        "name": "PhysicsFragment",
        "kind": "class",
        "signature": "class PhysicsFragment",
        "summary": "A mesh fragment with physics properties"
      },
      {
        "name": "FragmentManager",
        "kind": "class",
        "signature": "class FragmentManager",
        "summary": "Manages all physics fragments in the world"
      },
      {
        "name": "meshFragmentToIndexedMesh",
        "kind": "function",
        "signature": "meshFragmentToIndexedMesh(meshFragment, options = null)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/GPUArticulationSolver",
    "path": "engine/reference/sim/physics/GPUArticulationSolver.md",
    "source": "engine/sim/physics/GPUArticulationSolver.js",
    "import": "/engine/sim/physics/GPUArticulationSolver.js",
    "sourceHash": "72824a10a19a7714a9ddb7b374a86f492e716a4d3a390f9b3a20c8902318adfd",
    "summary": "GPUArticulationSolver.js - WebGPU Articulation Physics GPU-based articulation solver using vGPU compute shaders. Replaces PhysX WASM articulation with pure WebGPU implementation. Based on: - Stable Cosserat Rods (SIGGRAPH 2025) - Split position/rotation optimization - Direct PBD Solver for Stiff Rods (Bender et al. 2018) - XPBD compliance for stable stiffness Key Features: - Parallel Jacobi solver for position constraints - Quaternion orientation updates for twist - Graph coloring for dependency-free parallel solving - Warm starting for faster convergence",
    "exports": [
      {
        "name": "GPUArticulationSolver",
        "kind": "class",
        "signature": "class GPUArticulationSolver",
        "summary": ""
      },
      {
        "name": "getGPUArticulationSolver",
        "kind": "function",
        "signature": "async getGPUArticulationSolver(device)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/GPUClothSolver",
    "path": "engine/reference/sim/physics/GPUClothSolver.md",
    "source": "engine/sim/physics/GPUClothSolver.js",
    "import": "/engine/sim/physics/GPUClothSolver.js",
    "sourceHash": "40826ed9f13832484d4baa1d4e5a40d40f915c1ceceb2f36086902f526a0c63b",
    "summary": "GPU Cloth Physics Solver Position-based dynamics (PBD) solver running entirely on GPU Handles cloth, ropes, soft bodies with collision detection **Small Substeps Approach (Miles Macklin, NVIDIA 2019):** Uses 8 substeps with 1 iteration each for better stability than 1 substep with 8 iterations. This is especially important for stiff constraints like ropes and tightly-woven cloth. **OGC Contact Model (Chen et al., SIGGRAPH 2025):** Uses Offset Geometric Contact for penetration-free simulation. Barrier energy prevents penetration before it occurs, with orthogonal contact forces along face normals.",
    "exports": [
      {
        "name": "GPUClothSolver",
        "kind": "class",
        "signature": "class GPUClothSolver",
        "summary": ""
      },
      {
        "name": "GPU_CLOTH_DEFAULT_SUBSTEPS",
        "kind": "constant",
        "signature": "GPU_CLOTH_DEFAULT_SUBSTEPS",
        "summary": "Default substeps (small substeps approach)"
      },
      {
        "name": "GPU_CLOTH_DEFAULT_ITERATIONS",
        "kind": "constant",
        "signature": "GPU_CLOTH_DEFAULT_ITERATIONS",
        "summary": "Default iterations per substep"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/GPUSpatialHash",
    "path": "engine/reference/sim/physics/GPUSpatialHash.md",
    "source": "engine/sim/physics/GPUSpatialHash.js",
    "import": "/engine/sim/physics/GPUSpatialHash.js",
    "sourceHash": "4f52be6837ec6fc9c04d0a3d29d4ac58de278558721f8404bcfecb70c61e3c04",
    "summary": "CPU-based spatial hash grid for physics broad-phase",
    "exports": [
      {
        "name": "SpatialHashGrid",
        "kind": "class",
        "signature": "class SpatialHashGrid",
        "summary": "CPU-based spatial hash grid for physics broad-phase"
      },
      {
        "name": "GPUSpatialHashGrid",
        "kind": "class",
        "signature": "class GPUSpatialHashGrid",
        "summary": "GPU-accelerated spatial hash grid using WebGPU compute shaders"
      },
      {
        "name": "morton3D",
        "kind": "function",
        "signature": "morton3D(x, y, z)",
        "summary": "Calculate Morton code for 3D position"
      },
      {
        "name": "hashCell",
        "kind": "function",
        "signature": "hashCell(x, y, z, tableSize)",
        "summary": "Simple hash function for cell coordinates"
      },
      {
        "name": "createSpatialHashFromVGPU",
        "kind": "function",
        "signature": "async createSpatialHashFromVGPU(vgpu, options = {})",
        "summary": "Factory function to create GPUSpatialHashGrid from VirtualGPU"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/MLSMPMSolver",
    "path": "engine/reference/sim/physics/MLSMPMSolver.md",
    "source": "engine/sim/physics/MLSMPMSolver.js",
    "import": "/engine/sim/physics/MLSMPMSolver.js",
    "sourceHash": "bc98122123ecde5c1dec5e2d47501649a6b6eaf43091e4e6251af117b2ab051b",
    "summary": "MLSMPMSolver.js - Moving Least Squares Material Point Method Hybrid Lagrangian-Eulerian simulation for: - Soft body deformation (jelly, flesh) - Fracturing materials (snow, sand) - Fluid-solid interaction - Large deformation scenarios Algorithm Overview: 1. P2G (Particle to Grid): Transfer mass/momentum using quadratic B-splines 2. Grid Update: Apply forces, boundaries, compute velocities 3. G2P (Grid to Particle): Gather velocity, update deformation gradient 4. Advection: Move particles Key Features: - Fixed-point atomics for P2G scatter (WebGPU has no f32 atomics) - SoA (Structure of Arrays) for GPU coalescing - Multiple constitutive models (Neo-Hookean, Fixed Corotated, Snow) Performance Target: 100k particles < 10ms",
    "exports": [
      {
        "name": "MPMParticle",
        "kind": "class",
        "signature": "class MPMParticle",
        "summary": ""
      },
      {
        "name": "GridCell",
        "kind": "class",
        "signature": "class GridCell",
        "summary": ""
      },
      {
        "name": "MLSMPMSolver",
        "kind": "class",
        "signature": "class MLSMPMSolver",
        "summary": ""
      },
      {
        "name": "quadraticBSpline",
        "kind": "function",
        "signature": "quadraticBSpline(x)",
        "summary": "Quadratic B-spline weight"
      },
      {
        "name": "quadraticBSplineGrad",
        "kind": "function",
        "signature": "quadraticBSplineGrad(x)",
        "summary": "Quadratic B-spline derivative"
      },
      {
        "name": "computeWeight",
        "kind": "function",
        "signature": "computeWeight(px, py, pz, gx, gy, gz, cellSize = 1.0)",
        "summary": "Compute 3D weight and gradient for a particle-grid pair"
      },
      {
        "name": "CELL_SIZE",
        "kind": "constant",
        "signature": "CELL_SIZE",
        "summary": "Grid cell size (1 unit typical)"
      },
      {
        "name": "DEFAULT_GRID_SIZE",
        "kind": "constant",
        "signature": "DEFAULT_GRID_SIZE",
        "summary": "Default grid dimensions"
      },
      {
        "name": "SPLINE_RADIUS",
        "kind": "constant",
        "signature": "SPLINE_RADIUS",
        "summary": "Quadratic B-spline support radius (3 cells)"
      },
      {
        "name": "ConstitutiveModel",
        "kind": "constant",
        "signature": "ConstitutiveModel",
        "summary": "Constitutive model types"
      },
      {
        "name": "MaterialPresets",
        "kind": "constant",
        "signature": "MaterialPresets",
        "summary": "Material presets"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/MeshCutter",
    "path": "engine/reference/sim/physics/MeshCutter.md",
    "source": "engine/sim/physics/MeshCutter.js",
    "import": "/engine/sim/physics/MeshCutter.js",
    "sourceHash": "4e675a28f966c228005ecc56e127d4aa959806dc840fac8bce7792234f861064",
    "summary": "MeshCutter.js - Mesh Cutting and Fragment Generation System Cuts meshes along Voronoi cell boundaries to create realistic fragments. Uses plane-triangle intersection to split geometry. Features: - Triangle classification (front/back/spanning) - Edge-plane intersection computation - Cap geometry generation for cut faces - UV coordinate preservation - Convex hull generation for PhysX",
    "exports": [
      {
        "name": "Plane",
        "kind": "class",
        "signature": "class Plane",
        "summary": ""
      },
      {
        "name": "Vertex",
        "kind": "class",
        "signature": "class Vertex",
        "summary": ""
      },
      {
        "name": "Triangle",
        "kind": "class",
        "signature": "class Triangle",
        "summary": ""
      },
      {
        "name": "MeshFragment",
        "kind": "class",
        "signature": "class MeshFragment",
        "summary": ""
      },
      {
        "name": "MeshCutter",
        "kind": "class",
        "signature": "class MeshCutter",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/MeshDecimation",
    "path": "engine/reference/sim/physics/MeshDecimation.md",
    "source": "engine/sim/physics/MeshDecimation.js",
    "import": "/engine/sim/physics/MeshDecimation.js",
    "sourceHash": "e5e606d35b579c254a29b39f96bffe783f28e9bff6a191ebb1eaa88451c6681a",
    "summary": "MeshDecimation.js - Mesh Simplification for Debris Reduces triangle count for debris meshes to maintain performance. Two algorithms available: 1. Grid-Based (Fast): O(n) - Good for realtime debris - Snap vertices to grid - Merge coincident vertices - Remove degenerate triangles 2. QEM (Quality): O(n log n) - Better for LOD generation - Quadric Error Metrics - Edge collapse with priority queue - Preserves shape better Performance Targets: - Grid: 10k verts → 500 verts in <1ms - QEM: 10k verts → 500 verts in <50ms",
    "exports": [
      {
        "name": "Vertex",
        "kind": "class",
        "signature": "class Vertex",
        "summary": ""
      },
      {
        "name": "Triangle",
        "kind": "class",
        "signature": "class Triangle",
        "summary": ""
      },
      {
        "name": "Quadric",
        "kind": "class",
        "signature": "class Quadric",
        "summary": ""
      },
      {
        "name": "Edge",
        "kind": "class",
        "signature": "class Edge",
        "summary": ""
      },
      {
        "name": "MeshDecimator",
        "kind": "class",
        "signature": "class MeshDecimator",
        "summary": ""
      },
      {
        "name": "decimateGrid",
        "kind": "function",
        "signature": "decimateGrid(vertices, indices, gridSize = DEFAULT_GRID_SIZE)",
        "summary": "Fast grid-based mesh decimation"
      },
      {
        "name": "decimateQEM",
        "kind": "function",
        "signature": "decimateQEM(vertices, indices, targetRatio = DEFAULT_TARGET_RATIO, maxIterations = Infinity, options = null)",
        "summary": "QEM-based mesh decimation"
      },
      {
        "name": "DEFAULT_GRID_SIZE",
        "kind": "constant",
        "signature": "DEFAULT_GRID_SIZE",
        "summary": "Default grid cell size for grid-based decimation"
      },
      {
        "name": "DEFAULT_TARGET_RATIO",
        "kind": "constant",
        "signature": "DEFAULT_TARGET_RATIO",
        "summary": "Default target reduction ratio"
      },
      {
        "name": "MAX_QEM_ITERATIONS",
        "kind": "constant",
        "signature": "MAX_QEM_ITERATIONS",
        "summary": "Maximum QEM iterations per frame (for realtime)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/MeshParticles",
    "path": "engine/reference/sim/physics/MeshParticles.md",
    "source": "engine/sim/physics/MeshParticles.js",
    "import": "/engine/sim/physics/MeshParticles.js",
    "sourceHash": "bd29ab33642fda207238bb165b4bfa168468c2b280e2cc2d451cafbe42ba88b8",
    "summary": "Single debris chunk with mesh, physics, and rendering state",
    "exports": [
      {
        "name": "DebrisParticle",
        "kind": "class",
        "signature": "class DebrisParticle",
        "summary": "Single debris chunk with mesh, physics, and rendering state"
      },
      {
        "name": "MeshParticleSystem",
        "kind": "class",
        "signature": "class MeshParticleSystem",
        "summary": ""
      },
      {
        "name": "MAX_DEBRIS_PARTICLES",
        "kind": "constant",
        "signature": "MAX_DEBRIS_PARTICLES",
        "summary": "Maximum active debris particles"
      },
      {
        "name": "LOD_DISTANCES",
        "kind": "constant",
        "signature": "LOD_DISTANCES",
        "summary": "LOD distance thresholds"
      },
      {
        "name": "LOD_RATIOS",
        "kind": "constant",
        "signature": "LOD_RATIOS",
        "summary": "LOD decimation ratios"
      },
      {
        "name": "MIN_CLUSTER_SIZE",
        "kind": "constant",
        "signature": "MIN_CLUSTER_SIZE",
        "summary": "Minimum voxels to create debris (smaller clusters become particles)"
      },
      {
        "name": "MAX_CLUSTER_SIZE",
        "kind": "constant",
        "signature": "MAX_CLUSTER_SIZE",
        "summary": "Maximum voxels per debris chunk"
      },
      {
        "name": "DEFAULT_LIFETIME",
        "kind": "constant",
        "signature": "DEFAULT_LIFETIME",
        "summary": "Debris lifetime in seconds"
      },
      {
        "name": "DebrisState",
        "kind": "constant",
        "signature": "DebrisState",
        "summary": "Debris states"
      },
      {
        "name": "MeshParticles",
        "kind": "re-export",
        "signature": "MeshParticles",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/OGCContact",
    "path": "engine/reference/sim/physics/OGCContact.md",
    "source": "engine/sim/physics/OGCContact.js",
    "import": "/engine/sim/physics/OGCContact.js",
    "sourceHash": "199843b33037aa766ffb4d8750ad2a433b53ef85c75b079f15c97a3b9255fcc8",
    "summary": "OGCContact.js - Offset Geometric Contact Model Implementation of the SIGGRAPH 2025 paper: \"Offset Geometric Contact for Real-Time Simulation\" Chen et al., 2025 Key features: - Guaranteed penetration-free simulation - Orthogonal contact forces (along face normals, not radial) - Large contact radius support (2-5mm without artifacts) - No CCD required - uses conservative displacement bounds - GPU-efficient parallel local operations The offset geometry approach inflates primitives by a contact radius, computes distance to the offset surface, and applies smooth barrier energy that activates before penetration occurs.",
    "exports": [
      {
        "name": "OGCContactManager",
        "kind": "class",
        "signature": "class OGCContactManager",
        "summary": "Manages OGC contacts for a simulation"
      },
      {
        "name": "barrierEnergy",
        "kind": "function",
        "signature": "barrierEnergy(d, r)",
        "summary": "OGC Barrier energy function g(d) = d²(2r - d)² Smooth C1 continuous, zero at d=0 and d=2r Maximum at d=r"
      },
      {
        "name": "barrierForce",
        "kind": "function",
        "signature": "barrierForce(d, r)",
        "summary": "Derivative of barrier energy: g'(d) = 2d(2r-d)(2r-2d) Used for force computation"
      },
      {
        "name": "normalizedBarrierEnergy",
        "kind": "function",
        "signature": "normalizedBarrierEnergy(d, r)",
        "summary": "Normalized barrier energy for stability Scales to [0, 1] range with maximum at d=r"
      },
      {
        "name": "conservativeDisplacementBound",
        "kind": "function",
        "signature": "conservativeDisplacementBound(currentDistance, contactRadius)",
        "summary": "Compute conservative displacement bound for a vertex This is the maximum safe movement before barrier check is needed"
      },
      {
        "name": "distanceToOffsetSphere",
        "kind": "function",
        "signature": "distanceToOffsetSphere(p, center, radius, r)",
        "summary": "Distance from point to offset sphere (sphere with radius inflated by r)"
      },
      {
        "name": "distanceToOffsetPlane",
        "kind": "function",
        "signature": "distanceToOffsetPlane(p, planePoint, planeNormal, r)",
        "summary": "Distance from point to offset plane (plane pushed by r along normal)"
      },
      {
        "name": "distanceToOffsetCapsule",
        "kind": "function",
        "signature": "distanceToOffsetCapsule(p, a, b, radius, r)",
        "summary": "Distance from point to offset capsule"
      },
      {
        "name": "distanceToOffsetBox",
        "kind": "function",
        "signature": "distanceToOffsetBox(p, center, halfExtents, rotation, r)",
        "summary": "Distance from point to offset box (OBB with offset shell) Handles rotated boxes by transforming into local space."
      },
      {
        "name": "evaluateAnalyticSDF",
        "kind": "function",
        "signature": "evaluateAnalyticSDF(shape, params, lx, ly, lz)",
        "summary": "Evaluate an analytic SDF in local space (no transform — caller handles that)."
      },
      {
        "name": "distanceToOffsetEdge",
        "kind": "function",
        "signature": "distanceToOffsetEdge(p, a, b, r)",
        "summary": "Distance from point to offset edge (line segment with offset radius)"
      },
      {
        "name": "distanceToOffsetTriangle",
        "kind": "function",
        "signature": "distanceToOffsetTriangle(p, v0, v1, v2, r)",
        "summary": "Distance from point to offset triangle (triangle with offset shell) Uses the face normal for orthogonal contact"
      },
      {
        "name": "applyOGCForce",
        "kind": "function",
        "signature": "applyOGCForce(particle, distance, normal, contactRadius, stiffness, dt)",
        "summary": "Apply OGC barrier force to a particle"
      },
      {
        "name": "applyOGCPositionCorrection",
        "kind": "function",
        "signature": "applyOGCPositionCorrection(particle, distance, normal, contactRadius, compliance, dt)",
        "summary": "Apply OGC position correction (for PBD-style solvers)"
      },
      {
        "name": "DEFAULT_CONTACT_RADIUS",
        "kind": "constant",
        "signature": "DEFAULT_CONTACT_RADIUS",
        "summary": "Default contact radius (meters) - paper recommends 2-5mm for cloth"
      },
      {
        "name": "BARRIER_ACTIVATION_RATIO",
        "kind": "constant",
        "signature": "BARRIER_ACTIVATION_RATIO",
        "summary": "Barrier energy activation distance (multiple of contact radius)"
      },
      {
        "name": "MIN_DISTANCE",
        "kind": "constant",
        "signature": "MIN_DISTANCE",
        "summary": "Minimum distance to prevent numerical issues"
      },
      {
        "name": "FIXED_SCALE",
        "kind": "constant",
        "signature": "FIXED_SCALE",
        "summary": "Fixed-point scale for GPU atomics"
      },
      {
        "name": "OGC_BARRIER_WGSL",
        "kind": "constant",
        "signature": "OGC_BARRIER_WGSL",
        "summary": "WGSL snippet for OGC barrier functions"
      },
      {
        "name": "OGC_DISTANCE_WGSL",
        "kind": "constant",
        "signature": "OGC_DISTANCE_WGSL",
        "summary": "WGSL snippet for offset geometry distance functions"
      },
      {
        "name": "OGC_SOLVE_WGSL",
        "kind": "constant",
        "signature": "OGC_SOLVE_WGSL",
        "summary": "WGSL snippet for OGC contact solving"
      },
      {
        "name": "OGC_WGSL_MODULE",
        "kind": "constant",
        "signature": "OGC_WGSL_MODULE",
        "summary": "Complete WGSL module for OGC"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/PBDRagdoll",
    "path": "engine/reference/sim/physics/PBDRagdoll.md",
    "source": "engine/sim/physics/PBDRagdoll.js",
    "import": "/engine/sim/physics/PBDRagdoll.js",
    "sourceHash": "a783c6854f3567842a6da30a2e2f64ad31c43b6676b6aca6043a311cb6681c2a",
    "summary": "Bone identifiers",
    "exports": [
      {
        "name": "CapsuleCollider",
        "kind": "class",
        "signature": "class CapsuleCollider",
        "summary": ""
      },
      {
        "name": "RagdollBoneData",
        "kind": "class",
        "signature": "class RagdollBoneData",
        "summary": ""
      },
      {
        "name": "PBDRagdoll",
        "kind": "class",
        "signature": "class PBDRagdoll",
        "summary": ""
      },
      {
        "name": "RagdollBone",
        "kind": "constant",
        "signature": "RagdollBone",
        "summary": "Bone identifiers"
      },
      {
        "name": "JointType",
        "kind": "constant",
        "signature": "JointType",
        "summary": "Joint types"
      },
      {
        "name": "RagdollState",
        "kind": "constant",
        "signature": "RagdollState",
        "summary": "Ragdoll states"
      },
      {
        "name": "DEFAULT_MEASUREMENTS",
        "kind": "constant",
        "signature": "DEFAULT_MEASUREMENTS",
        "summary": "Default humanoid measurements (meters)"
      },
      {
        "name": "JOINT_LIMITS",
        "kind": "constant",
        "signature": "JOINT_LIMITS",
        "summary": "Joint angle limits (radians)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/PBDSolver",
    "path": "engine/reference/sim/physics/PBDSolver.md",
    "source": "engine/sim/physics/PBDSolver.js",
    "import": "/engine/sim/physics/PBDSolver.js",
    "sourceHash": "8bb2326d5ce269ffaf826e1fc6df41cc52d23d0ccf6af07d004ee677a9717d0c",
    "summary": "PBDSolver.js - Position-Based Dynamics Solver Implements XPBD (Extended Position-Based Dynamics) for: - Rope/cable physics (line segments) - Soft body deformation - Ragdoll skeletons - Cloth simulation Key Algorithms: - Verlet integration (position-based) - Gauss-Seidel constraint projection - Graph coloring for GPU parallelization - XPBD compliance for stable stiffness **Small Substeps Approach (Miles Macklin, NVIDIA 2019):** \"n small timesteps with 1 iteration each > 1 large timestep with n iterations\" This provides better stability for stiff systems (ropes, cloth). We use 8 substeps with 1 iteration each by default (equivalent to but more stable than 1 substep with 8 iterations). **OGC Contact Model (Chen et al., SIGGRAPH 2025):** Uses Offset Geometric Contact for penetration-free collision. Barrier energy prevents penetration before it occurs. Performance Targets: - 1000 particles + 3000 constraints: <5ms - 8 substeps, 1 iteration per substep (small substeps approach)",
    "exports": [
      {
        "name": "PBDParticle",
        "kind": "class",
        "signature": "class PBDParticle",
        "summary": "PBD Particle with position, velocity, and inverse mass"
      },
      {
        "name": "PBDConstraint",
        "kind": "class",
        "signature": "class PBDConstraint",
        "summary": "Base constraint class"
      },
      {
        "name": "DistanceConstraint",
        "kind": "class",
        "signature": "class DistanceConstraint extends PBDConstraint",
        "summary": "Distance constraint - maintains rest length between two particles"
      },
      {
        "name": "AngleConstraint",
        "kind": "class",
        "signature": "class AngleConstraint extends PBDConstraint",
        "summary": "Angle constraint - limits angle between three particles"
      },
      {
        "name": "AttachmentConstraint",
        "kind": "class",
        "signature": "class AttachmentConstraint extends PBDConstraint",
        "summary": "Attachment constraint - pins particle to world position Simple and stable: directly moves particle toward target"
      },
      {
        "name": "BendingConstraint",
        "kind": "class",
        "signature": "class BendingConstraint extends PBDConstraint",
        "summary": "Bending constraint - maintains angle between 3 particles - UNTESTED Used for hair, grass, stiff ropes"
      },
      {
        "name": "SpringConstraint",
        "kind": "class",
        "signature": "class SpringConstraint extends PBDConstraint",
        "summary": "Spring constraint - UNTESTED Unlike distance constraint, springs can compress AND extend (Hooke's law)"
      },
      {
        "name": "CohesionConstraint",
        "kind": "class",
        "signature": "class CohesionConstraint extends PBDConstraint",
        "summary": "Cohesion constraint - UNTESTED Particles attract each other within a radius (like water droplets)"
      },
      {
        "name": "LongRangeAttachmentConstraint",
        "kind": "class",
        "signature": "class LongRangeAttachmentConstraint extends PBDConstraint",
        "summary": "Long Range Attachment (LRA) Constraint Creates distance constraints from fixed/anchor particles to all particles in a rope. This dramatically improves convergence for long ropes (100+ segments). Reference: Kim et al. 2012 \"Long Range Attachments - A Method to Simulate Inextensible Clothing in Computer Games\" Reference: Müller 2017 \"Long Range Constraints for Rigid Body Simulations\" Key idea: Instead of only having adjacent distance constraints, we create constraints from the anchor to every Nth particle along the rope. This allows the solver to propagate length corrections globally in fewer iterations."
      },
      {
        "name": "VolumeConstraint",
        "kind": "class",
        "signature": "class VolumeConstraint extends PBDConstraint",
        "summary": "Volume constraint - preserves volume of a tetrahedron (4 particles) C = V - V0 = 0, where V = (1/6) * (p1-p0) · ((p2-p0) × (p3-p0))"
      },
      {
        "name": "ShapeMatchingConstraint",
        "kind": "class",
        "signature": "class ShapeMatchingConstraint extends PBDConstraint",
        "summary": "Shape Matching constraint - restores N particles to their original shape Based on \"Meshless Deformations Based on Shape Matching\" (Müller 2005)"
      },
      {
        "name": "PressureConstraint",
        "kind": "class",
        "signature": "class PressureConstraint extends PBDConstraint",
        "summary": "Pressure constraint - internal pressure for closed meshes (balloons) Works with N particles forming a closed surface"
      },
      {
        "name": "DensityConstraint",
        "kind": "class",
        "signature": "class DensityConstraint extends PBDConstraint",
        "summary": "SPH Density constraint - maintains constant density (fluids) Based on \"Position Based Fluids\" (Macklin & Müller 2013)"
      },
      {
        "name": "PBDSolver",
        "kind": "class",
        "signature": "class PBDSolver",
        "summary": ""
      },
      {
        "name": "colorConstraints",
        "kind": "function",
        "signature": "colorConstraints(constraints, particles)",
        "summary": "Greedy graph coloring for constraint parallelization Constraints with same color can be solved in parallel"
      },
      {
        "name": "groupByColor",
        "kind": "function",
        "signature": "groupByColor(constraints, numColors)",
        "summary": "Group constraints by color for batched dispatch"
      },
      {
        "name": "DEFAULT_ITERATIONS",
        "kind": "constant",
        "signature": "DEFAULT_ITERATIONS",
        "summary": "Default solver iterations per substep (small substeps: use 1-2)"
      },
      {
        "name": "DEFAULT_SUBSTEPS",
        "kind": "constant",
        "signature": "DEFAULT_SUBSTEPS",
        "summary": "Default substeps per frame (small substeps: use 8-16 for stability)"
      },
      {
        "name": "ConstraintType",
        "kind": "constant",
        "signature": "ConstraintType",
        "summary": "Constraint types"
      },
      {
        "name": "ParticleFlags",
        "kind": "constant",
        "signature": "ParticleFlags",
        "summary": "Particle flags"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/PhysXArticulations",
    "path": "engine/reference/sim/physics/PhysXArticulations.md",
    "source": "engine/sim/physics/PhysXArticulations.js",
    "import": "/engine/sim/physics/PhysXArticulations.js",
    "sourceHash": "c1d1eebe252d20de4ab5c1a7eabe79500968c31deb639cf1c5364306a0ca66d7",
    "summary": "PhysXArticulations.js - PhysX Articulation Support Articulations are optimized for chains of connected bodies like: - Ropes and cables - Ragdolls - Robotic arms - Vehicles (suspensions) Per NVIDIA PhysX Best Practices: \"Articulations are much better at simulating articulated objects. They can be used to model better ropes, bridges, vehicles, or ragdolls out-of-the-box, without the need for workarounds.\" Articulations provide: - Better stability than joint chains - Reduced jitter - More accurate constraint solving - Built-in tendon support for muscle simulation",
    "exports": [
      {
        "name": "createArticulation",
        "kind": "function",
        "signature": "createArticulation(world, options = {})",
        "summary": "Create a reduced coordinate articulation (PhysX 5.x)"
      },
      {
        "name": "createRootLink",
        "kind": "function",
        "signature": "createRootLink(articulation, options = {})",
        "summary": "Create the root link of an articulation"
      },
      {
        "name": "createChildLink",
        "kind": "function",
        "signature": "createChildLink(articulation, parentLink, options = {})",
        "summary": "Create a child link attached to a parent link"
      },
      {
        "name": "addArticulationToScene",
        "kind": "function",
        "signature": "addArticulationToScene(articulation)",
        "summary": "Add articulation to scene (must be called after all links are created)"
      },
      {
        "name": "createRope",
        "kind": "function",
        "signature": "createRope(world, startPos, endPos, segments = 10, options = {})",
        "summary": "Create a rope using articulations Per NVIDIA: \"Use spheres instead of capsules. A rope made of spheres will be more stable.\""
      },
      {
        "name": "getArticulationLinkTransforms",
        "kind": "function",
        "signature": "getArticulationLinkTransforms(articulation)",
        "summary": "Update articulation link positions from simulation"
      },
      {
        "name": "destroyArticulation",
        "kind": "function",
        "signature": "destroyArticulation(articulation)",
        "summary": "Destroy an articulation and clean up resources"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/PhysXJoints",
    "path": "engine/reference/sim/physics/PhysXJoints.md",
    "source": "engine/sim/physics/PhysXJoints.js",
    "import": "/engine/sim/physics/PhysXJoints.js",
    "sourceHash": "fd2f78a431a29ae21a9d44a6d8b5125fd2f19ec8710bab0e897fa0a96eacdca2",
    "summary": "PhysX Joint Creation API Exposes D6, revolute, distance, and spherical joints for articulated bodies",
    "exports": [
      {
        "name": "getPhysXJointCapabilities",
        "kind": "function",
        "signature": "getPhysXJointCapabilities(world)",
        "summary": "PhysX Joint Creation API Exposes D6, revolute, distance, and spherical joints for articulated bodies"
      },
      {
        "name": "createD6Joint",
        "kind": "function",
        "signature": "createD6Joint(world, bodyA, bodyB, options = {})",
        "summary": "Create a D6 joint (6 degrees of freedom - most flexible joint type)"
      },
      {
        "name": "createRevoluteJoint",
        "kind": "function",
        "signature": "createRevoluteJoint(world, bodyA, bodyB, options = {})",
        "summary": "Create a revolute joint (hinge joint - 1 rotational DOF)"
      },
      {
        "name": "createSphericalJoint",
        "kind": "function",
        "signature": "createSphericalJoint(world, bodyA, bodyB, options = {})",
        "summary": "Create a spherical joint (ball-and-socket - 3 rotational DOF)"
      },
      {
        "name": "createDistanceJoint",
        "kind": "function",
        "signature": "createDistanceJoint(world, bodyA, bodyB, options = {})",
        "summary": "Create a distance joint (maintains distance between two points)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/PhysXMeshCooking",
    "path": "engine/reference/sim/physics/PhysXMeshCooking.md",
    "source": "engine/sim/physics/PhysXMeshCooking.js",
    "import": "/engine/sim/physics/PhysXMeshCooking.js",
    "sourceHash": "9b1c76625fc827d59569aca717623031feca49a4f8575885956f6b0f26cc05bb",
    "summary": "Local register helpers (avoid circular import with PhysXPhysicsWorld)",
    "exports": [
      {
        "name": "cookAndRegisterConvexMeshForWorld",
        "kind": "function",
        "signature": "cookAndRegisterConvexMeshForWorld(world, meshId, positions)",
        "summary": ""
      },
      {
        "name": "cookAndRegisterTriangleMeshForWorld",
        "kind": "function",
        "signature": "cookAndRegisterTriangleMeshForWorld(world, meshId, positions, indices)",
        "summary": ""
      },
      {
        "name": "PhysXMeshCooking",
        "kind": "re-export",
        "signature": "PhysXMeshCooking",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/PhysXModule",
    "path": "engine/reference/sim/physics/PhysXModule.md",
    "source": "engine/sim/physics/PhysXModule.js",
    "import": "/engine/sim/physics/PhysXModule.js",
    "sourceHash": "743c7782aefa327a5c64a7ca35fbf3d1b4d22bbdb7ecf71ddb1e0e8bb6fc779d",
    "summary": "",
    "exports": [
      {
        "name": "ensurePhysXModule",
        "kind": "function",
        "signature": "ensurePhysXModule()",
        "summary": ""
      },
      {
        "name": "PhysXModule",
        "kind": "re-export",
        "signature": "PhysXModule",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/PhysXPhysicsWorld",
    "path": "engine/reference/sim/physics/PhysXPhysicsWorld.md",
    "source": "engine/sim/physics/PhysXPhysicsWorld.js",
    "import": "/engine/sim/physics/PhysXPhysicsWorld.js",
    "sourceHash": "9b48f0c14b4d5fa2b3e4941475c68c2e62a39a00cb2d433ed2dbdcfc8e457703",
    "summary": "Move a kinematic body to a new pose (PhysX setKinematicTarget — the solver sweeps it there over the next step, pushing dynamic bodies out of the way instead of teleporting through them). Used for script-driven obstacles (e.g. AI traffic cars that dynamic bodies must collide with).",
    "exports": [
      {
        "name": "createPhysicsWorld",
        "kind": "function",
        "signature": "createPhysicsWorld(options = {})",
        "summary": ""
      },
      {
        "name": "registerConvexMesh",
        "kind": "function",
        "signature": "registerConvexMesh(world, meshId, pxConvexMesh)",
        "summary": ""
      },
      {
        "name": "registerTriangleMesh",
        "kind": "function",
        "signature": "registerTriangleMesh(world, meshId, pxTriangleMesh)",
        "summary": ""
      },
      {
        "name": "destroyPhysicsWorld",
        "kind": "function",
        "signature": "destroyPhysicsWorld(world)",
        "summary": ""
      },
      {
        "name": "createBody",
        "kind": "function",
        "signature": "createBody(world, desc)",
        "summary": ""
      },
      {
        "name": "getBody",
        "kind": "function",
        "signature": "getBody(world, handle)",
        "summary": ""
      },
      {
        "name": "setBodyKinematic",
        "kind": "function",
        "signature": "setBodyKinematic(world, handle, enabled)",
        "summary": ""
      },
      {
        "name": "setKinematicPose",
        "kind": "function",
        "signature": "setKinematicPose(world, handle, position, rotation = [0, 0, 0, 1])",
        "summary": "Move a kinematic body to a new pose (PhysX setKinematicTarget — the solver sweeps it there over the next step, pushing dynamic bodies out of the way instead of teleporting through them). Used for script-driven obstacles (e.g. AI traffic cars that dynamic bodies must collide with)."
      },
      {
        "name": "removeBody",
        "kind": "function",
        "signature": "removeBody(world, handle)",
        "summary": ""
      },
      {
        "name": "updateBodyFilterData",
        "kind": "function",
        "signature": "updateBodyFilterData(world, handle, entityFlags)",
        "summary": "Update a body's collision filter data based on EntityFlags Call this when EntityFlags.collisionLayer, collisionMask, or collisionMode changes"
      },
      {
        "name": "updateWorldMaterial",
        "kind": "function",
        "signature": "updateWorldMaterial(world, materialOptions)",
        "summary": ""
      },
      {
        "name": "raycastWorld",
        "kind": "function",
        "signature": "raycastWorld(world, origin, direction, maxDistance)",
        "summary": ""
      },
      {
        "name": "stepPhysicsWorld",
        "kind": "function",
        "signature": "stepPhysicsWorld(world, deltaTime)",
        "summary": ""
      },
      {
        "name": "PhysXPhysicsWorld",
        "kind": "re-export",
        "signature": "PhysXPhysicsWorld",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/PhysXVehicle",
    "path": "engine/reference/sim/physics/PhysXVehicle.md",
    "source": "engine/sim/physics/PhysXVehicle.js",
    "import": "/engine/sim/physics/PhysXVehicle.js",
    "sourceHash": "db304e9273d382b73f92569c0447060a2f5b6e5509ac97f4b61f238d103c5ec5",
    "summary": "Compatibility entry point. Implementation is split by vehicle subsystem in ./vehicle so existing engine and playground import paths remain stable.",
    "exports": [
      {
        "name": "createPhysXVehicle",
        "kind": "re-export",
        "signature": "createPhysXVehicle",
        "summary": ""
      },
      {
        "name": "isPhysXVehicleSupported",
        "kind": "re-export",
        "signature": "isPhysXVehicleSupported",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/PhysicalMaterialPresets",
    "path": "engine/reference/sim/physics/PhysicalMaterialPresets.md",
    "source": "engine/sim/physics/PhysicalMaterialPresets.js",
    "import": "/engine/sim/physics/PhysicalMaterialPresets.js",
    "sourceHash": "0b43b134179af6b9c25e7f5e17a2f71c3842944aeef9c16753e81471c0f5a7ec",
    "summary": "PhysicalMaterialPresets.js — Real-world material property presets Each preset defines how a shape behaves physically: density for mass, elasticity for springback, hardness for deformation resistance, brittleness for shatter vs bend, and fracture configuration. Used by the PhysicalMaterial ECS component and EditorPhysicalMaterial bridge.",
    "exports": [
      {
        "name": "getMaterialPreset",
        "kind": "function",
        "signature": "getMaterialPreset(key)",
        "summary": "Get a full material preset by key (returns a shallow copy)."
      },
      {
        "name": "createPhysicalMaterial",
        "kind": "function",
        "signature": "createPhysicalMaterial(presetKey, overrides = {})",
        "summary": "Create a PhysicalMaterial component value from a preset key, with optional property overrides."
      },
      {
        "name": "computeMassFromMaterial",
        "kind": "function",
        "signature": "computeMassFromMaterial(material, halfExtents, colliderShape)",
        "summary": "Compute mass from material density and collider volume."
      },
      {
        "name": "MATERIAL_PRESETS",
        "kind": "constant",
        "signature": "MATERIAL_PRESETS",
        "summary": ""
      },
      {
        "name": "MATERIAL_KEYS",
        "kind": "constant",
        "signature": "MATERIAL_KEYS",
        "summary": "All preset keys."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/PhysicsSchema",
    "path": "engine/reference/sim/physics/PhysicsSchema.md",
    "source": "engine/sim/physics/PhysicsSchema.js",
    "import": "/engine/sim/physics/PhysicsSchema.js",
    "sourceHash": "7b2c061487e7c773c23bf55bb49605489b3c2576a2bacda2c5b66f03e08fc348",
    "summary": "PhysicsSchema.js - Unified JSON Schema for Physics System Defines consistent data structures for: - Body types (dynamic, kinematic, static) - Collider shapes (box, sphere, capsule, mesh) - Joint types (D6, revolute, spherical, distance) - Collision layers and masks - Material properties (friction, restitution) All physics code should use these schemas for consistency.",
    "exports": [
      {
        "name": "getSimModeId",
        "kind": "function",
        "signature": "getSimModeId(modeName)",
        "summary": "Get simulation mode ID from name"
      },
      {
        "name": "getSimModeName",
        "kind": "function",
        "signature": "getSimModeName(modeId)",
        "summary": "Get simulation mode name from ID"
      },
      {
        "name": "getColliderShapeId",
        "kind": "function",
        "signature": "getColliderShapeId(shapeName)",
        "summary": "Get collider shape ID from name"
      },
      {
        "name": "getColliderShapeName",
        "kind": "function",
        "signature": "getColliderShapeName(shapeId)",
        "summary": "Get collider shape name from ID"
      },
      {
        "name": "getCollisionMask",
        "kind": "function",
        "signature": "getCollisionMask(...layerNames)",
        "summary": "Get collision layer mask from layer names"
      },
      {
        "name": "layersCollide",
        "kind": "function",
        "signature": "layersCollide(maskA, maskB)",
        "summary": "Check if two layer masks collide"
      },
      {
        "name": "validatePhysicsBody",
        "kind": "function",
        "signature": "validatePhysicsBody(config)",
        "summary": "Validate physics body configuration"
      },
      {
        "name": "validateCollider",
        "kind": "function",
        "signature": "validateCollider(config)",
        "summary": "Validate collider configuration"
      },
      {
        "name": "validatePhysicsMaterial",
        "kind": "function",
        "signature": "validatePhysicsMaterial(config)",
        "summary": "Validate physics material"
      },
      {
        "name": "createDefaultPhysicsBody",
        "kind": "function",
        "signature": "createDefaultPhysicsBody()",
        "summary": "Create default physics body config"
      },
      {
        "name": "createDefaultCollider",
        "kind": "function",
        "signature": "createDefaultCollider(shape = \"box\")",
        "summary": "Create default collider config"
      },
      {
        "name": "createDefaultJoint",
        "kind": "function",
        "signature": "createDefaultJoint(type = \"fixed\")",
        "summary": "Create default joint config"
      },
      {
        "name": "createDefaultPhysicsWorld",
        "kind": "function",
        "signature": "createDefaultPhysicsWorld()",
        "summary": "Create default physics world config"
      },
      {
        "name": "getPhysicsMaterial",
        "kind": "function",
        "signature": "getPhysicsMaterial(name)",
        "summary": "Get physics material by name"
      },
      {
        "name": "SIM_MODES",
        "kind": "constant",
        "signature": "SIM_MODES",
        "summary": "Physics simulation modes"
      },
      {
        "name": "COLLIDER_SHAPES",
        "kind": "constant",
        "signature": "COLLIDER_SHAPES",
        "summary": "Collider shape types"
      },
      {
        "name": "JOINT_TYPES",
        "kind": "constant",
        "signature": "JOINT_TYPES",
        "summary": "Joint types for articulated bodies"
      },
      {
        "name": "D6_MOTION",
        "kind": "constant",
        "signature": "D6_MOTION",
        "summary": "D6 joint axis motion types"
      },
      {
        "name": "D6_AXES",
        "kind": "constant",
        "signature": "D6_AXES",
        "summary": "D6 joint axes"
      },
      {
        "name": "D6_DRIVES",
        "kind": "constant",
        "signature": "D6_DRIVES",
        "summary": ""
      },
      {
        "name": "COLLISION_LAYERS",
        "kind": "constant",
        "signature": "COLLISION_LAYERS",
        "summary": "Collision layer definitions (bitmask)"
      },
      {
        "name": "PHYSICS_MATERIAL_SCHEMA",
        "kind": "constant",
        "signature": "PHYSICS_MATERIAL_SCHEMA",
        "summary": "Physics material schema **Compliant Contacts (PhysX 5.1+):** Set restitution to a NEGATIVE value to enable spring-damper contact model. This provides more stable collision behavior for complex contact configurations. - restitution = -springStiffness (negative enables compliant mode) - damping = damping ratio for the spring - compliantAcceleration = true to use acceleration spring (mass-independent)"
      },
      {
        "name": "PHYSICS_MATERIALS",
        "kind": "constant",
        "signature": "PHYSICS_MATERIALS",
        "summary": "Preset physics materials Note: Negative restitution enables compliant (spring-damper) contacts"
      },
      {
        "name": "PHYSICS_BODY_SCHEMA",
        "kind": "constant",
        "signature": "PHYSICS_BODY_SCHEMA",
        "summary": "Physics body schema"
      },
      {
        "name": "COLLIDER_SCHEMA",
        "kind": "constant",
        "signature": "COLLIDER_SCHEMA",
        "summary": "Collider schema"
      },
      {
        "name": "JOINT_SCHEMA",
        "kind": "constant",
        "signature": "JOINT_SCHEMA",
        "summary": "Joint schema"
      },
      {
        "name": "PHYSICS_WORLD_SCHEMA",
        "kind": "constant",
        "signature": "PHYSICS_WORLD_SCHEMA",
        "summary": "Physics world configuration"
      },
      {
        "name": "STANDARD_COLLIDER_MESHES",
        "kind": "constant",
        "signature": "STANDARD_COLLIDER_MESHES",
        "summary": "Standard convex collider mesh IDs"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/PhysicsWorld",
    "path": "engine/reference/sim/physics/PhysicsWorld.md",
    "source": "engine/sim/physics/PhysicsWorld.js",
    "import": "/engine/sim/physics/PhysicsWorld.js",
    "sourceHash": "baca91fd7841cc4105753bb1a43212d8df35cf1ca9e97f93c3f062c939fd28f8",
    "summary": "",
    "exports": [
      {
        "name": "createPhysicsWorld",
        "kind": "function",
        "signature": "createPhysicsWorld(options = {})",
        "summary": ""
      },
      {
        "name": "destroyPhysicsWorld",
        "kind": "function",
        "signature": "destroyPhysicsWorld(physicsWorld)",
        "summary": ""
      },
      {
        "name": "createBody",
        "kind": "function",
        "signature": "createBody(physicsWorld, desc)",
        "summary": ""
      },
      {
        "name": "getBody",
        "kind": "function",
        "signature": "getBody(physicsWorld, handle)",
        "summary": ""
      },
      {
        "name": "removeBody",
        "kind": "function",
        "signature": "removeBody(physicsWorld, handle)",
        "summary": ""
      },
      {
        "name": "stepPhysicsWorld",
        "kind": "function",
        "signature": "stepPhysicsWorld(physicsWorld, deltaSeconds)",
        "summary": ""
      },
      {
        "name": "PhysicsWorld",
        "kind": "re-export",
        "signature": "PhysicsWorld",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/SDFCollision",
    "path": "engine/reference/sim/physics/SDFCollision.md",
    "source": "engine/sim/physics/SDFCollision.js",
    "import": "/engine/sim/physics/SDFCollision.js",
    "sourceHash": "88762feef26f204c25c91b6a79b76c446ca4bfd2c47ad2a2dfb385d2a99d03aa",
    "summary": "SDFCollision.js - Signed Distance Field Collision Detection Based on GPU Gems 3, Chapter 34: \"Signed Distance Fields Using Single-Pass GPU Scan\" and PhysX 5.x SDF collision geometry. SDFs provide: - Accurate collision for concave shapes without decomposition - Efficient distance queries for soft body interactions - Smooth contact normals for stable simulation - Fast ray/sphere casting The SDF stores the signed distance to the nearest surface at each point: - Negative inside the object - Positive outside the object - Zero on the surface",
    "exports": [
      {
        "name": "SDFGrid",
        "kind": "class",
        "signature": "class SDFGrid",
        "summary": "3D SDF Grid for collision detection"
      },
      {
        "name": "createSDFFromMesh",
        "kind": "function",
        "signature": "createSDFFromMesh(vertices, indices, options = {})",
        "summary": "Create SDF collider from mesh using jump flooding algorithm This is a simplified CPU version - GPU version would be faster"
      },
      {
        "name": "SDFPrimitives",
        "kind": "constant",
        "signature": "SDFPrimitives",
        "summary": "SDF primitive functions"
      },
      {
        "name": "SDFOperations",
        "kind": "constant",
        "signature": "SDFOperations",
        "summary": "SDF combination operations"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/SeismicSystem",
    "path": "engine/reference/sim/physics/SeismicSystem.md",
    "source": "engine/sim/physics/SeismicSystem.js",
    "import": "/engine/sim/physics/SeismicSystem.js",
    "sourceHash": "95904af0338d65b31980ad24108a2bcf5afa12bd5d5260c5d9604219cb03747a",
    "summary": "SeismicSystem.js - Tectonic Simulation and Earthquake Events Simulates geological activity on the planet: - Tectonic fault lines with stress accumulation - Earthquake event triggering when stress exceeds threshold - Seismic wave propagation (P-waves, S-waves, surface waves) - Distance-based attenuation - Character/entity response integration Wave Types: - P-waves (Primary): Compressional, fastest, travels through solids/liquids - S-waves (Secondary): Shear, slower, solids only - Surface waves: Slowest, most destructive, along surface",
    "exports": [
      {
        "name": "FaultLine",
        "kind": "class",
        "signature": "class FaultLine",
        "summary": "Represents a tectonic fault line"
      },
      {
        "name": "SeismicWave",
        "kind": "class",
        "signature": "class SeismicWave",
        "summary": "Propagating seismic wave"
      },
      {
        "name": "Earthquake",
        "kind": "class",
        "signature": "class Earthquake",
        "summary": "Complete earthquake event with multiple wave types"
      },
      {
        "name": "SeismicSystem",
        "kind": "class",
        "signature": "class SeismicSystem",
        "summary": ""
      },
      {
        "name": "WaveType",
        "kind": "constant",
        "signature": "WaveType",
        "summary": "Wave types"
      },
      {
        "name": "WAVE_SPEEDS",
        "kind": "constant",
        "signature": "WAVE_SPEEDS",
        "summary": "Wave speeds (m/s, scaled for game)"
      },
      {
        "name": "MagnitudeScale",
        "kind": "constant",
        "signature": "MagnitudeScale",
        "summary": "Earthquake magnitude scales"
      },
      {
        "name": "DEFAULT_PARAMS",
        "kind": "constant",
        "signature": "DEFAULT_PARAMS",
        "summary": "Default seismic parameters"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/ShockPropagation",
    "path": "engine/reference/sim/physics/ShockPropagation.md",
    "source": "engine/sim/physics/ShockPropagation.js",
    "import": "/engine/sim/physics/ShockPropagation.js",
    "sourceHash": "b23374c6b05dd0c3e0bff9bbaaa90b438c2e3264bfa62f08863a2e8e7f4cb110",
    "summary": "ShockPropagation.js - Shock Propagation for Stable Stacking Based on \"Nonconvex Rigid Bodies with Stacking\" (Guendelman et al., SIGGRAPH 2003) and NVIDIA PhysX best practices. Problem: Standard iterative solvers struggle with deep stacks of objects. Objects at the bottom don't \"know\" about the weight above them, causing jitter and instability. Solution: Process contacts in a specific order, propagating forces from the ground upward through the contact graph. This ensures each layer is stable before processing the next. Key Techniques: - Contact graph construction - Topological sorting by \"height\" from ground - Bottom-up constraint solving - Velocity-level shock propagation",
    "exports": [
      {
        "name": "ShockPropagationSolver",
        "kind": "class",
        "signature": "class ShockPropagationSolver",
        "summary": "Shock propagation solver for stable stacking"
      },
      {
        "name": "applyShockPropagation",
        "kind": "function",
        "signature": "applyShockPropagation(world, contacts, dt)",
        "summary": "Integrate shock propagation with existing physics world Call this after broad/narrow phase but before velocity integration"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/SpatialIntegritySystem",
    "path": "engine/reference/sim/physics/SpatialIntegritySystem.md",
    "source": "engine/sim/physics/SpatialIntegritySystem.js",
    "import": "/engine/sim/physics/SpatialIntegritySystem.js",
    "sourceHash": "ac8d386da0352a0225e0d3221077e08d40eac1b36f937a76310ba3327ff10e1d",
    "summary": "SpatialIntegritySystem.js - Coordinate Validation & Correction Ensures spatial integrity for planetary-scale worlds: - O(1) position lookup via composite keys - Fast checksum validation for corruption detection - World-tick based temporal tracking - Authority snapshots for rollback/sync - Drift correction for network sync Designed for minimal overhead while providing strong guarantees.",
    "exports": [
      {
        "name": "SpatialIntegritySystem",
        "kind": "class",
        "signature": "class SpatialIntegritySystem",
        "summary": ""
      },
      {
        "name": "ChunkIntegrityTracker",
        "kind": "class",
        "signature": "class ChunkIntegrityTracker",
        "summary": "Specialized integrity tracking for chunk positions Uses integer coordinates for exact matching"
      },
      {
        "name": "EntityCategory",
        "kind": "constant",
        "signature": "EntityCategory",
        "summary": ""
      },
      {
        "name": "ValidationResult",
        "kind": "constant",
        "signature": "ValidationResult",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/SpeculativeContacts",
    "path": "engine/reference/sim/physics/SpeculativeContacts.md",
    "source": "engine/sim/physics/SpeculativeContacts.js",
    "import": "/engine/sim/physics/SpeculativeContacts.js",
    "sourceHash": "2c271c46a9a88edac3d9b4288c52be9f95e2cb0ec69d4c7f3b3e506a2ba6a5f3",
    "summary": "SpeculativeContacts.js - Speculative Continuous Collision Detection Based on \"Speculative Contacts\" (Bullet Physics) and PhysX eSPECULATIVE_CCD. Traditional CCD is expensive as it requires time-of-impact (TOI) calculations. Speculative contacts provide a cheaper alternative: 1. Expand AABBs by velocity * dt to predict where objects will be 2. Generate contacts for all potentially overlapping pairs 3. Add velocity constraints to prevent future penetration Benefits: - Cheaper than sweep-based CCD - Prevents tunneling for most cases - Works well with iterative solvers Limitations: - Can cause \"ghost collisions\" with thin objects - Not as accurate as full CCD for very fast objects",
    "exports": [
      {
        "name": "SpeculativeContactsSolver",
        "kind": "class",
        "signature": "class SpeculativeContactsSolver",
        "summary": "Speculative contacts solver"
      },
      {
        "name": "expandAABBByVelocity",
        "kind": "function",
        "signature": "expandAABBByVelocity(aabb, velocity, dt, margin = 0.01)",
        "summary": "Expand AABB by velocity to get speculative bounds"
      },
      {
        "name": "timeOfClosestApproach",
        "kind": "function",
        "signature": "timeOfClosestApproach(posA, velA, radiusA, posB, velB, radiusB)",
        "summary": "Calculate time of closest approach between two moving spheres Used for speculative contact timing"
      },
      {
        "name": "enablePhysXSpeculativeCCD",
        "kind": "function",
        "signature": "enablePhysXSpeculativeCCD(actor, PhysX)",
        "summary": "Enable speculative CCD on a PhysX rigid body This configures the PhysX-specific flags for speculative contacts"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/StandardColliderMeshes",
    "path": "engine/reference/sim/physics/StandardColliderMeshes.md",
    "source": "engine/sim/physics/StandardColliderMeshes.js",
    "import": "/engine/sim/physics/StandardColliderMeshes.js",
    "sourceHash": "47a89cedbba0459370064b7ab80398f02cc30470de15a20aa2c077ad03b52309",
    "summary": "",
    "exports": [
      {
        "name": "getStandardColliderBaseHalfExtents",
        "kind": "function",
        "signature": "getStandardColliderBaseHalfExtents(meshId)",
        "summary": ""
      },
      {
        "name": "ensureStandardColliderMeshes",
        "kind": "function",
        "signature": "ensureStandardColliderMeshes(world)",
        "summary": ""
      },
      {
        "name": "StandardColliderMeshIds",
        "kind": "constant",
        "signature": "StandardColliderMeshIds",
        "summary": ""
      },
      {
        "name": "StandardColliderMeshes",
        "kind": "re-export",
        "signature": "StandardColliderMeshes",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/StructuralIntegrity",
    "path": "engine/reference/sim/physics/StructuralIntegrity.md",
    "source": "engine/sim/physics/StructuralIntegrity.js",
    "import": "/engine/sim/physics/StructuralIntegrity.js",
    "sourceHash": "b329056485069d2e4984e5e7904c42dd08f84c9f305f875093fd506da42735af",
    "summary": "StructuralIntegrity.js - Structural Integrity and Collapse System Implements realistic structural mechanics for destructible buildings: - Iterative relaxation solver for force propagation - Stress accumulation and breaking thresholds - Connectivity analysis with flood-fill from anchors - Chain reaction cascading collapse Based on constraint relaxation similar to Verlet physics but for structural connections rather than particle positions.",
    "exports": [
      {
        "name": "StructuralNode",
        "kind": "class",
        "signature": "class StructuralNode",
        "summary": "A node in the structural graph (corresponds to a fragment or chunk)"
      },
      {
        "name": "StructuralEdge",
        "kind": "class",
        "signature": "class StructuralEdge",
        "summary": "An edge connecting two structural nodes"
      },
      {
        "name": "StructuralIntegritySolver",
        "kind": "class",
        "signature": "class StructuralIntegritySolver",
        "summary": "Main structural integrity system"
      },
      {
        "name": "ANCHOR_TYPE",
        "kind": "constant",
        "signature": "ANCHOR_TYPE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/TreePhysics",
    "path": "engine/reference/sim/physics/TreePhysics.md",
    "source": "engine/sim/physics/TreePhysics.js",
    "import": "/engine/sim/physics/TreePhysics.js",
    "sourceHash": "dee13420258954f0d3f97c9089ed9988bf981ff820e02933c62da73f1c1b5b9d",
    "summary": "TreePhysics.js - Teardown-style Tree Physics System Features: - Trees must spawn on solid ground (validated placement) - Root connection tracking (trees anchored at base) - Structural integrity - cut trees fall realistically - Physics body conversion when disconnected Based on Teardown's structural integrity system where objects fall when disconnected from anchors (ground).",
    "exports": [
      {
        "name": "TreeVoxelBody",
        "kind": "class",
        "signature": "class TreeVoxelBody",
        "summary": "Represents a tree's voxel structure for physics"
      },
      {
        "name": "TreePhysicsSystem",
        "kind": "class",
        "signature": "class TreePhysicsSystem",
        "summary": "Manages all tree physics in the world"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/UnifiedDamageSystem",
    "path": "engine/reference/sim/physics/UnifiedDamageSystem.md",
    "source": "engine/sim/physics/UnifiedDamageSystem.js",
    "import": "/engine/sim/physics/UnifiedDamageSystem.js",
    "sourceHash": "a50848e7d1c7a8fd23bad3d8c97dd9e32a9a5f75be356143af697e360c404abd",
    "summary": "UnifiedDamageSystem.js - Cross-System Damage Integration Connects all destruction systems so everything affects everything: - Particles damage voxels (erosion, accumulation) - Particles damage meshes (impact fracture) - Mesh debris creates voxel craters - Voxel explosions affect mesh structures Acts as the central hub for damage propagation between systems.",
    "exports": [
      {
        "name": "DamageEvent",
        "kind": "class",
        "signature": "class DamageEvent",
        "summary": "Represents a damage event that propagates through systems"
      },
      {
        "name": "UnifiedDamageSystem",
        "kind": "class",
        "signature": "class UnifiedDamageSystem",
        "summary": "Central damage system that coordinates between all subsystems"
      },
      {
        "name": "DAMAGE_TYPE",
        "kind": "constant",
        "signature": "DAMAGE_TYPE",
        "summary": "Damage types"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/VoronoiFracture",
    "path": "engine/reference/sim/physics/VoronoiFracture.md",
    "source": "engine/sim/physics/VoronoiFracture.js",
    "import": "/engine/sim/physics/VoronoiFracture.js",
    "sourceHash": "243cfebc3872355731198e238e26c9e69f2ed547f502e8f01ab28a39f213d822",
    "summary": "VoronoiFracture.js - GPU-accelerated Voronoi Fracture System Uses Jump Flooding Algorithm (JFA) to compute 3D Voronoi diagrams for realistic mesh fracturing. Seeds are placed based on impact location and fracture patterns. Algorithm: 1. Place seed points (impact-based or pattern-based) 2. Run JFA to compute nearest seed for each voxel 3. Extract cell boundaries as fracture planes 4. Cut mesh along planes to create fragments",
    "exports": [
      {
        "name": "VoronoiFracture",
        "kind": "class",
        "signature": "class VoronoiFracture",
        "summary": ""
      },
      {
        "name": "FRACTURE_PATTERNS",
        "kind": "constant",
        "signature": "FRACTURE_PATTERNS",
        "summary": "Predefined fracture patterns for different impact types"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/VoxelMeshCollision",
    "path": "engine/reference/sim/physics/VoxelMeshCollision.md",
    "source": "engine/sim/physics/VoxelMeshCollision.js",
    "import": "/engine/sim/physics/VoxelMeshCollision.js",
    "sourceHash": "93d022c0d4d7ee64e7350a8090692caac437db0799f99fef5948055eb28c1421",
    "summary": "VoxelMeshCollision.js - Voxel-based Mesh Collision for Particles and Ropes Voxelizes meshes into an occupancy grid with compressed normals for efficient GPU collision detection. This allows particles and ropes to collide with arbitrary mesh geometry beyond simple AABBs. Representation (per voxel, 32 bits total): - Bit 31: Occupancy flag (1 = solid) - Bits 30-21: Normal X (10 bits, signed normalized) - Bits 20-11: Normal Y (10 bits, signed normalized) - Bits 10-1: Normal Z (10 bits, signed normalized) - Bit 0: Reserved Features: - GPU mesh voxelization via compute shader - Compressed normal storage (10-10-10-2 format) - Cascaded/multi-resolution support - GPU collision queries for particles - Cache and reuse voxelized meshes",
    "exports": [
      {
        "name": "VoxelMeshCollider",
        "kind": "class",
        "signature": "class VoxelMeshCollider",
        "summary": ""
      },
      {
        "name": "CascadedVoxelCollider",
        "kind": "class",
        "signature": "class CascadedVoxelCollider",
        "summary": "CascadedVoxelCollider - Multi-resolution voxel collision with LOD levels Uses multiple grid resolutions for efficient collision: - LOD 0: Fine (128³) - Near particles, high accuracy - LOD 1: Medium (64³) - Mid-range particles - LOD 2: Coarse (32³) - Far particles, fast queries"
      },
      {
        "name": "VoxelCacheManager",
        "kind": "class",
        "signature": "class VoxelCacheManager",
        "summary": "VoxelCacheManager - Persistent cache for voxelized meshes Saves/loads voxelized mesh data to avoid re-voxelization. Uses IndexedDB for persistence."
      },
      {
        "name": "meshToTriangleBuffer",
        "kind": "function",
        "signature": "meshToTriangleBuffer(vertices, indices)",
        "summary": "Helper: Convert mesh vertices/indices to triangle buffer format"
      },
      {
        "name": "computeMeshBounds",
        "kind": "function",
        "signature": "computeMeshBounds(vertices)",
        "summary": "Helper: Compute mesh AABB"
      },
      {
        "name": "createVoxelMeshCollider",
        "kind": "function",
        "signature": "createVoxelMeshCollider(device, options = {})",
        "summary": ""
      },
      {
        "name": "createCascadedVoxelCollider",
        "kind": "function",
        "signature": "createCascadedVoxelCollider(device, options = {})",
        "summary": ""
      },
      {
        "name": "createVoxelCacheManager",
        "kind": "function",
        "signature": "createVoxelCacheManager(dbName = 'VoxelMeshCache')",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPUBroadphase",
    "path": "engine/reference/sim/physics/gpu/GPUBroadphase.md",
    "source": "engine/sim/physics/gpu/GPUBroadphase.js",
    "import": "/engine/sim/physics/gpu/GPUBroadphase.js",
    "sourceHash": "5df30582ecda7ec677bf64bcd1e656e53da6ba9cd40e47ff9edcedca09312f64",
    "summary": "GPUBroadphase.js — GPU Compute Spatial Hash Broadphase Spatial hash broad-phase collision detection on GPU. Computes AABBs from collider shapes + world transforms, inserts into spatial hash grid, finds candidate collision pairs. Based on: - GPU Gems 3 Ch.32: Broad-Phase Collision Detection with CUDA - GPU Gems 3 Ch.29: Uniform grid with 27-neighbor cell queries - Existing GPUSpatialHash.js patterns (morton codes, hash primes) Uses atomicAdd for pair output (modern WebGPU, no multi-pass needed). Collision layer/mask filtering happens during pair generation.",
    "exports": [
      {
        "name": "GPUBroadphase",
        "kind": "class",
        "signature": "class GPUBroadphase",
        "summary": ""
      },
      {
        "name": "createBroadphase",
        "kind": "function",
        "signature": "async createBroadphase(device, worldBuffers, options = {})",
        "summary": "Create and initialize a GPU broadphase."
      },
      {
        "name": "destroyBroadphase",
        "kind": "function",
        "signature": "destroyBroadphase(bp)",
        "summary": ""
      },
      {
        "name": "DEFAULT_CELL_SIZE",
        "kind": "constant",
        "signature": "DEFAULT_CELL_SIZE",
        "summary": ""
      },
      {
        "name": "HASH_TABLE_SIZE",
        "kind": "constant",
        "signature": "HASH_TABLE_SIZE",
        "summary": ""
      },
      {
        "name": "MAX_BODIES_PER_CELL",
        "kind": "constant",
        "signature": "MAX_BODIES_PER_CELL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPUCharacterController",
    "path": "engine/reference/sim/physics/gpu/GPUCharacterController.md",
    "source": "engine/sim/physics/gpu/GPUCharacterController.js",
    "import": "/engine/sim/physics/gpu/GPUCharacterController.js",
    "sourceHash": "ebf7cee4cb160410cdaf0ba7521dd698de9c5d6b538bba27450ea77401e4bb9e",
    "summary": "GPUCharacterController.js — Kinematic Character Controller PhysX-style character controller (CCT) for player/NPC movement. Kinematic body that sweeps through the scene, resolves collisions, handles ground detection, slope limits, step climbing, and skin width. Based on: - PhysX PxController: kinematic move with depenetration, auto-step, slope limit - Quake/Source: slide-move along wall normals, stair stepping - Jolt CharacterVirtual: predictive contacts, inner body shape Architecture: - CPU-driven (character movement is inherently sequential per-character) - Uses GPURaycast (CPU fallback) for ground probes and sweep tests - Applies final position to a kinematic body in GPURigidBodyWorld - Supports capsule and box shapes The controller does NOT use GPU compute shaders directly because character movement is latency-sensitive (needs immediate response to input) and typically only a handful of characters exist. CPU is the right choice here.",
    "exports": [
      {
        "name": "GPUCharacterController",
        "kind": "class",
        "signature": "class GPUCharacterController",
        "summary": ""
      },
      {
        "name": "GPUCharacterControllerManager",
        "kind": "class",
        "signature": "class GPUCharacterControllerManager",
        "summary": ""
      },
      {
        "name": "createCharacterControllerManager",
        "kind": "function",
        "signature": "createCharacterControllerManager()",
        "summary": ""
      },
      {
        "name": "destroyCharacterControllerManager",
        "kind": "function",
        "signature": "destroyCharacterControllerManager(mgr)",
        "summary": ""
      },
      {
        "name": "CCT_SHAPE_CAPSULE",
        "kind": "constant",
        "signature": "CCT_SHAPE_CAPSULE",
        "summary": ""
      },
      {
        "name": "CCT_SHAPE_BOX",
        "kind": "constant",
        "signature": "CCT_SHAPE_BOX",
        "summary": ""
      },
      {
        "name": "CCT_GROUNDED",
        "kind": "constant",
        "signature": "CCT_GROUNDED",
        "summary": ""
      },
      {
        "name": "CCT_SLIDING",
        "kind": "constant",
        "signature": "CCT_SLIDING",
        "summary": ""
      },
      {
        "name": "CCT_FALLING",
        "kind": "constant",
        "signature": "CCT_FALLING",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPUConstraintSolver",
    "path": "engine/reference/sim/physics/gpu/GPUConstraintSolver.md",
    "source": "engine/sim/physics/gpu/GPUConstraintSolver.js",
    "import": "/engine/sim/physics/gpu/GPUConstraintSolver.js",
    "sourceHash": "d3e020ad9913e2acf5b5ead38604cce78107b5a6a72ded8ffd26cfe81c58da27",
    "summary": "GPUConstraintSolver.js — GPU Compute XPBD/TGS Constraint Solver Solves contact constraints and joint constraints on GPU. Uses TGS_Soft approach (Erin Catto, Box2D v3): - Sub-step contact separation update via local-frame anchors - Accumulated impulse clamping (Sequential Impulses) - Warm starting from previous frame's Lagrange multipliers - Relaxation pass to drain bias energy - Coulomb friction with tangent clamping - Restitution via velocity-level bounce Joint constraints use D6 as sole native type (PhysX 5 GPU best practice). Ball, hinge, fixed, distance, prismatic are D6 presets. Parallel solving via graph-colored Gauss-Seidel (Fratarcangeli et al.): - CPU-side graph coloring groups non-conflicting constraints - One GPU dispatch per color group Based on: - XPBD (Macklin 2016): Δλ = -(C + α̃·λ) / (w_a + w_b + α̃) - Small Steps (Macklin 2019): sub-stepping > iteration - Box2D v3 Solver2D: TGS_Soft, relaxation, accumulated impulse clamping - PhysX 5 GPU: D6 joints native, soft constraint compliance",
    "exports": [
      {
        "name": "GPUConstraintSolver",
        "kind": "class",
        "signature": "class GPUConstraintSolver",
        "summary": ""
      },
      {
        "name": "createConstraintSolver",
        "kind": "function",
        "signature": "async createConstraintSolver(device, worldBuffers, narrowphaseBuffers, options = {})",
        "summary": ""
      },
      {
        "name": "destroyConstraintSolver",
        "kind": "function",
        "signature": "destroyConstraintSolver(solver)",
        "summary": ""
      },
      {
        "name": "gpuAddJoint",
        "kind": "function",
        "signature": "gpuAddJoint(solver, desc)",
        "summary": ""
      },
      {
        "name": "gpuRemoveJoint",
        "kind": "function",
        "signature": "gpuRemoveJoint(solver, handle)",
        "summary": ""
      },
      {
        "name": "JOINT_BALL",
        "kind": "constant",
        "signature": "JOINT_BALL",
        "summary": ""
      },
      {
        "name": "JOINT_HINGE",
        "kind": "constant",
        "signature": "JOINT_HINGE",
        "summary": ""
      },
      {
        "name": "JOINT_FIXED",
        "kind": "constant",
        "signature": "JOINT_FIXED",
        "summary": ""
      },
      {
        "name": "JOINT_DISTANCE",
        "kind": "constant",
        "signature": "JOINT_DISTANCE",
        "summary": ""
      },
      {
        "name": "JOINT_D6",
        "kind": "constant",
        "signature": "JOINT_D6",
        "summary": ""
      },
      {
        "name": "JOINT_PRISMATIC",
        "kind": "constant",
        "signature": "JOINT_PRISMATIC",
        "summary": ""
      },
      {
        "name": "D6_LOCKED",
        "kind": "constant",
        "signature": "D6_LOCKED",
        "summary": ""
      },
      {
        "name": "D6_LIMITED",
        "kind": "constant",
        "signature": "D6_LIMITED",
        "summary": ""
      },
      {
        "name": "D6_FREE",
        "kind": "constant",
        "signature": "D6_FREE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPUContinuousCollision",
    "path": "engine/reference/sim/physics/gpu/GPUContinuousCollision.md",
    "source": "engine/sim/physics/gpu/GPUContinuousCollision.js",
    "import": "/engine/sim/physics/gpu/GPUContinuousCollision.js",
    "sourceHash": "799f36d3926fadf7cae5e36435ffcd8310300169d3afa7bae32a80f013fa8fa5",
    "summary": "GPUContinuousCollision.js — GPU Speculative CCD (Continuous Collision Detection) Prevents fast-moving objects from tunneling through thin geometry. Uses speculative contacts: expand AABBs by velocity, generate conservative contacts at predicted future positions. Based on: - PhysX CCD: PxPairFlag::eDETECT_CCD_CONTACT, PxRigidBodyFlag::eENABLE_CCD - Bullet Physics: speculative contacts (Erwin Coumans GDC 2013) - Existing engine SpeculativeContacts.js (CPU) — this is the GPU version Architecture: - GPU shader expands AABBs by linear velocity * dt - Broadphase runs on expanded AABBs (catches potential tunneling pairs) - For CCD-flagged bodies, compute time of impact (TOI) via conservative advancement - Clamp body position to TOI * displacement if tunneling detected - Generates speculative contacts at predicted impact point When to enable CCD: - Bullets, projectiles, fast vehicles - Small objects near thin walls - Any body with speed > size/dt (tunneling risk)",
    "exports": [
      {
        "name": "GPUContinuousCollision",
        "kind": "class",
        "signature": "class GPUContinuousCollision",
        "summary": ""
      },
      {
        "name": "createContinuousCollision",
        "kind": "function",
        "signature": "async createContinuousCollision(device, worldBuffers, narrowphaseBuffers, options = {})",
        "summary": ""
      },
      {
        "name": "destroyContinuousCollision",
        "kind": "function",
        "signature": "destroyContinuousCollision(ccd)",
        "summary": ""
      },
      {
        "name": "CCD_FLAG_BIT",
        "kind": "constant",
        "signature": "CCD_FLAG_BIT",
        "summary": ""
      },
      {
        "name": "MAX_CCD_PAIRS",
        "kind": "constant",
        "signature": "MAX_CCD_PAIRS",
        "summary": ""
      },
      {
        "name": "CCD_SLOP",
        "kind": "constant",
        "signature": "CCD_SLOP",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPUConvexHull",
    "path": "engine/reference/sim/physics/gpu/GPUConvexHull.md",
    "source": "engine/sim/physics/gpu/GPUConvexHull.js",
    "import": "/engine/sim/physics/gpu/GPUConvexHull.js",
    "sourceHash": "390c5d2c611fcf93ca1db4240f8c222664363e2c3fb1f3322cc7916fc6e0cfc3",
    "summary": "GPUConvexHull.js — CPU-side Quickhull 3D + GPU Buffer Helpers Computes convex hulls from vertex data (runs once at cook time, not per-frame). Produces GPU-compatible hull data for narrowphase collision detection. PhysX 5 GPU limits enforced: - Max 64 vertices per hull - Max 32 vertices per face - Hulls exceeding these limits are simplified Algorithm: Incremental Quickhull 3D - Find initial tetrahedron from extreme points - Iteratively add furthest point from each face - Expand horizon edges, rebuild faces Also builds precomputed support maps for GJK: - For 128 sampled directions, store the support vertex index - Enables O(1) support queries on GPU",
    "exports": [
      {
        "name": "computeConvexHull",
        "kind": "function",
        "signature": "computeConvexHull(vertices, options = {})",
        "summary": "Compute a 3D convex hull from a set of vertices."
      },
      {
        "name": "buildSupportMap",
        "kind": "function",
        "signature": "buildSupportMap(hull, numDirections = SUPPORT_MAP_DIRECTIONS)",
        "summary": "Build precomputed support map for fast GPU GJK. For each of N uniformly sampled directions, stores the index of the furthest vertex in that direction."
      },
      {
        "name": "hullToGPUBuffer",
        "kind": "function",
        "signature": "hullToGPUBuffer(device, hull, supportMap = null)",
        "summary": "Upload hull data to a GPU buffer for narrowphase use. Layout: [vertexCount(u32), faceCount(u32), pad, pad] + [vertices (vec4)] + [normals (vec4)] + [supportMap (u32)]"
      },
      {
        "name": "hullHalfExtents",
        "kind": "function",
        "signature": "hullHalfExtents(hull)",
        "summary": "Compute AABB half-extents from hull vertices (for broadphase)."
      },
      {
        "name": "MAX_HULL_VERTICES",
        "kind": "constant",
        "signature": "MAX_HULL_VERTICES",
        "summary": ""
      },
      {
        "name": "MAX_HULL_FACES",
        "kind": "constant",
        "signature": "MAX_HULL_FACES",
        "summary": ""
      },
      {
        "name": "MAX_VERTS_PER_FACE",
        "kind": "constant",
        "signature": "MAX_VERTS_PER_FACE",
        "summary": ""
      },
      {
        "name": "SUPPORT_MAP_DIRECTIONS",
        "kind": "constant",
        "signature": "SUPPORT_MAP_DIRECTIONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPUHeightfield",
    "path": "engine/reference/sim/physics/gpu/GPUHeightfield.md",
    "source": "engine/sim/physics/gpu/GPUHeightfield.js",
    "import": "/engine/sim/physics/gpu/GPUHeightfield.js",
    "sourceHash": "4795645c9bbdbe8fb18921a2fd8327edef15a0aba2f86f40a4eb16093a0f3975",
    "summary": "GPUHeightfield.js — GPU Terrain Heightfield Collider Heightmap-based terrain collision for GPU physics. Stores a 2D grid of heights, generates contacts against rigid bodies via GPU compute shader. Based on: - PhysX PxHeightField: regular grid, per-sample materials, hole support - Bullet btHeightfieldTerrainShape: bilinear interpolation - Jolt HeightFieldShape: hierarchical BVH for large terrains Features: - Bilinear height interpolation for smooth normals - Per-cell material index (for surface types: grass, rock, mud, etc.) - Hole support (cells with height = NaN are passthrough) - GPU shader: one thread per body, probes heightfield under body AABB - CPU upload of heightmap data (set once or update regions) - Supports terrains up to 1024×1024 (configurable)",
    "exports": [
      {
        "name": "GPUHeightfield",
        "kind": "class",
        "signature": "class GPUHeightfield",
        "summary": ""
      },
      {
        "name": "createHeightfield",
        "kind": "function",
        "signature": "async createHeightfield(device, worldBuffers, narrowphaseBuffers, options = {})",
        "summary": ""
      },
      {
        "name": "destroyHeightfield",
        "kind": "function",
        "signature": "destroyHeightfield(hf)",
        "summary": ""
      },
      {
        "name": "DEFAULT_HEIGHTFIELD_SIZE",
        "kind": "constant",
        "signature": "DEFAULT_HEIGHTFIELD_SIZE",
        "summary": ""
      },
      {
        "name": "MAX_HEIGHTFIELD_SIZE",
        "kind": "constant",
        "signature": "MAX_HEIGHTFIELD_SIZE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPUMeshDeform",
    "path": "engine/reference/sim/physics/gpu/GPUMeshDeform.md",
    "source": "engine/sim/physics/gpu/GPUMeshDeform.js",
    "import": "/engine/sim/physics/gpu/GPUMeshDeform.js",
    "sourceHash": "44e8f155bfe6a2753faf99d81ea708e3b4b6a6903f6ba3cd07150dcd39e85c24",
    "summary": "GPUMeshDeform.js — GPU-accelerated vertex displacement for impact dents Fast-path for small impacts: pushes vertices inward within a radius around the impact point, weighted by distance. Runs in <1ms on GPU vs 50-200ms for the full voxelize→SDF→marching cubes CPU pipeline. Also includes a normal recalculation pass (GAP 4). Usage: const deformer = new GPUMeshDeform(device); const result = await deformer.applyDent(positions, indices, { impactPoint: [x, y, z], impactNormal: [nx, ny, nz], radius: 0.3, depth: 0.1, }); // result.positions — Float32Array of deformed positions // result.normals   — Float32Array of recalculated normals",
    "exports": [
      {
        "name": "GPUMeshDeform",
        "kind": "class",
        "signature": "class GPUMeshDeform",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPUNarrowphase",
    "path": "engine/reference/sim/physics/gpu/GPUNarrowphase.md",
    "source": "engine/sim/physics/gpu/GPUNarrowphase.js",
    "import": "/engine/sim/physics/gpu/GPUNarrowphase.js",
    "sourceHash": "95d8607fc7ba61b68d25076b39bd6cd16f81c1b591b2e2437f1b48f6faa1fd0a",
    "summary": "GPUNarrowphase.js — GPU Compute Contact Generation Analytic shape-shape collision tests on GPU compute shaders. Processes candidate pairs from GPUBroadphase, generates contact manifold. Supported shape pairs: - sphere–sphere, sphere–box, sphere–capsule - box–box (SAT, 15 separating axes) - capsule–capsule (closest points on two line segments) - capsule–box (segment vs box faces) - ground plane (infinite y=0, special-cased) Contact manifold uses Persistent Contact Manifold (PCM) approach: - Contacts stored with local-frame anchors for sub-step updating - Feature IDs for warm-start matching across frames - OGC barrier energy for penetration prevention Based on: - PhysX 5 GPU: PCM required for GPU contact gen - PhysX 5: convex hulls capped at 64 verts for GPU compat - Box2D v3 TGS: sub-step contact separation update via local anchors - OGCContact.js: barrier energy WGSL module",
    "exports": [
      {
        "name": "GPUNarrowphase",
        "kind": "class",
        "signature": "class GPUNarrowphase",
        "summary": ""
      },
      {
        "name": "createNarrowphase",
        "kind": "function",
        "signature": "async createNarrowphase(device, worldBuffers, broadphaseBuffers, options = {})",
        "summary": ""
      },
      {
        "name": "destroyNarrowphase",
        "kind": "function",
        "signature": "destroyNarrowphase(np)",
        "summary": ""
      },
      {
        "name": "CONTACT_STRIDE",
        "kind": "constant",
        "signature": "CONTACT_STRIDE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPURaycast",
    "path": "engine/reference/sim/physics/gpu/GPURaycast.md",
    "source": "engine/sim/physics/gpu/GPURaycast.js",
    "import": "/engine/sim/physics/gpu/GPURaycast.js",
    "sourceHash": "20a313e377b83ce174da4c34fded510b85ea707175fa77faef20693db6295adc",
    "summary": "GPURaycast.js — GPU Compute Parallel Raycast Casts rays against all rigid bodies on the GPU. Each thread tests one body, writes closest hit to output. Reduction pass finds global closest hit across all threads. Result returned via async readback (Promise). Also provides CPU fallback for synchronous raycasting against CPU shadow data (1-frame lag, but instant). Shape-ray tests: - ray-sphere (geometric closest approach) - ray-box (slab method) - ray-capsule (ray-segment closest point + sphere test)",
    "exports": [
      {
        "name": "GPURaycast",
        "kind": "class",
        "signature": "class GPURaycast",
        "summary": ""
      },
      {
        "name": "gpuRaycastCPU",
        "kind": "function",
        "signature": "gpuRaycastCPU(world, origin, direction, maxDistance = 1000)",
        "summary": "Synchronous CPU raycast against CPU shadow data (1-frame lag). Use when async GPU raycast is too slow or when GPU is busy."
      },
      {
        "name": "createGPURaycast",
        "kind": "function",
        "signature": "async createGPURaycast(device, worldBuffers, options = {})",
        "summary": ""
      },
      {
        "name": "destroyGPURaycast",
        "kind": "function",
        "signature": "destroyGPURaycast(rc)",
        "summary": ""
      },
      {
        "name": "gpuRaycast",
        "kind": "function",
        "signature": "async gpuRaycast(rc, world, origin, direction, maxDistance = 1000)",
        "summary": "GPU raycast (async)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPURigidBodyWorld",
    "path": "engine/reference/sim/physics/gpu/GPURigidBodyWorld.md",
    "source": "engine/sim/physics/gpu/GPURigidBodyWorld.js",
    "import": "/engine/sim/physics/gpu/GPURigidBodyWorld.js",
    "sourceHash": "179a5bc09d7daca5a25846e7075c5505364ad3e049710b3162be6c330e9c7fa7",
    "summary": "GPURigidBodyWorld.js — GPU Compute Rigid Body Physics World Custom WebGPU compute-based rigid body simulation engine. Runs broadphase, narrowphase, constraint solving, and integration entirely on the GPU via WGSL compute shaders. Architecture based on: - TGS_Soft solver (Erin Catto, Box2D v3 Solver2D, Feb 2024) Sub-stepping + warm starting + soft constraints + relaxation - XPBD compliance (Macklin 2016) for stiffness-independent constraints - Small Steps (Macklin 2019) for sub-step contact updating - PhysX 5 GPU rigid bodies: fixed pre-allocated buffers, D6-native joints - Jolt + Box2D v3: simulation islands via union-find, per-island sleep - Delta-position formulation (Catto) to avoid FP cancellation far from origin - Graph-colored parallel Gauss-Seidel (Fratarcangeli et al.) - GPU Gems 3 Ch.29: spatial hash broadphase, 27-neighbor cell queries SoA buffer layout for cache-coherent GPU access. All WGSL shaders embedded as template literals (matches codebase pattern).",
    "exports": [
      {
        "name": "GPURigidBodyWorld",
        "kind": "class",
        "signature": "class GPURigidBodyWorld",
        "summary": ""
      },
      {
        "name": "createGPUPhysicsWorld",
        "kind": "function",
        "signature": "async createGPUPhysicsWorld(device, options = {})",
        "summary": "Create a GPU physics world."
      },
      {
        "name": "destroyGPUPhysicsWorld",
        "kind": "function",
        "signature": "destroyGPUPhysicsWorld(world)",
        "summary": ""
      },
      {
        "name": "gpuCreateBody",
        "kind": "function",
        "signature": "gpuCreateBody(world, desc)",
        "summary": ""
      },
      {
        "name": "gpuRemoveBody",
        "kind": "function",
        "signature": "gpuRemoveBody(world, handle)",
        "summary": ""
      },
      {
        "name": "gpuGetBody",
        "kind": "function",
        "signature": "gpuGetBody(world, handle)",
        "summary": ""
      },
      {
        "name": "gpuSetBodyKinematic",
        "kind": "function",
        "signature": "gpuSetBodyKinematic(world, handle, enabled)",
        "summary": ""
      },
      {
        "name": "gpuApplyForce",
        "kind": "function",
        "signature": "gpuApplyForce(world, handle, fx, fy, fz)",
        "summary": ""
      },
      {
        "name": "gpuApplyTorque",
        "kind": "function",
        "signature": "gpuApplyTorque(world, handle, tx, ty, tz)",
        "summary": ""
      },
      {
        "name": "gpuStepWorld",
        "kind": "function",
        "signature": "gpuStepWorld(world, dt, broadphase, narrowphase, solver)",
        "summary": "Step the GPU physics world."
      },
      {
        "name": "gpuReadbackAsync",
        "kind": "function",
        "signature": "async gpuReadbackAsync(world)",
        "summary": ""
      },
      {
        "name": "MAX_BODIES",
        "kind": "constant",
        "signature": "MAX_BODIES",
        "summary": ""
      },
      {
        "name": "MAX_CONTACTS",
        "kind": "constant",
        "signature": "MAX_CONTACTS",
        "summary": ""
      },
      {
        "name": "MAX_PAIRS",
        "kind": "constant",
        "signature": "MAX_PAIRS",
        "summary": ""
      },
      {
        "name": "MAX_JOINTS",
        "kind": "constant",
        "signature": "MAX_JOINTS",
        "summary": ""
      },
      {
        "name": "SHAPE_SPHERE",
        "kind": "constant",
        "signature": "SHAPE_SPHERE",
        "summary": ""
      },
      {
        "name": "SHAPE_BOX",
        "kind": "constant",
        "signature": "SHAPE_BOX",
        "summary": ""
      },
      {
        "name": "SHAPE_CAPSULE",
        "kind": "constant",
        "signature": "SHAPE_CAPSULE",
        "summary": ""
      },
      {
        "name": "SHAPE_CONVEX",
        "kind": "constant",
        "signature": "SHAPE_CONVEX",
        "summary": ""
      },
      {
        "name": "SIM_DYNAMIC",
        "kind": "constant",
        "signature": "SIM_DYNAMIC",
        "summary": ""
      },
      {
        "name": "SIM_KINEMATIC",
        "kind": "constant",
        "signature": "SIM_KINEMATIC",
        "summary": ""
      },
      {
        "name": "SIM_STATIC",
        "kind": "constant",
        "signature": "SIM_STATIC",
        "summary": ""
      },
      {
        "name": "DEFAULT_SUBSTEPS",
        "kind": "constant",
        "signature": "DEFAULT_SUBSTEPS",
        "summary": ""
      },
      {
        "name": "DEFAULT_ITERATIONS",
        "kind": "constant",
        "signature": "DEFAULT_ITERATIONS",
        "summary": ""
      },
      {
        "name": "DEFAULT_MAX_SUBSTEPS",
        "kind": "constant",
        "signature": "DEFAULT_MAX_SUBSTEPS",
        "summary": ""
      },
      {
        "name": "DEFAULT_SLEEP_FRAMES",
        "kind": "constant",
        "signature": "DEFAULT_SLEEP_FRAMES",
        "summary": ""
      },
      {
        "name": "DEFAULT_SLEEP_THRESHOLD",
        "kind": "constant",
        "signature": "DEFAULT_SLEEP_THRESHOLD",
        "summary": ""
      },
      {
        "name": "DEFAULT_MAX_DEPENETRATION_VEL",
        "kind": "constant",
        "signature": "DEFAULT_MAX_DEPENETRATION_VEL",
        "summary": ""
      },
      {
        "name": "DEFAULT_CONTACT_OFFSET",
        "kind": "constant",
        "signature": "DEFAULT_CONTACT_OFFSET",
        "summary": ""
      },
      {
        "name": "DEFAULT_REST_OFFSET",
        "kind": "constant",
        "signature": "DEFAULT_REST_OFFSET",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPUSceneQuery",
    "path": "engine/reference/sim/physics/gpu/GPUSceneQuery.md",
    "source": "engine/sim/physics/gpu/GPUSceneQuery.js",
    "import": "/engine/sim/physics/gpu/GPUSceneQuery.js",
    "sourceHash": "1d6352c4fe7cd4711f361164884b37033bafc50c6d8f3b7832ca0a308de7de0e",
    "summary": "GPUSceneQuery.js — GPU Scene Queries (Overlap, Sweep, Shape Cast) PhysX-style scene query system for spatial queries against the physics world. Supports overlap tests, sweep/shape casts, and multi-hit collection. Features: - Sphere/Box/Capsule overlap tests (find all bodies overlapping a shape) - Sphere/Box sweep (shape cast along a direction, find first/all hits) - Closest-hit and multi-hit modes - Layer/mask filtering - CPU-side for low-latency (synchronous results), uses CPU shadow data Based on: - PhysX PxScene::overlap(), sweep(), raycast() - PhysX PxOverlapBuffer, PxSweepBuffer - Jolt NarrowPhaseQuery: CastShape, CollideShape CPU-only implementation (not GPU compute) because: - Scene queries are typically 1-10 per frame (not thousands) - Need synchronous results (gameplay logic depends on them immediately) - GPU readback latency would negate the benefit",
    "exports": [
      {
        "name": "GPUSceneQuery",
        "kind": "class",
        "signature": "class GPUSceneQuery",
        "summary": ""
      },
      {
        "name": "createSceneQuery",
        "kind": "function",
        "signature": "createSceneQuery(world)",
        "summary": ""
      },
      {
        "name": "QUERY_CLOSEST",
        "kind": "constant",
        "signature": "QUERY_CLOSEST",
        "summary": ""
      },
      {
        "name": "QUERY_ALL",
        "kind": "constant",
        "signature": "QUERY_ALL",
        "summary": ""
      },
      {
        "name": "QUERY_ANY",
        "kind": "constant",
        "signature": "QUERY_ANY",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPUSoftBody",
    "path": "engine/reference/sim/physics/gpu/GPUSoftBody.md",
    "source": "engine/sim/physics/gpu/GPUSoftBody.js",
    "import": "/engine/sim/physics/gpu/GPUSoftBody.js",
    "sourceHash": "130b66425bc7aa1bc4f359d011bbb9476c5844491fa49386739dd269e2ace7d3",
    "summary": "GPUSoftBody.js — GPU FEM Soft Body Simulation Finite Element Method (FEM) soft body using tetrahedral meshes. PhysX 5's signature GPU feature — deformable materials like rubber, jelly, flesh, foam, etc. Based on: - PhysX 5 FEM Soft Bodies: tetrahedral simulation mesh + collision mesh - Müller et al. \"Real Time Physics\" (XPBD for FEM) - Smith et al. \"Stable Neo-Hookean Flesh Simulation\" (SIGGRAPH 2018) - Irving et al. \"Invertible Finite Elements\" (SIGGRAPH 2004) Architecture: - Tetrahedral mesh defines volume elements - Each tet has a rest-state inverse matrix (Dm_inv) - Per-frame: compute deformation gradient F, strain, stress → nodal forces - GPU shader: one thread per tetrahedron - Supports Neo-Hookean and co-rotational constitutive models - Nodes can be pinned (fixed) or coupled to rigid bodies Material properties: - Young's modulus E: stiffness (rubber ~1MPa, steel ~200GPa) - Poisson's ratio ν: incompressibility (rubber ~0.49, steel ~0.3) - Damping: velocity proportional damping",
    "exports": [
      {
        "name": "GPUSoftBody",
        "kind": "class",
        "signature": "class GPUSoftBody",
        "summary": ""
      },
      {
        "name": "lameParameters",
        "kind": "function",
        "signature": "lameParameters(youngsModulus, poissonRatio)",
        "summary": "Lamé parameters from Young's modulus and Poisson's ratio."
      },
      {
        "name": "createSoftBodySolver",
        "kind": "function",
        "signature": "async createSoftBodySolver(device, options = {})",
        "summary": ""
      },
      {
        "name": "destroySoftBodySolver",
        "kind": "function",
        "signature": "destroySoftBodySolver(sb)",
        "summary": ""
      },
      {
        "name": "MAX_SOFT_BODY_NODES",
        "kind": "constant",
        "signature": "MAX_SOFT_BODY_NODES",
        "summary": ""
      },
      {
        "name": "MAX_SOFT_BODY_TETS",
        "kind": "constant",
        "signature": "MAX_SOFT_BODY_TETS",
        "summary": ""
      },
      {
        "name": "CONSTITUTIVE_COROTATIONAL",
        "kind": "constant",
        "signature": "CONSTITUTIVE_COROTATIONAL",
        "summary": ""
      },
      {
        "name": "CONSTITUTIVE_NEOHOOKEAN",
        "kind": "constant",
        "signature": "CONSTITUTIVE_NEOHOOKEAN",
        "summary": ""
      },
      {
        "name": "SOFT_BODY_MATERIALS",
        "kind": "constant",
        "signature": "SOFT_BODY_MATERIALS",
        "summary": "Material presets (Young's modulus in Pa, Poisson's ratio)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPUTriangleMesh",
    "path": "engine/reference/sim/physics/gpu/GPUTriangleMesh.md",
    "source": "engine/sim/physics/gpu/GPUTriangleMesh.js",
    "import": "/engine/sim/physics/gpu/GPUTriangleMesh.js",
    "sourceHash": "6901246bf342970d88c2cdea51fc6c9b8c2d8dfafc46f9ef4034940035c7ee16",
    "summary": "GPUTriangleMesh.js — GPU Triangle Mesh Static Collider Collision detection against static triangle meshes on GPU. Used for environment geometry (terrain, buildings, props) that doesn't move but needs accurate concave collision. Based on: - PhysX PxTriangleMeshGeometry: cooked triangle mesh with BVH - PhysX GPU: buildGPUData flag for GPU-accelerated triangle mesh contacts - Embree-style BVH: AABB tree for triangle culling Architecture: - CPU: Cook mesh → build BVH → upload to GPU buffers - GPU: Per-body shader traverses BVH, tests triangles in leaf nodes - Generates contacts into the shared narrowphase contact buffer Limitations (matching PhysX): - Triangle meshes are STATIC only (no deformation at runtime) - For deformable meshes, use GPUSoftBody.js instead - Max 65536 triangles per mesh (GPU buffer limit, configurable) - Max 16 meshes registered simultaneously",
    "exports": [
      {
        "name": "GPUTriangleMesh",
        "kind": "class",
        "signature": "class GPUTriangleMesh",
        "summary": ""
      },
      {
        "name": "buildTriangleMeshBVH",
        "kind": "function",
        "signature": "buildTriangleMeshBVH(vertices, indices)",
        "summary": "Build a BVH from triangle data for GPU traversal. Uses surface area heuristic (SAH) median split."
      },
      {
        "name": "createTriangleMesh",
        "kind": "function",
        "signature": "async createTriangleMesh(device, worldBuffers, narrowphaseBuffers, options = {})",
        "summary": ""
      },
      {
        "name": "destroyTriangleMesh",
        "kind": "function",
        "signature": "destroyTriangleMesh(tm)",
        "summary": ""
      },
      {
        "name": "MAX_TRIMESH_TRIANGLES",
        "kind": "constant",
        "signature": "MAX_TRIMESH_TRIANGLES",
        "summary": ""
      },
      {
        "name": "MAX_TRIMESH_VERTICES",
        "kind": "constant",
        "signature": "MAX_TRIMESH_VERTICES",
        "summary": ""
      },
      {
        "name": "MAX_TRIMESH_INSTANCES",
        "kind": "constant",
        "signature": "MAX_TRIMESH_INSTANCES",
        "summary": ""
      },
      {
        "name": "MAX_BVH_NODES",
        "kind": "constant",
        "signature": "MAX_BVH_NODES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPUTriggerSystem",
    "path": "engine/reference/sim/physics/gpu/GPUTriggerSystem.md",
    "source": "engine/sim/physics/gpu/GPUTriggerSystem.js",
    "import": "/engine/sim/physics/gpu/GPUTriggerSystem.js",
    "sourceHash": "6663a4a35e282d2f31f6cb0a80375e7e997de7ec1bf15c0aba91ec64df4611e5",
    "summary": "GPUTriggerSystem.js — Trigger Volumes & Contact Event System GPU-accelerated trigger overlap detection and contact event generation. Mirrors PhysX's onContact/onTrigger callback system. Features: - Trigger volumes: AABB overlap tests on GPU, event dispatch on CPU - Contact events: begin/persist/end contact tracking with entity IDs - Event buffering: GPU writes events, CPU reads back and dispatches - Pair tracking: persistent pair state across frames for begin/end detection Based on: - PhysX PxSimulationEventCallback: onContact, onTrigger, onConstraintBreak - PhysX PxPairFlag: eNOTIFY_TOUCH_FOUND, eNOTIFY_TOUCH_PERSISTS, eNOTIFY_TOUCH_LOST - PhysX PxShapeFlagEnum: eTRIGGER_SHAPE (no contact response, only overlap events)",
    "exports": [
      {
        "name": "GPUTriggerSystem",
        "kind": "class",
        "signature": "class GPUTriggerSystem",
        "summary": ""
      },
      {
        "name": "createTriggerSystem",
        "kind": "function",
        "signature": "async createTriggerSystem(device, worldBuffers, broadphaseBuffers, narrowphaseBuffers, options = {})",
        "summary": ""
      },
      {
        "name": "destroyTriggerSystem",
        "kind": "function",
        "signature": "destroyTriggerSystem(sys)",
        "summary": ""
      },
      {
        "name": "MAX_TRIGGER_EVENTS",
        "kind": "constant",
        "signature": "MAX_TRIGGER_EVENTS",
        "summary": ""
      },
      {
        "name": "MAX_CONTACT_EVENTS",
        "kind": "constant",
        "signature": "MAX_CONTACT_EVENTS",
        "summary": ""
      },
      {
        "name": "TRIGGER_ENTER",
        "kind": "constant",
        "signature": "TRIGGER_ENTER",
        "summary": ""
      },
      {
        "name": "TRIGGER_STAY",
        "kind": "constant",
        "signature": "TRIGGER_STAY",
        "summary": ""
      },
      {
        "name": "TRIGGER_EXIT",
        "kind": "constant",
        "signature": "TRIGGER_EXIT",
        "summary": ""
      },
      {
        "name": "CONTACT_BEGIN",
        "kind": "constant",
        "signature": "CONTACT_BEGIN",
        "summary": ""
      },
      {
        "name": "CONTACT_PERSIST",
        "kind": "constant",
        "signature": "CONTACT_PERSIST",
        "summary": ""
      },
      {
        "name": "CONTACT_END",
        "kind": "constant",
        "signature": "CONTACT_END",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/GPUVehicle",
    "path": "engine/reference/sim/physics/gpu/GPUVehicle.md",
    "source": "engine/sim/physics/gpu/GPUVehicle.js",
    "import": "/engine/sim/physics/gpu/GPUVehicle.js",
    "sourceHash": "2b44911b9bf1a4f14a69712d5180bc5033cae54649ad77a70a487de1285b5160",
    "summary": "GPUVehicle.js — GPU-Accelerated Vehicle Physics Arcade-to-simulation vehicle system running on GPU compute. Models wheels, suspension, engine, transmission, steering, and drivetrain. Based on: - PhysX 5 Vehicle SDK: suspension raycasts, tire model, drivetrain - Bullet Vehicle: raycast vehicle with Pacejka tire friction - Marco Monster's \"Car Physics for Games\" (classic reference) - Brian Beckman's \"Physics of Racing\" series Architecture: - Vehicle is a rigid body in GPURigidBodyWorld with attached wheel descriptors - Each frame: suspension raycasts → tire forces → engine torque → apply to chassis body - GPU shader handles all wheels in parallel (one thread per wheel across all vehicles) - CPU manages gear shifts, input mapping, and vehicle creation Tire model: simplified Pacejka \"Magic Formula\" F = D * sin(C * atan(B * slip - E * (B * slip - atan(B * slip)))) Simplified to: F = peakForce * sin(2 * atan(slip / peakSlip))",
    "exports": [
      {
        "name": "GPUVehicleManager",
        "kind": "class",
        "signature": "class GPUVehicleManager",
        "summary": ""
      },
      {
        "name": "createVehicleManager",
        "kind": "function",
        "signature": "async createVehicleManager(device, worldBuffers, options = {})",
        "summary": ""
      },
      {
        "name": "destroyVehicleManager",
        "kind": "function",
        "signature": "destroyVehicleManager(mgr)",
        "summary": ""
      },
      {
        "name": "MAX_VEHICLES",
        "kind": "constant",
        "signature": "MAX_VEHICLES",
        "summary": ""
      },
      {
        "name": "MAX_WHEELS_PER_VEHICLE",
        "kind": "constant",
        "signature": "MAX_WHEELS_PER_VEHICLE",
        "summary": ""
      },
      {
        "name": "MAX_TOTAL_WHEELS",
        "kind": "constant",
        "signature": "MAX_TOTAL_WHEELS",
        "summary": ""
      },
      {
        "name": "DRIVE_FRONT",
        "kind": "constant",
        "signature": "DRIVE_FRONT",
        "summary": ""
      },
      {
        "name": "DRIVE_REAR",
        "kind": "constant",
        "signature": "DRIVE_REAR",
        "summary": ""
      },
      {
        "name": "DRIVE_AWD",
        "kind": "constant",
        "signature": "DRIVE_AWD",
        "summary": ""
      },
      {
        "name": "GEAR_REVERSE",
        "kind": "constant",
        "signature": "GEAR_REVERSE",
        "summary": ""
      },
      {
        "name": "GEAR_NEUTRAL",
        "kind": "constant",
        "signature": "GEAR_NEUTRAL",
        "summary": ""
      },
      {
        "name": "GEAR_1",
        "kind": "constant",
        "signature": "GEAR_1",
        "summary": ""
      },
      {
        "name": "GEAR_2",
        "kind": "constant",
        "signature": "GEAR_2",
        "summary": ""
      },
      {
        "name": "GEAR_3",
        "kind": "constant",
        "signature": "GEAR_3",
        "summary": ""
      },
      {
        "name": "GEAR_4",
        "kind": "constant",
        "signature": "GEAR_4",
        "summary": ""
      },
      {
        "name": "GEAR_5",
        "kind": "constant",
        "signature": "GEAR_5",
        "summary": ""
      },
      {
        "name": "GEAR_6",
        "kind": "constant",
        "signature": "GEAR_6",
        "summary": ""
      },
      {
        "name": "WHEEL_PRESETS",
        "kind": "constant",
        "signature": "WHEEL_PRESETS",
        "summary": "Default wheel presets for common vehicle types."
      },
      {
        "name": "ENGINE_PRESETS",
        "kind": "constant",
        "signature": "ENGINE_PRESETS",
        "summary": "Default engine/transmission presets."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/gpu/index",
    "path": "engine/reference/sim/physics/gpu/index.md",
    "source": "engine/sim/physics/gpu/index.js",
    "import": "/engine/sim/physics/gpu/index.js",
    "sourceHash": "05fc583617fc16c19ec15b21a725e420ca64ab962ead7239bebdd15d38bf41be",
    "summary": "GPU Physics Engine — Barrel Export Standalone WebGPU compute-based rigid body physics engine. Full PhysX 5 feature parity via WebGPU compute shaders. Import from this file to access all GPU physics components. Usage: import { createGPUPhysicsWorld, createBroadphase, ... } from './gpu/index.js'; ═══════════════════════════════════════════════════════════════ Core Rigid Body Pipeline (7 files): GPURigidBodyWorld   — World, bodies, integration, islands, readback GPUBroadphase       — Spatial hash broadphase, AABB, pair finding GPUNarrowphase      — Shape-shape contact generation (PCM) GPUConstraintSolver  — TGS_Soft contacts + D6 joints + relaxation GPUConvexHull       — Quickhull 3D, support maps, GPU upload GPURaycast          — GPU parallel raycast + CPU fallback GPUContinuousCollision — Speculative CCD (AABB expansion + TOI) Extended Simulation (4 files): GPUVehicle              — Wheels, suspension, Pacejka tires, drivetrain GPUCharacterController  — Kinematic CCT (slide-move, step climb, slope limit) GPUSoftBody             — FEM soft body (tetrahedral, co-rotational elasticity) GPUTriggerSystem        — Trigger volumes + contact events (enter/stay/exit) Geometry & Queries (4 files): GPUSceneQuery       — Overlap tests, sweep/shape casts GPUHeightfield      — Terrain heightfield collider (bilinear, materials, holes) GPUTriangleMesh     — Static triangle mesh collider (BVH traversal) ═══════════════════════════════════════════════════════════════ Existing Engine Systems (already built, import from parent): ../GPUClothSolver.js       — PBD cloth (small substeps + OGC contact) ../GPUArticulationSolver.js — Articulated chains (Cosserat rods) ../GPUSpatialHash.js       — Morton-code spatial hash (GPU Gems 3) ../SDFCollision.js         — SDF mesh geometry (PhysX 5 style) ../PBDSolver.js            — Position-Based Dynamics (XPBD, graph coloring) ../MLSMPMSolver.js         — MLS-MPM soft body (snow, sand, jelly) ../OGCContact.js           — Offset Geometric Contact (SIGGRAPH 2025) ../SpeculativeContacts.js  — CPU speculative CCD ../ShockPropagation.js     — Shock propagation (Guendelman 2003) ../VoronoiFracture.js      — Voronoi destruction (Blast SDK equivalent) ../ConvexDecomposition.js  — V-HACD convex decomposition ../VoxelMeshCollision.js   — Voxelized mesh collider (LOD) ../DynamicMeshCollider.js  — Runtime mesh collider updates ═══════════════════════════════════════════════════════════════",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/index",
    "path": "engine/reference/sim/physics/index.md",
    "source": "engine/sim/physics/index.js",
    "import": "/engine/sim/physics/index.js",
    "sourceHash": "6862f9c63d155db3b4e8832b8074d2e54f19244f0cd6a8bef3353328d209f3c1",
    "summary": "engine/sim/physics/index.js - Physics Systems Barrel Export",
    "exports": [
      {
        "name": "ANCHOR_COMPONENT_ID",
        "kind": "re-export",
        "signature": "ANCHOR_COMPONENT_ID",
        "summary": ""
      },
      {
        "name": "ANCHOR_TYPE",
        "kind": "re-export",
        "signature": "ANCHOR_TYPE",
        "summary": ""
      },
      {
        "name": "AngleConstraint",
        "kind": "re-export",
        "signature": "AngleConstraint",
        "summary": ""
      },
      {
        "name": "AttachmentConstraint",
        "kind": "re-export",
        "signature": "AttachmentConstraint",
        "summary": ""
      },
      {
        "name": "BARRIER_ACTIVATION_RATIO",
        "kind": "re-export",
        "signature": "BARRIER_ACTIVATION_RATIO",
        "summary": ""
      },
      {
        "name": "COLLIDER_SCHEMA",
        "kind": "re-export",
        "signature": "COLLIDER_SCHEMA",
        "summary": ""
      },
      {
        "name": "COLLIDER_SHAPES",
        "kind": "re-export",
        "signature": "COLLIDER_SHAPES",
        "summary": ""
      },
      {
        "name": "COLLISION_LAYERS",
        "kind": "re-export",
        "signature": "COLLISION_LAYERS",
        "summary": ""
      },
      {
        "name": "CONNECTIVITY_MAX_ITERATIONS",
        "kind": "re-export",
        "signature": "CONNECTIVITY_MAX_ITERATIONS",
        "summary": ""
      },
      {
        "name": "CONNECTIVITY_WORKGROUP_SIZE",
        "kind": "re-export",
        "signature": "CONNECTIVITY_WORKGROUP_SIZE",
        "summary": ""
      },
      {
        "name": "CapsuleCollider",
        "kind": "re-export",
        "signature": "CapsuleCollider",
        "summary": ""
      },
      {
        "name": "ConnectivityCompute",
        "kind": "re-export",
        "signature": "ConnectivityCompute",
        "summary": ""
      },
      {
        "name": "ConstitutiveModel",
        "kind": "re-export",
        "signature": "ConstitutiveModel",
        "summary": ""
      },
      {
        "name": "ConstraintType",
        "kind": "re-export",
        "signature": "ConstraintType",
        "summary": ""
      },
      {
        "name": "D6_AXES",
        "kind": "re-export",
        "signature": "D6_AXES",
        "summary": ""
      },
      {
        "name": "D6_DRIVES",
        "kind": "re-export",
        "signature": "D6_DRIVES",
        "summary": ""
      },
      {
        "name": "D6_MOTION",
        "kind": "re-export",
        "signature": "D6_MOTION",
        "summary": ""
      },
      {
        "name": "DECIMATION_GRID_SIZE",
        "kind": "re-export",
        "signature": "DECIMATION_GRID_SIZE",
        "summary": ""
      },
      {
        "name": "DECOMPOSITION_DEFAULTS",
        "kind": "re-export",
        "signature": "DECOMPOSITION_DEFAULTS",
        "summary": ""
      },
      {
        "name": "DEFAULT_CONTACT_RADIUS",
        "kind": "re-export",
        "signature": "DEFAULT_CONTACT_RADIUS",
        "summary": ""
      },
      {
        "name": "DEFAULT_MEASUREMENTS",
        "kind": "re-export",
        "signature": "DEFAULT_MEASUREMENTS",
        "summary": ""
      },
      {
        "name": "DEFAULT_TARGET_RATIO",
        "kind": "re-export",
        "signature": "DEFAULT_TARGET_RATIO",
        "summary": ""
      },
      {
        "name": "DecimationEdge",
        "kind": "re-export",
        "signature": "DecimationEdge",
        "summary": ""
      },
      {
        "name": "DecimationTriangle",
        "kind": "re-export",
        "signature": "DecimationTriangle",
        "summary": ""
      },
      {
        "name": "DecimationVertex",
        "kind": "re-export",
        "signature": "DecimationVertex",
        "summary": ""
      },
      {
        "name": "DistanceConstraint",
        "kind": "re-export",
        "signature": "DistanceConstraint",
        "summary": ""
      },
      {
        "name": "EMPTY_COMPONENT_ID",
        "kind": "re-export",
        "signature": "EMPTY_COMPONENT_ID",
        "summary": ""
      },
      {
        "name": "Earthquake",
        "kind": "re-export",
        "signature": "Earthquake",
        "summary": ""
      },
      {
        "name": "FRACTURE_PATTERNS",
        "kind": "re-export",
        "signature": "FRACTURE_PATTERNS",
        "summary": ""
      },
      {
        "name": "FaultLine",
        "kind": "re-export",
        "signature": "FaultLine",
        "summary": ""
      },
      {
        "name": "FragmentManager",
        "kind": "re-export",
        "signature": "FragmentManager",
        "summary": ""
      },
      {
        "name": "FragmentPhysics",
        "kind": "re-export",
        "signature": "FragmentPhysics",
        "summary": ""
      },
      {
        "name": "GPUClothSolver",
        "kind": "re-export",
        "signature": "GPUClothSolver",
        "summary": ""
      },
      {
        "name": "GPUSpatialHashGrid",
        "kind": "re-export",
        "signature": "GPUSpatialHashGrid",
        "summary": ""
      },
      {
        "name": "GPU_CLOTH_DEFAULT_ITERATIONS",
        "kind": "re-export",
        "signature": "GPU_CLOTH_DEFAULT_ITERATIONS",
        "summary": ""
      },
      {
        "name": "GPU_CLOTH_DEFAULT_SUBSTEPS",
        "kind": "re-export",
        "signature": "GPU_CLOTH_DEFAULT_SUBSTEPS",
        "summary": ""
      },
      {
        "name": "GridCell",
        "kind": "re-export",
        "signature": "GridCell",
        "summary": ""
      },
      {
        "name": "JOINT_LIMITS",
        "kind": "re-export",
        "signature": "JOINT_LIMITS",
        "summary": ""
      },
      {
        "name": "JOINT_SCHEMA",
        "kind": "re-export",
        "signature": "JOINT_SCHEMA",
        "summary": ""
      },
      {
        "name": "JOINT_TYPES",
        "kind": "re-export",
        "signature": "JOINT_TYPES",
        "summary": ""
      },
      {
        "name": "JointType",
        "kind": "re-export",
        "signature": "JointType",
        "summary": ""
      },
      {
        "name": "MAX_QEM_ITERATIONS",
        "kind": "re-export",
        "signature": "MAX_QEM_ITERATIONS",
        "summary": ""
      },
      {
        "name": "MLSMPMSolver",
        "kind": "re-export",
        "signature": "MLSMPMSolver",
        "summary": ""
      },
      {
        "name": "MPMParticle",
        "kind": "re-export",
        "signature": "MPMParticle",
        "summary": ""
      },
      {
        "name": "MPM_CELL_SIZE",
        "kind": "re-export",
        "signature": "MPM_CELL_SIZE",
        "summary": ""
      },
      {
        "name": "MPM_DEFAULT_GRID_SIZE",
        "kind": "re-export",
        "signature": "MPM_DEFAULT_GRID_SIZE",
        "summary": ""
      },
      {
        "name": "MagnitudeScale",
        "kind": "re-export",
        "signature": "MagnitudeScale",
        "summary": ""
      },
      {
        "name": "MaterialPresets",
        "kind": "re-export",
        "signature": "MaterialPresets",
        "summary": ""
      },
      {
        "name": "MeshCutter",
        "kind": "re-export",
        "signature": "MeshCutter",
        "summary": ""
      },
      {
        "name": "MeshDecimator",
        "kind": "re-export",
        "signature": "MeshDecimator",
        "summary": ""
      },
      {
        "name": "MeshFragment",
        "kind": "re-export",
        "signature": "MeshFragment",
        "summary": ""
      },
      {
        "name": "MeshParticles",
        "kind": "re-export",
        "signature": "MeshParticles",
        "summary": ""
      },
      {
        "name": "OGCContactManager",
        "kind": "re-export",
        "signature": "OGCContactManager",
        "summary": ""
      },
      {
        "name": "OGC_BARRIER_WGSL",
        "kind": "re-export",
        "signature": "OGC_BARRIER_WGSL",
        "summary": ""
      },
      {
        "name": "OGC_DISTANCE_WGSL",
        "kind": "re-export",
        "signature": "OGC_DISTANCE_WGSL",
        "summary": ""
      },
      {
        "name": "OGC_FIXED_SCALE",
        "kind": "re-export",
        "signature": "OGC_FIXED_SCALE",
        "summary": ""
      },
      {
        "name": "OGC_MIN_DISTANCE",
        "kind": "re-export",
        "signature": "OGC_MIN_DISTANCE",
        "summary": ""
      },
      {
        "name": "OGC_SOLVE_WGSL",
        "kind": "re-export",
        "signature": "OGC_SOLVE_WGSL",
        "summary": ""
      },
      {
        "name": "OGC_WGSL_MODULE",
        "kind": "re-export",
        "signature": "OGC_WGSL_MODULE",
        "summary": ""
      },
      {
        "name": "PBDConstraint",
        "kind": "re-export",
        "signature": "PBDConstraint",
        "summary": ""
      },
      {
        "name": "PBDParticle",
        "kind": "re-export",
        "signature": "PBDParticle",
        "summary": ""
      },
      {
        "name": "PBDRagdoll",
        "kind": "re-export",
        "signature": "PBDRagdoll",
        "summary": ""
      },
      {
        "name": "PBDSolver",
        "kind": "re-export",
        "signature": "PBDSolver",
        "summary": ""
      },
      {
        "name": "PBD_DEFAULT_ITERATIONS",
        "kind": "re-export",
        "signature": "PBD_DEFAULT_ITERATIONS",
        "summary": ""
      },
      {
        "name": "PBD_DEFAULT_SUBSTEPS",
        "kind": "re-export",
        "signature": "PBD_DEFAULT_SUBSTEPS",
        "summary": ""
      },
      {
        "name": "PHYSICS_BODY_SCHEMA",
        "kind": "re-export",
        "signature": "PHYSICS_BODY_SCHEMA",
        "summary": ""
      },
      {
        "name": "PHYSICS_MATERIALS",
        "kind": "re-export",
        "signature": "PHYSICS_MATERIALS",
        "summary": ""
      },
      {
        "name": "PHYSICS_WORLD_SCHEMA",
        "kind": "re-export",
        "signature": "PHYSICS_WORLD_SCHEMA",
        "summary": ""
      },
      {
        "name": "ParticleFlags",
        "kind": "re-export",
        "signature": "ParticleFlags",
        "summary": ""
      },
      {
        "name": "PhysXMeshCooking",
        "kind": "re-export",
        "signature": "PhysXMeshCooking",
        "summary": ""
      },
      {
        "name": "PhysXPhysicsWorld",
        "kind": "re-export",
        "signature": "PhysXPhysicsWorld",
        "summary": ""
      },
      {
        "name": "PhysicsFragment",
        "kind": "re-export",
        "signature": "PhysicsFragment",
        "summary": ""
      },
      {
        "name": "Plane",
        "kind": "re-export",
        "signature": "Plane",
        "summary": ""
      },
      {
        "name": "Quadric",
        "kind": "re-export",
        "signature": "Quadric",
        "summary": ""
      },
      {
        "name": "RagdollBone",
        "kind": "re-export",
        "signature": "RagdollBone",
        "summary": ""
      },
      {
        "name": "RagdollBoneData",
        "kind": "re-export",
        "signature": "RagdollBoneData",
        "summary": ""
      },
      {
        "name": "RagdollState",
        "kind": "re-export",
        "signature": "RagdollState",
        "summary": ""
      },
      {
        "name": "SDFGrid",
        "kind": "re-export",
        "signature": "SDFGrid",
        "summary": ""
      },
      {
        "name": "SDFOperations",
        "kind": "re-export",
        "signature": "SDFOperations",
        "summary": ""
      },
      {
        "name": "SDFPrimitives",
        "kind": "re-export",
        "signature": "SDFPrimitives",
        "summary": ""
      },
      {
        "name": "SEISMIC_PARAMS",
        "kind": "re-export",
        "signature": "SEISMIC_PARAMS",
        "summary": ""
      },
      {
        "name": "SIM_MODES",
        "kind": "re-export",
        "signature": "SIM_MODES",
        "summary": ""
      },
      {
        "name": "SPLINE_RADIUS",
        "kind": "re-export",
        "signature": "SPLINE_RADIUS",
        "summary": ""
      },
      {
        "name": "STANDARD_COLLIDER_MESHES",
        "kind": "re-export",
        "signature": "STANDARD_COLLIDER_MESHES",
        "summary": ""
      },
      {
        "name": "SeismicSystem",
        "kind": "re-export",
        "signature": "SeismicSystem",
        "summary": ""
      },
      {
        "name": "SeismicWave",
        "kind": "re-export",
        "signature": "SeismicWave",
        "summary": ""
      },
      {
        "name": "ShockPropagationSolver",
        "kind": "re-export",
        "signature": "ShockPropagationSolver",
        "summary": ""
      },
      {
        "name": "SpatialHashGrid",
        "kind": "re-export",
        "signature": "SpatialHashGrid",
        "summary": ""
      },
      {
        "name": "SpatialIntegritySystem",
        "kind": "re-export",
        "signature": "SpatialIntegritySystem",
        "summary": ""
      },
      {
        "name": "SpeculativeContactsSolver",
        "kind": "re-export",
        "signature": "SpeculativeContactsSolver",
        "summary": ""
      },
      {
        "name": "StandardColliderMeshes",
        "kind": "re-export",
        "signature": "StandardColliderMeshes",
        "summary": ""
      },
      {
        "name": "StructuralConnection",
        "kind": "re-export",
        "signature": "StructuralConnection",
        "summary": ""
      },
      {
        "name": "StructuralIntegritySolver",
        "kind": "re-export",
        "signature": "StructuralIntegritySolver",
        "summary": ""
      },
      {
        "name": "TreePhysics",
        "kind": "re-export",
        "signature": "TreePhysics",
        "summary": ""
      },
      {
        "name": "TreePhysicsSystem",
        "kind": "re-export",
        "signature": "TreePhysicsSystem",
        "summary": ""
      },
      {
        "name": "TreeVoxelBody",
        "kind": "re-export",
        "signature": "TreeVoxelBody",
        "summary": ""
      },
      {
        "name": "Triangle",
        "kind": "re-export",
        "signature": "Triangle",
        "summary": ""
      },
      {
        "name": "UnifiedDamageSystem",
        "kind": "re-export",
        "signature": "UnifiedDamageSystem",
        "summary": ""
      },
      {
        "name": "Vertex",
        "kind": "re-export",
        "signature": "Vertex",
        "summary": ""
      },
      {
        "name": "VoronoiFracture",
        "kind": "re-export",
        "signature": "VoronoiFracture",
        "summary": ""
      },
      {
        "name": "WAVE_SPEEDS",
        "kind": "re-export",
        "signature": "WAVE_SPEEDS",
        "summary": ""
      },
      {
        "name": "WaveType",
        "kind": "re-export",
        "signature": "WaveType",
        "summary": ""
      },
      {
        "name": "addArticulationToScene",
        "kind": "re-export",
        "signature": "addArticulationToScene",
        "summary": ""
      },
      {
        "name": "applyOGCForce",
        "kind": "re-export",
        "signature": "applyOGCForce",
        "summary": ""
      },
      {
        "name": "applyOGCPositionCorrection",
        "kind": "re-export",
        "signature": "applyOGCPositionCorrection",
        "summary": ""
      },
      {
        "name": "applyShockPropagation",
        "kind": "re-export",
        "signature": "applyShockPropagation",
        "summary": ""
      },
      {
        "name": "barrierEnergy",
        "kind": "re-export",
        "signature": "barrierEnergy",
        "summary": ""
      },
      {
        "name": "barrierForce",
        "kind": "re-export",
        "signature": "barrierForce",
        "summary": ""
      },
      {
        "name": "colorConstraints",
        "kind": "re-export",
        "signature": "colorConstraints",
        "summary": ""
      },
      {
        "name": "computeWeight",
        "kind": "re-export",
        "signature": "computeWeight",
        "summary": ""
      },
      {
        "name": "conservativeDisplacementBound",
        "kind": "re-export",
        "signature": "conservativeDisplacementBound",
        "summary": ""
      },
      {
        "name": "createArticulation",
        "kind": "re-export",
        "signature": "createArticulation",
        "summary": ""
      },
      {
        "name": "createBody",
        "kind": "re-export",
        "signature": "createBody",
        "summary": ""
      },
      {
        "name": "createChildLink",
        "kind": "re-export",
        "signature": "createChildLink",
        "summary": ""
      },
      {
        "name": "createD6Joint",
        "kind": "re-export",
        "signature": "createD6Joint",
        "summary": ""
      },
      {
        "name": "createDecomposedCollider",
        "kind": "re-export",
        "signature": "createDecomposedCollider",
        "summary": ""
      },
      {
        "name": "createDefaultCollider",
        "kind": "re-export",
        "signature": "createDefaultCollider",
        "summary": ""
      },
      {
        "name": "createDefaultJoint",
        "kind": "re-export",
        "signature": "createDefaultJoint",
        "summary": ""
      },
      {
        "name": "createDefaultPhysicsBody",
        "kind": "re-export",
        "signature": "createDefaultPhysicsBody",
        "summary": ""
      },
      {
        "name": "createDefaultPhysicsWorld",
        "kind": "re-export",
        "signature": "createDefaultPhysicsWorld",
        "summary": ""
      },
      {
        "name": "createDistanceJoint",
        "kind": "re-export",
        "signature": "createDistanceJoint",
        "summary": ""
      },
      {
        "name": "createPhysicsWorld",
        "kind": "re-export",
        "signature": "createPhysicsWorld",
        "summary": ""
      },
      {
        "name": "createRevoluteJoint",
        "kind": "re-export",
        "signature": "createRevoluteJoint",
        "summary": ""
      },
      {
        "name": "createRootLink",
        "kind": "re-export",
        "signature": "createRootLink",
        "summary": ""
      },
      {
        "name": "createRope",
        "kind": "re-export",
        "signature": "createRope",
        "summary": ""
      },
      {
        "name": "createSDFFromMesh",
        "kind": "re-export",
        "signature": "createSDFFromMesh",
        "summary": ""
      },
      {
        "name": "createSpatialHashFromVGPU",
        "kind": "re-export",
        "signature": "createSpatialHashFromVGPU",
        "summary": ""
      },
      {
        "name": "createSphericalJoint",
        "kind": "re-export",
        "signature": "createSphericalJoint",
        "summary": ""
      },
      {
        "name": "decimateGrid",
        "kind": "re-export",
        "signature": "decimateGrid",
        "summary": ""
      },
      {
        "name": "decimateQEM",
        "kind": "re-export",
        "signature": "decimateQEM",
        "summary": ""
      },
      {
        "name": "decomposeMesh",
        "kind": "re-export",
        "signature": "decomposeMesh",
        "summary": ""
      },
      {
        "name": "destroyArticulation",
        "kind": "re-export",
        "signature": "destroyArticulation",
        "summary": ""
      },
      {
        "name": "destroyPhysicsWorld",
        "kind": "re-export",
        "signature": "destroyPhysicsWorld",
        "summary": ""
      },
      {
        "name": "distanceToOffsetCapsule",
        "kind": "re-export",
        "signature": "distanceToOffsetCapsule",
        "summary": ""
      },
      {
        "name": "distanceToOffsetEdge",
        "kind": "re-export",
        "signature": "distanceToOffsetEdge",
        "summary": ""
      },
      {
        "name": "distanceToOffsetPlane",
        "kind": "re-export",
        "signature": "distanceToOffsetPlane",
        "summary": ""
      },
      {
        "name": "distanceToOffsetSphere",
        "kind": "re-export",
        "signature": "distanceToOffsetSphere",
        "summary": ""
      },
      {
        "name": "distanceToOffsetTriangle",
        "kind": "re-export",
        "signature": "distanceToOffsetTriangle",
        "summary": ""
      },
      {
        "name": "enablePhysXSpeculativeCCD",
        "kind": "re-export",
        "signature": "enablePhysXSpeculativeCCD",
        "summary": ""
      },
      {
        "name": "expandAABBByVelocity",
        "kind": "re-export",
        "signature": "expandAABBByVelocity",
        "summary": ""
      },
      {
        "name": "getArticulationLinkTransforms",
        "kind": "re-export",
        "signature": "getArticulationLinkTransforms",
        "summary": ""
      },
      {
        "name": "getBody",
        "kind": "re-export",
        "signature": "getBody",
        "summary": ""
      },
      {
        "name": "getColliderShapeId",
        "kind": "re-export",
        "signature": "getColliderShapeId",
        "summary": ""
      },
      {
        "name": "getColliderShapeName",
        "kind": "re-export",
        "signature": "getColliderShapeName",
        "summary": ""
      },
      {
        "name": "getCollisionMask",
        "kind": "re-export",
        "signature": "getCollisionMask",
        "summary": ""
      },
      {
        "name": "getPhysXJointCapabilities",
        "kind": "re-export",
        "signature": "getPhysXJointCapabilities",
        "summary": ""
      },
      {
        "name": "getPhysicsMaterial",
        "kind": "re-export",
        "signature": "getPhysicsMaterial",
        "summary": ""
      },
      {
        "name": "getSimModeId",
        "kind": "re-export",
        "signature": "getSimModeId",
        "summary": ""
      },
      {
        "name": "getSimModeName",
        "kind": "re-export",
        "signature": "getSimModeName",
        "summary": ""
      },
      {
        "name": "groupByColor",
        "kind": "re-export",
        "signature": "groupByColor",
        "summary": ""
      },
      {
        "name": "hashCell",
        "kind": "re-export",
        "signature": "hashCell",
        "summary": ""
      },
      {
        "name": "hullsToCompoundCollider",
        "kind": "re-export",
        "signature": "hullsToCompoundCollider",
        "summary": ""
      },
      {
        "name": "indexTo3D",
        "kind": "re-export",
        "signature": "indexTo3D",
        "summary": ""
      },
      {
        "name": "layersCollide",
        "kind": "re-export",
        "signature": "layersCollide",
        "summary": ""
      },
      {
        "name": "morton3D",
        "kind": "re-export",
        "signature": "morton3D",
        "summary": ""
      },
      {
        "name": "normalizedBarrierEnergy",
        "kind": "re-export",
        "signature": "normalizedBarrierEnergy",
        "summary": ""
      },
      {
        "name": "positionToIndex",
        "kind": "re-export",
        "signature": "positionToIndex",
        "summary": ""
      },
      {
        "name": "quadraticBSpline",
        "kind": "re-export",
        "signature": "quadraticBSpline",
        "summary": ""
      },
      {
        "name": "quadraticBSplineGrad",
        "kind": "re-export",
        "signature": "quadraticBSplineGrad",
        "summary": ""
      },
      {
        "name": "raycastWorld",
        "kind": "re-export",
        "signature": "raycastWorld",
        "summary": ""
      },
      {
        "name": "registerConvexMesh",
        "kind": "re-export",
        "signature": "registerConvexMesh",
        "summary": ""
      },
      {
        "name": "registerTriangleMesh",
        "kind": "re-export",
        "signature": "registerTriangleMesh",
        "summary": ""
      },
      {
        "name": "removeBody",
        "kind": "re-export",
        "signature": "removeBody",
        "summary": ""
      },
      {
        "name": "setBodyKinematic",
        "kind": "re-export",
        "signature": "setBodyKinematic",
        "summary": ""
      },
      {
        "name": "stepPhysicsWorld",
        "kind": "re-export",
        "signature": "stepPhysicsWorld",
        "summary": ""
      },
      {
        "name": "timeOfClosestApproach",
        "kind": "re-export",
        "signature": "timeOfClosestApproach",
        "summary": ""
      },
      {
        "name": "updateWorldMaterial",
        "kind": "re-export",
        "signature": "updateWorldMaterial",
        "summary": ""
      },
      {
        "name": "validateCollider",
        "kind": "re-export",
        "signature": "validateCollider",
        "summary": ""
      },
      {
        "name": "validatePhysicsBody",
        "kind": "re-export",
        "signature": "validatePhysicsBody",
        "summary": ""
      },
      {
        "name": "validatePhysicsMaterial",
        "kind": "re-export",
        "signature": "validatePhysicsMaterial",
        "summary": ""
      },
      {
        "name": "voxelizeMesh",
        "kind": "re-export",
        "signature": "voxelizeMesh",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/rig/ActiveRigController",
    "path": "engine/reference/sim/physics/rig/ActiveRigController.md",
    "source": "engine/sim/physics/rig/ActiveRigController.js",
    "import": "/engine/sim/physics/rig/ActiveRigController.js",
    "sourceHash": "2f398c787854f0b198c2ce142639e68f08bf61d46ba536e16160f065789d6903",
    "summary": "",
    "exports": [
      {
        "name": "ActiveRigController",
        "kind": "class",
        "signature": "class ActiveRigController",
        "summary": ""
      },
      {
        "name": "createActiveRigController",
        "kind": "function",
        "signature": "createActiveRigController(options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/rig/ActiveRigSchema",
    "path": "engine/reference/sim/physics/rig/ActiveRigSchema.md",
    "source": "engine/sim/physics/rig/ActiveRigSchema.js",
    "import": "/engine/sim/physics/rig/ActiveRigSchema.js",
    "sourceHash": "9fd59c80cea1ad3fee7294ddc9f1d93f4ab599f318e925cdde0aafbfda58fb24",
    "summary": "",
    "exports": [
      {
        "name": "createDriveAxis",
        "kind": "function",
        "signature": "createDriveAxis(options = {})",
        "summary": ""
      },
      {
        "name": "frequencyToDrive",
        "kind": "function",
        "signature": "frequencyToDrive({ frequencyHz = 4.5, dampingRatio = 1.0, effectiveMass = 1, mode = DRIVE_MODES.acceleration } = {})",
        "summary": ""
      },
      {
        "name": "getJointTorqueBudget",
        "kind": "function",
        "signature": "getJointTorqueBudget(jointType, massKg = 80, presetName = 'HumanAverage', tier = 'avg')",
        "summary": ""
      },
      {
        "name": "createDriveProfile",
        "kind": "function",
        "signature": "createDriveProfile({ joints = [], massKg = 80, preset = 'HumanAverage', frequencyHz = 4.5, dampingRatio = 1.0, driveMode = DRIVE_MODES.acceleration } = {})",
        "summary": ""
      },
      {
        "name": "createPoseBufferFromRig",
        "kind": "function",
        "signature": "createPoseBufferFromRig(rig = {})",
        "summary": ""
      },
      {
        "name": "createActiveRigConfig",
        "kind": "function",
        "signature": "createActiveRigConfig(options = {})",
        "summary": ""
      },
      {
        "name": "inferJointDriveType",
        "kind": "function",
        "signature": "inferJointDriveType(name = '')",
        "summary": ""
      },
      {
        "name": "ACTIVE_RIG_BACKENDS",
        "kind": "constant",
        "signature": "ACTIVE_RIG_BACKENDS",
        "summary": ""
      },
      {
        "name": "ACTIVE_RIG_STATES",
        "kind": "constant",
        "signature": "ACTIVE_RIG_STATES",
        "summary": ""
      },
      {
        "name": "DRIVE_MODES",
        "kind": "constant",
        "signature": "DRIVE_MODES",
        "summary": ""
      },
      {
        "name": "POSE_BLEND_MODES",
        "kind": "constant",
        "signature": "POSE_BLEND_MODES",
        "summary": ""
      },
      {
        "name": "ACTIVE_RIG_AXES",
        "kind": "constant",
        "signature": "ACTIVE_RIG_AXES",
        "summary": ""
      },
      {
        "name": "HUMAN_MASS_FRACTIONS",
        "kind": "constant",
        "signature": "HUMAN_MASS_FRACTIONS",
        "summary": ""
      },
      {
        "name": "HUMAN_JOINT_TORQUE_NM_PER_KG",
        "kind": "constant",
        "signature": "HUMAN_JOINT_TORQUE_NM_PER_KG",
        "summary": ""
      },
      {
        "name": "ACTIVE_RIG_PRESETS",
        "kind": "constant",
        "signature": "ACTIVE_RIG_PRESETS",
        "summary": ""
      },
      {
        "name": "DEFAULT_ACTIVE_RIG_CONFIG",
        "kind": "constant",
        "signature": "DEFAULT_ACTIVE_RIG_CONFIG",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/rig/BalanceController",
    "path": "engine/reference/sim/physics/rig/BalanceController.md",
    "source": "engine/sim/physics/rig/BalanceController.js",
    "import": "/engine/sim/physics/rig/BalanceController.js",
    "sourceHash": "1bab629c5ceb06b8e1cf5cf5433d3fee95adbb5e57ef0bd25bbdf80f0ceeeb07",
    "summary": "",
    "exports": [
      {
        "name": "BalanceController",
        "kind": "class",
        "signature": "class BalanceController",
        "summary": ""
      },
      {
        "name": "estimateCenterOfMass",
        "kind": "function",
        "signature": "estimateCenterOfMass(joints = {}, fallback = [0, 0, 0])",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/rig/CharacterPhysicsAssetAdapter",
    "path": "engine/reference/sim/physics/rig/CharacterPhysicsAssetAdapter.md",
    "source": "engine/sim/physics/rig/CharacterPhysicsAssetAdapter.js",
    "import": "/engine/sim/physics/rig/CharacterPhysicsAssetAdapter.js",
    "sourceHash": "128a84b4e8060093c0be88c95287046f62b3fc15c686fb4f71d235c3db2e2bff",
    "summary": "engine/sim/physics/rig/CharacterPhysicsAssetAdapter.js — converts a CharacterPhysicsAsset (engine/assets/rig/CharacterPhysicsAsset.js) into the { parts, joints, bodies } rig shape ActiveRigController expects.  This is the Phase 1 fix for the ragdoll stack's root-cause bug: StickmanActiveRigAdapter.js only ever read the hand-authored StickmanRagdoll ECS shape, completely disconnected from RagdollBuilder/JointLimits' output — meaning PhysX built joints from different axis/limit data than RagdollSim did, so systems disagreed about which way an elbow/knee should bend. This adapter reads the SAME asset.jointDefs (axis/swingDeg/twistDeg/motion/ frameA/frameB) that RagdollSim consumes, so PhysX and the Verlet fallback now agree by construction.",
    "exports": [
      {
        "name": "createActiveRigFromCharacterPhysicsAsset",
        "kind": "function",
        "signature": "createActiveRigFromCharacterPhysicsAsset(asset, options = {})",
        "summary": "Build an ActiveRigController-compatible rig descriptor from a CharacterPhysicsAsset."
      },
      {
        "name": "createActiveRigControllerOptionsFromCharacterPhysicsAsset",
        "kind": "function",
        "signature": "createActiveRigControllerOptionsFromCharacterPhysicsAsset(asset, options = {})",
        "summary": "Build the full option bag `new ActiveRigController(options)` expects, from a CharacterPhysicsAsset — the CharacterPhysicsAsset equivalent of `createActiveRigControllerOptionsFromStickman`."
      },
      {
        "name": "createRetargetGraphFromBodyDefs",
        "kind": "function",
        "signature": "createRetargetGraphFromBodyDefs(bodyDefs = [])",
        "summary": "Trivial identity retarget graph (physics joint id === render bone id/slot)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/rig/MuscleLayer",
    "path": "engine/reference/sim/physics/rig/MuscleLayer.md",
    "source": "engine/sim/physics/rig/MuscleLayer.js",
    "import": "/engine/sim/physics/rig/MuscleLayer.js",
    "sourceHash": "1daa430d6683dfc3538f4c8e3a9e7e175a93dc4b29b87dd41cfc8f93d1eac686",
    "summary": "",
    "exports": [
      {
        "name": "MuscleLayer",
        "kind": "class",
        "signature": "class MuscleLayer",
        "summary": ""
      },
      {
        "name": "MUSCLE_GROUPS",
        "kind": "constant",
        "signature": "MUSCLE_GROUPS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/rig/PoseStateGraph",
    "path": "engine/reference/sim/physics/rig/PoseStateGraph.md",
    "source": "engine/sim/physics/rig/PoseStateGraph.js",
    "import": "/engine/sim/physics/rig/PoseStateGraph.js",
    "sourceHash": "fba564e92a7cb7675d35875753a29d6a14485142020917a14e90a0b1d82f6b59",
    "summary": "",
    "exports": [
      {
        "name": "PoseStateGraph",
        "kind": "class",
        "signature": "class PoseStateGraph",
        "summary": ""
      },
      {
        "name": "createPoseStateGraph",
        "kind": "function",
        "signature": "createPoseStateGraph(options = {})",
        "summary": ""
      },
      {
        "name": "resolveRequestedPoseState",
        "kind": "function",
        "signature": "resolveRequestedPoseState(intent = {}, fallback = 'idle_stand')",
        "summary": ""
      },
      {
        "name": "DEFAULT_POSE_STATES",
        "kind": "constant",
        "signature": "DEFAULT_POSE_STATES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/rig/RetargetGraph",
    "path": "engine/reference/sim/physics/rig/RetargetGraph.md",
    "source": "engine/sim/physics/rig/RetargetGraph.js",
    "import": "/engine/sim/physics/rig/RetargetGraph.js",
    "sourceHash": "3380b40e6d1b29fdd911fa1b93917626a73f0869098ca9dcec8534e823b4dfd2",
    "summary": "",
    "exports": [
      {
        "name": "RetargetGraph",
        "kind": "class",
        "signature": "class RetargetGraph",
        "summary": ""
      },
      {
        "name": "PoseBlendState",
        "kind": "class",
        "signature": "class PoseBlendState",
        "summary": ""
      },
      {
        "name": "createEmptyPoseBuffer",
        "kind": "function",
        "signature": "createEmptyPoseBuffer()",
        "summary": ""
      },
      {
        "name": "createPoseJoint",
        "kind": "function",
        "signature": "createPoseJoint(id, options = {})",
        "summary": ""
      },
      {
        "name": "clonePoseBuffer",
        "kind": "function",
        "signature": "clonePoseBuffer(pose)",
        "summary": ""
      },
      {
        "name": "blendPoseBuffers",
        "kind": "function",
        "signature": "blendPoseBuffers(a, b, t)",
        "summary": ""
      },
      {
        "name": "poseFromJointArray",
        "kind": "function",
        "signature": "poseFromJointArray(joints = [])",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/rig/StickmanActiveRigAdapter",
    "path": "engine/reference/sim/physics/rig/StickmanActiveRigAdapter.md",
    "source": "engine/sim/physics/rig/StickmanActiveRigAdapter.js",
    "import": "/engine/sim/physics/rig/StickmanActiveRigAdapter.js",
    "sourceHash": "b70677366f931c1517debfe88923d50fd790a3ec840b6512d49891e656671629",
    "summary": "",
    "exports": [
      {
        "name": "createActiveRigFromStickman",
        "kind": "function",
        "signature": "createActiveRigFromStickman(stickman = {}, options = {})",
        "summary": ""
      },
      {
        "name": "createActiveRigControllerOptionsFromStickman",
        "kind": "function",
        "signature": "createActiveRigControllerOptionsFromStickman(stickman = {}, options = {})",
        "summary": ""
      },
      {
        "name": "createStickmanRetargetGraph",
        "kind": "function",
        "signature": "createStickmanRetargetGraph(bodies = [])",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/rig/index",
    "path": "engine/reference/sim/physics/rig/index.md",
    "source": "engine/sim/physics/rig/index.js",
    "import": "/engine/sim/physics/rig/index.js",
    "sourceHash": "7c5513cd75e53b4c19f2d1c63fad9c83a16e292b81f6d87d7a2fa64cba391fbf",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/vehicle/VehicleBindings",
    "path": "engine/reference/sim/physics/vehicle/VehicleBindings.md",
    "source": "engine/sim/physics/vehicle/VehicleBindings.js",
    "import": "/engine/sim/physics/vehicle/VehicleBindings.js",
    "sourceHash": "97b09e236b670ca6ee5285cfb98b8512cc1f92f1686147d053132c7a03ce0ae1",
    "summary": "Vehicle2 WebIDL capability adapters. The generated declaration exposes several helpers as statics while the emitted JavaScript places them on the constructor prototype, so all vehicle code crosses that mismatch here.",
    "exports": [
      {
        "name": "vehicleTopLevelFunctions",
        "kind": "function",
        "signature": "vehicleTopLevelFunctions(PhysX)",
        "summary": ""
      },
      {
        "name": "tireForceExtension",
        "kind": "function",
        "signature": "tireForceExtension(PhysX)",
        "summary": ""
      },
      {
        "name": "ensureVehicleExtension",
        "kind": "function",
        "signature": "ensureVehicleExtension(PhysX, foundation)",
        "summary": ""
      },
      {
        "name": "isPhysXVehicleSupported",
        "kind": "function",
        "signature": "isPhysXVehicleSupported(world)",
        "summary": ""
      },
      {
        "name": "destroyTracked",
        "kind": "function",
        "signature": "destroyTracked(PhysX, tracked)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/vehicle/VehicleChassis",
    "path": "engine/reference/sim/physics/vehicle/VehicleChassis.md",
    "source": "engine/sim/physics/vehicle/VehicleChassis.js",
    "import": "/engine/sim/physics/vehicle/VehicleChassis.js",
    "sourceHash": "21afd7427fa0a76b97a041f3d7d2fc0116369244a7f547050ffae724a108f640",
    "summary": "",
    "exports": [
      {
        "name": "configureVehicleChassis",
        "kind": "function",
        "signature": "configureVehicleChassis(PhysX, vehicle, config, alloc)",
        "summary": ""
      },
      {
        "name": "initializeVehicleActor",
        "kind": "function",
        "signature": "initializeVehicleActor(PhysX, topLevel, world, vehicle, config, alloc)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/vehicle/VehicleConfig",
    "path": "engine/reference/sim/physics/vehicle/VehicleConfig.md",
    "source": "engine/sim/physics/vehicle/VehicleConfig.js",
    "import": "/engine/sim/physics/vehicle/VehicleConfig.js",
    "sourceHash": "2668e06d78fa5abae23fa844fd8682a85603d409951433eab8c3d15a01c316bb",
    "summary": "",
    "exports": [
      {
        "name": "resolveVehicleConfig",
        "kind": "function",
        "signature": "resolveVehicleConfig(options = {})",
        "summary": ""
      },
      {
        "name": "arrayAt",
        "kind": "function",
        "signature": "arrayAt(owner, field, index)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/vehicle/VehicleController",
    "path": "engine/reference/sim/physics/vehicle/VehicleController.md",
    "source": "engine/sim/physics/vehicle/VehicleController.js",
    "import": "/engine/sim/physics/vehicle/VehicleController.js",
    "sourceHash": "fee817699995c08e921c4252aa967937a925278883e17753d1626b035d1d1941",
    "summary": "",
    "exports": [
      {
        "name": "createVehicleController",
        "kind": "function",
        "signature": "createVehicleController({ PhysX, world, topLevel, vehicle, actor, context, sweepMesh, tracked, config, gears, })",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/vehicle/VehicleDrivetrain",
    "path": "engine/reference/sim/physics/vehicle/VehicleDrivetrain.md",
    "source": "engine/sim/physics/vehicle/VehicleDrivetrain.js",
    "import": "/engine/sim/physics/vehicle/VehicleDrivetrain.js",
    "sourceHash": "09845e26802d23f75bbe4a7b133ba4215c2038554ae7ed64e889a940f71ecbdc",
    "summary": "",
    "exports": [
      {
        "name": "configureVehicleDrivetrain",
        "kind": "function",
        "signature": "configureVehicleDrivetrain(PhysX, vehicle)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/vehicle/VehicleEngine",
    "path": "engine/reference/sim/physics/vehicle/VehicleEngine.md",
    "source": "engine/sim/physics/vehicle/VehicleEngine.js",
    "import": "/engine/sim/physics/vehicle/VehicleEngine.js",
    "sourceHash": "539ec7587a3b5bf938ffdc02c26093c7314060c242989e99c842bf035c68b413",
    "summary": "",
    "exports": [
      {
        "name": "configureVehicleEngine",
        "kind": "function",
        "signature": "configureVehicleEngine(vehicle, config)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/vehicle/VehicleWheels",
    "path": "engine/reference/sim/physics/vehicle/VehicleWheels.md",
    "source": "engine/sim/physics/vehicle/VehicleWheels.js",
    "import": "/engine/sim/physics/vehicle/VehicleWheels.js",
    "sourceHash": "b932b4eaffd16b35263b15cb30bf0e39431c6a6d004edaa23937e8db7f74a818",
    "summary": "",
    "exports": [
      {
        "name": "configureVehicleWheels",
        "kind": "function",
        "signature": "configureVehicleWheels(PhysX, topLevel, vehicle, config, alloc)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/physics/vehicle/index",
    "path": "engine/reference/sim/physics/vehicle/index.md",
    "source": "engine/sim/physics/vehicle/index.js",
    "import": "/engine/sim/physics/vehicle/index.js",
    "sourceHash": "0c8d20ac95b04ef47c0c3324f7b3ab839d65211ec2ac35c21cdcd6d206fa3988",
    "summary": "Build a complete PhysX Vehicle2 car from independently owned subsystems.",
    "exports": [
      {
        "name": "createPhysXVehicle",
        "kind": "function",
        "signature": "createPhysXVehicle(world, options = {})",
        "summary": "Build a complete PhysX Vehicle2 car from independently owned subsystems."
      },
      {
        "name": "isPhysXVehicleSupported",
        "kind": "re-export",
        "signature": "isPhysXVehicleSupported",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/world/WindSimulation",
    "path": "engine/reference/sim/world/WindSimulation.md",
    "source": "engine/sim/world/WindSimulation.js",
    "import": "/engine/sim/world/WindSimulation.js",
    "sourceHash": "b69d30783a2f75705041704fd336413a0dca5a330d8e08b23b3ed914eb5a5475",
    "summary": "Procedural Weather System - Grid-based weather simulation Simulates coupled ODE system for: - Temperature (fed by sunshine, decreased by rain/altitude) - Humidity (fed by water evaporation, lost to rain) - Clouds (appear above temp/humidity thresholds) - Precipitation (impulsive rain from cooling humid air) - Wind (convects temperature and humidity)",
    "exports": [
      {
        "name": "WindSimulation",
        "kind": "class",
        "signature": "class WindSimulation",
        "summary": ""
      },
      {
        "name": "ProceduralWeather",
        "kind": "class",
        "signature": "class ProceduralWeather",
        "summary": "Procedural Weather System - Grid-based weather simulation Simulates coupled ODE system for: - Temperature (fed by sunshine, decreased by rain/altitude) - Humidity (fed by water evaporation, lost to rain) - Clouds (appear above temp/humidity thresholds) - Precipitation (impulsive rain from cooling humid air) - Wind (convects temperature and humidity)"
      },
      {
        "name": "VolumetricClouds",
        "kind": "class",
        "signature": "class VolumetricClouds",
        "summary": "Volumetric Cloud Generator - Raymarched 3D density clouds INTEGRATION: - Uses GPU particles for cloud puffs/wisps - Uses WindSimulation for cloud advection - Uses SpatialHashCompute for LOD particle culling Uses multi-octave noise for cloud density with: - Wind advection from LBM simulation - Rayleigh/Mie scattering for realistic lighting - LOD based on ray distance"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/world/WindSystem",
    "path": "engine/reference/sim/world/WindSystem.md",
    "source": "engine/sim/world/WindSystem.js",
    "import": "/engine/sim/world/WindSystem.js",
    "sourceHash": "be6e0f04d8c530906e8bf6fe05ff3fdc0fd69062e9456eb53422868ae9e55d7c",
    "summary": "WindSystem.js - Global Wind Simulation Provides wind data for vegetation, particles, cloth, etc. Features gusts, turbulence, and directional wind",
    "exports": [
      {
        "name": "WindSystem",
        "kind": "class",
        "signature": "class WindSystem",
        "summary": "WindSystem.js - Global Wind Simulation Provides wind data for vegetation, particles, cloth, etc. Features gusts, turbulence, and directional wind"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "sim/world/WorldSim",
    "path": "engine/reference/sim/world/WorldSim.md",
    "source": "engine/sim/world/WorldSim.js",
    "import": "/engine/sim/world/WorldSim.js",
    "sourceHash": "70f0220e76173e4f4689a1f6a8c161e8b31b835b95dde9862af9e172577ddf58",
    "summary": "",
    "exports": [
      {
        "name": "createWorldSim",
        "kind": "function",
        "signature": "createWorldSim(options = {})",
        "summary": ""
      },
      {
        "name": "destroyWorldSim",
        "kind": "function",
        "signature": "destroyWorldSim(worldSim)",
        "summary": ""
      },
      {
        "name": "stepWorldSim",
        "kind": "function",
        "signature": "stepWorldSim(worldSim, deltaSeconds, options = {})",
        "summary": ""
      },
      {
        "name": "sampleTerrainHeight",
        "kind": "function",
        "signature": "sampleTerrainHeight(worldSim, worldX, worldZ)",
        "summary": ""
      },
      {
        "name": "getWorldSimSnapshot",
        "kind": "function",
        "signature": "getWorldSimSnapshot(worldSim)",
        "summary": ""
      },
      {
        "name": "exportWorldSimState",
        "kind": "function",
        "signature": "exportWorldSimState(worldSim, options = {})",
        "summary": ""
      },
      {
        "name": "createWorldSimFromState",
        "kind": "function",
        "signature": "createWorldSimFromState(state)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/authority/Capability",
    "path": "engine/reference/state/authority/Capability.md",
    "source": "engine/state/authority/Capability.js",
    "import": "/engine/state/authority/Capability.js",
    "sourceHash": "6ae58a8f8791eb90d7657efa3af1c642c62d9bd095dccdfaa196dc2a9bd794b5",
    "summary": "state/authority/Capability.js — scoped, attenuable, revocable authority (spec §12).  Observation does NOT imply permission (spec rule 29). A capability names a principal, an object, an allowed action, scope/constraints, expiry, and whether it is single-use. Following Macaroons, a capability can be ATTENUATED by adding caveats (narrowing who/where/when/what) — never widened. Critical single-use capabilities are themselves USOs (consumed on use). Authority is re-checked at commit, closing the time-of-check/time-of-use gap.",
    "exports": [
      {
        "name": "makeCapability",
        "kind": "function",
        "signature": "makeCapability(c = {})",
        "summary": "Mint a capability."
      },
      {
        "name": "attenuate",
        "kind": "function",
        "signature": "attenuate(cap, caveat)",
        "summary": "Attenuate a capability by adding a caveat. The result is a NEW capability that is strictly narrower; it can never grant more than its parent (spec rule 30, CSE rule \"a capability cannot grant rights beyond its issuer's rights\")."
      },
      {
        "name": "authorizes",
        "kind": "function",
        "signature": "authorizes(cap, { principal, object, action, epoch, context = {} } = {})",
        "summary": "Test whether a capability authorizes an action in a context. Checks object/action match, expiry, and every caveat predicate. Does NOT check revocation — that lives in the registry (online status, spec rule 31)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/authority/CapabilityRegistry",
    "path": "engine/reference/state/authority/CapabilityRegistry.md",
    "source": "engine/state/authority/CapabilityRegistry.js",
    "import": "/engine/state/authority/CapabilityRegistry.js",
    "sourceHash": "16bbd9f2d16b24beaf91a1ebea1ce0ed0d15c1210e1a4d953e288cc88c556985",
    "summary": "state/authority/CapabilityRegistry.js — registry + revocation (spec §6,§12).  Holds issued capabilities and a revocation set. A revoked critical capability can never commit (safety invariant, spec §19). Revocation-sensitive capabilities require an online status check at commit, so the coordinator asks the registry — not a cached plan — whether a capability is still valid.",
    "exports": [
      {
        "name": "CapabilityRegistry",
        "kind": "class",
        "signature": "class CapabilityRegistry",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/authority/Identity",
    "path": "engine/reference/state/authority/Identity.md",
    "source": "engine/state/authority/Identity.js",
    "import": "/engine/state/authority/Identity.js",
    "sourceHash": "7d22bc018dc405e5fbde98d3326a15323a901dd5a181d9a6b4359fd5a73ddf48",
    "summary": "state/authority/Identity.js — pluggable signer for the Authority plane (spec §12).  Authority is explicit and bound to a signing key, not an ambient bearer token (spec rule 30, CSE rule 1). This wraps the engine's existing ECDSA P-256 identity (engine/collab/CollabIdentity.js) behind a minimal signer interface so the commit coordinator can verify signatures at commit time. When SubtleCrypto is unavailable it degrades to a deterministic FNV stamp — usable for local dev, but `secure:false` flags that it carries no cryptographic guarantee.",
    "exports": [
      {
        "name": "createSigner",
        "kind": "function",
        "signature": "async createSigner(principal, opts = {})",
        "summary": "Create an authority signer bound to a principal id. Each distinct principal gets its OWN persisted ECDSA P-256 keypair (via CollabIdentity's named-key support) rather than sharing the single default device key. This lets the same device host multiple unlinkable signers — e.g. a stable `profile:<id>` identity and per-group pseudonymous `membership:<groupId>:<profileId>` identities (engine/network/identity) — without one leaking the other's fingerprint."
      },
      {
        "name": "verifyWithKey",
        "kind": "function",
        "signature": "async verifyWithKey(publicKeyHex, data, signatureHex)",
        "summary": "Verify a signature against an explicit public key (cross-actor verification)."
      },
      {
        "name": "computeFingerprint",
        "kind": "re-export",
        "signature": "computeFingerprint",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/authority/PolicyEngine",
    "path": "engine/reference/state/authority/PolicyEngine.md",
    "source": "engine/state/authority/PolicyEngine.js",
    "import": "/engine/state/authority/PolicyEngine.js",
    "sourceHash": "0549c73affee4f07052c64c052e10563d12c4f4350337a1aa8e30ce4d615bd6e",
    "summary": "state/authority/PolicyEngine.js — Authority-plane policy engine + approval/risk gates (spec §3 plane 6, rules 30, 34).  Capabilities say WHAT a principal may do; policy says under WHICH conditions it is currently allowed, and which actions need human/authority approval before they may commit. The engine evaluates ordered rules (deny overrides allow) and classifies an action's risk; irreversible / high-risk actions are gated behind an explicit approval that must be present at commit time — closing the time-of-check/time-of-use gap together with the capability re-check (rule 31). Policy is versioned (rule 5) so receipts can record which policy decided.",
    "exports": [
      {
        "name": "PolicyEngine",
        "kind": "class",
        "signature": "class PolicyEngine",
        "summary": ""
      },
      {
        "name": "policyRule",
        "kind": "function",
        "signature": "policyRule(r)",
        "summary": ""
      },
      {
        "name": "RISK_LEVEL",
        "kind": "constant",
        "signature": "RISK_LEVEL",
        "summary": ""
      },
      {
        "name": "DECISION",
        "kind": "constant",
        "signature": "DECISION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/causal/CausalParents",
    "path": "engine/reference/state/causal/CausalParents.md",
    "source": "engine/state/causal/CausalParents.js",
    "import": "/engine/state/causal/CausalParents.js",
    "sourceHash": "5aac5c5b88a71890be52cf400384dec19350ba0d1d6c797c24826a32d3ba4f35",
    "summary": "state/causal/CausalParents.js — partial order over committed events (spec §2,§9).  Lamport's happened-before: causal relationships establish a partial order; concurrent events need not have a global order. This Causal Plane tracks the DAG of committed ids (commits, observations) so a new transaction can declare `causalParents` and the coordinator can verify those parents are known before committing. It reuses the partial-order toposort from facts/Causality.js for deterministic projection of the known causal graph.",
    "exports": [
      {
        "name": "CausalGraph",
        "kind": "class",
        "signature": "class CausalGraph",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/causal/DottedVersionVector",
    "path": "engine/reference/state/causal/DottedVersionVector.md",
    "source": "engine/state/causal/DottedVersionVector.js",
    "import": "/engine/state/causal/DottedVersionVector.js",
    "sourceHash": "30732395b15dbd7de7e0a565f6e9026e32d0f69d046f7215a4d619ecbd971846",
    "summary": "state/causal/DottedVersionVector.js — precise concurrent-version causality (spec §9 \"Causal time\", rule 8/9).  A VersionVector summarizes \"what I have seen\" per node and gives a partial order: equal / before / after / concurrent. Dotted version vectors (Preguiça et al.) add the ability to track each write as an isolated event (a \"dot\") so concurrent writes are kept as explicit SIBLINGS instead of being silently lost or forcing per-client metadata to grow without bound. This is the causality backbone the Causal Plane uses to decide when order is genuinely required.",
    "exports": [
      {
        "name": "VersionVector",
        "kind": "class",
        "signature": "class VersionVector",
        "summary": ""
      },
      {
        "name": "DVVSet",
        "kind": "class",
        "signature": "class DVVSet",
        "summary": "A dotted-version-vector set for ONE logical key: stores the current value(s) plus the causal history at which each was written. Concurrent writes survive as siblings; a write that causally dominates a value replaces it."
      },
      {
        "name": "ORDER",
        "kind": "constant",
        "signature": "ORDER",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/causal/HLC",
    "path": "engine/reference/state/causal/HLC.md",
    "source": "engine/state/causal/HLC.js",
    "import": "/engine/state/causal/HLC.js",
    "sourceHash": "48a3e2efa12df1e8ba7369b3ba7b6b560bae3b589f90f6b5a28f271b45e30c23",
    "summary": "state/causal/HLC.js — Hybrid Logical Clock (spec §9 \"Operational time\", rule 11).  An HLC (Kulkarni et al.) combines a logical clock's causal guarantees with a timestamp that stays close to physical time. Each timestamp is (l, c): `l` tracks the max physical time observed, `c` is a bounded counter that breaks ties when events share the same `l`. HLC gives a total order consistent with causality (if A → B then ts(A) < ts(B)) while remaining readable as wall time.  IMPORTANT (rule 11): a timestamp NEVER establishes authority, ownership, or uniqueness on its own — HLC orders events; the commit protocol decides truth.",
    "exports": [
      {
        "name": "HLC",
        "kind": "class",
        "signature": "class HLC",
        "summary": ""
      },
      {
        "name": "compareHLC",
        "kind": "function",
        "signature": "compareHLC(a, b)",
        "summary": "Compare two HLC timestamps {l,c}. Returns -1, 0, or 1."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/codebook/CodeEntry",
    "path": "engine/reference/state/codebook/CodeEntry.md",
    "source": "engine/state/codebook/CodeEntry.js",
    "import": "/engine/state/codebook/CodeEntry.js",
    "sourceHash": "c87bef0fb15484cd2c1e810e609f24e79b7a5e834d978e9ddf36af51ab888915",
    "summary": "state/codebook/CodeEntry.js — the layered code packet. NOT one magic number: each field has exactly one job and never pretends to be another.  denseID        fast runtime handle exactID        literal pattern identity (9-bit packed / canonical) spatialID      where it belongs in space   (filled by the spatial layer, M2) resonanceVector what it resembles          (filled by the resonance layer, M3) correctionCode how to repair corruption    (filled by the correction layer, M5) hashID         have we seen this exact thing symbolicSig    what it MEANS (optional)",
    "exports": [
      {
        "name": "makeCodeEntry",
        "kind": "function",
        "signature": "makeCodeEntry(rawId, opts = {})",
        "summary": "Build a CodeEntry for a raw 3x3 pattern. Later layers enrich the null fields: spatialID (M2 SpatialCode), resonanceVector (M3 Transforms), correctionCode (M5 CorrectionGate). Keeping them explicitly null preserves the layer law — a missing layer is visibly missing, never faked."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/codebook/PatternCodebook",
    "path": "engine/reference/state/codebook/PatternCodebook.md",
    "source": "engine/state/codebook/PatternCodebook.js",
    "import": "/engine/state/codebook/PatternCodebook.js",
    "sourceHash": "1f081287566473f20ea6ce1f02cd98190384f983fd582515194d554dd99e5513",
    "summary": "state/codebook/PatternCodebook.js — Phase 1 of the URC pipeline: raw 3x3 block -> 9-bit exact id -> canonical (rotations/flips) -> dense id + hash id + nearest legal attractor (Hamming distance).  This is the smallest stable codebook. Bigger blocks (8x8 DCT, 32x32 wavelets) plug into the resonance layer later; the contract here is: a raw pattern maps deterministically to a stable codebook entry.",
    "exports": [
      {
        "name": "PatternCodebook",
        "kind": "class",
        "signature": "class PatternCodebook",
        "summary": ""
      },
      {
        "name": "packPattern",
        "kind": "function",
        "signature": "packPattern(cells)",
        "summary": "Pack a length-9 array of truthy/0 cells (row-major) into a 9-bit id (0..511)."
      },
      {
        "name": "unpackPattern",
        "kind": "function",
        "signature": "unpackPattern(id)",
        "summary": "Unpack a 9-bit id back into a length-9 Uint8Array (row-major)."
      },
      {
        "name": "hammingDistance",
        "kind": "function",
        "signature": "hammingDistance(a, b)",
        "summary": "Number of differing cells between two packed 3x3 patterns."
      },
      {
        "name": "symmetries",
        "kind": "function",
        "signature": "symmetries(id)",
        "summary": "All 8 dihedral symmetries of a packed pattern."
      },
      {
        "name": "canonicalId",
        "kind": "function",
        "signature": "canonicalId(id)",
        "summary": "Canonical id = smallest packed id over all dihedral symmetries (rotation/flip invariant)."
      },
      {
        "name": "patternHashId",
        "kind": "function",
        "signature": "patternHashId(rawId)",
        "summary": "Stable content fingerprint for a pattern (hash = identity)."
      },
      {
        "name": "PATTERN_W",
        "kind": "constant",
        "signature": "PATTERN_W",
        "summary": ""
      },
      {
        "name": "PATTERN_H",
        "kind": "constant",
        "signature": "PATTERN_H",
        "summary": ""
      },
      {
        "name": "PATTERN_BITS",
        "kind": "constant",
        "signature": "PATTERN_BITS",
        "summary": ""
      },
      {
        "name": "PATTERN_COUNT",
        "kind": "constant",
        "signature": "PATTERN_COUNT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/codebook/SymbolicSig",
    "path": "engine/reference/state/codebook/SymbolicSig.md",
    "source": "engine/state/codebook/SymbolicSig.js",
    "import": "/engine/state/codebook/SymbolicSig.js",
    "sourceHash": "2e675002b93c14c5fd2354236f682c663faf13fd5cf6f92b1b23ffe31bfa19fa",
    "summary": "state/codebook/SymbolicSig.js — symbolic *meaning* via prime INDICES.  Layer law: \"Primes = symbolic meaning\". We never multiply giant prime products at runtime (that would be slow and pretend to be storage). A symbolic signature is just a sorted set of prime indices; identity stays in hashes, speed stays in dense ids. Two things that look alike (resonance) can still mean opposite things — meaning is checked HERE, not by similarity.",
    "exports": [
      {
        "name": "primeAt",
        "kind": "function",
        "signature": "primeAt(index)",
        "summary": "Prime value for a given index (bounds-checked)."
      },
      {
        "name": "symbolicSig",
        "kind": "function",
        "signature": "symbolicSig(primeIndices)",
        "summary": "Build a symbolic signature: a sorted, de-duplicated vector of prime indices."
      },
      {
        "name": "sigEquals",
        "kind": "function",
        "signature": "sigEquals(a, b)",
        "summary": "Meaning equality — compares index sets, NEVER products."
      },
      {
        "name": "sigContains",
        "kind": "function",
        "signature": "sigContains(sig, sub)",
        "summary": "True if `sub`'s meanings are all present in `sig` (symbolic containment)."
      },
      {
        "name": "PRIME_TABLE",
        "kind": "constant",
        "signature": "PRIME_TABLE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/commit/CommitGate",
    "path": "engine/reference/state/commit/CommitGate.md",
    "source": "engine/state/commit/CommitGate.js",
    "import": "/engine/state/commit/CommitGate.js",
    "sourceHash": "3694364bd5ae2a2739926dd32b5f6a9a3122adf34c3a6f78b4480386791feaa4",
    "summary": "state/commit/CommitGate.js — only commit gates decide FINAL truth.  Core law: \"Similarity may suggest. Facts may branch. Constraints may reject. But only commit gates decide final truth.\" Used for the orderless-unsafe things: inventory, permissions, ownership, money, save overwrite, security, multiplayer hit-confirm, choosing a canonical branch.  A commit applies a delta (adds + tombstones) to a CLONE of the base store, runs COMMIT-strength constraints, then an optional authority check. It never mutates the base — truth is the returned store, with a witness either way.",
    "exports": [
      {
        "name": "createCommitGate",
        "kind": "function",
        "signature": "createCommitGate({ constraints = [], authority = null } = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/commit/CorrectionGate",
    "path": "engine/reference/state/commit/CorrectionGate.md",
    "source": "engine/state/commit/CorrectionGate.js",
    "import": "/engine/state/commit/CorrectionGate.js",
    "sourceHash": "443e38be7020c10ff79257d9abffad3b577e9dfa0076b4a71ce4efafbbbfb86a",
    "summary": "state/commit/CorrectionGate.js — correction is NOT authority.  Tiered policy (the layer law for repair): VISUAL    state may auto-correct (particles, cache, chunk, network-with-confidence) SEMANTIC  state must verify before applying (inventory, save, ...) SECURITY  state must NEVER silently repair (permission, ownership, security)  When unsure: branch / quarantine / request authority — never silently fix. Resonance (nearestAttractor) may SUGGEST the repaired value, but acceptance is decided here, and a security tier can only escalate, never apply.",
    "exports": [
      {
        "name": "correct",
        "kind": "function",
        "signature": "correct({ tier, repaired, verify, unsure = false })",
        "summary": "Decide what to do with a (resonance-)repaired candidate."
      },
      {
        "name": "CORRECTION_TIERS",
        "kind": "constant",
        "signature": "CORRECTION_TIERS",
        "summary": ""
      },
      {
        "name": "CORRECTION_ACTIONS",
        "kind": "constant",
        "signature": "CORRECTION_ACTIONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/consistency/CRDT",
    "path": "engine/reference/state/consistency/CRDT.md",
    "source": "engine/state/consistency/CRDT.js",
    "import": "/engine/state/consistency/CRDT.js",
    "sourceHash": "739bcace58a6dbef5b1c2d98f1284a099eaae80f1ec4f8d159a33ab9d0d41507",
    "summary": "state/consistency/CRDT.js — approved mergeable types (spec §4 \"Mergeable state\", rule 14/36).  State-based CRDTs (CvRDTs): every type exposes a `merge(other)` that is a least-upper-bound join — associative, commutative, and idempotent — so replicas that exchange state in any order/any number of times converge to the same value WITHOUT coordination (CALM / coordination-avoidance). Each merge is non-mutating and returns a NEW instance so the join algebra is easy to test.  IMPORTANT (rule 36): CRDT convergence is NOT proof of application validity. A CRDT may only be used for a value after `InvariantConfluence` confirms its operations preserve the relevant invariants. These types are the approved building blocks, not a license to make any value mergeable.",
    "exports": [
      {
        "name": "GCounter",
        "kind": "class",
        "signature": "class GCounter",
        "summary": ""
      },
      {
        "name": "PNCounter",
        "kind": "class",
        "signature": "class PNCounter",
        "summary": ""
      },
      {
        "name": "GSet",
        "kind": "class",
        "signature": "class GSet",
        "summary": ""
      },
      {
        "name": "ORSet",
        "kind": "class",
        "signature": "class ORSet",
        "summary": ""
      },
      {
        "name": "LWWRegister",
        "kind": "class",
        "signature": "class LWWRegister",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/consistency/InvariantConfluence",
    "path": "engine/reference/state/consistency/InvariantConfluence.md",
    "source": "engine/state/consistency/InvariantConfluence.js",
    "import": "/engine/state/consistency/InvariantConfluence.js",
    "sourceHash": "56caa87917ec33bb39a1e6414528615e7380ba337431d16acb2e2cae5e68ef2d",
    "summary": "state/consistency/InvariantConfluence.js — coordination-avoidance classifier (spec §4, §8 \"Consistency Plane\", rule 35/36).  Invariant confluence (Bailis et al.) is the precise test for whether a set of operations can run WITHOUT coordination: a set of operations is I-confluent with respect to an invariant I if, for any I-valid states reachable from a common ancestor, their merge is also I-valid. If so, replicas may diverge and merge freely (CALM); if not, those operations need a coordinating commit (Exclusive/serializable profile).  This is a BOUNDED, honest classifier (a finite-model property check, in the spirit of §19) — it explores states reachable within `depth` operations and reports a concrete counterexample when it finds one. A \"confluent\" result is evidence within the explored bound, not a closed-form proof.",
    "exports": [
      {
        "name": "classifyConfluence",
        "kind": "function",
        "signature": "classifyConfluence({ initial, merge, invariant, operations, depth = 2 })",
        "summary": "Classify a set of operations for invariant confluence."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/consistency/OptimisticValidator",
    "path": "engine/reference/state/consistency/OptimisticValidator.md",
    "source": "engine/state/consistency/OptimisticValidator.js",
    "import": "/engine/state/consistency/OptimisticValidator.js",
    "sourceHash": "0b8b7c13f58f08d1421721136354258f8e24a75b7b6e26b5b93a8dc4f90ecfea",
    "summary": "state/consistency/OptimisticValidator.js — optimistic read-set / predicate validation and write-skew detection (spec §6, §8, rule 22/24).  The \"Optimistic\" consistency profile reads versions, proposes a replacement, and commits only if every read remained current (MVCC validation). Checking only WRITTEN objects is insufficient: snapshot execution can admit write-skew anomalies involving predicates or separately-read objects. So validation must cover the full declared read-set AND predicates, and a serializability check must detect dangerous rw-antidependency structures between concurrent transactions.",
    "exports": [
      {
        "name": "OptimisticValidator",
        "kind": "class",
        "signature": "class OptimisticValidator",
        "summary": "Validate a transaction's declared read-set and predicates against the current state. Used standalone or alongside the CommitCoordinator's version check."
      },
      {
        "name": "detectWriteSkew",
        "kind": "function",
        "signature": "detectWriteSkew(a, b)",
        "summary": "Detect a write-skew (non-serializable) hazard between two CONCURRENT transactions. Write-skew occurs when each transaction reads data the other writes — two rw-antidependency edges — so both can pass snapshot validation yet jointly violate an invariant coupling the items."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/consistency/Reservation",
    "path": "engine/reference/state/consistency/Reservation.md",
    "source": "engine/state/consistency/Reservation.js",
    "import": "/engine/state/consistency/Reservation.js",
    "sourceHash": "9b66a4f50ddb2b6f074adce0f0aca882dbe8cbd8987743133f5ce24c223f7e42",
    "summary": "state/consistency/Reservation.js — reservations + bounded-counter escrow (spec §5 fragmentation fix, §10, rule 16).  Two coordination-avoidance tools that sit in front of the commit path:  • ReservationManager — a reservation is itself a USO (single-use, exclusive). Reserving a scarce resource creates a reservation output; it is later CONSUMED on commit or RELEASED/expired. A reservation can never be consumed twice (inherits the USO double-commit guarantee), and an expired reservation cannot mutate protected state (liveness: aborted reservation is eventually released).  • BoundedCounterEscrow — divides decrement rights for a scarce quantity among holders so each can withdraw from its local grant WITHOUT coordination, while preserving the lower-bound invariant (quantity never drops below the floor). Coordination is only needed when a holder exhausts its grant and must be rebalanced. This is the escrow / bounded-counter CRDT pattern.",
    "exports": [
      {
        "name": "ReservationManager",
        "kind": "class",
        "signature": "class ReservationManager",
        "summary": ""
      },
      {
        "name": "BoundedCounterEscrow",
        "kind": "class",
        "signature": "class BoundedCounterEscrow",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/consistency/SerializableQueue",
    "path": "engine/reference/state/consistency/SerializableQueue.md",
    "source": "engine/state/consistency/SerializableQueue.js",
    "import": "/engine/state/consistency/SerializableQueue.js",
    "sourceHash": "06db562db27c08e15648e872616b750d1cc93ad99e6a9c7a1b9f3195e962e9d9",
    "summary": "state/consistency/SerializableQueue.js — Consistency-plane serializable commit queue (spec §3 plane 3, §6, §8 \"Serializable\", rule 24).  The \"Exclusive\"/serializable consistency profile needs commits to be applied in an order equivalent to some serial schedule. This queue admits transactions (each declaring a read-set and write-set), assigns a monotonic commit sequence, and detects when admitting a transaction would create a non-serializable schedule against already-queued/committed transactions (a read-write or write-write conflict on overlapping items). Conflicting transactions are not silently interleaved — the queue rejects them for retry, preserving serializability for the invariants that require it.",
    "exports": [
      {
        "name": "SerializableQueue",
        "kind": "class",
        "signature": "class SerializableQueue",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/entity/EntityRegistry",
    "path": "engine/reference/state/entity/EntityRegistry.md",
    "source": "engine/state/entity/EntityRegistry.js",
    "import": "/engine/state/entity/EntityRegistry.js",
    "sourceHash": "a85f6576e260c1de3d6459c74f3c38467c31c37060f40da2a9b6b1c6a8f59447",
    "summary": "state/entity/EntityRegistry.js — versioned entity state (spec §4, rule 2).  A mutable logical object is represented as a chain of immutable versions. The logical entity id stays stable; each version's id is the content hash of its canonical bytes. \"Editing\" creates a new version pointing at its parent — the old version is never mutated. This is what optimistic concurrency reads against: a transaction's readSet declares the version it expected, and the commit fails if the entity has since advanced (write-skew protection).",
    "exports": [
      {
        "name": "EntityRegistry",
        "kind": "class",
        "signature": "class EntityRegistry",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/entity/ProvenanceStore",
    "path": "engine/reference/state/entity/ProvenanceStore.md",
    "source": "engine/state/entity/ProvenanceStore.js",
    "import": "/engine/state/entity/ProvenanceStore.js",
    "sourceHash": "2c0be6746eb31d96d5680d60c6ca9b597983dd6b67bcd11554af9867f497c748",
    "summary": "state/entity/ProvenanceStore.js — every observation, inference, prediction, and commit carries provenance (spec §14, rule 4). Vocabulary follows W3C PROV (entities, activities, agents, generation, derivation). Provenance lets the engine distinguish directly-observed vs inferred vs model-predicted vs stale vs untrusted data — crucial for the prompt-injection boundary (spec §15): retrieved/tool/model content is recorded as untrusted observation, never as authority.",
    "exports": [
      {
        "name": "ProvenanceStore",
        "kind": "class",
        "signature": "class ProvenanceStore",
        "summary": ""
      },
      {
        "name": "makeProvenance",
        "kind": "function",
        "signature": "makeProvenance(p = {})",
        "summary": "Build a provenance record for a subject (a fact, version, or transaction)."
      },
      {
        "name": "isUntrusted",
        "kind": "function",
        "signature": "isUntrusted(prov)",
        "summary": "True if a provenance record came from an untrusted external source."
      },
      {
        "name": "CERTAINTY",
        "kind": "constant",
        "signature": "CERTAINTY",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/entity/SchemaRegistry",
    "path": "engine/reference/state/entity/SchemaRegistry.md",
    "source": "engine/state/entity/SchemaRegistry.js",
    "import": "/engine/state/entity/SchemaRegistry.js",
    "sourceHash": "9349745dde454a08f6e28ad30e088ff0727e7c7d3e1aa08dc66f42504bc463f4",
    "summary": "state/entity/SchemaRegistry.js — meaning from schemas, not numeric tricks (spec rule 3). Every schema/validator/policy is versioned (spec rule 5) so migrations can reference exact stamps. A schema declares a name, a version, and a validate(value) predicate; validation is structural (legality), never a claim of semantic truth — that comes from commit logic.",
    "exports": [
      {
        "name": "SchemaRegistry",
        "kind": "class",
        "signature": "class SchemaRegistry",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/facts/Branch",
    "path": "engine/reference/state/facts/Branch.md",
    "source": "engine/state/facts/Branch.js",
    "import": "/engine/state/facts/Branch.js",
    "sourceHash": "e630ae3d8cb1b8893bf6cc1b0281e24bacdacbbbe6bc1db3fc550a9a98cffd50",
    "summary": "state/facts/Branch.js — split non-commuting possibilities; merge equivalent; prune invalid.  Core law: \"If A + B = B + A, merge them. If A + B != B + A, branch them.\" An operation is a pure function (store) => void that adds facts / tombstones.",
    "exports": [
      {
        "name": "applySequence",
        "kind": "function",
        "signature": "applySequence(store, ops)",
        "summary": "Apply a sequence of operations to a (cloned) store. Returns the store."
      },
      {
        "name": "commutes",
        "kind": "function",
        "signature": "commutes(base, opA, opB)",
        "summary": "Does applying opA then opB yield the same projection as opB then opA?"
      },
      {
        "name": "branchOrders",
        "kind": "function",
        "signature": "branchOrders(base, opA, opB)",
        "summary": "Produce both order-branches [A→B, B→A] from a base store."
      },
      {
        "name": "mergeEquivalent",
        "kind": "function",
        "signature": "mergeEquivalent(stores)",
        "summary": "Collapse branches with identical projections (merge equivalent)."
      },
      {
        "name": "prune",
        "kind": "function",
        "signature": "prune(stores, constraints)",
        "summary": "Drop branches that fail commit-strength constraints (prune invalid)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/facts/Causality",
    "path": "engine/reference/state/facts/Causality.md",
    "source": "engine/state/facts/Causality.js",
    "import": "/engine/state/facts/Causality.js",
    "sourceHash": "d361f493c2972f8cf58d8484f7904113041f327d6682f40805214f42e15ad5d6",
    "summary": "state/facts/Causality.js — partial order ONLY when a dependency forces it.  Layer law: \"Only causality creates before/after\". Facts with no dependency link stay unordered; we never invent sequence. Independent nodes get a deterministic tie-break (canonical sort) purely for reproducibility, not as claimed truth.",
    "exports": [
      {
        "name": "link",
        "kind": "function",
        "signature": "link(cause, effect)",
        "summary": "A causal link: effect depends on cause (cause must precede effect)."
      },
      {
        "name": "toposort",
        "kind": "function",
        "signature": "toposort(nodes, links = [])",
        "summary": "Partial-order sort. Nodes only ordered where links force it; otherwise deterministic by string. Throws on a causal cycle (an impossible order)."
      },
      {
        "name": "dependsOn",
        "kind": "function",
        "signature": "dependsOn(effect, cause, links = [])",
        "summary": "Transitive dependency test: does `effect` (transitively) depend on `cause`?"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/facts/Constraints",
    "path": "engine/reference/state/facts/Constraints.md",
    "source": "engine/state/facts/Constraints.js",
    "import": "/engine/state/facts/Constraints.js",
    "sourceHash": "ac5330d776308ed80833cad4b03f1e21e7bfd3cf3d58bd00c88ea53478169646",
    "summary": "state/facts/Constraints.js — the laws of the system.  Layer law: runtime uses simple validators; commit uses stronger validators (a superset). A constraint never repairs — it accepts or rejects. When a commit constraint fails, the caller branches / quarantines / requests authority (see CommitGate, M5) rather than silently fixing.",
    "exports": [
      {
        "name": "constraint",
        "kind": "function",
        "signature": "constraint(id, test, opts = {})",
        "summary": "Define a constraint."
      },
      {
        "name": "validateFacts",
        "kind": "function",
        "signature": "validateFacts(liveFacts, constraints, { phase = SCOPE_RUNTIME } = {})",
        "summary": "Validate live facts. phase 'runtime' runs only runtime constraints; phase 'commit' runs ALL (runtime + commit) — commit is strictly stronger."
      },
      {
        "name": "atMostOne",
        "kind": "function",
        "signature": "atMostOne(id, pattern, opts = {})",
        "summary": "No more than one live fact matching a regex (single source of truth)."
      },
      {
        "name": "mutuallyExclusive",
        "kind": "function",
        "signature": "mutuallyExclusive(id, a, b, opts = {})",
        "summary": "Two facts must never be live at once (mutual exclusion)."
      },
      {
        "name": "SCOPE_RUNTIME",
        "kind": "constant",
        "signature": "SCOPE_RUNTIME",
        "summary": ""
      },
      {
        "name": "SCOPE_COMMIT",
        "kind": "constant",
        "signature": "SCOPE_COMMIT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/facts/Fact",
    "path": "engine/reference/state/facts/Fact.md",
    "source": "engine/state/facts/Fact.js",
    "import": "/engine/state/facts/Fact.js",
    "sourceHash": "2938ba8a8e3ca0d1d333a2c9672cc857afe0e0cbe6d17ab26618a43313fb1ac4",
    "summary": "state/facts/Fact.js — canonical facts + tombstones.  Layer law: facts are MONOTONIC. We prefer adding facts, never deleting them. \"Deletion\" is a tombstone fact `revoked(<fact>)`; projection later decides what is currently valid. A fact is just a canonical string predicate so that {A,B} and {B,A} hash identically (see util/hashing.canonicalSetHash).",
    "exports": [
      {
        "name": "fact",
        "kind": "function",
        "signature": "fact(predicate, ...args)",
        "summary": "Build a canonical fact string: fact('hasKey','player','red') → \"hasKey(player,red)\"."
      },
      {
        "name": "revoke",
        "kind": "function",
        "signature": "revoke(f)",
        "summary": "Wrap a fact as a tombstone (the monotonic stand-in for deletion)."
      },
      {
        "name": "isTombstone",
        "kind": "function",
        "signature": "isTombstone(f)",
        "summary": "Is this fact a tombstone?"
      },
      {
        "name": "tombstoneTarget",
        "kind": "function",
        "signature": "tombstoneTarget(f)",
        "summary": "The fact a tombstone revokes, or null."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/facts/FactStore",
    "path": "engine/reference/state/facts/FactStore.md",
    "source": "engine/state/facts/FactStore.js",
    "import": "/engine/state/facts/FactStore.js",
    "sourceHash": "500e73d5772dbcb00e74d615fd9f9a376ca2d0cdc85bcdebeaf372db00422f99",
    "summary": "state/facts/FactStore.js — the unordered, monotonic fact set.  No sequence is stored. `id()` is the order-independent hash of ALL facts (history identity); `liveId()` is the hash of the currently-valid projection (tombstones applied). Merge is a set union — naturally commutative and idempotent (a CRDT-style anti-entropy merge), so two peers that saw events in different orders converge to the same id.",
    "exports": [
      {
        "name": "FactStore",
        "kind": "class",
        "signature": "class FactStore",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/index",
    "path": "engine/reference/state/index.md",
    "source": "engine/state/index.js",
    "import": "/engine/state/index.js",
    "sourceHash": "1bd5b1473a1bc18cd7bd10721b2cf5bf307435651d6f2242bf8cd4a326ea4ca9",
    "summary": "state/index.js — public barrel for the Causal State Engine (CSE), formerly the Universal Resonance State Engine (URC).  Order-on-demand: unordered facts encoded through a resonance codebook, organized spatially, compared by wave-like similarity, repaired through correction codes, branched when order matters, committed only when reality must choose one truth, and projected by observers into experienced sequence.  The CSE upgrade (see plans/causal-state-engine-upgrade-59657d.md) layers a partially-ordered, capability-secured, transactionally-committed world-state system on top of the URC core. The codebook/resonance/spatial layers are kept as the optional indexing/perception extension (spec §16) — never in the trusted authority/correctness path.  Build status: URC core: [x] M0 [x] M1 codebook [x] M2 spatial [x] M3 resonance [x] M4 facts [x] M5 commit [x] M6 observer CSE:      [x] P1 formal core (USO, tx envelope, idempotency, causal, 14-step commit, receipts) [x] P2 single-authority (entity/version, schema, provenance, capabilities, identity, event log, state roots, checkpoints) [x] P3 reliability (outbox, idempotent inbox, sagas+compensation, reconciler, reservations + bounded-counter escrow) [x] P4 concurrency (CRDTs, invariant-confluence classifier, optimistic/write-skew validator, dotted version vectors, HLC) [x] P5 world model (belief vs canonical, object graph, affordances, tool-effect/discrepancy, prediction sandbox, untrusted boundary) [x] P6 distributed (shard router, replicated log, Raft adapter, cross-shard 2PC + recovery, quorum checkpoints) [x] P7 sim/resonance (independent sim clocks, deterministic world dynamics, approximate-retrieve→exact-verify perception index) [x] P8 completeness (proposal pool, serializable queue, policy engine+risk gates, encryption/retention crypto-erase, GC, causal dynamics, TLA+ core stub) [x] P9 hardening (WebCrypto AES-GCM retention, Byzantine adapter, executable bounded model checker + TLC config) CSE COMPLETE: all 12 planes implemented + verified in verify.html.",
    "exports": [
      {
        "name": "AffordanceRegistry",
        "kind": "re-export",
        "signature": "AffordanceRegistry",
        "summary": ""
      },
      {
        "name": "BeliefStore",
        "kind": "re-export",
        "signature": "BeliefStore",
        "summary": ""
      },
      {
        "name": "BoundedCounterEscrow",
        "kind": "re-export",
        "signature": "BoundedCounterEscrow",
        "summary": ""
      },
      {
        "name": "ByzantineAdapter",
        "kind": "re-export",
        "signature": "ByzantineAdapter",
        "summary": ""
      },
      {
        "name": "CERTAINTY",
        "kind": "re-export",
        "signature": "CERTAINTY",
        "summary": ""
      },
      {
        "name": "CORRECTION_ACTIONS",
        "kind": "re-export",
        "signature": "CORRECTION_ACTIONS",
        "summary": ""
      },
      {
        "name": "CORRECTION_TIERS",
        "kind": "re-export",
        "signature": "CORRECTION_TIERS",
        "summary": ""
      },
      {
        "name": "CapabilityRegistry",
        "kind": "re-export",
        "signature": "CapabilityRegistry",
        "summary": ""
      },
      {
        "name": "CausalDynamics",
        "kind": "re-export",
        "signature": "CausalDynamics",
        "summary": ""
      },
      {
        "name": "CausalGraph",
        "kind": "re-export",
        "signature": "CausalGraph",
        "summary": ""
      },
      {
        "name": "CheckpointQuorum",
        "kind": "re-export",
        "signature": "CheckpointQuorum",
        "summary": ""
      },
      {
        "name": "CrossShardCoordinator",
        "kind": "re-export",
        "signature": "CrossShardCoordinator",
        "summary": ""
      },
      {
        "name": "DECISION",
        "kind": "re-export",
        "signature": "DECISION",
        "summary": ""
      },
      {
        "name": "DOMAIN_SEPARATOR",
        "kind": "re-export",
        "signature": "DOMAIN_SEPARATOR",
        "summary": ""
      },
      {
        "name": "DVVSet",
        "kind": "re-export",
        "signature": "DVVSet",
        "summary": ""
      },
      {
        "name": "EFFECT_STATUS",
        "kind": "re-export",
        "signature": "EFFECT_STATUS",
        "summary": ""
      },
      {
        "name": "EVENTLOG_GENESIS",
        "kind": "re-export",
        "signature": "EVENTLOG_GENESIS",
        "summary": ""
      },
      {
        "name": "EntityRegistry",
        "kind": "re-export",
        "signature": "EntityRegistry",
        "summary": ""
      },
      {
        "name": "EventLog",
        "kind": "re-export",
        "signature": "EventLog",
        "summary": ""
      },
      {
        "name": "FactStore",
        "kind": "re-export",
        "signature": "FactStore",
        "summary": ""
      },
      {
        "name": "FencingDomain",
        "kind": "re-export",
        "signature": "FencingDomain",
        "summary": ""
      },
      {
        "name": "GCounter",
        "kind": "re-export",
        "signature": "GCounter",
        "summary": ""
      },
      {
        "name": "GSet",
        "kind": "re-export",
        "signature": "GSet",
        "summary": ""
      },
      {
        "name": "GarbageCollector",
        "kind": "re-export",
        "signature": "GarbageCollector",
        "summary": ""
      },
      {
        "name": "HLC",
        "kind": "re-export",
        "signature": "HLC",
        "summary": ""
      },
      {
        "name": "IdempotencyRegistry",
        "kind": "re-export",
        "signature": "IdempotencyRegistry",
        "summary": ""
      },
      {
        "name": "Inbox",
        "kind": "re-export",
        "signature": "Inbox",
        "summary": ""
      },
      {
        "name": "LWWRegister",
        "kind": "re-export",
        "signature": "LWWRegister",
        "summary": ""
      },
      {
        "name": "ORDER",
        "kind": "re-export",
        "signature": "ORDER",
        "summary": ""
      },
      {
        "name": "ORSet",
        "kind": "re-export",
        "signature": "ORSet",
        "summary": ""
      },
      {
        "name": "ObjectGraph",
        "kind": "re-export",
        "signature": "ObjectGraph",
        "summary": ""
      },
      {
        "name": "OptimisticValidator",
        "kind": "re-export",
        "signature": "OptimisticValidator",
        "summary": ""
      },
      {
        "name": "Outbox",
        "kind": "re-export",
        "signature": "Outbox",
        "summary": ""
      },
      {
        "name": "PATTERN_BITS",
        "kind": "re-export",
        "signature": "PATTERN_BITS",
        "summary": ""
      },
      {
        "name": "PATTERN_COUNT",
        "kind": "re-export",
        "signature": "PATTERN_COUNT",
        "summary": ""
      },
      {
        "name": "PATTERN_H",
        "kind": "re-export",
        "signature": "PATTERN_H",
        "summary": ""
      },
      {
        "name": "PATTERN_W",
        "kind": "re-export",
        "signature": "PATTERN_W",
        "summary": ""
      },
      {
        "name": "PNCounter",
        "kind": "re-export",
        "signature": "PNCounter",
        "summary": ""
      },
      {
        "name": "PRIME_TABLE",
        "kind": "re-export",
        "signature": "PRIME_TABLE",
        "summary": ""
      },
      {
        "name": "PROPOSAL_STATUS",
        "kind": "re-export",
        "signature": "PROPOSAL_STATUS",
        "summary": ""
      },
      {
        "name": "PatternCodebook",
        "kind": "re-export",
        "signature": "PatternCodebook",
        "summary": ""
      },
      {
        "name": "PolicyEngine",
        "kind": "re-export",
        "signature": "PolicyEngine",
        "summary": ""
      },
      {
        "name": "PredictionSandbox",
        "kind": "re-export",
        "signature": "PredictionSandbox",
        "summary": ""
      },
      {
        "name": "ProposalPool",
        "kind": "re-export",
        "signature": "ProposalPool",
        "summary": ""
      },
      {
        "name": "ProvenanceStore",
        "kind": "re-export",
        "signature": "ProvenanceStore",
        "summary": ""
      },
      {
        "name": "RECONCILE_RESULT",
        "kind": "re-export",
        "signature": "RECONCILE_RESULT",
        "summary": ""
      },
      {
        "name": "RELATION",
        "kind": "re-export",
        "signature": "RELATION",
        "summary": ""
      },
      {
        "name": "RISK",
        "kind": "re-export",
        "signature": "RISK",
        "summary": ""
      },
      {
        "name": "RISK_LEVEL",
        "kind": "re-export",
        "signature": "RISK_LEVEL",
        "summary": ""
      },
      {
        "name": "RaftAdapter",
        "kind": "re-export",
        "signature": "RaftAdapter",
        "summary": ""
      },
      {
        "name": "Reconciler",
        "kind": "re-export",
        "signature": "Reconciler",
        "summary": ""
      },
      {
        "name": "ReplicatedLog",
        "kind": "re-export",
        "signature": "ReplicatedLog",
        "summary": ""
      },
      {
        "name": "ReservationManager",
        "kind": "re-export",
        "signature": "ReservationManager",
        "summary": ""
      },
      {
        "name": "ResonanceIndex",
        "kind": "re-export",
        "signature": "ResonanceIndex",
        "summary": ""
      },
      {
        "name": "RetentionManager",
        "kind": "re-export",
        "signature": "RetentionManager",
        "summary": ""
      },
      {
        "name": "SAGA_STATUS",
        "kind": "re-export",
        "signature": "SAGA_STATUS",
        "summary": ""
      },
      {
        "name": "SCOPE_COMMIT",
        "kind": "re-export",
        "signature": "SCOPE_COMMIT",
        "summary": ""
      },
      {
        "name": "SCOPE_RUNTIME",
        "kind": "re-export",
        "signature": "SCOPE_RUNTIME",
        "summary": ""
      },
      {
        "name": "Saga",
        "kind": "re-export",
        "signature": "Saga",
        "summary": ""
      },
      {
        "name": "SchemaRegistry",
        "kind": "re-export",
        "signature": "SchemaRegistry",
        "summary": ""
      },
      {
        "name": "SecureRetentionManager",
        "kind": "re-export",
        "signature": "SecureRetentionManager",
        "summary": ""
      },
      {
        "name": "SerializableQueue",
        "kind": "re-export",
        "signature": "SerializableQueue",
        "summary": ""
      },
      {
        "name": "ShardRouter",
        "kind": "re-export",
        "signature": "ShardRouter",
        "summary": ""
      },
      {
        "name": "SimulationClock",
        "kind": "re-export",
        "signature": "SimulationClock",
        "summary": ""
      },
      {
        "name": "SimulationClockSet",
        "kind": "re-export",
        "signature": "SimulationClockSet",
        "summary": ""
      },
      {
        "name": "TIME_MODES",
        "kind": "re-export",
        "signature": "TIME_MODES",
        "summary": ""
      },
      {
        "name": "TX_SCHEMA_VERSION",
        "kind": "re-export",
        "signature": "TX_SCHEMA_VERSION",
        "summary": ""
      },
      {
        "name": "ToolEffectModel",
        "kind": "re-export",
        "signature": "ToolEffectModel",
        "summary": ""
      },
      {
        "name": "USORegistry",
        "kind": "re-export",
        "signature": "USORegistry",
        "summary": ""
      },
      {
        "name": "USO_KIND",
        "kind": "re-export",
        "signature": "USO_KIND",
        "summary": ""
      },
      {
        "name": "UntrustedBoundary",
        "kind": "re-export",
        "signature": "UntrustedBoundary",
        "summary": ""
      },
      {
        "name": "VersionVector",
        "kind": "re-export",
        "signature": "VersionVector",
        "summary": ""
      },
      {
        "name": "WORLD",
        "kind": "re-export",
        "signature": "WORLD",
        "summary": ""
      },
      {
        "name": "WorldDynamics",
        "kind": "re-export",
        "signature": "WorldDynamics",
        "summary": ""
      },
      {
        "name": "aeadOpen",
        "kind": "re-export",
        "signature": "aeadOpen",
        "summary": ""
      },
      {
        "name": "aeadSeal",
        "kind": "re-export",
        "signature": "aeadSeal",
        "summary": ""
      },
      {
        "name": "applySequence",
        "kind": "re-export",
        "signature": "applySequence",
        "summary": ""
      },
      {
        "name": "atMostOne",
        "kind": "re-export",
        "signature": "atMostOne",
        "summary": ""
      },
      {
        "name": "attenuate",
        "kind": "re-export",
        "signature": "attenuate",
        "summary": ""
      },
      {
        "name": "authorizes",
        "kind": "re-export",
        "signature": "authorizes",
        "summary": ""
      },
      {
        "name": "branchOrders",
        "kind": "re-export",
        "signature": "branchOrders",
        "summary": ""
      },
      {
        "name": "canAuthorize",
        "kind": "re-export",
        "signature": "canAuthorize",
        "summary": ""
      },
      {
        "name": "canonicalBytes",
        "kind": "re-export",
        "signature": "canonicalBytes",
        "summary": ""
      },
      {
        "name": "canonicalId",
        "kind": "re-export",
        "signature": "canonicalId",
        "summary": ""
      },
      {
        "name": "canonicalSetHash",
        "kind": "re-export",
        "signature": "canonicalSetHash",
        "summary": ""
      },
      {
        "name": "canonicalize",
        "kind": "re-export",
        "signature": "canonicalize",
        "summary": ""
      },
      {
        "name": "chooseBranch",
        "kind": "re-export",
        "signature": "chooseBranch",
        "summary": ""
      },
      {
        "name": "chunkCoords2D",
        "kind": "re-export",
        "signature": "chunkCoords2D",
        "summary": ""
      },
      {
        "name": "chunkCoords3D",
        "kind": "re-export",
        "signature": "chunkCoords3D",
        "summary": ""
      },
      {
        "name": "chunkId2D",
        "kind": "re-export",
        "signature": "chunkId2D",
        "summary": ""
      },
      {
        "name": "chunkId3D",
        "kind": "re-export",
        "signature": "chunkId3D",
        "summary": ""
      },
      {
        "name": "classifyConfluence",
        "kind": "re-export",
        "signature": "classifyConfluence",
        "summary": ""
      },
      {
        "name": "commutes",
        "kind": "re-export",
        "signature": "commutes",
        "summary": ""
      },
      {
        "name": "compareHLC",
        "kind": "re-export",
        "signature": "compareHLC",
        "summary": ""
      },
      {
        "name": "computeStateRoot",
        "kind": "re-export",
        "signature": "computeStateRoot",
        "summary": ""
      },
      {
        "name": "constraint",
        "kind": "re-export",
        "signature": "constraint",
        "summary": ""
      },
      {
        "name": "correct",
        "kind": "re-export",
        "signature": "correct",
        "summary": ""
      },
      {
        "name": "cosineSimilarity",
        "kind": "re-export",
        "signature": "cosineSimilarity",
        "summary": ""
      },
      {
        "name": "createCommitCoordinator",
        "kind": "re-export",
        "signature": "createCommitCoordinator",
        "summary": ""
      },
      {
        "name": "createCommitGate",
        "kind": "re-export",
        "signature": "createCommitGate",
        "summary": ""
      },
      {
        "name": "createSigner",
        "kind": "re-export",
        "signature": "createSigner",
        "summary": ""
      },
      {
        "name": "createTimeSource",
        "kind": "re-export",
        "signature": "createTimeSource",
        "summary": ""
      },
      {
        "name": "dct1D",
        "kind": "re-export",
        "signature": "dct1D",
        "summary": ""
      },
      {
        "name": "dct2D",
        "kind": "re-export",
        "signature": "dct2D",
        "summary": ""
      },
      {
        "name": "dependsOn",
        "kind": "re-export",
        "signature": "dependsOn",
        "summary": ""
      },
      {
        "name": "detectWriteSkew",
        "kind": "re-export",
        "signature": "detectWriteSkew",
        "summary": ""
      },
      {
        "name": "exploreCommitMachine",
        "kind": "re-export",
        "signature": "exploreCommitMachine",
        "summary": ""
      },
      {
        "name": "exportKeyRaw",
        "kind": "re-export",
        "signature": "exportKeyRaw",
        "summary": ""
      },
      {
        "name": "fact",
        "kind": "re-export",
        "signature": "fact",
        "summary": ""
      },
      {
        "name": "fromHilbertId2D",
        "kind": "re-export",
        "signature": "fromHilbertId2D",
        "summary": ""
      },
      {
        "name": "fromSpatialId2D",
        "kind": "re-export",
        "signature": "fromSpatialId2D",
        "summary": ""
      },
      {
        "name": "fromSpatialId3D",
        "kind": "re-export",
        "signature": "fromSpatialId3D",
        "summary": ""
      },
      {
        "name": "generateAesKey",
        "kind": "re-export",
        "signature": "generateAesKey",
        "summary": ""
      },
      {
        "name": "hammingDistance",
        "kind": "re-export",
        "signature": "hammingDistance",
        "summary": ""
      },
      {
        "name": "hashFactString",
        "kind": "re-export",
        "signature": "hashFactString",
        "summary": ""
      },
      {
        "name": "hashIdEquals",
        "kind": "re-export",
        "signature": "hashIdEquals",
        "summary": ""
      },
      {
        "name": "hashIdFast",
        "kind": "re-export",
        "signature": "hashIdFast",
        "summary": ""
      },
      {
        "name": "hashIdSecure",
        "kind": "re-export",
        "signature": "hashIdSecure",
        "summary": ""
      },
      {
        "name": "hashU32Sequence",
        "kind": "re-export",
        "signature": "hashU32Sequence",
        "summary": ""
      },
      {
        "name": "hexId",
        "kind": "re-export",
        "signature": "hexId",
        "summary": ""
      },
      {
        "name": "hilbertId2D",
        "kind": "re-export",
        "signature": "hilbertId2D",
        "summary": ""
      },
      {
        "name": "idct1D",
        "kind": "re-export",
        "signature": "idct1D",
        "summary": ""
      },
      {
        "name": "idct2D",
        "kind": "re-export",
        "signature": "idct2D",
        "summary": ""
      },
      {
        "name": "importAesKey",
        "kind": "re-export",
        "signature": "importAesKey",
        "summary": ""
      },
      {
        "name": "ingestUntrusted",
        "kind": "re-export",
        "signature": "ingestUntrusted",
        "summary": ""
      },
      {
        "name": "isTombstone",
        "kind": "re-export",
        "signature": "isTombstone",
        "summary": ""
      },
      {
        "name": "isUSO",
        "kind": "re-export",
        "signature": "isUSO",
        "summary": ""
      },
      {
        "name": "isUntrusted",
        "kind": "re-export",
        "signature": "isUntrusted",
        "summary": ""
      },
      {
        "name": "l2Distance",
        "kind": "re-export",
        "signature": "l2Distance",
        "summary": ""
      },
      {
        "name": "link",
        "kind": "re-export",
        "signature": "link",
        "summary": ""
      },
      {
        "name": "makeAffordance",
        "kind": "re-export",
        "signature": "makeAffordance",
        "summary": ""
      },
      {
        "name": "makeCapability",
        "kind": "re-export",
        "signature": "makeCapability",
        "summary": ""
      },
      {
        "name": "makeCheckpoint",
        "kind": "re-export",
        "signature": "makeCheckpoint",
        "summary": ""
      },
      {
        "name": "makeCodeEntry",
        "kind": "re-export",
        "signature": "makeCodeEntry",
        "summary": ""
      },
      {
        "name": "makeEffectIntent",
        "kind": "re-export",
        "signature": "makeEffectIntent",
        "summary": ""
      },
      {
        "name": "makeProvenance",
        "kind": "re-export",
        "signature": "makeProvenance",
        "summary": ""
      },
      {
        "name": "makeReceipt",
        "kind": "re-export",
        "signature": "makeReceipt",
        "summary": ""
      },
      {
        "name": "makeTransaction",
        "kind": "re-export",
        "signature": "makeTransaction",
        "summary": ""
      },
      {
        "name": "makeUSO",
        "kind": "re-export",
        "signature": "makeUSO",
        "summary": ""
      },
      {
        "name": "makeWitness",
        "kind": "re-export",
        "signature": "makeWitness",
        "summary": ""
      },
      {
        "name": "mergeEquivalent",
        "kind": "re-export",
        "signature": "mergeEquivalent",
        "summary": ""
      },
      {
        "name": "mutuallyExclusive",
        "kind": "re-export",
        "signature": "mutuallyExclusive",
        "summary": ""
      },
      {
        "name": "nearestAttractor",
        "kind": "re-export",
        "signature": "nearestAttractor",
        "summary": ""
      },
      {
        "name": "neighbors2D",
        "kind": "re-export",
        "signature": "neighbors2D",
        "summary": ""
      },
      {
        "name": "objectVersionOutput",
        "kind": "re-export",
        "signature": "objectVersionOutput",
        "summary": ""
      },
      {
        "name": "packPattern",
        "kind": "re-export",
        "signature": "packPattern",
        "summary": ""
      },
      {
        "name": "parseHashId",
        "kind": "re-export",
        "signature": "parseHashId",
        "summary": ""
      },
      {
        "name": "pattern3x3ToVector",
        "kind": "re-export",
        "signature": "pattern3x3ToVector",
        "summary": ""
      },
      {
        "name": "patternHashId",
        "kind": "re-export",
        "signature": "patternHashId",
        "summary": ""
      },
      {
        "name": "policyRule",
        "kind": "re-export",
        "signature": "policyRule",
        "summary": ""
      },
      {
        "name": "primeAt",
        "kind": "re-export",
        "signature": "primeAt",
        "summary": ""
      },
      {
        "name": "projectSequence",
        "kind": "re-export",
        "signature": "projectSequence",
        "summary": ""
      },
      {
        "name": "prune",
        "kind": "re-export",
        "signature": "prune",
        "summary": ""
      },
      {
        "name": "quantize",
        "kind": "re-export",
        "signature": "quantize",
        "summary": ""
      },
      {
        "name": "resonanceDCT",
        "kind": "re-export",
        "signature": "resonanceDCT",
        "summary": ""
      },
      {
        "name": "resonanceWHT",
        "kind": "re-export",
        "signature": "resonanceWHT",
        "summary": ""
      },
      {
        "name": "revoke",
        "kind": "re-export",
        "signature": "revoke",
        "summary": ""
      },
      {
        "name": "rootFromStores",
        "kind": "re-export",
        "signature": "rootFromStores",
        "summary": ""
      },
      {
        "name": "sagaStep",
        "kind": "re-export",
        "signature": "sagaStep",
        "summary": ""
      },
      {
        "name": "sealTransaction",
        "kind": "re-export",
        "signature": "sealTransaction",
        "summary": ""
      },
      {
        "name": "sealTransactionFast",
        "kind": "re-export",
        "signature": "sealTransactionFast",
        "summary": ""
      },
      {
        "name": "secureCryptoAvailable",
        "kind": "re-export",
        "signature": "secureCryptoAvailable",
        "summary": ""
      },
      {
        "name": "sigContains",
        "kind": "re-export",
        "signature": "sigContains",
        "summary": ""
      },
      {
        "name": "sigEquals",
        "kind": "re-export",
        "signature": "sigEquals",
        "summary": ""
      },
      {
        "name": "spatialId2D",
        "kind": "re-export",
        "signature": "spatialId2D",
        "summary": ""
      },
      {
        "name": "spatialId3D",
        "kind": "re-export",
        "signature": "spatialId3D",
        "summary": ""
      },
      {
        "name": "symbolicSig",
        "kind": "re-export",
        "signature": "symbolicSig",
        "summary": ""
      },
      {
        "name": "symmetries",
        "kind": "re-export",
        "signature": "symmetries",
        "summary": ""
      },
      {
        "name": "tombstoneTarget",
        "kind": "re-export",
        "signature": "tombstoneTarget",
        "summary": ""
      },
      {
        "name": "toposort",
        "kind": "re-export",
        "signature": "toposort",
        "summary": ""
      },
      {
        "name": "transactionBody",
        "kind": "re-export",
        "signature": "transactionBody",
        "summary": ""
      },
      {
        "name": "unpackPattern",
        "kind": "re-export",
        "signature": "unpackPattern",
        "summary": ""
      },
      {
        "name": "validateFacts",
        "kind": "re-export",
        "signature": "validateFacts",
        "summary": ""
      },
      {
        "name": "verifyCheckpoint",
        "kind": "re-export",
        "signature": "verifyCheckpoint",
        "summary": ""
      },
      {
        "name": "verifyWithKey",
        "kind": "re-export",
        "signature": "verifyWithKey",
        "summary": ""
      },
      {
        "name": "walshHadamard",
        "kind": "re-export",
        "signature": "walshHadamard",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/integrity/Checkpoint",
    "path": "engine/reference/state/integrity/Checkpoint.md",
    "source": "engine/state/integrity/Checkpoint.js",
    "import": "/engine/state/integrity/Checkpoint.js",
    "sourceHash": "46b5a0c1dc9e58cb7b25eeb592bb3cbd9cbfba0aad688589a7e6ab003af756ff",
    "summary": "state/integrity/Checkpoint.js — compaction + fast restoration (spec §13).  A checkpoint summarizes history without pretending it never existed: it links to the previous checkpoint and the event range it covers, and pins the canonical state root, unspent-output root, and policy/schema/validator versions. A restored system must verify its state root before accepting new commits (spec rule 64). Checkpoints carry an optional authority signature.",
    "exports": [
      {
        "name": "makeCheckpoint",
        "kind": "function",
        "signature": "makeCheckpoint(c = {})",
        "summary": "Build a checkpoint record."
      },
      {
        "name": "verifyCheckpoint",
        "kind": "function",
        "signature": "verifyCheckpoint(checkpoint, computedStateRoot, predecessor = null)",
        "summary": "Verify a checkpoint's stateRoot matches a freshly computed root, and (if a predecessor is provided) that the chain links correctly (spec rule 60,64)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/integrity/EventLog",
    "path": "engine/reference/state/integrity/EventLog.md",
    "source": "engine/state/integrity/EventLog.js",
    "import": "/engine/state/integrity/EventLog.js",
    "sourceHash": "eaebe8fceca85068f8b1037ead95e891f7680436b4312537a0e0ee4c707ee355",
    "summary": "state/integrity/EventLog.js — append-only commit stream (spec §13).  Committed changes are appended to an immutable, hash-chained event log. Materialized views can be rebuilt without altering history (event sourcing). Each entry links to the previous entry's hash, so any tampering with earlier history changes every subsequent link — a lightweight Merkle chain. The hash is the fast tagged id of the canonical entry (hot path); authority signatures live on the witness receipts the entries reference.",
    "exports": [
      {
        "name": "EventLog",
        "kind": "class",
        "signature": "class EventLog",
        "summary": ""
      },
      {
        "name": "EVENTLOG_GENESIS",
        "kind": "re-export",
        "signature": "EVENTLOG_GENESIS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/integrity/GarbageCollector",
    "path": "engine/reference/state/integrity/GarbageCollector.md",
    "source": "engine/state/integrity/GarbageCollector.js",
    "import": "/engine/state/integrity/GarbageCollector.js",
    "sourceHash": "62218686e9650b899a6c141660947b1ad328416d08db1db03bf012677b247968",
    "summary": "state/integrity/GarbageCollector.js — Integrity-plane garbage collection (spec §3 plane 8, rule 61; liveness \"GC never removes pinned authoritative state\").  GC reclaims storage by collecting objects that are no longer reachable from a set of SIGNED ROOTS (latest checkpoint, unspent outputs, retained branches) and not protected by a retention policy. It is mark-and-sweep over the reference graph: anything reachable from a root — or explicitly pinned — is retained; everything else is eligible. The hard invariant is that GC can NEVER remove pinned authoritative state, even if it looks unreferenced.",
    "exports": [
      {
        "name": "GarbageCollector",
        "kind": "class",
        "signature": "class GarbageCollector",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/integrity/Retention",
    "path": "engine/reference/state/integrity/Retention.md",
    "source": "engine/state/integrity/Retention.js",
    "import": "/engine/state/integrity/Retention.js",
    "sourceHash": "ef281fa36c2cab017da5d495db57940736d793de9bfc3559b79622010d4ddc3a",
    "summary": "state/integrity/Retention.js — Integrity-plane encryption & retention manager (spec §13 \"Privacy and deletion\", rule 62).  Append-only logs conflict with deletion requirements. The resolution: store sensitive payloads ENCRYPTED under a scoped key, leaving only minimal, non-sensitive audit metadata in the permanent record. Destroying the scope key renders the encrypted payload infeasible to recover — NIST \"cryptographic erase\" — so the audit trail survives while the sensitive bytes are irrecoverable. The cipher here is a deterministic keyed stream (model-grade, not production crypto): the point is the KEY-LIFECYCLE invariant, i.e. erase the key ⇒ payload unrecoverable, metadata retained.",
    "exports": [
      {
        "name": "RetentionManager",
        "kind": "class",
        "signature": "class RetentionManager",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/integrity/SecureCrypto",
    "path": "engine/reference/state/integrity/SecureCrypto.md",
    "source": "engine/state/integrity/SecureCrypto.js",
    "import": "/engine/state/integrity/SecureCrypto.js",
    "sourceHash": "deee6e24372e7688689cd9bd28d157ff7dabe6c1266972b35492195e4ac92993",
    "summary": "state/integrity/SecureCrypto.js — production-grade authenticated encryption (spec §13 privacy, §17 deterministic-core boundary).  Real AEAD via Web Crypto AES-256-GCM. Used by SecureRetention for sensitive payloads so that destroying the key (cryptographic erase) renders ciphertext infeasible to recover, and any tampering with ciphertext/AAD fails the GCM authentication tag. This is the production swap-in for the model-grade keyed stream used elsewhere. All operations are async (SubtleCrypto); callers that need a sync path keep the deterministic fallback in RetentionManager.",
    "exports": [
      {
        "name": "secureCryptoAvailable",
        "kind": "function",
        "signature": "secureCryptoAvailable()",
        "summary": ""
      },
      {
        "name": "bytesToHex",
        "kind": "function",
        "signature": "bytesToHex(bytes)",
        "summary": ""
      },
      {
        "name": "hexToBytes",
        "kind": "function",
        "signature": "hexToBytes(hex)",
        "summary": ""
      },
      {
        "name": "generateAesKey",
        "kind": "function",
        "signature": "async generateAesKey()",
        "summary": "Generate a fresh AES-256-GCM key (extractable, for raw export/erase tests)."
      },
      {
        "name": "exportKeyRaw",
        "kind": "function",
        "signature": "async exportKeyRaw(key)",
        "summary": ""
      },
      {
        "name": "importAesKey",
        "kind": "function",
        "signature": "async importAesKey(raw)",
        "summary": ""
      },
      {
        "name": "aeadSeal",
        "kind": "function",
        "signature": "async aeadSeal(key, plaintext, aad = '')",
        "summary": "AEAD-seal a plaintext string. `aad` (additional authenticated data) binds the ciphertext to a context (e.g. the scope id) without encrypting it."
      },
      {
        "name": "aeadOpen",
        "kind": "function",
        "signature": "async aeadOpen(key, envelope, aad = '')",
        "summary": "AEAD-open an envelope. Returns plaintext, or null if the key is wrong/erased or the ciphertext/AAD was tampered with (GCM tag check fails)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/integrity/SecureRetention",
    "path": "engine/reference/state/integrity/SecureRetention.md",
    "source": "engine/state/integrity/SecureRetention.js",
    "import": "/engine/state/integrity/SecureRetention.js",
    "sourceHash": "d6d48eb8ac1236ae39dc2d650e98eaa4a623c14edc64db94ffc2867cc47ffa57",
    "summary": "state/integrity/SecureRetention.js — production AES-256-GCM retention manager (spec §13, rule 62). The cryptographic counterpart of RetentionManager.  Sensitive payloads are sealed under a per-scope AES-GCM key held only in memory as a non-extractable-by-policy CryptoKey reference. Cryptographic erase drops that reference, after which the ciphertext is infeasible to recover (NIST crypto-erase), while non-sensitive audit metadata on the envelope survives. GCM's authentication tag also makes any tampering with the ciphertext or the scope-bound AAD fail closed (open → null).",
    "exports": [
      {
        "name": "SecureRetentionManager",
        "kind": "class",
        "signature": "class SecureRetentionManager",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/integrity/StateRoot",
    "path": "engine/reference/state/integrity/StateRoot.md",
    "source": "engine/state/integrity/StateRoot.js",
    "import": "/engine/state/integrity/StateRoot.js",
    "sourceHash": "ad2a2eb8c80cd5db7feac4530ba93845649c7eb13012fa781698dba0ebd21556",
    "summary": "state/integrity/StateRoot.js — Merkle-style canonical state root (spec §13,§19).  A state root is the hash of the canonical, ORDER-INDEPENDENT summary of the authoritative state: the live fact set, the unspent-output id set, and the entity head version ids. The committed state root must exactly match the committed outputs (safety invariant). A hash proves exact content only — not correctness — so the root is used for integrity/restoration, never as a semantic-truth or authority claim (spec rule 52).",
    "exports": [
      {
        "name": "computeStateRoot",
        "kind": "function",
        "signature": "computeStateRoot({ facts = [], unspent = [], entityHeads = [] } = {})",
        "summary": "Compute a state root from the authoritative components. Any iterable is accepted; members are sorted for order-independence."
      },
      {
        "name": "rootFromStores",
        "kind": "function",
        "signature": "rootFromStores({ factStore = null, usoRegistry = null, entityRegistry = null } = {})",
        "summary": "Convenience: derive a state root from live engine registries."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/observer/Projection",
    "path": "engine/reference/state/observer/Projection.md",
    "source": "engine/state/observer/Projection.js",
    "import": "/engine/state/observer/Projection.js",
    "sourceHash": "d2300c07124521ef57b540e6bcbcf2761358fb4dac9e67ef4617793089ee1200",
    "summary": "state/observer/Projection.js — the observer creates EXPERIENCED order.  Core truth may be unordered or branched. An observer sees one path, but that is only a projection: render order is not truth, UI order is not truth, debug order is not truth. Only committed facts are canonical — so every projection here carries `isTruth: false` and a witness. Turning a projection into truth requires a CommitGate.",
    "exports": [
      {
        "name": "projectSequence",
        "kind": "function",
        "signature": "projectSequence(store, links = [])",
        "summary": "Project one experienced sequence from a fact store. Independent facts stay deterministically ordered (reproducible), causal links force precedence."
      },
      {
        "name": "chooseBranch",
        "kind": "function",
        "signature": "chooseBranch(branches, selector = ()",
        "summary": "Choose one branch for an observer to experience. Does NOT commit — the other branches remain possible (recorded as \"rejected/not observed\" in the witness) until a CommitGate finalizes one as canonical."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/perception/ResonanceIndex",
    "path": "engine/reference/state/perception/ResonanceIndex.md",
    "source": "engine/state/perception/ResonanceIndex.js",
    "import": "/engine/state/perception/ResonanceIndex.js",
    "sourceHash": "0e3f5587329856f3053582785978e91908c9700a31307d544d93832f72857b64",
    "summary": "state/perception/ResonanceIndex.js — the Resonance/Perception extension reattached as an OPTIONAL indexing layer (spec §16, rules 52–56).  This is where the codebook / resonance / spatial layers belong: approximate retrieval, never the trusted authority path. The discipline is strict and one-directional:  approximate similarity  → retrieves CANDIDATES   (cosine over feature vectors) exact identity (hash)    → verifies BYTES         (cryptographic/fast hash) semantic constraints     → verify MEANING         (predicate over content) commit logic             → establishes TRUTH      (elsewhere; not here)  A near match is only ever a suggestion. This module will NEVER return a similar-but-not-byte-identical item as a verified match — similarity suggests candidates; it never establishes identity (rule 53). Nearest-neighbour search may repair a visual cache or rank suggestions, but must never silently repair inventory, permissions, ownership, or other authoritative semantic state.",
    "exports": [
      {
        "name": "ResonanceIndex",
        "kind": "class",
        "signature": "class ResonanceIndex",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/replication/ByzantineAdapter",
    "path": "engine/reference/state/replication/ByzantineAdapter.md",
    "source": "engine/state/replication/ByzantineAdapter.js",
    "import": "/engine/state/replication/ByzantineAdapter.js",
    "sourceHash": "64828e6cdbfb7a1432377334ea3070c1a6c5e7def1e78a1488fbd9bf36d2a1dc",
    "summary": "state/replication/ByzantineAdapter.js — optional Byzantine-fault-tolerant authority (spec §8 hostile peer-to-peer profile, rule 38).  This is the explicitly-separate hostile-P2P profile, NOT implied by the default crash-fault deployment. It tolerates up to f Byzantine (arbitrary / malicious) nodes given n ≥ 3f+1 members, committing a value only when at least a 2f+1 quorum cast MATCHING votes for it. Two safety mechanisms:  • Equivocation detection — a node that votes for two different values in the same round is provably faulty; it is marked Byzantine and ALL its votes are discarded, so a double-voter cannot help two values reach quorum. • 2f+1 quorum — with n ≥ 3f+1 and ≤ f faulty nodes, any value with 2f+1 votes has ≥ f+1 honest votes, so two conflicting values can never both commit (their honest supporters would have to overlap).  Votes are expected to be signed; an optional verifier rejects unsigned/forged votes. Membership/Sybil control is a deployment policy declared separately.",
    "exports": [
      {
        "name": "ByzantineAdapter",
        "kind": "class",
        "signature": "class ByzantineAdapter",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/replication/CheckpointQuorum",
    "path": "engine/reference/state/replication/CheckpointQuorum.md",
    "source": "engine/state/replication/CheckpointQuorum.js",
    "import": "/engine/state/replication/CheckpointQuorum.js",
    "sourceHash": "de90fc4b44a4011222359cb41ccf5fb87ab0f64d6c306b498cbbe204afd95cb7",
    "summary": "state/replication/CheckpointQuorum.js — quorum-signed checkpoint proofs (spec §13 checkpoints + §8 replication, rule 64).  A checkpoint summarizes history with a canonical state root. In a replicated deployment a checkpoint becomes authoritative only when a QUORUM of members attest to the SAME state root — this is the proof a restored node verifies before accepting commits (rule 64). Members that attest a different root are recorded as DIVERGENT and never counted toward the quorum, so a minority of faulty/forked replicas cannot finalize a bad checkpoint.",
    "exports": [
      {
        "name": "CheckpointQuorum",
        "kind": "class",
        "signature": "class CheckpointQuorum",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/replication/CrossShardCoordinator",
    "path": "engine/reference/state/replication/CrossShardCoordinator.md",
    "source": "engine/state/replication/CrossShardCoordinator.js",
    "import": "/engine/state/replication/CrossShardCoordinator.js",
    "sourceHash": "58d046977273af707a6faaea3ed3e6253b30a58f82e0d96ad0fe2671a9399e5d",
    "summary": "state/replication/CrossShardCoordinator.js — cross-domain atomic commit (spec §10, rule 40).  Cross-domain atomicity is the most expensive operation, so it is used only when true all-or-nothing behavior is required. This coordinator implements two-phase commit with the §10 hardening: • locks are acquired in CANONICAL order (sorted shard/key) to avoid deadlock; • a durable PREPARED record is written so a coordinator that crashes after prepare can be recovered and the commit completed (classic 2PC blocks on coordinator failure; the prepared record makes it recoverable); • for operations that do NOT need atomicity, a SAGA fallback is offered instead, since compensation is cheaper than distributed commit.",
    "exports": [
      {
        "name": "CrossShardCoordinator",
        "kind": "class",
        "signature": "class CrossShardCoordinator",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/replication/RaftAdapter",
    "path": "engine/reference/state/replication/RaftAdapter.md",
    "source": "engine/state/replication/RaftAdapter.js",
    "import": "/engine/state/replication/RaftAdapter.js",
    "sourceHash": "9f5e598c3a2b6d304fc065fa64afc376cfd67f72f173bacd92e816e72b97d990",
    "summary": "state/replication/RaftAdapter.js — crash-fault replicated authority (spec §8 Replication, rules 37–39).  An in-memory Raft cluster used where authority is genuinely SHARED. It manages leader election (with the Raft up-to-date restriction so a leader never lacks a committed entry) and quorum commit: a command is committed only once it lives on a majority of the cluster, so it survives any minority of crashes. The failure model is explicitly CRASH-FAULT (not Byzantine), and progress requires a quorum — when too many nodes are down the cluster correctly STALLS rather than risking divergence (rule 38/39: declare the failure model; partitions force an availability/consistency choice).",
    "exports": [
      {
        "name": "RaftAdapter",
        "kind": "class",
        "signature": "class RaftAdapter",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/replication/ReplicatedLog",
    "path": "engine/reference/state/replication/ReplicatedLog.md",
    "source": "engine/state/replication/ReplicatedLog.js",
    "import": "/engine/state/replication/ReplicatedLog.js",
    "sourceHash": "c705b4927fce176bb782e9b6071128a951b9214c75b7a146901ab2d3b75d67da",
    "summary": "state/replication/ReplicatedLog.js — a single replica's replicated commit log (spec §8 \"Replication\", §11 consensus-backed commit record).  Implements the Raft log model: each entry is { index, term, command }. The LOG-MATCHING property is enforced on replication — an AppendEntries is rejected unless the follower's entry at prevIndex has prevTerm; conflicting suffixes are truncated before appending. Consequently, if two logs hold an entry with the same index and term, the logs are identical up to that index. `commitIndex` only advances over entries known durable on a quorum (the RaftAdapter drives that), so a committed entry is never lost under the declared crash-fault model.",
    "exports": [
      {
        "name": "ReplicatedLog",
        "kind": "class",
        "signature": "class ReplicatedLog",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/replication/ShardRouter",
    "path": "engine/reference/state/replication/ShardRouter.md",
    "source": "engine/state/replication/ShardRouter.js",
    "import": "/engine/state/replication/ShardRouter.js",
    "sourceHash": "6834395199d1df1fdb68a514278841c31af5379030ec0187562730f2bb2d0814",
    "summary": "state/replication/ShardRouter.js — deterministic key→shard routing and commit-domain boundaries (spec §10, rule 1 of cross-domain preference order).  A shard is a commit domain: state strongly related to an invariant should land in ONE shard so its commit is local and atomic. The router maps a logical key to a shard deterministically (same key → same shard on every node) using the engine's canonical fast hash, so routing needs no coordination. Transactions touching more than one shard are flagged as cross-shard (handled by the CrossShardCoordinator) — the router never silently spans domains.",
    "exports": [
      {
        "name": "ShardRouter",
        "kind": "class",
        "signature": "class ShardRouter",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/resonance/ResonanceVector",
    "path": "engine/reference/state/resonance/ResonanceVector.md",
    "source": "engine/state/resonance/ResonanceVector.js",
    "import": "/engine/state/resonance/ResonanceVector.js",
    "sourceHash": "258e3eb24924ee8be631265e23c485040caafc541d2a10f096cac836abce6129",
    "summary": "state/resonance/ResonanceVector.js — build + compare resonance signatures and snap to the nearest attractor by SIMILARITY.  Layer law: \"resonance suggests\". This module reports closeness; it never decides identity (hash) or meaning (symbolicSig) or truth (commit). Two patterns can be near in resonance yet mean opposites (potion vs poison) — callers must still check symbolicSig / hash / constraints before trusting.",
    "exports": [
      {
        "name": "resonanceWHT",
        "kind": "function",
        "signature": "resonanceWHT(id)",
        "summary": "Resonance vector for a tiny 3x3 pattern (Walsh/Hadamard; integer-exact)."
      },
      {
        "name": "resonanceDCT",
        "kind": "function",
        "signature": "resonanceDCT(block, N)",
        "summary": "Resonance vector for an NxN visual block (DCT-II)."
      },
      {
        "name": "cosineSimilarity",
        "kind": "function",
        "signature": "cosineSimilarity(a, b)",
        "summary": "Cosine similarity in [-1, 1] (1 = identical direction). 0 if either is null."
      },
      {
        "name": "l2Distance",
        "kind": "function",
        "signature": "l2Distance(a, b)",
        "summary": "Euclidean (L2) distance between two equal-length vectors."
      },
      {
        "name": "nearestAttractor",
        "kind": "function",
        "signature": "nearestAttractor(vec, attractors, { metric = 'cosine' } = {})",
        "summary": "Nearest attractor by similarity. metric 'cosine' (higher score = closer) or 'l2' (score = negative distance so higher is always closer)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/resonance/Transforms",
    "path": "engine/reference/state/resonance/Transforms.md",
    "source": "engine/state/resonance/Transforms.js",
    "import": "/engine/state/resonance/Transforms.js",
    "sourceHash": "c84066ca406382cb0d10de65eff1a96df8db8be82adb83da43e76a9aeb4e67b6",
    "summary": "state/resonance/Transforms.js — Phase 3 transforms.  Walsh/Hadamard  tiny binary patterns (3x3, 4x4)   [new] DCT-II          small visual blocks (8x8, 16x16)  Scale routing (per the plan): Walsh for tiny binary, DCT for small visual, wavelets for 32x32+/3D (added later). These produce the \"resonance vector\": a compressed signature of what a pattern RESEMBLES — never its identity.",
    "exports": [
      {
        "name": "walshHadamard",
        "kind": "function",
        "signature": "walshHadamard(input)",
        "summary": "In-place-style fast WHT. Integer input → integer output. Length must be a power of two. WHT(WHT(v)) === n * v (involutive up to the length scale)."
      },
      {
        "name": "pattern3x3ToVector",
        "kind": "function",
        "signature": "pattern3x3ToVector(id)",
        "summary": "Map a packed 3x3 pattern to a length-16 bipolar vector ({0,1} → {-1,+1}, zero-padded to the next power of two) ready for the WHT."
      },
      {
        "name": "dct1D",
        "kind": "function",
        "signature": "dct1D(input)",
        "summary": "1-D DCT-II (orthonormal)."
      },
      {
        "name": "idct1D",
        "kind": "function",
        "signature": "idct1D(input)",
        "summary": "1-D inverse DCT-II (orthonormal)."
      },
      {
        "name": "dct2D",
        "kind": "function",
        "signature": "dct2D(block, N)",
        "summary": "2-D DCT-II of an NxN block (row-major Float array of length N*N)."
      },
      {
        "name": "idct2D",
        "kind": "function",
        "signature": "idct2D(block, N)",
        "summary": "2-D inverse DCT-II."
      },
      {
        "name": "quantize",
        "kind": "function",
        "signature": "quantize(vec, q = 1)",
        "summary": "Quantize a coefficient vector to integers by step `q` (lossy resonance)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/sim/WorldDynamics",
    "path": "engine/reference/state/sim/WorldDynamics.md",
    "source": "engine/state/sim/WorldDynamics.js",
    "import": "/engine/state/sim/WorldDynamics.js",
    "sourceHash": "ce1f249abc2d30204c6aa8ab63199d6f4d899008a06fdb238d41afa66190b1a4",
    "summary": "state/sim/WorldDynamics.js — deterministic stepped world dynamics over simulation time (spec §17 CPU deterministic core, rules 66/68 deterministic replay).  World dynamics advance simulated state one tick at a time. To keep canonical state reproducible (and replayable for verification), any randomness comes from a SEEDED deterministic PRNG — never Math.random or wall-clock. Running the same dynamics from the same seed and inputs always yields byte-identical results, which deterministic replay and fault-injection testing depend on.",
    "exports": [
      {
        "name": "WorldDynamics",
        "kind": "class",
        "signature": "class WorldDynamics",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/spatial/SpatialCode",
    "path": "engine/reference/state/spatial/SpatialCode.md",
    "source": "engine/state/spatial/SpatialCode.js",
    "import": "/engine/state/spatial/SpatialCode.js",
    "sourceHash": "1ae3df44bb0beb06b17615406a3fdc8199b9a486254b63b065849012903f4478",
    "summary": "state/spatial/SpatialCode.js — Phase 2: a pattern knows WHERE it belongs.  Layer law: \"Morton = hot runtime, Hilbert = cold storage / large chunk packing\". We reuse the engine's deterministic MathBits curves rather than re-deriving them; this module only adds chunk addressing + neighbor lookup and the URC contract that spatialID is \"where\", never \"what\" or \"truth\".",
    "exports": [
      {
        "name": "spatialId2D",
        "kind": "function",
        "signature": "spatialId2D(x, y)",
        "summary": "2D Morton/Z-order spatial id (16 bits per axis)."
      },
      {
        "name": "fromSpatialId2D",
        "kind": "function",
        "signature": "fromSpatialId2D(code)",
        "summary": "Inverse of spatialId2D → [x, y]."
      },
      {
        "name": "spatialId3D",
        "kind": "function",
        "signature": "spatialId3D(x, y, z)",
        "summary": "3D Morton spatial id (10 bits per axis)."
      },
      {
        "name": "fromSpatialId3D",
        "kind": "function",
        "signature": "fromSpatialId3D(code)",
        "summary": "Inverse of spatialId3D → [x, y, z]."
      },
      {
        "name": "hilbertId2D",
        "kind": "function",
        "signature": "hilbertId2D(n, x, y)",
        "summary": "Hilbert distance for (x,y) on a 2^k grid of side `n`."
      },
      {
        "name": "fromHilbertId2D",
        "kind": "function",
        "signature": "fromHilbertId2D(n, d)",
        "summary": "Inverse of hilbertId2D → [x, y]."
      },
      {
        "name": "chunkCoords2D",
        "kind": "function",
        "signature": "chunkCoords2D(x, y, chunkSize)",
        "summary": "World coords → chunk coords for a square chunk grid."
      },
      {
        "name": "chunkId2D",
        "kind": "function",
        "signature": "chunkId2D(x, y, chunkSize)",
        "summary": "Stable chunk id (Morton of chunk coords) for GPU-buffer packing + cache locality."
      },
      {
        "name": "chunkCoords3D",
        "kind": "function",
        "signature": "chunkCoords3D(x, y, z, chunkSize)",
        "summary": ""
      },
      {
        "name": "chunkId3D",
        "kind": "function",
        "signature": "chunkId3D(x, y, z, chunkSize)",
        "summary": ""
      },
      {
        "name": "neighbors2D",
        "kind": "function",
        "signature": "neighbors2D(x, y, { diagonal = false } = {})",
        "summary": "Spatial ids of a cell's neighbors (non-negative coords only)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/time/Fencing",
    "path": "engine/reference/state/time/Fencing.md",
    "source": "engine/state/time/Fencing.js",
    "import": "/engine/state/time/Fencing.js",
    "sourceHash": "67e97d89c0134475a8bcde12673e805b6b9c5f57629ba5deaef3388450f5786c",
    "summary": "state/time/Fencing.js — monotonic fencing tokens (spec §9, rule 12).  A lease optimizes liveness; it is NOT final authority. A paused client may resume after its lease expired. Correctness-critical resources therefore require a monotonically increasing fencing token that the PROTECTED RESOURCE itself verifies: a stale token can never mutate protected state (safety invariant, spec §19). Each commit domain issues strictly increasing tokens; the domain rejects any token <= the last one it accepted.",
    "exports": [
      {
        "name": "FencingDomain",
        "kind": "class",
        "signature": "class FencingDomain",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/time/SimulationClock",
    "path": "engine/reference/state/time/SimulationClock.md",
    "source": "engine/state/time/SimulationClock.js",
    "import": "/engine/state/time/SimulationClock.js",
    "sourceHash": "48b4876a848da392b5b3928399217219a96e4e6bbf4d7e3a37fc20e2fd702170",
    "summary": "state/time/SimulationClock.js — simulation time (spec §9 \"Simulation time\").  Simulation time is a domain-specific relationship between simulated changes (physics steps, biological cycles, world epochs, oscillator phases). There may be MANY simulation clocks and NO universal model clock — each advances independently. Simulation clocks are distinct from causal time (dependencies) and operational time (deadlines/leases); they never establish authority.  Advancing is deterministic: the same sequence of steps yields the same tick, which is required for deterministic replay (rule 66/68).",
    "exports": [
      {
        "name": "SimulationClock",
        "kind": "class",
        "signature": "class SimulationClock",
        "summary": ""
      },
      {
        "name": "SimulationClockSet",
        "kind": "class",
        "signature": "class SimulationClockSet",
        "summary": "A set of independent simulation clocks. Each domain advances on its own; there is deliberately no method to advance them all in lockstep to a global time."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/time/TimeModel",
    "path": "engine/reference/state/time/TimeModel.md",
    "source": "engine/state/time/TimeModel.js",
    "import": "/engine/state/time/TimeModel.js",
    "sourceHash": "0bdd3b7172370cbfcd9dcd5fd225980d5363b5977d150171630f9b0b9d451011",
    "summary": "state/time/TimeModel.js — time is NOT a counter.  A state only has \"time\" if it subscribes to a time source. Real time = change + comparison + memory + causality + irreversible direction. Different sources express different truths; a state can be timeless (NONE) while an observer experiences progression.",
    "exports": [
      {
        "name": "createTimeSource",
        "kind": "function",
        "signature": "createTimeSource(mode = TIME_MODES.NONE)",
        "summary": "Create a time source. `step(input)` advances per-mode and returns the new value; the engine never does `time++` globally. CAUSAL    input.causalSteps CLOCKED   input.dt (oscillator phase) ENTROPIC  input.irreversibleChange (abs — monotonic) OBSERVER  input.observed (boolean) MEMORY    input.stateDistance (>= 0) HYBRID    any combination of the above"
      },
      {
        "name": "TIME_MODES",
        "kind": "constant",
        "signature": "TIME_MODES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/transaction/CommitCoordinator",
    "path": "engine/reference/state/transaction/CommitCoordinator.md",
    "source": "engine/state/transaction/CommitCoordinator.js",
    "import": "/engine/state/transaction/CommitCoordinator.js",
    "sourceHash": "f702038a6f10a27cc51d35dfeb5abce808bf475c38df3528cb7ae8dfbb9c2aa1",
    "summary": "state/transaction/CommitCoordinator.js — the atomic commit protocol (spec §7).  No authoritative state change happens outside this pipeline (spec rule 19). It runs the 14-step protocol over a sealed transaction envelope and a set of canonical registries, then either commits atomically and returns a signed witness receipt, or rejects with a receipt explaining what failed. The pipeline enforces the CSE safety invariants: single-spend USOs, expected versions, valid + non-revoked authority, fencing-token freshness, predicate and invariant checks, idempotent replay, and a post-state root that matches the committed outputs.",
    "exports": [
      {
        "name": "createCommitCoordinator",
        "kind": "function",
        "signature": "createCommitCoordinator(cfg = {})",
        "summary": "Create a commit coordinator bound to a set of canonical registries."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/transaction/Idempotency",
    "path": "engine/reference/state/transaction/Idempotency.md",
    "source": "engine/state/transaction/Idempotency.js",
    "import": "/engine/state/transaction/Idempotency.js",
    "sourceHash": "8d7cb7b0c12812beb440fd504dd472efffeb57b75c8c028db79f4b31a7757b0d",
    "summary": "state/transaction/Idempotency.js — replay protection (spec rule 21).  Every potentially duplicated operation carries an idempotency key (`actor:task:operation`). The default registry preserves canonical at-most- once receipts without eviction for CommitCoordinator and other durable callers. A bounded TTL/LRU policy is available only by explicit opt-in for process-local replay caches whose mutation safety lives in canonical state or a separate durable dispatch fence.",
    "exports": [
      {
        "name": "IdempotencyRegistry",
        "kind": "class",
        "signature": "class IdempotencyRegistry",
        "summary": ""
      },
      {
        "name": "IDEMPOTENCY_REPLAY_MAX_ENTRIES",
        "kind": "constant",
        "signature": "IDEMPOTENCY_REPLAY_MAX_ENTRIES",
        "summary": ""
      },
      {
        "name": "IDEMPOTENCY_REPLAY_TTL_MS",
        "kind": "constant",
        "signature": "IDEMPOTENCY_REPLAY_TTL_MS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/transaction/ProposalPool",
    "path": "engine/reference/state/transaction/ProposalPool.md",
    "source": "engine/state/transaction/ProposalPool.js",
    "import": "/engine/state/transaction/ProposalPool.js",
    "sourceHash": "30d500678e499b4789dbcd8fdae335687d4543c34d0a91931c727bdea628021a",
    "summary": "state/transaction/ProposalPool.js — Transaction-plane proposal pool (spec §3 plane 5, rules 27–28).  Before a transaction reaches the CommitCoordinator it is a PROPOSAL: a candidate that has not yet won its conflict domain. Two proposals that consume the same USO conflict — they must COMPETE, never silently overwrite (rule 27). The pool groups proposals by the exclusive inputs they contend for, picks at most one winner per conflict set (deterministically), and marks the losers as `superseded` so they re-observe and re-plan (rule 28). The pool decides only candidacy; the commit gate still establishes truth.",
    "exports": [
      {
        "name": "ProposalPool",
        "kind": "class",
        "signature": "class ProposalPool",
        "summary": ""
      },
      {
        "name": "PROPOSAL_STATUS",
        "kind": "constant",
        "signature": "PROPOSAL_STATUS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/transaction/Transaction",
    "path": "engine/reference/state/transaction/Transaction.md",
    "source": "engine/state/transaction/Transaction.js",
    "import": "/engine/state/transaction/Transaction.js",
    "sourceHash": "76b4537dbeb294cb335748389d432f52027e8101690eaa8104e53aae15e51353",
    "summary": "state/transaction/Transaction.js — the one canonical transaction envelope.  Every authoritative state change flows through this envelope (spec §6). A transaction must STATE everything whose correctness depends on current state: read-set (expected versions), predicates, consumed inputs (USOs), created outputs, capabilities and external-effect intents. Checking only written objects is insufficient — predicate/write-skew anomalies require the read+predicate sets to be declared up front (spec rule 20).  The envelope is a plain, canonicalizable object; its transactionID is the secure hash of its canonical bytes (signature excluded), so the id is stable and tamper-evident.",
    "exports": [
      {
        "name": "makeTransaction",
        "kind": "function",
        "signature": "makeTransaction(spec = {})",
        "summary": "Build a canonical transaction envelope. Missing fields default to safe empty values so the shape is always complete (no partial transactions)."
      },
      {
        "name": "transactionBody",
        "kind": "function",
        "signature": "transactionBody(env)",
        "summary": "Canonical bytes of an envelope EXCLUDING id + signature (the signed body)."
      },
      {
        "name": "sealTransactionFast",
        "kind": "function",
        "signature": "sealTransactionFast(env)",
        "summary": "Attach a synchronous (fast) transactionID. Use for runtime/non-critical transactions where a 32-bit identity is enough."
      },
      {
        "name": "sealTransaction",
        "kind": "function",
        "signature": "async sealTransaction(env, signer = null)",
        "summary": "Attach a secure (SHA-256) transactionID and an optional signature produced by an authority signer. The signature covers the transactionID."
      },
      {
        "name": "TX_SCHEMA_VERSION",
        "kind": "constant",
        "signature": "TX_SCHEMA_VERSION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/uso/USO",
    "path": "engine/reference/state/uso/USO.md",
    "source": "engine/state/uso/USO.js",
    "import": "/engine/state/uso/USO.js",
    "sourceHash": "30aa210bd56b290be93243c00510e0a30cd7bdb853afb2f3055f5f39eb5ebdef",
    "summary": "state/uso/USO.js — Unspent State Output: the single-spend primitive (spec §5).  Adapted from Bitcoin's UTXO model: an exclusive, consumable, finalizable, or scarce resource. A transaction consumes inputs and creates replacement outputs; a consumed output can never be accepted again. Spendability (defined here) is separate from which conflicting spend wins (decided by the commit coordinator), exactly as Bitcoin separates outputs from consensus.  Use USOs for: exclusive ownership, scarce inventory, single-winner decisions, object-mutation rights, permission use, branch finalization, irreversible commits. Do NOT use them for hover/particles/observations/debug notes.",
    "exports": [
      {
        "name": "makeUSO",
        "kind": "function",
        "signature": "makeUSO(spec = {})",
        "summary": "Create an unspent state output. The id is derived from kind + entity + a discriminator (e.g. version) so distinct outputs get distinct ids and equal ones collapse. Payload is opaque domain data."
      },
      {
        "name": "objectVersionOutput",
        "kind": "function",
        "signature": "objectVersionOutput(entity, versionId, payload = null)",
        "summary": "Convenience: an object-version output (the common mutable-object case)."
      },
      {
        "name": "isUSO",
        "kind": "function",
        "signature": "isUSO(v)",
        "summary": "True if a value looks like a USO (has a string id and a kind)."
      },
      {
        "name": "USO_KIND",
        "kind": "constant",
        "signature": "USO_KIND",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/uso/USORegistry",
    "path": "engine/reference/state/uso/USORegistry.md",
    "source": "engine/state/uso/USORegistry.js",
    "import": "/engine/state/uso/USORegistry.js",
    "sourceHash": "0f8678a8f2a6094162b7cd3b59e548750d376aa6a72b81dd4198d8fc85f2911a",
    "summary": "state/uso/USORegistry.js — the unspent-output set + double-commit detector.  Tracks which outputs currently exist (unspent) and which have been consumed (spent). Enforces the core safety invariant: an output is never committed as spent twice (spec §19). A spend transaction's inputs must ALL be currently unspent; on commit they move to the spent set and the new outputs are created atomically by the caller (CommitCoordinator).",
    "exports": [
      {
        "name": "USORegistry",
        "kind": "class",
        "signature": "class USORegistry",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/util/canonical",
    "path": "engine/reference/state/util/canonical.md",
    "source": "engine/state/util/canonical.js",
    "import": "/engine/state/util/canonical.js",
    "sourceHash": "4bcf05c213e3ed7871ef155b3261e112a681401d96f2535b8a657c746cb41111",
    "summary": "state/util/canonical.js — deterministic serialization + self-describing, algorithm-tagged hash IDs (CSE Integrity plane, spec §13).  Equivalent data MUST produce byte-identical bytes before hashing or signing (spec rule 58). We implement an RFC 8785-style canonical JSON: object keys are sorted by UTF-16 code unit, arrays keep order, no insignificant whitespace, and non-finite numbers are rejected. Hash IDs are multihash-style (`alg:bits:hex`) so the algorithm can migrate later (spec rule 59).  Two tiers, matching the engine's hybrid integrity policy: • hot-path id   — synchronous 32-bit FNV (runtime identity / state roots). • authority id  — async Web Crypto SHA-256 (capabilities, receipts, checkpoints) where security matters.",
    "exports": [
      {
        "name": "canonicalize",
        "kind": "function",
        "signature": "canonicalize(value)",
        "summary": "Produce a deterministic canonical JSON string for any JSON-compatible value. Object keys are sorted; Maps and Sets are normalized; arrays preserve order."
      },
      {
        "name": "canonicalBytes",
        "kind": "function",
        "signature": "canonicalBytes(value, { domain = DOMAIN_SEPARATOR, schemaVersion = '' } = {})",
        "summary": "Domain-separated canonical bytes string used as hash/sign input (spec §13)."
      },
      {
        "name": "hashIdFast",
        "kind": "function",
        "signature": "hashIdFast(value, opts = {})",
        "summary": "Synchronous hot-path id: 32-bit FNV over canonical bytes. Tagged so it is self-describing and migratable. Fast, NOT collision-resistant — identity for runtime state, never a security claim (spec rule 52)."
      },
      {
        "name": "hashIdSecure",
        "kind": "function",
        "signature": "async hashIdSecure(value, opts = {})",
        "summary": "Async authority id: Web Crypto SHA-256 over canonical bytes. Use for capabilities, witness receipts, checkpoints, and signed transactions. Throws if SubtleCrypto is unavailable (callers degrade explicitly)."
      },
      {
        "name": "parseHashId",
        "kind": "function",
        "signature": "parseHashId(id)",
        "summary": "Parse a tagged hash id into `{ alg, bits, hex }` or null."
      },
      {
        "name": "hashIdEquals",
        "kind": "function",
        "signature": "hashIdEquals(a, b)",
        "summary": "True when two tagged hash ids are byte-equal (same algorithm + digest)."
      },
      {
        "name": "DOMAIN_SEPARATOR",
        "kind": "constant",
        "signature": "DOMAIN_SEPARATOR",
        "summary": "Domain separator prefix so hashes of different structures never collide."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/util/hashing",
    "path": "engine/reference/state/util/hashing.md",
    "source": "engine/state/util/hashing.js",
    "import": "/engine/state/util/hashing.js",
    "sourceHash": "32e1db855efe92846cae55e3ad907198286d09d08fe968fa609a35a4e8617528",
    "summary": "state/util/hashing.js — canonical, order-independent identity hashing for the URC fact/state layers. Reuses the engine's deterministic ChecksumMath rather than rolling new hashes (layer law: \"hash = identity\", nothing more).",
    "exports": [
      {
        "name": "hashFactString",
        "kind": "function",
        "signature": "hashFactString(value)",
        "summary": "Deterministic 32-bit hash of a single string fact."
      },
      {
        "name": "hashU32Sequence",
        "kind": "function",
        "signature": "hashU32Sequence(values)",
        "summary": "Deterministic 32-bit hash of an ordered sequence of uint32 (e.g. a packed pattern)."
      },
      {
        "name": "canonicalSetHash",
        "kind": "function",
        "signature": "canonicalSetHash(facts)",
        "summary": "Canonical, ORDER-INDEPENDENT hash of a set of facts. Facts are stringified, de-duplicated and sorted so that {A,B} and {B,A} collapse to the same id — this is what makes `State.id = hash(canonicalFacts)` sequence-free."
      },
      {
        "name": "hexId",
        "kind": "function",
        "signature": "hexId(value)",
        "summary": "Stable hex fingerprint for an unsigned 32-bit value (cold-path display/keys)."
      },
      {
        "name": "hashIdTailUint32",
        "kind": "function",
        "signature": "hashIdTailUint32(hashId, fallback = 0)",
        "summary": "Parse a tagged hash id's low 32-bit hex tail for deterministic bucketing/seeding."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/verify/ModelCheck",
    "path": "engine/reference/state/verify/ModelCheck.md",
    "source": "engine/state/verify/ModelCheck.js",
    "import": "/engine/state/verify/ModelCheck.js",
    "sourceHash": "edaa1923cfeeeb55341de9af3c66c9a20cd2fca049c567cdef9e5ade1d4a7a71",
    "summary": "state/verify/ModelCheck.js — browser-runnable bounded model checker for the CSE commit state machine (spec §19, rule 66: model-check the core protocol).  This is the executable companion to verify/cse-core.tla. Where TLC would exhaustively explore the TLA+ model, this performs the SAME exhaustive exploration in JavaScript so it runs inside the verify.html harness with no external tooling. It enumerates every reachable state under all interleavings of commit actions and checks the core safety invariants on each:  • NoDoubleSpend     — an output is never simultaneously unspent and spent. • SingleSpend       — no output is consumed by two committed transactions. • EveryCommitWitnessed — every committed transaction has a witness.  A transaction is enabled iff it is uncommitted and all of its inputs are still unspent; applying it consumes inputs, creates outputs, and records a witness.",
    "exports": [
      {
        "name": "exploreCommitMachine",
        "kind": "function",
        "signature": "exploreCommitMachine(cfg = {})",
        "summary": "Exhaustively explore the commit state machine."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/version",
    "path": "engine/reference/state/version.md",
    "source": "engine/state/version.js",
    "import": "/engine/state/version.js",
    "sourceHash": "713dcfc117eb6abe25754ceae9ad4e521192260fc265fd0d3b00b0ed74f13389",
    "summary": "============================================================ Universal Resonance State Engine (URC) — version source. ============================================================ Order-on-demand state engine: unordered facts, a resonance codebook, causal order only when forced, branches when order matters, and commit gates that decide final truth. The machine runs in order; the MODEL does not assume order unless forced.  Versions are facts too: migration rules reference these stamps, e.g. \"URC-v1 dense #88 maps to URC-v2 dense #402 iff hashID and symbolicSig match\". ============================================================",
    "exports": [
      {
        "name": "urcVersionStamp",
        "kind": "function",
        "signature": "urcVersionStamp()",
        "summary": "Version stamp embedded on every State/CodeEntry/Receipt for migration + audit."
      },
      {
        "name": "URC_VERSION",
        "kind": "constant",
        "signature": "URC_VERSION",
        "summary": ""
      },
      {
        "name": "URC_CODEBOOK",
        "kind": "constant",
        "signature": "URC_CODEBOOK",
        "summary": ""
      },
      {
        "name": "URC_SCHEMA",
        "kind": "constant",
        "signature": "URC_SCHEMA",
        "summary": ""
      },
      {
        "name": "URC_TRANSFORM",
        "kind": "constant",
        "signature": "URC_TRANSFORM",
        "summary": ""
      },
      {
        "name": "URC_BUILD_TAG",
        "kind": "constant",
        "signature": "URC_BUILD_TAG",
        "summary": ""
      },
      {
        "name": "CSE_TX_SCHEMA",
        "kind": "constant",
        "signature": "CSE_TX_SCHEMA",
        "summary": ""
      },
      {
        "name": "CSE_VALIDATOR",
        "kind": "constant",
        "signature": "CSE_VALIDATOR",
        "summary": ""
      },
      {
        "name": "CSE_POLICY",
        "kind": "constant",
        "signature": "CSE_POLICY",
        "summary": ""
      },
      {
        "name": "CSE_PHASES",
        "kind": "constant",
        "signature": "CSE_PHASES",
        "summary": ""
      },
      {
        "name": "URC_FULL",
        "kind": "constant",
        "signature": "URC_FULL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/witness/Witness",
    "path": "engine/reference/state/witness/Witness.md",
    "source": "engine/state/witness/Witness.js",
    "import": "/engine/state/witness/Witness.js",
    "sourceHash": "3ec2fd8fbd5904c13b6a449f60b166140defbe3ecd725198e5006f390653b320",
    "summary": "state/witness/Witness.js — debug proof for every projection / commit.  Replaces \"1 happened, 2 happened, 3 happened\" timelines with: these facts existed · these rules fired · these branches were possible · this projection was shown · this commit was chosen.",
    "exports": [
      {
        "name": "makeWitness",
        "kind": "function",
        "signature": "makeWitness(w = {})",
        "summary": ""
      },
      {
        "name": "makeReceipt",
        "kind": "function",
        "signature": "makeReceipt(r = {})",
        "summary": "Build a full CSE witness receipt for a transaction commit decision (spec §7). The receipt proves WHAT was checked and WHAT the engine decided — it does not claim the input observations were objectively true. Every committed transition has exactly one receipt (safety invariant, spec §19)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/workflow/Inbox",
    "path": "engine/reference/state/workflow/Inbox.md",
    "source": "engine/state/workflow/Inbox.js",
    "import": "/engine/state/workflow/Inbox.js",
    "sourceHash": "3044f5af81824fba14614f1f08602ba4fc8b564ee1682107ebd2f78beee6aee7",
    "summary": "state/workflow/Inbox.js — idempotent inbox / effect receiver (spec §11, rule 42).  The outbox delivers at-least-once, so the receiving side MUST deduplicate by the stable effect id to make the end-to-end behavior effectively-once. The inbox records the first result for each effect id; a redelivery returns the stored result and does NOT re-run the handler (mirrors the transaction IdempotencyRegistry, but for inbound external effects).",
    "exports": [
      {
        "name": "Inbox",
        "kind": "class",
        "signature": "class Inbox",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/workflow/Outbox",
    "path": "engine/reference/state/workflow/Outbox.md",
    "source": "engine/state/workflow/Outbox.js",
    "import": "/engine/state/workflow/Outbox.js",
    "sourceHash": "f0b780d825cf53cb8542712c4f0667bb2d59ac18759fc56b46bd0b2937b74c42",
    "summary": "state/workflow/Outbox.js — transactional outbox (spec §11, rule 41).  A canonical commit cannot atomically control an unrelated email server, payment processor, OS call, or device. CSE solves this dual-write problem by writing an external-effect INTENT into the same atomic transaction as the internal state change (the CommitCoordinator appends intents here on commit); a separate worker later delivers each intent and receivers deduplicate by a stable effect id (rule 42). This module owns the durable intent queue and its status lifecycle:  pending → delivering → delivered → acked ↘ failed → (reconcile | retry)  Re-recording the same effect id is a no-op, so commit retries never enqueue an effect twice. Delivery is at-least-once; idempotent receivers (see Inbox.js) make the end-to-end behavior effectively-once.",
    "exports": [
      {
        "name": "Outbox",
        "kind": "class",
        "signature": "class Outbox",
        "summary": ""
      },
      {
        "name": "makeEffectIntent",
        "kind": "function",
        "signature": "makeEffectIntent(spec = {})",
        "summary": "Declare an external-effect intent. Every effect must state its reversibility profile so the workflow plane knows whether it can be compensated, retried, or must pause for approval (spec §11)."
      },
      {
        "name": "EFFECT_STATUS",
        "kind": "constant",
        "signature": "EFFECT_STATUS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/workflow/Reconciler",
    "path": "engine/reference/state/workflow/Reconciler.md",
    "source": "engine/state/workflow/Reconciler.js",
    "import": "/engine/state/workflow/Reconciler.js",
    "sourceHash": "b553fd85501660cc794d8df70528641de86ce7b70140e3236733916eec65373f",
    "summary": "state/workflow/Reconciler.js — external-effect reconciler (spec §11, rule 43).  When a delivery outcome is unknown (timeout, crash between send and ack, etc.) the effect is parked in the outbox as RECONCILE rather than guessed. The reconciler queries the external system's authoritative status for each parked effect and resolves it: confirm (it actually happened → ack), retry (it did not happen and is safe to resend → back to pending), or escalate (needs human authority attention). Ambiguity is resolved by EVIDENCE, never assumption.",
    "exports": [
      {
        "name": "Reconciler",
        "kind": "class",
        "signature": "class Reconciler",
        "summary": ""
      },
      {
        "name": "RECONCILE_RESULT",
        "kind": "constant",
        "signature": "RECONCILE_RESULT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/workflow/Saga",
    "path": "engine/reference/state/workflow/Saga.md",
    "source": "engine/state/workflow/Saga.js",
    "import": "/engine/state/workflow/Saga.js",
    "sourceHash": "12e52301526fb2bfd492c45db5f1df06966e58aad36e8a66291084d958e78f50",
    "summary": "state/workflow/Saga.js — saga coordinator + compensation registry (spec §11).  For multi-step workflows that span commit domains or external systems, true distributed atomic commit is avoided where possible (rule 40). Instead a saga runs a sequence of LOCAL steps, each with a forward action and a compensating action. If a step fails, the already-completed steps are compensated in reverse order. Compensation is a NEW action, not deletion of history (rule 44), and some effects cannot be perfectly undone — every saga declares a PIVOT step after which forward-only recovery applies because compensation is no longer possible (rule 45, the irreversible pivot).",
    "exports": [
      {
        "name": "Saga",
        "kind": "class",
        "signature": "class Saga",
        "summary": ""
      },
      {
        "name": "sagaStep",
        "kind": "function",
        "signature": "sagaStep(s)",
        "summary": "Define a saga step."
      },
      {
        "name": "SAGA_STATUS",
        "kind": "constant",
        "signature": "SAGA_STATUS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/worldmodel/AffordanceRegistry",
    "path": "engine/reference/state/worldmodel/AffordanceRegistry.md",
    "source": "engine/state/worldmodel/AffordanceRegistry.js",
    "import": "/engine/state/worldmodel/AffordanceRegistry.js",
    "sourceHash": "d506b519cfb7fd2d6c1c2c2772b3a19b739563347e7d48abce9674de8e692b1b",
    "summary": "state/worldmodel/AffordanceRegistry.js — declares LEGAL actions rather than letting the model invent tool syntax (spec §15 \"Affordance registry\", rule 34/50).  Each affordance binds an action to an object type and declares: preconditions (named predicates evaluated against context), the capability required to do it, predicted effects, a risk level, and a rollback/compensation hint. The planner asks \"what may I legally do to this object?\" and the registry answers from explicit declarations. High-risk / irreversible actions require explicit approval — the registry surfaces this but NEVER authorizes by itself (the capability + commit layer remains the authority).",
    "exports": [
      {
        "name": "AffordanceRegistry",
        "kind": "class",
        "signature": "class AffordanceRegistry",
        "summary": ""
      },
      {
        "name": "makeAffordance",
        "kind": "function",
        "signature": "makeAffordance(a = {})",
        "summary": ""
      },
      {
        "name": "RISK",
        "kind": "constant",
        "signature": "RISK",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/worldmodel/BeliefStore",
    "path": "engine/reference/state/worldmodel/BeliefStore.md",
    "source": "engine/state/worldmodel/BeliefStore.js",
    "import": "/engine/state/worldmodel/BeliefStore.js",
    "sourceHash": "983aee55f515dff1e008f6f4d2bf057b757792435e803675691f61d7cdab8cc8",
    "summary": "state/worldmodel/BeliefStore.js — separates the AI's belief model from canonical state (spec §15, rules 46–48).  The world model maintains five strictly-separated worlds:  CANONICAL — authoritative committed state (mirror, written ONLY by commit) OBSERVED  — currently sensed / retrieved information BELIEF    — inferences and uncertain interpretations PREDICTED — counterfactual futures from the model/sandbox PROPOSED  — the branch an agent wants to commit  Hard rule (47): a prediction or belief can NEVER become canonical directly. This store exposes NO method to write CANONICAL except `syncCanonical`, which represents the commit gate mirroring an already-committed result back into the model. predict()/believe()/observe()/propose() can never touch it.  Rule 48: uncertainty grows with prediction horizon unless new evidence reduces it — predict() decays confidence by horizon; observe() can restore it.",
    "exports": [
      {
        "name": "BeliefStore",
        "kind": "class",
        "signature": "class BeliefStore",
        "summary": ""
      },
      {
        "name": "WORLD",
        "kind": "constant",
        "signature": "WORLD",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/worldmodel/CausalDynamics",
    "path": "engine/reference/state/worldmodel/CausalDynamics.md",
    "source": "engine/state/worldmodel/CausalDynamics.js",
    "import": "/engine/state/worldmodel/CausalDynamics.js",
    "sourceHash": "d03ce880a448e2e6eb37573fab8b6ea5a0be5e0bef74f1e2647bf36d71a12e74",
    "summary": "state/worldmodel/CausalDynamics.js — AI World Model causal-dynamics model (spec §15 \"Causal dynamics model\", rules 47–49).  Predicts how the world MAY change under an action: a registry of declared transition functions, each producing a predicted next state plus an effect summary the sandbox/planner can score. Predictions are hypotheses only — they never mutate canonical state (rule 47). An unknown action is reported as `known:false` and leaves state unchanged rather than guessing. The model also learns from outcomes: feeding observed effects back adjusts a per-action confidence so planning becomes calibrated (rule 49), pairing with ToolEffectModel's discrepancy tracking.",
    "exports": [
      {
        "name": "CausalDynamics",
        "kind": "class",
        "signature": "class CausalDynamics",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/worldmodel/ObjectGraph",
    "path": "engine/reference/state/worldmodel/ObjectGraph.md",
    "source": "engine/state/worldmodel/ObjectGraph.js",
    "import": "/engine/state/worldmodel/ObjectGraph.js",
    "sourceHash": "0f19f945cb1cba52d180a9da42c244fcb0a96a138554e7fda5fc70a653dedd5c",
    "summary": "state/worldmodel/ObjectGraph.js — object identity + relationship graph (spec §15 \"Object identity graph\" + \"Spatial and relationship graph\").  Tracks objects with STABLE logical ids (independent of their content version) and typed directed relations between them: inside, near, connected-to, blocks, contains, reachable-from, visible-from, depends-on. Relations support reachability queries (e.g. \"is room A reachable from room B over `connected`?\") which the planner uses without ever asserting canonical truth.",
    "exports": [
      {
        "name": "ObjectGraph",
        "kind": "class",
        "signature": "class ObjectGraph",
        "summary": ""
      },
      {
        "name": "RELATION",
        "kind": "constant",
        "signature": "RELATION",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/worldmodel/PredictionSandbox",
    "path": "engine/reference/state/worldmodel/PredictionSandbox.md",
    "source": "engine/state/worldmodel/PredictionSandbox.js",
    "import": "/engine/state/worldmodel/PredictionSandbox.js",
    "sourceHash": "d8e4b02a9e4996f6c1aa4fc783d1d0453cbbe83196926571754d0488fc85057d",
    "summary": "state/worldmodel/PredictionSandbox.js — isolated counterfactual rollouts (spec §15 \"Prediction sandbox\", rules 18, 47, 48).  The model proposes multiple futures WITHOUT modifying canonical state. Every produced state is a prediction (`canonical:false`, `isTruth:false`) — it can only become real by being turned into a transaction and passing the commit gate. The sandbox enforces the §18 / §15 disciplines: short receding-horizon rollouts, branch budgets (width × depth), and uncertainty that grows with the horizon. To guarantee non-mutation it deep-clones the state before every transition, so even a transition that mutates its argument cannot touch the caller's canonical snapshot.",
    "exports": [
      {
        "name": "PredictionSandbox",
        "kind": "class",
        "signature": "class PredictionSandbox",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/worldmodel/ToolEffectModel",
    "path": "engine/reference/state/worldmodel/ToolEffectModel.md",
    "source": "engine/state/worldmodel/ToolEffectModel.js",
    "import": "/engine/state/worldmodel/ToolEffectModel.js",
    "sourceHash": "46952379486b55e14e736f63d3446912c85b8ab015bef0339448662b21e8306d",
    "summary": "state/worldmodel/ToolEffectModel.js — expected-vs-observed tool consequences and a discrepancy learner (spec §15 \"Tool effect model\" + \"Discrepancy learner\", rule 49/51).  For each tool the model records what it EXPECTED to happen; after the action the actual result is observed and compared. The discrepancy updates a running calibration score so the planner learns which tools are reliable. World-model quality is judged by action outcomes and calibration — not appearance (rule 51). The agent re-observes after acting (rule 49); this is where that loop is closed.",
    "exports": [
      {
        "name": "ToolEffectModel",
        "kind": "class",
        "signature": "class ToolEffectModel",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "state/worldmodel/UntrustedBoundary",
    "path": "engine/reference/state/worldmodel/UntrustedBoundary.md",
    "source": "engine/state/worldmodel/UntrustedBoundary.js",
    "import": "/engine/state/worldmodel/UntrustedBoundary.js",
    "sourceHash": "3fe3b79e8b8f38eb9946312508590320ee704a2e768f044cf40cb3ed5d5e58a8",
    "summary": "state/worldmodel/UntrustedBoundary.js — the prompt-injection boundary (spec §15 \"Prompt-injection boundary\", rules 33, 50).  All webpages, files, emails, tool outputs, other agents, and generated text are UNTRUSTED OBSERVATIONS — never authority instructions. This boundary is the single chokepoint where such content enters the world model: it wraps the content as an untrusted observation (CERTAINTY.UNTRUSTED) and makes it structurally impossible to treat as policy or to mint authority from it.  The model MAY observe broadly, infer cautiously, propose actions, and simulate futures. It MAY NOT mint authority, bypass capabilities, declare its prediction canonical, or treat retrieved text as trusted policy. Authority decisions live OUTSIDE the model (capability + commit), so this module deliberately exposes no path from untrusted content to a capability or a canonical write.",
    "exports": [
      {
        "name": "UntrustedBoundary",
        "kind": "class",
        "signature": "class UntrustedBoundary",
        "summary": ""
      },
      {
        "name": "ingestUntrusted",
        "kind": "function",
        "signature": "ingestUntrusted(content, meta = {})",
        "summary": "Ingest external/tool/model content as an untrusted observation. The returned record is explicitly non-authoritative and carries untrusted provenance."
      },
      {
        "name": "canAuthorize",
        "kind": "function",
        "signature": "canAuthorize(record)",
        "summary": "True only for records that may carry authority. Untrusted records: always false."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "surfaces/CanvasSurface",
    "path": "engine/reference/surfaces/CanvasSurface.md",
    "source": "engine/surfaces/CanvasSurface.js",
    "import": "/engine/surfaces/CanvasSurface.js",
    "sourceHash": "4bf5192a5779dae86ee6692c117fbacddbbfe20b249d316982b9f2293d183b81",
    "summary": "engine/surfaces/CanvasSurface.js — the base pixel source: a 2D canvas drawn by a callback. CodeSurface and TerminalSurface build on it. A source exposes the contract SurfaceManager expects: `.canvas`, optional `.dirty`, `.render(dt)`, `.resize(w,h)`, `.onPointer(e)`, `.onKey(e)`, `.dispose()`.",
    "exports": [
      {
        "name": "make2DCanvas",
        "kind": "function",
        "signature": "make2DCanvas(width, height)",
        "summary": "Allocate a 2D canvas (OffscreenCanvas when available, else a DOM canvas)."
      },
      {
        "name": "createCanvasSurface",
        "kind": "function",
        "signature": "createCanvasSurface(opts = {})",
        "summary": "A generic canvas source."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "surfaces/CodeSurface",
    "path": "engine/reference/surfaces/CodeSurface.md",
    "source": "engine/surfaces/CodeSurface.js",
    "import": "/engine/surfaces/CodeSurface.js",
    "sourceHash": "94a89ae3efe9ad28f6a8c65df7c17e1821ffcf7d2f1c0248bdf837d081e1a587",
    "summary": "engine/surfaces/CodeSurface.js — an editable, syntax-lite code view rendered to a canvas so it can live on a mesh. Supports typing, Backspace, Enter, arrow navigation, Home/End, and vertical scroll that follows the caret. Highlighting is intentionally lightweight (comments / strings / numbers / keywords) — enough to read code on a surface without pulling in a full language grammar.",
    "exports": [
      {
        "name": "createCodeSurface",
        "kind": "function",
        "signature": "createCodeSurface(opts = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "surfaces/MediaSurface",
    "path": "engine/reference/surfaces/MediaSurface.md",
    "source": "engine/surfaces/MediaSurface.js",
    "import": "/engine/surfaces/MediaSurface.js",
    "sourceHash": "6d5c06e9861c404d150ed4a395555635f72e386e4739ffb808576e14877f47de",
    "summary": "Browser-media producers for RenderSurface. These sources only expose pixels that the caller explicitly supplies or requests; camera capture is never started implicitly and owned MediaStreams are always stopped on dispose.",
    "exports": [
      {
        "name": "createImageSurface",
        "kind": "function",
        "signature": "createImageSurface(opts = {})",
        "summary": "Wrap an ImageBitmap, image element, canvas, or URL as a static pixel source. URL-created images default to anonymous CORS and expose a `ready` promise."
      },
      {
        "name": "createVideoSurface",
        "kind": "function",
        "signature": "createVideoSurface(opts = {})",
        "summary": "Wrap an HTMLVideoElement or create one from a URL/MediaStream."
      },
      {
        "name": "createCameraSurface",
        "kind": "function",
        "signature": "async createCameraSurface(opts = {})",
        "summary": "Request a camera only after an explicit caller action, then expose it as a video source. The returned source owns and stops every acquired track."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "surfaces/RenderSurface",
    "path": "engine/reference/surfaces/RenderSurface.md",
    "source": "engine/surfaces/RenderSurface.js",
    "import": "/engine/surfaces/RenderSurface.js",
    "sourceHash": "eea289670c0ffdc88b583cb6298de8ed5c4f7a5411bd2ca8bdee57680e4e9bd0",
    "summary": "engine/surfaces/RenderSurface.js — a RenderSurface is a live, drawable texture fed by a source (canvas / code / terminal / camera / webgpu / image / video) that can be mapped onto a mesh as baseColor/emissive and optionally receive pointer/keyboard input via UV hit-testing.  This module owns the schema + update policy (when a surface should re-upload to the GPU) and is deliberately GPU-free: SurfaceManager performs the upload, the source produces pixels, and RenderSurfaceMaterial binds it to a mesh. Keeping these concerns separate makes surfaces reusable across demos, editor, runtime.",
    "exports": [
      {
        "name": "createRenderSurface",
        "kind": "function",
        "signature": "createRenderSurface(init = {})",
        "summary": "Create a RenderSurface descriptor."
      },
      {
        "name": "markSurfaceDirty",
        "kind": "function",
        "signature": "markSurfaceDirty(surface)",
        "summary": "Flag a surface as needing a GPU re-upload."
      },
      {
        "name": "resizeSurface",
        "kind": "function",
        "signature": "resizeSurface(surface, width, height)",
        "summary": "Resize a surface (also resizes its source canvas) and flag it dirty."
      },
      {
        "name": "surfaceNeedsUpload",
        "kind": "function",
        "signature": "surfaceNeedsUpload(surface, nowMs)",
        "summary": "Decide whether a surface should upload to the GPU this tick. Pure (no side effects) so it is unit-testable; SurfaceManager applies the result."
      },
      {
        "name": "SURFACE_SOURCE",
        "kind": "constant",
        "signature": "SURFACE_SOURCE",
        "summary": "What feeds a surface's pixels."
      },
      {
        "name": "UPDATE_MODE",
        "kind": "constant",
        "signature": "UPDATE_MODE",
        "summary": "Update cadence. `dirty` only re-uploads when the source flags a change; `interval` re-uploads at most every intervalMs; `realtime` every frame the surface is visible. `static` uploads once."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "surfaces/RenderSurfaceMaterial",
    "path": "engine/reference/surfaces/RenderSurfaceMaterial.md",
    "source": "engine/surfaces/RenderSurfaceMaterial.js",
    "import": "/engine/surfaces/RenderSurfaceMaterial.js",
    "sourceHash": "daf321bc73b4c01ea3ca70bd9ac42bc936ed902081d9330f2fdc5d0f2247cd51",
    "summary": "engine/surfaces/RenderSurfaceMaterial.js — bind a RenderSurface onto a mesh as baseColor or emissive, in world- or screen-space, reusing the EngineMaterial schema so surfaces flow through the same material/binding path as imported textures. The GPU resource accessor lets any renderer drop the surface's live texture into a bind group without knowing how it is produced.",
    "exports": [
      {
        "name": "createSurfaceMaterial",
        "kind": "function",
        "signature": "createSurfaceMaterial(surface, opts = {})",
        "summary": "Create an EngineMaterial that samples a RenderSurface. Screens usually want the UNLIT workflow + the EMISSIVE slot (they emit their own light) so they stay bright regardless of scene lighting."
      },
      {
        "name": "surfaceTextureResource",
        "kind": "function",
        "signature": "surfaceTextureResource(surface)",
        "summary": "Live GPU resource for a surface, for inserting into a bind group."
      },
      {
        "name": "materialSurfaceBinding",
        "kind": "function",
        "signature": "materialSurfaceBinding(material)",
        "summary": "Is this material backed by a render surface? Returns its binding block or null."
      },
      {
        "name": "surfaceIdFromTextureId",
        "kind": "function",
        "signature": "surfaceIdFromTextureId(textureId)",
        "summary": "Map a virtual surface texture id (`surface://id`) back to the surface id."
      },
      {
        "name": "SURFACE_SLOT",
        "kind": "constant",
        "signature": "SURFACE_SLOT",
        "summary": ""
      },
      {
        "name": "SURFACE_SPACE",
        "kind": "constant",
        "signature": "SURFACE_SPACE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "surfaces/SurfaceInputMapper",
    "path": "engine/reference/surfaces/SurfaceInputMapper.md",
    "source": "engine/surfaces/SurfaceInputMapper.js",
    "import": "/engine/surfaces/SurfaceInputMapper.js",
    "sourceHash": "d864d06f7a25fe31e79d3d50ede74e8e5ff99b9b063c145115a1fb8f187ed93f",
    "summary": "engine/surfaces/SurfaceInputMapper.js — route input to a focused RenderSurface.  Pointer events arrive as a UV hit (from the renderer's raycast against the mesh the surface is mapped to); this maps UV → surface pixel coords and dispatches to the surface's source. Keyboard events go to whichever surface is \"focused\" (typically the last one clicked). Only surfaces whose `permissions.input` is true receive events — surfaces are inert by default.",
    "exports": [
      {
        "name": "uvToPixel",
        "kind": "function",
        "signature": "uvToPixel(surface, u, v)",
        "summary": "Convert a UV hit (with v measured top-down) to integer surface pixels."
      },
      {
        "name": "createSurfaceInputMapper",
        "kind": "function",
        "signature": "createSurfaceInputMapper(opts = {})",
        "summary": "Create an input mapper over a set of surfaces (or a SurfaceManager)."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "surfaces/SurfaceManager",
    "path": "engine/reference/surfaces/SurfaceManager.md",
    "source": "engine/surfaces/SurfaceManager.js",
    "import": "/engine/surfaces/SurfaceManager.js",
    "sourceHash": "f7b8b39ee773a689afe77fe2e7964ac241e0305e94cfb9e0515371b4e9b64108",
    "summary": "engine/surfaces/SurfaceManager.js — owns the GPU texture lifetime and the update scheduler for a set of RenderSurfaces. Each tick it asks the policy (surfaceNeedsUpload) which surfaces changed/are due/are realtime-and-visible, renders just those sources, and uploads them — so nothing touches the GPU unless it must (dirty-only by default, interval-capped, slept when off-screen).  The actual GPU calls are isolated behind an injectable `uploader`, so the scheduling logic is testable headless (gates) without a WebGPU device.",
    "exports": [
      {
        "name": "surfaceImageSource",
        "kind": "function",
        "signature": "surfaceImageSource(surface)",
        "summary": "The uploadable image source backing a surface (canvas / img / video)."
      },
      {
        "name": "surfaceImageReady",
        "kind": "function",
        "signature": "surfaceImageReady(surface)",
        "summary": "True when an external-image source has decoded enough pixels to copy."
      },
      {
        "name": "createSurfaceManager",
        "kind": "function",
        "signature": "createSurfaceManager(device, opts = {})",
        "summary": "Create a surface manager."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "surfaces/TerminalSurface",
    "path": "engine/reference/surfaces/TerminalSurface.md",
    "source": "engine/surfaces/TerminalSurface.js",
    "import": "/engine/surfaces/TerminalSurface.js",
    "sourceHash": "368f590b25901974bdd842c5b67ccc16d6671b8b73b82e0bf156af52bdacdbf1",
    "summary": "engine/surfaces/TerminalSurface.js — an interactive terminal/REPL rendered to a canvas so it can live on a mesh. It keeps a scrollback buffer + an input line, echoes typing, and dispatches a command on Enter via `onCommand(line) -> string | string[] | void`. Safe by design: it only renders its OWN buffer — there is no shell, no eval, nothing external (the host wires whatever onCommand does).",
    "exports": [
      {
        "name": "createTerminalSurface",
        "kind": "function",
        "signature": "createTerminalSurface(opts = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "surfaces/WebGPUSurface",
    "path": "engine/reference/surfaces/WebGPUSurface.md",
    "source": "engine/surfaces/WebGPUSurface.js",
    "import": "/engine/surfaces/WebGPUSurface.js",
    "sourceHash": "be3d3b66333eb31d642cca0cc3612869e5a751077960064e3e1a77a4d2b91fca",
    "summary": "engine/surfaces/WebGPUSurface.js — a surface source that ADOPTS an externally rendered GPU texture instead of uploading pixels from a canvas. The host renders into its own render target(s) and hands the current texture/view to the surface each frame via `adopt()`; SurfaceManager then exposes it like any other surface (sampleable on a mesh) with zero copies. This backs feedback/mirror effects and \"stream the screen onto a screen\" use-cases (SURFACE_SOURCE.WEBGPU).  Safety: it only ever adopts textures the host already owns — there is no capture of arbitrary external content.",
    "exports": [
      {
        "name": "createWebGPUSurface",
        "kind": "function",
        "signature": "createWebGPUSurface(opts = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "surfaces/index",
    "path": "engine/reference/surfaces/index.md",
    "source": "engine/surfaces/index.js",
    "import": "/engine/surfaces/index.js",
    "sourceHash": "2de6faf8310d59cdea22356f1c8169b3bd63e64557e643cefab5281e25c39623",
    "summary": "engine/surfaces/index.js — Render Surfaces barrel (spec Phase 4).  A RenderSurface turns a live source (canvas / code / terminal / camera / webgpu / image / video) into a GPU texture that can be mapped onto a mesh as baseColor or emissive and optionally receive pointer/keyboard input via UV hit-testing. The SurfaceManager owns texture lifetime + an update scheduler so nothing touches the GPU unless it must (dirty-only, interval-capped, slept when off-screen). Sources only ever render their OWN content (safety by design).",
    "exports": [
      {
        "name": "SURFACE_SLOT",
        "kind": "re-export",
        "signature": "SURFACE_SLOT",
        "summary": ""
      },
      {
        "name": "SURFACE_SOURCE",
        "kind": "re-export",
        "signature": "SURFACE_SOURCE",
        "summary": ""
      },
      {
        "name": "SURFACE_SPACE",
        "kind": "re-export",
        "signature": "SURFACE_SPACE",
        "summary": ""
      },
      {
        "name": "UPDATE_MODE",
        "kind": "re-export",
        "signature": "UPDATE_MODE",
        "summary": ""
      },
      {
        "name": "createCameraSurface",
        "kind": "re-export",
        "signature": "createCameraSurface",
        "summary": ""
      },
      {
        "name": "createCanvasSurface",
        "kind": "re-export",
        "signature": "createCanvasSurface",
        "summary": ""
      },
      {
        "name": "createCodeSurface",
        "kind": "re-export",
        "signature": "createCodeSurface",
        "summary": ""
      },
      {
        "name": "createImageSurface",
        "kind": "re-export",
        "signature": "createImageSurface",
        "summary": ""
      },
      {
        "name": "createRenderSurface",
        "kind": "re-export",
        "signature": "createRenderSurface",
        "summary": ""
      },
      {
        "name": "createSurfaceInputMapper",
        "kind": "re-export",
        "signature": "createSurfaceInputMapper",
        "summary": ""
      },
      {
        "name": "createSurfaceManager",
        "kind": "re-export",
        "signature": "createSurfaceManager",
        "summary": ""
      },
      {
        "name": "createSurfaceMaterial",
        "kind": "re-export",
        "signature": "createSurfaceMaterial",
        "summary": ""
      },
      {
        "name": "createTerminalSurface",
        "kind": "re-export",
        "signature": "createTerminalSurface",
        "summary": ""
      },
      {
        "name": "createVideoSurface",
        "kind": "re-export",
        "signature": "createVideoSurface",
        "summary": ""
      },
      {
        "name": "createWebGPUSurface",
        "kind": "re-export",
        "signature": "createWebGPUSurface",
        "summary": ""
      },
      {
        "name": "make2DCanvas",
        "kind": "re-export",
        "signature": "make2DCanvas",
        "summary": ""
      },
      {
        "name": "markSurfaceDirty",
        "kind": "re-export",
        "signature": "markSurfaceDirty",
        "summary": ""
      },
      {
        "name": "materialSurfaceBinding",
        "kind": "re-export",
        "signature": "materialSurfaceBinding",
        "summary": ""
      },
      {
        "name": "resizeSurface",
        "kind": "re-export",
        "signature": "resizeSurface",
        "summary": ""
      },
      {
        "name": "surfaceIdFromTextureId",
        "kind": "re-export",
        "signature": "surfaceIdFromTextureId",
        "summary": ""
      },
      {
        "name": "surfaceImageReady",
        "kind": "re-export",
        "signature": "surfaceImageReady",
        "summary": ""
      },
      {
        "name": "surfaceImageSource",
        "kind": "re-export",
        "signature": "surfaceImageSource",
        "summary": ""
      },
      {
        "name": "surfaceNeedsUpload",
        "kind": "re-export",
        "signature": "surfaceNeedsUpload",
        "summary": ""
      },
      {
        "name": "surfaceTextureResource",
        "kind": "re-export",
        "signature": "surfaceTextureResource",
        "summary": ""
      },
      {
        "name": "uvToPixel",
        "kind": "re-export",
        "signature": "uvToPixel",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/IntegrationTests",
    "path": "engine/reference/tools/IntegrationTests.md",
    "source": "engine/tools/IntegrationTests.js",
    "import": "/engine/tools/IntegrationTests.js",
    "sourceHash": "044e6c35a0510e125abdbc67dffc65b7ef8453cb06832689e3a4a09724bfc11e",
    "summary": "Test result",
    "exports": [
      {
        "name": "TestResult",
        "kind": "class",
        "signature": "class TestResult",
        "summary": "Test result"
      },
      {
        "name": "TestSuite",
        "kind": "class",
        "signature": "class TestSuite",
        "summary": "Test suite for organizing tests"
      },
      {
        "name": "TestRunner",
        "kind": "class",
        "signature": "class TestRunner",
        "summary": ""
      },
      {
        "name": "createVehicleMountingTests",
        "kind": "function",
        "signature": "createVehicleMountingTests()",
        "summary": ""
      },
      {
        "name": "createMultiplayerSyncTests",
        "kind": "function",
        "signature": "createMultiplayerSyncTests()",
        "summary": ""
      },
      {
        "name": "createMemoryLeakTests",
        "kind": "function",
        "signature": "createMemoryLeakTests()",
        "summary": ""
      },
      {
        "name": "createFrameBudgetTests",
        "kind": "function",
        "signature": "createFrameBudgetTests()",
        "summary": ""
      },
      {
        "name": "createCrossSystemTests",
        "kind": "function",
        "signature": "createCrossSystemTests()",
        "summary": ""
      },
      {
        "name": "runIntegrationTests",
        "kind": "function",
        "signature": "async runIntegrationTests()",
        "summary": ""
      },
      {
        "name": "TestStatus",
        "kind": "constant",
        "signature": "TestStatus",
        "summary": "Test result status"
      },
      {
        "name": "assert",
        "kind": "constant",
        "signature": "assert",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/aiming/GlobalAim",
    "path": "engine/reference/tools/aiming/GlobalAim.md",
    "source": "engine/tools/aiming/GlobalAim.js",
    "import": "/engine/tools/aiming/GlobalAim.js",
    "sourceHash": "d3689d2e57e874a626eadd68c67410f17472e72a340ff5575b312e44d225d049",
    "summary": "Get an entity's world position with an optional vertical offset. Returns null if the entity or Transform is missing.",
    "exports": [
      {
        "name": "getEntityWorldPosition",
        "kind": "function",
        "signature": "getEntityWorldPosition(ecsWorld, entityId, heightOffset = 0)",
        "summary": "Get an entity's world position with an optional vertical offset. Returns null if the entity or Transform is missing."
      },
      {
        "name": "computeAimBetweenEntities",
        "kind": "function",
        "signature": "computeAimBetweenEntities(ecsWorld, sourceEntityId, targetEntityId, options = {},)",
        "summary": "Compute an aim line from one entity to another. Returns { origin, target, direction, distance } or null if invalid."
      },
      {
        "name": "computeAimFromEntityToPoint",
        "kind": "function",
        "signature": "computeAimFromEntityToPoint(ecsWorld, sourceEntityId, worldPoint, options = {},)",
        "summary": "Compute an aim line from an entity to an arbitrary world-space point."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/animation/FBXAscii",
    "path": "engine/reference/tools/animation/FBXAscii.md",
    "source": "engine/tools/animation/FBXAscii.js",
    "import": "/engine/tools/animation/FBXAscii.js",
    "sourceHash": "3c377bdd3748f3ea1e6e5f15cebb18b7f2514cb535bb66b2c1f7dd1f34986b21",
    "summary": "",
    "exports": [
      {
        "name": "parseFBXAscii",
        "kind": "function",
        "signature": "parseFBXAscii(text)",
        "summary": ""
      },
      {
        "name": "buildMixamoSkeletonFromFBX",
        "kind": "function",
        "signature": "buildMixamoSkeletonFromFBX(fbx, opts = {})",
        "summary": ""
      },
      {
        "name": "sampleMixamoFBXAnimationClip",
        "kind": "function",
        "signature": "sampleMixamoFBXAnimationClip(fbx, skeleton, opts = {})",
        "summary": ""
      },
      {
        "name": "findSkeletonJointIndexByName",
        "kind": "function",
        "signature": "findSkeletonJointIndexByName(skeleton, jointName)",
        "summary": ""
      },
      {
        "name": "computeClipLocalMatricesAtFrame",
        "kind": "function",
        "signature": "computeClipLocalMatricesAtFrame(clip, skeleton, frameIndex, out = null)",
        "summary": ""
      },
      {
        "name": "computeClipGlobalMatricesAtFrame",
        "kind": "function",
        "signature": "computeClipGlobalMatricesAtFrame(clip, skeleton, frameIndex, out = null)",
        "summary": ""
      },
      {
        "name": "extractRootTranslationTrack",
        "kind": "function",
        "signature": "extractRootTranslationTrack(clip, skeleton, opts = {})",
        "summary": ""
      },
      {
        "name": "extractRootMotion",
        "kind": "function",
        "signature": "extractRootMotion(clip, skeleton, opts = {})",
        "summary": ""
      },
      {
        "name": "buildTeacherJointPositionDataset",
        "kind": "function",
        "signature": "buildTeacherJointPositionDataset(clip, skeleton, opts = {})",
        "summary": ""
      },
      {
        "name": "loadMixamoFBXAscii",
        "kind": "function",
        "signature": "loadMixamoFBXAscii(text, opts = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/camera/CameraController",
    "path": "engine/reference/tools/camera/CameraController.md",
    "source": "engine/tools/camera/CameraController.js",
    "import": "/engine/tools/camera/CameraController.js",
    "sourceHash": "31cd3d9e89325a7ea00cda92d4c7088daff2d4a85c5972a1f33a87972d93b5b1",
    "summary": "CameraController.js - admitted state management around StandardCameraController.",
    "exports": [
      {
        "name": "cameraEntityBoundsReport",
        "kind": "function",
        "signature": "cameraEntityBoundsReport(subjects)",
        "summary": ""
      },
      {
        "name": "cameraCollisionOptionsReport",
        "kind": "function",
        "signature": "cameraCollisionOptionsReport(options = {})",
        "summary": ""
      },
      {
        "name": "cameraFocusReport",
        "kind": "function",
        "signature": "cameraFocusReport(camera, target, options = {})",
        "summary": ""
      },
      {
        "name": "cameraEntityFocusReport",
        "kind": "function",
        "signature": "cameraEntityFocusReport(camera, subjects, options = {})",
        "summary": ""
      },
      {
        "name": "focusThirdPersonCamera",
        "kind": "function",
        "signature": "focusThirdPersonCamera(camera, target, options = {})",
        "summary": ""
      },
      {
        "name": "focusThirdPersonCameraOnEntities",
        "kind": "function",
        "signature": "focusThirdPersonCameraOnEntities(camera, subjects, options = {})",
        "summary": ""
      },
      {
        "name": "cameraFocusTransitionReport",
        "kind": "function",
        "signature": "cameraFocusTransitionReport(camera, deltaSeconds, options = {})",
        "summary": ""
      },
      {
        "name": "cameraControllerStepReport",
        "kind": "function",
        "signature": "cameraControllerStepReport(camera, input, options)",
        "summary": ""
      },
      {
        "name": "stepCamera",
        "kind": "function",
        "signature": "stepCamera(camera, input, options = {})",
        "summary": ""
      },
      {
        "name": "cameraControllerEntityReport",
        "kind": "function",
        "signature": "cameraControllerEntityReport(camera, cameraEntityId)",
        "summary": ""
      },
      {
        "name": "syncCameraToEcs",
        "kind": "function",
        "signature": "syncCameraToEcs(camera, ecsWorld, cameraEntityId)",
        "summary": ""
      },
      {
        "name": "updateCameraFull",
        "kind": "function",
        "signature": "updateCameraFull(camera, input, options = {})",
        "summary": ""
      },
      {
        "name": "cameraModeSwitchReport",
        "kind": "function",
        "signature": "cameraModeSwitchReport(camera, mode, options = {})",
        "summary": ""
      },
      {
        "name": "switchCameraMode",
        "kind": "function",
        "signature": "switchCameraMode(camera, mode, options = {})",
        "summary": ""
      },
      {
        "name": "CAMERA_CONTROLLER_LIMITS",
        "kind": "constant",
        "signature": "CAMERA_CONTROLLER_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/camera/StandardCameraController",
    "path": "engine/reference/tools/camera/StandardCameraController.md",
    "source": "engine/tools/camera/StandardCameraController.js",
    "import": "/engine/tools/camera/StandardCameraController.js",
    "sourceHash": "a9464657d30e1628b9121e2c24555234b1356c3debc987bdf4521354b343801e",
    "summary": "",
    "exports": [
      {
        "name": "standardCameraKeysReport",
        "kind": "function",
        "signature": "standardCameraKeysReport(keys = {})",
        "summary": ""
      },
      {
        "name": "standardCameraMovementResponseReport",
        "kind": "function",
        "signature": "standardCameraMovementResponseReport(currentAxes, targetAxes, options = {})",
        "summary": ""
      },
      {
        "name": "standardCameraZoomReport",
        "kind": "function",
        "signature": "standardCameraZoomReport(distance, options = {})",
        "summary": ""
      },
      {
        "name": "standardCameraBoomReport",
        "kind": "function",
        "signature": "standardCameraBoomReport(target, desiredEye, hit = null, options = {})",
        "summary": ""
      },
      {
        "name": "standardCameraMovementIntentReport",
        "kind": "function",
        "signature": "standardCameraMovementIntentReport(keys, yaw, distance, movementAxes = [0, 0, 0], responseOptions = {},)",
        "summary": ""
      },
      {
        "name": "standardCameraStateReport",
        "kind": "function",
        "signature": "standardCameraStateReport(state)",
        "summary": ""
      },
      {
        "name": "standardCameraSphereFitReport",
        "kind": "function",
        "signature": "standardCameraSphereFitReport(radius, options = {})",
        "summary": ""
      },
      {
        "name": "standardCameraBoundsReport",
        "kind": "function",
        "signature": "standardCameraBoundsReport(bounds)",
        "summary": ""
      },
      {
        "name": "standardCameraBoundsFocusReport",
        "kind": "function",
        "signature": "standardCameraBoundsFocusReport(bounds, options = {})",
        "summary": ""
      },
      {
        "name": "standardCameraFocusReport",
        "kind": "function",
        "signature": "standardCameraFocusReport(state, target, options = {})",
        "summary": ""
      },
      {
        "name": "standardCameraFocusTransitionReport",
        "kind": "function",
        "signature": "standardCameraFocusTransitionReport(transition, deltaSeconds)",
        "summary": ""
      },
      {
        "name": "standardCameraOptionsReport",
        "kind": "function",
        "signature": "standardCameraOptionsReport(options)",
        "summary": ""
      },
      {
        "name": "standardCameraUpdateReport",
        "kind": "function",
        "signature": "standardCameraUpdateReport(state, options)",
        "summary": ""
      },
      {
        "name": "updateStandardCamera",
        "kind": "function",
        "signature": "updateStandardCamera(state, options)",
        "summary": ""
      },
      {
        "name": "getStandardCameraEyeBasis",
        "kind": "function",
        "signature": "getStandardCameraEyeBasis(state)",
        "summary": ""
      },
      {
        "name": "STANDARD_CAMERA_LIMITS",
        "kind": "constant",
        "signature": "STANDARD_CAMERA_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/console/HtmlConsole",
    "path": "engine/reference/tools/console/HtmlConsole.md",
    "source": "engine/tools/console/HtmlConsole.js",
    "import": "/engine/tools/console/HtmlConsole.js",
    "sourceHash": "4ca0f7bf3d740f7ff4ead8de24c3ee4faa39ac33d9d877bb5b42ce659e8956e5",
    "summary": "Render console-hook arguments without invoking getters or leaking common credential fields. Output is deliberately bounded so one diagnostic object cannot freeze the in-OS console or flood a durable log.",
    "exports": [
      {
        "name": "formatConsoleHookArguments",
        "kind": "function",
        "signature": "formatConsoleHookArguments(args, options = {})",
        "summary": "Render console-hook arguments without invoking getters or leaking common credential fields. Output is deliberately bounded so one diagnostic object cannot freeze the in-OS console or flood a durable log."
      },
      {
        "name": "createHtmlConsole",
        "kind": "function",
        "signature": "createHtmlConsole(options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/gizmos/RopeGizmo",
    "path": "engine/reference/tools/gizmos/RopeGizmo.md",
    "source": "engine/tools/gizmos/RopeGizmo.js",
    "import": "/engine/tools/gizmos/RopeGizmo.js",
    "sourceHash": "fea430a35f959794e366034ceda162b26511ebc6229db2668f5197cb3c0d9740",
    "summary": "RopeGizmo - Visual handles for manipulating rope attachment points Features: - Draggable spheres at start/end attachment points - Catenary curve visualization between endpoints - Entity snapping when dragging near entities - Visual feedback for hover/drag states Based on common patterns from Unity/Unreal constraint gizmos: - Anchor points shown as spherical handles - Lines/curves connecting attachment points - Snapping to nearby entities for easy attachment",
    "exports": [
      {
        "name": "RopeGizmo",
        "kind": "class",
        "signature": "class RopeGizmo",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/gizmos/TransformGizmo",
    "path": "engine/reference/tools/gizmos/TransformGizmo.md",
    "source": "engine/tools/gizmos/TransformGizmo.js",
    "import": "/engine/tools/gizmos/TransformGizmo.js",
    "sourceHash": "6283dc1085c4f565e67988f244728caa41312028d7ee757c08465a543930f700",
    "summary": "TransformGizmo - Visual handles for manipulating entity transforms Now powered by vGPU driver",
    "exports": [
      {
        "name": "TransformGizmo",
        "kind": "class",
        "signature": "class TransformGizmo",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/gizmos/index",
    "path": "engine/reference/tools/gizmos/index.md",
    "source": "engine/tools/gizmos/index.js",
    "import": "/engine/tools/gizmos/index.js",
    "sourceHash": "8fd83ac7c19eeacc1189a5e758d6dd9c43be66a2cc8ceb080c7cbed1771afddd",
    "summary": "Gizmos - Visual manipulation handles for editor and runtime",
    "exports": [
      {
        "name": "RopeGizmo",
        "kind": "re-export",
        "signature": "RopeGizmo",
        "summary": ""
      },
      {
        "name": "TransformGizmo",
        "kind": "re-export",
        "signature": "TransformGizmo",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/input/StandardInputController",
    "path": "engine/reference/tools/input/StandardInputController.md",
    "source": "engine/tools/input/StandardInputController.js",
    "import": "/engine/tools/input/StandardInputController.js",
    "sourceHash": "6cbe3cc9d7367740279841d00b8a335f841df134cd64f9e4cdae5963289125e5",
    "summary": "Create an input controller state object.",
    "exports": [
      {
        "name": "standardInputActionMapReport",
        "kind": "function",
        "signature": "standardInputActionMapReport(actionMap, options = {})",
        "summary": ""
      },
      {
        "name": "standardInputActionStateReport",
        "kind": "function",
        "signature": "standardInputActionStateReport(actionMap, pressedBindings)",
        "summary": ""
      },
      {
        "name": "rebindStandardInputAction",
        "kind": "function",
        "signature": "rebindStandardInputAction(ctrl, action, bindings, options = {})",
        "summary": ""
      },
      {
        "name": "standardGamepadMovementReport",
        "kind": "function",
        "signature": "standardGamepadMovementReport(gamepad, options = {})",
        "summary": ""
      },
      {
        "name": "standardGamepadButtonReport",
        "kind": "function",
        "signature": "standardGamepadButtonReport(button, options = {})",
        "summary": ""
      },
      {
        "name": "standardInputWheelZoomReport",
        "kind": "function",
        "signature": "standardInputWheelZoomReport(currentDelta, eventDelta)",
        "summary": ""
      },
      {
        "name": "standardGamepadHapticEffectReport",
        "kind": "function",
        "signature": "standardGamepadHapticEffectReport(gamepad, options = {})",
        "summary": ""
      },
      {
        "name": "playStandardGamepadHaptics",
        "kind": "function",
        "signature": "async playStandardGamepadHaptics(gamepad, options = {})",
        "summary": ""
      },
      {
        "name": "standardGamepadInputReport",
        "kind": "function",
        "signature": "standardGamepadInputReport(gamepad, options = {})",
        "summary": ""
      },
      {
        "name": "pollInputGamepad",
        "kind": "function",
        "signature": "pollInputGamepad(ctrl, gamepads = undefined)",
        "summary": ""
      },
      {
        "name": "createInputController",
        "kind": "function",
        "signature": "createInputController(options = {})",
        "summary": "Create an input controller state object."
      },
      {
        "name": "attachInputListeners",
        "kind": "function",
        "signature": "attachInputListeners(ctrl, callbacks = {})",
        "summary": "Attach input listeners to the controller. Returns a cleanup function to remove all listeners."
      },
      {
        "name": "detachInputListeners",
        "kind": "function",
        "signature": "detachInputListeners(ctrl)",
        "summary": "Remove all input listeners."
      },
      {
        "name": "consumeMouseDelta",
        "kind": "function",
        "signature": "consumeMouseDelta(ctrl)",
        "summary": "Reset mouse deltas after consuming them for camera update."
      },
      {
        "name": "consumeZoomDelta",
        "kind": "function",
        "signature": "consumeZoomDelta(ctrl)",
        "summary": "Get current keyboard state."
      },
      {
        "name": "getKeys",
        "kind": "function",
        "signature": "getKeys(ctrl)",
        "summary": ""
      },
      {
        "name": "getInputActions",
        "kind": "function",
        "signature": "getInputActions(ctrl)",
        "summary": ""
      },
      {
        "name": "getInputActionMap",
        "kind": "function",
        "signature": "getInputActionMap(ctrl)",
        "summary": ""
      },
      {
        "name": "getMovementAxes",
        "kind": "function",
        "signature": "getMovementAxes(ctrl)",
        "summary": ""
      },
      {
        "name": "getLastMousePosition",
        "kind": "function",
        "signature": "getLastMousePosition(ctrl)",
        "summary": "Get last mouse position."
      },
      {
        "name": "STANDARD_INPUT_LIMITS",
        "kind": "constant",
        "signature": "STANDARD_INPUT_LIMITS",
        "summary": ""
      },
      {
        "name": "DEFAULT_STANDARD_INPUT_ACTION_MAP",
        "kind": "constant",
        "signature": "DEFAULT_STANDARD_INPUT_ACTION_MAP",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/EntitiesInspectorPanel",
    "path": "engine/reference/tools/inspector/EntitiesInspectorPanel.md",
    "source": "engine/tools/inspector/EntitiesInspectorPanel.js",
    "import": "/engine/tools/inspector/EntitiesInspectorPanel.js",
    "sourceHash": "96786ccad88e42dcd5bba09cf9264d16aab60c69e68335e100191c376cc09a3e",
    "summary": "",
    "exports": [
      {
        "name": "initEntitiesInspectorPanel",
        "kind": "function",
        "signature": "initEntitiesInspectorPanel(doc, entitiesPanel, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/EntitiesInspectorPanel.old",
    "path": "engine/reference/tools/inspector/EntitiesInspectorPanel.old.md",
    "source": "engine/tools/inspector/EntitiesInspectorPanel.old.js",
    "import": "/engine/tools/inspector/EntitiesInspectorPanel.old.js",
    "sourceHash": "163c72c780450d9bf6be62e7082167410b4333082a810112d8134a92998881fe",
    "summary": "",
    "exports": [
      {
        "name": "initEntitiesInspectorPanel",
        "kind": "re-export",
        "signature": "initEntitiesInspectorPanel",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/EntityInspector",
    "path": "engine/reference/tools/inspector/EntityInspector.md",
    "source": "engine/tools/inspector/EntityInspector.js",
    "import": "/engine/tools/inspector/EntityInspector.js",
    "sourceHash": "c94f41d4d5ff8f67a37390b91f90bd76996546742951b5e2bcb99afdac8fa678",
    "summary": "",
    "exports": [
      {
        "name": "createEntityInspectorModel",
        "kind": "function",
        "signature": "createEntityInspectorModel(world, options = {})",
        "summary": ""
      },
      {
        "name": "setEntityComponentFromInspector",
        "kind": "function",
        "signature": "setEntityComponentFromInspector(world, entityId, componentName, value)",
        "summary": ""
      },
      {
        "name": "removeEntityComponentFromInspector",
        "kind": "function",
        "signature": "removeEntityComponentFromInspector(world, entityId, componentName)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/InspectorConfigFactory",
    "path": "engine/reference/tools/inspector/InspectorConfigFactory.md",
    "source": "engine/tools/inspector/InspectorConfigFactory.js",
    "import": "/engine/tools/inspector/InspectorConfigFactory.js",
    "sourceHash": "75a7f5e68ad63e74d4fb66f04b8f3dd58973571381afe8baa9f313b9072a9d31",
    "summary": "Create a standard inspector configuration.",
    "exports": [
      {
        "name": "createInspectorConfig",
        "kind": "function",
        "signature": "createInspectorConfig(options)",
        "summary": "Create a standard inspector configuration."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/InspectorPanel",
    "path": "engine/reference/tools/inspector/InspectorPanel.md",
    "source": "engine/tools/inspector/InspectorPanel.js",
    "import": "/engine/tools/inspector/InspectorPanel.js",
    "sourceHash": "3d94bd0eef0978dd394763a0a30998fb57bc0f96d6abe6bd631cb21bae9b49ee",
    "summary": "",
    "exports": [
      {
        "name": "attachInspectorPanel",
        "kind": "function",
        "signature": "attachInspectorPanel(options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/NavInspector",
    "path": "engine/reference/tools/inspector/NavInspector.md",
    "source": "engine/tools/inspector/NavInspector.js",
    "import": "/engine/tools/inspector/NavInspector.js",
    "sourceHash": "847af051a44ed8599d461c949c148bc329814acf0aad5f6423cf92505e52b0bf",
    "summary": "",
    "exports": [
      {
        "name": "createNavInspectorModel",
        "kind": "function",
        "signature": "createNavInspectorModel(world)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/PhysicsSandboxInspector",
    "path": "engine/reference/tools/inspector/PhysicsSandboxInspector.md",
    "source": "engine/tools/inspector/PhysicsSandboxInspector.js",
    "import": "/engine/tools/inspector/PhysicsSandboxInspector.js",
    "sourceHash": "31217fc5ab33d62994e237e1c2222891709521c898b61c42f44d2b517e76a5e8",
    "summary": "",
    "exports": [
      {
        "name": "attachPhysicsSandboxInspector",
        "kind": "function",
        "signature": "attachPhysicsSandboxInspector(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/WorldInspector",
    "path": "engine/reference/tools/inspector/WorldInspector.md",
    "source": "engine/tools/inspector/WorldInspector.js",
    "import": "/engine/tools/inspector/WorldInspector.js",
    "sourceHash": "7b722c7e4d6f17f13a4e1a9beaec79f0496af6e8236783eba9d09bb33fc17330",
    "summary": "",
    "exports": [
      {
        "name": "createWorldInspectorModel",
        "kind": "function",
        "signature": "createWorldInspectorModel(world, options = {})",
        "summary": ""
      },
      {
        "name": "applyWorldInspectorModel",
        "kind": "function",
        "signature": "applyWorldInspectorModel(world, model)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/entityEditors/CameraComponentEditor",
    "path": "engine/reference/tools/inspector/entityEditors/CameraComponentEditor.md",
    "source": "engine/tools/inspector/entityEditors/CameraComponentEditor.js",
    "import": "/engine/tools/inspector/entityEditors/CameraComponentEditor.js",
    "sourceHash": "65e34e19e8dc6f8af1a17101dd734c490c6ab2e657d58404c2f2cc5948e6ec98",
    "summary": "",
    "exports": [
      {
        "name": "renderCameraComponentEditor",
        "kind": "function",
        "signature": "renderCameraComponentEditor(doc, container, state)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/entityEditors/JsonComponentEditor",
    "path": "engine/reference/tools/inspector/entityEditors/JsonComponentEditor.md",
    "source": "engine/tools/inspector/entityEditors/JsonComponentEditor.js",
    "import": "/engine/tools/inspector/entityEditors/JsonComponentEditor.js",
    "sourceHash": "d92117141e3b2277e08c8bf7243400412ad7075ae7dd26bf2c2546d16dbb1daa",
    "summary": "",
    "exports": [
      {
        "name": "renderJsonComponentEditor",
        "kind": "function",
        "signature": "renderJsonComponentEditor(doc, container, editor, value)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/entityEditors/LightComponentEditor",
    "path": "engine/reference/tools/inspector/entityEditors/LightComponentEditor.md",
    "source": "engine/tools/inspector/entityEditors/LightComponentEditor.js",
    "import": "/engine/tools/inspector/entityEditors/LightComponentEditor.js",
    "sourceHash": "fa0d717feda51f3ee8c60f2b93695a57c4e542530996b37613fc989f35729b11",
    "summary": "",
    "exports": [
      {
        "name": "renderLightComponentEditor",
        "kind": "function",
        "signature": "renderLightComponentEditor(doc, container, state)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/entityEditors/ModelAnimationEditor",
    "path": "engine/reference/tools/inspector/entityEditors/ModelAnimationEditor.md",
    "source": "engine/tools/inspector/entityEditors/ModelAnimationEditor.js",
    "import": "/engine/tools/inspector/entityEditors/ModelAnimationEditor.js",
    "sourceHash": "9ed4ad0c48cc501e3277b796dfa6c0107c6ddf2a754054e355d5c80a8ae2784c",
    "summary": "",
    "exports": [
      {
        "name": "renderModelAnimationEditor",
        "kind": "function",
        "signature": "async renderModelAnimationEditor(doc, container, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/entityEditors/ModelMorphEditor",
    "path": "engine/reference/tools/inspector/entityEditors/ModelMorphEditor.md",
    "source": "engine/tools/inspector/entityEditors/ModelMorphEditor.js",
    "import": "/engine/tools/inspector/entityEditors/ModelMorphEditor.js",
    "sourceHash": "e26787d717c20a26d6c4e4689fbcdfa727b80276cc937bc82c2b4c764b17474e",
    "summary": "",
    "exports": [
      {
        "name": "renderModelMorphEditor",
        "kind": "function",
        "signature": "async renderModelMorphEditor(doc, container, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/entityEditors/PhysicalMaterialComponentEditor",
    "path": "engine/reference/tools/inspector/entityEditors/PhysicalMaterialComponentEditor.md",
    "source": "engine/tools/inspector/entityEditors/PhysicalMaterialComponentEditor.js",
    "import": "/engine/tools/inspector/entityEditors/PhysicalMaterialComponentEditor.js",
    "sourceHash": "9a4ad312d59cce7849ef25765166039bf487b25104aa99ecf18571996b68d6be",
    "summary": "Physical Material Component Editor — renders preset dropdown + property sliders for density, elasticity, hardness, brittleness, strength, friction, restitution, deformable/breakable flags, fracture pattern, and damage status.",
    "exports": [
      {
        "name": "renderPhysicalMaterialComponentEditor",
        "kind": "function",
        "signature": "renderPhysicalMaterialComponentEditor(doc, container, state)",
        "summary": "Physical Material Component Editor — renders preset dropdown + property sliders for density, elasticity, hardness, brittleness, strength, friction, restitution, deformable/breakable flags, fracture pattern, and damage status."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/entityEditors/PhysicsRopeComponentEditor",
    "path": "engine/reference/tools/inspector/entityEditors/PhysicsRopeComponentEditor.md",
    "source": "engine/tools/inspector/entityEditors/PhysicsRopeComponentEditor.js",
    "import": "/engine/tools/inspector/entityEditors/PhysicsRopeComponentEditor.js",
    "sourceHash": "5d47eec49bd20d250bfdcaa4ecee1f53e36d15d9a597fb0c23cb1494a82b60d6",
    "summary": "PhysicsRopeComponentEditor.js - Rope Property Editor Renders rope-specific properties in the entity inspector when a rope entity is selected. Uses shared ROPE_INSPECTOR_SCHEMA from RopeSchema.js for full consistency with RopeTool.",
    "exports": [
      {
        "name": "renderPhysicsRopeComponentEditor",
        "kind": "function",
        "signature": "renderPhysicsRopeComponentEditor(doc, container, entitiesState)",
        "summary": "Render the PhysicsRope component editor using shared schema"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/entityEditors/RenderableComponentEditor",
    "path": "engine/reference/tools/inspector/entityEditors/RenderableComponentEditor.md",
    "source": "engine/tools/inspector/entityEditors/RenderableComponentEditor.js",
    "import": "/engine/tools/inspector/entityEditors/RenderableComponentEditor.js",
    "sourceHash": "585c5fcce8098b561a225874eb66809edd149c86dc2117e497f8bf56bdc2873c",
    "summary": "",
    "exports": [
      {
        "name": "renderRenderableComponentEditor",
        "kind": "function",
        "signature": "renderRenderableComponentEditor(doc, container, state)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/entityEditors/TransformComponentEditor",
    "path": "engine/reference/tools/inspector/entityEditors/TransformComponentEditor.md",
    "source": "engine/tools/inspector/entityEditors/TransformComponentEditor.js",
    "import": "/engine/tools/inspector/entityEditors/TransformComponentEditor.js",
    "sourceHash": "1e685dd23b3d698d11de9bce8822c51e83d2c1fc946b57f8bd231dd340a83816",
    "summary": "",
    "exports": [
      {
        "name": "renderTransformComponentEditor",
        "kind": "function",
        "signature": "renderTransformComponentEditor(doc, container, state)",
        "summary": ""
      },
      {
        "name": "SNAP_SETTINGS",
        "kind": "constant",
        "signature": "SNAP_SETTINGS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/EntitiesInspectorPanel",
    "path": "engine/reference/tools/inspector/panels/EntitiesInspectorPanel.md",
    "source": "engine/tools/inspector/panels/EntitiesInspectorPanel.js",
    "import": "/engine/tools/inspector/panels/EntitiesInspectorPanel.js",
    "sourceHash": "1e8c409b6ca34d1ad7212b0b023a47bbd7bae222c268f4ef2a2ab7157d6235e5",
    "summary": "",
    "exports": [
      {
        "name": "initEntitiesInspectorPanel",
        "kind": "re-export",
        "signature": "initEntitiesInspectorPanel",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/InspectorStyles",
    "path": "engine/reference/tools/inspector/panels/InspectorStyles.md",
    "source": "engine/tools/inspector/panels/InspectorStyles.js",
    "import": "/engine/tools/inspector/panels/InspectorStyles.js",
    "sourceHash": "d1637bdf43f751e641c20838afecc27af3ed91189b5562bc51b94b17a4acdb5c",
    "summary": "Inject shared inspector styles into the document. Safe to call multiple times - will only inject once.",
    "exports": [
      {
        "name": "injectInspectorStyles",
        "kind": "function",
        "signature": "injectInspectorStyles(doc = document)",
        "summary": "Inject shared inspector styles into the document. Safe to call multiple times - will only inject once."
      },
      {
        "name": "applyPanelContainerStyles",
        "kind": "function",
        "signature": "applyPanelContainerStyles(container)",
        "summary": "Apply standard inspector panel container styles to a DOM element."
      },
      {
        "name": "areStylesInjected",
        "kind": "function",
        "signature": "areStylesInjected()",
        "summary": "Check if inspector styles have been injected"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/NavInspectorPanel",
    "path": "engine/reference/tools/inspector/panels/NavInspectorPanel.md",
    "source": "engine/tools/inspector/panels/NavInspectorPanel.js",
    "import": "/engine/tools/inspector/panels/NavInspectorPanel.js",
    "sourceHash": "80d61d38b45bac8e335e80352a3b11a338d47a751b2381264324f2b1f5944949",
    "summary": "",
    "exports": [
      {
        "name": "initNavInspectorPanel",
        "kind": "function",
        "signature": "initNavInspectorPanel(doc, navPanel, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/SpawnerInspectorPanel",
    "path": "engine/reference/tools/inspector/panels/SpawnerInspectorPanel.md",
    "source": "engine/tools/inspector/panels/SpawnerInspectorPanel.js",
    "import": "/engine/tools/inspector/panels/SpawnerInspectorPanel.js",
    "sourceHash": "8a2bd375c55f902f408c34130d565e2e7b6d8305a42185dcc1a34f223b768d13",
    "summary": "",
    "exports": [
      {
        "name": "initSpawnerInspectorPanel",
        "kind": "function",
        "signature": "initSpawnerInspectorPanel(doc, spawnerPanel, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/SpellBookPanel",
    "path": "engine/reference/tools/inspector/panels/SpellBookPanel.md",
    "source": "engine/tools/inspector/panels/SpellBookPanel.js",
    "import": "/engine/tools/inspector/panels/SpellBookPanel.js",
    "sourceHash": "9637801dc6c6d653b04503e710ac02d7165f771eccf90281c3107d54376d7aeb",
    "summary": "Spell Book Inspector Panel Browse, manage, and organize saved spells. Integrates with SpellBook for persistence.",
    "exports": [
      {
        "name": "initSpellBookPanel",
        "kind": "function",
        "signature": "initSpellBookPanel(container, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/SpellBuilderPanel",
    "path": "engine/reference/tools/inspector/panels/SpellBuilderPanel.md",
    "source": "engine/tools/inspector/panels/SpellBuilderPanel.js",
    "import": "/engine/tools/inspector/panels/SpellBuilderPanel.js",
    "sourceHash": "6126bc62a6d27e3b6a0e62068996fc8d6edc8595b02528300bc579aca3c33ac8",
    "summary": "Spell Builder Inspector Panel Real-time spell effect editor integrated with the engine inspector. Allows creating, customizing, and previewing particle-based spells.",
    "exports": [
      {
        "name": "initSpellBuilderPanel",
        "kind": "function",
        "signature": "initSpellBuilderPanel(container, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/WorldInspectorPanel",
    "path": "engine/reference/tools/inspector/panels/WorldInspectorPanel.md",
    "source": "engine/tools/inspector/panels/WorldInspectorPanel.js",
    "import": "/engine/tools/inspector/panels/WorldInspectorPanel.js",
    "sourceHash": "e64709a6112daa53240e5fd1632d8dc5dd0190ba8a25f5a91f935bf59ec97b29",
    "summary": "",
    "exports": [
      {
        "name": "initWorldInspectorPanel",
        "kind": "function",
        "signature": "initWorldInspectorPanel(doc, worldPanel, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/index",
    "path": "engine/reference/tools/inspector/panels/index.md",
    "source": "engine/tools/inspector/panels/index.js",
    "import": "/engine/tools/inspector/panels/index.js",
    "sourceHash": "5a5efc9f699194925653ef8e9c8fd52c448a174ab6247bacf382eb6101fb9c05",
    "summary": "",
    "exports": [
      {
        "name": "INSPECTOR_THEME",
        "kind": "re-export",
        "signature": "INSPECTOR_THEME",
        "summary": ""
      },
      {
        "name": "addCheckboxRow",
        "kind": "re-export",
        "signature": "addCheckboxRow",
        "summary": ""
      },
      {
        "name": "addConfigRow",
        "kind": "re-export",
        "signature": "addConfigRow",
        "summary": ""
      },
      {
        "name": "addNumberRow",
        "kind": "re-export",
        "signature": "addNumberRow",
        "summary": ""
      },
      {
        "name": "addSliderRow",
        "kind": "re-export",
        "signature": "addSliderRow",
        "summary": ""
      },
      {
        "name": "addTextRow",
        "kind": "re-export",
        "signature": "addTextRow",
        "summary": ""
      },
      {
        "name": "applyPanelContainerStyles",
        "kind": "re-export",
        "signature": "applyPanelContainerStyles",
        "summary": ""
      },
      {
        "name": "areStylesInjected",
        "kind": "re-export",
        "signature": "areStylesInjected",
        "summary": ""
      },
      {
        "name": "createPropertySection",
        "kind": "re-export",
        "signature": "createPropertySection",
        "summary": ""
      },
      {
        "name": "createStatItem",
        "kind": "re-export",
        "signature": "createStatItem",
        "summary": ""
      },
      {
        "name": "createThemedBox",
        "kind": "re-export",
        "signature": "createThemedBox",
        "summary": ""
      },
      {
        "name": "createThemedCheckboxRow",
        "kind": "re-export",
        "signature": "createThemedCheckboxRow",
        "summary": ""
      },
      {
        "name": "createThemedSlider",
        "kind": "re-export",
        "signature": "createThemedSlider",
        "summary": ""
      },
      {
        "name": "initEntitiesInspectorPanel",
        "kind": "re-export",
        "signature": "initEntitiesInspectorPanel",
        "summary": ""
      },
      {
        "name": "initNavInspectorPanel",
        "kind": "re-export",
        "signature": "initNavInspectorPanel",
        "summary": ""
      },
      {
        "name": "initSpawnerInspectorPanel",
        "kind": "re-export",
        "signature": "initSpawnerInspectorPanel",
        "summary": ""
      },
      {
        "name": "initSpellBookPanel",
        "kind": "re-export",
        "signature": "initSpellBookPanel",
        "summary": ""
      },
      {
        "name": "initSpellBuilderPanel",
        "kind": "re-export",
        "signature": "initSpellBuilderPanel",
        "summary": ""
      },
      {
        "name": "initWorldInspectorPanel",
        "kind": "re-export",
        "signature": "initWorldInspectorPanel",
        "summary": ""
      },
      {
        "name": "injectInspectorStyles",
        "kind": "re-export",
        "signature": "injectInspectorStyles",
        "summary": ""
      },
      {
        "name": "renderInspectorSchema",
        "kind": "re-export",
        "signature": "renderInspectorSchema",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/spawner/ElementLayers",
    "path": "engine/reference/tools/inspector/panels/spawner/ElementLayers.md",
    "source": "engine/tools/inspector/panels/spawner/ElementLayers.js",
    "import": "/engine/tools/inspector/panels/spawner/ElementLayers.js",
    "sourceHash": "27722216d7b2df09c103e220502c35b0477ce45e7508707dc5ea20d6f10dddcc",
    "summary": "",
    "exports": [
      {
        "name": "createElementLayers",
        "kind": "function",
        "signature": "createElementLayers(doc, { elements, onChange })",
        "summary": ""
      },
      {
        "name": "ELEMENT_COLORS",
        "kind": "re-export",
        "signature": "ELEMENT_COLORS",
        "summary": ""
      },
      {
        "name": "ELEMENT_ICONS",
        "kind": "re-export",
        "signature": "ELEMENT_ICONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/spawner/EmitterInspectorCard",
    "path": "engine/reference/tools/inspector/panels/spawner/EmitterInspectorCard.md",
    "source": "engine/tools/inspector/panels/spawner/EmitterInspectorCard.js",
    "import": "/engine/tools/inspector/panels/spawner/EmitterInspectorCard.js",
    "sourceHash": "b066d6a1c835ffb8f319bcc7d1e6b096161fbe8c2d507cbecde45f812d68be63",
    "summary": "EmitterInspectorCard.js - Shared emitter property card component Modular emitter editor used by both Spawner and Entities inspector panels. Configurable sections: header, elements, physics, aim.",
    "exports": [
      {
        "name": "createEmitterInspectorCard",
        "kind": "function",
        "signature": "createEmitterInspectorCard(doc, options = {})",
        "summary": "Create a modular emitter inspector card."
      },
      {
        "name": "STATE_ICONS",
        "kind": "constant",
        "signature": "STATE_ICONS",
        "summary": ""
      },
      {
        "name": "STATE_COLORS",
        "kind": "constant",
        "signature": "STATE_COLORS",
        "summary": ""
      },
      {
        "name": "ELEMENT_ICONS",
        "kind": "constant",
        "signature": "ELEMENT_ICONS",
        "summary": ""
      },
      {
        "name": "ELEMENT_COLORS",
        "kind": "constant",
        "signature": "ELEMENT_COLORS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/spawner/GyroAimControl",
    "path": "engine/reference/tools/inspector/panels/spawner/GyroAimControl.md",
    "source": "engine/tools/inspector/panels/spawner/GyroAimControl.js",
    "import": "/engine/tools/inspector/panels/spawner/GyroAimControl.js",
    "sourceHash": "9350ce6c7b1cfb39c7063d66f1f26db05a9fe93ec5d7414a49244c4fc21f9c8c",
    "summary": "",
    "exports": [
      {
        "name": "createGyroAimControl",
        "kind": "function",
        "signature": "createGyroAimControl(doc, options = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/spawner/PhysicsProps",
    "path": "engine/reference/tools/inspector/panels/spawner/PhysicsProps.md",
    "source": "engine/tools/inspector/panels/spawner/PhysicsProps.js",
    "import": "/engine/tools/inspector/panels/spawner/PhysicsProps.js",
    "sourceHash": "e1f48cc2b8fdf5dd5d14c1d152a0a5f223f63a44f87917f91a96bbd90e02de2a",
    "summary": "Physics properties grid component Uses slider-based controls with value readouts to match element styling.",
    "exports": [
      {
        "name": "createPhysicsProps",
        "kind": "function",
        "signature": "createPhysicsProps(doc, { emitterCfg })",
        "summary": ""
      },
      {
        "name": "createMatterProps",
        "kind": "function",
        "signature": "createMatterProps(doc, { emitterCfg, onProfileChange })",
        "summary": "Create the Matter / Substance section for the emitter inspector. Shows substance dropdown, temperature slider, charge slider, state badge, active physics badges, and conditional SPH params."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/spawner/StateSelector",
    "path": "engine/reference/tools/inspector/panels/spawner/StateSelector.md",
    "source": "engine/tools/inspector/panels/spawner/StateSelector.js",
    "import": "/engine/tools/inspector/panels/spawner/StateSelector.js",
    "sourceHash": "ef48f34ccdf20a7aa57b355a1561a35617a464ae0d39c0cab52c43705e427d6c",
    "summary": "",
    "exports": [
      {
        "name": "createStateSelector",
        "kind": "function",
        "signature": "createStateSelector(doc, { state })",
        "summary": ""
      },
      {
        "name": "STATE_ICONS",
        "kind": "re-export",
        "signature": "STATE_ICONS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/spawner/index",
    "path": "engine/reference/tools/inspector/panels/spawner/index.md",
    "source": "engine/tools/inspector/panels/spawner/index.js",
    "import": "/engine/tools/inspector/panels/spawner/index.js",
    "sourceHash": "41cd4cd0e95300c1be60a2dee72d25e7189e7a0a4534a9df43f81dfde48f83e1",
    "summary": "Deep copy element defaults for a state",
    "exports": [
      {
        "name": "getElementsForState",
        "kind": "function",
        "signature": "getElementsForState(stateId)",
        "summary": "Deep copy element defaults for a state"
      },
      {
        "name": "STATE_ELEMENT_DEFAULTS",
        "kind": "constant",
        "signature": "STATE_ELEMENT_DEFAULTS",
        "summary": "Default element configurations for each state of matter"
      },
      {
        "name": "ELEMENT_COLORS",
        "kind": "re-export",
        "signature": "ELEMENT_COLORS",
        "summary": ""
      },
      {
        "name": "ELEMENT_ICONS",
        "kind": "re-export",
        "signature": "ELEMENT_ICONS",
        "summary": ""
      },
      {
        "name": "EMITTER_ELEMENT_COLORS",
        "kind": "re-export",
        "signature": "EMITTER_ELEMENT_COLORS",
        "summary": ""
      },
      {
        "name": "EMITTER_ELEMENT_ICONS",
        "kind": "re-export",
        "signature": "EMITTER_ELEMENT_ICONS",
        "summary": ""
      },
      {
        "name": "EMITTER_STATE_ICONS",
        "kind": "re-export",
        "signature": "EMITTER_STATE_ICONS",
        "summary": ""
      },
      {
        "name": "STATE_COLORS",
        "kind": "re-export",
        "signature": "STATE_COLORS",
        "summary": ""
      },
      {
        "name": "STATE_ICONS",
        "kind": "re-export",
        "signature": "STATE_ICONS",
        "summary": ""
      },
      {
        "name": "createElementLayers",
        "kind": "re-export",
        "signature": "createElementLayers",
        "summary": ""
      },
      {
        "name": "createEmitterInspectorCard",
        "kind": "re-export",
        "signature": "createEmitterInspectorCard",
        "summary": ""
      },
      {
        "name": "createGyroAimControl",
        "kind": "re-export",
        "signature": "createGyroAimControl",
        "summary": ""
      },
      {
        "name": "createPhysicsProps",
        "kind": "re-export",
        "signature": "createPhysicsProps",
        "summary": ""
      },
      {
        "name": "createStateSelector",
        "kind": "re-export",
        "signature": "createStateSelector",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/spell-configs/SpellBook",
    "path": "engine/reference/tools/inspector/panels/spell-configs/SpellBook.md",
    "source": "engine/tools/inspector/panels/spell-configs/SpellBook.js",
    "import": "/engine/tools/inspector/panels/spell-configs/SpellBook.js",
    "sourceHash": "ffb66f55f69db346762f9f20d1e48c57bfdd7ce629c0c00e2d843820811eff3d",
    "summary": "SpellBook.js — local stub for the external spell book persistence system.",
    "exports": [
      {
        "name": "getSpellBook",
        "kind": "function",
        "signature": "getSpellBook()",
        "summary": ""
      },
      {
        "name": "initSpellBookWithPresets",
        "kind": "function",
        "signature": "initSpellBookWithPresets()",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/spell-configs/SpellConfig",
    "path": "engine/reference/tools/inspector/panels/spell-configs/SpellConfig.md",
    "source": "engine/tools/inspector/panels/spell-configs/SpellConfig.js",
    "import": "/engine/tools/inspector/panels/spell-configs/SpellConfig.js",
    "sourceHash": "5663ec6328259df17fc05d21e3983983c3d8b45fa6d6410fa08865ed8c27c248",
    "summary": "SpellConfig.js — local stub for the external spell configuration system.",
    "exports": [
      {
        "name": "cloneSpellConfig",
        "kind": "function",
        "signature": "cloneSpellConfig(id)",
        "summary": ""
      },
      {
        "name": "rgbToHex",
        "kind": "function",
        "signature": "rgbToHex(r, g, b)",
        "summary": ""
      },
      {
        "name": "hexToRgb",
        "kind": "function",
        "signature": "hexToRgb(hex)",
        "summary": ""
      },
      {
        "name": "SPELL_CATEGORIES",
        "kind": "constant",
        "signature": "SPELL_CATEGORIES",
        "summary": "SpellConfig.js — local stub for the external spell configuration system."
      },
      {
        "name": "SPELL_PRESETS",
        "kind": "constant",
        "signature": "SPELL_PRESETS",
        "summary": ""
      },
      {
        "name": "SPELL_PARAM_SCHEMA",
        "kind": "constant",
        "signature": "SPELL_PARAM_SCHEMA",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/panels/spell-configs/SpellEffectFactory",
    "path": "engine/reference/tools/inspector/panels/spell-configs/SpellEffectFactory.md",
    "source": "engine/tools/inspector/panels/spell-configs/SpellEffectFactory.js",
    "import": "/engine/tools/inspector/panels/spell-configs/SpellEffectFactory.js",
    "sourceHash": "6ceca82449683db2f4bc1e1c71dff86099588ef608ad0a442c5cba7e9dfb1e69",
    "summary": "SpellEffectFactory.js — local stub for the external spell particle effect factory.",
    "exports": [
      {
        "name": "createEmitterConfig",
        "kind": "function",
        "signature": "createEmitterConfig(config = {})",
        "summary": "SpellEffectFactory.js — local stub for the external spell particle effect factory."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/ui/InspectorControls",
    "path": "engine/reference/tools/inspector/ui/InspectorControls.md",
    "source": "engine/tools/inspector/ui/InspectorControls.js",
    "import": "/engine/tools/inspector/ui/InspectorControls.js",
    "sourceHash": "7aed8a1658c51d11bcac50eaa948be7eac2e1bbf12617038bccc3ba954c5a1f3",
    "summary": "Create a themed section box (card-like container)",
    "exports": [
      {
        "name": "createThemedBox",
        "kind": "function",
        "signature": "createThemedBox(doc, title, options = {})",
        "summary": "Create a themed section box (card-like container)"
      },
      {
        "name": "createStatItem",
        "kind": "function",
        "signature": "createStatItem(doc, label, value, color)",
        "summary": "Create a themed stat item (for performance stats, etc.)"
      },
      {
        "name": "createThemedCheckboxRow",
        "kind": "function",
        "signature": "createThemedCheckboxRow(doc, label, checked, onChange)",
        "summary": "Create a themed checkbox row"
      },
      {
        "name": "createThemedSlider",
        "kind": "function",
        "signature": "createThemedSlider(doc, options = {})",
        "summary": "Create a themed slider with label and value display"
      },
      {
        "name": "createSliderTicks",
        "kind": "function",
        "signature": "createSliderTicks(doc, snapPoints)",
        "summary": ""
      },
      {
        "name": "getSnapPoints",
        "kind": "function",
        "signature": "getSnapPoints(min, max, snapPoints, tickCount = 6)",
        "summary": ""
      },
      {
        "name": "snapValueToPoints",
        "kind": "function",
        "signature": "snapValueToPoints(value, snapPoints)",
        "summary": ""
      },
      {
        "name": "formatSliderValue",
        "kind": "function",
        "signature": "formatSliderValue(value, formatter, precision = 2)",
        "summary": ""
      },
      {
        "name": "createPropertySection",
        "kind": "function",
        "signature": "createPropertySection(doc, container, titleText)",
        "summary": ""
      },
      {
        "name": "createCollapsibleSection",
        "kind": "function",
        "signature": "createCollapsibleSection(doc, container, titleText, startCollapsed = false)",
        "summary": ""
      },
      {
        "name": "addSelectRow",
        "kind": "function",
        "signature": "addSelectRow(doc, section, labelText, items, getValue, setValue)",
        "summary": ""
      },
      {
        "name": "addVectorRow",
        "kind": "function",
        "signature": "addVectorRow(doc, section, options = {})",
        "summary": ""
      },
      {
        "name": "getValueAtPath",
        "kind": "function",
        "signature": "getValueAtPath(obj, path)",
        "summary": ""
      },
      {
        "name": "setValueAtPath",
        "kind": "function",
        "signature": "setValueAtPath(obj, path, value)",
        "summary": ""
      },
      {
        "name": "renderInspectorSchema",
        "kind": "function",
        "signature": "renderInspectorSchema(doc, container, schema, ctx = {})",
        "summary": ""
      },
      {
        "name": "addNumberRow",
        "kind": "function",
        "signature": "addNumberRow(doc, section, labelText, getValue, setValue, step)",
        "summary": ""
      },
      {
        "name": "bindNumberInput",
        "kind": "function",
        "signature": "bindNumberInput(input, options = {})",
        "summary": ""
      },
      {
        "name": "bindRangeInput",
        "kind": "function",
        "signature": "bindRangeInput(input, options = {})",
        "summary": ""
      },
      {
        "name": "bindTextInput",
        "kind": "function",
        "signature": "bindTextInput(input, options = {})",
        "summary": ""
      },
      {
        "name": "bindCheckboxInput",
        "kind": "function",
        "signature": "bindCheckboxInput(input, options = {})",
        "summary": ""
      },
      {
        "name": "bindSelectInput",
        "kind": "function",
        "signature": "bindSelectInput(select, options = {})",
        "summary": ""
      },
      {
        "name": "showInspectorTextInputModal",
        "kind": "function",
        "signature": "showInspectorTextInputModal(doc, options = {})",
        "summary": ""
      },
      {
        "name": "showInspectorContextMenu",
        "kind": "function",
        "signature": "showInspectorContextMenu(doc, options = {})",
        "summary": ""
      },
      {
        "name": "addConfigRow",
        "kind": "function",
        "signature": "addConfigRow(doc, container, options)",
        "summary": ""
      },
      {
        "name": "addSliderRow",
        "kind": "function",
        "signature": "addSliderRow(doc, section, labelText, min, max, step, getValue, setValue, options = {},)",
        "summary": ""
      },
      {
        "name": "addCheckboxRow",
        "kind": "function",
        "signature": "addCheckboxRow(doc, section, labelText, getValue, setValue)",
        "summary": ""
      },
      {
        "name": "addTextRow",
        "kind": "function",
        "signature": "addTextRow(doc, section, labelText, getValue, setValue)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/inspector/ui/InspectorTheme",
    "path": "engine/reference/tools/inspector/ui/InspectorTheme.md",
    "source": "engine/tools/inspector/ui/InspectorTheme.js",
    "import": "/engine/tools/inspector/ui/InspectorTheme.js",
    "sourceHash": "242c82b0418282f7234360756735ae2e72d9d3c5a6eb78eb2ffa5231d4624150",
    "summary": "Apply theme styles to an element",
    "exports": [
      {
        "name": "applyThemeStyles",
        "kind": "function",
        "signature": "applyThemeStyles(el, styles)",
        "summary": "Apply theme styles to an element"
      },
      {
        "name": "createThemedButton",
        "kind": "function",
        "signature": "createThemedButton(doc, text, variant = \"primary\", onClick)",
        "summary": "Create a themed button"
      },
      {
        "name": "createThemedInput",
        "kind": "function",
        "signature": "createThemedInput(doc, type = \"text\")",
        "summary": "Create a themed input"
      },
      {
        "name": "createThemedLabel",
        "kind": "function",
        "signature": "createThemedLabel(doc, text)",
        "summary": "Create a themed label"
      },
      {
        "name": "createThemedSectionHeader",
        "kind": "function",
        "signature": "createThemedSectionHeader(doc, text, icon = \"\")",
        "summary": "Create a themed section header"
      },
      {
        "name": "createThemedTab",
        "kind": "function",
        "signature": "createThemedTab(doc, text, isActive = false, onClick)",
        "summary": "Create a themed tab button"
      },
      {
        "name": "createThemedBadge",
        "kind": "function",
        "signature": "createThemedBadge(doc, text, color = \"info\")",
        "summary": "Create a themed badge"
      },
      {
        "name": "INSPECTOR_THEME",
        "kind": "constant",
        "signature": "INSPECTOR_THEME",
        "summary": "InspectorTheme.js - Unified theme system for all inspector panels Provides consistent colors, spacing, and styling across all inspector UI."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/interaction/GrabController",
    "path": "engine/reference/tools/interaction/GrabController.md",
    "source": "engine/tools/interaction/GrabController.js",
    "import": "/engine/tools/interaction/GrabController.js",
    "sourceHash": "7682d405ca3b532d60c2ced337f3d1904d3ef627d7f1df55e2ffe01e9549cf5e",
    "summary": "Hold-to-grab interaction for the engine's picking demo path. This controller intentionally suspends rigid-body simulation while an entity follows a pick ray. Play-mode force grabs remain owned by PhysicsGrab.js. Rotational handles, collision-aware sweeps, constraints, and throw momentum remain explicit gaps rather than being approximated here.",
    "exports": [
      {
        "name": "grabControllerEntityReport",
        "kind": "function",
        "signature": "grabControllerEntityReport(entityId)",
        "summary": ""
      },
      {
        "name": "grabControllerTimingReport",
        "kind": "function",
        "signature": "grabControllerTimingReport(distance, holdMs = 750)",
        "summary": ""
      },
      {
        "name": "grabControllerRayReport",
        "kind": "function",
        "signature": "grabControllerRayReport(ray, distance)",
        "summary": ""
      },
      {
        "name": "createGrabState",
        "kind": "function",
        "signature": "createGrabState()",
        "summary": ""
      },
      {
        "name": "startGrabCandidate",
        "kind": "function",
        "signature": "startGrabCandidate(grabState, ecsWorld, entityId, distance, holdMs = 750)",
        "summary": ""
      },
      {
        "name": "cancelGrabCandidate",
        "kind": "function",
        "signature": "cancelGrabCandidate(grabState)",
        "summary": ""
      },
      {
        "name": "releaseGrabbed",
        "kind": "function",
        "signature": "releaseGrabbed(grabState, ecsWorld)",
        "summary": ""
      },
      {
        "name": "updateGrabbedEntity",
        "kind": "function",
        "signature": "updateGrabbedEntity(grabState, ecsWorld, ray)",
        "summary": "Update a grabbed entity position along an admitted pick ray."
      },
      {
        "name": "clearGrabForEntity",
        "kind": "function",
        "signature": "clearGrabForEntity(grabState, entityId)",
        "summary": "Clear only grab state owned by a deleted entity."
      },
      {
        "name": "GRAB_CONTROLLER_LIMITS",
        "kind": "constant",
        "signature": "GRAB_CONTROLLER_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/picking/RayPicking",
    "path": "engine/reference/tools/picking/RayPicking.md",
    "source": "engine/tools/picking/RayPicking.js",
    "import": "/engine/tools/picking/RayPicking.js",
    "sourceHash": "76d2ac98845591fb3147343a616ba53bc3a03062e3addb4be448ff0e38512581",
    "summary": "RayPicking.js - Unified, admitted camera and room/entity picking wrappers.",
    "exports": [
      {
        "name": "resolvePickFovRadians",
        "kind": "function",
        "signature": "resolvePickFovRadians(options = {}, camera = null, config = null)",
        "summary": ""
      },
      {
        "name": "rayPickerOptionsReport",
        "kind": "function",
        "signature": "rayPickerOptionsReport(options)",
        "summary": ""
      },
      {
        "name": "createRayPicker",
        "kind": "function",
        "signature": "createRayPicker(options = {})",
        "summary": ""
      },
      {
        "name": "getCameraEyeBasisFromState",
        "kind": "function",
        "signature": "getCameraEyeBasisFromState(camera)",
        "summary": ""
      },
      {
        "name": "getPickRayFromState",
        "kind": "function",
        "signature": "getPickRayFromState(canvas, camera, clientX, clientY, options = {})",
        "summary": ""
      },
      {
        "name": "RAY_PICKER_LIMITS",
        "kind": "constant",
        "signature": "RAY_PICKER_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/picking/RoomPicking",
    "path": "engine/reference/tools/picking/RoomPicking.md",
    "source": "engine/tools/picking/RoomPicking.js",
    "import": "/engine/tools/picking/RoomPicking.js",
    "sourceHash": "c0109e3e9f16c29de0b075750162ec99b6f7619585977cfce70ce45fd3270d12",
    "summary": "",
    "exports": [
      {
        "name": "pickingRayReport",
        "kind": "function",
        "signature": "pickingRayReport(ray)",
        "summary": ""
      },
      {
        "name": "roomPickingOptionsReport",
        "kind": "function",
        "signature": "roomPickingOptionsReport(options = {})",
        "summary": ""
      },
      {
        "name": "entityPickingOptionsReport",
        "kind": "function",
        "signature": "entityPickingOptionsReport(options = {})",
        "summary": ""
      },
      {
        "name": "pickRoomSurfaceFromRay",
        "kind": "function",
        "signature": "pickRoomSurfaceFromRay(ray, options = {})",
        "summary": ""
      },
      {
        "name": "pickEntityFromRay",
        "kind": "function",
        "signature": "pickEntityFromRay(ray, ecsWorld, spawnedEntities, options = {})",
        "summary": ""
      },
      {
        "name": "ROOM_PICKING_LIMITS",
        "kind": "constant",
        "signature": "ROOM_PICKING_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/picking/ScreenRayCaster",
    "path": "engine/reference/tools/picking/ScreenRayCaster.md",
    "source": "engine/tools/picking/ScreenRayCaster.js",
    "import": "/engine/tools/picking/ScreenRayCaster.js",
    "sourceHash": "a71e3211eae2c763a0a6c31992faf9e62c312ed71565596adb013f32093b212b",
    "summary": "",
    "exports": [
      {
        "name": "screenPickInputReport",
        "kind": "function",
        "signature": "screenPickInputReport(canvas, clientX, clientY, fovRadians = SCREEN_RAY_LIMITS.defaultFovRadians)",
        "summary": ""
      },
      {
        "name": "screenCameraBasisReport",
        "kind": "function",
        "signature": "screenCameraBasisReport(basis)",
        "summary": ""
      },
      {
        "name": "screenCameraStateReport",
        "kind": "function",
        "signature": "screenCameraStateReport(cameraState)",
        "summary": ""
      },
      {
        "name": "getPickRayForCanvas",
        "kind": "function",
        "signature": "getPickRayForCanvas(canvas, cameraState, clientX, clientY, options = {})",
        "summary": ""
      },
      {
        "name": "SCREEN_RAY_LIMITS",
        "kind": "constant",
        "signature": "SCREEN_RAY_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/rigging/SkinWeightTransfer",
    "path": "engine/reference/tools/rigging/SkinWeightTransfer.md",
    "source": "engine/tools/rigging/SkinWeightTransfer.js",
    "import": "/engine/tools/rigging/SkinWeightTransfer.js",
    "sourceHash": "772d4a423b2d06e5878cd194ccf5c2d22380ef36ec8b66aecb9a82ed83d9a94a",
    "summary": "",
    "exports": [
      {
        "name": "SkinWeightTransferGPU",
        "kind": "class",
        "signature": "class SkinWeightTransferGPU",
        "summary": ""
      },
      {
        "name": "buildSourceSurfaceBVH",
        "kind": "function",
        "signature": "buildSourceSurfaceBVH(sourcePositions, sourceIndices)",
        "summary": ""
      },
      {
        "name": "estimateAlignmentICP",
        "kind": "function",
        "signature": "estimateAlignmentICP(opts)",
        "summary": ""
      },
      {
        "name": "transferSkinWeightsCPU",
        "kind": "function",
        "signature": "transferSkinWeightsCPU(opts)",
        "summary": ""
      },
      {
        "name": "transferSkinWeightsGPU",
        "kind": "function",
        "signature": "async transferSkinWeightsGPU(device, opts, limits = {})",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/scene/SceneSerializer",
    "path": "engine/reference/tools/scene/SceneSerializer.md",
    "source": "engine/tools/scene/SceneSerializer.js",
    "import": "/engine/tools/scene/SceneSerializer.js",
    "sourceHash": "1a49418c5dd01b45aab96dbc6d60326b2ecd1538a6bea5da16712b9df21bb8b5",
    "summary": "Serialize spawned entities to JSON-compatible object.",
    "exports": [
      {
        "name": "serializeScene",
        "kind": "function",
        "signature": "serializeScene(options)",
        "summary": "Serialize spawned entities to JSON-compatible object."
      },
      {
        "name": "exportSceneToJson",
        "kind": "function",
        "signature": "exportSceneToJson(options)",
        "summary": "Export scene to JSON string."
      },
      {
        "name": "downloadScene",
        "kind": "function",
        "signature": "downloadScene(options, filename = \"scene.json\")",
        "summary": "Download scene as JSON file."
      },
      {
        "name": "parseSceneJson",
        "kind": "function",
        "signature": "parseSceneJson(json)",
        "summary": "Parse scene JSON data."
      },
      {
        "name": "loadSceneFromJson",
        "kind": "function",
        "signature": "loadSceneFromJson(options)",
        "summary": "Load scene from JSON and spawn entities."
      },
      {
        "name": "loadSceneFromFile",
        "kind": "function",
        "signature": "async loadSceneFromFile(file, options)",
        "summary": "Load scene from file input."
      },
      {
        "name": "createSceneFileInput",
        "kind": "function",
        "signature": "createSceneFileInput(options)",
        "summary": "Create a file input for loading scenes."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/spawn/GhostPreviewController",
    "path": "engine/reference/tools/spawn/GhostPreviewController.md",
    "source": "engine/tools/spawn/GhostPreviewController.js",
    "import": "/engine/tools/spawn/GhostPreviewController.js",
    "sourceHash": "2a77bafcf1348f5dee4c898c6e09b47f916e8ad66b5a93b32546ff82725b887b",
    "summary": "",
    "exports": [
      {
        "name": "getGhostPreviewInfo",
        "kind": "function",
        "signature": "getGhostPreviewInfo(params)",
        "summary": ""
      },
      {
        "name": "createGhostSelectionState",
        "kind": "function",
        "signature": "createGhostSelectionState()",
        "summary": ""
      },
      {
        "name": "addGhostToSelection",
        "kind": "function",
        "signature": "addGhostToSelection(selection, options)",
        "summary": ""
      },
      {
        "name": "setActiveGhostInSelection",
        "kind": "function",
        "signature": "setActiveGhostInSelection(selection, id)",
        "summary": ""
      },
      {
        "name": "setActiveGhostBasePosition",
        "kind": "function",
        "signature": "setActiveGhostBasePosition(selection, position, type)",
        "summary": ""
      },
      {
        "name": "setActiveGhostOffset",
        "kind": "function",
        "signature": "setActiveGhostOffset(selection, offset)",
        "summary": ""
      },
      {
        "name": "getGhostWorldPosition",
        "kind": "function",
        "signature": "getGhostWorldPosition(ghost)",
        "summary": ""
      },
      {
        "name": "getActiveGhost",
        "kind": "function",
        "signature": "getActiveGhost(selection)",
        "summary": ""
      },
      {
        "name": "getActiveGhostWorldPosition",
        "kind": "function",
        "signature": "getActiveGhostWorldPosition(selection)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/spawn/PhysicsSpawnController",
    "path": "engine/reference/tools/spawn/PhysicsSpawnController.md",
    "source": "engine/tools/spawn/PhysicsSpawnController.js",
    "import": "/engine/tools/spawn/PhysicsSpawnController.js",
    "sourceHash": "7783e663203ee3c3c8d9e16714dffe9e31749da39081fa34ff40a43cf1a4d664",
    "summary": "",
    "exports": [
      {
        "name": "spawnPhysicsObjectAtPosition",
        "kind": "function",
        "signature": "spawnPhysicsObjectAtPosition(ecsWorld, position, type = \"cube\", spawnerProps = null, logger = null,)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/spawn/SpawnManager",
    "path": "engine/reference/tools/spawn/SpawnManager.md",
    "source": "engine/tools/spawn/SpawnManager.js",
    "import": "/engine/tools/spawn/SpawnManager.js",
    "sourceHash": "7e4acba2a20deccfe8c3aae1d47ae47a13ee6889678a66c41dbfac33fd86a09f",
    "summary": "Spawn a physics object with full render resource setup.",
    "exports": [
      {
        "name": "spawnEntity",
        "kind": "function",
        "signature": "spawnEntity(options)",
        "summary": "Spawn a physics object with full render resource setup."
      },
      {
        "name": "spawnParticleEmitter",
        "kind": "function",
        "signature": "spawnParticleEmitter(options)",
        "summary": "Spawn a particle emitter at position."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "tools/spawn/SpawnTypeDefaults",
    "path": "engine/reference/tools/spawn/SpawnTypeDefaults.md",
    "source": "engine/tools/spawn/SpawnTypeDefaults.js",
    "import": "/engine/tools/spawn/SpawnTypeDefaults.js",
    "sourceHash": "3a06f1da521b70bd739569400d3e8a6511c422cc1ada84378163a19062dd98df",
    "summary": "Get all available spawn types.",
    "exports": [
      {
        "name": "getAvailableSpawnTypes",
        "kind": "function",
        "signature": "getAvailableSpawnTypes()",
        "summary": "Get all available spawn types."
      },
      {
        "name": "getSpawnTypesByCategory",
        "kind": "function",
        "signature": "getSpawnTypesByCategory(category)",
        "summary": "Get spawn types by category."
      },
      {
        "name": "getSpawnTypeColor",
        "kind": "function",
        "signature": "getSpawnTypeColor(type)",
        "summary": "Get the default color for a spawn type."
      },
      {
        "name": "getSpawnTypeMeshKey",
        "kind": "function",
        "signature": "getSpawnTypeMeshKey(type)",
        "summary": "Get the mesh type for a spawn type."
      },
      {
        "name": "resolveSpawnAppearance",
        "kind": "function",
        "signature": "resolveSpawnAppearance(type, spawnerProps, meshes)",
        "summary": "Resolve color and mesh for a spawned entity. Uses spawnerProps.color if provided, otherwise falls back to type defaults."
      },
      {
        "name": "createMeshLookup",
        "kind": "function",
        "signature": "createMeshLookup(options)",
        "summary": "Create a mesh lookup object from individual mesh references."
      },
      {
        "name": "SPAWN_TYPE_COLORS",
        "kind": "constant",
        "signature": "SPAWN_TYPE_COLORS",
        "summary": "Default colors for each spawn type"
      },
      {
        "name": "SPAWN_TYPE_MESHES",
        "kind": "constant",
        "signature": "SPAWN_TYPE_MESHES",
        "summary": "Mesh type mapping (which mesh to use for each spawn type)"
      },
      {
        "name": "SPAWN_TYPE_CATEGORIES",
        "kind": "constant",
        "signature": "SPAWN_TYPE_CATEGORIES",
        "summary": "Spawn type categories for UI organization"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "version",
    "path": "engine/reference/version.md",
    "source": "engine/version.js",
    "import": "/engine/version.js",
    "sourceHash": "3d3ffc8640c204acb6380f24bde83b4bd0e41b99fd723d430cb6d2a6a1d0afef",
    "summary": "============================================================ Particle Realms — Canonical Version Source ============================================================ Import this module from anywhere in the engine or editor. The landing page (tests/index.html) also reads these values. ============================================================",
    "exports": [
      {
        "name": "ENGINE_VERSION",
        "kind": "constant",
        "signature": "ENGINE_VERSION",
        "summary": ""
      },
      {
        "name": "EDITOR_VERSION",
        "kind": "constant",
        "signature": "EDITOR_VERSION",
        "summary": ""
      },
      {
        "name": "PLAUNA_VERSION",
        "kind": "constant",
        "signature": "PLAUNA_VERSION",
        "summary": ""
      },
      {
        "name": "AGI_CORE_VERSION",
        "kind": "constant",
        "signature": "AGI_CORE_VERSION",
        "summary": ""
      },
      {
        "name": "BUILD_TAG",
        "kind": "constant",
        "signature": "BUILD_TAG",
        "summary": ""
      },
      {
        "name": "ENGINE_FULL",
        "kind": "constant",
        "signature": "ENGINE_FULL",
        "summary": ""
      },
      {
        "name": "EDITOR_FULL",
        "kind": "constant",
        "signature": "EDITOR_FULL",
        "summary": ""
      },
      {
        "name": "PLAUNA_FULL",
        "kind": "constant",
        "signature": "PLAUNA_FULL",
        "summary": ""
      },
      {
        "name": "AGI_CORE_FULL",
        "kind": "constant",
        "signature": "AGI_CORE_FULL",
        "summary": ""
      },
      {
        "name": "VERSION_BANNER",
        "kind": "constant",
        "signature": "VERSION_BANNER",
        "summary": ""
      },
      {
        "name": "ENGINE_STARTED",
        "kind": "constant",
        "signature": "ENGINE_STARTED",
        "summary": ""
      },
      {
        "name": "EDITOR_STARTED",
        "kind": "constant",
        "signature": "EDITOR_STARTED",
        "summary": ""
      },
      {
        "name": "STATS",
        "kind": "constant",
        "signature": "STATS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/ChunkCullCompute",
    "path": "engine/reference/voxel/ChunkCullCompute.md",
    "source": "engine/voxel/ChunkCullCompute.js",
    "import": "/engine/voxel/ChunkCullCompute.js",
    "sourceHash": "12cecef546d51ea02e7fe797e966f87071b0c6c7167d81220bf9d1e1ed09e32d",
    "summary": "",
    "exports": [
      {
        "name": "ChunkCullCompute",
        "kind": "class",
        "signature": "class ChunkCullCompute",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/ChunkRegistry",
    "path": "engine/reference/voxel/ChunkRegistry.md",
    "source": "engine/voxel/ChunkRegistry.js",
    "import": "/engine/voxel/ChunkRegistry.js",
    "sourceHash": "2afee90aecba37b4ad1bdb48e945da83d94ee4109b9d8b5efa4caa8b78ee94ad",
    "summary": "ChunkRegistry.js - Central Chunk Existence and Integrity Registry Solves: 1. Duplicate generation - fast O(1) existence check before generating 2. Corruption detection - content hash verification 3. Race conditions - atomic claim/release for chunk operations 4. Missing chunks - tracks all known chunks with metadata Uses: - In-memory Map for fast lookups - Content hashing (xxHash) for integrity verification - Temp file staging for atomic saves - Persistent index file for cross-session awareness",
    "exports": [
      {
        "name": "BloomFilter",
        "kind": "class",
        "signature": "class BloomFilter",
        "summary": "Bloom Filter for ultra-fast chunk existence checks - O(1) time for add/check - No false negatives (if says \"no\", definitely doesn't exist) - Small false positive rate (~0.8%) - Uses ~2% memory of equivalent Set"
      },
      {
        "name": "ChunkRegistry",
        "kind": "class",
        "signature": "class ChunkRegistry",
        "summary": ""
      },
      {
        "name": "xxHash32",
        "kind": "function",
        "signature": "xxHash32(data, seed = 0)",
        "summary": "Fast 32-bit hash for chunk content verification"
      },
      {
        "name": "hashVoxels",
        "kind": "function",
        "signature": "hashVoxels(voxels)",
        "summary": "Hash voxel data for quick integrity check Uses sampling for very large arrays (faster)"
      },
      {
        "name": "chunkRegistryBloomCoordinateHash",
        "kind": "function",
        "signature": "chunkRegistryBloomCoordinateHash(cx, cy, cz)",
        "summary": ""
      },
      {
        "name": "encodeMorton3D",
        "kind": "function",
        "signature": "encodeMorton3D(x, y, z)",
        "summary": "Encode 3D chunk coordinates to Morton code (Z-order) Interleaves bits for better cache locality in spatial queries"
      },
      {
        "name": "decodeMorton3D",
        "kind": "function",
        "signature": "decodeMorton3D(morton)",
        "summary": "Decode Morton code back to 3D coordinates"
      },
      {
        "name": "appendTrailer",
        "kind": "function",
        "signature": "appendTrailer(data)",
        "summary": "Append trailer canary to data for torn write detection"
      },
      {
        "name": "verifyTrailer",
        "kind": "function",
        "signature": "verifyTrailer(data)",
        "summary": "Verify trailer canary is present (write was complete)"
      },
      {
        "name": "getChunkRegistry",
        "kind": "function",
        "signature": "getChunkRegistry()",
        "summary": "Get the global ChunkRegistry instance"
      },
      {
        "name": "initChunkRegistry",
        "kind": "function",
        "signature": "async initChunkRegistry(backend)",
        "summary": "Initialize the global registry with a storage backend"
      },
      {
        "name": "ChunkStatus",
        "kind": "constant",
        "signature": "ChunkStatus",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/ChunkSorter",
    "path": "engine/reference/voxel/ChunkSorter.md",
    "source": "engine/voxel/ChunkSorter.js",
    "import": "/engine/voxel/ChunkSorter.js",
    "sourceHash": "4b217062213e6ccf27c968c6101062ba830ba7a4c8ea9c668e663074c8375fb0",
    "summary": "ChunkSorter - Manages chunk draw order and visibility",
    "exports": [
      {
        "name": "ChunkSorter",
        "kind": "class",
        "signature": "class ChunkSorter",
        "summary": "ChunkSorter - Manages chunk draw order and visibility"
      },
      {
        "name": "getCameraForward",
        "kind": "function",
        "signature": "getCameraForward(viewMatrix)",
        "summary": "Utility function to extract camera forward from view matrix"
      },
      {
        "name": "getCameraPosition",
        "kind": "function",
        "signature": "getCameraPosition(invViewMatrix)",
        "summary": "Utility function to extract camera position from inverse view matrix"
      },
      {
        "name": "FACE_NAMES",
        "kind": "constant",
        "signature": "FACE_NAMES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/ColoredLighting",
    "path": "engine/reference/voxel/ColoredLighting.md",
    "source": "engine/voxel/ColoredLighting.js",
    "import": "/engine/voxel/ColoredLighting.js",
    "sourceHash": "f76a4bb2a60703e075b52cfc6a846f329bc1fa1c18db87bb7597f26a3ec0c14d",
    "summary": "Pack RGB + Sky into a 16-bit value",
    "exports": [
      {
        "name": "ColoredLightingSystem",
        "kind": "class",
        "signature": "class ColoredLightingSystem",
        "summary": ""
      },
      {
        "name": "packLight",
        "kind": "function",
        "signature": "packLight(r, g, b, sky = 0)",
        "summary": "Pack RGB + Sky into a 16-bit value"
      },
      {
        "name": "unpackLight",
        "kind": "function",
        "signature": "unpackLight(packed)",
        "summary": "Unpack light into components"
      },
      {
        "name": "getChannel",
        "kind": "function",
        "signature": "getChannel(packed, shift)",
        "summary": "Get single channel from packed light"
      },
      {
        "name": "lightMax",
        "kind": "function",
        "signature": "lightMax(a, b)",
        "summary": "Component-wise maximum of two light values"
      },
      {
        "name": "lightDecrement",
        "kind": "function",
        "signature": "lightDecrement(packed, amount = 1)",
        "summary": "Component-wise decrement with saturation (no underflow)"
      },
      {
        "name": "hasLight",
        "kind": "function",
        "signature": "hasLight(packed)",
        "summary": "Check if light value is non-zero"
      },
      {
        "name": "lightToRGB",
        "kind": "function",
        "signature": "lightToRGB(packed, skyBrightness = 1.0)",
        "summary": "Convert light to normalized RGB (0-1 range)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/DirtyChunkManager",
    "path": "engine/reference/voxel/DirtyChunkManager.md",
    "source": "engine/voxel/DirtyChunkManager.js",
    "import": "/engine/voxel/DirtyChunkManager.js",
    "sourceHash": "ebf19748ed94ccdde42e099c6822d3f5935254432a88c15d89e19f6804f71a66",
    "summary": "Represents a dirty chunk entry",
    "exports": [
      {
        "name": "DirtyChunkEntry",
        "kind": "class",
        "signature": "class DirtyChunkEntry",
        "summary": "Represents a dirty chunk entry"
      },
      {
        "name": "DirtyChunkManager",
        "kind": "class",
        "signature": "class DirtyChunkManager",
        "summary": ""
      },
      {
        "name": "GeometryDirtyTracker",
        "kind": "class",
        "signature": "class GeometryDirtyTracker extends DirtyChunkManager",
        "summary": "Geometry-specific dirty tracker (for mesh rebuilds)"
      },
      {
        "name": "LightingDirtyTracker",
        "kind": "class",
        "signature": "class LightingDirtyTracker extends DirtyChunkManager",
        "summary": "Lighting-specific dirty tracker (for DDGI updates)"
      },
      {
        "name": "parseChunkKey",
        "kind": "function",
        "signature": "parseChunkKey(key)",
        "summary": "Parse chunk key to coordinates"
      },
      {
        "name": "makeChunkKey",
        "kind": "function",
        "signature": "makeChunkKey(x, y, z)",
        "summary": "Create chunk key from coordinates"
      },
      {
        "name": "MAX_DIRTY_PER_FRAME",
        "kind": "constant",
        "signature": "MAX_DIRTY_PER_FRAME",
        "summary": "Maximum chunks that can be processed per frame"
      },
      {
        "name": "ChunkState",
        "kind": "constant",
        "signature": "ChunkState",
        "summary": "Chunk states"
      },
      {
        "name": "DIRTY_FLAGS",
        "kind": "re-export",
        "signature": "DIRTY_FLAGS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/FaceListMesher",
    "path": "engine/reference/voxel/FaceListMesher.md",
    "source": "engine/voxel/FaceListMesher.js",
    "import": "/engine/voxel/FaceListMesher.js",
    "sourceHash": "b74ef9652d47c1b5956fd3268375413a62e963d95acb6ed28e1198c55001db43",
    "summary": "",
    "exports": [
      {
        "name": "GPUBufferPool",
        "kind": "class",
        "signature": "class GPUBufferPool",
        "summary": ""
      },
      {
        "name": "FaceListMesher",
        "kind": "class",
        "signature": "class FaceListMesher",
        "summary": ""
      },
      {
        "name": "FACE_PULL_SHADER_BASE",
        "kind": "constant",
        "signature": "FACE_PULL_SHADER_BASE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/FacePool",
    "path": "engine/reference/voxel/FacePool.md",
    "source": "engine/voxel/FacePool.js",
    "import": "/engine/voxel/FacePool.js",
    "sourceHash": "bbcbaca27e24d366cc738cb7985f454438bc82c47bd817bf1b05ee38fd7eafd9",
    "summary": "",
    "exports": [
      {
        "name": "FacePool",
        "kind": "class",
        "signature": "class FacePool",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/MC33Tables",
    "path": "engine/reference/voxel/MC33Tables.md",
    "source": "engine/voxel/MC33Tables.js",
    "import": "/engine/voxel/MC33Tables.js",
    "sourceHash": "ca9a9380ff70ca9929549985939e51c4002f741c6ef25c7fc64c1b5d6ef25c32",
    "summary": "Evaluate the asymptotic decider for a face Given 4 corner values of a face (v0, v1, v2, v3 in order around face), determine how the isosurface crosses the face. For a face to be ambiguous, corners must alternate in sign: (v0 > 0, v1 < 0, v2 > 0, v3 < 0) or vice versa The asymptotic decider computes: A = v0 + v2 (diagonal sum) B = v1 + v3 (other diagonal sum) If A * (v0 - v1) > 0: connect (v0,v2) pair Else: connect (v1,v3) pair Equivalently, compute Q = v0*v2 - v1*v3 Q > 0: separating, Q < 0: connecting",
    "exports": [
      {
        "name": "asymptoticDecider",
        "kind": "function",
        "signature": "asymptoticDecider(v0, v1, v2, v3)",
        "summary": "Evaluate the asymptotic decider for a face Given 4 corner values of a face (v0, v1, v2, v3 in order around face), determine how the isosurface crosses the face. For a face to be ambiguous, corners must alternate in sign: (v0 > 0, v1 < 0, v2 > 0, v3 < 0) or vice versa The asymptotic decider computes: A = v0 + v2 (diagonal sum) B = v1 + v3 (other diagonal sum) If A * (v0 - v1) > 0: connect (v0,v2) pair Else: connect (v1,v3) pair Equivalently, compute Q = v0*v2 - v1*v3 Q > 0: separating, Q < 0: connecting"
      },
      {
        "name": "isFaceAmbiguous",
        "kind": "function",
        "signature": "isFaceAmbiguous(cubeIndex, faceIndex)",
        "summary": "Check if a face has ambiguity given cube configuration"
      },
      {
        "name": "getAmbiguousFaces",
        "kind": "function",
        "signature": "getAmbiguousFaces(cubeIndex)",
        "summary": "Get all ambiguous faces for a cube configuration"
      },
      {
        "name": "interiorTest",
        "kind": "function",
        "signature": "interiorTest(values)",
        "summary": "Test for interior ambiguity in Case 13 configurations Case 13 has a potential tunnel through the cube center The interior test computes the bilinear patch at cube center and checks if it separates or connects the corner groups"
      },
      {
        "name": "getMC33Subcase",
        "kind": "function",
        "signature": "getMC33Subcase(cubeIndex, values)",
        "summary": "Compute the MC33 subcase for a given cube configuration"
      },
      {
        "name": "generateWGSLTables",
        "kind": "function",
        "signature": "generateWGSLTables()",
        "summary": "Generate WGSL constant arrays for MC33 tables For use in compute shaders"
      },
      {
        "name": "rotateEdges",
        "kind": "function",
        "signature": "rotateEdges(edges, rotation)",
        "summary": "Apply rotation to edge indices"
      },
      {
        "name": "MC33_CASE",
        "kind": "constant",
        "signature": "MC33_CASE",
        "summary": "MC33 base case for each of the 256 cube configurations Standard MC has 15 cases, MC33 extends to 33 by splitting ambiguous ones Cases 0-14: Standard unambiguous cases Cases with face ambiguity: 3, 4, 6, 7, 10, 12, 13 Cases with interior ambiguity: 4, 6, 7, 10, 12, 13"
      },
      {
        "name": "MC33_SUBCASE_COUNT",
        "kind": "constant",
        "signature": "MC33_SUBCASE_COUNT",
        "summary": "Number of subcases for each MC33 case Most cases have 1 subcase (no ambiguity) Ambiguous cases have 2-6 subcases depending on face/interior tests"
      },
      {
        "name": "CUBE_FACES",
        "kind": "constant",
        "signature": "CUBE_FACES",
        "summary": "Face indices for the 6 cube faces Each face defined by 4 corner indices in CCW order (from outside)"
      },
      {
        "name": "AMBIGUOUS_FACES",
        "kind": "constant",
        "signature": "AMBIGUOUS_FACES",
        "summary": "For each ambiguous case, which faces need to be tested Bit flags: bit 0 = face 0, bit 1 = face 1, etc."
      },
      {
        "name": "SUBCASE_LOOKUP",
        "kind": "constant",
        "signature": "SUBCASE_LOOKUP",
        "summary": "Subcase lookup for each ambiguous case Index by face test results (bit flags)"
      },
      {
        "name": "MC33_TRI_TABLE",
        "kind": "constant",
        "signature": "MC33_TRI_TABLE",
        "summary": "Triangle configurations for MC33 subcases For ambiguous cases, provides alternate triangulations Format: [case][subcase] = [edge indices for triangles, -1 terminated] Note: This is a subset of the full 1296-entry table Full table would be generated programmatically or loaded from binary"
      },
      {
        "name": "CANONICAL_ROTATION",
        "kind": "constant",
        "signature": "CANONICAL_ROTATION",
        "summary": "Rotation lookup to map arbitrary configs to canonical form MC33 uses 48 symmetries (24 rotations × 2 reflections) This reduces the 256 configurations to ~23 canonical cases Each entry: [canonical_index, rotation_index]"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/MarchingCubesMesher",
    "path": "engine/reference/voxel/MarchingCubesMesher.md",
    "source": "engine/voxel/MarchingCubesMesher.js",
    "import": "/engine/voxel/MarchingCubesMesher.js",
    "sourceHash": "8dd9b725dff10314eb53d3d00425411439971114f3e90d9d42a256ed3817177e",
    "summary": "MarchingCubesMesher.js - Smooth Voxel Terrain via Isosurface Extraction INTEGRATION: - GPU compute shader for parallel cube processing - Uses VoxelMeshCompute for output buffer management - Integrates with ChunkManager for chunk-based meshing Implements the Marching Cubes algorithm for smooth terrain: - Extracts isosurface from 3D density field - Produces smooth, organic terrain instead of blocky voxels - Supports interpolated vertex positions for smooth gradients - Generates per-vertex normals for proper lighting - fBM SDF terrain (Inigo Quilez style) for native smooth noise MC33 Extension (Chernyaev 1995): - Resolves topological ambiguities for watertight meshes - Uses asymptotic decider for face ambiguity resolution - Interior tests for tunnel cases (Case 13) - 33 distinct cases vs standard 15 Based on: - Lorensen & Cline's Marching Cubes (1987) - Chernyaev's Marching Cubes 33 (1995) - Inigo Quilez fBM SDF: https://iquilezles.org/articles/fbmsdf/ Usage: const mesh = meshChunkSmooth(chunk, getDensity); const meshMC33 = meshChunkMC33(chunk, getDensity); // Watertight // Or with SDF: const density = sdfTerrain(x, y, z, config);",
    "exports": [
      {
        "name": "MarchingCubesMesher",
        "kind": "class",
        "signature": "class MarchingCubesMesher",
        "summary": "Marching Cubes Mesher class for integration with existing systems"
      },
      {
        "name": "meshChunkSmooth",
        "kind": "function",
        "signature": "meshChunkSmooth(chunk, getDensity, options = {})",
        "summary": "Mesh a chunk using Marching Cubes for smooth terrain"
      },
      {
        "name": "meshChunkMC33",
        "kind": "function",
        "signature": "meshChunkMC33(chunk, getDensity, options = {})",
        "summary": "Mesh a chunk using MC33 for watertight meshes Resolves topological ambiguities that cause holes in standard MC"
      },
      {
        "name": "resolveFaceAmbiguity",
        "kind": "function",
        "signature": "resolveFaceAmbiguity(cubeIndex, densities, faceIndex)",
        "summary": "Test if a face is ambiguous and resolve using asymptotic decider Exported for use in GPU shader validation"
      },
      {
        "name": "smin",
        "kind": "function",
        "signature": "smin(a, b, k = 0.1)",
        "summary": "Smooth minimum (polynomial) - blends two distances smoothly"
      },
      {
        "name": "fbm3D",
        "kind": "function",
        "signature": "fbm3D(x, y, z, config = {})",
        "summary": "fBM (Fractal Brownian Motion) noise"
      },
      {
        "name": "sdfTerrain",
        "kind": "function",
        "signature": "sdfTerrain(x, y, z, config = {})",
        "summary": "SDF Terrain density function (Inigo Quilez style) Returns negative inside terrain, positive outside"
      },
      {
        "name": "sdfSphere",
        "kind": "function",
        "signature": "sdfSphere(x, y, z, cx, cy, cz, radius)",
        "summary": "SDF Sphere primitive"
      },
      {
        "name": "sdfBox",
        "kind": "function",
        "signature": "sdfBox(x, y, z, cx, cy, cz, sx, sy, sz)",
        "summary": "SDF Box primitive"
      },
      {
        "name": "sdfUnion",
        "kind": "function",
        "signature": "sdfUnion(d1, d2)",
        "summary": "Union of two SDFs"
      },
      {
        "name": "sdfSmoothUnion",
        "kind": "function",
        "signature": "sdfSmoothUnion(d1, d2, k = 0.1)",
        "summary": "Smooth union of two SDFs"
      },
      {
        "name": "sdfSubtract",
        "kind": "function",
        "signature": "sdfSubtract(d1, d2)",
        "summary": "Subtraction of SDFs (d2 from d1)"
      },
      {
        "name": "sdfIntersect",
        "kind": "function",
        "signature": "sdfIntersect(d1, d2)",
        "summary": "Intersection of SDFs"
      },
      {
        "name": "generateTransitionCell",
        "kind": "function",
        "signature": "generateTransitionCell(densityHigh, densityLow, face, cellSize, isolevel = 0)",
        "summary": "Generate transition cell mesh for LOD boundary"
      },
      {
        "name": "needsTransitionCell",
        "kind": "function",
        "signature": "needsTransitionCell(chunkLOD, neighborLOD)",
        "summary": "Check if chunk needs transition cells on a face"
      },
      {
        "name": "getTransitionRatio",
        "kind": "function",
        "signature": "getTransitionRatio(chunkLOD, neighborLOD)",
        "summary": "Get transition cell size ratio"
      },
      {
        "name": "dualContourVertex",
        "kind": "function",
        "signature": "dualContourVertex(density, gradients, isolevel = 0)",
        "summary": "Dual Contouring vertex placement using QEF (Quadric Error Function) Unlike Marching Cubes, places vertex at optimal position inside cell"
      },
      {
        "name": "dualContourCell",
        "kind": "function",
        "signature": "dualContourCell(density, isolevel = 0)",
        "summary": "Check if cell contains surface using Dual Contouring"
      },
      {
        "name": "calculateWorldSpaceAO",
        "kind": "function",
        "signature": "calculateWorldSpaceAO(sampleDensity, wx, wy, wz, radius = 2, samples = 8)",
        "summary": "Calculate world-space AO from density field"
      },
      {
        "name": "calculateGradientAO",
        "kind": "function",
        "signature": "calculateGradientAO(sampleDensity, wx, wy, wz)",
        "summary": "Calculate AO from density gradient (faster, smoother)"
      },
      {
        "name": "MARCHING_CUBES_MATERIAL_PCG_HASH_WGSL",
        "kind": "constant",
        "signature": "MARCHING_CUBES_MATERIAL_PCG_HASH_WGSL",
        "summary": ""
      },
      {
        "name": "MESH_MODE",
        "kind": "constant",
        "signature": "MESH_MODE",
        "summary": ""
      },
      {
        "name": "TRIPLANAR_SHADER",
        "kind": "constant",
        "signature": "TRIPLANAR_SHADER",
        "summary": ""
      },
      {
        "name": "MATERIAL_BLEND_SHADER",
        "kind": "constant",
        "signature": "MATERIAL_BLEND_SHADER",
        "summary": ""
      },
      {
        "name": "SDF_RAYMARCH_SHADER",
        "kind": "constant",
        "signature": "SDF_RAYMARCH_SHADER",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/MaterialSchema",
    "path": "engine/reference/voxel/MaterialSchema.md",
    "source": "engine/voxel/MaterialSchema.js",
    "import": "/engine/voxel/MaterialSchema.js",
    "sourceHash": "6529046c60f728ab681b8bc293442a633b5243ef5152ab153579783f1017dc2a",
    "summary": "Get material ID by name (safe lookup)",
    "exports": [
      {
        "name": "getMaterialId",
        "kind": "function",
        "signature": "getMaterialId(name)",
        "summary": "Get material ID by name (safe lookup)"
      },
      {
        "name": "getMaterialName",
        "kind": "function",
        "signature": "getMaterialName(id)",
        "summary": "Get material name by ID (safe lookup)"
      },
      {
        "name": "getMaterialColor",
        "kind": "function",
        "signature": "getMaterialColor(id)",
        "summary": "Get material color by ID"
      },
      {
        "name": "getMaterialProperties",
        "kind": "function",
        "signature": "getMaterialProperties(id)",
        "summary": "Get material properties by ID"
      },
      {
        "name": "isTransparent",
        "kind": "function",
        "signature": "isTransparent(id)",
        "summary": "Check if material is transparent"
      },
      {
        "name": "isSolid",
        "kind": "function",
        "signature": "isSolid(id)",
        "summary": "Check if material is solid"
      },
      {
        "name": "isFluid",
        "kind": "function",
        "signature": "isFluid(id)",
        "summary": "Check if material is fluid"
      },
      {
        "name": "isEmissive",
        "kind": "function",
        "signature": "isEmissive(id)",
        "summary": "Check if material is emissive"
      },
      {
        "name": "validateSchema",
        "kind": "function",
        "signature": "validateSchema()",
        "summary": "Validate schema integrity"
      },
      {
        "name": "SCHEMA_VERSION",
        "kind": "constant",
        "signature": "SCHEMA_VERSION",
        "summary": ""
      },
      {
        "name": "MATERIAL_DEFINITIONS",
        "kind": "constant",
        "signature": "MATERIAL_DEFINITIONS",
        "summary": "Material definition schema Each material has: - name: Unique identifier (used as enum key) - color: RGBA array [0-255, 0-255, 0-255, 0-255] - colorNormalized: RGBA array [0-1, 0-1, 0-1, 0-1] (auto-generated) - properties: Material behavior flags"
      },
      {
        "name": "MATERIAL",
        "kind": "constant",
        "signature": "MATERIAL",
        "summary": ""
      },
      {
        "name": "MATERIAL_COLORS",
        "kind": "constant",
        "signature": "MATERIAL_COLORS",
        "summary": ""
      },
      {
        "name": "MATERIAL_PROPERTIES",
        "kind": "constant",
        "signature": "MATERIAL_PROPERTIES",
        "summary": ""
      },
      {
        "name": "MATERIAL_NAMES",
        "kind": "constant",
        "signature": "MATERIAL_NAMES",
        "summary": ""
      },
      {
        "name": "MATERIAL_IDS",
        "kind": "constant",
        "signature": "MATERIAL_IDS",
        "summary": ""
      },
      {
        "name": "MATERIAL_COUNT",
        "kind": "constant",
        "signature": "MATERIAL_COUNT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/MeshletCullCompute",
    "path": "engine/reference/voxel/MeshletCullCompute.md",
    "source": "engine/voxel/MeshletCullCompute.js",
    "import": "/engine/voxel/MeshletCullCompute.js",
    "sourceHash": "bca4362274f8b522c3e188a9603efcdcf58468003589cf9cb5cbae58117ac489",
    "summary": "",
    "exports": [
      {
        "name": "MeshletCullCompute",
        "kind": "class",
        "signature": "class MeshletCullCompute",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/NeighborCache",
    "path": "engine/reference/voxel/NeighborCache.md",
    "source": "engine/voxel/NeighborCache.js",
    "import": "/engine/voxel/NeighborCache.js",
    "sourceHash": "94d1ed668f47aaf4d6252e84860a5951ed6a8875812a2648b1c053e10b5787f5",
    "summary": "ChunkNeighborCache - Per-chunk neighbor references",
    "exports": [
      {
        "name": "ChunkNeighborCache",
        "kind": "class",
        "signature": "class ChunkNeighborCache",
        "summary": "ChunkNeighborCache - Per-chunk neighbor references"
      },
      {
        "name": "NeighborCacheManager",
        "kind": "class",
        "signature": "class NeighborCacheManager",
        "summary": "NeighborCacheManager - Manages neighbor caches for all chunks"
      },
      {
        "name": "NEIGHBOR_DIR",
        "kind": "constant",
        "signature": "NEIGHBOR_DIR",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/ProceduralMaterialBaker",
    "path": "engine/reference/voxel/ProceduralMaterialBaker.md",
    "source": "engine/voxel/ProceduralMaterialBaker.js",
    "import": "/engine/voxel/ProceduralMaterialBaker.js",
    "sourceHash": "cc4ac75476e0c1729beb4d536105dc95b7a88f68e6058117727ab32309d378d4",
    "summary": "",
    "exports": [
      {
        "name": "ProceduralMaterialBaker",
        "kind": "class",
        "signature": "class ProceduralMaterialBaker",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/SubChunkMeshCompute",
    "path": "engine/reference/voxel/SubChunkMeshCompute.md",
    "source": "engine/voxel/SubChunkMeshCompute.js",
    "import": "/engine/voxel/SubChunkMeshCompute.js",
    "sourceHash": "04162de95f7205f121932c0f7dc21362b5988af1756fe0cdac682ba2d0280ee7",
    "summary": "",
    "exports": [
      {
        "name": "SubChunkMeshCompute",
        "kind": "class",
        "signature": "class SubChunkMeshCompute",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/TextureArrayManager",
    "path": "engine/reference/voxel/TextureArrayManager.md",
    "source": "engine/voxel/TextureArrayManager.js",
    "import": "/engine/voxel/TextureArrayManager.js",
    "sourceHash": "44ae79f3601c0fe314f3ef53ae3d7a91a340844f48a1213afaa481929fb4bc3a",
    "summary": "TextureArrayManager.js - Texture Array for Voxel Materials Uses a 2D texture array instead of a texture atlas for voxel materials. Benefits over atlas: - No UV calculation needed (just use material index) - Proper mipmapping per texture (no bleeding) - Cleaner shader code - Easy to add/remove materials Usage in shader: @group(0) @binding(X) var materials: texture_2d_array<f32>; let color = textureSample(materials, sampler, uv, materialIndex);",
    "exports": [
      {
        "name": "TextureArrayManager",
        "kind": "class",
        "signature": "class TextureArrayManager",
        "summary": "TextureArrayManager - Manages a texture array for voxel materials"
      },
      {
        "name": "textureArrayMaterialNoiseHash",
        "kind": "function",
        "signature": "textureArrayMaterialNoiseHash(px, py, materialIndex)",
        "summary": ""
      },
      {
        "name": "textureArrayMaterialNoiseDelta",
        "kind": "function",
        "signature": "textureArrayMaterialNoiseDelta(px, py, materialIndex, amplitude = 0.1)",
        "summary": ""
      },
      {
        "name": "TEXTURE_ARRAY_WGSL",
        "kind": "constant",
        "signature": "TEXTURE_ARRAY_WGSL",
        "summary": ""
      },
      {
        "name": "TEXTURE_ARRAY_WGSL_GROUP2",
        "kind": "constant",
        "signature": "TEXTURE_ARRAY_WGSL_GROUP2",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/VoxelAO",
    "path": "engine/reference/voxel/VoxelAO.md",
    "source": "engine/voxel/VoxelAO.js",
    "import": "/engine/voxel/VoxelAO.js",
    "sourceHash": "9c9b581a3d273eeda4840470ee0f1cf79a6e1be056532af40566efd8e7052b02",
    "summary": "VoxelAOCalculator - GPU compute shader for AO calculation",
    "exports": [
      {
        "name": "VoxelAOCalculator",
        "kind": "class",
        "signature": "class VoxelAOCalculator",
        "summary": "VoxelAOCalculator - GPU compute shader for AO calculation"
      },
      {
        "name": "calculateVertexAO",
        "kind": "function",
        "signature": "calculateVertexAO(isOpaque, x, y, z, face, corner)",
        "summary": "Calculate vertex AO for a single corner"
      },
      {
        "name": "calculateFaceAO",
        "kind": "function",
        "signature": "calculateFaceAO(isOpaque, x, y, z, face)",
        "summary": "Calculate all 4 corner AO values for a face"
      },
      {
        "name": "packAO",
        "kind": "function",
        "signature": "packAO(ao)",
        "summary": "Pack 4 AO values into a single u32 (8 bits each)"
      },
      {
        "name": "unpackAO",
        "kind": "function",
        "signature": "unpackAO(packed)",
        "summary": "Unpack u32 to 4 AO values"
      },
      {
        "name": "shouldFlipQuad",
        "kind": "function",
        "signature": "shouldFlipQuad(ao)",
        "summary": "Determine if face vertices should be flipped for better AO interpolation Fixes the \"anisotropy\" problem where diagonal looks different based on quad orientation"
      },
      {
        "name": "VOXEL_AO_WGSL",
        "kind": "constant",
        "signature": "VOXEL_AO_WGSL",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/VoxelConstants",
    "path": "engine/reference/voxel/VoxelConstants.md",
    "source": "engine/voxel/VoxelConstants.js",
    "import": "/engine/voxel/VoxelConstants.js",
    "sourceHash": "2a82e872a45ef5cb721a11d701ed8f4316ac6e93c4e16519f537f6bf7d7fd1e2",
    "summary": "Get the depth tier configuration for a given Y coordinate",
    "exports": [
      {
        "name": "getDepthTier",
        "kind": "function",
        "signature": "getDepthTier(y)",
        "summary": "Get the depth tier configuration for a given Y coordinate"
      },
      {
        "name": "getDepthTierBlend",
        "kind": "function",
        "signature": "getDepthTierBlend(y)",
        "summary": "Interpolate between depth tiers for smooth transitions"
      },
      {
        "name": "CHUNK_SIZE",
        "kind": "constant",
        "signature": "CHUNK_SIZE",
        "summary": ""
      },
      {
        "name": "CHUNK_SIZE_SQ",
        "kind": "constant",
        "signature": "CHUNK_SIZE_SQ",
        "summary": ""
      },
      {
        "name": "CHUNK_VOLUME",
        "kind": "constant",
        "signature": "CHUNK_VOLUME",
        "summary": ""
      },
      {
        "name": "DEPTH_TIERS",
        "kind": "constant",
        "signature": "DEPTH_TIERS",
        "summary": "Depth tiers define how terrain generation changes with depth. Each tier has different noise parameters, materials, and features."
      },
      {
        "name": "FACE_NORMALS",
        "kind": "constant",
        "signature": "FACE_NORMALS",
        "summary": ""
      },
      {
        "name": "FACE_NAMES",
        "kind": "constant",
        "signature": "FACE_NAMES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/VoxelMeshCompute",
    "path": "engine/reference/voxel/VoxelMeshCompute.md",
    "source": "engine/voxel/VoxelMeshCompute.js",
    "import": "/engine/voxel/VoxelMeshCompute.js",
    "sourceHash": "fbb5fa952d6cc8d5f2ec369caef05b48df1132bee7d8b5e5bda8efffffb5a820",
    "summary": "",
    "exports": [
      {
        "name": "VoxelMeshCompute",
        "kind": "class",
        "signature": "class VoxelMeshCompute",
        "summary": ""
      },
      {
        "name": "COMPACT_VERTEX_SHADER",
        "kind": "constant",
        "signature": "COMPACT_VERTEX_SHADER",
        "summary": ""
      },
      {
        "name": "COMPACT_VERTEX_LAYOUT",
        "kind": "constant",
        "signature": "COMPACT_VERTEX_LAYOUT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/VoxelMesher",
    "path": "engine/reference/voxel/VoxelMesher.md",
    "source": "engine/voxel/VoxelMesher.js",
    "import": "/engine/voxel/VoxelMesher.js",
    "sourceHash": "aa11895ee1323c90446a747c12998fa8c130c1b5d3ecfdb6913a8dcf5c980cea",
    "summary": "Check if a material is transparent",
    "exports": [
      {
        "name": "isTransparentMaterial",
        "kind": "function",
        "signature": "isTransparentMaterial(material)",
        "summary": "Check if a material is transparent"
      },
      {
        "name": "isChunkFaceSolid",
        "kind": "function",
        "signature": "isChunkFaceSolid(chunk, face)",
        "summary": "Check if a chunk's boundary face is fully solid (all voxels on that face are non-air) Used to skip meshing faces that are completely hidden by a solid neighbor"
      },
      {
        "name": "getChunkOcclusionMask",
        "kind": "function",
        "signature": "getChunkOcclusionMask(getNeighborChunk, cx, cy, cz)",
        "summary": "Get occlusion mask for a chunk based on neighbor chunk boundaries Returns a bitmask where bit N is set if face N is fully occluded"
      },
      {
        "name": "getViewCullingMask",
        "kind": "function",
        "signature": "getViewCullingMask(cx, cy, cz, cameraPos)",
        "summary": "Get view-dependent face culling mask Skips chunk faces that face away from camera (backface culling at chunk level)"
      },
      {
        "name": "meshChunk",
        "kind": "function",
        "signature": "meshChunk(chunk, getNeighborVoxel = null, occludedFaces = 0)",
        "summary": "Generate mesh for a voxel chunk using simple per-face meshing with AO Returns separate meshes for opaque and transparent (water) geometry"
      },
      {
        "name": "meshChunkLOD",
        "kind": "function",
        "signature": "meshChunkLOD(chunk, lodLevel = 0, getNeighborVoxel = null, neighborLODs = null)",
        "summary": ""
      },
      {
        "name": "meshChunkGreedy",
        "kind": "function",
        "signature": "meshChunkGreedy(chunk, getNeighborVoxel = null)",
        "summary": "Generate mesh using greedy meshing (fewer quads, better performance) Note: Currently does not separate water - falls back to simple meshing for chunks with water"
      },
      {
        "name": "createChunkBuffers",
        "kind": "function",
        "signature": "createChunkBuffers(device, chunk, meshData)",
        "summary": "Create GPU buffers for chunk mesh (both opaque and water)"
      },
      {
        "name": "meshSubChunk",
        "kind": "function",
        "signature": "meshSubChunk(chunk, subSize, sx, sy, sz, getNeighborVoxel = null)",
        "summary": "Mesh a sub-region of a chunk (8³ or 16³) Used for ultra-fast partial updates in cascaded chunk architecture"
      },
      {
        "name": "initGPUSubChunkMeshing",
        "kind": "function",
        "signature": "async initGPUSubChunkMeshing(device)",
        "summary": "Initialize GPU sub-chunk meshing"
      },
      {
        "name": "hasGPUSubChunkMeshing",
        "kind": "function",
        "signature": "hasGPUSubChunkMeshing()",
        "summary": "Check if GPU sub-chunk meshing is available"
      },
      {
        "name": "meshSubChunk4GPU",
        "kind": "function",
        "signature": "async meshSubChunk4GPU(chunk, sx, sy, sz)",
        "summary": "Mesh a 4³ sub-chunk on GPU (10× faster than CPU)"
      },
      {
        "name": "meshSubChunk8GPU",
        "kind": "function",
        "signature": "async meshSubChunk8GPU(chunk, sx, sy, sz)",
        "summary": "Mesh an 8³ sub-chunk on GPU (10× faster than CPU)"
      },
      {
        "name": "releaseGPUSubChunkMesh",
        "kind": "function",
        "signature": "releaseGPUSubChunkMesh(mesh)",
        "summary": "Return GPU sub-chunk output buffers to the engine pool."
      },
      {
        "name": "returnGPUBuffers",
        "kind": "function",
        "signature": "returnGPUBuffers(vertexBuffer, indexBuffer, indirectBuffer)",
        "summary": "Return GPU buffers to pool for reuse"
      },
      {
        "name": "getGPUSubChunkStats",
        "kind": "function",
        "signature": "getGPUSubChunkStats()",
        "summary": "Get GPU sub-chunk meshing statistics"
      },
      {
        "name": "getMeshGranularity",
        "kind": "function",
        "signature": "getMeshGranularity(distance, hasRecentModifications = false, modCount = 0)",
        "summary": "Get mesh granularity based on distance from camera (4-Tier System)"
      },
      {
        "name": "gpuBufferPool",
        "kind": "constant",
        "signature": "gpuBufferPool",
        "summary": ""
      },
      {
        "name": "VERTEX_STRIDE",
        "kind": "constant",
        "signature": "VERTEX_STRIDE",
        "summary": ""
      },
      {
        "name": "FACE_NORMALS",
        "kind": "re-export",
        "signature": "FACE_NORMALS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/VoxelModifyCompute",
    "path": "engine/reference/voxel/VoxelModifyCompute.md",
    "source": "engine/voxel/VoxelModifyCompute.js",
    "import": "/engine/voxel/VoxelModifyCompute.js",
    "sourceHash": "18790fb8c6666575fdfd9619cbb65298ca7cfec6196c8737555a32233f3c6372",
    "summary": "VoxelModifyCompute.js - GPU Voxel Modification System Now powered by vGPU driver Performs sphere and box removal operations on voxel chunks using compute shaders. Outputs removed voxels for particle spawning.",
    "exports": [
      {
        "name": "VoxelModifyCompute",
        "kind": "class",
        "signature": "class VoxelModifyCompute",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/VoxelRaycast",
    "path": "engine/reference/voxel/VoxelRaycast.md",
    "source": "engine/voxel/VoxelRaycast.js",
    "import": "/engine/voxel/VoxelRaycast.js",
    "sourceHash": "ca5300498c226775d58513ba9e250847f97ebfc7fcf899e8f60bde58fefcabf0",
    "summary": "GPU-accelerated batch voxel raycasting system Use when processing 100+ rays per frame",
    "exports": [
      {
        "name": "VoxelRaycastGPU",
        "kind": "class",
        "signature": "class VoxelRaycastGPU",
        "summary": "GPU-accelerated batch voxel raycasting system Use when processing 100+ rays per frame"
      },
      {
        "name": "raycastVoxels",
        "kind": "function",
        "signature": "raycastVoxels(origin, direction, getVoxel, options = {})",
        "summary": "Raycast through voxel world using DDA algorithm Returns first solid voxel hit along ray"
      },
      {
        "name": "hasVoxelLineOfSight",
        "kind": "function",
        "signature": "hasVoxelLineOfSight(from, to, getVoxel, options = {})",
        "summary": "Check line of sight between two points through voxels Returns true if no solid voxels block the path"
      },
      {
        "name": "pickBlock",
        "kind": "function",
        "signature": "pickBlock(origin, direction, getVoxel, maxDistance = 10)",
        "summary": "Block picking - raycast from camera with face/placement info Returns both the hit block and the adjacent empty block for placement"
      },
      {
        "name": "traceVoxelPath",
        "kind": "function",
        "signature": "traceVoxelPath(origin, direction, getVoxel, maxDistance = 50, options = {})",
        "summary": "Trace ray through voxels collecting all intersected voxels Useful for beam weapons, explosion rays, etc."
      },
      {
        "name": "createVoxelGetter",
        "kind": "function",
        "signature": "createVoxelGetter(chunkManager)",
        "summary": "Create a voxel getter function from ChunkManager"
      },
      {
        "name": "hasLineOfSightCombined",
        "kind": "function",
        "signature": "hasLineOfSightCombined(from, to, obstacles, getVoxel, options = {})",
        "summary": "Combined LOS check - uses voxels AND AABB obstacles Drop-in replacement for AIAiming.hasLineOfSight"
      },
      {
        "name": "computePixelToRayMatrix",
        "kind": "function",
        "signature": "computePixelToRayMatrix(cameraPos, cameraRotation, fovRad, screenWidth, screenHeight)",
        "summary": "Compute a single matrix that transforms screen pixel coords to world-space ray directions. This avoids per-pixel matrix multiplications in shaders. Usage: rayDir = normalize((pixelToRay * vec4(pixelX, pixelY, 1, 1)).xyz - cameraPos)"
      },
      {
        "name": "screenPixelToRay",
        "kind": "function",
        "signature": "screenPixelToRay(pixelX, pixelY, pixelToRay, cameraPos)",
        "summary": "Generate ray from screen pixel using precomputed pixel-to-ray matrix"
      },
      {
        "name": "raycastVoxelsDebug",
        "kind": "function",
        "signature": "raycastVoxelsDebug(origin, direction, getVoxel, maxDistance = 100)",
        "summary": "Raycast with step counting for performance debugging"
      },
      {
        "name": "stepsToHeatColor",
        "kind": "function",
        "signature": "stepsToHeatColor(steps, maxSteps = 300)",
        "summary": "Convert step count to heat map color (inferno palette)"
      },
      {
        "name": "triangleVoxelIntersect",
        "kind": "function",
        "signature": "triangleVoxelIntersect(a, b, c, voxelMin, voxelMax)",
        "summary": "Check if a triangle intersects a voxel using separating axis theorem. Based on DeadlockCode's implementation."
      },
      {
        "name": "voxelizeMesh",
        "kind": "function",
        "signature": "voxelizeMesh(vertices, triangles, resolution, boundsMin, boundsMax)",
        "summary": "Voxelize a triangle mesh into a voxel grid"
      },
      {
        "name": "RAYCAST_DEBUG_MODE",
        "kind": "constant",
        "signature": "RAYCAST_DEBUG_MODE",
        "summary": "Debug render modes for raycast visualization"
      },
      {
        "name": "MAX_RAY_DISTANCE",
        "kind": "re-export",
        "signature": "MAX_RAY_DISTANCE",
        "summary": ""
      },
      {
        "name": "VOXEL_RAYCAST_SHADER",
        "kind": "re-export",
        "signature": "VOXEL_RAYCAST_SHADER",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/VoxelRenderer",
    "path": "engine/reference/voxel/VoxelRenderer.md",
    "source": "engine/voxel/VoxelRenderer.js",
    "import": "/engine/voxel/VoxelRenderer.js",
    "sourceHash": "5650772696ae36a6861e3881136b9955054b050e36f83b62261b474baeeebff5",
    "summary": "",
    "exports": [
      {
        "name": "VoxelRenderer",
        "kind": "class",
        "signature": "class VoxelRenderer",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/VoxelSdfBrickBridge",
    "path": "engine/reference/voxel/VoxelSdfBrickBridge.md",
    "source": "engine/voxel/VoxelSdfBrickBridge.js",
    "import": "/engine/voxel/VoxelSdfBrickBridge.js",
    "sourceHash": "9d7cd33472aba0cce73589dc243c01b5cd32ac126d391c2aee6ad82793c3c1f3",
    "summary": "Adapter only: voxel storage and dirty-queue ownership remain with the voxel subsystem. Callers pass the dirty entries they already admitted this frame.",
    "exports": [
      {
        "name": "VoxelSdfBrickBridge",
        "kind": "class",
        "signature": "class VoxelSdfBrickBridge",
        "summary": "Adapter only: voxel storage and dirty-queue ownership remain with the voxel subsystem. Callers pass the dirty entries they already admitted this frame."
      },
      {
        "name": "buildVoxelSdfBrickPair",
        "kind": "function",
        "signature": "buildVoxelSdfBrickPair(options = {})",
        "summary": "Convert one voxel chunk plus a one-voxel neighbor apron into independently generated coarse and fine sampled-field pages. The coarse page is an intentionally expanded conservative proxy, so a fine-page miss degrades shape accuracy instead of silently removing occupied geometry."
      },
      {
        "name": "voxelSdfPageToNexel",
        "kind": "function",
        "signature": "voxelSdfPageToNexel(page, options = {})",
        "summary": ""
      },
      {
        "name": "createVoxelSdfBrickBridge",
        "kind": "function",
        "signature": "createVoxelSdfBrickBridge(options)",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/VoxelShaders",
    "path": "engine/reference/voxel/VoxelShaders.md",
    "source": "engine/voxel/VoxelShaders.js",
    "import": "/engine/voxel/VoxelShaders.js",
    "sourceHash": "02850a7dc1c37a9f19d7466e7a9497a18b81df205bd230c3743bfbdd1e43b2cc",
    "summary": "VoxelShaders.js - WGSL shader strings for VoxelRenderer Extracted from VoxelRenderer.js for modularity",
    "exports": [
      {
        "name": "buildVoxelShaderCompactBase",
        "kind": "function",
        "signature": "buildVoxelShaderCompactBase(VOXEL_SHADER)",
        "summary": ""
      },
      {
        "name": "buildVoxelShaderCompactOpaque",
        "kind": "function",
        "signature": "buildVoxelShaderCompactOpaque(compactBase)",
        "summary": ""
      },
      {
        "name": "buildVoxelShaderCompactWater",
        "kind": "function",
        "signature": "buildVoxelShaderCompactWater(compactBase)",
        "summary": ""
      },
      {
        "name": "buildShadowShaderCompact",
        "kind": "function",
        "signature": "buildShadowShaderCompact()",
        "summary": ""
      },
      {
        "name": "SHADOW_MAP_SIZE",
        "kind": "constant",
        "signature": "SHADOW_MAP_SIZE",
        "summary": ""
      },
      {
        "name": "FRAME_UNIFORMS_STRUCT",
        "kind": "constant",
        "signature": "FRAME_UNIFORMS_STRUCT",
        "summary": ""
      },
      {
        "name": "FRAME_UNIFORMS_SIZE",
        "kind": "constant",
        "signature": "FRAME_UNIFORMS_SIZE",
        "summary": ""
      },
      {
        "name": "FRAME_UNIFORMS_FLOATS",
        "kind": "constant",
        "signature": "FRAME_UNIFORMS_FLOATS",
        "summary": ""
      },
      {
        "name": "FACE_PULL_MESHLET_SHADER",
        "kind": "constant",
        "signature": "FACE_PULL_MESHLET_SHADER",
        "summary": ""
      },
      {
        "name": "FACE_PULL_SHADER",
        "kind": "constant",
        "signature": "FACE_PULL_SHADER",
        "summary": ""
      },
      {
        "name": "FACE_PULL_SHADOW_SHADER",
        "kind": "constant",
        "signature": "FACE_PULL_SHADOW_SHADER",
        "summary": ""
      },
      {
        "name": "SHADOW_SHADER",
        "kind": "constant",
        "signature": "SHADOW_SHADER",
        "summary": ""
      },
      {
        "name": "VOXEL_SHADER",
        "kind": "constant",
        "signature": "VOXEL_SHADER",
        "summary": ""
      },
      {
        "name": "VOXEL_SHADER_COMPACT_BASE",
        "kind": "constant",
        "signature": "VOXEL_SHADER_COMPACT_BASE",
        "summary": ""
      },
      {
        "name": "VOXEL_SHADER_COMPACT_OPAQUE",
        "kind": "constant",
        "signature": "VOXEL_SHADER_COMPACT_OPAQUE",
        "summary": ""
      },
      {
        "name": "VOXEL_SHADER_COMPACT_WATER",
        "kind": "constant",
        "signature": "VOXEL_SHADER_COMPACT_WATER",
        "summary": ""
      },
      {
        "name": "SHADOW_SHADER_COMPACT",
        "kind": "constant",
        "signature": "SHADOW_SHADER_COMPACT",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "voxel/index",
    "path": "engine/reference/voxel/index.md",
    "source": "engine/voxel/index.js",
    "import": "/engine/voxel/index.js",
    "sourceHash": "e4b05678c6e966ab3c291d8d983e1d723499133f117c181d2fc4e35e08ecb2c7",
    "summary": "engine/voxel/index.js - Voxel System Barrel Export Core voxel functionality. Other systems have been moved to: - engine/render/passes/ - Post-processing passes - engine/render/atmosphere/ - Sky and atmospheric rendering - engine/world/ - World generation, streaming, storage, time - engine/sim/physics/ - Physics systems - engine/sim/fluids/ - Fluid simulation - engine/core/gpu/ - GPU utilities - engine/core/math/ - Math utilities - engine/core/memory/ - Memory management - engine/core/profiler/ - Profiling - engine/game/ - Gameplay systems",
    "exports": [
      {
        "name": "AERIAL_PERSPECTIVE_WGSL",
        "kind": "re-export",
        "signature": "AERIAL_PERSPECTIVE_WGSL",
        "summary": ""
      },
      {
        "name": "AMBIGUOUS_FACES",
        "kind": "re-export",
        "signature": "AMBIGUOUS_FACES",
        "summary": ""
      },
      {
        "name": "ATMOSPHERIC_SCATTERING_WGSL",
        "kind": "re-export",
        "signature": "ATMOSPHERIC_SCATTERING_WGSL",
        "summary": ""
      },
      {
        "name": "AdaptiveChunkBudget",
        "kind": "re-export",
        "signature": "AdaptiveChunkBudget",
        "summary": ""
      },
      {
        "name": "AerialPerspectiveSystem",
        "kind": "re-export",
        "signature": "AerialPerspectiveSystem",
        "summary": ""
      },
      {
        "name": "AreaResamplePass",
        "kind": "re-export",
        "signature": "AreaResamplePass",
        "summary": ""
      },
      {
        "name": "AtmosphericScatteringSystem",
        "kind": "re-export",
        "signature": "AtmosphericScatteringSystem",
        "summary": ""
      },
      {
        "name": "AutoExposurePass",
        "kind": "re-export",
        "signature": "AutoExposurePass",
        "summary": ""
      },
      {
        "name": "BIOME",
        "kind": "re-export",
        "signature": "BIOME",
        "summary": ""
      },
      {
        "name": "BVHBuilder",
        "kind": "re-export",
        "signature": "BVHBuilder",
        "summary": ""
      },
      {
        "name": "BVHNode",
        "kind": "re-export",
        "signature": "BVHNode",
        "summary": ""
      },
      {
        "name": "BVH_TRAVERSAL_WGSL",
        "kind": "re-export",
        "signature": "BVH_TRAVERSAL_WGSL",
        "summary": ""
      },
      {
        "name": "BezierDistanceCompute",
        "kind": "re-export",
        "signature": "BezierDistanceCompute",
        "summary": ""
      },
      {
        "name": "BinaryReader",
        "kind": "re-export",
        "signature": "BinaryReader",
        "summary": ""
      },
      {
        "name": "BinaryWriter",
        "kind": "re-export",
        "signature": "BinaryWriter",
        "summary": ""
      },
      {
        "name": "BloomFilter",
        "kind": "re-export",
        "signature": "BloomFilter",
        "summary": ""
      },
      {
        "name": "BloomPass",
        "kind": "re-export",
        "signature": "BloomPass",
        "summary": ""
      },
      {
        "name": "CANONICAL_ROTATION",
        "kind": "re-export",
        "signature": "CANONICAL_ROTATION",
        "summary": ""
      },
      {
        "name": "CHUNK_SIZE",
        "kind": "re-export",
        "signature": "CHUNK_SIZE",
        "summary": ""
      },
      {
        "name": "CHUNK_SIZE_SQ",
        "kind": "re-export",
        "signature": "CHUNK_SIZE_SQ",
        "summary": ""
      },
      {
        "name": "CHUNK_VOLUME",
        "kind": "re-export",
        "signature": "CHUNK_VOLUME",
        "summary": ""
      },
      {
        "name": "CUBE_FACES",
        "kind": "re-export",
        "signature": "CUBE_FACES",
        "summary": ""
      },
      {
        "name": "CascadeMetrics",
        "kind": "re-export",
        "signature": "CascadeMetrics",
        "summary": ""
      },
      {
        "name": "CascadedShadowMap",
        "kind": "re-export",
        "signature": "CascadedShadowMap",
        "summary": ""
      },
      {
        "name": "CascadedShadowMapper",
        "kind": "re-export",
        "signature": "CascadedShadowMapper",
        "summary": ""
      },
      {
        "name": "CelestialBodiesWGSL",
        "kind": "re-export",
        "signature": "CelestialBodiesWGSL",
        "summary": ""
      },
      {
        "name": "ChromaticAberrationPass",
        "kind": "re-export",
        "signature": "ChromaticAberrationPass",
        "summary": ""
      },
      {
        "name": "ChunkBufferPool",
        "kind": "re-export",
        "signature": "ChunkBufferPool",
        "summary": ""
      },
      {
        "name": "ChunkCompressor",
        "kind": "re-export",
        "signature": "ChunkCompressor",
        "summary": ""
      },
      {
        "name": "ChunkCullCompute",
        "kind": "re-export",
        "signature": "ChunkCullCompute",
        "summary": ""
      },
      {
        "name": "ChunkHistory",
        "kind": "re-export",
        "signature": "ChunkHistory",
        "summary": ""
      },
      {
        "name": "ChunkJobCoordinator",
        "kind": "re-export",
        "signature": "ChunkJobCoordinator",
        "summary": ""
      },
      {
        "name": "ChunkLoadingZone",
        "kind": "re-export",
        "signature": "ChunkLoadingZone",
        "summary": ""
      },
      {
        "name": "ChunkNeighborCache",
        "kind": "re-export",
        "signature": "ChunkNeighborCache",
        "summary": ""
      },
      {
        "name": "ChunkNetworking",
        "kind": "re-export",
        "signature": "ChunkNetworking",
        "summary": ""
      },
      {
        "name": "ChunkPersistence",
        "kind": "re-export",
        "signature": "ChunkPersistence",
        "summary": ""
      },
      {
        "name": "ChunkRegistry",
        "kind": "re-export",
        "signature": "ChunkRegistry",
        "summary": ""
      },
      {
        "name": "ChunkSeamSystem",
        "kind": "re-export",
        "signature": "ChunkSeamSystem",
        "summary": ""
      },
      {
        "name": "ChunkSorter",
        "kind": "re-export",
        "signature": "ChunkSorter",
        "summary": ""
      },
      {
        "name": "ChunkState",
        "kind": "re-export",
        "signature": "ChunkState",
        "summary": ""
      },
      {
        "name": "ChunkStatus",
        "kind": "re-export",
        "signature": "ChunkStatus",
        "summary": ""
      },
      {
        "name": "ChunkStreamer",
        "kind": "re-export",
        "signature": "ChunkStreamer",
        "summary": ""
      },
      {
        "name": "ChunkStreaming",
        "kind": "re-export",
        "signature": "ChunkStreaming",
        "summary": ""
      },
      {
        "name": "ChunkStreamingCompute",
        "kind": "re-export",
        "signature": "ChunkStreamingCompute",
        "summary": ""
      },
      {
        "name": "ChunkUpdater",
        "kind": "re-export",
        "signature": "ChunkUpdater",
        "summary": ""
      },
      {
        "name": "ChunkWorkerPool",
        "kind": "re-export",
        "signature": "ChunkWorkerPool",
        "summary": ""
      },
      {
        "name": "ColorGradingPass",
        "kind": "re-export",
        "signature": "ColorGradingPass",
        "summary": ""
      },
      {
        "name": "ColoredLightingSystem",
        "kind": "re-export",
        "signature": "ColoredLightingSystem",
        "summary": ""
      },
      {
        "name": "CompressedChunk",
        "kind": "re-export",
        "signature": "CompressedChunk",
        "summary": ""
      },
      {
        "name": "Constellations",
        "kind": "re-export",
        "signature": "Constellations",
        "summary": ""
      },
      {
        "name": "ContactShadowsPass",
        "kind": "re-export",
        "signature": "ContactShadowsPass",
        "summary": ""
      },
      {
        "name": "DEFAULT_BLEND_RADIUS",
        "kind": "re-export",
        "signature": "DEFAULT_BLEND_RADIUS",
        "summary": ""
      },
      {
        "name": "DEFAULT_BUDGETS",
        "kind": "re-export",
        "signature": "DEFAULT_BUDGETS",
        "summary": ""
      },
      {
        "name": "DEFAULT_RESOLUTION",
        "kind": "re-export",
        "signature": "DEFAULT_RESOLUTION",
        "summary": ""
      },
      {
        "name": "DEPTH_TIERS",
        "kind": "re-export",
        "signature": "DEPTH_TIERS",
        "summary": ""
      },
      {
        "name": "DepthOfFieldPass",
        "kind": "re-export",
        "signature": "DepthOfFieldPass",
        "summary": ""
      },
      {
        "name": "DirtyChunkEntry",
        "kind": "re-export",
        "signature": "DirtyChunkEntry",
        "summary": ""
      },
      {
        "name": "DirtyChunkManager",
        "kind": "re-export",
        "signature": "DirtyChunkManager",
        "summary": ""
      },
      {
        "name": "DiskMeshCache",
        "kind": "re-export",
        "signature": "DiskMeshCache",
        "summary": ""
      },
      {
        "name": "DistanceFogSystem",
        "kind": "re-export",
        "signature": "DistanceFogSystem",
        "summary": ""
      },
      {
        "name": "DualModeRenderer",
        "kind": "re-export",
        "signature": "DualModeRenderer",
        "summary": ""
      },
      {
        "name": "DualRNG",
        "kind": "re-export",
        "signature": "DualRNG",
        "summary": ""
      },
      {
        "name": "EPSILON",
        "kind": "re-export",
        "signature": "EPSILON",
        "summary": ""
      },
      {
        "name": "FACE_NAMES",
        "kind": "re-export",
        "signature": "FACE_NAMES",
        "summary": ""
      },
      {
        "name": "FACE_NORMALS",
        "kind": "re-export",
        "signature": "FACE_NORMALS",
        "summary": ""
      },
      {
        "name": "FACE_PULL_SHADER_BASE",
        "kind": "re-export",
        "signature": "FACE_PULL_SHADER_BASE",
        "summary": ""
      },
      {
        "name": "FDTDSolver",
        "kind": "re-export",
        "signature": "FDTDSolver",
        "summary": ""
      },
      {
        "name": "FOG_TYPE",
        "kind": "re-export",
        "signature": "FOG_TYPE",
        "summary": ""
      },
      {
        "name": "FOG_WGSL",
        "kind": "re-export",
        "signature": "FOG_WGSL",
        "summary": ""
      },
      {
        "name": "FXAAPass",
        "kind": "re-export",
        "signature": "FXAAPass",
        "summary": ""
      },
      {
        "name": "FaceListMesher",
        "kind": "re-export",
        "signature": "FaceListMesher",
        "summary": ""
      },
      {
        "name": "FilmGrainPass",
        "kind": "re-export",
        "signature": "FilmGrainPass",
        "summary": ""
      },
      {
        "name": "FluidSimulator",
        "kind": "re-export",
        "signature": "FluidSimulator",
        "summary": ""
      },
      {
        "name": "FrameBudgetManager",
        "kind": "re-export",
        "signature": "FrameBudgetManager",
        "summary": ""
      },
      {
        "name": "GOD_RAYS_WGSL",
        "kind": "re-export",
        "signature": "GOD_RAYS_WGSL",
        "summary": ""
      },
      {
        "name": "GPUBufferPool",
        "kind": "re-export",
        "signature": "GPUBufferPool",
        "summary": ""
      },
      {
        "name": "GPULineVoxelizer",
        "kind": "re-export",
        "signature": "GPULineVoxelizer",
        "summary": ""
      },
      {
        "name": "GPUWorldGenerator",
        "kind": "re-export",
        "signature": "GPUWorldGenerator",
        "summary": ""
      },
      {
        "name": "GenerationPhase",
        "kind": "re-export",
        "signature": "GenerationPhase",
        "summary": ""
      },
      {
        "name": "GeometryDirtyTracker",
        "kind": "re-export",
        "signature": "GeometryDirtyTracker",
        "summary": ""
      },
      {
        "name": "GodRays",
        "kind": "re-export",
        "signature": "GodRays",
        "summary": ""
      },
      {
        "name": "HDRPipeline",
        "kind": "re-export",
        "signature": "HDRPipeline",
        "summary": ""
      },
      {
        "name": "HDR_PIPELINE_WGSL",
        "kind": "re-export",
        "signature": "HDR_PIPELINE_WGSL",
        "summary": ""
      },
      {
        "name": "HiZPass",
        "kind": "re-export",
        "signature": "HiZPass",
        "summary": ""
      },
      {
        "name": "HistoryManager",
        "kind": "re-export",
        "signature": "HistoryManager",
        "summary": ""
      },
      {
        "name": "HybridChunkCompressor",
        "kind": "re-export",
        "signature": "HybridChunkCompressor",
        "summary": ""
      },
      {
        "name": "HybridConnectivity",
        "kind": "re-export",
        "signature": "HybridConnectivity",
        "summary": ""
      },
      {
        "name": "HydraulicErosion",
        "kind": "re-export",
        "signature": "HydraulicErosion",
        "summary": ""
      },
      {
        "name": "INF_T",
        "kind": "re-export",
        "signature": "INF_T",
        "summary": ""
      },
      {
        "name": "JOB_SOURCE",
        "kind": "re-export",
        "signature": "JOB_SOURCE",
        "summary": ""
      },
      {
        "name": "JOB_STATE",
        "kind": "re-export",
        "signature": "JOB_STATE",
        "summary": ""
      },
      {
        "name": "LOAD_PATTERN",
        "kind": "re-export",
        "signature": "LOAD_PATTERN",
        "summary": ""
      },
      {
        "name": "LayerMap",
        "kind": "re-export",
        "signature": "LayerMap",
        "summary": ""
      },
      {
        "name": "LensFlarePass",
        "kind": "re-export",
        "signature": "LensFlarePass",
        "summary": ""
      },
      {
        "name": "LightingDirtyTracker",
        "kind": "re-export",
        "signature": "LightingDirtyTracker",
        "summary": ""
      },
      {
        "name": "LineMaterials",
        "kind": "re-export",
        "signature": "LineMaterials",
        "summary": ""
      },
      {
        "name": "LineNetwork",
        "kind": "re-export",
        "signature": "LineNetwork",
        "summary": ""
      },
      {
        "name": "LineToVoxelizer",
        "kind": "re-export",
        "signature": "LineToVoxelizer",
        "summary": ""
      },
      {
        "name": "LoadRequestRingBuffer",
        "kind": "re-export",
        "signature": "LoadRequestRingBuffer",
        "summary": ""
      },
      {
        "name": "MATERIAL",
        "kind": "re-export",
        "signature": "MATERIAL",
        "summary": ""
      },
      {
        "name": "MATERIAL_BLEND_SHADER",
        "kind": "re-export",
        "signature": "MATERIAL_BLEND_SHADER",
        "summary": ""
      },
      {
        "name": "MATERIAL_COLORS",
        "kind": "re-export",
        "signature": "MATERIAL_COLORS",
        "summary": ""
      },
      {
        "name": "MATERIAL_COLORS_NORMALIZED",
        "kind": "re-export",
        "signature": "MATERIAL_COLORS_NORMALIZED",
        "summary": ""
      },
      {
        "name": "MATERIAL_COUNT",
        "kind": "re-export",
        "signature": "MATERIAL_COUNT",
        "summary": ""
      },
      {
        "name": "MATERIAL_DEFINITIONS",
        "kind": "re-export",
        "signature": "MATERIAL_DEFINITIONS",
        "summary": ""
      },
      {
        "name": "MATERIAL_IDS",
        "kind": "re-export",
        "signature": "MATERIAL_IDS",
        "summary": ""
      },
      {
        "name": "MATERIAL_NAMES",
        "kind": "re-export",
        "signature": "MATERIAL_NAMES",
        "summary": ""
      },
      {
        "name": "MATERIAL_PROPERTIES",
        "kind": "re-export",
        "signature": "MATERIAL_PROPERTIES",
        "summary": ""
      },
      {
        "name": "MAX_DIRTY_PER_FRAME",
        "kind": "re-export",
        "signature": "MAX_DIRTY_PER_FRAME",
        "summary": ""
      },
      {
        "name": "MAX_RAY_DISTANCE",
        "kind": "re-export",
        "signature": "MAX_RAY_DISTANCE",
        "summary": ""
      },
      {
        "name": "MC33_CASE",
        "kind": "re-export",
        "signature": "MC33_CASE",
        "summary": ""
      },
      {
        "name": "MC33_SUBCASE_COUNT",
        "kind": "re-export",
        "signature": "MC33_SUBCASE_COUNT",
        "summary": ""
      },
      {
        "name": "MC33_TRI_TABLE",
        "kind": "re-export",
        "signature": "MC33_TRI_TABLE",
        "summary": ""
      },
      {
        "name": "MESH_MODE",
        "kind": "re-export",
        "signature": "MESH_MODE",
        "summary": ""
      },
      {
        "name": "MappedBufferRing",
        "kind": "re-export",
        "signature": "MappedBufferRing",
        "summary": ""
      },
      {
        "name": "MarchingCubesMesher",
        "kind": "re-export",
        "signature": "MarchingCubesMesher",
        "summary": ""
      },
      {
        "name": "MinimapRenderer",
        "kind": "re-export",
        "signature": "MinimapRenderer",
        "summary": ""
      },
      {
        "name": "Moon",
        "kind": "re-export",
        "signature": "Moon",
        "summary": ""
      },
      {
        "name": "MoonDefaults",
        "kind": "re-export",
        "signature": "MoonDefaults",
        "summary": ""
      },
      {
        "name": "MoonPresets",
        "kind": "re-export",
        "signature": "MoonPresets",
        "summary": ""
      },
      {
        "name": "MoonSystem",
        "kind": "re-export",
        "signature": "MoonSystem",
        "summary": ""
      },
      {
        "name": "MoonType",
        "kind": "re-export",
        "signature": "MoonType",
        "summary": ""
      },
      {
        "name": "MoonWGSL",
        "kind": "re-export",
        "signature": "MoonWGSL",
        "summary": ""
      },
      {
        "name": "MotionBlurPass",
        "kind": "re-export",
        "signature": "MotionBlurPass",
        "summary": ""
      },
      {
        "name": "MovementPredictor",
        "kind": "re-export",
        "signature": "MovementPredictor",
        "summary": ""
      },
      {
        "name": "NEIGHBOR_DIR",
        "kind": "re-export",
        "signature": "NEIGHBOR_DIR",
        "summary": ""
      },
      {
        "name": "NeighborCacheManager",
        "kind": "re-export",
        "signature": "NeighborCacheManager",
        "summary": ""
      },
      {
        "name": "NetworkEdge",
        "kind": "re-export",
        "signature": "NetworkEdge",
        "summary": ""
      },
      {
        "name": "NetworkNode",
        "kind": "re-export",
        "signature": "NetworkNode",
        "summary": ""
      },
      {
        "name": "ObjectPool",
        "kind": "re-export",
        "signature": "ObjectPool",
        "summary": ""
      },
      {
        "name": "OutlinePass",
        "kind": "re-export",
        "signature": "OutlinePass",
        "summary": ""
      },
      {
        "name": "PLANET_CURVATURE_WGSL",
        "kind": "re-export",
        "signature": "PLANET_CURVATURE_WGSL",
        "summary": ""
      },
      {
        "name": "PRIORITY_BUCKET",
        "kind": "re-export",
        "signature": "PRIORITY_BUCKET",
        "summary": ""
      },
      {
        "name": "PROCEDURAL_SKY_WGSL",
        "kind": "re-export",
        "signature": "PROCEDURAL_SKY_WGSL",
        "summary": ""
      },
      {
        "name": "PaniniProjectionPass",
        "kind": "re-export",
        "signature": "PaniniProjectionPass",
        "summary": ""
      },
      {
        "name": "PerformanceOptimizer",
        "kind": "re-export",
        "signature": "PerformanceOptimizer",
        "summary": ""
      },
      {
        "name": "PhasorRays",
        "kind": "re-export",
        "signature": "PhasorRays",
        "summary": ""
      },
      {
        "name": "PhotonicCrystal",
        "kind": "re-export",
        "signature": "PhotonicCrystal",
        "summary": ""
      },
      {
        "name": "PipelineCache",
        "kind": "re-export",
        "signature": "PipelineCache",
        "summary": ""
      },
      {
        "name": "PlanetCurvatureSystem",
        "kind": "re-export",
        "signature": "PlanetCurvatureSystem",
        "summary": ""
      },
      {
        "name": "PlanetPreviewRenderer",
        "kind": "re-export",
        "signature": "PlanetPreviewRenderer",
        "summary": ""
      },
      {
        "name": "PriorityBucketQueue",
        "kind": "re-export",
        "signature": "PriorityBucketQueue",
        "summary": ""
      },
      {
        "name": "PriorityChunkLoader",
        "kind": "re-export",
        "signature": "PriorityChunkLoader",
        "summary": ""
      },
      {
        "name": "ProceduralSky",
        "kind": "re-export",
        "signature": "ProceduralSky",
        "summary": ""
      },
      {
        "name": "ProceduralTreeGenerator",
        "kind": "re-export",
        "signature": "ProceduralTreeGenerator",
        "summary": ""
      },
      {
        "name": "ProgressiveChunkLoader",
        "kind": "re-export",
        "signature": "ProgressiveChunkLoader",
        "summary": ""
      },
      {
        "name": "PurkinjeEffectPass",
        "kind": "re-export",
        "signature": "PurkinjeEffectPass",
        "summary": ""
      },
      {
        "name": "RAYCAST_DEBUG_MODE",
        "kind": "re-export",
        "signature": "RAYCAST_DEBUG_MODE",
        "summary": ""
      },
      {
        "name": "RLEChunkCompressor",
        "kind": "re-export",
        "signature": "RLEChunkCompressor",
        "summary": ""
      },
      {
        "name": "RegionFile",
        "kind": "re-export",
        "signature": "RegionFile",
        "summary": ""
      },
      {
        "name": "RegionManager",
        "kind": "re-export",
        "signature": "RegionManager",
        "summary": ""
      },
      {
        "name": "RenderBundleCache",
        "kind": "re-export",
        "signature": "RenderBundleCache",
        "summary": ""
      },
      {
        "name": "SCHEMA_VERSION",
        "kind": "re-export",
        "signature": "SCHEMA_VERSION",
        "summary": ""
      },
      {
        "name": "SDF_RAYMARCH_SHADER",
        "kind": "re-export",
        "signature": "SDF_RAYMARCH_SHADER",
        "summary": ""
      },
      {
        "name": "SSAOPass",
        "kind": "re-export",
        "signature": "SSAOPass",
        "summary": ""
      },
      {
        "name": "SSGIPass",
        "kind": "re-export",
        "signature": "SSGIPass",
        "summary": ""
      },
      {
        "name": "SSRPass",
        "kind": "re-export",
        "signature": "SSRPass",
        "summary": ""
      },
      {
        "name": "SUBCASE_LOOKUP",
        "kind": "re-export",
        "signature": "SUBCASE_LOOKUP",
        "summary": ""
      },
      {
        "name": "SUN_PHASE",
        "kind": "re-export",
        "signature": "SUN_PHASE",
        "summary": ""
      },
      {
        "name": "SharpeningPass",
        "kind": "re-export",
        "signature": "SharpeningPass",
        "summary": ""
      },
      {
        "name": "SpaceWGSL",
        "kind": "re-export",
        "signature": "SpaceWGSL",
        "summary": ""
      },
      {
        "name": "SpatialHash",
        "kind": "re-export",
        "signature": "SpatialHash",
        "summary": ""
      },
      {
        "name": "SpatialHashCompute",
        "kind": "re-export",
        "signature": "SpatialHashCompute",
        "summary": ""
      },
      {
        "name": "StarDefaults",
        "kind": "re-export",
        "signature": "StarDefaults",
        "summary": ""
      },
      {
        "name": "StarField",
        "kind": "re-export",
        "signature": "StarField",
        "summary": ""
      },
      {
        "name": "StarLayer",
        "kind": "re-export",
        "signature": "StarLayer",
        "summary": ""
      },
      {
        "name": "StarLayerPresets",
        "kind": "re-export",
        "signature": "StarLayerPresets",
        "summary": ""
      },
      {
        "name": "StarSystem",
        "kind": "re-export",
        "signature": "StarSystem",
        "summary": ""
      },
      {
        "name": "StarsWGSL",
        "kind": "re-export",
        "signature": "StarsWGSL",
        "summary": ""
      },
      {
        "name": "StructureType",
        "kind": "re-export",
        "signature": "StructureType",
        "summary": ""
      },
      {
        "name": "SubChunkBufferPool",
        "kind": "re-export",
        "signature": "SubChunkBufferPool",
        "summary": ""
      },
      {
        "name": "SubChunkMeshCompute",
        "kind": "re-export",
        "signature": "SubChunkMeshCompute",
        "summary": ""
      },
      {
        "name": "Sun",
        "kind": "re-export",
        "signature": "Sun",
        "summary": ""
      },
      {
        "name": "SunDefaults",
        "kind": "re-export",
        "signature": "SunDefaults",
        "summary": ""
      },
      {
        "name": "SunWGSL",
        "kind": "re-export",
        "signature": "SunWGSL",
        "summary": ""
      },
      {
        "name": "TAAPass",
        "kind": "re-export",
        "signature": "TAAPass",
        "summary": ""
      },
      {
        "name": "TONEMAP_OPERATOR",
        "kind": "re-export",
        "signature": "TONEMAP_OPERATOR",
        "summary": ""
      },
      {
        "name": "TRIPLANAR_SHADER",
        "kind": "re-export",
        "signature": "TRIPLANAR_SHADER",
        "summary": ""
      },
      {
        "name": "TectonicSimulation",
        "kind": "re-export",
        "signature": "TectonicSimulation",
        "summary": ""
      },
      {
        "name": "TextureArrayManager",
        "kind": "re-export",
        "signature": "TextureArrayManager",
        "summary": ""
      },
      {
        "name": "ThermalErosion",
        "kind": "re-export",
        "signature": "ThermalErosion",
        "summary": ""
      },
      {
        "name": "UnderwaterPass",
        "kind": "re-export",
        "signature": "UnderwaterPass",
        "summary": ""
      },
      {
        "name": "UnifiedTerrainPipeline",
        "kind": "re-export",
        "signature": "UnifiedTerrainPipeline",
        "summary": ""
      },
      {
        "name": "UniformBufferRing",
        "kind": "re-export",
        "signature": "UniformBufferRing",
        "summary": ""
      },
      {
        "name": "UnionFind",
        "kind": "re-export",
        "signature": "UnionFind",
        "summary": ""
      },
      {
        "name": "VERTEX_STRIDE",
        "kind": "re-export",
        "signature": "VERTEX_STRIDE",
        "summary": ""
      },
      {
        "name": "VOLUMETRIC_PARAMS",
        "kind": "re-export",
        "signature": "VOLUMETRIC_PARAMS",
        "summary": ""
      },
      {
        "name": "VOXEL_AO_WGSL",
        "kind": "re-export",
        "signature": "VOXEL_AO_WGSL",
        "summary": ""
      },
      {
        "name": "VOXEL_RAYCAST_SHADER",
        "kind": "re-export",
        "signature": "VOXEL_RAYCAST_SHADER",
        "summary": ""
      },
      {
        "name": "VertexPool",
        "kind": "re-export",
        "signature": "VertexPool",
        "summary": ""
      },
      {
        "name": "VignettePass",
        "kind": "re-export",
        "signature": "VignettePass",
        "summary": ""
      },
      {
        "name": "VolumetricCloudsPass",
        "kind": "re-export",
        "signature": "VolumetricCloudsPass",
        "summary": ""
      },
      {
        "name": "VolumetricRaymarcher",
        "kind": "re-export",
        "signature": "VolumetricRaymarcher",
        "summary": ""
      },
      {
        "name": "VolumetricRenderMode",
        "kind": "re-export",
        "signature": "VolumetricRenderMode",
        "summary": ""
      },
      {
        "name": "VoronoiTextureBlend",
        "kind": "re-export",
        "signature": "VoronoiTextureBlend",
        "summary": ""
      },
      {
        "name": "VoxelAOCalculator",
        "kind": "re-export",
        "signature": "VoxelAOCalculator",
        "summary": ""
      },
      {
        "name": "VoxelMeshCompute",
        "kind": "re-export",
        "signature": "VoxelMeshCompute",
        "summary": ""
      },
      {
        "name": "VoxelMesher",
        "kind": "re-export",
        "signature": "VoxelMesher",
        "summary": ""
      },
      {
        "name": "VoxelModifyCompute",
        "kind": "re-export",
        "signature": "VoxelModifyCompute",
        "summary": ""
      },
      {
        "name": "VoxelRaycastGPU",
        "kind": "re-export",
        "signature": "VoxelRaycastGPU",
        "summary": ""
      },
      {
        "name": "VoxelRenderer",
        "kind": "re-export",
        "signature": "VoxelRenderer",
        "summary": ""
      },
      {
        "name": "VoxelSdfBrickBridge",
        "kind": "re-export",
        "signature": "VoxelSdfBrickBridge",
        "summary": ""
      },
      {
        "name": "VoxelUnionFind",
        "kind": "re-export",
        "signature": "VoxelUnionFind",
        "summary": ""
      },
      {
        "name": "WindErosion",
        "kind": "re-export",
        "signature": "WindErosion",
        "summary": ""
      },
      {
        "name": "WindSimulation",
        "kind": "re-export",
        "signature": "WindSimulation",
        "summary": ""
      },
      {
        "name": "WindSystem",
        "kind": "re-export",
        "signature": "WindSystem",
        "summary": ""
      },
      {
        "name": "World3DPreviewRenderer",
        "kind": "re-export",
        "signature": "World3DPreviewRenderer",
        "summary": ""
      },
      {
        "name": "WorldGenerator",
        "kind": "re-export",
        "signature": "WorldGenerator",
        "summary": ""
      },
      {
        "name": "WorldMapGenerator",
        "kind": "re-export",
        "signature": "WorldMapGenerator",
        "summary": ""
      },
      {
        "name": "WorldParticleRenderer",
        "kind": "re-export",
        "signature": "WorldParticleRenderer",
        "summary": ""
      },
      {
        "name": "WorldStorage",
        "kind": "re-export",
        "signature": "WorldStorage",
        "summary": ""
      },
      {
        "name": "ZONE_STATE",
        "kind": "re-export",
        "signature": "ZONE_STATE",
        "summary": ""
      },
      {
        "name": "appendTrailer",
        "kind": "re-export",
        "signature": "appendTrailer",
        "summary": ""
      },
      {
        "name": "applyDelta",
        "kind": "re-export",
        "signature": "applyDelta",
        "summary": ""
      },
      {
        "name": "asymptoticDecider",
        "kind": "re-export",
        "signature": "asymptoticDecider",
        "summary": ""
      },
      {
        "name": "bezierClosestNewton",
        "kind": "re-export",
        "signature": "bezierClosestNewton",
        "summary": ""
      },
      {
        "name": "bezierDistanceBatch",
        "kind": "re-export",
        "signature": "bezierDistanceBatch",
        "summary": ""
      },
      {
        "name": "bezierDistanceCapsule",
        "kind": "re-export",
        "signature": "bezierDistanceCapsule",
        "summary": ""
      },
      {
        "name": "bezierDistanceHybrid",
        "kind": "re-export",
        "signature": "bezierDistanceHybrid",
        "summary": ""
      },
      {
        "name": "buildVoxelSdfBrickPair",
        "kind": "re-export",
        "signature": "buildVoxelSdfBrickPair",
        "summary": ""
      },
      {
        "name": "calculateFaceAO",
        "kind": "re-export",
        "signature": "calculateFaceAO",
        "summary": ""
      },
      {
        "name": "calculateGradientAO",
        "kind": "re-export",
        "signature": "calculateGradientAO",
        "summary": ""
      },
      {
        "name": "calculateVertexAO",
        "kind": "re-export",
        "signature": "calculateVertexAO",
        "summary": ""
      },
      {
        "name": "calculateWorldSpaceAO",
        "kind": "re-export",
        "signature": "calculateWorldSpaceAO",
        "summary": ""
      },
      {
        "name": "capsuleClosestT",
        "kind": "re-export",
        "signature": "capsuleClosestT",
        "summary": ""
      },
      {
        "name": "chunkKey",
        "kind": "re-export",
        "signature": "chunkKey",
        "summary": ""
      },
      {
        "name": "compressChunk",
        "kind": "re-export",
        "signature": "compressChunk",
        "summary": ""
      },
      {
        "name": "computePixelToRayMatrix",
        "kind": "re-export",
        "signature": "computePixelToRayMatrix",
        "summary": ""
      },
      {
        "name": "crc32",
        "kind": "re-export",
        "signature": "crc32",
        "summary": ""
      },
      {
        "name": "createChunkBuffers",
        "kind": "re-export",
        "signature": "createChunkBuffers",
        "summary": ""
      },
      {
        "name": "createRaycastMesh",
        "kind": "re-export",
        "signature": "createRaycastMesh",
        "summary": ""
      },
      {
        "name": "createVoxelGetter",
        "kind": "re-export",
        "signature": "createVoxelGetter",
        "summary": ""
      },
      {
        "name": "createVoxelSdfBrickBridge",
        "kind": "re-export",
        "signature": "createVoxelSdfBrickBridge",
        "summary": ""
      },
      {
        "name": "curvesToGPUBuffer",
        "kind": "re-export",
        "signature": "curvesToGPUBuffer",
        "summary": ""
      },
      {
        "name": "curvesToSegments",
        "kind": "re-export",
        "signature": "curvesToSegments",
        "summary": ""
      },
      {
        "name": "decodeColumn",
        "kind": "re-export",
        "signature": "decodeColumn",
        "summary": ""
      },
      {
        "name": "decodeMorton3D",
        "kind": "re-export",
        "signature": "decodeMorton3D",
        "summary": ""
      },
      {
        "name": "decompressChunk",
        "kind": "re-export",
        "signature": "decompressChunk",
        "summary": ""
      },
      {
        "name": "deserializeChunk",
        "kind": "re-export",
        "signature": "deserializeChunk",
        "summary": ""
      },
      {
        "name": "dualContourCell",
        "kind": "re-export",
        "signature": "dualContourCell",
        "summary": ""
      },
      {
        "name": "dualContourVertex",
        "kind": "re-export",
        "signature": "dualContourVertex",
        "summary": ""
      },
      {
        "name": "encodeColumn",
        "kind": "re-export",
        "signature": "encodeColumn",
        "summary": ""
      },
      {
        "name": "encodeMorton3D",
        "kind": "re-export",
        "signature": "encodeMorton3D",
        "summary": ""
      },
      {
        "name": "estimateChunkSize",
        "kind": "re-export",
        "signature": "estimateChunkSize",
        "summary": ""
      },
      {
        "name": "fbm3D",
        "kind": "re-export",
        "signature": "fbm3D",
        "summary": ""
      },
      {
        "name": "generateRoots",
        "kind": "re-export",
        "signature": "generateRoots",
        "summary": ""
      },
      {
        "name": "generateTransitionCell",
        "kind": "re-export",
        "signature": "generateTransitionCell",
        "summary": ""
      },
      {
        "name": "generateTree",
        "kind": "re-export",
        "signature": "generateTree",
        "summary": ""
      },
      {
        "name": "generateTunnel",
        "kind": "re-export",
        "signature": "generateTunnel",
        "summary": ""
      },
      {
        "name": "generateWGSLTables",
        "kind": "re-export",
        "signature": "generateWGSLTables",
        "summary": ""
      },
      {
        "name": "getAmbiguousFaces",
        "kind": "re-export",
        "signature": "getAmbiguousFaces",
        "summary": ""
      },
      {
        "name": "getCameraForward",
        "kind": "re-export",
        "signature": "getCameraForward",
        "summary": ""
      },
      {
        "name": "getCameraPosition",
        "kind": "re-export",
        "signature": "getCameraPosition",
        "summary": ""
      },
      {
        "name": "getChannel",
        "kind": "re-export",
        "signature": "getChannel",
        "summary": ""
      },
      {
        "name": "getChunkOcclusionMask",
        "kind": "re-export",
        "signature": "getChunkOcclusionMask",
        "summary": ""
      },
      {
        "name": "getChunkRegistry",
        "kind": "re-export",
        "signature": "getChunkRegistry",
        "summary": ""
      },
      {
        "name": "getDepthTier",
        "kind": "re-export",
        "signature": "getDepthTier",
        "summary": ""
      },
      {
        "name": "getDepthTierBlend",
        "kind": "re-export",
        "signature": "getDepthTierBlend",
        "summary": ""
      },
      {
        "name": "getFrameBudgetManager",
        "kind": "re-export",
        "signature": "getFrameBudgetManager",
        "summary": ""
      },
      {
        "name": "getGPUSubChunkStats",
        "kind": "re-export",
        "signature": "getGPUSubChunkStats",
        "summary": ""
      },
      {
        "name": "getGlobalRNG",
        "kind": "re-export",
        "signature": "getGlobalRNG",
        "summary": ""
      },
      {
        "name": "getMC33Subcase",
        "kind": "re-export",
        "signature": "getMC33Subcase",
        "summary": ""
      },
      {
        "name": "getMaterialColor",
        "kind": "re-export",
        "signature": "getMaterialColor",
        "summary": ""
      },
      {
        "name": "getMaterialId",
        "kind": "re-export",
        "signature": "getMaterialId",
        "summary": ""
      },
      {
        "name": "getMaterialName",
        "kind": "re-export",
        "signature": "getMaterialName",
        "summary": ""
      },
      {
        "name": "getMaterialProperties",
        "kind": "re-export",
        "signature": "getMaterialProperties",
        "summary": ""
      },
      {
        "name": "getMeshGranularity",
        "kind": "re-export",
        "signature": "getMeshGranularity",
        "summary": ""
      },
      {
        "name": "getTransitionRatio",
        "kind": "re-export",
        "signature": "getTransitionRatio",
        "summary": ""
      },
      {
        "name": "getViewCullingMask",
        "kind": "re-export",
        "signature": "getViewCullingMask",
        "summary": ""
      },
      {
        "name": "gpuBufferPool",
        "kind": "re-export",
        "signature": "gpuBufferPool",
        "summary": ""
      },
      {
        "name": "greedyMesh",
        "kind": "re-export",
        "signature": "greedyMesh",
        "summary": ""
      },
      {
        "name": "hasGPUSubChunkMeshing",
        "kind": "re-export",
        "signature": "hasGPUSubChunkMeshing",
        "summary": ""
      },
      {
        "name": "hasLight",
        "kind": "re-export",
        "signature": "hasLight",
        "summary": ""
      },
      {
        "name": "hasLineOfSightCombined",
        "kind": "re-export",
        "signature": "hasLineOfSightCombined",
        "summary": ""
      },
      {
        "name": "hasVoxelLineOfSight",
        "kind": "re-export",
        "signature": "hasVoxelLineOfSight",
        "summary": ""
      },
      {
        "name": "hashVoxels",
        "kind": "re-export",
        "signature": "hashVoxels",
        "summary": ""
      },
      {
        "name": "initChunkRegistry",
        "kind": "re-export",
        "signature": "initChunkRegistry",
        "summary": ""
      },
      {
        "name": "initGPUSubChunkMeshing",
        "kind": "re-export",
        "signature": "initGPUSubChunkMeshing",
        "summary": ""
      },
      {
        "name": "initGlobalRNG",
        "kind": "re-export",
        "signature": "initGlobalRNG",
        "summary": ""
      },
      {
        "name": "interiorTest",
        "kind": "re-export",
        "signature": "interiorTest",
        "summary": ""
      },
      {
        "name": "isChunkFaceSolid",
        "kind": "re-export",
        "signature": "isChunkFaceSolid",
        "summary": ""
      },
      {
        "name": "isEmissive",
        "kind": "re-export",
        "signature": "isEmissive",
        "summary": ""
      },
      {
        "name": "isFaceAmbiguous",
        "kind": "re-export",
        "signature": "isFaceAmbiguous",
        "summary": ""
      },
      {
        "name": "isFluid",
        "kind": "re-export",
        "signature": "isFluid",
        "summary": ""
      },
      {
        "name": "isSolid",
        "kind": "re-export",
        "signature": "isSolid",
        "summary": ""
      },
      {
        "name": "isTransparent",
        "kind": "re-export",
        "signature": "isTransparent",
        "summary": ""
      },
      {
        "name": "isTransparentMaterial",
        "kind": "re-export",
        "signature": "isTransparentMaterial",
        "summary": ""
      },
      {
        "name": "lightDecrement",
        "kind": "re-export",
        "signature": "lightDecrement",
        "summary": ""
      },
      {
        "name": "lightMax",
        "kind": "re-export",
        "signature": "lightMax",
        "summary": ""
      },
      {
        "name": "lightToRGB",
        "kind": "re-export",
        "signature": "lightToRGB",
        "summary": ""
      },
      {
        "name": "linearToMorton",
        "kind": "re-export",
        "signature": "linearToMorton",
        "summary": ""
      },
      {
        "name": "makeChunkKey",
        "kind": "re-export",
        "signature": "makeChunkKey",
        "summary": ""
      },
      {
        "name": "meshChunk",
        "kind": "re-export",
        "signature": "meshChunk",
        "summary": ""
      },
      {
        "name": "meshChunkGreedy",
        "kind": "re-export",
        "signature": "meshChunkGreedy",
        "summary": ""
      },
      {
        "name": "meshChunkLOD",
        "kind": "re-export",
        "signature": "meshChunkLOD",
        "summary": ""
      },
      {
        "name": "meshChunkSmooth",
        "kind": "re-export",
        "signature": "meshChunkSmooth",
        "summary": ""
      },
      {
        "name": "meshSubChunk",
        "kind": "re-export",
        "signature": "meshSubChunk",
        "summary": ""
      },
      {
        "name": "meshSubChunk4GPU",
        "kind": "re-export",
        "signature": "meshSubChunk4GPU",
        "summary": ""
      },
      {
        "name": "meshSubChunk8GPU",
        "kind": "re-export",
        "signature": "meshSubChunk8GPU",
        "summary": ""
      },
      {
        "name": "mortonToLinear",
        "kind": "re-export",
        "signature": "mortonToLinear",
        "summary": ""
      },
      {
        "name": "multiCurveDistance",
        "kind": "re-export",
        "signature": "multiCurveDistance",
        "summary": ""
      },
      {
        "name": "multiCurveDistanceSmooth",
        "kind": "re-export",
        "signature": "multiCurveDistanceSmooth",
        "summary": ""
      },
      {
        "name": "needsTransitionCell",
        "kind": "re-export",
        "signature": "needsTransitionCell",
        "summary": ""
      },
      {
        "name": "packAO",
        "kind": "re-export",
        "signature": "packAO",
        "summary": ""
      },
      {
        "name": "packLight",
        "kind": "re-export",
        "signature": "packLight",
        "summary": ""
      },
      {
        "name": "parseChunkKey",
        "kind": "re-export",
        "signature": "parseChunkKey",
        "summary": ""
      },
      {
        "name": "pickBlock",
        "kind": "re-export",
        "signature": "pickBlock",
        "summary": ""
      },
      {
        "name": "positionHash",
        "kind": "re-export",
        "signature": "positionHash",
        "summary": ""
      },
      {
        "name": "rayTriangleIntersect",
        "kind": "re-export",
        "signature": "rayTriangleIntersect",
        "summary": ""
      },
      {
        "name": "raycastVoxels",
        "kind": "re-export",
        "signature": "raycastVoxels",
        "summary": ""
      },
      {
        "name": "raycastVoxelsDebug",
        "kind": "re-export",
        "signature": "raycastVoxelsDebug",
        "summary": ""
      },
      {
        "name": "releaseGPUSubChunkMesh",
        "kind": "re-export",
        "signature": "releaseGPUSubChunkMesh",
        "summary": ""
      },
      {
        "name": "returnGPUBuffers",
        "kind": "re-export",
        "signature": "returnGPUBuffers",
        "summary": ""
      },
      {
        "name": "rotateEdges",
        "kind": "re-export",
        "signature": "rotateEdges",
        "summary": ""
      },
      {
        "name": "screenPixelToRay",
        "kind": "re-export",
        "signature": "screenPixelToRay",
        "summary": ""
      },
      {
        "name": "sdCapsule",
        "kind": "re-export",
        "signature": "sdCapsule",
        "summary": ""
      },
      {
        "name": "sdfBox",
        "kind": "re-export",
        "signature": "sdfBox",
        "summary": ""
      },
      {
        "name": "sdfIntersect",
        "kind": "re-export",
        "signature": "sdfIntersect",
        "summary": ""
      },
      {
        "name": "sdfSmoothUnion",
        "kind": "re-export",
        "signature": "sdfSmoothUnion",
        "summary": ""
      },
      {
        "name": "sdfSphere",
        "kind": "re-export",
        "signature": "sdfSphere",
        "summary": ""
      },
      {
        "name": "sdfSubtract",
        "kind": "re-export",
        "signature": "sdfSubtract",
        "summary": ""
      },
      {
        "name": "sdfTerrain",
        "kind": "re-export",
        "signature": "sdfTerrain",
        "summary": ""
      },
      {
        "name": "sdfUnion",
        "kind": "re-export",
        "signature": "sdfUnion",
        "summary": ""
      },
      {
        "name": "serializeBVHForGPU",
        "kind": "re-export",
        "signature": "serializeBVHForGPU",
        "summary": ""
      },
      {
        "name": "serializeChunk",
        "kind": "re-export",
        "signature": "serializeChunk",
        "summary": ""
      },
      {
        "name": "shouldFlipQuad",
        "kind": "re-export",
        "signature": "shouldFlipQuad",
        "summary": ""
      },
      {
        "name": "shouldSkipWork",
        "kind": "re-export",
        "signature": "shouldSkipWork",
        "summary": ""
      },
      {
        "name": "smin",
        "kind": "re-export",
        "signature": "smin",
        "summary": ""
      },
      {
        "name": "stepsToHeatColor",
        "kind": "re-export",
        "signature": "stepsToHeatColor",
        "summary": ""
      },
      {
        "name": "traceVoxelPath",
        "kind": "re-export",
        "signature": "traceVoxelPath",
        "summary": ""
      },
      {
        "name": "traverseBVH",
        "kind": "re-export",
        "signature": "traverseBVH",
        "summary": ""
      },
      {
        "name": "triangleVoxelIntersect",
        "kind": "re-export",
        "signature": "triangleVoxelIntersect",
        "summary": ""
      },
      {
        "name": "unpackAO",
        "kind": "re-export",
        "signature": "unpackAO",
        "summary": ""
      },
      {
        "name": "unpackLight",
        "kind": "re-export",
        "signature": "unpackLight",
        "summary": ""
      },
      {
        "name": "validateSchema",
        "kind": "re-export",
        "signature": "validateSchema",
        "summary": ""
      },
      {
        "name": "verifyCRC32",
        "kind": "re-export",
        "signature": "verifyCRC32",
        "summary": ""
      },
      {
        "name": "verifyTrailer",
        "kind": "re-export",
        "signature": "verifyTrailer",
        "summary": ""
      },
      {
        "name": "voxelSdfPageToNexel",
        "kind": "re-export",
        "signature": "voxelSdfPageToNexel",
        "summary": ""
      },
      {
        "name": "voxelizeMesh",
        "kind": "re-export",
        "signature": "voxelizeMesh",
        "summary": ""
      },
      {
        "name": "xxHash32",
        "kind": "re-export",
        "signature": "xxHash32",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/FDTDSolver",
    "path": "engine/reference/world/FDTDSolver.md",
    "source": "engine/world/FDTDSolver.js",
    "import": "/engine/world/FDTDSolver.js",
    "sourceHash": "983a58cbe176b5c32046f3e1c4b60172abebce77bbe966c59fa70e808b9d0c8f",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "world/FloatingOrigin",
    "path": "engine/reference/world/FloatingOrigin.md",
    "source": "engine/world/FloatingOrigin.js",
    "import": "/engine/world/FloatingOrigin.js",
    "sourceHash": "302fc1eb954cdd6baccb0f70c855e946d7fe22dc62be2bfc46ff5cc7f90bdfdd",
    "summary": "Shift an array of objects by the rebase offset Objects must have x, y, z properties",
    "exports": [
      {
        "name": "FloatingOrigin",
        "kind": "class",
        "signature": "class FloatingOrigin",
        "summary": ""
      },
      {
        "name": "shiftObjects",
        "kind": "function",
        "signature": "shiftObjects(objects, shiftX, shiftY, shiftZ)",
        "summary": "Shift an array of objects by the rebase offset Objects must have x, y, z properties"
      },
      {
        "name": "shiftPosition",
        "kind": "function",
        "signature": "shiftPosition(pos, shiftX, shiftY, shiftZ)",
        "summary": "Shift a position array [x, y, z] by the rebase offset"
      },
      {
        "name": "REBASE_THRESHOLD",
        "kind": "constant",
        "signature": "REBASE_THRESHOLD",
        "summary": "Distance from local origin at which to trigger a rebase (in world units)"
      },
      {
        "name": "REBASE_SNAP",
        "kind": "constant",
        "signature": "REBASE_SNAP",
        "summary": "Chunk size for coordinate snapping during rebase"
      },
      {
        "name": "SECTOR_REBASE_THRESHOLD",
        "kind": "constant",
        "signature": "SECTOR_REBASE_THRESHOLD",
        "summary": "Sector-based rebase threshold (rebase when crossing sector boundaries)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/HierarchicalCoords",
    "path": "engine/reference/world/HierarchicalCoords.md",
    "source": "engine/world/HierarchicalCoords.js",
    "import": "/engine/world/HierarchicalCoords.js",
    "sourceHash": "fe09aaa59cd014caf938a9601e484489c003fedc8b18871d37bc8785f9d0d6bf",
    "summary": "Represents a position using sector + local coordinates Sector is integer grid position, local is f32-safe offset within sector",
    "exports": [
      {
        "name": "HierarchicalPosition",
        "kind": "class",
        "signature": "class HierarchicalPosition",
        "summary": "Represents a position using sector + local coordinates Sector is integer grid position, local is f32-safe offset within sector"
      },
      {
        "name": "BigHierarchicalPosition",
        "kind": "class",
        "signature": "class BigHierarchicalPosition",
        "summary": "Extended hierarchical position using BigInt for extreme planet scales Use only when sector coordinates exceed MAX_SAFE_SECTOR"
      },
      {
        "name": "getSectorsInRadius",
        "kind": "function",
        "signature": "getSectorsInRadius(center, radiusSectors)",
        "summary": "Get all sector keys within radius of a position"
      },
      {
        "name": "parseSectorKey",
        "kind": "function",
        "signature": "parseSectorKey(key)",
        "summary": "Parse sector key back to coordinates"
      },
      {
        "name": "getChunkKeyHierarchical",
        "kind": "function",
        "signature": "getChunkKeyHierarchical(pos, chunkSize)",
        "summary": "Calculate sector-aligned chunk key Useful for chunk loading that respects sector boundaries"
      },
      {
        "name": "worldToHierarchical",
        "kind": "function",
        "signature": "worldToHierarchical(x, y, z)",
        "summary": "Convert world coordinates to hierarchical"
      },
      {
        "name": "hierarchicalToWorld",
        "kind": "function",
        "signature": "hierarchicalToWorld(pos)",
        "summary": "Convert hierarchical to world coordinates"
      },
      {
        "name": "toCameraSpace",
        "kind": "function",
        "signature": "toCameraSpace(worldPos, cameraPos)",
        "summary": "Get camera-relative coordinates (f32 safe for GPU)"
      },
      {
        "name": "SECTOR_SIZE",
        "kind": "constant",
        "signature": "SECTOR_SIZE",
        "summary": "Size of one sector in world units (10km)"
      },
      {
        "name": "SECTOR_HALF",
        "kind": "constant",
        "signature": "SECTOR_HALF",
        "summary": "Half sector size for boundary checks"
      },
      {
        "name": "SECTOR_INV",
        "kind": "constant",
        "signature": "SECTOR_INV",
        "summary": "Inverse for fast division"
      },
      {
        "name": "MAX_SAFE_SECTOR",
        "kind": "constant",
        "signature": "MAX_SAFE_SECTOR",
        "summary": "Maximum safe integer for sector coords (before BigInt needed)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/PhasorRays",
    "path": "engine/reference/world/PhasorRays.md",
    "source": "engine/world/PhasorRays.js",
    "import": "/engine/world/PhasorRays.js",
    "sourceHash": "f2fc69844626f212945ee7f14c5870528b2cffa8c45fa7842194bf4445769c7c",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "world/PhotonicCrystal",
    "path": "engine/reference/world/PhotonicCrystal.md",
    "source": "engine/world/PhotonicCrystal.js",
    "import": "/engine/world/PhotonicCrystal.js",
    "sourceHash": "036ec70b748b60acb5f8c99b865a9dc373aa683f7b6641d2cbb7a3d1ead5fc6a",
    "summary": "",
    "exports": []
  },
  {
    "schemaVersion": 1,
    "title": "world/PlanetPhysics",
    "path": "engine/reference/world/PlanetPhysics.md",
    "source": "engine/world/PlanetPhysics.js",
    "import": "/engine/world/PlanetPhysics.js",
    "sourceHash": "af875224ea72c42a40fd2b457555f9e8acb3cd507eb42196404ff36b78110a15",
    "summary": "Double-precision 3D vector using hi/lo split",
    "exports": [
      {
        "name": "DoubleVec3",
        "kind": "class",
        "signature": "class DoubleVec3",
        "summary": "Double-precision 3D vector using hi/lo split"
      },
      {
        "name": "Quaternion",
        "kind": "class",
        "signature": "class Quaternion",
        "summary": ""
      },
      {
        "name": "Planet",
        "kind": "class",
        "signature": "class Planet",
        "summary": ""
      },
      {
        "name": "PlanetarySystem",
        "kind": "class",
        "signature": "class PlanetarySystem",
        "summary": ""
      },
      {
        "name": "splitDouble",
        "kind": "function",
        "signature": "splitDouble(value)",
        "summary": "Split a double into hi/lo f32 pair for GPU precision"
      },
      {
        "name": "combineDouble",
        "kind": "function",
        "signature": "combineDouble(hi, lo)",
        "summary": "Combine hi/lo f32 pair back to double"
      },
      {
        "name": "G",
        "kind": "constant",
        "signature": "G",
        "summary": "Gravitational constant (scaled for game)"
      },
      {
        "name": "DEFAULT_PLANET_RADIUS",
        "kind": "constant",
        "signature": "DEFAULT_PLANET_RADIUS",
        "summary": "Default planet radius (180,000 km = 180,000,000 m)"
      },
      {
        "name": "DEFAULT_PLANET_MASS",
        "kind": "constant",
        "signature": "DEFAULT_PLANET_MASS",
        "summary": "Default planet mass (for Earth-like surface gravity)"
      },
      {
        "name": "DEFAULT_ROTATION_PERIOD",
        "kind": "constant",
        "signature": "DEFAULT_ROTATION_PERIOD",
        "summary": "Default rotation period in seconds (24 hours)"
      },
      {
        "name": "MIN_GRAVITY",
        "kind": "constant",
        "signature": "MIN_GRAVITY",
        "summary": "Minimum gravity magnitude (to avoid division issues)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/PlanetaryCoords",
    "path": "engine/reference/world/PlanetaryCoords.md",
    "source": "engine/world/PlanetaryCoords.js",
    "import": "/engine/world/PlanetaryCoords.js",
    "sourceHash": "c43582d5f5f678bf2c1e97b289fea76600421a0b5aa908810d92f68d1dcbf472",
    "summary": "Planetary world configuration",
    "exports": [
      {
        "name": "PlanetaryWorld",
        "kind": "class",
        "signature": "class PlanetaryWorld",
        "summary": "Planetary world configuration"
      },
      {
        "name": "ascProject",
        "kind": "function",
        "signature": "ascProject(u, v)",
        "summary": "ASC (Adjusted Spherified Cube) projection Maps a point on a cube face to a point on a unit sphere"
      },
      {
        "name": "ascInverse",
        "kind": "function",
        "signature": "ascInverse(x, y, z)",
        "summary": "Inverse ASC projection Maps a direction on unit sphere back to cube face coordinates"
      },
      {
        "name": "faceToDirection",
        "kind": "function",
        "signature": "faceToDirection(face, u, v)",
        "summary": "Convert face coordinates to a direction on the unit sphere"
      },
      {
        "name": "planetaryToWorld",
        "kind": "function",
        "signature": "planetaryToWorld(face, shell, u, v, planetRadius = DEFAULT_PLANET_RADIUS)",
        "summary": "Convert planetary coordinates to world position"
      },
      {
        "name": "worldToPlanetary",
        "kind": "function",
        "signature": "worldToPlanetary(x, y, z, planetRadius = DEFAULT_PLANET_RADIUS)",
        "summary": "Convert world position to planetary coordinates"
      },
      {
        "name": "getGravityDirection",
        "kind": "function",
        "signature": "getGravityDirection(x, y, z)",
        "summary": "Get gravity direction at a world position (points toward center)"
      },
      {
        "name": "getUpDirection",
        "kind": "function",
        "signature": "getUpDirection(x, y, z)",
        "summary": "Get \"up\" direction at a world position (away from center)"
      },
      {
        "name": "planetaryChunkKey",
        "kind": "function",
        "signature": "planetaryChunkKey(face, shell, cu, cv)",
        "summary": "Get chunk key for planetary coordinates"
      },
      {
        "name": "parsePlanetaryChunkKey",
        "kind": "function",
        "signature": "parsePlanetaryChunkKey(key)",
        "summary": "Parse planetary chunk key"
      },
      {
        "name": "worldToPlanetaryChunk",
        "kind": "function",
        "signature": "worldToPlanetaryChunk(x, y, z, chunkSize = 32, planetRadius = DEFAULT_PLANET_RADIUS)",
        "summary": "Convert world position to planetary chunk coordinates"
      },
      {
        "name": "FACE",
        "kind": "constant",
        "signature": "FACE",
        "summary": ""
      },
      {
        "name": "FACE_NAMES",
        "kind": "constant",
        "signature": "FACE_NAMES",
        "summary": ""
      },
      {
        "name": "DEFAULT_PLANET_RADIUS",
        "kind": "constant",
        "signature": "DEFAULT_PLANET_RADIUS",
        "summary": ""
      },
      {
        "name": "SHELL_THICKNESS",
        "kind": "constant",
        "signature": "SHELL_THICKNESS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/SurfaceAttachment",
    "path": "engine/reference/world/SurfaceAttachment.md",
    "source": "engine/world/SurfaceAttachment.js",
    "import": "/engine/world/SurfaceAttachment.js",
    "sourceHash": "4ddb6cf61d83b7dd2002bb4096e293634a6b6faa7261a1341067e98fbb250d20",
    "summary": "Represents a point on a surface where attachment occurs",
    "exports": [
      {
        "name": "AttachmentPoint",
        "kind": "class",
        "signature": "class AttachmentPoint",
        "summary": "Represents a point on a surface where attachment occurs"
      },
      {
        "name": "SurfaceAttachment",
        "kind": "class",
        "signature": "class SurfaceAttachment",
        "summary": "Manages attachment state for a single entity"
      },
      {
        "name": "AttachmentManager",
        "kind": "class",
        "signature": "class AttachmentManager",
        "summary": "Manages attachments for multiple entities"
      },
      {
        "name": "AttachmentType",
        "kind": "constant",
        "signature": "AttachmentType",
        "summary": "Attachment types"
      },
      {
        "name": "BreakCondition",
        "kind": "constant",
        "signature": "BreakCondition",
        "summary": "Break conditions"
      },
      {
        "name": "DEFAULT_PARAMS",
        "kind": "constant",
        "signature": "DEFAULT_PARAMS",
        "summary": "Default attachment parameters"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/WorldSchema",
    "path": "engine/reference/world/WorldSchema.md",
    "source": "engine/world/WorldSchema.js",
    "import": "/engine/world/WorldSchema.js",
    "sourceHash": "cccbf358396686f6b7d0fb96d0bb3fe53bbab3356825106ddad65a45d82caf46",
    "summary": "Get biome type ID from name",
    "exports": [
      {
        "name": "getBiomeTypeId",
        "kind": "function",
        "signature": "getBiomeTypeId(biomeName)",
        "summary": "Get biome type ID from name"
      },
      {
        "name": "getBiomeTypeName",
        "kind": "function",
        "signature": "getBiomeTypeName(biomeId)",
        "summary": "Get biome type name from ID"
      },
      {
        "name": "validateTerrain",
        "kind": "function",
        "signature": "validateTerrain(config)",
        "summary": "Validate terrain config"
      },
      {
        "name": "validateWeather",
        "kind": "function",
        "signature": "validateWeather(config)",
        "summary": "Validate weather config"
      },
      {
        "name": "validateWorldConfig",
        "kind": "function",
        "signature": "validateWorldConfig(config)",
        "summary": "Validate world config"
      },
      {
        "name": "createDefaultTerrain",
        "kind": "function",
        "signature": "createDefaultTerrain()",
        "summary": "Create default terrain config"
      },
      {
        "name": "createDefaultWeather",
        "kind": "function",
        "signature": "createDefaultWeather()",
        "summary": "Create default weather"
      },
      {
        "name": "createDefaultWorldConfig",
        "kind": "function",
        "signature": "createDefaultWorldConfig(seed = Date.now()",
        "summary": "Create default world config"
      },
      {
        "name": "createClimateFromPosition",
        "kind": "function",
        "signature": "createClimateFromPosition(latitude, altitude, oceanDistance)",
        "summary": "Create climate from biome position"
      },
      {
        "name": "getBiomeFromClimate",
        "kind": "function",
        "signature": "getBiomeFromClimate(climate)",
        "summary": "Get biome from climate"
      },
      {
        "name": "getWeatherPreset",
        "kind": "function",
        "signature": "getWeatherPreset(typeName)",
        "summary": "Get weather preset"
      },
      {
        "name": "getTimePhase",
        "kind": "function",
        "signature": "getTimePhase(hour)",
        "summary": "Get time phase for hour"
      },
      {
        "name": "BIOME_TYPES",
        "kind": "constant",
        "signature": "BIOME_TYPES",
        "summary": "Biome type definitions"
      },
      {
        "name": "CLIMATE_PARAMS",
        "kind": "constant",
        "signature": "CLIMATE_PARAMS",
        "summary": "Climate parameter ranges (0-1)"
      },
      {
        "name": "CLIMATE_SCHEMA",
        "kind": "constant",
        "signature": "CLIMATE_SCHEMA",
        "summary": "Climate schema for biome selection"
      },
      {
        "name": "BIOME_SCHEMA",
        "kind": "constant",
        "signature": "BIOME_SCHEMA",
        "summary": "Biome definition schema"
      },
      {
        "name": "NOISE_SCHEMA",
        "kind": "constant",
        "signature": "NOISE_SCHEMA",
        "summary": "Noise parameters schema"
      },
      {
        "name": "EROSION_TYPES",
        "kind": "constant",
        "signature": "EROSION_TYPES",
        "summary": "Erosion types"
      },
      {
        "name": "TERRAIN_SCHEMA",
        "kind": "constant",
        "signature": "TERRAIN_SCHEMA",
        "summary": "Terrain generation schema"
      },
      {
        "name": "CHUNK_SIZES",
        "kind": "constant",
        "signature": "CHUNK_SIZES",
        "summary": "Chunk sizes"
      },
      {
        "name": "ZONE_TYPES",
        "kind": "constant",
        "signature": "ZONE_TYPES",
        "summary": "Zone types for streaming"
      },
      {
        "name": "CHUNK_STREAMING_SCHEMA",
        "kind": "constant",
        "signature": "CHUNK_STREAMING_SCHEMA",
        "summary": "Chunk streaming schema"
      },
      {
        "name": "WEATHER_TYPES",
        "kind": "constant",
        "signature": "WEATHER_TYPES",
        "summary": "Weather types"
      },
      {
        "name": "WEATHER_SCHEMA",
        "kind": "constant",
        "signature": "WEATHER_SCHEMA",
        "summary": "Weather schema"
      },
      {
        "name": "TIME_PHASES",
        "kind": "constant",
        "signature": "TIME_PHASES",
        "summary": "Time of day phases"
      },
      {
        "name": "WORLD_TIME_SCHEMA",
        "kind": "constant",
        "signature": "WORLD_TIME_SCHEMA",
        "summary": "World time schema"
      },
      {
        "name": "WORLD_CONFIG_SCHEMA",
        "kind": "constant",
        "signature": "WORLD_CONFIG_SCHEMA",
        "summary": "Complete world configuration"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/WorldTime",
    "path": "engine/reference/world/WorldTime.md",
    "source": "engine/world/WorldTime.js",
    "import": "/engine/world/WorldTime.js",
    "sourceHash": "9c0c9af5250b975db8cefabc83d927f799e3253f118622202b252da498855515",
    "summary": "WorldTime.js - Comprehensive Temporal Architecture Implements robust server-side time tracking based on: - Tick-based architecture with 64-bit precision (BigInt) - Hierarchical Timing Wheels for O(1) event scheduling - Custom calendar system derived from total ticks - Timescale ratios (game time vs real time) - Offline progression support - Network clock synchronization Reference: \"Temporal Architecture in Virtual Environments\"",
    "exports": [
      {
        "name": "GameDate",
        "kind": "class",
        "signature": "class GameDate",
        "summary": "GameDate - A view of the world time as calendar date Never store date components directly - always derive from ticks"
      },
      {
        "name": "HierarchicalTimingWheel",
        "kind": "class",
        "signature": "class HierarchicalTimingWheel",
        "summary": "HierarchicalTimingWheel - Multi-level timing wheel for efficient scheduling Level 0: Ticks (20 slots = 1 second at 20 TPS) Level 1: Seconds (60 slots = 1 minute) Level 2: Minutes (60 slots = 1 hour) Level 3: Hours (24 slots = 1 day) Level 4: Days (28 slots = 1 month)"
      },
      {
        "name": "WorldTimeSystem",
        "kind": "class",
        "signature": "class WorldTimeSystem",
        "summary": "WorldTimeSystem - Main time tracking system Features: - 64-bit tick precision - Configurable timescale - Event scheduling via timing wheel - Offline progression - Network sync support"
      },
      {
        "name": "TICKS_PER_SECOND",
        "kind": "constant",
        "signature": "TICKS_PER_SECOND",
        "summary": ""
      },
      {
        "name": "TICK_DURATION_MS",
        "kind": "constant",
        "signature": "TICK_DURATION_MS",
        "summary": "Tick duration in milliseconds"
      },
      {
        "name": "PRECISION_TICKS_PER_SECOND",
        "kind": "constant",
        "signature": "PRECISION_TICKS_PER_SECOND",
        "summary": "High-precision ticks (100-nanosecond intervals, like .NET DateTime.Ticks)"
      },
      {
        "name": "TIMESCALE",
        "kind": "constant",
        "signature": "TIMESCALE",
        "summary": "Timescale presets (game:real ratios)"
      },
      {
        "name": "CALENDAR_CONFIG",
        "kind": "constant",
        "signature": "CALENDAR_CONFIG",
        "summary": "Calendar configuration"
      },
      {
        "name": "SECONDS_PER_DAY",
        "kind": "constant",
        "signature": "SECONDS_PER_DAY",
        "summary": "Derived constants"
      },
      {
        "name": "DAYS_PER_YEAR",
        "kind": "constant",
        "signature": "DAYS_PER_YEAR",
        "summary": ""
      },
      {
        "name": "TICKS_PER_DAY",
        "kind": "constant",
        "signature": "TICKS_PER_DAY",
        "summary": ""
      },
      {
        "name": "TICKS_PER_YEAR",
        "kind": "constant",
        "signature": "TICKS_PER_YEAR",
        "summary": ""
      },
      {
        "name": "MOON_PHASE",
        "kind": "constant",
        "signature": "MOON_PHASE",
        "summary": "Moon phases"
      },
      {
        "name": "SEASON",
        "kind": "constant",
        "signature": "SEASON",
        "summary": "Season names"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/ZoneManager",
    "path": "engine/reference/world/ZoneManager.md",
    "source": "engine/world/ZoneManager.js",
    "import": "/engine/world/ZoneManager.js",
    "sourceHash": "d554ae82dc2af776ceef23a2d3fff73a1510bc845d732270719d118f48a268be",
    "summary": "Represents a single zone in the world",
    "exports": [
      {
        "name": "Zone",
        "kind": "class",
        "signature": "class Zone",
        "summary": "Represents a single zone in the world"
      },
      {
        "name": "ZoneManager",
        "kind": "class",
        "signature": "class ZoneManager",
        "summary": "Manages all zones in the world"
      },
      {
        "name": "ZONE_TYPE",
        "kind": "constant",
        "signature": "ZONE_TYPE",
        "summary": "Zone types"
      },
      {
        "name": "ZONE_SHAPE",
        "kind": "constant",
        "signature": "ZONE_SHAPE",
        "summary": "Zone shapes"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/generation/GPUWorldGenerator",
    "path": "engine/reference/world/generation/GPUWorldGenerator.md",
    "source": "engine/world/generation/GPUWorldGenerator.js",
    "import": "/engine/world/generation/GPUWorldGenerator.js",
    "sourceHash": "55a71c84f3c2ebda639c8a7acb7b8aa52e45f750d820f4afad38edbd28fae508",
    "summary": "",
    "exports": [
      {
        "name": "GPUWorldGenerator",
        "kind": "class",
        "signature": "class GPUWorldGenerator",
        "summary": ""
      },
      {
        "name": "NOISE_LIBRARY_WGSL",
        "kind": "constant",
        "signature": "NOISE_LIBRARY_WGSL",
        "summary": ""
      },
      {
        "name": "CLIMATE_BIOME_WGSL",
        "kind": "constant",
        "signature": "CLIMATE_BIOME_WGSL",
        "summary": ""
      },
      {
        "name": "CAVE_WGSL",
        "kind": "constant",
        "signature": "CAVE_WGSL",
        "summary": ""
      },
      {
        "name": "STRUCTURE_WGSL",
        "kind": "constant",
        "signature": "STRUCTURE_WGSL",
        "summary": ""
      },
      {
        "name": "TERRAIN_GEN_SHADER",
        "kind": "constant",
        "signature": "TERRAIN_GEN_SHADER",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/generation/HydraulicErosion",
    "path": "engine/reference/world/generation/HydraulicErosion.md",
    "source": "engine/world/generation/HydraulicErosion.js",
    "import": "/engine/world/generation/HydraulicErosion.js",
    "sourceHash": "916f93618a5067c0429e05f2f5364762290b3a062233b404bf25943a299de8cd",
    "summary": "HydraulicErosion - GPU particle-based erosion with momentum",
    "exports": [
      {
        "name": "HydraulicErosion",
        "kind": "class",
        "signature": "class HydraulicErosion",
        "summary": "HydraulicErosion - GPU particle-based erosion with momentum"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/generation/LayerMap",
    "path": "engine/reference/world/generation/LayerMap.md",
    "source": "engine/world/generation/LayerMap.js",
    "import": "/engine/world/generation/LayerMap.js",
    "sourceHash": "6d15bee4cf217f81cf0ae7be0e391f9a0136b55ee98dad415660c1eee1b7c0ab",
    "summary": "LayerMap - GPU-resident stratigraphic terrain data structure",
    "exports": [
      {
        "name": "LayerMap",
        "kind": "class",
        "signature": "class LayerMap",
        "summary": "LayerMap - GPU-resident stratigraphic terrain data structure"
      },
      {
        "name": "MATERIAL_ID",
        "kind": "constant",
        "signature": "MATERIAL_ID",
        "summary": ""
      },
      {
        "name": "MATERIAL_PROPERTIES",
        "kind": "constant",
        "signature": "MATERIAL_PROPERTIES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/generation/ProceduralTreeGenerator",
    "path": "engine/reference/world/generation/ProceduralTreeGenerator.md",
    "source": "engine/world/generation/ProceduralTreeGenerator.js",
    "import": "/engine/world/generation/ProceduralTreeGenerator.js",
    "sourceHash": "2a7c938c6d4e8dda1610a9ec68332d5f5057be0c35311a8cc22f479ffd77d27a",
    "summary": "GPU Grass Instancer - Generates millions of grass blades via mesh shaders INTEGRATION: - Uses shared particle system for grass blade physics - Uses SpatialHashCompute for wind field queries - Uses WindSimulation for dynamic wind effects Uses indirect instancing with per-blade data generated on GPU: - Position jittered from grid - Height/width variation - Wind animation parameters - LOD based on camera distance",
    "exports": [
      {
        "name": "ProceduralTreeGenerator",
        "kind": "class",
        "signature": "class ProceduralTreeGenerator",
        "summary": ""
      },
      {
        "name": "GrassInstancer",
        "kind": "class",
        "signature": "class GrassInstancer",
        "summary": "GPU Grass Instancer - Generates millions of grass blades via mesh shaders INTEGRATION: - Uses shared particle system for grass blade physics - Uses SpatialHashCompute for wind field queries - Uses WindSimulation for dynamic wind effects Uses indirect instancing with per-blade data generated on GPU: - Position jittered from grid - Height/width variation - Wind animation parameters - LOD based on camera distance"
      },
      {
        "name": "proceduralTreePositionHash3D",
        "kind": "function",
        "signature": "proceduralTreePositionHash3D(x, y, z)",
        "summary": "Hash function for position-based determinism"
      },
      {
        "name": "proceduralTreeDefaultSeed2D",
        "kind": "function",
        "signature": "proceduralTreeDefaultSeed2D(x, z)",
        "summary": ""
      },
      {
        "name": "grassPatchBladeSeed3D",
        "kind": "function",
        "signature": "grassPatchBladeSeed3D(patchX, patchZ, bladeIndex)",
        "summary": ""
      },
      {
        "name": "TREE_SPECIES",
        "kind": "constant",
        "signature": "TREE_SPECIES",
        "summary": ""
      },
      {
        "name": "BIOME_TREE_DENSITY",
        "kind": "constant",
        "signature": "BIOME_TREE_DENSITY",
        "summary": ""
      },
      {
        "name": "FLUFFY_FOLIAGE_SHADER",
        "kind": "constant",
        "signature": "FLUFFY_FOLIAGE_SHADER",
        "summary": ""
      },
      {
        "name": "GRASS_TYPES",
        "kind": "constant",
        "signature": "GRASS_TYPES",
        "summary": ""
      },
      {
        "name": "STYLIZED_GRASS_SHADER",
        "kind": "constant",
        "signature": "STYLIZED_GRASS_SHADER",
        "summary": ""
      },
      {
        "name": "FLUFFY_GRASS_SHADER",
        "kind": "constant",
        "signature": "FLUFFY_GRASS_SHADER",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/generation/TectonicSimulation",
    "path": "engine/reference/world/generation/TectonicSimulation.md",
    "source": "engine/world/generation/TectonicSimulation.js",
    "import": "/engine/world/generation/TectonicSimulation.js",
    "sourceHash": "47436cdd589d77b4126d5fe2d00bb1b77f5fd446e11a5cbdaba46da221850ff1",
    "summary": "TectonicSimulation - GPU plate tectonics using clustered convection",
    "exports": [
      {
        "name": "TectonicSimulation",
        "kind": "class",
        "signature": "class TectonicSimulation",
        "summary": "TectonicSimulation - GPU plate tectonics using clustered convection"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/generation/ThermalErosion",
    "path": "engine/reference/world/generation/ThermalErosion.md",
    "source": "engine/world/generation/ThermalErosion.js",
    "import": "/engine/world/generation/ThermalErosion.js",
    "sourceHash": "48afd7165c4d4bf422887822902f0144f8e39929cfd46e2e8dca121a18e7d799",
    "summary": "ThermalErosion.js - GPU Material-Specific Talus Angle Erosion Implements thermal erosion (slippage) with: - Per-material talus angles (angle of repose) - Mass-conserving material transfer between cells - Support for LayerMap stratigraphy Based on: SoilMachine thermal erosion Key concept: If slope > tan(θ_material), mass transfers downhill - Sand: ~30° (gentle slopes) - Rock: ~85° (near-vertical cliffs)",
    "exports": [
      {
        "name": "ThermalErosion",
        "kind": "class",
        "signature": "class ThermalErosion",
        "summary": "ThermalErosion - GPU material-specific talus angle erosion"
      },
      {
        "name": "TALUS_ANGLES",
        "kind": "constant",
        "signature": "TALUS_ANGLES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/generation/UnifiedTerrainPipeline",
    "path": "engine/reference/world/generation/UnifiedTerrainPipeline.md",
    "source": "engine/world/generation/UnifiedTerrainPipeline.js",
    "import": "/engine/world/generation/UnifiedTerrainPipeline.js",
    "sourceHash": "1cef600c521069f2be4faf138a0a7d398e1ad96815566f99c35fcd33bdfcb19a",
    "summary": "UnifiedTerrainPipeline.js - Complete Procedural Geomorphology System Orchestrates the full terrain generation and simulation pipeline: 1. TECTONICS (Initialization Phase) - Clustered Convection plate simulation - JFA Voronoi for plate boundaries - Subduction/collision → bedrock heightmap 2. HYDROLOGY (Real-time Simulation) - Momentum-based particle erosion - Meandering river formation - Sediment transport & deposition 3. STRATIGRAPHY (LayerMap) - Multi-layer terrain storage - Per-material properties - Talus angle enforcement 4. THERMAL EROSION (Real-time) - Material-specific slippage - Cliff formation - Scree slopes Based on: Nick McDonald's research (Clustered Convection, SimpleHydrology, SoilMachine)",
    "exports": [
      {
        "name": "UnifiedTerrainPipeline",
        "kind": "class",
        "signature": "class UnifiedTerrainPipeline",
        "summary": "UnifiedTerrainPipeline - Orchestrates all terrain generation systems"
      },
      {
        "name": "HydraulicErosion",
        "kind": "re-export",
        "signature": "HydraulicErosion",
        "summary": ""
      },
      {
        "name": "LayerMap",
        "kind": "re-export",
        "signature": "LayerMap",
        "summary": ""
      },
      {
        "name": "MATERIAL_ID",
        "kind": "re-export",
        "signature": "MATERIAL_ID",
        "summary": ""
      },
      {
        "name": "MATERIAL_PROPERTIES",
        "kind": "re-export",
        "signature": "MATERIAL_PROPERTIES",
        "summary": ""
      },
      {
        "name": "TALUS_ANGLES",
        "kind": "re-export",
        "signature": "TALUS_ANGLES",
        "summary": ""
      },
      {
        "name": "TectonicSimulation",
        "kind": "re-export",
        "signature": "TectonicSimulation",
        "summary": ""
      },
      {
        "name": "ThermalErosion",
        "kind": "re-export",
        "signature": "ThermalErosion",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/generation/VoronoiTextureBlend",
    "path": "engine/reference/world/generation/VoronoiTextureBlend.md",
    "source": "engine/world/generation/VoronoiTextureBlend.js",
    "import": "/engine/world/generation/VoronoiTextureBlend.js",
    "sourceHash": "5dd8b1b606daad1c0f2179082296d9f50da78dc06947b546ac564384e738755c",
    "summary": "Sample Voronoi data at a world position (CPU fallback)",
    "exports": [
      {
        "name": "VoronoiTextureBlend",
        "kind": "class",
        "signature": "class VoronoiTextureBlend",
        "summary": ""
      },
      {
        "name": "voronoiTextureVariationHash",
        "kind": "function",
        "signature": "voronoiTextureVariationHash(x, z, index)",
        "summary": ""
      },
      {
        "name": "sampleVoronoi",
        "kind": "function",
        "signature": "sampleVoronoi(centroids, x, z)",
        "summary": "Sample Voronoi data at a world position (CPU fallback)"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/generation/WindErosion",
    "path": "engine/reference/world/generation/WindErosion.md",
    "source": "engine/world/generation/WindErosion.js",
    "import": "/engine/world/generation/WindErosion.js",
    "sourceHash": "37b72e2bb29df3f5fa606be423fa8a67c6be10504b0be065fd94d17b6eae2702",
    "summary": "",
    "exports": [
      {
        "name": "WindErosion",
        "kind": "class",
        "signature": "class WindErosion",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/generation/WorldGenerator",
    "path": "engine/reference/world/generation/WorldGenerator.md",
    "source": "engine/world/generation/WorldGenerator.js",
    "import": "/engine/world/generation/WorldGenerator.js",
    "sourceHash": "cd440250acccdf5d9fca827629708bfd48b449e073f66f7baa4209f51965a444",
    "summary": "",
    "exports": [
      {
        "name": "WorldGenerator",
        "kind": "class",
        "signature": "class WorldGenerator",
        "summary": ""
      },
      {
        "name": "worldGeneratorHash3D",
        "kind": "function",
        "signature": "worldGeneratorHash3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "worldGeneratorDungeonSeed2D",
        "kind": "function",
        "signature": "worldGeneratorDungeonSeed2D(centerX, centerZ)",
        "summary": ""
      },
      {
        "name": "BIOME",
        "kind": "constant",
        "signature": "BIOME",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/generation/WorldMapGenerator",
    "path": "engine/reference/world/generation/WorldMapGenerator.md",
    "source": "engine/world/generation/WorldMapGenerator.js",
    "import": "/engine/world/generation/WorldMapGenerator.js",
    "sourceHash": "f1406179c07c55b03a758f3c35b52cb9aa0d63d391ef7c2f68a94b3c44c5cef7",
    "summary": "WorldMapGenerator.js - Full World Map Preview Generator Generates a top-down world map from all loaded chunks, similar to Minecraft's world maps. Used for save file previews. Features: - Scans all chunks to build a complete heightmap - Color-codes terrain by material type - Height-based shading for 3D effect - Exports as PNG data URL or blob",
    "exports": [
      {
        "name": "WorldMapGenerator",
        "kind": "class",
        "signature": "class WorldMapGenerator",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/generation/index",
    "path": "engine/reference/world/generation/index.md",
    "source": "engine/world/generation/index.js",
    "import": "/engine/world/generation/index.js",
    "sourceHash": "f666d6e4c7badf237fefa5282a9bab5c8fe38a30633dc44686dd9c060e9b27b4",
    "summary": "",
    "exports": [
      {
        "name": "BIOME",
        "kind": "re-export",
        "signature": "BIOME",
        "summary": ""
      },
      {
        "name": "GPUWorldGenerator",
        "kind": "re-export",
        "signature": "GPUWorldGenerator",
        "summary": ""
      },
      {
        "name": "HydraulicErosion",
        "kind": "re-export",
        "signature": "HydraulicErosion",
        "summary": ""
      },
      {
        "name": "LayerMap",
        "kind": "re-export",
        "signature": "LayerMap",
        "summary": ""
      },
      {
        "name": "ProceduralTreeGenerator",
        "kind": "re-export",
        "signature": "ProceduralTreeGenerator",
        "summary": ""
      },
      {
        "name": "TectonicSimulation",
        "kind": "re-export",
        "signature": "TectonicSimulation",
        "summary": ""
      },
      {
        "name": "ThermalErosion",
        "kind": "re-export",
        "signature": "ThermalErosion",
        "summary": ""
      },
      {
        "name": "UnifiedTerrainPipeline",
        "kind": "re-export",
        "signature": "UnifiedTerrainPipeline",
        "summary": ""
      },
      {
        "name": "VoronoiTextureBlend",
        "kind": "re-export",
        "signature": "VoronoiTextureBlend",
        "summary": ""
      },
      {
        "name": "WindErosion",
        "kind": "re-export",
        "signature": "WindErosion",
        "summary": ""
      },
      {
        "name": "WorldGenerator",
        "kind": "re-export",
        "signature": "WorldGenerator",
        "summary": ""
      },
      {
        "name": "WorldMapGenerator",
        "kind": "re-export",
        "signature": "WorldMapGenerator",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/index",
    "path": "engine/reference/world/index.md",
    "source": "engine/world/index.js",
    "import": "/engine/world/index.js",
    "sourceHash": "425623b87c4f8abd264353ce451d1a5e14fdcf89a0767ca1c66e87ccd27a66ec",
    "summary": "",
    "exports": [
      {
        "name": "BIOME_SCHEMA",
        "kind": "re-export",
        "signature": "BIOME_SCHEMA",
        "summary": ""
      },
      {
        "name": "BIOME_TYPES",
        "kind": "re-export",
        "signature": "BIOME_TYPES",
        "summary": ""
      },
      {
        "name": "BigHierarchicalPosition",
        "kind": "re-export",
        "signature": "BigHierarchicalPosition",
        "summary": ""
      },
      {
        "name": "CALENDAR_CONFIG",
        "kind": "re-export",
        "signature": "CALENDAR_CONFIG",
        "summary": ""
      },
      {
        "name": "CHUNK_SIZES",
        "kind": "re-export",
        "signature": "CHUNK_SIZES",
        "summary": ""
      },
      {
        "name": "CHUNK_STREAMING_SCHEMA",
        "kind": "re-export",
        "signature": "CHUNK_STREAMING_SCHEMA",
        "summary": ""
      },
      {
        "name": "CLIMATE_PARAMS",
        "kind": "re-export",
        "signature": "CLIMATE_PARAMS",
        "summary": ""
      },
      {
        "name": "CLIMATE_SCHEMA",
        "kind": "re-export",
        "signature": "CLIMATE_SCHEMA",
        "summary": ""
      },
      {
        "name": "DEFAULT_PLANET_MASS",
        "kind": "re-export",
        "signature": "DEFAULT_PLANET_MASS",
        "summary": ""
      },
      {
        "name": "DEFAULT_PLANET_RADIUS",
        "kind": "re-export",
        "signature": "DEFAULT_PLANET_RADIUS",
        "summary": ""
      },
      {
        "name": "DEFAULT_ROTATION_PERIOD",
        "kind": "re-export",
        "signature": "DEFAULT_ROTATION_PERIOD",
        "summary": ""
      },
      {
        "name": "DoubleVec3",
        "kind": "re-export",
        "signature": "DoubleVec3",
        "summary": ""
      },
      {
        "name": "EROSION_TYPES",
        "kind": "re-export",
        "signature": "EROSION_TYPES",
        "summary": ""
      },
      {
        "name": "FACE",
        "kind": "re-export",
        "signature": "FACE",
        "summary": ""
      },
      {
        "name": "FloatingOrigin",
        "kind": "re-export",
        "signature": "FloatingOrigin",
        "summary": ""
      },
      {
        "name": "GRAVITATIONAL_CONSTANT",
        "kind": "re-export",
        "signature": "GRAVITATIONAL_CONSTANT",
        "summary": ""
      },
      {
        "name": "GameDate",
        "kind": "re-export",
        "signature": "GameDate",
        "summary": ""
      },
      {
        "name": "HierarchicalPosition",
        "kind": "re-export",
        "signature": "HierarchicalPosition",
        "summary": ""
      },
      {
        "name": "HierarchicalTimingWheel",
        "kind": "re-export",
        "signature": "HierarchicalTimingWheel",
        "summary": ""
      },
      {
        "name": "MAX_SAFE_SECTOR",
        "kind": "re-export",
        "signature": "MAX_SAFE_SECTOR",
        "summary": ""
      },
      {
        "name": "MIN_GRAVITY",
        "kind": "re-export",
        "signature": "MIN_GRAVITY",
        "summary": ""
      },
      {
        "name": "MOON_PHASE",
        "kind": "re-export",
        "signature": "MOON_PHASE",
        "summary": ""
      },
      {
        "name": "NOISE_SCHEMA",
        "kind": "re-export",
        "signature": "NOISE_SCHEMA",
        "summary": ""
      },
      {
        "name": "Planet",
        "kind": "re-export",
        "signature": "Planet",
        "summary": ""
      },
      {
        "name": "PlanetQuaternion",
        "kind": "re-export",
        "signature": "PlanetQuaternion",
        "summary": ""
      },
      {
        "name": "PlanetaryCoords",
        "kind": "re-export",
        "signature": "PlanetaryCoords",
        "summary": ""
      },
      {
        "name": "PlanetarySystem",
        "kind": "re-export",
        "signature": "PlanetarySystem",
        "summary": ""
      },
      {
        "name": "PlanetaryWorld",
        "kind": "re-export",
        "signature": "PlanetaryWorld",
        "summary": ""
      },
      {
        "name": "REBASE_SNAP",
        "kind": "re-export",
        "signature": "REBASE_SNAP",
        "summary": ""
      },
      {
        "name": "REBASE_THRESHOLD",
        "kind": "re-export",
        "signature": "REBASE_THRESHOLD",
        "summary": ""
      },
      {
        "name": "SEASON",
        "kind": "re-export",
        "signature": "SEASON",
        "summary": ""
      },
      {
        "name": "SECTOR_HALF",
        "kind": "re-export",
        "signature": "SECTOR_HALF",
        "summary": ""
      },
      {
        "name": "SECTOR_INV",
        "kind": "re-export",
        "signature": "SECTOR_INV",
        "summary": ""
      },
      {
        "name": "SECTOR_SIZE",
        "kind": "re-export",
        "signature": "SECTOR_SIZE",
        "summary": ""
      },
      {
        "name": "SHELL_THICKNESS",
        "kind": "re-export",
        "signature": "SHELL_THICKNESS",
        "summary": ""
      },
      {
        "name": "SurfaceAttachment",
        "kind": "re-export",
        "signature": "SurfaceAttachment",
        "summary": ""
      },
      {
        "name": "TERRAIN_SCHEMA",
        "kind": "re-export",
        "signature": "TERRAIN_SCHEMA",
        "summary": ""
      },
      {
        "name": "TICKS_PER_SECOND",
        "kind": "re-export",
        "signature": "TICKS_PER_SECOND",
        "summary": ""
      },
      {
        "name": "TICK_DURATION_MS",
        "kind": "re-export",
        "signature": "TICK_DURATION_MS",
        "summary": ""
      },
      {
        "name": "TIMESCALE",
        "kind": "re-export",
        "signature": "TIMESCALE",
        "summary": ""
      },
      {
        "name": "TIME_PHASES",
        "kind": "re-export",
        "signature": "TIME_PHASES",
        "summary": ""
      },
      {
        "name": "WEATHER_SCHEMA",
        "kind": "re-export",
        "signature": "WEATHER_SCHEMA",
        "summary": ""
      },
      {
        "name": "WEATHER_TYPES",
        "kind": "re-export",
        "signature": "WEATHER_TYPES",
        "summary": ""
      },
      {
        "name": "WORLD_CONFIG_SCHEMA",
        "kind": "re-export",
        "signature": "WORLD_CONFIG_SCHEMA",
        "summary": ""
      },
      {
        "name": "WORLD_TIME_SCHEMA",
        "kind": "re-export",
        "signature": "WORLD_TIME_SCHEMA",
        "summary": ""
      },
      {
        "name": "WorldTime",
        "kind": "re-export",
        "signature": "WorldTime",
        "summary": ""
      },
      {
        "name": "WorldTimeSystem",
        "kind": "re-export",
        "signature": "WorldTimeSystem",
        "summary": ""
      },
      {
        "name": "ZONE_TYPES",
        "kind": "re-export",
        "signature": "ZONE_TYPES",
        "summary": ""
      },
      {
        "name": "ZoneManager",
        "kind": "re-export",
        "signature": "ZoneManager",
        "summary": ""
      },
      {
        "name": "ascInverse",
        "kind": "re-export",
        "signature": "ascInverse",
        "summary": ""
      },
      {
        "name": "ascProject",
        "kind": "re-export",
        "signature": "ascProject",
        "summary": ""
      },
      {
        "name": "combineDouble",
        "kind": "re-export",
        "signature": "combineDouble",
        "summary": ""
      },
      {
        "name": "createClimateFromPosition",
        "kind": "re-export",
        "signature": "createClimateFromPosition",
        "summary": ""
      },
      {
        "name": "createDefaultTerrain",
        "kind": "re-export",
        "signature": "createDefaultTerrain",
        "summary": ""
      },
      {
        "name": "createDefaultWeather",
        "kind": "re-export",
        "signature": "createDefaultWeather",
        "summary": ""
      },
      {
        "name": "createDefaultWorldConfig",
        "kind": "re-export",
        "signature": "createDefaultWorldConfig",
        "summary": ""
      },
      {
        "name": "faceToDirection",
        "kind": "re-export",
        "signature": "faceToDirection",
        "summary": ""
      },
      {
        "name": "getBiomeFromClimate",
        "kind": "re-export",
        "signature": "getBiomeFromClimate",
        "summary": ""
      },
      {
        "name": "getBiomeTypeId",
        "kind": "re-export",
        "signature": "getBiomeTypeId",
        "summary": ""
      },
      {
        "name": "getBiomeTypeName",
        "kind": "re-export",
        "signature": "getBiomeTypeName",
        "summary": ""
      },
      {
        "name": "getChunkKeyHierarchical",
        "kind": "re-export",
        "signature": "getChunkKeyHierarchical",
        "summary": ""
      },
      {
        "name": "getGravityDirection",
        "kind": "re-export",
        "signature": "getGravityDirection",
        "summary": ""
      },
      {
        "name": "getSectorsInRadius",
        "kind": "re-export",
        "signature": "getSectorsInRadius",
        "summary": ""
      },
      {
        "name": "getTimePhase",
        "kind": "re-export",
        "signature": "getTimePhase",
        "summary": ""
      },
      {
        "name": "getUpDirection",
        "kind": "re-export",
        "signature": "getUpDirection",
        "summary": ""
      },
      {
        "name": "getWeatherPreset",
        "kind": "re-export",
        "signature": "getWeatherPreset",
        "summary": ""
      },
      {
        "name": "hierarchicalToWorld",
        "kind": "re-export",
        "signature": "hierarchicalToWorld",
        "summary": ""
      },
      {
        "name": "parsePlanetaryChunkKey",
        "kind": "re-export",
        "signature": "parsePlanetaryChunkKey",
        "summary": ""
      },
      {
        "name": "parseSectorKey",
        "kind": "re-export",
        "signature": "parseSectorKey",
        "summary": ""
      },
      {
        "name": "planetaryChunkKey",
        "kind": "re-export",
        "signature": "planetaryChunkKey",
        "summary": ""
      },
      {
        "name": "planetaryToWorld",
        "kind": "re-export",
        "signature": "planetaryToWorld",
        "summary": ""
      },
      {
        "name": "shiftObjects",
        "kind": "re-export",
        "signature": "shiftObjects",
        "summary": ""
      },
      {
        "name": "shiftPosition",
        "kind": "re-export",
        "signature": "shiftPosition",
        "summary": ""
      },
      {
        "name": "splitDouble",
        "kind": "re-export",
        "signature": "splitDouble",
        "summary": ""
      },
      {
        "name": "toCameraSpace",
        "kind": "re-export",
        "signature": "toCameraSpace",
        "summary": ""
      },
      {
        "name": "validateTerrain",
        "kind": "re-export",
        "signature": "validateTerrain",
        "summary": ""
      },
      {
        "name": "validateWeather",
        "kind": "re-export",
        "signature": "validateWeather",
        "summary": ""
      },
      {
        "name": "validateWorldConfig",
        "kind": "re-export",
        "signature": "validateWorldConfig",
        "summary": ""
      },
      {
        "name": "worldToHierarchical",
        "kind": "re-export",
        "signature": "worldToHierarchical",
        "summary": ""
      },
      {
        "name": "worldToPlanetary",
        "kind": "re-export",
        "signature": "worldToPlanetary",
        "summary": ""
      },
      {
        "name": "worldToPlanetaryChunk",
        "kind": "re-export",
        "signature": "worldToPlanetaryChunk",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/storage/ChunkNetworking",
    "path": "engine/reference/world/storage/ChunkNetworking.md",
    "source": "engine/world/storage/ChunkNetworking.js",
    "import": "/engine/world/storage/ChunkNetworking.js",
    "sourceHash": "96f641211f124b04a23db9b283de4103709b57660ef661dae4e2c437f5a50d80",
    "summary": "Versioned multiplayer chunk synchronization with legacy read compatibility. V1 remains the write format during the expand phase. V1, V2, and the original unversioned response shape can be read, allowing rolling upgrades without relabelling or discarding old traffic.",
    "exports": [
      {
        "name": "ChunkNetworking",
        "kind": "class",
        "signature": "class ChunkNetworking",
        "summary": ""
      },
      {
        "name": "CHUNK_NETWORK_PROTOCOL",
        "kind": "constant",
        "signature": "CHUNK_NETWORK_PROTOCOL",
        "summary": "Versioned multiplayer chunk synchronization with legacy read compatibility. V1 remains the write format during the expand phase. V1, V2, and the original unversioned response shape can be read, allowing rolling upgrades without relabelling or discarding old traffic."
      },
      {
        "name": "CHUNK_NETWORK_WRITE_PROTOCOL",
        "kind": "constant",
        "signature": "CHUNK_NETWORK_WRITE_PROTOCOL",
        "summary": ""
      },
      {
        "name": "CHUNK_NETWORK_READ_PROTOCOLS",
        "kind": "constant",
        "signature": "CHUNK_NETWORK_READ_PROTOCOLS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/storage/ChunkPersistence",
    "path": "engine/reference/world/storage/ChunkPersistence.md",
    "source": "engine/world/storage/ChunkPersistence.js",
    "import": "/engine/world/storage/ChunkPersistence.js",
    "sourceHash": "9d34635279d071c568a6c830f4327065a580235a2391827b3f05482795f9b0c4",
    "summary": "ChunkPersistence.js - Chunk Save/Load System Manages chunk persistence with: - Multiple save formats (binary, JSON, compressed) - Delta saves (only modified blocks) - Auto-save with configurable interval - Backup management",
    "exports": [
      {
        "name": "ChunkPersistence",
        "kind": "class",
        "signature": "class ChunkPersistence",
        "summary": ""
      },
      {
        "name": "chunkPersistenceCurrentKey",
        "kind": "function",
        "signature": "chunkPersistenceCurrentKey(legacyKey)",
        "summary": ""
      },
      {
        "name": "prepareChunkPersistenceRecord",
        "kind": "function",
        "signature": "prepareChunkPersistenceRecord(record)",
        "summary": "Validate one exact v1/v2 chunk record without manufacturing an upcast."
      },
      {
        "name": "CHUNK_PERSISTENCE_DB_NAME",
        "kind": "constant",
        "signature": "CHUNK_PERSISTENCE_DB_NAME",
        "summary": "ChunkPersistence.js - Chunk Save/Load System Manages chunk persistence with: - Multiple save formats (binary, JSON, compressed) - Delta saves (only modified blocks) - Auto-save with configurable interval - Backup management"
      },
      {
        "name": "CHUNK_PERSISTENCE_STORE_NAME",
        "kind": "constant",
        "signature": "CHUNK_PERSISTENCE_STORE_NAME",
        "summary": ""
      },
      {
        "name": "CHUNK_PERSISTENCE_RECORD_SCHEMA",
        "kind": "constant",
        "signature": "CHUNK_PERSISTENCE_RECORD_SCHEMA",
        "summary": ""
      },
      {
        "name": "CHUNK_PERSISTENCE_RECORD_VERSION",
        "kind": "constant",
        "signature": "CHUNK_PERSISTENCE_RECORD_VERSION",
        "summary": ""
      },
      {
        "name": "CHUNK_PERSISTENCE_RECORD_LIMITS",
        "kind": "constant",
        "signature": "CHUNK_PERSISTENCE_RECORD_LIMITS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/storage/ChunkSerializer",
    "path": "engine/reference/world/storage/ChunkSerializer.md",
    "source": "engine/world/storage/ChunkSerializer.js",
    "import": "/engine/world/storage/ChunkSerializer.js",
    "sourceHash": "743165cb7c7d8333cb429a44e554fa7d551e4fb08c60820c68ccfd017e97d223",
    "summary": "Serialize complete chunk state",
    "exports": [
      {
        "name": "serializeChunk",
        "kind": "function",
        "signature": "serializeChunk(chunk, options = {})",
        "summary": "Serialize complete chunk state"
      },
      {
        "name": "deserializeChunk",
        "kind": "function",
        "signature": "deserializeChunk(data, options = {})",
        "summary": "Deserialize chunk from binary data"
      },
      {
        "name": "applyDelta",
        "kind": "function",
        "signature": "applyDelta(voxels, modifications, forward = true)",
        "summary": "Apply delta modifications to voxel array"
      },
      {
        "name": "chunkKey",
        "kind": "function",
        "signature": "chunkKey(x, y, z)",
        "summary": "Create chunk key from coordinates"
      },
      {
        "name": "parseChunkKey",
        "kind": "function",
        "signature": "parseChunkKey(key)",
        "summary": "Parse chunk key to coordinates"
      },
      {
        "name": "estimateChunkSize",
        "kind": "function",
        "signature": "estimateChunkSize(chunk)",
        "summary": "Get serialized chunk size estimate"
      },
      {
        "name": "BinaryReader",
        "kind": "re-export",
        "signature": "BinaryReader",
        "summary": ""
      },
      {
        "name": "BinaryWriter",
        "kind": "re-export",
        "signature": "BinaryWriter",
        "summary": ""
      },
      {
        "name": "CHUNK_MAGIC",
        "kind": "re-export",
        "signature": "CHUNK_MAGIC",
        "summary": ""
      },
      {
        "name": "CHUNK_SIZE",
        "kind": "re-export",
        "signature": "CHUNK_SIZE",
        "summary": ""
      },
      {
        "name": "CHUNK_VERSION",
        "kind": "re-export",
        "signature": "CHUNK_VERSION",
        "summary": ""
      },
      {
        "name": "SECTION_DELTA",
        "kind": "re-export",
        "signature": "SECTION_DELTA",
        "summary": ""
      },
      {
        "name": "SECTION_ENTITIES",
        "kind": "re-export",
        "signature": "SECTION_ENTITIES",
        "summary": ""
      },
      {
        "name": "SECTION_METADATA",
        "kind": "re-export",
        "signature": "SECTION_METADATA",
        "summary": ""
      },
      {
        "name": "SECTION_VOXELS",
        "kind": "re-export",
        "signature": "SECTION_VOXELS",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/storage/DiskMeshCache",
    "path": "engine/reference/world/storage/DiskMeshCache.md",
    "source": "engine/world/storage/DiskMeshCache.js",
    "import": "/engine/world/storage/DiskMeshCache.js",
    "sourceHash": "5021b6f614bfb706f7e822a9c2f3422001ce932762fd436a4f93549a13bf805c",
    "summary": "DiskMeshCache - IndexedDB-backed mesh cache",
    "exports": [
      {
        "name": "DiskMeshCache",
        "kind": "class",
        "signature": "class DiskMeshCache",
        "summary": "DiskMeshCache - IndexedDB-backed mesh cache"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/storage/PaletteCompression",
    "path": "engine/reference/world/storage/PaletteCompression.md",
    "source": "engine/world/storage/PaletteCompression.js",
    "import": "/engine/world/storage/PaletteCompression.js",
    "sourceHash": "750016fa3bddc5a36be2fa1044ab892491e82f7857726a16e2d6739ae7668f58",
    "summary": "CompressedChunk - Palette-compressed voxel storage",
    "exports": [
      {
        "name": "CompressedChunk",
        "kind": "class",
        "signature": "class CompressedChunk",
        "summary": "CompressedChunk - Palette-compressed voxel storage"
      },
      {
        "name": "ChunkCompressor",
        "kind": "class",
        "signature": "class ChunkCompressor",
        "summary": "ChunkCompressor - Manages compression for multiple chunks"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/storage/RLECompression",
    "path": "engine/reference/world/storage/RLECompression.md",
    "source": "engine/world/storage/RLECompression.js",
    "import": "/engine/world/storage/RLECompression.js",
    "sourceHash": "50a0b8b05348f22bf2baa074fac33f84c550e74b68cbded69c2b435b439bfcf8",
    "summary": "RLEChunkCompressor - RLE compression for entire chunks",
    "exports": [
      {
        "name": "RLEChunkCompressor",
        "kind": "class",
        "signature": "class RLEChunkCompressor",
        "summary": "RLEChunkCompressor - RLE compression for entire chunks"
      },
      {
        "name": "HybridChunkCompressor",
        "kind": "class",
        "signature": "class HybridChunkCompressor",
        "summary": "Hybrid compression: Palette + RLE First applies palette compression, then RLE on the indices"
      },
      {
        "name": "encodeColumn",
        "kind": "function",
        "signature": "encodeColumn(column)",
        "summary": "Encode a single column using RLE"
      },
      {
        "name": "decodeColumn",
        "kind": "function",
        "signature": "decodeColumn(encoded, expectedLength)",
        "summary": "Decode RLE column back to raw data"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/storage/RegionFile",
    "path": "engine/reference/world/storage/RegionFile.md",
    "source": "engine/world/storage/RegionFile.js",
    "import": "/engine/world/storage/RegionFile.js",
    "sourceHash": "627dbc93c47116f1bb9c9969d734b0a2ed1f849f6c99d9867224043ed72a8b9e",
    "summary": "RegionFile - Manages a single region file containing 32x32 chunks",
    "exports": [
      {
        "name": "RegionFile",
        "kind": "class",
        "signature": "class RegionFile",
        "summary": "RegionFile - Manages a single region file containing 32x32 chunks"
      },
      {
        "name": "RegionManager",
        "kind": "class",
        "signature": "class RegionManager",
        "summary": "RegionManager - High-level interface for region-based chunk storage"
      },
      {
        "name": "CHUNKS_PER_REGION",
        "kind": "re-export",
        "signature": "CHUNKS_PER_REGION",
        "summary": ""
      },
      {
        "name": "HEADER_SIZE",
        "kind": "re-export",
        "signature": "HEADER_SIZE",
        "summary": ""
      },
      {
        "name": "REGION_SIZE",
        "kind": "re-export",
        "signature": "REGION_SIZE",
        "summary": ""
      },
      {
        "name": "SECTOR_SIZE",
        "kind": "re-export",
        "signature": "SECTOR_SIZE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/storage/StorageBackends",
    "path": "engine/reference/world/storage/StorageBackends.md",
    "source": "engine/world/storage/StorageBackends.js",
    "import": "/engine/world/storage/StorageBackends.js",
    "sourceHash": "07a737f0a493661e3c9cae5d3366c220450da56323de49d97fab68397dad80ae",
    "summary": "StorageBackends.js - Storage backend implementations Extracted from WorldStorage.js for modularity Includes: - OPFSBackend (Origin Private File System) - IndexedDBBackend (fallback) - FileSystemBackend (user-selected folder)",
    "exports": [
      {
        "name": "OPFSBackend",
        "kind": "class",
        "signature": "class OPFSBackend",
        "summary": ""
      },
      {
        "name": "IndexedDBBackend",
        "kind": "class",
        "signature": "class IndexedDBBackend",
        "summary": ""
      },
      {
        "name": "FileSystemBackend",
        "kind": "class",
        "signature": "class FileSystemBackend",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/storage/VoxelCompression",
    "path": "engine/reference/world/storage/VoxelCompression.md",
    "source": "engine/world/storage/VoxelCompression.js",
    "import": "/engine/world/storage/VoxelCompression.js",
    "sourceHash": "41f9a055eaf626355857e641a7045244c0921782ca8844970cdadb3c3335df0d",
    "summary": "Calculate CRC32 checksum",
    "exports": [
      {
        "name": "crc32",
        "kind": "function",
        "signature": "crc32(data)",
        "summary": "Calculate CRC32 checksum"
      },
      {
        "name": "verifyCRC32",
        "kind": "function",
        "signature": "verifyCRC32(data, expectedCRC)",
        "summary": "Verify data integrity"
      },
      {
        "name": "encodeMorton3D",
        "kind": "function",
        "signature": "encodeMorton3D(x, y, z)",
        "summary": "Encode 3D coordinates to Morton code (Z-order)"
      },
      {
        "name": "decodeMorton3D",
        "kind": "function",
        "signature": "decodeMorton3D(morton)",
        "summary": "Decode Morton code to 3D coordinates"
      },
      {
        "name": "generateMortonIndices",
        "kind": "function",
        "signature": "generateMortonIndices(size)",
        "summary": "Generate Morton-order traversal indices for a cubic chunk"
      },
      {
        "name": "getMortonIndices",
        "kind": "function",
        "signature": "getMortonIndices(size)",
        "summary": "Get cached Morton indices for chunk size"
      },
      {
        "name": "linearToMorton",
        "kind": "function",
        "signature": "linearToMorton(data, size)",
        "summary": "Reorder voxel data from linear to Morton order"
      },
      {
        "name": "mortonToLinear",
        "kind": "function",
        "signature": "mortonToLinear(data, size)",
        "summary": "Reorder voxel data from Morton to linear order"
      },
      {
        "name": "buildPalette",
        "kind": "function",
        "signature": "buildPalette(data)",
        "summary": "Build palette from voxel data"
      },
      {
        "name": "bitsForPalette",
        "kind": "function",
        "signature": "bitsForPalette(paletteSize)",
        "summary": "Calculate bits needed for palette size"
      },
      {
        "name": "paletteCompress",
        "kind": "function",
        "signature": "paletteCompress(data)",
        "summary": "Compress voxels using palette compression"
      },
      {
        "name": "paletteDecompress",
        "kind": "function",
        "signature": "paletteDecompress(palette, bits, packed, count)",
        "summary": "Decompress palette-compressed data"
      },
      {
        "name": "rleEncode",
        "kind": "function",
        "signature": "rleEncode(data)",
        "summary": "RLE compress data (auto-trigger: only encodes when beneficial) Format: Literal: byte (if byte != ESCAPE) Escape:  ESCAPE, 0, ESCAPE (literal escape byte) Run:     ESCAPE, count-3, value (run of count bytes)"
      },
      {
        "name": "rleDecode",
        "kind": "function",
        "signature": "rleDecode(data)",
        "summary": "RLE decompress data"
      },
      {
        "name": "compressChunk",
        "kind": "function",
        "signature": "compressChunk(voxels, chunkSize = 32)",
        "summary": "Full compression pipeline for voxel chunk Pipeline: Morton → Palette → RLE"
      },
      {
        "name": "decompressChunk",
        "kind": "function",
        "signature": "decompressChunk(compressed, chunkSize = 32)",
        "summary": "Decompress voxel chunk"
      },
      {
        "name": "encodeDelta",
        "kind": "function",
        "signature": "encodeDelta(modifications)",
        "summary": "Encode chunk modifications as delta"
      },
      {
        "name": "decodeDelta",
        "kind": "function",
        "signature": "decodeDelta(data)",
        "summary": "Decode delta modifications"
      },
      {
        "name": "compressionStats",
        "kind": "function",
        "signature": "compressionStats(original, compressed)",
        "summary": "Create a compression statistics report"
      },
      {
        "name": "testRoundtrip",
        "kind": "function",
        "signature": "testRoundtrip(data, chunkSize = 32)",
        "summary": "Test compression roundtrip"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/storage/WorldStorage",
    "path": "engine/reference/world/storage/WorldStorage.md",
    "source": "engine/world/storage/WorldStorage.js",
    "import": "/engine/world/storage/WorldStorage.js",
    "sourceHash": "ef1f8bb02d3f28a4769b5aca365b9846e675ce5f240b3307c0131670c9e9b5ac",
    "summary": "WorldStorage - Main API for world persistence",
    "exports": [
      {
        "name": "WorldStorage",
        "kind": "class",
        "signature": "class WorldStorage",
        "summary": "WorldStorage - Main API for world persistence"
      },
      {
        "name": "validateWorldMetadata",
        "kind": "function",
        "signature": "validateWorldMetadata(metadata)",
        "summary": "Validate decoded world metadata without mutating it."
      },
      {
        "name": "parseWorldWalHeader",
        "kind": "function",
        "signature": "parseWorldWalHeader(data)",
        "summary": "Parse and validate a WAL header without mutating or persisting the input."
      },
      {
        "name": "parseWorldWal",
        "kind": "function",
        "signature": "parseWorldWal(data)",
        "summary": "Strictly parse and validate an entire WAL before any recovery mutation."
      },
      {
        "name": "WORLD_METADATA_VERSION",
        "kind": "constant",
        "signature": "WORLD_METADATA_VERSION",
        "summary": ""
      },
      {
        "name": "WORLD_WAL_VERSION",
        "kind": "constant",
        "signature": "WORLD_WAL_VERSION",
        "summary": ""
      },
      {
        "name": "FileSystemBackend",
        "kind": "re-export",
        "signature": "FileSystemBackend",
        "summary": ""
      },
      {
        "name": "IndexedDBBackend",
        "kind": "re-export",
        "signature": "IndexedDBBackend",
        "summary": ""
      },
      {
        "name": "OPFSBackend",
        "kind": "re-export",
        "signature": "OPFSBackend",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/storage/index",
    "path": "engine/reference/world/storage/index.md",
    "source": "engine/world/storage/index.js",
    "import": "/engine/world/storage/index.js",
    "sourceHash": "5c786ce5433a94c03856e517e78fb39f913f4b499220ac17b137b3597be6c001",
    "summary": "",
    "exports": [
      {
        "name": "BinaryReader",
        "kind": "re-export",
        "signature": "BinaryReader",
        "summary": ""
      },
      {
        "name": "BinaryWriter",
        "kind": "re-export",
        "signature": "BinaryWriter",
        "summary": ""
      },
      {
        "name": "CHUNK_NETWORK_PROTOCOL",
        "kind": "re-export",
        "signature": "CHUNK_NETWORK_PROTOCOL",
        "summary": ""
      },
      {
        "name": "CHUNK_NETWORK_READ_PROTOCOLS",
        "kind": "re-export",
        "signature": "CHUNK_NETWORK_READ_PROTOCOLS",
        "summary": ""
      },
      {
        "name": "CHUNK_NETWORK_WRITE_PROTOCOL",
        "kind": "re-export",
        "signature": "CHUNK_NETWORK_WRITE_PROTOCOL",
        "summary": ""
      },
      {
        "name": "ChunkCompressor",
        "kind": "re-export",
        "signature": "ChunkCompressor",
        "summary": ""
      },
      {
        "name": "ChunkNetworking",
        "kind": "re-export",
        "signature": "ChunkNetworking",
        "summary": ""
      },
      {
        "name": "ChunkPersistence",
        "kind": "re-export",
        "signature": "ChunkPersistence",
        "summary": ""
      },
      {
        "name": "CompressedChunk",
        "kind": "re-export",
        "signature": "CompressedChunk",
        "summary": ""
      },
      {
        "name": "DiskMeshCache",
        "kind": "re-export",
        "signature": "DiskMeshCache",
        "summary": ""
      },
      {
        "name": "HybridChunkCompressor",
        "kind": "re-export",
        "signature": "HybridChunkCompressor",
        "summary": ""
      },
      {
        "name": "RLEChunkCompressor",
        "kind": "re-export",
        "signature": "RLEChunkCompressor",
        "summary": ""
      },
      {
        "name": "RegionFile",
        "kind": "re-export",
        "signature": "RegionFile",
        "summary": ""
      },
      {
        "name": "RegionManager",
        "kind": "re-export",
        "signature": "RegionManager",
        "summary": ""
      },
      {
        "name": "WORLD_METADATA_VERSION",
        "kind": "re-export",
        "signature": "WORLD_METADATA_VERSION",
        "summary": ""
      },
      {
        "name": "WORLD_WAL_VERSION",
        "kind": "re-export",
        "signature": "WORLD_WAL_VERSION",
        "summary": ""
      },
      {
        "name": "WorldStorage",
        "kind": "re-export",
        "signature": "WorldStorage",
        "summary": ""
      },
      {
        "name": "applyDelta",
        "kind": "re-export",
        "signature": "applyDelta",
        "summary": ""
      },
      {
        "name": "chunkKey",
        "kind": "re-export",
        "signature": "chunkKey",
        "summary": ""
      },
      {
        "name": "compressChunk",
        "kind": "re-export",
        "signature": "compressChunk",
        "summary": ""
      },
      {
        "name": "crc32",
        "kind": "re-export",
        "signature": "crc32",
        "summary": ""
      },
      {
        "name": "decodeColumn",
        "kind": "re-export",
        "signature": "decodeColumn",
        "summary": ""
      },
      {
        "name": "decompressChunk",
        "kind": "re-export",
        "signature": "decompressChunk",
        "summary": ""
      },
      {
        "name": "deserializeChunk",
        "kind": "re-export",
        "signature": "deserializeChunk",
        "summary": ""
      },
      {
        "name": "encodeColumn",
        "kind": "re-export",
        "signature": "encodeColumn",
        "summary": ""
      },
      {
        "name": "estimateChunkSize",
        "kind": "re-export",
        "signature": "estimateChunkSize",
        "summary": ""
      },
      {
        "name": "linearToMorton",
        "kind": "re-export",
        "signature": "linearToMorton",
        "summary": ""
      },
      {
        "name": "mortonToLinear",
        "kind": "re-export",
        "signature": "mortonToLinear",
        "summary": ""
      },
      {
        "name": "parseChunkKey",
        "kind": "re-export",
        "signature": "parseChunkKey",
        "summary": ""
      },
      {
        "name": "parseWorldWal",
        "kind": "re-export",
        "signature": "parseWorldWal",
        "summary": ""
      },
      {
        "name": "parseWorldWalHeader",
        "kind": "re-export",
        "signature": "parseWorldWalHeader",
        "summary": ""
      },
      {
        "name": "serializeChunk",
        "kind": "re-export",
        "signature": "serializeChunk",
        "summary": ""
      },
      {
        "name": "validateWorldMetadata",
        "kind": "re-export",
        "signature": "validateWorldMetadata",
        "summary": ""
      },
      {
        "name": "verifyCRC32",
        "kind": "re-export",
        "signature": "verifyCRC32",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/streaming/AdaptiveChunkBudget",
    "path": "engine/reference/world/streaming/AdaptiveChunkBudget.md",
    "source": "engine/world/streaming/AdaptiveChunkBudget.js",
    "import": "/engine/world/streaming/AdaptiveChunkBudget.js",
    "sourceHash": "fa0743b289d2fc94ed406f933a94278d6c6bb69573e456b586efebe9de3d2e76",
    "summary": "AdaptiveChunkBudget.js - Self-optimizing chunk memory management Uses PID-style control with EMA smoothing for smooth, responsive adaptation. Based on game engine best practices for adaptive performance.",
    "exports": [
      {
        "name": "AdaptiveChunkBudget",
        "kind": "class",
        "signature": "class AdaptiveChunkBudget",
        "summary": "AdaptiveChunkBudget.js - Self-optimizing chunk memory management Uses PID-style control with EMA smoothing for smooth, responsive adaptation. Based on game engine best practices for adaptive performance."
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/streaming/ChunkHistory",
    "path": "engine/reference/world/streaming/ChunkHistory.md",
    "source": "engine/world/streaming/ChunkHistory.js",
    "import": "/engine/world/streaming/ChunkHistory.js",
    "sourceHash": "34e69343ed87f14cc464ac7b53ea16b61a0d46521011e585120051ca4556f78d",
    "summary": "HistoryManager - Global history management",
    "exports": [
      {
        "name": "HistoryManager",
        "kind": "class",
        "signature": "class HistoryManager",
        "summary": "HistoryManager - Global history management"
      },
      {
        "name": "ChunkHistory",
        "kind": "re-export",
        "signature": "ChunkHistory",
        "summary": ""
      },
      {
        "name": "ChunkSnapshot",
        "kind": "re-export",
        "signature": "ChunkSnapshot",
        "summary": ""
      },
      {
        "name": "EntityDespawnOperation",
        "kind": "re-export",
        "signature": "EntityDespawnOperation",
        "summary": ""
      },
      {
        "name": "EntityMoveOperation",
        "kind": "re-export",
        "signature": "EntityMoveOperation",
        "summary": ""
      },
      {
        "name": "EntitySpawnOperation",
        "kind": "re-export",
        "signature": "EntitySpawnOperation",
        "summary": ""
      },
      {
        "name": "FillOperation",
        "kind": "re-export",
        "signature": "FillOperation",
        "summary": ""
      },
      {
        "name": "OP_ENTITY_DESPAWN",
        "kind": "re-export",
        "signature": "OP_ENTITY_DESPAWN",
        "summary": ""
      },
      {
        "name": "OP_ENTITY_MOVE",
        "kind": "re-export",
        "signature": "OP_ENTITY_MOVE",
        "summary": ""
      },
      {
        "name": "OP_ENTITY_SPAWN",
        "kind": "re-export",
        "signature": "OP_ENTITY_SPAWN",
        "summary": ""
      },
      {
        "name": "OP_VOXEL_FILL",
        "kind": "re-export",
        "signature": "OP_VOXEL_FILL",
        "summary": ""
      },
      {
        "name": "OP_VOXEL_SET",
        "kind": "re-export",
        "signature": "OP_VOXEL_SET",
        "summary": ""
      },
      {
        "name": "VoxelOperation",
        "kind": "re-export",
        "signature": "VoxelOperation",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/streaming/ChunkJobCoordinator",
    "path": "engine/reference/world/streaming/ChunkJobCoordinator.md",
    "source": "engine/world/streaming/ChunkJobCoordinator.js",
    "import": "/engine/world/streaming/ChunkJobCoordinator.js",
    "sourceHash": "882f2a5255d1d84897a4b5b01a871c9568129a88538c7eaa4e9dc7a7e96731c5",
    "summary": "Encode 3D coordinates to Morton code (Z-order curve) Preserves spatial locality for cache-friendly iteration",
    "exports": [
      {
        "name": "ChunkJobCoordinator",
        "kind": "class",
        "signature": "class ChunkJobCoordinator",
        "summary": ""
      },
      {
        "name": "encodeMorton3D",
        "kind": "function",
        "signature": "encodeMorton3D(x, y, z)",
        "summary": "Encode 3D coordinates to Morton code (Z-order curve) Preserves spatial locality for cache-friendly iteration"
      },
      {
        "name": "decodeMorton3D",
        "kind": "function",
        "signature": "decodeMorton3D(morton)",
        "summary": "Decode Morton code back to 3D coordinates"
      },
      {
        "name": "mortonBigmin",
        "kind": "function",
        "signature": "mortonBigmin(current, minMorton, maxMorton)",
        "summary": "BIGMIN optimization: Find next Morton code inside query box Skips irrelevant ranges when iterating Morton-ordered data"
      },
      {
        "name": "JOB_STATE",
        "kind": "constant",
        "signature": "JOB_STATE",
        "summary": "ChunkJobCoordinator.js - Central Job Assignment for Chunk Loading Prevents duplicate chunk loads across multiple systems: - PriorityChunkLoader - ChunkStreaming - ChunkStreamingCompute - ChunkManager.updateStreaming Single source of truth for chunk job state."
      },
      {
        "name": "JOB_SOURCE",
        "kind": "constant",
        "signature": "JOB_SOURCE",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/streaming/ChunkLoadingZone",
    "path": "engine/reference/world/streaming/ChunkLoadingZone.md",
    "source": "engine/world/streaming/ChunkLoadingZone.js",
    "import": "/engine/world/streaming/ChunkLoadingZone.js",
    "sourceHash": "41f454ca900c2455cb6eed2c612f1d2edb864a6a84b759f311f61101e39310bd",
    "summary": "ChunkLoadingZone - Manages player movement boundaries",
    "exports": [
      {
        "name": "ChunkLoadingZone",
        "kind": "class",
        "signature": "class ChunkLoadingZone",
        "summary": "ChunkLoadingZone - Manages player movement boundaries"
      },
      {
        "name": "ZONE_STATE",
        "kind": "constant",
        "signature": "ZONE_STATE",
        "summary": "ChunkLoadingZone.js - Virtual Buffer Wall System Prevents players from advancing past unloaded terrain. Creates an invisible barrier at the edge of generated chunks. Benefits: - Players never see unloaded terrain - Prevents falling through world - Smooth loading experience - Configurable buffer distance Zones: - SAFE: Fully loaded, player can move freely - BUFFER: Loading in progress, soft warning - BARRIER: Not yet loaded, cannot pass"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/streaming/ChunkSeamSystem",
    "path": "engine/reference/world/streaming/ChunkSeamSystem.md",
    "source": "engine/world/streaming/ChunkSeamSystem.js",
    "import": "/engine/world/streaming/ChunkSeamSystem.js",
    "sourceHash": "d165baf1694e2f814db2f61804919fc63d27f0d924a038c40d59750ed0636d57",
    "summary": "",
    "exports": [
      {
        "name": "ChunkSeamSystem",
        "kind": "class",
        "signature": "class ChunkSeamSystem",
        "summary": ""
      },
      {
        "name": "chunkSeamStructureHash3D",
        "kind": "function",
        "signature": "chunkSeamStructureHash3D(x, y, z)",
        "summary": ""
      },
      {
        "name": "chunkSeamSeededStructureHash3D",
        "kind": "function",
        "signature": "chunkSeamSeededStructureHash3D(x, y, z, seed)",
        "summary": ""
      },
      {
        "name": "chunkSeamChunkSeed3D",
        "kind": "function",
        "signature": "chunkSeamChunkSeed3D(cx, cy, cz, seed = 0)",
        "summary": ""
      },
      {
        "name": "chunkSeamPositionSeed3D",
        "kind": "function",
        "signature": "chunkSeamPositionSeed3D(x, y, z, seed = 0)",
        "summary": ""
      },
      {
        "name": "CHUNK_SIZE",
        "kind": "constant",
        "signature": "CHUNK_SIZE",
        "summary": ""
      },
      {
        "name": "StructureType",
        "kind": "constant",
        "signature": "StructureType",
        "summary": ""
      },
      {
        "name": "GenerationPhase",
        "kind": "constant",
        "signature": "GenerationPhase",
        "summary": ""
      },
      {
        "name": "GenerationPhaseNames",
        "kind": "constant",
        "signature": "GenerationPhaseNames",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/streaming/ChunkStreaming",
    "path": "engine/reference/world/streaming/ChunkStreaming.md",
    "source": "engine/world/streaming/ChunkStreaming.js",
    "import": "/engine/world/streaming/ChunkStreaming.js",
    "sourceHash": "23b7684476399fbbeae7d5ca0125a263a7ffa0939e9175962a19e61d936ba920",
    "summary": "",
    "exports": [
      {
        "name": "ChunkStreaming",
        "kind": "class",
        "signature": "class ChunkStreaming",
        "summary": ""
      },
      {
        "name": "LoadRequestRingBuffer",
        "kind": "re-export",
        "signature": "LoadRequestRingBuffer",
        "summary": ""
      },
      {
        "name": "PRIORITY_BUCKET",
        "kind": "re-export",
        "signature": "PRIORITY_BUCKET",
        "summary": ""
      },
      {
        "name": "PriorityBucketQueue",
        "kind": "re-export",
        "signature": "PriorityBucketQueue",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/streaming/ChunkStreamingCompute",
    "path": "engine/reference/world/streaming/ChunkStreamingCompute.md",
    "source": "engine/world/streaming/ChunkStreamingCompute.js",
    "import": "/engine/world/streaming/ChunkStreamingCompute.js",
    "sourceHash": "1f069143c15af5ef143d4ad4a903f038b83af9e70e4bafa05527c56d075bf239",
    "summary": "",
    "exports": [
      {
        "name": "ChunkStreamingCompute",
        "kind": "class",
        "signature": "class ChunkStreamingCompute",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/streaming/ChunkUpdater",
    "path": "engine/reference/world/streaming/ChunkUpdater.md",
    "source": "engine/world/streaming/ChunkUpdater.js",
    "import": "/engine/world/streaming/ChunkUpdater.js",
    "sourceHash": "97a2b58703cf213e0584942352b7203320d4dea337bdf15a66a09fc768b922e8",
    "summary": "ChunkUpdater.js - Block Update Queue Manager Manages block updates with: - Rate-limited updates per frame - Propagation for lighting/physics - Lazy update batching - Update coalescing",
    "exports": [
      {
        "name": "ChunkUpdater",
        "kind": "class",
        "signature": "class ChunkUpdater",
        "summary": "ChunkUpdater.js - Block Update Queue Manager Manages block updates with: - Rate-limited updates per frame - Propagation for lighting/physics - Lazy update batching - Update coalescing"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/streaming/ChunkWorkerPool",
    "path": "engine/reference/world/streaming/ChunkWorkerPool.md",
    "source": "engine/world/streaming/ChunkWorkerPool.js",
    "import": "/engine/world/streaming/ChunkWorkerPool.js",
    "sourceHash": "1fe165dae01978a20090a514b909533803768dc193edefb39c957bbe359fd421",
    "summary": "ChunkWorkerPool - Manages a pool of Web Workers",
    "exports": [
      {
        "name": "ChunkWorkerPool",
        "kind": "class",
        "signature": "class ChunkWorkerPool",
        "summary": "ChunkWorkerPool - Manages a pool of Web Workers"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/streaming/MovementPredictor",
    "path": "engine/reference/world/streaming/MovementPredictor.md",
    "source": "engine/world/streaming/MovementPredictor.js",
    "import": "/engine/world/streaming/MovementPredictor.js",
    "sourceHash": "5909954d382479d379d31a5c008787d2b1512077450318dbb0d6c9be049f043d",
    "summary": "MovementPredictor - Predicts player movement for chunk prefetch",
    "exports": [
      {
        "name": "MovementPredictor",
        "kind": "class",
        "signature": "class MovementPredictor",
        "summary": "MovementPredictor - Predicts player movement for chunk prefetch"
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/streaming/PriorityChunkLoader",
    "path": "engine/reference/world/streaming/PriorityChunkLoader.md",
    "source": "engine/world/streaming/PriorityChunkLoader.js",
    "import": "/engine/world/streaming/PriorityChunkLoader.js",
    "sourceHash": "8189ea16c5303551bcd68271c0ac3fd1d1f1824b076d1008983a0be0b61cacdf",
    "summary": "PriorityChunkLoader.js - Distance-Based Chunk Loading Loads chunks in order from closest to player outward. Uses spiral/ring pattern for optimal loading experience. Benefits: - Player sees nearby terrain first - Smooth loading experience - Efficient resource usage - Integrates with ChunkLoadingZone Patterns: - SPIRAL: Classic spiral from center - RINGS: Concentric rings outward - DIRECTIONAL: Prioritize direction player is facing",
    "exports": [
      {
        "name": "PriorityChunkLoader",
        "kind": "class",
        "signature": "class PriorityChunkLoader",
        "summary": "PriorityChunkLoader - Manages chunk load ordering"
      },
      {
        "name": "LOAD_PATTERN",
        "kind": "constant",
        "signature": "LOAD_PATTERN",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/streaming/ProgressiveChunkLoader",
    "path": "engine/reference/world/streaming/ProgressiveChunkLoader.md",
    "source": "engine/world/streaming/ProgressiveChunkLoader.js",
    "import": "/engine/world/streaming/ProgressiveChunkLoader.js",
    "sourceHash": "c4984eadc4925c4de53320d7f67b89cab5e98c32eccef3b0a7f34dad88e08bc7",
    "summary": "ProgressiveChunkLoader - Manages progressive LOD loading",
    "exports": [
      {
        "name": "ProgressiveChunkLoader",
        "kind": "class",
        "signature": "class ProgressiveChunkLoader",
        "summary": "ProgressiveChunkLoader - Manages progressive LOD loading"
      },
      {
        "name": "ChunkRefinementState",
        "kind": "re-export",
        "signature": "ChunkRefinementState",
        "summary": ""
      },
      {
        "name": "PROGRESSIVE_LEVELS",
        "kind": "re-export",
        "signature": "PROGRESSIVE_LEVELS",
        "summary": ""
      },
      {
        "name": "REFINEMENT_DISTANCES",
        "kind": "re-export",
        "signature": "REFINEMENT_DISTANCES",
        "summary": ""
      }
    ]
  },
  {
    "schemaVersion": 1,
    "title": "world/streaming/index",
    "path": "engine/reference/world/streaming/index.md",
    "source": "engine/world/streaming/index.js",
    "import": "/engine/world/streaming/index.js",
    "sourceHash": "bfbb67b412b7038332453acf22c1df99216cb51645e5fc9db94cc98932cb00ba",
    "summary": "",
    "exports": [
      {
        "name": "AdaptiveChunkBudget",
        "kind": "re-export",
        "signature": "AdaptiveChunkBudget",
        "summary": ""
      },
      {
        "name": "ChunkHistory",
        "kind": "re-export",
        "signature": "ChunkHistory",
        "summary": ""
      },
      {
        "name": "ChunkJobCoordinator",
        "kind": "re-export",
        "signature": "ChunkJobCoordinator",
        "summary": ""
      },
      {
        "name": "ChunkLoadingZone",
        "kind": "re-export",
        "signature": "ChunkLoadingZone",
        "summary": ""
      },
      {
        "name": "ChunkSeamSystem",
        "kind": "re-export",
        "signature": "ChunkSeamSystem",
        "summary": ""
      },
      {
        "name": "ChunkStreamer",
        "kind": "re-export",
        "signature": "ChunkStreamer",
        "summary": ""
      },
      {
        "name": "ChunkStreaming",
        "kind": "re-export",
        "signature": "ChunkStreaming",
        "summary": ""
      },
      {
        "name": "ChunkStreamingCompute",
        "kind": "re-export",
        "signature": "ChunkStreamingCompute",
        "summary": ""
      },
      {
        "name": "ChunkUpdater",
        "kind": "re-export",
        "signature": "ChunkUpdater",
        "summary": ""
      },
      {
        "name": "ChunkWorkerPool",
        "kind": "re-export",
        "signature": "ChunkWorkerPool",
        "summary": ""
      },
      {
        "name": "GenerationPhase",
        "kind": "re-export",
        "signature": "GenerationPhase",
        "summary": ""
      },
      {
        "name": "HistoryManager",
        "kind": "re-export",
        "signature": "HistoryManager",
        "summary": ""
      },
      {
        "name": "JOB_SOURCE",
        "kind": "re-export",
        "signature": "JOB_SOURCE",
        "summary": ""
      },
      {
        "name": "JOB_STATE",
        "kind": "re-export",
        "signature": "JOB_STATE",
        "summary": ""
      },
      {
        "name": "LOAD_PATTERN",
        "kind": "re-export",
        "signature": "LOAD_PATTERN",
        "summary": ""
      },
      {
        "name": "LoadRequestRingBuffer",
        "kind": "re-export",
        "signature": "LoadRequestRingBuffer",
        "summary": ""
      },
      {
        "name": "MovementPredictor",
        "kind": "re-export",
        "signature": "MovementPredictor",
        "summary": ""
      },
      {
        "name": "PRIORITY_BUCKET",
        "kind": "re-export",
        "signature": "PRIORITY_BUCKET",
        "summary": ""
      },
      {
        "name": "PriorityBucketQueue",
        "kind": "re-export",
        "signature": "PriorityBucketQueue",
        "summary": ""
      },
      {
        "name": "PriorityChunkLoader",
        "kind": "re-export",
        "signature": "PriorityChunkLoader",
        "summary": ""
      },
      {
        "name": "ProgressiveChunkLoader",
        "kind": "re-export",
        "signature": "ProgressiveChunkLoader",
        "summary": ""
      },
      {
        "name": "StructureType",
        "kind": "re-export",
        "signature": "StructureType",
        "summary": ""
      },
      {
        "name": "ZONE_STATE",
        "kind": "re-export",
        "signature": "ZONE_STATE",
        "summary": ""
      }
    ]
  }
]